Bagaimana saya bisa menjalankan emacsclient dari unity launcher menggunakan kembali jendela emacs yang ada

12

Jika Anda membuat peluncur emacsclient dengan menyalin file .desktop (mis. Emacs), ia tidak berperilaku seperti cara launcher Unity standar. Itu selalu meluncurkan jendela baru; tidak mengenali bahwa jendela Emacsclient yang ada ada untuk melompat ke sana. Bagaimana saya bisa membuatnya berperilaku?

Sebagai latar belakang, ini adalah mode penggunaan yang sangat berguna untuk Emacs, di mana Anda menjalankannya sebagai daemon:, emacs --daemondan kemudian Anda memanggil jendela emacs dengan emacsclient. Cara yang baik untuk melakukan ini untuk pengguna emacs biasa adalah untuk dimasukkan emacs --daemonke dalam Aplikasi Startup Anda.

james.ferguson
sumber

Jawaban:

16

Solusinya adalah membuat emacsclient.desktopfile termasuk arahan untuk itu kelas jendela menggunakan pengaturan StartupWMClass. Tanpa itu, Unity tidak bisa mengatakan bahwa jendela itu berasal dari Emacsclient. Ini akan membuat konten berdasarkan konten dari Emacs (/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

Tempatkan emacsclient di peluncur (mis. Ketuk Super, ketikkan "emacsclient", seret pada), dan logout / masuk.

james.ferguson
sumber
Di .bashrc saya, saya mendefinisikan TMPDIR = $ {HOME} / tmp sehingga file sementara berada di bawah $ HOME terenkripsi saya. emacs, dipanggil dari launcher, tidak melihat definisi ini, tetapi emacsclient, dipanggil dari shell. emacs (setelah server-start) membuka soket di / tmp, emacsclient mencoba berkomunikasi dengan emacs melalui soket di $ {HOME} / tmp, dan kinerjanya sangat buruk. Bisakah saya menggunakan emacsclient.desktop untuk memberikan nilai yang tepat untuk TMPDIR?
waltinator
Saya memindahkan pertanyaan saya ke utasnya sendiri, dan dijawab. Lihat askubuntu.com/questions/64005/launcher-doesnt-respect-tmpdir/…
waltinator
Persatuan benar-benar mengabaikan saya emacsclient.desktopuntuk beberapa alasan. Saya akhirnya menyelesaikan ini dengan membuat peluncur di alacarte("Menu Utama" GUI) sebagai gantinya.
Brian Z
2

Solusi oleh james.ferguson bekerja dengan baik. Yang saya inginkan adalah menautkan emacsclient ke beberapa jenis file sebagai "aplikasi pilihan". Untuk ini, saya menemukan skrip james dengan baris "Exec" baru

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

berfungsi lebih baik untuk saya: menjalankan emacs baru jika tidak ada yang berjalan, tidak membuka jendela baru dan tidak membuat emacs mengeluh tentang klien yang masih menunggu hal-hal terjadi.

Sekarang saya dapat mengklik file dan dibuka di emacs yang sedang berjalan, jika ada, jika tidak emacs akan dimulai.

pengguna127094
sumber
1

Cara lain adalah dengan menggunakan skrip :

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

Jadi, Anda selalu menjalankan perintah yang sama.

yPhil
sumber