|
|
@@ -2120,35 +2120,40 @@ initializing." |
|
|
|
(bname (format "*GitWorktree<%s>*" name))) |
|
|
|
(with-current-buffer (get-buffer-create bname) |
|
|
|
(cd root) |
|
|
|
(let ((trees (git-worktree-get-current-trees))) |
|
|
|
(setq tabulated-list-entries |
|
|
|
(mapcar (lambda (e) |
|
|
|
(list e |
|
|
|
(vector |
|
|
|
(concat (file-relative-name (plist-get e :worktree)) |
|
|
|
"/") |
|
|
|
(or (plist-get e :branch) "") |
|
|
|
(plist-get e :head) |
|
|
|
))) |
|
|
|
trees)) |
|
|
|
(let ((branch-max-size |
|
|
|
(apply 'max |
|
|
|
(cl-loop for e in tabulated-list-entries |
|
|
|
collect (length (elt (cadr e) 1))))) |
|
|
|
(worktree-max-size |
|
|
|
(apply 'max |
|
|
|
(length "Worktree") |
|
|
|
(cl-loop for e in tabulated-list-entries |
|
|
|
collect (length (elt (cadr e) 0)))))) |
|
|
|
(setq tabulated-list-format |
|
|
|
`[ |
|
|
|
("Worktree" ,worktree-max-size t) |
|
|
|
("Branch" ,branch-max-size t) |
|
|
|
("Head" -1 t) |
|
|
|
]))) |
|
|
|
(git-worktree--set-tabulated-list-mmode-variables) |
|
|
|
(git-worktree-mode) |
|
|
|
(current-buffer)))) |
|
|
|
;; ((:worktree "/Users/10sr/.dotfiles" :head "5e7457a8d49ef6a517cdf39d038ba5fdf98dc68e" :branch "refs/heads/master") (:worktree "/Users/10sr/.dotfiles/b1" :head "fa7d868076d807692e35f82ae23596c903fd1117" :branch "refs/heads/b1")) |
|
|
|
|
|
|
|
(defun git-worktree--set-tabulated-list-mmode-variables () |
|
|
|
"Set variables for `tabulated-list-mode'." |
|
|
|
(let ((trees (git-worktree-get-current-trees))) |
|
|
|
(setq tabulated-list-entries |
|
|
|
(mapcar (lambda (e) |
|
|
|
(list e |
|
|
|
(vector |
|
|
|
(concat (file-relative-name (plist-get e :worktree)) |
|
|
|
"/") |
|
|
|
(or (plist-get e :branch) "") |
|
|
|
(plist-get e :head) |
|
|
|
))) |
|
|
|
trees)) |
|
|
|
(let ((branch-max-size |
|
|
|
(apply 'max |
|
|
|
(cl-loop for e in tabulated-list-entries |
|
|
|
collect (length (elt (cadr e) 1))))) |
|
|
|
(worktree-max-size |
|
|
|
(apply 'max |
|
|
|
(length "Worktree") |
|
|
|
(cl-loop for e in tabulated-list-entries |
|
|
|
collect (length (elt (cadr e) 0)))))) |
|
|
|
(setq tabulated-list-format |
|
|
|
`[ |
|
|
|
("Worktree" ,worktree-max-size t) |
|
|
|
("Branch" ,branch-max-size t) |
|
|
|
("Head" -1 t) |
|
|
|
])))) |
|
|
|
|
|
|
|
(defun git-worktree-open (&optional directory) |
|
|
|
"Open git worktree list buffer. |
|
|
|
|
|
|
@@ -2198,8 +2203,10 @@ initializing." |
|
|
|
(define-derived-mode git-worktree-mode tabulated-list-mode "Git-Worktrees" |
|
|
|
"Major mode for browsing recently opened files and directories." |
|
|
|
(setq tabulated-list-padding 2) |
|
|
|
;; TODO: Implement revert |
|
|
|
;; (add-hook 'tabulated-list-revert-hook 'git-worktree-mode-reload nil t) |
|
|
|
(add-hook 'tabulated-list-revert-hook |
|
|
|
'git-worktree--set-tabulated-list-mmode-variables |
|
|
|
nil |
|
|
|
t) |
|
|
|
(tabulated-list-init-header) |
|
|
|
(tabulated-list-print nil nil)) |
|
|
|
|
|
|
|