summaryrefslogtreecommitdiff
path: root/feebleline-test.el
diff options
context:
space:
mode:
Diffstat (limited to 'feebleline-test.el')
-rw-r--r--feebleline-test.el181
1 files changed, 142 insertions, 39 deletions
diff --git a/feebleline-test.el b/feebleline-test.el
index 5bf4da7..3796529 100644
--- a/feebleline-test.el
+++ b/feebleline-test.el
@@ -3,59 +3,162 @@
;;; Code:
-(defvar feebleline-msg-functions nil)
+(defcustom feebleline-msg-functions nil
+ "Fixme -- document me.")
-(defun my-own-linecol-string ()
+(defcustom feebleline-timer-interval 0.1
+ "Refresh interval of feebleline mode-line proxy."
+ :group 'feebleline)
+
+(defcustom feebleline-use-legacy-settings nil
+ "Hacky settings only applicable to releases older than 25."
+ :group 'feebleline
+ )
+
+(defvar feebleline--home-dir nil)
+(defvar feebleline--new-timer)
+(defvar feebleline/mode-line-format-previous)
+
+
+(defun feebleline-linecol-string ()
"Hey guy!"
- (format "%5s:%-2s" (format-mode-line "%l") (current-column)))
+ (format "%4s:%-2s" (format-mode-line "%l") (current-column)))
+
+(defun feebleline-previous-buffer-name ()
+ "Get name of previous buffer."
+ (buffer-name (other-buffer (current-buffer) 1)))
+
+(defun feebleline-line-number ()
+ "Line number as string."
+ (format "%s" (line-number-at-pos)))
+
+(defun feebleline-column-number ()
+ "Column number as string."
+ (format "%s" (current-column)))
+
+(defun feebleline-file-directory ()
+ "Current directory, if buffer is displaying a file."
+ (if (buffer-file-name)
+ (replace-regexp-in-string
+ (concat "^" feebleline--home-dir) "~"
+ default-directory)
+ ""))
+(defun feebleline-file-or-buffer-name ()
+ "Current file, or just buffer name if not a file."
+ (if (buffer-file-name)
+ (file-name-nondirectory (buffer-file-name))
+ (buffer-name)))
+
+(defun feebleline-file-modified-star ()
+ "Display star if buffer file was modified."
+ (if (and (buffer-file-name) (buffer-modified-p)) "*" ""))
+
+(defun feebleline-project-name ()
+ "Return projectile project name if exists, otherwise nil."
+ (if (string-equal "-" (projectile-project-name))
+ nil
+ (projectile-project-name))
+ )
+
+;; TODO: Perhaps a right-align property?
(setq
feebleline-msg-functions
'(
- (my-own-linecol-string)
- (buffer-file-name
- ((face . feebleline-dir-face) (post . "")))
- ((lambda () ":") ((post . "")))
- (magit-get-current-branch ((face . font-lock-comment-face)))
- ((lambda () "some string") ((pre . "@")))
+ (feebleline-line-number ((post . "") (fmt . "%5s")))
+ (feebleline-column-number ((pre . ":") (fmt . "%-2s")))
+ (feebleline-file-directory ((face . feebleline-dir-face) (post . "")))
+ (feebleline-file-or-buffer-name ((face . font-lock-keyword-face) (post . "")))
+ (feebleline-file-modified-star ((face . font-lock-warning-face) (post . "")))
+ (magit-get-current-branch ((face . font-lock-comment-face) (pre . ":")))
+ ;; (feebleline-project-name ((pre . "[") (post . "]")))
))
-;; and you can append stuff (todo: wrapper function)
-(add-to-list
- 'feebleline-msg-functions
- '((lambda () "end") ((pre . "/")
- (face . font-lock-comment-face)))
- t
- (lambda (x y) nil))
+(defmacro feebleline-append-msg-function (&rest b)
+ "Macro for adding B to the feebleline mode-line, at the end."
+ `(add-to-list 'feebleline-msg-functions ,@b t (lambda (x y) nil)))
+
+(defmacro feebleline-prepend-msg-function (&rest b)
+ "Macro for adding B to the feebleline mode-line, at the beginning."
+ `(add-to-list 'feebleline-msg-functions ,@b nil (lambda (x y) nil)))
+
+;; (feebleline-append-msg-function '((lambda () "end") ((pre . "/"))))
+;; (feebleline-append-msg-function '(magit-get-current-branch ((pre . "/"))))
+;; (feebleline-prepend-msg-function '((lambda () "-") ((post . "/"))))
+
+(defun feebleline-default-settings-on ()
+ "Some default settings that works well with feebleline."
+ (setq window-divider-default-bottom-width 1
+ window-divider-default-places (quote bottom-only))
+ (window-divider-mode t)
+ (setq-default mode-line-format nil)
+ (setq mode-line-format nil))
+
+(defun feebleline-legacy-settings-on ()
+ "Some default settings for EMACS < 25."
+ (set-face-attribute 'mode-line nil :height 0.1))
(defun feebleline--insert ()
"Insert stuff into the mini buffer."
- (let ((tmp-string ""))
- (dolist (idx feebleline-msg-functions)
- (let ((string-func (car idx) )
- (props (cadr idx)))
- (let ((string-face (cdr (assoc 'face props)))
- (pre (cdr (assoc 'pre props)))
- (post (cdr (assoc 'post props)))
- )
- (unless string-face (setq string-face 'feebleline-default-face))
- (unless post (setq post " "))
- ;; todo: format string as a variable?
- (setq
- tmp-string
- (concat tmp-string (propertize
- (concat pre
- (apply string-func nil)
- post)
- 'face string-face))))))
- (with-current-buffer " *Minibuf-0*"
- (erase-buffer)
- (insert tmp-string))))
+ (unless (current-message)
+ (let ((tmp-string ""))
+ (dolist (idx feebleline-msg-functions)
+ (let ((string-func (car idx))
+ (props (cadr idx)))
+ (let ((msg (apply string-func nil))
+ (string-face (cdr (assoc 'face props)))
+ (pre (cdr (assoc 'pre props)))
+ (post (cdr (assoc 'post props)))
+ (fmt (cdr (assoc 'fmt props)))
+ ;; (ral (cdr (assoc 'ral props)))
+ )
+ (when msg
+ (unless string-face (setq string-face 'feebleline-default-face))
+ (unless post (setq post " "))
+ (unless fmt (setq fmt "%s"))
+ ;; (when ral
+ ;; (setq fmt ))
+ (setq tmp-string
+ (concat
+ tmp-string
+ (propertize
+ (concat pre (format fmt msg) post)
+ 'face string-face)))))))
+ (with-current-buffer " *Minibuf-0*"
+ (erase-buffer)
+ (insert tmp-string)))))
-(defvar feebleline--new-timer)
-(setq feebleline--new-timer (run-with-timer 0 1 'feebleline--insert))
+(defun feebleline--clear-echo-area ()
+ "Erase echo area."
+ (with-current-buffer " *Minibuf-0*"
+ (erase-buffer))
+ )
+;;;###autoload
+(define-minor-mode feebleline-mode
+ "Replace modeline with a slimmer proxy."
+ :require 'feebleline
+ :global t
+ (if feebleline-mode
+ ;; Activation:
+ (progn
+ (setq feebleline--home-dir (expand-file-name "~"))
+ (setq feebleline/mode-line-format-previous mode-line-format)
+ (setq feebleline--new-timer (run-with-timer 0 feebleline-timer-interval 'feebleline--insert))
+ (if feebleline-use-legacy-settings (feebleline-legacy-settings-on)
+ (feebleline-default-settings-on))
+ (add-hook 'focus-in-hook 'feebleline-mode-line-proxy-fn)
+ )
+ ;; Deactivation:
+ (set-face-attribute 'mode-line nil :height 1.0)
+ (setq-default mode-line-format feebleline/mode-line-format-previous)
+ (setq mode-line-format feebleline/mode-line-format-previous)
+ (cancel-timer feebleline--new-timer)
+ (remove-hook 'focus-in-hook 'feebleline-mode-line-proxy-fn)
+ (force-mode-line-update)
+ (redraw-display)
+ (feebleline--clear-echo-area)))