Created
May 31, 2018 04:03
-
-
Save alphapapa/2489bf6e06b8a004b077b43df1e92cdb to your computer and use it in GitHub Desktop.
Custom Helm find-files command
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(defun ap/helm-find-files () | |
(interactive) | |
(helm :sources '(ap/helm-source-ivy-views | |
ap/helm-source-current-file-other-buffers | |
helm-source-buffers-list | |
ap/helm-source-files-in-current-dir | |
helm-source-org-recent-headings | |
helm-source-bookmarks | |
ap/helm-source-recentf | |
ap/helm-source-bindir | |
ap/helm-source-projectile-files-list))) | |
(defvar ap/helm-source-current-file-other-buffers | |
(helm-build-sync-source " Current file's other buffers" | |
:action #'switch-to-buffer | |
:candidates (lambda () | |
(mapcar 'buffer-name | |
(-when-let (indirect-buffers (ap/current-file-indirect-buffers helm-current-buffer)) | |
(-when-let (base-buffer (buffer-base-buffer helm-current-buffer)) | |
;; Add the base buffer if current buffer is indirect | |
(push base-buffer indirect-buffers)) | |
;; Remove current-buffer from list | |
(--remove (eq it helm-current-buffer) indirect-buffers)))))) | |
(defun ap/current-file-indirect-buffers (&optional buffer) | |
"Return list of indirect buffers backed by BUFFER's file. | |
If BUFFER is nil, the current buffer is used." | |
(let ((buffer (or buffer (current-buffer)))) | |
(ap/indirect-buffers-for-base-buffer (or (buffer-base-buffer buffer) | |
buffer)))) | |
(defvar ap/helm-source-files-in-current-dir | |
(helm-make-source " Files in current directory" 'helm-files-in-current-dir-source | |
:candidate-number-limit 10)) | |
(defvar ap/helm-source-recentf | |
(helm-make-source "Recentf" 'helm-recentf-source | |
:candidate-number-limit 10) | |
"My version of `helm-source-recentf'.") | |
(defvar ap/helm-source-bindir | |
`((name . "~/.bin") | |
(candidates . ,(lambda () | |
(ap/directory-files-memoized "~/.bin" t directory-files-no-dot-files-regexp))) | |
(action . ,(lambda (x) | |
(find-file x))) | |
(candidate-number-limit . 10))) | |
(require 'memoize) | |
(defalias 'ap/directory-files-memoized | |
(memoize (symbol-function 'directory-files) "1 minute")) | |
(defvar ap/helm-source-projectile-files-list | |
;; Copied from helm-source-projectile-files-list | |
(helm-build-sync-source "Projectile files" | |
:candidates (lambda () | |
(ignore-errors | |
(ap/expand-projectile-project-files-memoized (projectile-project-root)))) | |
:fuzzy-match helm-projectile-fuzzy-match | |
:keymap helm-projectile-find-file-map | |
:help-message 'helm-ff-help-message | |
:mode-line helm-read-file-name-mode-line-string | |
:action helm-projectile-file-actions | |
:persistent-action #'helm-projectile-file-persistent-action | |
:persistent-help "Preview file" | |
:candidate-number-limit 10) | |
"Helm source definition for Projectile files.") | |
(defalias 'ap/expand-projectile-project-files-memoized | |
(memoize (symbol-function 'ap/expand-projectile-project-files) "5 minutes")) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment