2012-04-20 13 views
5

Normalerweise lasse ich bei hl-line einen etwas dunkleren Farbton des aktuellen Hintergrunds annehmen. Dies funktioniert gut in der Bearbeitung von Puffern. In einigen Puffern, wie Org-Agenda und dem Gnus-Gruppenpuffer, möchte ich jedoch eine schönere Farbe verwenden (anstelle des Cursors).Emacs hl-line: Farbe lokal ändern

Um genau zu sein Ich möchte die Farbe der hl-Linie in der gnus-hl-Linie ohne ändern, die die Farbe der hl-Linie in anderen Puffern beeinflussen.

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

Danke,

Endlösung Phil Vorschlag verwenden. Es verwendet die meiste Zeit eine neutrale hl-Linie, aber manchmal ist eine fettgedruckte hl-Linie bemerkenswert, z. in Gnus und Org Agenda

;; 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

Könnten Sie bitte erklären, wo in dem Code ein, die Intensität einstellen * und * die Farbe für die org-Agenda, Gnus-Zusammenfassung und Gnus-Gruppe jeweils? Vielen Dank! –

Antwort

4

hl-line-face ist eine Variable, die Fläche enthält, die für hl-line-mode verwenden, so können wir, dass variable Pufferlokale in diesem Modi machen, und ihm ein neues benutzerdefiniertes Gesicht zuordnen.

Sie können ein neues Gesicht wie folgt erstellen:

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

und fertigen sie mit Mxcustomize-faceRETgnus-hl-lineRET

Dann fügen Sie diese in Ihrer gnus-hl-line Funktion (vor hl-line-mode Aufruf würde am sinnvollsten erscheinen).

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

In der Tat. Vielen Dank! – Rasmus