유니티 런처에서 emacsclient를 실행하여 기존 emacs 창을 재사용하는 방법


12

.desktop 파일 (예 : Emacs 파일)을 복사하여 emacsclient 런처를 생성하면 표준 Unity 런처 방식으로 동작하지 않습니다. 항상 새 창을 시작합니다. 기존 Emacsclient 창이 존재한다는 것을 인식하지 못합니다. 어떻게 동작시킬 수 있습니까?

배경으로, 이것은 당신이 데몬으로 실행 이맥스를위한 매우 유용한 사용 모드 : emacs --daemon다음 당신과 함께 이맥스 창을 소환 emacsclient. 습관적인 emacs 사용자를 위해이를 수행하는 좋은 방법은 emacs --daemon시작 응용 프로그램 에 넣는 것입니다.

답변:


16

해결책은 emacsclient.desktopStartupWMClass 설정을 사용하여 창 클래스에 대한 지시문을 포함 하는 파일 을 작성하는 것입니다. 그것이 없으면 Unity는 해당 창이 Emacsclient에서 나왔다는 것을 알 수 없습니다. 이것은 Emacs one (/usr/share/applications/emacs23.desktop)의 내용에 따라 하나를 만듭니다 :

mkdir -p ~/.local/share/applications
cat > !$/emacsclient.desktop <<EOF
[Desktop Entry]
Version=1.0
Name=Emacsclient
GenericName=Text Editor
Comment=View and edit files
MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++;
Exec=/usr/bin/emacsclient -c %F
Icon=/usr/share/icons/hicolor/scalable/apps/emacs23.svg
Type=Application
Terminal=false
Categories=Utility;Development;TextEditor;
StartupWMClass=Emacs
EOF

런처에 emacsclient를 놓고 (예 : Super를 누르고 "emacsclient"를 입력 한 다음 끌어서 놓으십시오) 로그 아웃 / 로그인하십시오.


.bashrc에서 임시 파일이 암호화 된 $ HOME 아래에 있도록 TMPDIR = $ {HOME} / tmp를 정의합니다. 실행기에서 호출 된 emacs에는이 정의가 표시되지 않지만 emacsclient는 쉘에서 호출됩니다. emacs (서버 시작 후)는 / tmp에서 소켓을 열고, emacsclient는 $ {HOME} / tmp의 소켓을 통해 emacs와 통신하려고 시도하지만 성능이 매우 떨어집니다. emacsclient.desktop을 사용하여 TMPDIR에 올바른 값을 전달할 수 있습니까?
waltinator

내 질문을 자체 스레드로 옮기고 답을 얻었습니다. 참조 askubuntu.com/questions/64005/launcher-doesnt-respect-tmpdir/...
waltinator

Unity emacsclient.desktop는 어떤 이유로 든 완전히 무시했습니다 . 결국에는 alacarte대신 ""메인 메뉴 "GUI 에서 실행기를 만들어이 문제를 해결했습니다 .
브라이언 Z

2

james.ferguson의 솔루션이 잘 작동합니다. 내가 원하는 것은 emacsclient를 "선호하는 응용 프로그램"과 같은 일부 파일 형식에 연결하는 것이 었습니다. 이를 위해 새로운 "Exec"줄이있는 james의 스크립트를 찾았습니다.

Exec=/usr/bin/emacsclient --alternate-editor emacs24 --no-wait %F

나를 위해 더 잘 작동합니다 : 아무것도 실행 중이 아닌 경우 새 emacs를 실행하고 새 창을 열지 않으며 emacs가 여전히 물건을 기다리는 클라이언트에 대해 불평하지 않습니다.

이제 파일을 클릭 할 수 있으며 실행중인 emacs에서 파일이 열려 있으면 열려 있습니다. 그렇지 않으면 emacs가 시작됩니다.


1

또 다른 방법은 스크립트 를 사용하는 것입니다 .

if [ "$(pidof emacs)" ] ; then
    emacsclient "$@" &
else
    emacs -mm "$@" &
fi

따라서 항상 같은 명령을 호출하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.