Ble.sh: Enhancement of completion

Created on 4 Nov 2017  Â·  14Comments  Â·  Source: akinomyoga/ble.sh

補完に぀いお色々。珟状の補完の仕組みは色々䞍満があるので改修する必芁がある

  • [x] 文脈䟝存の゚スケヌプが䞍完党・䞍自然 (2018-08-25)
  • [x] menu-complete, menu-complete-backward の察応が困難 (2018-09-02)
  • [x] 重い → 保留 (2018-09-02)
  • [x] 候補衚瀺をもっずちゃんずする (2018-09-02)
  • [x] 自動的に候補を提瀺したい (2018-08-25)
  • [x] 絞り蟌み (2018-09-02)

他に以䞋の芁望が出おいる

  • [x] 略語展開 (仕様は未だ䜕も決たっおいない)

    • [x] 静的略語展開

    • [x] 動的略語展開

  • [x] ブレヌス展開の䞭での補完
  • [ ] 远蚘: ヒアストリング・ヒアドキュメントの䞭の補完

2018-08-25 開発ブランチ enhance-complete

enhancement

All 14 comments

芁望ばかりで申し蚳無いですがBash での

shopt -s no_empty_cmd_completion
# 空行時の非補完

のような蚭定を bleopt ずしおも欲しいです。
誀っお空行で補完キヌを抌䞋しおしたい四半秒皋操䜜が効かなくなる皋倧量の補完が働くので。

ご報告ありがずうございたす! これは簡単なので support-vi-mode の方に push したす。

のような蚭定を bleopt ずしおも欲しいです。

  • 0673ace8076e2c8f95fbc43be2d039db565685ad shopt -s no_empty_cmd_completion の時は党く補完を詊みないように倉曎

shopt -s no_empty_cmd_completion の時はコマンド候補を列挙しないようにしおいたのですが、今回は倉数名なども候補ずしお列挙しないようにしたした。圓初は倉数の数はそんなに倚くならないので問題ないず考えおいたのですが、ble.sh が倧量に倉数を定矩するのでその限りではないですね 。

誀っお空行で補完キヌを抌䞋しおしたい四半秒皋操䜜が効かなくなる皋倧量の補完が働くので。

  • 7f0b6d766111e8b2a50b7caee7dac13845dedcfd bleopt 倉数 complete_stdin_frequency (既定倀 50) を远加

ble.sh では (Bash-4.0 以降で) 入力操䜜があるず補完候補生成凊理を䞭断するようにしおいたすが、入力操䜜があったかのチェックは 100 候補凊理する毎に行っおいたした。今回この呚期を 50 に短瞮しお、曎に蚭定できるようにしたした。

  • 7f0b6d766111e8b2a50b7caee7dac13845dedcfd 倉数名候補の列挙でも complete_stdin_frequency 毎の入力チェックを実斜するように倉曎

ありがずうございたす確認したした。

曎新 32037b9b0db37bb20036b46a7378d90a6442e33c...5c23822265cb0d301231d2ade109603874e00116 at branch enhance-complete

補完: 新機胜

  • complete: 曖昧補完 #D0707 #D0708 #D0710 #D0713 #D0743 (fix)
  • complete: Readline 蚭定 completion-ignore-case に察応 #D0709 #D0710
  • complete: ble/cmdinfo/complete:$command_name 察応 #D0711
  • complete: path:... などず入力した時の続きの補完に察応 #D0715
  • complete: 匕甚笊内の゚スケヌプなどを適切に凊理する #D0717
  • complete: 自動補完に察応 #D0724, #D0728, #D0734 & #D0735 (vim-mode), #D0765 (history)
  • complete: カヌ゜ルの右偎に補完結果の䞀郚が含たれる時にスキップする機胜 (bind set skip-completed-text) #D0736
  • complete: 匕甚笊の䞭で補完した時に匕甚笊を閉じる機胜 #D0738
  • complete: 算術匏内郚での倉数名の補完に察応 #D0742
  • complete: 候補䞀芧衚瀺の敎列ず着色 #D0746 #D0747 #D0762 #D0765
  • complete: menu-completion (メニュヌ補完) 察応 #D0749 #D0757 #D0764
  • complete: menu-filter (候補絞り蟌み) 察応 #D0751
  • complete: vi_cmap に斌ける補完 #D0761

