Emacsclient: Tek bir emacs her zaman başlangıçtan itibaren işlem yapar ve GUI'yi asla kapatmaz ve daha iyi gizlemez


9

Emacsclient uzun paket yükleme süresini proerly işleyebildiğinden, gerçekten en az bir emacs işlemini tutmak istiyorum ve çoğu zaman sadece bir emacs süreci , bir arka plan işlemi olarak açılır ve GUI'yi daha iyi gizler.

Şu anda .bashrc içinde aşağıdaki işlevi tanımladım:

emc () 
{ 
    if [[ $# -eq 0 ]]; then
        emacs --eval "(suspend-frame)" &
        return
    fi
    args=($*);
    setsid emacsclient -c -e "(find-file \"${args[*]}\")"
}

Ve ayrıca .bashrc içinde aşağıdaki satıra sahip olun:

emc

Bu yüzden bir kabuk açtığımda, yeni bir emacs sürecine sahip olacağım.

Sorun şu ki, birçok mermi açtıktan sonra birçok gereksiz gereksiz emacs sürecim olacak. Ancak, sadece tek bir emacs sürecini başlangıçtan daha iyi GUI gizlemek istiyorum .


5
Ben ( emacswiki.org/emacs/EmacsAsDaemon ) emacs --eval "(suspend-frame)"yerine pratiğe aşina değilim . Emacs'ı daemon olarak çağırmamayı seçmenizin bir nedeni var mı? Çalıştığından emin olmak için bir şey kullanabilirsiniz . emacs --daemonpgrep -U `whoami` emacs || emacs --daemon &
ebpa

Emacs istemcisini kullanmak için MJ Wall'un komut dosyalarına göz atın .
Tianxiang Xiong

Yanıtlar:


13

Bunu giriş yaptığımda bir emacs daemon başlatarak yapıyorum. Bu komutu nereye koyacağınız masaüstü yöneticinize bağlıdır. Ben i3aşağıdakileri içeren giriş bir komut dosyası çalıştırmak için yapılandırılmış kullanın:

emacs --daemon &

Bununla birlikte, emacs her zaman arka planda çalışıyor ve ben emacsclient -c -npencere yöneticisinde uygun bir anahtarlığa bağlı yeni bir istemci açıyorum . Eğer bir terminalde çalışıyorsanız, yalnızca gibi basit bir kod adın olsun alias emc='emacsclient', muhtemelen ile -n, -cya -tbunu nasıl kullandığınıza bağlı olarak, bağımsız değişkenleri.

Kılavuzdaki emacsclient seçeneklerine göz atın: ( (emacs) emacsclient Seçenekler , Emacs by tarafından erişilebilir C-h r m emacsclient options <enter>). Sen kullanabilirsiniz -aotomatik bayrağı zaten çalışır durumda değilse cin bir emacs'ı başlatın ve -cya -tdaha doğrusu yeniden yerine, yeni bir çerçeve veya terminal müşteri açmak için bir (aynı oturumda) mevcut bir:

'-a KOMUT'
'--Alternate-düzenleyici = KOMUT'
     'Emacsclient' Emacs ile iletişim kuramazsa, çalıştırılacak bir komut belirtin.
     Bu, bir komut dosyasında 'emacsclient' çalıştırırken yararlıdır.

     Özel bir istisna olarak, COMMAND boş dize ise,
     'emacsclient', Emacs'ı daemon modunda başlatır ('emacs --daemon' olarak) ve
     sonra tekrar bağlanmayı dener.

'-C'
'--Create-yapısı
     Mevcut bir grafiği kullanmak yerine yeni bir grafik "istemci çerçevesi" oluşturun
     Emacs çerçeve. 'Cx C-c'nin özel davranışı için aşağıya bakın.
     istemci çerçevesi. Emacs yeni bir grafik çerçevesi oluşturamıyorsa (ör.
     X sunucusuna bağlanamıyorsa) bir metin oluşturmaya çalışır
     '-t' seçeneğini sağlamış gibi terminal istemci çerçevesi
     yerine.

'-T'
'--Tty'
'-NW'
     Geçerli metin terminalinde, yerine yeni bir istemci çerçevesi oluşturun
     mevcut Emacs çerçevesini kullanarak. Bu tıpkı '-c' gibi davranır
     bir metin terminali oluşturması dışında yukarıda açıklanan seçenek
     çerçeve (* not Pencere Dışı Terminaller: :).

4

Systemd hizmet yöneticisini (günümüzde çoğu GNU / Linux dağıtımını içeren) kullanan bir işletim sistemi kullanıyorsanız, en iyi çözüm önyükleme sırasında Emacs arka plan programınızı başlatmak için systemd kullanmak olabilir. $HOME/.config/systemd/user/emacs.serviceAşağıdaki içeriklere sahip bir dosya oluşturarak bunu yapabilirsiniz :

[Unit]
Description=Emacs text editor
Documentation=info:emacs man:emacs(1) https://gnu.org/software/emacs/

[Service]
Type=simple
ExecStart=/usr/bin/emacs --fg-daemon
ExecStop=/usr/bin/emacsclient --eval "(kill-emacs)"
Environment=SSH_AUTH_SOCK=%t/keyring/ssh
Restart=on-failure

[Install]
WantedBy=default.target

Ardından, hizmeti başlatmalı ve gelecekteki tüm önyüklemeler için otomatik olarak başlayacak şekilde ayarlamalısınız:

$ systemctl enable --user emacs
$ systemctl start --user emacs

Artık emacsclienther zamanki gibi kullanabilirsiniz . Normalde ile çalıştırırsanız -n, -cya -tseçenekleri, kendi kabuğunda bir takma ad ayarlayabilirsiniz. Ayrıca EDITORve / veya VISUALortam değişkenlerini emacsclientistediğiniz gibi çalışacak şekilde ayarlamak da isteyebilirsiniz . Örneğin, Bash'te .bashrcdosyanıza aşağıdakileri ekleyebilirsiniz :

alias emc="emacsclient -c"
export VISUAL="emacsclient -c"
export EDITOR="emacsclient -t"

Emacs arka plan programını durdurmanız gerekirse, bunu aşağıdaki gibi yapabilirsiniz:

$ systemctl stop --user emacs

Ve önyüklemede çalışmasını kalıcı olarak durdurmak istiyorsanız:

$ systemctl disable --user emacs

1
Belki de EmacsWiki'ye olan bu bağlantı kabul edilmelidir: EmacsAsDaemon
HongboZhu

0

Bunu yapma şeklim, .bashrc dosyamda tanımlanmış bir takma ad kullanarak önceki bir cevaba oldukça benziyor. emacs --daemon

alias ds="emacs --daemon"

Bunun dışında, bir anahtar pansiyon kısayol var ctrl-alt-Eiçin set emacsclient -c. Emacs üzerinde çalışmaya başlamak istediğimde bir terminal dsaçıyorum ve her emacsclient örneğini kısayolumla yazıp çağırıyorum.

Umarım bu birine yardımcı olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.