Commit Graph

40 Commits

Author SHA1 Message Date
veltza 118e965d0c
sixel: add support for fully transparent bg (P2=1) (#132)
P2 selects how the terminal draws the background color.

P2                  Meaning
0 or 2 (default)    Pixel positions specified as 0 are set to the
                    current background color.
1                   Pixel positions specified as 0 remain at their
                    current color.

Both modes are now supported.

Ref. https://www.vt100.net/docs/vt3xx-gp/chapter14.html
2024-04-17 18:04:27 +02:00
Stein Gunnar Bakkeby 0b8055a271
netwmicon: upgrading patch and adding farbfeld variant (#121) 2024-03-13 10:35:17 +01:00
Stein Gunnar Bakkeby 3b87b07404
Adding reflow patch (#120) 2024-03-13 10:33:51 +01:00
Bakkeby 1da419eb35 ligatures + wide glyphs + vertcenter: compatibility fixes ref. #118 2024-03-10 22:18:05 +01:00
Bakkeby 3564593563 Revert "Fix cursor move with wide glyphs" ref. #118
This reverts commit 400aa4492f.
2024-03-08 19:52:11 +01:00
Bakkeby e88f2bf20c Removing the VIM browse patch.
The general reasoning is that the vim browse patch is very invasive,
has a high level of complexity, and is incompatible with a significant
number of other patches and it complicates further maintenance.

Additionally the patch has its own scrollback mechanism which seemingly
did not work properly - and nobody seems to have complained about this
since the patch was added back in May 2021.

If you want to try out the vim browse patch then I would recommend having
a play around with the patch author's own build that has this patch
integrated:
   - https://github.com/juliusHuelsmann/st-history-vim
   - https://github.com/juliusHuelsmann/st

Alternatively a tag has been added to this repository that refers to the
last commit that still has the vim browse patch:
   - https://github.com/bakkeby/st-flexipatch/tree/VIM_BROWSE_PATCH
2024-03-07 22:35:11 +01:00
Bakkeby 400aa4492f Fix cursor move with wide glyphs
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.

ref.
https://git.suckless.org/st/commit/7473a8d1a57e5f9aba41b953f4e498c35e1c9dc5.html
2024-03-07 21:43:24 +01:00
Bakkeby 0f50ef072c ligatures: upgrading 2024-03-07 15:34:21 +01:00
Stein Gunnar Bakkeby 677c2da0be
Reworking sixel implementation based on veltza's implementation (#117)
* sixel: remove black bars from sixel images

When the images don't fully cover the text cells, black bars are added
to them. This fix removes those bars, but if you need the old behavior,
you can restore it by setting 'sixelremovebars' to zero in config.h

* sixel: fix a potential memory leak

* sixel: improve behavior with text reflow

* sixel: prevent animated gifs from choking the terminal

Animated gifs constantly spawn new images that eventually choke the
terminal because the old animation frames are kept in the image buffer.
This fix removes overlapping images from the image buffer and prevents
them from piling up.

* sixel: add zooming and clipping

* sixel: copying bulk of changes

* sixel: move sixel_parser_parse() and add missing sequences and blocks (#113)

- Move sixel_parser_parse() from tputc() to twrite()
- Add missing 8452, DECSDM, XTSMGRAPHICS and XTWINOPS sequences
- Add more conditional blocks for the scrollback and sync patches
- Remove unused reflow_y from ImageList. It is only used for the
  scrollback-reflow patch in st-sx.

* sixel: update vtiden to VT200 family

* sixel: fix scrolling issues inside tmux (#114)

tmux is using the scrolling region and sequence to clear the screen
below the shell prompt. This peculiar behavior caused the tscrollup()
function to be called, which always scrolled the images regardless of
whether they were inside the region or not. So the images moved out of
place whenever the bottom of the screen was cleared. This fix checks
that the images are inside the region before scrolling them.

* sixel: prevent images from being deleted when resizing (#115)

This fixes resizing issues outside of tmux not inside.

* Rewriting tresize logic based on veltza's proposed implementation in PR #115

* tresize: correction for tscrollup call when scrollback patch is used

---------

Co-authored-by: veltza <106755522+veltza@users.noreply.github.com>
2024-03-07 09:22:44 +01:00
Jordan Callicoat 2e0e84d56a
Add selectioncolors patch (#110)
https://st.suckless.org/patches/selectioncolors/

Closes #91
2024-02-28 14:34:06 +01:00
Bakkeby d8529b66a4 Adding fullscreen patch ref. #88 2022-10-24 11:27:51 +02:00
Bakkeby 34cd955f14 Adding key and mouse binding option to control whether they apply to primary screen, alt screen or both ref. #81 2022-09-01 22:01:20 +02:00
veltza 3eb170a9a5 Add scrollback support to the openurlonclick patch
The openurlonclick and scrollback patches are now working together,
so links can be clicked in the scrollback buffer too. This update also
adds url underlining and other improvements to the openurlonclick patch.

The full list of changes in the openurlonclick patch:
- Adds scrollback support
- Adds modkey option
- Better url detection
- Underlines url when the mouse pointer is over a link
- Opens a browser as a background process, so it won't lock the terminal anymore
- Fixes a segmentation fault bug
2022-08-10 21:32:44 +03:00
veltza a705b714b5 Change Ctrl+l behaviour
From now on, Ctrl+l scrolls up the screen and preserves the scrollback buffer.
Fixes #46.
2022-07-02 12:48:30 +03:00
bakkeby 1a8175a337 Adding background image patch 2022-03-10 13:54:28 +01:00
bakkeby 9ab02993c3 Add support for OSC color sequences
Ref.
  - https://git.suckless.org/st/commit/8e310303903792c010d03c046ba75f8b18f7d3a7.html
  - https://git.suckless.org/st/commit/273db5ceaf392e68c2faf8f7dec14ea2e25e980d.html
2022-02-24 13:24:00 +01:00
bakkeby eccd7fac9e Adding columns patch ref. #34 2021-07-26 10:16:54 +02:00
bakkeby 80bb4b8ab7 externalpipe: sigchld changes interfere with right-click-to-plumb and opencopied patches, proposed fix ref. #27 2021-05-15 11:44:09 +02:00
bakkeby 763e9f15b3 Mild const-correctness improvements.
Only touch a few things, the main focus is to
improve code readability.

https://git.suckless.org/st/commit/4536f46cfff50c66a115755def0155d8e246b02f.html
2021-05-10 09:35:50 +02:00
bakkeby 29b20b54c5 ST: Add WM_ICON_NAME property support
Also added _NET_WM_ICON_NAME.

https://git.suckless.org/st/commit/28b4c822c5c0acec300fdf15c6e3ede9f5e2335d.html#h0-1-11
https://git.suckless.org/st/commit/4ef0cbd8b9371f37f7d02ef37b5378b879e6b8bf.html#h0-0-3
2021-05-10 09:28:15 +02:00
bakkeby e039854635 Adding vim browse patch ref. #21 2021-05-09 17:48:28 +02:00
bakkeby 1a1d492cd8 Adding alpha-focus-highlight patch 2021-05-09 14:40:30 +02:00
bakkeby a5435903d4 Adding universcroll patch ref. #21 2021-05-08 17:49:04 +02:00
bakkeby 8c8bace91c Adding netwmicon patch ref. #21 2021-05-08 14:50:06 +02:00
bakkeby 79278e3d32 Adding undercurl patch ref. #20 2021-05-08 10:53:46 +02:00
bakkeby dbd1d6ece0 Addressing relativeborder plus ligatures combo conflict 2021-03-29 10:27:10 +02:00
bakkeby 708cdada96 Unable to make while using scrollback patch ref. #14 2021-03-29 09:13:14 +02:00
bakkeby f31c43015d Adding sixel support ref. #7 2021-03-25 11:10:57 +01:00
bakkeby a23971fff1 Adding wide glyphs patch 2020-11-14 16:24:07 +01:00
bakkeby effc2107e4 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'
2020-06-10 20:53:01 +02:00
bakkeby e0169edec9 Adding ligatures patch as requested in #4 2020-06-05 13:43:14 +02:00
bakkeby 5c7d8ab1ad 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).
2020-05-20 14:15:57 +02:00
bakkeby bda5b50b99 [st][PATCH] OSC 10/11/12 fg, bg and cursor colors
Support for OSC escape sequences 10, 11 and 12 to modify the bg, fg and
cursor colors. I selected entries in the colorname table after the 255
position for defaultfg, defaultbg and defaultcs
2020-04-20 12:35:11 +02:00
bakkeby 2090981be3 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.
2020-04-20 10:24:34 +02:00
bakkeby 584f3928ad mouse shortcuts: allow same functions as kb shortcuts (410651) 2020-03-24 14:02:44 +01:00
bakkeby 87c1d1e598 revert part of commit add0211522 (cae586) 2020-03-24 13:51:45 +01:00
bakkeby f86b641b5f use iswspace()/iswpunct() to find word delimiters (5cc1dd) 2020-03-24 13:41:19 +01:00
bakkeby 42f401b428 replace utf8strchr with wcschr (4b51e7) 2020-03-24 13:38:27 +01:00
bakkeby cfecd195ba Adding relativeborder, fix-keyboard-input, iso14755, visualbell, rightclicktoplumb, boxdraw and keyboard-select patches 2019-09-17 15:16:22 +02:00
bakkeby 5d336c2796 Initial commit, adding alpha and anysize patches 2019-09-16 09:35:57 +02:00