
Я пользователь 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
Я не могу гарантировать, что это сработает во всех случаях, но это работает для описанного вами использования.
Надеюсь, это поможет. :)