mirror of
http://github.com/JaeUs3792/dotfiles
synced 2025-12-13 23:51:34 +09:00
89 lines
4.3 KiB
EmacsLisp
89 lines
4.3 KiB
EmacsLisp
;;; init-bookmark.el -*- lexical-binding: t -*-
|
|
;; Bookmark
|
|
(use-package bookmark
|
|
:ensure nil ; emacs built-in
|
|
:config
|
|
(with-no-warnings
|
|
;; Display icons for bookmarks
|
|
(defun my-bookmark-bmenu--revert ()
|
|
"Re-populate `tabulated-list-entries'."
|
|
(let (entries)
|
|
(dolist (full-record (bookmark-maybe-sort-alist))
|
|
(let* ((name (bookmark-name-from-full-record full-record))
|
|
(annotation (bookmark-get-annotation full-record))
|
|
(location (bookmark-location full-record))
|
|
(file (file-name-nondirectory location))
|
|
(type (let ((fmt "%-8.8s"))
|
|
(cond ((null location)
|
|
(propertize (format fmt "NOFILE") 'face 'warning))
|
|
((file-remote-p location)
|
|
(propertize (format fmt "REMOTE") 'face 'mode-line-buffer-id))
|
|
((not (file-exists-p location))
|
|
(propertize (format fmt "NOTFOUND") 'face 'error))
|
|
((file-directory-p location)
|
|
(propertize (format fmt "DIRED") 'face 'warning))
|
|
(t (propertize (format fmt "FILE") 'face 'success)))))
|
|
(icon (if (icons-displayable-p)
|
|
(cond
|
|
((file-remote-p location)
|
|
(nerd-icons-codicon "nf-cod-radio_tower"))
|
|
((file-directory-p location)
|
|
(nerd-icons-icon-for-dir location))
|
|
((not (string-empty-p file))
|
|
(nerd-icons-icon-for-file file)))
|
|
"")))
|
|
(push (list
|
|
full-record
|
|
`[,(if (and annotation (not (string-equal annotation "")))
|
|
"*" "")
|
|
,icon
|
|
,(if (display-mouse-p)
|
|
(propertize name
|
|
'font-lock-face 'bookmark-menu-bookmark
|
|
'mouse-face 'highlight
|
|
'follow-link t
|
|
'help-echo "mouse-2: go to this bookmark in other window")
|
|
name)
|
|
,type
|
|
,@(if bookmark-bmenu-toggle-filenames
|
|
(list (propertize location 'face 'completions-annotations)))])
|
|
entries)))
|
|
(tabulated-list-init-header)
|
|
(setq tabulated-list-entries entries))
|
|
(tabulated-list-print t))
|
|
(advice-add #'bookmark-bmenu--revert :override #'my-bookmark-bmenu--revert)
|
|
|
|
(defun my-bookmark-bmenu-list ()
|
|
"Display a list of existing bookmarks.
|
|
The list is displayed in a buffer named `*Bookmark List*'.
|
|
The leftmost column displays a D if the bookmark is flagged for
|
|
deletion, or > if it is flagged for displaying."
|
|
(interactive)
|
|
(bookmark-maybe-load-default-file)
|
|
(let ((buf (get-buffer-create bookmark-bmenu-buffer)))
|
|
(if (called-interactively-p 'interactive)
|
|
(pop-to-buffer buf)
|
|
(set-buffer buf)))
|
|
(bookmark-bmenu-mode)
|
|
(bookmark-bmenu--revert))
|
|
(advice-add #'bookmark-bmenu-list :override #'my-bookmark-bmenu-list)
|
|
|
|
(define-derived-mode bookmark-bmenu-mode tabulated-list-mode "Bookmark Menu"
|
|
(setq truncate-lines t)
|
|
(setq buffer-read-only t)
|
|
(setq tabulated-list-format
|
|
`[("" 1) ;; Space to add "*" for bookmark with annotation
|
|
("" ,(if (icons-displayable-p) 2 0)) ;; Icons
|
|
("Bookmark" ,bookmark-bmenu-file-column bookmark-bmenu--name-predicate)
|
|
("Type" 9)
|
|
,@(if bookmark-bmenu-toggle-filenames
|
|
'(("File" 0 bookmark-bmenu--file-predicate)))])
|
|
(setq tabulated-list-padding bookmark-bmenu-marks-width)
|
|
(setq tabulated-list-sort-key '("Bookmark" . nil))
|
|
(add-hook 'tabulated-list-revert-hook #'bookmark-bmenu--revert nil t)'
|
|
(setq revert-buffer-function #'bookmark-bmenu--revert)
|
|
(tabulated-list-init-header))))
|
|
(provide 'init-bookmark)
|
|
|
|
;;; init.el ends here
|