[Helm] Move code for ‘db/helm-shortcuts’ to different file
This keeps ‘db-utils’ require-clean.
This commit is contained in:
parent
44e6818abb
commit
bbad4b7fd4
44
init.el
44
init.el
|
@ -530,26 +530,6 @@
|
||||||
|
|
||||||
(use-package dash)
|
(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
|
(use-package db-utils
|
||||||
:commands (endless/fill-or-unfill
|
:commands (endless/fill-or-unfill
|
||||||
db/delete-trailing-whitespace-maybe
|
db/delete-trailing-whitespace-maybe
|
||||||
|
@ -559,7 +539,6 @@ search commands like `db/helm-shortcuts’."
|
||||||
db/run-or-hide-shell
|
db/run-or-hide-shell
|
||||||
db/run-or-hide-eshell
|
db/run-or-hide-eshell
|
||||||
db/run-or-hide-ansi-term
|
db/run-or-hide-ansi-term
|
||||||
db/helm-shortcuts
|
|
||||||
db/hex-to-ascii
|
db/hex-to-ascii
|
||||||
db/text-to-hex
|
db/text-to-hex
|
||||||
conditionally-enable-lispy
|
conditionally-enable-lispy
|
||||||
|
@ -585,6 +564,29 @@ search commands like `db/helm-shortcuts’."
|
||||||
db/org-rfc-open
|
db/org-rfc-open
|
||||||
db/dired-from-shell-command))
|
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
|
(use-package hydra
|
||||||
:commands (defhydra))
|
:commands (defhydra))
|
||||||
|
|
||||||
|
|
|
@ -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)
|
|
@ -349,45 +349,6 @@ output, separated by \\n, when called with
|
||||||
"\n"))))
|
"\n"))))
|
||||||
(dired (cons "Command output" list-of-files))))
|
(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)
|
(defun db/system-open (path)
|
||||||
"Open PATH with default program as defined by the underlying system."
|
"Open PATH with default program as defined by the underlying system."
|
||||||
(cond
|
(cond
|
||||||
|
@ -398,25 +359,6 @@ path."
|
||||||
(t
|
(t
|
||||||
(start-process "" nil "xdg-open" path))))
|
(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
|
;;; Org Utilities
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue