There are some ocasions where we want to disable the enconding/decoding of utf8, mainly
because it adds an important overhead. This is partial patch for ESC % G and ESC % @,
where they modified the way that st reads and write from/to the serial line, but it does
not modifies how it interacts with the X window part.
The default config specifies BackSpace as "\177". The default behavior
should persist across modifier keys, commonly Mod1 (Alt or Meta) which
is widely used to delete a word on readline and text editors, notably
Emacs.
This will make Alt+BackSpace behaves as expected, i.e. sends "\033\177"
instead of "\033\010" as previous default behavior.
Signed-off-by: Christoph Lohmann <20h@r-36.net>
https://tronche.com/gui/x/icccm/sec-2.html#s-2.4 specifies:
> Once all the data in the selection has been retrieved,
> the requestor should delete the property in the SelectionNotify request
Most Clipboard-Owners ignore whether or not the property is already set,
so this is mostly a cosmetic change to keep the windows property list clean.
However, at least synergy decides to wait for the requestor to delete
the properties if they are already set by a previous paste (from synergy).
Signed-off-by: Christoph Lohmann <20h@r-36.net>
LEN(str) is one larger than strlen(str) because it also counts the zero
terminator. The original code would include the .notdef glyph (since it'll
try to encode character 0, which gets encoded to the .notdef glyph) when
measuring the average dimensions of printable ascii characters.
This causes problems with fonts like GNU Unifont where the .notdef glyph is
not the same width as the usual half-width characters.
Signed-off-by: Christoph Lohmann <20h@r-36.net>
The y-position of a character found by asking fontconfig for a matching
font does not take the border pixels into account, resulting in a
slightly misaligned vertical position.
Signed-off-by: Ton van den Heuvel <tonvandenheuvel@gmail.com>
Signed-off-by: Christoph Lohmann <20h@r-36.net>
This fix is needed to use dual-width fonts, which have double-width
glyphs (e.g. CJK unified ideographs).
Signed-off-by: Ryusei Yamaguchi <mandel59@gmail.com>
Signed-off-by: Christoph Lohmann <20h@r-36.net>
This prevents accessing to a potentially out-of-bounds memory section.
Signed-off-by: Lucas Gabriel Vuotto <l.vuotto92@gmail.com>
Signed-off-by: Christoph Lohmann <20h@r-36.net>
Scratch the preceding patch, this one is more correct
(don't forget to 'git am --scissors' ;))
-- >8 --
Also reformat the strings in a saner layout
Signed-off-by: Christoph Lohmann <20h@r-36.net>
This way we can call cresize() to set the terminal size before creating
a tty or spawning a process, which will start with the correct size.
Signed-off-by: Christoph Lohmann <20h@r-36.net>
ARGUM isn't used and ARGNUMF uses estrtol() that isn't defined anywhere.
Those were probably copied from sbase arg.h.
Signed-off-by: Christoph Lohmann <20h@r-36.net>
ttywrite was assuming that if it could not write then it could
read, but this is not necessarily true, there are some situations
where you cannot read or write. The correct behaviour is to detect
if you can read or/and write.
If we want to show a custom selected cursor color, we must not set the
revert attribute to the drawn glyph.
Signed-off-by: Christoph Lohmann <20h@r-36.net>
Before the fix the cursor wouldn't obey if it's in a selection. If it is
inside it will now change to the reverse. This patch also adds that the
defaultcs will be reversed for the manually drawn cursors.
Before this patch, when pasting over BUFSIZE (8192 bytes here), st would
do the following:
\e[200~...8192 bytes...\e[201~\e[200~...remaining bytes...\e[201~
With this patch, the start marker is only sent when the offset is 0 (at
the beginning of selnotify) and the end marker is only sent when the
remaining bytes to read are 0 (at the end).
For short pastes, both conditions are true in the same iteration.
For long pastes, it removes the extra markers in the middle, keeping the
intended wrapping:
\e[200~...8192 bytes......remaining bytes...\e[201~
Signed-off-by: Christoph Lohmann <20h@r-36.net>
gcc would warn about an unused result. We know it is 0 and dup()
can't fail in these circumstances, as we closed fd0 previously.
Using dup2() to do the same saves one line and shuts gcc up, bringing
us a clean build back.