diff options
Diffstat (limited to 'mode-icons.el')
-rw-r--r-- | mode-icons.el | 38 |
1 files changed, 30 insertions, 8 deletions
diff --git a/mode-icons.el b/mode-icons.el index 580685e..5f8b443 100644 --- a/mode-icons.el +++ b/mode-icons.el @@ -208,6 +208,7 @@ This was stole/modified from `c-save-buffer-state'" (writable #xf09c FontAwesome) (save #xf0c7 FontAwesome) (saved "" nil) + (modified-outside #xf071 FontAwesome) (apple #xf179 FontAwesome) (win #xf17a FontAwesome) ;; FIXME: use lsb_release to determine Linux variant and choose appropriate icon @@ -233,6 +234,7 @@ without the extension. And the third being the type of icon." (const :tag "Writable Indicator" writable) (const :tag "Saved" saved) (const :tag "Save" save) + (const :tag "Modified Outside Emacs" modified-outside) (const :tag "Apple" apple) (const :tag "Windows" win) (const :tag "Unix" unix)) @@ -305,25 +307,38 @@ the icon." 'local-map '(keymap (mode-line keymap - (mouse-1 . mode-icons-save-buffer) + (mouse-1 . mode-icons-save-or-revert-buffer) (mouse-3 . mode-line-toggle-modified))) 'help-echo 'mode-icons-modified-help-echo) "List of text propeties to apply to read-only buffer indicator." :type '(repeat sexp) :group 'mode-icons) -(defun mode-icons-save-buffer (event) - "Save buffer from mode line. +(defun mode-icons-save-or-revert-buffer (event) + "Save buffer OR revert file from mode line. Use EVENT to determine location." (interactive "e") (with-selected-window (posn-window (event-start event)) - (call-interactively (key-binding (where-is-internal 'save-buffer global-map t))) + (if (not (or (and (buffer-file-name) (file-remote-p buffer-file-name)) + (verify-visited-file-modtime (current-buffer)))) + (revert-buffer t t) + (call-interactively (key-binding (where-is-internal 'save-buffer global-map t)))) (force-mode-line-update))) (defun mode-icons-modified-help-echo (window _object _point) "Return help text specifying WINDOW's buffer modification status." - (format "Buffer is %smodified\nmouse-1: Save Buffer\nmouse-3: Toggle modification state" - (if (buffer-modified-p (window-buffer window)) "" "not "))) + (format "Buffer is %s\nmouse-1: %s Buffer\nmouse-3: Toggle modification state" + (cond + ((not (or (and (buffer-file-name) (file-remote-p buffer-file-name)) + (verify-visited-file-modtime (current-buffer)))) + "modified outside of emacs!") + ((buffer-modified-p (window-buffer window)) + "modified") + (t "unmodified")) + (if (not (or (and (buffer-file-name) (file-remote-p buffer-file-name)) + (verify-visited-file-modtime (current-buffer)))) + "Revert" + "Save"))) (defcustom mode-icons-read-only-text-properties '('mouse-face 'mode-line-highlight 'local-map @@ -559,10 +574,17 @@ ICON-SPEC should be a specification from `mode-icons'." (defun mode-icons--modified-status () "Get modified status icon." (eval `(propertize - ,(let ((mod (format-mode-line "%1+")) + ,(let ((mod (or (and (not (or (and (buffer-file-name) (file-remote-p buffer-file-name)) + (verify-visited-file-modtime (current-buffer)))) + "!") + (format-mode-line "%1+"))) icon-spec) (setq mod (or (cond - ((string= "*" mod) + ((char-equal ?! (aref mod 0)) + (if (setq icon-spec (mode-icons-get-icon-spec 'modified-outside)) + (mode-icons-propertize-mode 'modified-outside icon-spec) + mod)) + ((char-equal ?* (aref mod 0)) (if (setq icon-spec (mode-icons-get-icon-spec 'save)) (mode-icons-propertize-mode 'save icon-spec) mod)) |