Bagaimana cara membuka file dalam proses emacs yang ada dari baris perintah?

13

Saya memiliki beberapa skrip yang akan meluncurkan semua aplikasi dan file yang terkait dengan proyek tertentu. Tapi, itu akan meluncurkan beberapa instance emacs, daripada hanya menyebabkan emacs saat ini untuk membuka file yang diminta. Saya lebih suka emacs saat ini hanya membuka file teks proyek dalam buffer baru.

Ada ide bagaimana saya bisa melakukan itu?

bev
sumber
Lihatlah jawaban saya stackoverflow.com/a/38655619/2450748 Meskipun 5 tahun kemudian :)
nexayq

Jawaban:

20

M-x server-startdi dalam sesi Emacs, lalu gunakan emacsclient -n file1 file2 ...untuk menambahkan file ke Emacs yang ada. Ada opsi tambahan yang mungkin ingin Anda gunakan, misalnya -cuntuk membuka file di jendela baru (bingkai).

geekosaurus
sumber
terima kasih dood. Itu yang perlu saya ketahui. Saya belum memeriksa 'jawaban yang benar', karena saya dengar Anda harus selalu membukanya sedikit untuk memberi orang lain kesempatan untuk berkontribusi. Tapi saya sudah memasukkan jawaban Anda ke beberapa skrip.
bev
Biasanya, Anda ingin memasukkan (server-start)file .emacs Anda, daripada memulai server secara manual. Saya menggunakan (and window-system (server-start))untuk menghindari memulai server jika saya menjalankan emacs di terminal.
cjm
Dalam Emacs modern, ini hanya berguna di terminal; lihat -topsi.
geekosaur
@ cjm - sebenarnya saya memulai server di file .emacs saya. Saya hanya tidak menggunakannya :-)
bev
5

Masukkan file (server-start)Anda .emacs.

Tambahkan ini ke ~/.bashrc

alias myedit='emacsclient --alternate-editor="" --no-wait $*' #quotes intentionaly left blank

kemudian gunakan myeditsebagai editor Anda. Anda harus menggunakan -copsi untuk membuka jendela.

Jadi, Anda dapat melakukan ini:

myedit -c a-file
run-script #that uses myedit

atau

run-script #that uses myedit
myedit -c
ctrl-alt-delor
sumber
Richard, terima kasih atas masukannya. Saya masih bingung beberapa hal dengan skrip Anda. Pertama, karena emacsclient tidak memiliki opsi -c, saya berasumsi bahwa itu bash, tetapi tidak tahu. Kedua, mengapa tidak menempatkan emacs sebagai editor alternatif? Terima kasih
bev
# $ emacsclient --help .... PILIHAN berikut diterima: ... -c, --create-frame Buat bingkai baru alih-alih mencoba menggunakan bingkai Emacs saat ini ... -a EDITOR, --alternate -editor = EDITOR Editor untuk mundur jika server tidak berjalan Jika EDITOR adalah string kosong, mulai Emacs dalam mode daemon dan coba sambungkan lagi
ctrl-alt-delor
Anda tidak perlu (dan, pada kenyataannya, mungkin tidak mau) untuk menggunakan parameter posisi dalam definisi alias. Pertimbangkan cara alias foo='echo bar $*'memperluas set quux; foo baz. Jika Anda ingin menggunakan parameter posisi, cobalah sebagai fungsi shell:myedit() { emacsclient … "$@"; }
Chris Johnsen