OS: OS X 10.9.5, Mavericks
GNU Emacs 24.3.1 (x86_64-apple-darwin13.1.0, Carbon Version 1.6.0 AppKit 1265.19) dari 2014-04-03 tentang Rainers-MacBook-Pro-3.local
Saya menginstal emacs melalui homebrew dari railcat dan bekerja dengan baik - tidak ada keluhan. Saya tidak menggunakan emacs dalam termoinal, dan saya biasanya memulainya melalui Aplikasi.
Seperti yang saya katakan - saya senang sejauh ini.
Saya hanya punya satu hal yang saya tidak berhasil melakukannya dengan benar (yang bekerja dengan baik di linux sebelumnya), yaitu:
- dapatkan daemon emacs mulai saat login
- menggunakan emacsclient untuk membuka
- tutup emacsdaemon dan simpan file al setelah logoff
Adakah resep yang bisa membantu saya mengaturnya?
Informasi tambahan
Untuk memulai daemon emacs saat login
Saya membuat Aplikasi Automator yang menjalankan perintah bash
/usr/local/bin/emacs --daemon
dan menambahkannya ke Item Login yang berfungsi dengan baik.
Memanfaatkan daemon dari terminal
Saya dapat menggunakan daemon emacs dengan menggunakan
emacsclient .bashrc
yang membuka .bashrc di sesi terminal emacs.
Memanfaatkan dari GUI
Sekarang tetap menjadi pertanyaan: bagaimana saya bisa menggunakannya dari GUI?
Karena saya mengerti emacsclient, saya tidak bisa membuka emacsclient kecuali saya menentukan file untuk dibuka.
Saya ingin membuka GUI emacsclient dan membuka semua file yang sebelumnya dibuka ? Apakah ini mungkin?
Saya menemukan bahwa saya dapat menggunakan
emacsclient -c
di terminal untuk melakukan apa yang saya inginkan - tetapi bisakah saya melakukan hal yang sama untuk GUI?
sumber
emacsclient
bukan App sejauh menyangkut OS X, hanyaEmacs
(dan hanya jika telah diinstal seperti itu). Mengapa Anda tidak menggunakan ikatan kunci sistem untuk memilih aplikasi / jendela yang terbuka? (Tidak akan berfungsi jika Emacs dimulai dalam mode daemon dan belum ada bingkai ("jendela")).Jawaban:
Saya benar-benar tidak keberatan Emacs.app selalu berjalan, tetapi kenyataan bahwa saya tidak bisa menutup jendela tanpa sengaja membunuh server Emacs itu menjengkelkan. Dan bahkan jika Anda berusaha sangat keras untuk membunuh frame terakhir, itu masih tidak membiarkan Anda: "Mencoba untuk menghapus satu-satunya frame yang terlihat atau ikon". ... Jadi kami curang.
Solusi ini hanya menyembunyikan Emacs (seperti Command+ h) ketika Anda mencoba untuk menutup jendela terakhir dengan mengklik tombol tutup.
Tambahkan yang berikut ini ke Emacs Anda di suatu tempat:
Dan tambahkan Emacs ke "Pengguna & Grup> Item Masuk", dan klik kotak centang "Sembunyikan".
Init Emacs Anda juga perlu menelepon ke
(start-server)
suatu tempat.Saya menggunakan
emacsclient
pembungkus ini untuk membawa Emacs ke depan terlebih dahulu:Masalah:
Mengklik ikon Emacs di Dock tampaknya membuat jendela baru secara acak. Tapi tidak selalu.Ini didasarkan pada jawaban @ noaham yang menyarankan untuk meminimalkan Emacs, dan jawaban ini menjelaskan cara mengait mencoba menutup jendela terakhir.
EDIT:
Mencari melalui sumber, saya menemukan "kunci yang mengikat" untuk
mac-apple-event-map
panggilan manamac-ae-reopen-application
.mac-ae-reopen-application
tampaknya memeriksa bingkai yang terlihat dan ditandai dan entah bagaimana harus kehilangan yang tersembunyi kami. Ini mungkin bug.Cara mudah memperbaikinya adalah dengan menonaktifkan kunci yang mengikat di init Anda:
Ini memperkenalkan bug minor baru: mengeklik ikon dok ketika semua jendela diperkecil tidak secara otomatis memaksimalkan salah satunya. Perbaikan yang benar adalah menulis ulang
mac-ae-reopen-application
, tetapi saya hampir tidak tahu emacs dan elisp.sumber
Sayangnya, port emacs Yamamoto Mitsuharu tidak mendukung multi-tty (lihat masalah ini ). Ini berarti Anda tidak dapat memulai daemon emacs dari terminal dan meluncurkan jendela gui dengan emacsclient.
Inilah yang saya lakukan: Di init.el saya miliki
(server-start)
dan saya meluncurkan Emacs.app saat login. Gangguan di sini adalah bahwa ini memunculkan jendela yang harus saya perkecil secara manual.Saya kemudian memiliki skrip bash yang disebut
emacsc
dengan berikut iniSaya kemudian membuat aplikasi dengan applescript yang berisi yang berikut ini
Penting untuk meneruskan
-n
flag ke emacsclient jika tidak, Anda hanya akan dapat menggunakan aplikasi emacsc untuk membuka satu klien pada satu waktu. Mengatur variabel path memastikan bahwa OS X dapat menemukan versi emacsclient yang benar.Memberitahu Emacs untuk "mengaktifkan" memastikan bahwa jendela klien Anda akan diluncurkan di latar depan.
Seperti yang saya katakan gangguannya adalah Anda harus meminimalkan secara manual jendela emacs saat login dan kemudian membuatnya duduk di dok. Salah satu cara untuk menghindarinya adalah dengan secara otomatis "menyembunyikan" Emacs setelah login tetapi kemudian mengaktifkannya akan menyebabkannya tidak terlihat.
sumber
Saya tidak yakin bagaimana railcat Emacs berbeda dari formula home-brew biasa, tetapi dengan yang terakhir yang akan Anda lakukan
ln -sfv /usr/local/opt/emacs/*.plist ~/Library/LaunchAgents
, yang akan berjalanemacs --daemon
saat login.Plist dimasukkan sebagai dokumen DI SINI dalam formula . Yang Anda perlukan untuk mengadopsinya adalah mengubah jalur ke aplikasi emacs Anda di baris tersebut
<string>#{opt_bin}/emacs</string>
.BTW, Anda juga bisa mendapatkan Emacs sebagai aplikasi OS X dengan Homebrew Emacs jika Anda menginstalnya dengan
--cocoa
opsi. (Anda juga perlu menjalankannyabrew linkapps
setelah itu, menautkannya/Applications
, atau membuat tautannya sendiri.sumber
Pada mac daemon, 90% dari waktu, dikelola menggunakan launchd . Itu dapat menjalankannya di banyak pemicu, termasuk pengguna login / logout. Ada Aplikasi Mac yang cantik bernama Lingon untuk melihat dan mengedit berbagai hal yang dikelola launchd. Wiki emacs memiliki beberapa menyebutkan hal ini, termasuk dan contoh file konfigurasi . Tapi sepertinya itu tidak mengatasi masalah Anda, yaitu cara mematikan daemon saat keluar.
sumber
Buat aplikasi AppleScript seperti ini:
Anda mungkin harus menyesuaikan jalur, atau Anda mungkin dapat meninggalkan jalur sepenuhnya. Anda juga bisa menggunakan sesuatu yang lebih menarik dengan memulai daemon jika belum berjalan.
sumber