Có cách nào để thay đổi màu sắc của rìa cửa sổ đang hoạt động không?


14

Để phân biệt rõ hơn giữa cửa sổ tập trung và phần còn lại không phải là tôi muốn thay đổi màu rìa của cửa sổ này. Khám phá tùy chỉnh với từ khóa fringe Tôi chỉ tìm thấy cách thay đổi màu bg của nó mà không có khả năng đặt các màu khác nhau cho các màu đang hoạt động và không hoạt động. Có thể ở tất cả? Cám ơn.


Tôi không chắc chắn về rìa, nhưng bạn có thể thay đổi dòng chế độ cho các cửa sổ không hoạt động. thử M-x customize-face mode-line-inactive.
Tyler

3
Nó dường như là khung cục bộ, vì vậy có vẻ như câu trả lời là không. Tôi đã thử (face-remap-add-relative 'fringe '((:background "yellow")))dùng cho các mặt khác là đủ để sử dụng bộ đệm cục bộ, nhưng nó ảnh hưởng đến tất cả các cửa sổ trong khung theo như fringecó liên quan. Ngoài đề xuất của @Tyler, bạn cũng có thể tùy chỉnh con trỏ để nó chỉ xuất hiện trong các cửa sổ đang hoạt động - xem biếncursor-in-non-selected-windows
luật


Tôi biết về modeline, thx. Tôi chỉ muốn làm cho nó rõ ràng hơn cho tôi.
Sandric

Dưới đây là một số ý tưởng bổ sung để giúp cửa sổ hoạt động thu hút sự chú ý trực quan hơn: (1) làm cho nền dòng chế độ của các cửa sổ không hoạt động khớp với màu của bộ đệm để dòng chế độ không hoạt động trở nên ít chú ý hơn: stackoverflow.com/ a / 20936397/2112361 và (2) thay đổi màu sắc của các thành phần văn bản nhất định mode-line-formattrong các cửa sổ đang hoạt động và không hoạt động: emacs.stackexchange.com/a/22682/2287
luật

Câu trả lời:


6

Vì bạn muốn "Để phân biệt rõ hơn giữa cửa sổ tập trung", bạn có thể sử dụng các cách khác để làm điều đó thay vì chỉ thay đổi màu rìa của cửa sổ đang hoạt động.

Tôi kết hợp ba cách để phân biệt tốt hơn giữa các cửa sổ hoạt động và không hoạt động.

  1. Sử dụng các màu khác nhau của dòng chế độ cho các cửa sổ đang hoạt động và không hoạt động.
  2. Đánh dấu dòng hiện tại nơi điểm nằm trong cửa sổ hoạt động.
  3. Sử dụng các màu nền khác nhau cho các cửa sổ hoạt động và không hoạt động.

Lưu ý rằng tất cả các màu đã chọn được đề cập ở trên sẽ hoạt động tốt với chủ đề Emacs của bạn.

