Como criar um atalho de teclado para um comando de terminal

8

Costumo trabalhar com o git e adorei o iTerm2 pela capacidade de configurar atalhos de teclado para comandos. Por exemplo, eu defino CTRL + ENTER para git status .

Isso é possível com o gnome-terminal ou você pode recomendar outra opção para conseguir isso?

    
por mniess 22.03.2016 / 14:08

3 respostas

12

Você pode usar bind -x para ligar um comando a um atalho no Bash. Por exemplo, para ligar o comando git status ao atalho Crtl + p , você pode usar:

 bind -x '"\C-p":git status'

Coloque-o no arquivo ~/.bashrc para lembrá-lo. De man page:

% bl0ck_qu0te%     
por Nykakin 22.03.2016 / 16:51
2

1. Abrir automaticamente uma nova janela de terminal, mostrando a saída do seu comando

Como você precisa manter o terminal aberto após a execução do comando, coloque:

gnome-terminal -e 'bash -c "git status; read line"'

sob uma combinação de teclas de atalho, fará o trabalho. Ele abrirá uma nova janela gnome-terminal e executará o comando dentro dela.

Adicione a um atalho

Escolha: Configurações do sistema > "Teclado" > "Atalhos" > "Atalhos personalizados". Clique no botão "+" e adicione o comando:

gnome-terminal -e 'bash -c "git status; read line"'

para Ctrl + Digite

Nota

Embora o seu atalho sugerido funcione, você pode escolher outra combinação de teclas e então Ctrl + Enter , pois pelo menos colide com o LibreOffice de atalho para ir para uma nova página.

Explicação

Para ter uma nova janela gnome-terminal aberta na linha de comando e executar um comando nela, você pode usar:

gnome-terminal -e 'bash -c <command>'

No entanto, embora o comando seja executado com sucesso, a janela do terminal será fechada imediatamente antes de você poder ler a saída.

A seção:

read line

é então manter o terminal aberto (até você pressionar Enter ) após o comando ser executado.

Outros comandos

Dessa forma, você pode executar qualquer comando (complexo) no terminal, sem que ele seja fechado imediatamente:

$ gnome-terminal -e 'bash -c "wmctrl -d; read line"'

será exibido (se wmctrl estiver instalado):

DepoisdepressionarEnter,oterminalseráfechado.

2.Executandoumcomandonajanelagnome-terminalativanomomento

Éclaroquevocêpoderiacolocarumsimplesone-linersobumatecladeatalho(supondoquevocêtenhaxdotoolinstalled):

xdotooltype"<command>"

Isto, entretanto, digitaria o comando cegamente , em qualquer aplicação, e digitando o comando não é a opção mais limpa.

O pequeno script abaixo, portanto:

  • verifica se a janela ativa é uma janela gnome-terminal (por seu pid)
  • se assim for, cola o comando na janela gnome-terminal ativa, pressiona Return .
    Se não, o script não nada , por isso não vai colar em outras aplicações.

Como o script usa o comando de destino como um argumento, você pode colocar vários comandos em vários atalhos.

O script

#!/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)

Como usar

  1. O script precisa de xdotool

    sudo apt-get instala xdotool

  2. Crie uma dirctory ~/bin , se ainda não existir, efetue logout / in ou execute source ~/.profile

  3. Copie o script acima em um arquivo vazio, salve-o como gterm_keys (sem extensão) em ~/bin e torne-o executável

Agora você pode executar qualquer comando, a partir de uma tecla de atalho, na janela gnome-terminal frontmost, adicionando o comando:

gterm_keys <command>

para uma tecla de atalho, conforme descrito em [1]

    
por Jacob Vlijm 22.03.2016 / 14:16
1

Caso zsh seja usado ao invés de bash, a seguinte linha em ~/.zshrc liga git status a ALT + ENTER .

bindkey -s '^[^M' 'git status\n'

Para obter ALT + ENTER no Bash, eu uso esta linha:

bind -x '"\e\C-m":git status'
    
por mniess 24.03.2016 / 17:56