Emacs: Change Brackets/Quotes 🚀
Here's command to change brackets in text.
For example, here's what you have:
matrix = [ [3, 99, 'a'], [2, 77, 'a'] ];
You want:
matrix = { {3, 99, 'a'}, {2, 77, 'a'} };
Bracket change is useful when converting data from different languages or formats.
More examples:
- markdown format:
`function`
- emacs format:
`function'
- org format:
~function~
- org format:
=function=
- common template
[[function]]
- curly quote:
“function”
- python list:
[1,2,3]
- Wolfram Language list:
{1,2,3}
- lisp list:
(list 1 2 3)
Here's the code.
Can also delete the brackets.
(defun xah-change-bracket-pairs ( FromChars ToChars) "Change bracket pairs to another type or none. For example, change all parenthesis () to square brackets []. Works on current block or selection. When called in lisp program, FromChars or ToChars is a string of bracket pair. eg \"(paren)\", \"[bracket]\", etc. The first and last characters are used. (the middle is for convenience in ido selection.) If the string contains “,2”, then the first 2 chars and last 2 chars are used, for example \"[[bracket,2]]\". If ToChars is equal to string “none”, the brackets are deleted. URL `http://xahlee.info/emacs/emacs/elisp_change_brackets.html' Version: 2020-11-01 2021-08-15 2022-04-07" (interactive (let (($brackets '("(paren)" "{brace}" "[square]" "<greater>" "`emacs'" "`markdown`" "~tilde~" "=equal=" "\"double\"" "'single'" "[[double square,2]]" "“curly double”" "‘curly single’" "‹french angle›" "«french double angle»" "「corner」" "『white corner』" "【lenticular】" "〖white lenticular〗" "〈angle〉" "《double angle》" "〔tortoise〕" "〘white tortoise〙" "⦅white paren⦆" "〚white square〛" "⦃white curly⦄" "〈pointing angle〉" "⦑ANGLE WITH DOT⦒" "⧼CURVED ANGLE⧽" "⟦math square⟧" "⟨math angle⟩" "⟪math DOUBLE ANGLE⟫" "⟮math FLATTENED PARENTHESIS⟯" "⟬math WHITE TORTOISE SHELL⟭" "❛HEAVY SINGLE QUOTATION MARK ORNAMENT❜" "❝HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT❞" "❨MEDIUM LEFT PARENTHESIS ORNAMENT❩" "❪MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT❫" "❴MEDIUM LEFT CURLY ORNAMENT❵" "❬MEDIUM LEFT-POINTING ANGLE ORNAMENT❭" "❮HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT❯" "❰HEAVY LEFT-POINTING ANGLE ORNAMENT❱" "none" ))) (list (completing-read "Replace this:" $brackets ) (completing-read "To:" $brackets )))) (let ( $p1 $p2 ) (let (($bds (xah-get-bounds-of-block-or-region))) (setq $p1 (car $bds) $p2 (cdr $bds))) (save-excursion (save-restriction (narrow-to-region $p1 $p2) (let ( (case-fold-search nil) $fromLeft $fromRight $toLeft $toRight) (cond ((string-match ",2" FromChars ) (progn (setq $fromLeft (substring FromChars 0 2)) (setq $fromRight (substring FromChars -2)))) (t (progn (setq $fromLeft (substring FromChars 0 1)) (setq $fromRight (substring FromChars -1))))) (cond ((string-match ",2" ToChars) (progn (setq $toLeft (substring ToChars 0 2)) (setq $toRight (substring ToChars -2)))) ((string-match "none" ToChars) (progn (setq $toLeft "") (setq $toRight ""))) (t (progn (setq $toLeft (substring ToChars 0 1)) (setq $toRight (substring ToChars -1))))) (cond ((string-match "markdown" FromChars) (progn (goto-char (point-min)) (while (re-search-forward "`\\([^`]+?\\)`" nil t) (overlay-put (make-overlay (match-beginning 0) (match-end 0)) 'face 'highlight) (replace-match (concat $toLeft "\\1" $toRight ) t )))) ((string-match "tilde" FromChars) (progn (goto-char (point-min)) (while (re-search-forward "~\\([^~]+?\\)~" nil t) (overlay-put (make-overlay (match-beginning 0) (match-end 0)) 'face 'highlight) (replace-match (concat $toLeft "\\1" $toRight ) t )))) ((string-match "ascii quote" FromChars) (progn (goto-char (point-min)) (while (re-search-forward "\"\\([^\"]+?\\)\"" nil t) (overlay-put (make-overlay (match-beginning 0) (match-end 0)) 'face 'highlight) (replace-match (concat $toLeft "\\1" $toRight ) t )))) ((string-match "equal" FromChars) (progn (goto-char (point-min)) (while (re-search-forward "=\\([^=]+?\\)=" nil t) (overlay-put (make-overlay (match-beginning 0) (match-end 0)) 'face 'highlight) (replace-match (concat $toLeft "\\1" $toRight ) t )))) (t (progn (progn (goto-char (point-min)) (while (search-forward $fromLeft nil t) (overlay-put (make-overlay (match-beginning 0) (match-end 0)) 'face 'highlight) (replace-match $toLeft t t))) (progn (goto-char (point-min)) (while (search-forward $fromRight nil t) (overlay-put (make-overlay (match-beginning 0) (match-end 0)) 'face 'highlight) (replace-match $toRight t t)))))))))))
require Emacs: xah-get-thing.el
Emacs, Work with Brackets
- Emacs: Highlight Brackets
- Emacs: Insert Bracket Pairs, electric-pair-mode
- Emacs: Insert Brackets by Pair 🚀
- Emacs: Delete Brackets by Pair 🚀
- Emacs: Move Cursor to Bracket 🚀
- Emacs: Jump to Matching Bracket 🚀
- Emacs: Change Brackets/Quotes 🚀
- Emacs: Navigate Lisp Code as Tree
- Emacs: Select Line, between Quotes, Extend Selection 🚀
- Emacs: Xah Elisp Mode