[emacs] assimilate and use typo.el, along with ispell workaround
[~bandali/configs] / init.org
index 4695635..13a3c8f 100644 (file)
--- a/init.org
+++ b/init.org
@@ -708,6 +708,8 @@ In short, my favourite way of life.
                  ("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
                t))
 
+(use-package ox-beamer)
+
 (use-package org-notmuch
   :after (:any org notmuch))
 
@@ -781,16 +783,16 @@ Not just how I do git, but /the/ way to do git.
    ("SPC" . magit-status)
    ("s"   . magit-status)
    ("S"   . magit-status-prefix)
-   ("B"   . magit-blame)
+   ("B"   . magit-blame-addition)
    ("C"   . magit-clone)
-   ("f"   . magit-fetch)
-   ("F"   . magit-pull)
-   ("P"   . magit-push)
+   ("f"   . magit-fetch-other)
+   ("F"   . magit-pull-branch)
+   ("P"   . magit-push-other)
    ("p"   . magit-dispatch-popup)
-   ("c c" . magit-commit)
+   ("c c" . magit-commit-create)
    ("c a" . magit-commit-amend)
    ("b b" . magit-checkout)
-   ("b c" . magit-branch))
+   ("b c" . magit-branch-create))
   :config
   (magit-add-section-hook 'magit-status-sections-hook
                           'magit-insert-modules
@@ -1080,6 +1082,31 @@ TODO: break this giant source block down into individual org sections.
 
   ;; Only flycheck when I actually save the buffer
   (setq flycheck-check-syntax-automatically '(mode-enabled save)))
+
+;; http://endlessparentheses.com/ispell-and-apostrophes.html
+(use-package ispell
+  :config
+  ;; ’ can be part of a word
+  (setq ispell-local-dictionary-alist
+        `((nil "[[:alpha:]]" "[^[:alpha:]]"
+               "['\x2019]" nil ("-B") nil utf-8)))
+  ;; don't send ’ to the subprocess
+  (defun endless/replace-apostrophe (args)
+    (cons (replace-regexp-in-string
+           "’" "'" (car args))
+          (cdr args)))
+  (advice-add #'ispell-send-string :filter-args
+              #'endless/replace-apostrophe)
+
+  ;; convert ' back to ’ from the subprocess
+  (defun endless/replace-quote (args)
+    (if (not (derived-mode-p 'org-mode))
+        args
+      (cons (replace-regexp-in-string
+             "'" "’" (car args))
+            (cdr args))))
+  (advice-add #'ispell-parse-output :filter-args
+              #'endless/replace-quote))
 #+end_src
 * Programming modes
 
@@ -1514,7 +1541,7 @@ Also see [[https://www.emacswiki.org/emacs/rebox2][rebox2]].
         ("C-s" . isearch-forward)
         ("C-r" . isearch-backward)
         ("j"   . pdf-view-next-line-or-next-page)
-        ("j"   . pdf-view-previous-line-or-previous-page)))
+        ("k"   . pdf-view-previous-line-or-previous-page)))
 #+end_src
 
 ** anzu
@@ -1523,6 +1550,15 @@ Also see [[https://www.emacswiki.org/emacs/rebox2][rebox2]].
 (use-package anzu)
 #+end_src
 
+** typo.el
+
+#+begin_src emacs-lisp
+(use-package typo
+  :config
+  (typo-global-mode 1)
+  :hook (text-mode . typo-mode))
+#+end_src
+
 * Email
 
 #+begin_src emacs-lisp
@@ -1552,6 +1588,7 @@ Also see [[https://www.emacswiki.org/emacs/rebox2][rebox2]].
         message-sendmail-envelope-from 'header
         ;; message-directory "drafts"
         message-user-fqdn "aminb.org")
+  ;; (add-hook 'message-mode-hook 'electric-quote-local-mode)
   (add-hook 'message-mode-hook
             (lambda () (setq fill-column 65
                         message-fill-column 65)))