Konsol ve GUI için iki ayrı emacs arka plan programı başlatın


14

Genellikle GUI ile emacs başlatmak ve ile hemen bir sunucu başlatmak (server-start). Artık mevcut emacs oturumuma belgeleri terminalden emacsclient -n <file>veya Dosya Tarayıcısından kolayca açabiliyorum .

Ancak, zaman zaman, terminalimi kullanarak emacs çalıştırmak istiyorum emacsclient -t. Bu çoğunlukla git komut günlükleri yazarken veya diğer çok küçük görevleri gerçekleştirirken olur. Bu durumlarda, init dosyamın emacs'ın GUI örneğine yüklenmiş olması, TTY emac'larına özgü özelleştirmelerden hiçbirini alamadığım anlamına gelir.

Koşabileceğimi biliyorum

emacs -nw -q -l "some-custom-init-file.el"

ancak bu her seferinde tüm paketleri yeniden yükleyecektir. Her iki dünyanın en iyisini alabilir miyim? Mevcut bir emacs penceresinde dosyayı ziyaret karşı terminal içinde çalıştırmak için ayrı özelleştirmeler kullanabilmek için bir "TTY daemon" kurmak için bir yolu var mı?


1
TTY ve GUI modu arasındaki farklı özelleştirmelerin bir örneğini gösterebilir misiniz?
stsquad

1
@stsquad Gerçekten basit olanı GUI modunda sol bir saçak kullanmamdır, ancak saçak TTY modunda bulunmadığından, satır numaraları ile metin arasında boşluk yoktur. Bu (setq linum-format "%d "), TTY özelleştirme dosyasında düzeltilebilir . Ayrıca, renk temam TTY modunda her zaman garip görünüyor, bu yüzden TTY için kesinlikle farklı bir tema seçeceğim. Aslında şu anda çok fazla farkım yok, ama şimdi farklı sunuculara sahip olabileceğimi bildiğime göre, liste büyüyebilir.
nispio

@nispio: Size M-x report-emacs-bugTTY ve GUI çerçevelerinde farklı yüz temalarına sahip olma yeteneği gibi yeni özellikler öneriyorum (aslında, bir tema bu farklı çerçeve türleri için tamamen farklı renkler belirleyebilir, böylece temanızı da ayarlayabilirsiniz) . Bu ayrı durumlar için birkaç armağan kullanmak, Emacs'ta karşılık gelen işlevsellik eksikliği için sadece bir çözümdür.
Stefan

Yanıtlar:


14

Kullanım emacs --daemon=your-server-name -l "custom-init-file"yeni sunucuyu başlatmak için ve emacsclient -nw -s your-server-namekendisi terminali gelen bu cihaza bağlanmak için. Kılavuzda Emacs'ı sunucu olarak kullanma bölümünde daha fazla başlatma seçeneği vardır.


Bu çalışıyor! Sunucu dosyasını avlamanın ve silmenin yanı sıra bu şekilde başlatılan bir sunucuyu öldürmenin iyi bir yolu var mı?
nispio

( -qVarsayılan init.el
ayarımın

2
Ne emacsclient -s your-server-name -e "(kill-emacs)"istiyorsun? Yukarıdakiler sadece duygusal ve evalleri çağırıyor (kill-emacs). Sen yerini alabilecek (kill-emacs)ile (save-buffers-kill-emacs)de.
Vamsi

Hem terminal hem de gui emacs için ortak bir init.el vardı ve bireysel özelleştirmeler için ayrı özel dosyalar yükledim. Bu yüzden-q
Vamsi

1
Bu çözümler ayrıca mutt ve 'ayrı bir çalışma alanında' emacsclient -c 'ile' emacsclient -t 'kullanırken yaşadığım bir sorunu düzeltti. Basitçe ifade etmek gerekirse, 'emacsclient -c' ateşlendiğinde daemon çöküyordu. Teşekkürler, Vamsi
Boccaperta-IT

9

@ Vamsi'nin cevabına ek olarak, yalnızca tek bir sunucuyu çalıştırırken tavsiyelerde bulunarak aynı avantajlardan faydalanabilirsiniz make-frame-command.

Örneğin, terminalde çalışırken arka plan renginin black(hangi haritalarla #202020) olmasını istiyorum ama #202020grafik modda kullanmak istiyorum . Bunu aşağıdakilerle uyguladım:

(defadvice make-frame-command (after make-frame-change-background-color last activate)
  "Adjusts the background color for different frame types. 
Graphical (X) frames should have the theme color, while terminal frames should match the terminal color (which matches the theme color...but terminal frames can't directly render this color)"
    (if (display-graphic-p)
        (set-background-color "#202020")
      (set-background-color "black")))

Bunu kullanarak çok fazla kilometre alabilirsiniz make-variable-frame-local( set-background-coloryukarıda zaten çerçeve yerel).

Bunun en iyi kalıp olup olmadığını bilmiyorum, ancak TTY modu ve X modu Emacs arasında nispeten az farkınız varsa, yapılandırma yönetimini kolaylaştırabilir.

Yukarıdaki kod benim .emacs.d .


Çerçeve başına hangi modda olduğumu "tespit etmenin" bir yolu olup olmadığını merak ediyordum.
nispio

1
Bunu yapacak. geçerli karenin grafik olup olmadığını (display-graphic-p)verir , aksi takdirde. Çerçeveler grafikle değil (afaik) arasında hareket ettirilemediğinden, çerçeve oluşturmaya tavsiyelerde bulunmak, verilen çerçeve için istenen duruma ulaşılmasını sağlar. tnil
J David Smith

Bu kesinlikle en uygun cevap.
Malabarba

4

Aynı emacs arka plan programında çalışan farklı çerçevelerin ayarlarını değiştirmek için bir tavsiyeye ihtiyacınız yoktur . Kancayı after-make-frame-functionsböyle kullanın

(defvar my/ttheme 'tango-dark)
(defvar my/gtheme 'tango)
(defun my/frame-configuration (frame)
  "configure the current frame depending on the frame type"
  (with-selected-frame frame
    (if (display-graphic-p)
        (progn
          (message "after-make-frame-functions hook: window system")
          (set-frame-size frame 115 60)
          ;; other settings for a graphical frame
          (load-theme my/gtheme t))
      (message "after-make-frame-functions hook: text console")
      (load-theme my/ttheme t)
      (set-frame-parameter frame 'menu-bar-lines 0))))

(add-hook 'after-make-frame-functions 'my/frame-configuration)

;; normal start without daemon
(if (not (daemonp))
  (my/frame-configuration (selected-frame)))

Bu şekilde tanımlamanın ek bir avantajı vardır, bu daemon modunda başlamasanız bile istenen çerçeve konfigürasyonudur.

Maalesef load-themeçerçeve yerel değildir ve bu nedenle metin ve grafik çerçeveleri için gerçekten farklı temalar kullanırsanız diğer çerçeveler de renklenir.

Bonus bilgileri: seçtiğiniz temanın gerçek hissi için terminallerinizi en az 256 renkle yapılandırın. Kabuk başlangıç ​​dosyalarınızdan birinde böyle bir ayar kullanın:

TERM=xterm-256color
export TERM

Tüm terminaller 256 rengi desteklemez, örneğin xfce4-terminal hala 8'dir (güzel renkler için sakura'ya geçtim).
unhammer
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.