annotate lisp/newcomment.el @ 110410:f2e111723c3a

Merge changes made in Gnus trunk. Reimplement nnimap, and do tweaks to the rest of the code to support that. * gnus-int.el (gnus-finish-retrieve-group-infos) (gnus-retrieve-group-data-early): New functions. * gnus-range.el (gnus-range-nconcat): New function. * gnus-start.el (gnus-get-unread-articles): Support early retrieval of data. (gnus-read-active-for-groups): Support finishing the early retrieval of data. * gnus-sum.el (gnus-summary-move-article): Pass the move-to group name if the move is internal, so that nnimap can do fast internal moves. * gnus.el (gnus-article-special-mark-lists): Add uid/active tuples, for nnimap usage. * nnimap.el: Rewritten. * nnmail.el (nnmail-inhibit-default-split-group): New internal variable to allow the mail splitting to not return a default group. This is useful for nnimap, which will leave unmatched mail in the inbox. * utf7.el (utf7-encode): Autoload. Implement shell connection. * nnimap.el (nnimap-open-shell-stream): New function. (nnimap-open-connection): Use it. Get the number of lines by using BODYSTRUCTURE. (nnimap-transform-headers): Get the number of lines in each message. (nnimap-retrieve-headers): Query for BODYSTRUCTURE so that we get the number of lines. Not all servers return UIDNEXT. Work past this problem. Remove junk from end of file. Fix typo in "bogus" section. Make capabilties be case-insensitive. Require cl when compiling. Don't bug out if the LIST command doesn't have any parameters. 2010-09-17 Knut Anders Hatlen <kahatlen@gmail.com> (tiny change) * nnimap.el (nnimap-get-groups): Don't bug out if the LIST command doesn't have any parameters. (mm-text-html-renderer): Document gnus-article-html. 2010-09-17 Julien Danjou <julien@danjou.info> (tiny fix) * mm-decode.el (mm-text-html-renderer): Document gnus-article-html. * dgnushack.el: Define netrc-credentials. If the user doesn't have a /etc/services, supply some sensible port defaults. Have `unseen-or-unread' select an unread unseen article first. (nntp-open-server): Return whether the open was successful or not. Throughout all files, replace (save-excursion (set-buffer ...)) with (with-current-buffer ... ). Save result so that it doesn't say "failed" all the time. Add ~/.authinfo to the default, since that's probably most useful for users. Don't use the "finish" method when we're reading from the agent. Add some more nnimap-relevant agent stuff to nnagent.el. * nnimap.el (nnimap-with-process-buffer): Removed. Revert one line that was changed by mistake in the last checkin. (nnimap-open-connection): Don't error out when we can't make a connection nnimap-related changes to avoid bugging out if we can't contact a server. * gnus-start.el (gnus-get-unread-articles): Don't try to scan groups from methods that are denied. * nnimap.el (nnimap-possibly-change-group): Return nil if we can't log in. (nnimap-finish-retrieve-group-infos): Make sure we're not waiting for nothing. * gnus-sum.el (gnus-select-newsgroup): Indent.
author Katsumi Yamaoka <yamaoka@jpl.org>
date Sat, 18 Sep 2010 10:02:19 +0000
parents 280c8ae2476d
children b799d38f522a
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,
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 105957
diff changeset
4 ;; 2005, 2006, 2007, 2008, 2009, 2010 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
110015
280c8ae2476d Add "Package:" file headers to denote built-in packages.
Chong Yidong <cyd@stupidchicken.com>
parents: 109817
diff changeset
9 ;; Package: emacs
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
10
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
11 ;; This file is part of GNU Emacs.
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
12
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93622
diff changeset
13 ;; 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
14 ;; it under the terms of the GNU General Public License as published by
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93622
diff changeset
15 ;; the Free Software Foundation, either version 3 of the License, or
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93622
diff changeset
16 ;; (at your option) any later version.
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
17
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
18 ;; 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
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
21 ;; GNU General Public License for more details.
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
22
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
23 ;; You should have received a copy of the GNU General Public License
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93622
diff changeset
24 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
25
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
26 ;;; Commentary:
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
27
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
28 ;; A replacement for simple.el's comment-related functions.
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
29
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
30 ;;; Bugs:
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
31
47212
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
32 ;; - 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
33 ;; uncommented one-line at a time.
41689
4e6f73fdeab0 New bug.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41286
diff changeset
34 ;; - 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
35 ;; - 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
36 ;; 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
37 ;; - 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
38 ;; comment markers invalid.
29119
c411f27154ee (comment-make-extra-lines): Don't use `assert'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29066
diff changeset
39 ;; - 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
40 ;; 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
41 ;; - 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
42 ;; 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
43 ;; For example, in Pascal where {...*) and (*...} are possible.
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
44
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
45 ;;; Todo:
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
46
47212
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
47 ;; - rebox.el-style refill.
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
48 ;; - quantized steps in comment-alignment.
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
49 ;; - try to align tail comments.
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
50 ;; - 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
51 ;; - 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
52 ;; - 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
53 ;; deletion of continuation markers less dangerous.
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
54 ;; - 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
55 ;; - 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
56 ;; - 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
57 ;; - 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
58 ;; is not turned on.
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
59
32014
13bd1ce1c353 (comment-indent-function): Use 0 for ;;; and %%%.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30091
diff changeset
60 ;; - 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
61 ;; rather than break it (if possible).
13bd1ce1c353 (comment-indent-function): Use 0 for ;;; and %%%.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30091
diff changeset
62 ;; - 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
63 ;; 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
64
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
65 ;;; Code:
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
66
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
67 ;;;###autoload
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
68 (defalias 'indent-for-comment 'comment-indent)
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
69 ;;;###autoload
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
70 (defalias 'set-comment-column 'comment-set-column)
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
71 ;;;###autoload
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
72 (defalias 'kill-comment 'comment-kill)
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
73 ;;;###autoload
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
74 (defalias 'indent-new-comment-line 'comment-indent-new-line)
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
75
26763
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
76 (defgroup comment nil
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
77 "Indenting and filling of comments."
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
78 :prefix "comment-"
29760
c2940b6e267e (comment) <defgroup>: Add :version.
Dave Love <fx@gnu.org>
parents: 29409
diff changeset
79 :version "21.1"
26763
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
80 :group 'fill)
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
81
50640
8ec8f6706902 (comment-use-syntax): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 49768
diff changeset
82 ;; 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
83 ;;;###autoload
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
84 (defvar comment-use-syntax 'undecided
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
85 "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
86 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
87 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
88 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
89 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
90
44999
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
91 (defcustom comment-fill-column nil
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
92 "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
93 :type '(choice (const nil) integer)
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
94 :group 'comment)
44999
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
95
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
96 ;;;###autoload
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
97 (defcustom comment-column 32
68594
ca4201c7597d Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67057
diff changeset
98 "Column to indent right-margin comments to.
78909
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
99 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
100 can set the value for a particular mode using that mode's hook.
78909
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
101 Comments might be indented to a different value in order not to go beyond
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
102 `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
103 :type 'integer
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
104 :group 'comment)
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
105 (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
106 ;;;###autoload(put 'comment-column 'safe-local-variable 'integerp)
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
107
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
108 ;;;###autoload
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
109 (defvar comment-start nil
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
110 "*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
111 ;;;###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
112
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
113 ;;;###autoload
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
114 (defvar comment-start-skip nil
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
115 "*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
116 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
117 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
118 ;;;###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
119
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
120 ;;;###autoload
26763
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
121 (defvar comment-end-skip nil
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
122 "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
123 ;;;###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
124
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
125 ;;;###autoload
105957
25e1d7e37015 * widget.el (define-widget): Purecopy the docstring.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105372
diff changeset
126 (defvar comment-end (purecopy "")
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
127 "*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
128 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
129 ;;;###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
130
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
131 ;;;###autoload
32186
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
132 (defvar comment-indent-function 'comment-indent-default
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
133 "Function to compute desired indentation for a comment.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
134 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
135 the comment's starting delimiter and should return either the desired
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
136 column indentation or nil.
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
137 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
138
53976
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
139 ;;;###autoload
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
140 (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
141 "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
142 The function has no args.
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
143
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
144 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
145 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
146
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
147 (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
148 "Function to comment a region.
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
149 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
150 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
151
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
152 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
153 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
154
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
155 (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
156 "Function to uncomment a region.
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
157 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
158 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
159
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
160 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
161 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
162
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
163 ;; ?? never set
26763
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
164 (defvar block-comment-start nil)
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
165 (defvar block-comment-end nil)
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
166
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
167 (defvar comment-quote-nested t
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
168 "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
169 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
170
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
171 (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
172 "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
173 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
174 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
175 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
176 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
177 preserve indentation.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
178 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
179 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
180
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
181 (defvar comment-add 0
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
182 "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
183 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
184 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
185
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
186 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
187 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
188
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
189 (defconst comment-styles
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
190 '((plain . (nil nil nil nil))
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
191 (indent . (nil nil nil t))
85665
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
192 (indent-or-triple
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
193 . (nil nil nil multi-char))
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
194 (aligned . (nil t nil t))
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
195 (multi-line . (t nil nil t))
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
196 (extra-line . (t nil t t))
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
197 (box . (nil t t t))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
198 (box-multi . (t t t t)))
78909
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
199 "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
200 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
201 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
202 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
203 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
204 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
205 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
206 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
207 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
208 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
209
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
210 ;;;###autoload
100486
1043d1f4aa3e (comment-style): Default to `indent'. (Bug#1589)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 94678
diff changeset
211 (defcustom comment-style 'indent
68594
ca4201c7597d Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67057
diff changeset
212 "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
213 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
214 :type (if (boundp 'comment-styles)
78909
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
215 `(choice ,@(mapcar (lambda (s) `(const ,(car s)))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
216 comment-styles))
62531
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
217 'symbol)
100486
1043d1f4aa3e (comment-style): Default to `indent'. (Bug#1589)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 94678
diff changeset
218 :version "23.1"
62531
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
105957
25e1d7e37015 * widget.el (define-widget): Purecopy the docstring.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105372
diff changeset
222 (defcustom comment-padding (purecopy " ")
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
93622
5d2b21aad9af (comment-enter-backward): Be careful to restore point changed during narrowing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92692
diff changeset
495 ((save-excursion
5d2b21aad9af (comment-enter-backward): Be careful to restore point changed during narrowing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92692
diff changeset
496 (save-restriction
5d2b21aad9af (comment-enter-backward): Be careful to restore point changed during narrowing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92692
diff changeset
497 (narrow-to-region (line-beginning-position) (point))
5d2b21aad9af (comment-enter-backward): Be careful to restore point changed during narrowing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92692
diff changeset
498 (goto-char (point-min))
5d2b21aad9af (comment-enter-backward): Be careful to restore point changed during narrowing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92692
diff changeset
499 (re-search-forward (concat comment-end-skip "\\'") nil t)))
67054
b8c0eb74d77e *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66712
diff changeset
500 (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
501 ;; 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
502 ;; 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
503 ;; 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
504 ((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
505 (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
506 ;; 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
507 ;; 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
508 ;; 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
509 (car (string-to-syntax " 4"))))
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
510 (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
511 (car (string-to-syntax " 3"))))))
67054
b8c0eb74d77e *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66712
diff changeset
512 (backward-char 2)
b8c0eb74d77e *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66712
diff changeset
513 (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
514 (skip-syntax-backward " "))
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
515 ;; 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
516 ;; 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
517 ;; than because of a marker.
52034b3003ea (comment-search-forward): Make sure we search forward.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76879
diff changeset
518 (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
519
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
520 ;;;;
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
521 ;;;; Commands
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
522 ;;;;
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
523
32307
c3058f7483c4 (comment-indent-default): Autoload.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32186
diff changeset
524 ;;;###autoload
32186
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
525 (defun comment-indent-default ()
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
526 "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
527 (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
528 (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
529 0
32186
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
530 (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
531 (and (> comment-add 0) (looking-at "\\s<\\(\\S<\\|\\'\\)")))
32186
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
532 comment-column)))
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
533
78909
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
534 (defun comment-choose-indent (&optional indent)
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
535 "Choose the indentation to use for a right-hand-side comment.
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
536 The criteria are (in this order):
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
537 - try to keep the comment's text within `comment-fill-column'.
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
538 - try to align with surrounding comments.
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
539 - prefer INDENT (or `comment-column' if nil).
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
540 Point is expected to be at the start of the comment."
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
541 (unless indent (setq indent comment-column))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
542 ;; Avoid moving comments past the fill-column.
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
543 (let ((max (+ (current-column)
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
544 (- (or comment-fill-column fill-column)
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
545 (save-excursion (end-of-line) (current-column)))))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
546 (other nil)
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
547 (min (save-excursion (skip-chars-backward " \t")
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
548 (1+ (current-column)))))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
549 ;; Fix up the range.
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
550 (if (< max min) (setq max min))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
551 ;; Don't move past the fill column.
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
552 (if (<= max indent) (setq indent max))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
553 ;; We can choose anywhere between min..max.
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
554 ;; Let's try to align to a comment on the previous line.
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
555 (save-excursion
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
556 (when (and (zerop (forward-line -1))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
557 (setq other (comment-search-forward
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
558 (line-end-position) t)))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
559 (goto-char other) (setq other (current-column))))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
560 (if (and other (<= other max) (>= other min))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
561 ;; There is a comment and it's in the range: bingo!
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
562 other
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
563 ;; Can't align to a previous comment: let's try to align to comments
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
564 ;; on the following lines, then. These have not been re-indented yet,
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
565 ;; so we can't directly align ourselves with them. All we do is to try
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
566 ;; and choose an indentation point with which they will be able to
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
567 ;; align themselves.
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
568 (save-excursion
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
569 (while (and (zerop (forward-line 1))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
570 (setq other (comment-search-forward
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
571 (line-end-position) t)))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
572 (goto-char other)
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
573 (let ((omax (+ (current-column)
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
574 (- (or comment-fill-column fill-column)
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
575 (save-excursion (end-of-line) (current-column)))))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
576 (omin (save-excursion (skip-chars-backward " \t")
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
577 (1+ (current-column)))))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
578 (if (and (>= omax min) (<= omin max))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
579 (progn (setq min (max omin min))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
580 (setq max (min omax max)))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
581 ;; Can't align with this anyway, so exit the loop.
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
582 (goto-char (point-max))))))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
583 ;; Return the closest point to indent within min..max.
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
584 (max min (min max indent)))))
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
585
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
586 ;;;###autoload
26763
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
587 (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
588 "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
589 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
590 (interactive "*")
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
591 (comment-normalize-vars)
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
592 (let* ((empty (save-excursion (beginning-of-line)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
593 (looking-at "[ \t]*$")))
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
594 (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
595 (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
596 (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
597 (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
598 (unless starter (error "No comment syntax defined"))
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
599 (beginning-of-line)
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
600 (let* ((eolpos (line-end-position))
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
601 (begpos (comment-search-forward eolpos t))
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
602 cpos indent)
85895
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
603 (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
604 ;; 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
605 (funcall comment-insert-comment-function)
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
606 ;; An existing comment?
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
607 (if begpos
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
608 (progn
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
609 (if (and (not (looking-at "[\t\n ]"))
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
610 (looking-at comment-end-skip))
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
611 ;; 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
612 ;; and landed right before the comment-ender:
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
613 ;; 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
614 (forward-char (/ (skip-chars-backward " \t") -2)))
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
615 (setq cpos (point-marker)))
33705
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
616 ;; If none, insert one.
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
617 (save-excursion
53976
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
618 ;; 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
619 ;; 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
620 ;; 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
621 (indent-to comment-column)
49768
ffe55e61c3fc (comment-indent): Ensure space before added comment.
Dave Love <fx@gnu.org>
parents: 49597
diff changeset
622 ;; 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
623 ;; like sh where it matters (as well as being neater).
74239
9343217833e9 (comment-indent): "?\ " -> "?\s".
Juanma Barranquero <lekktu@gmail.com>
parents: 73317
diff changeset
624 (unless (memq (char-before) '(nil ?\n ?\t ?\s))
9343217833e9 (comment-indent): "?\ " -> "?\s".
Juanma Barranquero <lekktu@gmail.com>
parents: 73317
diff changeset
625 (insert ?\s))
50929
068965f379b3 (comment-indent): Be more careful when inserting
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50845
diff changeset
626 (setq begpos (point))
33705
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
627 (insert starter)
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
628 (setq cpos (point-marker))
85895
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
629 (insert ender)))
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
630 (goto-char begpos)
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
631 ;; Compute desired indent.
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
632 (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
633 ;; 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
634 ;; 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
635 (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
636 (setq indent comment-column))
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
637 (if (not indent)
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
638 ;; 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
639 (indent-according-to-mode)
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
640 ;; 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
641 (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
642 (setq indent (comment-choose-indent indent)))
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
643 ;; 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
644 ;; after other nonwhite text on the line.
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
645 (save-excursion
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
646 (skip-chars-backward " \t")
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
647 (unless (bolp)
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
648 (setq indent (max indent (1+ (current-column))))))
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
649 ;; 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
650 (unless (= (current-column) indent)
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
651 (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
652 (indent-to indent)))
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
653 (goto-char cpos)
597274bf7123 (comment-indent): Let comment-insert-comment-function,
Glenn Morris <rgm@gnu.org>
parents: 85665
diff changeset
654 (set-marker cpos nil)))))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
655
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
656 ;;;###autoload
26763
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
657 (defun comment-set-column (arg)
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
658 "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
659 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
660 With just minus as arg, kill any comment on this line.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
661 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
662 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
663 (interactive "P")
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
664 (cond
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
665 ((eq arg '-) (comment-kill nil))
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
666 (arg
50843
bc3a5a6b96ab (comment-set-column, comment-kill, comment-or-uncomment-region):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50839
diff changeset
667 (comment-normalize-vars)
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
668 (save-excursion
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
669 (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
670 (comment-search-backward)
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
671 (beginning-of-line)
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
672 (goto-char (comment-search-forward (line-end-position)))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
673 (setq comment-column (current-column))
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
674 (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
675 (comment-indent))
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
676 (t (setq comment-column (current-column))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
677 (message "Comment column set to %d" comment-column))))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
678
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
679 ;;;###autoload
26763
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
680 (defun comment-kill (arg)
80271
f74b83c18a6a (comment-kill): Docstring improvement.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
681 "Kill the first comment on this line, if any.
26646
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
682 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
683 (interactive "P")
50843
bc3a5a6b96ab (comment-set-column, comment-kill, comment-or-uncomment-region):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50839
diff changeset
684 (comment-normalize-vars)
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
685 (dotimes (_ (prefix-numeric-value arg))
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
686 (save-excursion
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
687 (beginning-of-line)
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
688 (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
689 (when cs
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
690 (goto-char cs)
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
691 (skip-syntax-backward " ")
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
692 (setq cs (point))
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
693 (comment-forward)
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
694 (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
695 (indent-according-to-mode))))
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
696 (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
697
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
698 (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
699 "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
700 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
701 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
702 ignored from `comment-padding'.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
703 N defaults to 0.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
704 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
705 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
706 (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
707 (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
708 ;; 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
709 (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
710 (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
711 (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
712 (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
713 (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
714 (min (- (match-end 0) (match-end 1))
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
715 (length comment-padding)))))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
716 ;; 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
717 ;; 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
718 ;; 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
719 ;; and the rest becomes bogus junk.
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
720 (multi (not (and comment-quote-nested
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
721 ;; comment-end is a single char
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
722 (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
723 (if (not (symbolp n))
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
724 (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
725 ;; 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
726 ;; 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
727 (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
728 lpad "") ;padding is not required
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
729 (regexp-quote s)
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
730 (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
731 (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
732 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
733
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
734 (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
735 "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
736 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
737 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
738 ignored from `comment-padding'.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
739 N defaults to 0.
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
740 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
741 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
742 (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
743 (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
744 ;; 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
745 (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
746 (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
747 (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
748 (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
749 (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
750 (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
751 (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
752 ;; 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
753 ;; 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
754 ;; 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
755 ;; 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
756 (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
757 ;; 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
758 (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
759 (if (not (symbolp n))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
760 (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
761 ;; 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
762 ;; 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
763 ;; 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
764 ;; 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
765 ;; 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
766 ;; they were aligned).
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
767 (concat "\\s-*"
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
768 (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
769 (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
770
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
771 ;;;###autoload
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
772 (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
773 "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
774 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
775 comment markers."
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
776 (interactive "*r\nP")
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
777 (comment-normalize-vars)
53988
043054d4d662 (uncomment-region): Allow eob as comment end.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53976
diff changeset
778 (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
779 ;; 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
780 ;; (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
781 ;; 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
782 (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
783 (save-excursion
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
784 (funcall uncomment-region-function beg end arg))))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
785
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
786 (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
787 "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
788 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
789 comment markers."
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
790 (goto-char beg)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
791 (setq end (copy-marker end))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
792 (let* ((numarg (prefix-numeric-value arg))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
793 (ccs comment-continue)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
794 (srei (comment-padright ccs 're))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
795 (csre (comment-padright comment-start 're))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
796 (sre (and srei (concat "^\\s-*?\\(" srei "\\)")))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
797 spt)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
798 (while (and (< (point) end)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
799 (setq spt (comment-search-forward end t)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
800 (let ((ipt (point))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
801 ;; Find the end of the comment.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
802 (ept (progn
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
803 (goto-char spt)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
804 (unless (or (comment-forward)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
805 ;; Allow non-terminated comments.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
806 (eobp))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
807 (error "Can't find the comment end"))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
808 (point)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
809 (box nil)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
810 (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
811 (save-restriction
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
812 (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
813
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
814 ;; Remove the comment-start.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
815 (goto-char ipt)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
816 (skip-syntax-backward " ")
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
817 ;; 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
818 (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
819 (setq box-equal t)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
820 (looking-at "=\\{7\\}")
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
821 (not (eq (char-before (point-max)) ?\n))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
822 (skip-chars-forward "="))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
823 (> (- (point) (point-min) (length comment-start)) 7))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
824 (> (count-lines (point-min) (point-max)) 2))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
825 (setq box t))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
826 ;; 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
827 ;; 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
828 (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
829 (looking-at (regexp-quote comment-padding)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
830 (goto-char (match-end 0)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
831 (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
832 (goto-char (match-end 0)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
833 (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
834 (skip-syntax-backward " ")
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
835 (delete-char (- numarg))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
836 (unless (or (bobp)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
837 (save-excursion (goto-char (point-min))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
838 (looking-at comment-start-skip)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
839 ;; 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
840 ;; 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
841 (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
842
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
843 ;; 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
844 (goto-char (point-max)) (comment-enter-backward)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
845 ;; 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
846 (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
847 (let ((pos (point)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
848 ;; 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
849 (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
850 (unless (looking-at "\\(\n\\|\\s-\\)*\\'")
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
851 (when (and (bolp) (not (bobp))) (backward-char))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
852 (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
853 (skip-syntax-forward " ")
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
854 (delete-char numarg)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
855 (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
856 ;; 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
857 ;; 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
858 (delete-region (point) (point-max)))))
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
859
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
860 ;; Unquote any nested end-comment.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
861 (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
862
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
863 ;; Eliminate continuation markers as well.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
864 (when sre
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
865 (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
866 comment-start)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
867 (erei (and box (comment-padleft cce 're)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
868 (ere (and erei (concat "\\(" erei "\\)\\s-*$"))))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
869 (goto-char (point-min))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
870 (while (progn
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
871 (if (and ere (re-search-forward
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
872 ere (line-end-position) t))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
873 (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
874 (setq ere nil))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
875 (forward-line 1)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
876 (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
877 (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
878 ;; 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
879 (goto-char (point-max))))))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
880 (set-marker end nil))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
881
26645
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
882 (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
883 "Make the leading and trailing extra lines.
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
884 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
885 (let ((eindent 0))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
886 (if (not block)
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
887 ;; 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
888 (progn
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
889 (setq ce (comment-string-strip ce t t))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
890 (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
891 (setq eindent
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
892 (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
893 0))))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
894 ;; box comment
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
895 (let* ((width (- max-indent min-indent))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
896 (s (concat cs "a=m" cce))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
897 (e (concat ccs "a=m" ce))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
898 (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
899 (aref cs (1- (match-end 0)))
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
900 (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
901 (aref cs (1- (match-end 0))) ?=)))
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
902 (re "\\s-*a=m\\s-*")
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
903 (_ (string-match re s))
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
904 (lcs (length cs))
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
905 (fill
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
906 (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
907 (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
908 (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
909 (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
910 (string-match "a=m" s))
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
911 ;; 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
912 (setq re "a=m")
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
913 (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
914 (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
915 (string-match re e)
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
916 (setq ce (replace-match fill t t e))))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
917 (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
918 (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
919
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
920 (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
921 "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
922 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
923 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
924 (declare (debug t) (indent 2))
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
925 (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
926 `(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
927 (save-restriction
50947
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
928 (narrow-to-region ,beg ,end)
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
929 (goto-char (point-min))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
930 (insert (make-string ,bindent ? ))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
931 (prog1
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
932 (progn ,@body)
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
933 ;; remove the bindent
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
934 (save-excursion
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
935 (goto-char (point-min))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
936 (when (looking-at " *")
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
937 (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
938 (delete-char n)
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
939 (setq ,bindent (- ,bindent n))))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
940 (end-of-line)
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
941 (let ((e (point)))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
942 (beginning-of-line)
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
943 (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
944 (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
945 (goto-char (match-beginning 0))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
946 (delete-char n)
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
947 (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
948
70043
cec61a0fff33 (comment-add): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 68594
diff changeset
949 (defun comment-add (arg)
109817
012ee86d25c7 * lisp/newcomment.el (comment-add): Move comment to docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
950 "Compute the number of extra comment starter characters
012ee86d25c7 * lisp/newcomment.el (comment-add): Move comment to docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
951 \(extra semicolons in Lisp mode, extra stars in C mode, etc.)
012ee86d25c7 * lisp/newcomment.el (comment-add): Move comment to docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
952 If ARG is non-nil, just follow ARG.
012ee86d25c7 * lisp/newcomment.el (comment-add): Move comment to docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
953 If the comment starter is multi-char, just follow ARG.
012ee86d25c7 * lisp/newcomment.el (comment-add): Move comment to docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
954 Otherwise obey `comment-add'."
70043
cec61a0fff33 (comment-add): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 68594
diff changeset
955 (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
956 (* comment-add 1)
70043
cec61a0fff33 (comment-add): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 68594
diff changeset
957 (1- (prefix-numeric-value arg))))
cec61a0fff33 (comment-add): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 68594
diff changeset
958
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
959 (defun comment-region-internal (beg end cs ce
56143
94e9e6f1f0b3 (comment-region-internal): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 56019
diff changeset
960 &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
961 "Comment region BEG .. END.
56143
94e9e6f1f0b3 (comment-region-internal): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 56019
diff changeset
962 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
963 respectively. CCS and CCE are the comment continuation strings
94e9e6f1f0b3 (comment-region-internal): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 56019
diff changeset
964 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
965 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
966 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
967 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
968 and end of the region for CE and CS.
94e9e6f1f0b3 (comment-region-internal): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 56019
diff changeset
969 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
970 the region rather than at left margin."
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
971 ;;(assert (< beg end))
51337
0237e2420453 (comment-empty-lines): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50947
diff changeset
972 (let ((no-empty (not (or (eq comment-empty-lines t)
86771
e947df5d708b Martin Rudalics <rudalics at gmx.at>
Glenn Morris <rgm@gnu.org>
parents: 85905
diff changeset
973 (and comment-empty-lines (zerop (length ce))))))
e947df5d708b Martin Rudalics <rudalics at gmx.at>
Glenn Morris <rgm@gnu.org>
parents: 85905
diff changeset
974 ce-sanitized)
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
975 ;; Sanitize CE and CCE.
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
976 (if (and (stringp ce) (string= "" ce)) (setq ce nil))
86771
e947df5d708b Martin Rudalics <rudalics at gmx.at>
Glenn Morris <rgm@gnu.org>
parents: 85905
diff changeset
977 (setq ce-sanitized ce)
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
978 (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
979 ;; 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
980 (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
981 ;; Should we mark empty lines as well ?
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
982 (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
983 ;; 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
984 (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
985 ;; 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
986 (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
987 ;; 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
988 (unless ccs (setq ccs cs cce ce))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48257
diff changeset
989
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
990 (save-excursion
26645
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
991 (goto-char end)
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
992 ;; 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
993 ;; is implicit (i.e. a newline), explicitly insert a newline.
86771
e947df5d708b Martin Rudalics <rudalics at gmx.at>
Glenn Morris <rgm@gnu.org>
parents: 85905
diff changeset
994 (unless (or ce-sanitized (eolp)) (insert "\n") (indent-according-to-mode))
26645
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
995 (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
996 (let ((min-indent (point-max))
39864
71f93e410115 (comment-region-internal): Don't rebind
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39761
diff changeset
997 (max-indent 0))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
998 (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
999 ;; 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
1000 (comment-quote-nested comment-start comment-end nil)
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1001
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1002 ;; 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
1003 (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
1004 (while
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1005 (progn
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1006 (unless (looking-at "[ \t]*$")
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1007 (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
1008 (end-of-line)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1009 (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
1010 (not (or (eobp) (progn (forward-line) nil)))))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48257
diff changeset
1011
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1012 (setq max-indent
66712
13b5bb686732 (comment-region-internal): Box more tightly in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64861
diff changeset
1013 (+ 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
1014 ;; 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
1015 ;; 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
1016 (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
1017 (search-forward "\t" end t))
13b5bb686732 (comment-region-internal): Box more tightly in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64861
diff changeset
1018 (1- tab-width) 0)))
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1019 (unless indent (setq min-indent 0))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1020
26645
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
1021 ;; make the leading and trailing lines if requested
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1022 (when lines
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1023 (let ((csce
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1024 (comment-make-extra-lines
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1025 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
1026 (setq cs (car csce))
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1027 (setq ce (cdr csce))))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48257
diff changeset
1028
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1029 (goto-char (point-min))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1030 ;; 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
1031 (while
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1032 (progn
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1033 (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
1034 (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
1035 (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
1036 (end-of-line)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1037 (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
1038 (when cce
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1039 (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
1040 (insert cce)))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1041 (end-of-line)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
1042 (not (or (eobp) (progn (forward-line) nil))))))))))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1043
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
1044 ;;;###autoload
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1045 (defun comment-region (beg end &optional arg)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1046 "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
1047 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
1048 Numeric prefix ARG means use ARG comment characters.
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1049 If ARG is negative, delete that many comment characters instead.
103292
0d056af7a0af * newcomment.el (comment-region): Doc fix (Bug#3370).
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
1050
0d056af7a0af * newcomment.el (comment-region): Doc fix (Bug#3370).
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
1051 The strings used as comment starts are built from `comment-start'
0d056af7a0af * newcomment.el (comment-region): Doc fix (Bug#3370).
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
1052 and `comment-padding'; the strings used as comment ends are built
0d056af7a0af * newcomment.el (comment-region): Doc fix (Bug#3370).
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
1053 from `comment-end' and `comment-padding'.
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1054
103292
0d056af7a0af * newcomment.el (comment-region): Doc fix (Bug#3370).
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
1055 By default, the `comment-start' markers are inserted at the
0d056af7a0af * newcomment.el (comment-region): Doc fix (Bug#3370).
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
1056 current indentation of the region, and comments are terminated on
0d056af7a0af * newcomment.el (comment-region): Doc fix (Bug#3370).
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
1057 each line (even for syntaxes in which newline does not end the
0d056af7a0af * newcomment.el (comment-region): Doc fix (Bug#3370).
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
1058 comment and blank lines do not get comments). This can be
0d056af7a0af * newcomment.el (comment-region): Doc fix (Bug#3370).
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
1059 changed with `comment-style'."
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1060 (interactive "*r\nP")
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1061 (comment-normalize-vars)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1062 (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
1063 (save-excursion
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1064 ;; 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
1065 (funcall comment-region-function beg end arg)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1066
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1067 (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
1068 (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
1069 (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
1070 (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
1071 (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
1072 (multi (nth 0 style)))
78909
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
1073
545574ac320d (comment-choose-indent): New function extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
1074 ;; 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
1075 ;; 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
1076 ;; sanitize BEG and END
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1077 (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
1078 (setq beg (max beg (point)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1079 (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
1080 (setq end (min end (point)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1081 (if (>= beg end) (error "Nothing to comment"))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1082
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1083 ;; sanitize LINES
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1084 (setq lines
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1085 (and
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1086 lines ;; multi
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1087 (progn (goto-char beg) (beginning-of-line)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1088 (skip-syntax-forward " ")
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1089 (>= (point) beg))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1090 (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
1091 (<= (point) end))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1092 (or block (not (string= "" comment-end)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1093 (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
1094
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1095 ;; 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
1096 (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
1097
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1098 (cond
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1099 ((consp arg) (uncomment-region beg end))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1100 ((< numarg 0) (uncomment-region beg end (- numarg)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1101 (t
85665
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1102 (let ((multi-char (/= (string-match "[ \t]*\\'" comment-start) 1))
87366
682c0e86fe6b (comment-region-default): Don't triple the
Richard M. Stallman <rms@gnu.org>
parents: 86771
diff changeset
1103 indent triple)
85665
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1104 (if (eq (nth 3 style) 'multi-char)
87366
682c0e86fe6b (comment-region-default): Don't triple the
Richard M. Stallman <rms@gnu.org>
parents: 86771
diff changeset
1105 (save-excursion
682c0e86fe6b (comment-region-default): Don't triple the
Richard M. Stallman <rms@gnu.org>
parents: 86771
diff changeset
1106 (goto-char beg)
682c0e86fe6b (comment-region-default): Don't triple the
Richard M. Stallman <rms@gnu.org>
parents: 86771
diff changeset
1107 (setq indent multi-char
682c0e86fe6b (comment-region-default): Don't triple the
Richard M. Stallman <rms@gnu.org>
parents: 86771
diff changeset
1108 ;; Triple if we will put the comment starter at the margin
682c0e86fe6b (comment-region-default): Don't triple the
Richard M. Stallman <rms@gnu.org>
parents: 86771
diff changeset
1109 ;; and the first line of the region isn't indented
682c0e86fe6b (comment-region-default): Don't triple the
Richard M. Stallman <rms@gnu.org>
parents: 86771
diff changeset
1110 ;; at least two spaces.
682c0e86fe6b (comment-region-default): Don't triple the
Richard M. Stallman <rms@gnu.org>
parents: 86771
diff changeset
1111 triple (and (not multi-char) (looking-at "\t\\| "))))
85665
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1112 (setq indent (nth 3 style)))
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1113
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1114 ;; 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
1115 ;; 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
1116 ;; 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
1117 (if (and (null arg) (not multi-char))
87366
682c0e86fe6b (comment-region-default): Don't triple the
Richard M. Stallman <rms@gnu.org>
parents: 86771
diff changeset
1118 (setq numarg (* comment-add (if triple 2 1)))
85665
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1119 (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
1120
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1121 (comment-region-internal
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1122 beg end
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1123 (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
1124 (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
1125 (comment-padright comment-start)))
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1126 (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
1127 (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
1128 (comment-padright comment-end))))
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1129 (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
1130 (if multi
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1131 (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
1132 block
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1133 lines
2a0d98e5c9f2 (comment-styles): New style indent-or-triple.
Richard M. Stallman <rms@gnu.org>
parents: 84679
diff changeset
1134 indent))))))
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1135
72453
204e1538695a (comment-box): Call `comment-normalize-vars'. Add autoload cookie.
Juanma Barranquero <lekktu@gmail.com>
parents: 72410
diff changeset
1136 ;;;###autoload
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1137 (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
1138 "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
1139 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
1140 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
1141 (interactive "*r\np")
72453
204e1538695a (comment-box): Call `comment-normalize-vars'. Add autoload cookie.
Juanma Barranquero <lekktu@gmail.com>
parents: 72410
diff changeset
1142 (comment-normalize-vars)
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
1143 (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
1144 'box-multi 'box)))
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1145 (comment-region beg end (+ comment-add arg))))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1146
44999
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1147
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1148 ;;;###autoload
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1149 (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
1150 "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
1151 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
1152 is passed on to the respective function."
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1153 (interactive "*r\nP")
50843
bc3a5a6b96ab (comment-set-column, comment-kill, comment-or-uncomment-region):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50839
diff changeset
1154 (comment-normalize-vars)
44999
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1155 (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
1156 (goto-char beg)
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1157 (comment-forward (point-max))
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1158 (<= end (point)))
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1159 'uncomment-region 'comment-region)
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1160 beg end arg))
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1161
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
1162 ;;;###autoload
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1163 (defun comment-dwim (arg)
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
1164 "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
1165 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
1166 `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
1167 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
1168 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
1169 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
1170 Else if a prefix ARG is specified, call `comment-kill'.
68594
ca4201c7597d Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67057
diff changeset
1171 Else, call `comment-indent'.
ca4201c7597d Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67057
diff changeset
1172 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
1173 (interactive "*P")
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1174 (comment-normalize-vars)
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1175 (if (and mark-active transient-mark-mode)
44999
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1176 (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
1177 (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
1178 ;; 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
1179 ;; 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
1180 (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
1181 ;; 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
1182 ;; 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
1183 (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
1184 (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
1185 (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
1186 ;; 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
1187 ;; 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
1188 (indent-according-to-mode)
7100260421ed (comment-dwim): Call comment-insert-comment-function, if defined, for
Glenn Morris <rgm@gnu.org>
parents: 85895
diff changeset
1189 (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
1190 (save-excursion
7100260421ed (comment-dwim): Call comment-insert-comment-function, if defined, for
Glenn Morris <rgm@gnu.org>
parents: 85895
diff changeset
1191 (unless (string= "" comment-end)
7100260421ed (comment-dwim): Call comment-insert-comment-function, if defined, for
Glenn Morris <rgm@gnu.org>
parents: 85895
diff changeset
1192 (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
1193 (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
1194
57526
d0bca414ad07 (comment-auto-fill-only-comments): Add autoload.
Richard M. Stallman <rms@gnu.org>
parents: 57301
diff changeset
1195 ;;;###autoload
28961
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1196 (defcustom comment-auto-fill-only-comments nil
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1197 "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
1198 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
1199 :type 'boolean
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
1200 :group 'comment)
28961
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1201
50947
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
1202 (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
1203 "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
1204 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
1205 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
1206 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
1207 ;; 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
1208 ;; 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
1209 ;; to comment boundaries.
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1210 (if (null compos)
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1211 ;; 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
1212 ;; a comment-starter.
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1213 (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
1214 (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
1215 (or
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1216 ;; 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
1217 (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
1218 ;; 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
1219 ;; as the current one.
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1220 (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
1221 prefix)
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1222 (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
1223 (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
1224 (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
1225 (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
1226 (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
1227 (save-excursion
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1228 (goto-char compos)
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1229 ;; 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
1230 (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
1231 ;; The indentation as well.
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1232 (or (= prefix-indent
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1233 (- (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
1234 ;; 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
1235 ;; 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
1236 (equal prefix-space
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1237 (buffer-substring (point)
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1238 (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
1239 (point)))))))))))))
105372
bd2966850aac Use `called-interactively-p' instead of `interactive-p'.
Juanma Barranquero <lekktu@gmail.com>
parents: 103292
diff changeset
1240
39761
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1241
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
1242 ;;;###autoload
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
1243 (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
1244 "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
1245 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
1246 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
1247
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1248 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
1249 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
1250 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
1251
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1252 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
1253 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
1254
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1255 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
1256 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
1257 (interactive)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1258 (comment-normalize-vars t)
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1259 (let (compos comin)
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1260 ;; 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
1261 ;; 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
1262 (unless (and comment-start
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1263 comment-auto-fill-only-comments
105372
bd2966850aac Use `called-interactively-p' instead of `interactive-p'.
Juanma Barranquero <lekktu@gmail.com>
parents: 103292
diff changeset
1264 (not (called-interactively-p 'interactive))
28961
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1265 (not (save-excursion
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1266 (prog1 (setq compos (comment-beginning))
28961
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1267 (setq comin (point))))))
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 ;; Now we know we should auto-fill.
44999
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1270 ;; 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
1271 ;; get preserved better.
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1272 (if soft (insert-and-inherit ?\n) (newline 1))
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1273 (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
1274 (delete-horizontal-space)
44999
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
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 (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
1277 ;; Blindly trust a non-adaptive fill-prefix.
28961
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1278 (progn
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1279 (indent-to-left-margin)
44999
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1280 (insert-before-markers-and-inherit fill-prefix))
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1281
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1282 ;; 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
1283 (unless (or compos (null comment-start))
28961
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1284 (save-excursion
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1285 (backward-char)
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1286 (setq compos (comment-beginning))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1287 (setq comin (point))))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1288
39761
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1289 (cond
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1290 ;; 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
1291 ;; 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
1292 ((and fill-prefix
73317
a8f3a59e04e0 (comment-valid-prefix-p): Make the check more thorough.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72453
diff changeset
1293 (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
1294 (indent-to-left-margin)
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1295 (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
1296 ;; 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
1297 ((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
1298 (t
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1299 (let* ((comment-column
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1300 ;; The continuation indentation should be somewhere between
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1301 ;; 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
1302 ;; 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
1303 ;; for comment-column.
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1304 (save-excursion
41253
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1305 ;; 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
1306 (goto-char compos)
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1307 (min (current-column) (max comment-column
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1308 (+ 2 (current-indentation))))))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1309 (comstart (buffer-substring compos comin))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1310 (normalp
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1311 (string-match (regexp-quote (comment-string-strip
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1312 comment-start t t))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1313 comstart))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1314 (comment-end
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1315 (if normalp comment-end
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1316 ;; 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
1317 ;; so we can't just use comment-end.
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1318 (save-excursion
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1319 (goto-char compos)
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1320 (if (not (comment-forward)) comment-end
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1321 (comment-string-strip
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1322 (buffer-substring
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1323 (save-excursion (comment-enter-backward) (point))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1324 (point))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1325 nil t)))))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1326 (comment-start comstart)
41253
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1327 (continuep (or comment-multi-line
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1328 (cadr (assoc comment-style comment-styles))))
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1329 ;; 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
1330 ;; 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
1331 ;; 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
1332 (comment-continue nil))
41253
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1333 (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
1334 (indent-according-to-mode)
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1335 (insert-and-inherit ?\n)
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1336 (forward-char -1)
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1337 (comment-indent continuep)
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1338 (save-excursion
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1339 (let ((pt (point)))
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1340 (end-of-line)
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1341 (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
1342 ;; 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
1343 (delete-region pt (1+ (point)))
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1344 (end-of-line 0)
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1345 (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
1346
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1347 (provide 'newcomment)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1348
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1349 ;; arch-tag: 01e3320a-00c8-44ea-a696-8f8e7354c858
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1350 ;;; newcomment.el ends here