From 26a1131243804171abc911a92af5c0fbcadb15eb Mon Sep 17 00:00:00 2001 From: h-east Date: Tue, 10 Oct 2023 00:22:01 +0900 Subject: [PATCH 1/5] Update term.{txt,jax} --- doc/term.jax | 174 ++++++++++++++++++++++++++++++++++++++++--------- en/term.txt | 181 +++++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 288 insertions(+), 67 deletions(-) diff --git a/doc/term.jax b/doc/term.jax index 850c5a167..9cb6a1cd5 100644 --- a/doc/term.jax +++ b/doc/term.jax @@ -1,4 +1,4 @@ -*term.txt* For Vim バージョン 9.0. Last change: 2022 Apr 23 +*term.txt* For Vim バージョン 9.0. Last change: 2023 Jan 15 VIMリファレンスマニュアル by Bram Moolenaar @@ -42,15 +42,10 @@ Unix 以外のシステムでは、TERMCAP を定義してコンパイルした 用できます。 *builtin-terms* *builtin_terms* -どの組み込み端末が利用できるかは、feature.h で定義されているマクロに依存します。 -これらはコンパイル時に設定しなければなりません: - define ":version" の出力 組み込まれる端末 ~ -NO_BUILTIN_TCAPS -builtin_terms なし -SOME_BUILTIN_TCAPS +builtin_terms 一般的なもの (デフォルト) -ALL_BUILTIN_TCAPS ++builtin_terms 全て使用可能 - -利用可能な組み込み端末のリストを見るには ":set term=xxx" とします(GUI でないと -きのみ)。|+builtin_terms|も参照。 +多くの組み込み端末が利用可能です。パッチ 9.0.0280 以降、Vim のバージョンによる +違いはありません。利用可能な組み込み端末のリストは `:set term=xxx` のエラーメッ +セージで見ることができます (GUI を実行していない場合)。|++builtin_terms| も参 +照してください。 termcap のコードが組み込まれているときは、termcap ファイルと組み込みの termcap から、使われている端末用のキーシーケンスを取得しようとします。使われている端末 @@ -89,7 +84,14 @@ termcap のコードが組み込まれているときは、termcap ファイル Note: 't_ti' が空でない場合、Vimは代替画面への切り替えが生じると想定します。こ れにより、シェルコマンドの実行時またはVimの終了時の動作がわずかに変わる場合が -あります。これを回避するには、't_TI' と 't_TE' を使用します。 +あります。これを回避するには、't_TI' と 't_TE' を使用します。(ただし、上書きで +はなく追加してください)。 + +Vim は 't_RK' termcap エントリを使用して、端末が使用しているキーボードプロトコ +ルを検出しようとします。これは 't_TI' の後に送信されますが、何もすることがない +(typeahead も保留中のコマンドもない) 場合にのみ送信されます。これはレスポンス +がシェルコマンドで終わってしまったり、Vim が終了した後に届くのを避けるためで +す。 *xterm-bracketed-paste* 't_BE' がオンの場合、raw モードに入るときに 't_BE' が端末に送信され、raw モー @@ -113,6 +115,10 @@ Note: 't_ti' が空でない場合、Vimは代替画面への切り替えが生 もし Vim の実行中にこれを実行した場合、bracketed paste を無効化するため 't_BD' が端末に送信されます。 +|t_PS| または |t_PE| が設定されていない場合、|t_BE| は使用されません。これは、 +貼り付けられたテキストを囲むエスケープコードが認識できない場合に、bracketed +paste が有効にならないようにするためです。 + 端末が bracketed paste をサポートしているにもかかわらずオプションが自動的に設 定されない場合、以下のような設定を試すことができます: > @@ -122,7 +128,11 @@ Note: 't_ti' が空でない場合、Vimは代替画面への切り替えが生 exec "set t_PS=\e[200~" exec "set t_PE=\e[201~" endif -< + +terminfo エントリ "BE"、"BD"、"PS"、"PE" は、ncurses バージョン 6.4、2023 年初 +頭に、一部の端末用に追加されました。このバージョンであれば、端末を手動で設定す +る必要はないかもしれません。 + *tmux-integration* tmux 内で Vim を実行する際に問題が発生する場合、ここにいくつかのヒントがありま す。もし動かないならその部分はコメントアウトすることができます(これは tmux を @@ -289,6 +299,55 @@ Vim がシーケンス |t_RV| (バージョン要求)への応答を受け取っ で始まっていれば、その端末は 8 ビットモードであると認識し、全てのキーシーケン スを 8 ビット版に変換します。 + *xterm-terminfo-entries* +しばらくの間、terminfo エントリは Vim が使える全ての機能を記述するには不十分で +した。その結果、xterm とよく似たいくつかの端末が、$TERM の端末名の前に +"xterm-" をつけることで、この機能を利用していました。 + +このような端末は xterm と 100% 互換性があるわけではないので、これは問題になり +ます。2023 年の開始時点で、"xterm" の回避策を使用せずにこれらの機能を使用でき +るように、terminfo データベースにいくつかのエントリが追加されました。以下がそ +のエントリです: + + 名前 xterm の値 説明 ~ + RV "\033[>c" リクエストバージョン |t_RV| + + BE "\033[?2004h" bracketed paste モードを有効化 |t_BE| + BD "\033[?2004l" bracketed paste モードを無効化 |t_BD| + PS "\033[200~" 貼り付けテキスト開始 |t_PS| + PE "\033[201~" 貼り付けテキスト終了 |t_PE| + + XM "\033[?1006;1004;1000%?%p1%{1}%=%th%el%;" + マウスの有効 / 無効 |t_XM| + +"XM" エントリは、SGR スタイルのマウスレポートを有効にするために "1006" を含み +ます。これは223以上の桁をサポートします。また、フォーカスレポートを有効にする +"1004" も含まれます。t_fe および t_fd エントリは空のままでよいです (どのみち +terminfo/termcap にはエントリがありません)。 + + *xterm-kitty* *kitty-terminal* +Kitty 端末は特別なケースです。主な理由は、他のほとんどの端末とは動作が異なるか +らですが、デフォルトで他の端末と同じように動作するようにするのではなく、Kitty +を使用する際にアプリケーションがどのように動作する必要があるかを規定しているか +らです。このため、Vim が Kitty 端末で動作するのは非常に困難です。いくつかの例 +外はハードコーディングされていますが、ある特定の端末のために例外を作らなければ +ならないのは全く良いことではありません。 + +問題の 1 つは、$TERM の値が "xterm-kitty" に設定されていることです。Vim の場 +合、これは端末が xterm 互換であることを示すもので、組み込みの xterm termcap エ +ントリーを使用する必要があります。他の多くの端末はこれに依存しています。しか +し、Kitty は完全な xterm 互換ではありません。作者は "xterm-" という接頭辞を無 +視してとにかく terminfo エントリを使うことを提案しました。しかし、t_RV は設定 +されます。そうしないと、自動的に 'ttymouse' を "sgr" に設定するなど、他のこと +がうまくいきません (少なくとも |t_XM| がこれに使われるまでは)。 + +なぜ kitty が $TERM を "xterm-kitty" に設定するのかは不明です。"kitty" の方が +適切ですが、この名前の terminfo エントリーは普及していません。 + +Note kitty キーボードプロトコルの使用は別の機能であることに注意してください。 +|kitty-keyboard-protocol| を参照。 + + ============================================================================== 2. 端末オプション *terminal-options* *termcap-options* *E436* @@ -368,8 +427,11 @@ termcap コードに対応するオプションを設定することによって Vim 独自のもの (標準的なコードはないもの): t_AU 下線色を設定する (ANSI) *t_AU* *'t_AU'* - t_Ce 下波線終了 *t_Ce* *'t_Ce'* - t_Cs 下波線モード *t_Cs* *'t_Cs'* + t_Ce 下波線および下線終了 *t_Ce* *'t_Ce'* + t_Cs 下波線 (波線の下線) モード *t_Cs* *'t_Cs'* + t_Us 2 重下線モード *t_Us* *'t_Us'* + t_ds 点線下線モード *t_ds* *'t_ds'* + t_Ds 破線下線モード *t_Ds* *'t_Ds'* t_Te 取り消し線終了 *t_Te* *'t_Te'* t_Ts 取り消し線モード *t_Ts* *'t_Ts'* t_IS アイコンテキスト設定開始 *t_IS* *'t_IS'* @@ -385,6 +447,10 @@ Vim 独自のもの (標準的なコードはないもの): t_RV 端末バージョン文字列を要求 (xterm および他の *t_RV* *'t_RV'* 仮想端末用) 応答は |v:termresponse| に格納される |xterm-8bit| |'ttymouse'| |xterm-codes| + t_XM マウスレポートの有効/無効 *t_XM* *'t_XM'* + 以下の |mouse-reporting| 参照 + t_RK 端末キーボートプロトコル状態を要求する *t_RK* *'t_RK'* + |t_TI| の後に送信 t_u7 カーソル位置を要求 (xterm 用) *t_u7* *'t_u7'* |'ambiwidth'| 参照 応答は |v:termu7resp| に格納される @@ -413,7 +479,7 @@ Vim 独自のもの (標準的なコードはないもの): t_Si アイコンテキストをスタックに保存 *t_Si* *'t_Si'* t_Ri アイコンテキストをスタックから復元 *t_Ri* *'t_Ri'* t_TE "raw" モードの終了 *t_TE* *'t_TE'* - t_TI 端末を "raw" モードにする *t_TI* *'t_TI'* + t_TI 端末を "raw" モードにする *t_TI* *'t_TI'* t_fe フォーカスイベント追跡を有効化する *t_fe* *'t_fe'* |xterm-focus-event| t_fd フォーカスイベント追跡を無効化する *t_fd* *'t_fd'* @@ -436,6 +502,22 @@ t_SH は 1 つの引数を取らなければなりません: t_RS は、t_RV に対する応答を受け取った場合のみ送られます。termresponse から Terminal.app が認識され得る場合、Mac OS 上では使われません。 + *mouse-reporting* +多くの端末はマウスのクリックを報告し、いくつかの端末はマウスの動きやドラッグを +報告することができます。Vim はこのためにどんなコードが使われているかを知る必要 +があります。 + +これには "XM" terminfo/termcap エントリーを使います。また、Vim には 'ttymouse' +オプションがあり、使用されているマウスプロトコルを指定することができます。指定 +可能な値はオプションを参照してください。 + +Vimが "XM" terminfo/termcap エントリを読み込むことができれば、マウス報告の有 +効/無効を指定するのに使われます。このエントリがない場合は、'ttymouse' の値が使 +われます。 + +"XM" エントリが存在し、最初の数字が "1006" である場合、既に以前に設定されてい +ない限り、"ttymouse" は "sgr" に設定されます。 + キーコード *terminal-key-codes* Note: 可能なかぎり <> 形式を使ってください。 @@ -496,6 +578,7 @@ Note: 可能なかぎり <> 形式を使ってください。 t_%1 ヘルプキー *t_%1* *'t_%1'* t_&8 アンドゥキー *t_&8* *'t_&8'* t_kI インサートキー *t_kI* *'t_kI'* + キーパッドインサートキー t_kD デリートキー *t_kD* *'t_kD'* t_kb バックスペースキー *t_kb* *'t_kb'* t_kB バックタブ(シフト+タブ) ** *t_kB* *'t_kB'* @@ -528,8 +611,13 @@ Note: 可能なかぎり <> 形式を使ってください。 t_KK キーパッド 8 ** *t_KK* *'t_KK'* t_KL キーパッド 9 ** *t_KL* *'t_KL'* マウスコードの先頭部分 ** - t_PS bracketed paste の開始 |xterm-bracketed-paste| *t_PS* *'t_PS'* - t_PE bracketed paste の終了 |xterm-bracketed-paste| *t_PE* *'t_PE'* + + t_PS bracketed paste の開始 *t_PS* *'t_PS'* + |xterm-bracketed-paste| + t_PE bracketed paste の終了 *t_PE* *'t_PE'* + |xterm-bracketed-paste| + Vim ウィンドウがフォーカスを取得 (内部のみ) + Vim ウィンドウがフォーカスを消失 (内部のみ) Note t_so と t_mrについて: termcap に "so" エントリがない場合は "mr" が使われ ます。逆に "mr" がない場合は "so" が使われます。"se" と "me" も同じ関係にあり @@ -566,14 +654,18 @@ Vimは端末がサポートするならば、トゥルーカラーを使うこ び |highlight-guibg| を流用する) をサポートします。これを機能させるには 'termguicolors' オプションをセットする必要があります。 トゥルーカラーをサポートする端末の一覧については -https://gist.github.com/XVilka/8346728 を参照してください。 - -場合によっては 'termguicolors' を設定するだけでは不十分で、|t_8f| と |t_8b| オ -プションを明示的に設定しなければならないことがあります。これらのオプションのデ -フォルトはそれぞれ "^[[38;2;%lu;%lu;%lum" と "^[[48;2;%lu;%lu;%lum" で、 -`$TERM` が `xterm` の時にだけ設定されます。幾つかの端末は同じシーケンスを受け -付けますが、全てのセミコロンをコロンで置き換える必要があります (実際にはコチラ -のほうが互換性の高い方法ですが、広くはサポートされていません): > +https://github.com/termstandard/colors を参照してください。 + +使用する RGB カラーを端末に伝えるために、|t_8f| と |t_8b| termcap エントリが使 +用されます。これらは、ほとんどの端末で動作する値にデフォルトで設定されていま +す。使用している端末で動作しない場合は、手動で設定することができます。デフォル +ト値は以下のように設定されています: > + let &t_8f = "\[38;2;%lu;%lu;%lum" + let &t_8b = "\[48;2;%lu;%lu;%lum" + +端末によっては、セミコロンをすべてコロンに置き換えた同じシーケンスを受け付ける +ものもあります (この方が実際には互換性が高いですが、あまり広くサポートされてい +ません): > let &t_8f = "\[38:2:%lu:%lu:%lum" let &t_8b = "\[48:2:%lu:%lu:%lum" @@ -590,7 +682,7 @@ xterm でのウィンドウサイズ変更はリソース allowWindowOps が有 既定値を上書きするには、次の行を ~/.Xdefaults または ~/.Xresources に書きま す: > - XTerm*allowWindowOps: true + XTerm*allowWindowOps: true そして "xrdb -merge .Xresources" を実行し、この設定を有効化します。コンテキス トメニュー(CTRL キーを押しながらマウス右ボタン)でこの値を確認できます。 @@ -625,9 +717,13 @@ GUIが動作している時 't_Co' は 16777216 に設定されます。 Vimが挿入モードに入るときにはエスケープシーケンス 't_SI' が送られます。置換モ ードに入るときにはエスケープシーケンス 't_SR' が設定されていれば送られます。設 定されていない場合には 't_SI' が送られます。挿入モード及び置換モードを抜けると -きには 't_EI' が送られます。これらは挿入や置換モードにおいてカーソルの形や色を -変えるのに利用できます。またこれらは標準的な termcap/terminfo エントリではない -ので、自分で設定する必要があります。 +きには 't_EI' が送られます。 +Note: 't_EI' が設定されていない場合、't_SI' と 't_SR' は送信されません。また、 +'t_SI' または 't_SR' が設定されていないときは、't_EI' は一度だけ送られます。 + +これは、挿入モードや置換モードでカーソルの形や色を変更するために使用できます。 +これらは標準の termcap/terminfo 項目ではないので、自分で設定する必要がありま +す。 以下は xterm でカーソルの色を変える例です: > if &term =~ "xterm" @@ -637,6 +733,19 @@ Vimが挿入モードに入るときにはエスケープシーケンス 't_SI' endif NOTE: Vim を終了するとき、ノーマルモードでのカーソル設定がそのまま残ります。 Vim を起動する前のカーソル設定は復元されません。 + +For Windows Terminal you can use something like this: > +Windows 端末の場合は、次のような使い方ができます: > + " Note: これは `set termguicolors` または `set t_Co=256` の後に設定する。 + if &term =~ 'xterm' || &term == 'win32' + " DECSCUSR エスケープシーケンスを使用する + let &t_SI = "\e[5 q" " バー点滅 + let &t_SR = "\e[3 q" " 下線点滅 + let &t_EI = "\e[1 q" " ブロック点滅 + let &t_ti ..= "\e[1 q" " ブロック点滅 + let &t_te ..= "\e[0 q" " デフォルト (端末に依存するが、通常はブロック点滅) + endif + {|+cursorshape| つきでコンパイルしたときのみ利用可能} *termcap-title* @@ -746,8 +855,9 @@ Amiga 上では端末名が "amiga" または "builtin_amiga" であればアミ お使いの端末が領域のスクロールをサポートしていないが、行の挿入・削除コマンドを サポートしている場合、複数のウィンドウを開いた状態でスクロールすると、行が上下 -するかもしれません。これが好ましくない場合は 'ttyfast' をオンにしてください。 -するとウィンドウをスクロールするのでなく再描画するようになります。 +するかもしれません。これは、'ttyfast' オプションがリセットされている場合に起こ +ります。それを確認してください: > + verbose set ttyfast? お使いの端末におけるスクロールが非常に遅いが再描画は遅くないという場合は、 'ttyscroll' を 3 などの小さな値にしてください。すると、3 行より多くスクロール @@ -978,6 +1088,8 @@ MS-Windows と xterm ではダブルクリックの間隔は 'mousetime' で設 されるようになります。これはボタンが離されるまで続き、ボタンを離すと文字単位に 戻ります。 +マウスによるスクロールについては |scroll-mouse-wheel| を参照。 + *gpm-mouse* GPM マウスは |+mouse_gpm| 機能を有効にしてコンパイルしたときのみサポートされま す。GPM マウスドライバ(Linux コンソール)はクアドラプルクリックに対応していませ diff --git a/en/term.txt b/en/term.txt index f10340572..35c6b25b9 100644 --- a/en/term.txt +++ b/en/term.txt @@ -1,4 +1,4 @@ -*term.txt* For Vim version 9.0. Last change: 2022 Apr 23 +*term.txt* For Vim version 9.0. Last change: 2023 Jan 15 VIM REFERENCE MANUAL by Bram Moolenaar @@ -43,15 +43,10 @@ On non-Unix systems a termcap is only available if Vim was compiled with TERMCAP defined. *builtin-terms* *builtin_terms* -Which builtin terminals are available depends on a few defines in feature.h, -which need to be set at compile time: - define output of ":version" terminals builtin ~ -NO_BUILTIN_TCAPS -builtin_terms none -SOME_BUILTIN_TCAPS +builtin_terms most common ones (default) -ALL_BUILTIN_TCAPS ++builtin_terms all available - -You can see a list of available builtin terminals with ":set term=xxx" (when -not running the GUI). Also see |+builtin_terms|. +A number of builtin terminals are available. Since patch 9.0.0280 there is no +difference between Vim versions. You can see a list of available builtin +terminals in the error message you get for `:set term=xxx` (when not running +the GUI). Also see |++builtin_terms|. If the termcap code is included Vim will try to get the strings for the terminal you are using from the termcap file and the builtin termcaps. Both @@ -93,7 +88,13 @@ Output resumes when you hit . Note: When 't_ti' is not empty, Vim assumes that it causes switching to the alternate screen. This may slightly change what happens when executing a -shell command or exiting Vim. To avoid this use 't_TI' and 't_TE'. +shell command or exiting Vim. To avoid this use 't_TI' and 't_TE' (but make +sure to add to them, not overwrite). + +Vim will try to detect what keyboard protocol the terminal is using with the +'t_RK' termcap entry. This is sent after 't_TI', but only when there is no +work to do (no typeahead and no pending commands). That is to avoid the +response to end up in a shell command or arrive after Vim exits. *xterm-bracketed-paste* When the 't_BE' option is set then 't_BE' will be sent to the @@ -117,6 +118,10 @@ have a problem with this, disable bracketed paste by putting this in your If this is done while Vim is running the 't_BD' will be sent to the terminal to disable bracketed paste. +If |t_PS| or |t_PE| is not set, then |t_BE| will not be used. This is to make +sure that bracketed paste is not enabled when the escape codes surrounding +pasted text cannot be recognized. + If your terminal supports bracketed paste, but the options are not set automatically, you can try using something like this: > @@ -126,7 +131,11 @@ automatically, you can try using something like this: > exec "set t_PS=\e[200~" exec "set t_PE=\e[201~" endif -< + +The terminfo entries "BE", "BD", "PS" and "PE" were added in ncurses version +6.4, early 2023, for some terminals. If you have this version then you may +not have to manually configure your terminal. + *tmux-integration* If you experience issues when running Vim inside tmux, here are a few hints. You can comment-out parts if something doesn't work (it may depend on the @@ -294,6 +303,58 @@ When Vim receives a response to the |t_RV| (request version) sequence and it starts with CSI, it assumes that the terminal is in 8-bit mode and will convert all key sequences to their 8-bit variants. + *xterm-terminfo-entries* +For some time the terminfo entries were insufficient to describe all the +features tht Vim can use. The builtin xterm termcap entries did have these, +with the result that several terminals that were similar enough to xterm took +advantage of these by prefixing "xterm-" to the terminal name in $TERM. + +This leads to problems, because quite often these terminals are not 100% +compatible with xterm. At the start of 2023 several entries have been added +to the terminfo database to make it possible to use these features without +using the "xterm" workaround. These are the relevant entries (so far): + + name xterm value description ~ + RV "\033[>c" Request version |t_RV| + + BE "\033[?2004h" enable bracketed paste mode |t_BE| + BD "\033[?2004l" disable bracketed paste mode |t_BD| + PS "\033[200~" pasted text start |t_PS| + PE "\033[201~" pasted text end |t_PE| + + XM "\033[?1006;1004;1000%?%p1%{1}%=%th%el%;" + mouse enable / disable |t_XM| + +The "XM" entry includes "1006" to enable SGR style mouse reporting. This +supports columns above 223. It also includes "1004" which enables focus +reporting. The t_fe and t_fd entries can be left empty (they don't have +entries in terminfo/termcap anyway). + + *xterm-kitty* *kitty-terminal* +The Kitty terminal is a special case. Mainly because it works differently +from most other terminals, but also because, instead of trying the fit in and +make it behave like other terminals by default, it dictates how applications +need to work when using Kitty. This makes it very difficult for Vim to work +in a Kitty terminal. Some exceptions have been hard coded, but it is not at +all nice to have to make exceptions for one specific terminal. + +One of the problems is that the value for $TERM is set to "xterm-kitty". For +Vim this is an indication that the terminal is xterm-compatible and the +builtin xterm termcap entries should be used. Many other terminals depend on +this. However, Kitty is not fully xterm compatible. The author suggested to +ignore the "xterm-" prefix and use the terminfo entry anyway, so that is what +happens now, the builtin xterm termcap entries are not used. However, the +t_RV is set, otherwise other things would not work, such as automatically +setting 'ttymouse' to "sgr" (at least until |t_XM| is being used for this). + +It is not clear why kitty sets $TERM to "xterm-kitty", the terminal isn't +really xterm compatible. "kitty" would be more appropriate, but a terminfo +entry with that name is not widespread. + +Note that using the kitty keyboard protocol is a separate feature, see +|kitty-keyboard-protocol|. + + ============================================================================== 2. Terminal options *terminal-options* *termcap-options* *E436* @@ -372,8 +433,11 @@ OUTPUT CODES *terminal-output-codes* Added by Vim (there are no standard codes for these): t_AU set underline color (ANSI) *t_AU* *'t_AU'* - t_Ce undercurl end *t_Ce* *'t_Ce'* - t_Cs undercurl mode *t_Cs* *'t_Cs'* + t_Ce undercurl and underline end *t_Ce* *'t_Ce'* + t_Cs undercurl (curly underline) mode *t_Cs* *'t_Cs'* + t_Us double underline mode *t_Us* *'t_Us'* + t_ds dotted underline mode *t_ds* *'t_ds'* + t_Ds dashed underline mode *t_Ds* *'t_Ds'* t_Te strikethrough end *t_Te* *'t_Te'* t_Ts strikethrough mode *t_Ts* *'t_Ts'* t_IS set icon text start *t_IS* *'t_IS'* @@ -390,6 +454,10 @@ Added by Vim (there are no standard codes for these): xterm and other terminal emulators) The response is stored in |v:termresponse| |xterm-8bit| |'ttymouse'| |xterm-codes| + t_XM enable/disable mouse reporting, *t_XM* *'t_XM'* + see |mouse-reporting| below + t_RK request terminal keyboard protocol state; *t_RK* *'t_RK'* + sent after |t_TI| t_u7 request cursor position (for xterm) *t_u7* *'t_u7'* see |'ambiwidth'| The response is stored in |v:termu7resp| @@ -418,10 +486,10 @@ Added by Vim (there are no standard codes for these): t_Si save icon text to stack *t_Si* *'t_Si'* t_Ri restore icon text from stack *t_Ri* *'t_Ri'* t_TE end of "raw" mode *t_TE* *'t_TE'* - t_TI put terminal into "raw" mode *t_TI* *'t_TI'* - t_fe enable focus-event tracking *t_fe* *'t_fe'* + t_TI put terminal into "raw" mode *t_TI* *'t_TI'* + t_fe enable focus-event tracking *t_fe* *'t_fe'* |xterm-focus-event| - t_fd disable focus-event tracking *t_fd* *'t_fd'* + t_fd disable focus-event tracking *t_fd* *'t_fd'* |xterm-focus-event| Some codes have a start, middle and end part. The start and end are defined @@ -431,8 +499,8 @@ by the termcap option, the middle part is text. set cursor color: t_SC {color name} t_EC t_SH must take one argument: - 0, 1 or none blinking block cursor - 2 block cursor + 0, 1 or none blinking block cursor + 2 block cursor 3 blinking underline cursor 4 underline cursor 5 blinking vertical bar cursor @@ -441,6 +509,21 @@ t_SH must take one argument: t_RS is sent only if the response to t_RV has been received. It is not used on Mac OS when Terminal.app could be recognized from the termresponse. + *mouse-reporting* +Many terminals can report mouse clicks and some can report mouse movement and +dragging. Vim needs to know what codes are being used for this. + +The "XM" terminfo/termcap entry is used for this. Vim also has the 'ttymouse' +option to specify the mouse protocol being used. See the option for the +possible values. + +If Vim can read the "XM" terminfo/termcap entry then it will be used for +enabling and disabling the mouse reporting. If it is missing, then the value +from 'ttymouse' is used to decide how to do this. + +If the "XM" entry exists and the first number is "1006" then 'ttymouse' will +be set to "sgr", unless it was already set earlier. + KEY CODES *terminal-key-codes* Note: Use the <> form if possible @@ -501,6 +584,7 @@ Note: Use the <> form if possible t_%1 help key *t_%1* *'t_%1'* t_&8 undo key *t_&8* *'t_&8'* t_kI insert key *t_kI* *'t_kI'* + keypad insert key t_kD delete key *t_kD* *'t_kD'* t_kb backspace key *t_kb* *'t_kb'* t_kB back-tab (shift-tab) ** *t_kB* *'t_kB'* @@ -533,9 +617,13 @@ Note: Use the <> form if possible t_KK keypad 8 ** *t_KK* *'t_KK'* t_KL keypad 9 ** *t_KL* *'t_KL'* leader of mouse code ** - *t_PS* *'t_PS'* - t_PS start of bracketed paste |xterm-bracketed-paste| - t_PE end of bracketed paste |xterm-bracketed-paste| *t_PE* *'t_PE'* + + t_PS start of bracketed paste *t_PS* *'t_PS'* + |xterm-bracketed-paste| + t_PE end of bracketed paste *t_PE* *'t_PE'* + |xterm-bracketed-paste| + Vim window got focus (internal only) + Vim window lost focus (internal only) Note about t_so and t_mr: When the termcap entry "so" is not present the entry for "mr" is used. And vice versa. The same is done for "se" and "me". @@ -571,15 +659,18 @@ anymore. Vim supports using true colors in the terminal (taken from |highlight-guifg| and |highlight-guibg|), given that the terminal supports this. To make this work the 'termguicolors' option needs to be set. -See https://gist.github.com/XVilka/8346728 for a list of terminals that +See https://github.com/termstandard/colors for a list of terminals that support true colors. -Sometimes setting 'termguicolors' is not enough and one has to set the |t_8f| -and |t_8b| options explicitly. Default values of these options are -"^[[38;2;%lu;%lu;%lum" and "^[[48;2;%lu;%lu;%lum" respectively, but it is only -set when `$TERM` is `xterm`. Some terminals accept the same sequences, but -with all semicolons replaced by colons (this is actually more compatible, but -less widely supported): > +For telling the terminal what RGB color to use the |t_8f| and |t_8b| termcap +entries are used. These are set by default to values that work for most +terminals. If that does not work for your terminal you can set them manually. +The default values are set like this: > + let &t_8f = "\[38;2;%lu;%lu;%lum" + let &t_8b = "\[48;2;%lu;%lu;%lum" + +Some terminals accept the same sequences, but with all semicolons replaced by +colons (this is actually more compatible, but less widely supported): > let &t_8f = "\[38:2:%lu:%lu:%lum" let &t_8b = "\[48:2:%lu:%lu:%lum" @@ -597,7 +688,7 @@ is actually the case. To overrule the default, put this line in your ~/.Xdefaults or ~/.Xresources: > - XTerm*allowWindowOps: true + XTerm*allowWindowOps: true And run "xrdb -merge .Xresources" to make it effective. You can check the value with the context menu (right mouse button while CTRL key is pressed), @@ -630,10 +721,13 @@ When the GUI is running 't_Co' is set to 16777216. *termcap-cursor-shape* *termcap-cursor-color* When Vim enters Insert mode the 't_SI' escape sequence is sent. When Vim enters Replace mode the 't_SR' escape sequence is sent if it is set, otherwise -'t_SI' is sent. When leaving Insert mode or Replace mode 't_EI' is used. This -can be used to change the shape or color of the cursor in Insert or Replace -mode. These are not standard termcap/terminfo entries, you need to set them -yourself. +'t_SI' is sent. When leaving Insert mode or Replace mode 't_EI' is used. +Note: When 't_EI' is not set then 't_SI' and 't_SR' will not be sent. And +when 't_SI' or 't_SR' is not set then 't_EI' is sent only once. + +This can be used to change the shape or color of the cursor in Insert or +Replace mode. These are not standard termcap/terminfo entries, you need to set +them yourself. Example for an xterm, this changes the color of the cursor: > if &term =~ "xterm" let &t_SI = "\]12;purple\x7" @@ -642,6 +736,18 @@ Example for an xterm, this changes the color of the cursor: > endif NOTE: When Vim exits the shape for Normal mode will remain. The shape from before Vim started will not be restored. + +For Windows Terminal you can use something like this: > + " Note: This should be set after `set termguicolors` or `set t_Co=256`. + if &term =~ 'xterm' || &term == 'win32' + " Use DECSCUSR escape sequences + let &t_SI = "\e[5 q" " blink bar + let &t_SR = "\e[3 q" " blink underline + let &t_EI = "\e[1 q" " blink block + let &t_ti ..= "\e[1 q" " blink block + let &t_te ..= "\e[0 q" " default (depends on terminal, normally blink block) + endif + {not available when compiled without the |+cursorshape| feature} *termcap-title* @@ -755,8 +861,9 @@ See the "Options" chapter |options|. If your terminal does not support a scrolling region, but it does support insert/delete line commands, scrolling with multiple windows may make the -lines jump up and down. If you don't want this set the 'ttyfast' option. -This will redraw the window instead of scroll it. +lines jump up and down. This would happen if the 'ttyfast' option has been +reset. Check that with: > + verbose set ttyfast? If your terminal scrolls very slowly, but redrawing is not slow, set the 'ttyscroll' option to a small number, e.g., 3. This will make Vim redraw the @@ -992,6 +1099,8 @@ and then drag) will result in whole words to be selected. This continues until the button is released, at which point the selection is per character again. +For scrolling with the mouse see |scroll-mouse-wheel|. + *gpm-mouse* The GPM mouse is only supported when the |+mouse_gpm| feature was enabled at compile time. The GPM mouse driver (Linux console) does not support quadruple From 22b69062abfac5244c16fda05fe3394062362b0c Mon Sep 17 00:00:00 2001 From: h-east Date: Tue, 10 Oct 2023 00:37:54 +0900 Subject: [PATCH 2/5] Fix by nvcheck --- doc/term.jax | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/doc/term.jax b/doc/term.jax index 9cb6a1cd5..3f0fc2dab 100644 --- a/doc/term.jax +++ b/doc/term.jax @@ -335,14 +335,14 @@ Kitty 端末は特別なケースです。主な理由は、他のほとんど 問題の 1 つは、$TERM の値が "xterm-kitty" に設定されていることです。Vim の場 合、これは端末が xterm 互換であることを示すもので、組み込みの xterm termcap エ -ントリーを使用する必要があります。他の多くの端末はこれに依存しています。しか -し、Kitty は完全な xterm 互換ではありません。作者は "xterm-" という接頭辞を無 -視してとにかく terminfo エントリを使うことを提案しました。しかし、t_RV は設定 -されます。そうしないと、自動的に 'ttymouse' を "sgr" に設定するなど、他のこと -がうまくいきません (少なくとも |t_XM| がこれに使われるまでは)。 +ントリを使用する必要があります。他の多くの端末はこれに依存しています。しかし、 +Kitty は完全な xterm 互換ではありません。作者は "xterm-" という接頭辞を無視し +てとにかく terminfo エントリを使うことを提案しました。しかし、t_RV は設定され +ます。そうしないと、自動的に 'ttymouse' を "sgr" に設定するなど、他のことがう +まくいきません (少なくとも |t_XM| がこれに使われるまでは)。 なぜ kitty が $TERM を "xterm-kitty" に設定するのかは不明です。"kitty" の方が -適切ですが、この名前の terminfo エントリーは普及していません。 +適切ですが、この名前の terminfo エントリは普及していません。 Note kitty キーボードプロトコルの使用は別の機能であることに注意してください。 |kitty-keyboard-protocol| を参照。 @@ -507,7 +507,7 @@ Terminal.app が認識され得る場合、Mac OS 上では使われません。 報告することができます。Vim はこのためにどんなコードが使われているかを知る必要 があります。 -これには "XM" terminfo/termcap エントリーを使います。また、Vim には 'ttymouse' +これには "XM" terminfo/termcap エントリを使います。また、Vim には 'ttymouse' オプションがあり、使用されているマウスプロトコルを指定することができます。指定 可能な値はオプションを参照してください。 From 192b94d603710e4207bd01f2041e8ef7e1f6fab7 Mon Sep 17 00:00:00 2001 From: h_east Date: Tue, 10 Oct 2023 16:11:43 +0900 Subject: [PATCH 3/5] Update doc/term.jax Co-authored-by: K.Takata --- doc/term.jax | 1 - 1 file changed, 1 deletion(-) diff --git a/doc/term.jax b/doc/term.jax index 3f0fc2dab..368b9cfb4 100644 --- a/doc/term.jax +++ b/doc/term.jax @@ -734,7 +734,6 @@ Note: 't_EI' が設定されていない場合、't_SI' と 't_SR' は送信さ NOTE: Vim を終了するとき、ノーマルモードでのカーソル設定がそのまま残ります。 Vim を起動する前のカーソル設定は復元されません。 -For Windows Terminal you can use something like this: > Windows 端末の場合は、次のような使い方ができます: > " Note: これは `set termguicolors` または `set t_Co=256` の後に設定する。 if &term =~ 'xterm' || &term == 'win32' From 293c68eec8202a356d7ea68b41329597c768258b Mon Sep 17 00:00:00 2001 From: h_east Date: Tue, 10 Oct 2023 16:11:55 +0900 Subject: [PATCH 4/5] Update doc/term.jax Co-authored-by: K.Takata --- doc/term.jax | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/term.jax b/doc/term.jax index 368b9cfb4..417b40196 100644 --- a/doc/term.jax +++ b/doc/term.jax @@ -734,7 +734,7 @@ Note: 't_EI' が設定されていない場合、't_SI' と 't_SR' は送信さ NOTE: Vim を終了するとき、ノーマルモードでのカーソル設定がそのまま残ります。 Vim を起動する前のカーソル設定は復元されません。 -Windows 端末の場合は、次のような使い方ができます: > +Windows Terminalの場合は、次のような使い方ができます: > " Note: これは `set termguicolors` または `set t_Co=256` の後に設定する。 if &term =~ 'xterm' || &term == 'win32' " DECSCUSR エスケープシーケンスを使用する From 0050f244a9b2c554cec273c7a88e745913a2a195 Mon Sep 17 00:00:00 2001 From: h-east Date: Tue, 10 Oct 2023 17:09:55 +0900 Subject: [PATCH 5/5] Fix review points --- doc/term.jax | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/doc/term.jax b/doc/term.jax index 3f0fc2dab..7ff7ff19f 100644 --- a/doc/term.jax +++ b/doc/term.jax @@ -305,9 +305,9 @@ Vim がシーケンス |t_RV| (バージョン要求)への応答を受け取っ "xterm-" をつけることで、この機能を利用していました。 このような端末は xterm と 100% 互換性があるわけではないので、これは問題になり -ます。2023 年の開始時点で、"xterm" の回避策を使用せずにこれらの機能を使用でき -るように、terminfo データベースにいくつかのエントリが追加されました。以下がそ -のエントリです: +ます。"xterm" の回避策を使用せずにこれらの機能を使用できるように、2023 年の開 +始時点で、terminfo データベースにいくつかのエントリが追加されました。(今のとこ +ろ) 以下がそのエントリです: 名前 xterm の値 説明 ~ RV "\033[>c" リクエストバージョン |t_RV| @@ -337,9 +337,10 @@ Kitty 端末は特別なケースです。主な理由は、他のほとんど 合、これは端末が xterm 互換であることを示すもので、組み込みの xterm termcap エ ントリを使用する必要があります。他の多くの端末はこれに依存しています。しかし、 Kitty は完全な xterm 互換ではありません。作者は "xterm-" という接頭辞を無視し -てとにかく terminfo エントリを使うことを提案しました。しかし、t_RV は設定され -ます。そうしないと、自動的に 'ttymouse' を "sgr" に設定するなど、他のことがう -まくいきません (少なくとも |t_XM| がこれに使われるまでは)。 +てとにかく terminfo エントリを使うことを提案しました。そのため、現状、組み込み +の xterm termcap エントリは使われないということが起きています。しかし、t_RV は +設定されます。そうしないと、自動的に 'ttymouse' を "sgr" に設定するなど、他の +ことがうまくいきません (少なくとも |t_XM| がこれに使われるまでは)。 なぜ kitty が $TERM を "xterm-kitty" に設定するのかは不明です。"kitty" の方が 適切ですが、この名前の terminfo エントリは普及していません。