Dưới đây là tất cả ba cách:

  1. Sử dụng các màu khác nhau của dòng chế độ cho các cửa sổ đang hoạt động và không hoạt động:

    (custom-set-faces
     '(mode-line ((t (:background "dim gray" :foreground "white"))))
     '(mode-line-inactive ((t (:background nil)))))
    
  2. Đánh dấu dòng hiện tại nơi điểm nằm trong cửa sổ hoạt động:

    (global-hl-line-mode 1)
    ;; underline the current line
    (set-face-attribute hl-line-face nil :underline t)
    
  3. Sử dụng các màu nền khác nhau cho các cửa sổ hoạt động và không hoạt động:

    (defun highlight-selected-window ()
      "Highlight selected window with a different background color."
      (walk-windows (lambda (w)
                      (unless (eq w (selected-window))
                        (with-current-buffer (window-buffer w)
                          (buffer-face-set '(:background "#111"))))))
      (buffer-face-set 'default))
    (add-hook 'buffer-list-update-hook 'highlight-selected-window)
    

Bạn có thể thay đổi màu sắc trong đoạn mã để hoạt động tốt với chủ đề Emacs của bạn.

Đây là ảnh chụp màn hình cuối cùng:

Ảnh chụp màn hình của ba cách với nhau

Và có một chức năng khác bạn có thể sử dụng thủ công để flash cửa sổ đang hoạt động:

(global-set-key (kbd "<f12>") 'flash-active-buffer)
(make-face 'flash-active-buffer-face)
(set-face-attribute 'flash-active-buffer-face nil
                    :background "blue" :foreground nil)
(defun flash-active-buffer ()
  (interactive)
  (run-at-time "100 millisec" nil
               (lambda (remap-cookie)
                 (face-remap-remove-relative remap-cookie))
               (face-remap-add-relative 'default 'flash-active-buffer-face)))

Bạn có thể thay đổi liên kết phím trong đoạn mã, khi bạn muốn hiển thị cửa sổ đang hoạt động, nhấn phím, cửa sổ hiện hoạt sẽ có màu xanh, sau khi bạn di chuyển điểm, màu sẽ biến mất.


0

Tôi đã từng gặp vấn đề tương tự. Tôi đã sử dụng chế độ đường thông minh và tùy chỉnh nó để tôi có được màu sắc rất đặc biệt trong cửa sổ hoạt động. Đây là một khung mẫu. Cửa sổ hoạt động là cửa sổ có dòng chế độ màu đen với chữ vàng.

nhập mô tả hình ảnh ở đây

Hãy chắc chắn rằng bạn yêu cầu dòng chế độ thông minh trước khi sử dụng mã này. Tôi khuyên bạn nên tùy chỉnh nó theo màu bạn cần:

(deftheme smart-mode-line-dmg "dmg theme for smart-mode-line.")
(custom-theme-set-faces
 'smart-mode-line-dmg
                                        ; '(mode-line-inactive ((t :inverse-video nil)))
                                        ; '(mode-line     ((t :inverse-video nil)))
 '(mode-line     ((t :foreground "grey70" :background "black" :inverse-video nil)))
 '(mode-line-inactive  ((t :foreground "black" :background "white" :inverse-video nil)))
 '(sml/global    ((t :inherit font-lock-preprocessor-face)))
 '(sml/filename  ((t :inherit sml/global :foreground "gold" :weight bold)))
 '(sml/prefix    ((t :inherit (font-lock-variable-name-face sml/global))))
 '(sml/read-only ((t :inherit (font-lock-type-face sml/not-modified))))
 '(sml/modes     ((t :foreground nil :inherit sml/filename :weight normal))))

(sml/setup)

0

Bạn có thể thử làm một cái gì đó như sau để làm nổi bật cửa sổ hiện được chọn. Coi chừng việc này không hoạt động nếu bộ đệm trong nhiều cửa sổ giống nhau. Điều này làm mờ tất cả các cửa sổ khác ngoại trừ cửa sổ được chọn.

(defvar dim-window-face
  '((t  (:background "grey40")))
  "Face for a dimmed window in the current frame.")

(defvar current-window-face
  '((t  (:background "black")))
  "Face for a dimmed window in the current frame.")

(defvar window->overlay (make-hash-table)
  "A hash table of window to dimmed overlay.")

(defun dim-windows ()
  "Dim all windows except the `selected-window' in current frame."
  (interactive)
  (walk-windows (lambda (w)
                  ;; Delete existing overlay on window W
                  (when-let ((ol (gethash w window->overlay)))
                    (delete-overlay ol))
                  (let ((ol (make-overlay (window-start w)
                                          (window-end w)
                                          (window-buffer w))))
                    (overlay-put ol 'face (if (eql (selected-window) w)
                                              current-window-face
                                            dim-window-face))
                    (puthash w ol window->overlay)))))
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.