Các chủ đề khác nhau cho thiết bị đầu cuối và khung đồ họa khi sử dụng daemon Emacs


20

Tôi đang cố gắng đạt được các hành vi sau trong Emacs24:

Tôi thích sử dụng một chủ đề khác (ánh sáng mặt trời so với ánh sáng mặt trời) tùy thuộc vào việc tôi có kết nối với máy chủ đang chạy với khung thiết bị đầu cuối không

% emacsclient -t

hoặc với khung gtk

% emacsclient -c

Điều này dường như đã hoạt động trong các Emacs cũ, nhưng các Emac hiện tại tôi không thể tìm ra cách. Tôi đã kiểm tra SO (ví dụ: /programming//q/18904529/152439 và câu trả lời) và danh sách gửi thư (ví dụ: https://lists.gnu.org/archive/html/help-gnu-emacs/ 2012/02 / dir00227.htmlhttps://lists.gnu.org/archive/html/help-gnu-emacs/2012-02/msg00237.html ).

Thiết lập hiện tại của tôi trông như thế này:

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

Vấn đề với điều này là nếu tôi mở khung đồ họa và sau đó mở khung thiết bị đầu cuối emacsclient -t, thì chủ đề năng lượng mặt trời tối được áp dụng cho cả khung thiết bị đầu cuối mới (chính xác) và khung đồ họa đã mở (nên để lại không bị ảnh hưởng, lý tưởng). Điều tương tự xảy ra khi một khung thiết bị đầu cuối đã mở và tôi mở một khung đồ họa mới với emacsclient -c.

EDIT: Trong trường hợp điều này là không thể với Emacs24 hiện tại, có kế hoạch nào để thực hiện lại không?


1
Afaik (từ tìm kiếm khác cho mục đích này), việc triển khai chủ đề màu cũ cho phép một số cài đặt trên mỗi bộ đệm. Với emacs 24 đã xuất hiện một hỗ trợ chủ đề tích hợp (được gọi là deftheme hoặc load-theme), không hỗ trợ điều này: chủ đề này giống nhau cho toàn bộ phiên emacs. Đối với kiểu thiết lập này, có thể bạn có thể quản lý một bản hack có thể chấp nhận bằng cách luôn tải năng lượng mặt trời tối và sử dụng cờ -rv để bắt đầu các khung đồ họa, nhưng nó sẽ không hoàn hảo.
T. Verron

Một cách giải quyết khác là chạy các máy khách riêng biệt cho thiết bị đầu cuối và cho GUI như được thảo luận ở đây: emacs.stackexchange.com/q/41/93 Tùy thuộc vào quy trình làm việc của bạn, đây có thể không phải là một giải pháp khả thi. Nó hoạt động với tôi bởi vì tôi đang thực hiện các loại nhiệm vụ khác nhau trong mỗi nhiệm vụ, với rất ít hoặc không có sự chồng chéo.
nispio

Nếu chủ đề tùy chỉnh sẵn có trong emacs24 không phù hợp với nhu cầu của bạn, bạn luôn có thể sử dụng color-theme.elIIRC có cài đặt màu phụ thuộc khung. Không có lợi thế lớn trong việc sử dụng các khả năng theo chủ đề sẵn có ngoài tính phổ biến.
Vamsi

2
color-theme-buffer-local cung cấp hỗ trợ chủ đề đệm-cục bộ cho cả hai color-themevà hệ thống chủ đề Emacs 24. Phiên bản của tôi về chủ đề năng lượng mặt trời cũng hỗ trợ cả hai hệ thống, nếu bạn quyết định đi theo con đường này.
sanityinc

@sanityinc Cảm ơn; Tôi đang sử dụng Emacs 24.3 và dường như có một số vấn đề, xem github.com/vic/color-theme-buffer-local/issues/5 . Nhưng tôi sẽ theo dõi dự án.
andreas-h

Câu trả lời:


8

Bạn không thể làm điều này bằng cách sử dụng các chủ đề khác nhau. Giải pháp là tạo một chủ đề có các định nghĩa khuôn mặt khác nhau tùy thuộc vào thiết bị đầu cuối. Nếu bạn nhìn vào một ví dụ như thế font-lock-comment-face, bạn sẽ thấy nó hoạt động như thế nào. Thay vì chỉ định ((class color) (min-colors 88) (background dark))bạn cũng có thể chỉ định (type tty)hoặc (type graphic)vv. Hướng dẫn có nhiều thông tin hơn .

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

Tôi đoán bạn có thể viết một hàm lấy hai chủ đề và tạo ra một chủ đề được hợp nhất, với các mặt từ một chủ đề được gán (type tty)và các mặt từ chủ đề khác được gán (type graphic)trong đó cả hai chủ đề gốc đều sử dụng t.



2

Bạn có thể xác định các điều kiện cho các tùy chỉnh khuôn mặt, như "chế độ đầu cuối" hoặc "màu tối thiểu" trong trình chỉnh sửa tùy chỉnh:

Khi tùy chỉnh một khuôn mặt, nhấp vào nút [Trạng thái] và chọn "Hiển thị tất cả thông số kỹ thuật hiển thị". Sau đó, bạn có thể thiết lập các điều kiện để chuyên môn hóa hơn nữa của khuôn mặt.

Đây là một biến thể tối thiểu để đặt màu nền thành màu đen khi khung hình là tty:

(custom-set-faces
 '(default (
            (((type tty) (min-colors 256))
             (:background "black"))
            (t
             (:background "#181a26")))
    ))
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.