補完: バグ修正・察策

  • complete: Cygwin でのコマンド名補完に斌いお .exe の途䞭たで入力した時に正しく補完できない問題の修正 #D0703
  • complete: complete によっお登録されたプログラム補完に察しお倉数 COMP_* が正しく蚭定されない問題の修正 #D0711
  • complete: " や ' を含むファむル名の補完が正しくできない問題の修正 #D0712 #D0714
  • complete: 補完䞭に特殊キヌを入力しおも䞭断しない問題の解消 #D0729
  • complete: クォヌトを認識しないプログラム補完関数に察する察策 #D0739
  • complete: 匕数の途䞭からのプログラム補完の䞍敎合の修正 #D0742 #D0744
  • complete: パラメヌタ展開 ${var} 盎埌からの補完が正しく実行できる様に修正 #D0742

補完: 動䜜倉曎

  • complete: 補完候補生成盎前の shopt -s force_ignore を参照しお候補を制限する様に倉曎 #D0704
  • complete: FIGNORE ぱスケヌプされた挿入文字列に察しおではなくお、候補文字列に察しお刀定する様に倉曎 #D0704
  • complete: 関数名補完を / で区切られた単䜍で行う #D0706 #D0724 (曖昧䞀臎の時は抑制)
  • complete: パラメヌタ展開で厳密䞀臎で䞀意確定の時は他の補完文脈を䜿うように倉曎 #D0740
  • complete: パラメヌタ展開の補完埌に挿入する文字を文脈に䟝存しお倉曎 #D0741
  • complete: パラメヌタ展開の盎埌に補完で挿入する際の゚スケヌプを文脈に䟝存しお倉曎
  • complete: プログラム補完による生成候補でディレクトリ名を省略 #D0755

他: 新機胜

  • edit (RET): 文法的に䞍完党のずきに改行を挿入 #D0684
  • core (ble/util/idle): 簡易タスクスケゞュヌラの実装 #D0721
  • core: add a function ble/function#try #D0725
  • idle: ble/util/idle でバックグラりンドゞョブ埅ち機胜を実装 #D0731 #D0745 (history bugfix)
  • base: --attach=prompt 察応 #D0737
  • base: 初回初期化時の順序の倉曎ず過皋の info による衚瀺
  • decode: modifyOtherKeys 察応の改善 #D0752 #D0756 #D0758 #D0759
  • core (ble/util/assing): 第3匕数以降にコマンドに察する匕数を指定できるように倉曎 #D763

他: バグ修正・察策

  • highlight: 単語着色が乱れるバグの修正 #D0686
  • syntax: bash-3.2 以䞋で _ble_syntax_attr: bad array subscript の゚ラヌが出るバグの修正 #D0687
  • prompt: PS1 で \v が空文字列になるバグの修正 #D0688
  • highlight: 䞊曞きモヌドにおいおコマンドをキャンセルしおも disabled レむダヌの着色が無芖されるバグの修正 #D0689
  • core (ble/term/visible-bell): 暪幅の蚈算を誀っおいるバグの修正 #D0690
  • decode: "set -o vi/emacs" で線集モヌドを切り替えた盎埌に "stty" が倉になる問題の修正 D0691
  • core: LANG=C ずするず動かなくなる問題の察凊 #D0698 #D0699 #D0700
  • history: Cygwin で履歎の初期化に時間がかかる問題の察策 #D0701
  • history: bashrc 読み蟌み盎埌に謎の埅ち時間が発生する問題の察策 #D0702
  • emacs: 貌り付け (bracketed paste) で文字列が二重に挿入されるバグの修正 #D0720
  • main: POSIXLY_CORRECT が蚭定されおいる時の察策 #D0722 #D0726 #D0727
  • edit: POSIXLY_CORRECT を甚いた組み蟌みコマンド䞊曞き察策 #D0722
  • decode: 連想配列に䟝る実装のバグを修正し bash-4.0, 4.1 においおも連想配列を䜿甚 '#D0730'
  • decode: ble-bind -c でシェルの特殊文字を含むコマンドが正しく実行できないバグの修正
  • edit: 履歎項目の数が倍増するバグの修正 #D0732
  • vi: キヌボヌドマクロで特殊キヌが再生されないバグの修正 #D0733
  • isearch: 珟圚䜍眮の衚瀺時の 0 陀算のバグの修正
  • vi: !! をキャンセルしおも操䜜範囲を瀺す着色が消えないバグの修正 #D0760

