Mercurial > emacs
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 |
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 |