Saya banyak me-restart emacs saya. Yang ingin saya lakukan adalah membuat fungsi yang membunuh emacs saat ini, hanya untuk menelurkan yang baru sebagai gantinya. Idealnya, ini juga akan bekerja di TTY.
terminal-emacs
PythonNut
sumber
sumber
.emacs.d
, yang berarti saya memulai kembali emacs untuk menghilangkan sampah apa pun yang telah saya buang ke lingkungan saya. Ada beberapa kasus penggunaan lain di mana saya melakukan ini, tapi itu yang terbesar.bash
untuk memulai kembali setelah pengakhiran? Atauvi
? Atau proses lain, sebagai aturan? Tidak, karena itu di luar ruang lingkup keprihatinan mereka, dan ditangani dengan baik secara eksternal. Bagaimanapun, apa yang Anda benar-benar inginkan adalah cara untuk menginisialisasi ulang emacs, dengan menghapus VM-nya dan menjalankan kembali kode init Anda ( tanpa mematikan prosesnya). Itu akan berguna dan layak untuk emacs. Saya tidak tahu apakah itu ada, :)bash
memulai kembali denganexec bash
. Saya tidak tahu tentang vim.emacs -q
dan memperbaiki masalah tentu saja, tetapi saya lebih memilih untuk tetap menjalankan contoh 'baik' setiap saat saat meretas konfigurasi saya, hanya agar aman.Jawaban:
Catatan: Saya telah membungkus berikut ini dalam sebuah paket yang
restart-emacs
tersedia di sini .Berikut adalah cara alternatif untuk mencapai apa yang Anda inginkan menggunakan elisp murni (tidak benar-benar karena Anda mengandalkan shell). Kuncinya adalah memunculkan proses emacs lain sebelum emacs saat ini terbunuh.
Kode untuk memulai versi GUI dari emacs sangat mudah. Kode untuk memulai emacs di terminal agak rumit. Ia menggunakan fakta bahwa Anda dapat meneruskan string
suspend-emacs
yang akan diteruskan sebagai input terminal ke proses induk (shell). Dari dokumentasiJadi pada dasarnya kita menangguhkan emacs sebelum dibunuh memberitahu shell induk untuk melanjutkan emacs yang saat ini ditangguhkan (yang akan segera keluar) dan kemudian meluncurkan proses emacs lain. Perhatikan bahwa ini tidak berfungsi pada platform di mana terminal emacs dapat / tidak benar-benar menunda tetapi memulai subkulit, misalnya pada windows.
sumber
sh -c "emacs &"
dari shell, ia berhenti dengan "emacs: standard input is not a tty
". (Ketika saya melakukannya,M-x restart-emacs
saya bahkan tidak melihat pesan kesalahan itu, Emacs baru saja berakhir.)Sejauh yang saya tahu Anda tidak dapat memberitahu Emacs untuk memulai kembali setelah berakhir, tetapi Anda dapat mengatur kode keluar sehingga proses yang memulai Emacs di tempat pertama dapat mendeteksi bahwa Anda ingin memulai kembali.
Sebagai contoh, skrip shell ini memulai kembali Emacs jika keluar dengan kode 123.
Selanjutnya, kami mendefinisikan
kill-emacs-and-restart
yang membuat Emacs mengakhiri dengan kode keluar sama dengan angka ajaib yang dikenali oleh skrip:Sekarang jika Anda menjalankan Emacs melalui skrip ini, Anda dapat memulai kembali dengan
M-x kill-emacs-and-restart
(atau mengikatnya ke urutan kunci).sumber
you cannot tell Emacs to re-start after terminating
. Apakah ini batasan teknis?exec...
keluarga (pada sistem POSIX, sih). Fungsi kontrol proses Emacs Lisp tidak mengekspos panggilan tingkat rendah seperti itu. Saya bukan ahli, jadi mudah-mudahan seseorang yang lebih berpengetahuan akan berpadu.Dicuri secara terang-terangan dari https://unix.stackexchange.com/questions/114238/is-it-possibe-to-change-parent-shells-working-directory-programmatically
Dengan asumsi saya punya sintaks yang tepat untuk menyematkan "dalam sebuah string, ini harus dilakukan.
sumber