[Helm] Move code for ‘db/helm-shortcuts’ to different file

This keeps ‘db-utils’ require-clean.
This commit is contained in:
Daniel - 2019-08-31 11:39:04 +02:00
parent 44e6818abb
commit bbad4b7fd4
No known key found for this signature in database
GPG Key ID: 1C7071A75BB72D64
3 changed files with 82 additions and 79 deletions

44
init.el
View File

@ -530,26 +530,6 @@
(use-package dash)
(defcustom db/frequently-used-features
'(("Mail" . db/gnus)
("Agenda" . db/org-agenda)
("Init File" . db/find-user-init-file)
("EMMS" . emms)
("Shell" . shell)
("EShell" . eshell)
("scratch" . db/scratch))
"Mapping of frequently used features to functions implementing
them. Can be used in application shortcuts such as
`db/helm-shortcuts."
:group 'personal-settings
:type '(alist :key-type string :value-type sexp))
(defcustom db/important-documents-path "~/Documents/library/"
"Path to look for documents that can be listed in extended
search commands like `db/helm-shortcuts."
:group 'personal-settings
:type 'string)
(use-package db-utils
:commands (endless/fill-or-unfill
db/delete-trailing-whitespace-maybe
@ -559,7 +539,6 @@ search commands like `db/helm-shortcuts."
db/run-or-hide-shell
db/run-or-hide-eshell
db/run-or-hide-ansi-term
db/helm-shortcuts
db/hex-to-ascii
db/text-to-hex
conditionally-enable-lispy
@ -585,6 +564,29 @@ search commands like `db/helm-shortcuts."
db/org-rfc-open
db/dired-from-shell-command))
(defcustom db/frequently-used-features
'(("Mail" . db/gnus)
("Agenda" . db/org-agenda)
("Init File" . db/find-user-init-file)
("EMMS" . emms)
("Shell" . shell)
("EShell" . eshell)
("scratch" . db/scratch))
"Mapping of frequently used features to functions implementing
them. Can be used in application shortcuts such as
`db/helm-shortcuts."
:group 'personal-settings
:type '(alist :key-type string :value-type sexp))
(defcustom db/important-documents-path "~/Documents/library/"
"Path to look for documents that can be listed in extended
search commands like `db/helm-shortcuts."
:group 'personal-settings
:type 'string)
(use-package db-helm
:commands (db/helm-shortcuts))
(use-package hydra
:commands (defhydra))

59
site-lisp/db-helm.el Normal file
View File

@ -0,0 +1,59 @@
(require 'helm-files)
(require 'helm-bookmark)
(require 'helm-source)
(require 'helm)
(defvar db/helm-source-frequently-used-features
(helm-make-source "Frequently Used" 'helm-source-sync
:candidates #'db/frequently-used-features
:action '(("Open" . funcall))
:filtered-candidate-transformer #'helm-adaptive-sort) ; effect?
"Helm source for `db/helm-frequently-used-features.")
(defun db/important-documents ()
"Recursively return paths of all files found in `db/important-documents-path.
The result will be a list of cons cells, where the car is the
path relative to `db/important-documents and the cdr is the full
path."
;; code adapted from `directory-files-recursively
(let ((db/important-documents-path (expand-file-name db/important-documents-path)))
(cl-labels ((all-files-in-dir (dir)
(let ((result nil)
(files nil))
(dolist (file (sort (file-name-all-completions "" dir)
'string<))
(unless (eq ?. (aref file 0)) ; omit hidden files
(if (directory-name-p file)
(let* ((leaf (substring file 0 (1- (length file))))
(full-file (expand-file-name leaf dir)))
;; Don't follow symlinks to other directories.
(unless (file-symlink-p full-file)
(setq result
(nconc result (all-files-in-dir full-file)))))
(push (cons
(string-remove-prefix db/important-documents-path
(expand-file-name file dir))
(expand-file-name file dir))
files))))
(nconc result (nreverse files)))))
(when (file-directory-p db/important-documents-path)
(all-files-in-dir db/important-documents-path)))))
(defvar db/helm-source-important-documents
(helm-make-source "Important files" 'helm-source-sync
:candidates #'db/important-documents
:action '(("Open externally" . db/system-open)
("Find file" . find-file)))
"Helm source for important documents.")
(defun db/helm-shortcuts (arg)
"Open helm completion on common locations."
(interactive "p")
(helm :sources `(db/helm-source-frequently-used-features
,(when (and (= arg 4)
(file-directory-p db/important-documents-path))
'db/helm-source-important-documents)
helm-source-bookmarks
helm-source-bookmark-set)))
(provide 'db-helm)

View File

@ -349,45 +349,6 @@ output, separated by \\n, when called with
"\n"))))
(dired (cons "Command output" list-of-files))))
;;; helm configuration
(defvar db/helm-source-frequently-used-features
(helm-make-source "Frequently Used" 'helm-source-sync
:candidates #'db/frequently-used-features
:action '(("Open" . funcall))
:filtered-candidate-transformer #'helm-adaptive-sort)
"Helm source for `db/helm-frequently-used-features.")
(defun db/important-documents ()
"Recursively return paths of all files found in `db/important-documents-path.
The result will be a list of cons cells, where the car is the
path relative to `db/important-documents and the cdr is the full
path."
;; code adapted from `directory-files-recursively
(let ((db/important-documents-path (expand-file-name db/important-documents-path)))
(cl-labels ((all-files-in-dir (dir)
(let ((result nil)
(files nil))
(dolist (file (sort (file-name-all-completions "" dir)
'string<))
(unless (eq ?. (aref file 0)) ; omit hidden files
(if (directory-name-p file)
(let* ((leaf (substring file 0 (1- (length file))))
(full-file (expand-file-name leaf dir)))
;; Don't follow symlinks to other directories.
(unless (file-symlink-p full-file)
(setq result
(nconc result (all-files-in-dir full-file)))))
(push (cons
(string-remove-prefix db/important-documents-path
(expand-file-name file dir))
(expand-file-name file dir))
files))))
(nconc result (nreverse files)))))
(when (file-directory-p db/important-documents-path)
(all-files-in-dir db/important-documents-path)))))
(defun db/system-open (path)
"Open PATH with default program as defined by the underlying system."
(cond
@ -398,25 +359,6 @@ path."
(t
(start-process "" nil "xdg-open" path))))
(defvar db/helm-source-important-documents
(helm-make-source "Important files" 'helm-source-sync
:candidates #'db/important-documents
:action '(("Open externally" . db/system-open)
("Find file" . find-file)))
"Helm source for important documents.")
(defun db/helm-shortcuts (arg)
"Open helm completion on common locations."
(interactive "p")
(require 'helm-files)
(require 'helm-bookmark)
(helm :sources `(db/helm-source-frequently-used-features
,(when (and (= arg 4)
(file-directory-p db/important-documents-path))
'db/helm-source-important-documents)
helm-source-bookmarks
helm-source-bookmark-set)))
;;; Org Utilities