From 92c7b2678ca5d1c9362cfa3d1970f4d4cfd01473 Mon Sep 17 00:00:00 2001 From: Koichi Murase Date: Thu, 19 Aug 2021 19:32:56 +0900 Subject: [PATCH] term: disable "modifyOtherKeys" and do not send "DA2" for "st" --- memo/ChangeLog.md | 1 + note.txt | 272 ++++++++++++++++++++++++++++++++++++++++++++++ src/decode.sh | 14 ++- src/util.sh | 17 ++- 4 files changed, 297 insertions(+), 7 deletions(-) diff --git a/memo/ChangeLog.md b/memo/ChangeLog.md index 6fe744f2..b7a455b6 100644 --- a/memo/ChangeLog.md +++ b/memo/ChangeLog.md @@ -183,6 +183,7 @@ - decode: work around kitty keypad keys in modifyOtherKeys (reported by Nudin) `#D1626` 27c80f9 - util (`modifyOtherKeys`): update the workaround for a new quiark of kitty `#D1627` 3e4ecf5 - main: work around `set -B` and `set -k` `#D1628` a860769 +- term: disable `modifyOtherKeys` and do not send `DA2` for `st` (requested by Shahabaz-Bagwan) `#D1632` 0000000 ## Internal changes and fixes diff --git a/note.txt b/note.txt index 0a5386bc..b6b33ed8 100644 --- a/note.txt +++ b/note.txt @@ -1275,6 +1275,106 @@ bash_tips bug-bash, third-party bugs ------------------------------------------------------------------------------- +2021-08-19 + + * st: st 2>&- で開始しようとすると何も表示されない。st 2>&- 0>&- で開始しよう + とした場合にはちゃんと動く。これは以下の様に修正するべき。後で送る。 + + $ NOBLE=1 ./st.master 0>&- 1>&- 2>&- + $ ./st.master 0>&- 1>&- 2>&- + + | diff --git a/st.c b/st.c + | index ebdf360..a9338e1 100644 + | --- a/st.c + | +++ b/st.c + | @@ -793,14 +793,15 @@ ttynew(const char *line, char *cmd, const char *out, char **args) + | break; + | case 0: + | close(iofd); + | + close(m); + | setsid(); /* create a new process group */ + | dup2(s, 0); + | dup2(s, 1); + | dup2(s, 2); + | if (ioctl(s, TIOCSCTTY, NULL) < 0) + | die("ioctl TIOCSCTTY failed: %s\n", strerror(errno)); + | - close(s); + | - close(m); + | + if (s > 2) + | + close(s); + | #ifdef __OpenBSD__ + | if (pledge("stdio getpw proc exec", NULL) == -1) + | die("pledge\n"); + + メールを投稿してみたが全然以下のページに反映されない。 + ブロックされているのだろうか。或いは初回は手動承認が必要になるという事か。 + maintainer は数日に一回しか返信しない様なので取り敢えず一週間待ってみようと思う。 + + https://lists.suckless.org/hackers/2108/index.html + +2021-07-20 + + * bashbug: ${text//$'\n'+( )/$'\n'} が滅茶苦茶遅い + https://www.reddit.com/r/bash/comments/m4ts7j/why_is_this_spacereplacing_parameter_expansion/ + + この記事では bash はそういう用途に使う物ではないだの何だのと言って別の手法 + を使えと書いているが、明らかにこれは bash のバグである。修正するべきだし修 + 正は難しくない筈である。後で観察する事にする。 + +2021-06-12 + + * bash: 開発版 version に関して + + 実は bash-dev 版は 5.1.xxx の儘推移している。本当は 5.2.xxx-alpha の様な形 + にするべきなのではないかという気がする。よく分からない。提案しようかとも思っ + たが実際の所は 5.1.x-maint になっている事から、本来は devel branch は既に出 + た version のメンテナンスモードという意味合いだったのかも知れない。然し、こ + の様になっていると次の version かどうかを判定するのに BASH_VERSINFO を利用 + する事ができない。今迄は新しい version になる事によって何か機能が減るなどし + て動かなくなるという事はなかったので余り気にならなかったが、"テスト" という + 観点から本来は早くに bash-5.2 に増やすべきなのではないかという気がする。 + + 差し当たっての ble.sh の側では release status も見て version を上げる様にす + るのが良いだろうか。と思ったが…。自分はテストの為に release を release に + しているし、逆に maint で動かしているユーザーがいたとしても遅くて使い物にな + らない。自分の relstatus に関してはまた別の値を指定するという手もあるのかも + しれない。と思ったが、それをするぐらいであれば実は configure.ac に於いて + version を 5.2 に書き換えてしまえば良いのである。 + +2021-06-09 + + * complete: contra x screen-4.99 で auto-menu を有効にしていると、 + + $ cd .mwg/src/ble.sh/wiki + $ l backup/[TAB][C-u] + + とした以降にコマンド1文字目を入力した時点で glitch が生じる。 + contra がどういうデータを受信しているのか確認する必要がある。 + + 通常の screen では問題は生じない様だ。また contra の代わりに mintty を使っ + ても問題は生じない。変な文字幅モードが関係している可能性もある。 + +2021-05-30 + + * https://github.com/dnmfarrell/jp + https://www.reddit.com/r/bash/comments/nmzans/jp_a_real_json_processor_in_bash + + 何か変な事をしている。プロセス置換で読みだした fd に対して読み書きを実行している。 + 一体どういう事だろうか…。 + + $ exec 3< <(:) + $ echo hello >&3 # これはエラーになる + $ echo hello >/dev/fd/3 # これは行ける + $ read -u 3 + $ echo $REPLY # 読める + $ yes | head -1000000 > /dev/fd/3 # これはやはりブロックする C-c で中止 + $ mapfile -t arr < /dev/fd/3 + $ echo ${#arr[@]} # 32768要素 ("y" + LF)x32768 = 64kB つまりパイプバッファのサイズ + +2021-05-27 + + * declare -p -A として見たら contra の状態が壊れた。何だろうか。 + 2021-05-23 * bash: いつの間にかに日本語の文字幅の計算がおかしくなっている @@ -1452,6 +1552,154 @@ bash_tips 0.5 ControlPanel/TUI Framework 0.4 progcolor +2021-07-20 + + * bind --help の exit status が 1 になっている + +2021-07-14 + + * bash-it によるプロンプト設定が prompt attach で反映されない。 + + PROMPT_COMMAND 経由で PS1 を設定していると反映されないのだろうかと思ったが + そういう訳でもない様だ。 + + powerline-multiline で発生するとの事だが再現しない。 + というか powerline-multiline で発生する固有の問題なのか、 + それとも他の theme でも動作するのかの情報についても書いていない。 + +2021-07-13 + + * auto-menu: 一旦 (no items) が表示されるとそれ以降 auto-menu が動作しない + + auto-menu が有効になっている時に一旦 (no items) が表示されるとそれがそのま + まになって二度と auto-menu が起動しなくなる。 + + またこの時に C-l で再描画すると info に何も表示されなくなる。実はこれは + menu が表示されている時には常に再現する問題である。 + +2021-06-21 + + * auto-menu が有効になっている時に複数行編集で座標が変になる + + 2021-07-13 今試しても問題は再現しない。 + + 2021-07-18 再現した。履歴に複数行の項目が含まれている時に、その履歴が呼び出 + されると問題が発生する。ble-bind ... と入力した時に発生した。というかこれは + 本当に auto-menu の問題なのかどうか分からない。取り敢えず、textmap を再確認 + する必要がある気がする。ずれの量的にも前回の textmap の時と似たような振る舞 + いの様に見える。 + + 2021-07-19 chatoyancy の上では再現しない? vaiio2016 の上でも再現しない。 + +2021-06-18 + + * grapheme: ble/canvas/trace の lc lg の grapheme cluster 対応について + Ref #D1619 + + 基底文字だけを指定しても、最後の Extend を指定しても端末によって左の書記素 + クラスターが破壊される可能性がある。書記素クラスター全体で出力する必要があ + る。lc lg の組ではなくて lcs lw lg の組で結果を返さなければならない。lc lg + はデバグ用なので其処まで配慮する意義は薄い。 + + そもそも lc lg の枠組みはそろそろ削除しても良いのではないかという気すらする。 + + * grapheme: 私用文字で置き換える事により書記素クラスター単位での編集を可能にする可能性 + Ref #D1619 + + 現在の所その必要性は限りなく低いと考えられる。 + + * grapheme: Unicode version 毎の振る舞いの違い? + Ref #D1619 + + emoji_version と同様に grapheme_cluster についても version 毎の違いを考えて + も良いのかもしれない。 + + * emoji: Emoji 対応状況自動判定 + Ref #D1619 + + | これも自動検出の対象にしても良いのでは。という気がする。というかそうする + | べきである。所で Zle は実は内部的にそういう事をしている可能性がある。 + | + | と思ったが端末によって unqualified の取り扱いもばらばらだろうし ZWJ に対 + | 応しているのかどうかも不明だし、という事を考えていくと単に + | legacy/extended を区別すれば良いという訳ではない。場合によっては ZWJ シー + | ケンスに対応しているかどうかと言ったフラグまで管理しなければならないかも + | しれない。とは言いつつ実際にそのように振る舞う端末が存在するのかどうかも + | 不明である。なので、これは実際の端末の振る舞いを整理しながら考える必要が + | ある。 + | + | 端末ごとの絵文字の振る舞いについて調べる必要がある気がする。kitty/vte は + | unqualified はテキスト表示で EPVS によって絵文字になる。RLogin は + | unqualified は半角で表示される? 幅は VS で変化しないように見える。mintty + | は試した限りでは Emoji に対応していない。既定で off になっているという事 + | だろうか。 + | + | 以下の振る舞いも端末の対応状況に応じて実装する。 + | + | * EPVS の時には emoji_width または 2 になる様にしている。然し、絵文字の表示 + | ができない端末では 2 にせずに普通の文字として求めた方が良い可能性もある。 + + * legacy vs extended + * unqualified をどう取り扱うか。EPVS 及び TPVS がどう作用するか + * ZWJ sequence に対応しているかどうか + + 現実の端末に於いてそれぞれどう対応されているか、そして三つの対応状況の組み + 合わせはどうなっているかについても調べる必要がある。 + + * test: ログを何処かに保存する機能? その場合には着色等は除外する + + * syntax_debug の時にコマンド実行すると実行位置が変だ + + うーん。info を削除する時のシーケンスが間違っている? menu の表示時には何も + 問題がない。menu に関しては消去してから実行するからだろうか。或いは、変なタ + イミングで info が更新されて info が表示されてはいけないタイミングで表示さ + れているという事だろうか。 + + * progcomp の出力に関する議論 (reported by oc1024) + + https://github.com/akinomyoga/ble.sh/issues/121 + + うーん。どうするのが良いのか微妙。Bash と同じ様に動作するべきなのか、或いは + 出力を抑制するべきなのか。関連する議論が幾つかあった様な気がする。というか + 最近抑制する様に変更した様な気がするが何故再発しているのだろう。実際に確認 + してみた所、歴史的には常に出力を許している様にも見える。不思議だ。 + + うーん。実は progcomp-helper-func ではなくて、compgen の時点で出力を抑制し + ていたのだったろうか。 + + * 98835b5 2021-05-17 これは _ble_util_fd_stderr 等に保存した fd を使う様に + する変更。本質的には tty を使う様になっている。元から helper-func で tty + にリダイレクトしていた。 + + * 9d4ad56 2021-05-06 うーん。以前の報告が見つかった。よく見たらこれも + oc1024 による報告である。この commit では stderr に関連する変更はない。 + + https://github.com/akinomyoga/ble.sh/issues/97 + + どうもこの時は個別にバグのある関数を置き換えたのだった。修正は 9d4ad56 で + ある。stderr/stdout に対しては全く変更していないし細かい議論もしていない。 + + * 4fc51ae 2021-03-10 fzf に対する対策。これについては明示的に tty にリダイ + レクトしている。これより前は compgen 呼び出しの stderr への redirect の為 + に stderr は抑制されていた。 + + * 68f8077a 2020-04-06 これは compgen 呼び出しに builtin を付加しただけ。 + + * 1ca53868 2019-01-01 これは complete -p の解析に機能を追加した物。この時点 + で compgen の stderr は抑制している。 + +2021-06-13 + + * menu-complete: 末尾一致 (skip-completed-text) が考慮に入っていない + + これは最終的な挿入時に処理するべきか、或いはメニュー項目を一時挿入している + 時から処理するべきか。メニュー項目を一時挿入している時から処理しないと振る + 舞いとして不自然になる気がする。 + + * 終了ステータスが 2 の時に前回のコマンドを再ロードするというのは面白い試みかもしれない + + 最近人気らしい thefuck により修正後のコマンドが取得できればなお良い。 + 2021-05-29 * syntax: 単語が sabbrev に一致する場合には着色するのが親切だ @@ -4666,6 +4914,30 @@ bash_tips Done (実装ログ) ------------------------------------------------------------------------------- +2021-08-19 + + * st: unknown csi error message (reported by ) [#D1632] + + * 先ず st は DA2 に応答しない。DA1 に対して CSI ?6c を返答する。 + + 何れにしても古い st が一掃されるまでは CSI ?6c を st と解釈するなどの処置 + で良い気がする。 + + と思ったら何と st は TERM に st-256color を設定する様だ。なので先にこれを + 見て st と判明したならば DA2 は送信しなくて良い。modifyOtherKeys に関して + も現在の st の構造を見る限りは将来的に実装すると思われない。完全に無効化 + するという事で良い気がする。 + + * ok: 然し報告によると stderr が slave の stdrr に書き込まれると言う…。不 + 思議な事である。と思って改めて報告を見たら違った。エラーメッセージは起動 + 元の terminal に表示されているのだった。つまりこれはそもそも期待通りの振 + る舞いであり問題はない様に思われる。その旨説明する。 + + * ok: st で prompt_status_line を有効にしていると座標計算がずれるどうやらこ + れは雷絵文字の幅計算がずれているのが原因の様である。これはまあ仕方の無い + ことである。もしちゃんと対応するのだとしたらまずは st をちゃんと検出でき + る様にしなければならない。 + 2021-07-19 * edit: support TMOUT for session timeout [#D1631] diff --git a/src/decode.sh b/src/decode.sh index 6195e99e..03459a3f 100644 --- a/src/decode.sh +++ b/src/decode.sh @@ -3935,10 +3935,18 @@ function ble/decode/attach { # ble.sh bind の設置 ble/decode/bind/bind # 20ms - # Note #D1213: linux コンソール (kernel 5.0.0) は "\e[>" - # でエスケープシーケンスを閉じてしまう。5.4.8 は大丈夫。 - [[ $TERM == linux ]] || + case $TERM in + (linux) + # Note #D1213: linux コンソール (kernel 5.0.0) は "\e[>" + # でエスケープシーケンスを閉じてしまう。5.4.8 は大丈夫。 + _ble_term_TERM=linux ;; + (st|st-*) + # st の unknown csi sequence メッセージに対して文句を言う人がいた。 + # st は TERM で判定できるので DA2 はスキップできる。 + _ble_term_TERM=st ;; + (*) ble/util/buffer $'\e[>c' # DA2 要求 (ble-decode-char/csi/.decode で受信) + esac return 0 } diff --git a/src/util.sh b/src/util.sh index 97f200b1..8cbdc943 100644 --- a/src/util.sh +++ b/src/util.sh @@ -5609,10 +5609,19 @@ function ble/term/modifyOtherKeys/.supported { # 改造版 Poderosa は通知でウィンドウサイズを毎回変更するので表示が乱れてしまう [[ $MWG_LOGINTERM == rosaterm ]] && return 1 - # Note #D1213: linux (kernel 5.0.0) は "\e[>" でエスケープシーケンスを閉じてしまう。 - # 5.4.8 は大丈夫だがそれでも modifyOtherKeys に対応していない。 - # Solaris のコンソールもそのまま出力してしまう。 - [[ $TERM == linux || $TERM == minix || $TERM == sun* ]] && return 1 + case $TERM in + (linux) + # Note #D1213: linux (kernel 5.0.0) は "\e[>" でエスケープシーケンスを閉じ + # てしまう。5.4.8 は大丈夫だがそれでも modifyOtherKeys に対応していない。 + return 1 ;; + (minux|sun*) + # minix, Solaris のコンソールもそのまま出力してしまう。 + return 1 ;; + (st|st-*) + # Note #D1631: st のエラーログに unknown csi が出るとの文句が出たので無効化。 + # 恐らく将来に亘って st は modifyOtherKeys には対応しないだろう。 + return 1 ;; + esac return 0 }