Как создать сочетание клавиш для команды терминала

Я часто работаю с git, и мне нравится iTerm2 за возможность устанавливать сочетания клавиш для команд. Например, я установил CTRL + ENTER на git status.

Возможно ли это с помощью gnome-terminal или вы можете порекомендовать другой вариант для достижения этой цели?

13
задан 22 March 2016 в 16:32

3 ответа

Можно использовать bind -x для привязки команды с ярлыком в Bash. Например, для привязки git status команда с Crtl + p ярлык можно использовать:

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

Помещенный это в ~/.bashrc файл для запоминания этого. Из страницы справочника:

-x команда оболочки Причины keyseq:shell-команды

, которая будет выполняться каждый раз, когда keyseq вводится. Когда команда оболочки выполняется, оболочка устанавливает переменную READLINE_LINE на содержание буфера строки Readline и переменную READLINE_POINT к текущему местоположению точки вставки. Если выполняемая команда изменит значение READLINE_LINE или READLINE_POINT, то те новые значения будут отражены в состоянии редактирования.

0
ответ дан 23 March 2016 в 02:32
  • 1
    Помещенный, что в цикле? Вы - not' t на самом деле обеспечивающий любую команду здесь. – terdon♦ 23 June 2017 в 02:06

1. Автоматически откройте новое окно терминала, показав вывод Вашей команды

Так как необходимо сохранить терминал открытым после того, как команда работала, помещая:

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

под комбинацией сочетания клавиш, сделает задание. Это откроет новое gnome-terminal окно и выполненный команда в нем.

Добавьте его к ярлыку

Выберите: Параметры настройки системы> "Клавиатура"> "Ярлыки"> "Пользовательские Ярлыки". Нажмите "+" и добавьте команду:

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

к Ctrl+Enter

Примечание:

Хотя Ваш предложенный ярлык работает, Вы могли бы выбрать другое сочетание клавиш затем Ctrl+Enter, так как это, по крайней мере, сталкивается с LibreOffice ярлык для перехода к новой странице.

Объяснение

Иметь новое gnome-terminal окно открылось из командной строки, и выполненный команда в нем, можно использовать:

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

Однако, хотя команда будет работать успешно, окно терминала сразу закроется, прежде чем можно будет считать вывод.

Раздел:

read line

должен затем сохранить терминал открытым (пока Вы не совершаете нападки, Входят) после выполнений команды.

Другие команды

Таким образом, можно выполнить любую (сложную) команду в терминале, не закрывая его сразу:

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

произведет (если wmctrl установлен):

enter image description here

После нажатия Enter закроется терминал.

2. Выполнение команды в в настоящее время активном окне терминала гнома

Конечно, Вы могли поместить простую остроту под сочетанием клавиш (предполагающий, что Вы имеете xdotool установленный):

xdotool type "<command>"

Это однако ввело бы команду вслепую в любом приложении, и ввод команды не является самой чистой опцией.

Маленький сценарий ниже поэтому:

  • взгляды, если активное окно является a gnome-terminal окно (его pid)
  • если так, это вставляет команду в активном gnome-terminal окно, нажимает Return.
    В противном случае сценарий ничего не делает, Таким образом, он не вставит в другие приложения.

Так как сценарий принимает целенаправленное управление как аргумент, можно подвергнуть несколько команд нескольким ярлыкам.

Сценарий

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

Как использовать

  1. Потребности сценария xdotool

    склонные sudo - получают установку xdotool

  2. Создайте dirctory ~/bin если это еще не существует, или выходит из системы/в или работает source ~/.profile

  3. Скопируйте сценарий выше в пустой файл, сохраните его как gterm_keys (никакое расширение) в ~/bin, делание его исполняемый файл

Теперь можно выполнить любую команду, от сочетания клавиш, в frontmost gnome-terminal окно путем добавления команды:

gterm_keys <command>

к сочетанию клавиш, как описано в [1]

2
ответ дан 23 March 2016 в 02:32
  • 1
    @terdon Видят редактирование, но также и отмечают, что я здесь, чтобы предоставить ответ, не кодировать все это. Я don' t делают другой people' s домашняя работа:) – don.joey 23 June 2017 в 02:07

В случае, если zsh используется вместо удара, следующая строка в ~/.zshrc связывает git status с ALT + , ВХОДЯТ .

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

Для получения ALT + ВХОДЯТ в Bash, я использую эту строку:

bind -x '"\e\C-m":git status'
0
ответ дан 23 March 2016 в 02:32
  • 1
    В этом случае, don' t отправляют " answers" это don' t даже пытаются на самом деле предоставить ответ и только дать первое приближение для только одного из многих необходимых шагов. И как Вы знаете, что дата всегда является 17-м полем первой строки? Как OP возьмет это для переименования их файла? Продвинуться. Или ответьте на вопрос или don' t. – terdon♦ 23 June 2017 в 02:09

Другие вопросы по тегам:

Похожие вопросы: