Custom Helm find-files command
| (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