Je travaille souvent avec git et j'aimais iTerm2 pour la possibilité de définir des raccourcis clavier pour les commandes. Par exemple, je mets CTRL+ENTER à git status
.
Est-ce possible avec gnome-terminal ou pouvez-vous recommander une autre option pour y parvenir?
Vous pouvez utiliser bind -x
pour lier une commande à un raccourci dans Bash. Par exemple, pour lier la commande git status
à Crtl+p raccourci que vous pouvez utiliser:
bind -x '"\C-p":git status'
Placez-le dans le fichier ~/.bashrc
pour vous en souvenir. De la page de manuel:
-x keyseq: commande shell
Cause La commande shell doit être exécutée chaque fois que keyseq est entré. Lorsque la commande Shell est exécutée, le shell définit la variable READLINE_LINE sur le contenu du tampon de la ligne Readline et la variable READLINE_POINT sur l'emplacement actuel du point d'insertion. Si la commande exécutée change la valeur de READLINE_LINE ou READLINE_POINT, ces nouvelles valeurs seront reflétées dans l'état d'édition.
Puisque vous devez garder le terminal ouvert après l'exécution de la commande, mettez:
gnome-terminal -e 'bash -c "git status; read line"'
sous une combinaison de touches de raccourci, fera le travail. Il ouvrira une fenêtre new gnome-terminal
et exécutera la commande qu'il contient.
Choisissez: Paramètres système> "Clavier"> "Raccourcis"> "Raccourcis personnalisés". Cliquez sur le "+" et ajoutez la commande:
gnome-terminal -e 'bash -c "git status; read line"'
à Ctrl+Enter
Bien que le raccourci suggéré fonctionne, vous pouvez choisir une autre combinaison de touches, puis Ctrl+Enter, puisqu'il au moins se heurte au raccourci LibreOffice
pour passer à une nouvelle page.
Pour ouvrir une nouvelle fenêtre gnome-terminal
à partir de la ligne de commande et y exécuter une commande, vous pouvez utiliser:
gnome-terminal -e 'bash -c <command>'
Toutefois, bien que la commande s'exécute correctement, la fenêtre du terminal se ferme immédiatement avant que vous puissiez lire le résultat.
La section:
read line
est alors de garder le terminal ouvert (jusqu'à ce que vous frappiez Enter) après l'exécution de la commande.
De cette façon, vous pouvez exécuter n’importe quelle commande (complexe) dans le terminal, sans la fermer immédiatement:
$ gnome-terminal -e 'bash -c "wmctrl -d; read line"'
affichera (si wmctrl
est installé):
Après avoir appuyé sur Enter le terminal va fermer.
Bien sûr, vous pourriez placer une simple ligne sous une touche de raccourci (en supposant que vous avez installé xdotool
name__):
xdotool type "<command>"
Cependant, cela taperait la commande à l'aveuglette , dans toute application et en tapant la commande n'est pas l'option la plus propre.
Le petit script ci-dessous donc:
gnome-terminal
(par son pid)gnome-terminal
, appuie sur Return.Comme le script utilise la commande ciblée comme argument, vous pouvez placer plusieurs commandes sous plusieurs raccourcis.
#!/usr/bin/env python3
import subprocess
import sys
import time
app = "gnome-terminal"
s = (" ").join(sys.argv[1:])
def get(cmd):
return subprocess.check_output(cmd).decode("utf-8").strip()
def front(app):
try:
# see if gnome-terminal is running at all (raising error if not)
app = get(["pgrep", app])
except subprocess.CalledProcessError:
app = False
if app:
# if so, see if the active window belongs to gnome-terminal comparing pids)
active = get(["xdotool", "getwindowpid", get(["xdotool", "getactivewindow"])])
return True if app == active else False
if front(app):
# copy command to clipboard
cm1 = ["/bin/bash", "-c", 'printf "'+s+'" | xclip -selection clipboard']
# paste in terminal window
cm2 = ["xdotool", "key", "Control_L+Shift_L+v"]
# press return
cm3 = ["xdotool", "key", "Return"]
for cm in [cm1, cm2, cm3]:
subprocess.call(cm)
Le script a besoin de xdotool
name__
Sudo apt-get install xdotool
Créez un répertoire ~/bin
s'il n'existe pas encore, déconnectez-vous/ouvrez ou exécutez source ~/.profile
gterm_keys
(sans extension) dans ~/bin
, un le rendre exécutable Vous pouvez maintenant exécuter toute commande à partir d'une touche de raccourci dans la fenêtre la plus antérieure de gnome-terminal
en ajoutant la commande suivante:
gterm_keys <command>
à une touche de raccourci, comme décrit dans [1]
Si zsh est utilisé à la place de bash, la ligne suivante dans ~/.zshrc
lie git status
à ALT+ENTER.
bindkey -s '^[^M' 'git status\n'
Obtenir ALT+ENTER dans Bash, j'utilise cette ligne:
bind -x '"\e\C-m":git status'