emacscustomizationfont-faceorg-modeemacs-faces

How to set a buffer locally face attribute for a particular buffer?


I want to change the face attribute in Org-Agenda buffer only. So I need to change Org-Agenda face attribute buffer locally.

Here is my code: (which is globally)

(defun my-org-agenda-hl-line ()
  (hl-line-mode)
  (set-face-attribute 'hl-line nil
                  :box '(:color "deep pink" :line-width 2))
)
(add-hook 'org-agenda-mode-hook 'my-org-agenda-hl-line)

Please to help me make this buffer locally. Thanks


Solution

  • Here is what you need to do:

    ;; First create new face which is a copy of hl-line-face
    (copy-face 'hl-line 'hl-line-agenda-face)
    
    ;; Change what you want in this new face 
    (set-face-attribute 'hl-line-agenda-face nil
                        :box '(:color "deep pink" :line-width 2))
    
    ;; The function to use the new face
    (defun my-org-agenda-hl-line ()
      (set (make-local-variable 'hl-line-face) ; This is how to make it local
           'hl-line-agenda-face)
        (hl-line-mode))
    
    ;; Finally, the hook
    (add-hook 'org-agenda-mode-hook 'my-org-agenda-hl-line)