他

  • refactor: #D0725 #D0750 #D0753 #D0754
  • bash-bug: Bash に察するバグ報告 #D0692 D0695 D0697

曎新 5c23822...8584e82 at branch enhance-complete

補完: 新機胜

  • complete: 自動補完においお履歎からの怜玢に察応 #D0766, #D0769 #D0784 (fix)
  • complete: 自動補完時の M-f C-f 等に察応 #D0767
  • complete: "$hello" などの匕甚笊䞭のパラメヌタ展開がある堎合でも補完に察応 #D0768
  • complete: 配列芁玠代入の右蟺での補完に察応 #D0773
  • complete: ブレヌス展開の途䞭での補完に察応 #D0774
  • auto-complete: ble/widget/auto_complete/accept-and-execute 察応 #D0811
  • complete: 補完関係の蚭定をする為の load hook の远加 #D0812
  • complete: 皮類を指定した補完に察応 #D0820 #D0819 (fix)
  • complete: 静的略語展開に察応 (ble-sabbrev key=value で蚭定) #D0820
  • complete: 動的略語展開に察応 #D0820

補完: バグ・問題点修正

  • complete: 䞀意確定した盎埌の補完ですぐにメニュヌ補完に入るバグの修正 #D0771
  • complete: function fun [ 盎埌の補完で [\[ が挿入される問題の修正 #D0772
  • complete: 曖昧補完で補完を実行しようずするず入力枈みの郚分が削陀されるバグの修正 #D0775
  • complete: 自動補完が起動しなくなっおいるバグの修正 #D0776
  • complete: プログラム補完関数が failglob で倱敗するずシェルが終了する問題の察策 (reported by cmplstofB) #D0781
  • complete: failglob の時コマンド補完候補に * が含たれおしたう問題の修正 (reported by cmplstofB) #D0783
  • complete: 候補䞀芧にお入力枈み範囲の匷調が絞り蟌みにより無効化されるバグの修正 #D0790
  • complete: 自動補完を抜けた埌のマヌク䜍眮が誀っおいるバグの修正 #D0798
  • complete: for a in @ や do @ の䜍眮の補完で゚ラヌメッセヌゞが衚瀺されるバグの修正 #D0810

補完: 動䜜倉曎

  • complete: 入力枈み郚分の評䟡方法の内郚倉曎 #D0777
  • complete: 自動補完の着色の倉曎 #D0780 #D0792
  • complete: プログラム補完で提䟛するコマンドラむン (COMP_*) にお、補完開始点に単語の切れ目を入れる様に倉曎 #D0793
  • auto-complete: C-RET で補完を確定しおコマンド実行 #D0822

他: 新機胜

  • edit: IGNOREEOF に察応 #D0787
  • edit: コマンド exit にお、ゞョブが残っおいる堎合はナヌザに尋ねお終了 #D0789, #D0805 (bugfix)
  • term: 256色察応のない端末での枛色の実装 #D0824

他: バグ・問題点修正

  • isearch: 非同期怜玢ができなくなっおいたバグの修正
  • color: ble-color-setface の遅延初期化順序のバグを修正 (reported by cmplstofB) #D0779
  • decode: CentOS 7 で LC_ALL=C.UTF-8 に察しお゚ラヌメッセヌゞが出る問題の察策 #D0785
  • edit: ゞョブがある時の終了 C-d に぀いお bleopt allow_exit_with_jobs 察応 (request by cmplstofB) #D0786
  • edit: Bash 3.* で C-d によるプログラム実行 (ble-edit/exec:gexec) が遅延するバグの修正
  • syntax: Bash 3.2--4.1 の算術匏バグによる関数定矩の構文解析に倱敗する問題の察策 #D0788
  • highlight: region レむダヌの着色範囲が改行を跚ぐ堎合に既定の着色になるバグの修正 #D0791
  • isearch: 空の怜玢文字列による䞀臎に C-h で戻った時に党䜓が遞択されるバグの修正 #D0794
  • decode: failglob の時 ble-bind -d に倱敗する問題の修正 #D0795
  • edit: command-help のコマンド名抜出に倱敗するバグの修正 (reported by cmplstofB) #D0799
  • syntax: 履歎展開の眮換指瀺子の解析が正確でない問題の修正 (report by cmplstofB) #D0800
  • edit: Bash 3.0 で履歎展開 :& が䜿えない問題の修正 #D0801
  • idle: 負の sleep を詊みお゚ラヌメッセヌゞが出る問題の修正 #D0802
  • bind: ble-detach 時に、Bash 3.0 の " のバむンディングを砎壊するバグの修正 #D0803
  • edit: ble-detach 盎埌にコマンドラむンに蚭定される stty sane が衚瀺されない問題の察策 #D0804
  • core: Bash-3.0 で補完候補がない堎合に゚ラヌメッセヌゞが衚瀺されるバグの修正 #D0807
  • edit: コマンド実行䞭にりィンドりサむズが倉曎された時にプロンプトが衚瀺されおしたう問題の解消 #D0809
  • edit: widget 内で read -e を䜿甚した時・read -e がタむムアりトした時に衚瀺が乱れる問題の解消 #D0809
  • edit: read -e でタむムアりトが効かないバグの修正 #D0809
  • term: 16色の端末で色が化けるバグの修正 #D0823

他: 動䜜倉曎

  • edit: read -e がキャンセル・タむムアりトによっお終了した時に入力文字列を灰色で再衚瀺 #D0809
  • decode: キヌマップの既定の初期化を最初の ble-bind 時に確認する様に倉曎 #D0813
  • core: ble/util/clock 導入 #D0814
  • edit: ble-edit/read -e -t timeout においお、タむムアりトをより高粟床で凊理 (ble/util/clock) #D0814
  • color: face が定矩されおいない時の゚ラヌメッセヌゞの衚瀺方法を倉曎 #D0815
  • edit: コマンド実行時に珟圚のカヌ゜ル䜍眮より䞋に衚瀺されおいる端末の内容を䞊曞きする様に倉曎 #D0816
  • edit: accept-line においお、ちら぀き防止の為、実際のコマンド実行が䌎わない時は info の再描画を行わない #D0816
  • edit: ble/widget/history-expand-line は C-RET ではなく M-^ から束瞛される様に倉曎 #D0820
  • edit: ble/widget/magic-space で履歎展開が行われなかった時、珟圚䜍眮で静的略語展開を詊みる様に倉曎 #D0820
  • isearch: RET でコマンド実行ではなく怜玢を終了するだけに倉曎。C-RET でコマンド実行 #D0822

他

  • Makefile: 䟝存ファむルを .PHONY target ずしお出力 #D0778
  • core: ble/util/assign をリ゚ントラントに修正 #D0782
  • 議論 complete: #D0770 edit: #D0796 vi: #D0796
  • blerc の曎新

@cmplstofB さた。

線集関数の改名

今回の enhance-complete ブランチにおける倉曎で以䞋の線集関数 (widget) の名称を倉曎したしたので、もし ble-bind を䜿甚しおこれらの線集関数に束瞛しおいる堎合には、その蚭定を曞き換えおお䜿い頂ければ幞いです。

  • menu_complete/accept → menu_complete/exit
  • auto_complete/accept → auto_complete/insert
  • auto_complete/accept-on-end → auto_complete/insert-on-end
  • auto_complete/accept-word → auto_complete/insert-word
  • auto_complete/accept-and-execute → auto_complete/accept-line
  • isearch/accept → isearch/accept-line

略語展開

たた略語展開は2皮類察応したした。埌でマニュアル䜜成時にも蚘述する予定ですが先にご説明したす。䜿い勝手などで䜕かありたしたらお知らせ頂ければ幞いです。

  • 動的略語展開 (dabbrev) ず称したものは Readline の dabbrev-expand 様の機胜で $COMP_WORDBREAKS たたは空癜文字で区切られた "単語" を履歎から怜玢しお眮換したす。

    • C-x C-r でカヌ゜ル前の "単語" に぀いお動的略語展開モヌドに入りたす (元々の Bash では C-x C-r は Readline の蚭定の再読蟌ですが ble.sh では意味がないので、動的略語展開に割り圓おるこずにしたした)。

    • 続けお C-r を抌すこずでより前の候補に移動したす。C-g がキャンセルで、動的略語展開を開始する前の状態に戻したす。それ以倖の操䜜は動的略語展開のモヌドを抜けお通垞の操䜜ずしお解釈されたす。

  • 静的略語展開 (sabbrev) ず称したものは zsh-abbreviations 様の機胜で、事前に登録した単語に䞀臎するものを眮き換えたす。

    • 䟋えば ble-sabbrev L='| less' などずしお登録したす。

    • magic-space (SP) を拡匵しお、履歎展開が起こらなかった堎合にカヌ゜ル前の単語に察しお静的略語展開を詊みるようにしたした。

    • C-x ' でカヌ゜ル前の単語に察しお静的略語展開を詊みるようにしたした。

察応ありがずうございたす。
䜿い勝手自䜓は文句なしです
しかしVimモヌドにおいお割り圓おるキヌの倉曎を提案させお䞋さい。
静的略語展開でのカヌ゜ル前の単語に察する展開ですがVimにはCtrl+]ずいうキヌマップがありこれずsabbrev-expandは意味や挙動が類䌌しおいるのでこちらに割り振ったほうがいいかなず思いたした。
bleshではCtrl+]に既定でbellが割り圓おられおいたすがこれはどういう意味でしょうか  。

ずころで静的略語展開の蚭定はcomplete-load-hook経由で蚭定すればいいですかね。

静的略語展開でのカヌ゜ル前の単語に察する展開ですがVimにはCtrl+]ずいうキヌマップがありこれずsabbrev-expandは意味や挙動が類䌌しおいるのでこちらに割り振ったほうがいいかなず思いたした。

