2017-09-29 14 views
1

私は簡単なZLEウィジェットを作成して、<C-j>というサブシェルを素早く作成しています。ここで私が持っているものです。zle backward-charが期待通りに機能しない

function zle_subshell { 
    zle -U '$()' 
    zle .backward-char 
} 

# register as widget 
zle -N zle_subshell 

# create kbd 
bindkey '^j' zle_subshell 

しかし、zle .backward-charが動作していないことが表示されます。どのような問題がさらに混乱になり、私はあることを、スクリプトを変更した場合ということです:

function zle_subshell { 
    zle -U '$(' 
    zle -U ')' 
    zle .backward-char 
} 

私は)$(のような出力を得る...

それはzle_subshell機能が逆に評価されていることが表示されます。私が気付いていないZLEウィジェットを持ついくつかの明らかな問題はありますか?

答えて

1

zle -Uの使い方はぴったりです。動作が意図されているようです:

zle -U string
...
これはZLEの入力スタックにstringの文字をプッシュ。現在実行されているウィジェットが終了すると、ZLEはあたかもstringの文字がユーザーによって入力されたかのように動作します。

ZLEはスタックを使用するため、このオプションを繰り返し使用するとスタックにプッシュされた最後の文字列が最初に処理されます。ただし、各stringの文字は、文字列に表示される順序で処理されます。

からzshzle(1), ZLE BUILTINS, zle -U

ので、zshのはzle_subshell終了後に入力された)$(かのように動作します。

私たちは、このように直接エディタバッファを変更する(R)BUFFERを変更できます。

function zle_subshell { 
    RBUFFER='$()'"$RBUFFER" 
    repeat 2 do zle .forward-char; done 
    # ((CURSOR=CURSOR+2)) # We could do this instead. 
} 
+0

が、私は 'ZLE -U ...とスタックの実装の理論的根拠は'あるのだろうか。私のユースケースでは間違いなく予想外の動作。 – wpcarro

+1

私も不思議です。ちょうど楽しみのために[http://www.zsh.org/mla/workers/1999/msg02029.html](http://www.zsh.org/mla/workers/1999)]に追加されたようです。 /msg02029.html) – hchbaw

+0

私の前のコメントのURLには適切な参照リンクがないことに気付きました。だから、私はこれらのURLを記録に残したいと思う:http://www.zsh.org/mla/workers/1999/msg02028.html http://www.zsh.org/mla/workers/1999/msg02029。 html – hchbaw

関連する問題