Skip to content

Instantly share code, notes, and snippets.

@ibarland
Created January 4, 2016 03:36
Show Gist options
  • Save ibarland/1c17e59d0e524b710cbd to your computer and use it in GitHub Desktop.
Save ibarland/1c17e59d0e524b710cbd to your computer and use it in GitHub Desktop.
emacs-lisp for entering digraphs (C-c d followed by two normal characters, to insert a unicode character)
; For vim's digraphs (in .el form) see:
; https://raw.githubusercontent.com/JNRowe/emacs-configs/master/digraphs.el
; This file omits characters I'd never use, and also uses my own mnemonics.
(define-prefix-command 'digraph-map)
(global-set-key (kbd "C-c d") digraph-map)
(defun register-digraphs (key digraphs &rest _description)
"Given a list of 2-char digraphs, and a resulting (unicode) character, enable each digraph via prefix-command `digraph-map`"
(mapc (lambda (d) (define-key digraph-map d `(lambda () (interactive) (insert ,key)))) digraphs))
; TODO: keep a set of all defined digraph-strings, and warn if one is repeated.
(register-digraphs "◊" '("<>" "()"))
(register-digraphs "␣" '("sp" " "))
(register-digraphs "—" '("--" "em" "-m" "-3")) ; mdash
(register-digraphs "–" '("en" "-n" "-2")) ; ndash
(register-digraphs "°" '("dg" "^o")) ; deg
(register-digraphs "±" '("+-")) ; pm
(register-digraphs "∓" '("-+")) ; mp
(register-digraphs "Ñ" '("~N"))
(register-digraphs "ñ" '("~n"))
(register-digraphs "Ç" '("C,"))
(register-digraphs "ç" '("c," ",c"))
(register-digraphs "Ç" '(",C" "C,"))
(register-digraphs "¿" '("i?")) ; iexcl
(register-digraphs "¡" '("i!")) ; iquest
(register-digraphs "ß" '("ss" "sz"))
(register-digraphs "Ǣ" '("AE"))
(register-digraphs "ǣ" '("ae"))
(register-digraphs "¢" '("c|"))
(register-digraphs "£" '("$$" "lb"))
(register-digraphs "¥" '("Y="))
(register-digraphs "¤" '("ox"))
(register-digraphs "€" '("E="))
(register-digraphs "©" '("cO")) ; copy
(register-digraphs "®" '("rO")) ; reg
(register-digraphs "™" '("TM")) ; trade
(register-digraphs "℠" '("SM"))
(register-digraphs "℅" '("co")) ; (c/o)
(register-digraphs "№" '("N0"))
(register-digraphs "℗" '("PO"))
(register-digraphs "℞" '("Rx"))
; ligatures
(register-digraphs "ff" '("ff"))
(register-digraphs "fi" '("fi"))
(register-digraphs "fl" '("fl"))
(register-digraphs "ſt" '("ft"))
(register-digraphs "st" '("st"))
; superscripts
(register-digraphs "⁰" '("^0"))
(register-digraphs "¹" '("^1"))
(register-digraphs "²" '("^2"))
(register-digraphs "³" '("^3"))
(register-digraphs "⁴" '("^4"))
(register-digraphs "⁵" '("^5"))
(register-digraphs "⁶" '("^6"))
(register-digraphs "⁷" '("^7"))
(register-digraphs "⁸" '("^8"))
(register-digraphs "⁹" '("^9"))
(register-digraphs "⁺" '("^+"))
(register-digraphs "⁻" '("^-"))
(register-digraphs "⁼" '("^="))
(register-digraphs "⁽" '("^("))
(register-digraphs "⁾" '("^)"))
(register-digraphs "ⁿ" '("^n"))
; subscripts
(register-digraphs "₀" '("_0"))
(register-digraphs "₁" '("_1"))
(register-digraphs "₂" '("_2"))
(register-digraphs "₃" '("_3"))
(register-digraphs "₄" '("_4"))
(register-digraphs "₅" '("_5"))
(register-digraphs "₆" '("_6"))
(register-digraphs "₇" '("_7"))
(register-digraphs "₈" '("_8"))
(register-digraphs "₉" '("_9"))
(register-digraphs "₊" '("_+"))
(register-digraphs "₋" '("_-"))
(register-digraphs "₌" '("_="))
(register-digraphs "₍" '("_("))
(register-digraphs "₎" '("_)"))
;fractions
(register-digraphs "¼" '("14"))
(register-digraphs "½" '("12"))
(register-digraphs "¾" '("34"))
(register-digraphs "⅓" '("13"))
(register-digraphs "⅔" '("23"))
(register-digraphs "⅕" '("15"))
(register-digraphs "⅖" '("25"))
(register-digraphs "⅗" '("35"))
(register-digraphs "⅘" '("45"))
(register-digraphs "⅙" '("16"))
(register-digraphs "⅚" '("56"))
(register-digraphs "⅛" '("18"))
(register-digraphs "⅜" '("38"))
(register-digraphs "⅝" '("58"))
(register-digraphs "⅞" '("78"))
; math-dot
(register-digraphs "·" '("md"))
(register-digraphs "×" '("mx")) ; times
; greek letters
(register-digraphs "Α" '("gA"))
(register-digraphs "Β" '("gB"))
(register-digraphs "Γ" '("gG"))
(register-digraphs "Δ" '("gD"))
(register-digraphs "Ε" '("gE"))
(register-digraphs "Ζ" '("gZ"))
(register-digraphs "Η" '("gY"))
(register-digraphs "Θ" '("gH"))
(register-digraphs "Ι" '("gI"))
(register-digraphs "Κ" '("gK"))
(register-digraphs "Λ" '("gL"))
(register-digraphs "Μ" '("gM"))
(register-digraphs "Ν" '("gN"))
(register-digraphs "Ξ" '("gC"))
(register-digraphs "Ο" '("gO"))
(register-digraphs "Π" '("gP"))
(register-digraphs "Ρ" '("gR"))
(register-digraphs "Σ" '("gS"))
(register-digraphs "Τ" '("gT"))
(register-digraphs "Υ" '("gU"))
(register-digraphs "Φ" '("gF"))
(register-digraphs "Χ" '("gX"))
(register-digraphs "Ψ" '("gQ"))
(register-digraphs "Ω" '("gW"))
(register-digraphs "α" '("ga"))
(register-digraphs "β" '("gb"))
(register-digraphs "γ" '("gg"))
(register-digraphs "δ" '("gd"))
(register-digraphs "ε" '("ge"))
(register-digraphs "ζ" '("gz"))
(register-digraphs "η" '("gy"))
(register-digraphs "θ" '("gh"))
(register-digraphs "ι" '("gi"))
(register-digraphs "κ" '("gk"))
(register-digraphs "λ" '("gl"))
(register-digraphs "μ" '("gm"))
(register-digraphs "ν" '("gn"))
(register-digraphs "ξ" '("gc"))
(register-digraphs "ο" '("go"))
(register-digraphs "π" '("gp"))
(register-digraphs "ρ" '("gr"))
(register-digraphs "σ" '("gs"))
(register-digraphs "τ" '("gt"))
(register-digraphs "υ" '("gu"))
(register-digraphs "φ" '("gf"))
(register-digraphs "χ" '("gx"))
(register-digraphs "ψ" '("gq"))
(register-digraphs "ω" '("gw"))
; Russian:
;(register-digraphs "а" '("ra"))
;(register-digraphs "б" '("rb"))
;(register-digraphs "в" '("rv"))
;(register-digraphs "г" '("rg"))
;(register-digraphs "д" '("rd"))
;(register-digraphs "е" '("re"))
;(register-digraphs "ж" '("rj"))
;(register-digraphs "з" '("rz"))
;(register-digraphs "и" '("ri"))
;(register-digraphs "й" '("rI"))
;(register-digraphs "к" '("rk"))
;(register-digraphs "л" '("rl"))
;(register-digraphs "м" '("rm"))
;(register-digraphs "н" '("rn"))
;(register-digraphs "о" '("ro"))
;(register-digraphs "п" '("rp"))
;(register-digraphs "р" '("rr"))
;(register-digraphs "с" '("rs"))
;(register-digraphs "т" '("rt"))
;(register-digraphs "у" '("ru"))
;(register-digraphs "ф" '("rf")) ; beware right-floor
;(register-digraphs "х" '("rh"))
;(register-digraphs "ц" '("rc")) ; cz or ts; beware right-ceiling
;(register-digraphs "ч" '("rC")) ; che
;(register-digraphs "ш" '("rS")) ; sh
; Hebrew:
;(register-digraphs "א" '("hA"))
;(register-digraphs "ב" '("hB"))
;(register-digraphs "ג" '("hG"))
;(register-digraphs "ד" '("hD"))
;(register-digraphs "ה" '("hH"))
;(register-digraphs "ו" '("hW"))
;(register-digraphs "ז" '("hZ"))
;(register-digraphs "ח" '("hX"))
;(register-digraphs "ט" '("ht")) ; Teth "t"
;(register-digraphs "ת" '("hT")) ; Taw "t"
;(register-digraphs "י" '("hJ"))
;(register-digraphs "ך" '("hK")) ; kaf
;(register-digraphs "כ" '("hK")) ; kaf
;(register-digraphs "ל" '("hL"))
;(register-digraphs "ם" '("hm")) ; mem
;(register-digraphs "מ" '("hM")) ; mem
;(register-digraphs "ן" '("hn")) ; nun
;(register-digraphs "נ" '("hN")) ; nun
;(register-digraphs "ס" '("hs")) ; samekh
;(register-digraphs "ע" '("hE"))
;(register-digraphs "ף" '("hp")) ; pe
;(register-digraphs "פ" '("hP")) ; pe
;(register-digraphs "ץ" '("hz")) ; tsade
;(register-digraphs "צ" '("hZ")) ; tsade
;(register-digraphs "ק" '("hQ"))
;(register-digraphs "ר" '("hR"))
;(register-digraphs "ש" '("hS")) ; shin
; Roman numerals (who knew?)
(register-digraphs "Ⅰ" '("1R"))
(register-digraphs "Ⅱ" '("2R"))
(register-digraphs "Ⅲ" '("3R"))
(register-digraphs "Ⅳ" '("4R"))
(register-digraphs "Ⅴ" '("5R"))
(register-digraphs "Ⅵ" '("6R"))
(register-digraphs "Ⅶ" '("7R"))
(register-digraphs "Ⅷ" '("8R"))
(register-digraphs "Ⅸ" '("9R"))
(register-digraphs "Ⅹ" '("aR"))
(register-digraphs "Ⅺ" '("bR"))
(register-digraphs "Ⅻ" '("cR"))
(register-digraphs "ⅰ" '("1r"))
(register-digraphs "ⅱ" '("2r"))
(register-digraphs "ⅲ" '("3r"))
(register-digraphs "ⅳ" '("4r"))
(register-digraphs "ⅴ" '("5r"))
(register-digraphs "ⅵ" '("6r"))
(register-digraphs "ⅶ" '("7r"))
(register-digraphs "ⅷ" '("8r"))
(register-digraphs "ⅸ" '("9r"))
(register-digraphs "ⅹ" '("ar"))
(register-digraphs "ⅺ" '("br"))
(register-digraphs "ⅻ" '("cr"))
(register-digraphs "←" '("<-"))
(register-digraphs "↑" '("^|"))
(register-digraphs "→" '("->"))
(register-digraphs "↓" '("v|"))
;(register-digraphs "↔" '())
(register-digraphs "↕" '("^v"))
(register-digraphs "⇐" '("<="))
(register-digraphs "⇒" '("=>"))
(register-digraphs "⇔" '("=="))
(register-digraphs "¬" '("-,"))
(register-digraphs "∧" '("&&"))
(register-digraphs "∧" '("AN"))
(register-digraphs "∨" '("||"))
(register-digraphs "∨" '("OR"))
(register-digraphs "∀" '("FA"))
(register-digraphs "∃" '("TE"))
(register-digraphs "∅" '("/0"))
(register-digraphs "∩" '("(U"))
(register-digraphs "∪" '(")U"))
(register-digraphs "∈" '("(-"))
(register-digraphs "∋" '("-)"))
(register-digraphs "∏" '("*P"))
(register-digraphs "∑" '("+Z"))
(register-digraphs "∆" '("DE"))
(register-digraphs "∇" '("NB"))
(register-digraphs "∂" '("dP"))
(register-digraphs "∗" '("*-")) ; lowast
(register-digraphs "∘" '("Ob" "fg")) ; for function-composition, and hollow-bullet?
(register-digraphs "∙" '("Sb"))
(register-digraphs "√" '("sq"))
(register-digraphs "∝" '("0("))
(register-digraphs "∞" '("00")) ; (infinity)
(register-digraphs "∟" '("-L"))
(register-digraphs "∠" '("-V"))
(register-digraphs "∥" '("PP")) ; (note: "||" used by LOGICAL-OR)
(register-digraphs "≤" '("<=" "le"))
(register-digraphs "≥" '(">=" "ge"))
(register-digraphs "≠" '("!=" "ne"))
(register-digraphs "⋮" '("':")) ; TRICOLON
(register-digraphs "⋮" '(":3"))
(register-digraphs "⁞" '(":4")) ; VERTICAL FOUR DOTS
(register-digraphs "…" '(".." ".3")) ; hellip
(register-digraphs "‥" '(".2"))
(register-digraphs "′" '("''" "p'" "p1")) ; prime
(register-digraphs "″" '("p2")) ; Prime DOUBLE PRIME
(register-digraphs "‴" '("p3")) ; TRIPLE PRIME
(register-digraphs "⁗" '("p4")) ; QUADRUPLE PRIME
(register-digraphs "⁇" '("??")) ; DOUBLE QUESTION MARK
(register-digraphs "⁈" '("?!")) ; QUESTION EXCLAMATION MARK
(register-digraphs "⁉" '("!?")) ; EXCLAMATION QUESTION MARK
(register-digraphs "⊥" '("-T"))
; math-<
(register-digraphs "〈" '("m<"))
(register-digraphs "〉" '("m>"))
(register-digraphs "∴" '(".:"))
(register-digraphs "∶" '(":R"))
(register-digraphs "∷" '("::"))
(register-digraphs "∼" '("~1"))
(register-digraphs "≈" '("~2"))
(register-digraphs "≈" '("~~"))
(register-digraphs "≡" '("=3"))
;(register-digraphs "≪" '("<<"))
;(register-digraphs "≫" '(">>"))
(register-digraphs "≮" '("/<"))
(register-digraphs "≯" '("/>"))
(register-digraphs "⊂" '("(C"))
(register-digraphs "⊃" '(")C"))
(register-digraphs "⊆" '("(_"))
(register-digraphs "⊇" '(")_"))
(register-digraphs "⋅" '(".P"))
(register-digraphs "⌈" '( "lc")) ; "left ceiling"
(register-digraphs "⌉" '( "rc")) ; "right ceiling"; beware "rc" used by russian
(register-digraphs "⌊" '( "lf")) ; "left floor"; "fl" a ligature
(register-digraphs "⌋" '( "rf")) ; "right floor"; beware "rf" used by russian
(register-digraphs "⌒" '("(A"))
(register-digraphs "∑" '("Su")) ; sum
(register-digraphs "∏" '("Pr")) ; prod
(register-digraphs "∫" '("In")) ; int
(register-digraphs "⌠" '("Iu"))
(register-digraphs "⌡" '("Il"))
(register-digraphs "∬" '("DI"))
(register-digraphs "∮" '("Io"))
(register-digraphs "§" '("SS"))
(register-digraphs "¶" '("pa")) ; pilcrow
(register-digraphs "‰" '("%0")) ; PER MILLE SIGN
(register-digraphs "‱" '("%%")) ; PER TEN THOUSAND SIGN
(register-digraphs "Å" '("AO")) ; (angstrom)
(register-digraphs "†" '("+|"))
(register-digraphs "‡" '("++"))
(register-digraphs "℃" '("dC"))
(register-digraphs "℉" '("dF"))
; cards
(register-digraphs "♠" '("cS"))
(register-digraphs "♡" '("cH"))
(register-digraphs "♢" '("cD"))
(register-digraphs "♣" '("cC"))
; Music
(register-digraphs "♩" '("M4"))
(register-digraphs "♪" '("M8"))
(register-digraphs "♫" '("MF"))
(register-digraphs "♭" '("Mb"))
(register-digraphs "♮" '("Mn"))
(register-digraphs "♯" '("M#"))
(register-digraphs "✓" '("ok"))
(register-digraphs "✓" '("ck"))
(register-digraphs "✗" '("xx"))
(register-digraphs "♀" '("XX"))
(register-digraphs "♂" '("YY"))
(register-digraphs "☆" '("*0"))
(register-digraphs "★" '("*1"))
(register-digraphs "☼" '("SU"))
(register-digraphs "☺" '(":)"))
(register-digraphs "☻" '("1)"))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment