Unnamed Fossil Project


Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

50 most recent check-ins

Clean "extras" Leaf check-in: 15467d89f8 user: vandys tags: trunk, origin/split, andy
Default, no mouse support check-in: 1acabd953a user: vandys tags: trunk, origin/split, andy
Make terminal mouse support optional check-in: 275469813e user: ajv-899-334-8894@vsta.org tags: trunk, origin/split, andy
Mild const-correctness improvements. Only touch a few things, the main focus is to improve code readability. Leaf check-in: a785f4c95f user: hiltjo@codemadness.org tags: trunk, master, origin/split
fix: correctly encode mouse buttons >= 8 in X10 and SGR mode These are typically mapped in X11 to the side-buttons (backward/forwards) on the mouse. A comparison of the button numbers in SGR mode (first field): st old: 0 1 2 64 65 66 67 68 69 70 st new (it is the same as xterm now): 0 1 2 64 65 66 67 128 129 130 A script to test and reproduce it, first argument is "h" (on) or "l" (off): #!/bin/sh printf '\x1b[?1000%s\x1b[?1006%s' "$1" "$1" for n in 1 2 3 4 5 6 7 8 9 10; do printf 'button %d\n' "$n" xdotool click "$n" printf '\n\n' done check-in: b0ed484a2b user: hiltjo@codemadness.org tags: trunk, master, origin/split
remove unused variable from previous patch check-in: cfe6ea1eb8 user: hiltjo@codemadness.org tags: trunk, master, origin/split
ST: Add WM_ICON_NAME property support Also added _NET_WM_ICON_NAME. check-in: 67262ebc5c user: hiltjo@codemadness.org tags: trunk, master, origin/split
bump version to 0.8.4 Leaf check-in: 4f8cb4b629 user: hiltjo@codemadness.org tags: trunk, 0.8.4, origin/split
config.mk: use PKG_CONFIG in commented OpenBSD section check-in: 8e2f9f3c9b user: hiltjo@codemadness.org tags: trunk, origin/split
LICENSE: bump years check-in: 7e34023663 user: hiltjo@codemadness.org tags: trunk, origin/split
remove sixel stub code Remove stub code that was used for an experiment of adding sixel code to st from the commit f7398434. check-in: 4eb6efed09 user: hiltjo@codemadness.org tags: trunk, origin/split
fix unicode glitch in DCS strings, patch by Tim Allen Reported on the mailinglist: " I discovered recently that if an application running inside st tries to send a DCS string, subsequent Unicode characters get messed up. For example, consider the following test-case: printf '\303\277\033P\033\\\303\277' ...where: - \303\277 is the UTF-8 encoding of U+00FF LATIN SMALL LETTER Y WITH DIAERESIS (ÿ). - \033P is ESC P, the token that begins a DCS string. - \033\\ is ESC \, a token that ends a DCS string. - \303\277 is the same ÿ character again. If I run the above command in a VTE-based terminal, or xterm, or QTerminal, or pterm (PuTTY), I get the output: ÿÿ ...which is to say, the empty DCS string is ignored. However, if I run that command inside st (as of commit 9ba7ecf), I get: ÿÿ ...where those last two characters are \303\277 interpreted as ISO8859-1 characters, instead of UTF-8. I spent some time tracing through the state machines in st.c, and so far as I can tell, this is how it works currently: - ESC P sets the "ESC_DCS" and "ESC_STR" flags, indicating that incoming bytes should be collected into the strescseq buffer, rather than being interpreted. - ESC \ sets the "ESC_STR_END" flag (when ESC is received), and then calls strhandle() (when \ is received) to interpret the collected bytes. - If the collected bytes begin with 'P' (i.e. if this was a DCS string) strhandle() sets the "ESC_DCS" flag again, confusing the state machine. If my understanding is correct, fixing the problem should be as easy as removing the line that sets ESC_DCS from strhandle(): diff --git a/st.c b/st.c index ef8abd5..b5b805a 100644 --- a/st.c +++ b/st.c @@ -1897,7 +1897,6 @@ strhandle(void) xsettitle(strescseq.args[0]); return; case 'P': /* DCS -- Device Control String */ - term.mode |= ESC_DCS; case '_': /* APC -- Application Program Command */ case '^': /* PM -- Privacy Message */ return; I've tried the above patch and it fixes my problem, but I don't know if it introduces any others. " check-in: f68072c721 user: hiltjo@codemadness.org tags: trunk, origin/split
FAQ: fix single-buffer patch rebase against master check-in: 468ffcf638 user: hiltjo@codemadness.org tags: trunk, origin/split
config.def.h: add an option allowwindowops, by default off (secure) Similar to the xterm AllowWindowOps option, this is an option to allow or disallow certain (non-interactive) operations that can be insecure or exploited. NOTE: xsettitle() is not guarded by this because st does not support printing the window title. Else this could be exploitable (arbitrary code execution). Similar problems have been found in the past in other terminal emulators. The sequence for base64-encoded clipboard copy is now guarded because it allows a sequence written to the terminal to manipulate the clipboard of the running user non-interactively, for example: printf '\x1b]52;0;ZWNobyBoaQ0=\a' check-in: a7ffd00bbf user: hiltjo@codemadness.org tags: trunk, origin/split
FAQ: add some details about the w3m img hack ... and an example patch to switch from double-buffering to a single buffer. check-in: bb08ef34f7 user: hiltjo@codemadness.org tags: trunk, origin/split
tiny style fix check-in: 20fe072861 user: hiltjo@codemadness.org tags: trunk, origin/split
Partially add back in "support REP (repeat) escape sequence" Add the functionality back in for xterm compatibility, but do not expose the capability in st.info (yet). Some notes: It was reverted because it caused some issues with ncurses in some configurations, namely when using BSD padding (--enable-bsdpad, BSD_TPUTS) in ncurses it caused issues with repeating digits. A fix has been upstreamed in ncurses since snapshot 20200523. The fix is also backported to OpenBSD -current. check-in: 1251605abd user: hiltjo@codemadness.org tags: trunk, origin/split
Call xsetcursor to set win.cursor in main In xsetcursor, remove "DEFAULT(cursor, 1)" because 0 is a valid value. Increase max allowed value of cursor from 6 to 7 (st extension). check-in: f4b9e3c290 user: hiltjo@codemadness.org tags: trunk, origin/split
Revert "support REP (repeat) escape sequence" This reverts commit e8392b282c2eaa28725241a9612804fb55113da4. There is currently a bug in older ncurses versions (like on OpenBSD) where a fix for a bug with REP is not backported yet. Most likely in tty/tty_update.c: Noticed while using lynx (which uses ncurses/curses). To reproduce using lynx: echo "Z0000000" | lynx -stdin or using the program: int main(void) { WINDOW *win; win = initscr(); printw("Z0000000"); refresh(); sleep(5); return 0; } This prints "ZZZZZZZ" (incorrectly). check-in: b6493b97ed user: hiltjo@codemadness.org tags: trunk, origin/split
support REP (repeat) escape sequence The sequence \e[Nb prints the last printed char N (more) times if it's printable, and it's ignored after newline or other control chars. This is Ecma-048/ANSI-X3.6 sequence and not DEC VT. It's supported by xterm, and ncurses uses it when possible, e.g. when TERM is xterm* (and with this commit also st*). xterm supports only codepoints<=255, possibly due to internal limits. We support any value/codepoint which was placed in a cell. To test: - tput rep 65 4 -> prints 'AAAA' - printf "\342\225\246\033[4b" -> prints U+2566 1+4 times. check-in: 41fd4ee033 user: hiltjo@codemadness.org tags: trunk, origin/split
Add rin terminfo capability Tianlin Qu discovered that st is missing rin (scroll back #1 lines). check-in: ffee53c6e0 user: hiltjo@codemadness.org tags: trunk, origin/split
Make shift+wheel behaves as shift+Prev/Next St uses a very good hack where mouse wheel genereates ^Y and ^E, that are the same keys that less and vi uses for backward and fordward scrolling. Scroll, as many terminal emulators, use shift+Prev/Next for scrolling, but it is also using ^E and ^Y for scroling, characters that are reserved in the POSIX shell in emacs mode for end of line and yanking, making scroll unsable in st. This patch adds a new hack, making shift+wheel returning the same sequences than shift+Prev/Next, meaning that scroll or any other similar program will not be able to differentiate between them. check-in: 7df6d552eb user: hiltjo@codemadness.org tags: trunk, origin/split
Fix selection: selscroll check-in: 6978858654 user: hiltjo@codemadness.org tags: trunk, origin/split
Fix selection: ignore ATTR_WRAP when rectangular selection in getsel check-in: 93c6dab9d7 user: hiltjo@codemadness.org tags: trunk, origin/split
Fix selection: selclear in tputc check-in: 869071bd38 user: hiltjo@codemadness.org tags: trunk, origin/split
code-style: add fallthrough comment Patch by Steve Ward, thanks. check-in: 9cc866fa76 user: hiltjo@codemadness.org tags: trunk, origin/split
optimize column width calculation and utf-8 encode for ASCII In particular on OpenBSD and on glibc wcwidth() is quite expensive. On musl there is little difference. check-in: 5fc445c8a1 user: hiltjo@codemadness.org tags: trunk, origin/split
fix for incorrect (partial) written sequences when libc wcwidth() == -1 Fix an issue with incorrect (partial) written sequences when libc wcwidth() == -1. The sequence is updated to on wcwidth(u) == -1: c = "\357\277\275" but len isn't. A way to reproduce in practise: * st -o dump.txt * In the terminal: printf '\xcd\xb8' - This is codepoint 888, on OpenBSD it reports wcwidth() == -1. - Quit the terminal. - Look in dump.txt (partial written sequence of "UTF_INVALID"). This was introduced in: " commit 11625c7166b7e4dad414606227acec2de1c36464 Author: czarkoff@gmail.com <czarkoff@gmail.com> Date: Tue Oct 28 12:55:28 2014 +0100 Replace character with U+FFFD if wcwidth() is -1 Helpful when new Unicode codepoints are not recognized by libc." Change: Remove setting the sequence. If this happens to break something, another solution could be setting len = 3 for the sequence. check-in: 52af3752e9 user: hiltjo@codemadness.org tags: trunk, origin/split
tiny code-style and typo-fix in comment check-in: 0aaf4c1d38 user: hiltjo@codemadness.org tags: trunk, origin/split
auto-sync: draw on idle to avoid flicker/tearing st could easily tear/flicker with animation or other unattended output. This commit eliminates most of the tear/flicker. Before this commit, the display timing had two "modes": - Interactively, st was waiting fixed `1000/xfps` ms after forwarding the kb/mouse event to the application and before drawing. - Unattended, and specifically with animations, the draw frequency was throttled to `actionfps`. Animation at a higher rate would throttle and likely tear, and at lower rates it was tearing big frames (specifically, when one `read` didn't get a full "frame"). The interactive behavior was decent, but it was impossible to get good unattended-draw behavior even with carefully chosen configuration. This commit changes the behavior such that it draws on idle instead of using fixed latency/frequency. This means that it tries to draw only when it's very likely that the application has completed its output (or after some duration without idle), so it mostly succeeds to avoid tear, flicker, and partial drawing. The config values minlatency/maxlatency replace xfps/actionfps and define the range which the algorithm is allowed to wait from the initial draw-trigger until the actual draw. The range enables the flexibility to choose when to draw - when least likely to flicker. It also unifies the interactive and unattended behavior and config values, which makes the code simpler as well - without sacrificing latency during interactive use, because typically interactively idle arrives very quickly, so the wait is typically minlatency. While it only slighly improves interactive behavior, for animations and other unattended-drawing it improves greatly, as it effectively adapts to any [animation] output rate without tearing, throttling, redundant drawing, or unnecessary delays (sounds impossible, but it works). check-in: 1bf7292ac2 user: hiltjo@codemadness.org tags: trunk, origin/split
replace exit(3) by _exit(2) in signal handler sigchld() exit(3) is not async-signal-safe but, _exit(2) is. This change prevents st to crash and dump core. check-in: 6a9dfacb26 user: hiltjo@codemadness.org tags: trunk, origin/split
bump version to 0.8.3 check-in: cc5dc77b09 user: hiltjo@codemadness.org tags: trunk, origin/split, 0.8.3
Update XIM cursor position only if changed Updating XIM cursor position is expensive, so only update it when cursor position changed. check-in: d5ca55d757 user: hiltjo@codemadness.org tags: trunk, origin/split
just remove the EOF message check-in: 810908a2e9 user: hiltjo@codemadness.org tags: trunk, origin/split
Add st-mono terminfo entry This entry is intended for monocolor display and it is very helpful for color haters. check-in: 742826bd07 user: hiltjo@codemadness.org tags: trunk, origin/split
config.def.h: add a comment for the scroll variable check-in: c506a7bb01 user: hiltjo@codemadness.org tags: trunk, origin/split
Fix small typos check-in: fd2c5fe59c user: hiltjo@codemadness.org tags: trunk, origin/split
Launch scroll program with the default shell check-in: b341665bc3 user: hiltjo@codemadness.org tags: trunk, origin/split
Update FAQ with the last modifications check-in: b870fdfc6e user: hiltjo@codemadness.org tags: trunk, origin/split
Add terminfo entries for backspace mode St used to use backspace as BS until the commit 230d0c8, but due to general lack of knowledge of lusers, we moved to the most common configuration in linux to avoid answering the same question 3 times per month. With the most common configuration we have a backspace that returns a DEL, and we have a Delete key that doesn't return a DEL character neither a BS. When dealing with devices connected using a serial line (or even with Plan9) it is more common Backspace as BS and Delete as DEL. For this reason, st is not always the best tool when you talk with a serial device. This patch adds new terminfo entries for Backspace as BS and Delete as DEL. A patch for confg.h is also added, to make easier switch between both configurations. check-in: 0c1c6aff7a user: hiltjo@codemadness.org tags: trunk, origin/split
Fix style issue check-in: 09c892d2c2 user: hiltjo@codemadness.org tags: trunk, origin/split
ttyread: test for EOF while reading tty When a read operation returns 0 then it means that we arrived to the end of the file, and new reads will return 0 unless you do some other operation such as lseek(). This case happens with USB-232 adapters when they are unplugged. check-in: e0687b5cdc user: hiltjo@codemadness.org tags: trunk, origin/split
Add support for scroll(1) Scroll is a program that stores all the lines of its child and be used in st as a way of implementing scrollback. This solution is much better than implementing the scrollback in st itself because having a different program allows to use it in any other program without doing modifications to those programs. check-in: a3dc406454 user: hiltjo@codemadness.org tags: trunk, origin/split
make argv0 not static, fixes a warning with tcc Reported by Aajonus, thanks! check-in: 684b591c34 user: hiltjo@codemadness.org tags: trunk, origin/split
mouseshortcuts: fix custom modifier on release This line didn't work at mshortcuts at config.h: /* mask button function arg release */ { ShiftMask, Button2, selpaste, {.i = 0}, 1 }, and now it does work. The issue was that XButtonEvent.state is "the logical state ... just prior to the event", which means that on release the state has the Button2Mask bit set because button2 was down just before it was released. The issue didn't manifest with the default shift + middle-click on release (to override mouse mode) because its specified modifier is XK_ANY_MOD, at which case match(...) ignores any specific bits and simply returns true. The issue also doesn't manifest on press, because prior to the event Button<N> was not down and its mask bit is not set. Fix by filtering out the mask of the button which we're currently matching. We could have said "well, that's how button events behave, you should use ShiftMask|Button2Mask for release", but this both not obvious to figure out, and specifically here always filtering does not prevent configuring any useful modifiers combination. So it's a win-win. check-in: ca3037e15b user: hiltjo@codemadness.org tags: trunk, origin/split
Remove explicit XNFocusWindow XCreateIC ICValues default XNFocusWindow to XNClientWindow if not specified, it can be omitted since it is the same. From the documentation https://www.x.org/releases/current/doc/libX11/libX11/libX11.html > Focus Window > > The XNFocusWindow argument specifies the focus window. The primary > purpose of the XNFocusWindow is to identify the window that will receive > the key event when input is composed. > > When this XIC value is left unspecified, the input method will use the > client window as the default focus window. check-in: 78a7f04bab user: hiltjo@codemadness.org tags: trunk, origin/split
x: fix XIM handling Do not try to set specific IM method, let the user specify it with XMODIFIERS. If the requested method is not available or opening fails, fallback to the default input handler and register a handler on the new IM server availability signal. Do the same when the input server is closed and (re)started. check-in: 09e1d580b8 user: hiltjo@codemadness.org tags: trunk, origin/split
x: check we still have an XIC context before accessing it check-in: caa41e4393 user: hiltjo@codemadness.org tags: trunk, origin/split
x: do not instantiate a new nested list on each cursor move check-in: bd14ead439 user: hiltjo@codemadness.org tags: trunk, origin/split
x: move IME variables into XWindow ime embedded struct check-in: 4a694220ee user: hiltjo@codemadness.org tags: trunk, origin/split