Bagaimana cara meluncurkan GUI Emacs dari baris perintah di OSX?
Saya telah mengunduh dan menginstal Emacs dari http://emacsformacosx.com/ .
Saya akan menerima jawaban yang memenuhi semua kriteria berikut:
- Jendela emacs terbuka di depan jendela terminal saya.
- Mengetik "emacs" akan membuka jendela GUI Emacs. Menemukan file di jendela itu secara default akan mencari di direktori tempat saya memulai Emacs.
- Mengetik "emacs foo.txt" ketika foo.txt ada akan meluncurkan jendela GUI Emacs dengan foo.txt dimuat.
- Mengetik "emacs foo.txt" jika foo.txt tidak ada akan meluncurkan jendela GUI Emacs dengan buffer teks kosong bernama "foo.txt". Melakukan ^ X ^ S di buffer itu akan menyimpan foo.txt di direktori tempat saya memulai Emacs.
macos
emacs
command-line
Johan Walles
sumber
sumber
emacsclient -c -a "" "$@"
commandJawaban:
Panggil skrip berikut "emacs" dan letakkan di
PATH
tempat Anda :#!/bin/sh /Applications/Emacs.app/Contents/MacOS/Emacs "$@"
Itu mencakup # 2, # 3, dan # 4.
Untuk # 1, letakkan ini di suatu tempat di file .emacs Anda:
(x-focus-frame nil)
Situs emacsformacosx.com sekarang memiliki halaman How-To , dari mana cuplikan teratas berasal. Ada lebih banyak info di sana tentang menjalankan
emacsclient
dan menghubungkan Emacs dengangit mergetool
.sumber
~/foo
dan ingin membuka,bar.txt
saya mengetikgmacs bar.txt
tetapi itu membuat file baru di~/bar.txt
alih-alih membuka~foo/bar.txt
. Apakah saya melakukan sesuatu yang salah?Di shell Anda, gunakan alias 'emacs' untuk mengarahkan ke aplikasi OSX emacs
Di shell saya (menjalankan bash default), saya memiliki yang berikut ini (di .bashrc saya)
alias emacs='open -a /Applications/Emacs.app $1'
Kemudian, mengetik emacs pada baris perintah memulai aplikasi emacs.
Namun, saya akan merekomendasikan Anda untuk membuka salinan emacs dan tetap menjalankannya. Jika demikian, dan Anda ingin memuat file ke salinan emacs yang sudah ada, Anda dapat menggunakan emacsclient dengan menempatkan perintah berikut di .bashrc Anda:
Kemudian tambahkan berikut ini ke file .emacs Anda untuk memulai server emacs (yang menerima panggilan emacsclient)
;;======================================== ;; start the emacsserver that listens to emacsclient (server-start)
Kemudian Anda bisa mengetik
untuk memuat salinan .bashrc ke sesi emacs yang sudah ada!
sumber
Ini meningkatkan jawaban David Caldwell dengan memulai Emacs di latar belakang:
#!/bin/sh $(/Applications/Emacs.app/Contents/MacOS/Emacs "$@") &
Seperti yang dinyatakan dalam jawaban lain, ini mencakup # 2, # 3, dan # 4. Untuk # 1, menempatkan ini di suatu tempat dalam file Emacs Anda:
(x-focus-frame nil)
.Perhatikan bahwa berikut ini tidak berfungsi untuk saya - ini tidak memulai Emacs di direktori yang ditentukan pada baris perintah (mis.
emacs .
)# NOT RECOMMENDED #!/bin/sh /Applications/Emacs.app/Contents/MacOS/Emacs "$@" &
sumber
Saya berasumsi bahwa Anda:
Jika demikian, maka menurut saya ini memenuhi empat kriteria asli, ditambah satu lagi:
itu akan selalu terbuka ke latar depan (dengan x-focus-frame).
Ini akan membuka jendela emacs yang ada dalam mode dired.
Jika emacs sudah berjalan dan memiliki server, maka emacs akan terbuka di jendela yang ada dan muncul di latar depan.
Benar.
Satu tambahan:
Kontrol kembali ke sesi terminal segera setelah mengetik perintah.
~ / bin / emacs
#!/bin/bash EMACSPATH=/Applications/Emacs.app/Contents/MacOS # Check if an emacs server is available # (by checking to see if it will evaluate a lisp statement) if ! (${EMACSPATH}/bin/emacsclient --eval "t" 2> /dev/null > /dev/null ) then # There is no server available so, # Start Emacs.app detached from the terminal # and change Emac's directory to PWD nohup ${EMACSPATH}/Emacs --chdir "${PWD}" "${@}" 2>&1 > /dev/null & else # The emacs server is available so use emacsclient if [ -z "${@}" ] then # There are no arguments, so # tell emacs to open a new window ${EMACSPATH}/bin/emacsclient --eval "(list-directory \"${PWD}\")" else # There are arguments, so # tell emacs to open them ${EMACSPATH}/bin/emacsclient --no-wait "${@}" fi # Bring emacs to the foreground ${EMACSPATH}/bin/emacsclient --eval "(x-focus-frame nil)" fi
sumber
Di Mountain Lion, saya menggunakan port Yamamoto Mitsuharu https://github.com/railwaycat/emacs-mac-port dengan alias berikut:
dan itu memenuhi semua kriteria Anda.
sumber
Solusi sederhana ...
Banyak solusi yang sangat kompleks untuk masalah ini diposting di sini. Itu wajar karena terkesan tidak sepele.
Namun, solusi ini bekerja dengan sangat baik untuk saya.
ec() { emacsclient -n $@ 2> /dev/null if [[ $? == 1 ]]; then open -a Emacs.app -- $@ fi }
Pemakaian
Mari kita bongkar apa yang terjadi:
ec
argumen ke emacsclient dan jangan (-n
) tunggu emacs sebelum melanjutkan.2> /dev/null
)1
([[ $? == 1 ]]
)sumber
Baru saja membangun emacs dengan manajer paket homebrew sesuai dengan panduan ini: http://www.emacswiki.org/emacs/EmacsForMacOS dengan brew install --cocoa emacs Setelah itu seseorang harus meluncurkan versi .app untuk mendapatkan gui, yang dalam kasus saya adalah /usr/local/Cellar/emacs/24.3/Emacs.app/Contents/MacOS/Emacs
sumber
Lebih jauh memperbaiki tanggapan David James, berikut ini berhasil untuk saya:
Sesuai instruksi untuk membuka file dari terminal yang ditemukan di http://www.emacswiki.org/emacs/EmacsForMacOS#toc20
menggabungkan ini dengan tanggapan David Jame Saya telah membuat skrip bash emax berikut dan menempatkannya di jalur saya di ~ / bin
#!/bin/bash (open -a /Applications/Emacs.app "$@") &
Peringatan : agar emacs membuka direktori saat ini dalam mode Dired by name , Anda perlu menggunakan
Lingkungan Hidup:
sumber
Jawaban lain di sini tidak cukup berhasil untuk saya. Secara khusus, di komputer saya, skrip bash
#!/bin/sh /Applications/Emacs.app/Contents/MacOS/Emacs "$@"
selalu membuka emacs di direktori home. Untuk membukanya di direktori kerja saat ini, saya harus melakukannya
#!/bin/sh /Applications/Emacs.app/Contents/MacOS/Emacs "$PWD/$@"
sebagai gantinya.
sumber
Kompilasi Emacs menurut langkah-langkah berikut:
Dan Anda selesai! Mungkin membantu untuk mengunduh dan menginstal XQuartz, tapi itu hanya pendapat saya.
sumber
Ini adalah skrip saya untuk membuka emacs / emacsclient di osx.
#!/bin/bash # Ensure (server-start) is added in your emacs init script. EMACS=/Applications/MacPorts/Emacs.app/Contents/MacOS/Emacs EMACSCLIENT=/Applications/Macports/Emacs.app/\ Contents/MacOS/bin/emacsclient # test if client already exsit. $EMACSCLIENT -e "(frames-on-display-list)" &>/dev/null # use emacsclient to connect existing server. if [ $? -eq 0 ]; then $EMACSCLIENT -n "$@" # open emacs.app instead. else `$EMACS "$@"` & fi
sumber
Dalam semua hal di atas saat menggunakan "open" - pastikan Anda menggunakan opsi "--args"
Jangan lakukan ini:
alias emacs='open -a /Applications/Emacs.app $1'
Sebaliknya ini:
alias emacs='open -a /Applications/Emacs.app --args $1'
yang
--args
pilihan mencegah "terbuka" dari mengkonsumsi berbagai pilihan dimaksudkan untuk Emacs.sumber
The top Jawabannya adalah baik, tapi aku ingin emacs memproses untuk berjalan di latar belakang sehingga saya masih bisa menggunakan shell saya. Jawaban ini tampaknya melakukan apa yang saya inginkan, tetapi tidak memulai emacs di direktori yang benar, yang berarti jalur absolut diperlukan (atau peretasan untuk menambahkan
pwd
ke jalur yang tidak akan berfungsi di semua kasus). Selanjutnya cukup menggunakan&
berarti jika saya mematikan terminal, emacs juga akan terbunuh.Saya memutuskan untuk menggunakan
screen
dan fungsi bash, dan solusi berikut berfungsi untuk saya di macOS 10.15.6 dan emacs 26.2 yang diinstal denganbrew
:function emacs() { screen -d -m /Applications/Emacs.app/Contents/MacOS/Emacs "$@" }
sumber
screen
membuang saya, sekarang setelah saya membaca lebih cermat, saya menyadari bahwa Anda benar. Saya minta maaf @ gsingh2011.