
저는 emacs 사용자이고 몇 가지 emacs 구성 파일을 작성했습니다.
나는 달리고 싶었다.클라이언트 서버단일을 사용하는 emacs의 기능배시 스크립트그것은 emacs 서버와 클라이언트를 관리할 것입니다. 스크립트는 서버를 실행한 다음(아직 실행 중이 아닌 경우) 원하는 프레임(터미널 또는 그래픽)에서 클라이언트를 실행하여 후속 조치를 취합니다.
명령을 실행하면 작업이 수행되도록 실행 가능한 스크립트를 /usr/bin/emacs
(기본값 재정의) 소프트 링크했습니다 . 이제 emacs
이 명령 emacs
은 터미널과 Alt+F2
. 문제는 동일한 명령(또는 스크립트)에 키보드 단축키를 바인딩하는 것이 작동하지 않는다는 것입니다.
쉘 스크립트를 찾을 수 있습니다여기.
/usr/bin/emacs
추신: 기본 Emacs 실행 파일( /etc/alternatives/emacs
내 경우에는) 에 연결 하면 키보드 단축키가 제대로 실행됩니다 .
답변1
문제를 재현해 보았는데 가까워진 것 같습니다.
당신이 직면하고 있는 문제는 상태에 관한 것입니다 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
모든 경우에 작동한다고 보장할 수는 없지만 설명하신 용도에서는 작동합니다.
도움이 되길 바랍니다. :)