99 lines
3.4 KiB
EmacsLisp
99 lines
3.4 KiB
EmacsLisp
;;; bookmarks.el --- Bookmarks in Emacs -*- lexical-binding: t; -*-
|
|
;;; Commentary:
|
|
;;; Code:
|
|
;;; Doc: https://www.emacswiki.org/emacs/VisibleBookmarks
|
|
|
|
(defconst *visible-bookmarks-data-file* (path-join *user-data-directory*
|
|
"visible-bookmarks"))
|
|
(defconst *bookmark+-data-file* (path-join *user-data-directory* "bookmarks"))
|
|
(defconst *bookmark+-menu-state-file* (path-join *user-cache-directory*
|
|
"bookmark-menu-state.el"))
|
|
|
|
(defun bookmark--local-directory-bookmarks-to-zsh ()
|
|
"Store Emacs bookmarks in ZSH bookmarks file."
|
|
(interactive)
|
|
(when (and (require 'tramp nil t)
|
|
(require 'bookmark nil t))
|
|
(set-buffer (find-file-noselect "~/.zsh_bookmarks" t t))
|
|
(delete-region (point-min) (point-max))
|
|
(insert "# -*- mode:sh -*-\n")
|
|
(let (collect-names)
|
|
(mapc (lambda (item)
|
|
(let ((name (replace-regexp-in-string "-" "_" (car item)))
|
|
(file (cdr (assoc 'filename
|
|
(if (cddr item) item (cadr item))))))
|
|
(when (and (not (tramp-tramp-file-p file))
|
|
(file-directory-p file))
|
|
(setq collect-names (cons (concat "~" name) collect-names))
|
|
(insert (format "%s=\"%s\"\n" name (expand-file-name file))))))
|
|
bookmark-alist)
|
|
(insert ": " (mapconcat 'identity collect-names " ") "\n"))
|
|
(let ((backup-inhibited t)) (save-buffer))
|
|
(kill-buffer (current-buffer))))
|
|
|
|
|
|
(use-package bm
|
|
:defer
|
|
:init
|
|
(user/bind-key-global :code :bookmark-toggle 'bm-toggle)
|
|
(user/bind-key-global :code :bookmark-next 'bm-next)
|
|
(user/bind-key-global :code :bookmark-prev 'bm-previous)
|
|
:config
|
|
(validate-setq
|
|
;; Persistent bookmarks.
|
|
bm-repository-file *visible-bookmarks-data-file*
|
|
bm-buffer-persistence t)
|
|
|
|
;; Restore bookmarks on file find.
|
|
(add-hook 'find-file-hooks 'bm-buffer-restore)
|
|
;; Save bookmarks when killing buffer.
|
|
(add-hook 'kill-buffer-hook 'bm-buffer-save)
|
|
;; Save all bookmarks on exit.
|
|
(add-hook 'kill-emacs-hook 'bm-save)
|
|
;; Update repository when saving file.
|
|
(add-hook 'after-save-hook 'bm-buffer-save)
|
|
;; Restore bookmarks when buffer is reverted.
|
|
(add-hook 'after-revert-hook 'bm-buffer-restore))
|
|
|
|
(use-package bookmark
|
|
:disabled
|
|
:defer
|
|
:init
|
|
;; Bind bookmarks to C-c b
|
|
(global-set-key (user/get-key :code :bookmark-prefix) 'bookmark-map)
|
|
:config
|
|
(validate-setq
|
|
;; Enable versioned backups.
|
|
bookmark-version-control t
|
|
bookmark-save-flag 1
|
|
;; Put the repository in the data directory.
|
|
bookmark-default-file *bookmark+-data-file*)
|
|
|
|
;; Share Emacs directory bookmarks with ZSH.
|
|
(defadvice bookmark-write-file
|
|
(after local-directory-bookmarks-to-zsh-advice activate)
|
|
(bookmark--local-directory-bookmarks-to-zsh))
|
|
|
|
(use-package bookmark+
|
|
:disabled
|
|
:config
|
|
(validate-setq
|
|
;; Save bookmarks after ten updates.
|
|
bmkp-count-multi-mods-as-one-flag t)
|
|
|
|
;;; (Bindings) ;;;
|
|
(define-key bookmark-map (kbd "l") 'bookmark-jump)
|
|
(define-key bookmark-map (kbd "e") 'bmkp-edit-bookmark-record)
|
|
(define-key bookmark-map (kbd "t") 'bmkp-add-tags)
|
|
|
|
(use-package bookmark+-bmu
|
|
:ensure bookmark+
|
|
:config
|
|
(validate-setq
|
|
;; Put the menu state in the cache directory.
|
|
bmkp-bmenu-state-file *bookmark+-menu-state-file*))))
|
|
|
|
|
|
(provide 'utilities/bookmarks)
|
|
;;; bookmarks.el ends here
|