Skip to content

Commit 9be5dec

Browse files
committed
feat: Customize modeline that works with centaur-tabs
1 parent 74f93a3 commit 9be5dec

File tree

1 file changed

+58
-36
lines changed

1 file changed

+58
-36
lines changed

jcs-modeline.el

Lines changed: 58 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,10 @@
4747

4848
(defcustom jcs-modeline-left
4949
`((:eval (jcs-modeline--render-front-spaces))
50-
(:eval (jcs-modeline--render-buffer-identification))
5150
(:eval (jcs-modeline--render-modes))
52-
(:eval (jcs-modeline--render-vc-project))
51+
(:eval (jcs-modeline--render-buffer-identification))
52+
(:eval (moody-tab (jcs-modeline--render-vc-project)))
53+
(:eval (jcs-modeline--render-read-only))
5354
(:eval mode-line-process))
5455
"List of item to render on the left."
5556
:type 'list
@@ -64,7 +65,7 @@
6465
(:eval (jcs-modeline--render-undo-tree-buffer-name))
6566
(:eval (jcs-modeline--render-undo-tree-status))
6667
(:eval (jcs-modeline--render-vc-info))
67-
(:eval (jcs-modeline--render-line-columns))
68+
(:eval (moody-tab (jcs-modeline--render-line-columns) 0 'up))
6869
(:eval (jcs-modeline--render-percent-position))
6970
(:eval (jcs-modeline--render-end-spaces)))
7071
"List of item to render on the right."
@@ -285,11 +286,8 @@ Position argument ARG0."
285286

286287
(defun jcs-modeline--render-buffer-identification ()
287288
"Render buffer identification."
288-
(concat (if buffer-read-only
289-
(or (jcs-modeline--char-displayable-p "🔒 ")
290-
"&L ")
291-
"")
292-
(jcs-modeline-format mode-line-buffer-identification)
289+
(concat (and (not (bound-and-true-p centaur-tabs-mode))
290+
(jcs-modeline-format mode-line-buffer-identification))
293291
" "))
294292

295293
;;
@@ -326,19 +324,18 @@ Position argument ARG0."
326324
mode-line-modes))))
327325
(lst (cl-remove-if #'null (list icon line-modes)))
328326
(ind (mapconcat #'identity lst " ")))
329-
(moody-tab
330-
(propertize ind
331-
'mouse-face 'mode-line-highlight
332-
'help-echo "Major and minor modes
327+
(propertize ind
328+
'mouse-face 'mode-line-highlight
329+
'help-echo "Major and minor modes
333330
mouse-1: Toggle display of major mode name"
334-
'local-map (let ((map (make-sparse-keymap)))
335-
(define-key map (vector 'mode-line 'mouse-1)
336-
(lambda (&rest _)
337-
(interactive)
338-
(setq jcs-modeline-show-mode-name
339-
(not jcs-modeline-show-mode-name))
340-
(force-mode-line-update t)))
341-
map)))))
331+
'local-map (let ((map (make-sparse-keymap)))
332+
(define-key map (vector 'mode-line 'mouse-1)
333+
(lambda (&rest _)
334+
(interactive)
335+
(setq jcs-modeline-show-mode-name
336+
(not jcs-modeline-show-mode-name))
337+
(force-mode-line-update t)))
338+
map))))
342339

343340
;;
344341
;;; Line and Columns
@@ -364,7 +361,7 @@ mouse-1: Toggle display of major mode name"
364361
(lst (if jcs-modeline-show-point
365362
(list ind-line ind-column ind-point)
366363
(list ind-line ind-column))))
367-
(moody-tab (mapconcat #'identity lst " ") 0 'up)))
364+
(mapconcat #'identity lst " ")))
368365

369366
;;
370367
;;; Scroll
@@ -378,6 +375,11 @@ mouse-1: Toggle display of major mode name"
378375
;;
379376
;;; Project
380377

378+
(defcustom jcs-modeline-project-indicator "-*-"
379+
"String indicator when project root is not found."
380+
:type 'string
381+
:group 'jcs-modeline)
382+
381383
(defun jcs-modeline--project-root ()
382384
"Return project directory path."
383385
(when-let ((current (project-current))) (project-root current)))
@@ -389,23 +391,31 @@ mouse-1: Toggle display of major mode name"
389391

390392
(defun jcs-modeline--render-vc-project ()
391393
"Return the project name."
392-
(when-let* (((or (buffer-file-name) jcs-modeline-show-project-name-virutal-buffer))
393-
(project (jcs-modeline--project-root))
394-
(ind (file-name-nondirectory (directory-file-name project))))
395-
(concat
396-
" "
397-
(propertize ind
398-
'mouse-face 'mode-line-highlight
399-
'help-echo (format "Project Name
394+
(if-let* (((or (buffer-file-name) jcs-modeline-show-project-name-virutal-buffer))
395+
(project (jcs-modeline--project-root))
396+
(ind (file-name-nondirectory (directory-file-name project))))
397+
(concat
398+
(propertize ind
399+
'mouse-face 'mode-line-highlight
400+
'help-echo (format "Project Name
400401
path: %s
401402
mouse-1: Reveal project in folder" project)
402-
'local-map
403-
(let ((map (make-sparse-keymap)))
404-
(define-key map (vector 'mode-line 'mouse-2)
405-
(lambda (&rest _)
406-
(interactive)
407-
(reveal-in-folder-open project)))
408-
map)))))
403+
'local-map
404+
(let ((map (make-sparse-keymap)))
405+
(define-key map (vector 'mode-line 'mouse-1)
406+
(lambda (&rest _)
407+
(interactive)
408+
(reveal-in-folder-open project)))
409+
map)))
410+
(propertize jcs-modeline-project-indicator
411+
'mouse-face 'mode-line-highlight
412+
'help-echo "Project Name
413+
414+
mouse-1: Switch project"
415+
'local-map
416+
(let ((map (make-sparse-keymap)))
417+
(define-key map (vector 'mode-line 'mouse-1) #'project-switch-project)
418+
map))))
409419

410420
;;
411421
;;; Version Control
@@ -463,6 +473,18 @@ mouse-1: Reveal project in folder" project)
463473
'help-echo tip)
464474
" ")))
465475

476+
;;
477+
;;; Read-Only
478+
479+
(defun jcs-modeline--render-read-only ()
480+
"Render read-only indicator."
481+
(concat " "
482+
(if buffer-read-only
483+
(or (jcs-modeline--char-displayable-p "🔒")
484+
"&L")
485+
(or (jcs-modeline--char-displayable-p "🔓")
486+
"&U"))))
487+
466488
;;
467489
;;; Text Scale
468490

0 commit comments

Comments
 (0)