Esempio: Voglio di impegnare la chiave F12 al comando echo "foobar"
tale che ogni volta che mi ha colpito F12 il "foobar" messaggio verrà stampato a schermo. Idealmente potrebbe essere qualsiasi comando di shell arbitrario, non solo builtins. Come si fa a fare questo?In bash, come si associa un tasto funzione a un comando?
risposta
è possibile determinare la sequenza di caratteri emessa da una chiave premendo Ctrl -. v nella riga di comando, quindi premendo il tasto che ti interessa Sul mio sistema per F12, ottengo ^[[24~
. Il ^[
rappresenta Esc. Diversi tipi di terminali o emulatori di terminali possono emettere codici diversi per la stessa chiave.
Al prompt Bash è possibile immettere un comando come questo per abilitare la macro chiave in modo da poterlo provare.
bind '"\e[24~":"foobar"'
Ora, quando si preme F12, si otterrà "foobar" sulla riga di comando pronto per ulteriori modifiche. Se si voleva una sequenza di tasti per entrare immediatamente un comando, è possibile aggiungere una nuova riga:
bind '"\e[24~":"pwd\n"'
Ora, quando si preme F12, si otterrà la directory corrente visualizzata senza dover premere Invio . Cosa succede se hai già digitato qualcosa sulla linea e lo usi che viene eseguito automaticamente? Potrebbe diventare caotico. Tuttavia, si potrebbe cancellare la linea come parte della macro:
bind '"\e[24~":"\C-k \C-upwd\n"'
Lo spazio fa in modo che il Ctrl - u ha qualcosa da eliminare per mantenere il campanello da suonare.
Una volta che la macro ha funzionato nel modo desiderato, è possibile renderla persistente aggiungendola al file ~/.inputrc
.Non c'è bisogno per il comando bind
o l'insieme esterno di virgolette singole:
"\e[24~":"\C-k \C-upwd\n"
Edit:
È inoltre possibile creare una chiave vincolante che eseguirà qualcosa senza disturbare la riga di comando corrente.
bind -x '"\eW":"who"'
Poi mentre si sta digitando un comando che richiede un nome utente, ad esempio, ed è necessario conoscere i nomi di utenti che hanno effettuato l'accesso, è possibile premere Alt - Maiusc - W e l'output di who
verrà visualizzato e il prompt verrà emesso nuovamente con il comando parziale intatto e il cursore nella stessa posizione nella riga.
Sfortunatamente, questo non funziona correttamente per chiavi come F12 che emettono più di due caratteri. In alcuni casi questo può essere risolto.
Il comando (who
in questo caso) potrebbe essere un qualsiasi eseguibile: un programma, uno script o una funzione.
Questa soluzione è specifica per ambienti X11 e non ha nulla a che fare con bash, ma aggiungendo la seguente alle vostre .Xmodmaps
% loadkeys
keycode 88 = F12
string F12 = "foobar"
%
invierà la stringa "pippo" al terminale su di colpire F12.
Ricordare che questo non è lo stesso della shell che esegue un comando. Se in realtà vuoi eseguire un comando, dovrai premere Invio (o avere la stringa inviata per farlo). Probabilmente vorrà anche essere al sicuro e cancellare la linea prima. – Cascabel
Sarebbe fantastico, ma non sembra funzionare come in Fedora 20 comunque. Ho anche provato a usare xev per trovare il keycode corretto per F12 prima (nel mio caso, 96) e usarlo invece di 88. Nessuno dei due funziona. – BobDoolittle
È possibile definire associazioni di tasti bash in .inputrc (file di configurazione per la libreria GNU Readline). La sintassi è
< keysym o il tasto nome >: macro
ad esempio:
Control-o: "> output"
sarà creare una macro che inserisce "> uscita" quando si preme
"\e[11~": "echo foobar"
volontà creare una macro che inserisca "echo foobar" quando si preme F1 ... Non so cosa sia fuori mano il keysym per F11.
Bello, ma solo "inserti", corretto? –
puoi usare "\ n" all'interno di una macro, per aggiungere un carattere di nuova riga: –
Questo funziona meglio per me in quanto definisce la mappatura dei tasti all'apertura di un terminale. – Heldraug
- 1. Come si associa un comando a un MenuItem (WPF)?
- 2. Come si associa un tasto a "la funzione rappresentata dalla seguente sequenza di tasti"?
- 3. Come si associa il tasto Invio a una funzione in tkinter?
- 4. Come si associa una pressione di tasto a un DelegateCommand in WPF composito?
- 5. Come si impedisce a bash di utilizzare un comando incorporato?
- 6. Come si associa a un colore in un ColorAnimation WPF?
- 7. Come si associa un comando a C-i senza modificare il TAB?
- 8. Come si associa un FormView ASP.NET a un singolo record?
- 9. Come si associa l'evento di scorrimento a un Live()?
- 10. Come si associa correttamente un elenco di oggetti in un comando Grails?
- 11. Come si associa a `ItemClick` per un` MvxLinearLayout`?
- 12. Python: associare una funzione a un tasto
- 13. Utilizzando AngularJS, come si associa un elemento a un attributo che si aggiorna tramite un servizio
- 14. WPF: associa il comando a ControlTemplate
- 15. Come eseguire una funzione al primo tasto in bash/zsh?
- 16. Come si associa il tasto F5 per aggiornare l'Esplora oggetti in SQL Server Management Studio?
- 17. Come si associa a RelativeSource Self?
- 18. Come si associa a un elenco come una proprietà su un modello in Rasoio MVC 3?
- 19. Come si associa C- = in emacs?
- 20. In wxPython, come si associa un evento EVT_KEY_DOWN all'intera finestra?
- 21. Creazione dinamica di un comando in bash
- 22. Come posso eseguire periodicamente un comando bash?
- 23. Si tratta di un bug in bash? (Freccia su)
- 24. Come passare un array a una funzione bash
- 25. Bind un tasto per il comando che legge stdin
- 26. Tasto Comando in MacVim
- 27. Come usare bash $ (awk) in un unico comando ssh?
- 28. Come si invia un comando a un buffer specifico?
- 29. Come si esegue un PUT HTTP in bash?
- 30. Come si associa un gestore di eventi a un dropdown personalizzato di framework di Zurb Foundation?
Cosa succede se voglio aggiungere un'associazione a "ctrl + q"? – kubudi
@kubudi: 'bind '" \ C-q ": menu-completo'' per esempio (o in' ~/.inputrc':' "\ C-q": menu-completo'). Potresti anche aver bisogno di 'stty -ixon' nel tuo ~ ~/.bashrc' per disabilitare il controllo di flusso e rendere^S e^Q disponibili. –
Si dice che '^ [' rappresenta 'esc' e quindi sembra sostituirlo con' \ e' nel tuo esempio. Potresti spiegare perché, per favore? – Remover