<feed xmlns='http://www.w3.org/2005/Atom'>
<title>st, branch 0.9.1</title>
<subtitle>st fork - https://st.suckless.org/</subtitle>
<link rel='alternate' type='text/html' href='http://normalmode.org/malf/x/st/'/>
<entry>
<title>bump version to 0.9.1</title>
<updated>2024-03-19T11:13:42+00:00</updated>
<author>
<name>Hiltjo Posthuma</name>
<email>hiltjo@codemadness.org</email>
</author>
<published>2024-03-19T11:13:42+00:00</published>
<link rel='alternate' type='text/html' href='http://normalmode.org/malf/x/st/commit/?id=5ce971628106fb767ef91bf4386227423f5fdf98'/>
<id>5ce971628106fb767ef91bf4386227423f5fdf98</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>config.def.h: improve latency for the default configuration</title>
<updated>2024-03-17T13:42:44+00:00</updated>
<author>
<name>Hiltjo Posthuma</name>
<email>hiltjo@codemadness.org</email>
</author>
<published>2024-03-17T13:42:44+00:00</published>
<link rel='alternate' type='text/html' href='http://normalmode.org/malf/x/st/commit/?id=f20e169a20f3ee761f7e09714f1d4c10916cf4c6'/>
<id>f20e169a20f3ee761f7e09714f1d4c10916cf4c6</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>set upper limit for REP escape sequence argument</title>
<updated>2024-03-04T22:50:58+00:00</updated>
<author>
<name>Tommi Hirvola</name>
<email>tommi@hirvola.fi</email>
</author>
<published>2024-03-04T10:56:30+00:00</published>
<link rel='alternate' type='text/html' href='http://normalmode.org/malf/x/st/commit/?id=95f22c53059ccd60ee701ccf2659dacd95e4e89a'/>
<id>95f22c53059ccd60ee701ccf2659dacd95e4e89a</id>
<content type='text'>
Previously, printf 'L\033[2147483647b' would call tputc('L') 2^31 times,
making st unresponsive. This commit allows repeating the last character
at most 65535 times in order to prevent freezing and DoS attacks.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Previously, printf 'L\033[2147483647b' would call tputc('L') 2^31 times,
making st unresponsive. This commit allows repeating the last character
at most 65535 times in order to prevent freezing and DoS attacks.
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix cursor move with wide glyphs</title>
<updated>2024-02-25T10:56:43+00:00</updated>
<author>
<name>Quentin Rameau</name>
<email>quinq@fifth.space</email>
</author>
<published>2024-02-25T00:31:31+00:00</published>
<link rel='alternate' type='text/html' href='http://normalmode.org/malf/x/st/commit/?id=7473a8d1a57e5f9aba41b953f4e498c35e1c9dc5'/>
<id>7473a8d1a57e5f9aba41b953f4e498c35e1c9dc5</id>
<content type='text'>
st would always move back 1 column,
even with wide glyhps (using more than a single column).

The glyph rune is set on its first column,
and the other ones are to 0,
so loop until we detect the start of the previous glyph.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
st would always move back 1 column,
even with wide glyhps (using more than a single column).

The glyph rune is set on its first column,
and the other ones are to 0,
so loop until we detect the start of the previous glyph.
</pre>
</div>
</content>
</entry>
<entry>
<title>csi: check for private marker in 'S' case</title>
<updated>2024-02-18T15:14:26+00:00</updated>
<author>
<name>Tim Culverhouse</name>
<email>tim@timculverhouse.com</email>
</author>
<published>2024-02-18T12:56:49+00:00</published>
<link rel='alternate' type='text/html' href='http://normalmode.org/malf/x/st/commit/?id=a3f7420310be0fd778ef9fe2abf20edc2d8dc81a'/>
<id>a3f7420310be0fd778ef9fe2abf20edc2d8dc81a</id>
<content type='text'>
The handler for 'S' final character does not check for a private
marker. This can cause a conflict with a sequence called 'XTSMGRAPHICS'
which also has an 'S' final character, but uses the private marker '?'.
Without checking for a private marker, st will perform a scroll up
operation when XTSMGRAPHICS is seen, which can cause unexpected display
artifacts.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The handler for 'S' final character does not check for a private
marker. This can cause a conflict with a sequence called 'XTSMGRAPHICS'
which also has an 'S' final character, but uses the private marker '?'.
Without checking for a private marker, st will perform a scroll up
operation when XTSMGRAPHICS is seen, which can cause unexpected display
artifacts.
</pre>
</div>
</content>
</entry>
<entry>
<title>Add terminfo entries for bracketed paste mode</title>
<updated>2023-10-07T10:16:59+00:00</updated>
<author>
<name>Peter Hofmann</name>
<email>scm@uninformativ.de</email>
</author>
<published>2023-10-07T05:41:02+00:00</published>
<link rel='alternate' type='text/html' href='http://normalmode.org/malf/x/st/commit/?id=9846a56bd7fdc86bf788db04bbbcbde7b7eb9952'/>
<id>9846a56bd7fdc86bf788db04bbbcbde7b7eb9952</id>
<content type='text'>
Helps Vim (and hopefully others) to discover that this feature exists
without further user configuration.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Helps Vim (and hopefully others) to discover that this feature exists
without further user configuration.
</pre>
</div>
</content>
</entry>
<entry>
<title>Unhide cursor on RIS (\033c)</title>
<updated>2023-10-07T10:16:59+00:00</updated>
<author>
<name>Peter Hofmann</name>
<email>scm@uninformativ.de</email>
</author>
<published>2023-10-07T05:40:45+00:00</published>
<link rel='alternate' type='text/html' href='http://normalmode.org/malf/x/st/commit/?id=559fdc278681c98470749adb59f01cd071720458'/>
<id>559fdc278681c98470749adb59f01cd071720458</id>
<content type='text'>
It is unclear if it's "required" to do this on RIS, but it's useful when
calling reset(1) after interactive programs have crashed and garbled up
the screen.

