Я можу відповісти лише за те zsh
, де це можна зробити, так.
По-перше, вже є деякі віджети для поступового завершення . Перший, мабуть, Ю. Фуджі. Хоча його сайт на японській мові, ви можете легко зрозуміти, не розмовляючи цією мовою, як вона працює та як нею користуватися.
Авто-фу - це розширення оригінального сценарію.
Поки посилання. У zsh
в редакторі ЗШ лінії ( zle
) відповідають за інтерактивне використання командного рядка. Окрім безлічі інших змінних, що надаються віджетам (див. man zshzle
), Вони цікавлять вас, оскільки ви бажаєте захопити поточний командний рядок :
$ BUFFER : весь вміст буфера редагування.
$ LBUFFER : частина буфера, що знаходиться зліва від позиції курсору.
$ RBUFFER : Частина буфера, що знаходиться праворуч від позиції курсору.
Ці змінні можна записати, що змінить поточний командний рядок!
Щоб зафіксувати кожен набір клавіш, ви можете змінити віджет, self-insert
який виконується (за замовчуванням) для кожного натискання клавіші, крім LF
або CR
. Ось приклад, який не робить нічого дуже корисного, але додає до кожного натискання клавіші крапку $RBUFFER
- лише щоб проілюструвати, як це працює:
function self-insert() {
RBUFFER+="."
# execute some other command, but ensure they don't produce any output.
zle .self-insert
}
zle -N self-insert
.self-insert
є вбудованим віджетом, тому ми не стикаємося з циклом нескінченності.
Отже, ви можете або починати з нуля, або починати з сценарію Fujii і змінювати його. Однією з переваг останнього є те, що він також виконує певні операції зі видаленням натискань клавіш, якими я тут нехтував.