Commit Graph

234 Commits

Author SHA1 Message Date
SolitudeSF
9fff572aab
Restore terminal before switching from alternate screen 2021-06-18 08:22:59 +03:00
Maxime Coste
fb9dbfed2a Canonicalize <s-ascii> into uppercase in csi key parsing code
Fixes #4159
2021-05-28 20:15:56 +10:00
Maxime Coste
47c0d20388 Request xterm 'modifyOtherKeys' mode to opt-in CSI u key reporting
Various terminal emulators now support this `CSI > 4 ; 1 m` sequence
to enable CSI u style reporting, opt into it on startup.

Closes #4103
2021-05-02 17:06:43 +10:00
Tim Allen
f78adeda49 src: Fix mouse modifier support in the ncurses UI.
For historical reasons, mouse events represent keyboard modifiers as a bitfield,
but keyboard events represent modifiers as a bitfield-plus-one. For example, a
mouse event with an Alt modifier will use the value 4, but a keyboard event will
use the value 5.

Previously, I refactored the parse_mask() helper to do the subtraction itself,
instead of requiring the caller to do it. This made keyboard-event decoding much
cleaner, but I didn't realise it broke mouse-event decoding. Now the subtraction
is done only for keyboard events.

Fixes #4176.
2021-04-30 14:48:37 +10:00
Maxime Coste
7394307a3d Merge remote-tracking branch 'nojhan/feat_padding-options' 2021-04-28 08:11:15 +10:00
nojhan
a9d33a8796 fix ncurses' padding option
- Use less iterations when drawing padding fill with multiple characters.
- Use column_length to handle null-width character as no character.
2021-04-27 15:27:57 +02:00
nojhan
daa63ba879 [feat] add ui_options: padding_char & padding_fill
In some cases, it may be difficult to easily spot the area out of the buffer
(bad color scheme, small font, superimposed windows).

This patch adds two ncurses ui_options to bypass this problem:
- `ncurses_padding_char`, to configure the padding character,
- `ncurses_padding_fill`, to indicate whether to fill the padding line
  (or to display a single character).

The default config is the legacy one (a single "~").
2021-04-05 20:21:48 +02:00
Tim Allen
3aaf32f48f src/ncurses_ui: Teach Kakoune about all the numeric keypad keys.
Kakoune now knows about all the keypad keys listed in:

https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-PC-Style-Function-Keys
https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-VT220-Style-Function-Keys

The VT220-style encodings are used to for modified numeric keys when NumLock is
off. For example, consider the 8/Up key:

| Modifiers       | Sequence    | Notes             |
|-----------------|-------------|-------------------|
| Unmodified      | CSI A       | Ordinary up arrow |
| Shift           | SS3 2 x     | Shift-8           |
| NumLock         | 8           | Ordinary 8        |
| Shift + NumLock | CSI 1 ; 2 A | Shift-Up          |

Note that even though the terminal distinguishes between keypad and regular keys,
Kakoune maps keypad keys onto regular keys - keypad Enter is still <ret>, it
just supports more modifiers than the regular Enter key.
2021-03-26 15:43:42 +11:00
Tim Allen
f7c1702965 src/ncurses_ui: move the parse_mask() helper outside parse_csi().
It's useful for parsing modifier masks in all kinds of sequences, not just CSI
sequences. Also, since the modifier mask always has "1" as "no modifiers",
do the subtraction inside parse_mask() instead of when calling it.
2021-03-26 15:17:41 +11:00
Maxime Coste
4a59018dcd Do not select on non-urgent fd when handling only urgent events
This avoids 100% CPU usage when we have pending fifo input while running
a shell process, as we will not end-up busy looping in pselect but not
reading the available data due to being only processing urgent events.
2021-03-11 09:02:02 +11:00
Maxime Coste
e6905552cf Fix CSI u support for escape key 2021-02-11 20:23:08 +11:00
Tim Allen
a7ed1f03fb Distinguish <c-h> and Backspace on terminals where that is possible.
Different terminals send different codes to indicate backspace, usually one of
\x08 or \x7f, so Kakoune blindly treated both as backspace. However, a given
terminal is only likely to use one of those, and mnemonic control codes like
<c-h> are a precious resource so we should endeavour to keep backspace and
<c-h> separate when we can. Luckily, termios tells us what code our terminal is
currently using, and Kakoune already reads the information at startup, so we can
just use that information.