教えおいただきありがずうございたす! その様に倉曎いたしたした e5969b7d7a17cdc41cca0e7b7ffb70b366a1fa8c。

bleshではCtrl+]に既定でbellが割り圓おられおいたすがこれはどういう意味でしょうか  。

bell は単に「䜕にも割り圓おられおいない」ずいう事を衚すためだけのものでしたので倧䞈倫です。

ずころで静的略語展開の蚭定はcomplete-load-hook経由で蚭定すればいいですかね。

そうでした。説明するのを忘れおいたした。その通りです。

自動補完の際の描画に関しお少し埮劙な問題ですが話したいこずがありたす。
なお以䞋説明が埒に煩雑ずするだけなのでls(1)コマンドは存圚し「l」ずいう名前のコマンドは存圚しないaliasによる蚭定もされおいないずいう前提で進めたす。

$ ls /tmp

ずいうコマンドラむンを実行した埌

$ l@

のような状態ではlずいう文字列は「自動補完を行なった堎合にされるべき描画」がなされおいたすよねこの堎合だず自動補完を行なった堎合「ls /tmp」ずいう文字列になるのでその「l」はcommand_fileに蚭定された描画。
ずころが実際は「l」ずいう名前のコマンドはないのでこの状態で実行するず゚ラヌになりたす。
結果を優先的に考えるならば䞊の状態における「l」の描画はsyntax_errorに蚭定されたものにすべきではないでしょうか。

  しかし僕自身も迷っおいる郚分はありたす。それは「自動補完は実際のコマンドラむンずみなせるのだからその䞀郚を描画するずき基準ずすべきコマンドラむンは自動補完された党䜓である」ずいう考え方もあるず思うからです。

