[Emacs] Unified my shortcuts for opening files

Since all my files that were opened with a `SPC o f' prefixed shortcut
all opened some org file located in precise directories, I unified
them all with a helm menu and only a couple of directories to specify
(I even added some).
This commit is contained in:
Lucien Cartier-Tilet 2020-09-13 18:02:56 +02:00
parent 1a90975a88
commit f0f07a6cc0
Signed by: phundrak
GPG Key ID: BD7789E705CB8DCA
2 changed files with 37 additions and 77 deletions

View File

@ -121,7 +121,7 @@ This function is called at the very end of Spacemacs initialization."
'(objed-cursor-color "#ff6c6b")
'(org-export-headline-levels 4)
'(package-selected-packages
'(curl-to-elisp org-tree-slide wrap-region helm-icons org-treeusage caddyfile-mode org-ref lsp-dart mu4e-maildirs-extension mu4e-alert helm-mu xkcd vmd-mode visual-fill-column typit mmt sudoku restclient-helm pony-mode pacmacs ox-reveal outorg ob-restclient ob-http meson-mode ibuffer-projectile lv helm-w3m w3m graphviz-dot-mode flycheck-gometalinter transient ess-smart-equals ess-R-data-view ctable ess julia-mode eshell-git-prompt emoji-cheat-sheet-plus edit-indirect dockerfile-mode docker docker-tramp company-restclient restclient know-your-http-well company-quickhelp company-emoji company-emacs-eclim eclim atomic-chrome websocket 2048-game ox-gfm slime-company slime common-lisp-snippets erlang insert-shebang fish-mode company-shell faceup racket-mode treepy graphql yapfify yaml-mode xterm-color web-beautify twittering-mode toml-mode tagedit stickyfunc-enhance smeargle slim-mode shell-pop selectric-mode scss-mode sass-mode ranger rainbow-identifiers pytest pyenv-mode py-isort pug-mode plantuml-mode phpunit phpcbf php-auto-yasnippets pdf-tools tablist ox-pandoc orgit org-present org-pomodoro alert log4e gntp ob-elixir multi-term markdown-toc magit-gitflow magit-gh-pulls livid-mode live-py-mode json-snatcher js2-refactor js-doc htmlize hlint-refactor hindent helm-pydoc helm-hoogle helm-gitignore helm-css-scss haskell-snippets haml-mode gnuplot glsl-mode gitignore-mode github-search github-clone github-browse-file gitconfig-mode gitattributes-mode git-messenger gist gh marshal logito pcache ht gh-md flyspell-correct-helm flyspell-correct flycheck-rust pos-tip flycheck-mix flycheck-credo eshell-z eshell-prompt-extras esh-help drupal-mode disaster cython-mode dash-functional tern company-ghci company-ghc ghc color-identifiers-mode cmm-mode clang-format cargo auto-dictionary alchemist modern-cpp-font-lock yasnippet-snippets x86-lookup web-mode srefactor racer pyvenv pip-requirements pandoc-mode org-projectile org-category-capture org-mime org-download nasm-mode json-reformat intero imenu-list hy-mode git-timemachine git-link geiser flycheck-pos-tip flycheck-haskell evil-magit emmet-mode cmake-mode anaconda-mode rust-mode elixir-mode flycheck haskell-mode multiple-cursors skewer-mode simple-httpd markdown-mode magit magit-popup git-commit ghub with-editor pythonic emms gmail-message-mode ham-mode html-to-markdown flymd edit-server image-dired+ go-guru go-eldoc company-go go-mode unfill mwim company-web web-completion-data company-tern company-cabal company-c-headers company-auctex company-anaconda elcord xresources-theme sql-indent rainbow-mode php-extras php-mode mmm-mode json-mode js2-mode csv-mode coffee-mode auctex helm-company helm-c-yasnippet fuzzy company-statistics company auto-yasnippet yasnippet ac-ispell auto-complete ws-butler winum which-key volatile-highlights vi-tilde-fringe uuidgen use-package toc-org spaceline powerline restart-emacs request rainbow-delimiters popwin persp-mode pcre2el paradox spinner org-plus-contrib org-bullets open-junk-file neotree move-text macrostep lorem-ipsum linum-relative link-hint indent-guide hydra hungry-delete hl-todo highlight-parentheses highlight-numbers parent-mode highlight-indentation helm-themes helm-swoop helm-projectile helm-mode-manager helm-make projectile pkg-info epl helm-flx helm-descbinds helm-ag google-translate golden-ratio flx-ido flx fill-column-indicator fancy-battery eyebrowse expand-region exec-path-from-shell evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-search-highlight-persist evil-numbers evil-nerd-commenter evil-mc evil-matchit evil-lisp-state smartparens evil-indent-plus evil-iedit-state iedit evil-exchange evil-escape evil-ediff evil-args evil-anzu anzu evil goto-chg undo-tree eval-sexp-fu highlight elisp-slime-nav dumb-jump f dash s diminish define-word column-enforce-mode clean-aindent-mode bind-map bind-key auto-highlight-symbol auto-compile packed aggressive-indent adaptive-wrap ace-window ace-link ace-jump-helm-line helm avy helm-core popup async))
'(wttrin wrap-region pinentry org-tree-slide org-sidebar org-ql peg ov org-super-agenda ts dired-du caddyfile-mode loop xkcd vmd-mode visual-fill-column typit mmt sudoku restclient-helm pony-mode pacmacs ox-reveal outorg ob-restclient ob-http meson-mode ibuffer-projectile lv helm-w3m w3m graphviz-dot-mode flycheck-gometalinter transient ess-smart-equals ess-R-data-view ctable ess julia-mode eshell-git-prompt emoji-cheat-sheet-plus edit-indirect dockerfile-mode docker docker-tramp company-restclient restclient know-your-http-well company-quickhelp company-emoji company-emacs-eclim eclim atomic-chrome websocket 2048-game ox-gfm slime-company slime common-lisp-snippets erlang insert-shebang fish-mode company-shell faceup racket-mode treepy graphql yapfify yaml-mode xterm-color web-beautify twittering-mode toml-mode tagedit stickyfunc-enhance smeargle slim-mode shell-pop selectric-mode scss-mode sass-mode ranger rainbow-identifiers pytest pyenv-mode py-isort pug-mode plantuml-mode phpunit phpcbf php-auto-yasnippets pdf-tools tablist ox-pandoc orgit org-present org-pomodoro alert log4e gntp ob-elixir multi-term markdown-toc magit-gitflow magit-gh-pulls livid-mode live-py-mode json-snatcher js2-refactor js-doc htmlize hlint-refactor hindent helm-pydoc helm-hoogle helm-gitignore helm-css-scss haskell-snippets haml-mode gnuplot glsl-mode gitignore-mode github-search github-clone github-browse-file gitconfig-mode gitattributes-mode git-messenger gist gh marshal logito pcache ht gh-md flyspell-correct-helm flyspell-correct flycheck-rust pos-tip flycheck-mix flycheck-credo eshell-z eshell-prompt-extras esh-help drupal-mode disaster cython-mode dash-functional tern company-ghci company-ghc ghc color-identifiers-mode cmm-mode clang-format cargo auto-dictionary alchemist modern-cpp-font-lock yasnippet-snippets x86-lookup web-mode srefactor racer pyvenv pip-requirements pandoc-mode org-projectile org-category-capture org-mime org-download nasm-mode json-reformat intero imenu-list hy-mode git-timemachine git-link geiser flycheck-pos-tip flycheck-haskell evil-magit emmet-mode cmake-mode anaconda-mode rust-mode elixir-mode flycheck haskell-mode multiple-cursors skewer-mode simple-httpd markdown-mode magit magit-popup git-commit ghub with-editor pythonic emms gmail-message-mode ham-mode html-to-markdown flymd edit-server image-dired+ go-guru go-eldoc company-go go-mode unfill mwim company-web web-completion-data company-tern company-cabal company-c-headers company-auctex company-anaconda elcord xresources-theme sql-indent rainbow-mode php-extras php-mode mmm-mode json-mode js2-mode csv-mode coffee-mode auctex helm-company helm-c-yasnippet fuzzy company-statistics company auto-yasnippet yasnippet ac-ispell auto-complete ws-butler winum which-key volatile-highlights vi-tilde-fringe uuidgen use-package toc-org spaceline powerline restart-emacs request rainbow-delimiters popwin persp-mode pcre2el paradox spinner org-plus-contrib org-bullets open-junk-file neotree move-text macrostep lorem-ipsum linum-relative link-hint indent-guide hydra hungry-delete hl-todo highlight-parentheses highlight-numbers parent-mode highlight-indentation helm-themes helm-swoop helm-projectile helm-mode-manager helm-make projectile pkg-info epl helm-flx helm-descbinds helm-ag google-translate golden-ratio flx-ido flx fill-column-indicator fancy-battery eyebrowse expand-region exec-path-from-shell evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-search-highlight-persist evil-numbers evil-nerd-commenter evil-mc evil-matchit evil-lisp-state smartparens evil-indent-plus evil-iedit-state iedit evil-exchange evil-escape evil-ediff evil-args evil-anzu anzu evil goto-chg undo-tree eval-sexp-fu highlight elisp-slime-nav dumb-jump f dash s diminish define-word column-enforce-mode clean-aindent-mode bind-map bind-key auto-highlight-symbol auto-compile packed aggressive-indent adaptive-wrap ace-window ace-link ace-jump-helm-line helm avy helm-core popup async))
'(pdf-view-midnight-colors '("#655370" . "#fbf8ef"))
'(safe-local-variable-values
'((org-confirm-babel-evaluate)

View File

@ -123,7 +123,7 @@
It is possible to also list packages that cannot be updated:
#+BEGIN_SRC emacs-lisp
(setq-default dotspacemacs-frozen-packages '())
(setq-default dotspacemacs-frozen-packages '(helm-icons))
#+END_SRC
And to list packages which wont be installed nor loaded:
@ -2926,85 +2926,45 @@
:PROPERTIES:
:CUSTOM_ID: User_Configuration-Shortcuts-Files-206c2126
:END:
This category is mainly used for opening configuration files, but it is also
more generally for files-related commands. Lets declare keybindings related
to my configuration files. Here is the list of them:
- [[file:bin.org][bin.org]] :: contains the source code of my custom scripts in my ~$PATH~
- [[file:spacemacs.org][spacemacs.org]] :: this file, configuration of Emacs
- [[file:fish.org][fish.org]] :: configuration of my fish shell
- [[file:i3.org][i3.org]] :: configuration of my i3 installation
- [[file:index.org][index.org]] :: some various configuration files and index of this website
- [[file:polybar.org][polybar.org]] :: configuration for polybar
- [[file:picom.org][picom.org]] :: configuration for picom
- [[https://labs.phundrak.com/phundrak/dotfiles][README.org]] :: README of the yadm repo
I also have a keybinding for the following files:
- conlanging.org :: collection of ideas and references for conlanging
- elfeed.org :: where I store all the RSS sources for Elfeed
- journal.org :: my journal (which I dont really use often tbh)
- notes.org :: to, well, take notes
- worldbuilding.org :: same as ~conlanging.org~ above.
Each of these files are accessible through a simple keybinding, and each one
of them has a description so the keybinding doesnt show up as ~lambda~ with
~which-keys~. So, a custom name for ~which-keys~ is specified in the Name
column. If a file is not specified, that means it is just a declaration for
a keybinding prefix.
First, here are my keybindings for opening my private files described above:
#+NAME: private-files-open-shortcuts
| Keybinding | Name | File |
|------------+-------------------+---------------------------------|
| of | files | |
| ofb | blog.org | ~/org/blog/content-org/blog.org |
| ofC | conlanging.org | ~/org/conlanging.org |
| ofe | elfeed.org | ~/org/elfeed.org |
| ofj | journal.org | ~/org/journal.org |
| ofn | notes.org | ~/org/notes.org |
| ofw | worldbuilding.org | ~/org/worldbuilding.org |
And here are my keybindings for opening config files:
#+NAME: config-files-open-shortcuts
| Keybinding | Name | File |
|------------+------------------+-------------------------------|
| ofc | config files | |
| ofca | awesome.org | ~/org/config/awesome.org |
| ofcb | bin.org | ~/org/config/bin.org |
| ofce | spacemacs.org | ~/org/config/spacemacs.org |
| ofcf | fish.org | ~/org/config/fish.org |
| ofci | index.org | ~/org/config/index.org |
| ofcI | installation.org | ~/org/config/installation.org |
| ofcp | polybar.org | ~/org/config/polybar.org |
| ofcP | picom.org | ~/org/config/picom.org |
| ofcr | yadm README | ~/README.org |
#+NAME: shortcuts-gen
#+BEGIN_SRC emacs-lisp :tangle no :noweb yes :var table=[] :exports none :results replace
(concat (mapconcat (lambda (x)
(let* ((keybinding (nth 0 x))
(name (nth 1 x)))
(if (string= "" name) ""
(format "(spacemacs/declare-prefix \"%s\"\t\"%s\")"
keybinding name))))
table "\n")
"\n"
(format "(spacemacs/set-leader-keys\n%s)"
(mapconcat (lambda (x)
(let* ((keybinding (nth 0 x))
(name (nth 1 x))
(file (nth 2 x)))
(if (string= "" file)
(format "\t\;\; %s" name)
(format "\t\"%s\" (lambda () (interactive) (find-file \"%s\"))"
keybinding file))))
table
"\n")))
There are lots of files which I want to be able to quickly open. I used to
have one shortcut for each one of these files, but as their number grew, I
decided to switch to helm for my file selector which will be called by only
one common shortcut. Most of my files will be located in =~/org=, but I have
some conlanging files which are located in =~/Documents/conlanging=, and all
my university notes are in =~/Documents/university=. Lets declare these
directories in a variable:
#+BEGIN_SRC emacs-lisp
(setq phundrak/org-directories '("~/org"
"~/Documents/university"
"~/Documents/conlanging"))
#+END_SRC
Here is the actual code for these keybindings:
#+BEGIN_SRC emacs-lisp :noweb yes
<<shortcuts-gen(table=private-files-open-shortcuts)>>
<<shortcuts-gen(table=config-files-open-shortcuts)>>
With this established, lets write some emacs-lisp that will allow me to get
a list of all these files and select them through helm. Be aware that I will
be using some functions from third party packages, such as [[https://github.com/rejeep/f.el][f.el]] and [[https://github.com/magnars/dash.el][dash]].
#+BEGIN_SRC emacs-lisp
(spacemacs/declare-prefix "of" "open org file")
(spacemacs/set-leader-keys
"of"
(lambda ()
(interactive)
(find-file
(helm
:sources (helm-build-sync-source "org files"
:candidates (-mapcat
(lambda (path)
(f-files path
(lambda (file) (equal (f-ext file) "org"))
t))
phundrak/org-directories)
:fuzzy-match t)
:buffer "*org files*"))))
#+END_SRC
And thats it! This should list all my org files under these directories and
give me fuzzy finding for these files. I just need to partially type the
name of the file I want to open and it should open without any issue.
*** Multiple cursors
:PROPERTIES:
:CUSTOM_ID: User_Configuration-Shortcuts-Multiple_cursors-83db7c9c