Emacs arka plan programı kullanırken terminal ve grafik çerçeveleri için farklı temalar


20

Emacs24 aşağıdaki davranışı elde etmeye çalışıyorum:

Çalışan sunucuya bir terminal çerçevesiyle bağlanıp bağlanmamaya bağlı olarak farklı bir tema (solarize-karanlık ve solarize-ışık) kullanmayı seviyorum

% emacsclient -t

veya gtk çerçeveli

% emacsclient -c

Bu eski Emacs'da işe yaramış gibi görünüyor, ama şu anki Emacs bir yol bulamadı. Her zaman SO'yu (ör. Https://stackoverflow.com/q/18904529/152439 ve cevaplar) ve posta listelerini (ör. Https://lists.gnu.org/archive/html/help-gnu-emacs/ ) kontrol ettim 2012-02 / msg00227.html ve https://lists.gnu.org/archive/html/help-gnu-emacs/2012-02/msg00237.html ).

Mevcut kurulumum şöyle görünüyor:

(add-to-list 'custom-theme-load-path "~/.emacs.d/themes/solarized")
(if (daemonp)
  (add-hook 'after-make-frame-functions
    (lambda (frame)
      (select-frame frame)
      (if (display-graphic-p frame)
        (load-theme 'solarized-light t)
        (load-theme 'solarized-dark t)
      )
    )
  )
  (load-theme 'solarized-light t)
)

Buradaki sorun, açık bir grafik çerçevem ​​varsa ve sonra bir terminal çerçevesini emacsclient -taçarsam, solarized-dark teması hem yeni terminal çerçevesine (doğru olan) hem de zaten açık olan grafik çerçeveye (solda bırakılmalıdır) uygulanır. el değmemiş, ideal). Eşdeğer bir terminal çerçevesi zaten açık olduğunda ve ile yeni bir grafik çerçeve açtığımda olur emacsclient -c.

EDIT: Geçerli Emacs24 ile bu mümkün değilse, tekrar mümkün kılmak için herhangi bir plan var mı?


1
Afaik (bu amaç için yapılan diğer aramalardan), eski renk teması uygulaması bazı arabellek ayarları için izin verdi. Emacs 24 ile bunu desteklemeyen yerleşik bir tema desteği (deftheme veya load-theme olarak bilinir) geldi: tema tüm emacs oturumu için aynıdır. Bu tür bir kurulum için, belki de her zaman solarized-dark yükleyerek ve grafik çerçevelerini başlatmak için -rv bayrağını kullanarak kabul edilebilir bir kesmek yönetebilirsiniz, ancak mükemmel olmaktan uzak olacaktır.
T. Verron

Geçici çözümlerden biri, terminal ve GUI için burada açıklandığı gibi ayrı istemciler çalıştırmaktır: emacs.stackexchange.com/q/41/93 İş akışınıza bağlı olarak, bu uygun bir çözüm olmayabilir. Benim için işe yarıyor çünkü çok az veya hiç çakışma olmadan farklı görevler yapıyorum.
nispio

Emacs24'teki dahili gümrük teması ihtiyaçlarınızı karşılamıyorsa, her zaman color-theme.elhangi IIRC'nin çerçeveye bağlı renk ayarlarına sahip olduğunu kullanabilirsiniz. Yerleşik tema yeteneklerini her yerde kullanmak dışında kullanmanın büyük bir avantajı yoktur.
Vamsi

2
color-theme-buffer-local , hem color-themeEmacs 24 tema sistemleri için tampon-yerel tema desteği sağlar . Benim solarized tema sürümü Bu yolu karar verirseniz de, her iki sistemlerini destekler.
sanityinc

@sanityinc Teşekkürler; Emacs 24.3 kullanıyorum ve bazı sorunlar var gibi görünüyor, bkz. Github.com/vic/color-theme-buffer-local/issues/5 . Ama projeye bir göz atacağım.
andreas-h

Yanıtlar:


8

Bunu farklı temalar kullanarak yapamazsınız. Çözüm, terminale bağlı olarak farklı yüz tanımlarına sahip bir tema oluşturmaktır. Gibi bir örneğe bakarsanız, font-lock-comment-facenasıl çalıştığını göreceksiniz. Bunun yerine belirtme ((class color) (min-colors 88) (background dark))da olabilir specifcy (type tty)veya (type graphic)vb manuel fazla bilgiye sahiptir .

(defface font-lock-comment-face
  '((((class grayscale) (background light))
 :foreground "DimGray" :weight bold :slant italic)
(((class grayscale) (background dark))
 :foreground "LightGray" :weight bold :slant italic)
(((class color) (min-colors 88) (background light))
 :foreground "Firebrick")
(((class color) (min-colors 88) (background dark))
 :foreground "chocolate1")
(((class color) (min-colors 16) (background light))
 :foreground "red")
(((class color) (min-colors 16) (background dark))
 :foreground "red1")
(((class color) (min-colors 8) (background light))
 :foreground "red")
(((class color) (min-colors 8) (background dark))
 :foreground "yellow")
(t :weight bold :slant italic))
  "Font Lock mode face used to highlight comments."
  :group 'font-lock-faces)

Sanırım iki tema alan ve birleştirilmiş tema üreten bir fonksiyon yazabilirsiniz, bir temanın (type tty)yüzleri atanır ve diğer temanın yüzleri (type graphic)her iki temanın da kullanıldığı yere atanır t.



2

Özelleştirme düzenleyicisinde "terminal modu" veya "minimum renkler" gibi yüz özelleştirmeleri için koşullar tanımlayabilirsiniz:

Bir yüzü özelleştirirken, [Durum] düğmesini tıklayın ve "Tüm ekran özelliklerini göster" i seçin. Ardından yüzün daha fazla uzmanlaşması için koşulları ayarlayabilirsiniz.

Çerçeve tty olduğunda arka plan rengini siyaha ayarlamak için minimal bir varyasyon :

(custom-set-faces
 '(default (
            (((type tty) (min-colors 256))
             (:background "black"))
            (t
             (:background "#181a26")))
    ))
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.