@akinomyoga 様は埌者の考え方でもっお䞊述のような描画にされおいるのでしょうか。それずも䜕か別の芁因実装が困難・速床が䜎䞋する などでそうされおいるのでしょうか。

実はそれに぀いお少し悩みたした。初めは自動補完を陀いた内容で着色するのが自然ず思ったのですが、たさに

それずも䜕か別の芁因実装が困難・速床が䜎䞋する などで

ずいうこずで、実装が面倒なのでした。䞀方で fish を芋おみたすず、コマンド名を自動補完する堎合には「自動補完の前にコマンドが存圚しおいるかどうか」で着色されたすが、ファむル名を自動補完する堎合には「自動補完の埌にファむルが存圚しおいるかどうか (ずいうより珟圚の入力内容がファむル名の接頭蟞になっおいるかどうか?)」で䞋線が匕かれるようだったので、たあどちらでも良いかず思っおそのたたになったのでした。

自動補完の郚分は実は「実際に文字列を挿入しお」実装されおいるので、これを綺麗に実装する方法を考えるのは少々面倒です 。

  • a. 構文解析の方に "䞀時的に挿入されおいる文字列" を認識させおそこを読み飛ばさせる案? 実は構文解析は前回からの差分だけを曎新するように蚭蚈されおいるのですが、"䞀時的に挿入されおいる文字列" ずいう情報の差分をどういう圢態で衚珟するのかたで含めお再蚭蚈しなければならないですね 。それに萜ち着いお考えるず構文解析噚にこのような構文ず党く関係ないずっお぀けたような機胜を入れるのは蚭蚈ずしお倉です。

  • b. 実際には文字列を挿入せずに実装する案? そうするず今床は画面䞊の文字の配眮を蚈算する時に「画面䞊では衚瀺されおいるが線集文字列には含たれない物䜓」を考慮に入れなければならず、これも面倒そうです。

  • c. 実は実装前の怜蚎でもう䞀぀の案がありたした。別の「りィンドり」をオヌバヌレむで衚瀺するずいうものです。これはたた簡単なりィンドりシステムの仕組みを敎えなければなりたせんが、実装ずしおは䜙り汚くならずに枈みそうに思いたす (远蚘: それでも面倒なこずに倉わりありたせん。たた、詳现に぀いおちゃんず怜蚎しおいないので埌で実装の困難が刀明する可胜性もありたす)。
     以䞋は実装前に調べた時に芋぀けたペヌゞなのですが「オヌバヌザスポット」「オンザスポット」「オフザスポット」「ルヌトりィンドり」ずいう4皮類の仮入力の方法が瀺されおいたした。䞁床、今の実装は「オンザスポット」で、別のりィンドりを䜿うのは「オンオヌバヌスポット」たたは「ルヌトりィンドり」になりたすね

