/ / ZSH: Widget'ları doğrudan nasıl ZLE? - zsh

ZSH: Widget doğrudan nasıl ZLE? - zsh

zsh

Belgeler bölümünde diyor 18.4 Widget'lar, "widget’ın işi basitçe küçük bir işlem yapmaktır". Ancak, bu eylemleri nasıl çağıracağınız hakkında genel bir açıklama bulamıyorum, yani bir widget nasıl çağrılabilir.

Örneklerde gördüm (örneğin bkz. bu soru-cevap) widget'ları kullanarak tuşlara bağlı olabilir bindkey KEY WIDGET. Daha sonra widget'ı kullanarak KEY.

Geçiş yapmak istedim set-local-history ve denedim:

$ zle set-local-history 1
zle: widgets can only be called when ZLE is active

zle -h çalışmıyor ama buldum burada argümanların açıklaması. Ama öyle bir şey yok gibi görünmüyor --call.

Neyi yanlış yapıyorum? Widget'ı bindkey olmadan aramak nasıl mümkün olur? Mevcut durumu nasıl yazdırabilirim? (set-local-history durumu değiştirir)

Yanıtlar:

7 cevap için № 1

Widget'ı widget tarafından yürütebilirsiniz execute-named-cmdbağlı ESC-x (emacs bağlamaları) veya : (vi bağlamaları):

execute-named-cmd (ESC-x) (:) (unbound)

Bir editör komutunun adını okuyun ve yürütün.

Bu bir mini tampon komut satırının altında, burada zle widget'larını başlatabilirsiniz. (Otomatik tamamlama mevcuttur!):

$ [ESC-x]
execute: set-[TAB]
set-local-history  set-mark-command

Durumunu sorgulamak için zle (yerel geçmiş dahil) değişkeni kullanın $ZLE_STATE (yalnızca widget işlevlerinin içinden erişilebilir):

ZLE_STATE (scalar)

Geçerli zle durumunu tanımlayan bir dizi boşlukla ayrılmış sözcük içerir.

Şu anda, gösterilen durumlar insertüzerine yazma modu veya vi-replace widget'ları tarafından ayarlanan mod ve geçmiş komutları, set-local-history widget'ı tarafından kontrol edilen içe aktarılan girdileri ziyaret eder. Dize şunları içerir insert Eğer komut satırına eklenecek karakterler mevcut karakterleri sağa veya overwrite karakterler olacaksa eklenen mevcut karakterlerin üzerine yaz. Bu içerir localhistory yalnızca yerel geçmiş komutları ziyaret edilecekse veya globalhistory içe aktarılan geçmiş komutları da ziyaret edilecekse.

Alt dizeler alfabetik sırayla sıralanır, böylece gelecekteki bir kanıtta iki belirli alt dizeyi test etmek isterseniz şekilde, aşağıdakileri yaparak eşleştirme yapabilirsiniz:

if [[ $ZLE_STATE == *globalhistory*insert* ]]; then ...; fi

Tarafından gönderilen tüm alıntılar man zshzle.


1 cevap için № 2

Kullanıyorsanız tmux ilişkili anahtarı ile send-keys.

Örnekler:

# Current pane
$ tmux send-keys C-r

# Some targeted pane
$ tmux send-keys -t SESSION_NAME:WINDOW_NUMBER.PANE_NUMBER C-z

İlgili sorular
Yorumlar
Yorum ekle