annotate lisp/newcomment.el @ 26646:0d447856a2f7

(kill-comment): Fixed by rewriting it with syntax-tables rather than regexps (comment-normalize-vars): Set default (cdr comment-continue) (comment-end-quote-re): new function taken out of `comment-region-internal' (uncomment-region): Rewritten using syntax-tables. Also unquotes nested comment-ends and eliminates continuation markers. (comment-region-internal): Don't create a default for cce. Use `comment-end-quote-re'.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Mon, 29 Nov 1999 00:49:18 +0000
parents 39f87d842e57
children b00a81cd0f6e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1 ;;; newcomment.el --- (un)comment regions of buffers
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
3 ;; Copyright (C) 1999 Stefan Monnier <monnier@cs.yale.edu>
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
4
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
5 ;; Author: Stefan Monnier <monnier@cs.yale.edu>
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
6 ;; Keywords: comment uncomment
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
7 ;; Version: $Name: $
26646
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
8 ;; Revision: $Id: newcomment.el,v 1.2 1999/11/28 21:33:55 monnier Exp $
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
9
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
10 ;; This program is free software; you can redistribute it and/or modify
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
11 ;; it under the terms of the GNU General Public License as published by
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
12 ;; the Free Software Foundation; either version 2 of the License, or
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
13 ;; (at your option) any later version.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
14 ;;
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
15 ;; This program is distributed in the hope that it will be useful,
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
18 ;; GNU General Public License for more details.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
19 ;;
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
21 ;; along with this program; if not, write to the Free Software
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
22 ;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
23
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
24 ;;; Commentary:
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
25
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
26 ;;; History:
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
27
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
28 ;;; Bugs:
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
29
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
30 ;; - most of the code is not written (just copied from simple.el)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
31 ;; - too many other bugs to mention
26645
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
32 ;; - if the region does not start at the beginning of a line,
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
33 ;; comment-region will not align the comment markers properly
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
34 ;; - comment-multi-line already exists with a different meaning
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
35 ;; and is not orthogonal to comment-extra-lines
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
36
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
37 ;;; Todo:
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
38
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
39 ;; - extract comment data from the syntax-table
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
40 ;; - maybe do the opposite as well (set the syntax-table from other data)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
41 ;; - customizable auto-fill of comments
26646
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
42 ;; - uncomment-region with a numeric argument
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
43 ;; - uncomment-region with a consp (for blocks) or somehow make the
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
44 ;; deletion of continuation markers less dangerous
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
45
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
46 ;;; Code:
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
47
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
48 (eval-when-compile (require 'cl))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
49
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
50 (defcustom comment-column 32
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
51 "*Column to indent right-margin comments to.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
52 Setting this variable automatically makes it local to the current buffer.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
53 Each mode establishes a different default value for this variable; you
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
54 can set the value for a particular mode using that mode's hook."
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
55 :type 'integer
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
56 :group 'fill-comments)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
57 (make-variable-buffer-local 'comment-column)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
58
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
59 (defcustom comment-start nil
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
60 "*String to insert to start a new comment, or nil if no comment syntax."
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
61 :type '(choice (const :tag "None" nil)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
62 string)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
63 :group 'fill-comments)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
64
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
65 (defcustom comment-start-skip nil
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
66 "*Regexp to match the start of a comment plus everything up to its body.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
67 If there are any \\(...\\) pairs, the comment delimiter text is held to begin
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
68 at the place matched by the close of the first pair."
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
69 :type '(choice (const :tag "None" nil)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
70 regexp)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
71 :group 'fill-comments)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
72
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
73 (defcustom comment-end ""
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
74 "*String to insert to end a new comment.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
75 Should be an empty string if comments are terminated by end-of-line."
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
76 :type 'string
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
77 :group 'fill-comments)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
78
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
79 (defvar comment-indent-hook nil
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
80 "Obsolete variable for function to compute desired indentation for a comment.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
81 This function is called with no args with point at the beginning of
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
82 the comment's starting delimiter.")
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
83
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
84 (defvar comment-indent-function
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
85 '(lambda () comment-column)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
86 "Function to compute desired indentation for a comment.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
87 This function is called with no args with point at the beginning of
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
88 the comment's starting delimiter.")
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
89
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
90 (defcustom block-comment-start nil
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
91 "*String to insert to start a new comment on a line by itself.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
92 If nil, use `comment-start' instead.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
93 Note that the regular expression `comment-start-skip' should skip this string
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
94 as well as the `comment-start' string."
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
95 :type '(choice (const :tag "Use comment-start" nil)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
96 string)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
97 :group 'fill-comments)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
98
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
99 (defcustom block-comment-end nil
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
100 "*String to insert to end a new comment on a line by itself.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
101 Should be an empty string if comments are terminated by end-of-line.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
102 If nil, use `comment-end' instead."
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
103 :type '(choice (const :tag "Use comment-end" nil)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
104 string)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
105 :group 'fill-comments)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
106
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
107 (defun indent-for-comment ()
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
108 "Indent this line's comment to comment column, or insert an empty comment."
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
109 (interactive "*")
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
110 (let* ((empty (save-excursion (beginning-of-line)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
111 (looking-at "[ \t]*$")))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
112 (starter (or (and empty block-comment-start) comment-start))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
113 (ender (or (and empty block-comment-end) comment-end)))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
114 (cond
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
115 ((null starter)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
116 (error "No comment syntax defined"))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
117 ((null comment-start-skip)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
118 (error "This mode doesn't define `comment-start-skip'"))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
119 (t (let* ((eolpos (save-excursion (end-of-line) (point)))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
120 cpos indent begpos)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
121 (beginning-of-line)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
122 (if (re-search-forward comment-start-skip eolpos 'move)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
123 (progn (setq cpos (point-marker))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
124 ;; Find the start of the comment delimiter.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
125 ;; If there were paren-pairs in comment-start-skip,
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
126 ;; position at the end of the first pair.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
127 (if (match-end 1)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
128 (goto-char (match-end 1))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
129 ;; If comment-start-skip matched a string with
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
130 ;; internal whitespace (not final whitespace) then
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
131 ;; the delimiter start at the end of that
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
132 ;; whitespace. Otherwise, it starts at the
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
133 ;; beginning of what was matched.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
134 (skip-syntax-backward " " (match-beginning 0))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
135 (skip-syntax-backward "^ " (match-beginning 0)))))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
136 (setq begpos (point))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
137 ;; Compute desired indent.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
138 (if (= (current-column)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
139 (setq indent (if comment-indent-hook
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
140 (funcall comment-indent-hook)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
141 (funcall comment-indent-function))))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
142 (goto-char begpos)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
143 ;; If that's different from current, change it.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
144 (skip-chars-backward " \t")
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
145 (delete-region (point) begpos)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
146 (indent-to indent))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
147 ;; An existing comment?
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
148 (if cpos
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
149 (progn (goto-char cpos)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
150 (set-marker cpos nil))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
151 ;; No, insert one.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
152 (insert starter)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
153 (save-excursion
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
154 (insert ender))))))))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
155
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
156 (defun set-comment-column (arg)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
157 "Set the comment column based on point.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
158 With no arg, set the comment column to the current column.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
159 With just minus as arg, kill any comment on this line.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
160 With any other arg, set comment column to indentation of the previous comment
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
161 and then align or create a comment on this line at that column."
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
162 (interactive "P")
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
163 (if (eq arg '-)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
164 (kill-comment nil)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
165 (if arg
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
166 (progn
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
167 (save-excursion
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
168 (beginning-of-line)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
169 (re-search-backward comment-start-skip)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
170 (beginning-of-line)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
171 (re-search-forward comment-start-skip)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
172 (goto-char (match-beginning 0))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
173 (setq comment-column (current-column))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
174 (message "Comment column set to %d" comment-column))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
175 (indent-for-comment))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
176 (setq comment-column (current-column))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
177 (message "Comment column set to %d" comment-column))))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
178
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
179 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
180
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
181 (defcustom comment-nested nil
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
182 "Whether the comments can be nested.")
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
183 (defcustom comment-continue nil
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
184 "Pair of strings to insert for multiline comments.")
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
185 (defcustom comment-add '(0 . 2)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
186 "How many more chars should be inserted by default.")
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
187 (defcustom comment-extra-lines nil
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
188 "When comments should have an extra line before and after.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
189 If nil, never add them.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
190 If t, always add them,
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
191 If 'multiline, only add them for truly multiline comments.")
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
192 ;; (defcustom comment-multiline t
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
193 ;; "non-nil if `comment-region' should use multi-line comments.")
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
194
26646
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
195 (defvar comment-padding 1
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
196 "Number of spaces `comment-region' puts between comment chars and text.
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
197 Can also be a string instead.
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
198
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
199 Extra spacing between the comment characters and the comment text
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
200 makes the comment easier to read. Default is 1. Nil means 0.")
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
201
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
202 (defun kill-comment (arg)
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
203 "Kill the comment on this line, if any.
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
204 With prefix ARG, kill comments on that many lines starting with this one."
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
205 (interactive "P")
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
206 (let (endc)
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
207 (dotimes (_ (prefix-numeric-value arg))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
208 (save-excursion
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
209 (end-of-line)
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
210 (setq endc (point))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
211 (beginning-of-line)
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
212 (let ((cs (nth 8 (parse-partial-sexp (point) endc nil nil nil t))))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
213 (when cs
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
214 (goto-char cs)
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
215 (skip-syntax-backward " ")
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
216 (setq cs (point))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
217 (forward-comment 1)
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
218 (skip-syntax-backward " ")
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
219 (kill-region cs (if (bolp) (1- (point)) (point)))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
220 (indent-according-to-mode))))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
221 (if arg (forward-line 1)))))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
222
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
223 (defun comment-normalize-vars ()
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
224 (or comment-start (error "No comment syntax is defined"))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
225 (when (integerp comment-padding)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
226 (setq comment-padding (make-string comment-padding ? )))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
227 ;;
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
228 (when (string-match "\\`\\s-*\\(.*\\S-\\)\\s-*\\'" comment-start)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
229 (setq comment-start (match-string 1 comment-start)))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
230 (when (string-match "\\`\\s-*\\(.*\\S-\\)\\s-*\\'" comment-end)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
231 (setq comment-end (match-string 1 comment-end)))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
232 ;;
26646
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
233 (unless (or (car comment-continue) (string= comment-end ""))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
234 (set (make-local-variable 'comment-continue)
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
235 (cons (concat " " (substring comment-start 1))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
236 nil)))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
237 (when (and (car comment-continue) (null (cdr comment-continue)))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
238 (setf (cdr comment-continue) (string-reverse (car comment-continue)))))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
239
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
240 (defmacro until (&rest body)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
241 (let ((retsym (make-symbol "ret")))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
242 `(let (,retsym)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
243 (while (not (setq ,retsym (progn ,@body))))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
244 ,retsym)))
26645
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
245 (def-edebug-spec until t)
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
246
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
247 (defun string-reverse (s) (concat (reverse (string-to-list s))))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
248
26646
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
249 (defun comment-end-quote-re (str &optional re)
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
250 "Make a regexp that matches the (potentially quoted) STR comment-end.
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
251 The regexp has one group in it which matches RE right after the
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
252 potential quoting."
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
253 (when (and (not comment-nested) (> (length str) 1))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
254 (concat (regexp-quote (substring str 0 1))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
255 "\\\\*\\(" re "\\)"
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
256 (regexp-quote (substring str 1)))))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
257
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
258 (defun uncomment-region (beg end &optional arg)
26646
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
259 "Uncomment each line in the BEG..END region.
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
260 ARG is currently ignored."
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
261 (interactive "*r\nP")
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
262 (comment-normalize-vars)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
263 (if (> beg end) (let (mid) (setq mid beg beg end end mid)))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
264 (save-excursion
26646
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
265 (goto-char beg)
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
266 (unless (markerp end) (setq end (copy-marker end)))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
267 (let ((numarg (prefix-numeric-value arg))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
268 state spt)
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
269 (while (and (< (point) end)
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
270 (setq state (parse-partial-sexp
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
271 (point) end
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
272 nil nil nil t))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
273 (setq spt (nth 8 state)))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
274 (unless (nth 3 state)
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
275 (let* ((stxt (buffer-substring spt (point)))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
276 ;; find the end of the comment
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
277 (ept (progn
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
278 (when (nth 8 (parse-partial-sexp
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
279 (point) (point-max)
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
280 nil nil state 'syntax-table))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
281 (error "Can't find the comment end"))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
282 (point-marker)))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
283 ;; find the start of the end-comment
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
284 (_ (while (save-excursion
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
285 (nth 8
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
286 (save-restriction
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
287 (narrow-to-region (point) ept)
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
288 (parse-partial-sexp (point) ept
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
289 nil nil state))))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
290 (backward-char)))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
291 (etxt (buffer-substring (point) ept))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
292 (end-quote-re (comment-end-quote-re etxt "\\\\")))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
293 (save-restriction
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
294 (narrow-to-region spt ept)
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
295 ;; remove the end-comment (and leading padding and such)
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
296 (unless (string= "\n" etxt)
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
297 (beginning-of-line)
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
298 (re-search-forward (concat "\\(^\\s-*\\|\\("
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
299 (regexp-quote comment-padding)
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
300 "\\)?\\)"
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
301 (regexp-quote (substring etxt 0 1))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
302 "+"
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
303 (regexp-quote (substring etxt 1))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
304 "\\'"))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
305 (delete-region (match-beginning 0) (match-end 0)))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
306
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
307 ;; remove the comment-start
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
308 (goto-char (point-min))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
309 (looking-at (concat (regexp-quote stxt)
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
310 "+\\(\\s-*$\\|"
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
311 (regexp-quote comment-padding)
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
312 "\\)"))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
313 (delete-region (match-beginning 0) (match-end 0))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
314
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
315 ;; unquote any nested end-comment
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
316 (when end-quote-re
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
317 (goto-char (point-min))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
318 (while (re-search-forward end-quote-re nil t)
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
319 (delete-region (match-beginning 1) (match-end 1))))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
320
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
321 ;; eliminate continuation markers as well
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
322 (let* ((ccs (car comment-continue))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
323 (cce (cdr comment-continue))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
324 (sre (when (and (stringp ccs) (not (string= "" ccs)))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
325 (concat
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
326 "^\\s-*\\(" (regexp-quote ccs)
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
327 "+\\(" (regexp-quote comment-padding)
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
328 "\\)?\\)")))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
329 (ere (when (and (stringp cce) (not (string= "" cce)))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
330 (concat
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
331 "\\(\\(" (regexp-quote comment-padding)
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
332 "\\)?" (regexp-quote cce) "\\)\\s-*$")))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
333 (re (if (and sre ere) (concat sre "\\|" ere)
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
334 (or sre ere))))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
335 (when re
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
336 (goto-char (point-min))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
337 (while (re-search-forward re nil t)
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
338 (replace-match "" t t nil (if (match-end 1) 1 3)))))
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
339 ;; go the the end for the next comment
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
340 (goto-char (point-max)))))))))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
341
26645
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
342 (defun comment-make-extra-lines (cs ce ccs cce min-indent max-indent &optional block)
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
343 (if block
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
344 (let* ((s (concat cs "a=m" cce "\n"
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
345 (make-string min-indent ? ) ccs))
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
346 (e (concat cce "\n" (make-string min-indent ? )
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
347 ccs "a=m" ce))
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
348 (_ (assert (string-match "\\s-*\\(a=m\\)\\s-*" s)))
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
349 (fill (make-string (+ (- max-indent
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
350 min-indent
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
351 (match-beginning 0))
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
352 (- (match-end 0)
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
353 (match-end 1)))
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
354 (aref s (match-end 0)))))
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
355 (setq cs (replace-match fill t t s))
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
356 (assert (string-match "\\s-*\\(a=m\\)\\s-*" e))
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
357 (setq ce (replace-match fill t t e)))
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
358 (when (and ce (string-match "\\`\\s-*\\(.*\\S-\\)\\s-*\\'" ce))
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
359 (setq ce (match-string 1 ce)))
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
360 (let* ((c (concat ce "a=m" cs))
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
361 (indent (if (string-match "\\(.+\\).*a=m\\(.*\\)\\1" c)
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
362 (max (+ min-indent
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
363 (- (match-end 2) (match-beginning 2))
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
364 (- (match-beginning 0)))
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
365 0)
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
366 min-indent)))
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
367 (setq ce (concat cce "\n" (make-string indent ? ) (or ce cs)))
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
368 (setq cs (concat cs "\n" (make-string min-indent ? ) ccs))))
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
369 (values cs ce))
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
370
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
371 (def-edebug-spec comment-with-narrowing t)
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
372 (put 'comment-with-narrowing 'lisp-indent-function 2)
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
373 (defmacro comment-with-narrowing (beg end &rest body)
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
374 "Execute BODY with BEG..END narrowing.
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
375 Space is added (and then removed) at the beginning for the text's
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
376 indentation to be kept as it was before narrowing."
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
377 `(let ((-bindent (save-excursion (goto-char beg) (current-column))))
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
378 (save-restriction
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
379 (narrow-to-region beg end)
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
380 (goto-char (point-min))
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
381 (insert (make-string -bindent ? ))
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
382 (prog1
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
383 (progn ,@body)
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
384 ;; remove the -bindent
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
385 (save-excursion
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
386 (goto-char (point-min))
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
387 (when (looking-at " *")
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
388 (let ((n (min (- (match-end 0) (match-beginning 0)) -bindent)))
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
389 (delete-char n)
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
390 (decf -bindent n)))
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
391 (end-of-line)
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
392 (let ((e (point)))
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
393 (beginning-of-line)
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
394 (while (and (> -bindent 0) (re-search-forward " +" e t))
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
395 (let ((n (min -bindent (- (match-end 0) (match-beginning 0) 1))))
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
396 (goto-char (match-beginning 0))
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
397 (delete-char n)
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
398 (decf -bindent n)))))))))
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
399
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
400 (defun comment-region-internal (beg end cs ce &optional ccs cce block lines)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
401 (assert (< beg end))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
402 (let ((no-empty t))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
403 ;; sanitize ce and cce
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
404 (if (and (stringp ce) (string= "" ce)) (setq ce nil))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
405 (if (and (stringp cce) (string= "" cce)) (setq cce nil))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
406 ;; should we mark empty lines as well ?
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
407 (if (or ccs block lines) (setq no-empty nil))
26646
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
408 ;; make sure we have end-markers for BLOCK mode
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
409 (when block (unless ce (setq ce (string-reverse cs))))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
410 ;; continuation defaults to the same
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
411 (if ccs (unless block (setq cce nil))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
412 (setq ccs cs cce ce))
26646
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
413
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
414 (save-excursion
26645
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
415 (goto-char end)
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
416 (unless (or ce (eolp)) (insert "\n") (indent-according-to-mode))
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
417 (comment-with-narrowing beg end
26646
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
418 (let ((ce-quote-re (comment-end-quote-re comment-end))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
419 (min-indent (point-max))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
420 (max-indent 0))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
421 (goto-char (point-min))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
422 ;; loop over all lines to find the needed indentations
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
423 (until
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
424 (unless (looking-at "[ \t]*$")
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
425 (setq min-indent (min min-indent (current-indentation))))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
426 (when ce-quote-re
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
427 (let ((eol (save-excursion (end-of-line) (point))))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
428 (while (re-search-forward ce-quote-re eol 'move)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
429 (incf eol)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
430 (replace-match "\\" t t nil 1))))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
431 (end-of-line)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
432 (setq max-indent (max max-indent (current-column)))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
433 (or (eobp) (progn (forward-line) nil)))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
434
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
435 ;; inserting ccs can change max-indent by (1- tab-width)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
436 (incf max-indent (+ (max (length cs) (length ccs)) -1 tab-width))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
437
26645
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
438 ;; make the leading and trailing lines if requested
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
439 (when lines
26645
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
440 (multiple-value-setq (cs ce)
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
441 (comment-make-extra-lines
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
442 cs ce ccs cce min-indent max-indent block)))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
443
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
444 (goto-char (point-min))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
445 ;; Loop over all lines from BEG to END.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
446 (until
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
447 (unless (and no-empty (looking-at "[ \t]*$"))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
448 (move-to-column min-indent t)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
449 (insert cs) (setq cs ccs)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
450 (end-of-line)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
451 (if (eobp) (setq cce ce))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
452 (when cce
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
453 (when block (move-to-column max-indent t))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
454 (insert cce)))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
455 (end-of-line)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
456 (or (eobp) (progn (forward-line) nil))))))))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
457
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
458 (defun comment-addright (str n)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
459 (when (and (stringp str) (not (string= "" str)))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
460 (concat str (make-string n (aref str (1- (length str)))) comment-padding)))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
461 (defun comment-addleft (str n)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
462 (when (and (stringp str) (not (string= "" str)))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
463 (concat comment-padding
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
464 (when (or comment-nested (> (length comment-end) 1))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
465 (make-string n (aref str 0)))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
466 str)))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
467
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
468 (defun comment-region (beg end &optional arg)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
469 "Comment or uncomment each line in the region.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
470 With just \\[universal-prefix] prefix arg, uncomment each line in region BEG..END.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
471 Numeric prefix arg ARG means use ARG comment characters.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
472 If ARG is negative, delete that many comment characters instead.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
473 Comments are terminated on each line, even for syntax in which newline does
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
474 not end the comment. Blank lines do not get comments.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
475
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
476 The strings used as comment starts are built from
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
477 `comment-start' without trailing spaces and `comment-padding'."
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
478 (interactive "*r\nP")
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
479 (comment-normalize-vars)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
480 (if (> beg end) (let (mid) (setq mid beg beg end end mid)))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
481 (let ((numarg (prefix-numeric-value arg))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
482 (add (car comment-add))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
483 (lines comment-extra-lines)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
484 (block nil))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
485 (save-excursion
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
486 ;; we use `chars' instead of `syntax' because `\n' might be
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
487 ;; of end-comment syntax rather than of whitespace syntax.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
488 ;; sanitize BEG and END
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
489 (goto-char beg) (skip-chars-forward " \t\n\r") (beginning-of-line)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
490 (setq beg (max beg (point)))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
491 (goto-char end) (skip-chars-backward " \t\n\r") (end-of-line)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
492 (setq end (min end (point)))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
493 (if (>= beg end) (error "Nothing to comment"))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
494
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
495 ;; check for already commented region
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
496 (goto-char beg)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
497 (forward-comment (point-max))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
498 (if (< end (point)) (setq arg '(4) numarg 4))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
499
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
500 ;; sanitize LINES
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
501 (setq lines
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
502 (and
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
503 comment-multi-line
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
504 (progn (goto-char beg) (beginning-of-line)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
505 (skip-syntax-forward " ")
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
506 (>= (point) beg))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
507 (progn (goto-char end) (end-of-line) (skip-syntax-backward " ")
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
508 (<= (point) end))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
509 (if (eq comment-extra-lines 'multiline)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
510 (and (not (string= "" comment-end))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
511 (progn (goto-char beg)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
512 (search-forward "\n" end t)))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
513 lines))))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
514
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
515 (when (and (consp arg) (>= numarg 16))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
516 (setq lines (>= numarg 64))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
517 (setq arg nil numarg 1 block t add (or (cdr comment-add) 2)))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
518 (cond
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
519 ((consp arg) (uncomment-region beg end))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
520 ((< numarg 0) (uncomment-region beg end (- numarg)))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
521 (t
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
522 (if (and (null arg) (= (length comment-start) 1))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
523 (setq numarg add) (decf numarg))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
524 (comment-region-internal
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
525 beg end
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
526 (comment-addright comment-start numarg)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
527 (comment-addleft comment-end numarg)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
528 (if comment-multi-line
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
529 (comment-addright (car comment-continue) numarg))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
530 (if comment-multi-line
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
531 (comment-addleft (cdr comment-continue) numarg))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
532 block
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
533 lines)))))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
534
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
535 (provide 'newcomment)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
536
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
537 ;;; Change Log:
26645
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
538 ;; $Log: newcomment.el,v $
26646
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
539 ;; Revision 1.2 1999/11/28 21:33:55 monnier
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
540 ;; (comment-make-extra-lines): Moved out of comment-region-internal.
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
541 ;; (comment-with-narrowing): New macro. Provides a way to preserve
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
542 ;; indentation inside narrowing.
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
543 ;; (comment-region-internal): Add "\n" to close the comment if necessary.
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
544 ;; Correctly handle commenting-out when BEG is not bolp.
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
545 ;;
26645
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
546 ;; Revision 1.1 1999/11/28 18:51:06 monnier
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
547 ;; First "working" version:
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
548 ;; - uncomment-region doesn't work for some unknown reason
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
549 ;; - comment-multi-line allows the use of multi line comments
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
550 ;; - comment-extra-lines allows yet another style choice
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
551 ;; - comment-add allows to default to `;;'
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
552 ;; - comment-region on a comment calls uncomment-region
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
553 ;; - C-u C-u comment-region aligns comment end markers
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
554 ;; - C-u C-u C-u comment-region puts the comment inside a rectangle
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
555 ;; - comment-region will try to quote coment-end markers inside the region
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
556 ;; - comment-start markers are placed at the indentation level
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
557 ;;
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
558
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
559 ;;; newcomment.el ends here