diff options
author | Gregory Anders <8965202+gpanders@users.noreply.github.com> | 2023-11-06 12:42:40 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-06 12:42:40 -0600 |
commit | 56627ca2423e9d6084f87f5bc4639f06d10ecf91 (patch) | |
tree | 98926016c96ef66a6c6e27b339e0c3450180af50 /runtime/doc | |
parent | f9416470b15b3601c5b2d805a8cf3bdabd44a567 (diff) | |
download | rneovim-56627ca2423e9d6084f87f5bc4639f06d10ecf91.tar.gz rneovim-56627ca2423e9d6084f87f5bc4639f06d10ecf91.tar.bz2 rneovim-56627ca2423e9d6084f87f5bc4639f06d10ecf91.zip |
feat(tui): use TermResponse event for OSC responses (#25868)
When the terminal emulator sends an OSC sequence to Nvim (as a response
to another OSC sequence that was first sent by Nvim), populate the OSC
sequence in the v:termresponse variable and fire the TermResponse event.
The escape sequence is also included in the "data" field of the
autocommand callback when the autocommand is defined in Lua.
This makes use of the already documented but unimplemented TermResponse
event. This event exists in Vim but is only fired when Vim receives a
primary device attributes response.
Fixes: https://github.com/neovim/neovim/issues/25856
Diffstat (limited to 'runtime/doc')
-rw-r--r-- | runtime/doc/api.txt | 15 | ||||
-rw-r--r-- | runtime/doc/autocmd.txt | 25 | ||||
-rw-r--r-- | runtime/doc/eval.txt | 16 | ||||
-rw-r--r-- | runtime/doc/news.txt | 3 | ||||
-rw-r--r-- | runtime/doc/vim_diff.txt | 2 |
5 files changed, 43 insertions, 18 deletions
diff --git a/runtime/doc/api.txt b/runtime/doc/api.txt index 4430d97fc7..edf683473f 100644 --- a/runtime/doc/api.txt +++ b/runtime/doc/api.txt @@ -3591,6 +3591,21 @@ nvim_ui_set_option({name}, {value}) *nvim_ui_set_option()* Attributes: ~ |RPC| only +nvim_ui_term_event({event}, {value}) *nvim_ui_term_event()* + Tells Nvim when a terminal event has occurred. + + The following terminal events are supported: + + • "osc_response": The terminal sent a OSC response sequence to Nvim. The + payload is the received OSC sequence. + + Attributes: ~ + |RPC| only + + Parameters: ~ + • {event} Event name + • {payload} Event payload + nvim_ui_try_resize({width}, {height}) *nvim_ui_try_resize()* TODO: Documentation diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt index 4b36a7d4ec..6b698b0868 100644 --- a/runtime/doc/autocmd.txt +++ b/runtime/doc/autocmd.txt @@ -987,12 +987,25 @@ TermClose When a |terminal| job ends. Sets these |v:event| keys: status *TermResponse* -TermResponse After the response to t_RV is received from - the terminal. The value of |v:termresponse| - can be used to do things depending on the - terminal version. May be triggered halfway - through another event (file I/O, a shell - command, or anything else that takes time). +TermResponse When Nvim receives a OSC response from the + terminal. Sets |v:termresponse|. When used + from Lua, the response string is included in + the "data" field of the autocommand callback. + May be triggered halfway through another event + (file I/O, a shell command, or anything else + that takes time). Example: >lua + + -- Query the terminal palette for the RGB value of color 1 + -- (red) using OSC 4 + vim.api.nvim_create_autocmd('TermResponse', { + once = true, + callback = function(args) + local resp = args.data + local r, g, b = resp:match("\x1b%]4;1;rgb:(%w+)/(%w+)/(%w+)") + end, + }) + io.stdout:write("\x1b]4;1;?\x1b\\") +< *TextChanged* TextChanged After a change was made to the text in the current buffer in Normal mode. That is after diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt index 4cb29205a5..2223829548 100644 --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -2318,18 +2318,10 @@ v:t_string Value of |String| type. Read-only. See: |type()| v:t_blob Value of |Blob| type. Read-only. See: |type()| *v:termresponse* *termresponse-variable* -v:termresponse The escape sequence returned by the terminal for the DA - (request primary device attributes) control sequence. It is - set when Vim receives an escape sequence that starts with ESC - [ or CSI and ends in a 'c', with only digits, ';' and '.' in - between. - When this option is set, the TermResponse autocommand event is - fired, so that you can react to the response from the - terminal. - The response from a new xterm is: "<Esc>[ Pp ; Pv ; Pc c". Pp - is the terminal type: 0 for vt100 and 1 for vt220. Pv is the - patch level (since this was introduced in patch 95, it's - always 95 or bigger). Pc is always zero. +v:termresponse The value of the most recent OSC escape sequence received by + Nvim from the terminal. This can be read in a |TermResponse| + event handler after querying the terminal using another escape + sequence. *v:testing* *testing-variable* v:testing Must be set before using `test_garbagecollect_now()`. diff --git a/runtime/doc/news.txt b/runtime/doc/news.txt index e32e1aadb6..fa77e8d086 100644 --- a/runtime/doc/news.txt +++ b/runtime/doc/news.txt @@ -205,6 +205,9 @@ The following new APIs and features were added. • Added |vim.base64.encode()| and |vim.base64.decode()| for encoding and decoding strings using Base64 encoding. +• The |TermResponse| autocommand event can be used with |v:termresponse| to + read escape sequence responses from the terminal. + ============================================================================== CHANGED FEATURES *news-changed* diff --git a/runtime/doc/vim_diff.txt b/runtime/doc/vim_diff.txt index 8249179187..efebf46d85 100644 --- a/runtime/doc/vim_diff.txt +++ b/runtime/doc/vim_diff.txt @@ -567,6 +567,8 @@ Working directory (Vim implemented some of these after Nvim): Autocommands: - Fixed inconsistent behavior in execution of nested autocommands: https://github.com/neovim/neovim/issues/23368 +- |TermResponse| is fired for any OSC sequence received from the terminal, + instead of the Primary Device Attributes response. |v:termresponse| ============================================================================== Missing features *nvim-missing* |