Я - emacs пользователь и записал несколько emacs конфигурационных файлов.
Я хотел выполнить функцию клиент-сервер emacs использование единственного сценария удара, который будет заботиться о emacs сервере и клиенте. Сценарий выполняет сервер (не уже работая) и затем развивает его путем выполнения клиента в нужном кадре (терминальный или графический).
Я мягко связал исполняемый сценарий с /usr/bin/emacs
(переопределение значения по умолчанию) так, чтобы выполнение emacs
команда делает задание для меня. Команда emacs
теперь разжигает сценарий от терминала, а также через Alt+F2
. Проблема, связывание сочетания клавиш к той же команде (или сценарий) не работает.
Я присоединяю снимок экрана своего ярлыка здесь.
Сценарий оболочки может быть найден здесь.
P.S.: сочетание клавиш хорошо работает когда /usr/bin/emacs
связан со значением по умолчанию emacs исполняемый файл (в /etc/alternatives/emacs
в моем случае).
Я пытался воссоздать Вашу проблему, и я предполагаю, что был рядом.
Проблема я выяснил, что Вы сталкиваетесь, с if [[ -t 1 ]]
состояние.
Согласно tldp
Эта тестовая опция может использоваться, чтобы проверить, является ли stdin [-t 0] или stdout [-t 1] в данном сценарии терминалом.
Так, сценарий не сможет обнаружить программу, которая вызвала его через это условное выражение. Следовательно, это не точное решение Вашей проблемы.
Теперь, внутренне, привязки клавиш в Ubuntu выполняются через поддельный терминал. На самом деле, TERM
переменная установлена на немых, когда команда через привязки клавиш выполняется.
Так, для решения проблемы Вы могли использовать следующий код.
if [ $TERM == "dumb" ]
then
TERMINAL=false
CREATE="-c"
else
TERMINAL=true
CREATE="-nw"
fi
Я не могу гарантировать, что это будет работать во всех случаях, но это работает на использование, которое Вы описали.
Надежда это помогает.:)