[emacs] add which-key labels for personal and some bult-in prefixes
[~bandali/configs] / init.org
index 3508f2d..d8563fd 100644 (file)
--- a/init.org
+++ b/init.org
@@ -272,6 +272,7 @@ database, low-level functions for querying the database, and a
    ("C-c b p" . epkg-list-packages)
    ("C-c b u" . epkg-update))
   :config
+  (eval-when-compile (defvar ivy-initial-inputs-alist))
   (with-eval-after-load 'ivy
     (add-to-list
      'ivy-initial-inputs-alist '(epkg-describe-package . "^") t)))
@@ -444,6 +445,26 @@ Convenience macro for =setq='ing multiple variables to the same value:
   `(progn ,@(mapcar (lambda (x) (list 'setq x value)) vars)))
 #+end_src
 
+The following process-related stuff from [[https://github.com/alezost/emacs-config][alezost's emacs-config]].
+
+#+begin_src emacs-lisp
+(defun a/start-process (program &rest args)
+  "Same as `start-process', but doesn't bother about name and buffer."
+  (let ((process-name (concat program "_process"))
+        (buffer-name  (generate-new-buffer-name
+                       (concat program "_output"))))
+    (apply #'start-process
+           process-name buffer-name program args)))
+
+(defun a/dired-start-process (program &optional args)
+  "Open current file with a PROGRAM."
+  ;; Shell command looks like this: "program [ARGS]... FILE" (ARGS can
+  ;; be nil, so remove it).
+  (apply #'a/start-process
+         program
+         (remove nil (list args (dired-get-file-for-visit)))))
+#+end_src
+
 * Core
 :PROPERTIES:
 :CUSTOM_ID: core
