:bind
(("C-c b d" . epkg-describe-package)
("C-c b p" . epkg-list-packages)
- ("C-c b u" . epkg-update)))
+ ("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)))
#+end_src
** No littering in =~/.emacs.d=
`(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
(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)
(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)
#+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
#+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
: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
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