5 Emacs Lisp Multi-Pair Find/Replace Commands

Buy Xah Emacs Tutorial. Master emacs benefits for life.
, , …,

This page shows examples of multi-pair find/replace in emacs lisp.

You need the elisp library xfrp_find_replace_pairs.el at Emacs Lisp: Multi-Pair String Replacement: xfrp_find_replace_pairs.el.

CSS Compressor

Emacs Lisp: CSS Compressor

Escape/UnEscape Backslash

These are very useful when you do text processing in emacs lisp. For example, if you need to process HTML, just copy raw HTML text, paste in emacs, then press a button to escape quote characters, and now you are ready to put them inside elisp string.

(require 'xfrp_find_replace_pairs)

(defun escape-quotes-region (start end)
  "Replace \" by \\\" in region."
  (interactive "r")
  (replace-pairs-region start end '(["\"" "\\\""])))

(defun unescape-quotes-region (start end)
  "Replace \\\" by \" in region."
  (interactive "r")
  (replace-pairs-region start end '(["\\\"" "\""])))

TeX Math Symbols to Unicode

Useful if you work with math a lot such as LaTeX.

(require 'xfrp_find_replace_pairs)

(defun replace-greek-region (start end)
  "Replace math symbols. ⁖ alpha to α."
  (interactive "r")
(replace-pairs-region start end '(
["alpha" "α"]
["beta" "β"]
["gamma" "γ"]
["theta" "θ"]
["lambda" "λ"]
["delta" "δ"]
["epsilon" "ε"]
["omega" "ω"]
["Pi" "π"])))

You might need to modify it to include backslash, add more symbols, or change conversion direction.

Curly Quote Fixes

The following is useful when you want to normalize the style of punctuation in essay or novel.

(defun replace-straight-quotes (p1 p2)
  "Replace straight double quotes to curly ones, and others.
Works on current text selection, else the current text block between empty lines.

Examples of changes:
 \"…\" ⇒ “…”
 ... ⇒ …
 I’m ⇒ I'm
 -- ⇒ —
 ~= ⇒ ≈

 In lisp program, the arguments P1 and P2 are region boundaries.
"
;; some examples for debug
;; do "‘em all -- done..."
;; I’am not
;; said "can’t have it, can’t, just can’t"
;; ‘I’ve can’t’

  (interactive
   (let ( (bds (get-selection-or-unit 'block)))
     (list (elt bds 1) (elt bds 2) ) ) )
  (let ( )
    ;; Note: order is important since this is huristic.

    (save-restriction
      (narrow-to-region p1 p2)

;; dash and ellipsis etc
(replace-pairs-region (point-min) (point-max)
[
 ["--" " — "]
 ["—" " — "]
 ["..." "…"]
 ["~=" "≈"]
 ])

(replace-pairs-region (point-min) (point-max)
[
 ["  —  " " — "]                        ; rid of extra space in em-dash
 ])

;; fix GNU style ASCII quotes
(replace-pairs-region (point-min) (point-max)
[
 ["``" "“"]
 ["''" "”"]
 ])

;; fix straight double quotes
(replace-pairs-region (point-min) (point-max)
[
 [">\"" ">“"]
 ["(\"" "(“"]
 [" \"" " “"]
 ["\" " "” "]
 ["\"," "”,"]
 ["\"." "”."]
 ["\"?" "”?"]
 ["\";" "”;"]
 ["\":" "”:"]
 ["\")" "”)"]
 ["\"]" "”]"]
 [".\"" ".”"]
 [",\"" ",”"]
 ["!\"" "!”"]
 ["?\"" "?”"]
 ["\"<" "”<"]
 ;; ";
 ["\"\n" "”\n"]
 ])

;; fix straight double quotes by regex
(replace-regexp-pairs-region (point-min) (point-max)
[
 ["\\`\"" "“"]
 ])

;; fix single quotes to curly
(replace-pairs-region (point-min) (point-max)
[
 [">\'" ">‘"]
 [" \'" " ‘"]
 ["\' " "’ "]
 ["\'," "’,"]
 [".\'" ".’"]
 ["!\'" "!’"]
 ["?\'" "?’"]
 ["(\'" "(‘"]
 ["\')" "’)"]
 ["\']" "’]"]
 ])

;; fix apostrophe
(replace-regexp-pairs-region (point-min) (point-max)
[
 ["\\bcan’t\\b" "can't"]
 ["\\bdon’t\\b" "don't"]
 ["\\bdoesn’t\\b" "doesn't"]
 ["\\bain’t\\b" "ain't"]
 ["\\bdidn’t\\b" "didn't"]
 ["\\baren’t\\b" "aren't"]
 ["\\bwasn’t\\b" "wasn't"]
 ["\\bweren’t\\b" "weren't"]
 ["\\bcouldn’t\\b" "couldn't"]
 ["\\bshouldn’t\\b" "shouldn't"]

 ["\\b’ve\\b" "'ve"]
 ["\\b’re\\b" "'re"]
 ["\\b‘em\\b" "'em"]
 ["\\b’ll\\b" "'ll"]
 ["\\b’m\\b" "'m"]
 ["\\b’d\\b" "'d"]
 ["\\b’s\\b" "'s"]
 ["s’ " "s' "]
 ["s’\n" "s'\n"]

 ["\"$" "”"]
 ])

;; fix back. quotes in HTML code
(replace-regexp-pairs-region (point-min) (point-max)
[
 ["” \\([a-z]+\\)="       "\" \\1="]
 ["=\”" "=\""]
 ["/” " "/\" "]
 ["\"\\([0-9]+\\)” "     "\"\\1\" "]
 ])
 ) ))

Change {Round, Square, Curly} Brackets

Emacs: Change Brackets () {} [] in Text

Convert Punctuation Between English/Chinese Forms

Emacs Lisp: Convert Punctuation Between English/Chinese Forms

Convert Latin Alphabet to Unicode Gothic-style Characters

𝔗𝔥𝔬𝔲 𝔖𝔥𝔞𝔩𝔱 𝔘𝔰𝔢 𝔈𝔪𝔞𝔠𝔰 𝔏𝔦𝔰𝔭

Make HTML Table

Another different use, but essentially same technique of find/replace, is to convert a plain text table into a HTML table. See: Emacs Lisp: How to Write a make-html-table Command.

Emacs ♥

Like it?
Buy Xah Emacs Tutorial
or share
blog comments powered by Disqus