FWIW, other terminals do it as well (tested with XTerm, VTE, Kitty,
Alacritty, Linux VT).
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
It is unclear if it's "required" to do this on RIS, but it's useful when
calling reset(1) after interactive programs have crashed and garbled up
the screen.

FWIW, other terminals do it as well (tested with XTerm, VTE, Kitty,
Alacritty, Linux VT).
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix wide glyphs breaking "nowrap" mode</title>
<updated>2023-10-07T10:16:59+00:00</updated>
<author>
<name>Peter Hofmann</name>
<email>scm@uninformativ.de</email>
</author>
<published>2023-10-07T05:40:39+00:00</published>
<link rel='alternate' type='text/html' href='http://normalmode.org/malf/x/st/commit/?id=8abe4bcb41aa7fda0ae00823f6a20271124150db'/>
<id>8abe4bcb41aa7fda0ae00823f6a20271124150db</id>
<content type='text'>
Consider the following example:

    printf '\e[?7l';\
    for i in $(seq $(($(tput cols) - 1))); do printf a; done;\
    printf '🙈\n';\
    printf '\e[?7h'

Even though MODE_WRAP has been disabled, the emoji appeared on the next
line. This patch keeps wide glyphs on the same line and moves them to
the right-most possible position.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Consider the following example:

    printf '\e[?7l';\
    for i in $(seq $(($(tput cols) - 1))); do printf a; done;\
    printf '🙈\n';\
    printf '\e[?7h'

Even though MODE_WRAP has been disabled, the emoji appeared on the next
line. This patch keeps wide glyphs on the same line and moves them to
the right-most possible position.
</pre>
</div>
</content>
</entry>
<entry>
<title>Don't scroll selection on the other screen</title>
<updated>2023-10-07T10:16:59+00:00</updated>
<author>
<name>Peter Hofmann</name>
<email>scm@uninformativ.de</email>
</author>
<published>2023-10-07T05:40:07+00:00</published>
<link rel='alternate' type='text/html' href='http://normalmode.org/malf/x/st/commit/?id=2fc7e532b23e2f820c6b73d352ec7c41fefa45b5'/>
<id>2fc7e532b23e2f820c6b73d352ec7c41fefa45b5</id>
<content type='text'>
Fixes garbage selections when switching to/from the alternate screen.

How to reproduce:

-   Be in primary screen.
-   Select something.
-   Run this (switches to alternate screen, positions the cursor at the
    bottom, triggers selscroll(), and then goes back to primary screen):

        tput smcup; tput cup $(tput lines) 0; echo foo; tput rmcup

-   Notice how the (visual) selection now covers a different line.

The reason is that selscroll() calls selnormalize() and that cannot find
the original range anymore. It's all empty lines now, so it snaps to
"select the whole line".
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Fixes garbage selections when switching to/from the alternate screen.

How to reproduce:

-   Be in primary screen.
-   Select something.
-   Run this (switches to alternate screen, positions the cursor at the
    bottom, triggers selscroll(), and then goes back to primary screen):

        tput smcup; tput cup $(tput lines) 0; echo foo; tput rmcup

-   Notice how the (visual) selection now covers a different line.

The reason is that selscroll() calls selnormalize() and that cannot find
the original range anymore. It's all empty lines now, so it snaps to
"select the whole line".
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix bounds checks of dc.col</title>
<updated>2023-10-07T10:16:59+00:00</updated>
<author>
<name>Peter Hofmann</name>
<email>scm@uninformativ.de</email>
</author>
<published>2023-10-07T05:39:00+00:00</published>
<link rel='alternate' type='text/html' href='http://normalmode.org/malf/x/st/commit/?id=a6bbc0c96b0a1db804061b0db79101c6b26aec57'/>
<id>a6bbc0c96b0a1db804061b0db79101c6b26aec57</id>
<content type='text'>
dc.collen is the length of dc.col, not the maximum index, hence if x is
equal to dc.collen, then it's an error.

With config.def.h, the last valid index is 259, so this correctly
reports "black":

    $ printf '\033]4;259;?\e\\'

260 is an invalid index and this reports garbage instead of printing an
error:

    $ printf '\033]4;260;?\e\\'
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
dc.collen is the length of dc.col, not the maximum index, hence if x is
equal to dc.collen, then it's an error.

With config.def.h, the last valid index is 259, so this correctly
reports "black":

    $ printf '\033]4;259;?\e\\'

260 is an invalid index and this reports garbage instead of printing an
error:

    $ printf '\033]4;260;?\e\\'
</pre>
</div>
</content>
</entry>
</feed>
