From 948bf699b23d3cb756a17f651a90b240facc166c Mon Sep 17 00:00:00 2001 From: Kevin Boulain Date: Sat, 6 Oct 2018 17:01:58 +0200 Subject: magit-get-current-branch may not be bound or return anything It's probably better to try to import the required packages than to check if it is bound because the user may not load magit itself. Also fallback on rev-parse to display something in case the branch isn't available (for example, detached HEAD). --- feebleline.el | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/feebleline.el b/feebleline.el index 4e2a640..e0d6f16 100644 --- a/feebleline.el +++ b/feebleline.el @@ -78,7 +78,7 @@ (defvar feebleline--msg-timer) (defvar feebleline/mode-line-format-previous) -(defface feebleline-git-branch-face '((t :foreground "#444444" :italic t)) +(defface feebleline-git-face '((t :foreground "#444444" :italic t)) "Example face for git branch." :group 'feebleline) @@ -118,6 +118,13 @@ (file-name-nondirectory (buffer-file-name)) (buffer-name))) +(defun feebleline-git-object () + "Current branch, when magit is available." + (when (and (require 'magit-git nil t) + (require 'magit-process nil t)) + (or (magit-get-current-branch) ; may return nil when not on a branch + (magit-rev-parse "--short" "HEAD")))) + (defun feebleline-file-modified-star () "Display star if buffer file was modified." (when (and (buffer-file-name) (buffer-modified-p)) "*")) @@ -139,7 +146,7 @@ (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 . feebleline-git-branch-face) (pre . " - "))) + (feebleline-git-object ((face . feebleline-git-face) (pre . " - "))) ;; (feebleline-project-name ((right-align . t))) )) -- cgit v1.2.3 From fe6abeba276d524bec972beaf838126a705f4015 Mon Sep 17 00:00:00 2001 From: Kevin Boulain Date: Sat, 6 Oct 2018 18:15:08 +0200 Subject: always return line and column numbers For example, buffer-file-name returns nothing for the scratch buffer, which is probably not what we want. --- feebleline.el | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/feebleline.el b/feebleline.el index e0d6f16..ee83bae 100644 --- a/feebleline.el +++ b/feebleline.el @@ -96,13 +96,11 @@ (defun feebleline-line-number () "Line number as string." - (if (buffer-file-name) - (format "%s" (line-number-at-pos)))) + (format "%s" (line-number-at-pos))) (defun feebleline-column-number () "Column number as string." - (if (buffer-file-name) - (format "%s" (current-column)))) + (format "%s" (current-column))) (defun feebleline-file-directory () "Current directory, if buffer is displaying a file." -- cgit v1.2.3 From 68c0255b78868fb02bb5481db1247d67df241da8 Mon Sep 17 00:00:00 2001 From: Kevin Boulain Date: Sat, 6 Oct 2018 18:12:12 +0200 Subject: use keywords instead of alist in feebleline-msg-functions So it's a bit easier to customize. --- feebleline.el | 61 +++++++++++++++++++++++++---------------------------------- 1 file changed, 26 insertions(+), 35 deletions(-) diff --git a/feebleline.el b/feebleline.el index ee83bae..928950c 100644 --- a/feebleline.el +++ b/feebleline.el @@ -49,9 +49,9 @@ ;; The elements should be functions, accepting no arguments, returning either ;; nil or a valid string. Even lambda functions work (but don't forget to quote -;; them). Optionally, you can include an alist after each function, like so: +;; them). Optionally, you can include keywords after each function, like so: -;; (feebleline-line-number ((post . "") (fmt . "%5s"))) +;; (feebleline-line-number :post "" :fmt "%5s") ;; Accepted keys are pre, post, face, fmt and right-align (last one is ;; experimental). See source code for inspiration. @@ -139,13 +139,13 @@ ;; Shortly, it's shite. (setq feebleline-msg-functions - '((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 . ""))) - (feebleline-git-object ((face . feebleline-git-face) (pre . " - "))) - ;; (feebleline-project-name ((right-align . t))) + '((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 "") + (feebleline-git-object :face feebleline-git-face :pre " - ") + ;; (feebleline-project-name :right-align t) )) (defmacro feebleline-append-msg-function (&rest b) @@ -172,37 +172,28 @@ "Some default settings for EMACS < 25." (set-face-attribute 'mode-line nil :height 0.1)) +(cl-defun feebleline--insert-func (func &key (face 'default) pre (post " ") (fmt "%s") right-align) + "Format an element of feebleline-msg-functions based on its properties." + (when right-align + (setq fmt (concat "%" + (format "%s" (- (window-width) (length tmp-string) 1)) + "s"))) + (let* ((msg (apply func nil)) + (string (concat pre (format fmt msg) post))) + (if msg + (if face + (propertize string 'face face) + string) + ""))) + (defun feebleline--insert () "Insert stuff into the mini buffer." (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))) - (right-align (cdr (assoc 'right-align props))) - ) - (when msg - (unless string-face (setq string-face 'default)) - (unless post (setq post " ")) - (unless fmt (setq fmt "%s")) - (when right-align - (setq fmt - (concat "%" - (format "%s" (- (window-width) (length tmp-string) 1)) - "s")) - ;; (message "%s" fmt) - ) - (setq tmp-string - (concat - tmp-string - (propertize - (concat pre (format fmt msg) post) - 'face string-face))))))) + (setq tmp-string + (concat tmp-string + (apply 'feebleline--insert-func idx)))) (with-current-buffer " *Minibuf-0*" (erase-buffer) (insert tmp-string))))) -- cgit v1.2.3 From b747ffc766321d3aa11dd9981c3c452bce3097cc Mon Sep 17 00:00:00 2001 From: Kevin Boulain Date: Mon, 8 Oct 2018 23:03:22 +0200 Subject: review: don't require magit User should load magit if desired. Or simply remove the function from feebleline-msg-functions. --- feebleline.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/feebleline.el b/feebleline.el index 928950c..346f829 100644 --- a/feebleline.el +++ b/feebleline.el @@ -118,8 +118,8 @@ (defun feebleline-git-object () "Current branch, when magit is available." - (when (and (require 'magit-git nil t) - (require 'magit-process nil t)) + (when (and (fboundp 'magit-get-current-branch) + (fboundp 'magit-rev-parse)) (or (magit-get-current-branch) ; may return nil when not on a branch (magit-rev-parse "--short" "HEAD")))) -- cgit v1.2.3