annotate lisp/newcomment.el @ 63308:51d38cfbe542

Warn about using "cvs up -kb" if one intends to commit changes. Add a pointer to another site with detailed configure and build instructions. Suggest to look at config.log when configure fails. Add MinGW Make 3.80 to the list of successful combinations.
author Eli Zaretskii <eliz@gnu.org>
date Sat, 11 Jun 2005 11:31:29 +0000
parents c905fcf5e3d9
children 5448f90c05f7 f042e7c0fe20
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
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
3 ;; Copyright (C) 1999, 2000, 2003, 2004 Free Software Foundation Inc.
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
4
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
5 ;; Author: code extracted from Emacs-20's simple.el
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
6 ;; Maintainer: Stefan Monnier <monnier@cs.yale.edu>
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
7 ;; Keywords: comment uncomment
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
8
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
9 ;; This file is part of GNU Emacs.
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
10
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
11 ;; 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
12 ;; it under the terms of the GNU General Public License as published by
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
14 ;; any later version.
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
15
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
16 ;; 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
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
19 ;; GNU General Public License for more details.
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
20
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
24 ;; Boston, MA 02111-1307, USA.
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
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
98 "*Column to indent right-margin comments to.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
99 Each mode establishes 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.
8a30d8f66e1a (comment-column): Docstring improvement.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43689
diff changeset
101 Comments might be indented to a value smaller than this in order
44999
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
102 not to go beyond `comment-fill-column'."
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)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
106
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
107 ;;;###autoload
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
108 (defvar comment-start nil
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
109 "*String to insert to start a new comment, or nil if no comment syntax.")
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
110
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
111 ;;;###autoload
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
112 (defvar comment-start-skip nil
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
113 "*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
114 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
115 at the place matched by the close of the first pair.")
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
116
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
117 ;;;###autoload
26763
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
118 (defvar comment-end-skip nil
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
119 "Regexp to match the end of a comment plus everything up to its body.")
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
120
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
121 ;;;###autoload
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
122 (defvar comment-end ""
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
123 "*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
124 Should be an empty string if comments are terminated by end-of-line.")
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
125
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
126 ;;;###autoload
32186
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
127 (defvar comment-indent-function 'comment-indent-default
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
128 "Function to compute desired indentation for a comment.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
129 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
130 the comment's starting delimiter and should return either the desired
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
131 column indentation or nil.
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
132 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
133
53976
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
134 ;;;###autoload
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
135 (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
136 "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
137 The function has no args.
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
138
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
139 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
140 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
141
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
142 (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
143 "Function to comment a region.
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
144 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
145 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
146
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
147 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
148 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
149
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
150 (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
151 "Function to uncomment a region.
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
152 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
153 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
154
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
155 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
156 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
157
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
158 ;; ?? never set
26763
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
159 (defvar block-comment-start nil)
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
160 (defvar block-comment-end nil)
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
161
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
162 (defvar comment-quote-nested t
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
163 "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
164 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
165
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
166 (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
167 "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
168 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
169 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
170 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
171 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
172 preserve indentation.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
173 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
174 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
175
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
176 (defvar comment-add 0
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
177 "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
178 This determines the default value of the numeric argument of `comment-region'.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
179 This should generally stay 0, except for a few modes like Lisp where
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
180 it can be convenient to set it to 1 so that regions are commented with
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
181 two semi-colons.")
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
182
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
183 (defconst comment-styles
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
184 '((plain . (nil nil nil nil))
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
185 (indent . (nil nil nil t))
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
186 (aligned . (nil t nil t))
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
187 (multi-line . (t nil nil t))
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
188 (extra-line . (t nil t t))
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
189 (box . (nil t t t))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
190 (box-multi . (t t t t)))
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
191 "Possible comment styles of the form (STYLE . (MULTI ALIGN EXTRA INDENT)).
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
192 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
193 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
194 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
195 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
196 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
197 INDENT specifies that the `comment-start' markers should not be put at the
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
198 left margin but at the current indentation of the region to comment.")
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
199
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
200 ;;;###autoload
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
201 (defcustom comment-style 'plain
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
202 "*Style to be used for `comment-region'.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
203 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
204 :type (if (boundp 'comment-styles)
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
205 `(choice ,@(mapcar (lambda (s) `(const ,(car s))) comment-styles))
62531
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
206 'symbol)
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
207 :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
208
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
209 ;;;###autoload
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
210 (defcustom comment-padding " "
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
211 "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
212 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
213 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
214
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
215 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
216 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
217 :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
218 :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
219
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
220 ;;;###autoload
26763
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
221 (defcustom comment-multi-line nil
57281
902c984fa20a (comment-multi-line): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents: 56957
diff changeset
222 "*Non-nil means `comment-indent-new-line' continues comments.
902c984fa20a (comment-multi-line): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents: 56957
diff changeset
223 That is, it inserts no new terminator or starter.
902c984fa20a (comment-multi-line): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents: 56957
diff changeset
224 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
225 customize this variable.
902c984fa20a (comment-multi-line): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents: 56957
diff changeset
226
902c984fa20a (comment-multi-line): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents: 56957
diff changeset
227 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
228 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
229 :type 'boolean
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
230 :group 'comment)
26763
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
231
51337
0237e2420453 (comment-empty-lines): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50947
diff changeset
232 (defcustom comment-empty-lines nil
0237e2420453 (comment-empty-lines): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50947
diff changeset
233 "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
234 If t, it always comments out empty lines.
0237e2420453 (comment-empty-lines): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50947
diff changeset
235 if `eol' it only comments out empty lines if comments are
0237e2420453 (comment-empty-lines): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50947
diff changeset
236 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
237 :type '(choice (const :tag "Never" nil)
0237e2420453 (comment-empty-lines): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50947
diff changeset
238 (const :tag "Always" t)
62531
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
239 (const :tag "EOl-terminated" 'eol))
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
240 :group 'comment)
51337
0237e2420453 (comment-empty-lines): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50947
diff changeset
241
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
242 ;;;;
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
243 ;;;; Helpers
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
244 ;;;;
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
245
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
246 (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
247 "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
248 (string-match (concat "\\`" (if beforep "\\s-*")
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
249 "\\(.*?\\)" (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
250 "\\'") str)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
251 (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
252
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
253 (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
254 "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
255 (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
256
39761
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
257 ;;;###autoload
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
258 (defun comment-normalize-vars (&optional noerror)
50845
ac2120f868b9 (comment-normalize-vars): Add docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50843
diff changeset
259 "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
260 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
261 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
262 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
263 (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
264 (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
265 (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
266 (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
267 (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
268 (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
269 ;; comment-use-syntax
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
270 (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
271 (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
272 (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
273 (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
274 (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
275 ;; 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
276 ;; 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
277 (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
278 (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
279 (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
280 (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
281 (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
282 ;; comment-padding
41021
c07719cfdfcd (comment-normalize-vars): Handle a nil comment-padding.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39864
diff changeset
283 (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
284 (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
285 (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
286 ;; comment markers
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
287 ;;(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
288 ;;(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
289 ;; comment-continue
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
290 (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
291 (set (make-local-variable 'comment-continue)
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
292 (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
293 (substring comment-start 1)))
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
294 ;; 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
295 ;; (unless (string-match comment-start-skip comment-continue)
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
296 ;; (kill-local-variable 'comment-continue))
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
297 )
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
298 ;; comment-skip regexps
45902
24d34388fd69 (comment-normalize-vars): Refresh the comment-foo-skip
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45023
diff changeset
299 (unless (and comment-start-skip
24d34388fd69 (comment-normalize-vars): Refresh the comment-foo-skip
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45023
diff changeset
300 ;; 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
301 (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
302 (set (make-local-variable 'comment-start-skip)
50673
4b5928c8d588 (comment-normalize-vars): Fix regexp.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50640
diff changeset
303 (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
304 (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
305 ;; 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
306 ;; 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
307 "+\\)[ \t]*")))
45902
24d34388fd69 (comment-normalize-vars): Refresh the comment-foo-skip
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45023
diff changeset
308 (unless (and comment-end-skip
24d34388fd69 (comment-normalize-vars): Refresh the comment-foo-skip
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45023
diff changeset
309 ;; 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
310 (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
311 (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
312 (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
313 (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
314 ;; 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
315 ;; 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
316 (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
317 "\\|" (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
318 (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
319 (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
320 "\\)"))))))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48257
diff changeset
321
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
322 (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
323 (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
324 "\\\\" (if unp "+" "*")
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
325 (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
326
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
327 (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
328 "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
329 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
330 (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
331 (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
332 (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
333 (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
334 "\\|" (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
335 (goto-char (point-min))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
336 (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
337 (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
338 (forward-char 1)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
339 (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
340 (when (= (length ce) 1)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
341 ;; 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
342 ;; "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
343 ;; 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
344 (if (not unp)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
345 (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
346 (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
347 (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
348 (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
349 (1- (match-end 0)))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
350 (concat "!" cs)))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
351 (backward-char 2)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
352 (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
353 (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
354
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
355 ;;;;
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
356 ;;;; Navigation
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
357 ;;;;
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
358
54314
597fb06dcdda (comment-use-global-state): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54279
diff changeset
359 (defvar comment-use-global-state nil
597fb06dcdda (comment-use-global-state): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54279
diff changeset
360 "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
361 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
362 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
363 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
364 in strings will not confuse Emacs.")
597fb06dcdda (comment-use-global-state): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54279
diff changeset
365
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
366 (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
367 "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
368 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
369 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
370 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
371 (if (not comment-use-syntax)
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
372 (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
373 (or (match-end 1) (match-beginning 0))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
374 (goto-char limit)
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
375 (unless noerror (error "No comment")))
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
376 (let* ((pt (point))
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
377 ;; 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
378 (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
379 (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
380 t)))
597fb06dcdda (comment-use-global-state): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54279
diff changeset
381 (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
382 ;; 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
383 ;; 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
384 (setq s (parse-partial-sexp
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
385 pt (or limit (point-max)) nil nil
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
386 (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
387 t)))
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
388 (if (not (and (nth 8 s) (not (nth 3 s))))
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
389 (unless noerror (error "No comment"))
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
390 ;; We found the comment.
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
391 (let ((pos (point))
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
392 (start (nth 8 s))
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
393 (bol (line-beginning-position))
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
394 (end nil))
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
395 (while (and (null end) (>= (point) bol))
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
396 (if (looking-at comment-start-skip)
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
397 (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
398 (backward-char)))
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
399 (goto-char (or end pos))
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
400 start)))))
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
401
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
402 (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
403 "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
404 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
405 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
406 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
407 ;; 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
408 ;; 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
409 ;; 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
410 ;; 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
411 ;; 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
412 (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
413 (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
414 (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
415 (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
416 (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
417 (pt (point)))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
418 (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
419 (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
420 (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
421 (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
422 (comment-forward)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
423 (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
424 (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
425 (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
426 (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
427 cs))))
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
428
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
429 (defun comment-beginning ()
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
430 "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
431 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
432 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
433 ;; HACK ATTACK!
e40c1ae4f04b (comment-normalize-vars): Use [ \t] for the trailing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36271
diff changeset
434 ;; 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
435 (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
436 (let ((pt (point))
e40c1ae4f04b (comment-normalize-vars): Use [ \t] for the trailing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36271
diff changeset
437 (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
438 (when cs
e40c1ae4f04b (comment-normalize-vars): Use [ \t] for the trailing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36271
diff changeset
439 (if (save-excursion
e40c1ae4f04b (comment-normalize-vars): Use [ \t] for the trailing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36271
diff changeset
440 (goto-char cs)
38898
29a1feb5e1fe (comment-beginning): Make sure the comment-start
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36490
diff changeset
441 (and
29a1feb5e1fe (comment-beginning): Make sure the comment-start
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36490
diff changeset
442 ;; 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
443 ;; 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
444 (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
445 ;; 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
446 (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
447 'font-lock-comment-face)
29a1feb5e1fe (comment-beginning): Make sure the comment-start
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36490
diff changeset
448 (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
449 'font-lock-comment-face)
29a1feb5e1fe (comment-beginning): Make sure the comment-start
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36490
diff changeset
450 ;; 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
451 (>= (line-end-position) pt)))
29a1feb5e1fe (comment-beginning): Make sure the comment-start
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36490
diff changeset
452 ;; 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
453 (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
454 cs
e40c1ae4f04b (comment-normalize-vars): Use [ \t] for the trailing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36271
diff changeset
455 (goto-char pt)
e40c1ae4f04b (comment-normalize-vars): Use [ \t] for the trailing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36271
diff changeset
456 nil)))))
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
457
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
458 (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
459 "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
460 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
461 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
462 (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
463 (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
464 (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
465 (while (> n 0)
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
466 (setq n
43689
5e6a5df9973a (comment-forward): Use forward-comment to skip
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42706
diff changeset
467 (if (or (forward-comment 1)
5e6a5df9973a (comment-forward): Use forward-comment to skip
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42706
diff changeset
468 (and (looking-at comment-start-skip)
5e6a5df9973a (comment-forward): Use forward-comment to skip
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42706
diff changeset
469 (goto-char (match-end 0))
5e6a5df9973a (comment-forward): Use forward-comment to skip
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42706
diff changeset
470 (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
471 (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
472 (= n 0))))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
473
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
474 (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
475 "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
476 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
477 (if (bolp)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
478 ;; comment-end = ""
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
479 (progn (backward-char) (skip-syntax-backward " "))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
480 (let ((end (point)))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
481 (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
482 (save-restriction
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
483 (narrow-to-region (point) end)
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
484 (if (re-search-forward (concat comment-end-skip "\\'") nil t)
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
485 (goto-char (match-beginning 0))
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
486 ;; comment-end-skip not found probably because it was not set right.
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
487 ;; Since \\s> should catch the single-char case, we'll blindly
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
488 ;; assume we're at the end of a two-char comment-end.
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
489 (goto-char (point-max))
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
490 (backward-char 2)
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
491 (skip-chars-backward (string (char-after)))
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
492 (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
493
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
494 ;;;;
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
495 ;;;; Commands
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
496 ;;;;
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
497
32307
c3058f7483c4 (comment-indent-default): Autoload.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32186
diff changeset
498 ;;;###autoload
32186
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
499 (defun comment-indent-default ()
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
500 "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
501 (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
502 (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
503 0
32186
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
504 (when (or (/= (current-column) (current-indentation))
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
505 (and (> comment-add 0) (looking-at "\\s<\\S<")))
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
506 comment-column)))
964f10494360 (comment-indent):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32014
diff changeset
507
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
508 ;;;###autoload
26763
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
509 (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
510 "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
511 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
512 (interactive "*")
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
513 (comment-normalize-vars)
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
514 (let* ((empty (save-excursion (beginning-of-line)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
515 (looking-at "[ \t]*$")))
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
516 (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
517 (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
518 (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
519 (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
520 (unless starter (error "No comment syntax defined"))
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
521 (beginning-of-line)
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
522 (let* ((eolpos (line-end-position))
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
523 (begpos (comment-search-forward eolpos t))
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
524 cpos indent)
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
525 ;; An existing comment?
42030
74a3864ffe9a (comment-indent): Jump to the middle of empty comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41760
diff changeset
526 (if begpos
74a3864ffe9a (comment-indent): Jump to the middle of empty comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41760
diff changeset
527 (progn
74a3864ffe9a (comment-indent): Jump to the middle of empty comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41760
diff changeset
528 (if (and (not (looking-at "[\t\n ]"))
74a3864ffe9a (comment-indent): Jump to the middle of empty comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41760
diff changeset
529 (looking-at comment-end-skip))
74a3864ffe9a (comment-indent): Jump to the middle of empty comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41760
diff changeset
530 ;; The comment is empty and we have skipped all its space
74a3864ffe9a (comment-indent): Jump to the middle of empty comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41760
diff changeset
531 ;; and landed right before the comment-ender:
74a3864ffe9a (comment-indent): Jump to the middle of empty comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41760
diff changeset
532 ;; Go back to the middle of the space.
74a3864ffe9a (comment-indent): Jump to the middle of empty comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41760
diff changeset
533 (forward-char (/ (skip-chars-backward " \t") -2)))
74a3864ffe9a (comment-indent): Jump to the middle of empty comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41760
diff changeset
534 (setq cpos (point-marker)))
33705
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
535 ;; If none, insert one.
53976
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
536 (if comment-insert-comment-function
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
537 (funcall comment-insert-comment-function)
33705
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
538 (save-excursion
53976
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
539 ;; 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
540 ;; 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
541 ;; 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
542 (indent-to comment-column)
49768
ffe55e61c3fc (comment-indent): Ensure space before added comment.
Dave Love <fx@gnu.org>
parents: 49597
diff changeset
543 ;; 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
544 ;; like sh where it matters (as well as being neater).
50929
068965f379b3 (comment-indent): Be more careful when inserting
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50845
diff changeset
545 (unless (memq (char-before) '(nil ?\n ?\t ?\ ))
49768
ffe55e61c3fc (comment-indent): Ensure space before added comment.
Dave Love <fx@gnu.org>
parents: 49597
diff changeset
546 (insert ?\ ))
50929
068965f379b3 (comment-indent): Be more careful when inserting
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50845
diff changeset
547 (setq begpos (point))
33705
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
548 (insert starter)
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
549 (setq cpos (point-marker))
53976
b2fbe05650de (comment-insert-comment-function, comment-region-function,
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53164
diff changeset
550 (insert ender))))
33705
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
551 (goto-char begpos)
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
552 ;; Compute desired indent.
33980
3aa61201a0ab (comment-indent): Save excursion around call to comment-indent-function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33705
diff changeset
553 (setq indent (save-excursion (funcall comment-indent-function)))
52931
3f44b2120fba (comment-indent): Don't call indent-according-to-mode if the line has code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
554 ;; If `indent' is nil and there's code before the comment, we can't
3f44b2120fba (comment-indent): Don't call indent-according-to-mode if the line has code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
555 ;; use `indent-according-to-mode', so we default to comment-column.
3f44b2120fba (comment-indent): Don't call indent-according-to-mode if the line has code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
556 (unless (or indent (save-excursion (skip-chars-backward " \t") (bolp)))
3f44b2120fba (comment-indent): Don't call indent-according-to-mode if the line has code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
557 (setq indent comment-column))
33705
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
558 (if (not indent)
50947
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
559 ;; comment-indent-function refuses: delegate to line-indent.
33705
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
560 (indent-according-to-mode)
52931
3f44b2120fba (comment-indent): Don't call indent-according-to-mode if the line has code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
561 ;; If the comment is at the left of code, adjust the indentation.
41253
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
562 (unless (save-excursion (skip-chars-backward " \t") (bolp))
52931
3f44b2120fba (comment-indent): Don't call indent-according-to-mode if the line has code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
563 ;; Avoid moving comments past the fill-column.
50947
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
564 (let ((max (+ (current-column)
44999
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
565 (- (or comment-fill-column fill-column)
50947
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
566 (save-excursion (end-of-line) (current-column))))))
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
567 (if (<= max indent)
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
568 (setq indent max) ;Don't move past the fill column.
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
569 ;; We can choose anywhere between indent..max.
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
570 ;; Let's try to align to a comment on the previous line.
52931
3f44b2120fba (comment-indent): Don't call indent-according-to-mode if the line has code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
571 (let ((other nil)
3f44b2120fba (comment-indent): Don't call indent-according-to-mode if the line has code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
572 (min (max indent
3f44b2120fba (comment-indent): Don't call indent-according-to-mode if the line has code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
573 (save-excursion (skip-chars-backward " \t")
3f44b2120fba (comment-indent): Don't call indent-according-to-mode if the line has code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
574 (1+ (current-column))))))
50947
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
575 (save-excursion
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
576 (when (and (zerop (forward-line -1))
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
577 (setq other (comment-search-forward
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
578 (line-end-position) t)))
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
579 (goto-char other) (setq other (current-column))))
52931
3f44b2120fba (comment-indent): Don't call indent-according-to-mode if the line has code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
580 (if (and other (<= other max) (>= other min))
50947
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
581 ;; There is a comment and it's in the range: bingo.
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
582 (setq indent other)
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
583 ;; Let's try to align to a comment on the next line, then.
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
584 (let ((other nil))
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
585 (save-excursion
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
586 (when (and (zerop (forward-line 1))
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
587 (setq other (comment-search-forward
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
588 (line-end-position) t)))
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
589 (goto-char other) (setq other (current-column))))
52931
3f44b2120fba (comment-indent): Don't call indent-according-to-mode if the line has code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
590 (if (and other (<= other max) (> other min))
50947
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
591 ;; There is a comment and it's in the range: bingo.
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
592 (setq indent other))))))))
39761
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
593 (unless (= (current-column) indent)
33705
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
594 ;; If that's different from current, change it.
39761
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
595 (delete-region (point) (progn (skip-chars-backward " \t") (point)))
33705
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
596 (indent-to (if (bolp) indent
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
597 (max indent (1+ (current-column)))))))
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
598 (goto-char cpos)
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
599 (set-marker cpos nil))))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
600
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
601 ;;;###autoload
26763
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
602 (defun comment-set-column (arg)
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
603 "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
604 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
605 With just minus as arg, kill any comment on this line.
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
606 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
607 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
608 (interactive "P")
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
609 (cond
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
610 ((eq arg '-) (comment-kill nil))
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
611 (arg
50843
bc3a5a6b96ab (comment-set-column, comment-kill, comment-or-uncomment-region):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50839
diff changeset
612 (comment-normalize-vars)
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
613 (save-excursion
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
614 (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
615 (comment-search-backward)
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
616 (beginning-of-line)
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
617 (goto-char (comment-search-forward (line-end-position)))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
618 (setq comment-column (current-column))
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
619 (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
620 (comment-indent))
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
621 (t (setq comment-column (current-column))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
622 (message "Comment column set to %d" comment-column))))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
623
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
624 ;;;###autoload
26763
5a4671b4895c various fixes and gratuitous movements.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26663
diff changeset
625 (defun comment-kill (arg)
26646
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
626 "Kill the comment on this line, if any.
0d447856a2f7 (kill-comment): Fixed by rewriting it with syntax-tables rather than regexps
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26645
diff changeset
627 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
628 (interactive "P")
50843
bc3a5a6b96ab (comment-set-column, comment-kill, comment-or-uncomment-region):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50839
diff changeset
629 (comment-normalize-vars)
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
630 (dotimes (_ (prefix-numeric-value arg))
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
631 (save-excursion
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
632 (beginning-of-line)
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
633 (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
634 (when cs
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
635 (goto-char cs)
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
636 (skip-syntax-backward " ")
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
637 (setq cs (point))
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
638 (comment-forward)
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
639 (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
640 (indent-according-to-mode))))
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
641 (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
642
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
643 (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
644 "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
645 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
646 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
647 ignored from `comment-padding'.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
648 N defaults to 0.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
649 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
650 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
651 (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
652 (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
653 ;; 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
654 (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
655 (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
656 (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
657 (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
658 (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
659 (min (- (match-end 0) (match-end 1))
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
660 (length comment-padding)))))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
661 ;; 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
662 ;; 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
663 ;; 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
664 ;; and the rest becomes bogus junk.
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
665 (multi (not (and comment-quote-nested
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
666 ;; comment-end is a single char
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
667 (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
668 (if (not (symbolp n))
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
669 (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
670 ;; 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
671 ;; 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
672 (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
673 lpad "") ;padding is not required
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
674 (regexp-quote s)
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
675 (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
676 (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
677 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
678
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
679 (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
680 "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
681 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
682 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
683 ignored from `comment-padding'.
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
684 N defaults to 0.
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
685 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
686 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
687 (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
688 (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
689 ;; 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
690 (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
691 (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
692 (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
693 (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
694 (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
695 (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
696 (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
697 ;; 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
698 ;; 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
699 ;; 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
700 ;; 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
701 (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
702 ;; 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
703 (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
704 (if (not (symbolp n))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
705 (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
706 ;; 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
707 ;; 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
708 ;; 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
709 ;; 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
710 ;; 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
711 ;; they were aligned).
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
712 (concat "\\s-*"
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
713 (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
714 (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
715
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
716 ;;;###autoload
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
717 (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
718 "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
719 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
720 comment markers."
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
721 (interactive "*r\nP")
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
722 (comment-normalize-vars)
53988
043054d4d662 (uncomment-region): Allow eob as comment end.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53976
diff changeset
723 (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
724 ;; 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
725 ;; (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
726 ;; 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
727 (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
728 (save-excursion
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
729 (funcall uncomment-region-function beg end arg))))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
730
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
731 (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
732 "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
733 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
734 comment markers."
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
735 (goto-char beg)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
736 (setq end (copy-marker end))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
737 (let* ((numarg (prefix-numeric-value arg))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
738 (ccs comment-continue)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
739 (srei (comment-padright ccs 're))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
740 (csre (comment-padright comment-start 're))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
741 (sre (and srei (concat "^\\s-*?\\(" srei "\\)")))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
742 spt)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
743 (while (and (< (point) end)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
744 (setq spt (comment-search-forward end t)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
745 (let ((ipt (point))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
746 ;; Find the end of the comment.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
747 (ept (progn
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
748 (goto-char spt)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
749 (unless (or (comment-forward)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
750 ;; Allow non-terminated comments.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
751 (eobp))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
752 (error "Can't find the comment end"))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
753 (point)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
754 (box nil)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
755 (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
756 (save-restriction
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
757 (narrow-to-region spt ept)
56915
12240bc21df6 (uncomment-region): Bind comment-use-global-state to nil.
Eli Zaretskii <eliz@gnu.org>
parents: 56143
diff changeset
758
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
759 ;; Remove the comment-start.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
760 (goto-char ipt)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
761 (skip-syntax-backward " ")
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
762 ;; 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
763 (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
764 (setq box-equal t)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
765 (looking-at "=\\{7\\}")
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
766 (not (eq (char-before (point-max)) ?\n))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
767 (skip-chars-forward "="))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
768 (> (- (point) (point-min) (length comment-start)) 7))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
769 (> (count-lines (point-min) (point-max)) 2))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
770 (setq box t))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
771 ;; 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
772 ;; 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
773 (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
774 (looking-at (regexp-quote comment-padding)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
775 (goto-char (match-end 0)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
776 (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
777 (goto-char (match-end 0)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
778 (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
779 (skip-syntax-backward " ")
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
780 (delete-char (- numarg))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
781 (unless (or (bobp)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
782 (save-excursion (goto-char (point-min))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
783 (looking-at comment-start-skip)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
784 ;; 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
785 ;; 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
786 (delete-region (point-min) (point))))
56915
12240bc21df6 (uncomment-region): Bind comment-use-global-state to nil.
Eli Zaretskii <eliz@gnu.org>
parents: 56143
diff changeset
787
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
788 ;; 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
789 (goto-char (point-max)) (comment-enter-backward)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
790 ;; 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
791 (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
792 (let ((pos (point)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
793 ;; 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
794 (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
795 (unless (looking-at "\\(\n\\|\\s-\\)*\\'")
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
796 (when (and (bolp) (not (bobp))) (backward-char))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
797 (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
798 (skip-syntax-forward " ")
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
799 (delete-char numarg)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
800 (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
801 ;; 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
802 ;; 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
803 (delete-region (point) (point-max)))))
26647
b00a81cd0f6e (comment-find): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26646
diff changeset
804
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
805 ;; Unquote any nested end-comment.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
806 (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
807
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
808 ;; Eliminate continuation markers as well.
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
809 (when sre
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
810 (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
811 comment-start)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
812 (erei (and box (comment-padleft cce 're)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
813 (ere (and erei (concat "\\(" erei "\\)\\s-*$"))))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
814 (goto-char (point-min))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
815 (while (progn
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
816 (if (and ere (re-search-forward
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
817 ere (line-end-position) t))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
818 (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
819 (setq ere nil))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
820 (forward-line 1)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
821 (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
822 (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
823 ;; 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
824 (goto-char (point-max))))))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
825 (set-marker end nil))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
826
26645
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
827 (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
828 "Make the leading and trailing extra lines.
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
829 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
830 (let ((eindent 0))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
831 (if (not block)
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
832 ;; 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
833 (progn
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
834 (setq ce (comment-string-strip ce t t))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
835 (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
836 (setq eindent
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
837 (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
838 0))))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
839 ;; box comment
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
840 (let* ((width (- max-indent min-indent))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
841 (s (concat cs "a=m" cce))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
842 (e (concat ccs "a=m" ce))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
843 (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
844 (aref cs (1- (match-end 0)))
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
845 (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
846 (aref cs (1- (match-end 0))) ?=)))
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
847 (re "\\s-*a=m\\s-*")
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
848 (_ (string-match re s))
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
849 (lcs (length cs))
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
850 (fill
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
851 (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
852 (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
853 (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
854 (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
855 (string-match "a=m" s))
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
856 ;; 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
857 (setq re "a=m")
5ddbbad82052 (comment-make-extra-lines): Only use the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46870
diff changeset
858 (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
859 (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
860 (string-match re e)
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
861 (setq ce (replace-match fill t t e))))
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
862 (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
863 (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
864
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
865 (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
866 "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
867 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
868 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
869 (declare (debug t) (indent 2))
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
870 (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
871 `(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
872 (save-restriction
50947
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
873 (narrow-to-region ,beg ,end)
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
874 (goto-char (point-min))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
875 (insert (make-string ,bindent ? ))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
876 (prog1
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
877 (progn ,@body)
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
878 ;; remove the bindent
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
879 (save-excursion
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
880 (goto-char (point-min))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
881 (when (looking-at " *")
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
882 (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
883 (delete-char n)
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
884 (setq ,bindent (- ,bindent n))))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
885 (end-of-line)
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
886 (let ((e (point)))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
887 (beginning-of-line)
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
888 (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
889 (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
890 (goto-char (match-beginning 0))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
891 (delete-char n)
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
892 (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
893
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
894 (defun comment-region-internal (beg end cs ce
56143
94e9e6f1f0b3 (comment-region-internal): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 56019
diff changeset
895 &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
896 "Comment region BEG .. END.
56143
94e9e6f1f0b3 (comment-region-internal): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 56019
diff changeset
897 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
898 respectively. CCS and CCE are the comment continuation strings
94e9e6f1f0b3 (comment-region-internal): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 56019
diff changeset
899 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
900 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
901 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
902 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
903 and end of the region for CE and CS.
94e9e6f1f0b3 (comment-region-internal): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 56019
diff changeset
904 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
905 the region rather than at left margin."
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
906 ;;(assert (< beg end))
51337
0237e2420453 (comment-empty-lines): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50947
diff changeset
907 (let ((no-empty (not (or (eq comment-empty-lines t)
0237e2420453 (comment-empty-lines): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50947
diff changeset
908 (and comment-empty-lines (zerop (length ce)))))))
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
909 ;; Sanitize CE and CCE.
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
910 (if (and (stringp ce) (string= "" ce)) (setq ce nil))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
911 (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
912 ;; 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
913 (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
914 ;; Should we mark empty lines as well ?
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
915 (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
916 ;; 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
917 (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
918 ;; 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
919 (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
920 ;; 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
921 (unless ccs (setq ccs cs cce ce))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48257
diff changeset
922
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
923 (save-excursion
26645
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
924 (goto-char end)
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
925 ;; 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
926 ;; is implicit (i.e. a newline), explicitly insert a newline.
26645
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
927 (unless (or ce (eolp)) (insert "\n") (indent-according-to-mode))
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
928 (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
929 (let ((min-indent (point-max))
39864
71f93e410115 (comment-region-internal): Don't rebind
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39761
diff changeset
930 (max-indent 0))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
931 (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
932 ;; 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
933 (comment-quote-nested comment-start comment-end nil)
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
934
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
935 ;; 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
936 (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
937 (while
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
938 (progn
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
939 (unless (looking-at "[ \t]*$")
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
940 (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
941 (end-of-line)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
942 (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
943 (not (or (eobp) (progn (forward-line) nil)))))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48257
diff changeset
944
28904
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
945 ;; Inserting ccs can change max-indent by (1- tab-width).
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
946 (setq max-indent
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
947 (+ max-indent (max (length cs) (length ccs)) tab-width -1))
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
948 (unless indent (setq min-indent 0))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
949
26645
39f87d842e57 (comment-make-extra-lines): Moved out of comment-region-internal.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26640
diff changeset
950 ;; make the leading and trailing lines if requested
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
951 (when lines
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
952 (let ((csce
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
953 (comment-make-extra-lines
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
954 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
955 (setq cs (car csce))
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
956 (setq ce (cdr csce))))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48257
diff changeset
957
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
958 (goto-char (point-min))
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
959 ;; 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
960 (while
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
961 (progn
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
962 (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
963 (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
964 (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
965 (end-of-line)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
966 (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
967 (when cce
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
968 (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
969 (insert cce)))
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
970 (end-of-line)
8d91ded5215c (comment-start, comment-start-skip, comment-end): Made `defvar'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28901
diff changeset
971 (not (or (eobp) (progn (forward-line) nil))))))))))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
972
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
973 ;;;###autoload
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
974 (defun comment-region (beg end &optional arg)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
975 "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
976 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
977 Numeric prefix ARG means use ARG comment characters.
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
978 If ARG is negative, delete that many comment characters instead.
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
979 By default, comments start at the left margin, are terminated on each line,
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
980 even for syntax in which newline does not end the comment and blank lines
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
981 do not get comments. This can be changed with `comment-style'.
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
982
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
983 The strings used as comment starts are built from
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
984 `comment-start' without trailing spaces and `comment-padding'."
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
985 (interactive "*r\nP")
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
986 (comment-normalize-vars)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
987 (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
988 (save-excursion
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
989 ;; 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
990 (funcall comment-region-function beg end arg)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
991
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
992 (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
993 (let* ((numarg (prefix-numeric-value arg))
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
994 (add comment-add)
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
995 (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
996 (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
997 (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
998 (multi (nth 0 style)))
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
999 ;; we use `chars' instead of `syntax' because `\n' might be
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1000 ;; 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
1001 ;; sanitize BEG and END
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1002 (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
1003 (setq beg (max beg (point)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1004 (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
1005 (setq end (min end (point)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1006 (if (>= beg end) (error "Nothing to comment"))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1007
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1008 ;; sanitize LINES
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1009 (setq lines
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1010 (and
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1011 lines ;; multi
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1012 (progn (goto-char beg) (beginning-of-line)
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1013 (skip-syntax-forward " ")
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1014 (>= (point) beg))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1015 (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
1016 (<= (point) end))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1017 (or block (not (string= "" comment-end)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1018 (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
1019
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1020 ;; 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
1021 (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
1022
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1023 (cond
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1024 ((consp arg) (uncomment-region beg end))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1025 ((< numarg 0) (uncomment-region beg end (- numarg)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1026 (t
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1027 (setq numarg (if (and (null arg) (= (length comment-start) 1))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1028 add (1- numarg)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1029 (comment-region-internal
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1030 beg end
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1031 (let ((s (comment-padright comment-start numarg)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1032 (if (string-match comment-start-skip s) s
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1033 (comment-padright comment-start)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1034 (let ((s (comment-padleft comment-end numarg)))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1035 (and s (if (string-match comment-end-skip s) s
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1036 (comment-padright comment-end))))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1037 (if multi (comment-padright comment-continue numarg))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1038 (if multi
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1039 (comment-padleft (comment-string-reverse comment-continue) numarg))
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1040 block
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1041 lines
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1042 (nth 3 style))))))
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1043
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1044 (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
1045 "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
1046 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
1047 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
1048 (interactive "*r\np")
29037
238233843fc1 (comment-styles): New `box-multi'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28990
diff changeset
1049 (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
1050 'box-multi 'box)))
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1051 (comment-region beg end (+ comment-add arg))))
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1052
44999
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1053
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1054 ;;;###autoload
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1055 (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
1056 "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
1057 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
1058 is passed on to the respective function."
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1059 (interactive "*r\nP")
50843
bc3a5a6b96ab (comment-set-column, comment-kill, comment-or-uncomment-region):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50839
diff changeset
1060 (comment-normalize-vars)
44999
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1061 (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
1062 (goto-char beg)
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1063 (comment-forward (point-max))
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1064 (<= end (point)))
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1065 'uncomment-region 'comment-region)
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1066 beg end arg))
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1067
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
1068 ;;;###autoload
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1069 (defun comment-dwim (arg)
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
1070 "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
1071 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
1072 `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
1073 case it calls `uncomment-region').
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1074 Else, if the current line is empty, insert a comment and indent it.
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
1075 Else if a prefix ARG is specified, call `comment-kill'.
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
1076 Else, call `comment-indent'."
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1077 (interactive "*P")
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1078 (comment-normalize-vars)
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1079 (if (and mark-active transient-mark-mode)
44999
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1080 (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
1081 (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
1082 ;; 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
1083 ;; 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
1084 (if arg (comment-kill (and (integerp arg) arg)) (comment-indent))
26663
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1085 (let ((add (if arg (prefix-numeric-value arg)
28901
0e7bbb764f47 (comment-use-syntax): Change `maybe' to `undecided'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26763
diff changeset
1086 (if (= (length comment-start) 1) comment-add 0))))
33705
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
1087 ;; Some modes insist on keeping column 0 comment in column 0
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
1088 ;; so we need to move away from it before inserting the comment.
273d5b4aba82 (comment-indent): Insert comment before calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33485
diff changeset
1089 (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
1090 (insert (comment-padright comment-start add))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1091 (save-excursion
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1092 (unless (string= "" comment-end)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1093 (insert (comment-padleft comment-end add)))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1094 (indent-according-to-mode))))))
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1095
57526
d0bca414ad07 (comment-auto-fill-only-comments): Add autoload.
Richard M. Stallman <rms@gnu.org>
parents: 57301
diff changeset
1096 ;;;###autoload
28961
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1097 (defcustom comment-auto-fill-only-comments nil
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1098 "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
1099 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
1100 :type 'boolean
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 57526
diff changeset
1101 :group 'comment)
28961
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1102
50947
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
1103 (defun comment-valid-prefix-p (prefix compos)
39761
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1104 (or
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1105 ;; Accept any prefix if the current comment is not EOL-terminated.
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1106 (save-excursion (goto-char compos) (comment-forward) (not (bolp)))
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1107 ;; Accept any prefix that starts with a comment-start marker.
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1108 (string-match (concat "\\`[ \t]*\\(?:" comment-start-skip "\\)")
50947
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
1109 prefix)))
39761
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1110
29215
21c457830b9d Add abundant autoload cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29119
diff changeset
1111 ;;;###autoload
28949
856f1364a955 (comment-string-strip): Strip terminating newlines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28904
diff changeset
1112 (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
1113 "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
1114 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
1115 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
1116
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1117 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
1118 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
1119 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
1120
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1121 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
1122 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
1123
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1124 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
1125 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
1126 (interactive)
9979145a424e (comment-style(s)): Replaces comment-extra-lines (and comment-multi-line).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26647
diff changeset
1127 (comment-normalize-vars t)
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1128 (let (compos comin)
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1129 ;; 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
1130 ;; 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
1131 (unless (and comment-start
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1132 comment-auto-fill-only-comments
41286
6b56e476153d (comment-column, comment-style, comment-multi-line)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41253
diff changeset
1133 (not (interactive-p))
28961
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1134 (not (save-excursion
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1135 (prog1 (setq compos (comment-beginning))
28961
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1136 (setq comin (point))))))
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1137
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1138 ;; Now we know we should auto-fill.
44999
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1139 ;; 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
1140 ;; get preserved better.
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1141 (if soft (insert-and-inherit ?\n) (newline 1))
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1142 (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
1143 (delete-horizontal-space)
44999
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1144
39761
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1145 (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
1146 ;; Blindly trust a non-adaptive fill-prefix.
28961
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1147 (progn
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1148 (indent-to-left-margin)
44999
a8d9e35048ff (comment-fill-column): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44455
diff changeset
1149 (insert-before-markers-and-inherit fill-prefix))
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1150
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1151 ;; 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
1152 (unless (or compos (null comment-start))
28961
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1153 (save-excursion
8092e0d9d8b9 (comment-beginning): Handle unclosed comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28949
diff changeset
1154 (backward-char)
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1155 (setq compos (comment-beginning))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1156 (setq comin (point))))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1157
39761
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1158 (cond
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1159 ;; 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
1160 ;; 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
1161 ((and fill-prefix
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1162 (or (not compos)
50947
15c3c47aca50 (comment-indent): Try to align to adjacent comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50929
diff changeset
1163 (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
1164 (indent-to-left-margin)
1cf8ddfb831f (comment-indent): Be a little more robust in case
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39486
diff changeset
1165 (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
1166 ;; 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
1167 ((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
1168 (t
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1169 (let* ((comment-column
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1170 ;; The continuation indentation should be somewhere between
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1171 ;; 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
1172 ;; 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
1173 ;; for comment-column.
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1174 (save-excursion
41253
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1175 ;; 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
1176 (goto-char compos)
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1177 (min (current-column) (max comment-column
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1178 (+ 2 (current-indentation))))))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1179 (comstart (buffer-substring compos comin))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1180 (normalp
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1181 (string-match (regexp-quote (comment-string-strip
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1182 comment-start t t))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1183 comstart))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1184 (comment-end
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1185 (if normalp comment-end
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1186 ;; 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
1187 ;; so we can't just use comment-end.
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1188 (save-excursion
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1189 (goto-char compos)
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1190 (if (not (comment-forward)) comment-end
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1191 (comment-string-strip
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1192 (buffer-substring
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1193 (save-excursion (comment-enter-backward) (point))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1194 (point))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1195 nil t)))))
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1196 (comment-start comstart)
41253
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1197 (continuep (or comment-multi-line
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1198 (cadr (assoc comment-style comment-styles))))
28990
80e6f0d6eac1 Fix license text and author.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28961
diff changeset
1199 ;; 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
1200 ;; 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
1201 ;; 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
1202 (comment-continue nil))
41253
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1203 (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
1204 (indent-according-to-mode)
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1205 (insert-and-inherit ?\n)
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1206 (forward-char -1)
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1207 (comment-indent continuep)
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1208 (save-excursion
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1209 (let ((pt (point)))
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1210 (end-of-line)
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1211 (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
1212 ;; 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
1213 (delete-region pt (1+ (point)))
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1214 (end-of-line 0)
87ae7a37e076 (comment-indent): Fix misindentation for comment-only lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41021
diff changeset
1215 (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
1216
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1217 (provide 'newcomment)
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1218
56957
56009bee8238 (uncomment-region-default, comment-region-default):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56915
diff changeset
1219 ;; arch-tag: 01e3320a-00c8-44ea-a696-8f8e7354c858
26640
f95236e53857 First "working" version:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1220 ;;; newcomment.el ends here