远蚘: オンザスポットで行くなら b. かなず思っお゜ヌスコヌドを芋おみたしたが、やはり面倒そうです 。文字の配眮蚈算も、構文解析ず同様に差分だけを曎新するようにしおいるので、"本圓の線集文字列の差分" ず "仮入力の内容も含めた差分" の2皮類の差分を远跡しなければならなくなりたすね 。うヌん、もっず別の案があるずいいですね 

やはりそうですよね  。
fish(1)での挙動は知らなかったのですがずいうか調べもせずに投皿しおしたいたしたそのような実装をしおいるずいうこずはこの蟺りの問題はそれほど認知されおいないあるいは開発者の間で合意が圢成されおいないたたあるいは実装がかなり面倒であるずいうこずなんでしょうかね。
僕は玠人ながら勝手にble.shや他のシェルの自動補完はb案のような実装がされおいるず思っおいたした。実際は違うのですね。

実は挙げられたWebペヌゞは僕も読んだこずがありたすだからなんだずいう話ですが。オヌバヌザスポットやオンザスポットはrxvt-unicode-256colorsずいう端末゚ミュレヌタにおいお日本語入力がたったくうたく行かず蚭定を匄ったり詊行錯誀しおいる時に遭遇した単語でした。結局あきらめおLibVTEで実装された端末゚ミュレヌタに移行したのですがたさか自動補完の実装においお登堎するずは  。

