[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Insert character pairs
From: |
Juri Linkov |
Subject: |
Insert character pairs |
Date: |
Thu, 29 Apr 2004 11:48:48 +0300 |
User-agent: |
Gnus/5.110002 (No Gnus v0.2) Emacs/21.3.50 (gnu/linux) |
It is useful for efficient editing to be able to insert a pair of
symmetrical characters. Emacs already provides the command M-( to
insert parentheses, but it would be good to extend this command for
other paired characters like quotes and brackets.
The following patch generalizes the function `insert-parentheses'
by changing its name, adding new arguments, and creating the
new function `insert-parentheses' with the old name that calls it.
Also it adds the functions for some most frequent character pairs
to be able to bind them to the keys like M-", M-', M-`, M-[.
And taking into account active regions is useful too.
Index: lisp/emacs-lisp/lisp.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/emacs-lisp/lisp.el,v
retrieving revision 1.52
diff -u -w -b -r1.52 lisp.el
--- lisp/emacs-lisp/lisp.el 14 Apr 2004 18:20:23 -0000 1.52
+++ lisp/emacs-lisp/lisp.el 29 Apr 2004 06:20:33 -0000
@@ -302,7 +306,7 @@
(end-of-defun)
(narrow-to-region beg (point)))))
-(defun insert-parentheses (arg)
+(defun insert-pair (arg &optional open close)
"Enclose following ARG sexps in parentheses. Leave point after open-paren.
A negative ARG encloses the preceding ARG sexps instead.
No argument is equivalent to zero: just insert `()' and leave point between.
@@ -311,20 +315,66 @@
(interactive "P")
(if arg (setq arg (prefix-numeric-value arg))
(setq arg 0))
+ (or open (setq open ?\())
+ (or close (setq close ?\)))
+ (if (and transient-mark-mode mark-active)
+ (progn
+ (save-excursion (goto-char (region-beginning)) (insert open))
+ (save-excursion (goto-char (region-end)) (insert close)))
(cond ((> arg 0) (skip-chars-forward " \t"))
((< arg 0) (forward-sexp arg) (setq arg (- arg))))
(and parens-require-spaces
(not (bobp))
- (memq (char-syntax (preceding-char)) '(?w ?_ ?\) ))
+ (memq (char-syntax (preceding-char)) (list ?w ?_ close))
(insert " "))
- (insert ?\()
+ (insert open)
(save-excursion
(or (eq arg 0) (forward-sexp arg))
- (insert ?\))
+ (insert close)
(and parens-require-spaces
(not (eobp))
- (memq (char-syntax (following-char)) '(?w ?_ ?\( ))
- (insert " "))))
+ (memq (char-syntax (following-char)) (list ?w ?_ open))
+ (insert " ")))))
+
+(defun insert-parentheses (arg)
+ "Insert a pair of parentheses."
+ (interactive "P")
+ (insert-pair arg ?\( ?\)))
+
+(defun insert-double-quotes (arg)
+ "Insert a pair of double quotes."
+ (interactive "P")
+ (insert-pair arg ?\" ?\"))
+
+(defun insert-backquotes (arg)
+ "Insert a pair of backquotes."
+ (interactive "P")
+ (insert-pair arg ?\` ?\`))
+
+(defun insert-backquote-and-quote (arg)
+ "Insert backquote and quote."
+ (interactive "P")
+ (insert-pair arg ?\` ?\'))
+
+(defun insert-apostrophes (arg)
+ "Insert a pair of apostrophes."
+ (interactive "P")
+ (insert-pair arg ?\' ?\'))
+
+(defun insert-square-brackets (arg)
+ "Insert a pair of square brackets."
+ (interactive "P")
+ (insert-pair arg ?\[ ?\]))
+
+(defun insert-curly-brackets (arg)
+ "Insert a pair of curly brackets."
+ (interactive "P")
+ (insert-pair arg ?\{ ?\}))
+
+(defun insert-angle-brackets (arg)
+ "Insert a pair of angle brackets."
+ (interactive "P")
+ (insert-pair arg ?\< ?\>))
--
Juri Linkov
http://www.jurta.org/emacs/