Menyiapkan emacsclient di MS windows

13

Saya mencoba mengatur daemon server emacs dan menggunakan emacsclient pada MS Windows sehingga file dapat dibuka dengan cepat tanpa penundaan dan overhead terkait dengan memulai instance tambahan emacs untuk setiap file yang dibuka. Saya mengikuti instruksi khusus yang disediakan di emacswiki untuk MS Windows yang melibatkan:

  1. Menjalankan emacs sebagai daemon, runemacs.exe --daemon
  2. Diikuti dengan memohon emacsclientw.exedengan opsi yang sesuai.

Memulai daemon berhasil (saya melihat emacs.exe dalam daftar proses), tetapi menjalankan emacsclient menghasilkan kesalahan. Wiki mengatakan untuk membuat jalan pintas ke emacsclientw.exedan mengubah target menjadi

X:\path\to\emacs\bin\emacsclientw.exe -na "X:\path\to\emacs\bin\emacsclientw.exe" -c -n

Apakah ini benar? Sepertinya klien dipanggil dua kali. Menggunakan target seperti yang ditunjukkan tidak menjalankan program dan menghasilkan kesalahan "nama file atau argumen yang diperlukan". Hanya menggunakan bagian pertama dari target yang ditunjukkan di atas

X:\path\to\emacs\bin\emacsclientw.exe -na

menghasilkan kesalahan umum. Hanya menggunakan bagian kedua

X:\path\to\emacs\bin\emacsclientw.exe -c -n

menghasilkan kesalahan "Tidak ada soket atau editor alternatif." (Opsi emacsclient resmi dijelaskan di sini. )

Ada saran? Emacs berjalan dengan baik dalam mode standar, yaitu, tidak dalam mode daemon. Versi 25.1. Saya lebih suka menjalankan daemon daripada memulai server dalam file inisialisasi saya.

Gajah
sumber

Jawaban:

6

Saya tidak begitu yakin tentang saran di halaman emacswiki. Yang ingin Anda lakukan adalah sebagai berikut:

  • Luncurkan klien emacs yang terhubung ke server emacs yang sedang berjalan.
  • Jika server emacs tidak berjalan, mulai itu, dan kemudian sambungkan klien emacs.
  • Jangan menunggu klien selesai (jika Anda mulai dari baris perintah).

Perintah yang saya gunakan adalah

C:\emacs\bin\emacsclientw.exe -n -c -a ""

The -n berarti tidak menunggu klien untuk finish ketika Anda meluncurkan dari baris perintah. The -a memungkinkan Anda untuk menentukan editor alternatif jika emacs server tidak berjalan , tetapi jika Anda memberikan string kosong, ia akan mencoba untuk memulai emacs server dan menyambung ke. Terakhir, jika Anda meletakkan ini di pintasan windows, Anda juga ingin menambahkan -c yang akan membuka bingkai baru ( lihat opsi emacsclient ).

Inilah cara pintas saya, ini berfungsi untuk saya (di windows 7, emacs 25.3). Saya tidak tahu mengapa halaman emacswiki menempatkan permohonan emacsclientw sebagai editor alternatif yang tidak masuk akal.

Saya harus menambahkan bahwa ketika saya mencoba untuk menghilangkan opsi -c ketika berjalan sebagai jalan pintas , itu memberikan kesalahan.

pintas emacsclientw

Angelo
sumber
Mengkonfigurasi pintasan emacsclientw.exe dengan cara yang ditampilkan menghasilkan: Error: Cannot connect even after starting the Emacs daemonDikonfirmasi pintasan ini memang meluncurkan proses daemon, tetapi file masih terbuka dalam instance emacs mereka sendiri. Diuji dengan dan tanpa hak administrator. Emacs 25.1, Windows 7.
Snelephant
@ Gajah, hmm, saya tidak tahu apa yang salah. Saya bahkan menurunkan ke emacs 25.1 dan jalan pintas saya masih berfungsi. Bagaimana Anda membuka file melalui menu konteks atau dengan perintah di jalan pintas diikuti oleh nama file?
Angelo
Kesalahan terjadi ketika saya mengklik pintasan ke emacsclientw.exe itu sendiri tanpa file yang ditentukan dan ketika saya mengklik pintasan ke file teks dengan emacsclientw.exe dan nama file yang ditentukan di bidang Target. Sebenarnya, saya tidak jelas tentang metode yang dimaksudkan untuk membuka file ke klien di Windows? Saya hanya ingin mengklik file di Windows Explorer. Mengklik file di OSX tampaknya membuka file dalam instance yang ada, tetapi mengklik file di Windows membuat instance terpisah. Catatan Saya telah mengkonfigurasi Windows untuk membuka file teks menggunakan runemacs.exe yang disediakan dengan emacs.
Snelephant
Jika Anda telah mengkonfigurasi Windows untuk membuka file teks dengan runemacs.exe, maka mereka akan terbuka dalam proses Emacs terpisah. Anda ingin mengubah asosiasi itu untuk menggunakan emacsclientw sebagai gantinya.
glucas
@glucas Mengubah asosiasi file teks ke jalan pintas ke emacsclientw.exe seperti yang dijelaskan Angelo. Mengklik file teks menghasilkan hal yang sama Error: Cannot connect even after starting the Emacs daemon.
Snelephant
2

Perintah yang saya gunakan adalah:

emacsclientw.exe --create-frame --no-wait --alternate-editor runemacs.exe --server-file %APPDATA%\.emacs.d\server\server

(Jika folder tempat sampah Emacs tidak ada pada Anda PATH, gunakan path lengkap untuk emacsclientw.exedan runemacs.exe.)

atau dengan nama opsi pendek dan trik string kosong,

emacsclientw.exe -c -n -a "" -f %APPDATA%\.emacs.d\server\server

Perhatikan bahwa trik string kosong untuk -aakan memulai daemon jika tidak berjalan, tetapi ini seharusnya tidak berfungsi sampai Emacs 26 (saya masih di 25). Sebelum 26 Anda harus menentukan editor alternatif secara eksplisit. Saya menggunakan runemacs.exe, tetapi Emacs saya dikonfigurasi untuk memulai server dan membiarkannya tetap berjalan.

Karena Windows tidak memiliki soket domain Unix lokal yang emacsclientbiasanya digunakan untuk terhubung ke server, ia harus kembali menggunakan soket jaringan TCP. Untuk alasan keamanan yang jelas, Anda tidak ingin sembarang orang di jaringan Anda mengakses seluruh sistem file Anda melalui server Emacs. Oleh karena itu, emacsclientharus tahu port yang tepat (ephemeral) dan token keamanan yang ditulis dalam file server sebelum server mengizinkannya terhubung.

Jika server sudah berjalan, maka Anda tidak perlu -a(tetapi tidak sakit). Anda dapat mengatur ALTERNATE_EDITORvariabel lingkungan alih-alih menggunakan -a.

Jika Anda mengatur EMACS_SERVER_FILEvariabel lingkungan, maka Anda tidak perlu menentukannya lagi dengan -f.

Gilch
sumber
0

Untuk Emacs 26.3 dan Windows 10 berfungsi:

Daemon : C:\YOUR_EMACS\emacs-26.3\bin\emacs.exe "--daemon"

Klien : mis:C:\YOUR_EMACS\emacs-26.3\bin\emacsclientw.exe "temp.org"

Saat Anda menambahkan Emacs yang dapat dieksekusi PATH, Anda dapat dengan mudah membuka emacsclientw.exedari mana saja. Anda juga dapat menambahkan daemon di folder startup: C:\Windows\System32\cmd.exe /c start /high emacs.exe "--daemon"

Michal
sumber