ธีมที่แตกต่างกันสำหรับเทอร์มินัลและเฟรมกราฟิกเมื่อใช้ Emacs daemon


20

ฉันพยายามที่จะบรรลุพฤติกรรมดังต่อไปนี้ใน Emacs24:

ฉันชอบที่จะใช้ชุดรูปแบบที่แตกต่างกัน (solarized-dark เทียบกับ solarized-light) ขึ้นอยู่กับว่าฉันเชื่อมต่อกับเซิร์ฟเวอร์ที่รันด้วยเฟรมเทอร์มินัล

% emacsclient -t

หรือด้วยเฟรม gtk

% emacsclient -c

ดูเหมือนว่าจะทำงานใน Emacs รุ่นเก่า แต่ Emacs ปัจจุบันฉันไม่สามารถหาวิธีได้ ฉันตรวจสอบแล้ว alreday ดังนั้น (เช่น/programming//q/18904529/152439และคำตอบ) และรายชื่อผู้รับจดหมาย (เช่นhttps://lists.gnu.org/archive/html/help-gnu-emacs/ 2012-02 / msg00227.htmlและhttps://lists.gnu.org/archive/html/help-gnu-emacs/2012-02/msg00237.html )

การตั้งค่าปัจจุบันของฉันมีลักษณะดังนี้:

(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)
)

ปัญหานี้คือถ้าฉันเปิดเฟรมกราฟิกและเปิดเทอร์มินัลเฟรมด้วยemacsclient -tชุดรูปแบบพลังงานแสงอาทิตย์มืดจะถูกนำไปใช้กับทั้งกรอบเทอร์มินัลใหม่ (ซึ่งถูกต้อง) และเฟรมกราฟิกที่เปิดอยู่แล้ว มิได้ถูกแตะต้อง) emacsclient -cเทียบเท่าที่เกิดขึ้นเมื่อกรอบขั้วเปิดอยู่แล้วและผมเปิดกรอบกราฟิกใหม่ที่มี

แก้ไข:ในกรณีที่เป็นไปไม่ได้กับ Emacs24 ปัจจุบันมีแผนจะทำให้มันเป็นไปได้อีกหรือไม่?


1
Afaik (จากการค้นหาอื่น ๆ เพื่อจุดประสงค์นี้), การใช้ชุดรูปแบบสีเก่าที่ได้รับอนุญาตสำหรับการตั้งค่าต่อบัฟเฟอร์บางอย่าง ด้วย emacs 24 มาพร้อมการสนับสนุนชุดรูปแบบ (รู้จักกันในชื่อ deftheme หรือ load-theme) ซึ่งไม่รองรับสิ่งนี้: ชุดรูปแบบเหมือนกันสำหรับเซสชัน emacs ทั้งหมด สำหรับการตั้งค่าแบบนี้บางทีคุณสามารถจัดการแฮ็คที่ยอมรับได้โดยการโหลด Solarized-dark และใช้แฟล็ก -rv เพื่อเริ่มเฟรมกราฟิก แต่มันจะไม่สมบูรณ์
T. Verron

วิธีแก้ปัญหาหนึ่งคือการเรียกใช้ไคลเอนต์แยกต่างหากสำหรับเทอร์มินัลและ GUI ตามที่กล่าวไว้ที่นี่: emacs.stackexchange.com/q/41/93 ทั้งนี้ขึ้นอยู่กับเวิร์กโฟลว์ของคุณสิ่งนี้อาจไม่ใช่วิธีแก้ปัญหาที่เป็นไปได้ มันใช้งานได้สำหรับฉันเพราะฉันทำงานประเภทต่าง ๆ ในแต่ละงานโดยมีการเหลื่อมกันเพียงเล็กน้อยหรือไม่มีเลย
nispio

หาก inbuilt ที่กำหนดเองทำใน emacs24 ไม่ตรงกับความต้องการของคุณคุณสามารถใช้color-theme.elIIRC ที่มีการตั้งค่าสีตามเฟรม ไม่มีข้อได้เปรียบที่ยอดเยี่ยมในการใช้ความสามารถในชุดรูปแบบนอกเหนือจากความแพร่หลาย
Vamsi

2
color-theme-buffer-localให้การสนับสนุนชุดรูปแบบบัฟเฟอร์ท้องถิ่นสำหรับทั้งcolor-themeระบบ Emacs 24 และธีม ธีมโซล่าร์เวอร์ชันของฉันยังรองรับทั้งสองระบบหากคุณตัดสินใจที่จะใช้เส้นทางนี้
sanityinc

@sanityinc ขอบคุณ; ฉันใช้ Emacs 24.3 และดูเหมือนจะมีปัญหาบางอย่างดูgithub.com/vic/color-theme-buffer-local/issues/5 แต่ฉันจะจับตาดูโครงการ
andreas-h

คำตอบ:


8

คุณไม่สามารถทำได้โดยใช้ชุดรูปแบบที่แตกต่างกัน ทางออกคือการสร้างชุดรูปแบบที่มีคำจำกัดความใบหน้าที่แตกต่างกันขึ้นอยู่กับเทอร์มินัล หากคุณดูตัวอย่างเช่นfont-lock-comment-faceคุณจะเห็นว่ามันทำงานอย่างไร แทนการระบุ((class color) (min-colors 88) (background dark))คุณยังสามารถ specifcy (type tty)หรือ(type graphic)ฯลฯ คู่มือมีข้อมูลเพิ่มเติม

(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)

ผมคิดว่าคุณสามารถเขียนฟังก์ชั่นที่ใช้เวลาสองรูปแบบและผลิตรูปแบบที่ผสานด้วยใบหน้าจากรูปแบบหนึ่งที่ถูกกำหนด(type tty)และใบหน้าจากรูปแบบอื่น ๆ ที่ได้รับมอบหมายที่ทั้งสองรูปแบบเดิมใช้(type graphic)t


6

color-theme-buffer-localให้การสนับสนุนชุดรูปแบบบัฟเฟอร์ท้องถิ่นสำหรับทั้งชุดรูปแบบสีและชุดรูปแบบ Emacs 24 ธีมโซล่าร์เวอร์ชันของฉันยังรองรับทั้งสองระบบหากคุณตัดสินใจที่จะใช้เส้นทางนี้


ขอบคุณสำหรับตัวชี้ไปยังรุ่นของคุณจากแสงอาทิตย์ฉันชอบมันมาก!
andreas-h

2

คุณสามารถกำหนดเงื่อนไขสำหรับการปรับแต่งใบหน้าเช่น "โหมดเทอร์มินัล" หรือ "สีขั้นต่ำ" ในเครื่องมือแก้ไขการปรับแต่ง:

เมื่อปรับแต่งหน้าใบหน้าให้คลิกปุ่ม [สถานะ] และเลือก "แสดงรายละเอียดการแสดงทั้งหมด" จากนั้นคุณสามารถตั้งค่าเงื่อนไขสำหรับความเชี่ยวชาญเพิ่มเติมของใบหน้า

นี่คือตัวแปรขั้นต่ำในการตั้งค่าสีพื้นหลังเป็นสีดำเมื่อเฟรมเป็น tty:

(custom-set-faces
 '(default (
            (((type tty) (min-colors 256))
             (:background "black"))
            (t
             (:background "#181a26")))
    ))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.