annotate lisp/newcomment.el @ 86690:45b755405bdb

Move to etc/nxml
author Glenn Morris <rgm@gnu.org>
date Wed, 28 Nov 2007 05:06:18 +0000
parents 7100260421ed
children e947df5d708b 880960b70474
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1 ;;; newcomment.el --- (un)comment regions of buffers
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2
74442
b2e5081b9320 Update copyright years.
Glenn Morris <rgm@gnu.org>
parents: 74239
diff changeset
3 ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004,
75347
e3694f1cb928 Add 2007 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 74442
diff changeset
4 ;; 2005, 2006, 2007 Free Software Foundation, Inc.
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
5
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
6 ;; Author: code extracted from Emacs-20's simple.el
64861
7a8556a71193 Address change.
Richard M. Stallman <rms@gnu.org>
parents: 64762
diff changeset
7 ;; Maintainer: Stefan Monnier <monnier@iro.umontreal.ca>
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
8 ;; Keywords: comment uncomment
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
9
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
10 ;; This file is part of GNU Emacs.
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
11
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
12 ;; GNU Emacs is free software; you can redistribute it and/or modify
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
78236
9355f9b7bbff Switch license to GPLv3 or later.
Glenn Morris <rgm@gnu.org>
parents: 76879
diff changeset
14 ;; the Free Software Foundation; either version 3, or (at your option)
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
15 ;; any later version.
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
16
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
20 ;; GNU General Public License for more details.
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
21
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the
64091
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 63829
diff changeset
24 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 63829
diff changeset
25 ;; Boston, MA 02110-1301, USA.
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
26
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
27 ;;; Commentary:
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
28
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
29 ;; A replacement for simple.el's comment-related functions.
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
30
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
31 ;;; Bugs:
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
32
47212
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
33 ;; - boxed comments in Perl are not properly uncommented because they are
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
34 ;; uncommented one-line at a time.
41689
4e6f73fdeab0 New bug.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41286
diff changeset
35 ;; - nested comments in sgml-mode are not properly quoted.
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
36 ;; - single-char nestable comment-start can only do the "\\s<+" stuff
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
37 ;; if the corresponding closing marker happens to be right.
26763
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
38 ;; - uncomment-region with a numeric argument can render multichar
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
39 ;; comment markers invalid.
29119
c411f27154ee (comment-make-extra-lines): Don't use `assert'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29066
diff changeset
40 ;; - comment-indent or comment-region when called inside a comment
c411f27154ee (comment-make-extra-lines): Don't use `assert'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29066
diff changeset
41 ;; will happily break the surrounding comment.
c411f27154ee (comment-make-extra-lines): Don't use `assert'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29066
diff changeset
42 ;; - comment-quote-nested will not (un)quote properly all nested comment
c411f27154ee (comment-make-extra-lines): Don't use `assert'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29066
diff changeset
43 ;; markers if there are more than just comment-start and comment-end.
c411f27154ee (comment-make-extra-lines): Don't use `assert'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29066
diff changeset
44 ;; For example, in Pascal where {...*) and (*...} are possible.
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 ;;; Todo:
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
47
47212
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
48 ;; - rebox.el-style refill.
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
49 ;; - quantized steps in comment-alignment.
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
50 ;; - try to align tail comments.
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
51 ;; - check what c-comment-line-break-function has to say.
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
52 ;; - spill auto-fill of comments onto the end of the next line.
26646
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
53 ;; - uncomment-region with a consp (for blocks) or somehow make the
47212
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
54 ;; deletion of continuation markers less dangerous.
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
55 ;; - drop block-comment-<foo> unless it's really used.
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
56 ;; - uncomment-region on a subpart of a comment.
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
57 ;; - support gnu-style "multi-line with space in continue".
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
58 ;; - somehow allow comment-dwim to use the region even if transient-mark-mode
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
59 ;; is not turned on.
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
60
32014
13bd1ce1c353 (comment-indent-function): Use 0 for ;;; and %%%.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30091
diff changeset
61 ;; - when auto-filling a comment, try to move the comment to the left
13bd1ce1c353 (comment-indent-function): Use 0 for ;;; and %%%.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30091
diff changeset
62 ;; rather than break it (if possible).
13bd1ce1c353 (comment-indent-function): Use 0 for ;;; and %%%.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30091
diff changeset
63 ;; - sometimes default the comment-column to the same
13bd1ce1c353 (comment-indent-function): Use 0 for ;;; and %%%.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30091
diff changeset
64 ;; one used on the preceding line(s).
13bd1ce1c353 (comment-indent-function): Use 0 for ;;; and %%%.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30091
diff changeset
65
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
66 ;;; Code:
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
67
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
68 ;;;###autoload
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
69 (defalias 'indent-for-comment 'comment-indent)
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
70 ;;;###autoload
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
71 (defalias 'set-comment-column 'comment-set-column)
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
72 ;;;###autoload
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
73 (defalias 'kill-comment 'comment-kill)
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
74 ;;;###autoload
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
75 (defalias 'indent-new-comment-line 'comment-indent-new-line)
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
76
26763
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
77 (defgroup comment nil
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
78 "Indenting and filling of comments."
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
79 :prefix "comment-"
29760
c2940b6e267e (comment) <defgroup>: Add :version.
Dave Love <fx@gnu.org>
parents: 29409
diff changeset
80 :version "21.1"
26763
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
81 :group 'fill)
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
82
50640
8ec8f6706902 (comment-use-syntax): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 49768
diff changeset
83 ;; Autoload this to avoid warnings, since some major modes define it.
8ec8f6706902 (comment-use-syntax): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 49768
diff changeset
84 ;;;###autoload
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
85 (defvar comment-use-syntax 'undecided
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
86 "Non-nil if syntax-tables can be used instead of regexps.
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
87 Can also be `undecided' which means that a somewhat expensive test will
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
88 be used to try to determine whether syntax-tables should be trusted
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
89 to understand comments or not in the given buffer.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
90 Major modes should set this variable.")
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
91
44999
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
92 (defcustom comment-fill-column nil
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
93 "Column to use for `comment-indent'. If nil, use `fill-column' instead."
62531
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
94 :type '(choice (const nil) integer)
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
95 :group 'comment)
44999
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
96
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
97 ;;;###autoload
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
98 (defcustom comment-column 32
68594
ca4201c7597d Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67057
diff changeset
99 "Column to indent right-margin comments to.
80877
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
100 Each mode may establish a different default value for this variable; you
44455
8a30d8f66e1a (comment-column): Docstring improvement.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43689
diff changeset
101 can set the value for a particular mode using that mode's hook.
80877
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
102 Comments might be indented to a different value in order not to go beyond
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
103 `comment-fill-column' or in order to align them with surrounding comments."
62531
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
104 :type 'integer
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
105 :group 'comment)
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
106 (make-variable-buffer-local 'comment-column)
70590
63b772bfba93 Move `safe-local-variable' declarations to the respective files.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 70139
diff changeset
107 ;;;###autoload(put 'comment-column 'safe-local-variable 'integerp)
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
108
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
109 ;;;###autoload
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
110 (defvar comment-start nil
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
111 "*String to insert to start a new comment, or nil if no comment syntax.")
70139
fa073d9c1a2b (comment-start, comment-start-skip)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 70043
diff changeset
112 ;;;###autoload(put 'comment-start 'safe-local-variable 'string-or-null-p)
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
113
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
114 ;;;###autoload
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
115 (defvar comment-start-skip nil
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
116 "*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
117 If there are any \\(...\\) pairs, the comment delimiter text is held to begin
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
118 at the place matched by the close of the first pair.")
70139
fa073d9c1a2b (comment-start, comment-start-skip)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 70043
diff changeset
119 ;;;###autoload(put 'comment-start-skip 'safe-local-variable 'string-or-null-p)
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
120
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
121 ;;;###autoload
26763
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
122 (defvar comment-end-skip nil
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
123 "Regexp to match the end of a comment plus everything up to its body.")
70139
fa073d9c1a2b (comment-start, comment-start-skip)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 70043
diff changeset
124 ;;;###autoload(put 'comment-end-skip 'safe-local-variable 'string-or-null-p)
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
125
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
126 ;;;###autoload
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
127 (defvar comment-end ""
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
128 "*String to insert to end a new comment.
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
129 Should be an empty string if comments are terminated by end-of-line.")
70139
fa073d9c1a2b (comment-start, comment-start-skip)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 70043
diff changeset
130 ;;;###autoload(put 'comment-end 'safe-local-variable 'string-or-null-p)
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
131
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
132 ;;;###autoload
32186
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
133 (defvar comment-indent-function 'comment-indent-default
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
134 "Function to compute desired indentation for a comment.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
135 This function is called with no args with point at the beginning of
32186
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
136 the comment's starting delimiter and should return either the desired
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
137 column indentation or nil.
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
138 If nil is returned, indentation is delegated to `indent-according-to-mode'.")
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
139
53976
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
140 ;;;###autoload
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
141 (defvar comment-insert-comment-function nil
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
142 "Function to insert a comment when a line doesn't contain one.
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
143 The function has no args.
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
144
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
145 Applicable at least in modes for languages like fixed-format Fortran where
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
146 comments always start in column zero.")
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
147
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
148 (defvar comment-region-function 'comment-region-default
53976
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
149 "Function to comment a region.
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
150 Its args are the same as those of `comment-region', but BEG and END are
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
151 guaranteed to be correctly ordered. It is called within `save-excursion'.
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
152
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
153 Applicable at least in modes for languages like fixed-format Fortran where
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
154 comments always start in column zero.")
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
155
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
156 (defvar uncomment-region-function 'uncomment-region-default
53976
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
157 "Function to uncomment a region.
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
158 Its args are the same as those of `uncomment-region', but BEG and END are
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
159 guaranteed to be correctly ordered. It is called within `save-excursion'.
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
160
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
161 Applicable at least in modes for languages like fixed-format Fortran where
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
162 comments always start in column zero.")
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
163
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
164 ;; ?? never set
26763
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
165 (defvar block-comment-start nil)
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
166 (defvar block-comment-end nil)
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
167
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
168 (defvar comment-quote-nested t
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
169 "Non-nil if nested comments should be quoted.
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
170 This should be locally set by each major mode if needed.")
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
171
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
172 (defvar comment-continue nil
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
173 "Continuation string to insert for multiline comments.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
174 This string will be added at the beginning of each line except the very
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
175 first one when commenting a region with a commenting style that allows
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
176 comments to span several lines.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
177 It should generally have the same length as `comment-start' in order to
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
178 preserve indentation.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
179 If it is nil a value will be automatically derived from `comment-start'
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
180 by replacing its first character with a space.")
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
181
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
182 (defvar comment-add 0
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
183 "How many more comment chars should be inserted by `comment-region'.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
184 This determines the default value of the numeric argument of `comment-region'.
85665
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
185 The `plain' comment style doubles this value.
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
186
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
187 This should generally stay 0, except for a few modes like Lisp where
85665
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
188 it is 1 so that regions are commented with two or three semi-colons.")
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
189
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
190 (defconst comment-styles
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
191 '((plain . (nil nil nil nil))
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
192 (indent . (nil nil nil t))
85665
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
193 (indent-or-triple
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
194 . (nil nil nil multi-char))
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
195 (aligned . (nil t nil t))
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
196 (multi-line . (t nil nil t))
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
197 (extra-line . (t nil t t))
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
198 (box . (nil t t t))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
199 (box-multi . (t t t t)))
84625
f867348019bf (comment-add): New arg EXTRA.
Richard M. Stallman <rms@gnu.org>
parents: 82140
diff changeset
200 "Comment region styles of the form (STYLE . (MULTI ALIGN EXTRA INDENT)).
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
201 STYLE should be a mnemonic symbol.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
202 MULTI specifies that comments are allowed to span multiple lines.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
203 ALIGN specifies that the `comment-end' markers should be aligned.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
204 EXTRA specifies that an extra line should be used before and after the
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
205 region to comment (to put the `comment-end' and `comment-start').
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
206 INDENT specifies that the `comment-start' markers should not be put at the
85665
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
207 left margin but at the current indentation of the region to comment.
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
208 If INDENT is `multi-char', that means indent multi-character
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
209 comment starters, but not one-character comment starters.")
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
210
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
211 ;;;###autoload
85665
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
212 (defcustom comment-style 'indent-or-triple
68594
ca4201c7597d Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67057
diff changeset
213 "Style to be used for `comment-region'.
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
214 See `comment-styles' for a list of available styles."
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
215 :type (if (boundp 'comment-styles)
84625
f867348019bf (comment-add): New arg EXTRA.
Richard M. Stallman <rms@gnu.org>
parents: 82140
diff changeset
216 `(choice ,@(mapcar (lambda (s) `(const ,(car s)))
f867348019bf (comment-add): New arg EXTRA.
Richard M. Stallman <rms@gnu.org>
parents: 82140
diff changeset
217 comment-styles))
62531
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
218 'symbol)
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
219 :group 'comment)
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
220
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
221 ;;;###autoload
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
222 (defcustom comment-padding " "
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
223 "Padding string that `comment-region' puts between comment chars and text.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
224 Can also be an integer which will be automatically turned into a string
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
225 of the corresponding number of spaces.
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
226
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
227 Extra spacing between the comment characters and the comment text
41286
6b56e476153d (comment-column, comment-style, comment-multi-line)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41253
diff changeset
228 makes the comment easier to read. Default is 1. nil means 0."
62531
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
229 :type '(choice string integer (const nil))
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
230 :group 'comment)
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
231
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
232 ;;;###autoload
26763
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
233 (defcustom comment-multi-line nil
68594
ca4201c7597d Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67057
diff changeset
234 "Non-nil means `comment-indent-new-line' continues comments.
57281
902c984fa20a (comment-multi-line): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents: 56957
diff changeset
235 That is, it inserts no new terminator or starter.
902c984fa20a (comment-multi-line): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents: 56957
diff changeset
236 This affects `auto-fill-mode', which is the main reason to
902c984fa20a (comment-multi-line): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents: 56957
diff changeset
237 customize this variable.
902c984fa20a (comment-multi-line): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents: 56957
diff changeset
238
902c984fa20a (comment-multi-line): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents: 56957
diff changeset
239 It also affects \\[indent-new-comment-line]. However, if you want this
902c984fa20a (comment-multi-line): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents: 56957
diff changeset
240 behavior for explicit filling, you might as well use \\[newline-and-indent]."
62531
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
241 :type 'boolean
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
242 :group 'comment)
26763
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
243
51337
0237e2420453 (comment-empty-lines): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50947
diff changeset
244 (defcustom comment-empty-lines nil
0237e2420453 (comment-empty-lines): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50947
diff changeset
245 "If nil, `comment-region' does not comment out empty lines.
0237e2420453 (comment-empty-lines): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50947
diff changeset
246 If t, it always comments out empty lines.
73317
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
247 If `eol' it only comments out empty lines if comments are
51337
0237e2420453 (comment-empty-lines): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50947
diff changeset
248 terminated by the end of line (i.e. `comment-end' is empty)."
0237e2420453 (comment-empty-lines): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50947
diff changeset
249 :type '(choice (const :tag "Never" nil)
0237e2420453 (comment-empty-lines): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50947
diff changeset
250 (const :tag "Always" t)
62531
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
251 (const :tag "EOl-terminated" 'eol))
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
252 :group 'comment)
51337
0237e2420453 (comment-empty-lines): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50947
diff changeset
253
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
254 ;;;;
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
255 ;;;; Helpers
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
256 ;;;;
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
257
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
258 (defun comment-string-strip (str beforep afterp)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
259 "Strip STR of any leading (if BEFOREP) and/or trailing (if AFTERP) space."
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
260 (string-match (concat "\\`" (if beforep "\\s-*")
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
261 "\\(.*?\\)" (if afterp "\\s-*\n?")
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
262 "\\'") str)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
263 (match-string 1 str))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
264
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
265 (defun comment-string-reverse (s)
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
266 "Return the mirror image of string S, without any trailing space."
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
267 (comment-string-strip (concat (nreverse (string-to-list s))) nil t))
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
268
39761
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
269 ;;;###autoload
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
270 (defun comment-normalize-vars (&optional noerror)
50845
ac2120f868b9 (comment-normalize-vars): Add docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50843
diff changeset
271 "Check and setup the variables needed by other commenting functions.
ac2120f868b9 (comment-normalize-vars): Add docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50843
diff changeset
272 Functions autoloaded from newcomment.el, being entry points, should call
ac2120f868b9 (comment-normalize-vars): Add docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50843
diff changeset
273 this function before any other, so the rest of the code can assume that
ac2120f868b9 (comment-normalize-vars): Add docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50843
diff changeset
274 the variables are properly set."
53164
2ea1aaf0d7db (comment-normalize-vars): Initialize properly if comment-start was nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52931
diff changeset
275 (unless (and (not comment-start) noerror)
2ea1aaf0d7db (comment-normalize-vars): Initialize properly if comment-start was nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52931
diff changeset
276 (unless comment-start
54279
41d93a97701d (comment-normalize-vars): Check the user-specified comment start marker.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54276
diff changeset
277 (let ((cs (read-string "No comment syntax is defined. Use: ")))
41d93a97701d (comment-normalize-vars): Check the user-specified comment start marker.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54276
diff changeset
278 (if (zerop (length cs))
41d93a97701d (comment-normalize-vars): Check the user-specified comment start marker.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54276
diff changeset
279 (error "No comment syntax defined")
41d93a97701d (comment-normalize-vars): Check the user-specified comment start marker.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54276
diff changeset
280 (set (make-local-variable 'comment-start) cs))))
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
281 ;; comment-use-syntax
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
282 (when (eq comment-use-syntax 'undecided)
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
283 (set (make-local-variable 'comment-use-syntax)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
284 (let ((st (syntax-table))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
285 (cs comment-start)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
286 (ce (if (string= "" comment-end) "\n" comment-end)))
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
287 ;; Try to skip over a comment using forward-comment
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
288 ;; to see if the syntax tables properly recognize it.
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
289 (with-temp-buffer
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
290 (set-syntax-table st)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
291 (insert cs " hello " ce)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
292 (goto-char (point-min))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
293 (and (forward-comment 1) (eobp))))))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
294 ;; comment-padding
41021
c07719cfdfcd (comment-normalize-vars): Handle a nil comment-padding.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39864
diff changeset
295 (unless comment-padding (setq comment-padding 0))
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
296 (when (integerp comment-padding)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
297 (setq comment-padding (make-string comment-padding ? )))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
298 ;; comment markers
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
299 ;;(setq comment-start (comment-string-strip comment-start t nil))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
300 ;;(setq comment-end (comment-string-strip comment-end nil t))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
301 ;; comment-continue
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
302 (unless (or comment-continue (string= comment-end ""))
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
303 (set (make-local-variable 'comment-continue)
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
304 (concat (if (string-match "\\S-\\S-" comment-start) " " "|")
39761
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
305 (substring comment-start 1)))
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
306 ;; Hasn't been necessary yet.
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
307 ;; (unless (string-match comment-start-skip comment-continue)
72453
204e1538695a (comment-box): Call `comment-normalize-vars'. Add autoload cookie.
Juanma Barranquero <lekktu@gmail.com>
parents: 72410
diff changeset
308 ;; (kill-local-variable 'comment-continue))
39761
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
309 )
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
310 ;; comment-skip regexps
45902
24d34388fd69 (comment-normalize-vars): Refresh the comment-foo-skip
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45023
diff changeset
311 (unless (and comment-start-skip
24d34388fd69 (comment-normalize-vars): Refresh the comment-foo-skip
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45023
diff changeset
312 ;; In case comment-start has changed since last time.
24d34388fd69 (comment-normalize-vars): Refresh the comment-foo-skip
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45023
diff changeset
313 (string-match comment-start-skip comment-start))
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
314 (set (make-local-variable 'comment-start-skip)
50673
4b5928c8d588 (comment-normalize-vars): Fix regexp.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50640
diff changeset
315 (concat "\\(\\(^\\|[^\\\n]\\)\\(\\\\\\\\\\)*\\)\\(\\s<+\\|"
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
316 (regexp-quote (comment-string-strip comment-start t t))
36490
e40c1ae4f04b (comment-normalize-vars): Use [ \t] for the trailing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36271
diff changeset
317 ;; Let's not allow any \s- but only [ \t] since \n
e40c1ae4f04b (comment-normalize-vars): Use [ \t] for the trailing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36271
diff changeset
318 ;; might be both a comment-end marker and \s-.
e40c1ae4f04b (comment-normalize-vars): Use [ \t] for the trailing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36271
diff changeset
319 "+\\)[ \t]*")))
45902
24d34388fd69 (comment-normalize-vars): Refresh the comment-foo-skip
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45023
diff changeset
320 (unless (and comment-end-skip
24d34388fd69 (comment-normalize-vars): Refresh the comment-foo-skip
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45023
diff changeset
321 ;; In case comment-end has changed since last time.
24d34388fd69 (comment-normalize-vars): Refresh the comment-foo-skip
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45023
diff changeset
322 (string-match comment-end-skip comment-end))
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
323 (let ((ce (if (string= "" comment-end) "\n"
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
324 (comment-string-strip comment-end t t))))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
325 (set (make-local-variable 'comment-end-skip)
39486
54fe59ee8057 (comment-normalize-vars): Use " \t" rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39079
diff changeset
326 ;; We use [ \t] rather than \s- because we don't want to
54fe59ee8057 (comment-normalize-vars): Use " \t" rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39079
diff changeset
327 ;; remove ^L in C mode when uncommenting.
54fe59ee8057 (comment-normalize-vars): Use " \t" rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39079
diff changeset
328 (concat "[ \t]*\\(\\s>" (if comment-quote-nested "" "+")
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
329 "\\|" (regexp-quote (substring ce 0 1))
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
330 (if (and comment-quote-nested (<= (length ce) 1)) "" "+")
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
331 (regexp-quote (substring ce 1))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
332 "\\)"))))))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48257
diff changeset
333
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
334 (defun comment-quote-re (str unp)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
335 (concat (regexp-quote (substring str 0 1))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
336 "\\\\" (if unp "+" "*")
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
337 (regexp-quote (substring str 1))))
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
338
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
339 (defun comment-quote-nested (cs ce unp)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
340 "Quote or unquote nested comments.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
341 If UNP is non-nil, unquote nested comment markers."
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
342 (setq cs (comment-string-strip cs t t))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
343 (setq ce (comment-string-strip ce t t))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
344 (when (and comment-quote-nested (> (length ce) 0))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
345 (let ((re (concat (comment-quote-re ce unp)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
346 "\\|" (comment-quote-re cs unp))))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
347 (goto-char (point-min))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
348 (while (re-search-forward re nil t)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
349 (goto-char (match-beginning 0))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
350 (forward-char 1)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
351 (if unp (delete-char 1) (insert "\\"))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
352 (when (= (length ce) 1)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
353 ;; If the comment-end is a single char, adding a \ after that
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
354 ;; "first" char won't deactivate it, so we turn such a CE
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
355 ;; into !CS. I.e. for pascal, we turn } into !{
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
356 (if (not unp)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
357 (when (string= (match-string 0) ce)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
358 (replace-match (concat "!" cs) t t))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
359 (when (and (< (point-min) (match-beginning 0))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
360 (string= (buffer-substring (1- (match-beginning 0))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
361 (1- (match-end 0)))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
362 (concat "!" cs)))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
363 (backward-char 2)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
364 (delete-char (- (match-end 0) (match-beginning 0)))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
365 (insert ce))))))))
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
366
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
367 ;;;;
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
368 ;;;; Navigation
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
369 ;;;;
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
370
54314
597fb06dcdda (comment-use-global-state): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54279
diff changeset
371 (defvar comment-use-global-state nil
597fb06dcdda (comment-use-global-state): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54279
diff changeset
372 "Non-nil means that the global syntactic context is used.
597fb06dcdda (comment-use-global-state): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54279
diff changeset
373 More specifically, it means that `syntax-ppss' is used to find out whether
597fb06dcdda (comment-use-global-state): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54279
diff changeset
374 point is within a string or not. Major modes whose syntax is faithfully
597fb06dcdda (comment-use-global-state): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54279
diff changeset
375 described by the syntax-tables can set this to non-nil so comment markers
597fb06dcdda (comment-use-global-state): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54279
diff changeset
376 in strings will not confuse Emacs.")
597fb06dcdda (comment-use-global-state): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54279
diff changeset
377
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
378 (defun comment-search-forward (limit &optional noerror)
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
379 "Find a comment start between point and LIMIT.
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
380 Moves point to inside the comment and returns the position of the
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
381 comment-starter. If no comment is found, moves point to LIMIT
56019
0517f0b254be (comment-search-forward, comment-search-backward): Fix typos.
Juanma Barranquero <lekktu@gmail.com>
parents: 54314
diff changeset
382 and raises an error or returns nil if NOERROR is non-nil."
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
383 (if (not comment-use-syntax)
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
384 (if (re-search-forward comment-start-skip limit noerror)
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
385 (or (match-end 1) (match-beginning 0))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
386 (goto-char limit)
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
387 (unless noerror (error "No comment")))
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
388 (let* ((pt (point))
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
389 ;; Assume (at first) that pt is outside of any string.
54314
597fb06dcdda (comment-use-global-state): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54279
diff changeset
390 (s (parse-partial-sexp pt (or limit (point-max)) nil nil
597fb06dcdda (comment-use-global-state): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54279
diff changeset
391 (if comment-use-global-state (syntax-ppss pt))
597fb06dcdda (comment-use-global-state): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54279
diff changeset
392 t)))
597fb06dcdda (comment-use-global-state): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54279
diff changeset
393 (when (and (nth 8 s) (nth 3 s) (not comment-use-global-state))
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
394 ;; The search ended at eol inside a string. Try to see if it
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
395 ;; works better when we assume that pt is inside a string.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
396 (setq s (parse-partial-sexp
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
397 pt (or limit (point-max)) nil nil
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
398 (list nil nil nil (nth 3 s) nil nil nil nil)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
399 t)))
76879
d703606e395a (comment-search-forward): Discard comment starters before point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75347
diff changeset
400 (if (or (not (and (nth 8 s) (not (nth 3 s))))
d703606e395a (comment-search-forward): Discard comment starters before point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75347
diff changeset
401 ;; Make sure the comment starts after PT.
d703606e395a (comment-search-forward): Discard comment starters before point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75347
diff changeset
402 (< (nth 8 s) pt))
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
403 (unless noerror (error "No comment"))
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
404 ;; We found the comment.
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
405 (let ((pos (point))
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
406 (start (nth 8 s))
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
407 (bol (line-beginning-position))
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
408 (end nil))
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
409 (while (and (null end) (>= (point) bol))
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
410 (if (looking-at comment-start-skip)
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
411 (setq end (min (or limit (point-max)) (match-end 0)))
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
412 (backward-char)))
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
413 (goto-char (or end pos))
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
414 start)))))
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
415
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
416 (defun comment-search-backward (&optional limit noerror)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
417 "Find a comment start between LIMIT and point.
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
418 Moves point to inside the comment and returns the position of the
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
419 comment-starter. If no comment is found, moves point to LIMIT
56019
0517f0b254be (comment-search-forward, comment-search-backward): Fix typos.
Juanma Barranquero <lekktu@gmail.com>
parents: 54314
diff changeset
420 and raises an error or returns nil if NOERROR is non-nil."
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
421 ;; FIXME: If a comment-start appears inside a comment, we may erroneously
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
422 ;; stop there. This can be rather bad in general, but since
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
423 ;; comment-search-backward is only used to find the comment-column (in
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
424 ;; comment-set-column) and to find the comment-start string (via
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
425 ;; comment-beginning) in indent-new-comment-line, it should be harmless.
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
426 (if (not (re-search-backward comment-start-skip limit t))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
427 (unless noerror (error "No comment"))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
428 (beginning-of-line)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
429 (let* ((end (match-end 0))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
430 (cs (comment-search-forward end t))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
431 (pt (point)))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
432 (if (not cs)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
433 (progn (beginning-of-line)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
434 (comment-search-backward limit noerror))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
435 (while (progn (goto-char cs)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
436 (comment-forward)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
437 (and (< (point) end)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
438 (setq cs (comment-search-forward end t))))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
439 (setq pt (point)))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
440 (goto-char pt)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
441 cs))))
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
442
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
443 (defun comment-beginning ()
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
444 "Find the beginning of the enclosing comment.
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
445 Returns nil if not inside a comment, else moves point and returns
57301
800ede9cd8e3 comment-beginning: doc-fix and don't choke on unset comment-end-skip when at beginning of comment
Daniel Pfeiffer <occitan@esperanto.org>
parents: 57281
diff changeset
446 the same as `comment-search-backward'."
36490
e40c1ae4f04b (comment-normalize-vars): Use [ \t] for the trailing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36271
diff changeset
447 ;; HACK ATTACK!
e40c1ae4f04b (comment-normalize-vars): Use [ \t] for the trailing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36271
diff changeset
448 ;; We should really test `in-string-p' but that can be expensive.
e40c1ae4f04b (comment-normalize-vars): Use [ \t] for the trailing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36271
diff changeset
449 (unless (eq (get-text-property (point) 'face) 'font-lock-string-face)
e40c1ae4f04b (comment-normalize-vars): Use [ \t] for the trailing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36271
diff changeset
450 (let ((pt (point))
e40c1ae4f04b (comment-normalize-vars): Use [ \t] for the trailing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36271
diff changeset
451 (cs (comment-search-backward nil t)))
e40c1ae4f04b (comment-normalize-vars): Use [ \t] for the trailing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36271
diff changeset
452 (when cs
e40c1ae4f04b (comment-normalize-vars): Use [ \t] for the trailing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36271
diff changeset
453 (if (save-excursion
e40c1ae4f04b (comment-normalize-vars): Use [ \t] for the trailing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36271
diff changeset
454 (goto-char cs)
38898
29a1feb5e1fe (comment-beginning): Make sure the comment-start
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36490
diff changeset
455 (and
29a1feb5e1fe (comment-beginning): Make sure the comment-start
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36490
diff changeset
456 ;; For modes where comment-start and comment-end are the same,
29a1feb5e1fe (comment-beginning): Make sure the comment-start
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36490
diff changeset
457 ;; the search above may have found a `ce' rather than a `cs'.
57301
800ede9cd8e3 comment-beginning: doc-fix and don't choke on unset comment-end-skip when at beginning of comment
Daniel Pfeiffer <occitan@esperanto.org>
parents: 57281
diff changeset
458 (or (if comment-end-skip (not (looking-at comment-end-skip)))
38898
29a1feb5e1fe (comment-beginning): Make sure the comment-start
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36490
diff changeset
459 ;; Maybe font-lock knows that it's a `cs'?
29a1feb5e1fe (comment-beginning): Make sure the comment-start
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36490
diff changeset
460 (eq (get-text-property (match-end 0) 'face)
29a1feb5e1fe (comment-beginning): Make sure the comment-start
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36490
diff changeset
461 'font-lock-comment-face)
29a1feb5e1fe (comment-beginning): Make sure the comment-start
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36490
diff changeset
462 (unless (eq (get-text-property (point) 'face)
29a1feb5e1fe (comment-beginning): Make sure the comment-start
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36490
diff changeset
463 'font-lock-comment-face)
29a1feb5e1fe (comment-beginning): Make sure the comment-start
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36490
diff changeset
464 ;; Let's assume it's a `cs' if we're on the same line.
29a1feb5e1fe (comment-beginning): Make sure the comment-start
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36490
diff changeset
465 (>= (line-end-position) pt)))
29a1feb5e1fe (comment-beginning): Make sure the comment-start
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36490
diff changeset
466 ;; Make sure that PT is not past the end of the comment.
29a1feb5e1fe (comment-beginning): Make sure the comment-start
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36490
diff changeset
467 (if (comment-forward 1) (> (point) pt) (eobp))))
36490
e40c1ae4f04b (comment-normalize-vars): Use [ \t] for the trailing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36271
diff changeset
468 cs
e40c1ae4f04b (comment-normalize-vars): Use [ \t] for the trailing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36271
diff changeset
469 (goto-char pt)
e40c1ae4f04b (comment-normalize-vars): Use [ \t] for the trailing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36271
diff changeset
470 nil)))))
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
471
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
472 (defun comment-forward (&optional n)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
473 "Skip forward over N comments.
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
474 Just like `forward-comment' but only for positive N
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
475 and can use regexps instead of syntax."
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
476 (setq n (or n 1))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
477 (if (< n 0) (error "No comment-backward")
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
478 (if comment-use-syntax (forward-comment n)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
479 (while (> n 0)
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
480 (setq n
43689
5e6a5df9973a (comment-forward): Use forward-comment to skip
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42706
diff changeset
481 (if (or (forward-comment 1)
5e6a5df9973a (comment-forward): Use forward-comment to skip
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42706
diff changeset
482 (and (looking-at comment-start-skip)
5e6a5df9973a (comment-forward): Use forward-comment to skip
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42706
diff changeset
483 (goto-char (match-end 0))
5e6a5df9973a (comment-forward): Use forward-comment to skip
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42706
diff changeset
484 (re-search-forward comment-end-skip nil 'move)))
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
485 (1- n) -1)))
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
486 (= n 0))))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
487
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
488 (defun comment-enter-backward ()
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
489 "Move from the end of a comment to the end of its content.
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
490 Point is assumed to be just at the end of a comment."
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
491 (if (bolp)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
492 ;; comment-end = ""
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
493 (progn (backward-char) (skip-syntax-backward " "))
67054
b8c0eb74d77e *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66712
diff changeset
494 (cond
b8c0eb74d77e *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66712
diff changeset
495 ((save-restriction
67057
10e217ceeee2 (comment-enter-backward): Fix last fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67054
diff changeset
496 (narrow-to-region (line-beginning-position) (point))
10e217ceeee2 (comment-enter-backward): Fix last fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67054
diff changeset
497 (goto-char (point-min))
67054
b8c0eb74d77e *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66712
diff changeset
498 (re-search-forward (concat comment-end-skip "\\'") nil t))
b8c0eb74d77e *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66712
diff changeset
499 (goto-char (match-beginning 0)))
80877
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
500 ;; comment-end-skip not found probably because it was not set
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
501 ;; right. Since \\s> should catch the single-char case, let's
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
502 ;; check that we're looking at a two-char comment ender.
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
503 ((not (or (<= (- (point-max) (line-beginning-position)) 1)
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
504 (zerop (logand (car (syntax-after (- (point) 1)))
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
505 ;; Here we take advantage of the fact that
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
506 ;; the syntax class " " is encoded to 0,
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
507 ;; so " 4" gives us just the 4 bit.
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
508 (car (string-to-syntax " 4"))))
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
509 (zerop (logand (car (syntax-after (- (point) 2)))
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
510 (car (string-to-syntax " 3"))))))
67054
b8c0eb74d77e *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66712
diff changeset
511 (backward-char 2)
b8c0eb74d77e *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66712
diff changeset
512 (skip-chars-backward (string (char-after)))
80877
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
513 (skip-syntax-backward " "))
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
514 ;; No clue what's going on: maybe we're really not right after the
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
515 ;; end of a comment. Maybe we're at the "end" because of EOB rather
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
516 ;; than because of a marker.
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
517 (t (skip-syntax-backward " ")))))
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
518
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
519 ;;;;
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
520 ;;;; Commands
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
521 ;;;;
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
522
32307
c3058f7483c4 (comment-indent-default): Autoload.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32186
diff changeset
523 ;;;###autoload
32186
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
524 (defun comment-indent-default ()
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
525 "Default for `comment-indent-function'."
33468
4d15850856e4 (comment-indent-default): Stick \s<\s< to the left
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32307
diff changeset
526 (if (and (looking-at "\\s<\\s<\\(\\s<\\)?")
4d15850856e4 (comment-indent-default): Stick \s<\s< to the left
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32307
diff changeset
527 (or (match-end 1) (/= (current-column) (current-indentation))))
4d15850856e4 (comment-indent-default): Stick \s<\s< to the left
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32307
diff changeset
528 0
32186
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
529 (when (or (/= (current-column) (current-indentation))
63829
5448f90c05f7 (comment-indent-default): Don't get fooled by an early end of buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62531
diff changeset
530 (and (> comment-add 0) (looking-at "\\s<\\(\\S<\\|\\'\\)")))
32186
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
531 comment-column)))
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
532
80877
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
533 (defun comment-choose-indent (&optional indent)
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
534 "Choose the indentation to use for a right-hand-side comment.
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
535 The criteria are (in this order):
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
536 - try to keep the comment's text within `comment-fill-column'.
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
537 - try to align with surrounding comments.
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
538 - prefer INDENT (or `comment-column' if nil).
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
539 Point is expected to be at the start of the comment."
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
540 (unless indent (setq indent comment-column))
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
541 ;; Avoid moving comments past the fill-column.
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
542 (let ((max (+ (current-column)
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
543 (- (or comment-fill-column fill-column)
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
544 (save-excursion (end-of-line) (current-column)))))
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
545 (other nil)
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
546 (min (save-excursion (skip-chars-backward " \t")
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
547 (1+ (current-column)))))
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
548 ;; Fix up the range.
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
549 (if (< max min) (setq max min))
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
550 ;; Don't move past the fill column.
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
551 (if (<= max indent) (setq indent max))
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
552 ;; We can choose anywhere between min..max.
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
553 ;; Let's try to align to a comment on the previous line.
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
554 (save-excursion
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
555 (when (and (zerop (forward-line -1))
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
556 (setq other (comment-search-forward
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
557 (line-end-position) t)))
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
558 (goto-char other) (setq other (current-column))))
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
559 (if (and other (<= other max) (>= other min))
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
560 ;; There is a comment and it's in the range: bingo!
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
561 other
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
562 ;; Can't align to a previous comment: let's try to align to comments
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
563 ;; on the following lines, then. These have not been re-indented yet,
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
564 ;; so we can't directly align ourselves with them. All we do is to try
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
565 ;; and choose an indentation point with which they will be able to
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
566 ;; align themselves.
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
567 (save-excursion
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
568 (while (and (zerop (forward-line 1))
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
569 (setq other (comment-search-forward
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
570 (line-end-position) t)))
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
571 (goto-char other)
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
572 (let ((omax (+ (current-column)
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
573 (- (or comment-fill-column fill-column)
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
574 (save-excursion (end-of-line) (current-column)))))
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
575 (omin (save-excursion (skip-chars-backward " \t")
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
576 (1+ (current-column)))))
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
577 (if (and (>= omax min) (<= omin max))
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
578 (progn (setq min (max omin min))
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
579 (setq max (min omax max)))
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
580 ;; Can't align with this anyway, so exit the loop.
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
581 (goto-char (point-max))))))
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
582 ;; Return the closest point to indent within min..max.
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
583 (max min (min max indent)))))
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
584
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
585 ;;;###autoload
26763
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
586 (defun comment-indent (&optional continue)
53976
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
587 "Indent this line's comment to `comment-column', or insert an empty comment.
38898
29a1feb5e1fe (comment-beginning): Make sure the comment-start
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36490
diff changeset
588 If CONTINUE is non-nil, use the `comment-continue' markers if any."
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
589 (interactive "*")
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
590 (comment-normalize-vars)
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
591 (let* ((empty (save-excursion (beginning-of-line)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
592 (looking-at "[ \t]*$")))
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
593 (starter (or (and continue comment-continue)
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
594 (and empty block-comment-start) comment-start))
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
595 (ender (or (and continue comment-continue "")
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
596 (and empty block-comment-end) comment-end)))
33705
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
597 (unless starter (error "No comment syntax defined"))
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
598 (beginning-of-line)
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
599 (let* ((eolpos (line-end-position))
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
600 (begpos (comment-search-forward eolpos t))
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
601 cpos indent)
85895
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
602 (if (and comment-insert-comment-function (not begpos))
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
603 ;; If no comment and c-i-c-f is set, let it do everything.
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
604 (funcall comment-insert-comment-function)
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
605 ;; An existing comment?
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
606 (if begpos
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
607 (progn
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
608 (if (and (not (looking-at "[\t\n ]"))
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
609 (looking-at comment-end-skip))
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
610 ;; The comment is empty and we have skipped all its space
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
611 ;; and landed right before the comment-ender:
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
612 ;; Go back to the middle of the space.
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
613 (forward-char (/ (skip-chars-backward " \t") -2)))
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
614 (setq cpos (point-marker)))
33705
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
615 ;; If none, insert one.
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
616 (save-excursion
53976
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
617 ;; Some `comment-indent-function's insist on not moving
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
618 ;; comments that are in column 0, so we first go to the
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
619 ;; likely target column.
39079
fc69197cb76d (comment-indent): Don't insert a fixed number of spaces.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39078
diff changeset
620 (indent-to comment-column)
49768
ffe55e61c3fc (comment-indent): Ensure space before added comment.
Dave Love <fx@gnu.org>
parents: 49597
diff changeset
621 ;; Ensure there's a space before the comment for things
ffe55e61c3fc (comment-indent): Ensure space before added comment.
Dave Love <fx@gnu.org>
parents: 49597
diff changeset
622 ;; like sh where it matters (as well as being neater).
74239
9343217833e9 (comment-indent): "?\ " -> "?\s".
Juanma Barranquero <lekktu@gmail.com>
parents: 73317
diff changeset
623 (unless (memq (char-before) '(nil ?\n ?\t ?\s))
9343217833e9 (comment-indent): "?\ " -> "?\s".
Juanma Barranquero <lekktu@gmail.com>
parents: 73317
diff changeset
624 (insert ?\s))
50929
068965f379b3 (comment-indent): Be more careful when inserting
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50845
diff changeset
625 (setq begpos (point))
33705
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
626 (insert starter)
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
627 (setq cpos (point-marker))
85895
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
628 (insert ender)))
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
629 (goto-char begpos)
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
630 ;; Compute desired indent.
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
631 (setq indent (save-excursion (funcall comment-indent-function)))
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
632 ;; If `indent' is nil and there's code before the comment, we can't
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
633 ;; use `indent-according-to-mode', so we default to comment-column.
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
634 (unless (or indent (save-excursion (skip-chars-backward " \t") (bolp)))
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
635 (setq indent comment-column))
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
636 (if (not indent)
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
637 ;; comment-indent-function refuses: delegate to line-indent.
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
638 (indent-according-to-mode)
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
639 ;; If the comment is at the right of code, adjust the indentation.
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
640 (unless (save-excursion (skip-chars-backward " \t") (bolp))
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
641 (setq indent (comment-choose-indent indent)))
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
642 ;; Update INDENT to leave at least one space
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
643 ;; after other nonwhite text on the line.
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
644 (save-excursion
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
645 (skip-chars-backward " \t")
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
646 (unless (bolp)
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
647 (setq indent (max indent (1+ (current-column))))))
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
648 ;; If that's different from comment's current position, change it.
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
649 (unless (= (current-column) indent)
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
650 (delete-region (point) (progn (skip-chars-backward " \t") (point)))
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
651 (indent-to indent)))
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
652 (goto-char cpos)
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
653 (set-marker cpos nil)))))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
654
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
655 ;;;###autoload
26763
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
656 (defun comment-set-column (arg)
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
657 "Set the comment column based on point.
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
658 With no ARG, set the comment column to the current column.
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
659 With just minus as arg, kill any comment on this line.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
660 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
661 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
662 (interactive "P")
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
663 (cond
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
664 ((eq arg '-) (comment-kill nil))
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
665 (arg
50843
bc3a5a6b96ab (comment-set-column, comment-kill, comment-or-uncomment-region):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50839
diff changeset
666 (comment-normalize-vars)
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
667 (save-excursion
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
668 (beginning-of-line)
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
669 (comment-search-backward)
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
670 (beginning-of-line)
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
671 (goto-char (comment-search-forward (line-end-position)))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
672 (setq comment-column (current-column))
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
673 (message "Comment column set to %d" comment-column))
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
674 (comment-indent))
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
675 (t (setq comment-column (current-column))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
676 (message "Comment column set to %d" comment-column))))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
677
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
678 ;;;###autoload
26763
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
679 (defun comment-kill (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
680 "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
681 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
682 (interactive "P")
50843
bc3a5a6b96ab (comment-set-column, comment-kill, comment-or-uncomment-region):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50839
diff changeset
683 (comment-normalize-vars)
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
684 (dotimes (_ (prefix-numeric-value arg))
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
685 (save-excursion
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
686 (beginning-of-line)
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
687 (let ((cs (comment-search-forward (line-end-position) t)))
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
688 (when cs
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
689 (goto-char cs)
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
690 (skip-syntax-backward " ")
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
691 (setq cs (point))
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
692 (comment-forward)
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
693 (kill-region cs (if (bolp) (1- (point)) (point)))
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
694 (indent-according-to-mode))))
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
695 (if arg (forward-line 1))))
26646
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
696
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
697 (defun comment-padright (str &optional n)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
698 "Construct a string composed of STR plus `comment-padding'.
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
699 It also adds N copies of the last non-whitespace chars of STR.
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
700 If STR already contains padding, the corresponding amount is
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
701 ignored from `comment-padding'.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
702 N defaults to 0.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
703 If N is `re', a regexp is returned instead, that would match
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
704 the string for any N."
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
705 (setq n (or n 0))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
706 (when (and (stringp str) (not (string= "" str)))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
707 ;; Separate the actual string from any leading/trailing padding
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
708 (string-match "\\`\\s-*\\(.*?\\)\\s-*\\'" str)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
709 (let ((s (match-string 1 str)) ;actual string
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
710 (lpad (substring str 0 (match-beginning 1))) ;left padding
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
711 (rpad (concat (substring str (match-end 1)) ;original right padding
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
712 (substring comment-padding ;additional right padding
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
713 (min (- (match-end 0) (match-end 1))
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
714 (length comment-padding)))))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
715 ;; We can only duplicate C if the comment-end has multiple chars
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
716 ;; or if comments can be nested, else the comment-end `}' would
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
717 ;; be turned into `}}}' where only the first ends the comment
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
718 ;; and the rest becomes bogus junk.
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
719 (multi (not (and comment-quote-nested
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
720 ;; comment-end is a single char
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
721 (string-match "\\`\\s-*\\S-\\s-*\\'" comment-end)))))
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
722 (if (not (symbolp n))
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
723 (concat lpad s (when multi (make-string n (aref str (1- (match-end 1))))) rpad)
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
724 ;; construct a regexp that would match anything from just S
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
725 ;; to any possible output of this function for any N.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
726 (concat (mapconcat (lambda (c) (concat (regexp-quote (string c)) "?"))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
727 lpad "") ;padding is not required
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
728 (regexp-quote s)
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
729 (when multi "+") ;the last char of S might be repeated
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
730 (mapconcat (lambda (c) (concat (regexp-quote (string c)) "?"))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
731 rpad "")))))) ;padding is not required
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
732
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
733 (defun comment-padleft (str &optional n)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
734 "Construct a string composed of `comment-padding' plus STR.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
735 It also adds N copies of the first non-whitespace chars of STR.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
736 If STR already contains padding, the corresponding amount is
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
737 ignored from `comment-padding'.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
738 N defaults to 0.
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
739 If N is `re', a regexp is returned instead, that would match
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
740 the string for any N."
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
741 (setq n (or n 0))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
742 (when (and (stringp str) (not (string= "" str)))
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
743 ;; Only separate the left pad because we assume there is no right pad.
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
744 (string-match "\\`\\s-*" str)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
745 (let ((s (substring str (match-end 0)))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
746 (pad (concat (substring comment-padding
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
747 (min (- (match-end 0) (match-beginning 0))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
748 (length comment-padding)))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
749 (match-string 0 str)))
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
750 (c (aref str (match-end 0))) ;the first non-space char of STR
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
751 ;; We can only duplicate C if the comment-end has multiple chars
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
752 ;; or if comments can be nested, else the comment-end `}' would
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
753 ;; be turned into `}}}' where only the first ends the comment
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
754 ;; and the rest becomes bogus junk.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
755 (multi (not (and comment-quote-nested
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
756 ;; comment-end is a single char
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
757 (string-match "\\`\\s-*\\S-\\s-*\\'" comment-end)))))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
758 (if (not (symbolp n))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
759 (concat pad (when multi (make-string n c)) s)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
760 ;; Construct a regexp that would match anything from just S
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
761 ;; to any possible output of this function for any N.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
762 ;; We match any number of leading spaces because this regexp will
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
763 ;; be used for uncommenting where we might want to remove
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
764 ;; uncomment markers with arbitrary leading space (because
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
765 ;; they were aligned).
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
766 (concat "\\s-*"
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
767 (if multi (concat (regexp-quote (string c)) "*"))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
768 (regexp-quote s))))))
26646
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
769
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
770 ;;;###autoload
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
771 (defun uncomment-region (beg end &optional arg)
47370
408ecff0939b (uncomment-region): Be more careful with `='.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47212
diff changeset
772 "Uncomment each line in the BEG .. END region.
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
773 The numeric prefix ARG can specify a number of chars to remove from the
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
774 comment markers."
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
775 (interactive "*r\nP")
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
776 (comment-normalize-vars)
53988
043054d4d662 (uncomment-region): Allow eob as comment end.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53976
diff changeset
777 (when (> beg end) (setq beg (prog1 end (setq end beg))))
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
778 ;; Bind `comment-use-global-state' to nil. While uncommenting a region
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
779 ;; (which works a line at a time), a comment can appear to be
56915
12240bc21df6 (uncomment-region): Bind comment-use-global-state to nil.
Eli Zaretskii <eliz@gnu.org>
parents: 56143
diff changeset
780 ;; included in a mult-line string, but it is actually not.
12240bc21df6 (uncomment-region): Bind comment-use-global-state to nil.
Eli Zaretskii <eliz@gnu.org>
parents: 56143
diff changeset
781 (let ((comment-use-global-state nil))
12240bc21df6 (uncomment-region): Bind comment-use-global-state to nil.
Eli Zaretskii <eliz@gnu.org>
parents: 56143
diff changeset
782 (save-excursion
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
783 (funcall uncomment-region-function beg end arg))))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
784
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
785 (defun uncomment-region-default (beg end &optional arg)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
786 "Uncomment each line in the BEG .. END region.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
787 The numeric prefix ARG can specify a number of chars to remove from the
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
788 comment markers."
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
789 (goto-char beg)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
790 (setq end (copy-marker end))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
791 (let* ((numarg (prefix-numeric-value arg))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
792 (ccs comment-continue)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
793 (srei (comment-padright ccs 're))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
794 (csre (comment-padright comment-start 're))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
795 (sre (and srei (concat "^\\s-*?\\(" srei "\\)")))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
796 spt)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
797 (while (and (< (point) end)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
798 (setq spt (comment-search-forward end t)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
799 (let ((ipt (point))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
800 ;; Find the end of the comment.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
801 (ept (progn
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
802 (goto-char spt)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
803 (unless (or (comment-forward)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
804 ;; Allow non-terminated comments.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
805 (eobp))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
806 (error "Can't find the comment end"))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
807 (point)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
808 (box nil)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
809 (box-equal nil)) ;Whether we might be using `=' for boxes.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
810 (save-restriction
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
811 (narrow-to-region spt ept)
72453
204e1538695a (comment-box): Call `comment-normalize-vars'. Add autoload cookie.
Juanma Barranquero <lekktu@gmail.com>
parents: 72410
diff changeset
812
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
813 ;; Remove the comment-start.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
814 (goto-char ipt)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
815 (skip-syntax-backward " ")
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
816 ;; A box-comment starts with a looong comment-start marker.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
817 (when (and (or (and (= (- (point) (point-min)) 1)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
818 (setq box-equal t)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
819 (looking-at "=\\{7\\}")
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
820 (not (eq (char-before (point-max)) ?\n))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
821 (skip-chars-forward "="))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
822 (> (- (point) (point-min) (length comment-start)) 7))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
823 (> (count-lines (point-min) (point-max)) 2))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
824 (setq box t))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
825 ;; Skip the padding. Padding can come from comment-padding and/or
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
826 ;; from comment-start, so we first check comment-start.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
827 (if (or (save-excursion (goto-char (point-min)) (looking-at csre))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
828 (looking-at (regexp-quote comment-padding)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
829 (goto-char (match-end 0)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
830 (when (and sre (looking-at (concat "\\s-*\n\\s-*" srei)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
831 (goto-char (match-end 0)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
832 (if (null arg) (delete-region (point-min) (point))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
833 (skip-syntax-backward " ")
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
834 (delete-char (- numarg))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
835 (unless (or (bobp)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
836 (save-excursion (goto-char (point-min))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
837 (looking-at comment-start-skip)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
838 ;; If there's something left but it doesn't look like
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
839 ;; a comment-start any more, just remove it.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
840 (delete-region (point-min) (point))))
72453
204e1538695a (comment-box): Call `comment-normalize-vars'. Add autoload cookie.
Juanma Barranquero <lekktu@gmail.com>
parents: 72410
diff changeset
841
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
842 ;; Remove the end-comment (and leading padding and such).
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
843 (goto-char (point-max)) (comment-enter-backward)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
844 ;; Check for special `=' used sometimes in comment-box.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
845 (when (and box-equal (not (eq (char-before (point-max)) ?\n)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
846 (let ((pos (point)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
847 ;; skip `=' but only if there are at least 7.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
848 (when (> (skip-chars-backward "=") -7) (goto-char pos))))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
849 (unless (looking-at "\\(\n\\|\\s-\\)*\\'")
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
850 (when (and (bolp) (not (bobp))) (backward-char))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
851 (if (null arg) (delete-region (point) (point-max))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
852 (skip-syntax-forward " ")
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
853 (delete-char numarg)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
854 (unless (or (eobp) (looking-at comment-end-skip))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
855 ;; If there's something left but it doesn't look like
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
856 ;; a comment-end any more, just remove it.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
857 (delete-region (point) (point-max)))))
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
858
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
859 ;; Unquote any nested end-comment.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
860 (comment-quote-nested comment-start comment-end t)
26646
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
861
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
862 ;; Eliminate continuation markers as well.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
863 (when sre
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
864 (let* ((cce (comment-string-reverse (or comment-continue
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
865 comment-start)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
866 (erei (and box (comment-padleft cce 're)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
867 (ere (and erei (concat "\\(" erei "\\)\\s-*$"))))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
868 (goto-char (point-min))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
869 (while (progn
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
870 (if (and ere (re-search-forward
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
871 ere (line-end-position) t))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
872 (replace-match "" t t nil (if (match-end 2) 2 1))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
873 (setq ere nil))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
874 (forward-line 1)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
875 (re-search-forward sre (line-end-position) t))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
876 (replace-match "" t t nil (if (match-end 2) 2 1)))))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
877 ;; Go to the end for the next comment.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
878 (goto-char (point-max))))))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
879 (set-marker end nil))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
880
26645
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
881 (defun comment-make-extra-lines (cs ce ccs cce min-indent max-indent &optional block)
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
882 "Make the leading and trailing extra lines.
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
883 This is used for `extra-line' style (or `box' style if BLOCK is specified)."
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
884 (let ((eindent 0))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
885 (if (not block)
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
886 ;; Try to match CS and CE's content so they align aesthetically.
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
887 (progn
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
888 (setq ce (comment-string-strip ce t t))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
889 (when (string-match "\\(.+\\).*\n\\(.*?\\)\\1" (concat ce "\n" cs))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
890 (setq eindent
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
891 (max (- (match-end 2) (match-beginning 2) (match-beginning 0))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
892 0))))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
893 ;; box comment
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
894 (let* ((width (- max-indent min-indent))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
895 (s (concat cs "a=m" cce))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
896 (e (concat ccs "a=m" ce))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
897 (c (if (string-match ".*\\S-\\S-" cs)
47212
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
898 (aref cs (1- (match-end 0)))
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
899 (if (and (equal comment-end "") (string-match ".*\\S-" cs))
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
900 (aref cs (1- (match-end 0))) ?=)))
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
901 (re "\\s-*a=m\\s-*")
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
902 (_ (string-match re s))
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
903 (lcs (length cs))
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
904 (fill
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
905 (make-string (+ width (- (match-end 0)
47212
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
906 (match-beginning 0) lcs 3)) c)))
26645
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
907 (setq cs (replace-match fill t t s))
47212
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
908 (when (and (not (string-match comment-start-skip cs))
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
909 (string-match "a=m" s))
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
910 ;; The whitespace around CS cannot be ignored: put it back.
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
911 (setq re "a=m")
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
912 (setq fill (make-string (- width lcs) c))
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
913 (setq cs (replace-match fill t t s)))
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
914 (string-match re e)
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
915 (setq ce (replace-match fill t t e))))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
916 (cons (concat cs "\n" (make-string min-indent ? ) ccs)
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
917 (concat cce "\n" (make-string (+ min-indent eindent) ? ) ce))))
26645
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
918
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
919 (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
920 "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
921 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
922 indentation to be kept as it was before narrowing."
47467
c5035e184eba (comment-with-narrowing): Use the `declare' thingy.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47400
diff changeset
923 (declare (debug t) (indent 2))
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
924 (let ((bindent (make-symbol "bindent")))
50947
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
925 `(let ((,bindent (save-excursion (goto-char ,beg) (current-column))))
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
926 (save-restriction
50947
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
927 (narrow-to-region ,beg ,end)
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
928 (goto-char (point-min))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
929 (insert (make-string ,bindent ? ))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
930 (prog1
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
931 (progn ,@body)
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
932 ;; remove the bindent
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
933 (save-excursion
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
934 (goto-char (point-min))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
935 (when (looking-at " *")
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
936 (let ((n (min (- (match-end 0) (match-beginning 0)) ,bindent)))
26645
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
937 (delete-char n)
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
938 (setq ,bindent (- ,bindent n))))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
939 (end-of-line)
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
940 (let ((e (point)))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
941 (beginning-of-line)
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
942 (while (and (> ,bindent 0) (re-search-forward " *" e t))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
943 (let ((n (min ,bindent (- (match-end 0) (match-beginning 0) 1))))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
944 (goto-char (match-beginning 0))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
945 (delete-char n)
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
946 (setq ,bindent (- ,bindent n)))))))))))
26645
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
947
85665
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
948 ;; Compute the number of extra comment starter characters
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
949 ;; (extra semicolons in Lisp mode, extra stars in C mode, etc.)
84625
f867348019bf (comment-add): New arg EXTRA.
Richard M. Stallman <rms@gnu.org>
parents: 82140
diff changeset
950 ;; If ARG is non-nil, just follow ARG.
84679
a5c8194cf0e8 (comment-add): If EXTRA, double `comment-add' value.
Richard M. Stallman <rms@gnu.org>
parents: 84625
diff changeset
951 ;; If the comment-starter is multi-char, just follow ARG.
a5c8194cf0e8 (comment-add): If EXTRA, double `comment-add' value.
Richard M. Stallman <rms@gnu.org>
parents: 84625
diff changeset
952 ;; Otherwise obey comment-add, and double it if EXTRA is non-nil.
85665
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
953 (defun comment-add (arg)
70043
cec61a0fff33 (comment-add): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 68594
diff changeset
954 (if (and (null arg) (= (string-match "[ \t]*\\'" comment-start) 1))
85665
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
955 (* comment-add 1)
70043
cec61a0fff33 (comment-add): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 68594
diff changeset
956 (1- (prefix-numeric-value arg))))
cec61a0fff33 (comment-add): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 68594
diff changeset
957
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
958 (defun comment-region-internal (beg end cs ce
56143
94e9e6f1f0b3 (comment-region-internal): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 56019
diff changeset
959 &optional ccs cce block lines indent)
47212
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
960 "Comment region BEG .. END.
56143
94e9e6f1f0b3 (comment-region-internal): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 56019
diff changeset
961 CS and CE are the comment start string and comment end string,
94e9e6f1f0b3 (comment-region-internal): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 56019
diff changeset
962 respectively. CCS and CCE are the comment continuation strings
94e9e6f1f0b3 (comment-region-internal): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 56019
diff changeset
963 for the start and end of lines, respectively (default to CS and CE).
94e9e6f1f0b3 (comment-region-internal): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 56019
diff changeset
964 BLOCK indicates that end of lines should be marked with either CCE,
94e9e6f1f0b3 (comment-region-internal): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 56019
diff changeset
965 CE or CS \(if CE is empty) and that those markers should be aligned.
94e9e6f1f0b3 (comment-region-internal): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 56019
diff changeset
966 LINES indicates that an extra lines will be used at the beginning
94e9e6f1f0b3 (comment-region-internal): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 56019
diff changeset
967 and end of the region for CE and CS.
94e9e6f1f0b3 (comment-region-internal): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 56019
diff changeset
968 INDENT indicates to put CS and CCS at the current indentation of
94e9e6f1f0b3 (comment-region-internal): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 56019
diff changeset
969 the region rather than at left margin."
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
970 ;;(assert (< beg end))
51337
0237e2420453 (comment-empty-lines): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50947
diff changeset
971 (let ((no-empty (not (or (eq comment-empty-lines t)
0237e2420453 (comment-empty-lines): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50947
diff changeset
972 (and comment-empty-lines (zerop (length ce)))))))
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
973 ;; Sanitize CE and CCE.
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
974 (if (and (stringp ce) (string= "" ce)) (setq ce nil))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
975 (if (and (stringp cce) (string= "" cce)) (setq cce nil))
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
976 ;; If CE is empty, multiline cannot be used.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
977 (unless ce (setq ccs nil cce nil))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
978 ;; Should we mark empty lines as well ?
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
979 (if (or ccs block lines) (setq no-empty nil))
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
980 ;; Make sure we have end-markers for BLOCK mode.
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
981 (when block (unless ce (setq ce (comment-string-reverse cs))))
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
982 ;; If BLOCK is not requested, we don't need CCE.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
983 (unless block (setq cce nil))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
984 ;; Continuation defaults to the same as CS and CE.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
985 (unless ccs (setq ccs cs cce ce))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48257
diff changeset
986
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
987 (save-excursion
26645
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
988 (goto-char end)
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
989 ;; If the end is not at the end of a line and the comment-end
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
990 ;; is implicit (i.e. a newline), explicitly insert a newline.
26645
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
991 (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
992 (comment-with-narrowing beg end
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
993 (let ((min-indent (point-max))
39864
71f93e410115 (comment-region-internal): Don't rebind
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39761
diff changeset
994 (max-indent 0))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
995 (goto-char (point-min))
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
996 ;; Quote any nested comment marker
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
997 (comment-quote-nested comment-start comment-end nil)
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
998
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
999 ;; Loop over all lines to find the needed indentations.
29066
720287a2312f (comment-region-internal): Go back to BEG after quoting
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29037
diff changeset
1000 (goto-char (point-min))
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1001 (while
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1002 (progn
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1003 (unless (looking-at "[ \t]*$")
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1004 (setq min-indent (min min-indent (current-indentation))))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1005 (end-of-line)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1006 (setq max-indent (max max-indent (current-column)))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1007 (not (or (eobp) (progn (forward-line) nil)))))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48257
diff changeset
1008
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1009 (setq max-indent
66712
13b5bb686732 (comment-region-internal): Box more tightly in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64861
diff changeset
1010 (+ max-indent (max (length cs) (length ccs))
13b5bb686732 (comment-region-internal): Box more tightly in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64861
diff changeset
1011 ;; Inserting ccs can change max-indent by (1- tab-width)
13b5bb686732 (comment-region-internal): Box more tightly in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64861
diff changeset
1012 ;; but only if there are TABs in the boxed text, of course.
13b5bb686732 (comment-region-internal): Box more tightly in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64861
diff changeset
1013 (if (save-excursion (goto-char beg)
13b5bb686732 (comment-region-internal): Box more tightly in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64861
diff changeset
1014 (search-forward "\t" end t))
13b5bb686732 (comment-region-internal): Box more tightly in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64861
diff changeset
1015 (1- tab-width) 0)))
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1016 (unless indent (setq min-indent 0))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1017
26645
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
1018 ;; make the leading and trailing lines if requested
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1019 (when lines
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1020 (let ((csce
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1021 (comment-make-extra-lines
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1022 cs ce ccs cce min-indent max-indent block)))
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1023 (setq cs (car csce))
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1024 (setq ce (cdr csce))))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48257
diff changeset
1025
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1026 (goto-char (point-min))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1027 ;; Loop over all lines from BEG to END.
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1028 (while
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1029 (progn
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1030 (unless (and no-empty (looking-at "[ \t]*$"))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1031 (move-to-column min-indent t)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1032 (insert cs) (setq cs ccs) ;switch to CCS after the first line
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1033 (end-of-line)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1034 (if (eobp) (setq cce ce))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1035 (when cce
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1036 (when block (move-to-column max-indent t))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1037 (insert cce)))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1038 (end-of-line)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1039 (not (or (eobp) (progn (forward-line) nil))))))))))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1040
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
1041 ;;;###autoload
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1042 (defun comment-region (beg end &optional arg)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1043 "Comment or uncomment each line in the region.
47212
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
1044 With just \\[universal-argument] prefix arg, uncomment each line in region BEG .. END.
56019
0517f0b254be (comment-search-forward, comment-search-backward): Fix typos.
Juanma Barranquero <lekktu@gmail.com>
parents: 54314
diff changeset
1045 Numeric prefix ARG means use ARG comment characters.
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1046 If ARG is negative, delete that many comment characters instead.
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
1047 By default, comments start at the left margin, are terminated on each line,
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
1048 even for syntax in which newline does not end the comment and blank lines
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
1049 do not get comments. This can be changed with `comment-style'.
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1050
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1051 The strings used as comment starts are built from
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1052 `comment-start' without trailing spaces and `comment-padding'."
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1053 (interactive "*r\nP")
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1054 (comment-normalize-vars)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1055 (if (> beg end) (let (mid) (setq mid beg beg end end mid)))
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1056 (save-excursion
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1057 ;; FIXME: maybe we should call uncomment depending on ARG.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1058 (funcall comment-region-function beg end arg)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1059
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1060 (defun comment-region-default (beg end &optional arg)
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1061 (let* ((numarg (prefix-numeric-value arg))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1062 (style (cdr (assoc comment-style comment-styles)))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1063 (lines (nth 2 style))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1064 (block (nth 1 style))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1065 (multi (nth 0 style)))
84625
f867348019bf (comment-add): New arg EXTRA.
Richard M. Stallman <rms@gnu.org>
parents: 82140
diff changeset
1066
f867348019bf (comment-add): New arg EXTRA.
Richard M. Stallman <rms@gnu.org>
parents: 82140
diff changeset
1067 ;; We use `chars' instead of `syntax' because `\n' might be
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1068 ;; of end-comment syntax rather than of whitespace syntax.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1069 ;; sanitize BEG and END
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1070 (goto-char beg) (skip-chars-forward " \t\n\r") (beginning-of-line)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1071 (setq beg (max beg (point)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1072 (goto-char end) (skip-chars-backward " \t\n\r") (end-of-line)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1073 (setq end (min end (point)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1074 (if (>= beg end) (error "Nothing to comment"))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1075
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1076 ;; sanitize LINES
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1077 (setq lines
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1078 (and
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1079 lines ;; multi
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1080 (progn (goto-char beg) (beginning-of-line)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1081 (skip-syntax-forward " ")
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1082 (>= (point) beg))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1083 (progn (goto-char end) (end-of-line) (skip-syntax-backward " ")
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1084 (<= (point) end))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1085 (or block (not (string= "" comment-end)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1086 (or block (progn (goto-char beg) (search-forward "\n" end t)))))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1087
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1088 ;; don't add end-markers just because the user asked for `block'
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1089 (unless (or lines (string= "" comment-end)) (setq block nil))
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1090
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1091 (cond
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1092 ((consp arg) (uncomment-region beg end))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1093 ((< numarg 0) (uncomment-region beg end (- numarg)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1094 (t
85665
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1095 (let ((multi-char (/= (string-match "[ \t]*\\'" comment-start) 1))
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1096 indent)
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1097 (if (eq (nth 3 style) 'multi-char)
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1098 (setq indent multi-char)
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1099 (setq indent (nth 3 style)))
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1100
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1101 ;; In Lisp and similar modes with one-character comment starters,
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1102 ;; double it by default if `comment-add' says so.
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1103 ;; If it isn't indented, triple it.
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1104 (if (and (null arg) (not multi-char))
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1105 (setq numarg (* comment-add (if indent 1 2)))
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1106 (setq numarg (1- (prefix-numeric-value arg))))
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1107
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1108 (comment-region-internal
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1109 beg end
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1110 (let ((s (comment-padright comment-start numarg)))
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1111 (if (string-match comment-start-skip s) s
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1112 (comment-padright comment-start)))
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1113 (let ((s (comment-padleft comment-end numarg)))
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1114 (and s (if (string-match comment-end-skip s) s
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1115 (comment-padright comment-end))))
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1116 (if multi (comment-padright comment-continue numarg))
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1117 (if multi
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1118 (comment-padleft (comment-string-reverse comment-continue) numarg))
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1119 block
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1120 lines
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1121 indent))))))
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1122
72453
204e1538695a (comment-box): Call `comment-normalize-vars'. Add autoload cookie.
Juanma Barranquero <lekktu@gmail.com>
parents: 72410
diff changeset
1123 ;;;###autoload
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1124 (defun comment-box (beg end &optional arg)
47212
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
1125 "Comment out the BEG .. END region, putting it inside a box.
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1126 The numeric prefix ARG specifies how many characters to add to begin- and
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1127 end- comment markers additionally to what `comment-add' already specifies."
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1128 (interactive "*r\np")
72453
204e1538695a (comment-box): Call `comment-normalize-vars'. Add autoload cookie.
Juanma Barranquero <lekktu@gmail.com>
parents: 72410
diff changeset
1129 (comment-normalize-vars)
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
1130 (let ((comment-style (if (cadr (assoc comment-style comment-styles))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
1131 'box-multi 'box)))
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1132 (comment-region beg end (+ comment-add arg))))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1133
44999
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1134
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1135 ;;;###autoload
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1136 (defun comment-or-uncomment-region (beg end &optional arg)
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1137 "Call `comment-region', unless the region only consists of comments,
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1138 in which case call `uncomment-region'. If a prefix arg is given, it
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1139 is passed on to the respective function."
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1140 (interactive "*r\nP")
50843
bc3a5a6b96ab (comment-set-column, comment-kill, comment-or-uncomment-region):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50839
diff changeset
1141 (comment-normalize-vars)
44999
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1142 (funcall (if (save-excursion ;; check for already commented region
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1143 (goto-char beg)
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1144 (comment-forward (point-max))
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1145 (<= end (point)))
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1146 'uncomment-region 'comment-region)
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1147 beg end arg))
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1148
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
1149 ;;;###autoload
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1150 (defun comment-dwim (arg)
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
1151 "Call the comment command you want (Do What I Mean).
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
1152 If the region is active and `transient-mark-mode' is on, call
34301
7ab80112df37 Fix copyright years.
Dave Love <fx@gnu.org>
parents: 33980
diff changeset
1153 `comment-region' (unless it only consists of comments, in which
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
1154 case it calls `uncomment-region').
85905
7100260421ed (comment-dwim): Call comment-insert-comment-function, if defined, for
Glenn Morris <rgm@gnu.org>
parents: 85895
diff changeset
1155 Else, if the current line is empty, call `comment-insert-comment-function'
7100260421ed (comment-dwim): Call comment-insert-comment-function, if defined, for
Glenn Morris <rgm@gnu.org>
parents: 85895
diff changeset
1156 if it is defined, otherwise insert a comment and indent it.
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
1157 Else if a prefix ARG is specified, call `comment-kill'.
68594
ca4201c7597d Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67057
diff changeset
1158 Else, call `comment-indent'.
ca4201c7597d Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67057
diff changeset
1159 You can configure `comment-style' to change the way regions are commented."
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1160 (interactive "*P")
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1161 (comment-normalize-vars)
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1162 (if (and mark-active transient-mark-mode)
44999
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1163 (comment-or-uncomment-region (region-beginning) (region-end) arg)
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1164 (if (save-excursion (beginning-of-line) (not (looking-at "\\s-*$")))
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
1165 ;; FIXME: If there's no comment to kill on this line and ARG is
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
1166 ;; specified, calling comment-kill is not very clever.
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
1167 (if arg (comment-kill (and (integerp arg) arg)) (comment-indent))
85905
7100260421ed (comment-dwim): Call comment-insert-comment-function, if defined, for
Glenn Morris <rgm@gnu.org>
parents: 85895
diff changeset
1168 ;; Inserting a comment on a blank line. comment-indent calls
7100260421ed (comment-dwim): Call comment-insert-comment-function, if defined, for
Glenn Morris <rgm@gnu.org>
parents: 85895
diff changeset
1169 ;; c-i-c-f if needed in the non-blank case.
7100260421ed (comment-dwim): Call comment-insert-comment-function, if defined, for
Glenn Morris <rgm@gnu.org>
parents: 85895
diff changeset
1170 (if comment-insert-comment-function
7100260421ed (comment-dwim): Call comment-insert-comment-function, if defined, for
Glenn Morris <rgm@gnu.org>
parents: 85895
diff changeset
1171 (funcall comment-insert-comment-function)
7100260421ed (comment-dwim): Call comment-insert-comment-function, if defined, for
Glenn Morris <rgm@gnu.org>
parents: 85895
diff changeset
1172 (let ((add (comment-add arg)))
7100260421ed (comment-dwim): Call comment-insert-comment-function, if defined, for
Glenn Morris <rgm@gnu.org>
parents: 85895
diff changeset
1173 ;; Some modes insist on keeping column 0 comment in column 0
7100260421ed (comment-dwim): Call comment-insert-comment-function, if defined, for
Glenn Morris <rgm@gnu.org>
parents: 85895
diff changeset
1174 ;; so we need to move away from it before inserting the comment.
7100260421ed (comment-dwim): Call comment-insert-comment-function, if defined, for
Glenn Morris <rgm@gnu.org>
parents: 85895
diff changeset
1175 (indent-according-to-mode)
7100260421ed (comment-dwim): Call comment-insert-comment-function, if defined, for
Glenn Morris <rgm@gnu.org>
parents: 85895
diff changeset
1176 (insert (comment-padright comment-start add))
7100260421ed (comment-dwim): Call comment-insert-comment-function, if defined, for
Glenn Morris <rgm@gnu.org>
parents: 85895
diff changeset
1177 (save-excursion
7100260421ed (comment-dwim): Call comment-insert-comment-function, if defined, for
Glenn Morris <rgm@gnu.org>
parents: 85895
diff changeset
1178 (unless (string= "" comment-end)
7100260421ed (comment-dwim): Call comment-insert-comment-function, if defined, for
Glenn Morris <rgm@gnu.org>
parents: 85895
diff changeset
1179 (insert (comment-padleft comment-end add)))
7100260421ed (comment-dwim): Call comment-insert-comment-function, if defined, for
Glenn Morris <rgm@gnu.org>
parents: 85895
diff changeset
1180 (indent-according-to-mode)))))))
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1181
57526
d0bca414ad07 (comment-auto-fill-only-comments): Add autoload.
Richard M. Stallman <rms@gnu.org>
parents: 57301
diff changeset
1182 ;;;###autoload
28961
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1183 (defcustom comment-auto-fill-only-comments nil
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1184 "Non-nil means to only auto-fill inside comments.
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1185 This has no effect in modes that do not define a comment syntax."
62531
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
1186 :type 'boolean
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
1187 :group 'comment)
28961
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1188
50947
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
1189 (defun comment-valid-prefix-p (prefix compos)
73317
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1190 "Check that the adaptive-fill-prefix is consistent with the context.
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1191 PREFIX is the prefix (presumably guessed by `adaptive-fill-mode').
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1192 COMPOS is the position of the beginning of the comment we're in, or nil
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1193 if we're not inside a comment."
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1194 ;; This consistency checking is mostly needed to workaround the limitation
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1195 ;; of auto-fill-mode whose paragraph-determination doesn't pay attention
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1196 ;; to comment boundaries.
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1197 (if (null compos)
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1198 ;; We're not inside a comment: the prefix shouldn't match
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1199 ;; a comment-starter.
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1200 (not (and comment-start comment-start-skip
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1201 (string-match comment-start-skip prefix)))
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1202 (or
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1203 ;; Accept any prefix if the current comment is not EOL-terminated.
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1204 (save-excursion (goto-char compos) (comment-forward) (not (bolp)))
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1205 ;; Accept any prefix that starts with the same comment-start marker
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1206 ;; as the current one.
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1207 (when (string-match (concat "\\`[ \t]*\\(?:" comment-start-skip "\\)")
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1208 prefix)
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1209 (let ((prefix-com (comment-string-strip (match-string 0 prefix) nil t)))
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1210 (string-match "\\`[ \t]*" prefix-com)
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1211 (let* ((prefix-space (match-string 0 prefix-com))
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1212 (prefix-indent (string-width prefix-space))
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1213 (prefix-comstart (substring prefix-com (match-end 0))))
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1214 (save-excursion
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1215 (goto-char compos)
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1216 ;; The comstart marker is the same.
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1217 (and (looking-at (regexp-quote prefix-comstart))
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1218 ;; The indentation as well.
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1219 (or (= prefix-indent
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1220 (- (current-column) (current-left-margin)))
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1221 ;; Check the indentation in two different ways, just
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1222 ;; to try and avoid most of the potential funny cases.
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1223 (equal prefix-space
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1224 (buffer-substring (point)
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1225 (progn (move-to-left-margin)
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1226 (point)))))))))))))
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1227
39761
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1228
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
1229 ;;;###autoload
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
1230 (defun comment-indent-new-line (&optional soft)
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1231 "Break line at point and indent, continuing comment if within one.
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1232 This indents the body of the continued comment
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1233 under the previous comment line.
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1234
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1235 This command is intended for styles where you write a comment per line,
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1236 starting a new comment (and terminating it if necessary) on each line.
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1237 If you want to continue one comment across several lines, use \\[newline-and-indent].
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1238
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1239 If a fill column is specified, it overrides the use of the comment column
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1240 or comment indentation.
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1241
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1242 The inserted newline is marked hard if variable `use-hard-newlines' is true,
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1243 unless optional argument SOFT is non-nil."
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1244 (interactive)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1245 (comment-normalize-vars t)
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1246 (let (compos comin)
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1247 ;; If we are not inside a comment and we only auto-fill comments,
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1248 ;; don't do anything (unless no comment syntax is defined).
28961
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1249 (unless (and comment-start
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1250 comment-auto-fill-only-comments
41286
6b56e476153d (comment-column, comment-style, comment-multi-line)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41253
diff changeset
1251 (not (interactive-p))
28961
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1252 (not (save-excursion
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1253 (prog1 (setq compos (comment-beginning))
28961
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1254 (setq comin (point))))))
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1255
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1256 ;; Now we know we should auto-fill.
44999
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1257 ;; Insert the newline before removing empty space so that markers
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1258 ;; get preserved better.
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1259 (if soft (insert-and-inherit ?\n) (newline 1))
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1260 (save-excursion (forward-char -1) (delete-horizontal-space))
34459
1007fb1b5df9 (comment-indent-new-line): Use delete-horizontal-space
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34301
diff changeset
1261 (delete-horizontal-space)
44999
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1262
39761
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1263 (if (and fill-prefix (not adaptive-fill-mode))
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1264 ;; Blindly trust a non-adaptive fill-prefix.
28961
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1265 (progn
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1266 (indent-to-left-margin)
44999
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1267 (insert-before-markers-and-inherit fill-prefix))
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1268
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1269 ;; If necessary check whether we're inside a comment.
41253
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1270 (unless (or compos (null comment-start))
28961
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1271 (save-excursion
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1272 (backward-char)
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1273 (setq compos (comment-beginning))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1274 (setq comin (point))))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1275
39761
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1276 (cond
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1277 ;; If there's an adaptive prefix, use it unless we're inside
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1278 ;; a comment and the prefix is not a comment starter.
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1279 ((and fill-prefix
73317
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1280 (comment-valid-prefix-p fill-prefix compos))
39761
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1281 (indent-to-left-margin)
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1282 (insert-and-inherit fill-prefix))
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1283 ;; If we're not inside a comment, just try to indent.
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1284 ((not compos) (indent-according-to-mode))
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1285 (t
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1286 (let* ((comment-column
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1287 ;; The continuation indentation should be somewhere between
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1288 ;; the current line's indentation (plus 2 for good measure)
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1289 ;; and the current comment's indentation, with a preference
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1290 ;; for comment-column.
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1291 (save-excursion
41253
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1292 ;; FIXME: use prev line's info rather than first line's.
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1293 (goto-char compos)
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1294 (min (current-column) (max comment-column
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1295 (+ 2 (current-indentation))))))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1296 (comstart (buffer-substring compos comin))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1297 (normalp
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1298 (string-match (regexp-quote (comment-string-strip
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1299 comment-start t t))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1300 comstart))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1301 (comment-end
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1302 (if normalp comment-end
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1303 ;; The comment starter is not the normal comment-start
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1304 ;; so we can't just use comment-end.
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1305 (save-excursion
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1306 (goto-char compos)
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1307 (if (not (comment-forward)) comment-end
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1308 (comment-string-strip
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1309 (buffer-substring
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1310 (save-excursion (comment-enter-backward) (point))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1311 (point))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1312 nil t)))))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1313 (comment-start comstart)
41253
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1314 (continuep (or comment-multi-line
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1315 (cadr (assoc comment-style comment-styles))))
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1316 ;; Force comment-continue to be recreated from comment-start.
38898
29a1feb5e1fe (comment-beginning): Make sure the comment-start
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36490
diff changeset
1317 ;; FIXME: wrong if comment-continue was set explicitly!
41253
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1318 ;; FIXME: use prev line's continuation if available.
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1319 (comment-continue nil))
41253
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1320 (if (and comment-multi-line (> (length comment-end) 0))
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1321 (indent-according-to-mode)
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1322 (insert-and-inherit ?\n)
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1323 (forward-char -1)
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1324 (comment-indent continuep)
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1325 (save-excursion
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1326 (let ((pt (point)))
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1327 (end-of-line)
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1328 (let ((comend (buffer-substring pt (point))))
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1329 ;; The 1+ is to make sure we delete the \n inserted above.
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1330 (delete-region pt (1+ (point)))
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1331 (end-of-line 0)
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1332 (insert comend))))))))))))
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1333
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1334 (provide 'newcomment)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1335
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1336 ;; arch-tag: 01e3320a-00c8-44ea-a696-8f8e7354c858
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1337 ;;; newcomment.el ends here