diff options
-rw-r--r-- | init.el | 14 | ||||
-rw-r--r-- | lisp/+Info.el | 67 | ||||
-rw-r--r-- | lisp/+modeline.el | 68 |
3 files changed, 116 insertions, 33 deletions
diff --git a/init.el b/init.el index 8b1c43e..61b2858 100644 --- a/init.el +++ b/init.el | |||
@@ -429,6 +429,8 @@ | |||
429 | (add-to-list 'Info-additional-directory-list dir)) | 429 | (add-to-list 'Info-additional-directory-list dir)) |
430 | (:with-mode Info-mode ; -_- | 430 | (:with-mode Info-mode ; -_- |
431 | (:hook #'reading-mode) | 431 | (:hook #'reading-mode) |
432 | (:local-set +modeline-buffer-position #'+Info-modeline-breadcrumbs | ||
433 | +modeline-position-function #'ignore) | ||
432 | (:bind "c" #'+Info-copy-current-node-name | 434 | (:bind "c" #'+Info-copy-current-node-name |
433 | "w" #'+Info-copy-current-node-name))) | 435 | "w" #'+Info-copy-current-node-name))) |
434 | 436 | ||
@@ -1712,6 +1714,8 @@ | |||
1712 | (setup (:straight info+) | 1714 | (setup (:straight info+) |
1713 | (:load-after info) | 1715 | (:load-after info) |
1714 | (:option Info-fontify-isolated-quote-flag nil | 1716 | (:option Info-fontify-isolated-quote-flag nil |
1717 | Info-breadcrumbs-in-mode-line-mode nil | ||
1718 | Info-fontify-emphasis-flag nil | ||
1715 | Info-fontify-quotations nil | 1719 | Info-fontify-quotations nil |
1716 | Info-saved-history-file (.etc "info-history")) | 1720 | Info-saved-history-file (.etc "info-history")) |
1717 | (add-hook 'Info-mode-hook #'Info-variable-pitch-text-mode)) | 1721 | (add-hook 'Info-mode-hook #'Info-variable-pitch-text-mode)) |
@@ -1802,6 +1806,7 @@ | |||
1802 | (cond | 1806 | (cond |
1803 | ((string-match-p "hmm@" (buffer-name)) | 1807 | ((string-match-p "hmm@" (buffer-name)) |
1804 | "🤔 "))) | 1808 | "🤔 "))) |
1809 | file-percentage-mode nil | ||
1805 | wrap-prefix (make-string +jabber-ws-prefix ?\ ))) | 1810 | wrap-prefix (make-string +jabber-ws-prefix ?\ ))) |
1806 | (:+leader "C-j" jabber-global-keymap) | 1811 | (:+leader "C-j" jabber-global-keymap) |
1807 | (advice-add 'jabber-activity-add :after #'+jabber-tracking-add) | 1812 | (advice-add 'jabber-activity-add :after #'+jabber-tracking-add) |
@@ -2173,7 +2178,7 @@ | |||
2173 | (readonly . "=") | 2178 | (readonly . "=") |
2174 | (modified . "+") | 2179 | (modified . "+") |
2175 | (t . "-")) | 2180 | (t . "-")) |
2176 | +modeline-minions-icon ";" | 2181 | +modeline-minions-icon "&" |
2177 | +modeline-buffer-name-max-length 0.35) | 2182 | +modeline-buffer-name-max-length 0.35) |
2178 | ;; Segments | 2183 | ;; Segments |
2179 | (:option simple-modeline-segments | 2184 | (:option simple-modeline-segments |
@@ -2182,9 +2187,6 @@ | |||
2182 | +modeline-modified | 2187 | +modeline-modified |
2183 | +modeline-buffer-name | 2188 | +modeline-buffer-name |
2184 | (lambda () (+modeline-vc " : ")) | 2189 | (lambda () (+modeline-vc " : ")) |
2185 | ,(+modeline-concat | ||
2186 | '(+modeline-minions | ||
2187 | +modeline-major-mode)) | ||
2188 | +modeline-anzu | 2190 | +modeline-anzu |
2189 | ) | 2191 | ) |
2190 | ( ; right | 2192 | ( ; right |
@@ -2203,6 +2205,10 @@ | |||
2203 | ",") | 2205 | ",") |
2204 | +modeline-input-method | 2206 | +modeline-input-method |
2205 | +modeline-position | 2207 | +modeline-position |
2208 | ,(+modeline-concat | ||
2209 | '(+modeline-minions | ||
2210 | +modeline-major-mode)) | ||
2211 | +modeline-file-percentage | ||
2206 | ))) | 2212 | ))) |
2207 | (simple-modeline-mode +1)) | 2213 | (simple-modeline-mode +1)) |
2208 | 2214 | ||
diff --git a/lisp/+Info.el b/lisp/+Info.el index a3c2fcd..46bd5f8 100644 --- a/lisp/+Info.el +++ b/lisp/+Info.el | |||
@@ -13,5 +13,72 @@ arg reversed." | |||
13 | (interactive "P" Info-mode) | 13 | (interactive "P" Info-mode) |
14 | (Info-copy-current-node-name (unless arg 0))) | 14 | (Info-copy-current-node-name (unless arg 0))) |
15 | 15 | ||
16 | (defun +Info-modeline-breadcrumbs () | ||
17 | (let ((nodes (Info-toc-nodes Info-current-file)) | ||
18 | (node Info-current-node) | ||
19 | (crumbs ()) | ||
20 | (depth Info-breadcrumbs-depth-internal) | ||
21 | (text "")) | ||
22 | ;; Get ancestors from the cached parent-children node info | ||
23 | (while (and (not (equal "Top" node)) (> depth 0)) | ||
24 | (setq node (nth 1 (assoc node nodes))) | ||
25 | (when node (push node crumbs)) | ||
26 | (setq depth (1- depth))) | ||
27 | ;; Add bottom node. | ||
28 | (setq crumbs (nconc crumbs (list Info-current-node))) | ||
29 | (when crumbs | ||
30 | ;; Add top node (and continuation if needed). | ||
31 | (setq crumbs (cons "Top" (if (member (pop crumbs) '(nil "Top")) | ||
32 | crumbs | ||
33 | (cons nil crumbs)))) | ||
34 | (dolist (node crumbs) | ||
35 | (let ((crumbs-map (make-sparse-keymap)) | ||
36 | (menu-map (make-sparse-keymap "Breadcrumbs in Mode Line"))) | ||
37 | (define-key crumbs-map [mode-line mouse-3] menu-map) | ||
38 | (when node | ||
39 | (define-key menu-map [Info-prev] | ||
40 | `(menu-item "Previous Node" Info-prev | ||
41 | :visible ,(Info-check-pointer "prev[ious]*") :help "Go to the previous node")) | ||
42 | (define-key menu-map [Info-next] | ||
43 | `(menu-item "Next Node" Info-next | ||
44 | :visible ,(Info-check-pointer "next") :help "Go to the next node")) | ||
45 | (define-key menu-map [separator] '("--")) | ||
46 | (define-key menu-map [Info-breadcrumbs-in-mode-line-mode] | ||
47 | `(menu-item "Toggle Breadcrumbs" Info-breadcrumbs-in-mode-line-mode | ||
48 | :help "Toggle displaying breadcrumbs in the Info mode-line" | ||
49 | :button (:toggle . Info-breadcrumbs-in-mode-line-mode))) | ||
50 | (define-key menu-map [Info-set-breadcrumbs-depth] | ||
51 | `(menu-item "Set Breadcrumbs Depth" Info-set-breadcrumbs-depth | ||
52 | :help "Set depth of breadcrumbs to show in the mode-line")) | ||
53 | (setq node (if (equal node Info-current-node) | ||
54 | (propertize | ||
55 | (replace-regexp-in-string "%" "%%" Info-current-node) | ||
56 | 'face 'mode-line-buffer-id | ||
57 | 'help-echo "mouse-1: Scroll back, mouse-2: Scroll forward, mouse-3: Menu" | ||
58 | 'mouse-face 'mode-line-highlight | ||
59 | 'local-map | ||
60 | (progn | ||
61 | (define-key crumbs-map [mode-line mouse-1] 'Info-mouse-scroll-down) | ||
62 | (define-key crumbs-map [mode-line mouse-2] 'Info-mouse-scroll-up) | ||
63 | crumbs-map)) | ||
64 | (propertize | ||
65 | node | ||
66 | 'local-map (progn (define-key crumbs-map [mode-line mouse-1] | ||
67 | `(lambda () (interactive) (Info-goto-node ,node))) | ||
68 | (define-key crumbs-map [mode-line mouse-2] | ||
69 | `(lambda () (interactive) (Info-goto-node ,node))) | ||
70 | crumbs-map) | ||
71 | 'mouse-face 'mode-line-highlight | ||
72 | 'help-echo "mouse-1, mouse-2: Go to this node; mouse-3: Menu"))))) | ||
73 | (let ((nodetext (if (not (equal node "Top")) | ||
74 | node | ||
75 | (concat (format "(%s)" (if (stringp Info-current-file) | ||
76 | (file-name-nondirectory Info-current-file) | ||
77 | ;; Some legacy code can still use a symbol. | ||
78 | Info-current-file)) | ||
79 | node)))) | ||
80 | (setq text (concat text (if (equal node "Top") "" " > ") (if node nodetext "..."))))) | ||
81 | text))) | ||
82 | |||
16 | (provide '+Info) | 83 | (provide '+Info) |
17 | ;;; +Info.el ends here | 84 | ;;; +Info.el ends here |
diff --git a/lisp/+modeline.el b/lisp/+modeline.el index 3a922e3..e5b5bc6 100644 --- a/lisp/+modeline.el +++ b/lisp/+modeline.el | |||
@@ -72,26 +72,34 @@ and appended with `truncate-string-ellipsis'." | |||
72 | (natnum :tag "Number of characters") | 72 | (natnum :tag "Number of characters") |
73 | (float :tag "Fraction of window's width"))) | 73 | (float :tag "Fraction of window's width"))) |
74 | 74 | ||
75 | (defcustom +modeline-buffer-position nil | ||
76 | "What to put in the `+modeline-buffer-name' position." | ||
77 | :type 'function | ||
78 | :local t) | ||
79 | |||
75 | (defun +modeline-buffer-name (&optional spacer) ; gonsie | 80 | (defun +modeline-buffer-name (&optional spacer) ; gonsie |
76 | "Display the buffer name." | 81 | "Display the buffer name." |
77 | (let ((bufname (string-trim (string-replace "%" "" (buffer-name))))) | 82 | (let ((bufname (string-trim (string-replace "%" "" (buffer-name))))) |
78 | (concat (or spacer +modeline-default-spacer) | 83 | (concat (or spacer +modeline-default-spacer) |
79 | (propertize (cond | 84 | (if (and +modeline-buffer-position (fboundp +modeline-buffer-position)) |
80 | ((ignore-errors | 85 | (funcall +modeline-buffer-position) |
81 | (and (> +modeline-buffer-name-max-length 0) | 86 | (propertize (cond |
82 | (< +modeline-buffer-name-max-length 1))) | 87 | ((ignore-errors |
83 | (truncate-string-to-width bufname | 88 | (and (> +modeline-buffer-name-max-length 0) |
84 | (* (window-total-width) +modeline-buffer-name-max-length) | 89 | (< +modeline-buffer-name-max-length 1))) |
85 | nil nil t)) | 90 | (truncate-string-to-width bufname |
86 | ((ignore-errors | 91 | (* (window-total-width) |
87 | (> +modeline-buffer-name-max-length 1)) | 92 | +modeline-buffer-name-max-length) |
88 | (truncate-string-to-width bufname | 93 | nil nil t)) |
89 | +modeline-buffer-name-max-length | 94 | ((ignore-errors |
90 | nil nil t)) | 95 | (> +modeline-buffer-name-max-length 1)) |
91 | (t bufname)) | 96 | (truncate-string-to-width bufname |
92 | 'help-echo (or (buffer-file-name) | 97 | +modeline-buffer-name-max-length |
93 | (buffer-name)) | 98 | nil nil t)) |
94 | 'mouse-face 'mode-line-highlight)))) | 99 | (t bufname)) |
100 | 'help-echo (or (buffer-file-name) | ||
101 | (buffer-name)) | ||
102 | 'mouse-face 'mode-line-highlight))))) | ||
95 | 103 | ||
96 | (defcustom +modeline-minions-icon "&" | 104 | (defcustom +modeline-minions-icon "&" |
97 | "The \"icon\" for `+modeline-minions' button." | 105 | "The \"icon\" for `+modeline-minions' button." |
@@ -152,17 +160,17 @@ The order of elements matters: whichever one matches first is applied." | |||
152 | (defun +modeline-modified (&optional spacer) ; modified from `simple-modeline-status-modified' | 160 | (defun +modeline-modified (&optional spacer) ; modified from `simple-modeline-status-modified' |
153 | "Display a color-coded \"icon\" indicator for the buffer's status." | 161 | "Display a color-coded \"icon\" indicator for the buffer's status." |
154 | (let* ((icon (catch :icon | 162 | (let* ((icon (catch :icon |
155 | (dolist (cell +modeline-modified-icon-alist) | 163 | (dolist (cell +modeline-modified-icon-alist) |
156 | (when (pcase (car cell) | 164 | (when (pcase (car cell) |
157 | ('ephemeral (not (buffer-file-name))) | 165 | ('ephemeral (not (buffer-file-name))) |
158 | ('readonly buffer-read-only) | 166 | ('readonly buffer-read-only) |
159 | ('modified (buffer-modified-p)) | 167 | ('modified (buffer-modified-p)) |
160 | ('special | 168 | ('special |
161 | (apply 'derived-mode-p | 169 | (apply 'derived-mode-p |
162 | +modeline-modified-icon-special-modes)) | 170 | +modeline-modified-icon-special-modes)) |
163 | ('t t) | 171 | ('t t) |
164 | (_ nil)) | 172 | (_ nil)) |
165 | (throw :icon cell)))))) | 173 | (throw :icon cell)))))) |
166 | (concat (or spacer +modeline-default-spacer) | 174 | (concat (or spacer +modeline-default-spacer) |
167 | (propertize (or (cdr-safe icon) "") | 175 | (propertize (or (cdr-safe icon) "") |
168 | 'help-echo (format "Buffer \"%s\" is %s." | 176 | 'help-echo (format "Buffer \"%s\" is %s." |
@@ -244,7 +252,8 @@ The order of elements matters: whichever one matches first is applied." | |||
244 | perc | 252 | perc |
245 | (unless (seq-some (lambda (s) (string= perc s)) | 253 | (unless (seq-some (lambda (s) (string= perc s)) |
246 | '("Top" "Bot" "All")) | 254 | '("Top" "Bot" "All")) |
247 | "%%%%"))))) | 255 | "%%%%") |
256 | " ")))) | ||
248 | 257 | ||
249 | (defun +modeline-file-percentage-icon (&optional spacer) | 258 | (defun +modeline-file-percentage-icon (&optional spacer) |
250 | "Display the position in the current file as an icon." | 259 | "Display the position in the current file as an icon." |
@@ -312,7 +321,8 @@ to a function in the current buffer, call that function instead." | |||
312 | +modeline-position-function | 321 | +modeline-position-function |
313 | (+modeline-concat '(+modeline-region | 322 | (+modeline-concat '(+modeline-region |
314 | +modeline-line-column | 323 | +modeline-line-column |
315 | +modeline-file-percentage))))) | 324 | ;; +modeline-file-percentage |
325 | ))))) | ||
316 | 326 | ||
317 | (defun +modeline-vc (&optional spacer) | 327 | (defun +modeline-vc (&optional spacer) |
318 | "Display the version control branch of the current buffer in the modeline." | 328 | "Display the version control branch of the current buffer in the modeline." |