emacs-devel
[Top][All Lists]
Advanced

[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/





reply via email to

[Prev in Thread] Current Thread [Next in Thread]