Siapkan Emacs pada Windows untuk memulai satu instance dan buka file dalam instance yang ada

18

Saya sangat tertarik dengan pengalaman Windows lengkap termasuk:

  • Secara otomatis memulai server jika belum dimulai
  • Cara memanggil emacs sehingga memanfaatkan server (mis. Dari baris perintah atau alat pihak ketiga)
  • Dukungan menu konteks (mis. Klik kanan pada file dan biarkan dikirim ke emacs untuk dilihat dan diedit)

Apakah dukungan seperti itu tersedia di luar kotak di mana saja?

cristobalito
sumber

Jawaban:

21

Secara otomatis memulai server jika belum dimulai

Ini harus sama untuk semua bangunan Emacs. Tambahkan potongan ini ke .emacsatau .emacs.d/init.el.

(require 'server)
(unless (server-running-p)
  (server-start)) 

Dan kemudian jalankan emacs dengan menjalankan runemacs.exeexecutable yang datang bersama build.

Cara memanggil emacs sehingga memanfaatkan server (mis. Dari baris perintah atau alat pihak ketiga)

Emacs 'Windows build dilengkapi dengan emacsclientw.exeexecutable di bin/direktori. Gunakan jalur lengkap ke yang dapat dieksekusi sebagai editor pilihan Anda pada alat pihak ketiga mana pun yang perlu Anda konfigurasi.

Dukungan menu konteks (mis. Klik kanan pada file dan biarkan dikirim ke emacs untuk dilihat dan diedit)

  1. Klik kanan pada file, pilih Open With -> Select Default Program.
  2. Di jendela yang muncul, navigasikan ke emacsclientw.exeexecutable Anda yang disebutkan di atas dan pilih.
  3. Jika Anda tidak ingin Emacs menjadi default, lakukan langkah 1 dan 2 lagi, memilih program lain sebagai default.

emacsclientw.exe sekarang akan selalu menjadi opsi di menu konteks.

Malabarba
sumber
Terima kasih - titik bagus tentang server, saya tidak berpikir.
cristobalito
Mengenai emacsclient.exe, bukankah itu emacsclientw.exe? Juga, saya pikir Anda harus menjalankan ini dengan flag -a untuk menentukan editor alternatif jika server tidak berjalan.
cristobalito
Agar server dapat berfungsi dengan baik dengan konfigurasi saya, saya juga harus menambahkan variabel lingkungan EMACS_SERVER_FILEyang menunjuk ke .emacs.d\serverdirektori saya .
Ryan
@Ryan Saya bisa mendapatkan ini berfungsi tanpa perlu variabel lingkungan - hanya perlu memastikan bahwa server sedang berjalan.
cristobalito
Hmm, bagi saya mengevaluasi (server-running-p)pengembalian :otherpada Windows (bahkan setelah mencoba mengatur bahwa EMACS_SERVER_FILEenv var.
Kaushal Modi
5

Secara otomatis memulai server jika belum dimulai

Saya sangat merekomendasikan pengaturan variabel lingkungan untuk ALTERNATE_EDITORke runemacs.exe. Dengan cara ini Anda selalu dapat memanggil emacsclient bahkan jika tidak ada server. Cukup tambahkan (server-start) ke file init Anda. Ketika server tidak ada, emacsclient akan memanggil ALTERNATE_EDITORemacs dalam kasus kami. Karena emace memulai server di file init, setiap panggilan baru ke emacsclient akan instan.

Cara memanggil emacs sehingga memanfaatkan server (mis. Dari baris perintah atau alat pihak ketiga)

Gunakan emacsclientw.exe -c -n "your_file"untuk membuka file_Anda. The -cArgumen menciptakan bingkai grafis baru dan -nmemungkinkan Anda untuk menutup frame tanpa kehilangan server negara. Anda bahkan dapat memanggilnya tanpa nama file untuk membuka *Scratch*buffer. Berfungsi dari pintasan desktop juga. Menggunakan emacsclient.exe(perhatikan w yang hilang) akan memunculkan command prompt selama beberapa detik setiap kali Anda memanggilnya.

Menambahkan ke menu konteks

Emacswiki memiliki halaman yang bagus tentang menambahkan Emacs ke menu konteks di sini . Ini melibatkan pengeditan simpul registri HKEY_CLASSES_ROOT\*untuk menambahkan tindakan untuk dibuka dengan emacs.

Vamsi
sumber
5

Yang lain telah menjawab bagian server. Inilah yang saya lakukan, untuk mendapatkan utilitas seperti UNIX / GNU / Linux seperti grepdan diff:

  1. Instal Cygwin (operasi satu kali).
  2. Muat cygwin-mount.el.
  3. Muat setup-cygwin.el.

Namun, perlu diketahui bahwa ada berbagai versi Cygwin. Saya menggunakan versi yang lebih lama (tidak tahu yang mana - sulit untuk mengatakannya, AFAICT). Entah apakah Anda akan memiliki masalah dengan versi terbaru.

Lihat juga:

Drew
sumber
Catatan: Jangan gunakan cygwin EMACS. Instal GNU build dari ftp.gnu.org/gnu/emacs/windows
M Smith
Saya tidak menyarankan untuk menginstal Cygwin, karena mungkin ada efek samping yang tidak diinginkan (seperti merusak port windows gnu lainnya seperti emacs, gcc, ...), karena hanya memiliki beberapa alat gnu. Alih-alih instal port GnuWin32 . Anda dapat menginstal seluruh paket atau alat pilihan Anda.
Seki
@ Seki - Ya, Eli Zaretskii mengatakan hal yang sama seperti Anda. Yang bisa saya katakan adalah bahwa saya tidak punya masalah (dan saya memiliki keraguan serius tentang klaim Anda bahwa itu melanggar Emacs ). Tetapi (a) Saya menggunakan rilis Cygwin lama dan (b) Saya tidak menggunakan sebagian besar utilitas Linux UNIX / GNU yang disediakan oleh Cygwin.
Drew
@rew: mungkin berlebihan untuk berbicara tentang "melanggar" emacs, "menyebabkan perilaku aneh" akan lebih baik. Misalnya Cygwin Make akan mengerem rantai alat MinGW jika Anda tidak memeriksa jalur Anda dengan hati-hati karena alat Cygwin tidak diperhitungkan atau secara default diambil jika tidak ada yang lain. Ini tidak terbatas pada Make, banyak alat lain tidak dapat bercampur dan kadang-kadang halus untuk menunjukkan masalahnya. Jadi singkatnya, apakah Anda memiliki porta asli Emacs dan lebih baik memiliki alat-alat GNU asli, atau Anda dapat menggunakan seluruh distribusi Cygwin termasuk emacs-nya.
Seki
@ Seki: Jadi sepertinya poin utama Anda adalah Cygwin dan MingGW tidak bermain bersama dengan baik. Itu tidak mengejutkan bagi saya. (FWIW, saya tidak menentang penggunaan MingGW, bukan Cygwin. Bagi saya itu mudah untuk menginstal Cygwin, dan saya tidak cukup menggunakannya untuk menghadapi masalah.)
Drew