diff options
Diffstat (limited to 'feebleline.el')
| -rw-r--r-- | feebleline.el | 73 | 
1 files changed, 40 insertions, 33 deletions
| diff --git a/feebleline.el b/feebleline.el index f218027..ce70be6 100644 --- a/feebleline.el +++ b/feebleline.el @@ -1,11 +1,10 @@ -;;; package --- summary -;;; feebleline.el +;;; feebleline.el --- Replace modeline with a slimmer proxy  ;; Copyright 2018 Benjamin Lindqvist  ;; Author: Benjamin Lindqvist <benjamin.lindqvist@gmail.com>  ;; Maintainer: Benjamin Lindqvist <benjamin.lindqvist@gmail.com> -;; URL: https://github.com/tautologyclub/feeblel +;; URL: https://github.com/tautologyclub/feebleline  ;; Package-Version:  ;; Version: 1.0 @@ -34,6 +33,8 @@  ;; for anything else (but if you switch frame/window, it will replace whatever  ;; message is currently displayed). +;; To customize feebleline's format, modify `feebleline-mode-line-text'. +  ;; NOTE:  ;; feebleline.el will look considerably better with the following  ;; settings: @@ -56,7 +57,19 @@  (require 'advice)  (defvar feebleline/mode-line-format-default)  (defvar feebleline/timer) -(defvar feebleline/default-log-max) +(defvar feebleline-mode-line-text +  '(("[%s] " ((format-time-string "%H:%M:%S")) (face font-lock-comment-face)) +    ("%s/%s " ((string-to-number (format-mode-line "%l")) +               (current-column))) +    ("@ %s " ((buffer-file-name)))) +  "Each element is a list with the following format: + +    (FORMAT-STRING FORMAT-ARGS PROPS) + +FORMAT-STRING will be used as the first argument to `format', and +FORMAT-ARGS (a list) will be expanded as the rest of `format' +arguments. If PROPS is given, it should be a list which will be +sent to `add-text-properties'.")  (defun feebleline-default-settings ()    "Some default settings that works well with feebleline." @@ -72,47 +85,41 @@    (if feebleline-mode        (progn          (setq feebleline/mode-line-format-default mode-line-format) -        (setq feebleline/timer (run-with-timer 0 0.1 'mode-line-proxy-fn)) +        (setq feebleline/timer (run-with-timer 0 0.1 'feebleline-mode-line-proxy-fn))          (custom-set-variables '(mode-line-format nil))          (ad-activate 'handle-switch-frame) -        (add-hook 'focus-in-hook 'mode-line-proxy-fn)) +        (add-hook 'focus-in-hook 'feebleline-mode-line-proxy-fn))      (custom-set-variables       '(mode-line-format feebleline/mode-line-format-default))      (cancel-timer feebleline/timer)      (ad-deactivate 'handle-switch-frame) -    (remove-hook 'focus-in-hook 'mode-line-proxy-fn))) - -;; (defvar msg-string) -;; (defun mode-line-proxy-string-fn () (interactive) -;;   "Hej." -;;   (setq msg-string (concat "a" "b")) -;;   (message "%s" msg-string)) - -(defun message-buffer-file-name-or-nothing () +    (remove-hook 'focus-in-hook 'feebleline-mode-line-proxy-fn))) + +(defun feebleline--mode-line-part (part) +  "Return a PART (an element) of `feebleline-mode-line-text` as a propertized string." +  (let ((text (apply #'format (append (list (car part)) +                                      (mapcar #'eval (cadr part))))) +        (props (elt part 2))) +    (when props +      (add-text-properties 0 (length text) props text)) +    text)) + +(defun feebleline-message-buffer-file-name-or-nothing ()    "Replace echo-area message with mode-line proxy." -  (setq feebleline/default-log-max message-log-max) -  (unwind-protect -      (progn -        (setq message-log-max nil) -        (if buffer-file-name -            (message "[%s] %s/%s @ %s" -                     (format-time-string "%H:%M:%S") -                     (string-to-number (format-mode-line "%l")) -                     (current-column) -                     (buffer-file-name)))) -    (setq message-log-max feebleline/default-log-max))) - -(defun mode-line-proxy-fn () +  (when buffer-file-name +    (let ((message-log-max nil)) +      (message (mapconcat #'feebleline--mode-line-part feebleline-mode-line-text ""))))) + +(defun feebleline-mode-line-proxy-fn ()    "Put a mode-line proxy in the echo area *if* echo area is empty." -  (if (not (current-message)) -      (message-buffer-file-name-or-nothing))) +  (unless (current-message) +    (feebleline-message-buffer-file-name-or-nothing)))  (defadvice handle-switch-frame (after switch-frame-message-name)    "Get the modeline proxy to work with i3 switch focus." -  (message-buffer-file-name-or-nothing) +  (feebleline-message-buffer-file-name-or-nothing)    ad-do-it -  (message-buffer-file-name-or-nothing)) +  (feebleline-message-buffer-file-name-or-nothing))  (provide 'feebleline) -  ;;; feebleline.el ends here | 