僕は玠人ながら勝手にble.shや他のシェルの自動補完はb案のような実装がされおいるず思っおいたした。実際は違うのですね。

倚分、これはシェルスクリプトで実装しおいる ble.sh の郜合なので、他のシェルでは違うんでないかなず思いたす。シェルスクリプトで実装しおいるず、どうしおもデヌタ構造に制限がかかっおしたう (耇雑なデヌタ構造をシェル䞊で実珟するこずも可胜ですがずおも面倒でしかもずおも遅い) ずいうこずず、単玔に速床の問題ですね。

(以䞋興味があればですが) たずもな゚ディタですず、線集文字列は行志向で保持したす (あるいは各行の範囲を別のデヌタ構造で保持したす) ので、文字の配眮蚈算は行内で閉じおいたす。たた、実装蚀語の速床も十分速いはずなので行党䜓に察しお再蚈算を実行しおも重くなりたせん。いい感じのデヌタ構造が䜿えれば b 案のような「挿入された物䜓」に察応するのは綺麗にできたす。ble.sh の堎合には、先ずデヌタ構造の速床の問題から、䞀本の文字列で党行の線集文字列を保持しおいたす。曎に䞀行に収たるような堎合でも、毎回構文解析や配眮蚈算を0からやっおいたのでは重くおたたらないので、できるだけ倉曎があった郚分だけ、最小限に曎新をしおいたす。デヌタ構造も貧匱なので (構造䜓の配列が欲しい ) 「挿入された物䜓」などのようなものに新しく察応するのは、様々な箇所を曞き換えなければならないのず速床に盎接効いおくるので蟛いです。因みに zsh-syntax-highlighting は着色のみの蚈算 (文字配眮などは zsh 本䜓が蚈算しおいる) で、しかも構文解析はせずに単玔な着色しかしおいたせんが、それでも毎回党䜓を蚈算しおいるので長い線集文字列に察しお入力に察する遅延が出おいたした (少なくずも数幎前実隓した時は)。

これに぀いおは良い実装案が出おくるたでは眮いおおいお、取り敢えず今の所は察応しないずいうこずにしようかなず思っおいたす。

曎新 8584e82...6ed51e7

新機胜

  • highlight: 倉数代入の右蟺及び配列芁玠の着色に察応 #D0839 854c3b4
  • nsearch: (非むンクリメンタル)履歎怜玢に察応 C-x {C-,}{p,n} history-{,substring-,n}search-{for,back}ward #D0843 e3b7d8b 0d31cd9 253b52e
  • isearch: 怜玢前に遞択状態でがあれば怜玢埌に埩元する #D0845 93f3a0f
  • decode: 貌り付け時など倧量の入力があった時に凊理の進行状況を衚瀺 #D0848 c2d6100
  • decode: 貌り付け時などの高速化の為に䞀括の文字列挿入に察応 (batch-insert) #D0849 48eeb03
  • decode: bleopt decode_isolated_esc=auto でキヌマップに応じお単独 ESC の取扱を切り替え #D0852 9b20b45 edd481c
  • complete: bleopt complete_{auto_complete,menu_filter}= で自動補完・候補絞り蟌みの無効化に察応 #D0852 4425d12
  • vi: テキストオブゞェクト単語の再実装 (reported by cmplstofB) #D0855 9f2a973 ad308ae 3a5c456 6ebcb35
  • vi: オペレヌタ d の特殊ルヌルに察応 #D0855 fa0d3d3

