From 8de4cbe7c282c9bec075405700a82f556eabc241 Mon Sep 17 00:00:00 2001 From: "Matthew L. Fidler" Date: Thu, 18 Feb 2016 23:13:20 -0600 Subject: [PATCH] Add narrow icon --- mode-icons.el | 45 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/mode-icons.el b/mode-icons.el index d9bdeb0..a34c64a 100644 --- a/mode-icons.el +++ b/mode-icons.el @@ -150,6 +150,7 @@ absolute path to ICON." ("Octave" "octave" xpm) ("AHK" "autohotkey" xpm) ("Info" #xf05a FontAwesome) + ("Narrow" #xf066 FontAwesome) ;; Diminished modes ("\\(?:ElDoc\\|Anzu\\|SP\\|Guide\\|PgLn\\|Undo-Tree\\|Ergo.*\\|,\\|Isearch\\|Ind\\|Fly\\)" nil nil) ) @@ -203,6 +204,16 @@ the icon." :type '(repeat sexp) :group 'mode-icons) +(defcustom mode-icons-narrow-text-properties + '('local-map + '(keymap + (mode-line keymap + (mouse-2 . mode-line-widen))) + 'mouse-face 'mode-line-highlight 'help-echo "mouse-2: Remove narrowing from buffer") + "List of text propeties to apply to narrowing buffer indicator." + :type '(repeat sexp) + :group 'mode-icons) + (defvar mode-icons-powerline-p nil) (defun mode-icons-need-update-p () "Determine if the mode-icons need an update." @@ -361,6 +372,17 @@ ICON-SPEC should be a specification from `mode-icons'." (concat " " (eval `(propertize ,mode ,@mode-icons-minor-mode-base-text-properties)))) (split-string (format-mode-line minor-mode-alist)))))) +(defun mode-icons--generate-narrow () + "Extracts all rich strings necessary for narrow indicator." + (let (icon-spec) + (delete " " (delete "" (mapcar (lambda(mode) + (concat " " (eval `(propertize + ,(if (setq icon-spec (mode-icons-get-icon-spec mode)) + (mode-icons-propertize-mode mode icon-spec) + mode) + ,@mode-icons-narrow-text-properties)))) + (split-string (format-mode-line "%n"))))))) + ;; Based on rich-minority by Artur Malabarba (defvar mode-icons--backup-construct nil) (defvar mode-icons--mode-line-construct @@ -372,6 +394,11 @@ ICON-SPEC should be a specification from `mode-icons'." '(:eval (mode-icons--generate-major-mode-item)) "Construct used to replace `mode-name'.") +(defvar mode-icons--narrow-backup-construct nil) +(defvar mode-icons--narrow-construct + '(:eval (mode-icons--generate-narrow)) + "Construct used to replace %n in `mode-line-modes'.") + (defun mode-icons-fix (&optional enable) "Fix mode-icons." (if enable @@ -386,19 +413,29 @@ ICON-SPEC should be a specification from `mode-icons'." (and (listp x) (equal (car x) :propertize) (equal (cadr x) '("" mode-name)))) - mode-line-modes))) + mode-line-modes)) + (place-narrow (cl-member-if + (lambda(x) + (and (stringp x) (string= "%n" x))) + mode-line-modes))) (when place (setq mode-icons--backup-construct (car place)) (setcar place mode-icons--mode-line-construct)) (when place-major (setq mode-icons--major-backup-construct (car place-major)) - (setcar place-major mode-icons--major-construct))) + (setcar place-major mode-icons--major-construct)) + (when place-narrow + (setq mode-icons--narrow-backup-construct (car place-narrow)) + (setcar place-narrow mode-icons--narrow-construct))) (let ((place (member mode-icons--mode-line-construct mode-line-modes)) - (place-major (member mode-icons--major-backup-construct mode-line-modes))) + (place-major (member mode-icons--major-backup-construct mode-line-modes)) + (place-narrow (member mode-icons--narrow-backup-construct mode-line-modes))) (when place (setcar place mode-icons--backup-construct)) (when place-major - (setcar place-major mode-icons--major-backup-construct))))) + (setcar place-major mode-icons--major-backup-construct)) + (when place-narrow + (setcar place-narrow mode-icons--narrow-backup-construct))))) ;;;###autoload (define-minor-mode mode-icons-mode