Created
October 23, 2019 07:28
-
-
Save Alexander-Miller/365b8c3a0fb7caf3fe2e25a89886390c to your computer and use it in GitHub Desktop.
Hydra
This file contains hidden or 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
(cl-defun treemacs--find-keybind (func &optional (pad 8)) | |
"Find the keybind for FUNC in treemacs. | |
Return of cons of the key formatted for inclusion in the hydra string, including | |
a minimum width for alignment, and the key itself for the hydra heads. | |
Prefer evil keybinds, otherwise pick the first result." | |
(-if-let (keys (where-is-internal func)) | |
(let ((key | |
(key-description | |
(-if-let (evil-keys (--first (eq 'treemacs-state (aref it 0)) keys)) | |
(--map (aref evil-keys it) (number-sequence 1 (- (length evil-keys) 1))) | |
(--map (aref (car keys) it) (number-sequence 0 (- (length (car keys)) 1))))))) | |
(setf key | |
(s-replace-all | |
'(("<return>" . "RET") | |
("<left>" . "LEFT") | |
("<right>" . "RIGHT") | |
("<up>" . "UP") | |
("<down>" . "DOWN") | |
("^" . "C-") | |
("⇢⌥" . ">O-") | |
("⌥" . "O-") | |
("⇢⌘" . ">#-") | |
("⌘" . "#-") | |
("⇧" . "S-")) | |
key)) | |
(cons (s-pad-right pad " " (format "_%s_:" key)) key)) | |
(cons (s-pad-right pad " " (format "_%s_:" " ")) " "))) | |
(defun treemacs-helpful-hydra () | |
"Summon the helpful hydra to show you the treemacs keymap. | |
If the hydra, for whatever reason, is unable the find the key a command is bound | |
to it will instead show a blank." | |
(interactive) | |
(-if-let (b (treemacs-get-local-buffer)) | |
(with-current-buffer b | |
(let* | |
((title (format (propertize "Treemacs %s Helpful Hydra" 'face 'treemacs-help-title-face) (treemacs-version))) | |
(column-nav (propertize "Navigation" 'face 'treemacs-help-column-face)) | |
(column-nodes (propertize "Opening Nodes" 'face 'treemacs-help-column-face)) | |
(column-files (propertize "File Management" 'face 'treemacs-help-column-face)) | |
(column-toggles (propertize "Toggles " 'face 'treemacs-help-column-face)) | |
(column-projects (propertize "Projects" 'face 'treemacs-help-column-face)) | |
(column-misc (propertize "Misc." 'face 'treemacs-help-column-face)) | |
(key-next-line (treemacs--find-keybind #'treemacs-next-line)) | |
(key-prev-line (treemacs--find-keybind #'treemacs-previous-line)) | |
(key-next-neighbour (treemacs--find-keybind #'treemacs-next-neighbour)) | |
(key-prev-neighbour (treemacs--find-keybind #'treemacs-previous-neighbour)) | |
(key-goto-parent (treemacs--find-keybind #'treemacs-goto-parent-node)) | |
(key-ret (treemacs--find-keybind #'treemacs-RET-action)) | |
(key-tab (treemacs--find-keybind #'treemacs-TAB-action)) | |
(key-open (treemacs--find-keybind #'treemacs-visit-node-no-split)) | |
(key-open-horiz (treemacs--find-keybind #'treemacs-visit-node-horizontal-split)) | |
(key-open-vert (treemacs--find-keybind #'treemacs-visit-node-vertical-split)) | |
(key-open-ace (treemacs--find-keybind #'treemacs-visit-node-ace)) | |
(key-open-ace-h (treemacs--find-keybind #'treemacs-visit-node-ace-horizontal-split)) | |
(key-open-ace-v (treemacs--find-keybind #'treemacs-visit-node-ace-vertical-split)) | |
(key-open-ext (treemacs--find-keybind #'treemacs-visit-node-in-external-application)) | |
(key-open-mru (treemacs--find-keybind #'treemacs-visit-node-in-most-recently-used-window)) | |
(key-create-file (treemacs--find-keybind #'treemacs-create-file)) | |
(key-create-dir (treemacs--find-keybind #'treemacs-create-dir)) | |
(key-rename (treemacs--find-keybind #'treemacs-rename)) | |
(key-delete (treemacs--find-keybind #'treemacs-delete)) | |
(key-follow-mode (treemacs--find-keybind #'treemacs-follow-mode)) | |
(key-fringe-mode (treemacs--find-keybind #'treemacs-fringe-indicator-mode)) | |
(key-fwatch-mode (treemacs--find-keybind #'treemacs-filewatch-mode)) | |
(key-git-mode (treemacs--find-keybind #'treemacs-git-mode)) | |
(key-show-dotfiles (treemacs--find-keybind #'treemacs-toggle-show-dotfiles)) | |
(key-toggle-width (treemacs--find-keybind #'treemacs-toggle-fixed-width)) | |
(key-refresh (treemacs--find-keybind #'treemacs-refresh)) | |
(key-set-width (treemacs--find-keybind #'treemacs-set-width)) | |
(key-copy-path (treemacs--find-keybind #'treemacs-copy-path-at-point)) | |
(key-copy-root (treemacs--find-keybind #'treemacs-copy-project-root)) | |
(key-copy-file (treemacs--find-keybind #'treemacs-copy-file)) | |
(key-move-file (treemacs--find-keybind #'treemacs-move-file)) | |
(key-resort (treemacs--find-keybind #'treemacs-resort)) | |
(key-bookmark (treemacs--find-keybind #'treemacs-add-bookmark)) | |
(key-down-next-w (treemacs--find-keybind #'treemacs-next-line-other-window)) | |
(key-up-next-w (treemacs--find-keybind #'treemacs-previous-line-other-window)) | |
(key-add-project (treemacs--find-keybind #'treemacs-add-project-to-workspace 12)) | |
(key-remove-project (treemacs--find-keybind #'treemacs-remove-project-from-workspace 12)) | |
(key-rename-project (treemacs--find-keybind #'treemacs-rename-project 12)) | |
(key-close-above (treemacs--find-keybind #'treemacs-collapse-parent-node)) | |
(hydra-str | |
(format | |
" | |
%s | |
%s │ %s │ %s │ %s │ %s │ %s | |
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― | |
%s next Line │ %s dwim TAB │ %s create file │ %s follow mode │ %s add project │ %s refresh | |
%s prev line │ %s dwim RET │ %s create dir │ %s filewatch mode │ %s remove project │ %s (re)set width | |
%s next neighbour │ %s open no split │ %s rename │ %s git mode │ %s rename project │ %s copy path | |
%s prev neighbour │ %s open horizontal │ %s delete │ %s show dotfiles │ │ %s copy root | |
%s goto parent │ %s open vertical │ %s copy │ %s resizability │ │ %s re-sort | |
%s down next window │ %s open ace │ %s move │ %s fringe indicator │ │ %s bookmark | |
%s up next window │ %s open ace horizontal │ │ │ │ | |
│ %s open ace vertical │ │ │ │ | |
│ %s open mru window │ │ │ │ | |
│ %s open externally │ │ │ │ | |
│ %s close parent │ │ │ │ | |
" | |
title | |
column-nav column-nodes column-files column-toggles column-projects column-misc | |
(car key-next-line) (car key-tab) (car key-create-file) (car key-follow-mode) (car key-add-project) (car key-refresh) | |
(car key-prev-line) (car key-ret) (car key-create-dir) (car key-fwatch-mode) (car key-remove-project) (car key-set-width) | |
(car key-next-neighbour) (car key-open) (car key-rename) (car key-git-mode) (car key-rename-project) (car key-copy-path) | |
(car key-prev-neighbour) (car key-open-horiz) (car key-delete) (car key-show-dotfiles) (car key-copy-root) | |
(car key-goto-parent) (car key-open-vert) (car key-copy-file) (car key-toggle-width) (car key-resort) | |
(car key-down-next-w) (car key-open-ace) (car key-move-file) (car key-fringe-mode) (car key-bookmark) | |
(car key-up-next-w) (car key-open-ace-h) | |
(car key-open-ace-v) | |
(car key-open-mru) | |
(car key-open-ext) | |
(car key-close-above) | |
))) | |
(eval | |
`(defhydra treemacs--helpful-hydra (:exit nil :hint nil :columns 5) | |
,hydra-str | |
(,(cdr key-next-line) #'treemacs-next-line) | |
(,(cdr key-prev-line) #'treemacs-previous-line) | |
(,(cdr key-down-next-w) #'treemacs-next-line-other-window) | |
(,(cdr key-up-next-w) #'treemacs-previous-line-other-window) | |
(,(cdr key-next-neighbour) #'treemacs-next-neighbour) | |
(,(cdr key-prev-neighbour) #'treemacs-previous-neighbour) | |
(,(cdr key-goto-parent) #'treemacs-goto-parent-node) | |
(,(cdr key-ret) #'treemacs-RET-action) | |
(,(cdr key-tab) #'treemacs-TAB-action) | |
(,(cdr key-open) #'treemacs-visit-node-no-split) | |
(,(cdr key-open-horiz) #'treemacs-visit-node-horizontal-split) | |
(,(cdr key-open-vert) #'treemacs-visit-node-vertical-split) | |
(,(cdr key-open-ace) #'treemacs-visit-node-ace) | |
(,(cdr key-open-ace-h) #'treemacs-visit-node-ace-horizontal-split) | |
(,(cdr key-open-ace-v) #'treemacs-visit-node-ace-vertical-split) | |
(,(cdr key-open-mru) #'treemacs-visit-node-in-most-recently-used-window) | |
(,(cdr key-open-ext) #'treemacs-visit-node-in-external-application) | |
(,(cdr key-create-file) #'treemacs-create-file) | |
(,(cdr key-create-dir) #'treemacs-create-dir) | |
(,(cdr key-rename) #'treemacs-rename) | |
(,(cdr key-delete) #'treemacs-delete) | |
(,(cdr key-follow-mode) #'treemacs-follow-mode) | |
(,(cdr key-show-dotfiles) #'treemacs-toggle-show-dotfiles) | |
(,(cdr key-toggle-width) #'treemacs-toggle-fixed-width) | |
(,(cdr key-fringe-mode) #'treemacs-fringe-indicator-mode) | |
(,(cdr key-refresh) #'treemacs-refresh) | |
(,(cdr key-set-width) #'treemacs-set-width) | |
(,(cdr key-copy-path) #'treemacs-copy-path-at-point) | |
(,(cdr key-copy-root) #'treemacs-copy-project-root) | |
(,(cdr key-copy-file) #'treemacs-copy-file) | |
(,(cdr key-move-file) #'treemacs-move-file) | |
(,(cdr key-git-mode) #'treemacs-git-mode) | |
(,(cdr key-fwatch-mode) #'treemacs-filewatch-mode) | |
(,(cdr key-resort) #'treemacs-resort) | |
(,(cdr key-bookmark) #'treemacs-add-bookmark) | |
(,(cdr key-add-project) #'treemacs-add-project-to-workspace) | |
(,(cdr key-remove-project) #'treemacs-remove-project-from-workspace) | |
(,(cdr key-rename-project) #'treemacs-rename-project) | |
(,(cdr key-close-above) #'treemacs-collapse-parent-node) | |
("?" nil "Exit")))) | |
(treemacs--helpful-hydra/body)) | |
(treemacs-log "The helpful hydra cannot be summoned without an existing treemacs buffer."))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment