;ELC ;;; Compiled ;;; in Emacs version 27.1 ;;; with all optimizations. ;;; This file uses dynamic docstrings, first added in Emacs 19.29. ;;; This file does not contain utf-8 non-ASCII characters, ;;; and so can be loaded in Emacs versions earlier than 23. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (byte-code "\300\301\302\303\304\305\306\307\310\311\310\312& \210\313\314\302\315\316\317\304\301&\210\320\314\321\322#\210\313\323\302\324\316\325\304\301&\210\313\326\302\327\316\330\304\301&\210\313\331\302\332\316\333\304\301&\210\313\334\302\335\316\336\304\301&\210\313\337\340\341\316\342\304\301&\210\313\343\302\344\345\346\316\347\304\301& \210\313\350\302\351\345\352\316\347\304\301& \207" [custom-declare-group change-log nil "Change log maintenance." :group tools :link (custom-manual "(emacs)Change Log") :prefix "change-log-" "add-log-" custom-declare-variable change-log-default-name "Name of a change log file for \\[add-change-log-entry]." :type (choice (const :tag "default" nil) string) put safe-local-variable string-or-null-p change-log-mode-hook "Normal hook run by `change-log-mode'." hook add-log-current-defun-function "If non-nil, function to guess name of surrounding function.\nIt is called by `add-log-current-defun' with no argument, and\nshould return the function's name as a string, or nil if point is\noutside a function." (choice (const nil) function) add-log-full-name "Full name of user, for inclusion in ChangeLog daily headers.\nThis defaults to the value returned by the function `user-full-name'." (choice (const :tag "Default" nil) string) add-log-mailing-address "Email addresses of user, for inclusion in ChangeLog headers.\nThis defaults to the value of `user-mail-address'. In addition to\nbeing a simple string, this value can also be a list. All elements\nwill be recognized as referring to the same user; when creating a new\nChangeLog entry, one element will be chosen at random." (choice (const :tag "Default" nil) (string :tag "String") (repeat :tag "List of Strings" string)) add-log-time-format 'add-log-iso8601-time-string "Function that defines the time format.\nFor example, `add-log-iso8601-time-string', which gives the\ndate in international ISO 8601 format,\nand `current-time-string' are two valid values." (radio (const :tag "International ISO 8601 format" add-log-iso8601-time-string) (const :tag "Old format, as returned by `current-time-string'" current-time-string) (function :tag "Other")) add-log-keep-changes-together "If non-nil, normally keep day's log entries for one file together.\n\nLog entries for a given file made with \\[add-change-log-entry] or\n\\[add-change-log-entry-other-window] will only be added to others for that file made\ntoday if this variable is non-nil or that file comes first in today's\nentries. Otherwise another entry for that file will be started. An\noriginal log:\n\n * foo (...): ...\n * bar (...): change 1\n\nin the latter case, \\[add-change-log-entry-other-window] in a buffer visiting `bar', yields:\n\n * bar (...): -!-\n * foo (...): ...\n * bar (...): change 1\n\nand in the former:\n\n * foo (...): ...\n * bar (...): change 1\n (...): -!-\n\nThe NEW-ENTRY arg to `add-change-log-entry' can override the effect of\nthis variable." :version "20.3" boolean add-log-always-start-new-record "If non-nil, `add-change-log-entry' will always start a new record." "22.1"] 12) #@158 If non-nil, function to call to identify the full filename of a buffer. This function is called with no argument. The default is to use `buffer-file-name'. (defvar add-log-buffer-file-name-function 'buffer-file-name (#$ . 3503)) (byte-code "\300\301\302\303\304\305\306\307&\210\300\310\302\311\312\313\304\314\306\307& \210\300\315\316\317\312\313\304\320\306\307& \210\300\321\322\323\312\324\304\325\306\307& \210\326\327\330\331\312\313\306\307&\210\326\332\333\334\312\313\306\307&\210\326\335\336\337\312\313\306\307&\210\326\340\341\342\312\313\306\307&\210\326\343\344\345\312\313\306\307&\210\326\346\347\350\312\313\306\307&\210\326\351\352\353\312\313\306\307&\210\326\354\355\356\312\313\306\307&\210\357\360\361\354#\210\357\360\362\363\364!\206\232\365#\207" [custom-declare-variable add-log-file-name-function nil "If non-nil, function to call to identify the filename for a ChangeLog entry.\nThis function is called with one argument, the value of variable\n`buffer-file-name' in that buffer. If this is nil, the default is to\nuse the file's name relative to the directory of the change log file." :type (choice (const nil) function) :group change-log change-log-version-info-enabled "If non-nil, enable recording version numbers with the changes." :version "21.1" boolean change-log-version-number-regexp-list (let ((re "\\([0-9]+\\.[0-9.]+\\)")) (list (concat "^(def[^ \n]+[ ]+[^ \n][ ]\"" re) (concat "^;+ *Revision: +[^ \n]+[ ]+" re))) "List of regexps to search for version number.\nThe version number must be in group 1.\nNote: The search is conducted only within 10%, at the beginning of the file." (repeat regexp) change-log-directory-files '(".bzr" ".git" ".hg" ".svn") "List of files that cause `find-change-log' to stop in containing directory.\nThis applies if no pre-existing ChangeLog is found. If nil, then in such\na case simply use the directory containing the changed file." "26.1" (repeat file) custom-declare-face change-log-date ((t (:inherit font-lock-string-face))) "Face used to highlight dates in date lines." change-log-name ((t (:inherit font-lock-constant-face))) "Face for highlighting author names." change-log-email ((t (:inherit font-lock-variable-name-face))) "Face for highlighting author email addresses." change-log-file ((t (:inherit font-lock-function-name-face))) "Face for highlighting file names." change-log-list ((t (:inherit font-lock-keyword-face))) "Face for highlighting parenthesized lists of functions or variables." change-log-conditionals ((t (:inherit font-lock-variable-name-face))) "Face for highlighting conditionals of the form `[...]'." change-log-function ((t (:inherit font-lock-variable-name-face))) "Face for highlighting items of the form `<....>'." change-log-acknowledgment ((t (:inherit font-lock-comment-face))) "Face for highlighting acknowledgments." put change-log-acknowledgement face-alias obsolete-face purecopy "24.3" t] 10) (defconst change-log-file-names-re "^\\( +\\| \\)\\* \\([^ ,:([\n]+\\)") (defconst change-log-start-entry-re "^\\sw.........[0-9:+ ]*") #@57 Additional expressions to highlight in Change Log mode. (defvar change-log-font-lock-keywords (byte-code "\301\302B\303BB\207" [change-log-file-names-re ("^[0-9-]+ +\\|^ \\{11,\\}\\|^ \\{3,\\}\\|^\\(Sun\\|Mon\\|Tue\\|Wed\\|Thu\\|Fri\\|Sat\\) [A-Z][a-z][a-z] [0-9:+ ]+" (0 'change-log-date) ("\\([^<(]+?\\)[ ]*[(<]\\([A-Za-z0-9_.+-]+@[A-Za-z0-9_.-]+\\)[>)]" nil nil (1 'change-log-name) (2 'change-log-email))) ((2 'change-log-file) ("\\=, \\([^ ,:([\n]+\\)" nil nil (1 'change-log-file)) ("\\= (\\([^(),\n]+\\|(\\(setf\\|SETF\\) [^() ,\n]+)\\)" nil nil (1 'change-log-list)) ("\\=, *\\([^(),\n]+\\|(\\(setf\\|SETF\\) [^() ,\n]+)\\)" nil nil (1 'change-log-list))) (("^\\( +\\| \\)(\\([^(),\n]+\\|(\\(setf\\|SETF\\) [^() ,\n]+)\\)" (2 'change-log-list) ("\\=, *\\([^(),\n]+\\|(\\(setf\\|SETF\\) [^() ,\n]+)\\)" nil nil (1 'change-log-list))) ("\\[!?\\([^]\n]+\\)\\]\\(:\\| (\\)" (1 'change-log-conditionals)) ("<\\([^>\n]+\\)>\\(:\\| (\\)" (1 'change-log-function)) ("\\(^\\( +\\| \\)\\| \\)\\(Thanks to\\|Patch\\(es\\)? by\\|Report\\(ed by\\| from\\)\\|Suggest\\(ed by\\|ion from\\)\\)" 3 'change-log-acknowledgment))] 3) (#$ . 6579)) #@50 Return the file-name for the change under point. (defalias 'change-log-search-file-name #[(where) "\212b\210\303\304!\210\305 !\203\306\n\307\310#\210\311\312!\202T\305\n!\203&\311\312!\202T\313\314 \315\n\316\260\307\310#\203K\304\224\203E\306\n\307\310#\210\311\312!\202T\311\317!\202T\306\n\307\310#\210\311\312!)\207" [where change-log-start-entry-re change-log-file-names-re beginning-of-line 1 looking-at re-search-forward nil t match-string-no-properties 2 re-search-backward "\\(" "\\)\\|\\(" "\\)" 4] 6 (#$ . 7724)]) (defconst change-log-unindented-file-names-re "^[*] \\([^ ,:([\n]+\\)") #@159 Read ChangeLog entries at point until END. Move point to the end of entries that were read. Return a list in the same form as `diff-add-log-current-defuns'. (defalias 'change-log-read-entries #[(&optional end) "\303 \203\f` W\203#\304\n!\203#\305\225b\210\306\307!\310 !BB\202\237)\207" [#1=#:--cl-var-- end change-log-unindented-file-names-re nil looking-at 0 match-string-no-properties 1 change-log-read-defuns] 3 (#$ . 8340)]) #@149 Read ChangeLog formatted function names at point until END. Move point to the end of names read and return the function names as a list of strings. (defalias 'change-log-read-defuns #[(&optional end) "\303\304 w\203* \203` W\203*\305\n!\203*\306\225b\210\307\310\311!\312\313#\237\244\202\314\303x\210\237)\207" [#1=#:--cl-var-- end change-log-tag-re nil ":\n[:blank:]" looking-at 0 split-string match-string-no-properties 1 ",[[:blank:]]*" t "\n[:blank:]"] 4 (#$ . 8787)]) #@127 Format and insert CHANGELOGS into current buffer. CHANGELOGS is a list in the form returned by `diff-add-log-current-defuns'. (defalias 'change-log-insert-entries #[(changelogs) "\306\211 :\203G @\211\211A\242\307 \261\210\n\204#\310c\210\202@\311c\210\n\306\f:\203?\f@\312 \313\261\210\fA\211\202+* A\211\202+\306\207" [changelogs #1=#:--cl-var-- defuns file #2=#:--cl-var-- def nil "* " ":\n" " " "(" "):\n"] 4 (#$ . 9279)]) #@44 Visit the file for the change under point. (defalias 'change-log-find-file #[nil "\301`!\211\203\302!\203\303!\202\304\305\")\207" [file change-log-search-file-name file-exists-p find-file message "No such file or directory: %s"] 4 (#$ . 9733) nil]) #@274 Search for a tag name within subexpression 1 of last match. Optional argument FROM specifies a buffer position where the tag name should be located. Return value is a cons whose car is the string representing the tag and whose cdr is the position where the tag was found. (defalias 'change-log-search-tag-name-1 #[(&optional from) "\214\301\224\301\225}\210\203b\210\302\303!\203\301\224b\210\304 `)B\207" [from 1 looking-at "[(]?\\(?:\\(?:\\sw\\|\\s_\\)+\\(?:[ ]+\\(\\sw\\|\\s_\\)+\\)\\)" find-tag-default] 2 (#$ . 10000)]) #@51 Regexp matching a tag name in change log entries. (defconst change-log-tag-re "(\\(\\(?:\\sw\\|\\s_\\)+\\(?:[, ]+\\(?:\\sw\\|\\s_\\)+\\)*\\))" (#$ . 10539)) #@227 Search for a tag name near `point'. Optional argument AT non-nil means search near buffer position AT. Return value is a cons whose car is the string representing the tag and whose cdr is the position where the tag was found. (defalias 'change-log-search-tag-name #[(&optional at) "\212\206`\211b\210\214~\210\3061#\212\307 \210\310 !\205\311!)0\202'\210\202*\206\357\3121B\212\313\314w\205=\310 !\205=\311 )0\202F\210\202I\206\357\3151p\212\316 \210\310\n!\205k\317\225b\205k\320\321!\205k\310 !\205k\311 )0\202t\210\202w\206\357\3221\355\212\314\210\323 \314\324#\203\214\317\224\202\215e)\212\314\210\325 \314\324#\203\237\317\224\202\240d)\211\fW\205\350 X\205\350\fX\205\350\214 \f}\210\323 \314\324#\203\322\326\224\326\225}\210db\210\327 dB\202\347\325 \314\324#\205\347\326\224\326\225}\210eb\210\327 eB)*0\202\357\210\314*\207" [at change-log-tag-re change-log-file-names-re change-log-start-entry-re to from (error) backward-up-list looking-at change-log-search-tag-name-1 (error) " " nil (error) beginning-of-line 0 skip-syntax-forward " " (error) re-search-backward t re-search-forward 1 find-tag-default] 6 (#$ . 10704)]) (defvar change-log-find-head nil) (defvar change-log-find-tail nil) (defvar change-log-find-window nil) #@372 Search for tag TAG in buffer BUFFER visiting file FILE. REGEXP is a regular expression for TAG. The remaining arguments are optional: WINDOW denotes the window to display the results of the search. FIRST is a position in BUFFER denoting the first match from previous searches for TAG. LAST is the position in BUFFER denoting the last match for TAG in the last search. (defalias 'change-log-goto-source-1 #[(tag regexp file buffer &optional window first last) "rq\210\212\214~\210 \203( b\210\306\210\3071\310 0\202\"\210 b\210\306\210\306\202+eb\210\306 \204R\311 \306\312#\203R\313 \211\203-\n\f\230\203-\314  \204- \202-+ \204[ \203\244\315\206d\316!\211!r\317\216\320@\321\"\210 \203\217 eW\204\204 dV\203\206~\210\322 \210 b\210\202\233\323\324\f#\210  b\210\325 E+\202\254\323\326\f#\210\306)\207" [buffer last current-defun regexp tag first nil (error) end-of-defun re-search-forward t add-log-current-defun line-beginning-position internal--before-with-selected-window display-buffer #[nil "\301!\207" [save-selected-window--state internal--after-with-selected-window] 2] select-window norecord push-mark message "No more matches for tag `%s' in file `%s'" selected-window "Source location of tag `%s' not found in file `%s'" window change-log-find-window save-selected-window--state file] 5 (#$ . 11994)]) #@233 Go to source location of "change log tag" near `point'. A change log tag is a symbol within a parenthesized, comma-separated list. If no suitable tag can be found nearby, try to visit the file for the change under `point' instead. (defalias 'change-log-goto-source #[nil "p\301 \210\302p\")\207" [buffer change-log-goto-source-internal next-error-found] 3 (#$ . 13362) nil]) (defalias 'change-log-goto-source-internal #[nil "\306=\203% \203%\3071\310\311\312\n \"\"0\202\"\210\313\314\n@\315\n8#\211\207\212`\316 \211@\f\2056\317\fA!\211\205>\315\224\317 !\211\205K\315\224 \203]\203]\320!\204o\203i\320!\204o\321\322!\202\331\203\265\320!\203\265 \203\251\203\251\320!\203\251W\203\232 X\204\251 X\203\265W\203\265\323\324!!\211\202\331 \325\326 !\327Q\324!F\3301\322\310\311\n\"\2110\202\331\210\313\331 #.\207" [last-command change-log-find-tail change-log-find-head at tag-at tag change-log-goto-source (error) apply change-log-goto-source-1 append format-message "Cannot find more matches for tag `%s' in file `%s'" 2 change-log-search-tag-name change-log-search-file-name file-exists-p error "Cannot find tag or file near `point'" display-buffer find-file-noselect "\\_<" regexp-quote "\\_>" (error) "Cannot find matches for tag `%s' in file `%s'" file file-at file-2 file-2-at change-log-find-window] 6]) #@117 Move to the Nth (default 1) next match in a ChangeLog buffer. Compatibility function for \[next-error] invocations. (defalias 'change-log-next-error #[(&optional argp reset) "\206\306\307!\306W\211?\211\203\310\202\311 \203#e\2026\n\203,\312 \2026 \2035\313 \2026`b\210\f\314\315 $\210-\316 \210\317!\205[\314\320 \210\205Z\321!)\207" [argp count down up search-function reset 0 abs re-search-forward re-search-backward line-beginning-position line-end-position nil t beginning-of-line looking-at change-log-goto-source-internal select-window change-log-file-names-re change-log-find-window] 6 (#$ . 14764) "p"]) #@35 Keymap for Change Log major mode. (defvar change-log-mode-map (byte-code "\302 \302 \303 \304\305#\210\303 \306\307#\210\303 \310\311#\210\303 \312\313#\210\303 \314\315B#\210\303\316\317#\210\303\320\321#\210\303\322\323#\210\303\324\325#\210\303\326\327#\210 *\207" [menu-map map make-sparse-keymap define-key [3 16] add-log-edit-prev-comment [3 14] add-log-edit-next-comment [3 6] change-log-find-file [3 3] change-log-goto-source [menu-bar changelog] "ChangeLog" [gs] (menu-item "Go To Source" change-log-goto-source :help "Go to source location of ChangeLog tag near point") [ff] (menu-item "Find File" change-log-find-file :help "Visit the file for the change under point") [sep] ("--") [nx] (menu-item "Next Log-Edit Comment" add-log-edit-next-comment :help "Cycle forward through Log-Edit mode comment history") [pr] (menu-item "Previous Log-Edit Comment" add-log-edit-prev-comment :help "Cycle backward through Log-Edit mode comment history")] 5) (#$ . 15415)) (defvaralias 'change-log-time-zone-rule 'add-log-time-zone-rule) #@181 Time zone rule used for calculating change log time stamps. If nil, use local time. If t, use Universal Time. If a string, interpret as the ZONE argument of `format-time-string'. (defvar add-log-time-zone-rule nil (#$ . 16465)) (put 'add-log-time-zone-rule 'safe-local-variable #[(x) "\301!\206;\207" [x booleanp] 2]) (defalias 'add-log-iso8601-time-zone #[(&optional time zone) "\302\303 #\207" [time zone format-time-string "%:::z"] 4]) (make-obsolete 'add-log-iso8601-time-zone nil "26.1") (defvar add-log-iso8601-with-time-zone nil) (defalias 'add-log-iso8601-time-string #[(&optional time zone) "\303\203 \304\202\n\305 \n#\207" [add-log-iso8601-with-time-zone time zone format-time-string "%Y-%m-%d %:::z" "%Y-%m-%d"] 4]) #@63 Return (system-dependent) default name for a change log file. (defalias 'change-log-name #[nil "\206\301\207" [change-log-default-name "ChangeLog"] 1 (#$ . 17208)]) #@104 Cycle backward through Log-Edit mode comment history. With a numeric prefix ARG, go back ARG comments. (defalias 'add-log-edit-prev-comment #[(arg) "\214`\302>\203 \303 \202`}\210\304\305!\205@\305 !\210\306ed\"\210eb\210\214~\210n)\2042`\307\310w\210`|\210\311e!\210db\210`\307\310x\210`|)\207" [last-command arg (add-log-edit-prev-comment add-log-edit-next-comment) mark fboundp log-edit-previous-comment indent-region " \n" nil set-mark] 3 (#$ . 17383) "*p"]) #@103 Cycle forward through Log-Edit mode comment history. With a numeric prefix ARG, go back ARG comments. (defalias 'add-log-edit-next-comment #[(arg) "\301[!\207" [arg add-log-edit-prev-comment] 2 (#$ . 17860) "*p"]) #@31 Prompt for a change log name. (defalias 'prompt-for-change-log-name #[nil "\302 \303\304\305\306\"\307#!\310 !\311\230\203\303\310! \"\2021\312 !\2030\303\310!\313 !\"\2021 *\207" [default name change-log-name expand-file-name read-file-name format "Log file (default %s): " nil file-name-nondirectory "" file-directory-p file-name-as-directory] 5 (#$ . 18081)]) #@174 Return version number of current buffer's file. This is the value returned by `vc-working-revision' or, if that is nil, by matching `change-log-version-number-regexp-list'. (defalias 'change-log-version-number-search #[nil "\306 \211\307V\205`\310\245\\\n\203\311\n!\206@\214~\210 \312 \203>\212eb\210\313 \211A\242 \314#\203:\315\316!\312)\202 \f+*\207" [size limit buffer-file-name change-log-version-number-regexp-list version regexps buffer-size 8000 10 vc-working-revision nil re-search-forward t match-string 1] 5 (#$ . 18462)]) #@998 Find a change log file for \[add-change-log-entry] and return the name. Optional arg FILE-NAME specifies the file to use. If FILE-NAME is nil, use the value of `change-log-default-name'. If `change-log-default-name' is nil, behave as though it were "ChangeLog" (or whatever we use on this operating system). If `change-log-default-name' contains a leading directory component, then simply find it in the current directory. Otherwise, search in the current directory and its successive parents for a file so named. Stop at the first such file that exists (or has a buffer visiting it), or the first directory that contains any of `change-log-directory-files'. If no match is found, use the current directory. To override the choice of this function, simply create an empty ChangeLog file first by hand in the desired place. Once a file is found, `change-log-default-name' is set locally in the current buffer to the complete file name. Optional arg BUFFER-FILE overrides `buffer-file-name'. (defalias 'find-change-log #[(&optional file-name buffer-file) "r\306\307!\205\3101\311 0\202\210\312@\313!\203\202 p)q\210 \204y\n\2052\314\n!\2052\n\211\204y \204?\f\203K\314\315 \206F\f!!\206L \316 !\203Y\317\320 \"\315 !\317 !\321\320 !\322 \323\"\211\203x\317\"*\324\302!\210 ) \207" [buff file-name change-log-default-name buffer-file buffer-file-name default-directory derived-mode-p diff-mode (error) diff-find-source-location nil buffer-live-p file-name-directory file-chase-links file-directory-p expand-file-name change-log-name file-name-nondirectory locate-dominating-file #[(dir) "\306 \"\307\n!\206\310\n!)\206/ \205/ \311\310\306 @ \"!\211\204- A\211\204\f*\207" [cbase dir clog change-log-directory-files found files expand-file-name get-file-buffer file-exists-p nil] 4] make-local-variable cbase root] 4 (#$ . 19020)]) #@69 Compute file-name of BUFFER-FILE to be used in entries in LOG-FILE. (defalias 'add-log-file-name #[(buffer-file log-file) "?\206 \230?\205L\n\203\n!\207\306 !\307 \"\310\311\f\"\204(\f\202?\307\312!\312 !\"\211G\fGW\203= \202>\f)*\313!\203K\314!\207\207" [buffer-file log-file add-log-file-name-function dir rel new file-name-directory file-relative-name string-match "\\`\\.\\./" file-truename backup-file-name-p file-name-sans-versions] 5 (#$ . 20912)]) (byte-code "\300\301\302\303\304\305\306\307&\210\310\301\311\312#\207" [custom-declare-variable add-log-dont-create-changelog-file t "If non-nil, don't create ChangeLog files for log entries.\nIf a ChangeLog file does not already exist, a non-nil value\nmeans to put log entries in a suitably named buffer." :type boolean :version "27.1" put safe-local-variable booleanp] 8) #@154 Compute a suitable name for a non-file visiting ChangeLog buffer. CHANGELOG-FILE-NAME is the file name of the actual ChangeLog file if it were to exist. (defalias 'add-log--pseudo-changelog-buffer-name #[(changelog-file-name) "\301\302\303\304!!\"\207" [changelog-file-name format "*changes to %s*" abbreviate-file-name file-name-directory] 5 (#$ . 21774)]) #@70 Return non-nil if BUFFER holds a change log for CHANGELOG-FILE-NAME. (defalias 'add-log--changelog-buffer-p #[(changelog-file-name buffer) "rq\210 \203 \n\232\202\303\n!\304 \232)\207" [buffer buffer-file-name changelog-file-name add-log--pseudo-changelog-buffer-name buffer-name] 2 (#$ . 22139)]) #@101 Find a ChangeLog buffer for CHANGELOG-FILE-NAME. Respect `add-log-use-pseudo-changelog', which see. (defalias 'add-log-find-changelog-buffer #[(changelog-file-name) "\302!\204\n \204\303!\207\304\305!!\207" [changelog-file-name add-log-dont-create-changelog-file file-exists-p find-file-noselect get-buffer-create add-log--pseudo-changelog-buffer-name] 3 (#$ . 22449)]) #@1468 Find ChangeLog buffer, add an entry for today and an item for this file. Optional arg WHOAMI (interactive prefix) non-nil means prompt for user name and email (stored in `add-log-full-name' and `add-log-mailing-address'). Second arg CHANGELOG-FILE-NAME is the file name of the change log. If nil, use the value of `change-log-default-name'. If the file thus named exists, it is used for the new entry. If it doesn't exist, it is created, unless `add-log-dont-create-changelog-file' is t, in which case a suitably named buffer that doesn't visit any file is used for keeping entries pertaining to CHANGELOG-FILE-NAME's directory. 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. Option `add-log-keep-changes-together' otherwise affects whether a new entry is created. Fifth arg PUT-NEW-ENTRY-ON-NEW-LINE non-nil means that if a new entry is created, put it on a new line by itself, do not put it after a comma on an existing line. Option `add-log-always-start-new-record' non-nil means always create a new record, even when the last record was made on the same date and by the same person. The change log file can start with a copyright notice and a copying permission notice. The first blank line indicates the end of these notices. Today's date is calculated according to `add-log-time-zone-rule' if non-nil, otherwise in local time. (defalias 'add-change-log-entry #[(&optional whoami changelog-file-name other-window new-entry put-new-entry-on-new-line) "\306  \205 \307  \211\205\310\f!\310\311@ \"!@\312 @\"A@B\232\204X\313@\314 \"\203=\314 q\210\202XC\204G\315 \203Q\316\317@!!\210\202X\320\317@!!\210\321\322!\204a\322 \210\323 \210eb\210D\206n\324 E\206uFGHI\203\214\325\326H\"H\325\327G\"G\330\331!\203\232\332\333!\210\334\335w\210\336\337G:\203\247G\202\252GC\"JK\204\364\335LJ\335M\211N\203\345N@M\330\340M!!\203\334\212\341y\210\330\342!)\204\334\343LNA\211N\204\300\335ML+\203\364\341y\210\202\344JG!J8O\203P\202\334O\203P\202\334\261\210\345y\210+\212\330\346!\203'\334\335w\210\2025Q\2032\347 \210\2025\350 \210`)R\351\352R\343#\203NA\203Ac\210\202S\204\261\335T\351\340\353AP!\354PR\343#)\203\261\351\355\335\343#\203v\356\224b\210\202|db\210\334c\210m\204\217\330\357!\203\217`\360\361!|\210\202|O\203\231P\202\232\334O\203\244P\202\245\334\261\210\362y\210\363 \210\202\330\364!\203\275\341y\210\202\261m\204\320\330\357!\203\320`\360\361!|\210\202\275O\203\332P\202\333\334O\203\345P\202\346\334O\203\360P\202\361\334\261\210\362y\210Uj\210\353c\210A\203Ac\210)\204'\212\365\341!\210\330\366!)?\205\304\367c\210\n\205\304\n\370\261\202\304\323 \210\212\365\341!\210\330\371!)\2049\370c\210\372 V\373\374!\210\375\335x\210W\204\222\330\375!\203\222\212\376\341!\210`)\211V`{\232\203fV`|\210X\377iG\201Y#V)\203\222\201Z\335x\210`V|\210`Sf\201[=\204\256\201Zc\210\202\256W\204\245\330\375!\203\245`T\201\\ |\210Vb\210\201]c\210V\335\211\223\210)\201^\261\210\n\205\304\n\370\261.\207" [defun change-log-version-info-enabled version add-log-buffer-file-name-function buf-file-name buffer-file add-log-current-defun change-log-version-number-search expand-file-name find-change-log add-log-file-name add-log--changelog-buffer-p window-buffer window-dedicated-p switch-to-buffer-other-window add-log-find-changelog-buffer switch-to-buffer derived-mode-p change-log-mode undo-boundary user-full-name read-string "Full name: " "Mailing address: " looking-at "Copyright" search-forward "\n\n" "\n" nil mapcar #[(addr) "\304 \"\305\n\306 \307\260\207" [add-log-time-format add-log-time-zone-rule full-name addr nil " " " <" ">"] 6] regexp-quote 1 "[ ]+.*<.*>$" t random -1 "\n*[^\n* ]" forward-page forward-paragraph re-search-forward "^\\s *\\* *$" "* " "\\(\\s \\|[(),:]\\)" "^\\s *$\\|^\\s \\*" 0 "^\\s *$" line-beginning-position 2 -2 indent-relative-first-indent-point "\\sW" beginning-of-line "\\s *\\(\\* *\\)?$" ": " 32 "\\s *$" point-marker skip-syntax-backward " " "):" backward-sexp + changelog-file-name item buffer-file-name other-window add-log-full-name add-log-mailing-address user-mail-address mailing-address full-name whoami new-entries add-log-always-start-new-record hit entry --dolist-tail-- use-hard-newlines hard-newline add-log-keep-changes-together bound new-entry case-fold-search left-margin pos put-new-entry-on-new-line fill-column 4 ", " 40 line-end-position "(" "): "] 6 (#$ . 22833) (list current-prefix-arg (prompt-for-change-log-name))]) #@166 Find change log file in other window and add entry and item. This is just like `add-change-log-entry' except that it displays the change log file in another window. (defalias 'add-change-log-entry-other-window #[(&optional whoami file-name) "\302 \303#\207" [whoami file-name add-change-log-entry t] 4 (#$ . 27539) (byte-code "\205\301 D\207" [current-prefix-arg prompt-for-change-log-name] 2)]) (defvar change-log-indent-text 0) (defalias 'change-log-fill-parenthesized-list #[nil "\212\300\210\301\302x\210`Sf\303\232\205e`eTV\205e\3041c\212\305\306!\210\302f\307\232\301\302x\210\205Mn\206M\310\302x\300U?\205M\301\302x\205M\311\302x\306U\205M\301\302x\205Mn)\205_\312\306!\210\313c\210\314\302w\210\315\316!0\202e\210\302)\207" [0 " " nil 44 (error) up-list -1 40 "^ \n*" "*" delete-char ")" " \n" insert-before-markers "("] 3]) (defalias 'change-log-indent #[nil "\303 \210\212\304 \210\305\306w\210\307\310!\203\311\312\313\314!\"\203\315\202-\307\316!\203+\317 \\\202-\317 )\212\320 !\210`)\211`V\205?\nb*\207" [change-log-indent-text indent pos change-log-fill-parenthesized-list beginning-of-line " " nil looking-at "\\(.*\\) [^ \n].*[^ \n] <.*>\\(?: +(.*)\\)? *$" string-match "[[:digit:]][[:digit:]]" match-string 1 0 "[^*(]" current-left-margin indent-line-to] 5]) #@47 Syntax table used while in `change-log-mode'. (defvar change-log-mode-syntax-table (byte-code "\301 \302\303\304#\210\302\305\304#\210)\207" [table make-syntax-table modify-syntax-entry 96 "' " 39] 4) (#$ . 28856)) (defvar change-log-mode-hook nil) (byte-code "\300\301N\204\f\302\300\301\303#\210\304\305!\204\302\305\306\307#\210\300\207" [change-log-mode-hook variable-documentation put "Hook run after entering Change Log mode.\nNo problems result if this variable is not bound.\n`add-hook' automatically binds it. (This is true for all hook variables.)" boundp change-log-mode-map definition-name change-log-mode] 4) (defvar change-log-mode-map (make-sparse-keymap)) (byte-code "\301\302N\204\303\301\302\304\305!#\210\306\307!\204\303\307\310\311#\210\312\313 !\210\307\302N\204-\303\307\302\304\314!#\210\306\300!\204B\303\300\310\311#\210\315\316\300\317\"\210!\210\300\302N\204P\303\300\302\304\320!#\210\303\311\321\322#\207" [change-log-mode-abbrev-table change-log-mode-map variable-documentation put purecopy "Keymap for `change-log-mode'." boundp change-log-mode-syntax-table definition-name change-log-mode (lambda (#1=#:def-tmp-var) (defvar change-log-mode-syntax-table #1#)) make-syntax-table "Syntax table for `change-log-mode'." (lambda (#1#) (defvar change-log-mode-abbrev-table #1#)) define-abbrev-table nil "Abbrev table for `change-log-mode'." derived-mode-parent text-mode] 5) #@370 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-entry-other-window]. Each entry behaves as a paragraph, and the entries for one day as a page. Runs `change-log-mode-hook'. \{change-log-mode-map} (defalias 'change-log-mode #[nil "\306\300!\210\307\310 \210\311\312\310\313N\203\314\311\313\310\313N#\210\315 !\204'\316 \317 \"\210\320\f!\211\2036 \321 =\203<\322\f\323 \"\210)\324=\325\"\204V=>=\204V\326=\325>C#\210\327 !\210\330\f!\210=>\331?\332@\307A\331B\307C\306\333!\210\334\306\335!\210\336\306\337!\210\307\340\341\342\336\307$\210\306\343!\210\344#\306\345!\210\336%\306\346!\210\307&\306\347!\210\350'\306\351!\210')\306\352!\210\353*\306\354!\210\355,\306\356!\210\357.\306\360!\210\3610\306\362!\210\3632\306\364!\210\3654\306\366!\210\3676\306\370!\210\3718\372D)\373\374!\207" [delay-mode-hooks major-mode mode-name change-log-mode-map change-log-mode-syntax-table parent make-local-variable t text-mode change-log-mode "Change Log" mode-class put keymap-parent set-keymap-parent current-local-map char-table-parent standard-syntax-table set-char-table-parent syntax-table abbrev-table-get :parents abbrev-table-put use-local-map set-syntax-table 8 74 fill-forward-paragraph-function change-log-fill-forward-paragraph comment-start nil fill-indent-according-to-mode add-hook fill-nobreak-predicate #[nil "\300\301\302 \"\207" [looking-back "^\\s *\\*\\s *" line-beginning-position] 3] indent-line-function change-log-indent tab-always-indent copyright-at-end-flag paragraph-start "\\s *$\\|\f\\|^\\<" paragraph-separate page-delimiter "^\\<\\|^\f" version-control never smerge-resolve-function change-log-resolve-conflict adaptive-fill-regexp "\\s *" font-lock-defaults (change-log-font-lock-keywords t nil nil backward-paragraph) multi-isearch-next-buffer-function change-log-next-buffer beginning-of-defun-function change-log-beginning-of-defun end-of-defun-function change-log-end-of-defun change-log-next-error run-mode-hooks change-log-mode-hook change-log-mode-abbrev-table local-abbrev-table left-margin fill-column indent-tabs-mode tab-width show-trailing-whitespace next-error-function] 6 (#$ . 30282) nil]) #@284 Return the next buffer in the series of ChangeLog file buffers. This function is used for multiple buffers isearch. A sequence of buffers is formed by ChangeLog files with decreasing numeric file name suffixes in the directory of the initial ChangeLog file were isearch was started. (defalias 'change-log-next-buffer #[(&optional buffer wrap) "\306 \307\310!\205\fC\311\312\313P!\314\"\"\n\203 \202!\315 ! \203+ @\2024\316\317\f!! \235A@ \203A \204Ap\202N\310 !\203M\320 !\202Np,\207" [name files isearch-forward wrap buffer file change-log-name append file-exists-p sort file-expand-wildcards "[-.][0-9]*" #[(a b) "\3031\304\305 G\"\305\n G\"\"0\207\210\306\207" [b name a (error) version< substring nil] 5] reverse file-name-nondirectory buffer-file-name find-file-noselect] 6 (#$ . 32638)]) #@77 Cut paragraphs so filling preserves open parentheses at beginning of lines. (defalias 'change-log-fill-forward-paragraph #[(n) "\302P\303 !)\207" [paragraph-start n "\\|\\s *\\(?:\\s(\\|\\*\\)" forward-paragraph] 2 (#$ . 33459)]) #@153 Heuristic regexp used by `add-log-current-defun' for unknown major modes. The regexp's first submatch is placed in the ChangeLog entry, in parentheses. (custom-declare-variable 'add-log-current-defun-header-regexp "^\\([[:upper:]][[:upper:]_ ]*[[:upper:]_]\\|[-_[:alpha:]]+\\)[ ]*[:=]" '(#$ . 33698) :type 'regexp :group 'change-log) #@458 Return name of function definition point is in, or nil. Understands C, Lisp, LaTeX ("functions" are chapters, sections, ...), Texinfo (@node titles) and Perl. Other modes are handled by a heuristic that looks in the 10K before point for uppercase headings starting in the first column or identifiers followed by `:' or `='. See variables `add-log-current-defun-header-regexp' and `add-log-current-defun-function'. Has a preference of looking backwards. (defalias 'add-log-current-defun #[nil "\3041:\212\203 \2027\305\211\305\210\306 `\307Z\310#\2056\311\312!\206(\311\313!\314\315 \"\2035\311\312 \" *)0\207\210\305\207" [add-log-current-defun-function result case-fold-search add-log-current-defun-header-regexp (error) nil re-search-backward 10000 t match-string-no-properties 1 0 string-match "\\([^ \n \f].*[^ \n \f]\\)"] 4 (#$ . 34040)]) (defalias 'change-log-get-method-definition-1 #[(end) "\302\303! Q\304\225b\207" [change-log-get-method-definition-md end match-string 1 0] 3]) #@64 For Objective C, return the method name if we are in a method. (defalias 'change-log-get-method-definition #[nil "\301\212\302\303\304\305#\203\306\307!\210)\212\310\311\304\305#\2051\306\312!\210\313\314!\204.\313\315!\210\306\312!\210\202\316P*\207" [change-log-get-method-definition-md "[" re-search-backward "^@implementation\\s-*\\([A-Za-z_]*\\)" nil t change-log-get-method-definition-1 " " re-search-forward "^\\([-+]\\)[ \n\f ]*\\(([^)]*)\\)?\\s-*" "" looking-at "[{;]" "\\([A-Za-z_]*:?\\)\\s-*\\(([^)]*)\\)?[A-Za-z_]*[ \n\f ]*" "]"] 4 (#$ . 35056)]) (autoload 'timezone-make-date-sortable "timezone") #@110 Return date of log entry in a consistent form for sorting. Point is assumed to be at the start of the entry. (defalias 'change-log-sortable-date-at #[nil "\302!\2034\303\304!\211\2052\305\306 \"\203%\307\310 \"\307\311 \"\307\312 \"Q\2022\31310\314 !0\2022\210\315)\207\316\317!\207" [change-log-start-entry-re date looking-at match-string-no-properties 0 string-match "\\(....\\)-\\(..\\)-\\(..\\)\\s-+" match-string 1 2 3 (error) timezone-make-date-sortable nil error "Bad date"] 6 (#$ . 35683)]) #@51 Function to be used in `smerge-resolve-function'. (defalias 'change-log-resolve-conflict #[nil "\212\214\306\224\306\225}\210\307\224\307\225\310\224\310\225\311\312!\311\313!\314\216pr q\210\315 \210\316 \f#\210)rq\210\315 \210\316 \n#\210\317 !\210)db\210e`\316!\210|.\n\207" [tmp2 tmp1 me3 mb3 me1 mb1 0 1 3 generate-new-buffer " *changelog-resolve-1*" " *changelog-resolve-2*" #[nil "\302!\210\302 !\207" [tmp1 tmp2 kill-buffer] 2] change-log-mode insert-buffer-substring change-log-merge buf] 7 (#$ . 36196)]) #@337 Merge the contents of change log file OTHER-LOG with this buffer. Both must be found in Change Log mode (since the merging depends on the appropriate motion commands). OTHER-LOG can be either a file name or a buffer. Entries are inserted in chronological order. Both the current and old-style time formats for entries are supported. (defalias 'change-log-merge #[(other-log) "\306\307!\204\n\310\311!\210\312!\203\202\313!p\314\211\211\212eb\210 q\210eb\210\306\307!\2045\310\315\"\210m?\205\244\316 `\317 \210`r\fq\210m\204Y \316 \231\203Y\317 \210\202Hm\204f\320 \n #\210\202\240o\204\223`Sf\321U\203\206`SeX\204\223`S\206`Sf\321U\204\223\203\220\202\221\322c\210r q\210db\210)\320 \n\"\210)\2025.\207" [other-log end start date1 buf other-buf derived-mode-p change-log-mode error "Not in Change Log mode" bufferp find-file-noselect nil "%s not found in Change Log mode" change-log-sortable-date-at forward-page insert-buffer-substring 10 "\n" use-hard-newlines hard-newline] 5 (#$ . 36733) "*fLog file name to merge: "]) (defalias 'change-log-beginning-of-defun #[nil "\301\302\303#\207" [change-log-start-entry-re re-search-backward nil move] 4]) (defalias 'change-log-end-of-defun #[nil "\212\301\302\303#)\204\304\302\303#\210\305y\210\306!\203 \307\225b\210\305y\210\304\302\310#\205.\307\224b\210\311y\207" [change-log-start-entry-re re-search-backward nil t re-search-forward 1 looking-at 0 move -1] 4]) (provide 'add-log)