Bagaimana saya bisa membuat emacsclient -a '' -n
membuat bingkai baru hanya jika belum ada?
Masalah dengan -c
bendera adalah bahwa ia menciptakan bingkai baru setiap waktu. Masalah tanpa itu adalah bahwa jika tidak ada bingkai terbuka itu akan terbuka di baris perintah.
Jika saya dapat memeriksa apakah ada bingkai Emacs terbuka dari shell, saya bisa menelepon dengan atau tanpa -c
bergantung pada itu untuk mendapatkan perilaku yang saya inginkan. Saya mencoba:
$ emacsclient -a '' --eval '(frames-on-display-list)'
(#<frame F1 0xba2740>)
Saya selalu mendapatkan hasil yang sama.
Saya bisa menggunakan file sementara atau pgrep, tetapi pendekatan itu sangat rawan kesalahan.
Ini mirip dengan pertanyaan ini , tetapi itu bukan duplikat, karena OP di sana puas dengan harus memiliki bingkai terbuka sebelum menelepon emacsclient
.
frames
emacsclient
x11
spelufo
sumber
sumber
elisp
,bash
dansh
jawaban.Jawaban:
Saya akhirnya membuat skrip ini berdasarkan ini
Jika tidak ada tampilan itu terbuka dengan
-nw
. Jika$DISPLAY
diatur, ia mencari bingkai di tampilan itu untuk melihat apakah perlu membuat yang baru.Sunting: Saya telah memodifikasinya sehingga Anda dapat menentukan secara manual
-nw
apakah Anda ingin membuka terminal meskipun ada tampilan.sumber
$@
harus dikutip .Kamu bisa menggunakan:
untuk memeriksa apakah server Emacs
"server_name"
sudah berjalan. Jika perintah mengembalikan kode keluar 0, itu sedang berjalan. Jika demikian, cukup gunakanemacsclient
perintah:Jika tidak berjalan, Anda dapat membuka server Emacs baru dengan misalnya:
sumber
emacsclient -a ''
dimulaiemacs --daemon
jika perlu, yang tetap berlangsung bahkan jika Anda menutup shell.&
akhir perintah; artinya menjalankan server sebagai proses latar belakang ..C-d
).server-start
memulai server sebagai proses daemon. Apa yang Anda dapatkan jika Anda memulai emacs seperti itu dan kemudian menutup semua emacs dan terminal, kemudian buka terminal baru dan jalankanpgrep emacs
?C-d
. Saya mencoba ini sekarang menggunakangnome-terminal
Ubuntu 14.10 .. Saya pikir Anda merujuk ke instance yang berjalan setelah menutup semua frame Emacs? Kemudian, itu akan membutuhkan proses daemon ya ..