Emacs hl-ред: промяна на цвета локално

Обикновено оставям hl-line да вземе малко по-тъмен нюанс на текущия фон. Това работи добре при редактиране на буфери. Въпреки това, в някои буфери, като дневния ред на организацията и груповия буфер на Gnus, бих искал да използвам по-пикантен цвят (на мястото на курсора).

За да бъда конкретен, бих искал да променя цвета на hl-линията в gnus-hl-линията без да засягам цвета на hl-линията в други буфери.

(add-hook 'gnus-summary-mode-hook 'gnus-hl-line)
(add-hook 'gnus-group-mode-hook 'gnus-hl-line)

(defun gnus-hl-line ()
  (hl-line-mode 1)
  (set (make-local-variable 'line-move-visual) nil)
  (setq cursor-type nil))

Благодаря,

Окончателно решение, използващо предложението на Фил. Той използва неутрална hl линия през повечето време, но понякога е забележима удебелена hl линия, напр. в дневния ред на Gnus и Org

;; From emacs-wiki:
(defun shade-color (intensity)
  "print the #rgb color of the background, dimmed according to intensity"
  (interactive "nIntensity of the shade : ")
  (apply 'format "#%02x%02x%02x"
         (mapcar (lambda (x)
                   (if (> (lsh x -8) intensity)
                       (- (lsh x -8) intensity)
                     0))
                 (color-values (cdr (assoc 'background-color (frame-parameters)))))))

;; Default hl
(global-hl-line-mode t)
(make-variable-buffer-local 'global-hl-line-mode)
(set-face-background hl-line-face (shade-color 08))  

(defface hl-line-highlight-face
  '((t :inherit highlight))
  "Face for highlighting the current line with `hl-line-fancy-highlight'."
  :group 'hl-line)

(defun hl-line-fancy-highlight ()
  (set (make-local-variable 'hl-line-face) 'hl-line-highlight-face)
  ;;    (set (make-local-variable 'line-move-visual) nil)
  ;;    (set (make-local-variable 'cursor-type) nil)
  (setq global-hl-line-mode nil)
  (hl-line-mode))

(add-hook 'org-agenda-mode-hook 'hl-line-fancy-highlight)
(add-hook 'gnus-summary-mode-hook 'hl-line-fancy-highlight)
(add-hook 'gnus-group-mode-hook 'hl-line-fancy-highlight)

person Rasmus    schedule 20.04.2012    source източник
comment
Бихте ли обяснили къде в кода можете да зададете интензитета и цвета съответно за org-дневен ред, gnus-summary и gnus-group? Благодаря!   -  person Alexander Shcheblikin    schedule 28.06.2016


Отговори (1)


hl-line-face е променлива, съдържаща лицето, което да се използва за hl-line-mode, така че можем да направим тази променлива буферна локална в тези режими и да й присвоим ново потребителско лице.

Можете да създадете ново лице по следния начин:

(defface gnus-hl-line
  '((t :inherit hl-line))
  "Face for highlighting the current line with `gnus-hl-line'."
  :group 'hl-line)

и го персонализирайте с M-x customize-face RET gnus-hl-line RET

След това добавете това във вашата gnus-hl-line функция (преди извикването на hl-line-mode би изглеждало най-разумно).

(set (make-local-variable 'hl-line-face) 'gnus-hl-line)
person phils    schedule 20.04.2012