org-startup-folded 'content
org-catch-invisible-edits 'show-and-error
org-log-done 'time)
+ (when (version< org-version "9.3")
+ (setq org-email-link-description-format
+ org-link-email-description-format))
(add-to-list 'org-structure-template-alist '("L" . "src emacs-lisp") t)
(add-to-list 'org-modules 'org-habit)
:bind
(("C-c a o a" . org-agenda)
:map org-mode-map
("M-L" . org-insert-last-stored-link)
- ("M-O" . org-toggle-link-display)
- ("s-T" . org-todo))
+ ("M-O" . org-toggle-link-display))
:hook ((org-mode . org-indent-mode)
(org-mode . auto-fill-mode)
(org-mode . flyspell-mode))
;; *the* right way to do git
(use-package magit
:defer 0.5
- :bind (("C-x g" . magit-status)
- ("s-g s" . magit-status)
- ("s-g l" . magit-log-buffer-file))
+ :bind (("C-c g g" . magit-status)
+ ("C-c g s" . magit-status)
+ ("C-c g b" . magit-blame-addition)
+ ("C-c g l" . magit-log-buffer-file))
:config
(magit-add-section-hook 'magit-status-sections-hook
'magit-insert-modules
'magit-insert-stashes
'append)
+ ;; (magit-add-section-hook 'magit-status-sections-hook
+ ;; 'magit-insert-ignored-files
+ ;; 'magit-insert-untracked-files
+ ;; 'append)
(setq magit-repository-directories '(("~/" . 0)
("~/src/git/" . 1)))
(nconc magit-section-initial-visibility-alist
ivy-use-virtual-buffers t
ivy-virtual-abbreviate 'abbreviate
ivy-count-format "%d/%d ")
+
+ (defvar b/ivy-ignore-buffer-modes '(magit-mode erc-mode dired-mode))
+ (defun b/ivy-ignore-buffer-p (str)
+ "Return non-nil if str names a buffer with a major mode
+derived from one of `b/ivy-ignore-buffer-modes'.
+
+This function is intended for use with `ivy-ignore-buffers'."
+ (let* ((buf (get-buffer str))
+ (mode (and buf (buffer-local-value 'major-mode buf))))
+ (and mode
+ (apply #'provided-mode-derived-p mode b/ivy-ignore-buffer-modes))))
+ (add-to-list 'ivy-ignore-buffers 'b/ivy-ignore-buffer-p)
+
(ivy-mode 1)
;; :custom-face
;; (ivy-minibuffer-match-face-2 ((t (:background "#e99ce8" :weight semi-bold))))
:delight
:bind (([remap execute-extended-command] . counsel-M-x)
([remap find-file] . counsel-find-file)
- ("C-c x" . counsel-M-x)
+ ("C-c b b" . ivy-switch-buffer)
("C-c f ." . counsel-find-file)
("C-c f l" . counsel-find-library)
("C-c f r" . counsel-recentf)
- ("s-." . counsel-find-file)
- ("s-r" . ivy-switch-buffer)
+ ("C-c x" . counsel-M-x)
:map minibuffer-local-map
("C-r" . counsel-minibuffer-history))
:config
("C-x C-b" . helm-buffers-list)
("C-x C-f" . helm-find-files)
("C-h r" . helm-info-emacs)
- ("s-r" . helm-recentf)
("C-s-r" . helm-resume)
:map helm-map
("<tab>" . helm-execute-persistent-action)
:hook (ibuffer . (lambda () (ibuffer-switch-to-saved-filter-groups "default"))))
(use-package outline
+ :disabled
:hook (prog-mode . outline-minor-mode)
:delight (outline-minor-mode " outl")
:bind
'org-mode b/org-mode-font-lock-keywords t))
(bind-keys
- ("s-t d" . b/lights-off)
- ("s-t l" . b/lights-on))
+ ("C-c t d" . b/lights-off)
+ ("C-c t l" . b/lights-on))
\f
;;; Emacs enhancements & auxiliary packages
"C-c a e" "erc"
"C-c a o" "org"
"C-c a s" "shells"
- "C-c p" "package-management"
- ;; "C-c p e" "package-management/epkg"
- "C-c p s" "straight.el"
- "C-c psa" "all"
- "C-c psp" "package"
+ "C-c b" "buffers"
"C-c c" "compile-and-comments"
"C-c e" "eval"
"C-c f" "files"
"C-c F" "frames"
+ "C-c g" "magit"
"C-S-h" "help(ful)"
"C-c m" "multiple-cursors"
"C-c P" "projectile"
"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")
+ "C-c t" "themes"
+ ;; "s-O" "outline"
+ )
;; prefixes for major modes
(which-key-add-major-mode-key-based-replacements 'message-mode
:delight " typo"
:config
(typo-global-mode 1)
- :hook ((text-mode erc-mode) . typo-mode))
+ :hook (((text-mode erc-mode) . typo-mode)
+ (tex-mode . (lambda ()(typo-mode -1)))))
;; highlight TODOs in buffers
(use-package hl-todo
(add-to-list 'yas-snippet-dirs "~/src/git/guix/etc/snippets" t)
(yas-reload-all)
(setq yas-verbosity yas-verbosity-cur)
+
+ (defun b/yas--maybe-expand-key-filter (cmd)
+ (when (and (yas--maybe-expand-key-filter cmd)
+ (not (bound-and-true-p git-commit-mode)))
+ cmd))
+ (defconst b/yas-maybe-expand
+ '(menu-item "" yas-expand :filter b/yas--maybe-expand-key-filter))
+ (define-key yas-minor-mode-map
+ (kbd "SPC") b/yas-maybe-expand)
+
(yas-global-mode))
(use-package debbugs)
(use-package window
:bind
- (("s-o" . other-window)
- ("s-/ ." . split-window-right)
- ("s-/ ," . split-window-below)
- ("s-/ 0" . delete-window)
- ("s-q" . delete-window))
+ (("C-c w <right>" . split-window-right)
+ ("C-c w <down>" . split-window-below)
+ ("C-c w s l" . split-window-right)
+ ("C-c w s j" . split-window-below)
+ ("C-c w q" . quit-window))
:custom
(split-width-threshold 150))
(use-package windmove
:defer 0.6
:bind
- (("s-h" . windmove-left)
- ("s-j" . windmove-down)
- ("s-k" . windmove-up)
- ("s-l" . windmove-right)
- ("s-H" . windmove-swap-states-left)
- ("s-J" . windmove-swap-states-down)
- ("s-K" . windmove-swap-states-up)
- ("s-L" . windmove-swap-states-right)))
+ (("C-c w h" . windmove-left)
+ ("C-c w j" . windmove-down)
+ ("C-c w k" . windmove-up)
+ ("C-c w l" . windmove-right)
+ ("C-c w H" . windmove-swap-states-left)
+ ("C-c w J" . windmove-swap-states-down)
+ ("C-c w K" . windmove-swap-states-up)
+ ("C-c w L" . windmove-swap-states-right)))
(use-package pass
:commands pass
(use-package biblio)
+(use-package reftex
+ :hook (latex-mode . reftex-mode))
+
+(use-package reftex-cite
+ :after reftex
+ :disabled ; enable to disable
+ ; reftex-cite's default choice
+ ; of previous word
+ :config
+ (defun reftex-get-bibkey-default ()
+ "If the cursor is in a citation macro, return the word before the macro."
+ (let* ((macro (reftex-what-macro 1)))
+ (save-excursion
+ (when (and macro (string-match "cite" (car macro)))
+ (goto-char (cdr macro)))
+ (reftex-this-word)))))
+
\f
;;; Email (with Gnus)
read-mail-command 'gnus)
(use-package gnus
- :bind (("s-m" . gnus)
- ("s-M" . gnus-unplugged))
+ :bind (("s-m" . gnus)
+ ("s-M" . gnus-unplugged)
+ ("C-c a m" . gnus)
+ ("C-c a M" . gnus-unplugged))
:init
(setq
gnus-select-method '(nnnil "")
;; (: gnus-group-split-fancy "INBOX" t "INBOX")
;; gnu
(list ".*<\\(.*\\)\\.\\(non\\)?gnu\\.org>.*" "l.\\1")
- ;; *@lists.sr.ht
- (list ".*<~\\(.*\\)/\\(.*\\)@lists.sr.ht>" "l.~\\1.\\2")
+ ;; *@lists.sr.ht, omitting one dot if present
+ ;; add more \\.?\\([^.@]*\\) if needed
+ (list ".*<~\\(.*\\)/\\([^.@]*\\)\\.?\\([^.@]*\\)@lists.sr.ht>.*" "l.~\\1.\\2\\3")
;; webmasters
(from "webmasters\\(-comment\\)?@gnu\\.org" "webmasters")
;; other
(list ".*atreus.freelists.org" "l.atreus")
(list ".*deepspec.lists.cs.princeton.edu" "l.deepspec")
;; (list ".*haskell-art.we.lurk.org" "l.haskell.art") ;d
- (list ".*haskell-cafe.haskell.org" "l.haskell.cafe")
+ (list ".*haskell-cafe.haskell.org" "l.haskell-cafe")
;; (list ".*notmuch.notmuchmail.org" "l.notmuch") ;u
;; (list ".*dev.lists.parabola.nu" "l.parabola-dev") ;u
;; ----------------------------------
(nnimap-split-fancy (|
;; (: gnus-registry-split-fancy-with-parent)
;; se212-f19
- ("subject" "SE\\s-?212" "course.se463-s19")
- (from "SE\\s-?212" "course.se463-s19")
+ ("subject" "SE\\s-?212" "course.se212-f19")
+ (from "SE\\s-?212" "course.se212-f19")
;; catch-all
"INBOX")))
(nnimap "csc"
;;; IRC (with ERC and ZNC)
(use-package erc
- :bind (("C-c a e b" . erc-switch-to-buffer)
+ :bind (("C-c b e" . erc-switch-to-buffer)
:map erc-mode-map
("M-a" . erc-track-switch-buffer))
:custom
(erc-server-reconnect-attempts 5)
(erc-server-reconnect-timeout 3)
:config
- (with-eval-after-load 'ivy
- ;; ignore channel buffer names
- (add-to-list 'ivy-ignore-buffers "^#"))
(defun erc-cmd-OPME ()
"Request chanserv to op me."
(erc-message "PRIVMSG"
(use-package erc-track
:after erc
+ :bind (("C-c a e t d" . erc-track-disable)
+ ("C-c a e t e" . erc-track-enable))
:custom
(erc-track-enable-keybindings nil)
(erc-track-exclude-types '("JOIN" "MODE" "NICK" "PART" "QUIT"