2012-04-20 18 views
5

Normalmente, hl-line toma un tono ligeramente más oscuro de fondo actual. Esto funciona bien en la edición de búferes. Sin embargo, en algunos buffers, como la agenda Org y el buffer del grupo Gnus, me gustaría usar un color más intenso (en lugar del cursor).Emacs hl-line: cambie el color localmente

Para ser específico, me gustaría cambiar el color de hl-line en la línea gnus-hl sin afectando el color de hl-line en otros almacenamientos intermedios.

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

Gracias,

solución final mediante la sugerencia de Phil. Utiliza una línea de hl neutral la mayor parte del tiempo, pero a veces una hl-línea audaz es apreciable, p. en la agenda de ñus y 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) 
+0

¿Podría explicarnos en qué parte del código se puede establecer la intensidad * y * el color para la agenda de la agenda, gnus-summary y gnus-group, respectivamente? ¡Gracias! –

Respuesta

4

hl-line-face es una variable que contiene la cara de usar para hl-line-mode, por lo que puede hacer que la variable local al búfer en estos modos, y asignarle un nuevo rostro a medida.

Puede crear una nueva cara de esta manera:

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

y personalizarlo con Mxcustomize-faceRETgnus-hl-lineRET

A continuación, añadir esto en su función gnus-hl-line (antes de llamar hl-line-mode parecería más sensato).

(set (make-local-variable 'hl-line-face) 'gnus-hl-line) 
+0

De hecho. ¡Gracias! – Rasmus

Cuestiones relacionadas