Mercurial > emacs
changeset 21629:2da609ac7ab1
(change-log-mode): Revert 1997-12-03 doc change.
(add-change-log-entry): Replace 1997-12-03 changes with simple
implementation of add-log-keep-changes-together. Doc fix.
(change-log-add-make-room): Function deleted.
(add-change-log-entry-other-window, change-log-mode,
add-log-keep-changes-together): Doc fix.
(add-log-lisp-like-modes): Add dsssl-mode.
(add-log-current-defun): Generalize Fortran case.
author | Dave Love <fx@gnu.org> |
---|---|
date | Fri, 17 Apr 1998 20:27:32 +0000 |
parents | 4a3e3887c0dc |
children | d2b8e50dd2e0 |
files | lisp/add-log.el |
diffstat | 1 files changed, 68 insertions(+), 80 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/add-log.el Fri Apr 17 17:24:17 1998 +0000 +++ b/lisp/add-log.el Fri Apr 17 20:27:32 1998 +0000 @@ -1,6 +1,6 @@ ;;; add-log.el --- change log maintenance commands for Emacs -;; Copyright (C) 1985, 86, 88, 93, 94, 1997 Free Software Foundation, Inc. +;; Copyright (C) 1985, 86, 88, 93, 94, 97, 1998 Free Software Foundation, Inc. ;; Keywords: tools @@ -27,9 +27,12 @@ ;;; Code: +(eval-when-compile (require 'fortran)) + (defgroup change-log nil "Change log maintenance" :group 'tools + :link '(custom-manual "(emacs)Change Log") :prefix "change-log-" :prefix "add-log-") @@ -77,26 +80,34 @@ :group 'change-log) (defcustom add-log-keep-changes-together nil - "*If non-nil, then keep changes to the same file together. -If this variable is nil and you add log for (e.g.) two files, -the change log entries are added cumulatively to the beginning of log. -This is the old behaviour: + "*If non-nil, normally keep day's log entries for one file together. - Wday Mon DD TIME YYYY +Log entries for a given file made with \\[add-change-log-entry] or +\\[add-change-log-entry-other-window] will only be added to others \ +for that file made +today if this variable is non-nil or that file comes first in today's +entries. Otherwise another entry for that file will be started. An +original log: + + * foo (...): ... + * bar (...): change 1 - file A log2 << added this later - file B log1 - File A log1 +in the latter case, \\[add-change-log-entry-other-window] in a \ +buffer visiting `bar', yields: + + * bar (...): -!- + * foo (...): ... + * bar (...): change 1 -But if this variable is non-nil, then same file's changes are always kept -together. Notice that Log2 has been appended and it is the most recent -for file A. +and in the former: - Wday Mon DD TIME YYYY + * foo (...): ... + * bar (...): change 1 + (...): -!- - file B log1 - File A log1 - file A log2 << Added this later" +The NEW-ENTRY arg to `add-change-log-entry' can override the effect of +this variable." + :version "20.3" :type 'boolean :group 'change-log) @@ -248,19 +259,6 @@ (set (make-local-variable 'change-log-default-name) file-name) file-name) - - -(defun change-log-add-make-room () - "Begin a new empty change log entry at point." - ;; Delete excess empty lines; make just 2. - ;; - (while (and (not (eobp)) (looking-at "^\\s *$")) - (delete-region (point) (save-excursion (forward-line 1) (point)))) - (insert "\n\n") - (forward-line -2) - (indent-relative-maybe) - ) - ;;;###autoload (defun add-change-log-entry (&optional whoami file-name other-window new-entry) "Find change log file and add an entry for today. @@ -270,8 +268,11 @@ Second arg is FILE-NAME of change log. If nil, uses `change-log-default-name'. Third arg OTHER-WINDOW non-nil means visit in other window. Fourth arg NEW-ENTRY non-nil means always create a new entry at the front; -never append to an existing entry. Today's date is calculated according to -`change-log-time-zone-rule' if non-nil, otherwise in local time." +never append to an existing entry. Option `add-log-keep-changes-together' +otherwise affects whether a new entry is created. + +Today's date is calculated according to `change-log-time-zone-rule' if +non-nil, otherwise in local time." (interactive (list current-prefix-arg (prompt-for-change-log-name))) (or add-log-full-name @@ -289,11 +290,8 @@ (read-input "Mailing address: " add-log-mailing-address)))) (let ((defun (funcall (or add-log-current-defun-function 'add-log-current-defun))) - today-end - paragraph-end - entry + bound entry) - ) (setq file-name (expand-file-name (find-change-log file-name))) ;; Set ENTRY to the file name to use in the new entry. @@ -321,30 +319,20 @@ (forward-line 1) (insert new-entry "\n\n"))) - ;; Search only within the first paragraph. - (if (looking-at "\n*[^\n* \t]") - (skip-chars-forward "\n") - (forward-paragraph 1)) - (setq paragraph-end (point)) + (setq bound + (progn + (if (looking-at "\n*[^\n* \t]") + (skip-chars-forward "\n") + (if add-log-keep-changes-together + (forward-page) ; page delimits entries for date + (forward-paragraph))) ; paragraph delimits entries for file + (point))) (goto-char (point-min)) - - ;; Today page's end point. Used in search boundary - - (save-excursion - (goto-char (point-min)) ;Latest change log day - (forward-line 1) - (setq today-end - (if (re-search-forward "^[^ \t\n]" nil t) ;Seek to next day's hdr - (match-beginning 0) - (point-max)))) ;No next day, use point max - ;; Now insert the new line for this entry. - (cond ((re-search-forward "^\\s *\\*\\s *$" paragraph-end t) + (cond ((re-search-forward "^\\s *\\*\\s *$" bound t) ;; Put this file name into the existing empty entry. (if entry - (insert entry)) - ) - + (insert entry))) ((and (not new-entry) (let (case-fold-search) (re-search-forward @@ -352,24 +340,16 @@ ;; Don't accept `foo.bar' when ;; looking for `foo': "\\(\\s \\|[(),:]\\)") - paragraph-end t))) + bound t))) ;; Add to the existing entry for the same file. (re-search-forward "^\\s *$\\|^\\s \\*") (goto-char (match-beginning 0)) - (change-log-add-make-room) - ) - - ;; See if there is existing entry and append to it. - ;; * file.txt: - ;; - ((and add-log-keep-changes-together ;enabled ? - (re-search-forward (regexp-quote (concat "* " entry)) - today-end t)) - (re-search-forward "^\\s *$\\|^\\s \\*") - (goto-char (match-beginning 0)) - (change-log-add-make-room) - ) - + ;; Delete excess empty lines; make just 2. + (while (and (not (eobp)) (looking-at "^\\s *$")) + (delete-region (point) (save-excursion (forward-line 1) (point)))) + (insert "\n\n") + (forward-line -2) + (indent-relative-maybe)) (t ;; Make a new entry. (forward-line 1) @@ -405,8 +385,10 @@ "Find change log file in other window and add an entry for today. Optional arg WHOAMI (interactive prefix) non-nil means prompt for user name and site. -Second arg is file name of change log. \ -If nil, uses `change-log-default-name'." +Second optional arg FILE-NAME is file name of change log. +If nil, use `change-log-default-name'. + +Affected by the same options as `add-change-log-entry'." (interactive (if current-prefix-arg (list current-prefix-arg (prompt-for-change-log-name)))) @@ -417,7 +399,7 @@ (defun change-log-mode () "Major mode for editing change logs; like Indented Text Mode. Prevents numeric backups and sets `left-margin' to 8 and `fill-column' to 74. -New log entries are usually made with \\[add-change-log-entry] or \\[add-change-log-before-other-window]. +New log entries are usually made with \\[add-change-log-entry] or \\[add-change-log-entry-other-window]. Each entry behaves as a paragraph, and the entries for one day as a page. Runs `change-log-mode-hook'." (interactive) @@ -469,7 +451,7 @@ ;;;###autoload (defvar add-log-lisp-like-modes - '(emacs-lisp-mode lisp-mode scheme-mode lisp-interaction-mode) + '(emacs-lisp-mode lisp-mode scheme-mode dsssl-mode lisp-interaction-mode) "*Modes that look like Lisp to `add-log-current-defun'.") ;;;###autoload @@ -646,25 +628,31 @@ (if (re-search-backward "^sub[ \t]+\\([^ \t\n]+\\)" nil t) (buffer-substring (match-beginning 1) (match-end 1)))) - ((eq major-mode 'fortran-mode) + ((or (eq major-mode 'fortran-mode) + ;; Needs work for f90, but better than nothing. + (eq major-mode 'f90-mode)) ;; must be inside function body for this to work (beginning-of-fortran-subprogram) (let ((case-fold-search t)) ; case-insensitive ;; search for fortran subprogram start (if (re-search-forward "^[ \t]*\\(program\\|subroutine\\|function\ -\\|[ \ta-z0-9*]*[ \t]+function\\)" - nil t) +\\|[ \ta-z0-9*()]*[ \t]+function\\|\\(block[ \t]*data\\)\\)" + (progn (end-of-fortran-subprogram) + (point)) + t) + (or (match-string 2) (progn ;; move to EOL or before first left paren (if (re-search-forward "[(\n]" nil t) - (progn (forward-char -1) + (progn (backward-char) (skip-chars-backward " \t")) (end-of-line)) ;; Use the name preceding that. (buffer-substring (point) - (progn (forward-sexp -1) - (point))))))) + (progn (backward-sexp) + (point))))) + "main"))) (t ;; If all else fails, try heuristics (let (case-fold-search)