Add functionality for typographic quotes
Finally getting around to adding nicer quotes from Artur's Endless Parenthesis blog. Org is getting prettier and prettier.
This commit is contained in:
parent
620a1bf670
commit
8b53a1654f
2 changed files with 85 additions and 3 deletions
|
@ -35,6 +35,58 @@ Since I use ellipsis in my writing... I like to /change/ how org renders a colla
|
||||||
org-src-fontify-natively t ;; Pretty code blocks
|
org-src-fontify-natively t ;; Pretty code blocks
|
||||||
org-hide-emphasis-markers t)
|
org-hide-emphasis-markers t)
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
** Typographic Quotes
|
||||||
|
According to [[http://endlessparentheses.com/prettify-your-quotation-marks.html][Artur Malabarba]] of [[http://endlessparentheses.com/prettify-you-apostrophes.html][Endless Parenthesis]] blog, I type a /straight quote/, ", Emacs actually inserts Unicode rounded quotes, like “this”. This idea isn’t how a file is /displayed/, but actually how the file is /made/. Time will tell if this idea works with my auxiliary functions on my phone, like [[https://play.google.com/store/apps/details?id=com.orgzly&hl=en_US&gl=US][Orgzly]] and [[https://github.com/amake/orgro][Orgro]].
|
||||||
|
|
||||||
|
Stealing his function so that “quotes” just work to insert /rounded/ quotation marks:
|
||||||
|
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(define-key org-mode-map "\"" #'endless/round-quotes)
|
||||||
|
|
||||||
|
(defun endless/round-quotes (italicize)
|
||||||
|
"Insert “” and leave point in the middle.
|
||||||
|
With prefix argument ITALICIZE, insert /“”/ instead
|
||||||
|
\(meant for org-mode).
|
||||||
|
Inside a code-block, just call `self-insert-command'."
|
||||||
|
(interactive "P")
|
||||||
|
(if (and (derived-mode-p 'org-mode)
|
||||||
|
(org-in-block-p '("src" "latex" "html")))
|
||||||
|
(call-interactively #'self-insert-command)
|
||||||
|
(if (looking-at "”[/=_\\*]?")
|
||||||
|
(goto-char (match-end 0))
|
||||||
|
(when italicize
|
||||||
|
(if (derived-mode-p 'markdown-mode)
|
||||||
|
(insert "__")
|
||||||
|
(insert "//"))
|
||||||
|
(forward-char -1))
|
||||||
|
(insert "“”")
|
||||||
|
(forward-char -1))))
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
Stealing function for automatically adding a single quote (not in pairs):
|
||||||
|
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(define-key org-mode-map "'" #'endless/apostrophe)
|
||||||
|
|
||||||
|
(defun endless/apostrophe (opening)
|
||||||
|
"Insert ’ in prose or `self-insert-command' in code.
|
||||||
|
With prefix argument OPENING, insert ‘’ instead and
|
||||||
|
leave point in the middle.
|
||||||
|
Inside a code-block, just call `self-insert-command'."
|
||||||
|
(interactive "P")
|
||||||
|
(if (and (derived-mode-p 'org-mode)
|
||||||
|
(org-in-block-p '("src" "latex" "html")))
|
||||||
|
(call-interactively #'self-insert-command)
|
||||||
|
(if (looking-at "['’][=_/\\*]?")
|
||||||
|
(goto-char (match-end 0))
|
||||||
|
(if (null opening)
|
||||||
|
(insert "’")
|
||||||
|
(insert "‘’")
|
||||||
|
(forward-char -1)))))
|
||||||
|
#+END_SRC
|
||||||
|
Quote: “From this time forward, I shouldn’t have to worry about quotes.”
|
||||||
|
|
||||||
|
*Note:* I still need to worry about how quotes affect [[file:ha-org.org::*Spell Checking][spell checking]].
|
||||||
* Org Beautify
|
* Org Beautify
|
||||||
I really want to use the Org Beautify package, but it overrides my darker themes (and all I really want is headlines to behave).
|
I really want to use the Org Beautify package, but it overrides my darker themes (and all I really want is headlines to behave).
|
||||||
|
|
||||||
|
|
36
ha-org.org
36
ha-org.org
|
@ -26,9 +26,8 @@ A literate programming file for configuring org-mode and those files.
|
||||||
Org is a /large/ complex beast with a gazillion settings, so I discuss these later in this document.
|
Org is a /large/ complex beast with a gazillion settings, so I discuss these later in this document.
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(use-package org
|
(use-package org
|
||||||
:straight (:type built-in) ; Problems with the 9.4.4 version
|
;; :straight (:type built-in) ; Use with problems from 9.4.4 version
|
||||||
;; :straight (:type git :protocol ssh :repo "git://git.sv.gnu.org/emacs/org-mode.git")
|
:mode ("\\.org" . org-mode) ; Addresses an odd warning
|
||||||
:mode ("\\.org" . org-mode) ; Addresses an odd warning
|
|
||||||
:init
|
:init
|
||||||
<<variables>>
|
<<variables>>
|
||||||
<<org-todo>>
|
<<org-todo>>
|
||||||
|
@ -431,6 +430,12 @@ Let's hook some spell-checking into org files, and actually all text files. We'l
|
||||||
(use-package flyspell
|
(use-package flyspell
|
||||||
:hook (text-mode . flyspell-mode)
|
:hook (text-mode . flyspell-mode)
|
||||||
:bind ("M-S" . ha-fix-last-spelling)
|
:bind ("M-S" . ha-fix-last-spelling)
|
||||||
|
:init
|
||||||
|
;; Tell ispell.el that ’ can be part of a word.
|
||||||
|
(setq ispell-local-dictionary-alist
|
||||||
|
`((nil "[[:alpha:]]" "[^[:alpha:]]"
|
||||||
|
"['\x2019]" nil ("-B") nil utf-8)))
|
||||||
|
|
||||||
:config
|
:config
|
||||||
(defun ha-fix-last-spelling (count)
|
(defun ha-fix-last-spelling (count)
|
||||||
"Jump to the last misspelled word, and correct it."
|
"Jump to the last misspelled word, and correct it."
|
||||||
|
@ -445,8 +450,33 @@ Let's hook some spell-checking into org files, and actually all text files. We'l
|
||||||
"s p" '("previous misspell" . evil-prev-flyspell-error)
|
"s p" '("previous misspell" . evil-prev-flyspell-error)
|
||||||
"s n" '("next misspell" . evil-next-flyspell-error)))
|
"s n" '("next misspell" . evil-next-flyspell-error)))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Sure, the keys, ~[ s~ and ~] s~ can jump to misspelled words, and use ~M-$~ to correct them, but I'm getting used to these leaders.
|
Sure, the keys, ~[ s~ and ~] s~ can jump to misspelled words, and use ~M-$~ to correct them, but I'm getting used to these leaders.
|
||||||
|
|
||||||
|
According to [[http://endlessparentheses.com/ispell-and-apostrophes.html][Artur Malabarba]], we can turn on rounded apostrophe's, like =‘= (left single quotation mark). The idea is to not send the quote to the sub-process:
|
||||||
|
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(defun endless/replace-apostrophe (args)
|
||||||
|
"Don't send ’ to the subprocess."
|
||||||
|
(cons (replace-regexp-in-string
|
||||||
|
"’" "'" (car args))
|
||||||
|
(cdr args)))
|
||||||
|
|
||||||
|
(advice-add #'ispell-send-string :filter-args #'endless/replace-apostrophe)
|
||||||
|
|
||||||
|
(defun endless/replace-quote (args)
|
||||||
|
"Convert ' back to ’ from the subprocess."
|
||||||
|
(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
|
||||||
|
|
||||||
|
The end result? No misspellings. Isn‘t this nice?
|
||||||
|
|
||||||
Of course I need a thesaurus, and I'm installing [[https://github.com/SavchenkoValeriy/emacs-powerthesaurus][powerthesaurus]]:
|
Of course I need a thesaurus, and I'm installing [[https://github.com/SavchenkoValeriy/emacs-powerthesaurus][powerthesaurus]]:
|
||||||
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
|
Loading…
Reference in a new issue