Thanks to @krobelus for figuring out the C++ syntax required.

Fixes #3863.
2021-01-15 18:49:53 +11:00
Maxime Coste
94ac3084e1 Handle reading from stdin returning 0
0 means stdin was closed, this is quite unexpected as we would usually
get a SIGHUP, but it looks like in some rare case this happens and
it leads to an infinite loop trying to handle stdin events (as it
will always be readable from now on).

Fixes #3557
2020-11-02 22:54:54 +11:00
Tim Allen
c039879c82 src/ncurses_ui.cc: Teach Kakoune about ctrl-symbol keys.
Previously, Kakoune only handled ctrl-codes less than 27, representing them as
lower-case ASCII codes. For regular keys like <c-a>, that worked fine. However,
NUL became the unorthodox <c-`> and other ctrl-symbols (<c-\>, <c-]>, <c-_>)
weren't supported at all.

Now NUL is rendered as the more comfortable <c-space>, and the other ctrl-symbol
codes are properly decoded.

Fixes #2553.
2020-10-31 01:20:49 +11:00
Maxime Coste
39ad6a5bda Do not flush input buffer in UI creation
Fixes #3635
2020-08-02 16:19:13 +10:00
Igor Böhm
d79b005323 Fix 'error: non-constant-expression cannot be narrowed...'
ncurses_ui.cc:759:59: error: non-constant-expression cannot be narrowed from type 'unsigned int' to 'Key::MouseButton' in initializer list [-Wc++11-narrowing]
                return mouse_button(mod, Key::MouseButton{code}, coord, c == 'm');
                                                          ^~~~
2020-06-28 23:32:12 +02:00
Maxime Coste
d3374e7e5f Refactor mouse press/release handling to support 3 buttons
Change button to be an additional parameter instead of having separate
events for left/right buttons.

Fixes #3471
2020-06-28 19:48:55 +10:00
Maxime Coste
151eb3299d Fix CSI u parsing of some special keys 2020-05-12 08:50:27 +10:00
Maxime Coste
ccecd5bd8e Add support for alpha channel in colors
This makes it easier to define faces that lighten/darken whatever
they apply on.
2020-05-02 12:57:36 +10:00
Maxime Coste
8f30e37507 Untie focus reporting and mouse handling 2020-03-27 07:54:21 +11:00
Joachim Henke
3881dc1e7a restore F1 key handling 2020-03-04 09:06:46 +01:00
Maxime Coste
b8eef27e04 Enable terminal application keypad mode 2020-02-26 17:45:52 +11:00
Joachim Henke
4914029712 fix several control key combinations in st 2020-01-20 12:51:06 +01:00
Joachim Henke
2deeb9df52 make the Insert key work in st 2020-01-19 16:22:34 +01:00
Maxime Coste
b85365bff8 Reset SIGHUP handler on NCursesUI destruction
SIGHUP handler could trigger crashes if the EventManager was
already destructed when it was triggered.

Fixes #3288
2020-01-11 17:22:33 +11:00
Maxime Coste
80ffc4d34f Merge remote-tracking branch 'fsub/rxvt' 2020-01-05 10:03:37 +11:00
Maxime Coste
e6b98744c6 Restore support for line wrapping info boxes
Fixes #3280
2020-01-04 11:41:16 +11:00
fsub
e7e7289813 Support rxvt style s-F3 to s-F10 2019-12-14 23:17:34 +01:00
fsub
3aab032797 Support rxvt style s-F11 and s-F12
Rxvt emits `\E[23$` and `\E[24$` for `F21` and `F22` (alias `s-F11` and
`s-F12` provided that `ncurses_shift_function_key` is set to `10`),
respectively.
2019-12-14 20:03:48 +01:00
Tim Allen
170762b4d9 src/ncurses_ui.cc: Add support for VT220-style Home and End keys.
Because we now support a bunch of different conventions for these keys, let's
add some citations for the benefit of future maintainers.

Fixes #3252.
2019-12-11 22:53:15 +11:00
Maxime Coste
fc9e0e8c6a Fix small info text not being displayed 2019-11-26 22:08:05 +11:00
Maxime Coste
34f48cc851 Rework ncurses info display, crop content when overlflowing
Optmize the code to avoid allocating like crazy, unify various
info style rendering, crop content and display markers that there
is more text remaining.

Fixes #2257
2019-11-24 18:11:29 +11:00
Maxime Coste
cb1b03c0db Add support for markup in info boxes
Fixes #2552
2019-11-22 21:50:51 +11:00
Maxime Coste
c031a276d5 Fix recently introduced ncurses redraw artifact 2019-11-18 21:17:22 +11:00
Maxime Coste
d3c3e59bbf Fix search menu trimmed entry display 2019-11-17 22:53:27 +11:00
Maxime Coste
e33ba455c8 Re-merge clear_to_eol in draw 2019-11-13 22:17:08 +11:00
Jason Felice
9692e491ac Fix bad comparison when parsing OSI sequences 2019-11-09 12:53:45 -05:00
Maxime Coste
8e63aa1548 Check that stdout is a tty in ncurses ui 2019-11-09 08:19:45 +11:00
Maxime Coste
294a5b72e6 Fix some ncurses rendering issues 2019-11-05 17:36:21 +11:00
Maxime Coste
6f3124d678 Split clearing to end of line out of NCursesUI::Window::draw
Explicitely clear instead of relying on a brittle heuristic.
2019-11-05 08:04:58 +11:00
Maxime Coste
3a36a2486e Slight cleanup of the menu display code 2019-10-16 20:45:53 +11:00
Maxime Coste
a2993ea104 Check that stdin is readable before calling read
This should not be necessary, but it works around a bug in WSL.

Fixes #3112
2019-10-08 18:38:05 +11:00
Maxime Coste
aa6a7e544d Fix some clang warnings 2019-09-26 20:22:27 +10:00
Maxime Coste
1d9a9bc308 Remove unneeded NCursesUI::Window::mark_dirty and redraws
A bug in client.cc was always forcing full redraws of the windows,
leading to much more terminal output traffic than necessary.
2019-09-26 20:14:08 +10:00
Maxime Coste
7f141e83ce Additional NCursesUI code cleanups 2019-09-25 22:46:39 +10:00
Maxime Coste
2eccbbbe6f Avoid unnecessary allocations in NCursesUI::Window::draw calls
Pass an ArrayView<DisplayAtom> instead of a DisplayLine& so that
the newly common case of passing a single atom does not require
constructing a Vector.
2019-09-25 22:46:39 +10:00
Maxime Coste
f855deaf8b Refactor NCursesUI::Window to reduce the exposed methods
This should make an alternate implementation simpler as less state
has to be tracked.
2019-09-25 22:46:39 +10:00
Maxime Coste
9c2d2ad694 Do not set O_NONBLOCK on stdin
It is not necessary, and impacts also writing to stdout, leading
to broken display on old ncurses versions.

Fixes #3087
2019-09-25 20:33:01 +10:00
Maxime Coste
de3ff78b22 Restore stdin status flags on suspend and quit
Those flags are shared with the parent process, so the non-block
flag added impacts their execution.
2019-09-24 23:28:11 +10:00
Maxime Coste
df6d0355d6 Add support for parsing SS3 key sequences
As discussed on #3087, fixes part of that issue.
2019-09-22 09:16:47 +10:00