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

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

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

1
задан 22 March 2016 в 17:32

2 ответа

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>'

Однако, хотя команда будет успешно выполнена, окно терминала закроется (! d16)

Затем раздел:

read line

должен удерживать терминал открытым (пока вы не нажмете Enter ) после

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

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

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

(если установлен wmctrl):

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

2. Выполнение команды в текущем активном окне gnome-terminal

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

xdotool type "<command>"

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

Маленький сценарий ниже:

[d36 ] выглядит, если активным окном является окно 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)

Как использовать [ ! d45] Скрипт нуждается в xdotool sudo apt-get install xdotool Создать dirctory ~/bin, если он еще не существует, либо выйти из системы / запустить или запустить source ~/.profile Скопировать сценарий выше в пустую файл, сохраните его как gterm_keys (без расширения) в ~/bin, a сделайте его исполняемым

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

gterm_keys <command>

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

2
ответ дан 23 May 2018 в 12:40
  • 1
    Привет, Джейкоб, спасибо за ваш ответ. Я считаю, что решения bind (и bindkey) лучше, поскольку они являются оболочками. Таким образом, я не буду случайно записывать статус git. в Либреоффе. ;) – mniess 24 March 2016 в 20:52
  • 2
    @mniess Я согласен, что ответ хороший, но для записи, если вы внимательно прочитали мой ответ, печать в LibreOffice, это не может случиться . но вы просто downvote ?? Это весело. – Jacob Vlijm 24 March 2016 в 20:53
  • 3
    Я знаю, скрипт проверяет запущенное приложение. Я не спускался вниз. Я написал комментарий, чтобы поблагодарить вас за то, что вы нашли время, чтобы написать такой подробный ответ. – mniess 24 March 2016 в 21:01
  • 4
    @mniess Ах, извините за прыжки к выводам! Эти два случая были совершенно синхронизированы. Я рад, что это были не вы. & Quot; Просто & Quot; я не против. – Jacob Vlijm 24 March 2016 в 22:37

В случае использования zsh вместо bash следующая строка в ~/.zshrc связывает git status с ALT + ENTER.

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

Чтобы получить ALT + ВВОД в Bash я использую эту строку:

bind -x '"\e\C-m":git status'
0
ответ дан 23 May 2018 в 12:40

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

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