aboutsummaryrefslogtreecommitdiffstats
path: root/mode-icons.el
diff options
context:
space:
mode:
Diffstat (limited to 'mode-icons.el')
-rw-r--r--mode-icons.el38
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))