@@ -926,7 +947,8 @@ There's no way I could top that, so I won't attempt to.
 
   (defun a/eshell-setup ()
     (make-local-variable 'company-idle-delay)
-    (defvar company-idle-delay nil)
+    (defvar company-idle-delay)
+    (setq company-idle-delay nil)
     (bind-keys :map eshell-mode-map
                ("C-d"   . a/eshell-quit-or-delete-char)
                ("C-S-l" . a/eshell-clear)
@@ -1049,9 +1071,45 @@ TODO: break this giant source block down into individual org sections.
   (global-diff-hl-mode)
   (add-hook 'magit-post-refresh-hook 'diff-hl-magit-post-refresh t))
 
+(use-package ls-lisp
+  :custom (ls-lisp-dirs-first t))
+
 (use-package dired
   :defer t
-  :config (setq dired-listing-switches "-alh"))
+  :config
+  (setq dired-listing-switches "-alh"
+        ls-lisp-use-insert-directory-program nil)
+
+  ;; easily diff 2 marked files
+  ;; https://oremacs.com/2017/03/18/dired-ediff/
+  (defun dired-ediff-files ()
+    (interactive)
+    (defvar ediff-after-quit-hook-internal)
+    (let ((files (dired-get-marked-files))
+          (wnd (current-window-configuration)))
+      (if (<= (length files) 2)
+          (let ((file1 (car files))
+                (file2 (if (cdr files)
+                           (cadr files)
+                         (read-file-name
+                          "file: "
+                          (dired-dwim-target-directory)))))
+            (if (file-newer-than-file-p file1 file2)
+                (ediff-files file2 file1)
+              (ediff-files file1 file2))
+            (add-hook 'ediff-after-quit-hook-internal
+                      (lambda ()
+                        (setq ediff-after-quit-hook-internal nil)
+                        (set-window-configuration wnd))))
+        (error "no more than 2 files should be marked"))))
+  :bind (:map dired-mode-map
+              ("e"  . dired-ediff-files)
+              ("E"  . dired-toggle-read-only)
+              ("\\" . dired-hide-details-mode)
+              ("z"  . (lambda ()
+                        (interactive)
+                        (a/dired-start-process "zathura"))))
+  :hook (dired-mode . dired-hide-details-mode))
 
 (use-package eldoc
   :when (version< "25" emacs-version)
@@ -1574,7 +1632,51 @@ Emacs package that displays available keybindings in popup
 #+begin_src emacs-lisp
 (use-package which-key
   :defer 1
-  :config (which-key-mode))
+  :config
+  (which-key-add-key-based-replacements
+    ;; prefixes for global prefixes and minor modes
+    "C-c @"   "outline"
+    "C-c !"   "flycheck"
+    "C-c 8"   "typo"
+    "C-c 8 -" "typo/dashes"
+    "C-c 8 <" "typo/left-brackets"
+    "C-c 8 >" "typo/right-brackets"
+    "C-x 8"   "unicode"
+    "C-x a"   "abbrev/expand"
+    "C-x r"   "rectangle/register/bookmark"
+    "C-x v"   "version control"
+    ;; prefixes for my personal bindings
+    "C-c a"   "applications"
+    "C-c a s" "shells"
+    "C-c b"   "borg"
+    "C-c c"   "compile-and-comments"
+    "C-c e"   "eval"
+    "C-c f"   "files"
+    "C-c F"   "frames"
+    "C-S-h"   "help(ful)"
+    "C-c m"   "multiple-cursors"
+    "C-c p"   "projectile"
+    "C-c p s" "projectile/search"
+    "C-c p x" "projectile/execute"
+    "C-c p 4" "projectile/other-window"
+    "C-c q"   "boxquote"
+    "s-g"     "magit"
+    "s-o"     "outline"
+    "s-t"     "themes")
+
+  ;; prefixes for major modes
+  (which-key-add-major-mode-key-based-replacements 'message-mode
+    "C-c f"   "footnote")
+  (which-key-add-major-mode-key-based-replacements 'org-mode
+    "C-c C-v" "org-babel")
+  (which-key-add-major-mode-key-based-replacements 'web-mode
+    "C-c C-a" "web/attributes"
+    "C-c C-b" "web/blocks"
+    "C-c C-d" "web/dom"
+    "C-c C-e" "web/element"
+    "C-c C-t" "web/tags")
+
+  (which-key-mode))
 #+end_src
 
 ** theme
@@ -1794,8 +1896,7 @@ Also see [[https://www.emacswiki.org/emacs/rebox2][rebox2]].
 #+begin_src emacs-lisp
 (use-package multi-term
   :defer 1
-  :bind (("C-c a s m m" . multi-term)
-         ("C-c a s m p" . multi-term-dedicated-toggle)
+  :bind (("C-c a s m" . multi-term-dedicated-toggle)
          :map term-mode-map
          ("C-c C-j" . term-char-mode)
          :map term-raw-map
@@ -1840,6 +1941,20 @@ Also see [[https://www.emacswiki.org/emacs/rebox2][rebox2]].
   :bind ("C-=" . er/expand-region))
 #+end_src
 
+** multiple-cursors
+
+#+begin_src emacs-lisp
+(use-package multiple-cursors
+  :bind
+  (("C-S-<mouse-1>" . mc/add-cursor-on-click)
+   (:prefix-map a/mc-prefix-map
+               :prefix "C-c m"
+               ("c" . mc/edit-lines)
+               ("n" . mc/mark-next-like-this)
+               ("p" . mc/mark-previous-like-this)
+               ("a" . mc/mark-all-like-this))))
+#+end_src
+
 * Email
 :PROPERTIES:
 :CUSTOM_ID: email
@@ -1860,9 +1975,7 @@ Also see [[https://www.emacswiki.org/emacs/rebox2][rebox2]].
  read-mail-command 'gnus)
 
 (use-package gnus
-  :bind (("C-c m" . gnus)
-         ("C-c M" . gnus-unplugged)
-         ("s-m"   . gnus)
+  :bind (("s-m"   . gnus)
          ("s-M"   . gnus-unplugged))
   :init
   (setq