Пользовательское сочетание клавиш для скрипта bash не работает

Пользовательское сочетание клавиш для скрипта bash не работает

Я пользователь emacs и написал несколько файлов конфигурации emacs.

Я хотел запуститьклиент-серверособенность emacs с использованием одногоbash-скрипткоторый позаботится о сервере и клиенте emacs. Скрипт запускает сервер (если он еще не запущен), а затем следует за ним, запуская клиент в нужном фрейме (терминальном или графическом).

Я сделал мягкую ссылку на исполняемый скрипт /usr/bin/emacs(переопределяя значение по умолчанию), так что запуск emacsкоманды делает работу за меня. emacsТеперь команда запускает скрипт из терминала, а также через Alt+F2. Проблема в том, что привязка сочетания клавиш к той же команде (или скрипту) не работает.

Я прилагаю скриншот моего ярлыка здесь. введите описание изображения здесь

Скрипт оболочки можно найтиздесь.

PS: Сочетание клавиш работает нормально, если /usr/bin/emacsоно связано с исполняемым файлом emacs по умолчанию ( /etc/alternatives/emacsв моем случае at).

решение1

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

Проблема, с которой, как я понял, вы столкнулись, связана с if [[ -t 1 ]]состоянием.

В соответствии стлдп

Эту тестовую опцию можно использовать для проверки того, является ли stdin [ -t 0 ] или stdout [ -t 1 ] в данном скрипте терминалом.

Таким образом, скрипт не сможет обнаружить программу, которая вызвала его через это условие. Следовательно, это не является точным решением вашей проблемы.

Теперь, внутренне, сочетания клавиш в Ubuntu выполняются через поддельный терминал. Фактически, переменная TERMустановлена ​​втупой, когда выполняется команда через сочетания клавиш.

Итак, чтобы решить вашу проблему, вы можете использовать следующий код.

if [ $TERM == "dumb" ]
then
        TERMINAL=false
        CREATE="-c"
else
        TERMINAL=true
        CREATE="-nw"
fi

Я не могу гарантировать, что это сработает во всех случаях, но это работает для описанного вами использования.
Надеюсь, это поможет. :)

Связанный контент