バグ・問題修正

  • decode: ble-bind -d に斌いお -c 及び -x の匕数の匕甚笊が二重になっおいる問題の修正 #D0850
  • auto-complete: 構文゚ラヌが自動補完により解決される時 RET でコマンド実行が抑止されない問題の修正 #D0827 daf360e
  • highlight: shopt -s failglob で配列の指瀺初期化子が゚ラヌ着色される問題の修正 (reported by cmplstofB) #D0838 d6fe413
  • complete: プログラム補完に察しお曖昧補完が効かない時の察策 #D0841 713e95d
  • isearch: ナヌザ入力による割り蟌みで怜玢䜍眮の蚘録に倱敗しおいたバグの修正 #D0843
  • isearch: キャンセル時に䜍眮ずマヌクが正確に埩元されない問題の修正 #D0847
  • isearch, dabbrev: 怜玢凊理䞭にナヌザが䜕か入力するたで珟圚行が曎新されない問題の修正 #D0847
  • decode: 未ロヌドのキヌマップに察しお ble-bind -m -P ble-bind -m kmap -f kspecs - が䜿えない問題の修正 66e202a
  • auto-complete: C-j が単なる "確定" になっおいたのを "確定しお実行" に修正 #D0852 01476a7
  • edit: M-S-f, M-S-b を束瞛するべきずころ M-C-f, M-C-b を束瞛しおいる箇所を修正 #D0852 c68e7d7
  • color: Bash 3.0 で算術匏内の <() がプロセス眮換ず解釈される問題の察策 #D0853 520184d
  • syntax: コメント䞊の単語が䜕故か陀去されないバグの修正 (reported by cmplstofB) #D0854 641583f
  • vi: Bash 3.1 及び 3.2 で C-d 受信の為のリダむレクトに倱敗する問題の修正 #D0857 d4b39b3

動䜜倉曎

  • sabbrev, vi_imap: sabbrev-expand を C-x ' ではなく C-] から束瞛 #D0825 e5969b7
  • core: bleopt に蚭定名を指定子お蚭定内容を衚瀺させる時、蚭定名の存圚を確認する #D0850 725d09c
  • isearch: C-d で珟圚の遞択範囲を削陀する様に倉曎 #D0826 c3bb69e #D0852 db28f74
  • isearch: C-m (RET) で確定した時は遞択範囲を解陀する様に倉曎 #D0826 c3bb69e
  • decode: ble-bind のオプションを再構成 #D0850 f7f1ec8 64ad962
  • decode: 組み蟌みコマンド bind を䞊曞きしお ble.sh の動䜜が阻害されない様に匕数をチェックしお実行 #D0850
  • complete: autoload ble-sabbrev (core-complete.sh), ble-syntax:bash/is-complete (core-syntax.sh) #D0842 df0b769
  • isearch: 線集関数 isearch/accept-line が RET 以倖から束瞛されおいおも RET を実行する様に倉曎 #D0843
  • vi, [in]search: mark 名を敎理 (char/line/block/search に接頭蟞 vi_ 付加し、新しい mark 名を search ずする) #D0843
  • edit: 関数名倉曎 ble/widget/accept-single-line-or/accepts → ble-edit/is-single-complete-line #D0844
  • isearch: 空文字列で怜玢した時の振る舞いを再考 #D0847 d05705e
  • decode: 入力のキヌ埩号の各皮調敎 #D0850 dc013ad
  • dabbrev: C-m, RET で展開終了、C-j, C-RET でコマンド実行 #D0852 01476a7

内郚的倉曎

  • isearch, dabbrev: ble/util/fiberchain による再実装 #D0843, #D0846 2c695cf bdf8072 95268c1
  • edit, vi: 遞択範囲の皮類を衚す mark 名を敎理 a1a6272
  • edit: 関数名倉曎 ble/widget/accept-single-line-or/accepts → ble-edit/is-single-complete-line #D0844 63ec9fe
  • refactor: ファむルの敎理 5e07e7f 1a03da2 673bd1d 55c4224 9ce944c 9a47c57 25487a7 5679ffc b7291a7
  • refactor: 関数名・倉数名の敎理 #D0851 d1b780c 9129c47 4d1181a

master ブランチにマヌゞしたした。ヒアストリング・ヒアドキュメントの補完に぀いおは䜕れ気が向いた時に実装するこずにしたす。

Was this page helpful?
0 / 5 - 0 ratings