X-Git-Url: https://git.hcoop.net/bpt/emacs.git/blobdiff_plain/eb0c4c308497fa8af6ee20354d4168898743f334..9136e895236df7ca44c13aca1cc0bdc3408186ab:/lisp/newcomment.el diff --git a/lisp/newcomment.el b/lisp/newcomment.el index 2de4fa025f..84b87593f8 100644 --- a/lisp/newcomment.el +++ b/lisp/newcomment.el @@ -1,7 +1,7 @@ ;;; newcomment.el --- (un)comment regions of buffers ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006, 2007 Free Software Foundation, Inc. +;; 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. ;; Author: code extracted from Emacs-20's simple.el ;; Maintainer: Stefan Monnier @@ -9,10 +9,10 @@ ;; This file is part of GNU Emacs. -;; GNU Emacs is free software; you can redistribute it and/or modify +;; GNU Emacs is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation; either version 3, or (at your option) -;; any later version. +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -20,9 +20,7 @@ ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. +;; along with GNU Emacs. If not, see . ;;; Commentary: @@ -124,7 +122,7 @@ at the place matched by the close of the first pair.") ;;;###autoload(put 'comment-end-skip 'safe-local-variable 'string-or-null-p) ;;;###autoload -(defvar comment-end "" +(defvar comment-end (purecopy "") "*String to insert to end a new comment. Should be an empty string if comments are terminated by end-of-line.") ;;;###autoload(put 'comment-end 'safe-local-variable 'string-or-null-p) @@ -209,17 +207,18 @@ If INDENT is `multi-char', that means indent multi-character comment starters, but not one-character comment starters.") ;;;###autoload -(defcustom comment-style 'indent-or-triple +(defcustom comment-style 'indent "Style to be used for `comment-region'. See `comment-styles' for a list of available styles." :type (if (boundp 'comment-styles) `(choice ,@(mapcar (lambda (s) `(const ,(car s))) comment-styles)) 'symbol) + :version "23.1" :group 'comment) ;;;###autoload -(defcustom comment-padding " " +(defcustom comment-padding (purecopy " ") "Padding string that `comment-region' puts between comment chars and text. Can also be an integer which will be automatically turned into a string of the corresponding number of spaces. @@ -492,10 +491,11 @@ Point is assumed to be just at the end of a comment." ;; comment-end = "" (progn (backward-char) (skip-syntax-backward " ")) (cond - ((save-restriction - (narrow-to-region (line-beginning-position) (point)) - (goto-char (point-min)) - (re-search-forward (concat comment-end-skip "\\'") nil t)) + ((save-excursion + (save-restriction + (narrow-to-region (line-beginning-position) (point)) + (goto-char (point-min)) + (re-search-forward (concat comment-end-skip "\\'") nil t))) (goto-char (match-beginning 0))) ;; comment-end-skip not found probably because it was not set ;; right. Since \\s> should catch the single-char case, let's @@ -677,7 +677,7 @@ With any other arg, set comment column to indentation of the previous comment ;;;###autoload (defun comment-kill (arg) - "Kill the comment on this line, if any. + "Kill the first comment on this line, if any. With prefix ARG, kill comments on that many lines starting with this one." (interactive "P") (comment-normalize-vars) @@ -969,9 +969,11 @@ INDENT indicates to put CS and CCS at the current indentation of the region rather than at left margin." ;;(assert (< beg end)) (let ((no-empty (not (or (eq comment-empty-lines t) - (and comment-empty-lines (zerop (length ce))))))) + (and comment-empty-lines (zerop (length ce)))))) + ce-sanitized) ;; Sanitize CE and CCE. (if (and (stringp ce) (string= "" ce)) (setq ce nil)) + (setq ce-sanitized ce) (if (and (stringp cce) (string= "" cce)) (setq cce nil)) ;; If CE is empty, multiline cannot be used. (unless ce (setq ccs nil cce nil)) @@ -988,7 +990,7 @@ the region rather than at left margin." (goto-char end) ;; If the end is not at the end of a line and the comment-end ;; is implicit (i.e. a newline), explicitly insert a newline. - (unless (or ce (eolp)) (insert "\n") (indent-according-to-mode)) + (unless (or ce-sanitized (eolp)) (insert "\n") (indent-according-to-mode)) (comment-with-narrowing beg end (let ((min-indent (point-max)) (max-indent 0)) @@ -1044,12 +1046,16 @@ the region rather than at left margin." With just \\[universal-argument] prefix arg, uncomment each line in region BEG .. END. Numeric prefix ARG means use ARG comment characters. If ARG is negative, delete that many comment characters instead. -By default, comments start at the left margin, are terminated on each line, -even for syntax in which newline does not end the comment and blank lines -do not get comments. This can be changed with `comment-style'. -The strings used as comment starts are built from -`comment-start' without trailing spaces and `comment-padding'." +The strings used as comment starts are built from `comment-start' +and `comment-padding'; the strings used as comment ends are built +from `comment-end' and `comment-padding'. + +By default, the `comment-start' markers are inserted at the +current indentation of the region, and comments are terminated on +each line (even for syntaxes in which newline does not end the +comment and blank lines do not get comments). This can be +changed with `comment-style'." (interactive "*r\nP") (comment-normalize-vars) (if (> beg end) (let (mid) (setq mid beg beg end end mid))) @@ -1093,16 +1099,22 @@ The strings used as comment starts are built from ((< numarg 0) (uncomment-region beg end (- numarg))) (t (let ((multi-char (/= (string-match "[ \t]*\\'" comment-start) 1)) - indent) + indent triple) (if (eq (nth 3 style) 'multi-char) - (setq indent multi-char) + (save-excursion + (goto-char beg) + (setq indent multi-char + ;; Triple if we will put the comment starter at the margin + ;; and the first line of the region isn't indented + ;; at least two spaces. + triple (and (not multi-char) (looking-at "\t\\| ")))) (setq indent (nth 3 style))) ;; In Lisp and similar modes with one-character comment starters, ;; double it by default if `comment-add' says so. ;; If it isn't indented, triple it. (if (and (null arg) (not multi-char)) - (setq numarg (* comment-add (if indent 1 2))) + (setq numarg (* comment-add (if triple 2 1))) (setq numarg (1- (prefix-numeric-value arg)))) (comment-region-internal @@ -1224,7 +1236,7 @@ if we're not inside a comment." (buffer-substring (point) (progn (move-to-left-margin) (point))))))))))))) - + ;;;###autoload (defun comment-indent-new-line (&optional soft) @@ -1248,7 +1260,7 @@ unless optional argument SOFT is non-nil." ;; don't do anything (unless no comment syntax is defined). (unless (and comment-start comment-auto-fill-only-comments - (not (interactive-p)) + (not (called-interactively-p 'interactive)) (not (save-excursion (prog1 (setq compos (comment-beginning)) (setq comin (point))))))