Biasanya saya memulai emacs dengan GUI, dan langsung memulai server (server-start)
. Sekarang saya dapat dengan mudah membuka dokumen ke sesi emacs saya yang ada dari terminal via emacsclient -n <file>
, atau dari File Browser.
Namun, dari waktu ke waktu, saya ingin menjalankan emacs di dalam terminal saya menggunakan emacsclient -t
. Ini paling sering terjadi ketika menulis git melakukan log atau melakukan tugas-tugas kecil lainnya. Dalam kasus tersebut, fakta bahwa file init saya dimuat dalam instance GUI emacs berarti bahwa saya tidak mendapatkan penyesuaian apa pun yang khusus untuk emacs TTY.
Saya tahu saya bisa lari
emacs -nw -q -l "some-custom-init-file.el"
tapi itu akan memuat ulang semua paket setiap saat. Bisakah saya mendapatkan yang terbaik dari kedua dunia? Apakah ada cara untuk mengatur "daemon TTY" sehingga saya dapat menggunakan kustomisasi terpisah untuk berjalan di dalam terminal dibandingkan dengan mengunjungi file di jendela emacs yang ada?
(setq linum-format "%d ")
di file kustomisasi TTY. Juga, tema warna saya selalu terlihat aneh dalam mode TTY, jadi saya pasti akan memilih tema yang berbeda untuk TTY. Saya sebenarnya tidak memiliki banyak perbedaan saat ini, tetapi sekarang saya tahu bahwa saya dapat memiliki server yang berbeda, daftarnya mungkin bertambah.M-x report-emacs-bug
dan meminta fitur baru seperti kemampuan untuk memiliki tema wajah yang berbeda di TTY dan di bingkai GUI (sebenarnya, sebuah tema dapat menentukan warna yang benar-benar berbeda untuk berbagai jenis bingkai, sehingga Anda juga dapat menyesuaikan tema Anda) . Menggunakan beberapa daemon untuk kasus-kasus yang terpisah hanyalah solusi untuk kurangnya fungsionalitas yang sesuai di Emacs.Jawaban:
Gunakan
emacs --daemon=your-server-name -l "custom-init-file"
untuk memulai server baru danemacsclient -nw -s your-server-name
untuk menghubungkannya dari terminal itu sendiri. Bagian tentang Menggunakan Emacs sebagai server dalam manual memiliki lebih banyak opsi inisialisasi.sumber
-q
switch untuk menjaga agar default saya tidakinit.el
berjalan sebelum file init khusus.)emacsclient -s your-server-name -e "(kill-emacs)"
melakukan yang Anda inginkan? Di atas hanya memanggil emacsclient dan evals(kill-emacs)
. Anda bisa mengganti(kill-emacs)
dengan(save-buffers-kill-emacs)
juga.-q
Selain jawaban @ Vamsi, Anda bisa mendapatkan banyak manfaat yang sama saat menjalankan hanya satu server dengan melampirkan saran
make-frame-command
.Sebagai contoh, ketika berjalan di terminal saya ingin warna latar belakang
black
(yang memetakan ke#202020
) tetapi saya ingin menggunakan#202020
dalam mode grafis. Saya menerapkan ini dengan:Anda bisa mendapatkan banyak jarak tempuh menggunakan ini
make-variable-frame-local
(set-background-color
di atas sudah frame-lokal).Saya tidak tahu apakah ini adalah pola terbaik, tetapi jika Anda memiliki sedikit perbedaan antara TTY-mode dan X-mode Emacs, ini dapat membuat manajemen konfigurasi lebih mudah.
Kode di atas ditarik dari .emacs.d saya .
sumber
(display-graphic-p)
memberit
jika bingkai saat ini adalah grafis,nil
jika tidak. Karena bingkai tidak dapat dipindahkan antara grafis dan bukan (afaik), melampirkan saran untuk pembuatan bingkai memastikan bahwa keadaan yang diinginkan tercapai untuk bingkai yang diberikan.Anda tidak perlu saran untuk mengubah pengaturan frame yang berbeda yang berjalan di daemon emacs yang sama. Gunakan saja pengait
after-make-frame-functions
seperti ituMendefinisikannya dengan cara ini memiliki bonus tambahan, yang mengatur konfigurasi bingkai yang diinginkan bahkan jika Anda tidak memulai dalam mode daemon.
Sayangnya
load-theme
bukan bingkai lokal dan jadi bingkai lainnya berwarna juga jika Anda benar-benar menggunakan tema yang berbeda untuk teks dan bingkai grafis.Informasi bonus: konfigurasikan terminal Anda dengan setidaknya 256 warna untuk mendapatkan nuansa nyata dari tema yang Anda pilih. Gunakan pengaturan seperti ini di salah satu file startup shell Anda:
sumber