mirror of
https://github.com/SqrtMinusOne/dotfiles.git
synced 2025-12-10 19:23:03 +03:00
feat(emacs): run commands in perspectives
This commit is contained in:
parent
df2f07f949
commit
c6987720e9
3 changed files with 57 additions and 45 deletions
|
|
@ -720,7 +720,6 @@ then it takes a second \\[keyboard-quit] to abort the minibuffer."
|
|||
|
||||
(use-package company-box
|
||||
:straight t
|
||||
:disabled
|
||||
:if (and (display-graphic-p) (not my/lowpower))
|
||||
:after (company)
|
||||
:hook (company-mode . company-box-mode))
|
||||
|
|
@ -998,6 +997,16 @@ then it takes a second \\[keyboard-quit] to abort the minibuffer."
|
|||
"m" #'my/persp-move-window-and-switch
|
||||
"f" #'my/persp-copy-window-and-switch))
|
||||
|
||||
(defmacro my/command-in-persp (command-name persp-name workspace-index &rest args)
|
||||
`'((lambda ()
|
||||
(interactive)
|
||||
(when (and ,workspace-index (fboundp #'exwm-workspace-switch-create))
|
||||
(exwm-workspace-switch-create ,workspace-index))
|
||||
(persp-switch ,persp-name)
|
||||
(delete-other-windows)
|
||||
,@args)
|
||||
:wk ,command-name))
|
||||
|
||||
(use-package lsp-mode
|
||||
:straight t
|
||||
:if (not (or my/slow-ssh my/is-termux my/remote-server))
|
||||
|
|
@ -2071,6 +2080,11 @@ _r_: Restart frame _uo_: Output _sd_: Down stack frame _bh_: Set
|
|||
:straight t
|
||||
:mode "\\.env\\..*\\'")
|
||||
|
||||
(use-package gitignore-templates
|
||||
:straight t
|
||||
:commands (gitignore-templates-insert
|
||||
gitignore-templates-new-file))
|
||||
|
||||
(use-package dockerfile-mode
|
||||
:mode "Dockerfile\\'"
|
||||
:straight t
|
||||
|
|
@ -3174,7 +3188,7 @@ _r_: Restart frame _uo_: Output _sd_: Down stack frame _bh_: Set
|
|||
|
||||
(my-leader-def
|
||||
"ad" #'dired
|
||||
"aD" #'my/dired-home)
|
||||
"aD" (my/command-in-persp "dired $HOME" "dired" nil (dired (expand-file-name "~"))))
|
||||
|
||||
(use-package diredfl
|
||||
:straight t
|
||||
|
|
@ -3487,7 +3501,7 @@ _r_: Restart frame _uo_: Output _sd_: Down stack frame _bh_: Set
|
|||
:if (not my/remote-server)
|
||||
:commands (elfeed)
|
||||
:init
|
||||
(my-leader-def "ae" 'elfeed)
|
||||
(my-leader-def "ae" (my/command-in-persp "elfeed" "elfeed" 0 (elfeed)))
|
||||
:config
|
||||
(setq elfeed-db-directory "~/.elfeed")
|
||||
(setq elfeed-enclosure-default-dir (expand-file-name "~/Downloads"))
|
||||
|
|
@ -3651,7 +3665,7 @@ _r_: Restart frame _uo_: Output _sd_: Down stack frame _bh_: Set
|
|||
(my-leader-def
|
||||
:infix "as"
|
||||
"" '(:which-key "emms")
|
||||
"s" 'emms-smart-browse
|
||||
"s" (my/command-in-persp "emms" "EMMS" 0 (emms-smart-browse))
|
||||
"b" 'emms-browser
|
||||
"p" 'emms-pause
|
||||
"q" 'emms-stop
|
||||
|
|
@ -3836,7 +3850,7 @@ _r_: Restart frame _uo_: Output _sd_: Down stack frame _bh_: Set
|
|||
:commands (erc erc-tls)
|
||||
:straight (:type built-in)
|
||||
:init
|
||||
(my-leader-def "ai" #'erc-tls)
|
||||
(my-leader-def "ai" (my/command-in-persp "erc" "ERC" 0 (erc-tls)))
|
||||
:config
|
||||
;; Logging
|
||||
(setq erc-log-channels-directory "~/.erc/logs")
|
||||
|
|
@ -4048,8 +4062,8 @@ _r_: Restart frame _uo_: Output _sd_: Down stack frame _bh_: Set
|
|||
(my-leader-def "ag" 'guix))
|
||||
|
||||
(use-package pomm
|
||||
;; :straight (:host github :repo "SqrtMinusOne/pomm.el" :files (:defaults "resources"))
|
||||
:straight (:local-repo "~/Code/Emacs/pomm" :files (:defaults "resources"))
|
||||
:straight (:host github :repo "SqrtMinusOne/pomm.el" :files (:defaults "resources"))
|
||||
;; :straight (:local-repo "~/Code/Emacs/pomm" :files (:defaults "resources"))
|
||||
:commands (pomm)
|
||||
:init
|
||||
(my-leader-def "ap" #'pomm)
|
||||
|
|
|
|||
70
Emacs.org
70
Emacs.org
|
|
@ -749,7 +749,7 @@ Change the universal argument to =M-u=. I use =C-u= to scroll up, as I'm used to
|
|||
:states '(normal motion emacs insert visual)
|
||||
"M-u" 'universal-argument)
|
||||
#+end_src
|
||||
**** CHECK Profiler
|
||||
**** Profiler
|
||||
The built-in profiler is a magnificent tool to troubleshoot performance issues.
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
|
|
@ -835,7 +835,7 @@ Evil does a pretty good job of abstracting the first two with a set of vim-like
|
|||
"ze" 'hs-hide-level
|
||||
"TAB" 'evil-toggle-fold)
|
||||
#+end_src
|
||||
**** CHECK Zoom UI
|
||||
**** Zoom UI
|
||||
#+begin_src emacs-lisp
|
||||
(defun my/zoom-in ()
|
||||
"Increase font size by 10 points"
|
||||
|
|
@ -1242,7 +1242,7 @@ Function to open dired and vterm at given nodes.
|
|||
(general-nmap "C-p" 'counsel-projectile-find-file)
|
||||
#+end_src
|
||||
*** Git & Magit
|
||||
[[https://magit.vc/][Magic]] is a git interface for Emacs. The closest non-Emacs alternative (sans actual clones) I know is [[https://github.com/jesseduffield/lazygit][lazygit]], which I used before Emacs.
|
||||
[[https://magit.vc/][Magit]] is a git interface for Emacs. The closest non-Emacs alternative (sans actual clones) I know is [[https://github.com/jesseduffield/lazygit][lazygit]], which I used before Emacs.
|
||||
|
||||
[[https://github.com/emacsorphanage/git-gutter][git-gutter]] is a package which shows git changes for each line (added/changed/deleted lines).
|
||||
|
||||
|
|
@ -1430,7 +1430,6 @@ A company frontend with nice icons. Disabled since the base company got icons su
|
|||
#+begin_src emacs-lisp
|
||||
(use-package company-box
|
||||
:straight t
|
||||
:disabled
|
||||
:if (and (display-graphic-p) (not my/lowpower))
|
||||
:after (company)
|
||||
:hook (company-mode . company-box-mode))
|
||||
|
|
@ -1808,7 +1807,7 @@ However, I don't like that list of workspaces is displayed inside the modeline r
|
|||
"x" 'persp-ivy-switch-buffer
|
||||
"u" 'persp-ibuffer))
|
||||
#+end_src
|
||||
*** Some functions
|
||||
*** Functions to manage buffers
|
||||
Move the current buffer to a perspective and switch to it.
|
||||
#+begin_src emacs-lisp
|
||||
(defun my/persp-move-window-and-switch ()
|
||||
|
|
@ -1853,6 +1852,21 @@ Add keybindings to the default map.
|
|||
"m" #'my/persp-move-window-and-switch
|
||||
"f" #'my/persp-copy-window-and-switch))
|
||||
#+end_src
|
||||
*** Automating perspectives
|
||||
I'd like to have various Emacs apps open up in their designated perspectives (also in their designated workspaces when I'm using EXWM).
|
||||
|
||||
So, here is a macro to run something in a given perspective in a given workspace. This is meant to be used in general.el keybindings.
|
||||
#+begin_src emacs-lisp
|
||||
(defmacro my/command-in-persp (command-name persp-name workspace-index &rest args)
|
||||
`'((lambda ()
|
||||
(interactive)
|
||||
(when (and ,workspace-index (fboundp #'exwm-workspace-switch-create))
|
||||
(exwm-workspace-switch-create ,workspace-index))
|
||||
(persp-switch ,persp-name)
|
||||
(delete-other-windows)
|
||||
,@args)
|
||||
:wk ,command-name))
|
||||
#+end_src
|
||||
* Programming
|
||||
** General setup
|
||||
*** LSP
|
||||
|
|
@ -2240,31 +2254,6 @@ Some debug templates I frequently use.
|
|||
:program "${workspaceFolder}/dist/bin/www.js")))
|
||||
|
||||
#+end_src
|
||||
*** TabNine
|
||||
A ML-based autocompletion system.
|
||||
|
||||
More often than not gives +really+ somewhat good results, but is slow as hell & consumes a lot of RAM. Also, LSP-provided completions were more useful in my experience.
|
||||
|
||||
References:
|
||||
- [[https://www.tabnine.com/][TabNine Homepage]]
|
||||
#+begin_src emacs-lisp :tangle no
|
||||
(use-package company-tabnine
|
||||
:straight t
|
||||
:if (not my/lowpower)
|
||||
:after company)
|
||||
|
||||
|
||||
(define-minor-mode company-tabnine-mode
|
||||
"Use company-tabnine"
|
||||
:after-hook
|
||||
(progn
|
||||
(if company-tabnine-mode
|
||||
(progn
|
||||
(make-local-variable 'company-backends)
|
||||
(add-to-list 'company-backends 'company-tabnine))
|
||||
(setq company-backends (remove 'company-tabnine company-backends))
|
||||
(kill-local-variable company-backends))))
|
||||
#+end_src
|
||||
*** Reformatter
|
||||
A general-purpose package to run formattters on files. While the most popular formatters are already packaged for Emacs, those that aren't can be invoked with this package.
|
||||
|
||||
|
|
@ -3127,6 +3116,15 @@ A function to start up [[https://www.tensorflow.org/tensorboard][TensorBoard]].
|
|||
:straight t
|
||||
:mode "\\.env\\..*\\'")
|
||||
#+end_src
|
||||
*** .gitignore
|
||||
A package to quickly create =.gitignore= files.
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-package gitignore-templates
|
||||
:straight t
|
||||
:commands (gitignore-templates-insert
|
||||
gitignore-templates-new-file))
|
||||
#+end_src
|
||||
*** Docker
|
||||
#+begin_src emacs-lisp
|
||||
(use-package dockerfile-mode
|
||||
|
|
@ -4683,7 +4681,7 @@ My config mostly follows ranger's and vifm's keybindings which I'm used to.
|
|||
|
||||
(my-leader-def
|
||||
"ad" #'dired
|
||||
"aD" #'my/dired-home)
|
||||
"aD" (my/command-in-persp "dired $HOME" "dired" nil (dired (expand-file-name "~"))))
|
||||
#+end_src
|
||||
*** Addons
|
||||
I used to use [[https://www.emacswiki.org/emacs/DiredPlus][dired+]], which provides a lot of extensions for dired functionality, but it also creates some new problems, so I opt out of it. Fortunately, the one feature I want from this package - adding more colors to dired buffers - is available as a separate package.
|
||||
|
|
@ -5128,7 +5126,7 @@ Using my own fork until the modifications are merged into master.
|
|||
:if (not my/remote-server)
|
||||
:commands (elfeed)
|
||||
:init
|
||||
(my-leader-def "ae" 'elfeed)
|
||||
(my-leader-def "ae" (my/command-in-persp "elfeed" "elfeed" 0 (elfeed)))
|
||||
:config
|
||||
(setq elfeed-db-directory "~/.elfeed")
|
||||
(setq elfeed-enclosure-default-dir (expand-file-name "~/Downloads"))
|
||||
|
|
@ -5328,7 +5326,7 @@ References:
|
|||
(my-leader-def
|
||||
:infix "as"
|
||||
"" '(:which-key "emms")
|
||||
"s" 'emms-smart-browse
|
||||
"s" (my/command-in-persp "emms" "EMMS" 0 (emms-smart-browse))
|
||||
"b" 'emms-browser
|
||||
"p" 'emms-pause
|
||||
"q" 'emms-stop
|
||||
|
|
@ -5627,7 +5625,7 @@ ERC is a built-it Emacs IRC client.
|
|||
:commands (erc erc-tls)
|
||||
:straight (:type built-in)
|
||||
:init
|
||||
(my-leader-def "ai" #'erc-tls)
|
||||
(my-leader-def "ai" (my/command-in-persp "erc" "ERC" 0 (erc-tls)))
|
||||
:config
|
||||
;; Logging
|
||||
(setq erc-log-channels-directory "~/.erc/logs")
|
||||
|
|
@ -5925,8 +5923,8 @@ My package for doing Pomodoro timer.
|
|||
|
||||
#+begin_src emacs-lisp
|
||||
(use-package pomm
|
||||
;; :straight (:host github :repo "SqrtMinusOne/pomm.el" :files (:defaults "resources"))
|
||||
:straight (:local-repo "~/Code/Emacs/pomm" :files (:defaults "resources"))
|
||||
:straight (:host github :repo "SqrtMinusOne/pomm.el" :files (:defaults "resources"))
|
||||
;; :straight (:local-repo "~/Code/Emacs/pomm" :files (:defaults "resources"))
|
||||
:commands (pomm)
|
||||
:init
|
||||
(my-leader-def "ap" #'pomm)
|
||||
|
|
|
|||
4
Mail.org
4
Mail.org
|
|
@ -424,7 +424,7 @@ Root keybindings:
|
|||
(my-leader-def
|
||||
:infix "am"
|
||||
"" '(:which-key "notmuch")
|
||||
"m" 'notmuch)
|
||||
"m" (my/command-in-persp "notmuch" "mail" 0 (notmuch)))
|
||||
#+end_src
|
||||
|
||||
#+NAME: root_tags
|
||||
|
|
@ -475,7 +475,7 @@ And the following does the same for my general.el definer:
|
|||
(dolist (tag filter_tags)
|
||||
(add-to-list
|
||||
'bindings
|
||||
(format "\"%s\" '((lambda () (interactive) (notmuch-search \"%s\")) :which-key \"%s\")"
|
||||
(format "\"%s\" (my/command-in-persp \"%s\" \"mail\" 0 (notmuch-search \"%s\"))"
|
||||
(concat (nth 1 root_tag) (nth 1 tag))
|
||||
(concat "tag:" (nth 0 root_tag)
|
||||
(unless (string-empty-p (nth 0 tag))
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue