X-Git-Url: https://git.shemshak.org/gitweb.cgi/~bandali/configs/blobdiff_plain/05f602d9cfaf567dd0d21bd5c15e9261eb08465c..f333db13e8ab042060abdf5b5c1433fb0ad198a0:/init.org?ds=inline diff --git a/init.org b/init.org index b6fe1b8..3af265d 100644 --- a/init.org +++ b/init.org @@ -645,6 +645,19 @@ Enable =winner-mode=. (cons msg code))) #+end_src +*** Search for non-ASCII characters + +I’d like non-ASCII characters such as ‘’“”«»‹›áⓐ𝒶 to be selected when +I search for their ASCII counterpart. Shoutout to [[http://endlessparentheses.com/new-in-emacs-25-1-easily-search-non-ascii-characters.html][endlessparentheses]] +for this. + +#+begin_src emacs-lisp +(setq search-default-mode #'char-fold-to-regexp) + +;; uncomment to extend this behaviour to query-replace +;; (setq replace-char-fold t) +#+end_src + ** Bindings #+begin_src emacs-lisp @@ -703,23 +716,17 @@ customizing it. (use-package evil :demand t ;; :hook (org-src-mode . evil-motion-state) - :init - (setq evil-want-integration nil) :config (evil-mode 1) (general-swap-key nil '(normal motion) ";" ":") - (setq - evil-want-visual-char-semi-exclusive t - evil-move-beyond-eol t - ;; evil-move-cursor-back nil - ) + (setq evil-want-visual-char-semi-exclusive t) - ;; motion state modes - (dolist (mode '(ebdb-mode - helpful-mode - view-mode)) - (evil-set-initial-state mode 'motion)) + ;; custom mode state mappings + (dolist (mspair '((ebdb-mode . emacs) + (helpful-mode . motion) + (view-mode . motion))) + (evil-set-initial-state (car mspair) (cdr mspair))) ;; fix tab and indentation in src blocks inside org-mode buffer ;; also see https://git.sr.ht/~bandali/dotfiles/commit/0e2ffd584aafdd4cf256bcdf2473f01c3aaaed55 @@ -731,7 +738,14 @@ customizing it. (unbind-key "C-a" evil-insert-state-map) (unbind-key "C-e" evil-insert-state-map) (unbind-key "C-p" evil-insert-state-map) - (unbind-key "C-n" evil-insert-state-map)) + (unbind-key "C-n" evil-insert-state-map) + (unbind-key "C-k" evil-insert-state-map) + (bind-keys + :map evil-insert-state-map + ("C-k" . kill-line) + ("C-S-k" . evil-insert-digraph) + :map evil-motion-state-map + ([down-mouse-1] . nil))) #+end_src #+begin_src emacs-lisp @@ -751,6 +765,27 @@ customizing it. (push #'minibufferp evil-escape-inhibit-functions)) #+end_src +#+begin_src emacs-lisp +(use-package evil-nerd-commenter + :after evil + :general + (nmap + "gc" 'evilnc-comment-operator + "gy" 'evilnc-copy-and-comment-lines)) +#+end_src + +#+begin_src emacs-lisp +(use-package evil-surround + :after evil + :general + (omap + "s" 'evil-surround-edit + "S" 'evil-Surround-edit) + (vmap + "S" 'evil-surround-region + "gS" 'evil-Surround-region)) +#+end_src + #+begin_src emacs-lisp (amin--leader-keys "/" '(:ignore t :wk "search") @@ -786,6 +821,12 @@ customizing it. "w" '(:ignore t :wk "window") "w o" 'other-window + "w 0" 'delete-window + "w 1" 'delete-other-windows + "w 2" 'split-window-below + "w 3" 'split-window-right + "w u" 'winner-undo + "w r" 'winner-redo "q" '(:ignore t :wk "quit") "q q" 'save-buffers-kill-terminal) @@ -946,6 +987,9 @@ Not just how I do git, but /the/ way to do git. (setq magit-repository-directories '(("~/.emacs.d/" . 0) ("~/src/git/" . 1))) + (nconc magit-section-initial-visibility-alist + '(([unpulled status] . show) + ([unpushed status] . show))) :custom-face (magit-diff-file-heading ((t (:weight normal))))) #+end_src @@ -1204,12 +1248,14 @@ TODO: break this giant source block down into individual org sections. (list (regexp-quote (system-name)) nil nil))) (use-package undo-tree - :bind (("C-?" . undo-tree-undo) - ("M-_" . undo-tree-redo)) :config - (global-undo-tree-mode) - (setq undo-tree-mode-lighter "" - undo-tree-auto-save-history t)) + (global-undo-tree-mode -1)) + ;; :bind (("C-?" . undo-tree-undo) + ;; ("M-_" . undo-tree-redo)) + ;; :config + ;; (global-undo-tree-mode) + ;; (setq undo-tree-mode-lighter "" + ;; undo-tree-auto-save-history t)) #+end_src * Editing @@ -1877,6 +1923,9 @@ Hopefully temporary. :subscribed-channels '(general) :full-and-display-names t) (add-to-list 'swiper-font-lock-exclude 'slack-message-buffer-mode t) + (setq lui-time-stamp-format "[%Y-%m-%d %H:%M:%S]" + lui-time-stamp-only-when-changed-p t + lui-time-stamp-position 'right) :bind (("C-c s s" . slack-start) ("C-c s u" . slack-select-unread-rooms) @@ -1956,6 +2005,13 @@ For when I /have to/ use GH. (setq magithub-clone-default-directory "~/src/git")) #+end_src +** [[https://github.com/peterwvj/eshell-up][eshell-up]] + +#+begin_src emacs-lisp +(use-package eshell-up + :after eshell) +#+end_src + * Email #+begin_src emacs-lisp @@ -2060,6 +2116,8 @@ For when I /have to/ use GH. (body "\nBest,\namin\n")) ("gnu.*" (address "bandali@gnu.org")) + ((header "subject" "ThankCRM") + (to "webmasters-comment@gnu.org")) ("nnimap\\+uwaterloo:.*" (address "abandali@uwaterloo.ca") (gcc "\"nnimap+uwaterloo:Sent Items\""))))) @@ -2097,7 +2155,17 @@ For when I /have to/ use GH. #+begin_src emacs-lisp (use-package message :config - (setq message-kill-buffer-on-exit t + (defconst message-cite-style-bandali + '((message-cite-function 'message-cite-original) + (message-citation-line-function 'message-insert-formatted-citation-line) + (message-cite-reply-position 'traditional) + (message-yank-prefix "> ") + (message-yank-cited-prefix ">") + (message-yank-empty-prefix ">") + (message-citation-line-format "Hi %F,\n\nOn %Y-%m-%d %l:%M %p, %N wrote:")) + "Citation style based on Mozilla Thunderbird's. Use with message-cite-style.") + (setq message-cite-style 'message-cite-style-bandali + message-kill-buffer-on-exit t message-send-mail-function 'message-send-mail-with-sendmail message-sendmail-envelope-from 'header message-dont-reply-to-names @@ -2141,7 +2209,7 @@ Convenient footnotes in =message-mode=. footnote-style 'unicode)) #+end_src -** supercite +** COMMENT supercite #+begin_src emacs-lisp (use-package supercite @@ -2151,20 +2219,32 @@ Convenient footnotes in =message-mode=. ;; sc-cite-blank-lines-p t sc-citation-leader "" sc-reference-tag-string "" + sc-preferred-header-style 5 ; (sc-header-author-writes) sc-auto-fill-region-p nil sc-confirm-always-p nil) :config - (defun amin--sc-header () - "Hi ,\n\n writes:" - (let ((sc-mumble "") - (whofrom (sc-whofrom))) - (if whofrom - (insert (sc-hdr "Hi " (sc-mail-field "sc-firstname") ",\n\n") - sc-reference-tag-string - whofrom - " writes:\n")))) - (add-to-list 'sc-rewrite-header-list '(amin--sc-header) t) - (setq sc-preferred-header-style (1- (length sc-rewrite-header-list))) + ;; (defun amin--sc-header-on-wrote () + ;; "\"On , wrote:\" unless: + ;; 1. the \"sc-author\" field cannot be found, in which case nothing is inserted; + ;; 2. the \"date\" field is missing in which case only the from part is printed." + ;; (let ((sc-mumble "") + ;; (whofrom (sc-whofrom))) + ;; (if whofrom + ;; (insert sc-reference-tag-string + ;; (sc-hdr "On " (sc-mail-field "date") ", ") + ;; (sc-hdr "" (sc-mail-field "sc-author")) " wrote:\n")))) + ;; (defun amin--sc-header () + ;; "Hi ,\n\n writes:" + ;; (let ((sc-mumble "") + ;; (whofrom (sc-whofrom))) + ;; (if whofrom + ;; (insert (sc-hdr "Hi " (sc-mail-field "sc-firstname") ",\n\n") + ;; sc-reference-tag-string + ;; whofrom + ;; " writes:\n")))) + ;; (add-to-list 'sc-rewrite-header-list '(amin--sc-header) t) + ;; (add-to-list 'sc-rewrite-header-list '(amin--sc-header-on-wrote) t) + ;; (setq sc-preferred-header-style (1- (length sc-rewrite-header-list))) (add-hook 'mail-citation-hook 'sc-cite-original)) #+end_src