Skip to content

Commit

Permalink
term: disable "modifyOtherKeys" and do not send "DA2" for "st"
Browse files Browse the repository at this point in the history
  • Loading branch information
akinomyoga committed Aug 19, 2021
1 parent 0e16dbd commit 92c7b26
Show file tree
Hide file tree
Showing 4 changed files with 297 additions and 7 deletions.
1 change: 1 addition & 0 deletions memo/ChangeLog.md
Expand Up @@ -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

Expand Down
272 changes: 272 additions & 0 deletions note.txt
Expand Up @@ -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: いつの間にかに日本語の文字幅の計算がおかしくなっている
Expand Down Expand Up @@ -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 に一致する場合には着色するのが親切だ
Expand Down Expand Up @@ -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]
Expand Down
14 changes: 11 additions & 3 deletions src/decode.sh
Expand Up @@ -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
}

Expand Down
17 changes: 13 additions & 4 deletions src/util.sh
Expand Up @@ -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
}
Expand Down

0 comments on commit 92c7b26

Please sign in to comment.