From 4bdf2ad22276502950290f02d4f8c82b83b5c44a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vincent=20Bela=C3=AFche?= Date: Tue, 27 Dec 2011 20:30:39 +0100 Subject: [PATCH 001/564] The overall change is to add cell renaming, that is setting fancy names for cell symbols other than name matching "\\`[A-Z]+[0-9]+\\'" regexp . (ses-create-cell-variable): New defun. (ses-relocate-formula): Relocate formulas only for cells the symbols of which are not renamed, i.e. symbols whose names do not match regexp "\\`[A-Z]+[0-9]+\\'". (ses-relocate-all): Relocate values only for cells the symbols of which are not renamed. (ses-load): Create cells variables as the (ses-cell ...) are read, in order to check row col consistency with cell symbol name only for cells that are not renamed. (ses-replace-name-in-formula): New defun. (ses-rename-cell): New defun. (ses-call-printer-return, ses-cell-property-get) (ses-sym-rowcol, ses-printer-validate, ses-formula-record) (ses-create-cell-variable, ses-reset-header-string) (ses-cell-set-formula, ses-repair-cell-reference-all) (ses-self-reference-early-detection, ses-in-print-area, ses-set-curcell) (ses-check-curcell, ses-call-printer, ses-adjust-print-width) (ses-print-cell-new-width, ses-formula-references, ses-relocate-formula) (ses-aset-with-undo, ses-load, ses-truncate-cell) (ses-read-column-printer, ses-read-default-printer, ses-insert-row) (ses-delete-row, ses-delete-column, ses-append-row-jump-first-column) (ses-kill-override, ses-yank-pop, ses-yank-cells, ses-yank-tsf) (ses-yank-resize, ses-export-tab, ses-mark-row, ses-mark-column) (ses-renarrow-buffer, ses-insert-range, ses-insert-ses-range) (ses-safe-printer, ses-safe-formula, ses-warn-unsafe, ses--clean-!) (ses--clean-_, ses-range, ses-select, ses-center, ses-center-span) (ses-dashfill, ses-unsafe): Fix typos and reflow docstrings. --- lisp/ChangeLog | 34 ++++++ lisp/ses.el | 321 ++++++++++++++++++++++++++++++++----------------- 2 files changed, 242 insertions(+), 113 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 67615431b8f..29cb0334fb0 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,37 @@ +2011-12-27 Vincent Belaïche + + * ses.el: The overall change is to add cell renaming, that is + setting fancy names for cell symbols other than name matching + "\\`[A-Z]+[0-9]+\\'" regexp . + (ses-create-cell-variable): New defun. + (ses-relocate-formula): Relocate formulas only for cells the + symbols of which are not renamed, i.e. symbols whose names do not + match regexp "\\`[A-Z]+[0-9]+\\'". + (ses-relocate-all): Relocate values only for cells the symbols of + which are not renamed. + (ses-load): Create cells variables as the (ses-cell ...) are read, + in order to check row col consistency with cell symbol name only + for cells that are not renamed. + (ses-replace-name-in-formula): New defun. + (ses-rename-cell): New defun. + (ses-call-printer-return, ses-cell-property-get) + (ses-sym-rowcol, ses-printer-validate, ses-formula-record) + (ses-create-cell-variable, ses-reset-header-string) + (ses-cell-set-formula, ses-repair-cell-reference-all) + (ses-self-reference-early-detection, ses-in-print-area, ses-set-curcell) + (ses-check-curcell, ses-call-printer, ses-adjust-print-width) + (ses-print-cell-new-width, ses-formula-references, ses-relocate-formula) + (ses-aset-with-undo, ses-load, ses-truncate-cell) + (ses-read-column-printer, ses-read-default-printer, ses-insert-row) + (ses-delete-row, ses-delete-column, ses-append-row-jump-first-column) + (ses-kill-override, ses-yank-pop, ses-yank-cells, ses-yank-tsf) + (ses-yank-resize, ses-export-tab, ses-mark-row, ses-mark-column) + (ses-renarrow-buffer, ses-insert-range, ses-insert-ses-range) + (ses-safe-printer, ses-safe-formula, ses-warn-unsafe, ses--clean-!) + (ses--clean-_, ses-range, ses-select, ses-center, ses-center-span) + (ses-dashfill, ses-unsafe): Fix typos and reflow docstrings. + + 2011-07-09 Leo Liu * register.el (insert-register): Restore accidental change on diff --git a/lisp/ses.el b/lisp/ses.el index 9b2048eae83..36764e92bbd 100644 --- a/lisp/ses.el +++ b/lisp/ses.el @@ -43,7 +43,7 @@ ;; working fine in most cases, however failed in some cases of several path ;; racing together. ;; -;; The current algorithm is based on Dijksta algorithm. The ``cycle length'' is +;; The current algorithm is based on Dijkstra's algorithm. The cycle length is ;; stored in some cell property. In order not to reset in all cells such ;; property at each update, the cycle length is stored in this property along ;; with some update attempt id that is incremented at each update. The current @@ -282,6 +282,9 @@ default printer and then modify its output.") ses--numcols ses--numrows ses--symbolic-formulas ses--data-marker ses--params-marker (ses--Dijkstra-attempt-nb . 0) ses--Dijkstra-weight-bound + ;; This list is useful to speed-up clean-up of symbols when + ;; an area containing renamed cell is deleted. + ses--renamed-cell-symb-list ;; Global variables that we override mode-line-process next-line-add-newlines transient-mark-mode) "Buffer-local variables used by SES.") @@ -327,7 +330,7 @@ need to be recalculated.") (defvar ses-call-printer-return nil "Set to t if last cell printer invoked by `ses-call-printer' requested -left-justification of the result. Set to error-signal if ses-call-printer +left-justification of the result. Set to error-signal if `ses-call-printer' encountered an error during printing. Otherwise nil.") (defvar ses-start-time nil @@ -394,7 +397,7 @@ functions refer to its value." val))))) (defmacro ses-cell-property-get (property-name row &optional col) - "Get property named PROPERTY-NAME From a CELL or a pair (ROW,COL). + "Get property named PROPERTY-NAME from a CELL or a pair (ROW,COL). When COL is omitted, CELL=ROW is a cell object. When COL is present ROW and COL are the integer coordinates of the cell of @@ -490,8 +493,8 @@ PROPERTY-NAME." `(aref ses--col-printers ,col)) (defmacro ses-sym-rowcol (sym) - "From a cell-symbol SYM, gets the cons (row . col). A1 => (0 . 0). Result -is nil if SYM is not a symbol that names a cell." + "From a cell-symbol SYM, gets the cons (row . col). A1 => (0 . 0). +Result is nil if SYM is not a symbol that names a cell." `(and (symbolp ,sym) (get ,sym 'ses-cell))) (defmacro ses-cell (sym value formula printer references) @@ -625,7 +628,7 @@ is a vector--if a symbol, the new vector is assigned as the symbol's value." (delete-region pos (point)))) (defun ses-printer-validate (printer) - "Signals an error if PRINTER is not a valid SES cell printer." + "Signal an error if PRINTER is not a valid SES cell printer." (or (not printer) (stringp printer) (functionp printer) @@ -642,7 +645,7 @@ checking that it is a valid printer function." (add-to-list 'ses-read-printer-history (prin1-to-string printer)))) (defun ses-formula-record (formula) - "If FORMULA is of the form 'symbol, adds it to the list of symbolic formulas + "If FORMULA is of the form 'symbol, add it to the list of symbolic formulas for this spreadsheet." (when (and (eq (car-safe formula) 'quote) (symbolp (cadr formula))) @@ -674,6 +677,17 @@ for this spreadsheet." (put sym 'ses-cell (cons xrow xcol)) (make-local-variable sym))))) +(defun ses-create-cell-variable (sym row col) + "Create a buffer-local variable `SYM' for cell at position (ROW, COL). + +SYM is the symbol for that variable, ROW and COL are integers for +row and column of the cell, with numbering starting from 0. + +Return nil in case of failure." + (unless (local-variable-p sym) + (make-local-variable sym) + (put sym 'ses-cell (cons row col)))) + ;; We do not delete the ses-cell properties for the cell-variables, in ;; case a formula that refers to this cell is in the kill-ring and is ;; later pasted back in. @@ -682,7 +696,10 @@ for this spreadsheet." (let (sym) (dotimes (row (1+ (- maxrow minrow))) (dotimes (col (1+ (- maxcol mincol))) - (setq sym (ses-create-cell-symbol (+ row minrow) (+ col mincol))) + (let ((xrow (+ row minrow)) (xcol (+ col mincol))) + (setq sym (if (and (< xrow ses--numrows) (< xcol ses--numcols)) + (ses-cell-symbol xrow xcol) + (ses-create-cell-symbol xrow xcol)))) (if (boundp sym) (push `(apply ses-set-with-undo ,sym ,(symbol-value sym)) buffer-undo-list)) @@ -691,7 +708,7 @@ for this spreadsheet." buffer-undo-list)) (defun ses-reset-header-string () - "Flags the header string for update. Upon undo, the header string will be + "Flag the header string for update. Upon undo, the header string will be updated again." (push '(apply ses-reset-header-string) buffer-undo-list) (setq ses--header-hscroll -1)) @@ -727,7 +744,7 @@ cell (ROW,COL). This is undoable. The cell's data will be updated through nil) ; Make coverage-tester happy. (defun ses-cell-set-formula (row col formula) - "Store a new formula for (ROW . COL) and enqueues the cell for + "Store a new formula for (ROW . COL) and enqueue the cell for recalculation via `post-command-hook'. Updates the reference lists for the cells that this cell refers to. Does not update cell value or reprint the cell. To avoid inconsistencies, this function is not interruptible, which @@ -812,9 +829,9 @@ means Emacs will crash if FORMULA contains a circular list." errors))))) (if errors (warn "---------------------------------------------------------------- -Some reference where corrupted. +Some references were corrupted. -The following is a list of where each element ELT is such +The following is a list where each element ELT is such that (car ELT) is the reference of cell CELL with corruption, and (cdr ELT) is a property list where @@ -922,8 +939,7 @@ the old and FORCE is nil." (ses-cell-set-formula row col nil)) (defcustom ses-self-reference-early-detection nil - "True if cycle detection is early for cells that refer to -themselves." + "True if cycle detection is early for cells that refer to themselves." :type 'boolean :group 'ses) @@ -980,7 +996,7 @@ if the cell's value is unchanged and FORCE is nil." (error "Circular references: %s" ses--deferred-recalc)) (message " ")) ;; Can't use save-excursion here: if the cell under point is updated, - ;; save-excusion's marker will move past the cell. + ;; save-excursion's marker will move past the cell. (goto-char pos))) @@ -989,7 +1005,7 @@ if the cell's value is unchanged and FORCE is nil." ;;---------------------------------------------------------------------------- (defun ses-in-print-area () - "Returns t if point is in print area of spreadsheet." + "Return t if point is in print area of spreadsheet." (<= (point) ses--data-marker)) ;; We turn off point-motion-hooks and explicitly position the cursor, in case @@ -1011,7 +1027,7 @@ if the cell's value is unchanged and FORCE is nil." (forward-char)))) (defun ses-set-curcell () - "Sets `ses--curcell' to the current cell symbol, or a cons (BEG,END) for a + "Set `ses--curcell' to the current cell symbol, or a cons (BEG,END) for a region, or nil if cursor is not at a cell." (if (or (not mark-active) deactivate-mark @@ -1030,10 +1046,10 @@ region, or nil if cursor is not at a cell." nil) (defun ses-check-curcell (&rest args) - "Signal an error if ses--curcell is inappropriate. The end marker is -appropriate if some argument is 'end. A range is appropriate if some -argument is 'range. A single cell is appropriate unless some argument is -'needrange." + "Signal an error if `ses--curcell' is inappropriate. +The end marker is appropriate if some argument is 'end. +A range is appropriate if some argument is 'range. +A single cell is appropriate unless some argument is 'needrange." (if (eq ses--curcell t) ;; curcell recalculation was postponed, but user typed ahead. (ses-set-curcell)) @@ -1143,7 +1159,7 @@ preceding cell has spilled over." (setq x (concat text (if (< maxcol ses--numcols) " " "\n"))) ;; We use set-text-properties to prevent a wacky print function from ;; inserting rogue properties, and to ensure that the keymap property is - ;; inherited (is it a bug that only unpropertied strings actually + ;; inherited (is it a bug that only unpropertized strings actually ;; inherit from surrounding text?) (set-text-properties 0 (length x) nil x) (insert-and-inherit x) @@ -1168,7 +1184,7 @@ preceding cell has spilled over." sig))) (defun ses-call-printer (printer &optional value) - "Invokes PRINTER (a string or parenthesized string or function-symbol or + "Invoke PRINTER (a string or parenthesized string or function-symbol or lambda of one argument) on VALUE. Result is the printed cell as a string. The variable `ses-call-printer-return' is set to t if the printer used parenthesis to request left-justification, or the error-signal if the @@ -1200,7 +1216,7 @@ printer signaled one (and \"%s\" is used as the default printer), else nil." (defun ses-adjust-print-width (col change) "Insert CHANGE spaces in front of column COL, or at end of line if COL=NUMCOLS. Deletes characters if CHANGE < 0. Caller should bind -inhibit-quit to t." +`inhibit-quit' to t." (let ((inhibit-read-only t) (blank (if (> change 0) (make-string change ?\s))) (at-end (= col ses--numcols))) @@ -1219,9 +1235,9 @@ inhibit-quit to t." (delete-char (- change)))))) (defun ses-print-cell-new-width (row col) - "Same as ses-print-cell, except if the cell's value is *skip*, the preceding -nonskipped cell is reprinted. This function is used when the width of -cell (ROW,COL) has changed." + "Same as `ses-print-cell', except if the cell's value is *skip*, +the preceding nonskipped cell is reprinted. This function is used +when the width of cell (ROW,COL) has changed." (if (not (eq (ses-cell-value row col) '*skip*)) (ses-print-cell row col) ;;Cell was skipped over - reprint previous @@ -1315,7 +1331,7 @@ Newlines in the data are escaped." (setq formula (cadr formula))) (if (eq (car-safe printer) 'ses-safe-printer) (setq printer (cadr printer))) - ;; This is noticably faster than (format "%S %S %S %S %S") + ;; This is noticeably faster than (format "%S %S %S %S %S") (setq text (concat "(ses-cell " (symbol-name sym) " " @@ -1344,7 +1360,7 @@ Newlines in the data are escaped." ;;---------------------------------------------------------------------------- (defun ses-formula-references (formula &optional result-so-far) - "Produce a list of symbols for cells that this formula's value + "Produce a list of symbols for cells that this FORMULA's value refers to. For recursive calls, RESULT-SO-FAR is the list being constructed, or t to get a wrong-type-argument error when the first reference is found." @@ -1371,7 +1387,7 @@ first reference is found." result-so-far) (defsubst ses-relocate-symbol (sym rowcol startrow startcol rowincr colincr) - "Relocate one symbol SYM, whichs corresponds to ROWCOL (a cons of ROW and + "Relocate one symbol SYM, which corresponds to ROWCOL (a cons of ROW and COL). Cells starting at (STARTROW,STARTCOL) are being shifted by (ROWINCR,COLINCR)." (let ((row (car rowcol)) @@ -1389,8 +1405,8 @@ by (ROWINCR,COLINCR)." (defun ses-relocate-formula (formula startrow startcol rowincr colincr) "Produce a copy of FORMULA where all symbols that refer to cells in row -STARTROW or above and col STARTCOL or above are altered by adding ROWINCR -and COLINCR. STARTROW and STARTCOL are 0-based. Example: +STARTROW or above, and col STARTCOL or above, are altered by adding ROWINCR +and COLINCR. STARTROW and STARTCOL are 0-based. Example: (ses-relocate-formula '(+ A1 B2 D3) 1 2 1 -1) => (+ A1 B2 C4) If ROWINCR or COLINCR is negative, references to cells being deleted are @@ -1400,7 +1416,8 @@ removed. Example: Sets `ses-relocate-return' to 'delete if cell-references were removed." (let (rowcol result) (if (or (atom formula) (eq (car formula) 'quote)) - (if (setq rowcol (ses-sym-rowcol formula)) + (if (and (setq rowcol (ses-sym-rowcol formula)) + (string-match "\\`[A-Z]+[0-9]+\\'" (symbol-name formula))) (ses-relocate-symbol formula rowcol startrow startcol rowincr colincr) formula) ; Pass through as-is. @@ -1508,14 +1525,15 @@ if the range was altered." the rectangle (MINROW,MINCOL)..(NUMROWS,NUMCOLS) by adding ROWINCR and COLINCR to each symbol." (let (reform) - (let (mycell newval) + (let (mycell newval xrow) (dotimes-with-progress-reporter (row ses--numrows) "Relocating formulas..." (dotimes (col ses--numcols) (setq ses-relocate-return nil mycell (ses-get-cell row col) newval (ses-relocate-formula (ses-cell-formula mycell) - minrow mincol rowincr colincr)) + minrow mincol rowincr colincr) + xrow (- row rowincr)) (ses-set-cell row col 'formula newval) (if (eq ses-relocate-return 'range) ;; This cell contains a (ses-range X Y) where a cell has been @@ -1531,8 +1549,22 @@ to each symbol." minrow mincol rowincr colincr)) (ses-set-cell row col 'references newval) (and (>= row minrow) (>= col mincol) - (ses-set-cell row col 'symbol - (ses-create-cell-symbol row col)))))) + (let ((sym (ses-cell-symbol row col)) + (xcol (- col colincr))) + (if (and + sym + (>= xrow 0) + (>= xcol 0) + (null (eq sym + (ses-create-cell-symbol xrow xcol)))) + ;; This is a renamed cell, do not update the cell + ;; name, but just update the coordinate property. + (put sym 'ses-cell (cons row col)) + (ses-set-cell row col 'symbol + (setq sym (ses-create-cell-symbol row col))) + (unless (and (boundp sym) (local-variable-p sym)) + (set (make-local-variable sym) nil) + (put sym 'ses-cell (cons row col)))))) ))) ;; Relocate the cell values. (let (oldval myrow mycol xrow xcol) (cond @@ -1545,11 +1577,17 @@ to each symbol." (setq mycol (+ col mincol) xrow (- myrow rowincr) xcol (- mycol colincr)) - (if (and (< xrow ses--numrows) (< xcol ses--numcols)) - (setq oldval (ses-cell-value xrow xcol)) - ;; Cell is off the end of the array. - (setq oldval (symbol-value (ses-create-cell-symbol xrow xcol)))) - (ses-set-cell myrow mycol 'value oldval)))) + (let ((sym (ses-cell-symbol myrow mycol)) + (xsym (ses-create-cell-symbol xrow xcol))) + ;; Make the value relocation only when if the cell is not + ;; a renamed cell. Otherwise this is not needed. + (and (eq sym xsym) + (ses-set-cell myrow mycol 'value + (if (and (< xrow ses--numrows) (< xcol ses--numcols)) + (ses-cell-value xrow xcol) + ;;Cell is off the end of the array + (symbol-value xsym)))))))) + ((and (wholenump rowincr) (wholenump colincr)) ;; Insertion of rows and/or columns. Run the loop backwards. (let ((disty (1- ses--numrows)) @@ -1618,7 +1656,8 @@ to each symbol." (makunbound sym))) (defun ses-aset-with-undo (array idx newval) - "Like aset, but undoable. Result is t if element has changed" + "Like `aset', but undoable. +Result is t if element has changed." (unless (equal (aref array idx) newval) (push `(apply ses-aset-with-undo ,array ,idx ,(aref array idx)) buffer-undo-list) @@ -1631,8 +1670,8 @@ to each symbol." ;;---------------------------------------------------------------------------- (defun ses-load () - "Parse the current buffer and sets up buffer-local variables. Does not -execute cell formulas or print functions." + "Parse the current buffer and set up buffer-local variables. +Does not execute cell formulas or print functions." (widen) ;; Read our global parameters, which should be a 3-element list. (goto-char (point-max)) @@ -1658,7 +1697,6 @@ execute cell formulas or print functions." (message "Upgrading from SES-1 file format"))) (or (= ses--file-format 2) (error "This file needs a newer version of the SES library code")) - (ses-create-cell-variable-range 0 (1- ses--numrows) 0 (1- ses--numcols)) ;; Initialize cell array. (setq ses--cells (make-vector ses--numrows nil)) (dotimes (row ses--numrows) @@ -1678,11 +1716,10 @@ execute cell formulas or print functions." (dotimes (row ses--numrows) (dotimes (col ses--numcols) (let* ((x (read (current-buffer))) - (rowcol (ses-sym-rowcol (car-safe (cdr-safe x))))) + (sym (car-safe (cdr-safe x)))) (or (and (looking-at "\n") (eq (car-safe x) 'ses-cell) - (eq row (car rowcol)) - (eq col (cdr rowcol))) + (ses-create-cell-variable sym row col)) (error "Cell-def error")) (eval x))) (or (looking-at "\n\n") @@ -2082,8 +2119,7 @@ to are recalculated first." (ses-jump-safe startcell))) (defun ses-truncate-cell () - "Reprint current cell, but without spillover into any following blank -cells." + "Reprint current cell, but without spillover into any following blank cells." (interactive "*") (ses-check-curcell) (let* ((rowcol (ses-sym-rowcol ses--curcell)) @@ -2273,7 +2309,7 @@ cells." (defun ses-read-printer (prompt default) "Common code for `ses-read-cell-printer', `ses-read-column-printer', and `ses-read-default-printer'. -PROMPT should end with \": \". Result is t if operation was cancelled." +PROMPT should end with \": \". Result is t if operation was canceled." (barf-if-buffer-read-only) (if (eq default t) (setq default "") @@ -2331,8 +2367,8 @@ right-justified) or a list of one string (will be left-justified)." (ses-print-cell row col)))) (defun ses-read-column-printer (col newval) - "Set the printer function for the current column. See -`ses-read-cell-printer' for input forms." + "Set the printer function for the current column. +See `ses-read-cell-printer' for input forms." (interactive (let ((col (cdr (ses-sym-rowcol ses--curcell)))) (ses-check-curcell) @@ -2348,8 +2384,8 @@ right-justified) or a list of one string (will be left-justified)." (ses-print-cell row col))))) (defun ses-read-default-printer (newval) - "Set the default printer function for cells that have no other. See -`ses-read-cell-printer' for input forms." + "Set the default printer function for cells that have no other. +See `ses-read-cell-printer' for input forms." (interactive (list (ses-read-printer "Default printer: " ses--default-printer))) (unless (eq newval t) @@ -2363,8 +2399,8 @@ right-justified) or a list of one string (will be left-justified)." ;;---------------------------------------------------------------------------- (defun ses-insert-row (count) - "Insert a new row before the current one. With prefix, insert COUNT rows -before current one." + "Insert a new row before the current one. +With prefix, insert COUNT rows before current one." (interactive "*p") (ses-check-curcell 'end) (or (> count 0) (signal 'args-out-of-range nil)) @@ -2416,8 +2452,8 @@ before current one." (ses-goto-print (1- ses--numrows) 0))) (defun ses-delete-row (count) - "Delete the current row. With prefix, Deletes COUNT rows starting from the -current one." + "Delete the current row. +With prefix, deletes COUNT rows starting from the current one." (interactive "*p") (ses-check-curcell) (or (> count 0) (signal 'args-out-of-range nil)) @@ -2509,8 +2545,8 @@ If COL is specified, the new column(s) get the specified WIDTH and PRINTER (ses-jump-safe ses--curcell)) (defun ses-delete-column (count) - "Delete the current column. With prefix, Deletes COUNT columns starting -from the current one." + "Delete the current column. +With prefix, deletes COUNT columns starting from the current one." (interactive "*p") (ses-check-curcell) (or (> count 0) (signal 'args-out-of-range nil)) @@ -2584,7 +2620,7 @@ inserts a new row if at bottom of print area. Repeat COUNT times." (forward-char))) (defun ses-append-row-jump-first-column () - "Insert a new row after current one and jumps to its first column." + "Insert a new row after current one and jump to its first column." (interactive "*") (ses-check-curcell) (ses-begin-change) @@ -2687,8 +2723,8 @@ the corresponding data cell." line) (defun ses-kill-override (beg end) - "Generic override for any commands that kill text. We clear the killed -cells instead of deleting them." + "Generic override for any commands that kill text. +We clear the killed cells instead of deleting them." (interactive "r") (ses-check-curcell 'needrange) ;; For some reason, the text-read-only error is not caught by `delete-region', @@ -2720,7 +2756,7 @@ When inserting cells, the formulas are usually relocated to keep the same relative references to neighboring cells. This is best if the formulas generally refer to other cells within the yanked text. You can use the C-u prefix to specify insertion without relocation, which is best when the -formulas refer to cells outsite the yanked text. +formulas refer to cells outside the yanked text. When inserting formulas, the text is treated as a string constant if it doesn't make sense as a sexp or would otherwise be considered a symbol. Use 'sym to @@ -2749,9 +2785,9 @@ as symbols." (defun ses-yank-pop (arg) "Replace just-yanked stretch of killed text with a different stretch. -This command is allowed only immediately after a `yank' or a `yank-pop', when -the region contains a stretch of reinserted previously-killed text. We -replace it with a different stretch of killed text. +This command is allowed only immediately after a `yank' or a `yank-pop', +when the region contains a stretch of reinserted previously-killed text. +We replace it with a different stretch of killed text. Unlike standard `yank-pop', this function uses `undo' to delete the previous insertion." (interactive "*p") @@ -2765,7 +2801,7 @@ previous insertion." (setq this-command 'yank)) (defun ses-yank-cells (text arg) - "If the TEXT has a proper set of 'ses attributes, inserts the text as + "If the TEXT has a proper set of 'ses attributes, insert the text as cells, else return nil. The cells are reprinted--the supplied text is ignored because the column widths, default printer, etc. at yank time might be different from those at kill-time. ARG is a list to indicate that @@ -2848,8 +2884,8 @@ cons of ROW and COL). Treat plain symbols as strings unless ARG is a list." (ses-cell-set-formula row col val)))) (defun ses-yank-tsf (text arg) - "If TEXT contains tabs and/or newlines, treats the tabs as -column-separators and the newlines as row-separators and inserts the text as + "If TEXT contains tabs and/or newlines, treat the tabs as +column-separators and the newlines as row-separators and insert the text as cell formulas--else return nil. Treat plain symbols as strings unless ARG is a list. Ignore a final newline." (if (or (not (string-match "[\t\n]" text)) @@ -2887,8 +2923,8 @@ is a list. Ignore a final newline." t))) (defun ses-yank-resize (needrows needcols) - "If this yank will require inserting rows and/or columns, asks for -confirmation and then inserts them. Result is (row,col) for top left of yank + "If this yank will require inserting rows and/or columns, ask for +confirmation and then insert them. Result is (row,col) for top left of yank spot, or error signal if user requests cancel." (ses-begin-change) (let ((rowcol (if ses--curcell @@ -2931,9 +2967,9 @@ newlines between rows. Result is placed in kill ring." (ses-export-tab t)) (defun ses-export-tab (want-formulas) - "Export the current range with tabs between columns and newlines between -rows. Result is placed in kill ring. The export is values unless -WANT-FORMULAS is non-nil. Newlines and tabs in the export text are escaped." + "Export the current range with tabs between columns and newlines between rows. +Result is placed in kill ring. The export is values unless WANT-FORMULAS +is non-nil. Newlines and tabs in the export text are escaped." (ses-check-curcell 'needrange) (let ((print-escape-newlines t) result item) @@ -2992,7 +3028,7 @@ The top row is row 1. Selecting row 0 displays the default header row." (ses-reset-header-string)) (defun ses-mark-row () - "Marks the entirety of current row as a range." + "Mark the entirety of current row as a range." (interactive) (ses-check-curcell 'range) (let ((row (car (ses-sym-rowcol (or (car-safe ses--curcell) ses--curcell))))) @@ -3002,7 +3038,7 @@ The top row is row 1. Selecting row 0 displays the default header row." (ses-goto-print row 0))) (defun ses-mark-column () - "Marks the entirety of current column as a range." + "Mark the entirety of current column as a range." (interactive) (ses-check-curcell 'range) (let ((col (cdr (ses-sym-rowcol (or (car-safe ses--curcell) ses--curcell)))) @@ -3046,13 +3082,14 @@ The top row is row 1. Selecting row 0 displays the default header row." (ses-goto-print row col))))) (defun ses-renarrow-buffer () - "Narrow the buffer so only the print area is visible. Use after \\[widen]." + "Narrow the buffer so only the print area is visible. +Use after \\[widen]." (interactive) (setq ses--deferred-narrow t)) (defun ses-sort-column (sorter &optional reverse) - "Sorts the range by a specified column. With prefix, sorts in -REVERSE order." + "Sort the range by a specified column. +With prefix, sorts in REVERSE order." (interactive "*sSort column: \nP") (ses-check-curcell 'needrange) (let ((min (ses-sym-rowcol (car ses--curcell))) @@ -3103,7 +3140,7 @@ REVERSE order." (ses-sort-column (ses-column-letter col) reverse)))) (defun ses-insert-range () - "Inserts into minibuffer the list of cells currently highlighted in the + "Insert into minibuffer the list of cells currently highlighted in the spreadsheet." (interactive "*") (let (x) @@ -3115,7 +3152,7 @@ spreadsheet." (insert (substring (prin1-to-string (nreverse x)) 1 -1)))) (defun ses-insert-ses-range () - "Inserts \"(ses-range x y)\" in the minibuffer to represent the currently + "Insert \"(ses-range x y)\" in the minibuffer to represent the currently highlighted range in the spreadsheet." (interactive "*") (let (x) @@ -3139,13 +3176,70 @@ highlighted range in the spreadsheet." (mouse-set-point event) (ses-insert-ses-range)) +(defun ses-replace-name-in-formula (formula old-name new-name) + (let ((new-formula formula)) + (unless (and (consp formula) + (eq (car-safe formula) 'quote)) + (while formula + (let ((elt (car-safe formula))) + (cond + ((consp elt) + (setcar formula (ses-replace-name-in-formula elt old-name new-name))) + ((and (symbolp elt) + (eq (car-safe formula) old-name)) + (setcar formula new-name)))) + (setq formula (cdr formula)))) + new-formula)) + +(defun ses-rename-cell (new-name) + "Rename current cell." + (interactive "*SEnter new name: ") + (ses-check-curcell) + (or + (and (local-variable-p new-name) + (ses-sym-rowcol new-name) + ;; this test is needed because ses-cell property of deleted cells + ;; is not deleted in case of subsequent undo + (memq new-name ses--renamed-cell-symb-list) + (error "Already a cell name")) + (and (boundp new-name) + (null (yes-or-no-p (format "`%S' is already bound outside this buffer, continue? " + new-name))) + (error "Already a bound cell name"))) + (let* ((rowcol (ses-sym-rowcol ses--curcell)) + (cell (ses-get-cell (car rowcol) (cdr rowcol)))) + (put new-name 'ses-cell rowcol) + (dolist (reference (ses-cell-references (car rowcol) (cdr rowcol))) + (let* ((rowcol (ses-sym-rowcol reference)) + (cell (ses-get-cell (car rowcol) (cdr rowcol)))) + (ses-cell-set-formula (car rowcol) + (cdr rowcol) + (ses-replace-name-in-formula + (ses-cell-formula cell) + ses--curcell + new-name)))) + (push new-name ses--renamed-cell-symb-list) + (set new-name (symbol-value ses--curcell)) + (aset cell 0 new-name) + (put ses--curcell 'ses-cell nil) + (makunbound ses--curcell) + (setq ses--curcell new-name) + (let* ((pos (point)) + (inhibit-read-only t) + (col (current-column)) + (end (save-excursion + (move-to-column (1+ col)) + (if (eolp) + (+ pos (ses-col-width col) 1) + (point))))) + (put-text-property pos end 'intangible new-name))) ) ;;---------------------------------------------------------------------------- ;; Checking formulas for safety ;;---------------------------------------------------------------------------- (defun ses-safe-printer (printer) - "Returns PRINTER if safe, or the substitute printer `ses-unsafe' otherwise." + "Return PRINTER if safe, or the substitute printer `ses-unsafe' otherwise." (if (or (stringp printer) (stringp (car-safe printer)) (not printer) @@ -3154,16 +3248,16 @@ highlighted range in the spreadsheet." 'ses-unsafe)) (defun ses-safe-formula (formula) - "Returns FORMULA if safe, or the substitute formula *unsafe* otherwise." + "Return FORMULA if safe, or the substitute formula *unsafe* otherwise." (if (ses-warn-unsafe formula 'unsafep) formula `(ses-unsafe ',formula))) (defun ses-warn-unsafe (formula checker) - "Applies CHECKER to FORMULA. If result is non-nil, asks user for -confirmation about FORMULA, which might be unsafe. Returns t if formula -is safe or user allows execution anyway. Always returns t if -`safe-functions' is t." + "Apply CHECKER to FORMULA. +If result is non-nil, asks user for confirmation about FORMULA, +which might be unsafe. Returns t if formula is safe or user allows +execution anyway. Always returns t if `safe-functions' is t." (if (eq safe-functions t) t (setq checker (funcall checker formula)) @@ -3178,13 +3272,13 @@ is safe or user allows execution anyway. Always returns t if ;;---------------------------------------------------------------------------- (defun ses--clean-! (&rest x) - "Clean by delq list X from any occurrence of `nil' or `*skip*'." + "Clean by `delq' list X from any occurrence of `nil' or `*skip*'." (delq nil (delq '*skip* x))) (defun ses--clean-_ (x y) "Clean list X by replacing by Y any occurrence of `nil' or `*skip*'. -This will change X by making setcar on its cons cells." +This will change X by making `setcar' on its cons cells." (let ((ret x) ret-elt) (while ret (setq ret-elt (car ret)) @@ -3194,7 +3288,7 @@ This will change X by making setcar on its cons cells." x) (defmacro ses-range (from to &rest rest) - "Expands to a list of cell-symbols for the range going from + "Expand to a list of cell-symbols for the range going from FROM up to TO. The range automatically expands to include any new row or column inserted into its middle. The SES library code specifically looks for the symbol `ses-range', so don't create an @@ -3204,11 +3298,11 @@ By passing in REST some flags one can configure the way the range is read and how it is formatted. In the sequel we assume that cells A1, B1, A2 B2 have respective values -1 2 3 and 4 for examplication. +1 2 3 and 4. Readout direction is specified by a `>v', '`>^', `', `v<', `^>', `^<' flag. For historical reasons, in absence -of such a flag, a default direction of `^<' is assumed. This +`v>', `v<', `^>', `^<' flag. For historical reasons, in absence +of such a flag, a default direction of `^<' is assumed. This way `(ses-range A1 B2 ^>)' will evaluate to `(1 3 2 4)', while `(ses-range A1 B2 >^)' will evaluate to (3 4 1 2). @@ -3221,18 +3315,18 @@ If the range is one column, then `v' can be used as a shorthand to A `!' flag will remove all cells whose value is nil or `*skip*'. A `_' flag will replace nil or `*skip*' by the value following -the `_' flag. If the `_' flag is the last argument, then they are +the `_' flag. If the `_' flag is the last argument, then they are replaced by integer 0. A `*', `*1' or `*2' flag will vectorize the range in the sense of -Calc. See info node `(Calc) Top'. Flag `*' will output either a +Calc. See info node `(Calc) Top'. Flag `*' will output either a vector or a matrix depending on the number of rows, `*1' will flatten the result to a one row vector, and `*2' will make a matrix whatever the number of rows. -Warning: interaction with Calc is expermimental and may produce -confusing results if you are not aware of Calc data format. Use -`math-format-value' as a printer for Calc objects." +Warning: interaction with Calc is experimental and may produce +confusing results if you are not aware of Calc data format. +Use `math-format-value' as a printer for Calc objects." (let (result-row result (prev-row -1) @@ -3319,10 +3413,10 @@ are ignored. Result is always floating-point, even if all args are integers." (/ (float (apply '+ list)) (length list))) (defmacro ses-select (fromrange test torange) - "Select cells in FROMRANGE that are `equal' to TEST. For each match, return -the corresponding cell from TORANGE. The ranges are macroexpanded but not -evaluated so they should be either (ses-range BEG END) or (list ...). The -TEST is evaluated." + "Select cells in FROMRANGE that are `equal' to TEST. +For each match, return the corresponding cell from TORANGE. +The ranges are macroexpanded but not evaluated so they should be +either (ses-range BEG END) or (list ...). The TEST is evaluated." (setq fromrange (cdr (macroexpand fromrange)) torange (cdr (macroexpand torange)) test (eval test)) @@ -3352,9 +3446,10 @@ TEST is evaluated." (defvar col) (defun ses-center (value &optional span fill) - "Print VALUE, centered within column. FILL is the fill character for -centering (default = space). SPAN indicates how many additional rightward -columns to include in width (default = 0)." + "Print VALUE, centered within column. +FILL is the fill character for centering (default = space). +SPAN indicates how many additional rightward columns to include +in width (default = 0)." (let ((printer (or (ses-col-printer col) ses--default-printer)) (width (ses-col-width col)) half) @@ -3373,8 +3468,8 @@ columns to include in width (default = 0)." (defun ses-center-span (value &optional fill) "Print VALUE, centered within the span that starts in the current column -and continues until the next nonblank column. FILL specifies the fill -character (default = space)." +and continues until the next nonblank column. +FILL specifies the fill character (default = space)." (let ((end (1+ col))) (while (and (< end ses--numcols) (memq (ses-cell-value row end) '(nil *skip*))) @@ -3382,8 +3477,8 @@ character (default = space)." (ses-center value (- end col 1) fill))) (defun ses-dashfill (value &optional span) - "Print VALUE centered using dashes. SPAN indicates how many rightward -columns to include in width (default = 0)." + "Print VALUE centered using dashes. +SPAN indicates how many rightward columns to include in width (default = 0)." (ses-center value span ?-)) (defun ses-dashfill-span (value) @@ -3397,7 +3492,7 @@ current column and continues until the next nonblank column." (ses-center-span value ?~)) (defun ses-unsafe (value) - "Substitute for an unsafe formula or printer" + "Substitute for an unsafe formula or printer." (error "Unsafe formula or printer")) ;;All standard printers are safe, including ses-unsafe! From 3f99e6e686e4a2db4b0c13679d211fdbb9b48dae Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Wed, 15 Feb 2012 09:38:21 -0500 Subject: [PATCH 002/564] * lisp/emacs-lisp/smie.el: Provide smarter auto-filling. (smie-auto-fill): New function. (smie-setup): Use it. --- lisp/ChangeLog | 6 ++++++ lisp/emacs-lisp/smie.el | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 29cb0334fb0..581ddc3788e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2012-02-15 Stefan Monnier + + * emacs-lisp/smie.el: Provide smarter auto-filling. + (smie-auto-fill): New function. + (smie-setup): Use it. + 2011-12-27 Vincent Belaïche * ses.el: The overall change is to add cell renaming, that is diff --git a/lisp/emacs-lisp/smie.el b/lisp/emacs-lisp/smie.el index cad7c8419b2..49ee051e62d 100644 --- a/lisp/emacs-lisp/smie.el +++ b/lisp/emacs-lisp/smie.el @@ -1539,6 +1539,38 @@ to which that point should be aligned, if we were to reindent it.") (save-excursion (indent-line-to indent)) (indent-line-to indent))))) +(defun smie-auto-fill () + (let ((fc (current-fill-column)) + (try-again nil)) + (while (and fc (> (current-column) fc)) + (cond + ((not (or (nth 8 (save-excursion + (syntax-ppss (line-beginning-position)))) + (nth 8 (syntax-ppss)))) + (save-excursion + (beginning-of-line) + (smie-indent-forward-token) + (let ((bsf (point)) + (gain 0) + curcol) + (while (<= (setq curcol (current-column)) fc) + ;; FIXME? `smie-indent-calculate' can (and often will) + ;; return a result that actually depends on the presence/absence + ;; of a newline, so the gain computed here may not be accurate, + ;; but in practice it seems to works well enough. + (let* ((newcol (smie-indent-calculate)) + (newgain (- curcol newcol))) + (when (> newgain gain) + (setq gain newgain) + (setq bsf (point)))) + (smie-indent-forward-token)) + (when (> gain 0) + (setq try-again) + (goto-char bsf) + (newline-and-indent))))) + (t (do-auto-fill)))))) + + (defun smie-setup (grammar rules-function &rest keywords) "Setup SMIE navigation and indentation. GRAMMAR is a grammar table generated by `smie-prec2->grammar'. @@ -1549,6 +1581,7 @@ KEYWORDS are additional arguments, which can use the following keywords: (set (make-local-variable 'smie-rules-function) rules-function) (set (make-local-variable 'smie-grammar) grammar) (set (make-local-variable 'indent-line-function) 'smie-indent-line) + (set (make-local-variable 'normal-auto-fill-function) 'smie-auto-fill) (set (make-local-variable 'forward-sexp-function) 'smie-forward-sexp-command) (while keywords From 8eb5d48f36bbb758d46a867c52fbc23d7ad7d71f Mon Sep 17 00:00:00 2001 From: Philipp Haselwarter Date: Sun, 25 Mar 2012 14:37:24 -0400 Subject: [PATCH 003/564] * lisp/newcomment.el (comment-inline-offset): New custom var. (comment-indent): Use it. Fixes: debbugs:11090 --- lisp/ChangeLog | 5 +++++ lisp/newcomment.el | 15 ++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 581ddc3788e..729795b9bab 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-03-25 Philipp Haselwarter (tiny change) + + * newcomment.el (comment-inline-offset): New custom var (bug#11090). + (comment-indent): Use it. + 2012-02-15 Stefan Monnier * emacs-lisp/smie.el: Provide smarter auto-filling. diff --git a/lisp/newcomment.el b/lisp/newcomment.el index a1d77ccc6e0..2d5608cb225 100644 --- a/lisp/newcomment.el +++ b/lisp/newcomment.el @@ -268,6 +268,19 @@ makes the comment easier to read. Default is 1. nil means 0." :type '(choice string integer (const nil)) :group 'comment) +;;;###autoload +(defcustom comment-inline-offset 1 + "Inline comments have to be preceded by at least this many spaces. +This is usefull when style-conventions require a certain minimal offset. +Python's PEP8 for example recommends two spaces, so you could do: + +\(add-hook 'python-mode-hook + (lambda nil (set (make-local-variable 'comment-inline-offset) 2))) + +See `comment-padding' for whole-line comments." + :type 'integer + :group 'comment) + ;;;###autoload (defcustom comment-multi-line nil "Non-nil means `comment-indent-new-line' continues comments. @@ -685,7 +698,7 @@ If CONTINUE is non-nil, use the `comment-continue' markers if any." (save-excursion (skip-chars-backward " \t") (unless (bolp) - (setq indent (max indent (1+ (current-column)))))) + (setq indent (max indent (+ (current-column) comment-inline-offset))))) ;; If that's different from comment's current position, change it. (unless (= (current-column) indent) (delete-region (point) (progn (skip-chars-backward " \t") (point))) From 98fb480ee31bf74cf554044f60f21df16566dd7f Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sun, 25 Mar 2012 14:41:06 -0400 Subject: [PATCH 004/564] * lisp/newcomment.el (comment-inline-offset): Don't autoload. (comment-choose-indent): Obey comment-inline-offset. --- lisp/ChangeLog | 5 +++++ lisp/newcomment.el | 6 +++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 729795b9bab..d6e8d259ae3 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-03-25 Stefan Monnier + + * newcomment.el (comment-inline-offset): Don't autoload. + (comment-choose-indent): Obey comment-inline-offset. + 2012-03-25 Philipp Haselwarter (tiny change) * newcomment.el (comment-inline-offset): New custom var (bug#11090). diff --git a/lisp/newcomment.el b/lisp/newcomment.el index 2d5608cb225..bac218e4e91 100644 --- a/lisp/newcomment.el +++ b/lisp/newcomment.el @@ -268,7 +268,6 @@ makes the comment easier to read. Default is 1. nil means 0." :type '(choice string integer (const nil)) :group 'comment) -;;;###autoload (defcustom comment-inline-offset 1 "Inline comments have to be preceded by at least this many spaces. This is usefull when style-conventions require a certain minimal offset. @@ -598,7 +597,7 @@ Point is expected to be at the start of the comment." (save-excursion (end-of-line) (current-column))))) (other nil) (min (save-excursion (skip-chars-backward " \t") - (1+ (current-column))))) + (+ comment-inline-offset (current-column))))) ;; Fix up the range. (if (< max min) (setq max min)) ;; Don't move past the fill column. @@ -698,7 +697,8 @@ If CONTINUE is non-nil, use the `comment-continue' markers if any." (save-excursion (skip-chars-backward " \t") (unless (bolp) - (setq indent (max indent (+ (current-column) comment-inline-offset))))) + (setq indent (max indent + (+ (current-column) comment-inline-offset))))) ;; If that's different from comment's current position, change it. (unless (= (current-column) indent) (delete-region (point) (progn (skip-chars-backward " \t") (point))) From b8df54ffbefc5ddf40ddcda68a2a682769c5833d Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Mon, 9 Apr 2012 00:45:59 -0700 Subject: [PATCH 005/564] configure: new option --enable-gcc-warnings I have been using this change for many months in my private copy of Emacs, and have used it to find several bugs. It's mature enough to publish now. * Makefile.in (GNULIB_MODULES): Add warnings, manywarnings. * configure.in: Support --enable-gcc-warnings, in the style of other GNU packages such as coreutils. (C_WARNINGS_SWITCH): Remove, replacing with... (WARN_CFLAGS, GNULIB_WARN_CFLAGS): New variable. (PKG_CHECK_MODULES, C_SWITCH_X_SITE): Use -isystem rather than -I, when including system files with GCC. * etc/NEWS: Mention --enable-gcc-warnings. * lib/Makefile.am (AM_CFLAGS): New macro. * m4/manywarnings.m4, m4/warnings.m4: New files, from gnulib. * lib-src/Makefile.in (C_WARNINGS_SWITCH): Remove. (WARN_CFLAGS, WERROR_CFLAGS): New macros. (BASE_CFLAGS): Use new macros rather than old. * lwlib/Makefile.in (C_WARNINGS_SWITCH): Remove. (WARN_CFLAGS, WERROR_CFLAGS): New macros. (ALL_CFLAGS): Use new macros rather than old. * oldXMenu/Makefile.in (C_WARNINGS_SWITCH): Remove. (WARN_CFLAGS, WERROR_CFLAGS): New macros. (ALL_CFLAGS): Use new macros rather than old. * src/Makefile.in (C_WARNINGS_SWITCH): Remove. (WARN_CFLAGS, WERROR_CFLAGS): New macros. (ALL_CFLAGS): Use new macros rather than old. * src/process.c: Ignore -Wstrict-overflow to work around GCC bug 52904. * src/regex.c: Ignore -Wstrict-overflow. If !emacs, also ignore -Wunused-but-set-variable, -Wunused-function, -Wunused-macros, -Wunused-result, -Wunused-variable. This should go away once the Emacs and Gnulib regex code is merged. (xmalloc, xrealloc): Now static. --- ChangeLog | 17 ++++ Makefile.in | 5 +- configure.in | 161 +++++++++++++++++++++++++++---------- etc/NEWS | 7 ++ lib-src/ChangeLog | 7 ++ lib-src/Makefile.in | 6 +- lib/Makefile.am | 1 + lwlib/ChangeLog | 7 ++ lwlib/Makefile.in | 6 +- m4/manywarnings.m4 | 184 +++++++++++++++++++++++++++++++++++++++++++ m4/warnings.m4 | 42 ++++++++++ oldXMenu/ChangeLog | 7 ++ oldXMenu/Makefile.in | 5 +- src/ChangeLog | 13 +++ src/Makefile.in | 5 +- src/process.c | 7 ++ src/regex.c | 17 +++- 17 files changed, 444 insertions(+), 53 deletions(-) create mode 100644 m4/manywarnings.m4 create mode 100644 m4/warnings.m4 diff --git a/ChangeLog b/ChangeLog index 2fe50a6d83b..8f7ccc573af 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,20 @@ +2012-04-09 Paul Eggert + + configure: new option --enable-gcc-warnings + I have been using this change for many months in my private copy + of Emacs, and have used it to find several bugs. It's mature + enough to publish now. + * Makefile.in (GNULIB_MODULES): Add warnings, manywarnings. + * configure.in: Support --enable-gcc-warnings, in the style of + other GNU packages such as coreutils. + (C_WARNINGS_SWITCH): Remove, replacing with... + (WARN_CFLAGS, GNULIB_WARN_CFLAGS): New variable. + (PKG_CHECK_MODULES, C_SWITCH_X_SITE): Use -isystem rather than -I, + when including system files with GCC. + * etc/NEWS: Mention --enable-gcc-warnings. + * lib/Makefile.am (AM_CFLAGS): New macro. + * m4/manywarnings.m4, m4/warnings.m4: New files, from gnulib. + 2012-04-09 Glenn Morris * Makefile.in (leim): Check cd return value. Pass fewer variables. diff --git a/Makefile.in b/Makefile.in index 3ee5e8ae8ed..2d54aa1f3a3 100644 --- a/Makefile.in +++ b/Makefile.in @@ -336,8 +336,9 @@ GNULIB_MODULES = \ careadlinkat crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 dtoastr \ dup2 \ filemode getloadavg getopt-gnu ignore-value intprops lstat \ - mktime pthread_sigmask readlink \ - socklen stdarg stdio strftime strtoimax strtoumax symlink sys_stat + manywarnings mktime pthread_sigmask readlink \ + socklen stdarg stdio strftime strtoimax strtoumax symlink sys_stat \ + warnings GNULIB_TOOL_FLAGS = \ --avoid=msvc-inval --avoid=msvc-nothrow \ --avoid=raise --avoid=threadlib \ diff --git a/configure.in b/configure.in index 14a80622cd9..4b67078bf39 100644 --- a/configure.in +++ b/configure.in @@ -686,47 +686,121 @@ else test "x$NON_GCC_TEST_OPTIONS" != x && CC="$CC $NON_GCC_TEST_OPTIONS" fi -### Use -Wdeclaration-after-statement if the compiler supports it -AC_MSG_CHECKING([whether gcc understands -Wdeclaration-after-statement]) -SAVE_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS -Wdeclaration-after-statement" -AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], has_option=yes, has_option=no) -if test $has_option = yes; then - C_WARNINGS_SWITCH="-Wdeclaration-after-statement $C_WARNINGS_SWITCH" -fi -AC_MSG_RESULT($has_option) -CFLAGS="$SAVE_CFLAGS" -unset has_option -unset SAVE_CFLAGS +AC_ARG_ENABLE([gcc-warnings], + [AS_HELP_STRING([--enable-gcc-warnings], + [turn on lots of GCC warnings (for developers)])], + [case $enableval in + yes|no) ;; + *) AC_MSG_ERROR([bad value $enableval for gcc-warnings option]) ;; + esac + gl_gcc_warnings=$enableval], + [gl_gcc_warnings=no] +) -### Use -Wold-style-definition if the compiler supports it -# This can be removed when conversion to standard C is finished. -AC_MSG_CHECKING([whether gcc understands -Wold-style-definition]) -SAVE_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS -Wold-style-definition" -AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], has_option=yes, has_option=no) -if test $has_option = yes; then - C_WARNINGS_SWITCH="-Wold-style-definition $C_WARNINGS_SWITCH" -fi -AC_MSG_RESULT($has_option) -CFLAGS="$SAVE_CFLAGS" -unset has_option -unset SAVE_CFLAGS +# gl_GCC_VERSION_IFELSE([major], [minor], [run-if-found], [run-if-not-found]) +# ------------------------------------------------ +# If $CPP is gcc-MAJOR.MINOR or newer, then run RUN-IF-FOUND. +# Otherwise, run RUN-IF-NOT-FOUND. +AC_DEFUN([gl_GCC_VERSION_IFELSE], + [AC_PREPROC_IFELSE( + [AC_LANG_PROGRAM( + [[ +#if ($1) < __GNUC__ || (($1) == __GNUC__ && ($2) <= __GNUC_MINOR__) +/* ok */ +#else +# error "your version of gcc is older than $1.$2" +#endif + ]]), + ], [$3], [$4]) + ] +) -### Use -Wimplicit-function-declaration if the compiler supports it -AC_MSG_CHECKING([whether gcc understands -Wimplicit-function-declaration]) -SAVE_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS -Wimplicit-function-declaration" -AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], has_option=yes, has_option=no) -if test $has_option = yes; then - C_WARNINGS_SWITCH="-Wimplicit-function-declaration $C_WARNINGS_SWITCH" -fi -AC_MSG_RESULT($has_option) -CFLAGS="$SAVE_CFLAGS" -unset has_option -unset SAVE_CFLAGS +# When compiling with GCC, prefer -isystem to -I when including system +# include files, to avoid generating useless diagnostics for the files. +if test "$gl_gcc_warnings" != yes; then + isystem='-I' +else + isystem='-isystem ' + + # This, $nw, is the list of warnings we disable. + nw= + + case $with_x_toolkit in + lucid | athena | motif) + # Old toolkits mishandle 'const'. + nw="$nw -Wwrite-strings" + ;; + *) + gl_WARN_ADD([-Werror], [WERROR_CFLAGS]) + ;; + esac + AC_SUBST([WERROR_CFLAGS]) + + nw="$nw -Waggregate-return" # anachronistic + nw="$nw -Wlong-long" # C90 is anachronistic (lib/gethrxtime.h) + nw="$nw -Wc++-compat" # We don't care about C++ compilers + nw="$nw -Wundef" # Warns on '#if GNULIB_FOO' etc in gnulib + nw="$nw -Wtraditional" # Warns on #elif which we use often + nw="$nw -Wcast-qual" # Too many warnings for now + nw="$nw -Wconversion" # Too many warnings for now + nw="$nw -Wsystem-headers" # Don't let system headers trigger warnings + nw="$nw -Wsign-conversion" # Too many warnings for now + nw="$nw -Woverlength-strings" # Not a problem these days + nw="$nw -Wtraditional-conversion" # Too many warnings for now + nw="$nw -Wpadded" # Our structs are not padded + nw="$nw -Wredundant-decls" # We regularly (re)declare getenv etc. + nw="$nw -Wlogical-op" # any use of fwrite provokes this + nw="$nw -Wformat-nonliteral" # Emacs does this a lot + nw="$nw -Wvla" # warnings in gettext.h + nw="$nw -Wnested-externs" # use of XARGMATCH/verify_function__ + nw="$nw -Wswitch-enum" # Too many warnings for now + nw="$nw -Wswitch-default" # Too many warnings for now + nw="$nw -Wfloat-equal" # e.g., ftoastr.c + nw="$nw -Winline" # e.g., dispnew.c's inlining of row_equal_p + + # Emacs doesn't care about shadowing; see + # . + nw="$nw -Wshadow" + + # The following lines should be removable at some point. + nw="$nw -Wsuggest-attribute=const" + nw="$nw -Wsuggest-attribute=pure" + + gl_MANYWARN_ALL_GCC([ws]) + gl_MANYWARN_COMPLEMENT([ws], [$ws], [$nw]) + for w in $ws; do + gl_WARN_ADD([$w]) + done + gl_WARN_ADD([-Wno-missing-field-initializers]) # We need this one + gl_WARN_ADD([-Wno-sign-compare]) # Too many warnings for now + gl_WARN_ADD([-Wno-type-limits]) # Too many warnings for now + gl_WARN_ADD([-Wno-switch]) # Too many warnings for now + gl_WARN_ADD([-Wno-unused-parameter]) # Too many warnings for now + gl_WARN_ADD([-Wno-format-nonliteral]) + + # In spite of excluding -Wlogical-op above, it is enabled, as of + # gcc 4.5.0 20090517. + gl_WARN_ADD([-Wno-logical-op]) + + gl_WARN_ADD([-fdiagnostics-show-option]) + gl_WARN_ADD([-funit-at-a-time]) + + AC_SUBST([WARN_CFLAGS]) + + AC_DEFINE([lint], [1], [Define to 1 if the compiler is checking for lint.]) + AC_DEFINE([_FORTIFY_SOURCE], [2], + [enable compile-time and run-time bounds-checking, and some warnings]) + AC_DEFINE([GNULIB_PORTCHECK], [1], [enable some gnulib portability checks]) + + # We use a slightly smaller set of warning options for lib/. + # Remove the following and save the result in GNULIB_WARN_CFLAGS. + nw= + nw="$nw -Wunused-macros" + + gl_MANYWARN_COMPLEMENT([GNULIB_WARN_CFLAGS], [$WARN_CFLAGS], [$nw]) + AC_SUBST([GNULIB_WARN_CFLAGS]) +fi -AC_SUBST(C_WARNINGS_SWITCH) #### Some other nice autoconf tests. @@ -1127,8 +1201,13 @@ AC_DEFUN([PKG_CHECK_MODULES], [ if $PKG_CONFIG --exists "$2" 2>&AS_MESSAGE_LOG_FD && $1_CFLAGS=`$PKG_CONFIG --cflags "$2" 2>&AS_MESSAGE_LOG_FD` && $1_LIBS=`$PKG_CONFIG --libs "$2" 2>&AS_MESSAGE_LOG_FD`; then - - $1_CFLAGS=`AS_ECHO(["$$1_CFLAGS"]) | sed -e 's,///*,/,g'` + edit_cflags=" + s,///*,/,g + s/^/ / + s/ -I/ $isystem/g + s/^ // + " + $1_CFLAGS=`AS_ECHO(["$$1_CFLAGS"]) | sed -e "$edit_cflags"` $1_LIBS=`AS_ECHO(["$$1_LIBS"]) | sed -e 's,///*,/,g'` AC_MSG_RESULT([yes CFLAGS='$$1_CFLAGS' LIBS='$$1_LIBS']) succeeded=yes @@ -1463,7 +1542,7 @@ AC_SUBST(LD_SWITCH_X_SITE_AUX) AC_SUBST(LD_SWITCH_X_SITE_AUX_RPATH) if test "${x_includes}" != NONE && test -n "${x_includes}"; then - C_SWITCH_X_SITE=-I`echo ${x_includes} | sed -e "s/:/ -I/g"` + C_SWITCH_X_SITE="$isystem"`echo ${x_includes} | sed -e "s/:/ $isystem/g"` fi if test x"${x_includes}" = x; then diff --git a/etc/NEWS b/etc/NEWS index ae6ba8d36b7..dd302a052d6 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -22,6 +22,13 @@ so we will look at it and add it to the manual. * Installation Changes in Emacs 24.2 + +** New configure option '--enable-gcc-warnings', intended for developers. +If building with GCC, this enables compile-time checks that warn about +possibly-questionable C code. On a recent GNU system there should be +no warnings; on older and on non-GNU systems the generated warnings +may or may not be useful. By default, these warnings are not generated. + * Startup Changes in Emacs 24.2 diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index aad382de6d0..86b92b5b84a 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog @@ -1,3 +1,10 @@ +2012-04-09 Paul Eggert + + configure: new option --enable-gcc-warnings + * Makefile.in (C_WARNINGS_SWITCH): Remove. + (WARN_CFLAGS, WERROR_CFLAGS): New macros. + (BASE_CFLAGS): Use new macros rather than old. + 2012-04-07 Eli Zaretskii * makefile.w32-in (obj): Add xml.o. diff --git a/lib-src/Makefile.in b/lib-src/Makefile.in index cc1757e4e3b..6732030a648 100644 --- a/lib-src/Makefile.in +++ b/lib-src/Makefile.in @@ -36,8 +36,9 @@ configuration=@configuration@ EXEEXT=@EXEEXT@ C_SWITCH_SYSTEM=@C_SWITCH_SYSTEM@ C_SWITCH_MACHINE=@C_SWITCH_MACHINE@ -C_WARNINGS_SWITCH = @C_WARNINGS_SWITCH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ +WARN_CFLAGS = @WARN_CFLAGS@ +WERROR_CFLAGS = @WERROR_CFLAGS@ # Program name transformation. TRANSFORM = @program_transform_name@ @@ -167,7 +168,8 @@ LIBS_SYSTEM = @LIBS_SYSTEM@ # Those files shared with other GNU utilities need HAVE_CONFIG_H # defined before they know they can take advantage of the information # in ../src/config.h. -BASE_CFLAGS = $(C_SWITCH_SYSTEM) $(C_SWITCH_MACHINE) ${C_WARNINGS_SWITCH} \ +BASE_CFLAGS = $(C_SWITCH_SYSTEM) $(C_SWITCH_MACHINE) \ + $(WARN_CFLAGS) $(WERROR_CFLAGS) \ -DHAVE_CONFIG_H -I. -I../src -I../lib \ -I${srcdir} -I${srcdir}/../src -I${srcdir}/../lib diff --git a/lib/Makefile.am b/lib/Makefile.am index 220ba713d4e..716510aff92 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -4,6 +4,7 @@ MOSTLYCLEANDIRS = MOSTLYCLEANFILES = noinst_LIBRARIES = +AM_CFLAGS = $(GNULIB_WARN_CFLAGS) $(WERROR_CFLAGS) DEFAULT_INCLUDES = -I. -I../src -I$(top_srcdir)/src include gnulib.mk diff --git a/lwlib/ChangeLog b/lwlib/ChangeLog index a4bb243f35d..f4800bc4bb0 100644 --- a/lwlib/ChangeLog +++ b/lwlib/ChangeLog @@ -1,3 +1,10 @@ +2012-04-09 Paul Eggert + + configure: new option --enable-gcc-warnings + * Makefile.in (C_WARNINGS_SWITCH): Remove. + (WARN_CFLAGS, WERROR_CFLAGS): New macros. + (ALL_CFLAGS): Use new macros rather than old. + 2011-10-13 Dmitry Antipov * lwlib-Xaw.c (openFont, xaw_destroy_instance): Replace free with diff --git a/lwlib/Makefile.in b/lwlib/Makefile.in index db108862d70..76507ac4b24 100644 --- a/lwlib/Makefile.in +++ b/lwlib/Makefile.in @@ -29,8 +29,9 @@ C_SWITCH_X_SITE=@C_SWITCH_X_SITE@ C_SWITCH_X_SYSTEM=@C_SWITCH_X_SYSTEM@ C_SWITCH_SYSTEM=@C_SWITCH_SYSTEM@ C_SWITCH_MACHINE=@C_SWITCH_MACHINE@ -C_WARNINGS_SWITCH = @C_WARNINGS_SWITCH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ +WARN_CFLAGS = `echo @WARN_CFLAGS@ | sed 's/ -Wwrite-strings//'` +WERROR_CFLAGS = @WERROR_CFLAGS@ CC=@CC@ CFLAGS=@CFLAGS@ @@ -54,7 +55,8 @@ OBJS = lwlib.o $(TOOLKIT_OBJS) lwlib-utils.o ## There are no generated lwlib files, hence no need for -I. ALL_CFLAGS= $(C_SWITCH_SYSTEM) $(C_SWITCH_X_SITE) \ $(C_SWITCH_X_SYSTEM) $(C_SWITCH_MACHINE) \ - $(C_WARNINGS_SWITCH) $(PROFILING_CFLAGS) $(CFLAGS) \ + $(WARN_CFLAGS) $(WERROR_CFLAGS) \ + $(PROFILING_CFLAGS) $(CFLAGS) \ -DHAVE_CONFIG_H -Demacs -I../src \ -I$(srcdir) -I$(srcdir)/../src -I../lib -I$(srcdir)/../lib diff --git a/m4/manywarnings.m4 b/m4/manywarnings.m4 new file mode 100644 index 00000000000..fd0e3722d35 --- /dev/null +++ b/m4/manywarnings.m4 @@ -0,0 +1,184 @@ +# manywarnings.m4 serial 3 +dnl Copyright (C) 2008-2012 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Simon Josefsson + +# gl_MANYWARN_COMPLEMENT(OUTVAR, LISTVAR, REMOVEVAR) +# -------------------------------------------------- +# Copy LISTVAR to OUTVAR except for the entries in REMOVEVAR. +# Elements separated by whitespace. In set logic terms, the function +# does OUTVAR = LISTVAR \ REMOVEVAR. +AC_DEFUN([gl_MANYWARN_COMPLEMENT], +[ + gl_warn_set= + set x $2; shift + for gl_warn_item + do + case " $3 " in + *" $gl_warn_item "*) + ;; + *) + gl_warn_set="$gl_warn_set $gl_warn_item" + ;; + esac + done + $1=$gl_warn_set +]) + +# gl_MANYWARN_ALL_GCC(VARIABLE) +# ----------------------------- +# Add all documented GCC warning parameters to variable VARIABLE. +# Note that you need to test them using gl_WARN_ADD if you want to +# make sure your gcc understands it. +AC_DEFUN([gl_MANYWARN_ALL_GCC], +[ + dnl First, check if -Wno-missing-field-initializers is needed. + dnl -Wmissing-field-initializers is implied by -W, but that issues + dnl warnings with GCC version before 4.7, for the common idiom + dnl of initializing types on the stack to zero, using { 0, } + AC_REQUIRE([AC_PROG_CC]) + if test -n "$GCC"; then + + dnl First, check -W -Werror -Wno-missing-field-initializers is supported + dnl with the current $CC $CFLAGS $CPPFLAGS. + AC_MSG_CHECKING([whether -Wno-missing-field-initializers is supported]) + AC_CACHE_VAL([gl_cv_cc_nomfi_supported], [ + gl_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -W -Werror -Wno-missing-field-initializers" + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[]], [[]])], + [gl_cv_cc_nomfi_supported=yes], + [gl_cv_cc_nomfi_supported=no]) + CFLAGS="$gl_save_CFLAGS"]) + AC_MSG_RESULT([$gl_cv_cc_nomfi_supported]) + + if test "$gl_cv_cc_nomfi_supported" = yes; then + dnl Now check whether -Wno-missing-field-initializers is needed + dnl for the { 0, } construct. + AC_MSG_CHECKING([whether -Wno-missing-field-initializers is needed]) + AC_CACHE_VAL([gl_cv_cc_nomfi_needed], [ + gl_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -W -Werror" + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[void f (void) + { + typedef struct { int a; int b; } s_t; + s_t s1 = { 0, }; + } + ]], + [[]])], + [gl_cv_cc_nomfi_needed=no], + [gl_cv_cc_nomfi_needed=yes]) + CFLAGS="$gl_save_CFLAGS" + ]) + AC_MSG_RESULT([$gl_cv_cc_nomfi_needed]) + fi + fi + + gl_manywarn_set= + for gl_manywarn_item in \ + -Wall \ + -W \ + -Wformat-y2k \ + -Wformat-nonliteral \ + -Wformat-security \ + -Winit-self \ + -Wmissing-include-dirs \ + -Wswitch-default \ + -Wswitch-enum \ + -Wunused \ + -Wunknown-pragmas \ + -Wstrict-aliasing \ + -Wstrict-overflow \ + -Wsystem-headers \ + -Wfloat-equal \ + -Wtraditional \ + -Wtraditional-conversion \ + -Wdeclaration-after-statement \ + -Wundef \ + -Wshadow \ + -Wunsafe-loop-optimizations \ + -Wpointer-arith \ + -Wbad-function-cast \ + -Wc++-compat \ + -Wcast-qual \ + -Wcast-align \ + -Wwrite-strings \ + -Wconversion \ + -Wsign-conversion \ + -Wlogical-op \ + -Waggregate-return \ + -Wstrict-prototypes \ + -Wold-style-definition \ + -Wmissing-prototypes \ + -Wmissing-declarations \ + -Wmissing-noreturn \ + -Wmissing-format-attribute \ + -Wpacked \ + -Wpadded \ + -Wredundant-decls \ + -Wnested-externs \ + -Wunreachable-code \ + -Winline \ + -Winvalid-pch \ + -Wlong-long \ + -Wvla \ + -Wvolatile-register-var \ + -Wdisabled-optimization \ + -Wstack-protector \ + -Woverlength-strings \ + -Wbuiltin-macro-redefined \ + -Wmudflap \ + -Wpacked-bitfield-compat \ + -Wsync-nand \ + ; do + gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item" + done + # The following are not documented in the manual but are included in + # output from gcc --help=warnings. + for gl_manywarn_item in \ + -Wattributes \ + -Wcoverage-mismatch \ + -Wmultichar \ + -Wunused-macros \ + ; do + gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item" + done + # More warnings from gcc 4.6.2 --help=warnings. + for gl_manywarn_item in \ + -Wabi \ + -Wcpp \ + -Wdeprecated \ + -Wdeprecated-declarations \ + -Wdiv-by-zero \ + -Wdouble-promotion \ + -Wendif-labels \ + -Wextra \ + -Wformat-contains-nul \ + -Wformat-extra-args \ + -Wformat-zero-length \ + -Wformat=2 \ + -Wmultichar \ + -Wnormalized=nfc \ + -Woverflow \ + -Wpointer-to-int-cast \ + -Wpragmas \ + -Wsuggest-attribute=const \ + -Wsuggest-attribute=noreturn \ + -Wsuggest-attribute=pure \ + -Wtrampolines \ + ; do + gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item" + done + + # Disable the missing-field-initializers warning if needed + if test "$gl_cv_cc_nomfi_needed" = yes; then + gl_manywarn_set="$gl_manywarn_set -Wno-missing-field-initializers" + fi + + $1=$gl_manywarn_set +]) diff --git a/m4/warnings.m4 b/m4/warnings.m4 new file mode 100644 index 00000000000..c14c4801e78 --- /dev/null +++ b/m4/warnings.m4 @@ -0,0 +1,42 @@ +# warnings.m4 serial 6 +dnl Copyright (C) 2008-2012 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Simon Josefsson + +# gl_AS_VAR_APPEND(VAR, VALUE) +# ---------------------------- +# Provide the functionality of AS_VAR_APPEND if Autoconf does not have it. +m4_ifdef([AS_VAR_APPEND], +[m4_copy([AS_VAR_APPEND], [gl_AS_VAR_APPEND])], +[m4_define([gl_AS_VAR_APPEND], +[AS_VAR_SET([$1], [AS_VAR_GET([$1])$2])])]) + + +# gl_WARN_ADD(PARAMETER, [VARIABLE = WARN_CFLAGS]) +# ------------------------------------------------ +# Adds parameter to WARN_CFLAGS if the compiler supports it. For example, +# gl_WARN_ADD([-Wparentheses]). +# +# If VARIABLE is a variable name, AC_SUBST it. +AC_DEFUN([gl_WARN_ADD], +dnl FIXME: gl_Warn must be used unquoted until we can assume +dnl autoconf 2.64 or newer. +[AS_VAR_PUSHDEF([gl_Warn], [gl_cv_warn_[]_AC_LANG_ABBREV[]_$1])dnl +AS_VAR_PUSHDEF([gl_Flags], [_AC_LANG_PREFIX[]FLAGS])dnl +AC_CACHE_CHECK([whether _AC_LANG compiler handles $1], m4_defn([gl_Warn]), [ + gl_save_compiler_FLAGS="$gl_Flags" + gl_Flags="$gl_Flags $1" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])], + [AS_VAR_SET(gl_Warn, [yes])], + [AS_VAR_SET(gl_Warn, [no])]) + gl_Flags="$gl_save_compiler_FLAGS" +]) +AS_VAR_IF(gl_Warn, [yes], + [gl_AS_VAR_APPEND(m4_if([$2], [], [[WARN_CFLAGS]], [[$2]]), [" $1"])]) +AS_VAR_POPDEF([gl_Flags])dnl +AS_VAR_POPDEF([gl_Warn])dnl +m4_ifval([$2], [AS_LITERAL_IF([$2], [AC_SUBST([$2])], [])])dnl +]) diff --git a/oldXMenu/ChangeLog b/oldXMenu/ChangeLog index 1d3091c6bb4..f5d65b49671 100644 --- a/oldXMenu/ChangeLog +++ b/oldXMenu/ChangeLog @@ -1,3 +1,10 @@ +2012-04-09 Paul Eggert + + configure: new option --enable-gcc-warnings + * Makefile.in (C_WARNINGS_SWITCH): Remove. + (WARN_CFLAGS, WERROR_CFLAGS): New macros. + (ALL_CFLAGS): Use new macros rather than old. + 2011-04-16 Paul Eggert Static checks with GCC 4.6.0 and non-default toolkits. diff --git a/oldXMenu/Makefile.in b/oldXMenu/Makefile.in index 94c49fb9966..e7bc402cb0d 100644 --- a/oldXMenu/Makefile.in +++ b/oldXMenu/Makefile.in @@ -48,8 +48,9 @@ C_SWITCH_X_SITE=@C_SWITCH_X_SITE@ C_SWITCH_X_SYSTEM=@C_SWITCH_X_SYSTEM@ C_SWITCH_SYSTEM=@C_SWITCH_SYSTEM@ C_SWITCH_MACHINE=@C_SWITCH_MACHINE@ -C_WARNINGS_SWITCH = @C_WARNINGS_SWITCH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ +WARN_CFLAGS = @WARN_CFLAGS@ +WERROR_CFLAGS = @WERROR_CFLAGS@ EXTRA=insque.o CC=@CC@ @@ -89,7 +90,7 @@ all:: libXMenu11.a ALL_CFLAGS=$(C_SWITCH_SYSTEM) $(C_SWITCH_MACHINE) \ $(C_SWITCH_X_SITE) $(C_SWITCH_X_SYSTEM) \ - ${C_WARNINGS_SWITCH} ${PROFILING_CFLAGS} \ + $(WARN_CFLAGS) $(WERROR_CFLAGS) ${C_WARNINGS_SWITCH} ${PROFILING_CFLAGS} \ $(CPPFLAGS) $(CFLAGS) -DEMACS_BITMAP_FILES \ -I../src -I${srcdir} -I${srcdir}/../src diff --git a/src/ChangeLog b/src/ChangeLog index dbff8e35492..df3336b52e1 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,16 @@ +2012-04-09 Paul Eggert + + configure: new option --enable-gcc-warnings + * Makefile.in (C_WARNINGS_SWITCH): Remove. + (WARN_CFLAGS, WERROR_CFLAGS): New macros. + (ALL_CFLAGS): Use new macros rather than old. + * process.c: Ignore -Wstrict-overflow to work around GCC bug 52904. + * regex.c: Ignore -Wstrict-overflow. If !emacs, also ignore + -Wunused-but-set-variable, -Wunused-function, -Wunused-macros, + -Wunused-result, -Wunused-variable. This should go away once + the Emacs and Gnulib regex code is merged. + (xmalloc, xrealloc): Now static. + 2012-04-09 Paul Eggert composite.c: use 'double' consistently diff --git a/src/Makefile.in b/src/Makefile.in index 8c3704f830e..19f586396cb 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -68,7 +68,8 @@ OTHER_FILES = @OTHER_FILES@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ ## Flags to pass to the compiler to enable build warnings -C_WARNINGS_SWITCH = @C_WARNINGS_SWITCH@ +WARN_CFLAGS = @WARN_CFLAGS@ +WERROR_CFLAGS = @WERROR_CFLAGS@ ## Machine-specific CFLAGS. C_SWITCH_MACHINE=@C_SWITCH_MACHINE@ @@ -314,7 +315,7 @@ ALL_CFLAGS=-Demacs -DHAVE_CONFIG_H $(MYCPPFLAGS) -I. -I$(srcdir) \ $(SETTINGS_CFLAGS) $(FREETYPE_CFLAGS) $(FONTCONFIG_CFLAGS) \ $(LIBOTF_CFLAGS) $(M17N_FLT_CFLAGS) $(DEPFLAGS) $(PROFILING_CFLAGS) \ $(LIBGNUTLS_CFLAGS) \ - $(C_WARNINGS_SWITCH) $(CFLAGS) + $(WARN_CFLAGS) $(WERROR_CFLAGS) $(CFLAGS) ALL_OBJC_CFLAGS=$(ALL_CFLAGS) $(GNU_OBJC_CFLAGS) .SUFFIXES: .m diff --git a/src/process.c b/src/process.c index f2f33a9eafc..f14de474ee0 100644 --- a/src/process.c +++ b/src/process.c @@ -120,6 +120,13 @@ along with GNU Emacs. If not, see . */ #include "nsterm.h" #endif +/* Work around GCC 4.7.0 bug with strict overflow checking; see + . + These lines can be removed once the GCC bug is fixed. */ +#if (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) || 4 < __GNUC__ +# pragma GCC diagnostic ignored "-Wstrict-overflow" +#endif + Lisp_Object Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess, Qttname, Qtpgid; Lisp_Object Qminflt, Qmajflt, Qcminflt, Qcmajflt, Qutime, Qstime, Qcstime; Lisp_Object Qcutime, Qpri, Qnice, Qthcount, Qstart, Qvsize, Qrss, Qargs; diff --git a/src/regex.c b/src/regex.c index 0f9150193ec..d16a5148054 100644 --- a/src/regex.c +++ b/src/regex.c @@ -33,6 +33,19 @@ #pragma alloca #endif +/* Ignore some GCC warnings for now. This section should go away + once the Emacs and Gnulib regex code is merged. */ +#if (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) || 4 < __GNUC__ +# pragma GCC diagnostic ignored "-Wstrict-overflow" +# ifndef emacs +# pragma GCC diagnostic ignored "-Wunused-but-set-variable" +# pragma GCC diagnostic ignored "-Wunused-function" +# pragma GCC diagnostic ignored "-Wunused-macros" +# pragma GCC diagnostic ignored "-Wunused-result" +# pragma GCC diagnostic ignored "-Wunused-variable" +# endif +#endif + #ifdef HAVE_CONFIG_H # include #endif @@ -198,7 +211,7 @@ /* When used in Emacs's lib-src, we need xmalloc and xrealloc. */ -void * +static void * xmalloc (size_t size) { register void *val; @@ -211,7 +224,7 @@ xmalloc (size_t size) return val; } -void * +static void * xrealloc (void *block, size_t size) { register void *val; From ec041b558711c7a80d4bdf145469fd0eb52973a4 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Fri, 13 Apr 2012 22:04:54 -0700 Subject: [PATCH 006/564] configure: new option --enable-gcc-warnings (Bug#11207) * sed1v2.inp, sed3v2.inp, sedlibmk.inp: GNULIB_WARN_CFLAGS, WARN_CFLAGS, and WERROR_CFLAGS replace C_WARNINGS_SWITCH. --- msdos/ChangeLog | 6 ++++++ msdos/sed1v2.inp | 3 ++- msdos/sed3v2.inp | 4 ++-- msdos/sedlibmk.inp | 6 ++++-- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/msdos/ChangeLog b/msdos/ChangeLog index 320d2f5e6c1..fa7dc234717 100644 --- a/msdos/ChangeLog +++ b/msdos/ChangeLog @@ -1,3 +1,9 @@ +2012-04-14 Paul Eggert + + configure: new option --enable-gcc-warnings (Bug#11207) + * sed1v2.inp, sed3v2.inp, sedlibmk.inp: GNULIB_WARN_CFLAGS, + WARN_CFLAGS, and WERROR_CFLAGS replace C_WARNINGS_SWITCH. + 2012-04-11 Glenn Morris * sedlibmk.inp, sed1v2.inp: GNUSTEP_CFLAGS replaces C_SWITCH_X_SYSTEM. diff --git a/msdos/sed1v2.inp b/msdos/sed1v2.inp index cdaf9430b25..ce245b08824 100644 --- a/msdos/sed1v2.inp +++ b/msdos/sed1v2.inp @@ -41,7 +41,8 @@ s/\.h\.in/.h-in/ /^C_SWITCH_SYSTEM *=/s/@C_SWITCH_SYSTEM@// /^GNUSTEP_CFLAGS *=/s/@GNUSTEP_CFLAGS@// /^C_SWITCH_X_SITE *=/s/@C_SWITCH_X_SITE@// -/^C_WARNINGS_SWITCH *=/s/@C_WARNINGS_SWITCH@// +/^WARN_CFLAGS *=/s/@WARN_CFLAGS@// +/^WERROR_CFLAGS *=/s/@WERROR_CFLAGS@// /^PROFILING_CFLAGS *=/s/@PROFILING_CFLAGS@// #/^LD_SWITCH_X_SITE *=/s/@LD_SWITCH_X_SITE@// /^LD_SWITCH_SYSTEM_TEMACS *=/s/@LD_SWITCH_SYSTEM_TEMACS@// diff --git a/msdos/sed3v2.inp b/msdos/sed3v2.inp index c147ad64cf9..faa57996a25 100644 --- a/msdos/sed3v2.inp +++ b/msdos/sed3v2.inp @@ -38,7 +38,8 @@ s/-DVERSION[^ ]* // /^CFLAGS *=/s!=.*$!=-O2 -g! /^C_SWITCH_SYSTEM *=/s!=.*$!=-DMSDOS! /^C_SWITCH_MACHINE *=/s/@C_SWITCH_MACHINE@// -/^C_WARNINGS_SWITCH *=/s/@C_WARNINGS_SWITCH@// +/^WARN_CFLAGS *=/s/@WARN_CFLAGS@// +/^WERROR_CFLAGS *=/s/@WERROR_CFLAGS@// /^PROFILING_CFLAGS *=/s/@PROFILING_CFLAGS@// /^ALLOCA *=/s!@ALLOCA@!! /^EXEEXT *=/s!@EXEEXT@!! @@ -51,4 +52,3 @@ s!^ \./! ! } /^insrcdir=/s/^.*$/\#&/ /^ *\$(insrcdir) ||/s,\$(insrcdir) ||,command.com /c if not exist $( Date: Sun, 15 Apr 2012 16:49:24 +0800 Subject: [PATCH 007/564] Move "emacsclient -t -n" handling from emacsclient.c to server.el. Fix its buggy logic for the Windows case (regression from 23.4). * lib-src/emacsclient.c (decode_options): Move -t -n corner case handling into server.el. * lisp/server.el (server-process-filter): Handle corner case where both tty and nowait options are present. Fixes: debbugs:11102 --- lib-src/ChangeLog | 5 +++++ lib-src/emacsclient.c | 33 ++++++++++++--------------------- lisp/ChangeLog | 5 +++++ lisp/server.el | 7 +++++++ 4 files changed, 29 insertions(+), 21 deletions(-) diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index dd10026447f..e58b291ec89 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog @@ -1,3 +1,8 @@ +2012-04-15 Chong Yidong + + * emacsclient.c (decode_options): Move -t -n corner case handling + into server.el (Bug#11102). + 2012-04-12 Juanma Barranquero * emacsclient.c (decode_options) [WINDOWSNT]: diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c index 05fd0f3515e..48b4384d487 100644 --- a/lib-src/emacsclient.c +++ b/lib-src/emacsclient.c @@ -638,32 +638,23 @@ decode_options (int argc, char **argv) if (display && strlen (display) == 0) display = NULL; -#ifdef WINDOWSNT - /* Emacs on Windows does not support GUI and console frames in the same - instance. So, it makes sense to treat the -t and -c options as - equivalent, and open a new frame regardless of whether the running - instance is GUI or console. Ideally, we would only set tty = 1 when - the instance is running in a console, but alas we don't know that. - The simplest workaround is to always ask for a tty frame, and let - server.el check whether it makes sense. */ - if (tty || !current_frame) - { - display = (const char *) ttyname (0); /* Arg is ignored. */ - current_frame = 0; - tty = 1; - } -#endif - /* If no display is available, new frames are tty frames. */ if (!current_frame && !display) tty = 1; - /* --no-wait implies --current-frame on ttys when there are file - arguments or expressions given. */ - if (nowait && tty && argc - optind > 0) - current_frame = 1; - #ifdef WINDOWSNT + /* Emacs on Windows does not support graphical and text terminal + frames in the same instance. So, treat the -t and -c options as + equivalent, and open a new frame on the server's terminal. + Ideally, we would only set tty = 1 when the serve is running in a + console, but alas we don't know that. As a workaround, always + ask for a tty frame, and let server.el figure it out. */ + if (!current_frame) + { + display = NULL; + tty = 1; + } + if (alternate_editor && alternate_editor[0] == '\0') { message (TRUE, "--alternate-editor argument or ALTERNATE_EDITOR variable cannot be\n\ diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 8c9f5b9f035..db559581ec2 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-04-15 Chong Yidong + + * server.el (server-process-filter): Handle corner case where both + tty and nowait options are present (Bug#11102). + 2012-04-15 Glenn Morris * simple.el (process-file-side-effects): Doc fix. diff --git a/lisp/server.el b/lisp/server.el index 404bebc4747..ced07714dcf 100644 --- a/lisp/server.el +++ b/lisp/server.el @@ -1133,6 +1133,13 @@ The following commands are accepted by the client: ;; Unknown command. (arg (error "Unknown command: %s" arg)))) + ;; If both -no-wait and -tty are given with file or sexp + ;; arguments, use an existing frame. + (and nowait + (not (eq tty-name 'window-system)) + (or files commands) + (setq use-current-frame t)) + (setq frame (cond ((and use-current-frame From 62f4b18cfdff92ba9cc335a35e7103f553abda0c Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sun, 15 Apr 2012 17:50:58 -0700 Subject: [PATCH 008/564] More small edits for doc/lispref/processes.texi * doc/lispref/processes.texi (Process Information, Input to Processes) (Signals to Processes, Output from Processes, Process Buffers) (Filter Functions, Decoding Output): Copyedits. --- doc/lispref/ChangeLog | 6 ++ doc/lispref/processes.texi | 142 ++++++++++++++++--------------------- 2 files changed, 67 insertions(+), 81 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 74c32ccb7bb..3335e8a5c0c 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,9 @@ +2012-04-16 Glenn Morris + + * processes.texi (Process Information, Input to Processes) + (Signals to Processes, Output from Processes, Process Buffers) + (Filter Functions, Decoding Output): Copyedits. + 2012-04-15 Glenn Morris * processes.texi (Processes, Subprocess Creation, Shell Arguments): diff --git a/doc/lispref/processes.texi b/doc/lispref/processes.texi index 509b3a1c2c6..94730a24df5 100644 --- a/doc/lispref/processes.texi +++ b/doc/lispref/processes.texi @@ -726,17 +726,17 @@ happen sooner or later). @section Process Information Several functions return information about processes. -@code{list-processes} is provided for interactive use. -@deffn Command list-processes &optional query-only +@deffn Command list-processes &optional query-only buffer This command displays a listing of all living processes. In addition, it finally deletes any process whose status was @samp{Exited} or @samp{Signaled}. It returns @code{nil}. -The processes are shown in a buffer named @file{*Process List*}, whose -major mode is named Process Menu mode. +The processes are shown in a buffer named @file{*Process List*} +(unless you specify otherwise using the optional argument @var{buffer}), +whose major mode is Process Menu mode. -If @var{query-only} is non-@code{nil} then it lists only processes +If @var{query-only} is non-@code{nil}, it only lists processes whose query flag is non-@code{nil}. @xref{Query Before Exit}. @end deffn @@ -752,8 +752,8 @@ This function returns a list of all processes that have not been deleted. @end defun @defun get-process name -This function returns the process named @var{name}, or @code{nil} if -there is none. An error is signaled if @var{name} is not a string. +This function returns the process named @var{name} (a string), or +@code{nil} if there is none. @smallexample @group @@ -772,7 +772,7 @@ were given to the program. @smallexample @group (process-command (get-process "shell")) - @result{} ("/bin/csh" "-i") + @result{} ("bash" "-i") @end group @end smallexample @end defun @@ -780,11 +780,10 @@ were given to the program. @defun process-contact process &optional key This function returns information about how a network or serial -process was set up. For a network process, when @var{key} is -@code{nil}, it returns @code{(@var{hostname} @var{service})} which -specifies what you connected to. For a serial process, when @var{key} -is @code{nil}, it returns @code{(@var{port} @var{speed})}. For an -ordinary child process, this function always returns @code{t}. +process was set up. When @var{key} is @code{nil}, it returns +@code{(@var{hostname} @var{service})} for a network process, and +@code{(@var{port} @var{speed})} for a serial process. +For an ordinary child process, this function always returns @code{t}. If @var{key} is @code{t}, the value is the complete status information for the connection, server, or serial port; that is, the list of @@ -792,7 +791,8 @@ keywords and values specified in @code{make-network-process} or @code{make-serial-process}, except that some of the values represent the current status instead of what you specified. -For a network process: +For a network process, the values include (see +@code{make-network-process} for a complete list): @table @code @item :buffer @@ -829,7 +829,7 @@ process is started and remains constant as long as the process exists. @end defun @defun process-name process -This function returns the name of @var{process}. +This function returns the name of @var{process}, as a string. @end defun @defun process-status process-name @@ -869,12 +869,6 @@ if @var{process-name} is not the name of an existing process. (process-status (get-buffer "*shell*")) @result{} run @end group -@group -x - @result{} #> -(process-status x) - @result{} exit -@end group @end smallexample For a network connection, @code{process-status} returns one of the symbols @@ -912,13 +906,9 @@ the remote host is provided as process property @code{remote-tty}. @defun process-coding-system process @anchor{Coding systems for a subprocess} -This function returns a cons cell describing the coding systems in use -for decoding output from @var{process} and for encoding input to -@var{process} (@pxref{Coding Systems}). The value has this form: - -@example -(@var{coding-system-for-decoding} . @var{coding-system-for-encoding}) -@end example +This function returns a cons cell @code{(@var{decode} . @var{encode})}, +describing the coding systems in use for decoding output from, and +encoding input to, @var{process} (@pxref{Coding Systems}). @end defun @defun set-process-coding-system process &optional decoding-system encoding-system @@ -958,6 +948,7 @@ Emacs, which is done with the functions in this section. You must specify the process to send input to, and the input data to send. The data appears on the ``standard input'' of the subprocess. +@c FIXME which? Some operating systems have limited space for buffered input in a @acronym{PTY}. On these systems, Emacs sends an @acronym{EOF} periodically amidst the other characters, to force them through. For @@ -984,26 +975,14 @@ the current buffer's process. @defun process-send-string process string This function sends @var{process} the contents of @var{string} as -standard input. If it is @code{nil}, the current buffer's process is used. - - The function returns @code{nil}. +standard input. It returns @code{nil}. For example, to make a +Shell buffer list files: @smallexample @group (process-send-string "shell<1>" "ls\n") @result{} nil @end group - - -@group ----------- Buffer: *shell* ---------- -... -introduction.texi syntax-tables.texi~ -introduction.texi~ text.texi -introduction.txt text.texi~ -... ----------- Buffer: *shell* ---------- -@end group @end smallexample @end defun @@ -1019,7 +998,6 @@ is unimportant which number is larger.) @defun process-send-eof &optional process This function makes @var{process} see an end-of-file in its input. The @acronym{EOF} comes after any text already sent to it. - The function returns @var{process}. @smallexample @@ -1050,7 +1028,7 @@ system. For example, the signal @code{SIGINT} means that the user has typed @kbd{C-c}, or that some analogous thing has happened. Each signal has a standard effect on the subprocess. Most signals -kill the subprocess, but some stop or resume execution instead. Most +kill the subprocess, but some stop (or resume) execution instead. Most signals can optionally be handled by programs; if the program handles the signal, then we can say nothing in general about its effects. @@ -1059,7 +1037,7 @@ section. Emacs also sends signals automatically at certain times: killing a buffer sends a @code{SIGHUP} signal to all its associated processes; killing Emacs sends a @code{SIGHUP} signal to all remaining processes. (@code{SIGHUP} is a signal that usually indicates that the -user hung up the phone.) +user ``hung up the phone'', i.e., disconnected.) Each of the signal-sending functions takes two optional arguments: @var{process} and @var{current-group}. @@ -1103,6 +1081,8 @@ and cannot be handled by the subprocess. @defun quit-process &optional process current-group This function sends the signal @code{SIGQUIT} to the process @var{process}. This signal is the one sent by the ``quit +@c FIXME? Never heard of C-b being used for this. In readline, eg +@c bash, that is backward-word. character'' (usually @kbd{C-b} or @kbd{C-\}) when you are not inside Emacs. @end defun @@ -1127,11 +1107,12 @@ stopped previously. @defun signal-process process signal This function sends a signal to process @var{process}. The argument -@var{signal} specifies which signal to send; it should be an integer. +@var{signal} specifies which signal to send; it should be an integer, +or a symbol whose name is a signal. -The @var{process} argument can be a system process @acronym{ID}; that -allows you to send signals to processes that are not children of -Emacs. @xref{System Processes}. +The @var{process} argument can be a system process @acronym{ID} (an +integer); that allows you to send signals to processes that are not +children of Emacs. @xref{System Processes}. @end defun @node Output from Processes @@ -1141,10 +1122,10 @@ Emacs. @xref{System Processes}. There are two ways to receive the output that a subprocess writes to its standard output stream. The output can be inserted in a buffer, -which is called the associated buffer of the process, or a function -called the @dfn{filter function} can be called to act on the output. If -the process has no buffer and no filter function, its output is -discarded. +which is called the associated buffer of the process (@pxref{Process +Buffers}), or a function called the @dfn{filter function} can be +called to act on the output. If the process has no buffer and no +filter function, its output is discarded. When a subprocess terminates, Emacs reads any pending output, then stops reading output from that subprocess. Therefore, if the @@ -1164,7 +1145,7 @@ primitive that waits. On some systems, when Emacs reads the output from a subprocess, the output data is read in very small blocks, potentially resulting in very poor performance. This behavior can be remedied to some extent -by setting the variable @var{process-adaptive-read-buffering} to a +by setting the variable @code{process-adaptive-read-buffering} to a non-@code{nil} value (the default), as it will automatically delay reading from such processes, thus allowing them to produce more output before Emacs tries to read it. @@ -1233,9 +1214,9 @@ to insert, and updates it to point after the inserted text. That is why successive batches of output are inserted consecutively. Filter functions normally should use this marker in the same fashion -as is done by direct insertion of output in the buffer. A good -example of a filter function that uses @code{process-mark} is found at -the end of the following section. +as is done by direct insertion of output in the buffer. For an +example of a filter function that uses @code{process-mark}, +@pxref{Process Filter Example}. When the user is expected to enter input in the process buffer for transmission to the process, the process marker separates the new input @@ -1301,19 +1282,20 @@ cases, the right way to do this is with the macro If an error happens during execution of a filter function, it is caught automatically, so that it doesn't stop the execution of whatever program was running when the filter function was started. However, if -@code{debug-on-error} is non-@code{nil}, the error-catching is turned -off. This makes it possible to use the Lisp debugger to debug the +@code{debug-on-error} is non-@code{nil}, errors are not caught. +This makes it possible to use the Lisp debugger to debug the filter function. @xref{Debugger}. - Many filter functions sometimes or always insert the text in the + Many filter functions sometimes (or always) insert the output in the process's buffer, mimicking the actions of Emacs when there is no -filter. Such filter functions need to use @code{set-buffer} in order to -be sure to insert in that buffer. To avoid setting the current buffer -semipermanently, these filter functions must save and restore the -current buffer. They should also check whether the buffer is still -alive, update the process marker, and in some cases update the value -of point. Here is how to do these things: +filter. Such filter functions need to make sure that they save the +current buffer, select the correct buffer (if different) before +inserting output, and then restore the original buffer. +They should also check whether the buffer is still alive, update the +process marker, and in some cases update the value of point. Here is +how to do these things: +@anchor{Process Filter Example} @smallexample @group (defun ordinary-insertion-filter (proc string) @@ -1323,7 +1305,7 @@ of point. Here is how to do these things: @end group @group (save-excursion - ;; @r{Insert the text, advancing the process marker.} + ;; @r{Insert the text, advancing the process marker.} (goto-char (process-mark proc)) (insert string) (set-marker (process-mark proc) (point))) @@ -1331,14 +1313,8 @@ of point. Here is how to do these things: @end group @end smallexample -@noindent -The reason to use @code{with-current-buffer}, rather than using -@code{save-excursion} to save and restore the current buffer, is so as -to preserve the change in point made by the second call to -@code{goto-char}. - To make the filter force the process buffer to be visible whenever new -text arrives, insert the following line just before the +text arrives, you could insert a line like the following just before the @code{with-current-buffer} construct: @smallexample @@ -1349,12 +1325,16 @@ text arrives, insert the following line just before the previously, eliminate the variable @code{moving} and call @code{goto-char} unconditionally. +@ignore In earlier Emacs versions, every filter function that did regular expression searching or matching had to explicitly save and restore the match data. Now Emacs does this automatically for filter functions; -they never need to do it explicitly. @xref{Match Data}. +they never need to do it explicitly. +@end ignore + Note that Emacs automatically saves and restores the match data +while executing filter functions. @xref{Match Data}. - The output to the function may come in chunks of any size. A program + The output to the filter may come in chunks of any size. A program that produces the same output twice in a row may send it as one batch of 200 characters one time, and five batches of 40 characters the next. If the filter looks for certain text strings in the subprocess output, make @@ -1372,7 +1352,7 @@ This function returns the filter function of @var{process}, or @code{nil} if it has none. @end defun - Here is an example of use of a filter function: + Here is an example of the use of a filter function: @smallexample @group @@ -1392,7 +1372,7 @@ if it has none. (process-send-string "shell" "ls ~/other\n") @result{} nil kept - @result{} ("lewis@@slug[8] % " + @result{} ("lewis@@slug:$ " @end group @group "FINAL-W87-SHORT.MSS backup.otl kolstad.mss~ @@ -1448,8 +1428,8 @@ bytes, Emacs by default uses @code{no-conversion} for it; see @ref{Lisp and Coding Systems, inhibit-null-byte-detection}, for how to control this behavior. - @strong{Warning:} Coding systems such as @code{undecided} which -determine the coding system from the data do not work entirely + @strong{Warning:} Coding systems such as @code{undecided}, which +determine the coding system from the data, do not work entirely reliably with asynchronous subprocess output. This is because Emacs has to process asynchronous subprocess output in batches, as it arrives. Emacs must try to detect the proper coding system from one @@ -1467,7 +1447,7 @@ output as a multibyte string or as a unibyte string according to the process's filter coding system. Emacs decodes the output according to the process output coding system, which usually produces a multibyte string, except for coding systems -such as @code{binary} and @code{raw-text} +such as @code{binary} and @code{raw-text}. @node Accepting Output @subsection Accepting Output from Processes From 4f5d565ff35cd843ffed06e02e4c5642433124cb Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sun, 15 Apr 2012 17:55:06 -0700 Subject: [PATCH 009/564] * processes.texi (Accepting Output): Discourage use of `millisec' argument. --- doc/lispref/ChangeLog | 1 + doc/lispref/processes.texi | 9 ++++----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 3335e8a5c0c..d20c4d19c3a 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -3,6 +3,7 @@ * processes.texi (Process Information, Input to Processes) (Signals to Processes, Output from Processes, Process Buffers) (Filter Functions, Decoding Output): Copyedits. + (Accepting Output): Discourage use of `millisec' argument. 2012-04-15 Glenn Morris diff --git a/doc/lispref/processes.texi b/doc/lispref/processes.texi index 94730a24df5..fd8bc717d09 100644 --- a/doc/lispref/processes.texi +++ b/doc/lispref/processes.texi @@ -1465,7 +1465,6 @@ output is inserted in the associated buffers or given to their filter functions. If @var{process} is non-@code{nil} then this function does not return until some output has been received from @var{process}. -@c Emacs 19 feature The arguments @var{seconds} and @var{millisec} let you specify timeout periods. The former specifies a period measured in seconds and the latter specifies one measured in milliseconds. The two time periods @@ -1473,10 +1472,10 @@ thus specified are added together, and @code{accept-process-output} returns after that much time, whether or not there has been any subprocess output. -The argument @var{millisec} is semi-obsolete nowadays because -@var{seconds} can be a floating point number to specify waiting a -fractional number of seconds. If @var{seconds} is 0, the function -accepts whatever output is pending but does not wait. +The argument @var{millisec} is obsolete (and should not be used), +because @var{seconds} can be a floating point number to specify +waiting a fractional number of seconds. If @var{seconds} is 0, the +function accepts whatever output is pending but does not wait. @c Emacs 22.1 feature If @var{process} is a process, and the argument @var{just-this-one} is From 3539f31f03b40bafa0875de88e3a5d55558ba32c Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sun, 15 Apr 2012 18:18:13 -0700 Subject: [PATCH 010/564] Fix minor ralloc.c problems found by static checking. See http://lists.gnu.org/archive/html/emacs-devel/2011-12/msg00720.html * ralloc.c (ALIGNED, ROUND_TO_PAGE, HEAP_PTR_SIZE) (r_alloc_size_in_use, r_alloc_freeze, r_alloc_thaw): Remove; unused. (r_alloc_sbrk): Now static. --- src/ChangeLog | 6 ++++++ src/ralloc.c | 60 +-------------------------------------------------- 2 files changed, 7 insertions(+), 59 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 0fa21336900..06ae5016cf3 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,11 @@ 2012-04-16 Paul Eggert + Fix minor ralloc.c problems found by static checking. + See http://lists.gnu.org/archive/html/emacs-devel/2011-12/msg00720.html + * ralloc.c (ALIGNED, ROUND_TO_PAGE, HEAP_PTR_SIZE) + (r_alloc_size_in_use, r_alloc_freeze, r_alloc_thaw): Remove; unused. + (r_alloc_sbrk): Now static. + Improve ralloc.c interface checking. See http://lists.gnu.org/archive/html/emacs-devel/2011-12/msg00720.html * buffer.c (ralloc_reset_variable, r_alloc, r_re_alloc) diff --git a/src/ralloc.c b/src/ralloc.c index 896ad9f3155..4bb2f240438 100644 --- a/src/ralloc.c +++ b/src/ralloc.c @@ -95,10 +95,8 @@ static int extra_bytes; /* Macros for rounding. Note that rounding to any value is possible by changing the definition of PAGE. */ #define PAGE (getpagesize ()) -#define ALIGNED(addr) (((unsigned long int) (addr) & (page_size - 1)) == 0) #define ROUNDUP(size) (((unsigned long int) (size) + page_size - 1) \ & ~(page_size - 1)) -#define ROUND_TO_PAGE(addr) (addr & (~(page_size - 1))) #define MEM_ALIGN sizeof (double) #define MEM_ROUNDUP(addr) (((unsigned long int)(addr) + MEM_ALIGN - 1) \ @@ -151,7 +149,6 @@ typedef struct heap } *heap_ptr; #define NIL_HEAP ((heap_ptr) 0) -#define HEAP_PTR_SIZE (sizeof (struct heap)) /* This is the first heap object. If we need additional heap objects, each one resides at the beginning of @@ -366,15 +363,6 @@ relinquish (void) } } } - -/* Return the total size in use by relocating allocator, - above where malloc gets space. */ - -long -r_alloc_size_in_use (void) -{ - return (char *) break_value - (char *) virtual_break_value; -} /* The meat - allocating, freeing, and relocating blocs. */ @@ -748,7 +736,7 @@ free_bloc (bloc_ptr bloc) __morecore hook values - in particular, __default_morecore in the GNU malloc package. */ -POINTER +static POINTER r_alloc_sbrk (long int size) { register bloc_ptr b; @@ -1014,52 +1002,6 @@ r_re_alloc (POINTER *ptr, SIZE size) return *ptr; } -/* Disable relocations, after making room for at least SIZE bytes - of non-relocatable heap if possible. The relocatable blocs are - guaranteed to hold still until thawed, even if this means that - malloc must return a null pointer. */ - -void -r_alloc_freeze (long int size) -{ - if (! r_alloc_initialized) - r_alloc_init (); - - /* If already frozen, we can't make any more room, so don't try. */ - if (r_alloc_freeze_level > 0) - size = 0; - /* If we can't get the amount requested, half is better than nothing. */ - while (size > 0 && r_alloc_sbrk (size) == 0) - size /= 2; - ++r_alloc_freeze_level; - if (size > 0) - r_alloc_sbrk (-size); -} - -void -r_alloc_thaw (void) -{ - - if (! r_alloc_initialized) - r_alloc_init (); - - if (--r_alloc_freeze_level < 0) - abort (); - - /* This frees all unused blocs. It is not too inefficient, as the resize - and memcpy is done only once. Afterwards, all unreferenced blocs are - already shrunk to zero size. */ - if (!r_alloc_freeze_level) - { - bloc_ptr *b = &first_bloc; - while (*b) - if (!(*b)->variable) - free_bloc (*b); - else - b = &(*b)->next; - } -} - #if defined (emacs) && defined (DOUG_LEA_MALLOC) From b62a57beb523298caa95c2d85c65eeb6e9af7af9 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sun, 15 Apr 2012 20:38:40 -0700 Subject: [PATCH 011/564] Fix minor alloc.c problems found by static checking. * alloc.c (_malloc_internal, _free_internal) [!DOUG_LEA_MALLOC]: New extern decls, to avoid calling undeclared functions. (dont_register_blocks): Define if ((!SYSTEM_MALLOC && !SYNC_INPUT) && GC_MALLOC_CHECK), not if ((GC_MARK_STACK || defined GC_MALLOC_CHECK) && GC_MALLOC_CHECK), to match when it's used. (NEED_MEM_INSERT): New macro. (mem_insert, mem_insert_fixup) [!NEED_MEM_INSERT]: Remove; unused. --- src/ChangeLog | 9 +++++++++ src/alloc.c | 16 +++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index 06ae5016cf3..7172ba605f5 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,14 @@ 2012-04-16 Paul Eggert + Fix minor alloc.c problems found by static checking. + * alloc.c (_malloc_internal, _free_internal) [!DOUG_LEA_MALLOC]: + New extern decls, to avoid calling undeclared functions. + (dont_register_blocks): Define if ((!SYSTEM_MALLOC && !SYNC_INPUT) + && GC_MALLOC_CHECK), not if ((GC_MARK_STACK || defined + GC_MALLOC_CHECK) && GC_MALLOC_CHECK), to match when it's used. + (NEED_MEM_INSERT): New macro. + (mem_insert, mem_insert_fixup) [!NEED_MEM_INSERT]: Remove; unused. + Fix minor ralloc.c problems found by static checking. See http://lists.gnu.org/archive/html/emacs-devel/2011-12/msg00720.html * ralloc.c (ALIGNED, ROUND_TO_PAGE, HEAP_PTR_SIZE) diff --git a/src/alloc.c b/src/alloc.c index 0e68817629c..9589ae05e95 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -82,6 +82,8 @@ extern POINTER_TYPE *sbrk (); extern size_t _bytes_used; extern size_t __malloc_extra_blocks; +extern void *_malloc_internal (size_t); +extern void _free_internal (void *); #endif /* not DOUG_LEA_MALLOC */ @@ -314,7 +316,6 @@ static Lisp_Object Vdead; #ifdef GC_MALLOC_CHECK enum mem_type allocated_mem_type; -static int dont_register_blocks; #endif /* GC_MALLOC_CHECK */ @@ -391,8 +392,13 @@ static int live_misc_p (struct mem_node *, void *); static void mark_maybe_object (Lisp_Object); static void mark_memory (void *, void *); static void mem_init (void); +#if (defined GC_MALLOC_CHECK \ + ? !defined SYSTEM_MALLOC && !defined SYNC_INPUT \ + : GC_MARK_STACK) +# define NEED_MEM_INSERT static struct mem_node *mem_insert (void *, void *, enum mem_type); static void mem_insert_fixup (struct mem_node *); +#endif static void mem_rotate_left (struct mem_node *); static void mem_rotate_right (struct mem_node *); static void mem_delete (struct mem_node *); @@ -1223,6 +1229,10 @@ static void (*old_free_hook) (void*, const void*); # define BYTES_USED _bytes_used #endif +#ifdef GC_MALLOC_CHECK +static int dont_register_blocks; +#endif + static size_t bytes_used_when_reconsidered; /* Value of _bytes_used, when spare_memory was freed. */ @@ -3571,6 +3581,8 @@ mem_find (void *start) } +#ifdef NEED_MEM_INSERT + /* Insert a new node into the tree for a block of memory with start address START, end address END, and type TYPE. Value is a pointer to the node that was inserted. */ @@ -3718,6 +3730,8 @@ mem_insert_fixup (struct mem_node *x) mem_root->color = MEM_BLACK; } +#endif /* NEED_MEM_INSERT */ + /* (x) (y) / \ / \ From c505aaeb00a1c4f01e79f6e82216f83e33a77426 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Mon, 16 Apr 2012 11:47:43 +0800 Subject: [PATCH 012/564] Call imagemagick-register-types automatically. * lisp/image.el (imagemagick--extension-regexp): New variable. (imagemagick-register-types): Use it. (imagemagick-types-inhibit): Add :set function. Allow new value of t to inhibit all types. * lisp/loadup.el (fboundp): Preload regexp-opt, needed by imagemagick-register-types. * lisp/emacs-lisp/regexp-opt.el (regexp-opt-charset): Avoid cl macros, so we can preload it. --- etc/NEWS | 8 ++++ lisp/ChangeLog | 13 +++++++ lisp/emacs-lisp/regexp-opt.el | 27 ++++++-------- lisp/image.el | 69 +++++++++++++++++++++++------------ lisp/loadup.el | 2 + 5 files changed, 80 insertions(+), 39 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 56a0c9bf95d..03ec5405803 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -35,6 +35,14 @@ been adding them there, put them somewhere else, eg site-lisp. ** If your Emacs was built from a bzr checkout, the new variable `emacs-bzr-version' contains information about which bzr revision was used. +** ImageMagick support, if available, is automatically enabled. +It is no longer necessary to call `imagemagick-register-types' +explicitly to install ImageMagick image types; that function is called +automatically when setting `imagemagick-types-inhibit'. + +*** Setting `imagemagick-types-inhibit' to t now disables the use of +ImageMagick to view images, set + * Editing Changes in Emacs 24.2 diff --git a/lisp/ChangeLog b/lisp/ChangeLog index a21d5841346..f50af02a239 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,16 @@ +2012-04-16 Chong Yidong + + * image.el (imagemagick--extension-regexp): New variable. + (imagemagick-register-types): Use it. + (imagemagick-types-inhibit): Add :set function. Allow new value + of t to inhibit all types. + + * emacs-lisp/regexp-opt.el (regexp-opt-charset): Avoid cl macros, + so we can preload it. + + * loadup.el (fboundp): Preload regexp-opt, needed by + imagemagick-register-types. + 2012-04-15 Chong Yidong * frame.el (scrolling): Remove nearly unused customization group. diff --git a/lisp/emacs-lisp/regexp-opt.el b/lisp/emacs-lisp/regexp-opt.el index 6d12fe19277..72e3c398dc0 100644 --- a/lisp/emacs-lisp/regexp-opt.el +++ b/lisp/emacs-lisp/regexp-opt.el @@ -136,9 +136,6 @@ This means the number of non-shy regexp grouping constructs ;;; Workhorse functions. -(eval-when-compile - (require 'cl)) - (defun regexp-opt-group (strings &optional paren lax) "Return a regexp to match a string in the sorted list STRINGS. If PAREN non-nil, output regexp parentheses around returned regexp. @@ -248,15 +245,15 @@ Merges keywords to avoid backtracking in Emacs's regexp matcher." ;; ;; Make a character map but extract character set meta characters. (dolist (char chars) - (case char - (?\] - (setq bracket "]")) - (?^ - (setq caret "^")) - (?- - (setq dash "-")) - (otherwise - (aset charmap char t)))) + (cond + ((eq char ?\]) + (setq bracket "]")) + ((eq char ?^) + (setq caret "^")) + ((eq char ?-) + (setq dash "-")) + (t + (aset charmap char t)))) ;; ;; Make a character set from the map using ranges where applicable. (map-char-table @@ -268,14 +265,14 @@ Merges keywords to avoid backtracking in Emacs's regexp matcher." (setq charset (format "%s%c-%c" charset start end)) (while (>= end start) (setq charset (format "%s%c" charset start)) - (incf start))) + (setq start (1+ start)))) (setq start (car c) end (cdr c))) (if (= (1- c) end) (setq end c) (if (> end (+ start 2)) (setq charset (format "%s%c-%c" charset start end)) (while (>= end start) (setq charset (format "%s%c" charset start)) - (incf start))) + (setq start (1+ start)))) (setq start c end c))))) charmap) (when (>= end start) @@ -283,7 +280,7 @@ Merges keywords to avoid backtracking in Emacs's regexp matcher." (setq charset (format "%s%c-%c" charset start end)) (while (>= end start) (setq charset (format "%s%c" charset start)) - (incf start)))) + (setq start (1+ start))))) ;; ;; Make sure a caret is not first and a dash is first or last. (if (and (string-equal charset "") (string-equal bracket "")) diff --git a/lisp/image.el b/lisp/image.el index b094f2464ec..348c208781e 100644 --- a/lisp/image.el +++ b/lisp/image.el @@ -685,26 +685,16 @@ The minimum delay between successive frames is 0.01s." image n count time-elapsed limit)))) -(defcustom imagemagick-types-inhibit - '(C HTML HTM TXT PDF) - "ImageMagick types that should not be visited in Image mode. -This should be a list of symbols, each of which should be one of -the ImageMagick types listed in `imagemagick-types'. These image -types are not registered by `imagemagick-register-types'. - -If Emacs is compiled without ImageMagick support, this variable -has no effect." - :type '(choice (const :tag "Let ImageMagick handle all types it can" nil) - (repeat symbol)) - ;; Ideally, would have a :set function that checks if we already did - ;; imagemagick-register-types, and if so undoes it, then redoes it. - :version "24.1" - :group 'image) +(defvar imagemagick--file-regexp nil + "File extension regexp for ImageMagick files, if any. +This is the extension installed into `auto-mode-alist' and +`image-type-file-name-regexps' by `imagemagick-register-types'.") ;;;###autoload (defun imagemagick-register-types () "Register file types that can be handled by ImageMagick. -This registers the ImageMagick types listed in `imagemagick-types', +This function is called at startup, after loading the init file. +It registers the ImageMagick types listed in `imagemagick-types', excluding those listed in `imagemagick-types-inhibit'. Registered image types are added to `auto-mode-alist', so that @@ -714,14 +704,45 @@ recognizes these files as having image type `imagemagick'. If Emacs is compiled without ImageMagick support, do nothing." (when (fboundp 'imagemagick-types) - (let ((im-types '())) - (dolist (im-type (imagemagick-types)) - (unless (memq im-type imagemagick-types-inhibit) - (push (downcase (symbol-name im-type)) im-types))) - (let ((extension (concat "\\." (regexp-opt im-types) "\\'"))) - (push (cons extension 'image-mode) auto-mode-alist) - (push (cons extension 'imagemagick) - image-type-file-name-regexps))))) + (let ((re (if (eq imagemagick-types-inhibit t) + ;; Use a bogus regexp to inhibit matches. + "\\'a" + (let ((types)) + (dolist (type (imagemagick-types)) + (unless (memq type imagemagick-types-inhibit) + (push (downcase (symbol-name type)) types))) + (concat "\\." (regexp-opt types) "\\'")))) + (ama-elt (car (member (cons imagemagick--file-regexp 'image-mode) + auto-mode-alist))) + (itfnr-elt (car (member (cons imagemagick--file-regexp 'imagemagick) + image-type-file-name-regexps)))) + (if ama-elt + (setcar ama-elt re) + (push (cons re 'image-mode) auto-mode-alist)) + (if itfnr-elt + (setcar itfnr-elt re) + (push (cons re 'imagemagick) image-type-file-name-regexps)) + (setq imagemagick--file-regexp re)))) + +(defcustom imagemagick-types-inhibit + '(C HTML HTM TXT PDF) + "List of ImageMagick types that should not be treated as images. +This should be a list of symbols, each of which should be one of +the ImageMagick types listed in `imagemagick-types'. The listed +image types are not registered by `imagemagick-register-types'. + +If the value is t, inhibit the use of ImageMagick for images. + +If Emacs is compiled without ImageMagick support, this variable +has no effect." + :type '(choice (const :tag "Support all ImageMagick types" nil) + (const :tag "Disable all ImageMagick types" t) + (repeat symbol)) + :set (lambda (symbol value) + (set-default symbol value) + (imagemagick-register-types)) + :version "24.1" + :group 'image) (provide 'image) diff --git a/lisp/loadup.el b/lisp/loadup.el index 2ba24c8fe37..f7ffa27a9ed 100644 --- a/lisp/loadup.el +++ b/lisp/loadup.el @@ -193,6 +193,8 @@ (if (fboundp 'x-create-frame) (progn (load "fringe") + ;; Needed by `imagemagick-register-types' + (load "emacs-lisp/regexp-opt") (load "image") (load "international/fontset") (load "dnd") From 4b5afbb0d98ba4a95359ca5edaee8c3ecd7ae007 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sun, 15 Apr 2012 23:39:21 -0700 Subject: [PATCH 013/564] * alloc.c: Remove one incorrect comment and fix another. --- src/ChangeLog | 1 + src/alloc.c | 5 +---- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 7172ba605f5..e321a70d4c3 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -8,6 +8,7 @@ GC_MALLOC_CHECK) && GC_MALLOC_CHECK), to match when it's used. (NEED_MEM_INSERT): New macro. (mem_insert, mem_insert_fixup) [!NEED_MEM_INSERT]: Remove; unused. + Remove one incorrect comment and fix another. Fix minor ralloc.c problems found by static checking. See http://lists.gnu.org/archive/html/emacs-devel/2011-12/msg00720.html diff --git a/src/alloc.c b/src/alloc.c index 9589ae05e95..400b11c296a 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -948,9 +948,6 @@ lisp_free (POINTER_TYPE *block) /* The entry point is lisp_align_malloc which returns blocks of at most BLOCK_BYTES and guarantees they are aligned on a BLOCK_ALIGN boundary. */ -/* Use posix_memalloc if the system has it and we're using the system's - malloc (because our gmalloc.c routines don't have posix_memalign although - its memalloc could be used). */ #if defined (HAVE_POSIX_MEMALIGN) && defined (SYSTEM_MALLOC) #define USE_POSIX_MEMALIGN 1 #endif @@ -1007,7 +1004,7 @@ struct ablocks struct ablock blocks[ABLOCKS_SIZE]; }; -/* Size of the block requested from malloc or memalign. */ +/* Size of the block requested from malloc or posix_memalign. */ #define ABLOCKS_BYTES (sizeof (struct ablocks) - BLOCK_PADDING) #define ABLOCK_ABASE(block) \ From 177eca34cbb28be0835f63e2a3b0fa96c43281d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agust=C3=ADn=20Mart=C3=ADn?= Date: Mon, 16 Apr 2012 11:49:51 +0200 Subject: [PATCH 014/564] ispell.el (ispell-set-spellchecker-params): Make dicts use [:alpha:] if possible. If Emacs flavour supports [:alpha:] regexps, use it for Casechars and Not-Casechars. This currently means use it unless flavour is XEmacs. Fixes: debbugs:11200 --- lisp/ChangeLog | 5 +++++ lisp/textmodes/ispell.el | 30 +++++++++++++++++++++++++++--- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f50af02a239..7ebeea0a9dd 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-04-12 Agustín Martín Domingo + + * ispell.el (ispell-set-spellchecker-params): Post-process + `ispell-dictionary-alist' to use [:alpha:] if possible. + 2012-04-16 Chong Yidong * image.el (imagemagick--extension-regexp): New variable. diff --git a/lisp/textmodes/ispell.el b/lisp/textmodes/ispell.el index 37311b7337d..cfb1a2b3607 100644 --- a/lisp/textmodes/ispell.el +++ b/lisp/textmodes/ispell.el @@ -767,6 +767,12 @@ here just for backwards compatibility.") (make-obsolete-variable 'ispell-aspell-supports-utf8 'ispell-encoding8-command "23.1") +(defvar ispell-emacs-alpha-regexp + (if (string-match "^[[:alpha:]]+$" "abcde") + "[[:alpha:]]" + nil) + "[[:alpha:]] if Emacs supports [:alpha:] regexp, nil +otherwise (current XEmacs does not support it).") ;;; ********************************************************************** ;;; The following are used by ispell, and should not be changed. @@ -1092,8 +1098,7 @@ aspell is used along with Emacs).") (error nil)) ispell-really-aspell ispell-encoding8-command - ;; XEmacs does not like [:alpha:] regexps. - (string-match "^[[:alpha:]]+$" "abcde")) + ispell-emacs-alpha-regexp) (unless ispell-aspell-dictionary-alist (ispell-find-aspell-dictionaries))) @@ -1117,8 +1122,27 @@ aspell is used along with Emacs).") ispell-dictionary-base-alist)) (unless (assoc (car dict) all-dicts-alist) (add-to-list 'all-dicts-alist dict))) - (setq ispell-dictionary-alist all-dicts-alist)))) + (setq ispell-dictionary-alist all-dicts-alist)) + ;; If Emacs flavor supports [:alpha:] use it for global dicts. If + ;; spellchecker also supports UTF-8 via command-line option use it + ;; in communication. This does not affect definitions in ~/.emacs. + (if ispell-emacs-alpha-regexp + (let (tmp-dicts-alist) + (dolist (adict ispell-dictionary-alist) + (add-to-list 'tmp-dicts-alist + (list + (nth 0 adict) ; dict name + "[[:alpha:]]" ; casechars + "[^[:alpha:]]" ; not-casechars + (nth 3 adict) ; otherchars + (nth 4 adict) ; many-otherchars-p + (nth 5 adict) ; ispell-args + (nth 6 adict) ; extended-character-mode + (if ispell-encoding8-command + 'utf-8 + (nth 7 adict))))) + (setq ispell-dictionary-alist tmp-dicts-alist))))) (defun ispell-valid-dictionary-list () "Return a list of valid dictionaries. From 4fc2c72a6fa8b776b6c7aaa42e80cea77b99ad0f Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Mon, 16 Apr 2012 18:11:45 +0800 Subject: [PATCH 015/564] * mail/sendmail.el (mail-bury): Call return action with the right Rmail buffer. Fixes: debbugs:11242 --- lisp/ChangeLog | 5 +++++ lisp/mail/sendmail.el | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index db559581ec2..e1232eb52e5 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-04-16 Chong Yidong + + * mail/sendmail.el (mail-bury): Call return action with the right + Rmail buffer (Bug#11242). + 2012-04-15 Chong Yidong * server.el (server-process-filter): Handle corner case where both diff --git a/lisp/mail/sendmail.el b/lisp/mail/sendmail.el index 933eaef8119..c4647d7893e 100644 --- a/lisp/mail/sendmail.el +++ b/lisp/mail/sendmail.el @@ -864,7 +864,7 @@ Prefix arg means don't delete this window." (unless return-action (dolist (buffer (buffer-list)) (if (eq (buffer-local-value 'major-mode buffer) 'rmail-mode) - (setq return-action `(rmail-mail-return ,newbuf))))) + (setq return-action `(rmail-mail-return ,buffer))))) (if (and (null arg) return-action) (apply (car return-action) (cdr return-action)) (switch-to-buffer newbuf)))) From 4be3075ec8cde1561817ffe9f7a0869841ffe38c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agust=C3=ADn=20Mart=C3=ADn?= Date: Mon, 16 Apr 2012 19:06:58 +0200 Subject: [PATCH 016/564] ispell.el: Fix last Changelog entry. utf-8 will be enabled if possible. --- lisp/ChangeLog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 7ebeea0a9dd..cae46908b0e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,7 +1,7 @@ 2012-04-12 Agustín Martín Domingo * ispell.el (ispell-set-spellchecker-params): Post-process - `ispell-dictionary-alist' to use [:alpha:] if possible. + `ispell-dictionary-alist' to use [:alpha:] and utf-8 if possible. 2012-04-16 Chong Yidong From 3851314bd40e31c30fdd4ad7ec1dd8ad19c8030e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agust=C3=ADn=20Mart=C3=ADn?= Date: Mon, 16 Apr 2012 19:32:02 +0200 Subject: [PATCH 017/564] (ispell-dictionary-base-alist): Revert to original XEmacs friendly default value. Having [:alpha:] here is no longer needed. If possible [:alpha:] will be set in `ispell-set-spellchecker-params' (and will always be for Emacs). --- lisp/ChangeLog | 3 +++ lisp/textmodes/ispell.el | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index cae46908b0e..a0f42ba6ff7 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -2,6 +2,9 @@ * ispell.el (ispell-set-spellchecker-params): Post-process `ispell-dictionary-alist' to use [:alpha:] and utf-8 if possible. + (ispell-dictionary-base-alist): Revert to original XEmacs + friendly version for default. [:alpha:] will be added in + `ispell-set-spellchecker-params' if needed 2012-04-16 Chong Yidong diff --git a/lisp/textmodes/ispell.el b/lisp/textmodes/ispell.el index cfb1a2b3607..53822694698 100644 --- a/lisp/textmodes/ispell.el +++ b/lisp/textmodes/ispell.el @@ -574,12 +574,12 @@ re-start Emacs." (defvar ispell-dictionary-base-alist - '((nil + '((nil ; default ;; The default dictionary. It may be English.aff, or any other ;; dictionary depending on locale and such things. We should probably ;; ask ispell what dictionary it's using, but until we do that, let's - ;; just use an approximate regexp. - "[[:alpha:]]" "[^[:alpha:]]" "[']" nil ("-B") nil iso-8859-1) + ;; just use a minimal regexp. [:alpha:] will later be set if possible. + "[A-Za-z]" "[^A-Za-z]" "[']" nil ("-B") nil iso-8859-1) ("american" ; Yankee English "[A-Za-z]" "[^A-Za-z]" "[']" nil ("-B") nil iso-8859-1) ("brasileiro" ; Brazilian mode From 9b9b2ef28d8a85ca46ce12b344ea9d267b283aac Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 16 Apr 2012 14:32:59 -0400 Subject: [PATCH 018/564] * configure.in: Remove X libs workaround for old autoconf. --- ChangeLog | 4 ++++ configure.in | 9 --------- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3a72290284b..fb0ce63727b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2012-04-16 Glenn Morris + + * configure.in: Remove X libs workaround for old autoconf. + 2012-04-12 Ken Brown * configure.in: Warn that Cygwin 1.5 is unsupported. (Bug#10398) diff --git a/configure.in b/configure.in index bd8e3d62299..e0ac2ab1bad 100644 --- a/configure.in +++ b/configure.in @@ -1421,15 +1421,6 @@ else window_system=x11 fi -## Workaround for bug in autoconf <= 2.62. -## http://lists.gnu.org/archive/html/emacs-devel/2008-04/msg01551.html -## No need to do anything special for these standard directories. -if test -n "${x_libraries}" && test x"${x_libraries}" != xNONE; then - - x_libraries=`echo :${x_libraries}: | sed -e 's|:/usr/lib64:|:|g' -e 's|:/lib64:|:|g' -e 's|^:||' -e 's|:$||'` - -fi - LD_SWITCH_X_SITE_AUX= LD_SWITCH_X_SITE_AUX_RPATH= if test "${x_libraries}" != NONE; then From 94ee8db5e0a8bfa2aa68859782960b7140dae935 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 16 Apr 2012 14:41:38 -0400 Subject: [PATCH 019/564] * lisp/frame.el (automatic-hscrolling): Make this alias obsolete. --- lisp/ChangeLog | 4 ++++ lisp/frame.el | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index a0f42ba6ff7..97d626f9505 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-04-16 Glenn Morris + + * frame.el (automatic-hscrolling): Make this alias obsolete. + 2012-04-12 Agustín Martín Domingo * ispell.el (ispell-set-spellchecker-params): Post-process diff --git a/lisp/frame.el b/lisp/frame.el index 79e1243c7af..1ee9d966ef1 100644 --- a/lisp/frame.el +++ b/lisp/frame.el @@ -1651,7 +1651,8 @@ terminals, cursor blinking is controlled by the terminal." ;; Misc. -(defvaralias 'automatic-hscrolling 'auto-hscroll-mode) +;; Only marked as obsolete in 24.2. +(define-obsolete-variable-alias 'automatic-hscrolling 'auto-hscroll-mode "22.1") (make-variable-buffer-local 'show-trailing-whitespace) From 6b955486f5d3527479536b760a926ecea0447a80 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 16 Apr 2012 14:46:46 -0400 Subject: [PATCH 020/564] Replace a use of eval-after-load * lisp/woman.el: Remove eval-after-load for tar-mode. * lisp/tar-mode.el (tar-mode-map): Add woman binding and menu entry. (woman-tar-extract-file): Autoload it. --- lisp/ChangeLog | 4 ++++ lisp/tar-mode.el | 5 +++++ lisp/woman.el | 10 +--------- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 97d626f9505..ee34ce1827e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,9 @@ 2012-04-16 Glenn Morris + * woman.el: Remove eval-after-load for tar-mode. + * tar-mode.el (tar-mode-map): Add woman binding and menu entry. + (woman-tar-extract-file): Autoload it. + * frame.el (automatic-hscrolling): Make this alias obsolete. 2012-04-12 Agustín Martín Domingo diff --git a/lisp/tar-mode.el b/lisp/tar-mode.el index 3eb2be15698..7c95f47e0fb 100644 --- a/lisp/tar-mode.el +++ b/lisp/tar-mode.el @@ -549,6 +549,7 @@ MODE should be an integer which is a file mode value." (define-key map "R" 'tar-rename-entry) (define-key map "u" 'tar-unflag) (define-key map "v" 'tar-view) + (define-key map "w" 'woman-tar-extract-file) (define-key map "x" 'tar-expunge) (define-key map "\177" 'tar-unflag-backwards) (define-key map "E" 'tar-extract-other-window) @@ -566,6 +567,8 @@ MODE should be an integer which is a file mode value." (define-key map [menu-bar immediate] (cons "Immediate" (make-sparse-keymap "Immediate"))) + (define-key map [menu-bar immediate woman] + '("Read Man Page (WoMan)" . woman-tar-extract-file)) (define-key map [menu-bar immediate view] '("View This File" . tar-view)) (define-key map [menu-bar immediate display] @@ -677,6 +680,8 @@ See also: variables `tar-update-datestamp' and `tar-anal-blocksize'. (fundamental-mode) (signal (car err) (cdr err))))) +(autoload 'woman-tar-extract-file "woman" + "In tar mode, run the WoMan man-page browser on this file." t) (define-minor-mode tar-subfile-mode "Minor mode for editing an element of a tar-file. diff --git a/lisp/woman.el b/lisp/woman.el index c76399a96e5..98ab27716a1 100644 --- a/lisp/woman.el +++ b/lisp/woman.el @@ -1,6 +1,6 @@ ;;; woman.el --- browse UN*X manual pages `wo (without) man' -;; Copyright (C) 2000-2012 Free Software Foundation, Inc. +;; Copyright (C) 2000-2012 Free Software Foundation, Inc. ;; Author: Francis J. Wright ;; Maintainer: FSF @@ -1595,14 +1595,6 @@ Also make each path-info component into a list. (woman-process-buffer) (goto-char (point-min))))) -;; There is currently no `tar-mode-hook' so use ... -(eval-after-load "tar-mode" - '(progn - (define-key tar-mode-map "w" 'woman-tar-extract-file) - (define-key-after (lookup-key tar-mode-map [menu-bar immediate]) - [woman] '("Read Man Page (WoMan)" . woman-tar-extract-file) 'view))) - - (defvar woman-last-file-name nil "The full pathname of the last file formatted by WoMan.") From 5934c3782fcfb59498d415a74fe3df902cf99d0e Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 16 Apr 2012 14:48:46 -0400 Subject: [PATCH 021/564] Set lisp/vc/vc-hg.el maintainer to FSF. Ref: http://lists.gnu.org/archive/html/bug-gnu-emacs/2012-03/msg00325.html --- lisp/vc/vc-hg.el | 1 + 1 file changed, 1 insertion(+) diff --git a/lisp/vc/vc-hg.el b/lisp/vc/vc-hg.el index 52e8051342d..a2728268816 100644 --- a/lisp/vc/vc-hg.el +++ b/lisp/vc/vc-hg.el @@ -3,6 +3,7 @@ ;; Copyright (C) 2006-2012 Free Software Foundation, Inc. ;; Author: Ivan Kanis +;; Maintainer: FSF ;; Keywords: vc tools ;; Package: vc From 5a0978ce61cc768c55d621d3f17e6f2c035caebc Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 16 Apr 2012 14:53:06 -0400 Subject: [PATCH 022/564] picture.el small cleanup * lisp/textmodes/picture.el (picture-desired-column) (picture-update-desired-column): Convert comments to doc-strings. (picture-substitute): Remove function. (picture-mode-map): Initialize in the defvar. --- lisp/ChangeLog | 5 ++ lisp/textmodes/picture.el | 129 +++++++++++++++++++------------------- 2 files changed, 69 insertions(+), 65 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ee34ce1827e..3bed71495e5 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,10 @@ 2012-04-16 Glenn Morris + * textmodes/picture.el (picture-desired-column) + (picture-update-desired-column): Convert comments to doc-strings. + (picture-substitute): Remove function. + (picture-mode-map): Initialize in the defvar. + * woman.el: Remove eval-after-load for tar-mode. * tar-mode.el (tar-mode-map): Add woman binding and menu entry. (woman-tar-extract-file): Autoload it. diff --git a/lisp/textmodes/picture.el b/lisp/textmodes/picture.el index 9e8cbb216d1..3e2ab7892da 100644 --- a/lisp/textmodes/picture.el +++ b/lisp/textmodes/picture.el @@ -63,15 +63,17 @@ ;; Picture Movement Commands -;; When a cursor is on a wide-column character (e.g. Chinese, -;; Japanese, Korean), this variable tells the desired current column -;; which may be different from (current-column). -(defvar picture-desired-column 0) +(defvar picture-desired-column 0 + "Desired current column for Picture mode. +When a cursor is on a wide-column character (e.g. Chinese, +Japanese, Korean), this may may be different from `current-column'.") + -;; If the value of picture-desired-column is far from the current -;; column, or if the arg ADJUST-TO-CURRENT is non-nil, set it to the -;; current column. Return the current column. (defun picture-update-desired-column (adjust-to-current) + "Maybe update `picture-desired-column'. +If the value of `picture-desired-column' is more than one column +from `current-column', or if the argument ADJUST-TO-CURRENT is +non-nil, set it to the current column. Return `current-column'." (let ((current-column (current-column))) (if (or adjust-to-current (< picture-desired-column (1- current-column)) @@ -606,64 +608,61 @@ Leaves the region surrounding the rectangle." (defalias 'picture-delete-char 'delete-char) -(defvar picture-mode-map nil) - -(defun picture-substitute (oldfun newfun) - (define-key picture-mode-map (vector 'remap oldfun) newfun)) - -(if (not picture-mode-map) - (progn - (setq picture-mode-map (make-keymap)) - (picture-substitute 'self-insert-command 'picture-self-insert) - (picture-substitute 'completion-separator-self-insert-command - 'picture-self-insert) - (picture-substitute 'completion-separator-self-insert-autofilling - 'picture-self-insert) - (picture-substitute 'forward-char 'picture-forward-column) - (picture-substitute 'backward-char 'picture-backward-column) - (picture-substitute 'delete-char 'picture-clear-column) - ;; There are two possibilities for what is normally on DEL. - (picture-substitute 'backward-delete-char-untabify 'picture-backward-clear-column) - (picture-substitute 'delete-backward-char 'picture-backward-clear-column) - (picture-substitute 'kill-line 'picture-clear-line) - (picture-substitute 'open-line 'picture-open-line) - (picture-substitute 'newline 'picture-newline) - (picture-substitute 'newline-and-indent 'picture-duplicate-line) - (picture-substitute 'next-line 'picture-move-down) - (picture-substitute 'previous-line 'picture-move-up) - (picture-substitute 'move-beginning-of-line 'picture-beginning-of-line) - (picture-substitute 'move-end-of-line 'picture-end-of-line) - (picture-substitute 'mouse-set-point 'picture-mouse-set-point) - - (define-key picture-mode-map "\C-c\C-d" 'picture-delete-char) - (define-key picture-mode-map "\e\t" 'picture-toggle-tab-state) - (define-key picture-mode-map "\t" 'picture-tab) - (define-key picture-mode-map "\e\t" 'picture-tab-search) - (define-key picture-mode-map "\C-c\t" 'picture-set-tab-stops) - (define-key picture-mode-map "\C-c\C-k" 'picture-clear-rectangle) - (define-key picture-mode-map "\C-c\C-w" 'picture-clear-rectangle-to-register) - (define-key picture-mode-map "\C-c\C-y" 'picture-yank-rectangle) - (define-key picture-mode-map "\C-c\C-x" 'picture-yank-rectangle-from-register) - (define-key picture-mode-map "\C-c\C-r" 'picture-draw-rectangle) - (define-key picture-mode-map "\C-c\C-c" 'picture-mode-exit) - (define-key picture-mode-map "\C-c\C-f" 'picture-motion) - (define-key picture-mode-map "\C-c\C-b" 'picture-motion-reverse) - (define-key picture-mode-map "\C-c<" 'picture-movement-left) - (define-key picture-mode-map "\C-c>" 'picture-movement-right) - (define-key picture-mode-map "\C-c^" 'picture-movement-up) - (define-key picture-mode-map "\C-c." 'picture-movement-down) - (define-key picture-mode-map "\C-c`" 'picture-movement-nw) - (define-key picture-mode-map "\C-c'" 'picture-movement-ne) - (define-key picture-mode-map "\C-c/" 'picture-movement-sw) - (define-key picture-mode-map "\C-c\\" 'picture-movement-se) - (define-key picture-mode-map [(control ?c) left] 'picture-movement-left) - (define-key picture-mode-map [(control ?c) right] 'picture-movement-right) - (define-key picture-mode-map [(control ?c) up] 'picture-movement-up) - (define-key picture-mode-map [(control ?c) down] 'picture-movement-down) - (define-key picture-mode-map [(control ?c) home] 'picture-movement-nw) - (define-key picture-mode-map [(control ?c) prior] 'picture-movement-ne) - (define-key picture-mode-map [(control ?c) end] 'picture-movement-sw) - (define-key picture-mode-map [(control ?c) next] 'picture-movement-se))) +(defvar picture-mode-map + (let ((map (make-keymap))) + (define-key map [remap self-insert-command] 'picture-self-insert) + (define-key map [remap self-insert-command] 'picture-self-insert) + (define-key map [remap completion-separator-self-insert-command] + 'picture-self-insert) + (define-key map [remap completion-separator-self-insert-autofilling] + 'picture-self-insert) + (define-key map [remap forward-char] 'picture-forward-column) + (define-key map [remap backward-char] 'picture-backward-column) + (define-key map [remap delete-char] 'picture-clear-column) + ;; There are two possibilities for what is normally on DEL. + (define-key map [remap backward-delete-char-untabify] + 'picture-backward-clear-column) + (define-key map [remap delete-backward-char] 'picture-backward-clear-column) + (define-key map [remap kill-line] 'picture-clear-line) + (define-key map [remap open-line] 'picture-open-line) + (define-key map [remap newline] 'picture-newline) + (define-key map [remap newline-and-indent] 'picture-duplicate-line) + (define-key map [remap next-line] 'picture-move-down) + (define-key map [remap previous-line] 'picture-move-up) + (define-key map [remap move-beginning-of-line] 'picture-beginning-of-line) + (define-key map [remap move-end-of-line] 'picture-end-of-line) + (define-key map [remap mouse-set-point] 'picture-mouse-set-point) + (define-key map "\C-c\C-d" 'picture-delete-char) + (define-key map "\e\t" 'picture-toggle-tab-state) + (define-key map "\t" 'picture-tab) + (define-key map "\e\t" 'picture-tab-search) + (define-key map "\C-c\t" 'picture-set-tab-stops) + (define-key map "\C-c\C-k" 'picture-clear-rectangle) + (define-key map "\C-c\C-w" 'picture-clear-rectangle-to-register) + (define-key map "\C-c\C-y" 'picture-yank-rectangle) + (define-key map "\C-c\C-x" 'picture-yank-rectangle-from-register) + (define-key map "\C-c\C-r" 'picture-draw-rectangle) + (define-key map "\C-c\C-c" 'picture-mode-exit) + (define-key map "\C-c\C-f" 'picture-motion) + (define-key map "\C-c\C-b" 'picture-motion-reverse) + (define-key map "\C-c<" 'picture-movement-left) + (define-key map "\C-c>" 'picture-movement-right) + (define-key map "\C-c^" 'picture-movement-up) + (define-key map "\C-c." 'picture-movement-down) + (define-key map "\C-c`" 'picture-movement-nw) + (define-key map "\C-c'" 'picture-movement-ne) + (define-key map "\C-c/" 'picture-movement-sw) + (define-key map "\C-c\\" 'picture-movement-se) + (define-key map [(control ?c) left] 'picture-movement-left) + (define-key map [(control ?c) right] 'picture-movement-right) + (define-key map [(control ?c) up] 'picture-movement-up) + (define-key map [(control ?c) down] 'picture-movement-down) + (define-key map [(control ?c) home] 'picture-movement-nw) + (define-key map [(control ?c) prior] 'picture-movement-ne) + (define-key map [(control ?c) end] 'picture-movement-sw) + (define-key map [(control ?c) next] 'picture-movement-se) + map) + "Keymap used in `picture-mode'.") (defcustom picture-mode-hook nil "If non-nil, its value is called on entry to Picture mode. From 20f0c46dcdb597702fbb444729ec35411c036352 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 16 Apr 2012 15:01:30 -0400 Subject: [PATCH 023/564] * lisp/progmodes/perl-mode.el (c-macro-expand): Remove unnecessary autoload (it is in loaddefs.el). --- lisp/ChangeLog | 3 +++ lisp/progmodes/perl-mode.el | 7 +------ 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 3bed71495e5..24b564b6d70 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2012-04-16 Glenn Morris + * progmodes/perl-mode.el (c-macro-expand): + Remove unnecessary autoload (it is in loaddefs.el). + * textmodes/picture.el (picture-desired-column) (picture-update-desired-column): Convert comments to doc-strings. (picture-substitute): Remove function. diff --git a/lisp/progmodes/perl-mode.el b/lisp/progmodes/perl-mode.el index aab5f8f65a4..cfca438a44b 100644 --- a/lisp/progmodes/perl-mode.el +++ b/lisp/progmodes/perl-mode.el @@ -1,6 +1,6 @@ ;;; perl-mode.el --- Perl code editing commands for GNU Emacs -;; Copyright (C) 1990, 1994, 2001-2012 Free Software Foundation, Inc. +;; Copyright (C) 1990, 1994, 2001-2012 Free Software Foundation, Inc. ;; Author: William F. Mann ;; Maintainer: FSF @@ -133,11 +133,6 @@ map) "Keymap used in Perl mode.") -(autoload 'c-macro-expand "cmacexp" - "Display the result of expanding all C macros occurring in the region. -The expansion is entirely correct because it uses the C preprocessor." - t) - (defvar perl-mode-syntax-table (let ((st (make-syntax-table (standard-syntax-table)))) (modify-syntax-entry ?\n ">" st) From 68892d275b8dff830ba48e271d8dc71ba84b2b14 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 16 Apr 2012 15:02:59 -0400 Subject: [PATCH 024/564] * lisp/play/yow.el (yow-file): Use expand-file-name rather than concat. Remove old comment. --- lisp/ChangeLog | 2 ++ lisp/play/yow.el | 8 ++------ 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 24b564b6d70..68225f1bec8 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2012-04-16 Glenn Morris + * play/yow.el (yow-file): Use expand-file-name rather than concat. + * progmodes/perl-mode.el (c-macro-expand): Remove unnecessary autoload (it is in loaddefs.el). diff --git a/lisp/play/yow.el b/lisp/play/yow.el index fa32fdf8272..864f49709fe 100644 --- a/lisp/play/yow.el +++ b/lisp/play/yow.el @@ -1,6 +1,6 @@ ;;; yow.el --- quote random zippyisms -;; Copyright (C) 1993-1995, 2000-2012 Free Software Foundation, Inc. +;; Copyright (C) 1993-1995, 2000-2012 Free Software Foundation, Inc. ;; Maintainer: FSF ;; Author: Richard Mlynarik @@ -24,10 +24,6 @@ ;;; Commentary: ;; Important pinheadery for GNU Emacs. -;; -;; See cookie1.el for implementation. Note --- the `n' argument of yow -;; from the 18.xx implementation is no longer; we only support *random* -;; random access now. ;;; Code: @@ -38,7 +34,7 @@ :prefix "yow-" :group 'games) -(defcustom yow-file (concat data-directory "yow.lines") +(defcustom yow-file (expand-file-name data-directory "yow.lines") "File containing pertinent pinhead phrases." :type 'file :group 'yow) From e3ad7552dbc58b73350c543dd4e44d33b22ea26a Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 16 Apr 2012 15:04:27 -0400 Subject: [PATCH 025/564] * cookie1.el (cookie-snarf): Explicit error if input file cannot be read. --- lisp/ChangeLog | 3 +++ lisp/play/cookie1.el | 2 ++ 2 files changed, 5 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 68225f1bec8..398d74b124f 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2012-04-16 Glenn Morris + * play/cookie1.el (cookie-snarf): + Give an explicit error if input file cannot be read. + * play/yow.el (yow-file): Use expand-file-name rather than concat. * progmodes/perl-mode.el (c-macro-expand): diff --git a/lisp/play/cookie1.el b/lisp/play/cookie1.el index 06bd962d925..cbf29a26a71 100644 --- a/lisp/play/cookie1.el +++ b/lisp/play/cookie1.el @@ -96,6 +96,8 @@ of load, ENDMSG at the end." "Reads in the PHRASE-FILE, returns it as a vector of strings. Emit STARTMSG and ENDMSG before and after. Caches the result; second and subsequent calls on the same file won't go to disk." + (or (file-readable-p phrase-file) + (error "Cannot read file `%s'" phrase-file)) (let ((sym (intern-soft phrase-file cookie-cache))) (and sym (not (equal (symbol-function sym) (nth 5 (file-attributes phrase-file)))) From 175c5e4861127e7ce6659efefa03ab0cfad8f048 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 16 Apr 2012 15:06:02 -0400 Subject: [PATCH 026/564] Fix comment typo --- lisp/mail/feedmail.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/mail/feedmail.el b/lisp/mail/feedmail.el index 4e76e5cdb64..f35560841e2 100644 --- a/lisp/mail/feedmail.el +++ b/lisp/mail/feedmail.el @@ -1586,7 +1586,7 @@ messages to make sure it works as expected." ;; feedmail-buffer-to-binmail, feedmail-buffer-to-sendmail, and -;; feedmail-buffer-to-smptmail are the only things provided for values +;; feedmail-buffer-to-smtpmail are the only things provided for values ;; for the variable feedmail-buffer-eating-function. It's pretty easy ;; to write your own, though. (defun feedmail-buffer-to-binmail (prepped errors-to addr-listoid) From 5261b92ebe71d21e8d36f65f4555a1f90c088281 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 16 Apr 2012 15:09:19 -0400 Subject: [PATCH 027/564] * lisp/gnus/nndraft.el (nndraft-request-list): Fix declaration. --- lisp/gnus/ChangeLog | 4 ++++ lisp/gnus/nndraft.el | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 23e800e0f3f..52f140d9192 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,7 @@ +2012-04-16 Glenn Morris + + * nndraft.el (nndraft-request-list): Fix declaration. + 2012-04-14 Lars Magne Ingebrigtsen * gnus-msg.el (gnus-inews-insert-gcc): Don't do the alist stuff when we diff --git a/lisp/gnus/nndraft.el b/lisp/gnus/nndraft.el index 1800d0c02de..da50720ebbe 100644 --- a/lisp/gnus/nndraft.el +++ b/lisp/gnus/nndraft.el @@ -37,7 +37,8 @@ (require 'mm-util) (eval-when-compile (require 'cl)) -(declare-function nndraft-request-list "nnmh" (&rest args)) +;; The nnoo-import at the end, I think. +(declare-function nndraft-request-list "nndraft" (&rest args) t) (nnoo-declare nndraft nnmh) From b1aa797c7a2dbb910c9bd59c1d1e647bfe9a9d85 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 16 Apr 2012 15:13:44 -0400 Subject: [PATCH 028/564] * configure.in (NS_HAVE_NSINTEGER): Remove unnecessary variable. --- ChangeLog | 2 ++ configure.in | 8 ++------ 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index fb0ce63727b..8d551e06f85 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 2012-04-16 Glenn Morris + * configure.in (NS_HAVE_NSINTEGER): Remove unnecessary variable. + * configure.in: Remove X libs workaround for old autoconf. 2012-04-12 Ken Brown diff --git a/configure.in b/configure.in index e0ac2ab1bad..fd1327ed2a9 100644 --- a/configure.in +++ b/configure.in @@ -1541,13 +1541,12 @@ fail; AC_CHECK_HEADER([AppKit/AppKit.h], [HAVE_NS=yes], [AC_MSG_ERROR([`--with-ns' was specified, but the include files are missing or cannot be compiled.])]) - NS_HAVE_NSINTEGER=yes AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include ], [NSInteger i;])], ns_have_nsinteger=yes, ns_have_nsinteger=no) - if test $ns_have_nsinteger = no; then - NS_HAVE_NSINTEGER=no + if test $ns_have_nsinteger = yes; then + AC_DEFINE(NS_HAVE_NSINTEGER, 1, [Define to 1 if `NSInteger' is defined.]) fi fi AC_SUBST(TEMACS_LDFLAGS2) @@ -2595,9 +2594,6 @@ if test "${HAVE_NS}" = "yes"; then ## Extra CFLAGS applied to src/*.m files. GNU_OBJC_CFLAGS="$GNU_OBJC_CFLAGS -fgnu-runtime -Wno-import -fconstant-string-class=NSConstantString -DGNUSTEP_BASE_LIBRARY=1 -DGNU_GUI_LIBRARY=1 -DGNU_RUNTIME=1 -DGSWARN -DGSDIAGNOSE" fi - if test "${NS_HAVE_NSINTEGER}" = "yes"; then - AC_DEFINE(NS_HAVE_NSINTEGER, 1, [Define to 1 if `NSInteger' is defined.]) - fi # We also have mouse menus. HAVE_MENUS=yes OTHER_FILES=ns-app From 0e829eabcd269467345002ad3d7e3b40e3fbd550 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 16 Apr 2012 15:18:36 -0400 Subject: [PATCH 029/564] * lisp/calendar/cal-tex.el (cal-tex-end-document): Trivial clarification. --- lisp/ChangeLog | 2 ++ lisp/calendar/cal-tex.el | 5 ++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 398d74b124f..49509ae5624 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2012-04-16 Glenn Morris + * calendar/cal-tex.el (cal-tex-end-document): Trivial clarification. + * play/cookie1.el (cookie-snarf): Give an explicit error if input file cannot be read. diff --git a/lisp/calendar/cal-tex.el b/lisp/calendar/cal-tex.el index 14899431e2a..0ae2b38eaf6 100644 --- a/lisp/calendar/cal-tex.el +++ b/lisp/calendar/cal-tex.el @@ -1,6 +1,6 @@ ;;; cal-tex.el --- calendar functions for printing calendars with LaTeX -;; Copyright (C) 1995, 2001-2012 Free Software Foundation, Inc. +;; Copyright (C) 1995, 2001-2012 Free Software Foundation, Inc. ;; Author: Steve Fisk ;; Edward M. Reingold @@ -1588,8 +1588,7 @@ informative header, and run HOOK." (cal-tex-e-document) (or (and cal-tex-preamble-extra (string-match "inputenc" cal-tex-preamble-extra)) - (not (re-search-backward "[^[:ascii:]]" nil 'move)) - (progn + (when (re-search-backward "[^[:ascii:]]" nil 'move) (goto-char (point-min)) (when (search-forward "documentclass" nil t) (forward-line 1) From bf350d6a5988d8098f88c39788b50a7a1701918a Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 16 Apr 2012 15:20:42 -0400 Subject: [PATCH 030/564] * lisp/emacs-lisp/cl-extra.el (*random-state*): Remove unnecessary declaration. --- lisp/ChangeLog | 3 +++ lisp/emacs-lisp/cl-extra.el | 3 +-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 49509ae5624..8e85dd3c8c8 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2012-04-16 Glenn Morris + * emacs-lisp/cl-extra.el (*random-state*): + Remove unnecessary declaration. + * calendar/cal-tex.el (cal-tex-end-document): Trivial clarification. * play/cookie1.el (cookie-snarf): diff --git a/lisp/emacs-lisp/cl-extra.el b/lisp/emacs-lisp/cl-extra.el index 9ac5ce7d2f0..9a3d8cf705b 100644 --- a/lisp/emacs-lisp/cl-extra.el +++ b/lisp/emacs-lisp/cl-extra.el @@ -1,6 +1,6 @@ ;;; cl-extra.el --- Common Lisp features, part 2 -;; Copyright (C) 1993, 2000-2012 Free Software Foundation, Inc. +;; Copyright (C) 1993, 2000-2012 Free Software Foundation, Inc. ;; Author: Dave Gillespie ;; Keywords: extensions @@ -430,7 +430,6 @@ With two arguments, return rounding and remainder of their quotient." ;; Random numbers. -(defvar *random-state*) ;;;###autoload (defun random* (lim &optional state) "Return a random nonnegative number less than LIM, an integer or float. From 389c3aa7b2d5d4fca9281c5530bb8d307a167bbc Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 16 Apr 2012 15:21:32 -0400 Subject: [PATCH 031/564] Header comment trivial fix --- lisp/emacs-lisp/ert-x.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/emacs-lisp/ert-x.el b/lisp/emacs-lisp/ert-x.el index 257d0528cbc..a7916354c91 100644 --- a/lisp/emacs-lisp/ert-x.el +++ b/lisp/emacs-lisp/ert-x.el @@ -3,7 +3,7 @@ ;; Copyright (C) 2008, 2010-2012 Free Software Foundation, Inc. ;; Author: Lennart Borgman (lennart O borgman A gmail O com) -;; Author: Christian Ohler +;; Christian Ohler ;; This file is part of GNU Emacs. From 9d217643e091b06a020e4f3c751401cc7802ebf4 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 16 Apr 2012 15:22:32 -0400 Subject: [PATCH 032/564] ChangeLog fix --- lisp/ChangeLog | 4 ---- 1 file changed, 4 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 8e85dd3c8c8..9b136de8961 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1343,10 +1343,6 @@ * term/x-win.el (x-initialize-window-system): Reduce default for x-selection-timeout to 5 seconds (Bug#8869). -2012-02-24 Thierry Volpiatto - - * files.el (file-subdir-of-p): Fix typo. - 2012-02-24 Thierry Volpiatto * files.el (files-equal-p, file-subdir-of-p): New functions. From 099e72021d771b307875f1c4fc6dd1aedd786089 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 16 Apr 2012 15:25:59 -0400 Subject: [PATCH 033/564] * eieio-opt.el (describe-class, describe-generic): Autoload trivia. --- lisp/ChangeLog | 3 +++ lisp/emacs-lisp/eieio-opt.el | 6 ++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 9b136de8961..8f790ab0dc5 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2012-04-16 Glenn Morris + * emacs-lisp/eieio-opt.el (describe-class, describe-generic): + Autoload trivia. + * emacs-lisp/cl-extra.el (*random-state*): Remove unnecessary declaration. diff --git a/lisp/emacs-lisp/eieio-opt.el b/lisp/emacs-lisp/eieio-opt.el index 10816aaa43c..a899839f68a 100644 --- a/lisp/emacs-lisp/eieio-opt.el +++ b/lisp/emacs-lisp/eieio-opt.el @@ -72,8 +72,7 @@ Argument CH-PREFIX is another character prefix to display." ;;; CLASS COMPLETION / DOCUMENTATION -;;;###autoload -(defalias 'describe-class 'eieio-describe-class) +;;;###autoload(defalias 'describe-class 'eieio-describe-class) ;;;###autoload (defun eieio-describe-class (class &optional headerfcn) @@ -305,8 +304,7 @@ are not abstract." ;;; METHOD COMPLETION / DOC (defalias 'describe-method 'eieio-describe-generic) -;;;###autoload -(defalias 'describe-generic 'eieio-describe-generic) +;;;###autoload(defalias 'describe-generic 'eieio-describe-generic) (defalias 'eieio-describe-method 'eieio-describe-generic) ;;;###autoload From f45f90f33151dc74ef541cba4fe87565215382a0 Mon Sep 17 00:00:00 2001 From: Leo Liu Date: Tue, 17 Apr 2012 03:28:57 +0800 Subject: [PATCH 034/564] * lisp/progmodes/python.el: Trivial cleanup. --- lisp/ChangeLog | 4 ++++ lisp/progmodes/python.el | 10 +--------- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 8f790ab0dc5..801a5e74804 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-04-16 Leo Liu + + * progmodes/python.el: Trivial cleanup. + 2012-04-16 Glenn Morris * emacs-lisp/eieio-opt.el (describe-class, describe-generic): diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index 09b89993626..6f8758ebec1 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -69,11 +69,7 @@ (require 'comint) (require 'ansi-color) -(eval-when-compile - (require 'compile) - (require 'hippie-exp)) - -(autoload 'comint-mode "comint") +(eval-when-compile (require 'compile)) (defgroup python nil "Silly walks in the Python language." @@ -1488,8 +1484,6 @@ Don't save anything for STR matching `inferior-python-filter-regexp'." res) (t (concat res s))))) -(autoload 'comint-check-proc "comint") - (defvar python-version-checked nil) (defun python-check-version (cmd) "Check that CMD runs a suitable version of Python." @@ -1684,8 +1678,6 @@ value to determine defaults." "Caches (directory . file) pair used in the last `python-load-file' command. Used for determining the default in the next one.") -(autoload 'comint-get-source "comint") - (defun python-load-file (file-name) "Load a Python file FILE-NAME into the inferior Python process. If the file has extension `.py' import or reload it as a module. From f0f6bc351ba0e4a9ba5a62fb1bbc6fe4b5ce2e0c Mon Sep 17 00:00:00 2001 From: Alan Mackenzie Date: Mon, 16 Apr 2012 20:01:44 +0000 Subject: [PATCH 035/564] CC Mode: Ensure searching for keywords is case sensitive. --- lisp/ChangeLog | 13 +++++++++++++ lisp/progmodes/cc-cmds.el | 39 ++++++++++++++++++++++----------------- lisp/progmodes/cc-mode.el | 4 ++-- 3 files changed, 37 insertions(+), 19 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e1232eb52e5..06a794a79fb 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,16 @@ +2012-04-16 Alan Mackenzie + + Ensure searching for keywords is case sensitive. + + * progmodes/cc-cmds.el (c-electric-brace, c-electric-lt-gt) + (c-electric-paren, c-beginning-of-defun, c-end-of-defun) + (c-defun-name, c-mark-function, c-cpp-define-name) + (c-comment-indent, c-scan-conditionals, c-indent-defun) + (c-context-line-break): bind case-fold-search to nil. + + * progmodes/cc-mode.el (c-font-lock-fontify-region): bind + case-fold-search to nil. + 2012-04-16 Chong Yidong * mail/sendmail.el (mail-bury): Call return action with the right diff --git a/lisp/progmodes/cc-cmds.el b/lisp/progmodes/cc-cmds.el index 55ab6c9981c..9cf20ccb516 100644 --- a/lisp/progmodes/cc-cmds.el +++ b/lisp/progmodes/cc-cmds.el @@ -679,7 +679,7 @@ settings of `c-cleanup-list' are done." ;; We want to inhibit blinking the paren since this would be ;; most disruptive. We'll blink it ourselves later on. (old-blink-paren blink-paren-function) - blink-paren-function) + blink-paren-function case-fold-search) (c-save-buffer-state () (setq safepos (c-safe-position (point) (c-parse-state)) @@ -1086,7 +1086,7 @@ numeric argument is supplied, or the point is inside a literal." (interactive "*P") (let ((c-echo-syntactic-information-p nil) - final-pos close-paren-inserted found-delim) + final-pos close-paren-inserted found-delim case-fold-search) (self-insert-command (prefix-numeric-value arg)) (setq final-pos (point)) @@ -1172,7 +1172,8 @@ newline cleanups are done if appropriate; see the variable `c-cleanup-list'." (interactive "*P") (let ((literal (c-save-buffer-state () (c-in-literal))) ;; shut this up - (c-echo-syntactic-information-p nil)) + (c-echo-syntactic-information-p nil) + case-fold-search) (self-insert-command (prefix-numeric-value arg)) (if (and (not arg) (not literal)) @@ -1585,7 +1586,7 @@ defun." ; structure with other users of c-state-cache. (orig-point-min (point-min)) (orig-point-max (point-max)) lim ; Position of { which has been widened to. - where pos) + where pos case-fold-search) (save-restriction (if (eq c-defun-tactic 'go-outward) @@ -1709,7 +1710,8 @@ the open-parenthesis that starts a defun; see `beginning-of-defun'." ; structure with other users of c-state-cache. (orig-point-min (point-min)) (orig-point-max (point-max)) lim - where pos) + where pos case-fold-search) + (save-restriction (if (eq c-defun-tactic 'go-outward) (setq lim (c-widen-to-enclosing-decl-scope ; e.g. class, namespace @@ -1769,8 +1771,8 @@ with a brace block." (interactive) (c-save-buffer-state (beginning-of-defun-function end-of-defun-function - where pos name-end) - + where pos name-end case-fold-search) + (save-restriction (widen) (save-excursion @@ -1969,7 +1971,7 @@ As opposed to \\[c-beginning-of-defun] and \\[c-end-of-defun], this function does not require the declaration to contain a brace block." (interactive) - (let (decl-limits) + (let (decl-limits case-fold-search) (c-save-buffer-state nil ;; We try to be line oriented, unless there are several ;; declarations on the same line. @@ -2001,11 +2003,12 @@ function does not require the declaration to contain a brace block." (defun c-cpp-define-name () "Return the name of the current CPP macro, or NIL if we're not in one." (interactive) - (save-excursion - (and c-opt-cpp-macro-define-start - (c-beginning-of-macro) - (looking-at c-opt-cpp-macro-define-start) - (match-string-no-properties 1)))) + (let (case-fold-search) + (save-excursion + (and c-opt-cpp-macro-define-start + (c-beginning-of-macro) + (looking-at c-opt-cpp-macro-define-start) + (match-string-no-properties 1))))) ;; Movement by statements. @@ -2888,7 +2891,8 @@ See `c-indent-comment-alist' for a description." (eq (match-end 0) eot)) 'cpp-end-block) (t - 'other)))) + 'other))) + case-fold-search) (if (and (memq line-type '(anchored-comment empty-line)) c-indent-comments-syntactically-p) (let ((c-syntactic-context (c-guess-basic-syntax))) @@ -3024,7 +3028,7 @@ are treated as conditional clause limits. Normally they are ignored." (let* ((forward (> count 0)) (increment (if forward -1 1)) (search-function (if forward 're-search-forward 're-search-backward)) - new) + new case-fold-search) (unless (integerp target-depth) (setq target-depth (if target-depth -1 0))) (save-excursion @@ -3226,7 +3230,7 @@ balanced expression is found." In the macro case this also has the effect of realigning any line continuation backslashes, unless `c-auto-align-backslashes' is nil." (interactive "*") - (let ((here (point-marker)) decl-limits) + (let ((here (point-marker)) decl-limits case-fold-search) (unwind-protect (progn (c-save-buffer-state nil @@ -4638,7 +4642,8 @@ inside a preprocessor directive." (interactive "*") (let* (c-lit-limits c-lit-type - (c-macro-start c-macro-start)) + (c-macro-start c-macro-start) + case-fold-search) (c-save-buffer-state () (setq c-lit-limits (c-literal-limits nil nil t) diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el index 7c018feefbb..ff18f56bbe8 100644 --- a/lisp/progmodes/cc-mode.el +++ b/lisp/progmodes/cc-mode.el @@ -1170,10 +1170,10 @@ Note that the style variables are always made local to the buffer." ;; ;; ;; void myfunc(T* p) {} - ;; + ;; ;; Type a space in the first blank line, and the fontification of the next ;; line was fouled up by context fontification. - (let ((new-beg beg) (new-end end) new-region) + (let ((new-beg beg) (new-end end) new-region case-fold-search) (if c-in-after-change-fontification (setq c-in-after-change-fontification nil) (save-restriction From 1197ecfa84c35f9497a340845595e7e1040e455d Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 16 Apr 2012 16:13:38 -0400 Subject: [PATCH 036/564] two-column.el small cleanup * lisp/textmodes/two-column.el: Move custom options to the start. (frame-width): Remove compat definition. (2C-associate-buffer, 2C-dissociate): Use with-current-buffer rather than save-excursion. (2C-dissociate): Force a mode-line update. (2C-autoscroll): Use ignore-errors. --- lisp/ChangeLog | 7 ++ lisp/textmodes/two-column.el | 210 ++++++++++++++--------------------- 2 files changed, 91 insertions(+), 126 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 801a5e74804..906adf26971 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -4,6 +4,13 @@ 2012-04-16 Glenn Morris + * textmodes/two-column.el: Move custom options to the start. + (frame-width): Remove compat definition. + (2C-associate-buffer, 2C-dissociate): + Use with-current-buffer rather than save-excursion. + (2C-dissociate): Force a mode-line update. + (2C-autoscroll): Use ignore-errors. + * emacs-lisp/eieio-opt.el (describe-class, describe-generic): Autoload trivia. diff --git a/lisp/textmodes/two-column.el b/lisp/textmodes/two-column.el index 40cbbc59292..8a4fe4f87fd 100644 --- a/lisp/textmodes/two-column.el +++ b/lisp/textmodes/two-column.el @@ -124,15 +124,51 @@ ;;; Code: +(defgroup two-column nil + "Minor mode for editing of two-column text." + :prefix "2C-" + :group 'frames) + +(defcustom 2C-mode-line-format + '("-%*- %15b --" (-3 . "%p") "--%[(" mode-name + minor-mode-alist "%n" mode-line-process ")%]%-") + "Value of `mode-line-format' for a buffer in two-column minor mode." + :type 'sexp + :group 'two-column) + +(defcustom 2C-other-buffer-hook 'text-mode + "Hook run in new buffer when it is associated with current one." + :type 'function + :group 'two-column) + +(defcustom 2C-separator "" + "A string inserted between the two columns when merging. +This gets set locally by \\[2C-split]." + :type 'string + :group 'two-column) +(put '2C-separator 'permanent-local t) + +(defcustom 2C-window-width 40 + "The width of the first column. (Must be at least `window-min-width'.) +This value is local for every buffer that sets it." + :type 'integer + :group 'two-column) +(make-variable-buffer-local '2C-window-width) +(put '2C-window-width 'permanent-local t) + +(defcustom 2C-beyond-fill-column 4 + "Base for calculating `fill-column' for a buffer in two-column minor mode. +The value of `fill-column' becomes `2C-window-width' for this buffer +minus this value." + :type 'integer + :group 'two-column) + +(defcustom 2C-autoscroll t + "If non-nil, Emacs attempts to keep the two column's buffers aligned." + :type 'boolean + :group 'two-column) + - -;; Lucid patch -(or (fboundp 'frame-width) - (fset 'frame-width 'screen-width)) - - -;;;;; Set up keymap ;;;;; - (defvar 2C-mode-map (let ((map (make-sparse-keymap))) (define-key map "2" '2C-two-columns) @@ -142,8 +178,6 @@ map) "Keymap for commands for setting up two-column mode.") - - ;;;###autoload (autoload '2C-command "two-column" () t 'keymap) (fset '2C-command 2C-mode-map) @@ -154,7 +188,6 @@ ;;;###autoload (global-set-key [f2] '2C-command) - (defvar 2C-minor-mode-map (let ((map (make-sparse-keymap))) (define-key map "1" '2C-merge) @@ -167,7 +200,6 @@ map) "Keymap for commands for use in two-column mode.") - (setq minor-mode-map-alist (cons (cons '2C-mode (let ((map (make-sparse-keymap))) @@ -181,15 +213,8 @@ map (current-global-map)) map)) minor-mode-map-alist)) + -;;;;; variable declarations ;;;;; - -(defgroup two-column nil - "Minor mode for editing of two-column text." - :prefix "2C-" - :group 'frames) - - ;; Markers seem to be the only buffer-id not affected by renaming a buffer. ;; This nevertheless loses when a buffer is killed. The variable-name is ;; required by `describe-mode'. @@ -198,62 +223,8 @@ (make-variable-buffer-local '2C-mode) (put '2C-mode 'permanent-local t) - - (setq minor-mode-alist (cons '(2C-mode " 2C") minor-mode-alist)) - - -;; rearranged, so that the pertinent info will show in 40 columns -(defcustom 2C-mode-line-format - '("-%*- %15b --" (-3 . "%p") "--%[(" mode-name - minor-mode-alist "%n" mode-line-process ")%]%-") - "Value of `mode-line-format' for a buffer in two-column minor mode." - :type 'sexp - :group 'two-column) - - -(defcustom 2C-other-buffer-hook 'text-mode - "Hook run in new buffer when it is associated with current one." - :type 'function - :group 'two-column) - - -(defcustom 2C-separator "" - "A string inserted between the two columns when merging. -This gets set locally by \\[2C-split]." - :type 'string - :group 'two-column) -(put '2C-separator 'permanent-local t) - - - -(defcustom 2C-window-width 40 - "The width of the first column. (Must be at least `window-min-width') -This value is local for every buffer that sets it." - :type 'integer - :group 'two-column) -(make-variable-buffer-local '2C-window-width) -(put '2C-window-width 'permanent-local t) - - - -(defcustom 2C-beyond-fill-column 4 - "Base for calculating `fill-column' for a buffer in two-column minor mode. -The value of `fill-column' becomes `2C-window-width' for this buffer -minus this value." - :type 'integer - :group 'two-column) - - - -(defcustom 2C-autoscroll t - "If non-nil, Emacs attempts to keep the two column's buffers aligned." - :type 'boolean - :group 'two-column) - - - (defvar 2C-autoscroll-start nil) (make-variable-buffer-local '2C-autoscroll-start) @@ -276,7 +247,6 @@ minus this value." (if req (error "You must first set two-column minor mode")))) - ;; function for setting up two-column minor mode in a buffer associated ;; with the buffer pointed to by the marker other. (defun 2C-mode (other) @@ -320,7 +290,6 @@ The appearance of the screen can be customized by the variables (run-hooks '2C-mode-hook)) - ;;;###autoload (defun 2C-two-columns (&optional buffer) "Split current window vertically for two-column editing. @@ -356,7 +325,6 @@ first and the associated buffer to its right." (other-window -1))))) - ;;;###autoload (defun 2C-associate-buffer () "Associate another buffer with this one in two-column minor mode. @@ -368,9 +336,8 @@ accepting the proposed default buffer. (let ((b1 (current-buffer)) (b2 (or (2C-other) (read-buffer "Associate buffer: " (other-buffer))))) - (save-excursion - (setq 2C-mode nil) - (set-buffer b2) + (setq 2C-mode nil) + (with-current-buffer b2 (and (2C-other) (not (eq b1 (2C-other))) (error "Buffer already associated with buffer `%s'" @@ -382,7 +349,6 @@ accepting the proposed default buffer. (2C-two-columns b2))) - ;;;###autoload (defun 2C-split (arg) "Split a two-column text at point, into two buffers in two-column minor mode. @@ -454,32 +420,28 @@ First column's text sSs Second column's text (move-to-column column))))) - - (defun 2C-dissociate () "Turn off two-column minor mode in current and associated buffer. If the associated buffer is unmodified and empty, it is killed." (interactive) - (let ((buffer (current-buffer))) - (save-excursion - (and (2C-other) - (set-buffer (2C-other)) - (or (not (2C-other)) - (eq buffer (2C-other))) - (if (and (not (buffer-modified-p)) - (eobp) (bobp)) - (kill-buffer nil) - (kill-local-variable '2C-mode) - (kill-local-variable '2C-window-width) - (kill-local-variable '2C-separator) - (kill-local-variable 'mode-line-format) - (kill-local-variable 'fill-column)))) - (kill-local-variable '2C-mode) - (kill-local-variable '2C-window-width) - (kill-local-variable '2C-separator) - (kill-local-variable 'mode-line-format) - (kill-local-variable 'fill-column))) - + (let ((buffer (current-buffer)) + (other (2C-other))) + (if other + (with-current-buffer other + (when (or (not (2C-other)) (eq buffer (2C-other))) + (if (and (not (buffer-modified-p)) (zerop (buffer-size))) + (kill-buffer) + (kill-local-variable '2C-mode) + (kill-local-variable '2C-window-width) + (kill-local-variable '2C-separator) + (kill-local-variable 'mode-line-format) + (kill-local-variable 'fill-column)))))) + (kill-local-variable '2C-mode) + (kill-local-variable '2C-window-width) + (kill-local-variable '2C-separator) + (kill-local-variable 'mode-line-format) + (kill-local-variable 'fill-column) + (force-mode-line-update)) ;; this doesn't use yank-rectangle, so that the first column can @@ -578,7 +540,6 @@ on, this also realigns the two buffers." (message "Autoscrolling is off."))) - (defun 2C-autoscroll () (if 2C-autoscroll ;; catch a mouse scroll on non-selected scrollbar @@ -590,27 +551,25 @@ on, this also realigns the two buffers." (select-window (car (car (cdr last-command-event))))) ;; In some cases scrolling causes an error, but post-command-hook ;; shouldn't, and should always stay in the original window - (condition-case () - (and (or 2C-autoscroll-start (2C-toggle-autoscroll t) nil) - (/= (window-start) 2C-autoscroll-start) - (2C-other) - (get-buffer-window (2C-other)) - (let ((lines (count-lines (window-start) - 2C-autoscroll-start))) - (if (< (window-start) 2C-autoscroll-start) - (setq lines (- lines))) - (setq 2C-autoscroll-start (window-start)) - (select-window (get-buffer-window (2C-other))) - ;; make sure that other buffer has enough lines - (save-excursion - (insert-char - ?\n (- lines (count-lines (window-start) - (goto-char (point-max))) - -1))) - (scroll-up lines) - (setq 2C-autoscroll-start (window-start)))) - (error)))))) - + (ignore-errors + (and (or 2C-autoscroll-start (2C-toggle-autoscroll t) nil) + (/= (window-start) 2C-autoscroll-start) + (2C-other) + (get-buffer-window (2C-other)) + (let ((lines (count-lines (window-start) + 2C-autoscroll-start))) + (if (< (window-start) 2C-autoscroll-start) + (setq lines (- lines))) + (setq 2C-autoscroll-start (window-start)) + (select-window (get-buffer-window (2C-other))) + ;; make sure that other buffer has enough lines + (save-excursion + (insert-char + ?\n (- lines (count-lines (window-start) + (goto-char (point-max))) + -1))) + (scroll-up lines) + (setq 2C-autoscroll-start (window-start))))))))) (defun 2C-enlarge-window-horizontally (arg) @@ -628,7 +587,6 @@ on, this also realigns the two buffers." (2C-enlarge-window-horizontally (- arg))) - (provide 'two-column) ;;; two-column.el ends here From f53a85a90a16970fe9dc15294a2ebdb984369c97 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 16 Apr 2012 19:07:19 -0400 Subject: [PATCH 037/564] Fix thinko in previous yow.el change --- lisp/play/yow.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/play/yow.el b/lisp/play/yow.el index 864f49709fe..cb02a839cde 100644 --- a/lisp/play/yow.el +++ b/lisp/play/yow.el @@ -34,7 +34,7 @@ :prefix "yow-" :group 'games) -(defcustom yow-file (expand-file-name data-directory "yow.lines") +(defcustom yow-file (expand-file-name "yow.lines" data-directory) "File containing pertinent pinhead phrases." :type 'file :group 'yow) From 121b8917ec329a6bbc292ad02f5c4e39d164fff5 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 16 Apr 2012 19:57:09 -0400 Subject: [PATCH 038/564] Replace independent implementations of string-prefix-p * vc/vc.el (vc-string-prefix-p): * vc/pcvs-util.el (cvs-string-prefix-p): * textmodes/tex-mode.el (latex-string-prefix-p, tex-string-prefix-p): * mpc.el (mpc-string-prefix-p): Make all of these into obsolete aliases for string-prefix-p. Update callers. * vc/pcvs.el, vc/vc-dispatcher.el, vc/vc-dir.el: Update callers. --- lisp/ChangeLog | 8 ++++++++ lisp/mpc.el | 9 +++------ lisp/textmodes/tex-mode.el | 15 ++++++--------- lisp/vc/pcvs-util.el | 4 +--- lisp/vc/pcvs.el | 14 +++++++------- lisp/vc/vc-dir.el | 14 +++++++------- lisp/vc/vc-dispatcher.el | 3 +-- lisp/vc/vc.el | 12 ++++-------- 8 files changed, 37 insertions(+), 42 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 906adf26971..280bfe769a2 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -4,6 +4,14 @@ 2012-04-16 Glenn Morris + * vc/vc.el (vc-string-prefix-p): + * vc/pcvs-util.el (cvs-string-prefix-p): + * textmodes/tex-mode.el (latex-string-prefix-p, tex-string-prefix-p): + * mpc.el (mpc-string-prefix-p): + Make all of these into obsolete aliases for string-prefix-p. + Update callers. + * vc/pcvs.el, vc/vc-dispatcher.el, vc/vc-dir.el: Update callers. + * textmodes/two-column.el: Move custom options to the start. (frame-width): Remove compat definition. (2C-associate-buffer, 2C-dissociate): diff --git a/lisp/mpc.el b/lisp/mpc.el index 614f2bd6806..d2203a4deab 100644 --- a/lisp/mpc.el +++ b/lisp/mpc.el @@ -1,6 +1,6 @@ ;;; mpc.el --- A client for the Music Player Daemon -*- coding: utf-8; lexical-binding: t -*- -;; Copyright (C) 2006-2012 Free Software Foundation, Inc. +;; Copyright (C) 2006-2012 Free Software Foundation, Inc. ;; Author: Stefan Monnier ;; Keywords: multimedia @@ -184,10 +184,7 @@ numerically rather than lexicographically." (abs res)) res)))))))) -(defun mpc-string-prefix-p (str1 str2) - ;; FIXME: copied from pcvs-util.el. - "Tell whether STR1 is a prefix of STR2." - (eq t (compare-strings str2 nil (length str1) str1 nil nil))) +(define-obsolete-function-alias 'mpc-string-prefix-p 'string-prefix-p "24.2") ;; This can speed up mpc--song-search significantly. The table may grow ;; very large, tho. It's only bounded by the fact that it gets flushed @@ -1690,7 +1687,7 @@ Return non-nil if a selection was deactivated." (process-put (mpc-proc) prop (delq nil (mapcar (lambda (x) - (if (mpc-string-prefix-p name x) + (if (string-prefix-p name x) nil x)) new))))) (mpc-tagbrowser-refresh))) diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el index 9472d7df879..af00531137a 100644 --- a/lisp/textmodes/tex-mode.el +++ b/lisp/textmodes/tex-mode.el @@ -1492,8 +1492,8 @@ Puts point on a blank line between them." (defvar latex-complete-bibtex-cache nil) -(defun latex-string-prefix-p (str1 str2) - (eq t (compare-strings str1 nil nil str2 0 (length str1)))) +(define-obsolete-function-alias 'latex-string-prefix-p + 'string-prefix-p "24.2") (defvar bibtex-reference-key) (declare-function reftex-get-bibfile-list "reftex-cite.el" ()) @@ -1507,7 +1507,7 @@ Puts point on a blank line between them." keys) (if (and (eq (car latex-complete-bibtex-cache) (reftex-get-bibfile-list)) - (latex-string-prefix-p (nth 1 latex-complete-bibtex-cache) + (string-prefix-p (nth 1 latex-complete-bibtex-cache) key)) ;; Use the cache. (setq keys (nth 2 latex-complete-bibtex-cache)) @@ -2051,10 +2051,7 @@ IN can be either a string (with the same % escapes in it) indicating OUT describes the output file and is either a %-escaped string or nil to indicate that there is no output file.") -;; defsubst* gives better byte-code than defsubst. -(defsubst* tex-string-prefix-p (str1 str2) - "Return non-nil if STR1 is a prefix of STR2" - (eq t (compare-strings str2 nil (length str1) str1 nil nil))) +(define-obsolete-function-alias 'tex-string-prefix-p 'string-prefix-p "24.2") (defun tex-guess-main-file (&optional all) "Find a likely `tex-main-file'. @@ -2069,7 +2066,7 @@ of the current buffer." (with-current-buffer buf (when (and (cond ((null all) (equal dir default-directory)) - ((eq all 'sub) (tex-string-prefix-p default-directory dir)) + ((eq all 'sub) (string-prefix-p default-directory dir)) (t)) (stringp tex-main-file)) (throw 'found (expand-file-name tex-main-file))))) @@ -2078,7 +2075,7 @@ of the current buffer." (with-current-buffer buf (when (and (cond ((null all) (equal dir default-directory)) - ((eq all 'sub) (tex-string-prefix-p default-directory dir)) + ((eq all 'sub) (string-prefix-p default-directory dir)) (t)) buffer-file-name ;; (or (easy-mmode-derived-mode-p 'latex-mode) diff --git a/lisp/vc/pcvs-util.el b/lisp/vc/pcvs-util.el index b300247e552..a3c525cb896 100644 --- a/lisp/vc/pcvs-util.el +++ b/lisp/vc/pcvs-util.el @@ -182,9 +182,7 @@ arguments. If ARGS is not a list, no argument will be passed." (if oneline (line-end-position) (point-max)))) (file-error nil))) -(defun cvs-string-prefix-p (str1 str2) - "Tell whether STR1 is a prefix of STR2." - (eq t (compare-strings str2 nil (length str1) str1 nil nil))) +(define-obsolete-function-alias 'cvs-string-prefix-p 'string-prefix-p "24.2") ;;;; ;;;; file names diff --git a/lisp/vc/pcvs.el b/lisp/vc/pcvs.el index 9ba65cda143..6aec24755b5 100644 --- a/lisp/vc/pcvs.el +++ b/lisp/vc/pcvs.el @@ -432,8 +432,8 @@ If non-nil, NEW means to create a new buffer no matter what." (case cvs-reuse-cvs-buffer (always t) (subdir - (or (cvs-string-prefix-p default-directory dir) - (cvs-string-prefix-p dir default-directory))) + (or (string-prefix-p default-directory dir) + (string-prefix-p dir default-directory))) (samedir (string= default-directory dir))) (return buffer))))) ;; we really have to create a new buffer: @@ -887,7 +887,7 @@ RM-MSGS if non-nil means remove messages." (eq (cvs-fileinfo->type last-fi) 'DIRCHANGE) (not (when first-dir (setq first-dir nil) t)) (or (eq rm-dirs 'all) - (not (cvs-string-prefix-p + (not (string-prefix-p (cvs-fileinfo->dir last-fi) (cvs-fileinfo->dir fi))) (and (eq type 'DIRCHANGE) (eq rm-dirs 'empty)) @@ -1839,7 +1839,7 @@ Signal an error if there is no backup file." (setq buffer-file-name (expand-file-name buffer-file-name)) (let (ret) (dolist (fi (or fis (list (cvs-create-fileinfo 'DIRCHANGE "" "." "")))) - (when (cvs-string-prefix-p + (when (string-prefix-p (expand-file-name (cvs-fileinfo->full-name fi) dir) buffer-file-name) (setq ret t))) @@ -2261,7 +2261,7 @@ With prefix argument, prompt for cvs flags." (defun cvs-dir-member-p (fileinfo dir) "Return true if FILEINFO represents a file in directory DIR." (and (not (eq (cvs-fileinfo->type fileinfo) 'DIRCHANGE)) - (cvs-string-prefix-p dir (cvs-fileinfo->dir fileinfo)))) + (string-prefix-p dir (cvs-fileinfo->dir fileinfo)))) (defun cvs-execute-single-file (fi extractor program constant-args) "Internal function for `cvs-execute-single-file-list'." @@ -2392,7 +2392,7 @@ The exact behavior is determined also by `cvs-dired-use-hook'." (set-buffer cvs-buf) ;; look for a corresponding pcl-cvs buffer (when (and (eq major-mode 'cvs-mode) - (cvs-string-prefix-p default-directory dir)) + (string-prefix-p default-directory dir)) (let ((subdir (substring dir (length default-directory)))) (set-buffer buffer) (set (make-local-variable 'cvs-buffer) cvs-buf) @@ -2423,7 +2423,7 @@ The exact behavior is determined also by `cvs-dired-use-hook'." (set-buffer cvs-buf) ;; look for a corresponding pcl-cvs buffer (when (and (eq major-mode 'cvs-mode) - (cvs-string-prefix-p default-directory file)) + (string-prefix-p default-directory file)) (let* ((file (substring file (length default-directory))) (fi (cvs-create-fileinfo (if (string= "0" version) diff --git a/lisp/vc/vc-dir.el b/lisp/vc/vc-dir.el index 33611b4eafd..4c32eea2f72 100644 --- a/lisp/vc/vc-dir.el +++ b/lisp/vc/vc-dir.el @@ -1,6 +1,6 @@ ;;; vc-dir.el --- Directory status display under VC -;; Copyright (C) 2007-2012 Free Software Foundation, Inc. +;; Copyright (C) 2007-2012 Free Software Foundation, Inc. ;; Author: Dan Nicolaescu ;; Keywords: vc tools @@ -556,7 +556,7 @@ If a prefix argument is given, move by that many lines." (let ((data (ewoc-data crt)) (dir (vc-dir-node-directory crt))) (and (vc-dir-fileinfo->directory data) - (vc-string-prefix-p dir argdir) + (string-prefix-p dir argdir) (vc-dir-fileinfo->marked data) (setq found data)))) found)) @@ -818,7 +818,7 @@ child files." data) (while (and (setq crt (ewoc-next vc-ewoc crt)) - (vc-string-prefix-p dir + (string-prefix-p dir (progn (setq data (ewoc-data crt)) (vc-dir-node-directory crt)))) @@ -846,7 +846,7 @@ If it is a file, return the corresponding cons for the file itself." data) (while (and (setq crt (ewoc-next vc-ewoc crt)) - (vc-string-prefix-p dir (progn + (string-prefix-p dir (progn (setq data (ewoc-data crt)) (vc-dir-node-directory crt)))) (unless (vc-dir-fileinfo->directory data) @@ -878,10 +878,10 @@ If it is a file, return the corresponding cons for the file itself." children dname) ;; Find DIR - (while (and crt (not (vc-string-prefix-p + (while (and crt (not (string-prefix-p dirname (vc-dir-node-directory crt)))) (setq crt (ewoc-next vc-ewoc crt))) - (while (and crt (vc-string-prefix-p + (while (and crt (string-prefix-p dirname (setq dname (vc-dir-node-directory crt)))) (let ((data (ewoc-data crt))) @@ -915,7 +915,7 @@ If it is a file, return the corresponding cons for the file itself." (if (not (derived-mode-p 'vc-dir-mode)) (push status-buf drop) (let ((ddir default-directory)) - (when (vc-string-prefix-p ddir file) + (when (string-prefix-p ddir file) (if (file-directory-p file) (progn (vc-dir-resync-directory-files file) diff --git a/lisp/vc/vc-dispatcher.el b/lisp/vc/vc-dispatcher.el index ec1b127dd19..95c15030953 100644 --- a/lisp/vc/vc-dispatcher.el +++ b/lisp/vc/vc-dispatcher.el @@ -537,13 +537,12 @@ editing!" (kill-buffer (current-buffer))))) (declare-function vc-dir-resynch-file "vc-dir" (&optional fname)) -(declare-function vc-string-prefix-p "vc" (prefix string)) (defun vc-resynch-buffers-in-directory (directory &optional keep noquery reset-vc-info) "Resync all buffers that visit files in DIRECTORY." (dolist (buffer (buffer-list)) (let ((fname (buffer-file-name buffer))) - (when (and fname (vc-string-prefix-p directory fname)) + (when (and fname (string-prefix-p directory fname)) (with-current-buffer buffer (vc-resynch-buffer fname keep noquery reset-vc-info)))))) diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index 4cbbf47c2d6..ab7e587eb79 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -1,6 +1,6 @@ ;;; vc.el --- drive a version-control system from within Emacs -;; Copyright (C) 1992-1998, 2000-2012 Free Software Foundation, Inc. +;; Copyright (C) 1992-1998, 2000-2012 Free Software Foundation, Inc. ;; Author: FSF (see below for full credits) ;; Maintainer: Andre Spiegel @@ -847,7 +847,7 @@ been updated to their corresponding values." (if (file-directory-p file) (dolist (buffer (buffer-list)) (let ((fname (buffer-file-name buffer))) - (when (and fname (vc-string-prefix-p file fname)) + (when (and fname (string-prefix-p file fname)) (push fname flist)))) (push file flist))) ,form @@ -900,7 +900,7 @@ use." (lambda (arg) (message "arg %s" arg) (and (file-directory-p arg) - (vc-string-prefix-p (expand-file-name arg) def-dir))))))) + (string-prefix-p (expand-file-name arg) def-dir))))))) (let ((default-directory repo-dir)) (vc-call-backend bk 'create-repo)) (throw 'found bk)))) @@ -2809,11 +2809,7 @@ to provide the `find-revision' operation instead." ;; These things should probably be generally available - -(defun vc-string-prefix-p (prefix string) - (let ((lpref (length prefix))) - (and (>= (length string) lpref) - (eq t (compare-strings prefix nil nil string nil lpref))))) +(define-obsolete-function-alias 'vc-string-prefix-p 'string-prefix-p "24.2") (defun vc-file-tree-walk (dirname func &rest args) "Walk recursively through DIRNAME. From 41f03f4da76827e8611267ee5283a5df8071a617 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 16 Apr 2012 20:04:53 -0400 Subject: [PATCH 039/564] Use auto-hscroll-mode rather than the alias automatic-hscrolling * lisp/mouse.el (mouse-drag-track): * lisp/speedbar.el (speedbar-frame-mode): Use auto-hscroll-mode rather than the alias automatic-hscrolling. --- lisp/ChangeLog | 6 ++++++ lisp/mouse.el | 8 ++++---- lisp/speedbar.el | 4 ++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 280bfe769a2..599a69bb9c2 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2012-04-17 Glenn Morris + + * mouse.el (mouse-drag-track): + * speedbar.el (speedbar-frame-mode): + Use auto-hscroll-mode rather than the alias automatic-hscrolling. + 2012-04-16 Leo Liu * progmodes/python.el: Trivial cleanup. diff --git a/lisp/mouse.el b/lisp/mouse.el index 2e119483797..3344bbec2cc 100644 --- a/lisp/mouse.el +++ b/lisp/mouse.el @@ -1,6 +1,6 @@ ;;; mouse.el --- window system-independent mouse support -;; Copyright (C) 1993-1995, 1999-2012 Free Software Foundation, Inc. +;; Copyright (C) 1993-1995, 1999-2012 Free Software Foundation, Inc. ;; Maintainer: FSF ;; Keywords: hardware, mouse @@ -805,8 +805,8 @@ DO-MOUSE-DRAG-REGION-POST-PROCESS should only be used by (= click-count 1))) ;; Suppress automatic hscrolling, because that is a nuisance ;; when setting point near the right fringe (but see below). - (automatic-hscrolling-saved automatic-hscrolling) - (automatic-hscrolling nil) + (auto-hscroll-mode-saved auto-hscroll-mode) + (auto-hscroll-mode nil) event end end-point) (setq mouse-selection-click-count click-count) @@ -838,7 +838,7 @@ DO-MOUSE-DRAG-REGION-POST-PROCESS should only be used by ;; Automatic hscrolling did not occur during the call to ;; `read-event'; but if the user subsequently drags the ;; mouse, go ahead and hscroll. - (let ((automatic-hscrolling automatic-hscrolling-saved)) + (let ((auto-hscroll-mode auto-hscroll-mode-saved)) (redisplay)) (setq end (event-end event) end-point (posn-point end)) diff --git a/lisp/speedbar.el b/lisp/speedbar.el index bb1debb4552..9065d9ed131 100644 --- a/lisp/speedbar.el +++ b/lisp/speedbar.el @@ -1,6 +1,6 @@ ;;; speedbar --- quick access to files and tags in a frame -;; Copyright (C) 1996-2012 Free Software Foundation, Inc. +;; Copyright (C) 1996-2012 Free Software Foundation, Inc. ;; Author: Eric M. Ludlam ;; Keywords: file, tags, tools @@ -1022,7 +1022,7 @@ supported at a time. (set (make-local-variable 'dframe-delete-frame-function) 'speedbar-handle-delete-frame) ;; hscroll - (set (make-local-variable 'automatic-hscrolling) nil) ; Emacs 21 + (set (make-local-variable 'auto-hscroll-mode) nil) ;; reset the selection variable (setq speedbar-last-selected-file nil)) From 316411f0f20d409ec24ee892393f15701b05de1c Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Mon, 16 Apr 2012 21:29:58 -0400 Subject: [PATCH 040/564] Add functions to get system user names, group names Note from committer: I removed the part that adds grp.h to AC_CHECK_HEADERS and +#ifdef HAVE_GRP_H #include +#endif to src/dired.c, because the latter has unconditionally included grp.h since 2003, and uses it eg in stat_gname. * configure.in (AC_CHECK_FUNCS): Add getpwent, endpwent, getgrent, endgrent. * src/dired.c (Fsystem_users, Fsystem_groups): New functions. (syms_of_dired): Add them. Fixes: debbugs:7900 --- ChangeLog | 5 +++++ configure.in | 1 + src/ChangeLog | 5 +++++ src/dired.c | 41 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 52 insertions(+) diff --git a/ChangeLog b/ChangeLog index 8d551e06f85..a7da9e1ad5b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2012-04-17 Dmitry Antipov + + * configure.in (AC_CHECK_FUNCS): + Add getpwent, endpwent, getgrent, endgrent. (Bug#7900) + 2012-04-16 Glenn Morris * configure.in (NS_HAVE_NSINTEGER): Remove unnecessary variable. diff --git a/configure.in b/configure.in index fd1327ed2a9..c9f0cd7688c 100644 --- a/configure.in +++ b/configure.in @@ -2736,6 +2736,7 @@ __fpending mblen mbrlen mbsinit strsignal setitimer ualarm \ sendto recvfrom getsockopt setsockopt getsockname getpeername \ gai_strerror mkstemp getline getdelim mremap fsync sync \ difftime mempcpy mblen mbrlen posix_memalign \ +getpwent endpwent getgrent endgrent \ cfmakeraw cfsetspeed copysign __executable_start) dnl Cannot use AC_CHECK_FUNCS diff --git a/src/ChangeLog b/src/ChangeLog index e321a70d4c3..bcb2edee96f 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2012-04-17 Dmitry Antipov + + * dired.c (Fsystem_users, Fsystem_groups): New functions. (Bug#7900) + (syms_of_dired): Add them. + 2012-04-16 Paul Eggert Fix minor alloc.c problems found by static checking. diff --git a/src/dired.c b/src/dired.c index 9b0f94a0760..2c634b9ca6f 100644 --- a/src/dired.c +++ b/src/dired.c @@ -1015,6 +1015,45 @@ Comparison is in lexicographic order and case is significant. */) return Fstring_lessp (Fcar (f1), Fcar (f2)); } + +DEFUN ("system-users", Fsystem_users, Ssystem_users, 0, 0, 0, + doc: /* Return a list of user names currently registered in the system. +The value may be nil if not supported on this platform. */) + (void) +{ + Lisp_Object users = Qnil; +#if defined(HAVE_GETPWENT) && defined(HAVE_ENDPWENT) + struct passwd *pw; + + while ((pw = getpwent ())) + users = Fcons (DECODE_SYSTEM (build_string (pw->pw_name)), users); + + endpwent (); +#endif + if (EQ (users, Qnil)) + /* At least current user is always known. */ + users = Fcons (Vuser_real_login_name, Qnil); + return users; +} + +DEFUN ("system-groups", Fsystem_groups, Ssystem_groups, 0, 0, 0, + doc: /* Return a list of user group names currently registered in the system. +The value may be nil if not supported on this platform. */) + (void) +{ + Lisp_Object groups = Qnil; +#if defined(HAVE_GETGRENT) && defined(HAVE_ENDGRENT) + struct group *gr; + int length; + + while ((gr = getgrent ())) + groups = Fcons (DECODE_SYSTEM (build_string (gr->gr_name)), groups); + + endgrent (); +#endif + return groups; +} + void syms_of_dired (void) { @@ -1032,6 +1071,8 @@ syms_of_dired (void) defsubr (&Sfile_name_all_completions); defsubr (&Sfile_attributes); defsubr (&Sfile_attributes_lessp); + defsubr (&Ssystem_users); + defsubr (&Ssystem_groups); DEFVAR_LISP ("completion-ignored-extensions", Vcompletion_ignored_extensions, doc: /* Completion ignores file names ending in any string in this list. From e5a36063440039e18fe6db354693baf13ee7709c Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 16 Apr 2012 21:35:15 -0400 Subject: [PATCH 041/564] * src/dired.c (Fsystem_users): Doc fix. * etc/NEWS: Mention system-users, system-groups. --- etc/NEWS | 3 +++ src/ChangeLog | 4 ++++ src/dired.c | 3 ++- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/etc/NEWS b/etc/NEWS index 03ec5405803..2ac4b187381 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -32,6 +32,9 @@ been adding them there, put them somewhere else, eg site-lisp. * Changes in Emacs 24.2 +** New functions `system-users', `system-groups' return lists of the user +name, group names known to the system (where possible). + ** If your Emacs was built from a bzr checkout, the new variable `emacs-bzr-version' contains information about which bzr revision was used. diff --git a/src/ChangeLog b/src/ChangeLog index bcb2edee96f..8c0dcc9c044 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2012-04-17 Glenn Morris + + * dired.c (Fsystem_users): Doc fix. + 2012-04-17 Dmitry Antipov * dired.c (Fsystem_users, Fsystem_groups): New functions. (Bug#7900) diff --git a/src/dired.c b/src/dired.c index 2c634b9ca6f..eeae59d2801 100644 --- a/src/dired.c +++ b/src/dired.c @@ -1018,7 +1018,8 @@ Comparison is in lexicographic order and case is significant. */) DEFUN ("system-users", Fsystem_users, Ssystem_users, 0, 0, 0, doc: /* Return a list of user names currently registered in the system. -The value may be nil if not supported on this platform. */) +If we don't know how to determine that on this platform, just +return a list with one element, taken from `user-real-login-name'. */) (void) { Lisp_Object users = Qnil; From 30009afd5b72606149d13eba52cf1a3ab96e3cc5 Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Mon, 16 Apr 2012 21:49:40 -0400 Subject: [PATCH 042/564] Add user, group name completion to dired Note from committer: I modified the original patch, by adding the new collection argument at the end of the argument list rather than in the middle. * dired-aux.el (dired-mark-read-string): Offer optional completion. (dired-do-chxxx): Complete chown, chgrp over users, groups. Fixes: debbugs:7900 --- lisp/ChangeLog | 5 +++++ lisp/dired-aux.el | 12 ++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 599a69bb9c2..31caf9b6a34 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-04-17 Dmitry Antipov + + * dired-aux.el (dired-mark-read-string): Offer optional completion. + (dired-do-chxxx): Complete chown, chgrp over users, groups. (Bug#7900) + 2012-04-17 Glenn Morris * mouse.el (mouse-drag-track): diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el index 0795b0175a2..97ff0cbd07e 100644 --- a/lisp/dired-aux.el +++ b/lisp/dired-aux.el @@ -245,7 +245,11 @@ List has a form of (file-name full-file-name (attribute-list))." " (default now): " ": "))) (new-attribute (dired-mark-read-string prompt nil op-symbol - arg files default)) + arg files default + (cond ((eq op-symbol 'chown) + (system-users)) + ((eq op-symbol 'chgrp) + (system-groups))))) (operation (concat program " " new-attribute)) failures) (setq failures @@ -385,7 +389,7 @@ Uses the shell command coming from variables `lpr-command' and (dired-run-shell-command (dired-shell-stuff-it command file-list nil)))) (defun dired-mark-read-string (prompt initial op-symbol arg files - &optional default-value) + &optional default-value collection) "Read args for a Dired marked-files command, prompting with PROMPT. Return the user input (a string). @@ -399,9 +403,9 @@ of such values, available via history commands. Note that if the user enters empty input, this function returns the empty string, not DEFAULT-VALUE." (dired-mark-pop-up nil op-symbol files - 'read-from-minibuffer + 'completing-read (format prompt (dired-mark-prompt arg files)) - initial nil nil nil default-value)) + collection nil nil initial nil default-value nil)) ;;; Cleaning a directory: flagging some backups for deletion. From 12e10e61a507c695f6b21f19accb6d6bb7e7e156 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 16 Apr 2012 21:52:00 -0400 Subject: [PATCH 043/564] * lisp/dired-aux.el (dired-mark-read-string): Doc fix. --- lisp/ChangeLog | 4 ++++ lisp/dired-aux.el | 5 ++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 31caf9b6a34..4a9aee338ae 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-04-17 Glenn Morris + + * dired-aux.el (dired-mark-read-string): Doc fix. + 2012-04-17 Dmitry Antipov * dired-aux.el (dired-mark-read-string): Offer optional completion. diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el index 97ff0cbd07e..8a499c47464 100644 --- a/lisp/dired-aux.el +++ b/lisp/dired-aux.el @@ -401,7 +401,10 @@ FILES should be a list of file names. DEFAULT-VALUE, if non-nil, should be a \"standard\" value or list of such values, available via history commands. Note that if the user enters empty input, this function returns the empty string, -not DEFAULT-VALUE." +not DEFAULT-VALUE. + +Optional argument COLLECTION is a collection of possible completions, +suitable for use by `completing-read'." (dired-mark-pop-up nil op-symbol files 'completing-read (format prompt (dired-mark-prompt arg files)) From fc72b15c777af496e9dcbc240f424135379ba955 Mon Sep 17 00:00:00 2001 From: Peter Oliver Date: Mon, 16 Apr 2012 19:46:22 -0700 Subject: [PATCH 044/564] Add perl-indent-parens-as-block option (tiny change) * lisp/progmodes/perl-mode.el (perl-indent-parens-as-block): New option. (perl-calculate-indent): Respect it. Fixes: debbugs:11118 --- etc/NEWS | 5 ++++- lisp/ChangeLog | 6 ++++++ lisp/progmodes/perl-mode.el | 15 +++++++++++++-- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 2ac4b187381..5c2bb83e2a3 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -70,7 +70,10 @@ channel keys found, if any. ** The `server-auth-key' variable can be used to set a permanent shared key for Emacs Server. - + +** In Perl mode, new option `perl-indent-parens-as-block' causes non-block +closing brackets to be aligned with the line of the opening bracket. + ** Obsolete packages: *** mailpost.el diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 4a9aee338ae..90f48d2ab1e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2012-04-17 Peter Oliver (tiny change) + + * progmodes/perl-mode.el (perl-indent-parens-as-block): + New option (bug#11118). + (perl-calculate-indent): Respect it. + 2012-04-17 Glenn Morris * dired-aux.el (dired-mark-read-string): Doc fix. diff --git a/lisp/progmodes/perl-mode.el b/lisp/progmodes/perl-mode.el index cfca438a44b..9df9943cc00 100644 --- a/lisp/progmodes/perl-mode.el +++ b/lisp/progmodes/perl-mode.el @@ -506,6 +506,14 @@ If nil, continued arguments are aligned with the first argument." :type '(choice integer (const nil)) :group 'perl) +(defcustom perl-indent-parens-as-block nil + "Non-nil means that non-block ()-, {}- and []-groups are indented as blocks. +The closing bracket is aligned with the line of the opening bracket, +not the contents of the brackets." + :version "24.2" + :type 'boolean + :group 'perl) + (defcustom perl-tab-always-indent tab-always-indent "Non-nil means TAB in Perl mode always indents the current line. Otherwise it inserts a tab character if you type it past the first @@ -848,7 +856,8 @@ Optional argument PARSE-START should be the position of `beginning-of-defun'." (cond ((nth 3 state) 'noindent) ; In a quoted string? ((null containing-sexp) ; Line is at top level. (skip-chars-forward " \t\f") - (if (= (following-char) ?{) + (if (memq (following-char) + (if perl-indent-parens-as-block '(?\{ ?\( ?\[) '(?\{))) 0 ; move to beginning of line if it starts a function body ;; indent a little if this is a continuation line (perl-backward-to-noncomment) @@ -892,7 +901,9 @@ Optional argument PARSE-START should be the position of `beginning-of-defun'." 0 perl-continued-statement-offset) (current-column) (if (save-excursion (goto-char indent-point) - (looking-at "[ \t]*{")) + (looking-at + (if perl-indent-parens-as-block + "[ \t]*[{(\[]" "[ \t]*{"))) perl-continued-brace-offset 0))) ;; This line starts a new statement. ;; Position at last unclosed open. From 25a9a140faefdf1756b9bff1e879311f61b0de77 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 16 Apr 2012 20:08:05 -0700 Subject: [PATCH 045/564] NEWS placeholder --- etc/NEWS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/etc/NEWS b/etc/NEWS index 5c2bb83e2a3..0d8c145b362 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -74,6 +74,8 @@ shared key for Emacs Server. ** In Perl mode, new option `perl-indent-parens-as-block' causes non-block closing brackets to be aligned with the line of the opening bracket. +** FIXME something happened to ses.el, 2012-04-17. + ** Obsolete packages: *** mailpost.el From 21ffa320b1ff22f00a927261348517acd37ab790 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Tue, 17 Apr 2012 13:58:34 +0800 Subject: [PATCH 046/564] Improve description of :advertised-binding in Lisp manual. * doc/lispref/keymaps.texi (Menu Bar): Move most of the :advertised-binding description to help.texi. * doc/lispref/help.texi (Keys in Documentation): Mention :advertised-binding. --- doc/lispref/ChangeLog | 7 +++++++ doc/lispref/help.texi | 15 +++++++++++++++ doc/lispref/keymaps.texi | 13 ++----------- 3 files changed, 24 insertions(+), 11 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index d20c4d19c3a..16a0696b9f9 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,10 @@ +2012-04-17 Chong Yidong + + * help.texi (Keys in Documentation): Mention :advertised-binding. + + * keymaps.texi (Menu Bar): Move most of the :advertised-binding + description to help.texi. + 2012-04-16 Glenn Morris * processes.texi (Process Information, Input to Processes) diff --git a/doc/lispref/help.texi b/doc/lispref/help.texi index 2575f5e5bd6..627197f09f1 100644 --- a/doc/lispref/help.texi +++ b/doc/lispref/help.texi @@ -348,6 +348,21 @@ This function scans @var{string} for the above special sequences and replaces them by what they stand for, returning the result as a string. This permits display of documentation that refers accurately to the user's own customized key bindings. + +@cindex advertised binding +If a command has multiple bindings, this function normally uses the +first one it finds. You can specify one particular key binding by +assigning an @code{:advertised-binding} symbol property to the +command, like this: + +@smallexample +(put 'undo :advertised-binding [?\C-/]) +@end smallexample + +@noindent +The @code{:advertised-binding} property also affects the binding shown +in menu items (@pxref{Menu Bar}). The property is ignored if it +specifies a key binding that the command does not actually have. @end defun Here are examples of the special sequences: diff --git a/doc/lispref/keymaps.texi b/doc/lispref/keymaps.texi index 65666217e16..f1d4690d470 100644 --- a/doc/lispref/keymaps.texi +++ b/doc/lispref/keymaps.texi @@ -2549,17 +2549,8 @@ the same command (if such a key binding exists). This serves as a convenient hint for users who do not know the key binding. If a command has multiple bindings, Emacs normally displays the first one it finds. You can specify one particular key binding by assigning an -@code{:advertised-binding} symbol property to the command. For -instance, the following tells Emacs to show @kbd{C-/} for the -@code{undo} menu item: - -@smallexample -(put 'undo :advertised-binding [?\C-/]) -@end smallexample - -@noindent -If the @code{:advertised-binding} property specifies a key binding -that the command does not actually have, it is ignored. +@code{:advertised-binding} symbol property to the command. @xref{Keys +in Documentation}. @node Tool Bar @subsection Tool bars From d1721cc7c2647140e51713cbba28437046008551 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Apr 2012 06:17:40 -0400 Subject: [PATCH 047/564] Auto-commit of generated files. --- autogen/config.in | 12 ++++++++++++ autogen/configure | 22 +++++----------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/autogen/config.in b/autogen/config.in index e93bd7f325c..c64b048ade5 100644 --- a/autogen/config.in +++ b/autogen/config.in @@ -203,6 +203,12 @@ along with GNU Emacs. If not, see . */ /* Define to 1 if you have the 'dup2' function. */ #undef HAVE_DUP2 +/* Define to 1 if you have the `endgrent' function. */ +#undef HAVE_ENDGRENT + +/* Define to 1 if you have the `endpwent' function. */ +#undef HAVE_ENDPWENT + /* Define to 1 if you have the `euidaccess' function. */ #undef HAVE_EUIDACCESS @@ -254,6 +260,9 @@ along with GNU Emacs. If not, see . */ /* Define to 1 if you have the `getdomainname' function. */ #undef HAVE_GETDOMAINNAME +/* Define to 1 if you have the `getgrent' function. */ +#undef HAVE_GETGRENT + /* Define to 1 if you have the `gethostname' function. */ #undef HAVE_GETHOSTNAME @@ -278,6 +287,9 @@ along with GNU Emacs. If not, see . */ /* Define to 1 if you have the `getpt' function. */ #undef HAVE_GETPT +/* Define to 1 if you have the `getpwent' function. */ +#undef HAVE_GETPWENT + /* Define to 1 if you have the `getrlimit' function. */ #undef HAVE_GETRLIMIT diff --git a/autogen/configure b/autogen/configure index de24a151fca..dd889483229 100755 --- a/autogen/configure +++ b/autogen/configure @@ -9656,15 +9656,6 @@ else window_system=x11 fi -## Workaround for bug in autoconf <= 2.62. -## http://lists.gnu.org/archive/html/emacs-devel/2008-04/msg01551.html -## No need to do anything special for these standard directories. -if test -n "${x_libraries}" && test x"${x_libraries}" != xNONE; then - - x_libraries=`echo :${x_libraries}: | sed -e 's|:/usr/lib64:|:|g' -e 's|:/lib64:|:|g' -e 's|^:||' -e 's|:$||'` - -fi - LD_SWITCH_X_SITE_AUX= LD_SWITCH_X_SITE_AUX_RPATH= if test "${x_libraries}" != NONE; then @@ -9803,7 +9794,6 @@ else fi - NS_HAVE_NSINTEGER=yes cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -9821,8 +9811,10 @@ else ns_have_nsinteger=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if test $ns_have_nsinteger = no; then - NS_HAVE_NSINTEGER=no + if test $ns_have_nsinteger = yes; then + +$as_echo "#define NS_HAVE_NSINTEGER 1" >>confdefs.h + fi fi @@ -13434,11 +13426,6 @@ $as_echo "#define NS_IMPL_GNUSTEP 1" >>confdefs.h ## Extra CFLAGS applied to src/*.m files. GNU_OBJC_CFLAGS="$GNU_OBJC_CFLAGS -fgnu-runtime -Wno-import -fconstant-string-class=NSConstantString -DGNUSTEP_BASE_LIBRARY=1 -DGNU_GUI_LIBRARY=1 -DGNU_RUNTIME=1 -DGSWARN -DGSDIAGNOSE" fi - if test "${NS_HAVE_NSINTEGER}" = "yes"; then - -$as_echo "#define NS_HAVE_NSINTEGER 1" >>confdefs.h - - fi # We also have mouse menus. HAVE_MENUS=yes OTHER_FILES=ns-app @@ -13967,6 +13954,7 @@ __fpending mblen mbrlen mbsinit strsignal setitimer ualarm \ sendto recvfrom getsockopt setsockopt getsockname getpeername \ gai_strerror mkstemp getline getdelim mremap fsync sync \ difftime mempcpy mblen mbrlen posix_memalign \ +getpwent endpwent getgrent endgrent \ cfmakeraw cfsetspeed copysign __executable_start do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` From d96a4f88299679f64c49f44d94fd61d0548b351e Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Apr 2012 06:21:15 -0400 Subject: [PATCH 048/564] Auto-commit of loaddefs files. --- lisp/dired.el | 2 +- lisp/emacs-lisp/cl-loaddefs.el | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lisp/dired.el b/lisp/dired.el index d322752e15f..77fe9cb7614 100644 --- a/lisp/dired.el +++ b/lisp/dired.el @@ -3736,7 +3736,7 @@ Ask means pop up a menu for the user to select one of copy, move or link." ;;;;;; dired-run-shell-command dired-do-shell-command dired-do-async-shell-command ;;;;;; dired-clean-directory dired-do-print dired-do-touch dired-do-chown ;;;;;; dired-do-chgrp dired-do-chmod dired-compare-directories dired-backup-diff -;;;;;; dired-diff) "dired-aux" "dired-aux.el" "58d623eb8e68e472e6164a1bcae83360") +;;;;;; dired-diff) "dired-aux" "dired-aux.el" "de7e4c64718c8ba8438a6397a460bf23") ;;; Generated autoloads from dired-aux.el (autoload 'dired-diff "dired-aux" "\ diff --git a/lisp/emacs-lisp/cl-loaddefs.el b/lisp/emacs-lisp/cl-loaddefs.el index 5bb86628bb8..9e0099bb649 100644 --- a/lisp/emacs-lisp/cl-loaddefs.el +++ b/lisp/emacs-lisp/cl-loaddefs.el @@ -10,7 +10,7 @@ ;;;;;; ceiling* floor* isqrt lcm gcd cl-progv-before cl-set-frame-visible-p ;;;;;; cl-map-overlays cl-map-intervals cl-map-keymap-recursively ;;;;;; notevery notany every some mapcon mapcan mapl maplist map -;;;;;; cl-mapcar-many equalp coerce) "cl-extra" "cl-extra.el" "c172dda6770ce18b556561481bfefbb2") +;;;;;; cl-mapcar-many equalp coerce) "cl-extra" "cl-extra.el" "5a8a7f7ec2dc453113b8cbda577f2acb") ;;; Generated autoloads from cl-extra.el (autoload 'coerce "cl-extra" "\ From 2c070447bfad37262d292fe130db7db22da822fb Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Tue, 17 Apr 2012 23:07:21 +0800 Subject: [PATCH 049/564] * emacs-lisp/tabulated-list.el (tabulated-list-print): Fix typos. --- lisp/ChangeLog | 4 ++++ lisp/emacs-lisp/tabulated-list.el | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 06a794a79fb..026b99872f0 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-04-17 Chong Yidong + + * emacs-lisp/tabulated-list.el (tabulated-list-print): Fix typos. + 2012-04-16 Alan Mackenzie Ensure searching for keywords is case sensitive. diff --git a/lisp/emacs-lisp/tabulated-list.el b/lisp/emacs-lisp/tabulated-list.el index f17b12da6a0..9439fba2b86 100644 --- a/lisp/emacs-lisp/tabulated-list.el +++ b/lisp/emacs-lisp/tabulated-list.el @@ -215,7 +215,7 @@ buffer and inserts the entries with `tabulated-list-printer'. Optional argument REMEMBER-POS, if non-nil, means to move point to the entry with the same ID element as the current line." (let ((inhibit-read-only t) - (entries (if (functionp 'tabulated-list-entries) + (entries (if (functionp tabulated-list-entries) (funcall tabulated-list-entries) tabulated-list-entries)) entry-id saved-pt saved-col) @@ -246,7 +246,7 @@ to the entry with the same ID element as the current line." (setq entries (sort entries sorter)) (if (cdr tabulated-list-sort-key) (setq entries (nreverse entries))) - (unless (functionp 'tabulated-list-entries) + (unless (functionp tabulated-list-entries) (setq tabulated-list-entries entries))))) ;; Print the resulting list. (dolist (elt entries) From 20a68157367994c17c0e5adae02568ea4683d13d Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Tue, 17 Apr 2012 18:25:17 +0300 Subject: [PATCH 050/564] Fix bug #11261 with cursor movement in a continued line when header line is present. src/xdisp.c (string_buffer_position_lim): Limit starting position to BEGV. (set_cursor_from_row): If called for a mode-line or header-line row, return zero immediately. (try_cursor_movement): If inside continuation line, don't back up farther than the first row after the header line, if any. Don't consider the header-line row as "partially visible", even if MATRIX_ROW_PARTIALLY_VISIBLE_P returns non-zero. --- src/ChangeLog | 11 +++++++++++ src/xdisp.c | 21 +++++++++++++++++---- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 73c67125257..42c582994cf 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,14 @@ +2012-04-17 Eli Zaretskii + + * xdisp.c (string_buffer_position_lim): Limit starting position to + BEGV. + (set_cursor_from_row): If called for a mode-line or header-line + row, return zero immediately. + (try_cursor_movement): If inside continuation line, don't back up + farther than the first row after the header line, if any. Don't + consider the header-line row as "partially visible", even if + MATRIX_ROW_PARTIALLY_VISIBLE_P returns non-zero. (Bug#11261) + 2012-04-13 Atsuo Ohki (tiny change) * lread.c (lisp_file_lexically_bound_p): Fix hang at ";-*-\n" (bug#11238). diff --git a/src/xdisp.c b/src/xdisp.c index 61b0b9df5e1..9881adfa34d 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -4979,7 +4979,7 @@ string_buffer_position_lim (Lisp_Object string, Lisp_Object limit, prop, pos; int found = 0; - pos = make_number (from); + pos = make_number (max (from, BEGV)); if (!back_p) /* looking forward */ { @@ -13690,6 +13690,13 @@ set_cursor_from_row (struct window *w, struct glyph_row *row, comes from a text property, not from an overlay. */ int string_from_text_prop = 0; + /* Don't even try doing anything if called for a mode-line or + header-line row, since the rest of the code isn't prepared to + deal with such calamities. */ + xassert (!row->mode_line_p); + if (row->mode_line_p) + return 0; + /* Skip over glyphs not having an object at the start and the end of the row. These are special glyphs like truncation marks on terminal frames. */ @@ -14906,6 +14913,8 @@ try_cursor_movement (Lisp_Object window, struct text_pos startp, int *scroll_ste else if (rc != CURSOR_MOVEMENT_SUCCESS && !NILP (BVAR (XBUFFER (w->buffer), bidi_display_reordering))) { + struct glyph_row *row1; + /* If rows are bidi-reordered and point moved, back up until we find a row that does not belong to a continuation line. This is because we must consider @@ -14916,24 +14925,28 @@ try_cursor_movement (Lisp_Object window, struct text_pos startp, int *scroll_ste /* FIXME: Revisit this when glyph ``spilling'' in continuation lines' rows is implemented for bidi-reordered rows. */ - while (MATRIX_ROW_CONTINUATION_LINE_P (row)) + for (row1 = MATRIX_FIRST_TEXT_ROW (w->current_matrix); + MATRIX_ROW_CONTINUATION_LINE_P (row); + --row) { /* If we hit the beginning of the displayed portion without finding the first row of a continued line, give up. */ - if (row <= w->current_matrix->rows) + if (row <= row1) { rc = CURSOR_MOVEMENT_MUST_SCROLL; break; } xassert (row->enabled_p); - --row; } } if (must_scroll) ; else if (rc != CURSOR_MOVEMENT_SUCCESS && MATRIX_ROW_PARTIALLY_VISIBLE_P (w, row) + /* Make sure this isn't a header line by any chance, since + then MATRIX_ROW_PARTIALLY_VISIBLE_P might yield non-zero. */ + && !row->mode_line_p && make_cursor_line_fully_visible_p) { if (PT == MATRIX_ROW_END_CHARPOS (row) From 8eae3a58fc73f0f89a4a7a3bc1313a2464fbc920 Mon Sep 17 00:00:00 2001 From: Juanma Barranquero Date: Tue, 17 Apr 2012 18:24:44 +0200 Subject: [PATCH 051/564] lisp/subr.el: Update comment. --- lisp/subr.el | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lisp/subr.el b/lisp/subr.el index 497809a23e8..87b98988525 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -1888,8 +1888,7 @@ Used from `delayed-warnings-hook' (which see)." (push warning collapsed))) (setq delayed-warnings-list (nreverse collapsed)))) -;; At present this is only really useful for Emacs internals. -;; Document in the lispref if it becomes generally useful. +;; At present this is only used for Emacs internals. ;; Ref http://lists.gnu.org/archive/html/emacs-devel/2012-02/msg00085.html (defvar delayed-warnings-hook '(collapse-delayed-warnings display-delayed-warnings) From 197b6f3c605872bfeb7b2024d255142d8f579021 Mon Sep 17 00:00:00 2001 From: Juanma Barranquero Date: Tue, 17 Apr 2012 19:05:22 +0200 Subject: [PATCH 052/564] lisp/server.el (server-ensure-safe-dir): Simplify. --- lisp/ChangeLog | 4 ++++ lisp/server.el | 42 +++++++++++++++++++----------------------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 992fee42c28..d9aadbe0f22 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-04-17 Juanma Barranquero + + * server.el (server-ensure-safe-dir): Simplify. + 2012-04-17 Stefan Monnier * emacs-lisp/smie.el: Provide smarter auto-filling. diff --git a/lisp/server.el b/lisp/server.el index 058bc55d87d..c82a639eadf 100644 --- a/lisp/server.el +++ b/lisp/server.el @@ -520,31 +520,27 @@ Creates the directory if necessary and makes sure: ;; Check that it's safe for use. (let* ((uid (nth 2 attrs)) (w32 (eq system-type 'windows-nt)) - (safe (catch :safe - (unless (eq t (car attrs)) ; is a dir? - (throw :safe nil)) - (when (and w32 (zerop uid)) ; on FAT32? - (display-warning - 'server - (format "Using `%s' to store Emacs-server authentication files. + (safe (cond + ((not (eq t (car attrs))) nil) ; is a dir? + ((and w32 (zerop uid)) ; on FAT32? + (display-warning + 'server + (format "Using `%s' to store Emacs-server authentication files. Directories on FAT32 filesystems are NOT secure against tampering. See variable `server-auth-dir' for details." - (file-name-as-directory dir)) - :warning) - (throw :safe t)) - (unless (or (= uid (user-uid)) ; is the dir ours? - (and w32 - ;; Files created on Windows by - ;; Administrator (RID=500) have - ;; the Administrators (RID=544) - ;; group recorded as the owner. - (= uid 544) (= (user-uid) 500))) - (throw :safe nil)) - (when w32 ; on NTFS? - (throw :safe t)) - (unless (zerop (logand ?\077 (file-modes dir))) - (throw :safe nil)) - t))) + (file-name-as-directory dir)) + :warning) + t) + ((and (/= uid (user-uid)) ; is the dir ours? + (or (not w32) + ;; Files created on Windows by Administrator + ;; (RID=500) have the Administrators (RID=544) + ;; group recorded as the owner. + (/= uid 544) (/= (user-uid) 500))) + nil) + (w32 t) ; on NTFS? + (t ; else, check permissions + (zerop (logand ?\077 (file-modes dir))))))) (unless safe (error "The directory `%s' is unsafe" dir))))) From 67546201c09718dee616cda362fef96f6f31996d Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Tue, 17 Apr 2012 14:40:07 -0700 Subject: [PATCH 053/564] INSTALL: Mention --enable-gcc-warnings. --- ChangeLog | 1 + INSTALL | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/ChangeLog b/ChangeLog index 6020d157797..18633199008 100644 --- a/ChangeLog +++ b/ChangeLog @@ -12,6 +12,7 @@ (PKG_CHECK_MODULES, C_SWITCH_X_SITE): Use -isystem rather than -I, when including system files with GCC. * etc/NEWS: Mention --enable-gcc-warnings. + * INSTALL (DETAILED BUILDING AND INSTALLATION): Likewise. * lib/Makefile.am (AM_CFLAGS): New macro. * m4/manywarnings.m4, m4/warnings.m4: New files, from gnulib. diff --git a/INSTALL b/INSTALL index 1e0844879cb..1df686ae636 100644 --- a/INSTALL +++ b/INSTALL @@ -317,6 +317,12 @@ Use --with-wide-int to implement Emacs values with the type 'long long', even on hosts where a narrower type would do. With this option, on a typical 32-bit host, Emacs integers have 62 bits instead of 30. +Use --enable-gcc-warnings to enable compile-time checks that warn +about possibly-questionable C code. This is intended for developers +and is useful with GNU-compatible compilers. On a recent GNU system +there should be no warnings; on older and on non-GNU systems the +generated warnings may still be useful. + The `--prefix=PREFIXDIR' option specifies where the installation process should put emacs and its data files. This defaults to `/usr/local'. - Emacs (and the other utilities users run) go in PREFIXDIR/bin From aba027e80c6d2776d7ec35747308367351871e98 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Tue, 17 Apr 2012 15:56:06 -0700 Subject: [PATCH 054/564] * dired.c (Fsystem_groups): Remove unused local. --- src/ChangeLog | 4 ++++ src/dired.c | 5 ++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 8c0dcc9c044..2e3142b7015 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2012-04-17 Paul Eggert + + * dired.c (Fsystem_groups): Remove unused local. + 2012-04-17 Glenn Morris * dired.c (Fsystem_users): Doc fix. diff --git a/src/dired.c b/src/dired.c index eeae59d2801..367bcb4031d 100644 --- a/src/dired.c +++ b/src/dired.c @@ -1023,7 +1023,7 @@ return a list with one element, taken from `user-real-login-name'. */) (void) { Lisp_Object users = Qnil; -#if defined(HAVE_GETPWENT) && defined(HAVE_ENDPWENT) +#if defined HAVE_GETPWENT && defined HAVE_ENDPWENT struct passwd *pw; while ((pw = getpwent ())) @@ -1043,9 +1043,8 @@ The value may be nil if not supported on this platform. */) (void) { Lisp_Object groups = Qnil; -#if defined(HAVE_GETGRENT) && defined(HAVE_ENDGRENT) +#if defined HAVE_GETGRENT && defined HAVE_ENDGRENT struct group *gr; - int length; while ((gr = getgrent ())) groups = Fcons (DECODE_SYSTEM (build_string (gr->gr_name)), groups); From 6c91c9f0a586defcb347672d692768b62d8e84c6 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Tue, 17 Apr 2012 16:06:33 -0700 Subject: [PATCH 055/564] Fix ChangeLog typo. --- lib-src/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index 161d71381c0..d8d0fc877b9 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog @@ -13,6 +13,7 @@ . 2012-04-14 Juanma Barranquero + * emacsclient.c (decode_options) [WINDOWSNT]: Call ttyname instead of passing its address (typo in 2011-12-04T17:13:01Z!lekktu@gmail.com). From 5f6530ea79767d596c1950a94d63415475e5b1df Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Tue, 17 Apr 2012 19:23:20 -0400 Subject: [PATCH 056/564] Fix logic for returning to and yanking from Rmail buffer. --- lisp/ChangeLog | 14 ++++++++++++++ lisp/mail/rmail.el | 23 ++++++++++++++++------- lisp/mail/sendmail.el | 7 +++++-- 3 files changed, 35 insertions(+), 9 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index d9aadbe0f22..75b1c7799c4 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,17 @@ +2012-04-17 Richard Stallman + + * mail/rmail.el (rmail-start-mail): + Pass (rmail-mail-return...) for the return-action. + Pass (rmail-yank-current-message...) for the yank-action. + (rmail-yank-current-message): New function. + (rmail-mail): Pass the Rmail buffer, not view buffer, for replybuffer. + (rmail-reply): Likewise. + (rmail-forward): Pass the Rmail buffer, not nil, for replybuffer. + + * mail/sendmail.el (mail-bury): Choose the first rmail-mode + buffer, not the last. Reject temp buffers. Use the rmail-mode + buffer, not newbuf. + 2012-04-17 Juanma Barranquero * server.el (server-ensure-safe-dir): Simplify. diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el index 093050229c4..12d1e0c6c36 100644 --- a/lisp/mail/rmail.el +++ b/lisp/mail/rmail.el @@ -3560,6 +3560,16 @@ does not pop any summary buffer." ;;;; *** Rmail Mailing Commands *** +(defun rmail-yank-current-message (buffer) + "Yank into the current buffer the current message of Rmail buffer BUFFER. +If BUFFER is swapped with its message viewer buffer, yank out of BUFFER. +If BUFFER is not swapped, yank out of its message viewer buffer." + (with-current-buffer buffer + (unless (rmail-buffers-swapped-p) + (setq buffer rmail-view-buffer))) + (insert-buffer buffer)) + + (defun rmail-start-mail (&optional noerase to subject in-reply-to cc replybuffer sendactions same-window other-headers) @@ -3571,7 +3581,8 @@ does not pop any summary buffer." (if replybuffer ;; The function used here must behave like insert-buffer wrt ;; point and mark (see doc of sc-cite-original). - (setq yank-action (list 'insert-buffer replybuffer))) + (setq yank-action + `(rmail-yank-current-message ,replybuffer))) (push (cons "cc" cc) other-headers) (push (cons "in-reply-to" in-reply-to) other-headers) (setq other-headers @@ -3587,7 +3598,7 @@ does not pop any summary buffer." (prog1 (compose-mail to subject other-headers noerase switch-function yank-action sendactions - `(rmail-mail-return ,replybuffer)) + (if replybuffer `(rmail-mail-return ,replybuffer))) (if (eq switch-function 'switch-to-buffer-other-frame) ;; This is not a standard frame parameter; nothing except ;; sendmail.el looks at it. @@ -3644,7 +3655,7 @@ to switch to." While composing the message, use \\[mail-yank-original] to yank the original message into it." (interactive) - (rmail-start-mail nil nil nil nil nil rmail-view-buffer)) + (rmail-start-mail nil nil nil nil nil rmail-buffer)) ;; FIXME should complain if there is nothing to continue. (defun rmail-continue () @@ -3731,9 +3742,7 @@ use \\[mail-yank-original] to yank the original message into it." (mail-strip-quoted-names (if (null cc) to (concat to ", " cc)))))) (if (string= cc-list "") nil cc-list))) - (if (rmail-buffers-swapped-p) - rmail-buffer - rmail-view-buffer) + rmail-buffer (list (list 'rmail-mark-message rmail-buffer (with-current-buffer rmail-buffer @@ -3835,7 +3844,7 @@ see the documentation of `rmail-resend'." (or (mail-fetch-field "Subject") "") "]"))) (if (rmail-start-mail - nil nil subject nil nil nil + nil nil subject nil nil rmail-buffer (list (list 'rmail-mark-message forward-buffer (with-current-buffer rmail-buffer diff --git a/lisp/mail/sendmail.el b/lisp/mail/sendmail.el index f8958a691b2..0b0f2795610 100644 --- a/lisp/mail/sendmail.el +++ b/lisp/mail/sendmail.el @@ -863,8 +863,11 @@ Prefix arg means don't delete this window." ;; even if this message was not started by an Rmail command. (unless return-action (dolist (buffer (buffer-list)) - (if (eq (buffer-local-value 'major-mode buffer) 'rmail-mode) - (setq return-action `(rmail-mail-return ,newbuf))))) + (if (and (eq (buffer-local-value 'major-mode buffer) 'rmail-mode) + (null return-action) + ;; Don't match message-viewer buffer. + (not (string-match "\\` " (buffer-name buffer)))) + (setq return-action `(rmail-mail-return ,buffer))))) (if (and (null arg) return-action) (apply (car return-action) (cdr return-action)) (switch-to-buffer newbuf)))) From d666446d7da49d504a5cc548321a77ecb405952e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 18 Apr 2012 10:14:53 +0800 Subject: [PATCH 057/564] * configure.in: Don't use the -R option (Bug#11251). --- ChangeLog | 4 ++++ configure.in | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index b4f37a8f3e8..9fa1b8da7d0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2012-04-18 Ludovic Courtès + + * configure.in: Don't use the -R option (Bug#11251). + 2012-04-12 Teodor Zlatanov * info/dir, Makefile.in (INFO_FILES): Add emacs-gnutls. diff --git a/configure.in b/configure.in index 78d81115443..e848964e7bc 100644 --- a/configure.in +++ b/configure.in @@ -3446,7 +3446,7 @@ case "$opsys" in ## had not yet been defined and was expanded to null. Hence LD_SWITCH_SYSTEM ## had different values in configure (in ac_link) and src/Makefile.in. ## It seems clearer therefore to put this piece in LD_SWITCH_SYSTEM_TEMACS. - gnu-linux) LD_SWITCH_SYSTEM_TEMACS="\$(LD_SWITCH_X_SITE_AUX)" ;; + gnu*) LD_SWITCH_SYSTEM_TEMACS="\$(LD_SWITCH_X_SITE_AUX_RPATH)" ;; *) LD_SWITCH_SYSTEM_TEMACS= ;; esac From 016a35dfa7c48255b7e461dc8a2441a643c8731c Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Apr 2012 20:48:43 -0700 Subject: [PATCH 058/564] More process-related doc and manual small edits * doc/lispref/processes.texi (Output from Processes, Filter Functions): Mention waiting-for-user-input-p. (Sentinels, Query Before Exit, System Processes, Transaction Queues): (Network Servers, Datagrams, Network Processes, Network Options) (Network Feature Testing, Serial Ports): Copyedits. (Network): Add encrypted network overview paragraph. Cross-reference the Emacs-GnuTLS manual. Use @acronym. * lisp/net/network-stream.el (open-network-stream): Doc fix. * src/process.c (Fset_process_inherit_coding_system_flag) (Fset_process_query_on_exit_flag): Doc fix (mention return value). (Fmake_network_process): Doc fix. --- doc/lispref/ChangeLog | 10 ++ doc/lispref/processes.texi | 210 +++++++++++++++++++++---------------- lisp/ChangeLog | 4 + lisp/net/network-stream.el | 5 +- src/ChangeLog | 6 ++ src/process.c | 9 +- 6 files changed, 146 insertions(+), 98 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 16a0696b9f9..e56317ad70a 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,13 @@ +2012-04-18 Glenn Morris + + * processes.texi (Output from Processes, Filter Functions): + Mention waiting-for-user-input-p. + (Sentinels, Query Before Exit, System Processes, Transaction Queues): + (Network Servers, Datagrams, Network Processes, Network Options) + (Network Feature Testing, Serial Ports): Copyedits. + (Network): Add encrypted network overview paragraph. + Cross-reference the Emacs-GnuTLS manual. Use @acronym. + 2012-04-17 Chong Yidong * help.texi (Keys in Documentation): Mention :advertised-binding. diff --git a/doc/lispref/processes.texi b/doc/lispref/processes.texi index fd8bc717d09..0a763b4e146 100644 --- a/doc/lispref/processes.texi +++ b/doc/lispref/processes.texi @@ -1133,13 +1133,14 @@ subprocess has children that are still live and still producing output, Emacs won't receive that output. Output from a subprocess can arrive only while Emacs is waiting: when -reading terminal input, in @code{sit-for} and @code{sleep-for} -(@pxref{Waiting}), and in @code{accept-process-output} (@pxref{Accepting -Output}). This minimizes the problem of timing errors that usually -plague parallel programming. For example, you can safely create a -process and only then specify its buffer or filter function; no output -can arrive before you finish, if the code in between does not call any -primitive that waits. +reading terminal input (see the function @code{waiting-for-user-input-p}), +in @code{sit-for} and @code{sleep-for} (@pxref{Waiting}), and in +@code{accept-process-output} (@pxref{Accepting Output}). This +minimizes the problem of timing errors that usually plague parallel +programming. For example, you can safely create a process and only +then specify its buffer or filter function; no output can arrive +before you finish, if the code in between does not call any primitive +that waits. @defvar process-adaptive-read-buffering On some systems, when Emacs reads the output from a subprocess, the @@ -1264,14 +1265,16 @@ there is no filter. The filter function can only be called when Emacs is waiting for something, because process output arrives only at such times. Emacs -waits when reading terminal input, in @code{sit-for} and -@code{sleep-for} (@pxref{Waiting}), and in @code{accept-process-output} -(@pxref{Accepting Output}). +waits when reading terminal input (see the function +@code{waiting-for-user-input-p}), in @code{sit-for} and +@code{sleep-for} (@pxref{Waiting}), and in +@code{accept-process-output} (@pxref{Accepting Output}). A filter function must accept two arguments: the associated process and a string, which is output just received from it. The function is then free to do whatever it chooses with the output. +@c Note this text is duplicated in the sentinels section. Quitting is normally inhibited within a filter function---otherwise, the effect of typing @kbd{C-g} at command level or to quit a user command would be unpredictable. If you want to permit quitting inside @@ -1506,6 +1509,7 @@ describing the type of event. The string describing the event looks like one of the following: +@c FIXME? Also "killed\n" - see example below? @itemize @bullet @item @code{"finished\n"}. @@ -1522,7 +1526,7 @@ describing the type of event. A sentinel runs only while Emacs is waiting (e.g., for terminal input, or for time to elapse, or for process output). This avoids the -timing errors that could result from running them at random places in +timing errors that could result from running sentinels at random places in the middle of other Lisp programs. A program can wait, so that sentinels will run, by calling @code{sit-for} or @code{sleep-for} (@pxref{Waiting}), or @code{accept-process-output} (@pxref{Accepting @@ -1546,6 +1550,7 @@ should check whether the buffer is still alive. If it tries to insert into a dead buffer, it will get an error. If the buffer is dead, @code{(buffer-name (process-buffer @var{process}))} returns @code{nil}. +@c Note this text is duplicated in the filter functions section. Quitting is normally inhibited within a sentinel---otherwise, the effect of typing @kbd{C-g} at command level or to quit a user command would be unpredictable. If you want to permit quitting inside a @@ -1556,8 +1561,8 @@ right way to do this is with the macro @code{with-local-quit}. If an error happens during execution of a sentinel, it is caught automatically, so that it doesn't stop the execution of whatever programs was running when the sentinel was started. However, if -@code{debug-on-error} is non-@code{nil}, the error-catching is turned -off. This makes it possible to use the Lisp debugger to debug the +@code{debug-on-error} is non-@code{nil}, errors are not caught. +This makes it possible to use the Lisp debugger to debug the sentinel. @xref{Debugger}. While a sentinel is running, the process sentinel is temporarily @@ -1565,10 +1570,14 @@ set to @code{nil} so that the sentinel won't run recursively. For this reason it is not possible for a sentinel to specify a new sentinel. +@ignore In earlier Emacs versions, every sentinel that did regular expression searching or matching had to explicitly save and restore the match data. Now Emacs does this automatically for sentinels; they never need to do -it explicitly. @xref{Match Data}. +it explicitly. +@end ignore + Note that Emacs automatically saves and restores the match data +while executing sentinels. @xref{Match Data}. @defun set-process-sentinel process sentinel This function associates @var{sentinel} with @var{process}. If @@ -1576,7 +1585,7 @@ This function associates @var{sentinel} with @var{process}. If The default behavior when there is no sentinel is to insert a message in the process's buffer when the process status changes. -Changes in process sentinel take effect immediately---if the sentinel +Changes in process sentinels take effect immediately---if the sentinel is slated to be run but has not been called yet, and you specify a new sentinel, the eventual call to the sentinel will use the new one. @@ -1604,7 +1613,7 @@ has none. @defun waiting-for-user-input-p While a sentinel or filter function is running, this function returns non-@code{nil} if Emacs was waiting for keyboard input from the user at -the time the sentinel or filter function was called, @code{nil} if it +the time the sentinel or filter function was called, or @code{nil} if it was not. @end defun @@ -1614,7 +1623,7 @@ was not. When Emacs exits, it terminates all its subprocesses by sending them the @code{SIGHUP} signal. Because subprocesses may be doing valuable work, Emacs normally asks the user to confirm that it is ok -to terminate them. Each process has a query flag which, if +to terminate them. Each process has a query flag, which, if non-@code{nil}, says that Emacs should ask for confirmation before exiting and thus killing that process. The default for the query flag is @code{t}, meaning @emph{do} query. @@ -1633,7 +1642,7 @@ shell process to avoid querying: @smallexample @group (set-process-query-on-exit-flag (get-process "shell") nil) - @result{} t + @result{} nil @end group @end smallexample @end defun @@ -1645,7 +1654,7 @@ shell process to avoid querying: In addition to accessing and manipulating processes that are subprocesses of the current Emacs session, Emacs Lisp programs can also access other processes running on the same machine. We call -these @dfn{system processes}, to distinguish between them and Emacs +these @dfn{system processes}, to distinguish them from Emacs subprocesses. Emacs provides several primitives for accessing system processes. @@ -1665,7 +1674,7 @@ This function returns an alist of attributes for the process specified by its process ID @var{pid}. Each association in the alist is of the form @code{(@var{key} . @var{value})}, where @var{key} designates the attribute and @var{value} is the value of that attribute. The various -attribute @var{key}'s that this function can return are listed below. +attribute @var{key}s that this function can return are listed below. Not all platforms support all of these attributes; if an attribute is not supported, its association will not appear in the returned alist. Values that are numbers can be either integer or floating-point, @@ -1826,6 +1835,8 @@ as @code{shell-command}. @section Transaction Queues @cindex transaction queue +@c That's not very informative. What is a transaction, and when might +@c I want to use one? You can use a @dfn{transaction queue} to communicate with a subprocess using transactions. First use @code{tq-create} to create a transaction queue communicating with a specified process. Then you can call @@ -1855,8 +1866,11 @@ text at the end of the entire answer, but nothing before; that's how If the argument @var{delay-question} is non-@code{nil}, delay sending this question until the process has finished replying to any previous questions. This produces more reliable results with some processes. +@ignore +@c Let's not mention it then. The return value of @code{tq-enqueue} itself is not meaningful. +@end ignore @end defun @defun tq-close queue @@ -1874,10 +1888,11 @@ Transaction queues are implemented by means of a filter function. @cindex UDP Emacs Lisp programs can open stream (TCP) and datagram (UDP) network -connections to other processes on the same machine or other machines. +connections (@pxref{Datagrams}) to other processes on the same machine +or other machines. A network connection is handled by Lisp much like a subprocess, and is represented by a process object. However, the process you are -communicating with is not a child of the Emacs process, so it has no +communicating with is not a child of the Emacs process, has no process @acronym{ID}, and you can't kill it or send it signals. All you can do is send and receive data. @code{delete-process} closes the connection, but does not kill the program at the other end; that @@ -1905,7 +1920,7 @@ network connection or server, @code{serial} for a serial port connection, or @code{real} for a real subprocess. The @code{process-status} function returns @code{open}, -@code{closed}, @code{connect}, and @code{failed} for network +@code{closed}, @code{connect}, or @code{failed} for network connections. For a network server, the status is always @code{listen}. None of those values is possible for a real subprocess. @xref{Process Information}. @@ -1915,35 +1930,48 @@ subprocess. @xref{Process Information}. process, being stopped means not accepting new connections. (Up to 5 connection requests will be queued for when you resume the server; you can increase this limit, unless it is imposed by the operating -system.) For a network stream connection, being stopped means not -processing input (any arriving input waits until you resume the -connection). For a datagram connection, some number of packets may be -queued but input may be lost. You can use the function +system---see the @code{:server} keyword of @code{make-network-process}, +@ref{Network Processes}.) For a network stream connection, being +stopped means not processing input (any arriving input waits until you +resume the connection). For a datagram connection, some number of +packets may be queued but input may be lost. You can use the function @code{process-command} to determine whether a network connection or server is stopped; a non-@code{nil} value means yes. @cindex network connection, encrypted @cindex encrypted network connections -@cindex TLS network connections -@cindex STARTTLS network connections -@defun open-network-stream name buffer-or-name host service &rest parameters +@cindex @acronym{TLS} network connections +@cindex @acronym{STARTTLS} network connections +Emacs can create encrypted network connections, using either built-in +or external support. The built-in support uses the GnuTLS +(``Transport Layer Security'') library; see +@uref{http://www.gnu.org/software/gnutls/, the GnuTLS project page}. +If your Emacs was compiled with GnuTLS support, the function +@code{gnutls-available-p} is defined and returns non-@code{nil}. For +more details, @pxref{Top,, Overview, emacs-gnutls, The Emacs-GnuTLS manual}. +The external support uses the @file{starttls.el} library, which +requires a helper utility such as @command{gnutls-cli} to be installed +on the system. The @code{open-network-stream} function can +transparently handle the details of creating encrypted connections for +you, using whatever support is available. + +@defun open-network-stream name buffer host service &rest parameters This function opens a TCP connection, with optional encryption, and returns a process object that represents the connection. The @var{name} argument specifies the name for the process object. It is modified as necessary to make it unique. -The @var{buffer-or-name} argument is the buffer to associate with the +The @var{buffer} argument is the buffer to associate with the connection. Output from the connection is inserted in the buffer, unless you specify a filter function to handle the output. If -@var{buffer-or-name} is @code{nil}, it means that the connection is not +@var{buffer} is @code{nil}, it means that the connection is not associated with any buffer. The arguments @var{host} and @var{service} specify where to connect to; @var{host} is the host name (a string), and @var{service} is the name of a defined network service (a string) or a port number (an integer). -@c FIXME? Is this too lengthy for the printed manual? The remaining arguments @var{parameters} are keyword/argument pairs that are mainly relevant to encrypted connections: @@ -1960,14 +1988,15 @@ The type of connection. Options are: An ordinary, unencrypted connection. @item tls @itemx ssl -A TLS (``Transport Layer Security'') connection. +A @acronym{TLS} (``Transport Layer Security'') connection. @item nil @itemx network Start with a plain connection, and if parameters @samp{:success} and @samp{:capability-command} are supplied, try to upgrade to an encrypted -connection via STARTTLS. If that fails, retain the unencrypted connection. +connection via @acronym{STARTTLS}. If that fails, retain the +unencrypted connection. @item starttls -As for @code{nil}, but if STARTTLS fails drop the connection. +As for @code{nil}, but if @acronym{STARTTLS} fails drop the connection. @item shell A shell connection. @end table @@ -1986,22 +2015,22 @@ command @var{capability-command}. The latter defaults to the former. @item :starttls-function @var{function} Function of one argument (the response to @var{capability-command}), -which returns either @code{nil}, or the command to activate STARTTLS +which returns either @code{nil}, or the command to activate @acronym{STARTTLS} if supported. @item :success @var{regexp} -Regular expression matching a successful STARTTLS negotiation. +Regular expression matching a successful @acronym{STARTTLS} negotiation. @item :use-starttls-if-possible @var{boolean} -If non-@code{nil}, do opportunistic STARTTLS upgrades even if Emacs -doesn't have built-in TLS support. +If non-@code{nil}, do opportunistic @acronym{STARTTLS} upgrades even if Emacs +doesn't have built-in @acronym{TLS} support. @item :client-certificate @var{list-or-t} Either a list of the form @code{(@var{key-file} @var{cert-file})}, naming the certificate key file and certificate file itself, or @code{t}, meaning to query @code{auth-source} for this information -(@pxref{Top,,auth-source, auth, Emacs auth-source Library}). -Only used for TLS or STARTTLS. +(@pxref{Top,,Overview, auth, The Auth-Source Manual}). +Only used for @acronym{TLS} or @acronym{STARTTLS}. @item :return-list @var{cons-or-nil} The return value of this function. If omitted or @code{nil}, return a @@ -2025,18 +2054,20 @@ The connection type: @samp{plain} or @samp{tls}. @section Network Servers @cindex network servers - You create a server by calling @code{make-network-process} with -@code{:server t}. The server will listen for connection requests from -clients. When it accepts a client connection request, that creates a -new network connection, itself a process object, with the following -parameters: + You create a server by calling @code{make-network-process} +(@pxref{Network Processes}) with @code{:server t}. The server will +listen for connection requests from clients. When it accepts a client +connection request, that creates a new network connection, itself a +process object, with the following parameters: @itemize @bullet @item The connection's process name is constructed by concatenating the server process's @var{name} with a client identification string. The +@c FIXME? What about IPv6? Say briefly what the difference is? client identification string for an IPv4 connection looks like -@samp{<@var{a}.@var{b}.@var{c}.@var{d}:@var{p}>}. Otherwise, it is a +@samp{<@var{a}.@var{b}.@var{c}.@var{d}:@var{p}>}, which represents an +address and port number. Otherwise, it is a unique number in brackets, as in @samp{<@var{nnn}>}. The number is unique for each connection in the Emacs session. @@ -2057,7 +2088,7 @@ uses its filter and sentinel; their sole purpose is to initialize connections made to the server. @item -The connection's process contact info is set according to the client's +The connection's process contact information is set according to the client's addressing information (typically an IP address and a port number). This information is associated with the @code{process-contact} keywords @code{:host}, @code{:service}, @code{:remote}. @@ -2074,7 +2105,7 @@ The client process's plist is initialized from the server's plist. @section Datagrams @cindex datagrams - A datagram connection communicates with individual packets rather + A @dfn{datagram} connection communicates with individual packets rather than streams of data. Each call to @code{process-send} sends one datagram packet (@pxref{Input to Processes}), and each datagram received results in one call to the filter function. @@ -2127,7 +2158,8 @@ process object that represents it. The arguments @var{args} are a list of keyword/argument pairs. Omitting a keyword is always equivalent to specifying it with value @code{nil}, except for @code{:coding}, @code{:filter-multibyte}, and @code{:reuseaddr}. Here -are the meaningful keywords: +are the meaningful keywords (those corresponding to network options +are listed in the following section): @table @asis @item :name @var{name} @@ -2143,7 +2175,7 @@ connection. Both connections and servers can be of these types. @item :server @var{server-flag} If @var{server-flag} is non-@code{nil}, create a server. Otherwise, create a connection. For a stream type server, @var{server-flag} may -be an integer which then specifies the length of the queue of pending +be an integer, which then specifies the length of the queue of pending connections to the server. The default queue length is 5. @item :host @var{host} @@ -2154,7 +2186,7 @@ specify a valid address for the local host, and only clients connecting to that address will be accepted. @item :service @var{service} -@var{service} specifies a port number to connect to, or, for a server, +@var{service} specifies a port number to connect to; or, for a server, the port number to listen on. It should be a service name that translates to a port number, or an integer specifying the port number directly. For a server, it can also be @code{t}, which means to let @@ -2165,18 +2197,18 @@ the system select an unused port number. communication. @code{nil} means determine the proper address family automatically for the given @var{host} and @var{service}. @code{local} specifies a Unix socket, in which case @var{host} is -ignored. @code{ipv4} and @code{ipv6} specify to use IPv4 and IPv6 +ignored. @code{ipv4} and @code{ipv6} specify to use IPv4 and IPv6, respectively. @item :local @var{local-address} For a server process, @var{local-address} is the address to listen on. -It overrides @var{family}, @var{host} and @var{service}, and you -may as well not specify them. +It overrides @var{family}, @var{host} and @var{service}, so you +might as well not specify them. @item :remote @var{remote-address} For a connection, @var{remote-address} is the address to connect to. -It overrides @var{family}, @var{host} and @var{service}, and you -may as well not specify them. +It overrides @var{family}, @var{host} and @var{service}, so you +might as well not specify them. For a datagram server, @var{remote-address} specifies the initial setting of the remote datagram address. @@ -2200,7 +2232,7 @@ integers @code{[@var{a} @var{b} @var{c} @var{d} @var{e} @var{f} port number @var{p}. @item -A local address is represented as a string which specifies the address +A local address is represented as a string, which specifies the address in the local address space. @item @@ -2222,8 +2254,8 @@ second argument matching @code{"open"} (if successful) or has succeeded or failed. @item :stop @var{stopped} -Start the network connection or server in the `stopped' state if -@var{stopped} is non-@code{nil}. +If @var{stopped} is non-@code{nil}, start the network connection or +server in the ``stopped'' state. @item :buffer @var{buffer} Use @var{buffer} as the process buffer. @@ -2244,6 +2276,11 @@ Initialize the process query flag to @var{query-flag}. @item :filter @var{filter} Initialize the process filter to @var{filter}. +@item :filter-multibyte @var{multibyte} +If @var{multibyte} is non-@code{nil}, strings given to the process +filter are multibyte, otherwise they are unibyte. The default is the +default value of @code{enable-multibyte-characters}. + @item :sentinel @var{sentinel} Initialize the process sentinel to @var{sentinel}. @@ -2251,7 +2288,7 @@ Initialize the process sentinel to @var{sentinel}. Initialize the log function of a server process to @var{log}. The log function is called each time the server accepts a network connection from a client. The arguments passed to the log function are -@var{server}, @var{connection}, and @var{message}, where @var{server} +@var{server}, @var{connection}, and @var{message}; where @var{server} is the server process, @var{connection} is the new process for the connection, and @var{message} is a string describing what has happened. @@ -2288,7 +2325,7 @@ Using this option may require special privileges on some systems. @item :broadcast @var{broadcast-flag} If @var{broadcast-flag} is non-@code{nil} for a datagram process, the process will receive datagram packet sent to a broadcast address, and -be able to send packets to a broadcast address. Ignored for a stream +be able to send packets to a broadcast address. This is ignored for a stream connection. @item :dontroute @var{dontroute-flag} @@ -2304,10 +2341,11 @@ If @var{linger-arg} is non-@code{nil}, wait for successful transmission of all queued packets on the connection before it is deleted (see @code{delete-process}). If @var{linger-arg} is an integer, it specifies the maximum time in seconds to wait for queued -packets to be sent before closing the connection. Default is -@code{nil} which means to discard unsent queued packets when the +packets to be sent before closing the connection. The default is +@code{nil}, which means to discard unsent queued packets when the process is deleted. +@c FIXME Where out-of-band data is ...? @item :oobinline @var{oobinline-flag} If @var{oobinline-flag} is non-@code{nil} for a stream connection, receive out-of-band data in the normal data stream. Otherwise, ignore @@ -2316,7 +2354,7 @@ out-of-band data. @item :priority @var{priority} Set the priority for packets sent on this connection to the integer @var{priority}. The interpretation of this number is protocol -specific, such as setting the TOS (type of service) field on IP +specific; such as setting the TOS (type of service) field on IP packets sent on this connection. It may also have system dependent effects, such as selecting a specific output queue on the network interface. @@ -2324,20 +2362,20 @@ interface. @item :reuseaddr @var{reuseaddr-flag} If @var{reuseaddr-flag} is non-@code{nil} (the default) for a stream server process, allow this server to reuse a specific port number (see -@code{:service}) unless another process on this host is already +@code{:service}), unless another process on this host is already listening on that port. If @var{reuseaddr-flag} is @code{nil}, there may be a period of time after the last use of that port (by any -process on the host), where it is not possible to make a new server on +process on the host) where it is not possible to make a new server on that port. @end table @defun set-network-process-option process option value &optional no-error This function sets or modifies a network option for network process -@var{process}. See @code{make-network-process} for details of options -@var{option} and their corresponding values @var{value}. If -@var{no-error} is non-@code{nil}, this function returns @code{nil} -instead of signaling an error if @var{option} is not a supported -option. If the function successfully completes, it returns @code{t}. +@var{process}. The accepted options and values are as for +@code{make-network-process}. If @var{no-error} is non-@code{nil}, +this function returns @code{nil} instead of signaling an error if +@var{option} is not a supported option. If the function successfully +completes, it returns @code{t}. The current setting of an option is available via the @code{process-contact} function. @@ -2354,11 +2392,9 @@ The current setting of an option is available via the @end example @noindent -The result of the first form is @code{t} if it works to specify +The result of this form is @code{t} if it works to specify @var{keyword} with value @var{value} in @code{make-network-process}. -The result of the second form is @code{t} if @var{keyword} is -supported by @code{make-network-process}. Here are some of the -@var{keyword}---@var{value} pairs you can test in +Here are some of the @var{keyword}---@var{value} pairs you can test in this way. @table @code @@ -2382,20 +2418,10 @@ Non-@code{nil} if the system can select the port for a server. @end example @noindent -Here are some of the options you can test in this way. - -@table @code -@item :bindtodevice -@itemx :broadcast -@itemx :dontroute -@itemx :keepalive -@itemx :linger -@itemx :oobinline -@itemx :priority -@itemx :reuseaddr -That particular network option is supported by -@code{make-network-process} and @code{set-network-process-option}. -@end table +The accepted @var{keyword} values are @code{:bindtodevice}, etc. +For the complete list, @pxref{Network Options}. This form returns +non-@code{nil} if that particular network option is supported by +@code{make-network-process} (or @code{set-network-process-option}). @node Misc Network @section Misc Network Facilities @@ -2533,7 +2559,7 @@ Initialize the process query flag to @var{query-flag}. @xref{Query Before Exit}. The flags defaults to @code{nil} if unspecified. @item :stop @var{bool} -Start process in the @code{stopped} state if @var{bool} is +Start process in the ``stopped'' state if @var{bool} is non-@code{nil}. In the stopped state, a serial process does not accept incoming data, but you can send outgoing data. The stopped state is cleared by @code{continue-process} and set by diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 026b99872f0..16cf1e347a1 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-04-18 Glenn Morris + + * net/network-stream.el (open-network-stream): Doc fix. + 2012-04-17 Chong Yidong * emacs-lisp/tabulated-list.el (tabulated-list-print): Fix typos. diff --git a/lisp/net/network-stream.el b/lisp/net/network-stream.el index 7a3d47ef1d1..81d05eabc5a 100644 --- a/lisp/net/network-stream.el +++ b/lisp/net/network-stream.el @@ -125,9 +125,8 @@ values: certificate. This parameter will only be used when doing TLS or STARTTLS connections. -If :use-starttls-if-possible is non-nil, do opportunistic -STARTTLS upgrades even if Emacs doesn't have built-in TLS -functionality. +:use-starttls-if-possible is a boolean that says to do opportunistic +STARTTLS upgrades even if Emacs doesn't have built-in TLS functionality. :nowait is a boolean that says the connection should be made asynchronously, if possible." diff --git a/src/ChangeLog b/src/ChangeLog index 42c582994cf..fb4da407b70 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2012-04-18 Glenn Morris + + * process.c (Fset_process_inherit_coding_system_flag) + (Fset_process_query_on_exit_flag): Doc fix (mention return value). + (Fmake_network_process): Doc fix. + 2012-04-17 Eli Zaretskii * xdisp.c (string_buffer_position_lim): Limit starting position to diff --git a/src/process.c b/src/process.c index dc43191ebef..f6ea5d75e1a 100644 --- a/src/process.c +++ b/src/process.c @@ -1070,7 +1070,9 @@ is more appropriate for saving the process buffer. Binding the variable `inherit-process-coding-system' to non-nil before starting the process is an alternative way of setting the inherit flag -for the process which will run. */) +for the process which will run. + +This function returns FLAG. */) (register Lisp_Object process, Lisp_Object flag) { CHECK_PROCESS (process); @@ -1083,7 +1085,8 @@ DEFUN ("set-process-query-on-exit-flag", 2, 2, 0, doc: /* Specify if query is needed for PROCESS when Emacs is exited. If the second argument FLAG is non-nil, Emacs will query the user before -exiting or killing a buffer if PROCESS is running. */) +exiting or killing a buffer if PROCESS is running. This function +returns FLAG. */) (register Lisp_Object process, Lisp_Object flag) { CHECK_PROCESS (process); @@ -2794,7 +2797,7 @@ The stopped state is cleared by `continue-process' and set by :filter-multibyte BOOL -- If BOOL is non-nil, strings given to the process filter are multibyte, otherwise they are unibyte. If this keyword is not specified, the strings are multibyte if -`default-enable-multibyte-characters' is non-nil. +the default value of `enable-multibyte-characters' is non-nil. :sentinel SENTINEL -- Install SENTINEL as the process sentinel. From d02766abd72ce34d2e2ece9b7f782238a119278c Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Wed, 18 Apr 2012 14:04:51 +0800 Subject: [PATCH 059/564] * lisp/progmodes/grep.el (grep, rgrep): Doc fix. Fixes: debbugs:11268 --- lisp/ChangeLog | 4 ++++ lisp/progmodes/grep.el | 13 +++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 16cf1e347a1..7ef7628b6d6 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-04-18 Chong Yidong + + * progmodes/grep.el (grep, rgrep): Doc fix (Bug#11268). + 2012-04-18 Glenn Morris * net/network-stream.el (open-network-stream): Doc fix. diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el index 54d678323f6..79c35100367 100644 --- a/lisp/progmodes/grep.el +++ b/lisp/progmodes/grep.el @@ -728,9 +728,9 @@ This function is called from `compilation-filter-hook'." (defun grep (command-args) "Run grep, with user-specified args, and collect output in a buffer. While grep runs asynchronously, you can use \\[next-error] (M-x next-error), -or \\\\[compile-goto-error] in the grep \ -output buffer, to go to the lines where grep -found matches. +or \\\\[compile-goto-error] in the *grep* \ +buffer, to go to the lines where grep found +matches. To kill the grep job before it finishes, type \\[kill-compilation]. For doing a recursive `grep', see the `rgrep' command. For running `grep' in a specific directory, see `lgrep'. @@ -957,10 +957,11 @@ With \\[universal-argument] prefix, you can edit the constructed shell command l before it is executed. With two \\[universal-argument] prefixes, directly edit and run `grep-find-command'. -Collect output in a buffer. While find runs asynchronously, you -can use \\[next-error] (M-x next-error), or \\\\[compile-goto-error] \ +Collect output in a buffer. While the recursive grep is running, +you can use \\[next-error] (M-x next-error), or \\\\[compile-goto-error] \ in the grep output buffer, -to go to the lines where grep found matches. +to visit the lines where matches were found. To kill the job +before it finishes, type \\[kill-compilation]. This command shares argument histories with \\[lgrep] and \\[grep-find]. From 0e80650b8bfd4fb5ff0bef8483608144e6972436 Mon Sep 17 00:00:00 2001 From: Christopher Schmidt Date: Wed, 18 Apr 2012 14:20:47 +0800 Subject: [PATCH 060/564] Docfix for require-final-newline in Lisp manual. * doc/lispref/files.texi (Saving Buffers): Document `visit and `visit-save' values of require-final-newline. --- doc/lispref/ChangeLog | 5 +++++ doc/lispref/files.texi | 12 +++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index e56317ad70a..264e0cfbe41 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,8 @@ +2012-04-18 Christopher Schmidt + + * files.texi (Saving Buffers): Document `visit and `visit-save' + values of require-final-newline. + 2012-04-18 Glenn Morris * processes.texi (Output from Processes, Filter Functions): diff --git a/doc/lispref/files.texi b/doc/lispref/files.texi index 3e96a448963..062368e810d 100644 --- a/doc/lispref/files.texi +++ b/doc/lispref/files.texi @@ -490,11 +490,13 @@ in particular buffers. @defopt require-final-newline This variable determines whether files may be written out that do @emph{not} end with a newline. If the value of the variable is -@code{t}, then @code{save-buffer} silently adds a newline at the end of -the file whenever the buffer being saved does not already end in one. -If the value of the variable is non-@code{nil}, but not @code{t}, then -@code{save-buffer} asks the user whether to add a newline each time the -case arises. +@code{t}, then @code{save-buffer} silently adds a newline at the end +of the buffer whenever it does not already end in one. If the value +is @code{visit}, Emacs adds a missing newline just after it visits the +file. If the value is @code{visit-save}, Emacs adds a missing newline +both on visiting and on saving. For any other non-@code{nil} value, +@code{save-buffer} asks the user whether to add a newline each time +the case arises. If the value of the variable is @code{nil}, then @code{save-buffer} doesn't add newlines at all. @code{nil} is the default value, but a few From c09c46b263a4c47806775c57bea391612cad4404 Mon Sep 17 00:00:00 2001 From: Christopher Schmidt Date: Wed, 18 Apr 2012 14:24:13 +0800 Subject: [PATCH 061/564] Fix require-final-newline interaction with read-only buffers. * lisp/files.el (after-find-file): Do not try to add a final newline if the buffer is read-only. Fixes: debbugs:11156 --- lisp/ChangeLog | 7 ++++++- lisp/files.el | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 75b1c7799c4..eff89ba08c0 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-04-18 Christopher Schmidt + + * files.el (after-find-file): Do not try to add a final newline if + the buffer is read-only (Bug#11156). + 2012-04-17 Richard Stallman * mail/rmail.el (rmail-start-mail): @@ -9,7 +14,7 @@ (rmail-forward): Pass the Rmail buffer, not nil, for replybuffer. * mail/sendmail.el (mail-bury): Choose the first rmail-mode - buffer, not the last. Reject temp buffers. Use the rmail-mode + buffer, not the last. Reject temp buffers. Use the rmail-mode buffer, not newbuf. 2012-04-17 Juanma Barranquero diff --git a/lisp/files.el b/lisp/files.el index fb4662e7ea8..d757e1a277c 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -2152,6 +2152,7 @@ unless NOMODES is non-nil." (/= (char-after (1- (point-max))) ?\n) (not (and (eq selective-display t) (= (char-after (1- (point-max))) ?\r))) + (not buffer-read-only) (save-excursion (goto-char (point-max)) (insert "\n"))) From bc6494efe328c6b6da13bafd95e035da4e36ca98 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Wed, 18 Apr 2012 15:00:52 +0800 Subject: [PATCH 062/564] * simple.el (line-move): Use forward-line if in batch mode. Fixes: debbugs:11053 --- lisp/ChangeLog | 5 +++++ lisp/simple.el | 36 +++++++++++++++++++----------------- 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index eff89ba08c0..054b3ca5f47 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-04-18 Chong Yidong + + * simple.el (line-move): Use forward-line if in batch mode + (Bug#11053). + 2012-04-18 Christopher Schmidt * files.el (after-find-file): Do not try to add a final newline if diff --git a/lisp/simple.el b/lisp/simple.el index 09fe1807d8f..67f6e4eedf7 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -4405,23 +4405,25 @@ lines." ;; a cleaner solution to the problem of making C-n do something ;; useful given a tall image. (defun line-move (arg &optional noerror to-end try-vscroll) - (unless (and auto-window-vscroll try-vscroll - ;; Only vscroll for single line moves - (= (abs arg) 1) - ;; But don't vscroll in a keyboard macro. - (not defining-kbd-macro) - (not executing-kbd-macro) - (line-move-partial arg noerror to-end)) - (set-window-vscroll nil 0 t) - (if (and line-move-visual - ;; Display-based column are incompatible with goal-column. - (not goal-column) - ;; When the text in the window is scrolled to the left, - ;; display-based motion doesn't make sense (because each - ;; logical line occupies exactly one screen line). - (not (> (window-hscroll) 0))) - (line-move-visual arg noerror) - (line-move-1 arg noerror to-end)))) + (if noninteractive + (forward-line arg) + (unless (and auto-window-vscroll try-vscroll + ;; Only vscroll for single line moves + (= (abs arg) 1) + ;; But don't vscroll in a keyboard macro. + (not defining-kbd-macro) + (not executing-kbd-macro) + (line-move-partial arg noerror to-end)) + (set-window-vscroll nil 0 t) + (if (and line-move-visual + ;; Display-based column are incompatible with goal-column. + (not goal-column) + ;; When the text in the window is scrolled to the left, + ;; display-based motion doesn't make sense (because each + ;; logical line occupies exactly one screen line). + (not (> (window-hscroll) 0))) + (line-move-visual arg noerror) + (line-move-1 arg noerror to-end))))) ;; Display-based alternative to line-move-1. ;; Arg says how many lines to move. The value is t if we can move the From 4373fd432657ded713427d0e982298f4d26a60b6 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 18 Apr 2012 00:21:18 -0700 Subject: [PATCH 063/564] More small doc and lispref edits related to processes * doc/lispref/processes.texi (Serial Ports, Byte Packing, Bindat Spec) (Bindat Functions): Copyedits. * src/process.c (Fset_process_inherit_coding_system_flag) (Fset_process_query_on_exit_flag): Doc fix (mention return value). (Fmake_network_process, Fmake_serial_process): Doc fix. * admin/FOR-RELEASE: Related markup. --- admin/FOR-RELEASE | 2 +- doc/lispref/ChangeLog | 5 ++ doc/lispref/processes.texi | 126 ++++++++++++++++++++----------------- src/ChangeLog | 2 +- src/process.c | 7 +-- 5 files changed, 79 insertions(+), 63 deletions(-) diff --git a/admin/FOR-RELEASE b/admin/FOR-RELEASE index adbeeaa296c..76ad2dc05cb 100644 --- a/admin/FOR-RELEASE +++ b/admin/FOR-RELEASE @@ -214,7 +214,7 @@ objects.texi cyd os.texi cyd package.texi rgm positions.texi cyd -processes.texi +processes.texi rgm searching.texi rgm sequences.texi cyd streams.texi cyd diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 264e0cfbe41..8b1e5b84836 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,8 @@ +2012-04-18 Glenn Morris + + * processes.texi (Serial Ports, Byte Packing, Bindat Spec) + (Bindat Functions): Copyedits. + 2012-04-18 Christopher Schmidt * files.texi (Saving Buffers): Document `visit and `visit-save' diff --git a/doc/lispref/processes.texi b/doc/lispref/processes.texi index 0a763b4e146..cd5647f1843 100644 --- a/doc/lispref/processes.texi +++ b/doc/lispref/processes.texi @@ -2493,11 +2493,11 @@ lets you change the speed, bytesize, and other parameters. In a terminal window created by @code{serial-term}, you can click on the mode line for configuration. - A serial connection is represented by a process object which can be -used similar to a subprocess or network process. You can send and -receive data and configure the serial port. A serial process object -has no process ID, you can't send signals to it, and the status codes -are different from other types of processes. + A serial connection is represented by a process object, which can be +used in a similar way to a subprocess or network process. You can send and +receive data, and configure the serial port. A serial process object +has no process ID, however, and you can't send signals to it, and the +status codes are different from other types of processes. @code{delete-process} on the process object or @code{kill-buffer} on the process buffer close the connection, but this does not affect the device connected to the serial port. @@ -2505,15 +2505,17 @@ device connected to the serial port. The function @code{process-type} returns the symbol @code{serial} for a process object representing a serial port connection. - Serial ports are available on GNU/Linux, Unix, and Windows systems. + Serial ports are available on GNU/Linux, Unix, and MS Windows systems. @deffn Command serial-term port speed Start a terminal-emulator for a serial port in a new buffer. -@var{port} is the name of the serial port to which to connect. For -example, this could be @file{/dev/ttyS0} on Unix. On Windows, this +@var{port} is the name of the serial port to connect to. For +example, this could be @file{/dev/ttyS0} on Unix. On MS Windows, this could be @file{COM1}, or @file{\\.\COM10} (double the backslashes in Lisp strings). +@c FIXME is 9600 still the most common value, or is it 115200 now? +@c (Same value, 9600, appears below as well.) @var{speed} is the speed of the serial port in bits per second. 9600 is a common value. The buffer is in Term mode; see @ref{Term Mode,,, emacs, The GNU Emacs Manual}, for the commands to use in that buffer. @@ -2522,25 +2524,27 @@ You can change the speed and the configuration in the mode line menu. @defun make-serial-process &rest args This function creates a process and a buffer. Arguments are specified -as keyword/argument pairs. Here's the list of the meaningful keywords: +as keyword/argument pairs. Here's the list of the meaningful +keywords, with the first two (@var{port} and @var{speed}) being mandatory: @table @code -@item :port @var{port}@r{ (mandatory)} +@item :port @var{port} This is the name of the serial port. On Unix and GNU systems, this is a file name such as @file{/dev/ttyS0}. On Windows, this could be @file{COM1}, or @file{\\.\COM10} for ports higher than @file{COM9} (double the backslashes in Lisp strings). -@item :speed @var{speed}@r{ (mandatory)} +@item :speed @var{speed} The speed of the serial port in bits per second. This function calls -@code{serial-process-configure} to handle the speed. +@code{serial-process-configure} to handle the speed; see the +following documentation of that function for more details. @item :name @var{name} The name of the process. If @var{name} is not given, @var{port} will serve as the process name as well. @item :buffer @var{buffer} -The buffer to associate with the process. The value could be either a +The buffer to associate with the process. The value can be either a buffer or a string that names a buffer. Process output goes at the end of that buffer, unless you specify an output stream or filter function to handle the output. If @var{buffer} is not given, the @@ -2550,9 +2554,9 @@ keyword. @item :coding @var{coding} If @var{coding} is a symbol, it specifies the coding system used for both reading and writing for this process. If @var{coding} is a cons -@code{(decoding . encoding)}, @var{decoding} is used for reading, and -@var{encoding} is used for writing. If not specified, the default is -to determine the coding systems from data itself. +@code{(@var{decoding} . @var{encoding})}, @var{decoding} is used for +reading, and @var{encoding} is used for writing. If not specified, +the default is to determine the coding systems from the data itself. @item :noquery @var{query-flag} Initialize the process query flag to @var{query-flag}. @xref{Query @@ -2574,8 +2578,7 @@ Install @var{sentinel} as the process sentinel. @item :plist @var{plist} Install @var{plist} as the initial plist of the process. -@item :speed -@itemx :bytesize +@item :bytesize @itemx :parity @itemx :stopbits @itemx :flowcontrol @@ -2603,7 +2606,7 @@ Here is an example: This functions configures a serial port connection. Arguments are specified as keyword/argument pairs. Attributes that are not given are re-initialized from the process's current configuration (available -via the function @code{process-contact}) or set to reasonable default +via the function @code{process-contact}), or set to reasonable default values. The following arguments are defined: @table @code @@ -2621,8 +2624,8 @@ rate}. The value can be any number, but most serial ports work only at a few defined values between 1200 and 115200, with 9600 being the most common value. If @var{speed} is @code{nil}, the function ignores all other arguments and does not configure the port. This may be -useful for special serial ports such as Bluetooth-to-serial converters -which can only be configured through AT commands sent through the +useful for special serial ports such as Bluetooth-to-serial converters, +which can only be configured through @samp{AT} commands sent through the connection. The value of @code{nil} for @var{speed} is valid only for connections that were already opened by a previous call to @code{make-serial-process} or @code{serial-term}. @@ -2649,9 +2652,9 @@ flow control). If @var{flowcontrol} is not given, it defaults to no flow control. @end table -@code{serial-process-configure} is called by -@code{make-serial-process} for the initial configuration of the serial -port. +Internally, @code{make-serial-process} calls +@code{serial-process-configure} for the initial configuration of the +serial port. @end defun @node Byte Packing @@ -2661,8 +2664,12 @@ port. This section describes how to pack and unpack arrays of bytes, usually for binary network protocols. These functions convert byte arrays to alists, and vice versa. The byte array can be represented as a +@c FIXME? No multibyte? unibyte string or as a vector of integers, while the alist associates symbols either with fixed-size objects or with recursive sub-alists. +To use the functions referred to in this section, load the +@code{bindat} library. +@c It doesn't have any autoloads. @cindex serializing @cindex deserializing @@ -2683,7 +2690,7 @@ direction is also known as @dfn{serializing} or @dfn{packing}. To control unpacking and packing, you write a @dfn{data layout specification}, a special nested list describing named and typed -@dfn{fields}. This specification controls length of each field to be +@dfn{fields}. This specification controls the length of each field to be processed, and how to pack or unpack it. We normally keep bindat specs in variables whose names end in @samp{-bindat-spec}; that kind of name is automatically recognized as ``risky''. @@ -2732,12 +2739,12 @@ String of length @var{len}. Zero-terminated string, in a fixed-size field with length @var{len}. @item vec @var{len} [@var{type}] -Vector of @var{len} elements of type @var{type}, or bytes if not -@var{type} is specified. +Vector of @var{len} elements of type @var{type}, defaulting to bytes. The @var{type} is any of the simple types above, or another vector -specified as a list @code{(vec @var{len} [@var{type}])}. +specified as a list of the form @code{(vec @var{len} [@var{type}])}. @item ip +@c FIXME? IPv6? Four-byte vector representing an Internet address. For example: @code{[127 0 0 1]} for localhost. @@ -2765,12 +2772,11 @@ below, or by an expression @code{(eval @var{form})} where @var{form} should evaluate to an integer, specifying the field length. A field specification generally has the form @code{([@var{name}] -@var{handler})}. The square braces indicate that @var{name} is -optional. (Don't use names that are symbols meaningful as type -specifications (above) or handler specifications (below), since that -would be ambiguous.) @var{name} can be a symbol or the expression -@code{(eval @var{form})}, in which case @var{form} should evaluate to -a symbol. +@var{handler})}, where @var{name} is optional. Don't use names that +are symbols meaningful as type specifications (above) or handler +specifications (below), since that would be ambiguous. @var{name} can +be a symbol or an expression @code{(eval @var{form})}, in which case +@var{form} should evaluate to a symbol. @var{handler} describes how to unpack or pack the field and can be one of the following: @@ -2817,10 +2823,11 @@ of @var{form}. A non-@code{nil} result indicates a match. @item repeat @var{count} @var{field-specs}@dots{} Process the @var{field-specs} recursively, in order, then repeat -starting from the first one, processing all the specs @var{count} +starting from the first one, processing all the specifications @var{count} times overall. The @var{count} is given using the same formats as a field length---if an @code{eval} form is used, it is evaluated just once. -For correct operation, each spec in @var{field-specs} must include a name. +For correct operation, each specification in @var{field-specs} must +include a name. @end table For the @code{(eval @var{form})} forms used in a bindat specification, @@ -2859,9 +2866,10 @@ specification, @code{bindat-raw} to a byte array, and @var{struct} to an alist representing unpacked field data. @defun bindat-unpack spec bindat-raw &optional bindat-idx +@c FIXME? Again, no multibyte? This function unpacks data from the unibyte string or byte array @code{bindat-raw} -according to @var{spec}. Normally this starts unpacking at the +according to @var{spec}. Normally, this starts unpacking at the beginning of the byte array, but if @var{bindat-idx} is non-@code{nil}, it specifies a zero-based starting position to use instead. @@ -2897,7 +2905,7 @@ according to @var{spec}. @defun bindat-pack spec struct &optional bindat-raw bindat-idx This function returns a byte array packed according to @var{spec} from -the data in the alist @var{struct}. Normally it creates and fills a +the data in the alist @var{struct}. It normally creates and fills a new byte array starting at the beginning. However, if @var{bindat-raw} is non-@code{nil}, it specifies a pre-allocated unibyte string or vector to pack into. If @var{bindat-idx} is non-@code{nil}, it specifies the starting @@ -2910,6 +2918,7 @@ meets or exceeds the total length to avoid an out-of-range error. @defun bindat-ip-to-string ip Convert the Internet address vector @var{ip} to a string in the usual dotted notation. +@c FIXME? Does it do IPv6? @example (bindat-ip-to-string [127 0 0 1]) @@ -2919,10 +2928,16 @@ dotted notation. @node Bindat Examples @subsection Examples of Byte Unpacking and Packing +@c FIXME? This seems a very long example for something that is not used +@c very often. As of 24.1, gdb-mi.el is the only user of bindat.el in Emacs. +@c Maybe one or both of these examples should just be moved to the +@c commentary of bindat.el. Here is a complete example of byte unpacking and packing: @lisp +(require 'bindat) + (defvar fcookie-index-spec '((:version u32) (:count u32) @@ -2931,16 +2946,14 @@ dotted notation. (:flags u32) (:delim u8) (:ignored fill 3) - (:offset repeat (:count) - (:foo u32))) + (:offset repeat (:count) (:foo u32))) "Description of a fortune cookie index file's contents.") (defun fcookie (cookies &optional index) "Display a random fortune cookie from file COOKIES. Optional second arg INDEX specifies the associated index -filename, which is by default constructed by appending -\".dat\" to COOKIES. Display cookie text in possibly -new buffer \"*Fortune Cookie: BASENAME*\" where BASENAME +filename, by default \"COOKIES.dat\". Display cookie text +in buffer \"*Fortune Cookie: BASENAME*\", where BASENAME is COOKIES without the directory part." (interactive "fCookies file: ") (let* ((info (with-temp-buffer @@ -2963,10 +2976,9 @@ is COOKIES without the directory part." (defun fcookie-create-index (cookies &optional index delim) "Scan file COOKIES, and write out its index file. -Optional second arg INDEX specifies the index filename, -which is by default constructed by appending \".dat\" to -COOKIES. Optional third arg DELIM specifies the unibyte -character which, when found on a line of its own in +Optional arg INDEX specifies the index filename, which by +default is \"COOKIES.dat\". Optional arg DELIM specifies the +unibyte character that, when found on a line of its own in COOKIES, indicates the border between entries." (interactive "fCookies file: ") (setq delim (or delim ?%)) @@ -3003,8 +3015,8 @@ COOKIES, indicates the border between entries." (write-file (or index (concat cookies ".dat"))))))) @end lisp -Following is an example of defining and unpacking a complex structure. -Consider the following C structures: +The following is an example of defining and unpacking a complex +structure. Consider the following C structures: @example struct header @{ @@ -3017,14 +3029,14 @@ struct header @{ struct data @{ unsigned char type; unsigned char opcode; - unsigned short length; /* In network byte order */ + unsigned short length; /* in network byte order */ unsigned char id[8]; /* null-terminated string */ unsigned char data[/* (length + 3) & ~3 */]; @}; struct packet @{ struct header header; - unsigned long counters[2]; /* In little endian order */ + unsigned long counters[2]; /* in little endian order */ unsigned char items; unsigned char filler[3]; struct data item[/* items */]; @@ -3032,7 +3044,7 @@ struct packet @{ @}; @end example -The corresponding data layout specification: +The corresponding data layout specification is: @lisp (setq header-spec @@ -3044,21 +3056,21 @@ The corresponding data layout specification: (setq data-spec '((type u8) (opcode u8) - (length u16) ;; network byte order + (length u16) ; network byte order (id strz 8) (data vec (length)) (align 4))) (setq packet-spec '((header struct header-spec) - (counters vec 2 u32r) ;; little endian order + (counters vec 2 u32r) ; little endian order (items u8) (fill 3) (item repeat (items) (struct data-spec)))) @end lisp -A binary data representation: +A binary data representation is: @lisp (setq binary-data @@ -3068,7 +3080,7 @@ A binary data representation: 1 4 0 7 ?B ?C ?D ?E ?F ?G 0 0 6 7 8 9 10 11 12 0 ]) @end lisp -The corresponding decoded structure: +The corresponding decoded structure is: @lisp (setq decoded (bindat-unpack packet-spec binary-data)) @@ -3092,7 +3104,7 @@ The corresponding decoded structure: (type . 1)))) @end lisp -Fetching data from this structure: +An example of fetching data from this structure: @lisp (bindat-get-field decoded 'item 1 'id) diff --git a/src/ChangeLog b/src/ChangeLog index fb4da407b70..00d257e6984 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -2,7 +2,7 @@ * process.c (Fset_process_inherit_coding_system_flag) (Fset_process_query_on_exit_flag): Doc fix (mention return value). - (Fmake_network_process): Doc fix. + (Fmake_network_process, Fmake_serial_process): Doc fix. 2012-04-17 Eli Zaretskii diff --git a/src/process.c b/src/process.c index f6ea5d75e1a..3ee22d270e9 100644 --- a/src/process.c +++ b/src/process.c @@ -2528,7 +2528,7 @@ could be "COM1", or "\\\\.\\COM10" for ports higher than COM9 (double the backslashes in strings). :speed SPEED -- (mandatory) is handled by `serial-process-configure', -which is called by `make-serial-process'. +which this function calls. :name NAME -- NAME is the name of the process. If NAME is not given, the value of PORT is used. @@ -2557,13 +2557,12 @@ but you can send outgoing data. The stopped state is cleared by :plist PLIST -- Install PLIST as the initial plist of the process. -:speed :bytesize :parity :stopbits :flowcontrol --- These arguments are handled by `serial-process-configure', which is -called by `make-serial-process'. +-- This function calls `serial-process-configure' to handle these +arguments. The original argument list, possibly modified by later configuration, is available via the function `process-contact'. From 02a540a127be5fb4ccfc03fa0dc386711fd3b708 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 18 Apr 2012 07:17:59 -0400 Subject: [PATCH 064/564] Auto-commit of generated files. --- autogen/configure | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autogen/configure b/autogen/configure index c3e09b90dbb..e9dcce1ccb5 100755 --- a/autogen/configure +++ b/autogen/configure @@ -22316,7 +22316,7 @@ case "$opsys" in ## had not yet been defined and was expanded to null. Hence LD_SWITCH_SYSTEM ## had different values in configure (in ac_link) and src/Makefile.in. ## It seems clearer therefore to put this piece in LD_SWITCH_SYSTEM_TEMACS. - gnu-linux) LD_SWITCH_SYSTEM_TEMACS="\$(LD_SWITCH_X_SITE_AUX)" ;; + gnu*) LD_SWITCH_SYSTEM_TEMACS="\$(LD_SWITCH_X_SITE_AUX_RPATH)" ;; *) LD_SWITCH_SYSTEM_TEMACS= ;; esac From e36899b642d36b3e0280e8e3914f7bbc28e75f9d Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 18 Apr 2012 09:40:06 -0700 Subject: [PATCH 065/564] * configure.in: Do not assume GCC 4.7.0 and/or no stack protection. --- configure.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/configure.in b/configure.in index 6b60e2214fd..21b8c9d2b8f 100644 --- a/configure.in +++ b/configure.in @@ -763,6 +763,8 @@ else nw="$nw -Wshadow" # The following lines should be removable at some point. + nw="$nw -Wstack-protector" + nw="$nw -Wstrict-overflow" nw="$nw -Wsuggest-attribute=const" nw="$nw -Wsuggest-attribute=pure" From 12a106a903756aac5fd545ba8cb8f1b5dc7d9304 Mon Sep 17 00:00:00 2001 From: Leo Liu Date: Thu, 19 Apr 2012 00:43:23 +0800 Subject: [PATCH 066/564] * lisp/abbrev.el (edit-abbrevs): Move point to the abbrev table of current buffer. (prepare-abbrev-list-buffer): Enter edit-abbrevs-mode only if LOCAL is nil. --- lisp/ChangeLog | 7 +++++++ lisp/abbrev.el | 17 +++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 054b3ca5f47..de484dc68fa 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2012-04-18 Leo Liu + + * abbrev.el (edit-abbrevs): Move point to the abbrev table of + current buffer. + (prepare-abbrev-list-buffer): Enter edit-abbrevs-mode only if + LOCAL is nil. + 2012-04-18 Chong Yidong * simple.el (line-move): Use forward-line if in batch mode diff --git a/lisp/abbrev.el b/lisp/abbrev.el index 3845c4ce4e6..7f54d3dc253 100644 --- a/lisp/abbrev.el +++ b/lisp/abbrev.el @@ -134,10 +134,13 @@ Otherwise display all abbrevs." (push table empty-tables) (insert-abbrev-table-description table t))) (dolist (table (nreverse empty-tables)) - (insert-abbrev-table-description table t)))) + (insert-abbrev-table-description table t))) + ;; Note: `list-abbrevs' can dispaly only local abbrevs, in + ;; which case editing could lose abbrevs of other tables. Thus + ;; enter `edit-abbrevs-mode' only if LOCAL is nil. + (edit-abbrevs-mode)) (goto-char (point-min)) (set-buffer-modified-p nil) - (edit-abbrevs-mode) (current-buffer)))) (defun edit-abbrevs-mode () @@ -152,7 +155,8 @@ Otherwise display all abbrevs." (defun edit-abbrevs () "Alter abbrev definitions by editing a list of them. -Selects a buffer containing a list of abbrev definitions. +Selects a buffer containing a list of abbrev definitions with +point located in the abbrev table of current buffer. You can edit them and type \\\\[edit-abbrevs-redefine] to redefine abbrevs according to your editing. Buffer contains a header line for each abbrev table, @@ -163,7 +167,12 @@ where NAME and EXPANSION are strings with quotes, USECOUNT is an integer, and HOOK is any valid function or may be omitted (it is usually omitted)." (interactive) - (switch-to-buffer (prepare-abbrev-list-buffer))) + (let ((table-name (abbrev-table-name local-abbrev-table))) + (switch-to-buffer (prepare-abbrev-list-buffer)) + (when (and table-name + (search-forward + (concat "(" (symbol-name table-name) ")\n\n") nil t)) + (goto-char (match-end 0))))) (defun edit-abbrevs-redefine () "Redefine abbrevs according to current buffer contents." From a77b0ac9928f2ec476de39c704bb899fa4731859 Mon Sep 17 00:00:00 2001 From: Sam Steingold Date: Wed, 18 Apr 2012 16:26:57 -0400 Subject: [PATCH 067/564] * lisp/progmodes/gud.el (gud-key-prefix): Use :type 'key-sequence instead of 'string to accommodate values like [f11]. Always use `vconcat' instead of `concat' on it, like in `gud-def'. * lisp/progmodes/gdb-mi.el: Likewise. --- lisp/ChangeLog | 7 +++++++ lisp/progmodes/gdb-mi.el | 2 +- lisp/progmodes/gud.el | 4 ++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index de484dc68fa..edfe575a576 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2012-04-18 Sam Steingold + + * progmodes/gud.el (gud-key-prefix): Use :type 'key-sequence + instead of 'string to accommodate values like [f11]. + Always use `vconcat' instead of `concat' on it, like in `gud-def'. + * progmodes/gdb-mi.el: Likewise. + 2012-04-18 Leo Liu * abbrev.el (edit-abbrevs): Move point to the abbrev table of diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el index 89450cd2276..497d2440cfd 100644 --- a/lisp/progmodes/gdb-mi.el +++ b/lisp/progmodes/gdb-mi.el @@ -1056,7 +1056,7 @@ positive, otherwise don't automatically raise it." (if gdb-speedbar-auto-raise "en" "dis")))) (define-key gud-minor-mode-map "\C-c\C-w" 'gud-watch) -(define-key global-map (concat gud-key-prefix "\C-w") 'gud-watch) +(define-key global-map (vconcat gud-key-prefix "\C-w") 'gud-watch) (declare-function tooltip-identifier-from-point "tooltip" (point)) diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el index 6b1f891b230..1f60c351252 100644 --- a/lisp/progmodes/gud.el +++ b/lisp/progmodes/gud.el @@ -66,10 +66,10 @@ Supported debuggers include gdb, sdb, dbx, xdb, perldb, pdb (Python) and jdb." (defcustom gud-key-prefix "\C-x\C-a" "Prefix of all GUD commands valid in C buffers." - :type 'string + :type 'key-sequence :group 'gud) -(global-set-key (concat gud-key-prefix "\C-l") 'gud-refresh) +(global-set-key (vconcat gud-key-prefix "\C-l") 'gud-refresh) (define-key ctl-x-map " " 'gud-break) ;; backward compatibility hack (defvar gud-marker-filter nil) From 9d2754f50c88dcf985104a3cd0bec5b75d32b12b Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 18 Apr 2012 22:00:23 -0400 Subject: [PATCH 068/564] Small edits for doc/lispref/minibuf.texi * doc/lispref/minibuf.texi: Standardize metasyntactic variables ("history", etc). Use Texinfo-recommended form of quote+punctuation. (Intro to Minibuffers): First minibuffer is #1, not #0. Mention minibuffer-inactive-mode. (Text from Minibuffer): Copyedits. (Minibuffer History, Programmed Completion): Fix @var usage. --- doc/lispref/ChangeLog | 9 ++++ doc/lispref/minibuf.texi | 96 ++++++++++++++++++++++++---------------- 2 files changed, 67 insertions(+), 38 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 8b1e5b84836..b815dfbd1ef 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,12 @@ +2012-04-19 Glenn Morris + + * minibuf.texi: Standardize metasyntactic variables ("history", etc). + Use Texinfo-recommended form of quote+punctuation. + (Intro to Minibuffers): First minibuffer is #1, not #0. + Mention minibuffer-inactive-mode. + (Text from Minibuffer): Copyedits. + (Minibuffer History, Programmed Completion): Fix @var usage. + 2012-04-18 Glenn Morris * processes.texi (Serial Ports, Byte Packing, Bindat Spec) diff --git a/doc/lispref/minibuf.texi b/doc/lispref/minibuf.texi index a6ef0f52cfb..8fb2a349ac0 100644 --- a/doc/lispref/minibuf.texi +++ b/doc/lispref/minibuf.texi @@ -60,8 +60,10 @@ boundary between the prompt and the actual text. The minibuffer's window is normally a single line; it grows automatically if the contents require more space. You can explicitly +@c FIXME? Works in 23.4, not 24.0.95. (Bug#11276) resize it temporarily with the window sizing commands; it reverts to its normal size when the minibuffer is exited. You can resize it +@c FIXME? Doesn't work in any version of Emacs? permanently by using the window sizing commands in the frame's other window, when the minibuffer is not active. If the frame contains just a minibuffer, you can change the minibuffer's size by changing the @@ -73,9 +75,9 @@ of variables such as @code{this-command} and @code{last-command} code that uses the minibuffer, if you do not want that to change them. Under some circumstances, a command can use a minibuffer even if -there is an active minibuffer; such minibuffers are called a +there is an active minibuffer; such a minibuffer is called a @dfn{recursive minibuffer}. The first minibuffer is named -@w{@samp{ *Minibuf-0*}}. Recursive minibuffers are named by +@w{@samp{ *Minibuf-1*}}. Recursive minibuffers are named by incrementing the number at the end of the name. (The names begin with a space so that they won't show up in normal buffer lists.) Of several recursive minibuffers, the innermost (or most recently @@ -91,6 +93,14 @@ to be done. @xref{Text from Minibuffer}, for the non-completion minibuffer local maps. @xref{Completion Commands}, for the minibuffer local maps for completion. +@findex minibuffer-inactive-mode +@vindex minibuffer-inactive-mode-map +@cindex inactive minibuffer + When a minibuffer is inactive, it's major mode is +@code{minibuffer-inactive-mode}, with keymap +@code{minibuffer-inactive-mode-map}. This is only really useful if +the minibuffer is in a separate frame. @xref{Minibuffers and Frames}. + When Emacs is running in batch mode, any request to read from the minibuffer actually reads a line from the standard input descriptor that was supplied when Emacs was started. @@ -111,7 +121,7 @@ middle of a Lisp function. Instead, do all minibuffer input as part of reading the arguments for a command, in the @code{interactive} specification. @xref{Defining Commands}. -@defun read-from-minibuffer prompt-string &optional initial-contents keymap read hist default inherit-input-method +@defun read-from-minibuffer prompt &optional initial keymap read history default inherit-input-method This function is the most general way to get input from the minibuffer. By default, it accepts arbitrary text and returns it as a string; however, if @var{read} is non-@code{nil}, then it uses @@ -119,8 +129,8 @@ string; however, if @var{read} is non-@code{nil}, then it uses Functions}). The first thing this function does is to activate a minibuffer and -display it with @var{prompt-string} as the prompt. This value must be a -string. Then the user can edit text in the minibuffer. +display it with @var{prompt} (which must be a string) as the +prompt. Then the user can edit text in the minibuffer. When the user types a command to exit the minibuffer, @code{read-from-minibuffer} constructs the return value from the text in @@ -132,7 +142,7 @@ reads the text and returns the resulting Lisp object, unevaluated. The argument @var{default} specifies default values to make available through the history commands. It should be a string, a list of strings, or @code{nil}. The string or strings become the minibuffer's -``future history,'' available to the user with @kbd{M-n}. +``future history'', available to the user with @kbd{M-n}. If @var{read} is non-@code{nil}, then @var{default} is also used as the input to @code{read}, if the user enters empty input. @@ -149,12 +159,13 @@ value of @code{minibuffer-local-map} is used as the keymap. Specifying a keymap is the most important way to customize the minibuffer for various applications such as completion. -The argument @var{hist} specifies which history list variable to use +The argument @var{history} specifies a history list variable to use for saving the input and for history commands used in the minibuffer. -It defaults to @code{minibuffer-history}. @xref{Minibuffer History}. +It defaults to @code{minibuffer-history}. You can optionally specify +a starting position in the history list as well. @xref{Minibuffer History}. If the variable @code{minibuffer-allow-text-properties} is -non-@code{nil}, then the string which is returned includes whatever text +non-@code{nil}, then the string that is returned includes whatever text properties were present in the minibuffer. Otherwise all the text properties are stripped when the value is returned. @@ -164,9 +175,9 @@ the setting of @code{enable-multibyte-characters} (@pxref{Text Representations}) from whichever buffer was current before entering the minibuffer. -Use of @var{initial-contents} is mostly deprecated; we recommend using +Use of @var{initial} is mostly deprecated; we recommend using a non-@code{nil} value only in conjunction with specifying a cons cell -for @var{hist}. @xref{Initial Input}. +for @var{history}. @xref{Initial Input}. @end defun @defun read-string prompt &optional initial history default inherit-input-method @@ -179,11 +190,11 @@ The optional argument @var{default} is used as in @code{read-from-minibuffer}, except that, if non-@code{nil}, it also specifies a default value to return if the user enters null input. As in @code{read-from-minibuffer} it should be a string, a list of -strings, or @code{nil} which is equivalent to an empty string. When +strings, or @code{nil}, which is equivalent to an empty string. When @var{default} is a string, that string is the default value. When it is a list of strings, the first string is the default value. (All these strings are available to the user in the ``future minibuffer -history.'') +history''.) This function works by calling the @code{read-from-minibuffer} function: @@ -202,16 +213,16 @@ This function works by calling the @end smallexample @end defun -@defun read-regexp prompt &optional default-value +@defun read-regexp prompt &optional default This function reads a regular expression as a string from the minibuffer and returns it. The argument @var{prompt} is used as in @code{read-from-minibuffer}. The keymap used is @code{minibuffer-local-map}, and @code{regexp-history} is used as the history list (@pxref{Minibuffer History, regexp-history}). -The optional argument @var{default-value} specifies a default value to +The optional argument @var{default} specifies a default value to return if the user enters null input; it should be a string, or -@code{nil} which is equivalent to an empty string. +@code{nil}, which is equivalent to an empty string. In addition, @code{read-regexp} collects a few useful candidates for input and passes them to @code{read-from-minibuffer}, to make them @@ -235,9 +246,9 @@ function, after computing the list of defaults as described above. @end defun @defvar minibuffer-allow-text-properties -If this variable is @code{nil}, then @code{read-from-minibuffer} strips -all text properties from the minibuffer input before returning it. -This variable also affects @code{read-string}. However, +If this variable is @code{nil}, then @code{read-from-minibuffer} +and @code{read-string} strip all text properties from the minibuffer +input before returning it. However, @code{read-no-blanks-input} (see below), as well as @code{read-minibuffer} and related functions (@pxref{Object from Minibuffer,, Reading Lisp Objects With the Minibuffer}), and all @@ -275,6 +286,12 @@ default, it makes the following bindings: @item @kbd{M-r} @code{previous-matching-history-element} + +@ignore +@c Does not seem worth/appropriate mentioning. +@item @kbd{C-@key{TAB}} +@code{file-cache-minibuffer-complete} +@end ignore @end table @end defvar @@ -305,6 +322,8 @@ This function discards text properties, regardless of the value of @end smallexample @end defun +@c Slightly unfortunate name, suggesting it might be related to the +@c Nextstep port... @defvar minibuffer-local-ns-map This built-in variable is the keymap used as the minibuffer local keymap in the function @code{read-no-blanks-input}. By default, it makes the @@ -441,7 +460,7 @@ is a list of strings (previous inputs), most recent first. kinds of inputs. It's the Lisp programmer's job to specify the right history list for each use of the minibuffer. - You specify a minibuffer history list with the optional @var{hist} + You specify a minibuffer history list with the optional @var{history} argument to @code{read-from-minibuffer} or @code{completing-read}. Here are the possible values for it: @@ -457,7 +476,7 @@ Specifying 0 for @var{startpos} is equivalent to just specifying the symbol @var{variable}. @code{previous-history-element} will display the most recent element of the history list in the minibuffer. If you specify a positive @var{startpos}, the minibuffer history functions -behave as if @code{(elt @var{variable} (1- @var{STARTPOS}))} were the +behave as if @code{(elt @var{variable} (1- @var{startpos}))} were the history element currently shown in the minibuffer. For consistency, you should also specify that element of the history @@ -465,7 +484,7 @@ as the initial minibuffer contents, using the @var{initial} argument to the minibuffer input function (@pxref{Initial Input}). @end table - If you don't specify @var{hist}, then the default history list + If you don't specify @var{history}, then the default history list @code{minibuffer-history} is used. For other standard history lists, see below. You can also create your own history list variable; just initialize it to @code{nil} before the first use. @@ -560,7 +579,7 @@ A history list for arguments that are Lisp expressions to evaluate. @section Initial Input Several of the functions for minibuffer input have an argument called -@var{initial} or @var{initial-contents}. This is a mostly-deprecated +@var{initial}. This is a mostly-deprecated feature for specifying that the minibuffer should start out with certain text, instead of empty as usual. @@ -577,7 +596,7 @@ to offer useful default inputs to the user. There is just one situation where you should specify a string for an @var{initial} argument. This is when you specify a cons cell for the -@var{hist} or @var{history} argument. @xref{Minibuffer History}. +@var{history} argument. @xref{Minibuffer History}. @var{initial} can also be a cons cell of the form @code{(@var{string} . @var{position})}. This means to insert @var{string} in the @@ -663,7 +682,7 @@ If @var{collection} is an alist (@pxref{Association Lists}), the permissible completions are the elements of the alist that are either strings, or conses whose @sc{car} is a string or symbol. Symbols are converted to strings using @code{symbol-name}. Other -elements of the alist are ignored. (Remember that in Emacs Lisp, the +elements of the alist are ignored. (Remember that in Emacs Lisp, the elements of alists do not @emph{have} to be conses.) In particular, a list of strings is allowed, even though we usually do not think of such lists as alists. @@ -880,7 +899,7 @@ Here is a usage example: This section describes the basic interface for reading from the minibuffer with completion. -@defun completing-read prompt collection &optional predicate require-match initial hist default inherit-input-method +@defun completing-read prompt collection &optional predicate require-match initial history default inherit-input-method This function reads a string in the minibuffer, assisting the user by providing completion. It activates the minibuffer with prompt @var{prompt}, which must be a string. @@ -935,13 +954,13 @@ The function @code{completing-read} uses @code{minibuffer-local-must-match-map} if @var{require-match} is non-@code{nil}. @xref{Completion Commands}. -The argument @var{hist} specifies which history list variable to use for +The argument @var{history} specifies which history list variable to use for saving the input and for minibuffer history commands. It defaults to @code{minibuffer-history}. @xref{Minibuffer History}. The argument @var{initial} is mostly deprecated; we recommend using a non-@code{nil} value only in conjunction with specifying a cons cell -for @var{hist}. @xref{Initial Input}. For default input, use +for @var{history}. @xref{Initial Input}. For default input, use @var{default} instead. If the argument @var{inherit-input-method} is non-@code{nil}, then the @@ -1545,17 +1564,17 @@ The file is @point{} @end example @end defopt -@defun read-shell-command prompt &optional initial-contents hist &rest args +@defun read-shell-command prompt &optional initial history &rest args This function reads a shell command from the minibuffer, prompting with @var{prompt} and providing intelligent completion. It completes the first word of the command using candidates that are appropriate for command names, and the rest of the command words as file names. This function uses @code{minibuffer-local-shell-command-map} as the -keymap for minibuffer input. The @var{hist} argument specifies the +keymap for minibuffer input. The @var{history} argument specifies the history list to use; if is omitted or @code{nil}, it defaults to @code{shell-command-history} (@pxref{Minibuffer History, -shell-command-history}). The optional argument @var{initial-contents} +shell-command-history}). The optional argument @var{initial} specifies the initial content of the minibuffer (@pxref{Initial Input}). The rest of @var{args}, if present, are used as the @var{default} and @var{inherit-input-method} arguments in @@ -1727,9 +1746,10 @@ some completion alternative; @code{nil} otherwise. @item (boundaries . @var{suffix}) This specifies a @code{completion-boundaries} operation. The function -should return @code{(boundaries START . END)}, where START is the -position of the beginning boundary in the specified string, and END is -the position of the end boundary in SUFFIX. +should return @code{(boundaries @var{start} . @var{end})}, where +@var{start} is the position of the beginning boundary in the specified +string, and @var{end} is the position of the end boundary in +@var{suffix}. @item metadata This specifies a request for information about the state of the @@ -1891,7 +1911,7 @@ the call. This function asks the user a question, expecting input in the echo area. It returns @code{t} if the user types @kbd{y}, @code{nil} if the user types @kbd{n}. This function also accepts @key{SPC} to mean yes -and @key{DEL} to mean no. It accepts @kbd{C-]} to mean ``quit,'' like +and @key{DEL} to mean no. It accepts @kbd{C-]} to mean ``quit'', like @kbd{C-g}, because the question might look like a minibuffer and for that reason the user might try to use @kbd{C-]} to get out. The answer is a single character, with no @key{RET} needed to terminate it. Upper @@ -1952,10 +1972,10 @@ We show successive lines of echo area messages, but only one actually appears on the screen at a time. @end defun -@defun y-or-n-p-with-timeout prompt seconds default-value +@defun y-or-n-p-with-timeout prompt seconds default Like @code{y-or-n-p}, except that if the user fails to answer within @var{seconds} seconds, this function stops waiting and returns -@var{default-value}. It works by setting up a timer; see @ref{Timers}. +@var{default}. It works by setting up a timer; see @ref{Timers}. The argument @var{seconds} may be an integer or a floating point number. @end defun @@ -2081,7 +2101,7 @@ answer); @var{function} is a function of one argument (an object from When the user responds with @var{char}, @code{map-y-or-n-p} calls @var{function}. If it returns non-@code{nil}, the object is considered -``acted upon,'' and @code{map-y-or-n-p} advances to the next object in +``acted upon'', and @code{map-y-or-n-p} advances to the next object in @var{list}. If it returns @code{nil}, the prompt is repeated for the same object. From 78c1f4901d5f98f5dc1a05f521a409b753c30548 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 18 Apr 2012 19:44:48 -0700 Subject: [PATCH 069/564] Shameful typo --- doc/lispref/minibuf.texi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lispref/minibuf.texi b/doc/lispref/minibuf.texi index 8fb2a349ac0..f4cc156e284 100644 --- a/doc/lispref/minibuf.texi +++ b/doc/lispref/minibuf.texi @@ -96,7 +96,7 @@ local maps for completion. @findex minibuffer-inactive-mode @vindex minibuffer-inactive-mode-map @cindex inactive minibuffer - When a minibuffer is inactive, it's major mode is + When a minibuffer is inactive, its major mode is @code{minibuffer-inactive-mode}, with keymap @code{minibuffer-inactive-mode-map}. This is only really useful if the minibuffer is in a separate frame. @xref{Minibuffers and Frames}. From c0ea08d2d1420d69b7d0275afcb47b36864b0da4 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 18 Apr 2012 23:04:05 -0700 Subject: [PATCH 070/564] More small edits for doc/lispref/minibuf.texi * doc/lispref/minibuf.texi (Object from Minibuffer): Remove overly pedantic paragraph. (Minibuffer History): Copyedits. Add face-name-history. (Initial Input, Yes-or-No Queries, Multiple Queries) (Minibuffer Windows, Minibuffer Misc): Copyedits. (Yes-or-No Queries): Tweak example. (Minibuffer Commands): Add next-complete-history-element. (Minibuffer Misc): Mention minibuffer-message-timeout, and minibuffer-inactive-mode. * doc/lispref/minibuf.texi (Minibuffers): * doc/lispref/elisp.texi, doc/lispref/vol1.texi, doc/lispref/vol2.texi: Fix minibuffer subsection order. * lisp/subr.el: Comment. --- doc/lispref/ChangeLog | 12 +++++ doc/lispref/elisp.texi | 2 +- doc/lispref/minibuf.texi | 97 +++++++++++++++++++++++++--------------- doc/lispref/vol1.texi | 2 +- doc/lispref/vol2.texi | 2 +- lisp/subr.el | 2 + 6 files changed, 78 insertions(+), 39 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index b815dfbd1ef..ff0b29100ee 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,5 +1,17 @@ 2012-04-19 Glenn Morris + * minibuf.texi (Object from Minibuffer): Remove overly pedantic para. + (Minibuffer History): Copyedits. Add face-name-history. + (Initial Input, Yes-or-No Queries, Multiple Queries) + (Minibuffer Windows, Minibuffer Misc): Copyedits. + (Yes-or-No Queries): Tweak example. + (Minibuffer Commands): Add next-complete-history-element. + (Minibuffer Misc): Mention minibuffer-message-timeout, and + minibuffer-inactive-mode. + + * minibuf.texi (Minibuffers): + * elisp.texi, vol1.texi, vol2.texi: Fix minibuffer subsection order. + * minibuf.texi: Standardize metasyntactic variables ("history", etc). Use Texinfo-recommended form of quote+punctuation. (Intro to Minibuffers): First minibuffer is #1, not #0. diff --git a/doc/lispref/elisp.texi b/doc/lispref/elisp.texi index 76397556b01..fd20bed16ae 100644 --- a/doc/lispref/elisp.texi +++ b/doc/lispref/elisp.texi @@ -637,8 +637,8 @@ Minibuffers * Multiple Queries:: Asking a series of similar questions. * Reading a Password:: Reading a password from the terminal. * Minibuffer Commands:: Commands used as key bindings in minibuffers. -* Minibuffer Contents:: How such commands access the minibuffer text. * Minibuffer Windows:: Operating on the special minibuffer windows. +* Minibuffer Contents:: How such commands access the minibuffer text. * Recursive Mini:: Whether recursive entry to minibuffer is allowed. * Minibuffer Misc:: Various customization hooks and variables. diff --git a/doc/lispref/minibuf.texi b/doc/lispref/minibuf.texi index f4cc156e284..c856f0f6663 100644 --- a/doc/lispref/minibuf.texi +++ b/doc/lispref/minibuf.texi @@ -30,8 +30,8 @@ argument. * Multiple Queries:: Asking a series of similar questions. * Reading a Password:: Reading a password from the terminal. * Minibuffer Commands:: Commands used as key bindings in minibuffers. -* Minibuffer Contents:: How such commands access the minibuffer text. * Minibuffer Windows:: Operating on the special minibuffer windows. +* Minibuffer Contents:: How such commands access the minibuffer text. * Recursive Mini:: Whether recursive entry to minibuffer is allowed. * Minibuffer Misc:: Various customization hooks and variables. @end menu @@ -93,8 +93,6 @@ to be done. @xref{Text from Minibuffer}, for the non-completion minibuffer local maps. @xref{Completion Commands}, for the minibuffer local maps for completion. -@findex minibuffer-inactive-mode -@vindex minibuffer-inactive-mode-map @cindex inactive minibuffer When a minibuffer is inactive, its major mode is @code{minibuffer-inactive-mode}, with keymap @@ -408,23 +406,16 @@ This function simply evaluates the result of a call to @end defun @defun edit-and-eval-command prompt form -This function reads a Lisp expression in the minibuffer, and then -evaluates it. The difference between this command and +This function reads a Lisp expression in the minibuffer, evaluates it, +then returns the result. The difference between this command and @code{eval-minibuffer} is that here the initial @var{form} is not optional and it is treated as a Lisp object to be converted to printed representation rather than as a string of text. It is printed with @code{prin1}, so if it is a string, double-quote characters (@samp{"}) appear in the initial text. @xref{Output Functions}. -The first thing @code{edit-and-eval-command} does is to activate the -minibuffer with @var{prompt} as the prompt. Then it inserts the printed -representation of @var{form} in the minibuffer, and lets the user edit it. -When the user exits the minibuffer, the edited text is read with -@code{read} and then evaluated. The resulting value becomes the value -of @code{edit-and-eval-command}. - In the following example, we offer the user an expression with initial -text which is a valid form already: +text that is already a valid form: @smallexample @group @@ -444,7 +435,6 @@ Please edit: (forward-word 1)@point{} @noindent Typing @key{RET} right away would exit the minibuffer and evaluate the expression, thus moving point forward one word. -@code{edit-and-eval-command} returns @code{nil} in this example. @end defun @node Minibuffer History @@ -523,15 +513,15 @@ If the value of this variable is @code{nil}, standard functions that read from the minibuffer don't add new elements to the history list. This lets Lisp programs explicitly manage input history by using @code{add-to-history}. By default, @code{history-add-new-input} is -set to a non-@code{nil} value. +non-@code{nil}. @end defvar @defopt history-length The value of this variable specifies the maximum length for all history lists that don't specify their own maximum lengths. If the value is @code{t}, that means there is no maximum (don't delete old -elements). The value of @code{history-length} property of the history -list variable's symbol, if set, overrides this variable for that +elements). If a history list variable's symbol has a non-@code{nil} +@code{history-length} property, it overrides this variable for that particular history list. @end defopt @@ -575,6 +565,14 @@ A history list for arguments that are shell commands. A history list for arguments that are Lisp expressions to evaluate. @end defvar +@defvar face-name-history +A history list for arguments that are faces. +@end defvar + +@c Less common: coding-system-history, input-method-history, +@c command-history, grep-history, grep-find-history, +@c read-envvar-name-history, setenv-history, yes-or-no-p-history. + @node Initial Input @section Initial Input @@ -608,11 +606,10 @@ inconsistently in different functions. In @code{completing-read}, of 0 means the beginning of the string, 1 means after the first character, etc. In @code{read-minibuffer}, and the other non-completion minibuffer input functions that support this argument, -1 means the beginning of the string 2 means after the first character, +1 means the beginning of the string, 2 means after the first character, etc. -Use of a cons cell as the value for @var{initial} arguments is -deprecated in user code. +Use of a cons cell as the value for @var{initial} arguments is deprecated. @node Completion @section Completion @@ -1900,7 +1897,7 @@ answer. using the mouse---more precisely, if @code{last-nonmenu-event} (@pxref{Command Loop Info}) is either @code{nil} or a list---then it uses a dialog box or pop-up menu to ask the question. Otherwise, it -uses keyboard input. You can force use of the mouse or use of keyboard +uses keyboard input. You can force use either of the mouse or of keyboard input by binding @code{last-nonmenu-event} to a suitable value around the call. @@ -1935,12 +1932,16 @@ hardwired. The keymap @code{query-replace-map} specifies them. In the following example, the user first types @kbd{q}, which is invalid. At the next prompt the user types @kbd{y}. +@c Need an interactive example, because otherwise the return value +@c obscures the display of the valid answer. @smallexample @group -(y-or-n-p "Do you need a lift? ") +(defun ask () + (interactive) + (y-or-n-p "Do you need a lift? ")) -;; @r{After evaluation of the preceding expression,} -;; @r{the following prompt appears in the echo area:} +;; @r{After evaluation of the preceding definition, @kbd{M-x ask}} +;; @r{causes the following prompt to appear in the echo area:} @end group @group @@ -2043,7 +2044,7 @@ single-character answer in the echo area for each one. The value of @var{list} specifies the objects to ask questions about. It should be either a list of objects or a generator function. If it is a function, it should expect no arguments, and should return either the -next object to ask about, or @code{nil} meaning stop asking questions. +next object to ask about, or @code{nil}, meaning to stop asking questions. The argument @var{prompter} specifies how to ask each question. If @var{prompter} is a string, the question text is computed like this: @@ -2059,8 +2060,8 @@ where @var{object} is the next object to ask about (as obtained from If not a string, @var{prompter} should be a function of one argument (the next object to ask about) and should return the question text. If the value is a string, that is the question to ask the user. The -function can also return @code{t} meaning do act on this object (and -don't ask the user), or @code{nil} meaning ignore this object (and don't +function can also return @code{t}, meaning do act on this object (and +don't ask the user), or @code{nil}, meaning ignore this object (and don't ask the user). The argument @var{actor} says how to act on the answers that the user @@ -2113,12 +2114,14 @@ If @code{map-y-or-n-p} is called in a command that was invoked using the mouse---more precisely, if @code{last-nonmenu-event} (@pxref{Command Loop Info}) is either @code{nil} or a list---then it uses a dialog box or pop-up menu to ask the question. In this case, it does not use -keyboard input or the echo area. You can force use of the mouse or use +keyboard input or the echo area. You can force use either of the mouse or of keyboard input by binding @code{last-nonmenu-event} to a suitable value around the call. The return value of @code{map-y-or-n-p} is the number of objects acted on. @end defun +@c FIXME An example of this would be more useful than all the +@c preceding examples of simple things. @node Reading a Password @section Reading a Password @@ -2181,6 +2184,19 @@ This command replaces the minibuffer contents with the value of the regular expression). @end deffn +@deffn Command previous-complete-history-element n +This command replaces the minibuffer contents with the value of the +@var{n}th previous (older) history element that completes the current +contents of the minibuffer before the point. +@end deffn + +@deffn Command next-complete-history-element n +This command replaces the minibuffer contents with the value of the +@var{n}th next (newer) history element that completes the current +contents of the minibuffer before the point. +@end deffn + + @node Minibuffer Windows @section Minibuffer Windows @cindex minibuffer windows @@ -2190,7 +2206,7 @@ and test whether they are active. @defun active-minibuffer-window This function returns the currently active minibuffer window, or -@code{nil} if none is currently active. +@code{nil} if there is none. @end defun @defun minibuffer-window &optional frame @@ -2223,8 +2239,8 @@ there can be more than one minibuffer window if there is more than one frame. @defun minibuffer-window-active-p window -This function returns non-@code{nil} if @var{window}, assumed to be -a minibuffer window, is currently active. +This function returns non-@code{nil} if @var{window} is the currently +active minibuffer window. @end defun @node Minibuffer Contents @@ -2339,7 +2355,7 @@ minibuffer, it scrolls this window. @end defvar @defun minibuffer-selected-window -This function returns the window which was selected when the +This function returns the window that was selected when the minibuffer was entered. If selected window is not a minibuffer window, it returns @code{nil}. @end defun @@ -2350,10 +2366,19 @@ windows. If a float, it specifies a fraction of the height of the frame. If an integer, it specifies a number of lines. @end defopt +@vindex minibuffer-message-timeout @defun minibuffer-message string &rest args This function displays @var{string} temporarily at the end of the -minibuffer text, for two seconds, or until the next input event -arrives, whichever comes first. If @var{args} is non-@code{nil}, the -actual message is obtained by passing @var{string} and @var{args} -through @code{format}. @xref{Formatting Strings}. +minibuffer text, for a few seconds, or until the next input event +arrives, whichever comes first. The variable +@code{minibuffer-message-timeout} specifies the number of seconds to +wait in the absence of input. It defaults to 2. If @var{args} is +non-@code{nil}, the actual message is obtained by passing @var{string} +and @var{args} through @code{format}. @xref{Formatting Strings}. @end defun + +@deffn Command minibuffer-inactive-mode +This is the major mode used in inactive minibuffers. It uses +keymap @code{minibuffer-inactive-mode-map}. This can be useful +if the minibuffer is in a separate frame. @xref{Minibuffers and Frames}. +@end deffn diff --git a/doc/lispref/vol1.texi b/doc/lispref/vol1.texi index 45a0dee3b1c..c16947692e4 100644 --- a/doc/lispref/vol1.texi +++ b/doc/lispref/vol1.texi @@ -658,8 +658,8 @@ Minibuffers * Multiple Queries:: Asking a series of similar questions. * Reading a Password:: Reading a password from the terminal. * Minibuffer Commands:: Commands used as key bindings in minibuffers. -* Minibuffer Contents:: How such commands access the minibuffer text. * Minibuffer Windows:: Operating on the special minibuffer windows. +* Minibuffer Contents:: How such commands access the minibuffer text. * Recursive Mini:: Whether recursive entry to minibuffer is allowed. * Minibuffer Misc:: Various customization hooks and variables. diff --git a/doc/lispref/vol2.texi b/doc/lispref/vol2.texi index 01a3e3c129e..b7dc8366f97 100644 --- a/doc/lispref/vol2.texi +++ b/doc/lispref/vol2.texi @@ -657,8 +657,8 @@ Minibuffers * Multiple Queries:: Asking a series of similar questions. * Reading a Password:: Reading a password from the terminal. * Minibuffer Commands:: Commands used as key bindings in minibuffers. -* Minibuffer Contents:: How such commands access the minibuffer text. * Minibuffer Windows:: Operating on the special minibuffer windows. +* Minibuffer Contents:: How such commands access the minibuffer text. * Recursive Mini:: Whether recursive entry to minibuffer is allowed. * Minibuffer Misc:: Various customization hooks and variables. diff --git a/lisp/subr.el b/lisp/subr.el index 87b98988525..3b120e6ff6a 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -2335,6 +2335,8 @@ is nil and `use-dialog-box' is non-nil." (discard-input)))) (let ((ret (eq answer 'act))) (unless noninteractive + ;; FIXME this prints one too many spaces, since prompt + ;; already ends in a space. Eg "... (y or n) y". (message "%s %s" prompt (if ret "y" "n"))) ret))) From c5467d73aea190e3712f1e146c326ad2d94ed0bb Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 18 Apr 2012 23:05:58 -0700 Subject: [PATCH 071/564] ChangeLog fix --- doc/lispref/ChangeLog | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index ff0b29100ee..33aa40d816e 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,14 +1,5 @@ 2012-04-19 Glenn Morris - * minibuf.texi (Object from Minibuffer): Remove overly pedantic para. - (Minibuffer History): Copyedits. Add face-name-history. - (Initial Input, Yes-or-No Queries, Multiple Queries) - (Minibuffer Windows, Minibuffer Misc): Copyedits. - (Yes-or-No Queries): Tweak example. - (Minibuffer Commands): Add next-complete-history-element. - (Minibuffer Misc): Mention minibuffer-message-timeout, and - minibuffer-inactive-mode. - * minibuf.texi (Minibuffers): * elisp.texi, vol1.texi, vol2.texi: Fix minibuffer subsection order. @@ -18,6 +9,14 @@ Mention minibuffer-inactive-mode. (Text from Minibuffer): Copyedits. (Minibuffer History, Programmed Completion): Fix @var usage. + (Object from Minibuffer): Remove overly pedantic para. + (Minibuffer History): Copyedits. Add face-name-history. + (Initial Input, Yes-or-No Queries, Multiple Queries) + (Minibuffer Windows, Minibuffer Misc): Copyedits. + (Yes-or-No Queries): Tweak example. + (Minibuffer Commands): Add next-complete-history-element. + (Minibuffer Misc): Mention minibuffer-message-timeout, and + minibuffer-inactive-mode. 2012-04-18 Glenn Morris From b668fa6eb0d46a8f3c675954dfd8ce79e6441129 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Thu, 19 Apr 2012 16:09:30 +0800 Subject: [PATCH 072/564] Delete the gdb-inferior pty when the gdb process exits. * lisp/progmodes/gdb-mi.el (gdb-inferior-io--maybe-delete-pty): New function to call delete-process on the gdb-inferior buffer's pty. (gdb-reset): Use it, instead of relying on kill-buffer to kill the pty process. (gdb-update): New arg to suppress talking to the gdb process. (gdb-done-or-error): Use it. (gdb-stopped-functions): Rename from gdb-stopped-hooks. (gdb): Call gdb-inferior-io--maybe-delete-pty as a workaround for sentinel not being called. * lisp/comint.el (make-comint-in-buffer, comint-exec): Doc fix. Fixes: debbugs:11273 --- lisp/ChangeLog | 14 ++++++++ lisp/comint.el | 34 +++++++++++++------ lisp/progmodes/gdb-mi.el | 72 ++++++++++++++++++++++++++-------------- 3 files changed, 86 insertions(+), 34 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 7ef7628b6d6..1ce5e7fceea 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,17 @@ +2012-04-19 Chong Yidong + + * progmodes/gdb-mi.el (gdb-inferior-io--maybe-delete-pty): New + function to call delete-process on the gdb-inferior buffer's pty. + (gdb-reset): Use it, instead of relying on kill-buffer to kill the + pty process (Bug#11273). + (gdb-update): New arg to suppress talking to the gdb process. + (gdb-done-or-error): Use it. + (gdb-stopped-functions): Rename from gdb-stopped-hooks. + (gdb): Call gdb-inferior-io--maybe-delete-pty as a workaround for + sentinel not being called. + + * comint.el (make-comint-in-buffer, comint-exec): Doc fix. + 2012-04-18 Chong Yidong * progmodes/grep.el (grep, rgrep): Doc fix (Bug#11268). diff --git a/lisp/comint.el b/lisp/comint.el index 68fedeb88a9..10981675971 100644 --- a/lisp/comint.el +++ b/lisp/comint.el @@ -699,16 +699,21 @@ BUFFER can be either a buffer or the name of one." (defun make-comint-in-buffer (name buffer program &optional startfile &rest switches) "Make a Comint process NAME in BUFFER, running PROGRAM. If BUFFER is nil, it defaults to NAME surrounded by `*'s. -PROGRAM should be either a string denoting an executable program to create -via `start-file-process', or a cons pair of the form (HOST . SERVICE) denoting -a TCP connection to be opened via `open-network-stream'. If there is already -a running process in that buffer, it is not restarted. Optional fourth arg -STARTFILE is the name of a file, whose contents are sent to the -process as its initial input. +If there is a running process in BUFFER, it is not restarted. + +PROGRAM should be one of the following: +- a string, denoting an executable program to create via + `start-file-process' +- a cons pair of the form (HOST . SERVICE), denoting a TCP + connection to be opened via `open-network-stream' +- nil, denoting a newly-allocated pty. + +Optional fourth arg STARTFILE is the name of a file, whose +contents are sent to the process as its initial input. If PROGRAM is a string, any more args are arguments to PROGRAM. -Returns the (possibly newly created) process buffer." +Return the (possibly newly created) process buffer." (or (fboundp 'start-file-process) (error "Multi-processing is not supported for this system")) (setq buffer (get-buffer-create (or buffer (concat "*" name "*")))) @@ -752,9 +757,18 @@ See `make-comint' and `comint-exec'." (defun comint-exec (buffer name command startfile switches) "Start up a process named NAME in buffer BUFFER for Comint modes. Runs the given COMMAND with SWITCHES, and initial input from STARTFILE. -Blasts any old process running in the buffer. Doesn't set the buffer mode. -You can use this to cheaply run a series of processes in the same Comint -buffer. The hook `comint-exec-hook' is run after each exec." + +COMMAND should be one of the following: +- a string, denoting an executable program to create via + `start-file-process' +- a cons pair of the form (HOST . SERVICE), denoting a TCP + connection to be opened via `open-network-stream' +- nil, denoting a newly-allocated pty. + +This function blasts any old process running in the buffer, and +does not set the buffer mode. You can use this to cheaply run a +series of processes in the same Comint buffer. The hook +`comint-exec-hook' is run after each exec." (with-current-buffer buffer (let ((proc (get-buffer-process buffer))) ; Blast any old process. (if proc (delete-process proc))) diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el index 89450cd2276..450075fde42 100644 --- a/lisp/progmodes/gdb-mi.el +++ b/lisp/progmodes/gdb-mi.el @@ -375,9 +375,8 @@ Emacs always switches to the thread which caused the stop." :version "23.2" :link '(info-link "(gdb)GDB/MI Async Records")) -(defcustom gdb-stopped-hooks nil - "This variable holds a list of functions to be called whenever -GDB stops. +(defcustom gdb-stopped-functions nil + "List of functions called whenever GDB stops. Each function takes one argument, a parsed MI response, which contains fields of corresponding MI *stopped async record: @@ -818,6 +817,11 @@ detailed description of this mode. nil 'local) (local-set-key "\C-i" 'completion-at-point) + ;; FIXME: Under some circumstances, `gud-sentinel' apparently does + ;; not get called when the gdb process is killed (Bug#11273). + (add-hook 'post-command-hook 'gdb-inferior-io--maybe-delete-pty + nil t) + (setq gdb-first-prompt t) (setq gud-running nil) @@ -1510,6 +1514,14 @@ DOC is an optional documentation string." (gdb-display-buffer (gdb-get-buffer-create 'gdb-inferior-io) t)) +(defun gdb-inferior-io--maybe-delete-pty () + (let ((proc (get-buffer-process gud-comint-buffer)) + (inf-pty (get-process "gdb-inferior"))) + (and (or (null proc) + (memq (process-status proc) '(exit signal))) + inf-pty + (delete-process inf-pty)))) + (defconst gdb-frame-parameters '((height . 14) (width . 80) (unsplittable . t) @@ -1746,24 +1758,27 @@ If `gdb-thread-number' is nil, just wrap NAME in asterisks." (setq gdb-output-sink 'user) (setq gdb-pending-triggers nil)) -(defun gdb-update () - "Update buffers showing status of debug session." +(defun gdb-update (&optional no-proc) + "Update buffers showing status of debug session. +If NO-PROC is non-nil, do not try to contact the GDB process." (when gdb-first-prompt (gdb-force-mode-line-update (propertize "initializing..." 'face font-lock-variable-name-face)) (gdb-init-1) (setq gdb-first-prompt nil)) - (gdb-get-main-selected-frame) + (unless no-proc + (gdb-get-main-selected-frame)) + ;; We may need to update gdb-threads-list so we can use (gdb-get-buffer-create 'gdb-threads-buffer) ;; gdb-break-list is maintained in breakpoints handler (gdb-get-buffer-create 'gdb-breakpoints-buffer) - (gdb-emit-signal gdb-buf-publisher 'update) + (unless no-proc + (gdb-emit-signal gdb-buf-publisher 'update)) (gdb-get-changed-registers) - (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame)) (dolist (var gdb-var-list) (setcar (nthcdr 5 var) nil)) @@ -2045,7 +2060,7 @@ current thread and update GDB buffers." ;; In all-stop this updates gud-running properly as well. (gdb-update) (setq gdb-first-done-or-error nil)) - (run-hook-with-args 'gdb-stopped-hooks result))) + (run-hook-with-args 'gdb-stopped-functions result))) ;; Remove the trimmings from log stream containing debugging messages ;; being produced by GDB's internals, use warning face and send to GUD @@ -2085,23 +2100,28 @@ current thread and update GDB buffers." (setq gdb-output-sink 'emacs)) (gdb-clear-partial-output) - (when gdb-first-done-or-error - (unless (or token-number gud-running) - (setq gdb-filter-output (concat gdb-filter-output gdb-prompt-name))) - (gdb-update) - (setq gdb-first-done-or-error nil)) - (setq gdb-filter-output - (gdb-concat-output gdb-filter-output output-field)) + ;; The process may already be dead (e.g. C-d at the gdb prompt). + (let* ((proc (get-buffer-process gud-comint-buffer)) + (no-proc (or (null proc) + (memq (process-status proc) '(exit signal))))) - (if token-number - (progn - (with-current-buffer - (gdb-get-buffer-create 'gdb-partial-output-buffer) - (funcall - (cdr (assoc (string-to-number token-number) gdb-handler-alist)))) - (setq gdb-handler-alist - (assq-delete-all token-number gdb-handler-alist))))) + (when gdb-first-done-or-error + (unless (or token-number gud-running no-proc) + (setq gdb-filter-output (concat gdb-filter-output gdb-prompt-name))) + (gdb-update no-proc) + (setq gdb-first-done-or-error nil)) + + (setq gdb-filter-output + (gdb-concat-output gdb-filter-output output-field)) + + (when token-number + (with-current-buffer + (gdb-get-buffer-create 'gdb-partial-output-buffer) + (funcall + (cdr (assoc (string-to-number token-number) gdb-handler-alist)))) + (setq gdb-handler-alist + (assq-delete-all token-number gdb-handler-alist))))) (defun gdb-concat-output (so-far new) (cond @@ -4105,9 +4125,13 @@ This arrangement depends on the value of `gdb-many-windows'." (gud-find-file gdb-main-file))) (setq gdb-source-window win))))) +;; Called from `gud-sentinel' in gud.el: (defun gdb-reset () "Exit a debugging session cleanly. Kills the gdb buffers, and resets variables and the source buffers." + ;; The gdb-inferior buffer has a pty hooked up to the main gdb + ;; process. This pty must be deleted explicitly. + (gdb-inferior-io--maybe-delete-pty) (dolist (buffer (buffer-list)) (unless (eq buffer gud-comint-buffer) (with-current-buffer buffer From 8c8fc5df12e86cecc16848fff19a251438a25982 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Thu, 19 Apr 2012 10:37:10 +0200 Subject: [PATCH 073/564] * net/tramp.el (tramp-action-password): Let-bind enable-recursive-minibuffers to t. --- lisp/ChangeLog | 5 +++++ lisp/net/tramp.el | 11 ++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index edfe575a576..434e1a7f85f 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-04-19 Michael Albinus + + * net/tramp.el (tramp-action-password): Let-bind + `enable-recursive-minibuffers' to t. + 2012-04-18 Sam Steingold * progmodes/gud.el (gud-key-prefix): Use :type 'key-sequence diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 5b4ea1e6f17..95848ac34ea 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -3133,11 +3133,12 @@ beginning of local filename are not substituted." (defun tramp-action-password (proc vec) "Query the user for a password." (with-current-buffer (process-buffer proc) - (tramp-check-for-regexp proc tramp-password-prompt-regexp) - (tramp-message vec 3 "Sending %s" (match-string 1)) - (tramp-enter-password proc) - ;; Hide password prompt. - (narrow-to-region (point-max) (point-max)))) + (let ((enable-recursive-minibuffers t)) + (tramp-check-for-regexp proc tramp-password-prompt-regexp) + (tramp-message vec 3 "Sending %s" (match-string 1)) + (tramp-enter-password proc) + ;; Hide password prompt. + (narrow-to-region (point-max) (point-max))))) (defun tramp-action-succeed (proc vec) "Signal success in finding shell prompt." From a6b92a4a56a8afec8d91882611c1e17d18d55572 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 19 Apr 2012 06:17:36 -0400 Subject: [PATCH 074/564] Auto-commit of generated files. --- autogen/Makefile.in | 15 +- autogen/aclocal.m4 | 2 + autogen/config.in | 9 + autogen/configure | 827 +++++++++++++++++++++++++++++++++++++++----- 4 files changed, 768 insertions(+), 85 deletions(-) diff --git a/autogen/Makefile.in b/autogen/Makefile.in index 048b3c2fc8c..d395a17bef9 100644 --- a/autogen/Makefile.in +++ b/autogen/Makefile.in @@ -70,9 +70,10 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ $(top_srcdir)/m4/gnulib-common.m4 \ $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inttypes.m4 \ $(top_srcdir)/m4/largefile.m4 $(top_srcdir)/m4/longlong.m4 \ - $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/md5.m4 \ - $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/multiarch.m4 \ - $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/manywarnings.m4 \ + $(top_srcdir)/m4/md5.m4 $(top_srcdir)/m4/mktime.m4 \ + $(top_srcdir)/m4/multiarch.m4 $(top_srcdir)/m4/nocrash.m4 \ + $(top_srcdir)/m4/pathmax.m4 \ $(top_srcdir)/m4/pthread_sigmask.m4 \ $(top_srcdir)/m4/readlink.m4 $(top_srcdir)/m4/sha1.m4 \ $(top_srcdir)/m4/sha256.m4 $(top_srcdir)/m4/sha512.m4 \ @@ -88,7 +89,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ $(top_srcdir)/m4/symlink.m4 $(top_srcdir)/m4/sys_stat_h.m4 \ $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ $(top_srcdir)/m4/tm_gmtoff.m4 $(top_srcdir)/m4/unistd_h.m4 \ - $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/configure.in + $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/m4/wchar_t.m4 \ + $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d @@ -152,7 +154,6 @@ CYGWIN_OBJ = @CYGWIN_OBJ@ C_SWITCH_MACHINE = @C_SWITCH_MACHINE@ C_SWITCH_SYSTEM = @C_SWITCH_SYSTEM@ C_SWITCH_X_SITE = @C_SWITCH_X_SITE@ -C_WARNINGS_SWITCH = @C_WARNINGS_SWITCH@ DBUS_CFLAGS = @DBUS_CFLAGS@ DBUS_LIBS = @DBUS_LIBS@ DBUS_OBJ = @DBUS_OBJ@ @@ -328,6 +329,7 @@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WARN_CFLAGS = @GNULIB_WARN_CFLAGS@ GNULIB_WCTOMB = @GNULIB_WCTOMB@ GNULIB_WRITE = @GNULIB_WRITE@ GNULIB__EXIT = @GNULIB__EXIT@ @@ -695,7 +697,9 @@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ VMLIMIT_OBJ = @VMLIMIT_OBJ@ +WARN_CFLAGS = @WARN_CFLAGS@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WERROR_CFLAGS = @WERROR_CFLAGS@ WIDGET_OBJ = @WIDGET_OBJ@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ XFT_CFLAGS = @XFT_CFLAGS@ @@ -814,6 +818,7 @@ MOSTLYCLEANFILES = core *.stackdump alloca.h alloca.h-t getopt.h \ stdio.h-t stdlib.h stdlib.h-t sys/stat.h sys/stat.h-t time.h \ time.h-t unistd.h unistd.h-t noinst_LIBRARIES = libgnu.a +AM_CFLAGS = $(GNULIB_WARN_CFLAGS) $(WERROR_CFLAGS) DEFAULT_INCLUDES = -I. -I../src -I$(top_srcdir)/src libgnu_a_SOURCES = allocator.c careadlinkat.c md5.c sha1.c sha256.c \ sha512.c dtoastr.c filemode.c $(am__append_1) strftime.c diff --git a/autogen/aclocal.m4 b/autogen/aclocal.m4 index 5fd9650b86b..f74fb730dc9 100644 --- a/autogen/aclocal.m4 +++ b/autogen/aclocal.m4 @@ -999,6 +999,7 @@ m4_include([m4/inttypes.m4]) m4_include([m4/largefile.m4]) m4_include([m4/longlong.m4]) m4_include([m4/lstat.m4]) +m4_include([m4/manywarnings.m4]) m4_include([m4/md5.m4]) m4_include([m4/mktime.m4]) m4_include([m4/multiarch.m4]) @@ -1032,4 +1033,5 @@ m4_include([m4/time_h.m4]) m4_include([m4/time_r.m4]) m4_include([m4/tm_gmtoff.m4]) m4_include([m4/unistd_h.m4]) +m4_include([m4/warnings.m4]) m4_include([m4/wchar_t.m4]) diff --git a/autogen/config.in b/autogen/config.in index c64b048ade5..1082e150fc6 100644 --- a/autogen/config.in +++ b/autogen/config.in @@ -95,6 +95,9 @@ along with GNU Emacs. If not, see . */ /* Define to make the limit macros in visible. */ #undef GL_TRIGGER_STDC_LIMIT_MACROS +/* enable some gnulib portability checks */ +#undef GNULIB_PORTCHECK + /* Define to 1 if you want to use the GNU memory allocator. */ #undef GNU_MALLOC @@ -1175,6 +1178,9 @@ along with GNU Emacs. If not, see . */ /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS +/* enable compile-time and run-time bounds-checking, and some warnings */ +#undef _FORTIFY_SOURCE + /* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */ #undef _LARGEFILE_SOURCE @@ -1282,6 +1288,9 @@ along with GNU Emacs. If not, see . */ # define __GNUC_STDC_INLINE__ 1 #endif +/* Define to 1 if the compiler is checking for lint. */ +#undef lint + /* Define to a type if does not define. */ #undef mbstate_t diff --git a/autogen/configure b/autogen/configure index dd889483229..08f35898ff4 100755 --- a/autogen/configure +++ b/autogen/configure @@ -1185,7 +1185,9 @@ CANNOT_DUMP HAVE_MAKEINFO GZIP_PROG INSTALL_INFO -C_WARNINGS_SWITCH +GNULIB_WARN_CFLAGS +WARN_CFLAGS +WERROR_CFLAGS RANLIB ARFLAGS AR @@ -1334,6 +1336,7 @@ enable_profiling enable_autodepend enable_dependency_tracking enable_largefile +enable_gcc_warnings with_x ' ac_precious_vars='build_alias @@ -1995,6 +1998,7 @@ Optional Features: --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --disable-largefile omit support for large files + --enable-gcc-warnings turn on lots of GCC warnings (for developers) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] @@ -7064,12 +7068,50 @@ else test "x$NON_GCC_TEST_OPTIONS" != x && CC="$CC $NON_GCC_TEST_OPTIONS" fi -### Use -Wdeclaration-after-statement if the compiler supports it -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc understands -Wdeclaration-after-statement" >&5 -$as_echo_n "checking whether gcc understands -Wdeclaration-after-statement... " >&6; } -SAVE_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS -Wdeclaration-after-statement" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext +# Check whether --enable-gcc-warnings was given. +if test "${enable_gcc_warnings+set}" = set; then : + enableval=$enable_gcc_warnings; case $enableval in + yes|no) ;; + *) as_fn_error "bad value $enableval for gcc-warnings option" "$LINENO" 5 ;; + esac + gl_gcc_warnings=$enableval +else + gl_gcc_warnings=no + +fi + + +# gl_GCC_VERSION_IFELSE([major], [minor], [run-if-found], [run-if-not-found]) +# ------------------------------------------------ +# If $CPP is gcc-MAJOR.MINOR or newer, then run RUN-IF-FOUND. +# Otherwise, run RUN-IF-NOT-FOUND. + + +# When compiling with GCC, prefer -isystem to -I when including system +# include files, to avoid generating useless diagnostics for the files. +if test "$gl_gcc_warnings" != yes; then + isystem='-I' +else + isystem='-isystem ' + + # This, $nw, is the list of warnings we disable. + nw= + + case $with_x_toolkit in + lucid | athena | motif) + # Old toolkits mishandle 'const'. + nw="$nw -Wwrite-strings" + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Werror" >&5 +$as_echo_n "checking whether C compiler handles -Werror... " >&6; } +if test "${gl_cv_warn_c__Werror+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + gl_save_compiler_FLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Werror" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -7081,27 +7123,69 @@ main () } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - has_option=yes + gl_cv_warn_c__Werror=yes else - has_option=no + gl_cv_warn_c__Werror=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -if test $has_option = yes; then - C_WARNINGS_SWITCH="-Wdeclaration-after-statement $C_WARNINGS_SWITCH" -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_option" >&5 -$as_echo "$has_option" >&6; } -CFLAGS="$SAVE_CFLAGS" -unset has_option -unset SAVE_CFLAGS + CFLAGS="$gl_save_compiler_FLAGS" -### Use -Wold-style-definition if the compiler supports it -# This can be removed when conversion to standard C is finished. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc understands -Wold-style-definition" >&5 -$as_echo_n "checking whether gcc understands -Wold-style-definition... " >&6; } -SAVE_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS -Wold-style-definition" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Werror" >&5 +$as_echo "$gl_cv_warn_c__Werror" >&6; } +if test "x$gl_cv_warn_c__Werror" = x""yes; then : + as_fn_append WERROR_CFLAGS " -Werror" +fi + + ;; + esac + + + nw="$nw -Waggregate-return" # anachronistic + nw="$nw -Wlong-long" # C90 is anachronistic (lib/gethrxtime.h) + nw="$nw -Wc++-compat" # We don't care about C++ compilers + nw="$nw -Wundef" # Warns on '#if GNULIB_FOO' etc in gnulib + nw="$nw -Wtraditional" # Warns on #elif which we use often + nw="$nw -Wcast-qual" # Too many warnings for now + nw="$nw -Wconversion" # Too many warnings for now + nw="$nw -Wsystem-headers" # Don't let system headers trigger warnings + nw="$nw -Wsign-conversion" # Too many warnings for now + nw="$nw -Woverlength-strings" # Not a problem these days + nw="$nw -Wtraditional-conversion" # Too many warnings for now + nw="$nw -Wpadded" # Our structs are not padded + nw="$nw -Wredundant-decls" # We regularly (re)declare getenv etc. + nw="$nw -Wlogical-op" # any use of fwrite provokes this + nw="$nw -Wformat-nonliteral" # Emacs does this a lot + nw="$nw -Wvla" # warnings in gettext.h + nw="$nw -Wnested-externs" # use of XARGMATCH/verify_function__ + nw="$nw -Wswitch-enum" # Too many warnings for now + nw="$nw -Wswitch-default" # Too many warnings for now + nw="$nw -Wfloat-equal" # e.g., ftoastr.c + nw="$nw -Winline" # e.g., dispnew.c's inlining of row_equal_p + + # Emacs doesn't care about shadowing; see + # . + nw="$nw -Wshadow" + + # The following lines should be removable at some point. + nw="$nw -Wstack-protector" + nw="$nw -Wstrict-overflow" + nw="$nw -Wsuggest-attribute=const" + nw="$nw -Wsuggest-attribute=pure" + + + + if test -n "$GCC"; then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -Wno-missing-field-initializers is supported" >&5 +$as_echo_n "checking whether -Wno-missing-field-initializers is supported... " >&6; } + if test "${gl_cv_cc_nomfi_supported+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + gl_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -W -Werror -Wno-missing-field-initializers" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -7113,26 +7197,186 @@ main () } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - has_option=yes + gl_cv_cc_nomfi_supported=yes else - has_option=no + gl_cv_cc_nomfi_supported=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -if test $has_option = yes; then - C_WARNINGS_SWITCH="-Wold-style-definition $C_WARNINGS_SWITCH" + CFLAGS="$gl_save_CFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_option" >&5 -$as_echo "$has_option" >&6; } -CFLAGS="$SAVE_CFLAGS" -unset has_option -unset SAVE_CFLAGS -### Use -Wimplicit-function-declaration if the compiler supports it -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc understands -Wimplicit-function-declaration" >&5 -$as_echo_n "checking whether gcc understands -Wimplicit-function-declaration... " >&6; } -SAVE_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS -Wimplicit-function-declaration" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_nomfi_supported" >&5 +$as_echo "$gl_cv_cc_nomfi_supported" >&6; } + + if test "$gl_cv_cc_nomfi_supported" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -Wno-missing-field-initializers is needed" >&5 +$as_echo_n "checking whether -Wno-missing-field-initializers is needed... " >&6; } + if test "${gl_cv_cc_nomfi_needed+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + gl_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -W -Werror" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +void f (void) + { + typedef struct { int a; int b; } s_t; + s_t s1 = { 0, }; + } + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_cc_nomfi_needed=no +else + gl_cv_cc_nomfi_needed=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$gl_save_CFLAGS" + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_nomfi_needed" >&5 +$as_echo "$gl_cv_cc_nomfi_needed" >&6; } + fi + fi + + gl_manywarn_set= + for gl_manywarn_item in \ + -Wall \ + -W \ + -Wformat-y2k \ + -Wformat-nonliteral \ + -Wformat-security \ + -Winit-self \ + -Wmissing-include-dirs \ + -Wswitch-default \ + -Wswitch-enum \ + -Wunused \ + -Wunknown-pragmas \ + -Wstrict-aliasing \ + -Wstrict-overflow \ + -Wsystem-headers \ + -Wfloat-equal \ + -Wtraditional \ + -Wtraditional-conversion \ + -Wdeclaration-after-statement \ + -Wundef \ + -Wshadow \ + -Wunsafe-loop-optimizations \ + -Wpointer-arith \ + -Wbad-function-cast \ + -Wc++-compat \ + -Wcast-qual \ + -Wcast-align \ + -Wwrite-strings \ + -Wconversion \ + -Wsign-conversion \ + -Wlogical-op \ + -Waggregate-return \ + -Wstrict-prototypes \ + -Wold-style-definition \ + -Wmissing-prototypes \ + -Wmissing-declarations \ + -Wmissing-noreturn \ + -Wmissing-format-attribute \ + -Wpacked \ + -Wpadded \ + -Wredundant-decls \ + -Wnested-externs \ + -Wunreachable-code \ + -Winline \ + -Winvalid-pch \ + -Wlong-long \ + -Wvla \ + -Wvolatile-register-var \ + -Wdisabled-optimization \ + -Wstack-protector \ + -Woverlength-strings \ + -Wbuiltin-macro-redefined \ + -Wmudflap \ + -Wpacked-bitfield-compat \ + -Wsync-nand \ + ; do + gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item" + done + # The following are not documented in the manual but are included in + # output from gcc --help=warnings. + for gl_manywarn_item in \ + -Wattributes \ + -Wcoverage-mismatch \ + -Wmultichar \ + -Wunused-macros \ + ; do + gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item" + done + # More warnings from gcc 4.6.2 --help=warnings. + for gl_manywarn_item in \ + -Wabi \ + -Wcpp \ + -Wdeprecated \ + -Wdeprecated-declarations \ + -Wdiv-by-zero \ + -Wdouble-promotion \ + -Wendif-labels \ + -Wextra \ + -Wformat-contains-nul \ + -Wformat-extra-args \ + -Wformat-zero-length \ + -Wformat=2 \ + -Wmultichar \ + -Wnormalized=nfc \ + -Woverflow \ + -Wpointer-to-int-cast \ + -Wpragmas \ + -Wsuggest-attribute=const \ + -Wsuggest-attribute=noreturn \ + -Wsuggest-attribute=pure \ + -Wtrampolines \ + ; do + gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item" + done + + # Disable the missing-field-initializers warning if needed + if test "$gl_cv_cc_nomfi_needed" = yes; then + gl_manywarn_set="$gl_manywarn_set -Wno-missing-field-initializers" + fi + + ws=$gl_manywarn_set + + + gl_warn_set= + set x $ws; shift + for gl_warn_item + do + case " $nw " in + *" $gl_warn_item "*) + ;; + *) + gl_warn_set="$gl_warn_set $gl_warn_item" + ;; + esac + done + ws=$gl_warn_set + + for w in $ws; do + as_gl_Warn=`$as_echo "gl_cv_warn_c_$w" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles $w" >&5 +$as_echo_n "checking whether C compiler handles $w... " >&6; } +if { as_var=$as_gl_Warn; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + + gl_save_compiler_FLAGS="$CFLAGS" + CFLAGS="$CFLAGS $w" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -7144,20 +7388,368 @@ main () } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - has_option=yes + eval "$as_gl_Warn=yes" else - has_option=no + eval "$as_gl_Warn=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -if test $has_option = yes; then - C_WARNINGS_SWITCH="-Wimplicit-function-declaration $C_WARNINGS_SWITCH" -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_option" >&5 -$as_echo "$has_option" >&6; } -CFLAGS="$SAVE_CFLAGS" -unset has_option -unset SAVE_CFLAGS + CFLAGS="$gl_save_compiler_FLAGS" +fi +eval ac_res=\$$as_gl_Warn + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +eval as_val=\$$as_gl_Warn + if test "x$as_val" = x""yes; then : + as_fn_append WARN_CFLAGS " $w" +fi + + done + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wno-missing-field-initializers" >&5 +$as_echo_n "checking whether C compiler handles -Wno-missing-field-initializers... " >&6; } +if test "${gl_cv_warn_c__Wno_missing_field_initializers+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + gl_save_compiler_FLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Wno-missing-field-initializers" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_warn_c__Wno_missing_field_initializers=yes +else + gl_cv_warn_c__Wno_missing_field_initializers=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$gl_save_compiler_FLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Wno_missing_field_initializers" >&5 +$as_echo "$gl_cv_warn_c__Wno_missing_field_initializers" >&6; } +if test "x$gl_cv_warn_c__Wno_missing_field_initializers" = x""yes; then : + as_fn_append WARN_CFLAGS " -Wno-missing-field-initializers" +fi + # We need this one + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wno-sign-compare" >&5 +$as_echo_n "checking whether C compiler handles -Wno-sign-compare... " >&6; } +if test "${gl_cv_warn_c__Wno_sign_compare+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + gl_save_compiler_FLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Wno-sign-compare" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_warn_c__Wno_sign_compare=yes +else + gl_cv_warn_c__Wno_sign_compare=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$gl_save_compiler_FLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Wno_sign_compare" >&5 +$as_echo "$gl_cv_warn_c__Wno_sign_compare" >&6; } +if test "x$gl_cv_warn_c__Wno_sign_compare" = x""yes; then : + as_fn_append WARN_CFLAGS " -Wno-sign-compare" +fi + # Too many warnings for now + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wno-type-limits" >&5 +$as_echo_n "checking whether C compiler handles -Wno-type-limits... " >&6; } +if test "${gl_cv_warn_c__Wno_type_limits+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + gl_save_compiler_FLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Wno-type-limits" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_warn_c__Wno_type_limits=yes +else + gl_cv_warn_c__Wno_type_limits=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$gl_save_compiler_FLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Wno_type_limits" >&5 +$as_echo "$gl_cv_warn_c__Wno_type_limits" >&6; } +if test "x$gl_cv_warn_c__Wno_type_limits" = x""yes; then : + as_fn_append WARN_CFLAGS " -Wno-type-limits" +fi + # Too many warnings for now + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wno-switch" >&5 +$as_echo_n "checking whether C compiler handles -Wno-switch... " >&6; } +if test "${gl_cv_warn_c__Wno_switch+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + gl_save_compiler_FLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Wno-switch" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_warn_c__Wno_switch=yes +else + gl_cv_warn_c__Wno_switch=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$gl_save_compiler_FLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Wno_switch" >&5 +$as_echo "$gl_cv_warn_c__Wno_switch" >&6; } +if test "x$gl_cv_warn_c__Wno_switch" = x""yes; then : + as_fn_append WARN_CFLAGS " -Wno-switch" +fi + # Too many warnings for now + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wno-unused-parameter" >&5 +$as_echo_n "checking whether C compiler handles -Wno-unused-parameter... " >&6; } +if test "${gl_cv_warn_c__Wno_unused_parameter+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + gl_save_compiler_FLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Wno-unused-parameter" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_warn_c__Wno_unused_parameter=yes +else + gl_cv_warn_c__Wno_unused_parameter=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$gl_save_compiler_FLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Wno_unused_parameter" >&5 +$as_echo "$gl_cv_warn_c__Wno_unused_parameter" >&6; } +if test "x$gl_cv_warn_c__Wno_unused_parameter" = x""yes; then : + as_fn_append WARN_CFLAGS " -Wno-unused-parameter" +fi + # Too many warnings for now + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wno-format-nonliteral" >&5 +$as_echo_n "checking whether C compiler handles -Wno-format-nonliteral... " >&6; } +if test "${gl_cv_warn_c__Wno_format_nonliteral+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + gl_save_compiler_FLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Wno-format-nonliteral" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_warn_c__Wno_format_nonliteral=yes +else + gl_cv_warn_c__Wno_format_nonliteral=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$gl_save_compiler_FLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Wno_format_nonliteral" >&5 +$as_echo "$gl_cv_warn_c__Wno_format_nonliteral" >&6; } +if test "x$gl_cv_warn_c__Wno_format_nonliteral" = x""yes; then : + as_fn_append WARN_CFLAGS " -Wno-format-nonliteral" +fi + + + # In spite of excluding -Wlogical-op above, it is enabled, as of + # gcc 4.5.0 20090517. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wno-logical-op" >&5 +$as_echo_n "checking whether C compiler handles -Wno-logical-op... " >&6; } +if test "${gl_cv_warn_c__Wno_logical_op+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + gl_save_compiler_FLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Wno-logical-op" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_warn_c__Wno_logical_op=yes +else + gl_cv_warn_c__Wno_logical_op=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$gl_save_compiler_FLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Wno_logical_op" >&5 +$as_echo "$gl_cv_warn_c__Wno_logical_op" >&6; } +if test "x$gl_cv_warn_c__Wno_logical_op" = x""yes; then : + as_fn_append WARN_CFLAGS " -Wno-logical-op" +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -fdiagnostics-show-option" >&5 +$as_echo_n "checking whether C compiler handles -fdiagnostics-show-option... " >&6; } +if test "${gl_cv_warn_c__fdiagnostics_show_option+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + gl_save_compiler_FLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fdiagnostics-show-option" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_warn_c__fdiagnostics_show_option=yes +else + gl_cv_warn_c__fdiagnostics_show_option=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$gl_save_compiler_FLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__fdiagnostics_show_option" >&5 +$as_echo "$gl_cv_warn_c__fdiagnostics_show_option" >&6; } +if test "x$gl_cv_warn_c__fdiagnostics_show_option" = x""yes; then : + as_fn_append WARN_CFLAGS " -fdiagnostics-show-option" +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -funit-at-a-time" >&5 +$as_echo_n "checking whether C compiler handles -funit-at-a-time... " >&6; } +if test "${gl_cv_warn_c__funit_at_a_time+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + gl_save_compiler_FLAGS="$CFLAGS" + CFLAGS="$CFLAGS -funit-at-a-time" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_warn_c__funit_at_a_time=yes +else + gl_cv_warn_c__funit_at_a_time=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$gl_save_compiler_FLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__funit_at_a_time" >&5 +$as_echo "$gl_cv_warn_c__funit_at_a_time" >&6; } +if test "x$gl_cv_warn_c__funit_at_a_time" = x""yes; then : + as_fn_append WARN_CFLAGS " -funit-at-a-time" +fi + + + + + +$as_echo "#define lint 1" >>confdefs.h + + +$as_echo "#define _FORTIFY_SOURCE 2" >>confdefs.h + + +$as_echo "#define GNULIB_PORTCHECK 1" >>confdefs.h + + + # We use a slightly smaller set of warning options for lib/. + # Remove the following and save the result in GNULIB_WARN_CFLAGS. + nw= + nw="$nw -Wunused-macros" + + + gl_warn_set= + set x $WARN_CFLAGS; shift + for gl_warn_item + do + case " $nw " in + *" $gl_warn_item "*) + ;; + *) + gl_warn_set="$gl_warn_set $gl_warn_item" + ;; + esac + done + GNULIB_WARN_CFLAGS=$gl_warn_set + + +fi @@ -8316,8 +8908,13 @@ $as_echo_n "checking for $ALSA_MODULES... " >&6; } if $PKG_CONFIG --exists "$ALSA_MODULES" 2>&5 && ALSA_CFLAGS=`$PKG_CONFIG --cflags "$ALSA_MODULES" 2>&5` && ALSA_LIBS=`$PKG_CONFIG --libs "$ALSA_MODULES" 2>&5`; then - - ALSA_CFLAGS=`$as_echo "$ALSA_CFLAGS" | sed -e 's,///*,/,g'` + edit_cflags=" + s,///*,/,g + s/^/ / + s/ -I/ $isystem/g + s/^ // + " + ALSA_CFLAGS=`$as_echo "$ALSA_CFLAGS" | sed -e "$edit_cflags"` ALSA_LIBS=`$as_echo "$ALSA_LIBS" | sed -e 's,///*,/,g'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes CFLAGS='$ALSA_CFLAGS' LIBS='$ALSA_LIBS'" >&5 $as_echo "yes CFLAGS='$ALSA_CFLAGS' LIBS='$ALSA_LIBS'" >&6; } @@ -9689,7 +10286,7 @@ fi if test "${x_includes}" != NONE && test -n "${x_includes}"; then - C_SWITCH_X_SITE=-I`echo ${x_includes} | sed -e "s/:/ -I/g"` + C_SWITCH_X_SITE="$isystem"`echo ${x_includes} | sed -e "s/:/ $isystem/g"` fi if test x"${x_includes}" = x; then @@ -10744,8 +11341,13 @@ $as_echo_n "checking for $RSVG_MODULE... " >&6; } if $PKG_CONFIG --exists "$RSVG_MODULE" 2>&5 && RSVG_CFLAGS=`$PKG_CONFIG --cflags "$RSVG_MODULE" 2>&5` && RSVG_LIBS=`$PKG_CONFIG --libs "$RSVG_MODULE" 2>&5`; then - - RSVG_CFLAGS=`$as_echo "$RSVG_CFLAGS" | sed -e 's,///*,/,g'` + edit_cflags=" + s,///*,/,g + s/^/ / + s/ -I/ $isystem/g + s/^ // + " + RSVG_CFLAGS=`$as_echo "$RSVG_CFLAGS" | sed -e "$edit_cflags"` RSVG_LIBS=`$as_echo "$RSVG_LIBS" | sed -e 's,///*,/,g'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes CFLAGS='$RSVG_CFLAGS' LIBS='$RSVG_LIBS'" >&5 $as_echo "yes CFLAGS='$RSVG_CFLAGS' LIBS='$RSVG_LIBS'" >&6; } @@ -10851,8 +11453,13 @@ $as_echo_n "checking for $IMAGEMAGICK_MODULE... " >&6; } if $PKG_CONFIG --exists "$IMAGEMAGICK_MODULE" 2>&5 && IMAGEMAGICK_CFLAGS=`$PKG_CONFIG --cflags "$IMAGEMAGICK_MODULE" 2>&5` && IMAGEMAGICK_LIBS=`$PKG_CONFIG --libs "$IMAGEMAGICK_MODULE" 2>&5`; then - - IMAGEMAGICK_CFLAGS=`$as_echo "$IMAGEMAGICK_CFLAGS" | sed -e 's,///*,/,g'` + edit_cflags=" + s,///*,/,g + s/^/ / + s/ -I/ $isystem/g + s/^ // + " + IMAGEMAGICK_CFLAGS=`$as_echo "$IMAGEMAGICK_CFLAGS" | sed -e "$edit_cflags"` IMAGEMAGICK_LIBS=`$as_echo "$IMAGEMAGICK_LIBS" | sed -e 's,///*,/,g'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes CFLAGS='$IMAGEMAGICK_CFLAGS' LIBS='$IMAGEMAGICK_LIBS'" >&5 $as_echo "yes CFLAGS='$IMAGEMAGICK_CFLAGS' LIBS='$IMAGEMAGICK_LIBS'" >&6; } @@ -10970,8 +11577,13 @@ $as_echo_n "checking for $GTK_MODULES... " >&6; } if $PKG_CONFIG --exists "$GTK_MODULES" 2>&5 && GTK_CFLAGS=`$PKG_CONFIG --cflags "$GTK_MODULES" 2>&5` && GTK_LIBS=`$PKG_CONFIG --libs "$GTK_MODULES" 2>&5`; then - - GTK_CFLAGS=`$as_echo "$GTK_CFLAGS" | sed -e 's,///*,/,g'` + edit_cflags=" + s,///*,/,g + s/^/ / + s/ -I/ $isystem/g + s/^ // + " + GTK_CFLAGS=`$as_echo "$GTK_CFLAGS" | sed -e "$edit_cflags"` GTK_LIBS=`$as_echo "$GTK_LIBS" | sed -e 's,///*,/,g'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes CFLAGS='$GTK_CFLAGS' LIBS='$GTK_LIBS'" >&5 $as_echo "yes CFLAGS='$GTK_CFLAGS' LIBS='$GTK_LIBS'" >&6; } @@ -11073,8 +11685,13 @@ $as_echo_n "checking for $GTK_MODULES... " >&6; } if $PKG_CONFIG --exists "$GTK_MODULES" 2>&5 && GTK_CFLAGS=`$PKG_CONFIG --cflags "$GTK_MODULES" 2>&5` && GTK_LIBS=`$PKG_CONFIG --libs "$GTK_MODULES" 2>&5`; then - - GTK_CFLAGS=`$as_echo "$GTK_CFLAGS" | sed -e 's,///*,/,g'` + edit_cflags=" + s,///*,/,g + s/^/ / + s/ -I/ $isystem/g + s/^ // + " + GTK_CFLAGS=`$as_echo "$GTK_CFLAGS" | sed -e "$edit_cflags"` GTK_LIBS=`$as_echo "$GTK_LIBS" | sed -e 's,///*,/,g'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes CFLAGS='$GTK_CFLAGS' LIBS='$GTK_LIBS'" >&5 $as_echo "yes CFLAGS='$GTK_CFLAGS' LIBS='$GTK_LIBS'" >&6; } @@ -11268,8 +11885,13 @@ $as_echo_n "checking for dbus-1 >= 1.0... " >&6; } if $PKG_CONFIG --exists "dbus-1 >= 1.0" 2>&5 && DBUS_CFLAGS=`$PKG_CONFIG --cflags "dbus-1 >= 1.0" 2>&5` && DBUS_LIBS=`$PKG_CONFIG --libs "dbus-1 >= 1.0" 2>&5`; then - - DBUS_CFLAGS=`$as_echo "$DBUS_CFLAGS" | sed -e 's,///*,/,g'` + edit_cflags=" + s,///*,/,g + s/^/ / + s/ -I/ $isystem/g + s/^ // + " + DBUS_CFLAGS=`$as_echo "$DBUS_CFLAGS" | sed -e "$edit_cflags"` DBUS_LIBS=`$as_echo "$DBUS_LIBS" | sed -e 's,///*,/,g'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes CFLAGS='$DBUS_CFLAGS' LIBS='$DBUS_LIBS'" >&5 $as_echo "yes CFLAGS='$DBUS_CFLAGS' LIBS='$DBUS_LIBS'" >&6; } @@ -11378,8 +12000,13 @@ $as_echo_n "checking for gio-2.0 >= 2.26... " >&6; } if $PKG_CONFIG --exists "gio-2.0 >= 2.26" 2>&5 && GSETTINGS_CFLAGS=`$PKG_CONFIG --cflags "gio-2.0 >= 2.26" 2>&5` && GSETTINGS_LIBS=`$PKG_CONFIG --libs "gio-2.0 >= 2.26" 2>&5`; then - - GSETTINGS_CFLAGS=`$as_echo "$GSETTINGS_CFLAGS" | sed -e 's,///*,/,g'` + edit_cflags=" + s,///*,/,g + s/^/ / + s/ -I/ $isystem/g + s/^ // + " + GSETTINGS_CFLAGS=`$as_echo "$GSETTINGS_CFLAGS" | sed -e "$edit_cflags"` GSETTINGS_LIBS=`$as_echo "$GSETTINGS_LIBS" | sed -e 's,///*,/,g'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes CFLAGS='$GSETTINGS_CFLAGS' LIBS='$GSETTINGS_LIBS'" >&5 $as_echo "yes CFLAGS='$GSETTINGS_CFLAGS' LIBS='$GSETTINGS_LIBS'" >&6; } @@ -11476,8 +12103,13 @@ $as_echo_n "checking for gconf-2.0 >= 2.13... " >&6; } if $PKG_CONFIG --exists "gconf-2.0 >= 2.13" 2>&5 && GCONF_CFLAGS=`$PKG_CONFIG --cflags "gconf-2.0 >= 2.13" 2>&5` && GCONF_LIBS=`$PKG_CONFIG --libs "gconf-2.0 >= 2.13" 2>&5`; then - - GCONF_CFLAGS=`$as_echo "$GCONF_CFLAGS" | sed -e 's,///*,/,g'` + edit_cflags=" + s,///*,/,g + s/^/ / + s/ -I/ $isystem/g + s/^ // + " + GCONF_CFLAGS=`$as_echo "$GCONF_CFLAGS" | sed -e "$edit_cflags"` GCONF_LIBS=`$as_echo "$GCONF_LIBS" | sed -e 's,///*,/,g'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes CFLAGS='$GCONF_CFLAGS' LIBS='$GCONF_LIBS'" >&5 $as_echo "yes CFLAGS='$GCONF_CFLAGS' LIBS='$GCONF_LIBS'" >&6; } @@ -11652,8 +12284,13 @@ $as_echo_n "checking for gnutls >= 2.6.6... " >&6; } if $PKG_CONFIG --exists "gnutls >= 2.6.6" 2>&5 && LIBGNUTLS_CFLAGS=`$PKG_CONFIG --cflags "gnutls >= 2.6.6" 2>&5` && LIBGNUTLS_LIBS=`$PKG_CONFIG --libs "gnutls >= 2.6.6" 2>&5`; then - - LIBGNUTLS_CFLAGS=`$as_echo "$LIBGNUTLS_CFLAGS" | sed -e 's,///*,/,g'` + edit_cflags=" + s,///*,/,g + s/^/ / + s/ -I/ $isystem/g + s/^ // + " + LIBGNUTLS_CFLAGS=`$as_echo "$LIBGNUTLS_CFLAGS" | sed -e "$edit_cflags"` LIBGNUTLS_LIBS=`$as_echo "$LIBGNUTLS_LIBS" | sed -e 's,///*,/,g'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes CFLAGS='$LIBGNUTLS_CFLAGS' LIBS='$LIBGNUTLS_LIBS'" >&5 $as_echo "yes CFLAGS='$LIBGNUTLS_CFLAGS' LIBS='$LIBGNUTLS_LIBS'" >&6; } @@ -12299,8 +12936,13 @@ $as_echo_n "checking for fontconfig >= 2.2.0... " >&6; } if $PKG_CONFIG --exists "fontconfig >= 2.2.0" 2>&5 && FONTCONFIG_CFLAGS=`$PKG_CONFIG --cflags "fontconfig >= 2.2.0" 2>&5` && FONTCONFIG_LIBS=`$PKG_CONFIG --libs "fontconfig >= 2.2.0" 2>&5`; then - - FONTCONFIG_CFLAGS=`$as_echo "$FONTCONFIG_CFLAGS" | sed -e 's,///*,/,g'` + edit_cflags=" + s,///*,/,g + s/^/ / + s/ -I/ $isystem/g + s/^ // + " + FONTCONFIG_CFLAGS=`$as_echo "$FONTCONFIG_CFLAGS" | sed -e "$edit_cflags"` FONTCONFIG_LIBS=`$as_echo "$FONTCONFIG_LIBS" | sed -e 's,///*,/,g'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes CFLAGS='$FONTCONFIG_CFLAGS' LIBS='$FONTCONFIG_LIBS'" >&5 $as_echo "yes CFLAGS='$FONTCONFIG_CFLAGS' LIBS='$FONTCONFIG_LIBS'" >&6; } @@ -12394,8 +13036,13 @@ $as_echo_n "checking for xft >= 0.13.0... " >&6; } if $PKG_CONFIG --exists "xft >= 0.13.0" 2>&5 && XFT_CFLAGS=`$PKG_CONFIG --cflags "xft >= 0.13.0" 2>&5` && XFT_LIBS=`$PKG_CONFIG --libs "xft >= 0.13.0" 2>&5`; then - - XFT_CFLAGS=`$as_echo "$XFT_CFLAGS" | sed -e 's,///*,/,g'` + edit_cflags=" + s,///*,/,g + s/^/ / + s/ -I/ $isystem/g + s/^ // + " + XFT_CFLAGS=`$as_echo "$XFT_CFLAGS" | sed -e "$edit_cflags"` XFT_LIBS=`$as_echo "$XFT_LIBS" | sed -e 's,///*,/,g'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes CFLAGS='$XFT_CFLAGS' LIBS='$XFT_LIBS'" >&5 $as_echo "yes CFLAGS='$XFT_CFLAGS' LIBS='$XFT_LIBS'" >&6; } @@ -12598,8 +13245,13 @@ $as_echo_n "checking for freetype2... " >&6; } if $PKG_CONFIG --exists "freetype2" 2>&5 && FREETYPE_CFLAGS=`$PKG_CONFIG --cflags "freetype2" 2>&5` && FREETYPE_LIBS=`$PKG_CONFIG --libs "freetype2" 2>&5`; then - - FREETYPE_CFLAGS=`$as_echo "$FREETYPE_CFLAGS" | sed -e 's,///*,/,g'` + edit_cflags=" + s,///*,/,g + s/^/ / + s/ -I/ $isystem/g + s/^ // + " + FREETYPE_CFLAGS=`$as_echo "$FREETYPE_CFLAGS" | sed -e "$edit_cflags"` FREETYPE_LIBS=`$as_echo "$FREETYPE_LIBS" | sed -e 's,///*,/,g'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes CFLAGS='$FREETYPE_CFLAGS' LIBS='$FREETYPE_LIBS'" >&5 $as_echo "yes CFLAGS='$FREETYPE_CFLAGS' LIBS='$FREETYPE_LIBS'" >&6; } @@ -12695,8 +13347,13 @@ $as_echo_n "checking for libotf... " >&6; } if $PKG_CONFIG --exists "libotf" 2>&5 && LIBOTF_CFLAGS=`$PKG_CONFIG --cflags "libotf" 2>&5` && LIBOTF_LIBS=`$PKG_CONFIG --libs "libotf" 2>&5`; then - - LIBOTF_CFLAGS=`$as_echo "$LIBOTF_CFLAGS" | sed -e 's,///*,/,g'` + edit_cflags=" + s,///*,/,g + s/^/ / + s/ -I/ $isystem/g + s/^ // + " + LIBOTF_CFLAGS=`$as_echo "$LIBOTF_CFLAGS" | sed -e "$edit_cflags"` LIBOTF_LIBS=`$as_echo "$LIBOTF_LIBS" | sed -e 's,///*,/,g'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes CFLAGS='$LIBOTF_CFLAGS' LIBS='$LIBOTF_LIBS'" >&5 $as_echo "yes CFLAGS='$LIBOTF_CFLAGS' LIBS='$LIBOTF_LIBS'" >&6; } @@ -12840,8 +13497,13 @@ $as_echo_n "checking for m17n-flt... " >&6; } if $PKG_CONFIG --exists "m17n-flt" 2>&5 && M17N_FLT_CFLAGS=`$PKG_CONFIG --cflags "m17n-flt" 2>&5` && M17N_FLT_LIBS=`$PKG_CONFIG --libs "m17n-flt" 2>&5`; then - - M17N_FLT_CFLAGS=`$as_echo "$M17N_FLT_CFLAGS" | sed -e 's,///*,/,g'` + edit_cflags=" + s,///*,/,g + s/^/ / + s/ -I/ $isystem/g + s/^ // + " + M17N_FLT_CFLAGS=`$as_echo "$M17N_FLT_CFLAGS" | sed -e "$edit_cflags"` M17N_FLT_LIBS=`$as_echo "$M17N_FLT_LIBS" | sed -e 's,///*,/,g'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes CFLAGS='$M17N_FLT_CFLAGS' LIBS='$M17N_FLT_LIBS'" >&5 $as_echo "yes CFLAGS='$M17N_FLT_CFLAGS' LIBS='$M17N_FLT_LIBS'" >&6; } @@ -13555,8 +14217,13 @@ $as_echo_n "checking for libxml-2.0 > 2.6.17... " >&6; } if $PKG_CONFIG --exists "libxml-2.0 > 2.6.17" 2>&5 && LIBXML2_CFLAGS=`$PKG_CONFIG --cflags "libxml-2.0 > 2.6.17" 2>&5` && LIBXML2_LIBS=`$PKG_CONFIG --libs "libxml-2.0 > 2.6.17" 2>&5`; then - - LIBXML2_CFLAGS=`$as_echo "$LIBXML2_CFLAGS" | sed -e 's,///*,/,g'` + edit_cflags=" + s,///*,/,g + s/^/ / + s/ -I/ $isystem/g + s/^ // + " + LIBXML2_CFLAGS=`$as_echo "$LIBXML2_CFLAGS" | sed -e "$edit_cflags"` LIBXML2_LIBS=`$as_echo "$LIBXML2_LIBS" | sed -e 's,///*,/,g'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes CFLAGS='$LIBXML2_CFLAGS' LIBS='$LIBXML2_LIBS'" >&5 $as_echo "yes CFLAGS='$LIBXML2_CFLAGS' LIBS='$LIBXML2_LIBS'" >&6; } From 376cbaccd90fe54837eb452f5d6c1cda42e0e8fc Mon Sep 17 00:00:00 2001 From: Juanma Barranquero Date: Thu, 19 Apr 2012 18:50:07 +0200 Subject: [PATCH 075/564] Remove some `toggle-read-only' warnings. * lisp/bs.el (bs-toggle-readonly): Call `toggle-read-only' interactively. * lisp/descr-text.el (describe-char): lisp/progmodes/python.el (python-describe-symbol): Don't call `toggle-read-only', set `buffer-read-only'. --- lisp/bs.el | 2 +- lisp/descr-text.el | 2 +- lisp/progmodes/python.el | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lisp/bs.el b/lisp/bs.el index 64c1183b64d..08d05a946e3 100644 --- a/lisp/bs.el +++ b/lisp/bs.el @@ -964,7 +964,7 @@ Default is `bs--current-sort-function'." Uses function `toggle-read-only'." (interactive) (with-current-buffer (bs--current-buffer) - (toggle-read-only)) + (call-interactively 'toggle-read-only)) (bs--update-current-line)) (defun bs-clear-modified () diff --git a/lisp/descr-text.el b/lisp/descr-text.el index d2995ab790d..50b32fc8f2e 100644 --- a/lisp/descr-text.el +++ b/lisp/descr-text.el @@ -806,7 +806,7 @@ relevant to POS." (format " %s: %s\n" elt val))))))) (if text-props-desc (insert text-props-desc)) - (toggle-read-only 1)))))) + (setq buffer-read-only t)))))) (define-obsolete-function-alias 'describe-char-after 'describe-char "22.1") diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index 6f8758ebec1..2922330e6f9 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -1768,7 +1768,7 @@ will." ;; allow C-c C-f in help buffer. (let ((temp-buffer-show-hook ; avoid xref stuff (lambda () - (toggle-read-only 1) + (setq buffer-read-only t) (setq view-return-to-alist (list (cons (selected-window) help-return-method)))))) (with-output-to-temp-buffer (help-buffer) From 4d6769e1bb5109e9cec202350d5252234970d525 Mon Sep 17 00:00:00 2001 From: Juanma Barranquero Date: Thu, 19 Apr 2012 19:20:26 +0200 Subject: [PATCH 076/564] lisp/*: Add declarations, remove unused bindings, mark unused args. * lisp/avoid.el (mouse-avoidance-mode): Mark unused arg. (mouse-avoidance-nudge-mouse): Remove unused binding. * lisp/imenu.el (imenu-default-goto-function): Mark unused args. (imenu-progress-message): Remove obsolete macro; all callers changed. * lisp/mouse.el (mouse-menu-major-mode-map): * lisp/emacs-lisp/authors.el (authors-scan-change-log) (authors-add-to-author-list): * lisp/emacs-lisp/avl-tree.el (avl-tree--enter-balance): * lisp/emacs-lisp/smie.el (smie-auto-fill): * lisp/mail/sendmail.el (mail-bury): * lisp/mail/unrmail.el (unrmail): * lisp/net/tls.el (open-tls-stream): * lisp/textmodes/picture.el (picture-mouse-set-point): Remove unused bindings. * lisp/subr.el (keymap-canonicalize): Remove unused binding. (read-passwd): Mark unused arg. * lisp/tutorial.el (tutorial--display-changes): Remove unused binding. (tutorial--save-tutorial-to): Remove unused variable. * lisp/emacs-lisp/package.el (define-package, package-menu-mark-delete) (package-menu-mark-install, package-menu-mark-unmark): Mark unused args. (package-generate-autoloads, package-menu--generate) (package-menu--find-upgrades): Remove unused bindings. * lisp/emulation/cua-rect.el (cua-restrict-regexp-rectangle) (cua-restrict-prefix-rectangle): Doc fixes. Remove unused bindings. (cua--mouse-ignore, cua--delete-rectangle, cua--extract-rectangle) (cua--indent-rectangle, cua-open-rectangle, cua-close-rectangle) (cua-blank-rectangle, cua-string-rectangle, cua-replace-in-rectangle) (cua-incr-rectangle, cua-sequence-rectangle, cua--convert-rectangle-as) (cua--rectangle-aux-replace, cua--left-fill-rectangle) (cua-scroll-rectangle-up, cua-scroll-rectangle-down) (cua-delete-char-rectangle): Mark unused args. (cua-align-rectangle): Remove unused binding. * lisp/mail/rmail.el (compilation--message->loc) (epa--find-coding-system-for-mime-charset): Declare. * lisp/net/dbus.el (dbus-register-service): Declare. (dbus-name-owner-changed-handler): Remove unused binding. * lisp/nxml/nxml-mode.el (nxml-electric-slash, nxml-in-mixed-content-p) (nxml-compute-indent-from-matching-start-tag): Remove unused variables. (nxml-scan-backward-within): Mark unused arg. (nxml-dynamic-markup-word): Remove unused binding. --- lisp/ChangeLog | 73 +++++++++++++++++++++++++++++++---- lisp/avoid.el | 3 +- lisp/emacs-lisp/authors.el | 7 ++-- lisp/emacs-lisp/avl-tree.el | 2 +- lisp/emacs-lisp/package.el | 15 ++++---- lisp/emacs-lisp/smie.el | 4 +- lisp/emulation/cua-rect.el | 77 ++++++++++++++++++------------------- lisp/imenu.el | 45 ++-------------------- lisp/mail/rmail.el | 3 ++ lisp/mail/sendmail.el | 3 +- lisp/mail/unrmail.el | 3 +- lisp/mouse.el | 3 +- lisp/net/dbus.el | 4 +- lisp/net/tls.el | 3 +- lisp/nxml/nxml-mode.el | 13 +++---- lisp/subr.el | 3 +- lisp/textmodes/picture.el | 3 +- lisp/tutorial.el | 3 +- 18 files changed, 138 insertions(+), 129 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 434e1a7f85f..9ad019328d6 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,61 @@ +2012-04-19 Juanma Barranquero + + * avoid.el (mouse-avoidance-mode): Mark unused arg. + (mouse-avoidance-nudge-mouse): Remove unused binding. + + * bs.el (bs-toggle-readonly): Call `toggle-read-only' interactively. + + * descr-text.el (describe-char): + * progmodes/python.el (python-describe-symbol): + Don't call `toggle-read-only', set `buffer-read-only'. + + * imenu.el (imenu-default-goto-function): Mark unused args. + (imenu-progress-message): Remove obsolete macro; all callers changed. + + * subr.el (keymap-canonicalize): Remove unused binding. + (read-passwd): Mark unused arg. + + * tutorial.el (tutorial--display-changes): Remove unused binding. + (tutorial--save-tutorial-to): Remove unused variable. + + * emacs-lisp/package.el (define-package, package-menu-mark-delete) + (package-menu-mark-install, package-menu-mark-unmark): Mark unused args. + (package-generate-autoloads, package-menu--generate) + (package-menu--find-upgrades): Remove unused bindings. + + * emulation/cua-rect.el (cua-restrict-regexp-rectangle) + (cua-restrict-prefix-rectangle): Doc fixes. Remove unused bindings. + (cua--mouse-ignore, cua--delete-rectangle, cua--extract-rectangle) + (cua--indent-rectangle, cua-open-rectangle, cua-close-rectangle) + (cua-blank-rectangle, cua-string-rectangle, cua-replace-in-rectangle) + (cua-incr-rectangle, cua-sequence-rectangle, cua--convert-rectangle-as) + (cua--rectangle-aux-replace, cua--left-fill-rectangle) + (cua-scroll-rectangle-up, cua-scroll-rectangle-down) + (cua-delete-char-rectangle): Mark unused args. + (cua-align-rectangle): Remove unused binding. + + * mail/rmail.el (compilation--message->loc) + (epa--find-coding-system-for-mime-charset): Declare. + + * net/dbus.el (dbus-register-service): Declare. + (dbus-name-owner-changed-handler): Remove unused binding. + + * nxml/nxml-mode.el (nxml-electric-slash, nxml-in-mixed-content-p) + (nxml-compute-indent-from-matching-start-tag): Remove unused variables. + (nxml-scan-backward-within): Mark unused arg. + (nxml-dynamic-markup-word): Remove unused binding. + + * mouse.el (mouse-menu-major-mode-map): + * emacs-lisp/authors.el (authors-scan-change-log) + (authors-add-to-author-list): + * emacs-lisp/avl-tree.el (avl-tree--enter-balance): + * emacs-lisp/smie.el (smie-auto-fill): + * mail/sendmail.el (mail-bury): + * mail/unrmail.el (unrmail): + * net/tls.el (open-tls-stream): + * textmodes/picture.el (picture-mouse-set-point): + Remove unused bindings. + 2012-04-19 Michael Albinus * net/tramp.el (tramp-action-password): Let-bind @@ -180,7 +238,7 @@ 2012-04-15 Stefan Monnier Avoid the use of ((lambda ...) ...) in lexical-binding code. - * emacs-lisp/easy-mmode.el (define-minor-mode):Use funcall (bug#11241). + * emacs-lisp/easy-mmode.el (define-minor-mode): Use funcall (bug#11241). 2012-04-15 Glenn Morris @@ -392,7 +450,7 @@ 2012-04-11 Wolfgang Jenkner (tiny change) - * lisp/progmodes/grep.el (rgrep): Tweak the find command line so + * progmodes/grep.el (rgrep): Tweak the find command line so that directories matching `grep-find-ignored-files' won't be pruned (bug#10351). @@ -1730,7 +1788,7 @@ 2012-02-12 Alan Mackenzie Fix infinite loop with long macros. - * cc-engine.el (c-state-safe-place): Handle macros properly. + * progmodes/cc-engine.el (c-state-safe-place): Handle macros properly. 2012-02-12 Chong Yidong @@ -1993,11 +2051,10 @@ 2012-02-06 Lars Ingebrigtsen - * progmodes/cc-mode.el - (c-standard-font-lock-fontify-region-function): Set the default at - load time, too, so that `font-lock-fontify-buffer' can be called - without setting up the entire mode first. This fixes a bug in - `mm-inline-text' with C MIME parts. + * progmodes/cc-mode.el (c-standard-font-lock-fontify-region-function): + Set the default at load time, too, so that `font-lock-fontify-buffer' + can be called without setting up the entire mode first. This fixes + a bug in `mm-inline-text' with C MIME parts. 2012-02-06 Chong Yidong diff --git a/lisp/avoid.el b/lisp/avoid.el index eb8a4ad23a2..bfe15de0ca2 100644 --- a/lisp/avoid.el +++ b/lisp/avoid.el @@ -80,7 +80,7 @@ See function `mouse-avoidance-mode' for possible values. Setting this variable directly does not take effect; use either \\[customize] or the function `mouse-avoidance-mode'." - :set (lambda (symbol value) + :set (lambda (_symbol value) ;; 'none below prevents toggling when value is nil. (mouse-avoidance-mode (or value 'none))) :initialize 'custom-initialize-default @@ -267,7 +267,6 @@ If you want the mouse banished to a different corner set ;; For these modes, state keeps track of the total offset that we've ;; accumulated, and tries to keep it close to zero. (let* ((cur (mouse-position)) - (cur-frame (car cur)) (cur-pos (cdr cur)) (pos (window-edges)) (wleft (pop pos)) diff --git a/lisp/emacs-lisp/authors.el b/lisp/emacs-lisp/authors.el index 6f2c6f73eca..a7f8dad54ed 100644 --- a/lisp/emacs-lisp/authors.el +++ b/lisp/emacs-lisp/authors.el @@ -1,4 +1,4 @@ -;;; authors.el --- utility for maintaining Emacs's AUTHORS file -*-coding: utf-8;-*- +;;; authors.el --- utility for maintaining Emacs's AUTHORS file -*-coding: utf-8 -*- ;; Copyright (C) 2000-2012 Free Software Foundation, Inc. @@ -829,7 +829,7 @@ with the file and the number of each action: (enable-local-eval nil) (existing-buffer (get-file-buffer log-file)) (buffer (find-file-noselect log-file)) - authors file pos) + authors pos) (with-current-buffer buffer (save-restriction (widen) @@ -943,8 +943,7 @@ and changed by AUTHOR." (file (car change)) (filestat (if (authors-public-domain-p file) (concat file " (public domain)") - file)) - slot) + file))) (cond ((assq :wrote actions) (setq wrote-list (cons filestat wrote-list))) ((assq :cowrote actions) diff --git a/lisp/emacs-lisp/avl-tree.el b/lisp/emacs-lisp/avl-tree.el index 9f348767478..1f00677cd00 100644 --- a/lisp/emacs-lisp/avl-tree.el +++ b/lisp/emacs-lisp/avl-tree.el @@ -260,7 +260,7 @@ Return t if the height of the tree has grown." (opp (avl-tree--switch-dir dir)) ;; direction 0,1 -> sign factor -1,+1 (sgn (avl-tree--dir-to-sign dir)) - p1 p2 b2 result) + p1 p2 b2) (cond ((< (* sgn (avl-tree--node-balance br)) 0) (setf (avl-tree--node-balance br) 0) diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index 5b158eb994f..4b868f72899 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -524,7 +524,7 @@ Required package `%s-%s' is unavailable" (defun define-package (name-string version-string &optional docstring requirements - &rest extra-properties) + &rest _extra-properties) "Define a new package. NAME-STRING is the name of the package, as a string. VERSION-STRING is the version of the package, as a string. @@ -584,7 +584,7 @@ EXTRA-PROPERTIES is currently unused." (defun package-generate-autoloads (name pkg-dir) (require 'autoload) ;Load before we let-bind generated-autoload-file! (let* ((auto-name (concat name "-autoloads.el")) - (ignore-name (concat name "-pkg.el")) + ;;(ignore-name (concat name "-pkg.el")) (generated-autoload-file (expand-file-name auto-name pkg-dir)) (version-control 'never)) (unless (fboundp 'autoload-ensure-default-file) @@ -1389,7 +1389,7 @@ If REMEMBER-POS is non-nil, keep point on the same entry. PACKAGES should be t, which means to display all known packages, or a list of package names (symbols) to display." ;; Construct list of ((PACKAGE . VERSION) STATUS DESCRIPTION). - (let (info-list name builtin) + (let (info-list name) ;; Installed packages: (dolist (elt package-alist) (setq name (car elt)) @@ -1474,21 +1474,21 @@ If optional arg BUTTON is non-nil, describe its associated package." (describe-package package)))) ;; fixme numeric argument -(defun package-menu-mark-delete (&optional num) +(defun package-menu-mark-delete (&optional _num) "Mark a package for deletion and move to the next line." (interactive "p") (if (member (package-menu-get-status) '("installed" "obsolete")) (tabulated-list-put-tag "D" t) (forward-line))) -(defun package-menu-mark-install (&optional num) +(defun package-menu-mark-install (&optional _num) "Mark a package for installation and move to the next line." (interactive "p") (if (string-equal (package-menu-get-status) "available") (tabulated-list-put-tag "I" t) (forward-line))) -(defun package-menu-mark-unmark (&optional num) +(defun package-menu-mark-unmark (&optional _num) "Clear any marks on a package and move to the next line." (interactive "p") (tabulated-list-put-tag " " t)) @@ -1530,8 +1530,7 @@ If optional arg BUTTON is non-nil, describe its associated package." (dolist (entry tabulated-list-entries) ;; ENTRY is ((NAME . VERSION) [NAME VERSION STATUS DOC]) (let ((pkg (car entry)) - (status (aref (cadr entry) 2)) - old) + (status (aref (cadr entry) 2))) (cond ((equal status "installed") (push pkg installed)) ((equal status "available") diff --git a/lisp/emacs-lisp/smie.el b/lisp/emacs-lisp/smie.el index 5382e601e67..cafa1942a09 100644 --- a/lisp/emacs-lisp/smie.el +++ b/lisp/emacs-lisp/smie.el @@ -1603,8 +1603,7 @@ to which that point should be aligned, if we were to reindent it.") (indent-line-to indent))))) (defun smie-auto-fill () - (let ((fc (current-fill-column)) - (try-again nil)) + (let ((fc (current-fill-column))) (while (and fc (> (current-column) fc)) (cond ((not (or (nth 8 (save-excursion @@ -1628,7 +1627,6 @@ to which that point should be aligned, if we were to reindent it.") (setq bsf (point)))) (smie-indent-forward-token)) (when (> gain 0) - (setq try-again) (goto-char bsf) (newline-and-indent))))) (t (do-auto-fill)))))) diff --git a/lisp/emulation/cua-rect.el b/lisp/emulation/cua-rect.el index e3aade760dc..4286afba938 100644 --- a/lisp/emulation/cua-rect.el +++ b/lisp/emulation/cua-rect.el @@ -465,7 +465,7 @@ If command is repeated at same position, delete the rectangle." (cua-copy-rectangle arg) (setq cua--mouse-last-pos (cons (point) cua--last-killed-rectangle))))) -(defun cua--mouse-ignore (event) +(defun cua--mouse-ignore (_event) (interactive "e") (setq this-command last-command)) @@ -609,12 +609,12 @@ If command is repeated at same position, delete the rectangle." (let ((lines 0)) (if (not (cua--rectangle-virtual-edges)) (cua--rectangle-operation nil nil t 2 t - (lambda (s e l r v) + (lambda (s e _l _r _v) (setq lines (1+ lines)) (if (and (> e s) (<= e (point-max))) (delete-region s e)))) (cua--rectangle-operation nil 1 t nil t - (lambda (s e l r v) + (lambda (s e _l _r _v) (setq lines (1+ lines)) (when (and (> e s) (<= e (point-max))) (delete-region s e))))) @@ -624,10 +624,10 @@ If command is repeated at same position, delete the rectangle." (let (rect) (if (not (cua--rectangle-virtual-edges)) (cua--rectangle-operation nil nil nil nil nil ; do not tabify - (lambda (s e l r) + (lambda (s e _l _r) (setq rect (cons (cua--filter-buffer-noprops s e) rect)))) (cua--rectangle-operation nil 1 nil nil nil ; do not tabify - (lambda (s e l r v) + (lambda (s e l r _v) (let ((copy t) (bs 0) (as 0) row) (if (= s e) (setq e (1+ e))) (goto-char s) @@ -840,7 +840,7 @@ If command is repeated at same position, delete the rectangle." (pad (cua--rectangle-virtual-edges)) indent) (cua--rectangle-operation (if clear 'clear 'corners) nil t pad nil - (lambda (s e l r) + (lambda (_s _e l _r) (move-to-column col pad) (if (and (eolp) (< (current-column) col)) @@ -905,10 +905,10 @@ With prefix argument, activate previous rectangle if possible." (cua-help-for-region t)))) (defun cua-restrict-regexp-rectangle (arg) - "Restrict rectangle to lines (not) matching REGEXP. -With prefix argument, the toggle restriction." + "Restrict rectangle to lines (not) matching regexp. +With prefix argument, toggle restriction." (interactive "P") - (let ((r (cua--rectangle-restriction)) regexp) + (let ((r (cua--rectangle-restriction))) (if (and r (null (car (cdr r)))) (if arg (cua--rectangle-restriction (car r) nil (not (car (cdr (cdr r))))) @@ -919,9 +919,9 @@ With prefix argument, the toggle restriction." (defun cua-restrict-prefix-rectangle (arg) "Restrict rectangle to lines (not) starting with CHAR. -With prefix argument, the toggle restriction." +With prefix argument, toggle restriction." (interactive "P") - (let ((r (cua--rectangle-restriction)) regexp) + (let ((r (cua--rectangle-restriction))) (if (and r (car (cdr r))) (if arg (cua--rectangle-restriction (car r) t (not (car (cdr (cdr r))))) @@ -1000,7 +1000,7 @@ The text previously in the region is not overwritten by the blanks, but instead winds up to the right of the rectangle." (interactive) (cua--rectangle-operation 'corners nil t 1 nil - (lambda (s e l r) + (lambda (_s _e l r) (skip-chars-forward " \t") (let ((ws (- (current-column) l)) (p (point))) @@ -1015,7 +1015,7 @@ at that column is deleted. With prefix arg, also delete whitespace to the left of that column." (interactive "P") (cua--rectangle-operation 'clear nil t 1 nil - (lambda (s e l r) + (lambda (s _e _l _r) (when arg (skip-syntax-backward " " (line-beginning-position)) (setq s (point))) @@ -1027,7 +1027,7 @@ With prefix arg, also delete whitespace to the left of that column." The text previously in the rectangle is overwritten by the blanks." (interactive) (cua--rectangle-operation 'keep nil nil 1 nil - (lambda (s e l r) + (lambda (s e _l _r) (goto-char e) (skip-syntax-forward " " (line-end-position)) (setq e (point)) @@ -1040,20 +1040,19 @@ The text previously in the rectangle is overwritten by the blanks." (defun cua-align-rectangle () "Align rectangle lines to left column." (interactive) - (let (x) - (cua--rectangle-operation 'clear nil t t nil - (lambda (s e l r) - (let ((b (line-beginning-position))) - (skip-syntax-backward "^ " b) - (skip-syntax-backward " " b) - (setq s (point))) - (skip-syntax-forward " " (line-end-position)) - (delete-region s (point)) - (indent-to l)) - (lambda (l r) - (move-to-column l) - ;; (setq cua-save-point (point)) - )))) + (cua--rectangle-operation 'clear nil t t nil + (lambda (s _e l _r) + (let ((b (line-beginning-position))) + (skip-syntax-backward "^ " b) + (skip-syntax-backward " " b) + (setq s (point))) + (skip-syntax-forward " " (line-end-position)) + (delete-region s (point)) + (indent-to l)) + (lambda (l _r) + (move-to-column l) + ;; (setq cua-save-point (point)) + ))) (declare-function cua--cut-rectangle-to-global-mark "cua-gmrk" (as-text)) (declare-function cua--copy-rectangle-to-global-mark "cua-gmrk" (as-text)) @@ -1087,7 +1086,7 @@ The text previously in the rectangle is overwritten by the blanks." The length of STRING need not be the same as the rectangle width." (interactive "sString rectangle: ") (cua--rectangle-operation 'keep nil t t nil - (lambda (s e l r) + (lambda (s e l _r) (delete-region s e) (skip-chars-forward " \t") (let ((ws (- (current-column) l))) @@ -1095,7 +1094,7 @@ The length of STRING need not be the same as the rectangle width." (insert string) (indent-to (+ (current-column) ws)))) (unless (cua--rectangle-restriction) - (lambda (l r) + (lambda (l _r) (cua--rectangle-right (max l (+ l (length string) -1))))))) (defun cua-fill-char-rectangle (character) @@ -1113,7 +1112,7 @@ The length of STRING need not be the same as the rectangle width." (if buffer-read-only (message "Cannot replace in read-only buffer") (cua--rectangle-operation 'keep nil t 1 nil - (lambda (s e l r) + (lambda (_s e _l _r) (if (re-search-forward regexp e t) (replace-match newtext nil nil)))))) @@ -1121,7 +1120,7 @@ The length of STRING need not be the same as the rectangle width." "Increment each line of CUA rectangle by prefix amount." (interactive "p") (cua--rectangle-operation 'keep nil t 1 nil - (lambda (s e l r) + (lambda (_s e _l _r) (cond ((re-search-forward "0x\\([0-9a-fA-F]+\\)" e t) (let* ((txt (cua--filter-buffer-noprops (match-beginning 1) (match-end 1))) @@ -1154,14 +1153,14 @@ The numbers are formatted according to the FORMAT string." (setq format cua--rectangle-seq-format) (setq cua--rectangle-seq-format format)) (cua--rectangle-operation 'clear nil t 1 nil - (lambda (s e l r) + (lambda (s e _l _r) (delete-region s e) (insert (format format first)) (setq first (+ first incr))))) (defmacro cua--convert-rectangle-as (command tabify) `(cua--rectangle-operation 'clear nil nil nil ,tabify - (lambda (s e l r) + (lambda (s e _l _r) (,command s e)))) (defun cua-upcase-rectangle () @@ -1218,7 +1217,7 @@ The numbers are formatted according to the FORMAT string." (if cua--debug (print z auxbuf)) (cua--rectangle-operation nil nil t pad nil - (lambda (s e l r) + (lambda (s e l _r) (let (cc) (goto-char e) (skip-chars-forward " \t") @@ -1249,7 +1248,7 @@ The numbers are formatted according to the FORMAT string." (put 'cua--rectangle-aux-replace 'lisp-indent-function 4) -(defun cua--left-fill-rectangle (start end) +(defun cua--left-fill-rectangle (_start _end) (beginning-of-line) (while (< (point) (point-max)) (delete-horizontal-space nil) @@ -1298,7 +1297,7 @@ With prefix arg, replace rectangle with output from command." "Remove the first line of the rectangle and scroll remaining lines up." (interactive) (cua--rectangle-aux-replace 0 t t t t - (lambda (s e) + (lambda (s _e) (if (= (forward-line 1) 0) (delete-region s (point)))))) @@ -1307,7 +1306,7 @@ With prefix arg, replace rectangle with output from command." The remaining lines are scrolled down, losing the last line." (interactive) (cua--rectangle-aux-replace 0 t t t t - (lambda (s e) + (lambda (s _e) (goto-char s) (insert "\n")))) @@ -1337,7 +1336,7 @@ With prefix arg, indent to that column." (pad (cua--rectangle-virtual-edges)) indent) (cua--rectangle-operation 'corners nil t pad nil - (lambda (s e l r) + (lambda (_s _e l r) (move-to-column (if (cua--rectangle-right-side t) (max (1+ r) col) l) diff --git a/lisp/imenu.el b/lisp/imenu.el index 08e6338b39e..ceea9420c4c 100644 --- a/lisp/imenu.el +++ b/lisp/imenu.el @@ -266,29 +266,6 @@ The function in this variable is called when selecting a normal index-item.") (and (consp (cdr item)) (listp (cadr item)) (not (eq (car (cadr item)) 'lambda)))) -;; Macro to display a progress message. -;; RELPOS is the relative position to display. -;; If RELPOS is nil, then the relative position in the buffer -;; is calculated. -;; PREVPOS is the variable in which we store the last position displayed. -(defmacro imenu-progress-message (prevpos &optional relpos reverse) - -;; Made obsolete/empty, as computers are now faster than the eye, and -;; it had problems updating the messages correctly, and could shadow -;; more important messages/prompts in the minibuffer. KFS 2004-10-27. - -;; `(and -;; imenu-scanning-message -;; (let ((pos ,(if relpos -;; relpos -;; `(imenu--relative-position ,reverse)))) -;; (if ,(if relpos t -;; `(> pos (+ 5 ,prevpos))) -;; (progn -;; (message imenu-scanning-message pos) -;; (setq ,prevpos pos))))) -) - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; @@ -338,13 +315,10 @@ Don't move point." (let ((index-alist '()) (index-var-alist '()) (index-type-alist '()) - (index-unknown-alist '()) - prev-pos) + (index-unknown-alist '())) (goto-char (point-max)) - (imenu-progress-message prev-pos 0) ;; Search for the function (while (beginning-of-defun) - (imenu-progress-message prev-pos nil t) (save-match-data (and (looking-at "(def") (save-excursion @@ -371,7 +345,6 @@ Don't move point." (forward-sexp 2) (push (imenu-example--name-and-position) index-unknown-alist))))))) - (imenu-progress-message prev-pos 100) (and index-var-alist (push (cons "Variables" index-var-alist) index-alist)) @@ -396,15 +369,13 @@ Don't move point." (defun imenu-example--create-c-index (&optional regexp) (let ((index-alist '()) - prev-pos char) + char) (goto-char (point-min)) - (imenu-progress-message prev-pos 0) ;; Search for the function (save-match-data (while (re-search-forward (or regexp imenu-example--function-name-regexp-c) nil t) - (imenu-progress-message prev-pos) (backward-up-list 1) (save-excursion (goto-char (scan-sexps (point) 1)) @@ -412,7 +383,6 @@ Don't move point." ;; Skip this function name if it is a prototype declaration. (if (not (eq char ?\;)) (push (imenu-example--name-and-position) index-alist)))) - (imenu-progress-message prev-pos 100) (nreverse index-alist))) (make-obsolete 'imenu-example--create-c-index "your own" "23.2") @@ -684,22 +654,19 @@ The alternate method, which is the one most often used, is to call (cond ((and imenu-prev-index-position-function imenu-extract-index-name-function) (let ((index-alist '()) (pos (point)) - prev-pos name) + name) (goto-char (point-max)) - (imenu-progress-message prev-pos 0 t) ;; Search for the function (while (funcall imenu-prev-index-position-function) (when (= pos (point)) (error "Infinite loop at %s:%d: imenu-prev-index-position-function does not move point" (buffer-name) pos)) (setq pos (point)) - (imenu-progress-message prev-pos nil t) (save-excursion (setq name (funcall imenu-extract-index-name-function))) (and (stringp name) ;; [ydi] updated for imenu-use-markers (push (cons name (if imenu-use-markers (point-marker) (point))) index-alist))) - (imenu-progress-message prev-pos 100 t) index-alist)) ;; Use generic expression if possible. ((and imenu-generic-expression) @@ -765,7 +732,6 @@ They may also be nested index alists like: depending on PATTERNS." (let ((index-alist (list 'dummy)) - prev-pos (case-fold-search (if (or (local-variable-p 'imenu-case-fold-search) (not (local-variable-p 'font-lock-defaults))) imenu-case-fold-search @@ -782,7 +748,6 @@ depending on PATTERNS." (modify-syntax-entry c (cdr syn) table)) (car syn)))) (goto-char (point-max)) - (imenu-progress-message prev-pos 0 t) (unwind-protect ; for syntax table (save-match-data (set-syntax-table table) @@ -820,7 +785,6 @@ depending on PATTERNS." (goto-char (match-beginning index)) (beginning-of-line) (setq beg (point)) - (imenu-progress-message prev-pos nil t) ;; Add this sort of submenu only when we've found an ;; item for it, avoiding empty, duff menus. (unless (assoc menu-title index-alist) @@ -845,7 +809,6 @@ depending on PATTERNS." ;; keep making progress backwards. (goto-char start)))) (set-syntax-table old-table))) - (imenu-progress-message prev-pos 100 t) ;; Sort each submenu by position. ;; This is in case one submenu gets items from two different regexps. (dolist (item index-alist) @@ -1039,7 +1002,7 @@ to `imenu-update-menubar'.") (imenu item) nil)) -(defun imenu-default-goto-function (name position &optional rest) +(defun imenu-default-goto-function (_name position &optional _rest) "Move to the given position. NAME is ignored. POSITION is where to move. REST is also ignored. diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el index 12d1e0c6c36..d2b9890805c 100644 --- a/lisp/mail/rmail.el +++ b/lisp/mail/rmail.el @@ -40,6 +40,9 @@ (require 'mail-utils) (require 'rfc2047) +(declare-function compilation--message->loc "compile" (cl-x) t) +(declare-function epa--find-coding-system-for-mime-charset "epa" (mime-charset)) + (defconst rmail-attribute-header "X-RMAIL-ATTRIBUTES" "The header that stores the Rmail attribute data.") diff --git a/lisp/mail/sendmail.el b/lisp/mail/sendmail.el index 0b0f2795610..cd3862985bd 100644 --- a/lisp/mail/sendmail.el +++ b/lisp/mail/sendmail.el @@ -856,8 +856,7 @@ Prefix arg means don't delete this window." (defun mail-bury (&optional arg) "Bury this mail buffer." (let ((newbuf (other-buffer (current-buffer))) - (return-action mail-return-action) - some-rmail) + (return-action mail-return-action)) (bury-buffer (current-buffer)) ;; If there is an Rmail buffer, return to it nicely ;; even if this message was not started by an Rmail command. diff --git a/lisp/mail/unrmail.el b/lisp/mail/unrmail.el index af16bbf8c73..bf7b9abe2c1 100644 --- a/lisp/mail/unrmail.el +++ b/lisp/mail/unrmail.el @@ -61,8 +61,7 @@ For example, invoke `emacs -batch -f batch-unrmail RMAIL'." (error "This file is not in Babyl format")) ;; Decode the file contents just as Rmail did. - (let ((modifiedp (buffer-modified-p)) - (coding-system rmail-file-coding-system) + (let ((coding-system rmail-file-coding-system) from to) (goto-char (point-min)) (search-forward "\n\^_" nil t) ; Skip BABYL header. diff --git a/lisp/mouse.el b/lisp/mouse.el index 3344bbec2cc..8e08f89f22c 100644 --- a/lisp/mouse.el +++ b/lisp/mouse.el @@ -194,8 +194,7 @@ items `Turn Off' and `Help'." (newmap (if ancestor (make-sparse-keymap (concat (format-mode-line mode-name) " Mode")) - menu-bar-edit-menu)) - uniq) + menu-bar-edit-menu))) (if ancestor (set-keymap-parent newmap ancestor)) newmap)) diff --git a/lisp/net/dbus.el b/lisp/net/dbus.el index feef78a305f..e3144a53fab 100644 --- a/lisp/net/dbus.el +++ b/lisp/net/dbus.el @@ -37,6 +37,7 @@ (declare-function dbus-init-bus "dbusbind.c") (declare-function dbus-method-return-internal "dbusbind.c") (declare-function dbus-method-error-internal "dbusbind.c") +(declare-function dbus-register-service "dbusbind.c") (declare-function dbus-register-signal "dbusbind.c") (declare-function dbus-register-method "dbusbind.c") (declare-function dbus-send-signal "dbusbind.c") @@ -275,8 +276,7 @@ usage: (dbus-name-owner-changed-handler service old-owner new-owner)" (stringp (cadr args)) (stringp (caddr args))) (let ((service (car args)) - (old-owner (cadr args)) - (new-owner (caddr args))) + (old-owner (cadr args))) ;; Check whether SERVICE is a known name. (when (not (string-match "^:" service)) (maphash diff --git a/lisp/net/tls.el b/lisp/net/tls.el index d232095444b..75d178e3225 100644 --- a/lisp/net/tls.el +++ b/lisp/net/tls.el @@ -231,8 +231,7 @@ Fourth arg PORT is an integer specifying a port to connect to." ?h host ?p (if (integerp port) (int-to-string port) - port)))) - response) + port))))) (message "Opening TLS connection with `%s'..." formatted-cmd) (setq process (start-process name buffer shell-file-name shell-command-switch diff --git a/lisp/nxml/nxml-mode.el b/lisp/nxml/nxml-mode.el index f9122e7245e..5adafc3845c 100644 --- a/lisp/nxml/nxml-mode.el +++ b/lisp/nxml/nxml-mode.el @@ -1236,7 +1236,7 @@ on the line, reindent the line." (unless arg (if nxml-slash-auto-complete-flag (if end-tag-p - (condition-case err + (condition-case nil (let ((start-tag-end (nxml-scan-element-backward (1- slash-pos) t))) (when start-tag-end @@ -1434,7 +1434,7 @@ its line. Otherwise return nil." (nxml-token-after) (= xmltok-start bol)) (eq xmltok-type 'data)) - (condition-case err + (condition-case nil (nxml-scan-element-backward (point) nil @@ -1559,8 +1559,7 @@ This expects the xmltok-* variables to be set up as by `xmltok-forward'." (off 0)) (if value-boundary ;; inside an attribute value - (let ((value-start (car value-boundary)) - (value-end (cdr value-boundary))) + (let ((value-start (car value-boundary))) (goto-char pos) (forward-line -1) (if (< (point) value-start) @@ -1753,7 +1752,7 @@ single name. A character reference contains a character number." xmltok-name-end) (t end))) -(defun nxml-scan-backward-within (end) +(defun nxml-scan-backward-within (_end) (setq xmltok-start (+ xmltok-start (nxml-start-delimiter-length xmltok-type))) @@ -2263,7 +2262,7 @@ ENDP is t in the former case, nil in the latter." 'nxml-in-mixed-content-hook)) nil) ;; See if the matching tag does not start or end a line. - ((condition-case err + ((condition-case nil (progn (setq matching-tag-pos (xmltok-save @@ -2401,7 +2400,7 @@ Repeating \\[nxml-dynamic-markup-word] immediately after successful \\[nxml-dynamic-markup-word] removes the previously inserted markup and attempts to find another possible way to do the markup." (interactive "*") - (let (search-start-pos done) + (let (search-start-pos) (if (and (integerp nxml-dynamic-markup-prev-pos) (= nxml-dynamic-markup-prev-pos (point)) (eq last-command this-command) diff --git a/lisp/subr.el b/lisp/subr.el index 0cd00995f45..ff93cd22210 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -678,7 +678,6 @@ Subkeymaps may be modified but are not canonicalized." ;; Process the bindings starting from the end. (dolist (binding (prog1 bindings (setq bindings ()))) (let* ((key (car binding)) - (item (cdr binding)) (oldbind (assq key bindings))) (push (if (not oldbind) ;; The normal case: no duplicate bindings. @@ -2121,7 +2120,7 @@ by doing (clear-string STRING)." ;; Turn off electricity. (set (make-local-variable 'post-self-insert-hook) nil) (add-hook 'after-change-functions - (lambda (beg end len) + (lambda (beg end _len) (clear-this-command-keys) (setq beg (min end (max (minibuffer-prompt-end) beg))) diff --git a/lisp/textmodes/picture.el b/lisp/textmodes/picture.el index 3e2ab7892da..191e9f3672b 100644 --- a/lisp/textmodes/picture.el +++ b/lisp/textmodes/picture.el @@ -242,8 +242,7 @@ Use \"\\[command-apropos] picture-movement\" to see commands which control motio (spacing (when (display-graphic-p frame) (or (with-current-buffer (window-buffer window) line-spacing) - (frame-parameter frame 'line-spacing)))) - rows cols) + (frame-parameter frame 'line-spacing))))) (cond ((floatp spacing) (setq spacing (truncate (* spacing char-ht)))) ((null spacing) diff --git a/lisp/tutorial.el b/lisp/tutorial.el index b512700f5b9..e0e2a82fab9 100644 --- a/lisp/tutorial.el +++ b/lisp/tutorial.el @@ -585,7 +585,6 @@ with some explanatory links." (not (get-text-property (match-beginning 1) 'tutorial-remark)) (let* ((desc (car changed-key)) (ck (cdr changed-key)) - (key (nth 0 ck)) (def-fun (nth 1 ck)) (where (nth 3 ck)) s1 s2 help-string) @@ -724,7 +723,7 @@ See `tutorial--save-tutorial' for more information." saved-file (error-message-string err)))) ;; An error is raised here?? Is this a bug? - (condition-case err + (condition-case nil (undo-only) (error nil)) ;; Restore point From 5b01685cc194de3d566003bd264b2bf600ab8067 Mon Sep 17 00:00:00 2001 From: Juanma Barranquero Date: Thu, 19 Apr 2012 23:34:49 +0200 Subject: [PATCH 077/564] lisp/imenu.el (imenu-progress-message): Restore. --- lisp/ChangeLog | 5 +++++ lisp/imenu.el | 23 +++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 9ad019328d6..5131fa112a7 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-04-19 Juanma Barranquero + + * imenu.el (imenu-progress-message): Restore; it is "used" in + erc/erc-imenu.el and net/snmp-mode.el. + 2012-04-19 Juanma Barranquero * avoid.el (mouse-avoidance-mode): Mark unused arg. diff --git a/lisp/imenu.el b/lisp/imenu.el index ceea9420c4c..12ac3540925 100644 --- a/lisp/imenu.el +++ b/lisp/imenu.el @@ -266,6 +266,29 @@ The function in this variable is called when selecting a normal index-item.") (and (consp (cdr item)) (listp (cadr item)) (not (eq (car (cadr item)) 'lambda)))) +;; Macro to display a progress message. +;; RELPOS is the relative position to display. +;; If RELPOS is nil, then the relative position in the buffer +;; is calculated. +;; PREVPOS is the variable in which we store the last position displayed. +(defmacro imenu-progress-message (prevpos &optional relpos reverse) + +;; Made obsolete/empty, as computers are now faster than the eye, and +;; it had problems updating the messages correctly, and could shadow +;; more important messages/prompts in the minibuffer. KFS 2004-10-27. + +;; `(and +;; imenu-scanning-message +;; (let ((pos ,(if relpos +;; relpos +;; `(imenu--relative-position ,reverse)))) +;; (if ,(if relpos t +;; `(> pos (+ 5 ,prevpos))) +;; (progn +;; (message imenu-scanning-message pos) +;; (setq ,prevpos pos))))) +) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; From cfc7d5da20fbfe33c1d2e6d2f3c215e324446d87 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 19 Apr 2012 18:02:25 -0400 Subject: [PATCH 078/564] * lisp/electric.el (electric-indent-post-self-insert-function): Check that electric-indent-mode is enabled in current buffer. --- lisp/ChangeLog | 5 +++++ lisp/electric.el | 1 + 2 files changed, 6 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 5131fa112a7..d89818e836e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-04-19 Stefan Monnier + + * electric.el (electric-indent-post-self-insert-function): Check that + electric-indent-mode is enabled in current buffer. + 2012-04-19 Juanma Barranquero * imenu.el (imenu-progress-message): Restore; it is "used" in diff --git a/lisp/electric.el b/lisp/electric.el index 50c9010a74e..6a31ba1f1d3 100644 --- a/lisp/electric.el +++ b/lisp/electric.el @@ -215,6 +215,7 @@ point right after that char, and it should return t to cause indentation, ;; it looks challenging. (let (pos) (when (and + electric-indent-mode ;; Don't reindent while inserting spaces at beginning of line. (or (not (memq last-command-event '(?\s ?\t))) (save-excursion (skip-chars-backward " \t") (not (bolp)))) From b58b1df840de3b14a8a4231396c7881fcb5ae15e Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 19 Apr 2012 21:37:14 -0400 Subject: [PATCH 079/564] More small edits for doc/lispref/minibuf.texi * doc/lispref/elisp.texi, doc/lispref/vol1.texi, doc/lispref/vol2.texi: * doc/lispref/minibuf.texi (Completion): Update "High-Level Completion" description. * doc/lispref/minibuf.texi (Basic Completion): No need to describe obarrays here. Don't mention obsolete `nospace' argument of all-completions. (Minibuffer Completion, Completion Commands, Reading File Names) (Completion Variables): Copyedits. (Completion Commands): Mention parent keymaps. Remove obsolete minibuffer-local-filename-must-match-map. (High-Level Completion): Remove read-variable's almost word-for-word duplication of read-command. --- doc/lispref/ChangeLog | 13 +++ doc/lispref/elisp.texi | 2 +- doc/lispref/minibuf.texi | 186 ++++++++++++++++----------------------- doc/lispref/vol1.texi | 2 +- doc/lispref/vol2.texi | 2 +- 5 files changed, 90 insertions(+), 115 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 33aa40d816e..167539aa450 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,16 @@ +2012-04-20 Glenn Morris + + * minibuf.texi (Basic Completion): No need to describe obarrays here. + Don't mention obsolete `nospace' argument of all-completions. + (Minibuffer Completion, Completion Commands, Reading File Names) + (Completion Variables): Copyedits. + (Completion Commands): Mention parent keymaps. + Remove obsolete minibuffer-local-filename-must-match-map. + (High-Level Completion): Remove read-variable's almost + word-for-word duplication of read-command. + * elisp.texi, vol1.texi, vol2.texi, minibuf.texi (Completion): + Update "High-Level Completion" description. + 2012-04-19 Glenn Morris * minibuf.texi (Minibuffers): diff --git a/doc/lispref/elisp.texi b/doc/lispref/elisp.texi index fd20bed16ae..4319d5eddda 100644 --- a/doc/lispref/elisp.texi +++ b/doc/lispref/elisp.texi @@ -648,7 +648,7 @@ Completion * Minibuffer Completion:: Invoking the minibuffer with completion. * Completion Commands:: Minibuffer commands that do completion. * High-Level Completion:: Convenient special cases of completion - (reading buffer name, file name, etc.). + (reading buffer names, variable names, etc.). * Reading File Names:: Using completion to read file names and shell commands. * Completion Variables:: Variables controlling completion behavior. diff --git a/doc/lispref/minibuf.texi b/doc/lispref/minibuf.texi index c856f0f6663..dbbf1da7490 100644 --- a/doc/lispref/minibuf.texi +++ b/doc/lispref/minibuf.texi @@ -620,6 +620,7 @@ starting from an abbreviation for it. Completion works by comparing the user's input against a list of valid names and determining how much of the name is determined uniquely by what the user has typed. For example, when you type @kbd{C-x b} (@code{switch-to-buffer}) and then +@c "This is the sort of English up with which I will not put." type the first few letters of the name of the buffer to which you wish to switch, and then type @key{TAB} (@code{minibuffer-complete}), Emacs extends the name as far as it can. @@ -644,7 +645,7 @@ for reading certain kinds of names with completion. * Minibuffer Completion:: Invoking the minibuffer with completion. * Completion Commands:: Minibuffer commands that do completion. * High-Level Completion:: Convenient special cases of completion - (reading buffer name, file name, etc.). + (reading buffer names, variable names, etc.). * Reading File Names:: Using completion to read file names and shell commands. * Completion Variables:: Variables controlling completion behavior. @@ -686,13 +687,7 @@ think of such lists as alists. @cindex obarray in completion If @var{collection} is an obarray (@pxref{Creating Symbols}), the names -of all symbols in the obarray form the set of permissible completions. The -global variable @code{obarray} holds an obarray containing the names of -all interned Lisp symbols. - -Note that the only valid way to make a new obarray is to create it -empty and then add symbols to it one by one using @code{intern}. -Also, you cannot intern a given symbol in more than one obarray. +of all symbols in the obarray form the set of permissible completions. If @var{collection} is a hash table, then the keys that are strings are the possible completions. Other keys are ignored. @@ -773,16 +768,20 @@ too short). Both of those begin with the string @samp{foobar}. @end smallexample @end defun -@defun all-completions string collection &optional predicate nospace +@c Removed obsolete argument nospace. +@defun all-completions string collection &optional predicate This function returns a list of all possible completions of -@var{string}. The arguments to this function (aside from -@var{nospace}) are the same as those of @code{try-completion}. Also, -this function uses @code{completion-regexp-list} in the same way that +@var{string}. The arguments to this function +@c (aside from @var{nospace}) +are the same as those of @code{try-completion}, and it +uses @code{completion-regexp-list} in the same way that @code{try-completion} does. +@ignore The optional argument @var{nospace} is obsolete. If it is non-@code{nil}, completions that start with a space are ignored unless @var{string} starts with a space. +@end ignore If @var{collection} is a function, it is called with three arguments: @var{string}, @var{predicate} and @code{t}; then @code{all-completions} @@ -852,7 +851,7 @@ pertains to the area after @code{"/usr/"} and before @code{"/doc"}. @end defun If you store a completion alist in a variable, you should mark the -variable as ``risky'' with a non-@code{nil} +variable as ``risky'' by giving it a non-@code{nil} @code{risky-local-variable} property. @xref{File Local Variables}. @defvar completion-ignore-case @@ -881,7 +880,7 @@ proper value is done the first time you do completion using @var{var}. It is done by calling @var{fun} with no arguments. The value @var{fun} returns becomes the permanent value of @var{var}. -Here is a usage example: +Here is an example: @smallexample (defvar foo (lazy-completion-table foo make-my-alist)) @@ -966,7 +965,7 @@ Methods}) and the setting of @code{enable-multibyte-characters} (@pxref{Text Representations}) from whichever buffer was current before entering the minibuffer. -If the built-in variable @code{completion-ignore-case} is +If the variable @code{completion-ignore-case} is non-@code{nil}, completion ignores case when comparing the input against the possible matches. @xref{Basic Completion}. In this mode of operation, @var{predicate} must also ignore case, or you will get @@ -1099,8 +1098,8 @@ uses this to highlight text in the completion list for better visual feedback. This is not needed in the minibuffer; for minibuffer completion, you can pass @code{nil}. -This function is called by @code{minibuffer-completion-help}. The -most common way to use it is together with +This function is called by @code{minibuffer-completion-help}. A +common way to use it is together with @code{with-output-to-temp-buffer}, like this: @example @@ -1134,7 +1133,7 @@ keymap makes the following bindings: @end table @noindent -with other characters bound as in @code{minibuffer-local-map} +and uses @code{minibuffer-local-map} as its parent keymap (@pxref{Definition of minibuffer-local-map}). @end defvar @@ -1146,15 +1145,6 @@ minibuffer unconditionally. By default, this keymap makes the following bindings: @table @asis -@item @kbd{?} -@code{minibuffer-completion-help} - -@item @key{SPC} -@code{minibuffer-complete-word} - -@item @key{TAB} -@code{minibuffer-complete} - @item @kbd{C-j} @code{minibuffer-complete-and-exit} @@ -1163,25 +1153,21 @@ bindings: @end table @noindent -with other characters bound as in @code{minibuffer-local-map}. +and uses @code{minibuffer-local-completion-map} as its parent keymap. @end defvar @defvar minibuffer-local-filename-completion-map -This is like @code{minibuffer-local-completion-map} -except that it does not bind @key{SPC}. This keymap is used by the -function @code{read-file-name}. +This is a sparse keymap that simply unbinds @key{SPC}; because +filenames can contain spaces. The function @code{read-file-name} +combines this keymap with either @code{minibuffer-local-completion-map} +or @code{minibuffer-local-must-match-map}. @end defvar -@defvar minibuffer-local-filename-must-match-map -This is like @code{minibuffer-local-must-match-map} -except that it does not bind @key{SPC}. This keymap is used by the -function @code{read-file-name}. -@end defvar @node High-Level Completion @subsection High-Level Completion Functions - This section describes the higher-level convenient functions for + This section describes the higher-level convenience functions for reading certain sorts of names with completion. In most cases, you should not call these functions in the middle of a @@ -1255,7 +1241,7 @@ for which @code{commandp} returns @code{t}. @xref{Interactive Call}. The argument @var{default} specifies what to return if the user enters null input. It can be a symbol, a string or a list of strings. If it is a string, @code{read-command} interns it before returning it. -If it is a list, @code{read-command} returns the first element of this list. +If it is a list, @code{read-command} interns the first element of this list. If @var{default} is @code{nil}, that means no default has been specified; then if the user enters null input, the return value is @code{(intern "")}, that is, a symbol whose name is an empty string. @@ -1298,50 +1284,9 @@ complete in the set of extant Lisp symbols, and it uses the @defun read-variable prompt &optional default @anchor{Definition of read-variable} This function reads the name of a user variable and returns it as a -symbol. - -The argument @var{default} specifies the default value to return if -the user enters null input. It can be a symbol, a string, or a list -of strings. If it is a string, @code{read-variable} interns it to -make the default value. If it is a list, @code{read-variable} interns -the first element. If @var{default} is @code{nil}, that means no -default has been specified; then if the user enters null input, the -return value is @code{(intern "")}. - -@example -@group -(read-variable "Variable name? ") - -;; @r{After evaluation of the preceding expression,} -;; @r{the following prompt appears,} -;; @r{with an empty minibuffer:} -@end group - -@group ----------- Buffer: Minibuffer ---------- -Variable name? @point{} ----------- Buffer: Minibuffer ---------- -@end group -@end example - -@noindent -If the user then types @kbd{fill-p @key{RET}}, @code{read-variable} -returns @code{fill-prefix}. - -In general, @code{read-variable} is similar to @code{read-command}, -but uses the predicate @code{user-variable-p} instead of -@code{commandp}: - -@cindex @code{user-variable-p} example -@example -@group -(read-variable @var{prompt}) -@equiv{} -(intern - (completing-read @var{prompt} obarray - 'user-variable-p t nil)) -@end group -@end example +symbol. Its arguments have the same form as those of @code{read-command}. +In general, this function is similar to @code{read-command}, but uses +the predicate @code{user-variable-p} instead of @code{commandp}. @end defun @deffn Command read-color &optional prompt convert allow-empty display @@ -1359,7 +1304,7 @@ minibuffer. However, when called interactively or if the optional argument @var{convert} is non-@code{nil}, it converts any input color name into the corresponding RGB value string and instead returns that. This function requires a valid color specification to be input. -Empty color names are allowed when @code{allow-empty} is +Empty color names are allowed when @var{allow-empty} is non-@code{nil} and the user enters null input. Interactively, or when @var{display} is non-@code{nil}, the return @@ -1377,7 +1322,7 @@ and @code{read-input-method-name}, in @ref{Input Methods}. The high-level completion functions @code{read-file-name}, @code{read-directory-name}, and @code{read-shell-command} are designed -to read file names, directory names, and shell commands respectively. +to read file names, directory names, and shell commands, respectively. They provide special features, including automatic insertion of the default directory. @@ -1386,15 +1331,29 @@ This function reads a file name, prompting with @var{prompt} and providing completion. As an exception, this function reads a file name using a graphical -file dialog instead of the minibuffer, if (i) it is invoked via a -mouse command, and (ii) the selected frame is on a graphical display -supporting such dialogs, and (iii) the variable @code{use-dialog-box} -is non-@code{nil} (@pxref{Dialog Boxes,, Dialog Boxes, emacs, The GNU -Emacs Manual}), and (iv) the @var{directory} argument, described -below, does not specify a remote file (@pxref{Remote Files,, Remote -Files, emacs, The GNU Emacs Manual}). The exact behavior when using a -graphical file dialog is platform-dependent. Here, we simply document -the behavior when using the minibuffer. +file dialog instead of the minibuffer, if all of the following are +true: + +@enumerate +@item +It is invoked via a mouse command. + +@item +The selected frame is on a graphical display supporting such dialogs. + +@item +The variable @code{use-dialog-box} is non-@code{nil}. +@xref{Dialog Boxes,, Dialog Boxes, emacs, The GNU Emacs Manual}. + +@item +The @var{directory} argument, described below, does not specify a +remote file. @xref{Remote Files,, Remote Files, emacs, The GNU Emacs Manual}. +@end enumerate + +@noindent +The exact behavior when using a graphical file dialog is +platform-dependent. Here, we simply document the behavior when using +the minibuffer. @code{read-file-name} does not automatically expand the returned file name. You must call @code{expand-file-name} yourself if an absolute @@ -1405,7 +1364,7 @@ The optional argument @var{require-match} has the same meaning as in The argument @var{directory} specifies the directory to use for completing relative file names. It should be an absolute directory -name. If @code{insert-default-directory} is non-@code{nil}, +name. If the variable @code{insert-default-directory} is non-@code{nil}, @var{directory} is also inserted in the minibuffer as initial input. It defaults to the current buffer's value of @code{default-directory}. @@ -1413,9 +1372,9 @@ If you specify @var{initial}, that is an initial file name to insert in the buffer (after @var{directory}, if that is inserted). In this case, point goes at the beginning of @var{initial}. The default for @var{initial} is @code{nil}---don't insert any file name. To see what -@var{initial} does, try the command @kbd{C-x C-v}. @strong{Please -note:} we recommend using @var{default} rather than @var{initial} in -most cases. +@var{initial} does, try the command @kbd{C-x C-v} in a buffer visiting +a file. @strong{Please note:} we recommend using @var{default} rather +than @var{initial} in most cases. If @var{default} is non-@code{nil}, then the function returns @var{default} if the user exits the minibuffer with the same non-empty @@ -1518,7 +1477,7 @@ use the code letters @samp{f} or @samp{F} in their interactive form. @xref{Interactive Codes,, Code Characters for interactive}.) Its value controls whether @code{read-file-name} starts by placing the name of the default directory in the minibuffer, plus the initial file -name if any. If the value of this variable is @code{nil}, then +name, if any. If the value of this variable is @code{nil}, then @code{read-file-name} does not place any initial input in the minibuffer (unless you specify initial input with the @var{initial} argument). In that case, the default directory is still used for @@ -1580,20 +1539,22 @@ Input}). The rest of @var{args}, if present, are used as the @defvar minibuffer-local-shell-command-map This keymap is used by @code{read-shell-command} for completing -command and file names that are part of a shell command. +command and file names that are part of a shell command. It uses +@code{minibuffer-local-map} as its parent keymap, and binds @key{TAB} +to @code{completion-at-point}. @end defvar @node Completion Variables @subsection Completion Variables - Here are some variables which can be used to alter the default + Here are some variables that can be used to alter the default completion behavior. @cindex completion styles @defopt completion-styles The value of this variable is a list of completion style (symbols) to use for performing completion. A @dfn{completion style} is a set of -rules for generating completions. Each symbol in occurring this list +rules for generating completions. Each symbol occurring this list must have a corresponding entry in @code{completion-styles-alist}. @end defopt @@ -1640,13 +1601,14 @@ description of the available completion styles. @defopt completion-category-overrides This variable specifies special completion styles and other completion behaviors to use when completing certain types of text. Its value -should be a list of the form @code{(@var{category} . @var{alist})}. -@var{category} is a symbol describing what is being completed; -currently, the @code{buffer} and @code{file} categories are defined, -but others can be defined via specialized completion functions -(@pxref{Programmed Completion}). @var{alist} is an association list -describing how completion should behave for the corresponding -category. The following alist keys are supported: +should be an alist with elements of the form @code{(@var{category} +. @var{alist})}. @var{category} is a symbol describing what is being +completed; currently, the @code{buffer}, @code{file}, and +@code{unicode-name} categories are defined, but others can be defined +via specialized completion functions (@pxref{Programmed Completion}). +@var{alist} is an association list describing how completion should +behave for the corresponding category. The following alist keys are +supported: @table @code @item styles @@ -1679,7 +1641,7 @@ the completion. The value should be a function to run after performing completion. The function should accept two arguments, @var{string} and @var{status}, where @var{string} is the text to which the field was -completed and @var{status} indicates what kind of operation happened: +completed, and @var{status} indicates what kind of operation happened: @code{finished} if text is now complete, @code{sole} if the text cannot be further completed but completion is not finished, or @code{exact} if the text is a valid completion but may be further @@ -1791,7 +1753,7 @@ the same as for @code{display-sort-function}. @defun completion-table-dynamic function This function is a convenient way to write a function that can act as -programmed completion function. The argument @var{function} should be +a programmed completion function. The argument @var{function} should be a function that takes one argument, a string, and returns an alist of possible completions of it. You can think of @code{completion-table-dynamic} as a transducer between that interface @@ -1845,7 +1807,7 @@ satisfy. @item :exclusive If the value is @code{no}, then if the completion table fails to match -the text at point, then @code{completion-at-point} moves on to the +the text at point, @code{completion-at-point} moves on to the next function in @code{completion-at-point-functions} instead of reporting a completion failure. @end table @@ -1859,7 +1821,7 @@ old code to using @code{completion-at-point}. The first function in @code{completion-at-point-functions} to return a non-@code{nil} value is used by @code{completion-at-point}. The remaining functions are not called. The exception to this is when -there is a @code{:exclusive} specification, as described above. +there is an @code{:exclusive} specification, as described above. @end defvar The following function provides a convenient way to perform diff --git a/doc/lispref/vol1.texi b/doc/lispref/vol1.texi index c16947692e4..25ea8577467 100644 --- a/doc/lispref/vol1.texi +++ b/doc/lispref/vol1.texi @@ -670,7 +670,7 @@ Completion * Minibuffer Completion:: Invoking the minibuffer with completion. * Completion Commands:: Minibuffer commands that do completion. * High-Level Completion:: Convenient special cases of completion - (reading buffer name, file name, etc.). + (reading buffer names, variable names, etc.). * Reading File Names:: Using completion to read file names and shell commands. * Completion Variables:: Variables controlling completion behavior. diff --git a/doc/lispref/vol2.texi b/doc/lispref/vol2.texi index b7dc8366f97..2fd2a8d8224 100644 --- a/doc/lispref/vol2.texi +++ b/doc/lispref/vol2.texi @@ -669,7 +669,7 @@ Completion * Minibuffer Completion:: Invoking the minibuffer with completion. * Completion Commands:: Minibuffer commands that do completion. * High-Level Completion:: Convenient special cases of completion - (reading buffer name, file name, etc.). + (reading buffer names, variable names, etc.). * Reading File Names:: Using completion to read file names and shell commands. * Completion Variables:: Variables controlling completion behavior. From adee4030b507d0ae3f0f031a079569ab997108bf Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 19 Apr 2012 22:19:43 -0400 Subject: [PATCH 080/564] Some rough FAQ additions for Emacs 24 * doc/misc/faq.texi (New in Emacs 24): New section. (Packages that do not come with Emacs): Mention M-x list-packages. --- doc/misc/ChangeLog | 5 +++ doc/misc/faq.texi | 88 +++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 89 insertions(+), 4 deletions(-) diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index 8f920f62718..0fb57dcad46 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -1,3 +1,8 @@ +2012-04-20 Glenn Morris + + * faq.texi (New in Emacs 24): New section. + (Packages that do not come with Emacs): Mention M-x list-packages. + 2012-04-13 Glenn Morris * Makefile.in: Replace non-portable use of $< in emacs-gnutls rules. diff --git a/doc/misc/faq.texi b/doc/misc/faq.texi index 5b7bb7ec9ce..0f20c41c8eb 100644 --- a/doc/misc/faq.texi +++ b/doc/misc/faq.texi @@ -942,6 +942,7 @@ status of its latest version. @menu * Origin of the term Emacs:: * Latest version of Emacs:: +* New in Emacs 24:: * New in Emacs 23:: * New in Emacs 22:: * New in Emacs 21:: @@ -1009,12 +1010,84 @@ Emacs, type @kbd{C-h C-n} (@kbd{M-x view-emacs-news}). As of Emacs 22, you can give this command a prefix argument to read about which features were new in older versions. +@node New in Emacs 24 +@section What is different about Emacs 24? +@cindex Differences between Emacs 23 and Emacs 24 +@cindex Emacs 24, new features in + +@itemize +@cindex packages, installing more +@item +Emacs now includes a package manager. Type @kbd{M-x list-packages} to +get started. You can use this to download and automatically install +many more Lisp packages. + +@cindex lexical binding +@item +Emacs Lisp now supports lexical binding on a per-file basis. In +@emph{lexical binding}, variable references must be located textually +within the binding construct. This contrasts with @emph{dynamic +binding}, where programs can refer to variables defined outside their +local textual scope. A Lisp file can use a local variable setting of +@code{lexical-binding: t} to indicate that the contents should be +interpreted using lexical binding. See the Emacs Lisp Reference +Manual for more details. + +@cindex bidirectional display +@cindex right-to-left languages +@item +Some human languages, such as English, are written from left to right. +Others, such as Arabic, are written from right to left. Emacs now has +support for any mixture of these forms---this is ``bidirectional text''. + +@item +Handling of text selections has been improved, and now integrates +better with external clipboards. + +@cindex themes +@item +A new command @kbd{customize-themes} allows you to easily change the +appearance of your Emacs. + +@item +Emacs can be compiled with the Gtk+ 3 toolkit. + +@item +Support for several new external libraries can be included at compile +time: + +@itemize + +@item +``Security-Enhanced Linux'' (SELinux) is a Linux kernel feature that +provides more sophisticated file access controls than ordinary +``Unix-style'' file permissions. + +@item +The ImageMagick display library. This allows you to display many more +image format in Emacs, as well as carry out transformations such as +rotations. + +@item +The GnuTLS library for secure network communications. Emacs uses this +transparently for email if your mail server supports it. + +@item +The libxml2 library for parsing XML structures. +@end itemize + +@item +Much more flexibility in the handling of windows and buffer display. + +@end itemize + +As always, consult the @file{NEWS} file for more information. + + @node New in Emacs 23 @section What is different about Emacs 23? @cindex Differences between Emacs 22 and Emacs 23 @cindex Emacs 23, new features in -@cindex Recently introduced features -@cindex Default features @itemize @@ -1065,8 +1138,7 @@ Other changes include: support for serial port access; D-Bus bindings; a new Visual Line mode for line-motion; improved completion; a new mode (@samp{DocView}) for viewing of PDF, PostScript, and DVI documents; nXML mode (for editing XML documents) is included; VC has been updated for -newer version control systems; etc. As always, consult the @file{NEWS} -file for more information. +newer version control systems; etc. @node New in Emacs 22 @@ -3225,6 +3297,14 @@ see @ref{Packages that do not come with Emacs}. @cindex Emacs Lisp List @cindex Emacs Lisp Archive +Your first port of call should be the @kbd{M-x list-packages} command. +This connects to the @uref{http:///elpa.gnu.org, GNU ELPA} (``Emacs +Lisp Package Archive'') server and fetches the list of additional +packages that it offers. These are GNU packages that are available +for use with Emacs, but are distributed separately. Select a package +to get more details about the features that it offers, and then if you +wish, Emacs can download and automatically install it for you. + @uref{http://www.damtp.cam.ac.uk/user/sje30/emacs/ell.html, The Emacs Lisp List (ELL)}, maintained by @email{S.J.Eglen@@damtp.cam.ac.uk, Stephen Eglen}, aims to provide one compact list with links to all of the current Emacs From 5db6195faa9205a5c3cfde134cc312d3d3b95b46 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 19 Apr 2012 21:03:55 -0700 Subject: [PATCH 081/564] FOR-RELEASE small edits --- admin/FOR-RELEASE | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/admin/FOR-RELEASE b/admin/FOR-RELEASE index 76ad2dc05cb..ad427397524 100644 --- a/admin/FOR-RELEASE +++ b/admin/FOR-RELEASE @@ -53,12 +53,17 @@ pt-br Rodrigo Real ru Alex Ott sk Miroslav VaÅ¡ko +** For a major release, add a "New in Emacs XX" section to faq.texi. + ** Remove temporary +++/--- lines in NEWS. ** Try to reorder NEWS: most important things first, related items together. ** Consider bumping customize-changed-options-previous-release. +** cusver-check from admin.el cam help find new defcustoms missing +:version tags. + * BUGS ** Check for modes which bind M-s that conflicts with a new global binding M-s @@ -206,7 +211,7 @@ loading.texi cyd macros.texi cyd maps.texi rgm markers.texi rgm -minibuf.texi +minibuf.texi rgm modes.texi cyd nonascii.texi cyd numbers.texi cyd From 539aa513944b1e780a7981f63a0cdf8d86f2303c Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Fri, 20 Apr 2012 08:47:55 +0300 Subject: [PATCH 082/564] Doc fixes for emacs-bzr-* facilities. lisp/version.el (emacs-bzr-version, emacs-bzr-get-version): Doc fixes. --- lisp/ChangeLog | 4 ++++ lisp/emacs-lisp/eieio.el | 4 +--- lisp/version.el | 8 +++++--- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index d89818e836e..5529db59a0c 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-04-20 Eli Zaretskii + + * version.el (emacs-bzr-version, emacs-bzr-get-version): Doc fixes. + 2012-04-19 Stefan Monnier * electric.el (electric-indent-post-self-insert-function): Check that diff --git a/lisp/emacs-lisp/eieio.el b/lisp/emacs-lisp/eieio.el index f1c1bf8965c..768eba58ee1 100644 --- a/lisp/emacs-lisp/eieio.el +++ b/lisp/emacs-lisp/eieio.el @@ -3051,7 +3051,7 @@ Optional argument GROUP is the sub-group of slots to display. ;;;### (autoloads (eieio-help-mode-augmentation-maybee eieio-describe-generic ;;;;;; eieio-describe-constructor eieio-describe-class eieio-browse) -;;;;;; "eieio-opt" "eieio-opt.el" "e2814881441ad23759409687502f0ee1") +;;;;;; "eieio-opt" "eieio-opt.el" "d808328f9c0156ecbd412d77ba8c569e") ;;; Generated autoloads from eieio-opt.el (autoload 'eieio-browse "eieio-opt" "\ @@ -3060,7 +3060,6 @@ If optional ROOT-CLASS, then start with that, otherwise start with variable `eieio-default-superclass'. \(fn &optional ROOT-CLASS)" t nil) - (defalias 'describe-class 'eieio-describe-class) (autoload 'eieio-describe-class "eieio-opt" "\ @@ -3075,7 +3074,6 @@ Describe the constructor function FCN. Uses `eieio-describe-class' to describe the class being constructed. \(fn FCN)" t nil) - (defalias 'describe-generic 'eieio-describe-generic) (autoload 'eieio-describe-generic "eieio-opt" "\ diff --git a/lisp/version.el b/lisp/version.el index 56e19147b2c..38be0e7fd57 100644 --- a/lisp/version.el +++ b/lisp/version.el @@ -81,13 +81,15 @@ to the system configuration; look at `system-configuration' instead." ;; Set during dumping, this is a defvar so that it can be setq'd. (defvar emacs-bzr-version nil "\ -String giving the bzr revision number from which this Emacs was built. -This is nil if Emacs was not built from a bzr checkout, or if we could +String giving the bzr revision from which this Emacs was built. +Value is the bzr revision number and a revision ID separated by a blank. +Value is nil if Emacs was not built from a bzr checkout, or if we could not determine the revision.") (defun emacs-bzr-get-version (&optional dir) "\ Try to return as a string the bzr revision number of the Emacs sources. -Returns nil if the sources do not seem to be under bzr, or if we could +Value is the bzr revision number and a revision ID separated by a blank. +Value is nil if the sources do not seem to be under bzr, or if we could not determine the revision. Note that this reports on the current state of the sources, which may not correspond to the running Emacs. From 6cf2a23e297b8a57a70c2a1dab5aa28b73461b0b Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Fri, 20 Apr 2012 08:57:38 +0300 Subject: [PATCH 083/564] Put the '$Id:' tag into MS-Windows executable of Emacs. lisp/version.el (top level): Put into the executable the ident-style '$Id:' tag on windows-nt as well. --- lisp/ChangeLog | 2 ++ lisp/version.el | 5 ++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 5529db59a0c..42f99ec9c9e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,6 +1,8 @@ 2012-04-20 Eli Zaretskii * version.el (emacs-bzr-version, emacs-bzr-get-version): Doc fixes. + (top level): Put into the executable the ident-style '$Id:' tag on + windows-nt as well. 2012-04-19 Stefan Monnier diff --git a/lisp/version.el b/lisp/version.el index 38be0e7fd57..d7fb05ea465 100644 --- a/lisp/version.el +++ b/lisp/version.el @@ -118,9 +118,8 @@ Optional argument DIR is a directory to use instead of `source-directory'." )))) ;; We put version info into the executable in the form that `ident' uses. -(or (eq system-type 'windows-nt) - (purecopy (concat "\n$Id: " (subst-char-in-string ?\n ?\s (emacs-version)) - " $\n"))) +(purecopy (concat "\n$Id: " (subst-char-in-string ?\n ?\s (emacs-version)) + " $\n")) ;; Local Variables: ;; version-control: never From 2116e93c7c258d37d56bfe2334708368217ae0fd Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Fri, 20 Apr 2012 09:27:11 +0300 Subject: [PATCH 084/564] Doc fixes in window.el functions. lisp/window.el (window-min-size, window-sizable, window-min-delta) (window-max-delta, window--resizable, window-resizable) (window-total-size, window-full-height-p, window-full-width-p) (window-in-direction, window--resize-mini-window, window-resize) (window--resize-child-windows-normal) (window--resize-child-windows, window--resize-siblings) (window--resize-this-window, adjust-window-trailing-edge) (enlarge-window, shrink-window): Doc fixes. --- lisp/ChangeLog | 11 ++++ lisp/window.el | 137 ++++++++++++++++++++++++++----------------------- 2 files changed, 85 insertions(+), 63 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 1ce5e7fceea..cbdeb23b4e2 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,14 @@ +2012-04-20 Eli Zaretskii + + * window.el (window-min-size, window-sizable, window-min-delta) + (window-max-delta, window--resizable, window-resizable) + (window-total-size, window-full-height-p, window-full-width-p) + (window-in-direction, window--resize-mini-window, window-resize) + (window--resize-child-windows-normal) + (window--resize-child-windows, window--resize-siblings) + (window--resize-this-window, adjust-window-trailing-edge) + (enlarge-window, shrink-window): + 2012-04-19 Chong Yidong * progmodes/gdb-mi.el (gdb-inferior-io--maybe-delete-pty): New diff --git a/lisp/window.el b/lisp/window.el index c9e2469b0d2..28abec42680 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -514,17 +514,19 @@ window).") (if (window-valid-p ignore) (eq window ignore) ignore)) (defun window-min-size (&optional window horizontal ignore) - "Return the minimum number of lines of WINDOW. + "Return the minimum size of WINDOW. WINDOW can be an arbitrary window and defaults to the selected one. Optional argument HORIZONTAL non-nil means return the -minimum number of columns of WINDOW. +minimum number of columns of WINDOW; otherwise return the minimum +number of WINDOW's lines. -Optional argument IGNORE non-nil means ignore any restrictions +Optional argument IGNORE, if non-nil, means ignore restrictions imposed by fixed size windows, `window-min-height' or -`window-min-width' settings. IGNORE equal `safe' means live +`window-min-width' settings. If IGNORE equals `safe', live windows may get as small as `window-safe-min-height' lines and -`window-safe-min-width' columns. IGNORE a window means ignore -restrictions for that window only." +`window-safe-min-width' columns. If IGNORE is a window, ignore +restrictions for that window only. Any other non-nil value +means ignore all of the above restrictions for all windows." (window--min-size-1 (window-normalize-window window) horizontal ignore)) @@ -614,12 +616,13 @@ columns. If WINDOW cannot be shrunk by -DELTA lines or columns, return the minimum value in the range DELTA..0 by which WINDOW can be shrunk. -Optional argument IGNORE non-nil means ignore any restrictions +Optional argument IGNORE non-nil means ignore restrictions imposed by fixed size windows, `window-min-height' or -`window-min-width' settings. IGNORE equal `safe' means live +`window-min-width' settings. If IGNORE equals `safe', live windows may get as small as `window-safe-min-height' lines and -`window-safe-min-width' columns. IGNORE any window means ignore -restrictions for that window only." +`window-safe-min-width' columns. If IGNORE is a window, ignore +restrictions for that window only. Any other non-nil value means +ignore all of the above restrictions for all windows." (setq window (window-normalize-window window)) (cond ((< delta 0) @@ -734,20 +737,21 @@ window. Return zero if WINDOW cannot be shrunk. Optional argument HORIZONTAL non-nil means return number of columns by which WINDOW can be shrunk. -Optional argument IGNORE non-nil means ignore any restrictions +Optional argument IGNORE non-nil means ignore restrictions imposed by fixed size windows, `window-min-height' or -`window-min-width' settings. IGNORE a window means ignore -restrictions for that window only. IGNORE equal `safe' means +`window-min-width' settings. If IGNORE is a window, ignore +restrictions for that window only. If IGNORE equals `safe', live windows may get as small as `window-safe-min-height' lines -and `window-safe-min-width' columns. +and `window-safe-min-width' columns. Any other non-nil value +means ignore all of the above restrictions for all windows. -Optional argument TRAIL `before' means only windows to the left -of or above WINDOW can be enlarged. Optional argument TRAIL -`after' means only windows to the right of or below WINDOW can be -enlarged. +Optional argument TRAIL restricts the windows that can be enlarged. +If its value is `before', only windows to the left of or above WINDOW +can be enlarged. If it is `after', only windows to the right of or +below WINDOW can be enlarged. Optional argument NOUP non-nil means don't go up in the window -tree but try to enlarge windows within WINDOW's combination only. +tree, but try to enlarge windows within WINDOW's combination only. Optional argument NODOWN non-nil means don't check whether WINDOW itself (and its child windows) can be shrunk; check only whether @@ -808,24 +812,25 @@ at least one other window can be enlarged appropriately." (window--max-delta-1 parent delta horizontal ignore trail)))))) (defun window-max-delta (&optional window horizontal ignore trail noup nodown) - "Return maximum number of lines WINDOW by which WINDOW can be enlarged. + "Return maximum number of lines by which WINDOW can be enlarged. WINDOW can be an arbitrary window and defaults to the selected window. The return value is zero if WINDOW cannot be enlarged. Optional argument HORIZONTAL non-nil means return maximum number of columns by which WINDOW can be enlarged. -Optional argument IGNORE non-nil means ignore any restrictions +Optional argument IGNORE non-nil means ignore restrictions imposed by fixed size windows, `window-min-height' or -`window-min-width' settings. IGNORE a window means ignore -restrictions for that window only. IGNORE equal `safe' means +`window-min-width' settings. If IGNORE is a window, ignore +restrictions for that window only. If IGNORE equals `safe', live windows may get as small as `window-safe-min-height' lines -and `window-safe-min-width' columns. +and `window-safe-min-width' columns. Any other non-nil value means +ignore all of the above restrictions for all windows. -Optional argument TRAIL `before' means only windows to the left -of or below WINDOW can be shrunk. Optional argument TRAIL -`after' means only windows to the right of or above WINDOW can be -shrunk. +Optional argument TRAIL restricts the windows that can be enlarged. +If its value is `before', only windows to the left of or above WINDOW +can be enlarged. If it is `after', only windows to the right of or +below WINDOW can be enlarged. Optional argument NOUP non-nil means don't go up in the window tree but try to obtain the entire space from windows within @@ -860,12 +865,13 @@ columns. If WINDOW cannot be shrunk by -DELTA lines or columns, return the minimum value in the range DELTA..0 that can be used for shrinking WINDOW. -Optional argument IGNORE non-nil means ignore any restrictions +Optional argument IGNORE non-nil means ignore restrictions imposed by fixed size windows, `window-min-height' or -`window-min-width' settings. IGNORE a window means ignore -restrictions for that window only. IGNORE equal `safe' means +`window-min-width' settings. If IGNORE is a window, ignore +restrictions for that window only. If IGNORE equals `safe', live windows may get as small as `window-safe-min-height' lines -and `window-safe-min-width' columns. +and `window-safe-min-width' columns. Any other non-nil value +means ignore all of the above restrictions for all windows. Optional argument TRAIL `before' means only windows to the left of or below WINDOW can be shrunk. Optional argument TRAIL @@ -916,17 +922,18 @@ columns. If WINDOW cannot be shrunk by -DELTA lines or columns, return the minimum value in the range DELTA..0 that can be used for shrinking WINDOW. -Optional argument IGNORE non-nil means ignore any restrictions +Optional argument IGNORE non-nil means ignore restrictions imposed by fixed size windows, `window-min-height' or -`window-min-width' settings. IGNORE a window means ignore -restrictions for that window only. IGNORE equal `safe' means +`window-min-width' settings. If IGNORE is a window, ignore +restrictions for that window only. If IGNORE equals `safe', live windows may get as small as `window-safe-min-height' lines -and `window-safe-min-width' columns." +and `window-safe-min-width' columns. Any other non-nil value +means ignore all of the above restrictions for all windows." (setq window (window-normalize-window window)) (window--resizable window delta horizontal ignore)) (defun window-total-size (&optional window horizontal) - "Return the total height or width of window WINDOW. + "Return the total height or width of WINDOW. If WINDOW is omitted or nil, it defaults to the selected window. If HORIZONTAL is omitted or nil, return the total height of @@ -941,7 +948,7 @@ the total width, in columns, like `window-total-width'." ;; See discussion in bug#4543. (defun window-full-height-p (&optional window) - "Return t if WINDOW is as high as the containing frame. + "Return t if WINDOW is as high as its containing frame. More precisely, return t if and only if the total height of WINDOW equals the total height of the root window of WINDOW's frame. WINDOW can be any window and defaults to the selected @@ -951,7 +958,7 @@ one." (window-total-size (frame-root-window window)))) (defun window-full-width-p (&optional window) - "Return t if WINDOW is as wide as the containing frame. + "Return t if WINDOW is as wide as its containing frame. More precisely, return t if and only if the total width of WINDOW equals the total width of the root window of WINDOW's frame. WINDOW can be any window and defaults to the selected one." @@ -1115,7 +1122,7 @@ SIDE can be any of the symbols `left', `top', `right' or "Return window in DIRECTION as seen from WINDOW. DIRECTION must be one of `above', `below', `left' or `right'. WINDOW must be a live window and defaults to the selected one. -IGNORE, when non-nil means a window can be returned even if its +IGNORE non-nil means a window can be returned even if its `no-other-window' parameter is non-nil." (setq window (window-normalize-window window t)) (unless (memq direction '(above below left right)) @@ -1420,7 +1427,7 @@ windows." (defun window--resize-mini-window (window delta) "Resize minibuffer window WINDOW by DELTA lines. If WINDOW cannot be resized by DELTA lines make it as large (or -as small) as possible but don't signal an error." +as small) as possible, but don't signal an error." (when (window-minibuffer-p window) (let* ((frame (window-frame window)) (root (frame-root-window frame)) @@ -1461,12 +1468,13 @@ horizontally by DELTA columns. In this case a positive DELTA means enlarge WINDOW by DELTA columns. DELTA negative means WINDOW shall be shrunk by -DELTA columns. -Optional argument IGNORE non-nil means ignore any restrictions +Optional argument IGNORE non-nil means ignore restrictions imposed by fixed size windows, `window-min-height' or -`window-min-width' settings. IGNORE any window means ignore -restrictions for that window only. IGNORE equal `safe' means +`window-min-width' settings. If IGNORE is a window, ignore +restrictions for that window only. If IGNORE equals `safe', live windows may get as small as `window-safe-min-height' lines -and `window-safe-min-width' columns. +and `window-safe-min-width' columns. Any other non-nil value +means ignore all of the above restrictions for all windows. This function resizes other windows proportionally and never deletes any windows. If you want to move only the low (right) @@ -1516,9 +1524,9 @@ HORIZONTAL non-nil means set the new normal width of these windows. WINDOW specifies a child window of PARENT that has been resized by THIS-DELTA lines (columns). -Optional argument TRAIL either 'before or 'after means set values -for windows before or after WINDOW only. Optional argument -OTHER-DELTA a number specifies that this many lines (columns) +Optional argument TRAIL either `before' or `after' means set values +only for windows before or after WINDOW. Optional argument +OTHER-DELTA, a number, specifies that this many lines (columns) have been obtained from (or returned to) an ancestor window of PARENT in order to resize WINDOW." (let* ((delta-normal @@ -1618,12 +1626,13 @@ be a horizontally combined internal window. WINDOW, if specified, must denote a child window of PARENT that is resized by DELTA lines. -Optional argument IGNORE non-nil means ignore any restrictions +Optional argument IGNORE non-nil means ignore restrictions imposed by fixed size windows, `window-min-height' or -`window-min-width' settings. IGNORE equal `safe' means live +`window-min-width' settings. If IGNORE equals `safe', live windows may get as small as `window-safe-min-height' lines and -`window-safe-min-width' columns. IGNORE any window means ignore -restrictions for that window only. +`window-safe-min-width' columns. If IGNORE is a window, ignore +restrictions for that window only. Any other non-nil value means +ignore all of the above restrictions for all windows. Optional arguments TRAIL and EDGE, when non-nil, restrict the set of windows that shall be resized. If TRAIL equals `before', @@ -1790,12 +1799,13 @@ Optional argument HORIZONTAL non-nil means resize other windows when WINDOW is resized horizontally by DELTA columns. WINDOW itself is not resized by this function. -Optional argument IGNORE non-nil means ignore any restrictions +Optional argument IGNORE non-nil means ignore restrictions imposed by fixed size windows, `window-min-height' or -`window-min-width' settings. IGNORE equal `safe' means live +`window-min-width' settings. If IGNORE equals `safe', live windows may get as small as `window-safe-min-height' lines and -`window-safe-min-width' columns. IGNORE any window means ignore -restrictions for that window only. +`window-safe-min-width' columns. If IGNORE is a window, ignore +restrictions for that window only. Any other non-nil value means +ignore all of the above restrictions for all windows. Optional arguments TRAIL and EDGE, when non-nil, refine the set of windows that shall be resized. If TRAIL equals `before', @@ -1891,12 +1901,13 @@ preferably only resize windows adjacent to EDGE." Optional argument HORIZONTAL non-nil means resize WINDOW horizontally by DELTA columns. -Optional argument IGNORE non-nil means ignore any restrictions +Optional argument IGNORE non-nil means ignore restrictions imposed by fixed size windows, `window-min-height' or -`window-min-width' settings. IGNORE equal `safe' means live +`window-min-width' settings. If IGNORE equals `safe', live windows may get as small as `window-safe-min-height' lines and -`window-safe-min-width' columns. IGNORE any window means ignore -restrictions for that window only. +`window-safe-min-width' columns. If IGNORE is a window, ignore +restrictions for that window only. Any other non-nil value +means ignore all of the above restrictions for all windows. Optional argument ADD non-nil means add DELTA to the new total size of WINDOW. @@ -1986,7 +1997,7 @@ any windows." Optional argument HORIZONTAL non-nil means move WINDOW's right edge by DELTA columns. WINDOW defaults to the selected window. -If DELTA is greater zero, then move the edge downwards or to the +If DELTA is greater than zero, move the edge downwards or to the right. If DELTA is less than zero, move the edge upwards or to the left. If the edge can't be moved by DELTA lines or columns, move it as far as possible in the desired direction." @@ -2091,7 +2102,7 @@ move it as far as possible in the desired direction." (error "Failed adjusting window %s" window))))))) (defun enlarge-window (delta &optional horizontal) - "Make selected window DELTA lines taller. + "Make the selected window DELTA lines taller. Interactively, if no argument is given, make the selected window one line taller. If optional argument HORIZONTAL is non-nil, make selected window wider by DELTA columns. If DELTA is @@ -2112,7 +2123,7 @@ Return nil." horizontal)))) (defun shrink-window (delta &optional horizontal) - "Make selected window DELTA lines smaller. + "Make the selected window DELTA lines smaller. Interactively, if no argument is given, make the selected window one line smaller. If optional argument HORIZONTAL is non-nil, make selected window narrower by DELTA columns. If DELTA is From cd0f830c2127781a9f9f50ab4a0cb8cd05a66a1f Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Fri, 20 Apr 2012 09:28:32 +0300 Subject: [PATCH 085/564] ChangeLog updates for last commit. --- lisp/ChangeLog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index cbdeb23b4e2..ec008022e0e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -7,7 +7,7 @@ (window--resize-child-windows-normal) (window--resize-child-windows, window--resize-siblings) (window--resize-this-window, adjust-window-trailing-edge) - (enlarge-window, shrink-window): + (enlarge-window, shrink-window): Doc fixes. 2012-04-19 Chong Yidong From f30d612a7a628828baa7c333629a10295605291b Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Fri, 20 Apr 2012 14:39:29 +0800 Subject: [PATCH 086/564] Fixes for pty handling in gdb-mi.el and process.c. * lisp/progmodes/gdb-mi.el (gdb): Revert 2012-04-19 change. (gdb-inferior-io--init-proc): New function. (gdb-init-1): Use it. (gdb-inferior-io-sentinel): New sentinel for the gdb-inferior pty, responsible for allocating a new pty and hooking it to gdb when the old pty gets an EIO due to process exit. (gdb-delchar-or-quit): New command. Bind it in gdb-mi buffers. (gdb-tooltip-print): Don't use obsolete tooltip-use-echo-area. (gdb-inferior-io--maybe-delete-pty): Move into gdb-reset. * src/process.c (wait_reading_process_output): If EIO occurs on a pty, set the status to "failed" and ensure that sentinel is run. * doc/lispref/processes.texi (Asynchronous Processes): Mention nil argument to start-process. --- doc/lispref/ChangeLog | 5 +++ doc/lispref/processes.texi | 7 +++- lisp/ChangeLog | 12 +++++++ lisp/progmodes/gdb-mi.el | 69 +++++++++++++++++++++++++------------- src/ChangeLog | 5 +++ src/process.c | 27 +++++++++------ 6 files changed, 91 insertions(+), 34 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 167539aa450..fe555c0458c 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,8 @@ +2012-04-20 Chong Yidong + + * processes.texi (Asynchronous Processes): Mention nil argument to + start-process. + 2012-04-20 Glenn Morris * minibuf.texi (Basic Completion): No need to describe obarrays here. diff --git a/doc/lispref/processes.texi b/doc/lispref/processes.texi index cd5647f1843..6275ce0b1b7 100644 --- a/doc/lispref/processes.texi +++ b/doc/lispref/processes.texi @@ -559,8 +559,13 @@ already exists, then @var{name} is modified (by appending @samp{<1>}, etc.) to be unique. The buffer @var{buffer-or-name} is the buffer to associate with the process. +If @var{program} is @code{nil}, Emacs opens a new pseudoterminal (pty) +and associates its input and output with @var{buffer-or-name}, without +creating a subprocess. In that case, the remaining arguments +@var{args} are ignored. + The remaining arguments, @var{args}, are strings that specify command -line arguments for the program. +line arguments for the subprocess. In the example below, the first process is started and runs (rather, sleeps) for 100 seconds (the output buffer @samp{foo} is created diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ec008022e0e..601e4f4f59f 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,15 @@ +2012-04-20 Chong Yidong + + * progmodes/gdb-mi.el (gdb): Revert 2012-04-19 change. + (gdb-inferior-io--init-proc): New function. + (gdb-init-1): Use it. + (gdb-inferior-io-sentinel): New sentinel for the gdb-inferior pty, + responsible for allocating a new pty and hooking it to gdb when + the old pty gets an EIO due to process exit. + (gdb-delchar-or-quit): New command. Bind it in gdb-mi buffers. + (gdb-tooltip-print): Don't use obsolete tooltip-use-echo-area. + (gdb-inferior-io--maybe-delete-pty): Move into gdb-reset. + 2012-04-20 Eli Zaretskii * window.el (window-min-size, window-sizable, window-min-delta) diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el index 450075fde42..455727f9e02 100644 --- a/lisp/progmodes/gdb-mi.el +++ b/lisp/progmodes/gdb-mi.el @@ -817,10 +817,7 @@ detailed description of this mode. nil 'local) (local-set-key "\C-i" 'completion-at-point) - ;; FIXME: Under some circumstances, `gud-sentinel' apparently does - ;; not get called when the gdb process is killed (Bug#11273). - (add-hook 'post-command-hook 'gdb-inferior-io--maybe-delete-pty - nil t) + (local-set-key [remap comint-delchar-or-maybe-eof] 'gdb-delchar-or-quit) (setq gdb-first-prompt t) (setq gud-running nil) @@ -863,15 +860,8 @@ detailed description of this mode. (gdb-get-buffer-create 'gdb-inferior-io) (gdb-clear-inferior-io) - (set-process-filter (get-process "gdb-inferior") 'gdb-inferior-filter) - (gdb-input - ;; Needs GDB 6.4 onwards - (concat "-inferior-tty-set " - (or - ;; The process can run on a remote host. - (process-get (get-process "gdb-inferior") 'remote-tty) - (process-tty-name (get-process "gdb-inferior")))) - 'ignore) + (gdb-inferior-io--init-proc (get-process "gdb-inferior")) + (if (eq window-system 'w32) (gdb-input "-gdb-set new-console off" 'ignore)) (gdb-input "-gdb-set height 0" 'ignore) @@ -909,6 +899,25 @@ detailed description of this mode. (setq gdb-non-stop nil) (gdb-input "-gdb-set non-stop 0" 'ignore))) +(defun gdb-delchar-or-quit (arg) + "Delete ARG characters or send a quit command to GDB. +Send a quit only if point is at the end of the buffer, there is +no input, and GDB is waiting for input." + (interactive "p") + (unless (and (eq (current-buffer) gud-comint-buffer) + (eq gud-minor-mode 'gdbmi)) + (error "Not in a GDB-MI buffer")) + (let ((proc (get-buffer-process gud-comint-buffer))) + (if (and (eobp) proc (process-live-p proc) + (not gud-running) + (= (point) (marker-position (process-mark proc)))) + ;; Sending an EOF does not work with GDB-MI; submit an + ;; explicit quit command. + (progn + (insert "quit") + (comint-send-input t t)) + (delete-char arg)))) + (defvar gdb-define-alist nil "Alist of #define directives for GUD tooltips.") (defun gdb-create-define-alist () @@ -933,7 +942,6 @@ detailed description of this mode. (push (cons name define) gdb-define-alist)))) (declare-function tooltip-show "tooltip" (text &optional use-echo-area)) -(defvar tooltip-use-echo-area) (defun gdb-tooltip-print (expr) (with-current-buffer (gdb-get-buffer 'gdb-partial-output-buffer) @@ -941,7 +949,7 @@ detailed description of this mode. (if (re-search-forward ".*value=\\(\".*\"\\)" nil t) (tooltip-show (concat expr " = " (read (match-string 1))) - (or gud-tooltip-echo-area tooltip-use-echo-area + (or gud-tooltip-echo-area (not (display-graphic-p))))))) ;; If expr is a macro for a function don't print because of possible dangerous @@ -1514,13 +1522,26 @@ DOC is an optional documentation string." (gdb-display-buffer (gdb-get-buffer-create 'gdb-inferior-io) t)) -(defun gdb-inferior-io--maybe-delete-pty () - (let ((proc (get-buffer-process gud-comint-buffer)) - (inf-pty (get-process "gdb-inferior"))) - (and (or (null proc) - (memq (process-status proc) '(exit signal))) - inf-pty - (delete-process inf-pty)))) +(defun gdb-inferior-io--init-proc (proc) + ;; Set up inferior I/O. Needs GDB 6.4 onwards. + (set-process-filter proc 'gdb-inferior-filter) + (set-process-sentinel proc 'gdb-inferior-io-sentinel) + (gdb-input + (concat "-inferior-tty-set " + ;; The process can run on a remote host. + (or (process-get proc 'remote-tty) + (process-tty-name proc))) + 'ignore)) + +(defun gdb-inferior-io-sentinel (proc str) + (when (eq (process-status proc) 'failed) + ;; When the debugged process exits, Emacs gets an EIO error on + ;; read from the pty, and stops listening to it. Remove the pty, + ;; make a new one, and pass it to gdb. + (let ((buffer (process-buffer proc))) + ;; `comint-exec' deletes the original process as a side effect. + (comint-exec buffer "gdb-inferior" nil nil nil) + (gdb-inferior-io--init-proc (get-buffer-process buffer))))) (defconst gdb-frame-parameters '((height . 14) (width . 80) @@ -4131,7 +4152,9 @@ This arrangement depends on the value of `gdb-many-windows'." Kills the gdb buffers, and resets variables and the source buffers." ;; The gdb-inferior buffer has a pty hooked up to the main gdb ;; process. This pty must be deleted explicitly. - (gdb-inferior-io--maybe-delete-pty) + (let ((pty (get-process "gdb-inferior"))) + (if pty (delete-process pty))) + ;; Find gdb-mi buffers and kill them. (dolist (buffer (buffer-list)) (unless (eq buffer gud-comint-buffer) (with-current-buffer buffer diff --git a/src/ChangeLog b/src/ChangeLog index 00d257e6984..18b6ce1ad64 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2012-04-20 Chong Yidong + + * process.c (wait_reading_process_output): If EIO occurs on a pty, + set the status to "failed" and ensure that sentinel is run. + 2012-04-18 Glenn Morris * process.c (Fset_process_inherit_coding_system_flag) diff --git a/src/process.c b/src/process.c index 3ee22d270e9..f6f1ad0a6fb 100644 --- a/src/process.c +++ b/src/process.c @@ -4893,16 +4893,23 @@ wait_reading_process_output (int time_limit, int microsecs, int read_kbd, It can't hurt. */ else if (nread == -1 && errno == EIO) { - /* Don't do anything if only a pty, with no associated - process (bug#10933). */ - if (XPROCESS (proc)->pid != -2) { - /* Clear the descriptor now, so we only raise the signal - once. */ - FD_CLR (channel, &input_wait_mask); - FD_CLR (channel, &non_keyboard_wait_mask); - - kill (getpid (), SIGCHLD); - } + struct Lisp_Process *p = XPROCESS (proc); + + /* Clear the descriptor now, so we only raise the + signal once. */ + FD_CLR (channel, &input_wait_mask); + FD_CLR (channel, &non_keyboard_wait_mask); + + if (p->pid == -2) + { + /* If the EIO occurs on a pty, sigchld_handler's + wait3() will not find the process object to + delete. Do it here. */ + p->tick = ++process_tick; + p->status = Qfailed; + } + else + kill (getpid (), SIGCHLD); } #endif /* HAVE_PTYS */ /* If we can detect process termination, don't consider the From 8912063b467877f8f30751e1b0077791805cbcea Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Fri, 20 Apr 2012 15:13:25 +0800 Subject: [PATCH 087/564] Fix last change. * lisp/progmodes/gdb-mi.el (gdb-inferior-io-sentinel): Don't do anything if gdb process is killed. --- lisp/progmodes/gdb-mi.el | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el index 455727f9e02..f2d8f1f75b7 100644 --- a/lisp/progmodes/gdb-mi.el +++ b/lisp/progmodes/gdb-mi.el @@ -1536,12 +1536,16 @@ DOC is an optional documentation string." (defun gdb-inferior-io-sentinel (proc str) (when (eq (process-status proc) 'failed) ;; When the debugged process exits, Emacs gets an EIO error on - ;; read from the pty, and stops listening to it. Remove the pty, - ;; make a new one, and pass it to gdb. - (let ((buffer (process-buffer proc))) - ;; `comint-exec' deletes the original process as a side effect. - (comint-exec buffer "gdb-inferior" nil nil nil) - (gdb-inferior-io--init-proc (get-buffer-process buffer))))) + ;; read from the pty, and stops listening to it. If the gdb + ;; process is still running, remove the pty, make a new one, and + ;; pass it to gdb. + (let ((gdb-proc (get-buffer-process gud-comint-buffer)) + (io-buffer (process-buffer proc))) + (when (and gdb-proc (process-live-p gdb-proc) + (buffer-live-p io-buffer)) + ;; `comint-exec' deletes the original process as a side effect. + (comint-exec io-buffer "gdb-inferior" nil nil nil) + (gdb-inferior-io--init-proc (get-buffer-process io-buffer)))))) (defconst gdb-frame-parameters '((height . 14) (width . 80) From 540710130b872195127911237efa17e1bdfc2c5a Mon Sep 17 00:00:00 2001 From: Dan Nicolaescu Date: Fri, 20 Apr 2012 15:32:35 +0800 Subject: [PATCH 088/564] Fix sysfs battery display. * battery.el (battery-echo-area-format): Display remaining time for sysfs backend too (Bug#11269). (battery-linux-sysfs): Fix conditional for the charge. --- lisp/ChangeLog | 6 ++++++ lisp/battery.el | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 601e4f4f59f..ddd306b98df 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2012-04-20 Dan Nicolaescu + + * battery.el (battery-echo-area-format): Display remaining time + for sysfs backend too (Bug#11269). + (battery-linux-sysfs): Fix conditional for the charge. + 2012-04-20 Chong Yidong * progmodes/gdb-mi.el (gdb): Revert 2012-04-19 change. diff --git a/lisp/battery.el b/lisp/battery.el index 586be9e8938..5eb22b83f85 100644 --- a/lisp/battery.el +++ b/lisp/battery.el @@ -78,7 +78,7 @@ introduced by a `%' character in a control string." (cond ((eq battery-status-function 'battery-linux-proc-acpi) "Power %L, battery %B at %r (%p%% load, remaining time %t)") ((eq battery-status-function 'battery-linux-sysfs) - "Power %L, battery %B (%p%% load)") + "Power %L, battery %B (%p%% load, remaining time %t)") ((eq battery-status-function 'battery-pmset) "%L power, battery %B (%p%% load, remaining time %t)") ((eq battery-status-function 'battery-yeeloong-sysfs) @@ -509,7 +509,7 @@ The following %-sequences are provided: "N/A")) (cons ?d (or temperature "N/A")) (cons ?B (or charging-state "N/A")) - (cons ?p (cond ((> charge-full 0) + (cons ?p (cond ((and (> charge-full 0) (> charge-now 0)) (format "%.1f" (/ (* 100 charge-now) charge-full))) ((> energy-full 0) From c04627ac2b93ea0795b2c206029d7eab9227b407 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 20 Apr 2012 00:37:20 -0700 Subject: [PATCH 089/564] * MORE.STUFF: General update. Mention list-packages. Remove many old/outdated URLs. --- etc/ChangeLog | 5 ++ etc/MORE.STUFF | 137 ++++++++++++++++--------------------------------- 2 files changed, 50 insertions(+), 92 deletions(-) diff --git a/etc/ChangeLog b/etc/ChangeLog index adc4c941212..f3bb51500dd 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,3 +1,8 @@ +2012-04-20 Glenn Morris + + * MORE.STUFF: General update. Mention list-packages. + Remove many old/outdated URLs. + 2012-04-02 Alan Mackenzie * NEWS: Add CC Mode entries. diff --git a/etc/MORE.STUFF b/etc/MORE.STUFF index 84a34d24585..06e0870e4ce 100644 --- a/etc/MORE.STUFF +++ b/etc/MORE.STUFF @@ -1,99 +1,87 @@ More Neat Stuff for your Emacs -Copyright (C) 1993, 1999, 2001-2012 Free Software Foundation, Inc. +Copyright (C) 1993, 1999, 2001-2012 Free Software Foundation, Inc. See the end of the file for license conditions. -This file describes GNU Emacs programs and resources that are +The easiest way to add more features to your Emacs is to use the command +M-x list-packages. This contacts the server at , +where many Emacs Lisp packages are stored. These are distributed +separately from Emacs itself for reasons of space, etc. You can browse +the resulting *Packages* buffer to see what is available, and then +Emacs can automatically download and install the packages that you +select. See the section "Emacs Lisp Packages" in the Emacs manual +for more details. + +Below we describe some GNU Emacs programs and resources that are maintained by other people. Some of these may become part of the -Emacs distribution in the future. Others we unfortunately can't -distribute, even though they are free software, because we lack legal -papers for copyright purposes. Also included are sites where -development versions of some packages distributed with Emacs may be -found. +Emacs distribution, or GNU ELPA, in the future. Others we unfortunately +can't distribute, even though they are free software, because we lack +legal papers for copyright purposes. -You might also look at the Emacs web page -. If you use the -Windows-32 version of Emacs, see the NTEmacs sites listed in the FAQ. +Also listed are sites where development versions of some packages +distributed with Emacs may be found. -Please submit a bug report if you find that any of the addresses -listed here fail. +It is difficult to keep this file up-to-date, and it only lists a fraction +of the Emacs modes that are available. If you are interested in +a particular feature, then after checking Emacs itself and GNU ELPA, +a web search is often the best way to find results. + +* The gnu-emacs-sources mailing list + + which is gatewayed to the gnu.emacs.sources newsgroup (although the + connection between the two can be unreliable) is an official + place where people can post or announce their extensions to Emacs. * The `Emacs Lisp List' at - has pointers - to sources of a large number of packages. - -* gnu.emacs.sources - -Packages posted to the gnu.emacs.sources newsgroup (see -etc/MAILINGLISTS) might be archived specifically (try a web search -engine) or retrievable from general Usenet archive services. + has pointers + to sources of a large number of packages. Unfortunately, at the time + of writing it seems to no longer be updating. * emacswiki.org + The Emacs Wiki has an area for storing elisp files + . -The Emacs Wiki has an area for storing elisp files -. +* WikEmacs + is an alternative wiki for Emacs. -* Emacs tutorials and manuals - - * Emacs slides and tutorials can be found here: +* Emacs slides and tutorials can be found here: * Maintenance versions of some packages distributed with Emacs You might find bug-fixes or enhancements in these places. +In many cases, however, development of these packages has shifted to Emacs, +so you will find the latest version in Emacs. * Ada-mode: * Battery and Info Look: - * BS: - - * Calculator: - * CC mode: * CPerl: * Ediff and Viper: - * Eldoc and Rlogin: - - * ERC: - * Etags: - * Gnus: - * Ispell: - * MH-E: * nXML: * Org mode: - * PS mode: - - * PS-print: - - * Python: - - * QuickURL: - * RefTeX: * Remember: - * Speedbar, Checkdoc etc: - - * SQL: + * CEDET: * Tramp: Remote file access via rsh/ssh - * Webjump: - * Auxiliary files * (Tex)info files for use with Info-look that don't come from GNU @@ -114,18 +102,16 @@ Emacs for various reasons, sometimes because their authors haven't made a copyright assignment to the FSF. Some of them may be integrated in the future. -You might like to check whether they are packaged for your system. -Several are for Debian GNU/Linux in particular. +Your operating system distribution may include several of these as optional +packages that you can install. * AUCTeX: An extensible package that supports writing and formatting TeX files (including AMS-TeX, LaTeX, Texinfo, ConTeXt, and docTeX). + Available from GNU ELPA. * BBDB: personal Info Rolodex integrated with mail/news: - - [You might want to set the coding system of your .bbdb file to - emacs-mule, say by adding `("\\.bbdb\\'" . emacs-mule)' to - `file-coding-system-alist' for non-ASCII characters.] + * Boxquote: @@ -143,13 +129,6 @@ Several are for Debian GNU/Linux in particular. * Ee: categorizing information manager: - * EFS: enhanced version of ange-ftp: - - - * Elib library: - From GNU distribution mirrors. (Much of this functionality is now - in Emacs.) - * EMacro: EMacro is a portable configuration file that configures itself. @@ -168,33 +147,19 @@ Several are for Debian GNU/Linux in particular. * Emacs Wiki Mode: A wiki-like publishing tool and personal information manager - * Gnuserv: - - Alternative emacsclient/emacsserver. Also available from this Web - page: eiffel-mode.el. - * Go in a buffer: Go Text Protocol client: A modified version is also bundled with GNU Go: - * hm--html-menus: - - HTML-specific editing. Can work with PSGML. - * Hyperbole: - + Hyperbole is an open, efficient, programmable information management and hypertext system. * JDEE: Provides a Java development environment for Emacs. - * Mailcrypt: - - PGP and GPG support. PGP isn't free software, but GPG, the GNU - Privacy Guard, is a free replacement . - * Mew: A MIME mail reader for Emacs/XEmacs. @@ -208,9 +173,6 @@ Several are for Debian GNU/Linux in particular. * Preview LaTeX: embed preview LaTeX images in source buffer. - * PSGML: - DTD-aware serious SGML/XML editing. - * Quack: Quack enhances Emacs support for Scheme. @@ -227,26 +189,17 @@ Several are for Debian GNU/Linux in particular. * Tamago: Chinese/Japanese/Korean input method Emacs Lisp package to provide input methods for CJK characters. - It can use these background conversion servers: - FreeWnn (jserver, cserver, tserver), - Wnn6, - SJ3 Ver.2 - * Tiny Tools: + * Tiny Tools: * VM (View Mail): Alternative mail reader Previously hosted at: - There are VM newsgroups: , and - . - * W3: - Web browser. There's a W3 mail list/newsgroup - . + * W3 Web browser: * Wanderlust: - Yet Another Message Interface on Emacsen. Wanderlust is a mail/news - reader supporting IMAP4rev1 for emacsen. + Wanderlust is a mail/news reader for Emacs. * WhizzyTex: WhizzyTeX provides a minor mode for Emacs or XEmacs, a (bash) From 50e5ebca7edcf5299b89ff74499991de01e22046 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 20 Apr 2012 00:49:19 -0700 Subject: [PATCH 090/564] * etc/CONTRIBUTE: Expand a bit on copyright assignments. --- etc/CONTRIBUTE | 25 ++++++++++++++++++------- etc/ChangeLog | 2 ++ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/etc/CONTRIBUTE b/etc/CONTRIBUTE index 06b9a9e45a5..aff350f9642 100644 --- a/etc/CONTRIBUTE +++ b/etc/CONTRIBUTE @@ -1,4 +1,4 @@ -Copyright (C) 2006-2012 Free Software Foundation, Inc. +Copyright (C) 2006-2012 Free Software Foundation, Inc. See end for license conditions. @@ -44,13 +44,24 @@ Ref: The "Tips" Appendix in the Emacs Lisp Reference. * Copyright Assignment -We can accept small changes (roughly, fewer than 15 lines) without -legal papers. Anything more substantial requires a copyright -disclaimer or assignment (the latter is preferred, especially for -larger changes). Both of these involved filling out a short form and -filing it with the FSF. The process is straightforward -- contact us -at emacs-devel@gnu.org to obtain the relevant forms. +The FSF (Free Software Foundation) is the copyright holder for GNU Emacs. +The FSF is a nonprofit with a worldwide mission to promote computer +user freedom and to defend the rights of all free software users. +For general information, see the website http://www.fsf.org/ . +Generally speaking, for non-trivial contributions to GNU Emacs we +require that the copyright be assigned to the FSF. For the reasons +behind this, see: http://www.gnu.org/licenses/why-assign.html . + +Copyright assignment is a simple process. If you live in the US, you +can do it entirely electronically. We can help you get started, and +answer any questions you may have (or point you to the people with the +answers), at the emacs-devel@gnu.org mailing list. + +A copyright disclaimer is also a possibility, but we prefer an assignment. +We can accept small changes (roughly, fewer than 15 lines) without +an assignment. This is a cumulative limit (e.g. three separate 5 line +patches) over all your contributions. * Getting the Source Code diff --git a/etc/ChangeLog b/etc/ChangeLog index f3bb51500dd..d69d066f292 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,5 +1,7 @@ 2012-04-20 Glenn Morris + * CONTRIBUTE: Expand a bit on copyright assignments. + * MORE.STUFF: General update. Mention list-packages. Remove many old/outdated URLs. From 41cfe0cb4c3cad4c4a417f8a91eb0180e5cc7211 Mon Sep 17 00:00:00 2001 From: Martin Rudalics Date: Fri, 20 Apr 2012 10:49:24 +0200 Subject: [PATCH 091/564] Fix resizing of minibuffer windows (Bug#11276). * window.el (adjust-window-trailing-edge, enlarge-window) (shrink-window, window-resize): * mouse.el (mouse-drag-line): Fix resizing of minibuffer windows (Bug#11276). --- lisp/ChangeLog | 7 +++++++ lisp/mouse.el | 23 +++++++++++------------ lisp/window.el | 34 ++++++++++++++++++++++++++-------- 3 files changed, 44 insertions(+), 20 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ddd306b98df..e139a7b2bba 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2012-04-20 Martin Rudalics + + * window.el (adjust-window-trailing-edge, enlarge-window) + (shrink-window, window-resize): + * mouse.el (mouse-drag-line): Fix resizing of minibuffer + windows (Bug#11276). + 2012-04-20 Dan Nicolaescu * battery.el (battery-echo-area-format): Display remaining time diff --git a/lisp/mouse.el b/lisp/mouse.el index 2e119483797..20a78e55651 100644 --- a/lisp/mouse.el +++ b/lisp/mouse.el @@ -404,13 +404,16 @@ must be one of the symbols header, mode, or vertical." (or mouse-1-click-in-non-selected-windows (eq window (selected-window))) (mouse-on-link-p start))) - (enlarge-minibuffer + (resize-minibuffer + ;; Resize the minibuffer window if it's on the same frame as + ;; and immediately below the position window and it's either + ;; active or `resize-mini-windows' is nil. (and (eq line 'mode) - (not resize-mini-windows) (eq (window-frame minibuffer-window) frame) - (not (one-window-p t frame)) (= (nth 1 (window-edges minibuffer-window)) - (nth 3 (window-edges window))))) + (nth 3 (window-edges window))) + (or (not resize-mini-windows) + (eq minibuffer-window (active-minibuffer-window))))) (which-side (and (eq line 'vertical) (or (cdr (assq 'vertical-scroll-bars (frame-parameters frame))) @@ -425,7 +428,7 @@ must be one of the symbols header, mode, or vertical." ((eq line 'mode) ;; Check whether mode-line can be dragged at all. (when (and (window-at-side-p window 'bottom) - (not enlarge-minibuffer)) + (not resize-minibuffer)) (setq done t))) ((eq line 'vertical) ;; Get the window to adjust for the vertical case. @@ -499,13 +502,9 @@ must be one of the symbols header, mode, or vertical." ;; Remember that we dragged. (setq dragged t)) - (cond - (enlarge-minibuffer - (adjust-window-trailing-edge window growth)) - ((eq line 'mode) - (adjust-window-trailing-edge window growth)) - (t - (adjust-window-trailing-edge window (- growth))))))) + (if (eq line 'mode) + (adjust-window-trailing-edge window growth) + (adjust-window-trailing-edge window (- growth)))))) ;; Presumably, if this was just a click, the last event should be ;; `mouse-1', whereas if this did move the mouse, it should be a diff --git a/lisp/window.el b/lisp/window.el index 28abec42680..9afc69d543d 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -1486,8 +1486,10 @@ instead." (cond ((eq window (frame-root-window frame)) (error "Cannot resize the root window of a frame")) - ((window-minibuffer-p window) - (window--resize-mini-window window delta)) + ((window-minibuffer-p window) + (if horizontal + (error "Cannot resize minibuffer window horizontally") + (window--resize-mini-window window delta))) ((window--resizable-p window delta horizontal ignore) (window--resize-reset frame horizontal) (window--resize-this-window window delta horizontal ignore t) @@ -2002,17 +2004,25 @@ right. If DELTA is less than zero, move the edge upwards or to the left. If the edge can't be moved by DELTA lines or columns, move it as far as possible in the desired direction." (setq window (window-normalize-window window)) - (let ((frame (window-frame window)) - (right window) - left this-delta min-delta max-delta) + (let* ((frame (window-frame window)) + (minibuffer-window (minibuffer-window frame)) + (right window) + left this-delta min-delta max-delta) ;; Find the edge we want to move. (while (and (or (not (window-combined-p right horizontal)) (not (window-right right))) (setq right (window-parent right)))) (cond - ((and (not right) (not horizontal) (not resize-mini-windows) - (eq (window-frame (minibuffer-window frame)) frame)) - (window--resize-mini-window (minibuffer-window frame) (- delta))) + ((and (not right) (not horizontal) + ;; Resize the minibuffer window if it's on the same frame as + ;; and immediately below WINDOW and it's either active or + ;; `resize-mini-windows' is nil. + (eq (window-frame minibuffer-window) frame) + (= (nth 1 (window-edges minibuffer-window)) + (nth 3 (window-edges window))) + (or (not resize-mini-windows) + (eq minibuffer-window (active-minibuffer-window)))) + (window--resize-mini-window minibuffer-window (- delta))) ((or (not (setq left right)) (not (setq right (window-right right)))) (if horizontal (error "No window on the right of this one") @@ -2113,6 +2123,10 @@ Return nil." ((zerop delta)) ((window-size-fixed-p nil horizontal) (error "Selected window has fixed size")) + ((window-minibuffer-p) + (if horizontal + (error "Cannot resize minibuffer window horizontally") + (window--resize-mini-window (selected-window) delta))) ((window--resizable-p nil delta horizontal) (window-resize nil delta horizontal)) (t @@ -2135,6 +2149,10 @@ Return nil." ((zerop delta)) ((window-size-fixed-p nil horizontal) (error "Selected window has fixed size")) + ((window-minibuffer-p) + (if horizontal + (error "Cannot resize minibuffer window horizontally") + (window--resize-mini-window (selected-window) (- delta)))) ((window--resizable-p nil (- delta) horizontal) (window-resize nil (- delta) horizontal)) (t From 71bd2d79ddf869a72a100cf7a890a9d073ee8139 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Fri, 20 Apr 2012 17:41:27 +0800 Subject: [PATCH 092/564] * lisp/startup.el: Fix typo. --- lisp/startup.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/startup.el b/lisp/startup.el index 2f72e804892..5c905954c86 100644 --- a/lisp/startup.el +++ b/lisp/startup.el @@ -41,7 +41,7 @@ (defcustom initial-buffer-choice nil "Buffer to show after starting Emacs. If the value is nil and `inhibit-startup-screen' is nil, show the -startup screen. If the value is string, visit the specified file +startup screen. If the value is a string, visit the specified file or directory using `find-file'. If t, open the `*scratch*' buffer." :type '(choice From feeb6f534509ee6872478331f982d8d906649991 Mon Sep 17 00:00:00 2001 From: Martin Rudalics Date: Fri, 20 Apr 2012 11:59:10 +0200 Subject: [PATCH 093/564] Improve fix for resizing minibuffer windows. --- lisp/window.el | 90 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 58 insertions(+), 32 deletions(-) diff --git a/lisp/window.el b/lisp/window.el index 9afc69d543d..7abe3fbfe7f 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -1482,6 +1482,7 @@ edge of WINDOW consider using `adjust-window-trailing-edge' instead." (setq window (window-normalize-window window)) (let* ((frame (window-frame window)) + (minibuffer-window (minibuffer-window frame)) sibling) (cond ((eq window (frame-root-window frame)) @@ -1490,6 +1491,15 @@ instead." (if horizontal (error "Cannot resize minibuffer window horizontally") (window--resize-mini-window window delta))) + ((and (not horizontal) + (window-full-height-p window) + (eq (window-frame minibuffer-window) frame) + (or (not resize-mini-windows) + (eq minibuffer-window (active-minibuffer-window)))) + ;; If WINDOW is full height and either `resize-mini-windows' is + ;; nil or the minibuffer window is active, resize the minibuffer + ;; window. + (window--resize-mini-window minibuffer-window (- delta))) ((window--resizable-p window delta horizontal ignore) (window--resize-reset frame horizontal) (window--resize-this-window window delta horizontal ignore t) @@ -2119,22 +2129,30 @@ make selected window wider by DELTA columns. If DELTA is negative, shrink selected window by -DELTA lines or columns. Return nil." (interactive "p") - (cond - ((zerop delta)) - ((window-size-fixed-p nil horizontal) - (error "Selected window has fixed size")) - ((window-minibuffer-p) - (if horizontal - (error "Cannot resize minibuffer window horizontally") - (window--resize-mini-window (selected-window) delta))) - ((window--resizable-p nil delta horizontal) - (window-resize nil delta horizontal)) - (t - (window-resize - nil (if (> delta 0) - (window-max-delta nil horizontal) - (- (window-min-delta nil horizontal))) - horizontal)))) + (let ((minibuffer-window (minibuffer-window))) + (cond + ((zerop delta)) + ((window-size-fixed-p nil horizontal) + (error "Selected window has fixed size")) + ((window-minibuffer-p) + (if horizontal + (error "Cannot resize minibuffer window horizontally") + (window--resize-mini-window (selected-window) delta))) + ((and (not horizontal) + (window-full-height-p) + (eq (window-frame minibuffer-window) (selected-frame)) + (not resize-mini-windows)) + ;; If the selected window is full height and `resize-mini-windows' + ;; is nil, resize the minibuffer window. + (window--resize-mini-window minibuffer-window (- delta))) + ((window--resizable-p nil delta horizontal) + (window-resize nil delta horizontal)) + (t + (window-resize + nil (if (> delta 0) + (window-max-delta nil horizontal) + (- (window-min-delta nil horizontal))) + horizontal))))) (defun shrink-window (delta &optional horizontal) "Make the selected window DELTA lines smaller. @@ -2145,22 +2163,30 @@ negative, enlarge selected window by -DELTA lines or columns. Also see the `window-min-height' variable. Return nil." (interactive "p") - (cond - ((zerop delta)) - ((window-size-fixed-p nil horizontal) - (error "Selected window has fixed size")) - ((window-minibuffer-p) - (if horizontal - (error "Cannot resize minibuffer window horizontally") - (window--resize-mini-window (selected-window) (- delta)))) - ((window--resizable-p nil (- delta) horizontal) - (window-resize nil (- delta) horizontal)) - (t - (window-resize - nil (if (> delta 0) - (- (window-min-delta nil horizontal)) - (window-max-delta nil horizontal)) - horizontal)))) + (let ((minibuffer-window (minibuffer-window))) + (cond + ((zerop delta)) + ((window-size-fixed-p nil horizontal) + (error "Selected window has fixed size")) + ((window-minibuffer-p) + (if horizontal + (error "Cannot resize minibuffer window horizontally") + (window--resize-mini-window (selected-window) (- delta)))) + ((and (not horizontal) + (window-full-height-p) + (eq (window-frame minibuffer-window) (selected-frame)) + (not resize-mini-windows)) + ;; If the selected window is full height and `resize-mini-windows' + ;; is nil, resize the minibuffer window. + (window--resize-mini-window minibuffer-window delta)) + ((window--resizable-p nil (- delta) horizontal) + (window-resize nil (- delta) horizontal)) + (t + (window-resize + nil (if (> delta 0) + (- (window-min-delta nil horizontal)) + (window-max-delta nil horizontal)) + horizontal))))) (defun maximize-window (&optional window) "Maximize WINDOW. From de6ff46dce80a715d46c34ff46f01a28afb63db9 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Fri, 20 Apr 2012 18:04:19 +0800 Subject: [PATCH 094/564] * lisp/server.el (server-execute): Respect initial-buffer-choice if it is a string and there are no files to open. (server-create-window-system-frame, server-create-tty-frame): Don't switch buffers here. Fixes: debbugs:2825 --- etc/NEWS | 4 ++++ lisp/ChangeLog | 7 +++++++ lisp/server.el | 20 +++++++++----------- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 16b9f75c503..b2c487ba15b 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -53,6 +53,10 @@ automatically when setting `imagemagick-types-inhibit'. *** Setting `imagemagick-types-inhibit' to t now disables the use of ImageMagick to view images, set +** String values for `initial-buffer-choice' also apply to emacsclient +frames, if emacsclient is only told to open a new frame without +specifying any file to visit or expression to evaluate. + * Editing Changes in Emacs 24.2 diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c9cece95445..947ae6f17f6 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2012-04-20 Chong Yidong + + * server.el (server-execute): Respect initial-buffer-choice if it + is a string and there are no files to open (Bug#2825). + (server-create-window-system-frame, server-create-tty-frame): + Don't switch buffers here. + 2012-04-20 Dan Nicolaescu * battery.el (battery-echo-area-format): Display remaining time diff --git a/lisp/server.el b/lisp/server.el index 123fea3743a..f9c8ea5c577 100644 --- a/lisp/server.el +++ b/lisp/server.el @@ -821,10 +821,6 @@ This handles splitting the command if it would be bigger than (select-frame frame) (process-put proc 'frame frame) (process-put proc 'terminal (frame-terminal frame)) - - ;; Display *scratch* by default. - (switch-to-buffer (get-buffer-create "*scratch*") 'norecord) - frame)) (defun server-create-window-system-frame (display nowait proc parent-id @@ -857,9 +853,6 @@ This handles splitting the command if it would be bigger than (select-frame frame) (process-put proc 'frame frame) (process-put proc 'terminal (frame-terminal frame)) - - ;; Display *scratch* by default. - (switch-to-buffer (get-buffer-create "*scratch*") 'norecord) frame))) (defun server-goto-toplevel (proc) @@ -1230,12 +1223,17 @@ The following commands are accepted by the client: ;; including code that needs to wait. (with-local-quit (condition-case err - (let* ((buffers - (when files - (server-visit-files files proc nowait)))) - + (let ((buffers (server-visit-files files proc nowait))) (mapc 'funcall (nreverse commands)) + ;; If we were told only to open a new client, obey + ;; `initial-buffer-choice' if it specifies a file. + (unless (or files commands) + (if (stringp initial-buffer-choice) + (find-file initial-buffer-choice) + (switch-to-buffer (get-buffer-create "*scratch*") + 'norecord))) + ;; Delete the client if necessary. (cond (nowait From 9ee9f4709c53bbf1240a8f4169674172dd458030 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Fri, 20 Apr 2012 13:09:40 +0300 Subject: [PATCH 095/564] Fix bug #11279 with sending command blocks to GDB. lisp/progmodes/gdb-mi.el (gdb-control-level): New variable. (gdb): Make it buffer-local and init to zero. (gdb-control-commands-regexp): New variable. (gdb-send): Don't wrap in "-interpreter-exec console" if gdb-control-level is positive. Increment gdb-control-level whenever the command matches gdb-control-commands-regexp, and decrement it each time the command is "end". (Bug#11279) --- lisp/ChangeLog | 10 ++++++++++ lisp/progmodes/gdb-mi.el | 30 ++++++++++++++++++++++++++---- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e139a7b2bba..c5c4d2573b1 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,13 @@ +2012-04-20 Eli Zaretskii + + * progmodes/gdb-mi.el (gdb-control-level): New variable. + (gdb): Make it buffer-local and init to zero. + (gdb-control-commands-regexp): New variable. + (gdb-send): Don't wrap in "-interpreter-exec console" if + gdb-control-level is positive. Increment gdb-control-level + whenever the command matches gdb-control-commands-regexp, and + decrement it each time the command is "end". (Bug#11279) + 2012-04-20 Martin Rudalics * window.el (adjust-window-trailing-edge, enlarge-window) diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el index f2d8f1f75b7..b19c828d171 100644 --- a/lisp/progmodes/gdb-mi.el +++ b/lisp/progmodes/gdb-mi.el @@ -603,6 +603,8 @@ NOARG must be t when this macro is used outside `gud-def'" (set (make-local-variable 'gud-marker-filter) #'gud-gdb-marker-filter)) (funcall filter proc string)))) +(defvar gdb-control-level 0) + ;;;###autoload (defun gdb (command-line) "Run gdb on program FILE in buffer *gud-FILE*. @@ -677,6 +679,7 @@ detailed description of this mode. (set-process-filter proc #'gdb--check-interpreter)) (set (make-local-variable 'gud-minor-mode) 'gdbmi) + (set (make-local-variable 'gdb-control-level) 0) (setq comint-input-sender 'gdb-send) (when (ring-empty-p comint-input-ring) ; cf shell-mode (let ((hfile (expand-file-name (or (getenv "GDBHISTFILE") @@ -1700,6 +1703,16 @@ static char *magick[] = { :group 'gdb) +(defvar gdb-control-commands-regexp + (concat + "^\\(" + "commands\\|if\\|while\\|define\\|document\\|python\\|" + "while-stepping\\|stepping\\|ws\\|actions" + "\\)\\([[:blank:]]+.*\\)?$") + "Regexp matching GDB commands that enter a recursive reading loop. +As long as GDB is in the recursive reading loop, it does not expect +commands to be prefixed by \"-interpreter-exec console\".") + (defun gdb-send (proc string) "A comint send filter for gdb." (with-current-buffer gud-comint-buffer @@ -1709,11 +1722,15 @@ static char *magick[] = { (if (not (string= "" string)) (setq gdb-last-command string) (if gdb-last-command (setq string gdb-last-command))) - (if (string-match "^-" string) - ;; MI command + (if (or (string-match "^-" string) + (> gdb-control-level 0)) + ;; Either MI command or we are feeding GDB's recursive reading loop. (progn (setq gdb-first-done-or-error t) - (process-send-string proc (concat string "\n"))) + (process-send-string proc (concat string "\n")) + (if (and (string-match "^end$" string) + (> gdb-control-level 0)) + (setq gdb-control-level (1- gdb-control-level)))) ;; CLI command (if (string-match "\\\\$" string) (setq gdb-continuation (concat gdb-continuation string "\n")) @@ -1724,7 +1741,12 @@ static char *magick[] = { (if gdb-enable-debug (push (cons 'mi-send to-send) gdb-debug-log)) (process-send-string proc to-send)) - (setq gdb-continuation nil)))) + (if (and (string-match "^end$" string) + (> gdb-control-level 0)) + (setq gdb-control-level (1- gdb-control-level))) + (setq gdb-continuation nil))) + (if (string-match gdb-control-commands-regexp string) + (setq gdb-control-level (1+ gdb-control-level)))) (defun gdb-mi-quote (string) "Return STRING quoted properly as an MI argument. From 2d0e8e614a6744a6a33c6b519f20359802e75c2b Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Fri, 20 Apr 2012 18:37:57 +0800 Subject: [PATCH 096/564] Fix emacsclient/server behavior under --without-x. * lib-src/emacsclient.c (main): Send -tty to Emacs under more circumstanced (Bug#8314). * lisp/server.el (server-process-filter): Only try to open a window system frame if compiled with graphical support (Bug#8314). Fixes: debbugs:11102 --- lib-src/ChangeLog | 1 + lib-src/emacsclient.c | 8 ++++---- lisp/ChangeLog | 2 ++ lisp/server.el | 8 +++++--- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index c76303d8fa2..fc6d905cfb2 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog @@ -2,6 +2,7 @@ * emacsclient.c (decode_options): Move -t -n corner case handling into server.el (Bug#11102). + (main): Send -tty to Emacs under more circumstanced (Bug#8314). 2012-04-18 Paul Eggert diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c index 48b4384d487..ea55398306b 100644 --- a/lib-src/emacsclient.c +++ b/lib-src/emacsclient.c @@ -1658,10 +1658,10 @@ main (int argc, char **argv) send_to_emacs (emacs_socket, " "); } - /* If using the current frame, send tty information to Emacs anyway. - In daemon mode, Emacs may need to occupy this tty if no other - frame is available. */ - if (tty || (current_frame && !eval)) + /* Unless we are certain we don't want to occupy the tty, send our + tty information to Emacs. For example, in daemon mode Emacs may + need to occupy this tty if no other frame is available. */ + if (!current_frame || !eval) { const char *tty_type, *tty_name; diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 947ae6f17f6..58f646251d0 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -4,6 +4,8 @@ is a string and there are no files to open (Bug#2825). (server-create-window-system-frame, server-create-tty-frame): Don't switch buffers here. + (server-process-filter): Only try to open a window system frame if + compiled with graphical support (Bug#8314). 2012-04-20 Dan Nicolaescu diff --git a/lisp/server.el b/lisp/server.el index f9c8ea5c577..1e2f458ac9c 100644 --- a/lisp/server.el +++ b/lisp/server.el @@ -1076,8 +1076,9 @@ The following commands are accepted by the client: ;; -window-system: Open a new X frame. (`"-window-system" - (setq dontkill t) - (setq tty-name 'window-system)) + (if (fboundp 'x-create-frame) + (setq dontkill t + tty-name 'window-system))) ;; -resume: Resume a suspended tty frame. (`"-resume" @@ -1105,7 +1106,8 @@ The following commands are accepted by the client: (setq dontkill t) (pop args-left)) - ;; -tty DEVICE-NAME TYPE: Open a new tty frame at the client. + ;; -tty DEVICE-NAME TYPE: Open a new tty frame. + ;; (But if we see -window-system later, use that.) (`"-tty" (setq tty-name (pop args-left) tty-type (pop args-left) From 39773899f380fd6bd5628f537f56c858cbe25656 Mon Sep 17 00:00:00 2001 From: Leo Liu Date: Fri, 20 Apr 2012 19:36:21 +0800 Subject: [PATCH 097/564] * lisp/font-lock.el (lisp-font-lock-keywords-2): Add pcase, pcase-let and pcase-let*. --- lisp/ChangeLog | 5 +++++ lisp/font-lock.el | 8 ++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 58f646251d0..5b9e85ef29c 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-04-20 Leo Liu + + * font-lock.el (lisp-font-lock-keywords-2): Add pcase, pcase-let + and pcase-let*. + 2012-04-20 Chong Yidong * server.el (server-execute): Respect initial-buffer-choice if it diff --git a/lisp/font-lock.el b/lisp/font-lock.el index 910585f21f1..2f76687983b 100644 --- a/lisp/font-lock.el +++ b/lisp/font-lock.el @@ -2285,10 +2285,10 @@ in which C preprocessor directives are used. e.g. `asm-mode' and (,(concat "(" (regexp-opt '("cond" "if" "while" "while-no-input" "let" "let*" "letrec" - "prog" "progn" "progv" "prog1" "prog2" "prog*" - "inline" "lambda" "save-restriction" "save-excursion" - "save-selected-window" "save-window-excursion" - "save-match-data" "save-current-buffer" + "pcase" "pcase-let" "pcase-let*" "prog" "progn" "progv" + "prog1" "prog2" "prog*" "inline" "lambda" + "save-restriction" "save-excursion" "save-selected-window" + "save-window-excursion" "save-match-data" "save-current-buffer" "combine-after-change-calls" "unwind-protect" "condition-case" "condition-case-unless-debug" "track-mouse" "eval-after-load" "eval-and-compile" From 4ae29f89bec2dda2c891bba212d1918b1375421b Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Fri, 20 Apr 2012 09:02:20 -0400 Subject: [PATCH 098/564] * src/print.c (print_preprocess): Only check print_depth if print-circle is nil. (print_object): Check for cycles even when print-circle is nil and print-gensym is t, but only check print_depth if print-circle is nil. --- src/ChangeLog | 16 ++++++--- src/print.c | 90 +++++++++++++++++++++++++-------------------------- 2 files changed, 56 insertions(+), 50 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index fa6c47bf955..a6fcc80da8a 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2012-04-20 Stefan Monnier + + * print.c (print_preprocess): Only check print_depth if print-circle + is nil. + (print_object): Check for cycles even when print-circle is nil and + print-gensym is t, but only check print_depth if print-circle is nil. + 2012-04-20 Chong Yidong * process.c (wait_reading_process_output): If EIO occurs on a pty, @@ -16,13 +23,14 @@ (set_cursor_from_row): If called for a mode-line or header-line row, return zero immediately. (try_cursor_movement): If inside continuation line, don't back up - farther than the first row after the header line, if any. Don't - consider the header-line row as "partially visible", even if + farther than the first row after the header line, if any. + Don't consider the header-line row as "partially visible", even if MATRIX_ROW_PARTIALLY_VISIBLE_P returns non-zero. (Bug#11261) 2012-04-20 Atsuo Ohki (tiny change) - * lread.c (lisp_file_lexically_bound_p): Fix hang at ";-*-\n" (bug#11238). + * lread.c (lisp_file_lexically_bound_p): Fix hang at ";-*-\n" + (bug#11238). 2012-04-20 Teodor Zlatanov 2012-04-18 Paul Eggert @@ -91,7 +99,7 @@ (union aligned_Lisp_Misc): Define. (MARKER_BLOCK_SIZE, struct marker_block): Use union aligned_Lisp_Misc instead of union Lisp_Misc. - (Fmake_symbol, allocate_misc, gc_sweep): Adjust + (Fmake_symbol, allocate_misc, gc_sweep): Adjust. 2012-04-14 Paul Eggert diff --git a/src/print.c b/src/print.c index dac7a79d599..b8ee44d0d10 100644 --- a/src/print.c +++ b/src/print.c @@ -93,14 +93,14 @@ static void print_interval (INTERVAL interval, Lisp_Object printcharfun); int print_output_debug_flag EXTERNALLY_VISIBLE = 1; -/* Low level output routines for characters and strings */ +/* Low level output routines for characters and strings. */ /* Lisp functions to do output using a stream must have the stream in a variable called printcharfun and must start with PRINTPREPARE, end with PRINTFINISH, and use PRINTDECLARE to declare common variables. Use PRINTCHAR to output one character, - or call strout to output a block of characters. */ + or call strout to output a block of characters. */ #define PRINTDECLARE \ struct buffer *old = current_buffer; \ @@ -1130,15 +1130,15 @@ print_preprocess (Lisp_Object obj) int loop_count = 0; Lisp_Object halftail; - /* Give up if we go so deep that print_object will get an error. */ - /* See similar code in print_object. */ - if (print_depth >= PRINT_CIRCLE) - error ("Apparently circular structure being printed"); - /* Avoid infinite recursion for circular nested structure in the case where Vprint_circle is nil. */ if (NILP (Vprint_circle)) { + /* Give up if we go so deep that print_object will get an error. */ + /* See similar code in print_object. */ + if (print_depth >= PRINT_CIRCLE) + error ("Apparently circular structure being printed"); + for (i = 0; i < print_depth; i++) if (EQ (obj, being_printed[i])) return; @@ -1240,7 +1240,7 @@ static void print_check_string_charset_prop (INTERVAL interval, Lisp_Object stri #define PRINT_STRING_NON_CHARSET_FOUND 1 #define PRINT_STRING_UNSAFE_CHARSET_FOUND 2 -/* Bitwise or of the above macros. */ +/* Bitwise or of the above macros. */ static int print_check_string_result; static void @@ -1323,48 +1323,46 @@ print_object (Lisp_Object obj, register Lisp_Object printcharfun, int escapeflag QUIT; - /* See similar code in print_preprocess. */ - if (print_depth >= PRINT_CIRCLE) - error ("Apparently circular structure being printed"); - /* Detect circularities and truncate them. */ - if (PRINT_CIRCLE_CANDIDATE_P (obj)) + if (NILP (Vprint_circle)) { - if (NILP (Vprint_circle) && NILP (Vprint_gensym)) + /* Simple but incomplete way. */ + int i; + + /* See similar code in print_preprocess. */ + if (print_depth >= PRINT_CIRCLE) + error ("Apparently circular structure being printed"); + + for (i = 0; i < print_depth; i++) + if (EQ (obj, being_printed[i])) + { + sprintf (buf, "#%d", i); + strout (buf, -1, -1, printcharfun); + return; + } + being_printed[print_depth] = obj; + } + else if (PRINT_CIRCLE_CANDIDATE_P (obj)) + { + /* With the print-circle feature. */ + Lisp_Object num = Fgethash (obj, Vprint_number_table, Qnil); + if (INTEGERP (num)) { - /* Simple but incomplete way. */ - int i; - for (i = 0; i < print_depth; i++) - if (EQ (obj, being_printed[i])) - { - sprintf (buf, "#%d", i); - strout (buf, -1, -1, printcharfun); - return; - } - being_printed[print_depth] = obj; - } - else - { - /* With the print-circle feature. */ - Lisp_Object num = Fgethash (obj, Vprint_number_table, Qnil); - if (INTEGERP (num)) + EMACS_INT n = XINT (num); + if (n < 0) + { /* Add a prefix #n= if OBJ has not yet been printed; + that is, its status field is nil. */ + sprintf (buf, "#%"pI"d=", -n); + strout (buf, -1, -1, printcharfun); + /* OBJ is going to be printed. Remember that fact. */ + Fputhash (obj, make_number (- n), Vprint_number_table); + } + else { - EMACS_INT n = XINT (num); - if (n < 0) - { /* Add a prefix #n= if OBJ has not yet been printed; - that is, its status field is nil. */ - sprintf (buf, "#%"pI"d=", -n); - strout (buf, -1, -1, printcharfun); - /* OBJ is going to be printed. Remember that fact. */ - Fputhash (obj, make_number (- n), Vprint_number_table); - } - else - { - /* Just print #n# if OBJ has already been printed. */ - sprintf (buf, "#%"pI"d#", n); - strout (buf, -1, -1, printcharfun); - return; - } + /* Just print #n# if OBJ has already been printed. */ + sprintf (buf, "#%"pI"d#", n); + strout (buf, -1, -1, printcharfun); + return; } } } From 73055685ff9e9d3557ab378e276d42d82952ac7c Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Fri, 20 Apr 2012 17:08:55 +0300 Subject: [PATCH 099/564] Fix bug #11288 with overrunning array limits. src/dispnew.c (swap_glyph_pointers, copy_row_except_pointers): Don't overrun array limits of glyph row's used[] array. --- src/ChangeLog | 5 +++++ src/dispnew.c | 12 ++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 18b6ce1ad64..c232420d0b1 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2012-04-20 Eli Zaretskii + + * dispnew.c (swap_glyph_pointers, copy_row_except_pointers): Don't + overrun array limits of glyph row's used[] array. (Bug#11288) + 2012-04-20 Chong Yidong * process.c (wait_reading_process_output): If EIO occurs on a pty, diff --git a/src/dispnew.c b/src/dispnew.c index 02d6de53bbf..b313852efe2 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -1085,12 +1085,16 @@ swap_glyph_pointers (struct glyph_row *a, struct glyph_row *b) for (i = 0; i < LAST_AREA + 1; ++i) { struct glyph *temp = a->glyphs[i]; - short used_tem = a->used[i]; a->glyphs[i] = b->glyphs[i]; b->glyphs[i] = temp; - a->used[i] = b->used[i]; - b->used[i] = used_tem; + if (i < LAST_AREA) + { + short used_tem = a->used[i]; + + a->used[i] = b->used[i]; + b->used[i] = used_tem; + } } a->hash = b->hash; b->hash = hash_tem; @@ -1105,7 +1109,7 @@ static inline void copy_row_except_pointers (struct glyph_row *to, struct glyph_row *from) { struct glyph *pointers[1 + LAST_AREA]; - short used[1 + LAST_AREA]; + short used[LAST_AREA]; unsigned hashval; /* Save glyph pointers of TO. */ From 61bb069e8c230357017be65d59ccea36c3cd91b1 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 20 Apr 2012 09:27:52 -0700 Subject: [PATCH 100/564] Fix up merged ChangeLog entries --- ChangeLog | 4 ---- doc/lispref/ChangeLog | 12 ++++-------- doc/misc/ChangeLog | 15 --------------- 3 files changed, 4 insertions(+), 27 deletions(-) diff --git a/ChangeLog b/ChangeLog index d2da3d8527b..3b48ce42500 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,10 +2,6 @@ * configure.in: Don't use the -R option (Bug#11251). -2012-04-20 Teodor Zlatanov - - * info/dir, Makefile.in (INFO_FILES): Add emacs-gnutls. - 2012-04-18 Paul Eggert configure: new option --enable-gcc-warnings (Bug#11207) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 284a1230a83..cc5660653f6 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -16,8 +16,6 @@ * elisp.texi, vol1.texi, vol2.texi, minibuf.texi (Completion): Update "High-Level Completion" description. -2012-04-19 Glenn Morris - * minibuf.texi (Minibuffers): * elisp.texi, vol1.texi, vol2.texi: Fix minibuffer subsection order. @@ -36,17 +34,15 @@ (Minibuffer Misc): Mention minibuffer-message-timeout, and minibuffer-inactive-mode. -2012-04-18 Glenn Morris - * processes.texi (Serial Ports, Byte Packing, Bindat Spec) (Bindat Functions): Copyedits. -2012-04-18 Christopher Schmidt +2012-04-20 Christopher Schmidt * files.texi (Saving Buffers): Document `visit and `visit-save' values of require-final-newline. -2012-04-18 Glenn Morris +2012-04-20 Glenn Morris * processes.texi (Output from Processes, Filter Functions): Mention waiting-for-user-input-p. @@ -56,14 +52,14 @@ (Network): Add encrypted network overview paragraph. Cross-reference the Emacs-GnuTLS manual. Use @acronym. -2012-04-17 Chong Yidong +2012-04-20 Chong Yidong * help.texi (Keys in Documentation): Mention :advertised-binding. * keymaps.texi (Menu Bar): Move most of the :advertised-binding description to help.texi. -2012-04-16 Glenn Morris +2012-04-20 Glenn Morris * processes.texi (Process Information, Input to Processes) (Signals to Processes, Output from Processes, Process Buffers) diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index 20c453544bc..14f389044bb 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -3,21 +3,6 @@ * faq.texi (New in Emacs 24): New section. (Packages that do not come with Emacs): Mention M-x list-packages. -2012-04-20 Glenn Morris - - * Makefile.in: Replace non-portable use of $< in emacs-gnutls rules. - -2012-04-20 Eli Zaretskii - - * makefile.w32-in (INFO_TARGETS, DVI_TARGETS, clean): Add emacs-gnutls. - ($(infodir)/emacs-gnutls, emacs-gnutls.dvi): New targets. - -2012-04-20 Teodor Zlatanov - - * emacs-gnutls.texi: Add documentation for the GnuTLS integration. - * Makefile.in: Add emacs-gnutls.texi to build. - -2012-04-20 Alan Mackenzie 2012-04-14 Alan Mackenzie * cc-mode.texi (c-offsets-alist): Correct a typo. From 24c51a09d6150ca56383a091fc945210ff3fe673 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 20 Apr 2012 13:34:51 -0400 Subject: [PATCH 101/564] fileio.c fix for bug#11245 * src/fileio.c (Fcopy_file, Fset_file_selinux_context): Ignore ENOTSUP failures from setfilecon functions. --- src/ChangeLog | 5 +++++ src/fileio.c | 12 +++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index c232420d0b1..2d5520c9dbb 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2012-04-20 Glenn Morris + + * fileio.c (Fcopy_file, Fset_file_selinux_context): + Ignore ENOTSUP failures from setfilecon functions. (Bug#11245) + 2012-04-20 Eli Zaretskii * dispnew.c (swap_glyph_pointers, copy_row_except_pointers): Don't diff --git a/src/fileio.c b/src/fileio.c index 7efe919a9f0..0d1a87b65b7 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -1,6 +1,6 @@ /* File IO for GNU Emacs. -Copyright (C) 1985-1988, 1993-2012 Free Software Foundation, Inc. +Copyright (C) 1985-1988, 1993-2012 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -2044,9 +2044,10 @@ on the system, we copy the SELinux context of FILE to NEWNAME. */) #if HAVE_LIBSELINUX if (conlength > 0) { - /* Set the modified context back to the file. */ + /* Set the modified context back to the file. */ fail = fsetfilecon (ofd, con); - if (fail) + /* See http://debbugs.gnu.org/11245 for ENOTSUP. */ + if (fail && errno != ENOTSUP) report_file_error ("Doing fsetfilecon", Fcons (newname, Qnil)); freecon (con); @@ -2917,10 +2918,11 @@ compiled with SELinux support. */) error ("Doing context_range_set"); } - /* Set the modified context back to the file. */ + /* Set the modified context back to the file. */ fail = lsetfilecon (SSDATA (encoded_absname), context_str (parsed_con)); - if (fail) + /* See http://debbugs.gnu.org/11245 for ENOTSUP. */ + if (fail && errno != ENOTSUP) report_file_error ("Doing lsetfilecon", Fcons (absname, Qnil)); context_free (parsed_con); From 4b932ea214c5293ce71abf51e6b09c74eea532ce Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Fri, 20 Apr 2012 12:17:59 -0700 Subject: [PATCH 102/564] Fix logic for returning to and yanking from Rmail buffer. * mail/rmail.el (rmail-start-mail): Pass (rmail-mail-return...) for the return-action. Pass (rmail-yank-current-message...) for the yank-action. (rmail-yank-current-message): New function. (rmail-mail): Pass the Rmail buffer, not view buffer, for replybuffer. (rmail-reply): Likewise. (rmail-forward): Pass the Rmail buffer, not nil, for replybuffer. * mail/sendmail.el (mail-bury): Choose the first rmail-mode buffer, not the last. Reject temp buffers. Use the rmail-mode buffer, not newbuf. --- lisp/ChangeLog | 16 ++++++++++++++++ lisp/mail/rmail.el | 23 ++++++++++++++++------- lisp/mail/sendmail.el | 5 ++++- 3 files changed, 36 insertions(+), 8 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c5c4d2573b1..8df6cbf0e1a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,19 @@ +2012-04-20 Richard Stallman + + Fix logic for returning to and yanking from Rmail buffer. + + * mail/rmail.el (rmail-start-mail): + Pass (rmail-mail-return...) for the return-action. + Pass (rmail-yank-current-message...) for the yank-action. + (rmail-yank-current-message): New function. + (rmail-mail): Pass the Rmail buffer, not view buffer, for replybuffer. + (rmail-reply): Likewise. + (rmail-forward): Pass the Rmail buffer, not nil, for replybuffer. + + * mail/sendmail.el (mail-bury): Choose the first rmail-mode + buffer, not the last. Reject temp buffers. Use the rmail-mode + buffer, not newbuf. + 2012-04-20 Eli Zaretskii * progmodes/gdb-mi.el (gdb-control-level): New variable. diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el index 3a9ba8122ab..265347ca69a 100644 --- a/lisp/mail/rmail.el +++ b/lisp/mail/rmail.el @@ -3560,6 +3560,16 @@ does not pop any summary buffer." ;;;; *** Rmail Mailing Commands *** +(defun rmail-yank-current-message (buffer) + "Yank into the current buffer the current message of Rmail buffer BUFFER. +If BUFFER is swapped with its message viewer buffer, yank out of BUFFER. +If BUFFER is not swapped, yank out of its message viewer buffer." + (with-current-buffer buffer + (unless (rmail-buffers-swapped-p) + (setq buffer rmail-view-buffer))) + (insert-buffer buffer)) + + (defun rmail-start-mail (&optional noerase to subject in-reply-to cc replybuffer sendactions same-window other-headers) @@ -3571,7 +3581,8 @@ does not pop any summary buffer." (if replybuffer ;; The function used here must behave like insert-buffer wrt ;; point and mark (see doc of sc-cite-original). - (setq yank-action (list 'insert-buffer replybuffer))) + (setq yank-action + `(rmail-yank-current-message ,replybuffer))) (push (cons "cc" cc) other-headers) (push (cons "in-reply-to" in-reply-to) other-headers) (setq other-headers @@ -3587,7 +3598,7 @@ does not pop any summary buffer." (prog1 (compose-mail to subject other-headers noerase switch-function yank-action sendactions - `(rmail-mail-return ,replybuffer)) + (if replybuffer `(rmail-mail-return ,replybuffer))) (if (eq switch-function 'switch-to-buffer-other-frame) ;; This is not a standard frame parameter; nothing except ;; sendmail.el looks at it. @@ -3644,7 +3655,7 @@ to switch to." While composing the message, use \\[mail-yank-original] to yank the original message into it." (interactive) - (rmail-start-mail nil nil nil nil nil rmail-view-buffer)) + (rmail-start-mail nil nil nil nil nil rmail-buffer)) ;; FIXME should complain if there is nothing to continue. (defun rmail-continue () @@ -3731,9 +3742,7 @@ use \\[mail-yank-original] to yank the original message into it." (mail-strip-quoted-names (if (null cc) to (concat to ", " cc)))))) (if (string= cc-list "") nil cc-list))) - (if (rmail-buffers-swapped-p) - rmail-buffer - rmail-view-buffer) + rmail-buffer (list (list 'rmail-mark-message rmail-buffer (with-current-buffer rmail-buffer @@ -3835,7 +3844,7 @@ see the documentation of `rmail-resend'." (or (mail-fetch-field "Subject") "") "]"))) (if (rmail-start-mail - nil nil subject nil nil nil + nil nil subject nil nil rmail-buffer (list (list 'rmail-mark-message forward-buffer (with-current-buffer rmail-buffer diff --git a/lisp/mail/sendmail.el b/lisp/mail/sendmail.el index c4647d7893e..1ecae9faa59 100644 --- a/lisp/mail/sendmail.el +++ b/lisp/mail/sendmail.el @@ -863,7 +863,10 @@ Prefix arg means don't delete this window." ;; even if this message was not started by an Rmail command. (unless return-action (dolist (buffer (buffer-list)) - (if (eq (buffer-local-value 'major-mode buffer) 'rmail-mode) + (if (and (eq (buffer-local-value 'major-mode buffer) 'rmail-mode) + (null return-action) + ;; Don't match message-viewer buffer. + (not (string-match "\\` " (buffer-name buffer)))) (setq return-action `(rmail-mail-return ,buffer))))) (if (and (null arg) return-action) (apply (car return-action) (cdr return-action)) From ed571ccb1d14abc788a29c3b3bbf08aa4b951ab8 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Fri, 20 Apr 2012 15:56:59 -0400 Subject: [PATCH 103/564] * lisp/minibuffer.el (completion-file-name-table): Complete user names. --- lisp/ChangeLog | 4 ++++ lisp/minibuffer.el | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 5b9e85ef29c..132aee66a9f 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-04-20 Stefan Monnier + + * minibuffer.el (completion-file-name-table): Complete user names. + 2012-04-20 Leo Liu * font-lock.el (lisp-font-lock-keywords-2): Add pcase, pcase-let diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index c7e14ca481b..5a990f6ab35 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -1817,6 +1817,12 @@ same as `substitute-in-file-name'." (condition-case nil (cond ((eq action 'metadata) '(metadata (category . file))) + ((string-match-p "\\`~[^/\\]*\\'" string) + (completion-table-with-context "~" + (mapcar (lambda (u) (concat u "/")) + (system-users)) + (substring string 1) + pred action)) ((eq (car-safe action) 'boundaries) (let ((start (length (file-name-directory string))) (end (string-match-p "/" (cdr action)))) From 2f38dff7b3e82b8b054927cda25620b4eac3239c Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Fri, 20 Apr 2012 14:26:18 -0700 Subject: [PATCH 104/564] * keyboard.c (process_pending_signals): Define only if SYNC_INPUT. It is never used otherwise. --- src/ChangeLog | 5 +++++ src/keyboard.c | 2 ++ 2 files changed, 7 insertions(+) diff --git a/src/ChangeLog b/src/ChangeLog index a6fcc80da8a..a3101252fe9 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2012-04-20 Paul Eggert + + * keyboard.c (process_pending_signals): Define only if SYNC_INPUT. + It is never used otherwise. + 2012-04-20 Stefan Monnier * print.c (print_preprocess): Only check print_depth if print-circle diff --git a/src/keyboard.c b/src/keyboard.c index 9ff19d61d41..d55a726827e 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -7196,6 +7196,7 @@ handle_async_input (void) #endif } +#ifdef SYNC_INPUT void process_pending_signals (void) { @@ -7203,6 +7204,7 @@ process_pending_signals (void) handle_async_input (); do_pending_atimers (); } +#endif #ifdef SIGIO /* for entire page */ /* Note SIGIO has been undef'd if FIONREAD is missing. */ From 8cee47b8c1d8f1c3c3f07a80eca7884359cd920f Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 20 Apr 2012 17:36:34 -0400 Subject: [PATCH 105/564] Fix FOR-RELEASE typo --- admin/FOR-RELEASE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/admin/FOR-RELEASE b/admin/FOR-RELEASE index ad427397524..6bcd8703674 100644 --- a/admin/FOR-RELEASE +++ b/admin/FOR-RELEASE @@ -61,7 +61,7 @@ sk Miroslav VaÅ¡ko ** Consider bumping customize-changed-options-previous-release. -** cusver-check from admin.el cam help find new defcustoms missing +** cusver-check from admin.el can help find new defcustoms missing :version tags. * BUGS From de649682ac078409e08b7f5f68fbcaec7eb1bc25 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 20 Apr 2012 19:55:04 -0400 Subject: [PATCH 106/564] Comment for doc/emacs/mule.texi --- doc/emacs/mule.texi | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/emacs/mule.texi b/doc/emacs/mule.texi index df2d687114b..5f0e138deef 100644 --- a/doc/emacs/mule.texi +++ b/doc/emacs/mule.texi @@ -1337,6 +1337,7 @@ fontset}, the @dfn{startup fontset} and the @dfn{default fontset}. @c FIXME? The doc of *standard*-fontset-spec says: @c "You have the biggest chance to display international characters @c with correct glyphs by using the *standard* fontset." (my emphasis) +@c See http://lists.gnu.org/archive/html/emacs-devel/2012-04/msg00430.html The default fontset is most likely to have fonts for a wide variety of non-@acronym{ASCII} characters, and is the default fallback for the other two fontsets, and if you set a default font rather than fontset. From dae39d9c22bb027038b698aea2102a9ad10c4c35 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 20 Apr 2012 20:06:14 -0400 Subject: [PATCH 107/564] Small faq edits * doc/misc/faq.texi (Major packages and programs): Remove section. There is no point listing 6 packages (cf etc/MORE.STUFF). (Finding Emacs and related packages): Move "Spell-checkers" here. --- doc/misc/ChangeLog | 6 ++ doc/misc/faq.texi | 143 ++++++++------------------------------------- 2 files changed, 30 insertions(+), 119 deletions(-) diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index 0fb57dcad46..ea549e41b58 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -1,3 +1,9 @@ +2012-04-21 Glenn Morris + + * faq.texi (Major packages and programs): Remove section. + There is no point listing 6 packages (cf etc/MORE.STUFF). + (Finding Emacs and related packages): Move "Spell-checkers" here. + 2012-04-20 Glenn Morris * faq.texi (New in Emacs 24): New section. diff --git a/doc/misc/faq.texi b/doc/misc/faq.texi index 0f20c41c8eb..7b8ba05e96f 100644 --- a/doc/misc/faq.texi +++ b/doc/misc/faq.texi @@ -91,7 +91,6 @@ Emacs, the Emacs manual is often the best starting point. * Bugs and problems:: * Compiling and installing Emacs:: * Finding Emacs and related packages:: -* Major packages and programs:: * Key bindings:: * Alternate character sets:: * Mail and news:: @@ -3242,6 +3241,7 @@ problem (@pxref{Reporting bugs}). * Finding Emacs on the Internet:: * Finding a package with particular functionality:: * Packages that do not come with Emacs:: +* Spell-checkers:: * Current GNU distributions:: * Difference between Emacs and XEmacs:: * Emacs for minimalists:: @@ -3323,6 +3323,29 @@ Several packages are stored in Read the file @file{etc/MORE.STUFF} for more information about external packages. +@node Spell-checkers +@section Spell-checkers +@cindex Spell-checker +@cindex Checking spelling +@cindex Ispell +@cindex Aspell +@cindex Hunspell + +Various spell-checkers are compatible with Emacs, including: + +@table @b + +@item GNU Aspell +@uref{http://aspell.net/} + +@item Ispell +@uref{http://fmg-www.cs.ucla.edu/geoff/ispell.html} + +@item Hunspell +@uref{http://hunspell.sourceforge.net/} + +@end table + @node Current GNU distributions @section Where can I get other up-to-date GNU stuff? @cindex Current GNU distributions @@ -3442,124 +3465,6 @@ See the file @file{nextstep/INSTALL} in the distribution. Beginning with version 22.1, Emacs supports Mac OS X natively. See the file @file{nextstep/INSTALL} in the distribution. -@c ------------------------------------------------------------ -@node Major packages and programs -@chapter Major packages and programs -@cindex Major packages and programs - -@menu -* VM:: -* AUCTeX:: -* BBDB:: -* Spell-checkers:: -* Emacs/W3:: -* EDB:: -* JDEE:: -@end menu - -@node VM -@section VM (View Mail) --- another mail reader within Emacs, with MIME support -@cindex VM -@cindex Alternative mail software -@cindex View Mail -@cindex E-mail reader, VM - -@table @b - -@item Web site -@uref{http://launchpad.net/vm} -(was @uref{http://www.nongnu.org/viewmail/}) - -@item Informational newsgroup -@uref{news:gnu.emacs.vm.info}@* - -@item Bug reports newsgroup -@uref{news:gnu.emacs.vm.bug}@* -@end table - -VM was originally written by @uref{http://www.wonderworks.com/vm/,Kyle Jones}. -@uref{ftp://ftp.wonderworks.com/pub/vm/,Older versions} of VM remain -available. - - -@node AUCTeX -@section AUC@TeX{} --- enhanced @TeX{} modes with debugging facilities -@cindex Mode for @TeX{} -@cindex @TeX{} mode -@cindex AUC@TeX{} mode for editing @TeX{} -@cindex Writing and debugging @TeX{} - -AUC@TeX{} is a set of sophisticated major modes for @TeX{}, LaTeX, -ConTeXt, and Texinfo offering context-sensitive syntax highlighting, -indentation, formatting and folding, macro completion, @TeX{} shell -functionality, and debugging. Be also sure to check out -@ref{Introduction, RefTeX, Introduction, reftex, Ref@TeX{} User Manual}. -Current versions of AUC@TeX{} include the -@uref{http://www.gnu.org/software/auctex/preview-latex.html,preview-latex} -package for WYSIWYG previews of various LaTeX constructs in the Emacs -source buffer. - -@uref{http://www.gnu.org/software/auctex/, AUCTeX} - -@node BBDB -@section BBDB --- personal Info Rolodex integrated with mail/news readers -@cindex BBDB -@cindex Rolodex-like functionality -@cindex Integrated contact database -@cindex Contact database -@cindex Big Brother Database -@cindex Address book - -@uref{http://bbdb.sourceforge.net/, The Insidious Big Brother Database} - -@node Spell-checkers -@section Spell-checkers -@cindex Spell-checker -@cindex Checking spelling -@cindex Ispell -@cindex Aspell -@cindex Hunspell - -Various spell-checkers are compatible with Emacs, including: - -@table @b - -@item GNU Aspell -@uref{http://aspell.net/} - -@item Ispell -@uref{http://fmg-www.cs.ucla.edu/geoff/ispell.html} - -@item Hunspell -@uref{http://hunspell.sourceforge.net/} - -@end table - -@node Emacs/W3 -@section Emacs/W3 --- A World Wide Web browser inside of Emacs -@cindex WWW browser -@cindex Web browser -@cindex HTML browser in Emacs -@cindex @code{w3-mode} - -@uref{http://www.gnu.org/software/w3/, Emacs/W3} - -@node EDB -@section EDB --- Database program for Emacs; replaces forms editing modes -@cindex EDB -@cindex Database -@cindex Forms mode - -@uref{http://gnuvola.org/software/edb/, The Emacs Database} - -@node JDEE -@section JDEE --- Integrated development environment for Java -@cindex Java development environment -@cindex Integrated Java development environment -@cindex JDEE - -@uref{http://jdee.sourceforge.net/, A Java Development Environment for Emacs} - @c ------------------------------------------------------------ @node Key bindings @chapter Key bindings From 9c51bbaa925e7224d82f7f1d9a44513eb20b2ab1 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 20 Apr 2012 20:14:11 -0400 Subject: [PATCH 108/564] lispref minibuf.texi small edit * doc/lispref/minibuf.texi (Intro to Minibuffers): Tweak discussion of resizing minibuffer window. --- doc/lispref/ChangeLog | 5 +++++ doc/lispref/minibuf.texi | 17 +++++++++-------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index fe555c0458c..06269ebabc3 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,8 @@ +2012-04-21 Glenn Morris + + * minibuf.texi (Intro to Minibuffers): + Tweak discussion of resizing minibuffer window. + 2012-04-20 Chong Yidong * processes.texi (Asynchronous Processes): Mention nil argument to diff --git a/doc/lispref/minibuf.texi b/doc/lispref/minibuf.texi index dbbf1da7490..47ecc9e5893 100644 --- a/doc/lispref/minibuf.texi +++ b/doc/lispref/minibuf.texi @@ -58,16 +58,17 @@ including @code{beginning-of-line}, @code{forward-word}, @code{forward-sentence}, and @code{forward-paragraph}, stop at the boundary between the prompt and the actual text. +@c See http://debbugs.gnu.org/11276 The minibuffer's window is normally a single line; it grows -automatically if the contents require more space. You can explicitly -@c FIXME? Works in 23.4, not 24.0.95. (Bug#11276) -resize it temporarily with the window sizing commands; it reverts to -its normal size when the minibuffer is exited. You can resize it -@c FIXME? Doesn't work in any version of Emacs? +automatically if the contents require more space. Whilst it is +active, you can explicitly resize it temporarily with the window +sizing commands; it reverts to its normal size when the minibuffer is +exited. When the minibuffer is not active, you can resize it permanently by using the window sizing commands in the frame's other -window, when the minibuffer is not active. If the frame contains just -a minibuffer, you can change the minibuffer's size by changing the -frame's size. +window, or dragging the mode line with the mouse. (Due to details of +the current implementation, for this to work @code{resize-mini-windows} +must be @code{nil}.) If the frame contains just a minibuffer, you can +change the minibuffer's size by changing the frame's size. Use of the minibuffer reads input events, and that alters the values of variables such as @code{this-command} and @code{last-command} From ed99f8ff2e73e6c7395f9cb6e567f9141dd05fe4 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 20 Apr 2012 20:32:15 -0400 Subject: [PATCH 109/564] Comment fix --- lisp/emacs-lisp/check-declare.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lisp/emacs-lisp/check-declare.el b/lisp/emacs-lisp/check-declare.el index 3135b9b5827..d4213899ef6 100644 --- a/lisp/emacs-lisp/check-declare.el +++ b/lisp/emacs-lisp/check-declare.el @@ -1,6 +1,6 @@ ;;; check-declare.el --- Check declare-function statements -;; Copyright (C) 2007-2012 Free Software Foundation, Inc. +;; Copyright (C) 2007-2012 Free Software Foundation, Inc. ;; Author: Glenn Morris ;; Keywords: lisp, tools, maint @@ -28,7 +28,7 @@ ;; checks that all such statements in a file or directory are accurate. ;; The entry points are `check-declare-file' and `check-declare-directory'. -;; For more information, see Info node `elisp(Declaring Functions)'. +;; For more information, see Info node `(elisp)Declaring Functions'. ;;; TODO: From 0dc91072e300575aa323fc588f5a6b8e9239c0db Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 20 Apr 2012 20:46:58 -0400 Subject: [PATCH 110/564] Bump lispref version * doc/lispref/elisp.texi, doc/lispref/vol1.texi, doc/lispref/vol2.texi: Bump VERSION and DATE (in case we forgoet to do it later). I don't know what VERSION means, but it should be bigger than before. Note that README no longer mentions these. --- doc/lispref/ChangeLog | 2 ++ doc/lispref/elisp.texi | 7 +++---- doc/lispref/vol1.texi | 5 ++--- doc/lispref/vol2.texi | 5 ++--- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 06269ebabc3..8ffd87be6a2 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,5 +1,7 @@ 2012-04-21 Glenn Morris + * elisp.texi, vol1.texi, vol2.texi: Bump VERSION and DATE. + * minibuf.texi (Intro to Minibuffers): Tweak discussion of resizing minibuffer window. diff --git a/doc/lispref/elisp.texi b/doc/lispref/elisp.texi index 4319d5eddda..8064a6483f3 100644 --- a/doc/lispref/elisp.texi +++ b/doc/lispref/elisp.texi @@ -5,11 +5,10 @@ @c %**end of header @c Version of the manual and of Emacs. -@c Please remember to update the edition number in README as well. -@c And also the copies in vol1.texi and vol2.texi. -@set VERSION 3.0 +@c Please remember to update these in vol1.texi and vol2.texi as well. +@set VERSION 3.1 @include emacsver.texi -@set DATE July 2009 +@set DATE July 2012 @c in general, keep the following line commented out, unless doing a @c copy of this manual that will be published. The manual should go diff --git a/doc/lispref/vol1.texi b/doc/lispref/vol1.texi index 25ea8577467..b87599cf160 100644 --- a/doc/lispref/vol1.texi +++ b/doc/lispref/vol1.texi @@ -24,10 +24,9 @@ @end tex @c Version of the manual and of Emacs. -@c Please remember to update the edition number in README as well. -@set VERSION 3.0 +@set VERSION 3.1 @include emacsver.texi -@set DATE July 2009 +@set DATE May 2012 @dircategory Emacs @direntry diff --git a/doc/lispref/vol2.texi b/doc/lispref/vol2.texi index 2fd2a8d8224..148a4f040a7 100644 --- a/doc/lispref/vol2.texi +++ b/doc/lispref/vol2.texi @@ -24,10 +24,9 @@ @end tex @c Version of the manual and of Emacs. -@c Please remember to update the edition number in README as well. -@set VERSION 3.0 +@set VERSION 3.1 @include emacsver.texi -@set DATE July 2009 +@set DATE May 2012 @dircategory Emacs @direntry From 384ec638e66805159d4fae86921a914dacc22dad Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 20 Apr 2012 20:52:08 -0400 Subject: [PATCH 111/564] Standardize case of "GTK+" in a few manuals --- doc/lispref/frames.texi | 2 +- doc/misc/faq.texi | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi index 1bd4cf4854b..3a8accf251e 100644 --- a/doc/lispref/frames.texi +++ b/doc/lispref/frames.texi @@ -1070,7 +1070,7 @@ characters rather than pixels. These values include the internal borders, and windows' scroll bars and fringes (which belong to individual windows, not to the frame itself). The exact value of the heights depends on the window-system -and toolkit in use. With Gtk+, the height does not include any tool +and toolkit in use. With GTK+, the height does not include any tool bar or menu bar. With the Motif or Lucid toolkits, it includes the tool bar but not the menu bar. In a graphical version with no toolkit, it includes both the tool bar and menu bar. For a text diff --git a/doc/misc/faq.texi b/doc/misc/faq.texi index 7b8ba05e96f..34005bcb9a0 100644 --- a/doc/misc/faq.texi +++ b/doc/misc/faq.texi @@ -1049,7 +1049,7 @@ A new command @kbd{customize-themes} allows you to easily change the appearance of your Emacs. @item -Emacs can be compiled with the Gtk+ 3 toolkit. +Emacs can be compiled with the GTK+ 3 toolkit. @item Support for several new external libraries can be included at compile From 0b27932b2d99659ee808dbfee6adf1236a05efa0 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 20 Apr 2012 21:49:43 -0400 Subject: [PATCH 112/564] Small edits for doc/lispref/windows.texi * doc/lispref/windows.texi (Basic Windows, Windows and Frames, Window Sizes) (Resizing Windows, Deleting Windows, Selecting Windows) (Choosing Window Options, Horizontal Scrolling): Copyedits. (Splitting Windows, Deleting Windows): Fix ignore-window-parameters logic. (Selecting Windows, Choosing Window Options): Markup fixes. --- doc/lispref/ChangeLog | 7 +++++++ doc/lispref/windows.texi | 44 ++++++++++++++++++++-------------------- 2 files changed, 29 insertions(+), 22 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 8ffd87be6a2..ace1d2bb76f 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,5 +1,12 @@ 2012-04-21 Glenn Morris + * windows.texi (Basic Windows, Windows and Frames, Window Sizes) + (Resizing Windows, Deleting Windows, Selecting Windows) + (Choosing Window Options, Horizontal Scrolling): Copyedits. + (Splitting Windows, Deleting Windows): + Fix ignore-window-parameters logic. + (Selecting Windows, Choosing Window Options): Markup fixes. + * elisp.texi, vol1.texi, vol2.texi: Bump VERSION and DATE. * minibuf.texi (Intro to Minibuffers): diff --git a/doc/lispref/windows.texi b/doc/lispref/windows.texi index 8df32785036..da29d528f1b 100644 --- a/doc/lispref/windows.texi +++ b/doc/lispref/windows.texi @@ -50,7 +50,7 @@ is displayed in windows. @section Basic Concepts of Emacs Windows @cindex window -A @dfn{window} is a area of the screen which is used to display a +A @dfn{window} is a area of the screen that is used to display a buffer (@pxref{Buffers}). In Emacs Lisp, windows are represented by a special Lisp object type. @@ -298,8 +298,8 @@ child of its parent. The functions @code{window-next-sibling} and @code{window-prev-sibling} should not be confused with the functions -@code{next-window} and @code{previous-window} which respectively -return the next and previous window in the cyclic ordering of windows +@code{next-window} and @code{previous-window}, which return the next +and previous window, respectively, in the cyclic ordering of windows (@pxref{Cyclic Window Ordering}). You can use the following functions to find the first live window on @@ -377,7 +377,7 @@ line (@pxref{Mode Line Format}). Emacs provides several functions for finding the height and width of a window. Except where noted, Emacs reports window heights and widths -as integer numbers of lines and columns respectively. On a graphical +as integer numbers of lines and columns, respectively. On a graphical display, each ``line'' and ``column'' actually corresponds to the height and width of a ``default'' character specified by the frame's default font. Thus, if a window is displaying text with a different @@ -620,7 +620,7 @@ window. The optional argument @var{max-height}, if non-@code{nil}, specifies the maximum total height that this function can give @var{window}. -The optional argument @var{min-height}, if no-@code{nil}, specifies +The optional argument @var{min-height}, if non-@code{nil}, specifies the minimum total height that it can give, which overrides the variable @code{window-min-height}. @@ -724,7 +724,7 @@ properties of the window selected within @var{window}'s frame. The behavior of this function may be altered by the window parameters of @var{window}, so long as the variable -@code{ignore-window-parameters} is non-@code{nil}. If the value of +@code{ignore-window-parameters} is @code{nil}. If the value of the @code{split-window} window parameter is @code{t}, this function ignores all other window parameters. Otherwise, if the value of the @code{split-window} window parameter is a function, that function is @@ -1063,7 +1063,7 @@ combination. @xref{Splitting Windows}. The behavior of this function may be altered by the window parameters of @var{window}, so long as the variable -@code{ignore-window-parameters} is non-@code{nil}. If the value of +@code{ignore-window-parameters} is @code{nil}. If the value of the @code{delete-window} window parameter is @code{t}, this function ignores all other window parameters. Otherwise, if the value of the @code{delete-window} window parameter is a function, that function is @@ -1080,7 +1080,7 @@ defaults to the selected window. The return value is @code{nil}. The behavior of this function may be altered by the window parameters of @var{window}, so long as the variable -@code{ignore-window-parameters} is non-@code{nil}. If the value of +@code{ignore-window-parameters} is @code{nil}. If the value of the @code{delete-other-windows} window parameter is @code{t}, this function ignores all other window parameters. Otherwise, if the value of the @code{delete-other-windows} window parameter is a function, @@ -1120,8 +1120,8 @@ means operate on that frame. Note that this argument does not have the same meaning as in other functions which scan all live windows (@pxref{Cyclic Window -Ordering}). Specifically, the values @code{t} and @code{nil} have the -opposite of their meanings in those other functions. +Ordering}). Specifically, the meanings of @code{t} and @code{nil} here +are the opposite of what they are in those other functions. @end deffn @node Selecting Windows @@ -1172,11 +1172,11 @@ the buffer list. This macro selects @var{window}, executes @var{forms} in sequence, then restores the previously selected window and current buffer. The ordering of recently selected windows and the buffer list remain unchanged unless -you deliberately change them within @var{forms}, for example, by calling +you deliberately change them within @var{forms}; for example, by calling @code{select-window} with argument @var{norecord} @code{nil}. -The order of recently selected windows and the buffer list are not -changed by this macro. +This macro does not change the order of recently selected windows or +the buffer list. @end defmac @defun frame-selected-window &optional frame @@ -1186,7 +1186,7 @@ within that frame. @var{frame} should be a live frame; if omitted or @end defun @defun set-frame-selected-window frame window &optional norecord -This function makes @code{window} the window selected within the frame +This function makes @var{window} the window selected within the frame @var{frame}. @var{frame} should be a live frame; if omitted or @code{nil}, it defaults to the selected frame. @var{window} should be a live window; if omitted or @code{nil}, it defaults to the selected @@ -1806,14 +1806,14 @@ desired buffer) or @code{nil} (which means the splitting failed). @end defopt @defun split-window-sensibly window -This function tries to split @code{window}, and return the newly -created window. If @code{window} cannot be split, it returns +This function tries to split @var{window}, and return the newly +created window. If @var{window} cannot be split, it returns @code{nil}. This function obeys the usual rules that determine when a window may be split (@pxref{Splitting Windows}). It first tries to split by placing the new window below, subject to the restriction imposed by -@code{split-height-threshold} (see below) in addition to any other +@code{split-height-threshold} (see below), in addition to any other restrictions. If that fails, it tries to split by placing the new window to the right, subject to @code{split-width-threshold} (see below). If that fails, and the window is the only window on its @@ -1945,7 +1945,7 @@ to display @var{buffer}. If @var{args} is an alist, it specifies frame parameters for the new frame. If @var{args} is a list whose @sc{car} is a symbol, then -@code{(car @var{args})} is called as a function to actually create and +@code{(car @var{args})} is a function to actually create and set up the frame; it is called with @var{buffer} as first argument, and @code{(cdr @var{args})} as additional arguments. @@ -1963,7 +1963,7 @@ This variable holds frame parameters for @defopt same-window-buffer-names A list of buffer names for buffers that should be displayed in the -selected window. If the buffer's name is in this list, +selected window. If a buffer's name is in this list, @code{display-buffer} handles the buffer by switching to it in the selected window. @end defopt @@ -2818,8 +2818,8 @@ times the normal character width. How many characters actually disappear off to the left depends on their width, and could vary from line to line. - Because we read from side to side in the ``inner loop,'' and from top -to bottom in the ``outer loop,'' the effect of horizontal scrolling is + Because we read from side to side in the ``inner loop'', and from top +to bottom in the ``outer loop'', the effect of horizontal scrolling is not like that of textual or vertical scrolling. Textual scrolling involves selection of a portion of text to display, and vertical scrolling moves the window contents contiguously; but horizontal @@ -3139,7 +3139,7 @@ old one. If the frame which @var{configuration} was saved from is dead, all this function does is restore the three variables @code{window-min-height}, -@code{window-min-width} and @code{minibuffer-scroll-window}. In this +@code{window-min-width} and @code{minibuffer-scroll-window}. In this case, the function returns @code{nil}. Otherwise, it returns @code{t}. Here is a way of using this function to get the same effect From e78d873d900163034c22977ff79ffe702f3a22c1 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 20 Apr 2012 22:15:27 -0400 Subject: [PATCH 113/564] More small edits for doc/lispref/windows.texi * doc/lispref/windows.texi (Cyclic Window Ordering, Window History) (Dedicated Windows, Quitting Windows, Window Configurations): Copyedits. (Window Start and End): Remove pointless example. Remove cross-reference to deleted count-lines content. --- doc/lispref/ChangeLog | 6 +++- doc/lispref/windows.texi | 68 +++++++++++++++++----------------------- 2 files changed, 34 insertions(+), 40 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index ace1d2bb76f..fe63359fad2 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -2,10 +2,14 @@ * windows.texi (Basic Windows, Windows and Frames, Window Sizes) (Resizing Windows, Deleting Windows, Selecting Windows) - (Choosing Window Options, Horizontal Scrolling): Copyedits. + (Choosing Window Options, Horizontal Scrolling) + (Cyclic Window Ordering, Window History, Dedicated Windows) + (Quitting Windows, Window Configurations): Copyedits. (Splitting Windows, Deleting Windows): Fix ignore-window-parameters logic. (Selecting Windows, Choosing Window Options): Markup fixes. + (Window Start and End): Remove pointless example. + Remove cross-reference to deleted count-lines content. * elisp.texi, vol1.texi, vol2.texi: Bump VERSION and DATE. diff --git a/doc/lispref/windows.texi b/doc/lispref/windows.texi index da29d528f1b..2e4657328eb 100644 --- a/doc/lispref/windows.texi +++ b/doc/lispref/windows.texi @@ -1224,7 +1224,7 @@ the cyclic ordering of windows. @var{window} should be a live window; if omitted or @code{nil}, it defaults to the selected window. The optional argument @var{minibuf} specifies whether minibuffer windows -shall be included in the cyclic ordering. Normally, when @var{minibuf} +should be included in the cyclic ordering. Normally, when @var{minibuf} is @code{nil}, a minibuffer window is included only if it is currently ``active''; this matches the behavior of @kbd{C-x o}. (Note that a minibuffer window is active as long as its minibuffer is in use; see @@ -1998,8 +1998,8 @@ above. @section Window History @cindex window history -Each window remembers the buffers it has displayed earlier and the order -in which these buffers have been removed from it. This history is used, +Each window remembers the buffers it has previously displayed, and the order +in which these buffers were removed from it. This history is used, for example, by @code{replace-buffer-in-windows} (@pxref{Buffers and Windows}). This list is automatically maintained by Emacs, but you can use the following functions to explicitly inspect or alter it: @@ -2062,41 +2062,41 @@ This command displays the previous buffer in @var{window}. The argument @var{window} should be a live window or @code{nil} (meaning the selected window). If the optional argument @var{bury-or-kill} is non-@code{nil}, this means that the buffer currently shown in -@var{window} is about to be buried or killed and consequently shall +@var{window} is about to be buried or killed and consequently should not be switched to in future invocations of this command. The previous buffer is usually the buffer shown before the buffer currently shown in @var{window}. However, a buffer that has been buried -or killed or has been already shown by a recent invocation of -@code{switch-to-prev-buffer} does not qualify as previous buffer. +or killed, or has been already shown by a recent invocation of +@code{switch-to-prev-buffer}, does not qualify as previous buffer. If repeated invocations of this command have already shown all buffers previously shown in @var{window}, further invocations will show buffers from the buffer list of the frame @var{window} appears on (@pxref{The -Buffer List}) trying to skip buffers that are already shown in another +Buffer List}), trying to skip buffers that are already shown in another window on that frame. @end deffn @deffn Command switch-to-next-buffer &optional window -This command switches to the next buffer in @var{window} thus undoing +This command switches to the next buffer in @var{window}, thus undoing the effect of the last @code{switch-to-prev-buffer} command in @var{window}. The argument @var{window} must be a live window and defaults to the selected one. -If there is no recent invocation of a @code{switch-to-prev-buffer} that +If there is no recent invocation of @code{switch-to-prev-buffer} that can be undone, this function tries to show a buffer from the buffer list of the frame @var{window} appears on (@pxref{The Buffer List}). @end deffn By default @code{switch-to-prev-buffer} and @code{switch-to-next-buffer} can switch to a buffer that is already shown in another window on the -same frame. The following option can be used to override that behavior. +same frame. The following option can be used to override this behavior. @defopt switch-to-visible-buffer If this variable is non-@code{nil}, @code{switch-to-prev-buffer} and @code{switch-to-next-buffer} may switch to a buffer that is already -visible on the same frame, provided the buffer was shown in the argument -window before. If it's @code{nil}, @code{switch-to-prev-buffer} and +visible on the same frame, provided the buffer was shown in the relevant +window before. If it is @code{nil}, @code{switch-to-prev-buffer} and @code{switch-to-next-buffer} always try to avoid switching to a buffer that is already visible in another window on the same frame. @end defopt @@ -2138,7 +2138,7 @@ another buffer in it and iconifies the frame. This function returns non-@code{nil} if @var{window} is dedicated to its buffer and @code{nil} otherwise. More precisely, the return value is the value assigned by the last call of @code{set-window-dedicated-p} for -@var{window} or @code{nil} if that function was never called with +@var{window}, or @code{nil} if that function was never called with @var{window} as its argument. The default for @var{window} is the selected window. @end defun @@ -2159,20 +2159,20 @@ non-@code{nil} value. @node Quitting Windows @section Quitting Windows -When you want to get rid of a window used for displaying a buffer you +When you want to get rid of a window used for displaying a buffer, you can call @code{delete-window} or @code{delete-windows-on} (@pxref{Deleting Windows}) to remove that window from its frame. If the buffer is shown on a separate frame, you might want to call @code{delete-frame} (@pxref{Deleting Frames}) instead. If, on the other hand, a window has been reused for displaying the buffer, you might -prefer showing the buffer previously shown in that window by calling the +prefer showing the buffer previously shown in that window, by calling the function @code{switch-to-prev-buffer} (@pxref{Window History}). Finally, you might want to either bury (@pxref{The Buffer List}) or kill (@pxref{Killing Buffers}) the window's buffer. The following function uses information on how the window for -displaying the buffer was obtained in the first place thus attempting to -automatize the above decisions for you. +displaying the buffer was obtained in the first place, thus attempting to +automate the above decisions for you. @deffn Command quit-window &optional kill window This command quits @var{window} and buries its buffer. The argument @@ -2200,39 +2200,39 @@ restore the original height of @var{window}. The three cases described so far require that the buffer shown in @var{window} is still the buffer displayed by the last buffer display function for this window. If another buffer has been shown in the -meantime or the buffer previously shown no longer exists, this command +meantime, or the buffer previously shown no longer exists, this command calls @code{switch-to-prev-buffer} (@pxref{Window History}) to show some other buffer instead. @end deffn The function @code{quit-window} bases its decisions on information stored in @var{window}'s @code{quit-restore} window parameter -(@pxref{Window Parameters}) and resets that parameter to @code{nil} +(@pxref{Window Parameters}), and resets that parameter to @code{nil} after it's done. The following option specifies how to deal with a frame containing just -one window that shall be either quit or whose buffer shall be buried. +one window that should be either quit, or whose buffer should be buried. @defopt frame-auto-hide-function The function specified by this option is called to automatically hide -frames. This function is called with one argument - a frame. +frames. This function is called with one argument---a frame. The function specified here is called by @code{bury-buffer} (@pxref{The Buffer List}) when the selected window is dedicated and shows the buffer -that shall be buried. It is also called by @code{quit-window} (see -above) when the frame of the window that shall be quit has been +that should be buried. It is also called by @code{quit-window} (see +above) when the frame of the window that should be quit has been specially created for displaying that window's buffer and the buffer -shall be buried. +should be buried. The default is to call @code{iconify-frame} (@pxref{Visibility of -Frames}). Alternatively, you may either specify @code{delete-frame} +Frames}). Alternatively, you may specify either @code{delete-frame} (@pxref{Deleting Frames}) to remove the frame from its display, @code{ignore} to leave the frame unchanged, or any other function that can take a frame as its sole argument. Note that the function specified by this option is called if and only if -there's at least one other frame on the terminal of the frame it's -supposed to handle and that frame contains only one live window. +there is at least one other frame on the terminal of the frame it's +supposed to handle, and that frame contains only one live window. @end defopt @@ -2322,14 +2322,7 @@ command to a key. @cindex window top line This function returns the display-start position of window @var{window}. If @var{window} is @code{nil}, the selected window is -used. For example, - -@example -@group -(window-start) - @result{} 7058 -@end group -@end example +used. When you create a window, or display a different buffer in it, the display-start position is set to a display-start position recently used @@ -2341,9 +2334,6 @@ it explicitly since the previous redisplay)---to make sure point appears on the screen. Nothing except redisplay automatically changes the window-start position; if you move point, do not expect the window-start position to change in response until after the next redisplay. - -For a realistic example of using @code{window-start}, see the -description of @code{count-lines}. @xref{Definition of count-lines}. @end defun @cindex window end position @@ -3236,7 +3226,7 @@ of the selected frame. If the optional argument @var{writable} is non-@code{nil}, this means to not use markers for sampling positions like @code{window-point} or @code{window-start}. This argument should be non-@code{nil} when the -state shall be written to disk and read back in another session. +state will be written to disk and read back in another session. Together, the argument @var{writable} and the variable @code{window-persistent-parameters} specify which window parameters are From 081e8d653d004b6c78e1ceea25eb9d31f4652ecd Mon Sep 17 00:00:00 2001 From: Michael Vehrs Date: Sat, 21 Apr 2012 13:54:39 +0800 Subject: [PATCH 114/564] Improve tbl support in woman.el. * lisp/woman.el (woman-find-next-control-line): New arg, specifying an additional regexp component for the control line. (woman2-roff-buffer): Use it. (woman-break-table): New function. (woman2-TS): Use it. And some cleanups: * lisp/woman.el (woman-set-buffer-display-table, woman-decode-region) (woman-horizontal-escapes, woman-negative-vertical-space) (woman-tab-to-tab-stop, woman2-fc, woman2-TS) (WoMan-warn-ignored): Use ?\s instead of ?\ . Fixes: debbugs:5635 --- lisp/ChangeLog | 17 +++++++++ lisp/woman.el | 97 +++++++++++++++++++++++++++++++++++++------------- 2 files changed, 90 insertions(+), 24 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 132aee66a9f..004a52c8d36 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,20 @@ +2012-04-21 Michael Vehrs + + * woman.el: Add support for "T{ T}" tbl syntax, and fix the + filling of the last column of a table (Bug#5635). + (woman-find-next-control-line): New arg, specifying an additional + regexp component for the control line. + (woman2-roff-buffer): Use it. + (woman-break-table): New function. + (woman2-TS): Use it. + +2012-04-21 Chong Yidong + + * woman.el (woman-set-buffer-display-table, woman-decode-region) + (woman-horizontal-escapes, woman-negative-vertical-space) + (woman-tab-to-tab-stop, woman2-fc, woman2-TS) + (WoMan-warn-ignored): Use ?\s instead of ?\ . + 2012-04-20 Stefan Monnier * minibuffer.el (completion-file-name-table): Complete user names. diff --git a/lisp/woman.el b/lisp/woman.el index 98ab27716a1..3ab06a5dd73 100644 --- a/lisp/woman.el +++ b/lisp/woman.el @@ -2133,7 +2133,7 @@ European characters." (copy-sequence standard-display-table) (make-display-table))) ;; Display the following internal chars correctly: - (aset buffer-display-table woman-unpadded-space-char [?\ ]) + (aset buffer-display-table woman-unpadded-space-char [?\s]) (aset buffer-display-table woman-escaped-escape-char [?\\])) @@ -2393,10 +2393,12 @@ Currently set only from '\" t in the first line of the source file.") (progn (goto-char from) (while (search-forward woman-escaped-escape-string nil t) - (delete-char -1) (insert ?\\)) + (delete-char -1) + (insert ?\\)) (goto-char from) (while (search-forward woman-unpadded-space-string nil t) - (delete-char -1) (insert ?\ )))) + (delete-char -1) + (insert ?\s)))) ;; Must return the new end of file if used in format-alist. (point-max))) @@ -2437,9 +2439,9 @@ Preserves location of `point'." ;; first backwards then forwards: (while (and (<= (setq N (1+ N)) 0) - (cond ((memq (preceding-char) '(?\ ?\t)) + (cond ((memq (preceding-char) '(?\s ?\t)) (delete-char -1) t) - ((memq (following-char) '(?\ ?\t)) + ((memq (following-char) '(?\s ?\t)) (delete-char 1) t) (t nil)))) (if (<= N 0) @@ -3376,7 +3378,7 @@ Ignore the default face and underline only word characters." ;; this used to be globally bound to nil, to avoid an error. Instead ;; we can use bound-and-true-p in woman-translate. (defvar woman-translations) -;; A list of the form (\"[ace]\" (a . b) (c . d) (e . ?\ )) or nil. +;; A list of the form (\"[ace]\" (a . b) (c . d) (e . ?\s)) or nil. (defun woman-get-next-char () "Return and delete next char in buffer, including special chars." @@ -3711,7 +3713,9 @@ expression in parentheses. Leaves point after the value." (setq fn 'woman2-format-paragraphs)))) () ;; Find next control line: - (set-marker to (woman-find-next-control-line)) + (if (equal woman-request "TS") + (set-marker to (woman-find-next-control-line "TE")) + (set-marker to (woman-find-next-control-line))) ;; Call the appropriate function: (funcall fn to))) (if (not (eobp)) ; This should not happen, but ... @@ -3722,12 +3726,13 @@ expression in parentheses. Leaves point after the value." (fset 'insert-and-inherit insert-and-inherit) (set-marker to nil)))) -(defun woman-find-next-control-line () - "Find and return start of next control line." -; (let ((to (save-excursion -; (re-search-forward "^\\." nil t)))) -; (if to (1- to) (point-max))) - (let (to) +(defun woman-find-next-control-line (&optional pat) + "Find and return start of next control line. +PAT, if non-nil, specifies an additional component of the control +line regexp to search for, which is appended to the default +regexp, \"\\(\\\\c\\)?\\n[.']\"." + (let ((pattern (concat "\\(\\\\c\\)?\n[.']" pat)) + to) (save-excursion ;; Must handle ;; ...\c @@ -3736,12 +3741,14 @@ expression in parentheses. Leaves point after the value." ;; BEWARE THAT THIS CODE MAY BE UNRELIABLE!!!!! (while (and - (setq to (re-search-forward "\\(\\\\c\\)?\n[.']" nil t)) + (setq to (re-search-forward pattern nil t)) (match-beginning 1) (looking-at "br")) (goto-char (match-beginning 0)) (woman-delete-line 2))) - (if to (1- to) (point-max)))) + (if to + (- to (+ 1 (length pat))) + (point-max)))) (defun woman2-PD (to) ".PD d -- Set the interparagraph distance to d. @@ -3885,18 +3892,18 @@ Leave 1 blank line. Format paragraphs upto TO." (insert (substring overlap i eol)) (setq i (or eol imax))) ) - ((eq c ?\ ) ; skip + ((eq c ?\s) ; skip (forward-char)) ((eq c ?\t) ; skip (if (eq (following-char) ?\t) (forward-char) ; both tabs, just skip (dotimes (i woman-tab-width) (if (eolp) - (insert ?\ ) ; extend line + (insert ?\s) ; extend line (forward-char)) ; skip ))) (t - (if (or (eq (following-char) ?\ ) ; overwrite OK + (if (or (eq (following-char) ?\s) ; overwrite OK overwritten) ; warning only once per ".sp -" () (setq overwritten t) @@ -4400,7 +4407,7 @@ tab stop columns or pairs (COLUMN . TYPE) where TYPE is R or C." tab (- tab (if (eq type ?C) (/ n 2) n))) ) (setq n (- tab (current-column))) (insert-char ?\s n)) - (insert ?\ )))) + (insert ?\s)))) (defun woman2-DT (to) ".DT -- Restore default tabs. Format paragraphs upto TO. @@ -4418,7 +4425,7 @@ Needs doing properly!" (if (eolp) (woman-delete-whole-line) ; ignore! (let ((delim (following-char)) - (pad ?\ ) end) ; pad defaults to space + (pad ?\s) end) ; pad defaults to space (forward-char) (skip-chars-forward " \t") (or (eolp) (setq pad (following-char))) @@ -4449,8 +4456,6 @@ Needs doing properly!" (defun woman2-TS (to) ".TS -- Start of table code for the tbl processor. Format paragraphs upto TO." - ;; This is a preliminary hack that seems to suffice for lilo.8. - (woman-delete-line 1) ; ignore any arguments (when woman-emulate-tbl ;; Assumes column separator is \t and intercolumn spacing is 3. ;; The first line may optionally be a list of options terminated by @@ -4462,6 +4467,22 @@ Format paragraphs upto TO." (woman-delete-line 1) ;; For each column, find its width and align it: (let ((start (point)) (col 1)) + (WoMan-log "%s" (buffer-substring start (+ start 40))) + ;; change T{ T} to tabs + (while (search-forward "T{\n" to t) + (replace-match "") + (catch 'end + (while (search-forward "\n" to t) + (replace-match " ") + (if (looking-at "T}") + (progn + (delete-char 2) + (throw 'end t)))))) + (goto-char start) + ;; strip space and headers + (while (re-search-forward "^\\.TH\\|\\.sp" to t) + (woman-delete-whole-line)) + (goto-char start) (while (prog1 (search-forward "\t" to t) (goto-char start)) ;; Find current column width: (while (< (point) to) @@ -4475,8 +4496,25 @@ Format paragraphs upto TO." (while (< (point) to) (when (search-forward "\t" to t) (delete-char -1) - (insert-char ?\ (- col (current-column)))) + (insert-char ?\s (- col (current-column)))) (forward-line)) + (goto-char start)) + ;; find maximum width + (let ((max-col 0)) + (while (search-forward "\n" to t) + (backward-char) + (if (> (current-column) max-col) + (setq max-col (current-column))) + (forward-char)) + (goto-char start) + ;; break lines if they are too long + (when (and (> max-col woman-fill-column) + (> woman-fill-column col)) + (setq max-col woman-fill-column) + (woman-break-table col to start) + (goto-char start)) + (while (re-search-forward "^_$" to t) + (replace-match (make-string max-col ?_))) (goto-char start)))) ;; Format table with no filling or adjusting (cf. woman2-nf): (setq woman-nofill t) @@ -4486,6 +4524,17 @@ Format paragraphs upto TO." ;; ".TE -- End of table code for the tbl processor." ;; Turn filling and adjusting back on. +(defun woman-break-table (start-column to start) + (while (< (point) to) + (move-to-column woman-fill-column) + (if (eolp) + (forward-line) + (if (and (search-backward " " start t) + (> (current-column) start-column)) + (progn + (insert-char ?\n 1) + (insert-char ?\s (- start-column 5))) + (forward-line))))) ;;; WoMan message logging: @@ -4523,7 +4572,7 @@ IGNORED is a string appended to the log message." (buffer-substring (point) (line-end-position)))) (if (and (> (length tail) 0) - (/= (string-to-char tail) ?\ )) + (/= (string-to-char tail) ?\s)) (setq tail (concat " " tail))) (WoMan-log-1 (concat "** " request tail " request " ignored)))) From 7b9946cfd9ce13a9435857422303fd2ce7957800 Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Sat, 21 Apr 2012 09:55:02 +0200 Subject: [PATCH 115/564] * gnus.el (debbugs-gnu): Don't override existing autoload definition. --- lisp/gnus/ChangeLog | 4 ++++ lisp/gnus/gnus.el | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index b1f298bdb16..9d9ffb2fcbd 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,7 @@ +2012-04-21 Andreas Schwab + + * gnus.el (debbugs-gnu): Don't override existing autoload definition. + 2012-04-12 Lars Magne Ingebrigtsen * gnus-msg.el (gnus-inews-insert-gcc): Don't do the alist stuff when we diff --git a/lisp/gnus/gnus.el b/lisp/gnus/gnus.el index cc4f2eb1e7a..635bb6fc96f 100644 --- a/lisp/gnus/gnus.el +++ b/lisp/gnus/gnus.el @@ -4397,7 +4397,9 @@ prompt the user for the name of an NNTP server to use." (gnus-1 arg dont-connect slave) (gnus-final-warning))) -(autoload 'debbugs-gnu "debbugs-gnu") +(eval-and-compile + (unless (fboundp 'debbugs-gnu) + (autoload 'debbugs-gnu "debbugs-gnu" "List all outstanding Emacs bugs." t))) (defun gnus-list-debbugs () "List all open Gnus bug reports." (interactive) From 5e6ab4e675efb7a590c2934c226a3223bd75a253 Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Sat, 21 Apr 2012 10:03:41 +0200 Subject: [PATCH 116/564] Fixes: debbugs:11285 * m4/gl-comp.m4: Update. --- ChangeLog | 4 ++++ m4/gl-comp.m4 | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 3b48ce42500..ab3ecfd6924 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2012-04-21 Andreas Schwab + + * m4/gl-comp.m4: Update. (Bug#11285) + 2012-04-20 Ludovic Courtès * configure.in: Don't use the -R option (Bug#11251). diff --git a/m4/gl-comp.m4 b/m4/gl-comp.m4 index 4894f840303..42a0ed97234 100644 --- a/m4/gl-comp.m4 +++ b/m4/gl-comp.m4 @@ -1,5 +1,5 @@ # DO NOT EDIT! GENERATED AUTOMATICALLY! -# Copyright (C) 2002-2011 Free Software Foundation, Inc. +# Copyright (C) 2002-2012 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -562,6 +562,7 @@ AC_DEFUN([gl_FILE_LIST], [ m4/largefile.m4 m4/longlong.m4 m4/lstat.m4 + m4/manywarnings.m4 m4/md5.m4 m4/mktime.m4 m4/multiarch.m4 @@ -596,5 +597,6 @@ AC_DEFUN([gl_FILE_LIST], [ m4/tm_gmtoff.m4 m4/unistd_h.m4 m4/warn-on-use.m4 + m4/warnings.m4 m4/wchar_t.m4 ]) From 6114eb15032b89b19029b17b869299e290e56704 Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Sat, 21 Apr 2012 10:03:52 +0200 Subject: [PATCH 117/564] * lisp.mk (lisp): Update. --- src/ChangeLog | 4 ++++ src/lisp.mk | 1 + 2 files changed, 5 insertions(+) diff --git a/src/ChangeLog b/src/ChangeLog index a3101252fe9..304bca4e48b 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2012-04-21 Andreas Schwab + + * lisp.mk (lisp): Update. + 2012-04-20 Paul Eggert * keyboard.c (process_pending_signals): Define only if SYNC_INPUT. diff --git a/src/lisp.mk b/src/lisp.mk index c082630f717..4895ca40959 100644 --- a/src/lisp.mk +++ b/src/lisp.mk @@ -131,6 +131,7 @@ lisp = \ $(lispsource)/replace.elc \ $(lispsource)/buff-menu.elc \ $(lispsource)/fringe.elc \ + $(lispsource)/emacs-lisp/regexp-opt.elc \ $(lispsource)/image.elc \ $(lispsource)/international/fontset.elc \ $(lispsource)/dnd.elc \ From b42287d22df7fe18831e2355429eec1761d97202 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sat, 21 Apr 2012 12:48:42 +0300 Subject: [PATCH 118/564] Fix the build after leim-related changes. msdos/sedleim.inp (RUN_EMACS): Replace BUILT_EMACS with EMACS. Remove stale editing of "else make quail". (.PHONY, compile-targets): Remove targets. (compile-main): Edit into something that can be done without requiring a Unixy shell. (bootstrap-clean): Likewise: edit to not require $(setwins). msdos/sed1v2.inp: Edit "cd $(leimdir) && $(MAKE) ..." into the equivalent "$(MAKE) $(MFLAGS) -C $(leimdir) ..." command. --- msdos/ChangeLog | 12 ++++++++++++ msdos/sed1v2.inp | 2 ++ msdos/sedleim.inp | 19 +++++++++++++++---- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/msdos/ChangeLog b/msdos/ChangeLog index 82f877eee9e..603baa978e0 100644 --- a/msdos/ChangeLog +++ b/msdos/ChangeLog @@ -1,3 +1,15 @@ +2012-04-21 Eli Zaretskii + + * sedleim.inp (RUN_EMACS): Replace BUILT_EMACS with EMACS. + Remove stale editing of "else make quail". + (.PHONY, compile-targets): Remove targets. + (compile-main): Edit into something that can be done without + requiring a Unixy shell. + (bootstrap-clean): Likewise: edit to not require $(setwins). + + * sed1v2.inp: Edit "cd $(leimdir) && $(MAKE) ..." into the + equivalent "$(MAKE) $(MFLAGS) -C $(leimdir) ..." command. + 2012-04-18 Paul Eggert configure: new option --enable-gcc-warnings (Bug#11207) diff --git a/msdos/sed1v2.inp b/msdos/sed1v2.inp index ce245b08824..b9e94afea51 100644 --- a/msdos/sed1v2.inp +++ b/msdos/sed1v2.inp @@ -152,6 +152,8 @@ s/^ [^ ]*move-if-change / update / /^ echo[ ][ ]*timestamp/s/echo /djecho / /^ .*djecho timestamp/a\ @rm -f gl-tmp +/^ cd \$(leimdir) && \$(MAKE)/c\ + $(MAKE) $(MFLAGS) -C $(leimdir) leim-list.el EMACS=$(bootstrap_exe) /^ cd \$(lib) && \$(MAKE)/c\ $(MAKE) $(MFLAGS) -C $(lib) libgnu.a /^RUN_TEMACS *=/s|`/bin/pwd`|.| diff --git a/msdos/sedleim.inp b/msdos/sedleim.inp index 773934e64aa..41f87d92047 100644 --- a/msdos/sedleim.inp +++ b/msdos/sedleim.inp @@ -33,14 +33,11 @@ s|\([ ]\)echo|\1djecho|g /RUN_EMACS *=/,/^$/c\ export EMACSLOADPATH=${buildlisppath}\ -RUN_EMACS = ${BUILT_EMACS} -batch --no-site-file +RUN_EMACS = ${EMACS} -batch --no-site-file /^ cd ../c\ ${MAKE} -C ../src ${MFLAGS} emacs -/else make quail/c\ - if not exist quail\\nul make quail - /if \[ -f $@ \]\; then true/d /fi$/s/; fi$// @@ -51,9 +48,23 @@ RUN_EMACS = ${BUILT_EMACS} -batch --no-site-file /^ --eval/,/; \\$/s|\; \\|| } +/^setwins=/,/^$/d +/^\.PHONY: compile-targets/d +/^compile-targets:/d +/^compile-main:/,/^$/c\ +compile-main: ${TIT_MISC}\ + $(MAKE) $(MFLAGS) $(foreach f,$(wildcard ja-dic/*.el),$(basename $f).elc)\ + $(MAKE) $(MFLAGS) $(foreach f,$(wildcard quail/*.el),$(basename $f).elc)\ + + /^install:/,/^$/c\ install: all\ +/^bootstrap-clean:/,/^$/c\ +bootstrap-clean: clean\ + rm -f ja-dic/*.elc quail/*.elc\ + + /^ if test -f/d /^distclean:/,/^$/ { s|\(rm -f Makefile\)|\1 stamp-subdir| From 18edb22d4f484783b009d3b4420f62462025f350 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Sat, 21 Apr 2012 17:53:37 +0800 Subject: [PATCH 119/564] Fix xml.el regression introduced by 2012-01-27 change. * lisp/xml.el (xml-parse-region, xml-parse-tag): Avoid errors due to reaching eob. Fixes: debbugs:11286 --- lisp/ChangeLog | 5 +++++ lisp/xml.el | 6 ++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 8df6cbf0e1a..04cd2f736af 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-04-21 Chong Yidong + + * xml.el (xml-parse-region, xml-parse-tag): Avoid errors due to + reaching eob (Bug#11286). + 2012-04-20 Richard Stallman Fix logic for returning to and yanking from Rmail buffer. diff --git a/lisp/xml.el b/lisp/xml.el index 39a8da0f337..cb56f023af0 100644 --- a/lisp/xml.el +++ b/lisp/xml.el @@ -323,7 +323,8 @@ If PARSE-NS is non-nil, then QNAMES are expanded." (cond ((null result) ;; Not looking at an xml start tag. - (forward-char 1)) + (unless (eobp) + (forward-char 1))) ((and xml (not xml-sub-parser)) ;; Translation of rule [1] of XML specifications (error "XML: (Not Well-Formed) Only one root tag allowed")) @@ -422,7 +423,8 @@ Returns one of: ((looking-at "") (skip-syntax-forward " ") - (xml-parse-tag parse-dtd xml-ns)) + (unless (eobp) + (xml-parse-tag parse-dtd xml-ns))) ;; end tag ((looking-at " Date: Sat, 21 Apr 2012 18:11:51 +0800 Subject: [PATCH 120/564] Add system processes support for FreeBSD. * src/sysdep.c (list_system_processes, system_process_attributes): Add implementation for FreeBSD. Fixes: debbugs:5243 --- src/ChangeLog | 5 ++ src/sysdep.c | 211 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 216 insertions(+) diff --git a/src/ChangeLog b/src/ChangeLog index 304bca4e48b..a2c68317434 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2012-04-21 Eduard Wiebe + + * sysdep.c (list_system_processes, system_process_attributes): Add + implementation for FreeBSD (Bug#5243). + 2012-04-21 Andreas Schwab * lisp.mk (lisp): Update. diff --git a/src/sysdep.c b/src/sysdep.c index edaaa4c93d7..fdc04f6655d 100644 --- a/src/sysdep.c +++ b/src/sysdep.c @@ -37,6 +37,13 @@ along with GNU Emacs. If not, see . */ #include "sysselect.h" #include "blockinput.h" +#ifdef __FreeBSD__ +#include +#include +#include */ +#include +#endif + #ifdef WINDOWSNT #define read sys_read #define write sys_write @@ -2529,6 +2536,40 @@ list_system_processes (void) return proclist; } +#elif defined (__FreeBSD__) + +Lisp_Object +list_system_processes () +{ + int mib[] = {CTL_KERN, KERN_PROC, KERN_PROC_PROC}; + size_t len; + struct kinfo_proc *procs; + size_t i; + + struct gcpro gcpro1; + Lisp_Object proclist = Qnil; + + if (sysctl (mib, 3, NULL, &len, NULL, 0) != 0) + return proclist; + + procs = xmalloc (len); + if (sysctl (mib, 3, procs, &len, NULL, 0) != 0) + { + xfree (procs); + return proclist; + } + + GCPRO1 (proclist); + len /= sizeof (struct kinfo_proc); + for (i = 0; i < len; i++) + proclist = Fcons (make_fixnum_or_float (procs[i].ki_pid), proclist); + UNGCPRO; + + xfree (procs); + + return proclist; +} + /* The WINDOWSNT implementation is in w32.c. The MSDOS implementation is in dosfns.c. */ #elif !defined (WINDOWSNT) && !defined (MSDOS) @@ -3079,6 +3120,176 @@ system_process_attributes (Lisp_Object pid) return attrs; } +#elif defined(__FreeBSD__) + +Lisp_Object +system_process_attributes (Lisp_Object pid) +{ + int proc_id; + int pagesize = getpagesize(); + int npages; + int fscale; + struct passwd *pw; + struct group *gr; + char *ttyname; + size_t len; + char args[MAXPATHLEN]; + EMACS_TIME t, now; + + int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PID}; + struct kinfo_proc proc; + size_t proclen = sizeof(proc); + + struct gcpro gcpro1, gcpro2; + Lisp_Object attrs = Qnil; + Lisp_Object decoded_comm; + + CHECK_NUMBER_OR_FLOAT (pid); + proc_id = FLOATP (pid) ? XFLOAT_DATA (pid) : XINT (pid); + mib[3] = proc_id; + + if (sysctl (mib, 4, &proc, &proclen, NULL, 0) != 0) + return attrs; + + GCPRO2 (attrs, decoded_comm); + + attrs = Fcons (Fcons (Qeuid, make_fixnum_or_float(proc.ki_uid)), attrs); + + BLOCK_INPUT; + pw = getpwuid (proc.ki_uid); + UNBLOCK_INPUT; + if (pw) + attrs = Fcons (Fcons (Quser, build_string (pw->pw_name)), attrs); + + attrs = Fcons (Fcons (Qegid, make_fixnum_or_float(proc.ki_svgid)), attrs); + + BLOCK_INPUT; + gr = getgrgid (proc.ki_svgid); + UNBLOCK_INPUT; + if (gr) + attrs = Fcons (Fcons (Qgroup, build_string (gr->gr_name)), attrs); + + decoded_comm = code_convert_string_norecord + (make_unibyte_string (proc.ki_comm, strlen (proc.ki_comm)), + Vlocale_coding_system, 0); + + attrs = Fcons (Fcons (Qcomm, decoded_comm), attrs); + { + char state[2] = {'\0', '\0'}; + switch (proc.ki_stat) + { + case SRUN: + state[0] = 'R'; + break; + + case SSLEEP: + state[0] = 'S'; + break; + + case SLOCK: + state[0] = 'D'; + break; + + case SZOMB: + state[0] = 'Z'; + break; + + case SSTOP: + state[0] = 'T'; + break; + } + attrs = Fcons (Fcons (Qstate, build_string (state)), attrs); + } + + attrs = Fcons (Fcons (Qppid, make_fixnum_or_float (proc.ki_ppid)), attrs); + attrs = Fcons (Fcons (Qpgrp, make_fixnum_or_float (proc.ki_pgid)), attrs); + attrs = Fcons (Fcons (Qsess, make_fixnum_or_float (proc.ki_sid)), attrs); + + BLOCK_INPUT; + ttyname = proc.ki_tdev == NODEV ? NULL : devname (proc.ki_tdev, S_IFCHR); + UNBLOCK_INPUT; + if (ttyname) + attrs = Fcons (Fcons (Qtty, build_string (ttyname)), attrs); + + attrs = Fcons (Fcons (Qtpgid, make_fixnum_or_float (proc.ki_tpgid)), attrs); + attrs = Fcons (Fcons (Qminflt, make_fixnum_or_float (proc.ki_rusage.ru_minflt)), attrs); + attrs = Fcons (Fcons (Qmajflt, make_fixnum_or_float (proc.ki_rusage.ru_majflt)), attrs); + attrs = Fcons (Fcons (Qcminflt, make_number (proc.ki_rusage_ch.ru_minflt)), attrs); + attrs = Fcons (Fcons (Qcmajflt, make_number (proc.ki_rusage_ch.ru_majflt)), attrs); + +#define TIMELIST(ts) \ + list3 (make_number (EMACS_SECS (ts) >> 16 & 0xffff), \ + make_number (EMACS_SECS (ts) & 0xffff), \ + make_number (EMACS_USECS (ts))) + + attrs = Fcons (Fcons (Qutime, TIMELIST(proc.ki_rusage.ru_utime)), attrs); + attrs = Fcons (Fcons (Qstime, TIMELIST(proc.ki_rusage.ru_stime)), attrs); + EMACS_ADD_TIME (t, proc.ki_rusage.ru_utime, proc.ki_rusage.ru_stime); + attrs = Fcons (Fcons (Qtime, TIMELIST(t)), attrs); + + attrs = Fcons (Fcons (Qcutime, TIMELIST(proc.ki_rusage_ch.ru_utime)), attrs); + attrs = Fcons (Fcons (Qcstime, TIMELIST(proc.ki_rusage_ch.ru_utime)), attrs); + EMACS_ADD_TIME (t, proc.ki_rusage_ch.ru_utime, proc.ki_rusage_ch.ru_stime); + attrs = Fcons (Fcons (Qctime, TIMELIST(t)), attrs); + + attrs = Fcons (Fcons (Qthcount, make_fixnum_or_float (proc.ki_numthreads)), attrs); + attrs = Fcons (Fcons (Qpri, make_number (proc.ki_pri.pri_native)), attrs); + attrs = Fcons (Fcons (Qnice, make_number (proc.ki_nice)), attrs); + attrs = Fcons (Fcons (Qstart, TIMELIST(proc.ki_start)), attrs); + attrs = Fcons (Fcons (Qvsize, make_number (proc.ki_size >> 10)), attrs); + attrs = Fcons (Fcons (Qrss, make_number (proc.ki_rssize * pagesize >> 10)), attrs); + + EMACS_GET_TIME (now); + EMACS_SUB_TIME (t, now, proc.ki_start); + attrs = Fcons (Fcons (Qetime, TIMELIST(t)), attrs); + +#undef TIMELIST + + len = sizeof(fscale); + if (sysctlbyname ("kern.fscale", &fscale, &len, NULL, 0) == 0) + { + float pcpu; + fixpt_t ccpu; + len = sizeof (ccpu); + if (sysctlbyname ("kern.ccpu", &ccpu, &len, NULL, 0) == 0) + { + pcpu = 100.0 * ((double) proc.ki_pctcpu / fscale) + / (1.0 - exp(proc.ki_swtime * log((double) ccpu / fscale))); + attrs = Fcons (Fcons (Qpcpu, make_fixnum_or_float(pcpu)), attrs); + } + } + + len = sizeof(npages); + if (sysctlbyname ("hw.availpages", &npages, &len, NULL, 0) == 0) + { + float pmem = proc.ki_flag & P_INMEM + ? 100.0 * ((float) proc.ki_rssize / npages) + : 0.0; + attrs = Fcons (Fcons (Qpmem, make_fixnum_or_float(pmem)), attrs); + } + + mib[2] = KERN_PROC_ARGS; + len = MAXPATHLEN; + if (sysctl (mib, 4, args, &len, NULL, 0) == 0) + { + int i; + for (i = 0; i < len; i++) + { + if (! args[i] && i < len - 1) + args[i] = ' '; + } + + decoded_comm = code_convert_string_norecord + (make_unibyte_string (args, strlen (args)), + Vlocale_coding_system, 0); + + attrs = Fcons (Fcons (Qargs, decoded_comm), attrs); + } + + UNGCPRO; + return attrs; +} + /* The WINDOWSNT implementation is in w32.c. The MSDOS implementation is in dosfns.c. */ #elif !defined (WINDOWSNT) && !defined (MSDOS) From d64a438f6a88f5db66ddf21ff97f9e06c00e33b0 Mon Sep 17 00:00:00 2001 From: Leo Liu Date: Sat, 21 Apr 2012 22:12:27 +0800 Subject: [PATCH 121/564] * lisp/net/rcirc.el (rcirc): Avoid error when process-contact returns t. --- lisp/ChangeLog | 5 +++++ lisp/net/rcirc.el | 12 +++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 004a52c8d36..1b9ef8dbd02 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-04-21 Leo Liu + + * net/rcirc.el (rcirc): Avoid error when process-contact returns + t. + 2012-04-21 Michael Vehrs * woman.el: Add support for "T{ T}" tbl syntax, and fix the diff --git a/lisp/net/rcirc.el b/lisp/net/rcirc.el index 485af6e1b5e..1898b3d074f 100644 --- a/lisp/net/rcirc.el +++ b/lisp/net/rcirc.el @@ -479,7 +479,8 @@ If ARG is non-nil, instead prompt for connection parameters." rcirc-default-full-name)) (channels (plist-get (cdr c) :channels)) (password (plist-get (cdr c) :password)) - (encryption (plist-get (cdr c) :encryption))) + (encryption (plist-get (cdr c) :encryption)) + contact) (when server (let (connected) (dolist (p (rcirc-process-list)) @@ -491,10 +492,11 @@ If ARG is non-nil, instead prompt for connection parameters." full-name channels password encryption) (quit (message "Quit connecting to %s" server))) (with-current-buffer (process-buffer connected) - (setq connected-servers - (cons (process-contact (get-buffer-process - (current-buffer)) :host) - connected-servers)))))))) + (setq contact (process-contact + (get-buffer-process (current-buffer)) :host)) + (setq connected-servers + (cons (if (stringp contact) contact server) + connected-servers)))))))) (when connected-servers (message "Already connected to %s" (if (cdr connected-servers) From 7dd51bf1c26ff6b830d7cfad78014742afcc2e2a Mon Sep 17 00:00:00 2001 From: Juanma Barranquero Date: Sat, 21 Apr 2012 18:57:49 +0200 Subject: [PATCH 122/564] Don't add modes to which-func-modes if already set to t. * lisp/progmodes/verilog-mode.el (verilog-mode): Check whether which-func-modes is t before adding verilog-mode. Reported by Andy Moreton . * lisp/mh-e/mh-folder.el (top): Check whether which-func-modes is t before adding mh-folder-mode. --- lisp/ChangeLog | 9 +++++++-- lisp/mh-e/ChangeLog | 5 +++++ lisp/mh-e/mh-folder.el | 2 +- lisp/progmodes/verilog-mode.el | 2 +- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 1b9ef8dbd02..2ffd9ce77a8 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,7 +1,12 @@ +2012-04-21 Juanma Barranquero + + * progmodes/verilog-mode.el (verilog-mode): Check whether + which-func-modes is t before adding verilog-mode. + Reported by Andy Moreton . + 2012-04-21 Leo Liu - * net/rcirc.el (rcirc): Avoid error when process-contact returns - t. + * net/rcirc.el (rcirc): Avoid error when process-contact returns t. 2012-04-21 Michael Vehrs diff --git a/lisp/mh-e/ChangeLog b/lisp/mh-e/ChangeLog index 2c3d0dc3803..f98b4a7490e 100644 --- a/lisp/mh-e/ChangeLog +++ b/lisp/mh-e/ChangeLog @@ -1,3 +1,8 @@ +2012-04-21 Juanma Barranquero + + * mh-folder.el (top): Check whether which-func-modes is t before + adding mh-folder-mode. + 2011-11-20 Bill Wohler * Release MH-E version 8.3.1. diff --git a/lisp/mh-e/mh-folder.el b/lisp/mh-e/mh-folder.el index 71ef87385ca..d9e6c74f3f3 100644 --- a/lisp/mh-e/mh-folder.el +++ b/lisp/mh-e/mh-folder.el @@ -520,7 +520,7 @@ font-lock is done highlighting.") ;; Register mh-folder-mode as supporting which-function-mode... (mh-require 'which-func nil t) -(when (boundp 'which-func-modes) +(when (and (boundp 'which-func-modes) (listp which-func-modes)) (add-to-list 'which-func-modes 'mh-folder-mode)) ;; Shush compiler. diff --git a/lisp/progmodes/verilog-mode.el b/lisp/progmodes/verilog-mode.el index c8ef8f0324c..0139795dd38 100644 --- a/lisp/progmodes/verilog-mode.el +++ b/lisp/progmodes/verilog-mode.el @@ -3592,7 +3592,7 @@ Key bindings specific to `verilog-mode-map' are: (set (make-local-variable 'imenu-generic-expression) verilog-imenu-generic-expression) ;; Tell which-func-modes that imenu knows about verilog - (when (boundp 'which-func-modes) + (when (and (boundp 'which-func-modes) (listp which-func-modes)) (add-to-list 'which-func-modes 'verilog-mode)) ;; hideshow support (when (boundp 'hs-special-modes-alist) From 9ee7d8b93cb143b473e6dffb708e777bc6fe5bd0 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sat, 21 Apr 2012 10:15:03 -0700 Subject: [PATCH 123/564] Sync from gnulib version 4f11d6bebc3098c64ffde27079ab0d0cecfd0cdc dated 2011-10-07. Regenerating from current gnulib would be a pervasive change, and currently the trunk isn't open to such changes. * configure.in (WARN_CFLAGS): Remove; no longer needed now that gnulib does it. * lib/gnulib.mk, m4/gl-comp.m4: Regenerate. --- ChangeLog | 9 +++++++++ configure.in | 2 -- lib/gnulib.mk | 2 +- m4/gl-comp.m4 | 5 ++++- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index ab3ecfd6924..ca3bcff5a8c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2012-04-21 Paul Eggert + + Sync from gnulib version 4f11d6bebc3098c64ffde27079ab0d0cecfd0cdc + dated 2011-10-07. Regenerating from current gnulib would be a + pervasive change, and currently the trunk isn't open to such changes. + * configure.in (WARN_CFLAGS): Remove; no longer needed now + that gnulib does it. + * lib/gnulib.mk, m4/gl-comp.m4: Regenerate. + 2012-04-21 Andreas Schwab * m4/gl-comp.m4: Update. (Bug#11285) diff --git a/configure.in b/configure.in index 1554e10145f..c9592921e75 100644 --- a/configure.in +++ b/configure.in @@ -787,8 +787,6 @@ else gl_WARN_ADD([-fdiagnostics-show-option]) gl_WARN_ADD([-funit-at-a-time]) - AC_SUBST([WARN_CFLAGS]) - AC_DEFINE([lint], [1], [Define to 1 if the compiler is checking for lint.]) AC_DEFINE([_FORTIFY_SOURCE], [2], [enable compile-time and run-time bounds-checking, and some warnings]) diff --git a/lib/gnulib.mk b/lib/gnulib.mk index 154ae9882da..153ea11efe4 100644 --- a/lib/gnulib.mk +++ b/lib/gnulib.mk @@ -21,7 +21,7 @@ # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. -# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --avoid=msvc-inval --avoid=msvc-nothrow --avoid=raise --avoid=threadlib --makefile-name=gnulib.mk --conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca-opt careadlinkat crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 dtoastr dup2 filemode getloadavg getopt-gnu ignore-value intprops lstat mktime pthread_sigmask readlink socklen stdarg stdio strftime strtoimax strtoumax symlink sys_stat +# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --avoid=msvc-inval --avoid=msvc-nothrow --avoid=raise --avoid=threadlib --makefile-name=gnulib.mk --conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca-opt careadlinkat crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 dtoastr dup2 filemode getloadavg getopt-gnu ignore-value intprops lstat manywarnings mktime pthread_sigmask readlink socklen stdarg stdio strftime strtoimax strtoumax symlink sys_stat warnings MOSTLYCLEANFILES += core *.stackdump diff --git a/m4/gl-comp.m4 b/m4/gl-comp.m4 index 42a0ed97234..73a26c41324 100644 --- a/m4/gl-comp.m4 +++ b/m4/gl-comp.m4 @@ -1,5 +1,5 @@ # DO NOT EDIT! GENERATED AUTOMATICALLY! -# Copyright (C) 2002-2012 Free Software Foundation, Inc. +# Copyright (C) 2002-2011 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -62,6 +62,7 @@ AC_DEFUN([gl_EARLY], # Code from module largefile: AC_REQUIRE([AC_SYS_LARGEFILE]) # Code from module lstat: + # Code from module manywarnings: # Code from module mktime: # Code from module multiarch: # Code from module nocrash: @@ -100,6 +101,7 @@ AC_DEFUN([gl_EARLY], # Code from module u64: # Code from module unistd: # Code from module verify: + # Code from module warnings: ]) # This macro should be invoked from ./configure.in, in the section @@ -216,6 +218,7 @@ fi gl_TIME_MODULE_INDICATOR([time_r]) AC_REQUIRE([AC_C_INLINE]) gl_UNISTD_H +AC_SUBST([WARN_CFLAGS]) gl_gnulib_enabled_dosname=false gl_gnulib_enabled_be453cec5eecf5731a274f2de7f2db36=false gl_gnulib_enabled_pathmax=false From 581b67880c0d1d9193707b64b9c6b1aee2743338 Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Sat, 21 Apr 2012 20:25:20 +0200 Subject: [PATCH 124/564] * progmodes/which-func.el (which-func-current): Quote % characters for mode-line processing. --- lisp/ChangeLog | 5 +++++ lisp/progmodes/which-func.el | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 04cd2f736af..020e5c4b9bc 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-04-21 Andreas Schwab + + * progmodes/which-func.el (which-func-current): Quote % + characters for mode-line processing. + 2012-04-21 Chong Yidong * xml.el (xml-parse-region, xml-parse-tag): Avoid errors due to diff --git a/lisp/progmodes/which-func.el b/lisp/progmodes/which-func.el index 721c610517a..01b4c6829f7 100644 --- a/lisp/progmodes/which-func.el +++ b/lisp/progmodes/which-func.el @@ -178,7 +178,9 @@ and you want to simplify them for the mode line (defvar which-func-table (make-hash-table :test 'eq :weakness 'key)) (defconst which-func-current - '(:eval (gethash (selected-window) which-func-table which-func-unknown))) + '(:eval (replace-regexp-in-string + "%" "%%" + (gethash (selected-window) which-func-table which-func-unknown)))) ;;;###autoload (put 'which-func-current 'risky-local-variable t) (defvar which-func-mode nil From 09ebefe1e00416b16c27c9c85d1a30498ed3c047 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 21 Apr 2012 12:31:05 -0700 Subject: [PATCH 125/564] More small edits for doc/lispref/windows.texi * doc/lispref/windows.texi (Textual Scrolling, Coordinates and Windows) (Window Configurations, Window Parameters, Window Hooks): Copyedits. (Textual Scrolling): Mention recenter-redisplay, recenter-top-bottom, and recenter-positions. Remove recenter example. * admin/FOR-RELEASE: Related markup. --- admin/FOR-RELEASE | 2 +- doc/lispref/ChangeLog | 6 +- doc/lispref/windows.texi | 148 +++++++++++++++++++++------------------ 3 files changed, 85 insertions(+), 71 deletions(-) diff --git a/admin/FOR-RELEASE b/admin/FOR-RELEASE index 6bcd8703674..f53b74e98c4 100644 --- a/admin/FOR-RELEASE +++ b/admin/FOR-RELEASE @@ -229,7 +229,7 @@ syntax.texi cyd text.texi cyd tips.texi rgm variables.texi cyd -windows.texi +windows.texi rgm (skimmed) Local variables: diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index fe63359fad2..7b30b0e7ac3 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -4,12 +4,16 @@ (Resizing Windows, Deleting Windows, Selecting Windows) (Choosing Window Options, Horizontal Scrolling) (Cyclic Window Ordering, Window History, Dedicated Windows) - (Quitting Windows, Window Configurations): Copyedits. + (Quitting Windows, Window Configurations, Textual Scrolling): + (Coordinates and Windows, Window Configurations) + (Window Parameters, Window Hooks): Copyedits. (Splitting Windows, Deleting Windows): Fix ignore-window-parameters logic. (Selecting Windows, Choosing Window Options): Markup fixes. (Window Start and End): Remove pointless example. Remove cross-reference to deleted count-lines content. + (Textual Scrolling): Mention recenter-redisplay, recenter-top-bottom, + and recenter-positions. Remove recenter example. * elisp.texi, vol1.texi, vol2.texi: Bump VERSION and DATE. diff --git a/doc/lispref/windows.texi b/doc/lispref/windows.texi index 2e4657328eb..c8a9316bcfa 100644 --- a/doc/lispref/windows.texi +++ b/doc/lispref/windows.texi @@ -2507,12 +2507,16 @@ commands move the paper up and down. Thus, if you are looking at the middle of a buffer and repeatedly call @code{scroll-down}, you will eventually see the beginning of the buffer. - Some people have urged that the opposite convention be used: they + Unfortunately, this sometimes causes confusion, because some people +tend to think in terms of the opposite convention: they imagine the window moving over text that remains in place, so that ``down'' commands take you to the end of the buffer. This convention is consistent with fact that such a command is bound to a key named -@key{PageDown} on modern keyboards. We have not switched to this -convention as that is likely to break existing Emacs Lisp code. +@key{PageDown} on modern keyboards. +@ignore +We have not switched to this convention as that is likely to break +existing Emacs Lisp code. +@end ignore Textual scrolling functions (aside from @code{scroll-other-window}) have unpredictable results if the current buffer is not the one @@ -2542,13 +2546,8 @@ signals an error. Otherwise, it returns @code{nil}. This function scrolls backward by @var{count} lines in the selected window. -If @var{count} is negative, it scrolls forward instead. If -@var{count} is omitted or @code{nil}, the distance scrolled is -@code{next-screen-context-lines} lines less than the height of the -window's text area. - -If the selected window cannot be scrolled any further, this function -signals an error. Otherwise, it returns @code{nil}. +If @var{count} is negative, it scrolls forward instead. In other +respects, it behaves the same way as @code{scroll-up} does. @end deffn @deffn Command scroll-up-command &optional count @@ -2578,8 +2577,8 @@ already displayed, @code{scroll-other-window} displays it in some window. When the selected window is the minibuffer, the next window is normally -the one at the top left corner. You can specify a different window to -scroll, when the minibuffer is selected, by setting the variable +the leftmost one immediately above it. You can specify a different +window to scroll, when the minibuffer is selected, by setting the variable @code{minibuffer-scroll-window}. This variable has no effect when any other window is selected. When it is non-@code{nil} and the minibuffer is selected, it takes precedence over @@ -2591,7 +2590,7 @@ window is the one at the bottom right corner. In this case, @code{scroll-other-window} attempts to scroll the minibuffer. If the minibuffer contains just one line, it has nowhere to scroll to, so the line reappears after the echo area momentarily displays the message -@samp{Beginning of buffer}. +@samp{End of buffer}. @end deffn @defvar other-window-scroll-buffer @@ -2690,12 +2689,12 @@ If @var{count} is a non-negative number, that puts the line containing point @var{count} lines down from the top of the window. If @var{count} is a negative number, then it counts upward from the bottom of the window, so that @minus{}1 stands for the last usable -line in the window. If @var{count} is a non-@code{nil} list, then it -stands for the line in the middle of the window. +line in the window. -If @var{count} is @code{nil}, @code{recenter} puts the line containing -point in the middle of the window, then clears and redisplays the entire -selected frame. +If @var{count} is @code{nil} (or a non-@code{nil} list), +@code{recenter} puts the line containing point in the middle of the +window. If @var{count} is @code{nil}, this function may redraw the +frame, according to the value of @code{recenter-redisplay}. When @code{recenter} is called interactively, @var{count} is the raw prefix argument. Thus, typing @kbd{C-u} as the prefix sets the @@ -2704,22 +2703,32 @@ prefix argument. Thus, typing @kbd{C-u} as the prefix sets the top. With an argument of zero, @code{recenter} positions the current line at -the top of the window. This action is so handy that some people make a -separate key binding to do this. For example, - -@example -@group -(defun line-to-top-of-window () - "Scroll current line to top of window. -Replaces three keystroke sequence C-u 0 C-l." - (interactive) - (recenter 0)) - -(global-set-key [kp-multiply] 'line-to-top-of-window) -@end group -@end example +the top of the window. The command @code{recenter-top-bottom} offers +a more convenient way to achieve this. @end deffn +@defopt recenter-redisplay +If this variable is non-@code{nil}, calling @code{recenter} with a +@code{nil} argument redraws the frame. The default value is +@code{tty}, which means only redraw the frame if it is a tty frame. +@end defopt + +@deffn Command recenter-top-bottom &optional count +This command, which is the default binding for @kbd{C-l}, acts like +@code{recenter}, except if called with no argument. In that case, +successive calls place point according to the cycling order defined +by the variable @code{recenter-positions}. +@end deffn + +@defopt recenter-positions +This variable controls how @code{recenter-top-bottom} behaves when +called with no argument. The default value is @code{(middle top +bottom)}, which means that successive calls of +@code{recenter-top-bottom} with no argument cycle between placing +point at the middle, top, and bottom of the window. +@end defopt + + @node Vertical Scrolling @section Vertical Fractional Scrolling @cindex vertical fractional scrolling @@ -3005,7 +3014,7 @@ frame. @defun coordinates-in-window-p coordinates window This function checks whether a window @var{window} occupies the -frame-relative coordinates @var{coordinates}, and if so which part of +frame-relative coordinates @var{coordinates}, and if so, which part of the window that is. @var{window} should be a live window. @var{coordinates} should be a cons cell of the form @code{(@var{x} . @var{y})}, where @var{x} and @var{y} are frame-relative coordinates. @@ -3103,14 +3112,14 @@ for the current buffer. You can bring back an entire frame layout by restoring a previously saved window configuration. If you want to record the layout of all frames instead of just one, use a frame configuration instead of a -window configuration; see @ref{Frame Configurations}. +window configuration. @xref{Frame Configurations}. @defun current-window-configuration &optional frame This function returns a new object representing @var{frame}'s current window configuration. The default for @var{frame} is the selected frame. The variable @code{window-persistent-parameters} specifies -whether and which window parameters are saved by this function, see -@ref{Window Parameters} for details. +which window parameters (if any) are saved by this function. +@xref{Window Parameters}. @end defun @defun set-window-configuration configuration @@ -3127,7 +3136,7 @@ change and triggers execution of the @code{window-size-change-functions} know how to tell whether the new configuration actually differs from the old one. -If the frame which @var{configuration} was saved from is dead, all this +If the frame from which @var{configuration} was saved is dead, all this function does is restore the three variables @code{window-min-height}, @code{window-min-width} and @code{minibuffer-scroll-window}. In this case, the function returns @code{nil}. Otherwise, it returns @code{t}. @@ -3212,8 +3221,8 @@ configurations. The objects returned by @code{current-window-configuration} die together with the Emacs process. In order to store a window -configuration on disk and read it back in another Emacs session, the -functions described next can be used. These functions are also useful +configuration on disk and read it back in another Emacs session, you +can use the functions described next. These functions are also useful to clone the state of a frame into an arbitrary live window (@code{set-window-configuration} effectively clones the windows of a frame into the root window of that very frame only). @@ -3230,13 +3239,13 @@ state will be written to disk and read back in another session. Together, the argument @var{writable} and the variable @code{window-persistent-parameters} specify which window parameters are -saved by this function, see @ref{Window Parameters} for details. +saved by this function. @xref{Window Parameters}. @end defun The value returned by @code{window-state-get} can be used in the same session to make a clone of a window in another window. It can be also written to disk and read back in another session. In either case, use -the function described next to restore the state of the window. +the following function to restore the state of the window. @defun window-state-put state &optional window ignore This function puts the window state @var{state} into @var{window}. The @@ -3245,9 +3254,9 @@ earlier invocation of @code{window-state-get}, see above. The optional argument @var{window} must specify a live window and defaults to the selected one. -The optional argument @var{ignore} non-@code{nil} means to ignore -minimum window sizes and fixed size restrictions. If @var{ignore} -equals @code{safe}, this means windows can get as small as one line +If the optional argument @var{ignore} is non-@code{nil}, it means to ignore +minimum window sizes and fixed-size restrictions. If @var{ignore} +is @code{safe}, this means windows can get as small as one line and/or two columns. @end defun @@ -3267,8 +3276,8 @@ setting for @var{parameter}, this function returns @code{nil}. @defun window-parameters &optional window This function returns all parameters of @var{window} and their values. -The default for @var{window} is the selected window. The return value, -if non-@code{nil} is an association list whose elements have the form +The default for @var{window} is the selected window. The return value +is either @code{nil}, or an association list whose elements have the form @code{(@var{parameter} . @var{value})}. @end defun @@ -3278,34 +3287,34 @@ This function sets @var{window}'s value of @var{parameter} to is the selected window. @end defun -By default, functions saving and restoring window configurations or the +By default, the functions that save and restore window configurations or the states of windows (@pxref{Window Configurations}) do not care about -window parameters. This means, that when you change the value of a +window parameters. This means that when you change the value of a parameter within the body of a @code{save-window-excursion}, the -previous value is not restored upon exit of that macro. It also means +previous value is not restored when that macro exits. It also means that when you restore via @code{window-state-put} a window state saved earlier by @code{window-state-get}, all cloned windows have their -parameters reset to @code{nil}. The following variable allows to -override the standard behavior. +parameters reset to @code{nil}. The following variable allows you to +override the standard behavior: @defvar window-persistent-parameters This variable is an alist specifying which parameters get saved by -@code{current-window-configuration} and @code{window-state-get} and +@code{current-window-configuration} and @code{window-state-get}, and subsequently restored by @code{set-window-configuration} and -@code{window-state-put}, see @ref{Window Configurations}. +@code{window-state-put}. @xref{Window Configurations}. -The @sc{car} of each entry of this alist is the symbol specifying the +The @sc{car} of each entry of this alist is a symbol specifying the parameter. The @sc{cdr} should be one of the following: @table @asis @item @code{nil} -This value means the parameter is neither saved by +This value means the parameter is saved neither by @code{window-state-get} nor by @code{current-window-configuration}. @item @code{t} This value specifies that the parameter is saved by -@code{current-window-configuration} and, provided its @var{writable} -argument is @code{nil}, by @code{window-state-get}. +@code{current-window-configuration} and (provided its @var{writable} +argument is @code{nil}) by @code{window-state-get}. @item @code{writable} This means that the parameter is saved unconditionally by both @@ -3316,8 +3325,8 @@ may fail with an @code{invalid-read-syntax} error. @end table @end defvar -Some functions, notably @code{delete-window}, -@code{delete-other-windows} and @code{split-window} may behave specially +Some functions (notably @code{delete-window}, +@code{delete-other-windows} and @code{split-window}), may behave specially when their @var{window} argument has a parameter set. You can override such special behavior by binding the following variable to a non-@code{nil} value: @@ -3325,7 +3334,7 @@ non-@code{nil} value: @defvar ignore-window-parameters If this variable is non-@code{nil}, some standard functions do not process window parameters. The functions currently affected by this are -@code{split-window}, @code{delete-window}, @code{delete-other-windows} +@code{split-window}, @code{delete-window}, @code{delete-other-windows}, and @code{other-window}. An application can bind this variable to a non-@code{nil} value around @@ -3359,18 +3368,19 @@ This parameter marks the window as not selectable by @code{other-window} (@pxref{Cyclic Window Ordering}). @item @code{clone-of} -This parameter specifies the window this one has been cloned from and is -installed by @code{window-state-get}, see @ref{Window Configurations}. +This parameter specifies the window that this one has been cloned +from. It is installed by @code{window-state-get} (@pxref{Window +Configurations}). @item @code{quit-restore} -This parameter tells how to proceed with a window when the buffer it -shows is no more needed. It is installed by the buffer display -functions (@pxref{Choosing Window}) and consulted by the function +This parameter specifies what to do with a window when the buffer it +shows is not needed any more. It is installed by the buffer display +functions (@pxref{Choosing Window}), and consulted by the function @code{quit-window} (@pxref{Quitting Windows}). @end table -In addition, the parameters @code{window-atom} and @code{window-side} -are reserved and should not be used by applications. +There are additional parameters @code{window-atom} and @code{window-side}; +these are reserved and should not be used by applications. @node Window Hooks @@ -3392,7 +3402,7 @@ the window also runs these functions. This variable is not a normal hook, because each function is called with two arguments: the window, and its new display-start position. -These functions must be careful in using @code{window-end} +These functions must take care when using @code{window-end} (@pxref{Window Start and End}); if you need an up-to-date value, you must use the @var{update} argument to ensure you get it. @@ -3430,7 +3440,7 @@ of an existing frame. This includes splitting or deleting windows, changing the sizes of windows, or displaying a different buffer in a window. -The buffer-local part of this hook is run once per each window on the +The buffer-local part of this hook is run once for each window on the affected frame, with the relevant window selected and its buffer current. The global part is run once for the modified frame, with that frame selected. From a2715669792e0c866e16927914f72b4fc6249afa Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 21 Apr 2012 12:34:05 -0700 Subject: [PATCH 126/564] * doc/lispref/macros.texi (Indenting Macros): Fix typo. --- doc/lispref/ChangeLog | 2 ++ doc/lispref/macros.texi | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 7b30b0e7ac3..fa2b3386d19 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,5 +1,7 @@ 2012-04-21 Glenn Morris + * macros.texi (Indenting Macros): Fix typo. + * windows.texi (Basic Windows, Windows and Frames, Window Sizes) (Resizing Windows, Deleting Windows, Selecting Windows) (Choosing Window Options, Horizontal Scrolling) diff --git a/doc/lispref/macros.texi b/doc/lispref/macros.texi index a71d3379b80..b87e9f228f3 100644 --- a/doc/lispref/macros.texi +++ b/doc/lispref/macros.texi @@ -605,7 +605,7 @@ either. @section Indenting Macros Within a macro definition, you can use the @code{declare} form -(@pxref{Defining Macros}) to specify how to @key{TAB} should indent +(@pxref{Defining Macros}) to specify how @key{TAB} should indent calls to the macro. An indentation specification is written like this: @example From d6d0cf1f187c03656b65dfd7e1f547e798d6f877 Mon Sep 17 00:00:00 2001 From: Bastien Guerry Date: Sun, 22 Apr 2012 01:06:59 +0200 Subject: [PATCH 127/564] Remove wrong ChangeLog entry in lisp/org/ChangeLog. Thanks to Stephen Berman for pointing this. --- lisp/org/ChangeLog | 5 ----- 1 file changed, 5 deletions(-) diff --git a/lisp/org/ChangeLog b/lisp/org/ChangeLog index 0e80ea2fa2e..044bd383df9 100644 --- a/lisp/org/ChangeLog +++ b/lisp/org/ChangeLog @@ -935,11 +935,6 @@ * org-footnote.el (org-footnote-normalize): Make sure that footnotes are moved to a single place during export. -2012-04-01 Bastien Guerry - - * org.el (org-cycle-internal-global): Prevent the display of - messages when cycling from with a Gnus article buffer. - 2012-04-01 Nicolas Goaziou * org-footnote.el (org-footnote-normalize): Ensure footnote From 5790543d1fa79f5302c2415fd0d3294796008eda Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sat, 21 Apr 2012 18:27:10 -0700 Subject: [PATCH 128/564] * sysdep.c [__FreeBSD__]: Minor cleanups. (list_system_processes, system_process_attributes) [__FreeBSD__]: Use Emacs indenting style more consistently. Avoid some casts. Use 'double' consistently rather than mixing 'float' and 'double'. --- src/ChangeLog | 7 ++++ src/sysdep.c | 95 ++++++++++++++++++++++++++------------------------- 2 files changed, 56 insertions(+), 46 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index a2c68317434..549a5787a52 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2012-04-22 Paul Eggert + + * sysdep.c [__FreeBSD__]: Minor cleanups. + (list_system_processes, system_process_attributes) [__FreeBSD__]: + Use Emacs indenting style more consistently. Avoid some casts. + Use 'double' consistently rather than mixing 'float' and 'double'. + 2012-04-21 Eduard Wiebe * sysdep.c (list_system_processes, system_process_attributes): Add diff --git a/src/sysdep.c b/src/sysdep.c index fdc04f6655d..d33e7a21acc 100644 --- a/src/sysdep.c +++ b/src/sysdep.c @@ -2536,10 +2536,10 @@ list_system_processes (void) return proclist; } -#elif defined (__FreeBSD__) +#elif defined __FreeBSD__ Lisp_Object -list_system_processes () +list_system_processes (void) { int mib[] = {CTL_KERN, KERN_PROC, KERN_PROC_PROC}; size_t len; @@ -2551,20 +2551,20 @@ list_system_processes () if (sysctl (mib, 3, NULL, &len, NULL, 0) != 0) return proclist; - + procs = xmalloc (len); if (sysctl (mib, 3, procs, &len, NULL, 0) != 0) { xfree (procs); return proclist; } - + GCPRO1 (proclist); len /= sizeof (struct kinfo_proc); for (i = 0; i < len; i++) proclist = Fcons (make_fixnum_or_float (procs[i].ki_pid), proclist); UNGCPRO; - + xfree (procs); return proclist; @@ -3120,13 +3120,13 @@ system_process_attributes (Lisp_Object pid) return attrs; } -#elif defined(__FreeBSD__) +#elif defined __FreeBSD__ Lisp_Object system_process_attributes (Lisp_Object pid) { int proc_id; - int pagesize = getpagesize(); + int pagesize = getpagesize (); int npages; int fscale; struct passwd *pw; @@ -3135,33 +3135,33 @@ system_process_attributes (Lisp_Object pid) size_t len; char args[MAXPATHLEN]; EMACS_TIME t, now; - + int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PID}; struct kinfo_proc proc; - size_t proclen = sizeof(proc); + size_t proclen = sizeof proc; struct gcpro gcpro1, gcpro2; Lisp_Object attrs = Qnil; Lisp_Object decoded_comm; - + CHECK_NUMBER_OR_FLOAT (pid); proc_id = FLOATP (pid) ? XFLOAT_DATA (pid) : XINT (pid); mib[3] = proc_id; - + if (sysctl (mib, 4, &proc, &proclen, NULL, 0) != 0) return attrs; GCPRO2 (attrs, decoded_comm); - - attrs = Fcons (Fcons (Qeuid, make_fixnum_or_float(proc.ki_uid)), attrs); - + + attrs = Fcons (Fcons (Qeuid, make_fixnum_or_float (proc.ki_uid)), attrs); + BLOCK_INPUT; pw = getpwuid (proc.ki_uid); UNBLOCK_INPUT; if (pw) attrs = Fcons (Fcons (Quser, build_string (pw->pw_name)), attrs); - attrs = Fcons (Fcons (Qegid, make_fixnum_or_float(proc.ki_svgid)), attrs); + attrs = Fcons (Fcons (Qegid, make_fixnum_or_float (proc.ki_svgid)), attrs); BLOCK_INPUT; gr = getgrgid (proc.ki_svgid); @@ -3172,7 +3172,7 @@ system_process_attributes (Lisp_Object pid) decoded_comm = code_convert_string_norecord (make_unibyte_string (proc.ki_comm, strlen (proc.ki_comm)), Vlocale_coding_system, 0); - + attrs = Fcons (Fcons (Qcomm, decoded_comm), attrs); { char state[2] = {'\0', '\0'}; @@ -3185,7 +3185,7 @@ system_process_attributes (Lisp_Object pid) case SSLEEP: state[0] = 'S'; break; - + case SLOCK: state[0] = 'D'; break; @@ -3193,14 +3193,14 @@ system_process_attributes (Lisp_Object pid) case SZOMB: state[0] = 'Z'; break; - + case SSTOP: state[0] = 'T'; break; } attrs = Fcons (Fcons (Qstate, build_string (state)), attrs); } - + attrs = Fcons (Fcons (Qppid, make_fixnum_or_float (proc.ki_ppid)), attrs); attrs = Fcons (Fcons (Qpgrp, make_fixnum_or_float (proc.ki_pgid)), attrs); attrs = Fcons (Fcons (Qsess, make_fixnum_or_float (proc.ki_sid)), attrs); @@ -3210,7 +3210,7 @@ system_process_attributes (Lisp_Object pid) UNBLOCK_INPUT; if (ttyname) attrs = Fcons (Fcons (Qtty, build_string (ttyname)), attrs); - + attrs = Fcons (Fcons (Qtpgid, make_fixnum_or_float (proc.ki_tpgid)), attrs); attrs = Fcons (Fcons (Qminflt, make_fixnum_or_float (proc.ki_rusage.ru_minflt)), attrs); attrs = Fcons (Fcons (Qmajflt, make_fixnum_or_float (proc.ki_rusage.ru_majflt)), attrs); @@ -3222,50 +3222,52 @@ system_process_attributes (Lisp_Object pid) make_number (EMACS_SECS (ts) & 0xffff), \ make_number (EMACS_USECS (ts))) - attrs = Fcons (Fcons (Qutime, TIMELIST(proc.ki_rusage.ru_utime)), attrs); - attrs = Fcons (Fcons (Qstime, TIMELIST(proc.ki_rusage.ru_stime)), attrs); + attrs = Fcons (Fcons (Qutime, TIMELIST (proc.ki_rusage.ru_utime)), attrs); + attrs = Fcons (Fcons (Qstime, TIMELIST (proc.ki_rusage.ru_stime)), attrs); EMACS_ADD_TIME (t, proc.ki_rusage.ru_utime, proc.ki_rusage.ru_stime); - attrs = Fcons (Fcons (Qtime, TIMELIST(t)), attrs); + attrs = Fcons (Fcons (Qtime, TIMELIST (t)), attrs); - attrs = Fcons (Fcons (Qcutime, TIMELIST(proc.ki_rusage_ch.ru_utime)), attrs); - attrs = Fcons (Fcons (Qcstime, TIMELIST(proc.ki_rusage_ch.ru_utime)), attrs); + attrs = Fcons (Fcons (Qcutime, TIMELIST (proc.ki_rusage_ch.ru_utime)), attrs); + attrs = Fcons (Fcons (Qcstime, TIMELIST (proc.ki_rusage_ch.ru_utime)), attrs); EMACS_ADD_TIME (t, proc.ki_rusage_ch.ru_utime, proc.ki_rusage_ch.ru_stime); - attrs = Fcons (Fcons (Qctime, TIMELIST(t)), attrs); + attrs = Fcons (Fcons (Qctime, TIMELIST (t)), attrs); - attrs = Fcons (Fcons (Qthcount, make_fixnum_or_float (proc.ki_numthreads)), attrs); + attrs = Fcons (Fcons (Qthcount, make_fixnum_or_float (proc.ki_numthreads)), + attrs); attrs = Fcons (Fcons (Qpri, make_number (proc.ki_pri.pri_native)), attrs); attrs = Fcons (Fcons (Qnice, make_number (proc.ki_nice)), attrs); - attrs = Fcons (Fcons (Qstart, TIMELIST(proc.ki_start)), attrs); + attrs = Fcons (Fcons (Qstart, TIMELIST (proc.ki_start)), attrs); attrs = Fcons (Fcons (Qvsize, make_number (proc.ki_size >> 10)), attrs); - attrs = Fcons (Fcons (Qrss, make_number (proc.ki_rssize * pagesize >> 10)), attrs); + attrs = Fcons (Fcons (Qrss, make_number (proc.ki_rssize * pagesize >> 10)), + attrs); EMACS_GET_TIME (now); EMACS_SUB_TIME (t, now, proc.ki_start); - attrs = Fcons (Fcons (Qetime, TIMELIST(t)), attrs); + attrs = Fcons (Fcons (Qetime, TIMELIST (t)), attrs); #undef TIMELIST - - len = sizeof(fscale); + + len = sizeof fscale; if (sysctlbyname ("kern.fscale", &fscale, &len, NULL, 0) == 0) { - float pcpu; + double pcpu; fixpt_t ccpu; - len = sizeof (ccpu); + len = sizeof ccpu; if (sysctlbyname ("kern.ccpu", &ccpu, &len, NULL, 0) == 0) { - pcpu = 100.0 * ((double) proc.ki_pctcpu / fscale) - / (1.0 - exp(proc.ki_swtime * log((double) ccpu / fscale))); - attrs = Fcons (Fcons (Qpcpu, make_fixnum_or_float(pcpu)), attrs); + pcpu = (100.0 * proc.ki_pctcpu / fscale + / (1 - exp (proc.ki_swtime * log ((double) ccpu / fscale)))); + attrs = Fcons (Fcons (Qpcpu, make_fixnum_or_float (pcpu)), attrs); } } - len = sizeof(npages); + len = sizeof npages; if (sysctlbyname ("hw.availpages", &npages, &len, NULL, 0) == 0) { - float pmem = proc.ki_flag & P_INMEM - ? 100.0 * ((float) proc.ki_rssize / npages) - : 0.0; - attrs = Fcons (Fcons (Qpmem, make_fixnum_or_float(pmem)), attrs); + double pmem = (proc.ki_flag & P_INMEM + ? 100.0 * proc.ki_rssize / npages + : 0); + attrs = Fcons (Fcons (Qpmem, make_fixnum_or_float (pmem)), attrs); } mib[2] = KERN_PROC_ARGS; @@ -3279,13 +3281,14 @@ system_process_attributes (Lisp_Object pid) args[i] = ' '; } - decoded_comm = code_convert_string_norecord - (make_unibyte_string (args, strlen (args)), - Vlocale_coding_system, 0); + decoded_comm = + (code_convert_string_norecord + (make_unibyte_string (args, strlen (args)), + Vlocale_coding_system, 0)); attrs = Fcons (Fcons (Qargs, decoded_comm), attrs); } - + UNGCPRO; return attrs; } From f01769f9ca9cc718cc5ae3c9b6f2669ad8d93c24 Mon Sep 17 00:00:00 2001 From: Leo Liu Date: Sun, 22 Apr 2012 10:58:23 +0800 Subject: [PATCH 129/564] * src/sysdep.c (list_system_processes): Support Darwin. Fixes: debbugs:5725 --- src/ChangeLog | 4 ++++ src/sysdep.c | 18 ++++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 549a5787a52..a5777058d9c 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2012-04-22 Leo Liu + + * sysdep.c (list_system_processes): Support Darwin (Bug#5725). + 2012-04-22 Paul Eggert * sysdep.c [__FreeBSD__]: Minor cleanups. diff --git a/src/sysdep.c b/src/sysdep.c index d33e7a21acc..81529fc7d9b 100644 --- a/src/sysdep.c +++ b/src/sysdep.c @@ -44,6 +44,10 @@ along with GNU Emacs. If not, see . */ #include #endif +#ifdef DARWIN_OS +#include +#endif + #ifdef WINDOWSNT #define read sys_read #define write sys_write @@ -2536,12 +2540,16 @@ list_system_processes (void) return proclist; } -#elif defined __FreeBSD__ +#elif defined BSD_SYSTEM Lisp_Object list_system_processes (void) { +#ifdef DARWIN_OS + int mib[] = {CTL_KERN, KERN_PROC, KERN_PROC_ALL}; +#else int mib[] = {CTL_KERN, KERN_PROC, KERN_PROC_PROC}; +#endif size_t len; struct kinfo_proc *procs; size_t i; @@ -2562,7 +2570,13 @@ list_system_processes (void) GCPRO1 (proclist); len /= sizeof (struct kinfo_proc); for (i = 0; i < len; i++) - proclist = Fcons (make_fixnum_or_float (procs[i].ki_pid), proclist); + { +#ifdef DARWIN_OS + proclist = Fcons (make_fixnum_or_float (procs[i].kp_proc.p_pid), proclist); +#else + proclist = Fcons (make_fixnum_or_float (procs[i].ki_pid), proclist); +#endif + } UNGCPRO; xfree (procs); From 4b5b5289577b4cc89ee45595832f943ef9a43de6 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sat, 21 Apr 2012 23:56:42 -0700 Subject: [PATCH 130/564] * configure.in (doug_lea_malloc): Check for __malloc_initialize_hook. With glibc 2.14 or later, when compiled with GCC 4.7.0's -Werror=deprecated-declarations flag, use of hooks like __malloc_initialize_hook causes compilation to fail because these hooks are deprecated. Modify 'configure' to check for these hooks too. Simplify the 'configure' code to test for all the hooks at once. (emacs_cv_var___after_morecore_hook): Remove, replacing with ... (emacs_cv_var_doug_lea_malloc): ... this new var. --- ChangeLog | 11 +++++++++++ configure.in | 25 ++++++++++++++----------- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index ca3bcff5a8c..19975429260 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2012-04-22 Paul Eggert + + * configure.in (doug_lea_malloc): Check for __malloc_initialize_hook. + With glibc 2.14 or later, when compiled with GCC 4.7.0's + -Werror=deprecated-declarations flag, use of hooks like + __malloc_initialize_hook causes compilation to fail because these + hooks are deprecated. Modify 'configure' to check for these hooks too. + Simplify the 'configure' code to test for all the hooks at once. + (emacs_cv_var___after_morecore_hook): Remove, replacing with ... + (emacs_cv_var_doug_lea_malloc): ... this new var. + 2012-04-21 Paul Eggert Sync from gnulib version 4f11d6bebc3098c64ffde27079ab0d0cecfd0cdc diff --git a/configure.in b/configure.in index c9592921e75..e4e11bdf7b5 100644 --- a/configure.in +++ b/configure.in @@ -1708,17 +1708,20 @@ esac # Do the opsystem or machine files prohibit the use of the GNU malloc? # Assume not, until told otherwise. GNU_MALLOC=yes -doug_lea_malloc=yes -AC_CHECK_FUNC(malloc_get_state, ,doug_lea_malloc=no) -AC_CHECK_FUNC(malloc_set_state, ,doug_lea_malloc=no) -AC_CACHE_CHECK(whether __after_morecore_hook exists, - emacs_cv_var___after_morecore_hook, -[AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern void (* __after_morecore_hook)();]],[[__after_morecore_hook = 0]])], - emacs_cv_var___after_morecore_hook=yes, - emacs_cv_var___after_morecore_hook=no)]) -if test $emacs_cv_var___after_morecore_hook = no; then - doug_lea_malloc=no -fi + +AC_CACHE_CHECK( + [whether malloc is Doug Lea style], + [emacs_cv_var_doug_lea_malloc], + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include + static void hook (void) {}]], + [[malloc_set_state (malloc_get_state ()); + __after_morecore_hook = hook; + __malloc_initialize_hook = hook;]])], + [emacs_cv_var_doug_lea_malloc=yes], + [emacs_cv_var_doug_lea_malloc=no])]) +doug_lea_malloc=$emacs_cv_var_doug_lea_malloc dnl See comments in aix4-2.h about maybe using system malloc there. From d55486c7f89d12ab799c7bf631b86fb0ccf52e52 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Sun, 22 Apr 2012 15:19:29 +0800 Subject: [PATCH 131/564] * simple.el (delete-active-region): Move to killing custom group. --- lisp/ChangeLog | 4 ++++ lisp/simple.el | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 020e5c4b9bc..eb293610a67 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-04-22 Chong Yidong + + * simple.el (delete-active-region): Move to killing custom group. + 2012-04-21 Andreas Schwab * progmodes/which-func.el (which-func-current): Quote % diff --git a/lisp/simple.el b/lisp/simple.el index 0ee19b71636..4187e296439 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -817,7 +817,7 @@ instead of deleted." :type '(choice (const :tag "Delete active region" t) (const :tag "Kill active region" kill) (const :tag "Do ordinary deletion" nil)) - :group 'editing + :group 'killing :version "24.1") (defun delete-backward-char (n &optional killflag) From 52828e02c36f599bfe75a527fecc16ace3fb6323 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sun, 22 Apr 2012 00:41:30 -0700 Subject: [PATCH 132/564] * alloc.c: Handle unusual debugging option combinations. (GC_CHECK_MARKED_OBJECTS): Undef if ! GC_MARK_STACK, since the two debugging options are incompatible. (GC_MALLOC_CHECK): Similarly, undef if GC_CHECK_MARKED_OBJECTS is defined. (mem_init, mem_insert, mem_insert_fixup): Define if GC_MARK_STACK || GC_MALLOC_CHECK. (NEED_MEM_INSERT): Remove; no longer needed. --- src/ChangeLog | 11 +++++++++++ src/alloc.c | 23 ++++++++++++----------- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index a5777058d9c..fb7498b6298 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,14 @@ +2012-04-22 Paul Eggert + + * alloc.c: Handle unusual debugging option combinations. + (GC_CHECK_MARKED_OBJECTS): Undef if ! GC_MARK_STACK, + since the two debugging options are incompatible. + (GC_MALLOC_CHECK): Similarly, undef if GC_CHECK_MARKED_OBJECTS + is defined. + (mem_init, mem_insert, mem_insert_fixup): + Define if GC_MARK_STACK || GC_MALLOC_CHECK. + (NEED_MEM_INSERT): Remove; no longer needed. + 2012-04-22 Leo Liu * sysdep.c (list_system_processes): Support Darwin (Bug#5725). diff --git a/src/alloc.c b/src/alloc.c index 400b11c296a..b029343a848 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -49,10 +49,18 @@ along with GNU Emacs. If not, see . */ #include #include -/* GC_MALLOC_CHECK defined means perform validity checks of malloc'd - memory. Can do this only if using gmalloc.c. */ +/* GC_CHECK_MARKED_OBJECTS means do sanity checks on allocated objects. + Doable only if GC_MARK_STACK. */ +#if ! GC_MARK_STACK +# undef GC_CHECK_MARKED_OBJECTS +#endif -#if defined SYSTEM_MALLOC || defined DOUG_LEA_MALLOC +/* GC_MALLOC_CHECK defined means perform validity checks of malloc'd + memory. Can do this only if using gmalloc.c and if not checking + marked objects. */ + +#if (defined SYSTEM_MALLOC || defined DOUG_LEA_MALLOC \ + || defined GC_CHECK_MARKED_OBJECTS) #undef GC_MALLOC_CHECK #endif @@ -391,11 +399,8 @@ static int live_float_p (struct mem_node *, void *); static int live_misc_p (struct mem_node *, void *); static void mark_maybe_object (Lisp_Object); static void mark_memory (void *, void *); +#if GC_MARK_STACK || defined GC_MALLOC_CHECK static void mem_init (void); -#if (defined GC_MALLOC_CHECK \ - ? !defined SYSTEM_MALLOC && !defined SYNC_INPUT \ - : GC_MARK_STACK) -# define NEED_MEM_INSERT static struct mem_node *mem_insert (void *, void *, enum mem_type); static void mem_insert_fixup (struct mem_node *); #endif @@ -3578,8 +3583,6 @@ mem_find (void *start) } -#ifdef NEED_MEM_INSERT - /* Insert a new node into the tree for a block of memory with start address START, end address END, and type TYPE. Value is a pointer to the node that was inserted. */ @@ -3727,8 +3730,6 @@ mem_insert_fixup (struct mem_node *x) mem_root->color = MEM_BLACK; } -#endif /* NEED_MEM_INSERT */ - /* (x) (y) / \ / \ From da05bc4c1f811079e53dbda24fb3661714f6bde1 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sun, 22 Apr 2012 00:50:17 -0700 Subject: [PATCH 133/564] Fix GC_MALLOC_CHECK debugging output on 64-bit hosts. * alloc.c (emacs_blocked_malloc) [GC_MALLOC_CHECK]: Do not assume ptrdiff_t is the same width as 'int'. --- src/ChangeLog | 4 ++++ src/alloc.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index fb7498b6298..a1220aeaa7d 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,9 @@ 2012-04-22 Paul Eggert + Fix GC_MALLOC_CHECK debugging output on 64-bit hosts. + * alloc.c (emacs_blocked_malloc) [GC_MALLOC_CHECK]: + Do not assume ptrdiff_t is the same width as 'int'. + * alloc.c: Handle unusual debugging option combinations. (GC_CHECK_MARKED_OBJECTS): Undef if ! GC_MARK_STACK, since the two debugging options are incompatible. diff --git a/src/alloc.c b/src/alloc.c index b029343a848..6c9af7b71fa 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -1314,7 +1314,7 @@ emacs_blocked_malloc (size_t size, const void *ptr) { fprintf (stderr, "Malloc returned %p which is already in use\n", value); - fprintf (stderr, "Region in use is %p...%p, %u bytes, type %d\n", + fprintf (stderr, "Region in use is %p...%p, %td bytes, type %d\n", m->start, m->end, (char *) m->end - (char *) m->start, m->type); abort (); From ac1ca7e94815497da2cb01d48b51faa68d0fe1cb Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sun, 22 Apr 2012 06:18:54 -0400 Subject: [PATCH 134/564] Auto-commit of generated files. --- autogen/Makefile.in | 2 +- autogen/configure | 46 +++++++++++++++++---------------------------- 2 files changed, 18 insertions(+), 30 deletions(-) diff --git a/autogen/Makefile.in b/autogen/Makefile.in index d395a17bef9..597fa3ec6aa 100644 --- a/autogen/Makefile.in +++ b/autogen/Makefile.in @@ -36,7 +36,7 @@ # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. -# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --avoid=msvc-inval --avoid=msvc-nothrow --avoid=raise --avoid=threadlib --makefile-name=gnulib.mk --conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca-opt careadlinkat crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 dtoastr dup2 filemode getloadavg getopt-gnu ignore-value intprops lstat mktime pthread_sigmask readlink socklen stdarg stdio strftime strtoimax strtoumax symlink sys_stat +# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --avoid=msvc-inval --avoid=msvc-nothrow --avoid=raise --avoid=threadlib --makefile-name=gnulib.mk --conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca-opt careadlinkat crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 dtoastr dup2 filemode getloadavg getopt-gnu ignore-value intprops lstat manywarnings mktime pthread_sigmask readlink socklen stdarg stdio strftime strtoimax strtoumax symlink sys_stat warnings VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ diff --git a/autogen/configure b/autogen/configure index 0d9d1abdaa4..52575eb075b 100755 --- a/autogen/configure +++ b/autogen/configure @@ -628,6 +628,7 @@ gl_GNULIB_ENABLED_dosname_FALSE gl_GNULIB_ENABLED_dosname_TRUE LTLIBINTL LIBINTL +WARN_CFLAGS HAVE_UNISTD_H NEXT_AS_FIRST_DIRECTIVE_UNISTD_H NEXT_UNISTD_H @@ -1186,7 +1187,6 @@ HAVE_MAKEINFO GZIP_PROG INSTALL_INFO GNULIB_WARN_CFLAGS -WARN_CFLAGS WERROR_CFLAGS RANLIB ARFLAGS @@ -6962,6 +6962,7 @@ esac # Code from module largefile: # Code from module lstat: + # Code from module manywarnings: # Code from module mktime: # Code from module multiarch: # Code from module nocrash: @@ -6998,6 +6999,7 @@ esac # Code from module u64: # Code from module unistd: # Code from module verify: + # Code from module warnings: # On Suns, sometimes $CPP names a directory. @@ -7717,8 +7719,6 @@ fi - - $as_echo "#define lint 1" >>confdefs.h @@ -10527,50 +10527,37 @@ esac # Do the opsystem or machine files prohibit the use of the GNU malloc? # Assume not, until told otherwise. GNU_MALLOC=yes -doug_lea_malloc=yes -ac_fn_c_check_func "$LINENO" "malloc_get_state" "ac_cv_func_malloc_get_state" -if test "x$ac_cv_func_malloc_get_state" = x""yes; then : -else - doug_lea_malloc=no -fi - -ac_fn_c_check_func "$LINENO" "malloc_set_state" "ac_cv_func_malloc_set_state" -if test "x$ac_cv_func_malloc_set_state" = x""yes; then : - -else - doug_lea_malloc=no -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __after_morecore_hook exists" >&5 -$as_echo_n "checking whether __after_morecore_hook exists... " >&6; } -if test "${emacs_cv_var___after_morecore_hook+set}" = set; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether malloc is Doug Lea style" >&5 +$as_echo_n "checking whether malloc is Doug Lea style... " >&6; } +if test "${emacs_cv_var_doug_lea_malloc+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -extern void (* __after_morecore_hook)(); +#include + static void hook (void) {} int main () { -__after_morecore_hook = 0 +malloc_set_state (malloc_get_state ()); + __after_morecore_hook = hook; + __malloc_initialize_hook = hook; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : - emacs_cv_var___after_morecore_hook=yes + emacs_cv_var_doug_lea_malloc=yes else - emacs_cv_var___after_morecore_hook=no + emacs_cv_var_doug_lea_malloc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $emacs_cv_var___after_morecore_hook" >&5 -$as_echo "$emacs_cv_var___after_morecore_hook" >&6; } -if test $emacs_cv_var___after_morecore_hook = no; then - doug_lea_malloc=no -fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $emacs_cv_var_doug_lea_malloc" >&5 +$as_echo "$emacs_cv_var_doug_lea_malloc" >&6; } +doug_lea_malloc=$emacs_cv_var_doug_lea_malloc system_malloc=no @@ -22368,6 +22355,7 @@ $as_echo "$gl_cv_next_unistd_h" >&6; } + gl_gnulib_enabled_dosname=false gl_gnulib_enabled_be453cec5eecf5731a274f2de7f2db36=false gl_gnulib_enabled_pathmax=false From 583e23bd57621892cce187359afd952f7850e7bc Mon Sep 17 00:00:00 2001 From: Alan Mackenzie Date: Sun, 22 Apr 2012 11:13:09 +0000 Subject: [PATCH 135/564] CC Mode. Adding a ) can hide the resulting (..) from searches. Fix it. --- lisp/ChangeLog | 6 +++++ lisp/progmodes/cc-engine.el | 44 +++++++++++++++++++++++++++++-------- 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 2ffd9ce77a8..d5576370727 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2012-04-22 Alan Mackenzie + + * progmodes/cc-engine.el (c-append-lower-brace-pair-to-state-cache): + Adding a ) can hide the resulting (..) from searches. Fix it. + Bound the backward search to the position of the existing (. + 2012-04-21 Juanma Barranquero * progmodes/verilog-mode.el (verilog-mode): Check whether diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el index 65e28c11e21..82aee7bdbb9 100644 --- a/lisp/progmodes/cc-engine.el +++ b/lisp/progmodes/cc-engine.el @@ -2612,13 +2612,24 @@ comment at the start of cc-engine.el for more info." (setq c-state-point-min (point-min))) (defun c-append-lower-brace-pair-to-state-cache (from &optional upper-lim) - ;; If there is a brace pair preceding FROM in the buffer (not necessarily - ;; immediately preceding), push a cons onto `c-state-cache' to represent it. - ;; FROM must not be inside a literal. If UPPER-LIM is non-nil, we append - ;; the highest brace pair whose "}" is below UPPER-LIM. + ;; If there is a brace pair preceding FROM in the buffer, at the same level + ;; of nesting (not necessarily immediately preceding), push a cons onto + ;; `c-state-cache' to represent it. FROM must not be inside a literal. If + ;; UPPER-LIM is non-nil, we append the highest brace pair whose "}" is below + ;; UPPER-LIM. ;; ;; Return non-nil when this has been done. ;; + ;; The situation it copes with is this transformation: + ;; + ;; OLD: { (.) {...........} + ;; ^ ^ + ;; FROM HERE + ;; + ;; NEW: { {....} (.) {......... + ;; ^ ^ ^ + ;; LOWER BRACE PAIR HERE or HERE + ;; ;; This routine should be fast. Since it can get called a LOT, we maintain ;; `c-state-brace-pair-desert', a small cache of "failures", such that we ;; reduce the time wasted in repeated fruitless searches in brace deserts. @@ -2637,10 +2648,25 @@ comment at the start of cc-engine.el for more info." (unless (and c-state-brace-pair-desert (eq cache-pos (car c-state-brace-pair-desert)) (<= from (cdr c-state-brace-pair-desert))) - ;; Only search what we absolutely need to: - (if (and c-state-brace-pair-desert - (eq cache-pos (car c-state-brace-pair-desert))) - (narrow-to-region (cdr c-state-brace-pair-desert) (point-max))) + ;; DESERT-LIM. Only search what we absolutely need to, + (let ((desert-lim + (and c-state-brace-pair-desert + (eq cache-pos (car c-state-brace-pair-desert)) + (cdr c-state-brace-pair-desert))) + ;; CACHE-LIM. This limit will be necessary when an opening + ;; paren at `cache-pos' has just had its matching close paren + ;; inserted. `cache-pos' continues to be a search bound, even + ;; though the algorithm below would skip over the new paren + ;; pair. + (cache-lim (and cache-pos (< cache-pos from) cache-pos))) + (narrow-to-region + (cond + ((and desert-lim cache-lim) + (max desert-lim cache-lim)) + (desert-lim) + (cache-lim) + ((point-min))) + (point-max))) ;; In the next pair of nested loops, the inner one moves back past a ;; pair of (mis-)matching parens or brackets; the outer one moves @@ -2674,7 +2700,7 @@ comment at the start of cc-engine.el for more info." (cons new-cons (cdr c-state-cache)))) (t (setq c-state-cache (cons new-cons c-state-cache))))) - ;; We haven't found a brace pair. Record this. + ;; We haven't found a brace pair. Record this in the cache. (setq c-state-brace-pair-desert (cons cache-pos from)))))))) (defsubst c-state-push-any-brace-pair (bra+1 macro-start-or-here) From cf20dee0248049a925275f54381cf63bb2017e35 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Sun, 22 Apr 2012 21:58:00 +0800 Subject: [PATCH 136/564] Tweaks to Customize interface. Set custom-reset-button-menu to t. * cus-edit.el (custom-commands, custom-reset-menu) (Custom-reset-standard): Tweak labels. (custom-reset-button-menu): Change default to t. (custom-buffer-create-internal): For the custom-reset-button-menu case, put the revert button first. (custom-group-subtitle): New face. (custom-group-value-create): Align docstring to a specific column. * wid-edit.el (widget-documentation-link-add): Don't handle indentation in this function. (widget-documentation-string-indent-to): New function. (widget-documentation-string-value-create): Use it. * autorevert.el (auto-revert): * epg-config.el (epg): * ibuffer.el (ibuffer): * mpc.el (mpc): * ses.el (ses): * eshell/eshell.el (eshell): * net/ange-ftp.el (ange-ftp): * progmodes/ebnf2ps.el (postscript): * progmodes/flymake.el (flymake): * progmodes/prolog.el (prolog): * progmodes/verilog-mode.el (verilog-mode): * progmodes/which-func.el (which-func): * textmodes/picture.el (picture): * textmodes/tildify.el (tildify): * vc/ediff.el (ediff): Tweak defgroups to improve presentation in customization buffers. --- etc/NEWS | 6 +- lisp/ChangeLog | 33 ++++++++ lisp/autorevert.el | 5 +- lisp/calc/calc.el | 2 +- lisp/cus-edit.el | 137 ++++++++++++++++++--------------- lisp/epg-config.el | 6 +- lisp/eshell/eshell.el | 3 +- lisp/ibuffer.el | 9 +-- lisp/mpc.el | 2 +- lisp/net/ange-ftp.el | 3 +- lisp/net/tramp.el | 2 +- lisp/progmodes/ebnf2ps.el | 4 +- lisp/progmodes/flymake.el | 2 +- lisp/progmodes/gud.el | 5 +- lisp/progmodes/prolog.el | 2 +- lisp/progmodes/verilog-mode.el | 2 +- lisp/progmodes/which-func.el | 2 +- lisp/ses.el | 1 + lisp/term/xterm.el | 2 +- lisp/textmodes/picture.el | 2 +- lisp/textmodes/tildify.el | 2 +- lisp/vc/ediff.el | 2 +- lisp/vc/vc.el | 2 +- lisp/wid-edit.el | 40 ++++++---- 24 files changed, 165 insertions(+), 111 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index b2c487ba15b..298a87c1f08 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -74,7 +74,9 @@ character when doing minibuffer filename prompts. * Changes in Specialized Modes and Packages in Emacs 24.2 -** which-function-mode now applies to all applicable major modes by default. +** Customize + +*** `custom-reset-button-menu' now defaults to t. ** erc will look up server/channel names via auth-source and use the channel keys found, if any. @@ -87,6 +89,8 @@ closing brackets to be aligned with the line of the opening bracket. ** FIXME something happened to ses.el, 2012-04-17. +** which-function-mode now applies to all applicable major modes by default. + ** Obsolete packages: *** mailpost.el diff --git a/lisp/ChangeLog b/lisp/ChangeLog index d5576370727..14a83de342a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,36 @@ +2012-04-22 Chong Yidong + + * cus-edit.el (custom-commands, custom-reset-menu) + (Custom-reset-standard): Tweak labels. + (custom-reset-button-menu): Change default to t. + (custom-buffer-create-internal): For the custom-reset-button-menu + case, put the revert button first. + (custom-group-subtitle): New face. + (custom-group-value-create): Align docstring to a specific column. + + * wid-edit.el (widget-documentation-link-add): Don't handle + indentation in this function. + (widget-documentation-string-indent-to): New function. + (widget-documentation-string-value-create): Use it. + + * autorevert.el (auto-revert): + * epg-config.el (epg): + * ibuffer.el (ibuffer): + * mpc.el (mpc): + * ses.el (ses): + * eshell/eshell.el (eshell): + * net/ange-ftp.el (ange-ftp): + * progmodes/ebnf2ps.el (postscript): + * progmodes/flymake.el (flymake): + * progmodes/prolog.el (prolog): + * progmodes/verilog-mode.el (verilog-mode): + * progmodes/which-func.el (which-func): + * term/xterm.el (xterm): + * textmodes/picture.el (picture): + * textmodes/tildify.el (tildify): + * vc/ediff.el (ediff): Tweak defgroups to improve presentation in + customization buffers. + 2012-04-22 Alan Mackenzie * progmodes/cc-engine.el (c-append-lower-brace-pair-to-state-cache): diff --git a/lisp/autorevert.el b/lisp/autorevert.el index e0bde7c6dc5..11005f49f44 100644 --- a/lisp/autorevert.el +++ b/lisp/autorevert.el @@ -104,9 +104,8 @@ (defgroup auto-revert nil "Revert individual buffers when files on disk change. - -Auto-Revert Mode can be activated for individual buffer. -Global Auto-Revert Mode applies to all buffers." +Auto-Revert mode enables auto-revert in individual buffers. +Global Auto-Revert mode does so in all buffers." :group 'files :group 'convenience) diff --git a/lisp/calc/calc.el b/lisp/calc/calc.el index 5224d1aa4f8..c7cea5f0aef 100644 --- a/lisp/calc/calc.el +++ b/lisp/calc/calc.el @@ -222,7 +222,7 @@ (defgroup calc nil - "GNU Calc." + "Advanced desk calculator and mathematical tool." :prefix "calc-" :tag "Calc" :group 'applications) diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el index 4ed72be06fb..d20403ad341 100644 --- a/lisp/cus-edit.el +++ b/lisp/cus-edit.el @@ -223,7 +223,7 @@ :group 'emacs) (defgroup languages nil - "Specialized modes for editing programming languages." + "Modes for editing programming languages." :group 'programming) (defgroup lisp nil @@ -255,7 +255,7 @@ :group 'applications) (defgroup news nil - "Support for netnews reading and posting." + "Reading and posting to newsgroups." :link '(custom-manual "(gnus)") :group 'applications) @@ -297,7 +297,7 @@ :group 'environment) (defgroup unix nil - "Front-ends/assistants for, or emulators of, UNIX features." + "Interfaces, assistants, and emulators for UNIX features." :group 'environment) (defgroup i18n nil @@ -544,12 +544,6 @@ WIDGET is the widget to apply the filter entries of MENU on." (erase-buffer) (princ symbol (current-buffer)) (goto-char (point-min)) - ;; FIXME: Boolean variables are not predicates, so they shouldn't - ;; end with `-p'. -stef - ;; (when (and (eq (get symbol 'custom-type) 'boolean) - ;; (re-search-forward "-p\\'" nil t)) - ;; (replace-match "" t t) - ;; (goto-char (point-min))) (if custom-unlispify-remove-prefixes (let ((prefixes custom-prefix-list) prefix) @@ -732,26 +726,26 @@ groups after non-groups, if nil do not order groups at all." ;; `custom-buffer-create-internal' if `custom-buffer-verbose-help' is non-nil. (defvar custom-commands - '((" Set for current session " Custom-set t - "Apply all settings in this buffer to the current session" + '((" Apply " Custom-set t + "Apply settings (for the current session only)" "index" "Apply") - (" Save for future sessions " Custom-save + (" Apply and Save " Custom-save (or custom-file user-init-file) - "Apply all settings in this buffer and save them for future Emacs sessions." + "Apply settings and save for future sessions." "save" "Save") - (" Undo edits " Custom-reset-current t - "Restore all settings in this buffer to reflect their current values." + (" Undo Edits " Custom-reset-current t + "Restore customization buffer to reflect existing settings." "refresh" "Undo") - (" Reset to saved " Custom-reset-saved t - "Restore all settings in this buffer to their saved values (if any)." + (" Reset Customizations " Custom-reset-saved t + "Undo any settings applied only for the current session." "undo" "Reset") - (" Erase customizations " Custom-reset-standard + (" Erase Customizations " Custom-reset-standard (or custom-file user-init-file) - "Un-customize all settings in this buffer and save them with standard values." + "Un-customize settings in this and future sessions." "delete" "Uncustomize") (" Help for Customize " Custom-help t @@ -766,9 +760,9 @@ groups after non-groups, if nil do not order groups at all." (info "(emacs)Easy Customization")) (defvar custom-reset-menu - '(("Undo Edits" . Custom-reset-current) - ("Reset to Saved" . Custom-reset-saved) - ("Erase Customizations (use standard values)" . Custom-reset-standard)) + '(("Undo Edits in Customization Buffer" . Custom-reset-current) + ("Revert This Session's Customizations" . Custom-reset-saved) + ("Erase Customizations" . Custom-reset-standard)) "Alist of actions for the `Reset' button. The key is a string containing the name of the action, the value is a Lisp function taking the widget as an element which will be called @@ -901,7 +895,8 @@ making them as if they had never been customized at all." (memq (widget-get widget :custom-state) '(modified set changed saved rogue)) (widget-apply widget :custom-mark-to-reset-standard))) - "Erase all customizations for settings in this buffer? " t) + "The settings will revert to their default values, in this +and future sessions. Really erase customizations? " t) (custom-reset-standard-save-and-update))) ;;; The Customize Commands @@ -1552,11 +1547,12 @@ that option." (switch-to-buffer-other-window (custom-get-fresh-buffer name)) (custom-buffer-create-internal options description)) -(defcustom custom-reset-button-menu nil +(defcustom custom-reset-button-menu t "If non-nil, only show a single reset button in customize buffers. This button will have a menu with all three reset operations." :type 'boolean - :group 'custom-buffer) + :group 'custom-buffer + :version "24.2") (defcustom custom-buffer-verbose-help t "If non-nil, include explanatory text in the customization buffer." @@ -1651,29 +1647,30 @@ or a regular expression.") ;; So now the buttons are always inserted in the buffer. (Bug#1326) (if custom-buffer-verbose-help (widget-insert " - Operate on all settings in this buffer:\n")) +Operate on all settings in this buffer:\n")) (let ((button (lambda (tag action active help _icon _label) (widget-insert " ") (if (eval active) (widget-create 'push-button :tag tag :help-echo help :action action)))) (commands custom-commands)) - (apply button (pop commands)) ; Set for current session - (apply button (pop commands)) ; Save for future sessions (if custom-reset-button-menu (progn - (widget-insert " ") (widget-create 'push-button - :tag "Reset buffer" + :tag " Revert... " :help-echo "Show a menu with reset operations." :mouse-down-action 'ignore - :action 'custom-reset)) + :action 'custom-reset) + (apply button (pop commands)) ; Apply + (apply button (pop commands))) ; Apply and Save + (apply button (pop commands)) ; Apply + (apply button (pop commands)) ; Apply and Save (widget-insert "\n") - (apply button (pop commands)) ; Undo edits - (apply button (pop commands)) ; Reset to saved - (apply button (pop commands)) ; Erase customization + (apply button (pop commands)) ; Undo + (apply button (pop commands)) ; Reset + (apply button (pop commands)) ; Erase (widget-insert " ") - (pop commands) ; Help (omitted) + (pop commands) ; Help (omitted) (apply button (pop commands)))) ; Exit (widget-insert "\n\n")) @@ -2824,7 +2821,7 @@ If STATE is nil, the value is computed by `custom-variable-state'." (lambda (widget) (and (default-boundp (widget-value widget)) (memq (widget-get widget :custom-state) '(modified changed))))) - ("Reset to Saved" custom-variable-reset-saved + ("Revert This Session's Customization" custom-variable-reset-saved (lambda (widget) (and (or (get (widget-value widget) 'saved-value) (get (widget-value widget) 'saved-variable-comment)) @@ -3620,7 +3617,7 @@ the present value is saved to its :shown-value property instead." ("Undo Edits" custom-redraw (lambda (widget) (memq (widget-get widget :custom-state) '(modified changed)))) - ("Reset to Saved" custom-face-reset-saved + ("Revert This Session's Customization" custom-face-reset-saved (lambda (widget) (or (get (widget-value widget) 'saved-face) (get (widget-value widget) 'saved-face-comment)))) @@ -3940,8 +3937,6 @@ restoring it to the state of a face that has never been customized." ;;; The `custom-group' Widget. (defcustom custom-group-tag-faces nil - ;; In XEmacs, this ought to play games with font size. - ;; Fixme: make it do so in Emacs. "Face used for group tags. The first member is used for level 1 groups, the second for level 2, and so forth. The remaining group tags are shown with `custom-group-tag'." @@ -3978,6 +3973,13 @@ and so forth. The remaining group tags are shown with `custom-group-tag'." :group 'custom-faces) (define-obsolete-face-alias 'custom-group-tag-face 'custom-group-tag "22.1") +(defface custom-group-subtitle + `((t (:weight bold))) + "Face for the \"Subgroups:\" subtitle in Custom buffers." + :group 'custom-faces) + +(defvar custom-group-doc-align-col 20) + (define-widget 'custom-group 'custom "Customize group." :format "%v" @@ -4043,11 +4045,9 @@ If GROUPS-ONLY non-nil, return only those members that are groups." (custom-browse-insert-prefix prefix) (push (widget-create-child-and-convert widget 'custom-browse-visibility - ;; :tag-glyph "plus" :tag "+") buttons) (insert "-- ") - ;; (widget-glyph-insert nil "-- " "horizontal") (push (widget-create-child-and-convert widget 'custom-browse-group-tag) buttons) @@ -4057,8 +4057,6 @@ If GROUPS-ONLY non-nil, return only those members that are groups." (zerop (length members))) (custom-browse-insert-prefix prefix) (insert "[ ]-- ") - ;; (widget-glyph-insert nil "[ ]" "empty") - ;; (widget-glyph-insert nil "-- " "horizontal") (push (widget-create-child-and-convert widget 'custom-browse-group-tag) buttons) @@ -4136,7 +4134,8 @@ If GROUPS-ONLY non-nil, return only those members that are groups." :action 'custom-toggle-parent (not (eq state 'hidden))) buttons)) - (insert " : ") + (if (>= (current-column) custom-group-doc-align-col) + (insert " ")) ;; Create magic button. (let ((magic (widget-create-child-and-convert widget 'custom-magic nil))) @@ -4146,7 +4145,8 @@ If GROUPS-ONLY non-nil, return only those members that are groups." (widget-put widget :buttons buttons) ;; Insert documentation. (if (and (eq custom-buffer-style 'links) (> level 1)) - (widget-put widget :documentation-indent 0)) + (widget-put widget :documentation-indent + custom-group-doc-align-col)) (widget-add-documentation-string-button widget :visibility-widget 'custom-visibility)) @@ -4224,25 +4224,34 @@ If GROUPS-ONLY non-nil, return only those members that are groups." (count 0) (reporter (make-progress-reporter "Creating group entries..." 0 len)) + (have-subtitle (and (not (eq symbol 'emacs)) + (eq custom-buffer-order-groups 'last))) + prev-type children) - (setq children - (mapcar - (lambda (entry) - (widget-insert "\n") - (progress-reporter-update reporter (setq count (1+ count))) - (let ((sym (nth 0 entry)) - (type (nth 1 entry))) - (prog1 - (widget-create-child-and-convert - widget type - :group widget - :tag (custom-unlispify-tag-name sym) - :custom-prefixes custom-prefix-list - :custom-level (1+ level) - :value sym) - (unless (eq (preceding-char) ?\n) - (widget-insert "\n"))))) - members)) + + (dolist (entry members) + (unless (eq prev-type 'custom-group) + (widget-insert "\n")) + (progress-reporter-update reporter (setq count (1+ count))) + (let ((sym (nth 0 entry)) + (type (nth 1 entry))) + (when (and have-subtitle (eq type 'custom-group)) + (setq have-subtitle nil) + (widget-insert + (propertize "Subgroups:\n" 'face 'custom-group-subtitle))) + (setq prev-type type) + (push (widget-create-child-and-convert + widget type + :group widget + :tag (custom-unlispify-tag-name sym) + :custom-prefixes custom-prefix-list + :custom-level (1+ level) + :value sym) + children) + (unless (eq (preceding-char) ?\n) + (widget-insert "\n")))) + + (setq children (nreverse children)) (mapc 'custom-magic-reset children) (widget-put widget :children children) (custom-group-state-update widget) @@ -4267,7 +4276,7 @@ If GROUPS-ONLY non-nil, return only those members that are groups." ("Undo Edits" custom-group-reset-current (lambda (widget) (memq (widget-get widget :custom-state) '(modified)))) - ("Reset to Saved" custom-group-reset-saved + ("Revert This Session's Customizations" custom-group-reset-saved (lambda (widget) (memq (widget-get widget :custom-state) '(modified set)))) ,@(when (or custom-file init-file-user) diff --git a/lisp/epg-config.el b/lisp/epg-config.el index fd2468f9a4b..aa052206bec 100644 --- a/lisp/epg-config.el +++ b/lisp/epg-config.el @@ -33,9 +33,11 @@ "Report bugs to this address.") (defgroup epg () - "The EasyPG library." + "Interface to the GNU Privacy Guard (GnuPG)." + :tag "EasyPG" :version "23.1" - :group 'data) + :group 'data + :group 'external) (defcustom epg-gpg-program (or (executable-find "gpg") (executable-find "gpg2") diff --git a/lisp/eshell/eshell.el b/lisp/eshell/eshell.el index 224451eacba..f8c9788b24d 100644 --- a/lisp/eshell/eshell.el +++ b/lisp/eshell/eshell.el @@ -228,11 +228,10 @@ (require 'esh-mode) (defgroup eshell nil - "A command shell implemented entirely in Emacs Lisp. + "Command shell implemented entirely in Emacs Lisp. It invokes no external processes beyond those requested by the user, and is intended to be a functional replacement for command shells such as bash, zsh, rc, 4dos." - :tag "The Emacs shell" :link '(info-link "(eshell)Top") :version "21.1" :group 'applications) diff --git a/lisp/ibuffer.el b/lisp/ibuffer.el index 536992f5bc8..464b35fc3a6 100644 --- a/lisp/ibuffer.el +++ b/lisp/ibuffer.el @@ -60,11 +60,10 @@ (declare-function ibuffer-format-filter-group-data "ibuf-ext" (filter)) (defgroup ibuffer nil - "An advanced replacement for `buffer-menu'. - -Ibuffer allows you to operate on buffers in a manner much like Dired. -Operations include sorting, marking by regular expression, and -the ability to filter the displayed buffers by various criteria." + "Advanced replacement for `buffer-menu'. +Ibuffer lets you operate on buffers in a Dired-like way, +with the ability to sort, mark by regular expression, +and filter displayed buffers by various criteria." :version "22.1" :group 'convenience) diff --git a/lisp/mpc.el b/lisp/mpc.el index d2203a4deab..ea7f6793309 100644 --- a/lisp/mpc.el +++ b/lisp/mpc.el @@ -95,7 +95,7 @@ (eval-when-compile (require 'cl)) (defgroup mpc () - "A Client for the Music Player Daemon." + "Client for the Music Player Daemon (mpd)." :prefix "mpc-" :group 'multimedia :group 'applications) diff --git a/lisp/net/ange-ftp.el b/lisp/net/ange-ftp.el index 455836fdae1..447549f58cd 100644 --- a/lisp/net/ange-ftp.el +++ b/lisp/net/ange-ftp.el @@ -671,8 +671,7 @@ ;;;; ------------------------------------------------------------ (defgroup ange-ftp nil - "Accessing remote files and directories using FTP - made as simple and transparent as possible." + "Accessing remote files and directories using FTP." :group 'files :group 'comm :prefix "ange-ftp-") diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 95848ac34ea..beb97c6eb32 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -62,7 +62,7 @@ ;;; User Customizable Internal Variables: (defgroup tramp nil - "Edit remote files with a combination of rsh and rcp or similar programs." + "Edit remote files with a combination of ssh, scp, etc." :group 'files :group 'comm :version "22.1") diff --git a/lisp/progmodes/ebnf2ps.el b/lisp/progmodes/ebnf2ps.el index 05c9e160ceb..b7cbdcc7018 100644 --- a/lisp/progmodes/ebnf2ps.el +++ b/lisp/progmodes/ebnf2ps.el @@ -1181,10 +1181,10 @@ Elements of ALIST that are not conses are ignored." ;;; Interface to the command system (defgroup postscript nil - "PostScript Group." + "Printing with PostScript" :tag "PostScript" :version "20" - :group 'emacs) + :group 'environment) (defgroup ebnf2ps nil diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el index ed8eb81932e..96d4105f65b 100644 --- a/lisp/progmodes/flymake.el +++ b/lisp/progmodes/flymake.el @@ -253,7 +253,7 @@ are the string substitutions (see `format')." (make-variable-buffer-local 'flymake-output-residual) (defgroup flymake nil - "A universal on-the-fly syntax checker." + "Universal on-the-fly syntax checker." :version "23.1" :group 'tools) diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el index 1f60c351252..7123a8dd7fc 100644 --- a/lisp/progmodes/gud.el +++ b/lisp/progmodes/gud.el @@ -58,8 +58,9 @@ ;; GUD commands must be visible in C buffers visited by GUD (defgroup gud nil - "Grand Unified Debugger mode for gdb and other debuggers under Emacs. -Supported debuggers include gdb, sdb, dbx, xdb, perldb, pdb (Python) and jdb." + "The \"Grand Unified Debugger\" interface. +Supported debuggers include gdb, sdb, dbx, xdb, perldb, +pdb (Python), and jdb." :group 'processes :group 'tools) diff --git a/lisp/progmodes/prolog.el b/lisp/progmodes/prolog.el index 74c8c31b425..4ef6c31442d 100644 --- a/lisp/progmodes/prolog.el +++ b/lisp/progmodes/prolog.el @@ -295,7 +295,7 @@ (defgroup prolog nil - "Major modes for editing and running Prolog and Mercury files." + "Editing and running Prolog and Mercury files." :group 'languages) (defgroup prolog-faces nil diff --git a/lisp/progmodes/verilog-mode.el b/lisp/progmodes/verilog-mode.el index 0139795dd38..ad1dae9acf9 100644 --- a/lisp/progmodes/verilog-mode.el +++ b/lisp/progmodes/verilog-mode.el @@ -393,7 +393,7 @@ Set `verilog-in-hooks' during this time, to assist AUTO caches." (parse-partial-sexp (point-min) (or pos (point))))) (defgroup verilog-mode nil - "Facilitates easy editing of Verilog source text." + "Major mode for Verilog source code." :version "22.2" :group 'languages) diff --git a/lisp/progmodes/which-func.el b/lisp/progmodes/which-func.el index c8435c14ea2..cdaeadde906 100644 --- a/lisp/progmodes/which-func.el +++ b/lisp/progmodes/which-func.el @@ -68,7 +68,7 @@ "String to display in the mode line when current function is unknown.") (defgroup which-func nil - "Mode to display the current function name in the modeline." + "Display the current function name in the modeline." :group 'tools :version "20.3") diff --git a/lisp/ses.el b/lisp/ses.el index da18046c953..876537413ca 100644 --- a/lisp/ses.el +++ b/lisp/ses.el @@ -65,6 +65,7 @@ (defgroup ses nil "Simple Emacs Spreadsheet." + :tag "SES" :group 'applications :prefix "ses-" :version "21.1") diff --git a/lisp/term/xterm.el b/lisp/term/xterm.el index 7e56cd9fa1d..51e5aa5796d 100644 --- a/lisp/term/xterm.el +++ b/lisp/term/xterm.el @@ -27,7 +27,7 @@ (defgroup xterm nil "XTerm support." :version "24.1" - :group 'emacs) + :group 'environment) (defcustom xterm-extra-capabilities 'check "Whether Xterm supports some additional, more modern, features. diff --git a/lisp/textmodes/picture.el b/lisp/textmodes/picture.el index 191e9f3672b..24a4ac1b033 100644 --- a/lisp/textmodes/picture.el +++ b/lisp/textmodes/picture.el @@ -31,7 +31,7 @@ ;;; Code: (defgroup picture nil - "Picture mode --- editing using quarter-plane screen model." + "Editing text-based pictures (\"ASCII art\")." :prefix "picture-" :group 'wp) diff --git a/lisp/textmodes/tildify.el b/lisp/textmodes/tildify.el index 5552eff7186..583e4a4d35d 100644 --- a/lisp/textmodes/tildify.el +++ b/lisp/textmodes/tildify.el @@ -51,7 +51,7 @@ (defgroup tildify nil - "Adding missing hard spaces or other text fragments into texts." + "Add hard spaces or other text fragments to text buffers." :version "21.1" :group 'wp) diff --git a/lisp/vc/ediff.el b/lisp/vc/ediff.el index 4d6afa96d64..a1d778beebc 100644 --- a/lisp/vc/ediff.el +++ b/lisp/vc/ediff.el @@ -127,7 +127,7 @@ (require 'ediff-mult) ; required because of the registry stuff (defgroup ediff nil - "A comprehensive visual interface to diff & patch." + "Comprehensive visual interface to `diff' and `patch'." :tag "Ediff" :group 'tools) diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index ab7e587eb79..9ca9e00b8af 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -667,7 +667,7 @@ ;; General customization (defgroup vc nil - "Version-control system in Emacs." + "Emacs interface to version control systems." :group 'tools) (defcustom vc-initial-comment nil diff --git a/lisp/wid-edit.el b/lisp/wid-edit.el index b6feecebde5..9c5c6462bcc 100644 --- a/lisp/wid-edit.el +++ b/lisp/wid-edit.el @@ -2907,15 +2907,7 @@ link for that string." (push (widget-convert-button widget-documentation-link-type begin end :value name) buttons))))) - (widget-put widget :buttons buttons))) - (let ((indent (widget-get widget :indent))) - (when (and indent (not (zerop indent))) - (save-excursion - (save-restriction - (narrow-to-region from to) - (goto-char (point-min)) - (while (search-forward "\n" nil t) - (insert-char ?\s indent))))))) + (widget-put widget :buttons buttons)))) ;;; The `documentation-string' Widget. @@ -2934,10 +2926,9 @@ link for that string." (start (point))) (if (string-match "\n" doc) (let ((before (substring doc 0 (match-beginning 0))) - (after (substring doc (match-beginning 0))) - button) - (when (and indent (not (zerop indent))) - (insert-char ?\s indent)) + (after (substring doc (match-end 0))) + button end) + (widget-documentation-string-indent-to indent) (insert before ?\s) (widget-documentation-link-add widget start (point)) (setq button @@ -2950,18 +2941,35 @@ link for that string." :action 'widget-parent-action shown)) (when shown + (insert ?\n) (setq start (point)) (when (and indent (not (zerop indent))) (insert-char ?\s indent)) (insert after) - (widget-documentation-link-add widget start (point))) + (setq end (point)) + (widget-documentation-link-add widget start end) + ;; Indent the subsequent lines. + (when (and indent (> indent 0)) + (save-excursion + (save-restriction + (narrow-to-region start end) + (goto-char (point-min)) + (while (search-forward "\n" nil t) + (widget-documentation-string-indent-to indent)))))) (widget-put widget :buttons (list button))) - (when (and indent (not (zerop indent))) - (insert-char ?\s indent)) + (widget-documentation-string-indent-to indent) (insert doc) (widget-documentation-link-add widget start (point)))) (insert ?\n)) +(defun widget-documentation-string-indent-to (col) + (when (and (numberp col) + (> col 0)) + (let ((opoint (point))) + (indent-to col) + (put-text-property opoint (point) + 'display `(space :align-to ,col))))) + (defun widget-documentation-string-action (widget &rest _ignore) ;; Toggle documentation. (let ((parent (widget-get widget :parent))) From dcbf5805ac7ade7fc83f3d209e2d56f029918402 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Sun, 22 Apr 2012 16:11:43 +0200 Subject: [PATCH 137/564] Move functions from C to Lisp. Make non-blocking method calls the default. Implement further D-Bus standard interfaces. * configure.in (dbus_validate_bus_name, dbus_validate_path) (dbus_validate_interface, dbus_validate_member): Check also for these library functions * dbusbind.c (DBUS_NUM_MESSAGE_TYPES): Declare. (QCdbus_request_name_allow_replacement) (QCdbus_request_name_replace_existing) (QCdbus_request_name_do_not_queue) (QCdbus_request_name_reply_primary_owner) (QCdbus_request_name_reply_in_queue) (QCdbus_request_name_reply_exists) (QCdbus_request_name_reply_already_owner): Move to dbus.el. (QCdbus_registered_serial, QCdbus_registered_method) (QCdbus_registered_signal): New Lisp objects. (XD_DEBUG_MESSAGE): Use sizeof. (XD_MESSAGE_TYPE_TO_STRING, XD_OBJECT_TO_STRING) (XD_DBUS_VALIDATE_BUS_ADDRESS, XD_DBUS_VALIDATE_OBJECT) (XD_DBUS_VALIDATE_BUS_NAME, XD_DBUS_VALIDATE_PATH) (XD_DBUS_VALIDATE_INTERFACE, XD_DBUS_VALIDATE_MEMBER): New macros. (XD_CHECK_DBUS_SERIAL): Rename from CHECK_DBUS_SERIAL_GET_SERIAL. (xd_signature, xd_append_arg): Allow float for integer types. (xd_get_connection_references): New function. (xd_get_connection_address): Rename from xd_initialize. Return cached address. (xd_remove_watch): Do not unset $DBUS_SESSION_BUS_ADDRESS. (xd_close_bus): Rename from Fdbus_close_bus. Not needed on Lisp level. (Fdbus_init_bus): New optional arg PRIVATE. Cache address. Return number of recounts. (Fdbus_get_unique_name): Make stronger parameter check. (Fdbus_message_internal): New defun. (Fdbus_call_method, Fdbus_call_method_asynchronously) (Fdbus_method_return_internal, Fdbus_method_error_internal) (Fdbus_send_signal, Fdbus_register_service) (Fdbus_register_signal, Fdbus_register_method): Move to dbus.el. (xd_read_message_1): Obey new structure of Vdbus_registered_objects. (xd_read_queued_messages): Obey new structure of Vdbus_registered_buses. (Vdbus_compiled_version, Vdbus_runtime_version) (Vdbus_message_type_invalid, Vdbus_message_type_method_call) (Vdbus_message_type_method_return, Vdbus_message_type_error) (Vdbus_message_type_signal): New defvars. (Vdbus_registered_buses, Vdbus_registered_objects_table): Adapt docstring. * net/dbus.el (dbus-message-internal): Declare function. Remove unneeded function declarations. (defvar dbus-message-type-invalid, dbus-message-type-method-call) (dbus-message-type-method-return, dbus-message-type-error) (dbus-message-type-signal): Declare variables. Remove local definitions. (dbus-interface-dbus, dbus-interface-peer) (dbus-interface-introspectable, dbus-interface-properties) (dbus-path-emacs, dbus-interface-emacs, dbus-return-values-table): Adapt docstring. (dbus-interface-objectmanager): New defconst. (dbus-call-method, dbus-call-method-asynchronously) (dbus-send-signal, dbus-method-return-internal) (dbus-method-error-internal, dbus-register-service) (dbus-register-signal, dbus-register-method): New defuns, moved from dbusbind.c (dbus-call-method-handler, dbus-setenv) (dbus-get-all-managed-objects, dbus-managed-objects-handler): New defuns. (dbus-call-method-non-blocking): Make it an obsolete function. (dbus-unregister-object, dbus-unregister-service) (dbus-handle-event, dbus-register-property) (dbus-property-handler): Obey the new structure of `bus-registered-objects'. (dbus-introspect): Use `dbus-call-method'. Use a timeout. (dbus-get-property, dbus-set-property, dbus-get-all-properties): Use `dbus-call-method'. * dbus.texi (Version): New node. (Properties and Annotations): Mention the object manager interface. Describe dbus-get-all-managed-objects. (Type Conversion): Floating point numbers are allowed, if an anteger does not fit Emacs's integer range. (Synchronous Methods): Remove obsolete dbus-call-method-non-blocking. (Asynchronous Methods): Fix description of dbus-call-method-asynchronously. (Receiving Method Calls): Fix some minor errors. Add dbus-interface-emacs. (Signals): Describe unicast signals and the new match rules. (Alternative Buses): Add the PRIVATE optional argument to dbus-init-bus. Describe its new return value. Add dbus-setenv. --- ChangeLog | 6 + configure.in | 11 +- doc/misc/ChangeLog | 16 + doc/misc/dbus.texi | 313 ++++++-- etc/NEWS | 30 + lisp/ChangeLog | 33 + lisp/net/dbus.el | 1059 +++++++++++++++++++++------ src/ChangeLog | 45 ++ src/dbusbind.c | 1750 +++++++++++++++----------------------------- 9 files changed, 1803 insertions(+), 1460 deletions(-) diff --git a/ChangeLog b/ChangeLog index 19975429260..505a447c980 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2012-04-22 Michael Albinus + + * configure.in (dbus_validate_bus_name, dbus_validate_path) + (dbus_validate_interface, dbus_validate_member): Check also for + these library functions + 2012-04-22 Paul Eggert * configure.in (doug_lea_malloc): Check for __malloc_initialize_hook. diff --git a/configure.in b/configure.in index e4e11bdf7b5..4c6f4e537c6 100644 --- a/configure.in +++ b/configure.in @@ -2079,8 +2079,7 @@ if test "${HAVE_GTK}" = "yes"; then fi dnl D-Bus has been tested under GNU/Linux only. Must be adapted for -dnl other platforms. Support for higher D-Bus versions than 1.0 is -dnl also not configured. +dnl other platforms. HAVE_DBUS=no DBUS_OBJ= if test "${with_dbus}" = "yes"; then @@ -2088,7 +2087,13 @@ if test "${with_dbus}" = "yes"; then if test "$HAVE_DBUS" = yes; then LIBS="$LIBS $DBUS_LIBS" AC_DEFINE(HAVE_DBUS, 1, [Define to 1 if using D-Bus.]) - AC_CHECK_FUNCS([dbus_watch_get_unix_fd]) + dnl dbus_watch_get_unix_fd has been introduced in D-Bus 1.1.1. + dnl dbus_validate_* have been introduced in D-Bus 1.5.12. + AC_CHECK_FUNCS(dbus_watch_get_unix_fd \ + dbus_validate_bus_name \ + dbus_validate_path \ + dbus_validate_interface \ + dbus_validate_member) DBUS_OBJ=dbusbind.o fi fi diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index 14f389044bb..834a8f2c47f 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -1,3 +1,19 @@ +2012-04-22 Michael Albinus + + * dbus.texi (Version): New node. + (Properties and Annotations): Mention the object manager + interface. Describe dbus-get-all-managed-objects. + (Type Conversion): Floating point numbers are allowed, if an + anteger does not fit Emacs's integer range. + (Synchronous Methods): Remove obsolete dbus-call-method-non-blocking. + (Asynchronous Methods): Fix description of + dbus-call-method-asynchronously. + (Receiving Method Calls): Fix some minor errors. Add + dbus-interface-emacs. + (Signals): Describe unicast signals and the new match rules. + (Alternative Buses): Add the PRIVATE optional argument to + dbus-init-bus. Describe its new return value. Add dbus-setenv. + 2012-04-20 Glenn Morris * faq.texi (New in Emacs 24): New section. diff --git a/doc/misc/dbus.texi b/doc/misc/dbus.texi index 204afe7056e..e99e20b9aa0 100644 --- a/doc/misc/dbus.texi +++ b/doc/misc/dbus.texi @@ -53,7 +53,7 @@ another. An overview of D-Bus can be found at * Asynchronous Methods:: Calling methods non-blocking. * Receiving Method Calls:: Offering own methods. * Signals:: Sending and receiving signals. -* Alternative Buses:: Alternative buses. +* Alternative Buses:: Alternative buses and environments. * Errors and Events:: Errors and events. * Index:: Index including concepts, functions, variables. @@ -116,6 +116,7 @@ name could be @samp{org.gnu.Emacs.TextEditor} or @cindex inspection @menu +* Version:: Determining the D-Bus version. * Bus names:: Discovering D-Bus names. * Introspection:: Knowing the details of D-Bus services. * Nodes and Interfaces:: Detecting object paths and interfaces. @@ -125,6 +126,25 @@ name could be @samp{org.gnu.Emacs.TextEditor} or @end menu +@node Version +@section D-Bus version. + +D-Bus has evolved over the years. New features have been added with +new D-Bus versions. There are two variables, which allow to determine +the used D-Bus version. + +@defvar dbus-compiled-version +This variable, a string, determines the version of D-Bus Emacs is +compiled against. If it cannot be determined the value is @code{nil}. +@end defvar + +@defvar dbus-runtime-version +The other D-Bus version to be checked is the version of D-Bus Emacs +runs with. This string can be different from @code{dbus-compiled-version}. +It is also @code{nil}, if it cannot be determined at runtime. +@end defvar + + @node Bus names @section Bus names. @@ -149,7 +169,6 @@ activatable service names at all. Example: (member "org.gnome.evince.Daemon" (dbus-list-activatable-names :session)) @end lisp - @end defun @defun dbus-list-names bus @@ -637,6 +656,12 @@ Interfaces can have properties. These can be exposed via the That is, properties can be retrieved and changed during lifetime of an element. +A generalized interface is +@samp{org.freedesktop.DBus.Objectmanager}@footnote{See +@uref{http://dbus.freedesktop.org/doc/dbus-specification.html#standard-interfaces-objectmanager}}, +which returns objects, their interfaces and properties for a given +service in just one call. + Annotations, on the other hand, are static values for an element. Often, they are used to instruct generators, how to generate code from the interface for a given language binding. @@ -732,6 +757,61 @@ If there are no properties, @code{nil} is returned. Example: @end lisp @end defun +@defun dbus-get-all-managed-objects bus service path +This functions returns all objects at @var{bus}, @var{service}, +@var{path}, and the children of @var{path}. The result is a list of +objects. Every object is a cons of an existing path name, and the +list of available interface objects. An interface object is another +cons, which car is the interface name, and the cdr is the list of +properties as returned by @code{dbus-get-all-properties} for that path +and interface. Example: + +@lisp +(dbus-get-all-managed-objects + :session "org.gnome.SettingsDaemon" "/") + +@result{} (("/org/gnome/SettingsDaemon/MediaKeys" + ("org.gnome.SettingsDaemon.MediaKeys") + ("org.freedesktop.DBus.Peer") + ("org.freedesktop.DBus.Introspectable") + ("org.freedesktop.DBus.Properties") + ("org.freedesktop.DBus.ObjectManager")) + ("/org/gnome/SettingsDaemon/Power" + ("org.gnome.SettingsDaemon.Power.Keyboard") + ("org.gnome.SettingsDaemon.Power.Screen") + ("org.gnome.SettingsDaemon.Power" + ("Icon" . ". GThemedIcon battery-full-charged-symbolic ") + ("Tooltip" . "Laptop battery is charged")) + ("org.freedesktop.DBus.Peer") + ("org.freedesktop.DBus.Introspectable") + ("org.freedesktop.DBus.Properties") + ("org.freedesktop.DBus.ObjectManager")) + @dots{}) +@end lisp + +If possible, @samp{org.freedesktop.DBus.ObjectManager.GetManagedObjects} +is used for retrieving the information. Otherwise, the information +is collected via @samp{org.freedesktop.DBus.Introspectable.Introspect} +and @samp{org.freedesktop.DBus.Properties.GetAll}, which is slow. + +An overview of all existing object paths, their interfaces and +properties could be retrieved by the following code: + +@lisp +(with-current-buffer (switch-to-buffer "*objectmanager*") + (erase-buffer) + (let (result) + (dolist (service (dbus-list-known-names :session) result) + (message "%s" service) + (add-to-list + 'result + (cons service + (dbus-get-all-managed-objects :session service "/")))) + (insert (message "%s" (pp result))) + (redisplay t))) +@end lisp +@end defun + @defun dbus-introspect-get-annotation-names bus service path interface &optional name Return a list of all annotation names as list of strings. If @var{name} is @code{nil}, the annotations are children of @@ -928,6 +1008,10 @@ represented outside this range are stripped of. For example, @code{:byte ?x} is equal to @code{:byte ?\M-x}, but it is not equal to @code{:byte ?\C-x} or @code{:byte ?\M-\C-x}. +Signed and unsigned integer D-Bus types expect a corresponding integer +value. If the value does not fit Emacs's integer range, it is also +possible to use an equivalent floating point number. + A D-Bus compound type is always represented as a list. The @sc{car} of this list can be the type symbol @code{:array}, @code{:variant}, @code{:struct} or @code{:dict-entry}, which would result in a @@ -1182,24 +1266,6 @@ emulate the @code{lshal} command on GNU/Linux systems: @end lisp @end defun -@defun dbus-call-method-non-blocking bus service path interface method &optional :timeout timeout &rest args -Call @var{method} on the D-Bus @var{bus}, but don't block the event queue. -This is necessary for communicating to registered D-Bus methods, -which are running in the same Emacs process. - -The arguments are the same as in @code{dbus-call-method}. Example: - -@lisp -(dbus-call-method-non-blocking - :system "org.freedesktop.Hal" - "/org/freedesktop/Hal/devices/computer" - "org.freedesktop.Hal.Device" "GetPropertyString" - "system.kernel.machine") - -@result{} "i686" -@end lisp -@end defun - @node Asynchronous Methods @chapter Calling methods non-blocking. @@ -1229,7 +1295,7 @@ All other arguments args are passed to @var{method} as arguments. They are converted into D-Bus types as described in @ref{Type Conversion}. -Unless @var{handler} is @code{nil}, the function returns a key into +If @var{handler} is a Lisp function, the function returns a key into the hash table @code{dbus-registered-objects-table}. The corresponding entry in the hash table is removed, when the return message has been arrived, and @var{handler} is called. Example: @@ -1241,7 +1307,7 @@ message has been arrived, and @var{handler} is called. Example: "org.freedesktop.Hal.Device" "GetPropertyString" 'message "system.kernel.machine") -@result{} (:system 2) +@result{} (:serial :system 2) @print{} i686 @end lisp @@ -1323,19 +1389,21 @@ implementation of an interface of a well known service, like It could be also an implementation of an own interface. In this case, the service name must be @samp{org.gnu.Emacs}. The object path shall -begin with @samp{/org/gnu/Emacs/@strong{Application}/}, and the +begin with @samp{/org/gnu/Emacs/@strong{Application}}, and the interface name shall be @code{org.gnu.Emacs.@strong{Application}}. @samp{@strong{Application}} is the name of the application which provides the interface. @deffn Constant dbus-service-emacs -The well known service name of Emacs. +The well known service name @samp{org.gnu.Emacs} of Emacs. @end deffn @deffn Constant dbus-path-emacs -The object path head "/org/gnu/Emacs" used by Emacs. All object -paths, used by offered methods or signals, shall start with this -string. +The object path namespace @samp{/org/gnu/Emacs} used by Emacs. +@end deffn + +@deffn Constant dbus-interface-emacs +The interface namespace @code{org.gnu.Emacs} used by Emacs. @end deffn @defun dbus-register-method bus service path interface method handler dont-register-service @@ -1400,7 +1468,7 @@ registration for @var{method}. Example: "org.freedesktop.TextEditor" "OpenFile" 'my-dbus-method-handler) -@result{} ((:session "org.freedesktop.TextEditor" "OpenFile") +@result{} ((:method :session "org.freedesktop.TextEditor" "OpenFile") ("org.freedesktop.TextEditor" "/org/freedesktop/TextEditor" my-dbus-method-handler)) @end lisp @@ -1497,14 +1565,14 @@ clients from discovering the still incomplete interface. :session "org.freedesktop.TextEditor" "/org/freedesktop/TextEditor" "org.freedesktop.TextEditor" "name" :read "GNU Emacs") -@result{} ((:session "org.freedesktop.TextEditor" "name") +@result{} ((:property :session "org.freedesktop.TextEditor" "name") ("org.freedesktop.TextEditor" "/org/freedesktop/TextEditor")) (dbus-register-property :session "org.freedesktop.TextEditor" "/org/freedesktop/TextEditor" "org.freedesktop.TextEditor" "version" :readwrite emacs-version t) -@result{} ((:session "org.freedesktop.TextEditor" "version") +@result{} ((:property :session "org.freedesktop.TextEditor" "version") ("org.freedesktop.TextEditor" "/org/freedesktop/TextEditor")) @end lisp @@ -1569,8 +1637,8 @@ to the service from D-Bus. @chapter Sending and receiving signals. @cindex signals -Signals are broadcast messages. They carry input parameters, which -are received by all objects which have registered for such a signal. +Signals are one way messages. They carry input parameters, which are +received by all objects which have registered for such a signal. @defun dbus-send-signal bus service path interface signal &rest args This function is similar to @code{dbus-call-method}. The difference @@ -1580,10 +1648,14 @@ The function emits @var{signal} on the D-Bus @var{bus}. @var{bus} is either the symbol @code{:system} or the symbol @code{:session}. It doesn't matter whether another object has registered for @var{signal}. -@var{service} is the D-Bus service name of the object the signal is -emitted from. @var{path} is the corresponding D-Bus object path, -@var{service} is registered at. @var{interface} is an interface -offered by @var{service}. It must provide @var{signal}. +Signals can be unicast or broadcast messages. For broadcast messages, +@var{service} must be @code{nil}. Otherwise, @var{service} is the +D-Bus service name the signal is sent to as unicast +message.@footnote{For backward compatibility, a broadcast message is +also emitted if @var{service} is the known or unique name Emacs is +registered at D-Bus @var{bus}.} @var{path} is the D-Bus object path +@var{signal} is sent from. @var{interface} is an interface available +at @var{path}. It must provide @var{signal}. All other arguments args are passed to @var{signal} as arguments. They are converted into D-Bus types as described in @ref{Type @@ -1591,15 +1663,15 @@ Conversion}. Example: @lisp (dbus-send-signal - :session dbus-service-emacs dbus-path-emacs - (concat dbus-service-emacs ".FileManager") "FileModified" + :session nil dbus-path-emacs + (concat dbus-interface-emacs ".FileManager") "FileModified" "/home/albinus/.emacs") @end lisp @end defun @defun dbus-register-signal bus service path interface signal handler &rest args -With this function, an application registers for @var{signal} on the -D-Bus @var{bus}. +With this function, an application registers for a signal on the D-Bus +@var{bus}. @var{bus} is either the symbol @code{:system} or the symbol @code{:session}. @@ -1611,24 +1683,46 @@ unique name of the object, owning @var{service} at registration time. When the corresponding D-Bus object disappears, signals won't be received any longer. -When @var{service} is @code{nil}, related signals from all D-Bus -objects shall be accepted. - @var{path} is the corresponding D-Bus object path, @var{service} is -registered at. It can also be @code{nil} if the path name of incoming -signals shall not be checked. +registered at. @var{interface} is an interface offered by +@var{service}. It must provide @var{signal}. -@var{interface} is an interface offered by @var{service}. It must -provide @var{signal}. +@var{service}, @var{path}, @var{interface} and @var{signal} can be +@code{nil}. This is interpreted as a wildcard for the respective +argument. @var{handler} is a Lisp function to be called when the @var{signal} is received. It must accept as arguments the output parameters @var{signal} is sending. -All other arguments @var{args}, if specified, must be strings. They -stand for the respective arguments of @var{signal} in their order, and -are used for filtering as well. A @code{nil} argument might be used -to preserve the order. +The remaining arguments @var{args} can be keywords or keyword string +pairs.@footnote{For backward compatibility, the arguments @var{args} +can also be just strings. They stand for the respective arguments of +@var{signal} in their order, and are used for filtering as well. A +@code{nil} argument might be used to preserve the order.} The meaning +is as follows: + +@itemize +@item @code{:argN} @var{string}:@* +@code{:pathN} @var{string}:@* +This stands for the Nth argument of the signal. @code{:pathN} +arguments can be used for object path wildcard matches as specified by +D-Bus, whilest an @code{:argN} argument requires an exact match. + +@item @code{:arg-namespace} @var{string}:@* +Register for the signals, which first argument defines the service or +interface namespace @var{string}. + +@item @code{:path-namespace} @var{string}:@* +Register for the object path namespace @var{string}. All signals sent +from an object path, which has @var{string} as the preceding string, +are matched. This requires @var{path} to be @code{nil}. + +@item @code{:eavesdrop}:@* +Register for unicast signals which are not directed to the D-Bus +object Emacs is registered at D-Bus BUS, if the security policy of BUS +allows this. Otherwise, this argument is ignored. +@end itemize @code{dbus-register-signal} returns a Lisp object, which can be used as argument in @code{dbus-unregister-object} for removing the @@ -1645,7 +1739,7 @@ registration for @var{signal}. Example: "org.freedesktop.Hal.Manager" "DeviceAdded" 'my-dbus-signal-handler) -@result{} ((:system "org.freedesktop.Hal.Manager" "DeviceAdded") +@result{} ((:signal :system "org.freedesktop.Hal.Manager" "DeviceAdded") ("org.freedesktop.Hal" "/org/freedesktop/Hal/Manager" my-signal-handler)) @end lisp @@ -1657,23 +1751,36 @@ The callback function @code{my-dbus-signal-handler} must define one single string argument therefore. Plugging an USB device to your machine, when registered for signal @samp{DeviceAdded}, will show you which objects the GNU/Linux @code{hal} daemon adds. + +Some of the match rules have been added to a later version of D-Bus. +In order to test the availability of such features, you could register +for a dummy signal, and check the result: + +@lisp +(dbus-ignore-errors + (dbus-register-signal + :system nil nil nil nil 'ignore :path-namespace "/invalid/path")) + +@result{} nil +@end lisp @end defun @node Alternative Buses -@chapter Alternative buses. +@chapter Alternative buses and environments. @cindex bus names @cindex UNIX domain socket +@cindex TCP/IP socket Until now, we have spoken about the system and the session buses, which are the default buses to be connected to. However, it is possible to connect to any bus, from which the address is known. This -is a UNIX domain socket. Everywhere, where a @var{bus} is mentioned -as argument of a function (the symbol @code{:system} or the symbol -@code{:session}), this address can be used instead. The connection to -this bus must be initialized first. +is a UNIX domain or TCP/IP socket. Everywhere, where a @var{bus} is +mentioned as argument of a function (the symbol @code{:system} or the +symbol @code{:session}), this address can be used instead. The +connection to this bus must be initialized first. -@defun dbus-init-bus bus +@defun dbus-init-bus bus &optional private Establish the connection to D-Bus @var{bus}. @var{bus} can be either the symbol @code{:system} or the symbol @@ -1682,30 +1789,90 @@ corresponding bus. For the system and session buses, this function is called when loading @file{dbus.el}, there is no need to call it again. -Example: You open another session bus in a terminal window on your host: +The function returns a number, which counts the connections this Emacs +session has established to the @var{bus} under the same unique name +(see @code{dbus-get-unique-name}). It depends on the libraries Emacs +is linked with, and on the environment Emacs is running. For example, +if Emacs is linked with the gtk toolkit, and it runs in a GTK-aware +environment like Gnome, another connection might already be +established. -@example -# eval `dbus-launch --auto-syntax` -# echo $DBUS_SESSION_BUS_ADDRESS +When @var{private} is non-@code{nil}, a new connection is established +instead of reusing an existing one. It results in a new unique name +at the bus. This can be used, if it is necessary to distinguish from +another connection used in the same Emacs process, like the one +established by GTK+. It should be used with care for at least the +@code{:system} and @code{:session} buses, because other Emacs Lisp +packages might already use this connection to those buses. -@print{} unix:abstract=/tmp/dbus-JoFtAVG92w,guid=2f320a1ebe50b7ef58e -@end example - -In Emacs, you can access to this bus via its address: +Example: You initialize a connection to the AT-SPI bus on your host: @lisp (setq my-bus - "unix:abstract=/tmp/dbus-JoFtAVG92w,guid=2f320a1ebe50b7ef58e") + (dbus-call-method + :session "org.a11y.Bus" "/org/a11y/bus" + "org.a11y.Bus" "GetAddress")) -@result{} "unix:abstract=/tmp/dbus-JoFtAVG92w,guid=2f320a1ebe50b7ef58e" +@result{} "unix:abstract=/tmp/dbus-2yzWHOCdSD,guid=a490dd26625870ca1298b6e10000fd7f" +;; If Emacs is built with gtk support, and you run in a GTK enabled +;; environment (like a GNOME session), the initialization reuses the +;; connection established by GTK's atk bindings. (dbus-init-bus my-bus) -@result{} nil +@result{} 2 (dbus-get-unique-name my-bus) -@result{} ":1.0" +@result{} ":1.19" + +;; Open a new connection to the same bus. This obsoletes the +;; previous one. +(dbus-init-bus my-bus 'private) + +@result{} 1 + +(dbus-get-unique-name my-bus) + +@result{} ":1.20" +@end lisp + +D-Bus addresses can specify different transport. A possible address +could be based on TCP/IP sockets, see next example. However, it +depends on the bus daemon configuration, which transport is supported. +@end defun + +@defun dbus-setenv bus variable value +Set the value of the @var{bus} environment variable @var{variable} to +@var{value}. + +@var{bus} is either a Lisp symbol, @code{:system} or @code{:session}, +or a string denoting the bus address. Both @var{variable} and +@var{value} should be strings. + +Normally, services inherit the environment of the bus daemon. This +function adds to or modifies that environment when activating services. + +Some bus instances, such as @code{:system}, may disable setting the +environment. In such cases, or if this feature is not available in +older D-Bus versions, a @code{dbus-error} error is raised. + +As an example, it might be desirable to start X11 enabled services on +a remote host's bus on the same X11 server the local Emacs is +running. This could be achieved by + +@lisp +(setq my-bus "unix:host=example.gnu.org,port=4711") + +@result{} "unix:host=example.gnu.org,port=4711" + +(dbus-init-bus my-bus) + +@result{} 1 + +(dbus-setenv my-bus "DISPLAY" (getenv "DISPLAY")) + +@result{} nil @end lisp @end defun @@ -1723,8 +1890,8 @@ If this variable is non-@code{nil}, D-Bus specific debug messages are raised. @end defvar Input parameters of @code{dbus-call-method}, -@code{dbus-call-method-non-blocking}, -@code{dbus-call-method-asynchronously}, and +@code{dbus-call-method-asynchronously}, @code{dbus-send-signal}, +@code{dbus-register-method}, @code{dbus-register-property} and @code{dbus-register-signal} are checked for correct D-Bus types. If there is a type mismatch, the Lisp error @code{wrong-type-argument} @code{D-Bus ARG} is raised. @@ -1825,7 +1992,7 @@ Example: @lisp (defun my-dbus-event-error-handler (event error) - (when (string-equal (concat dbus-service-emacs ".FileManager") + (when (string-equal (concat dbus-interface-emacs ".FileManager") (dbus-event-interface-name event)) (message "my-dbus-event-error-handler: %S %S" event error) (signal 'file-error (cdr error)))) diff --git a/etc/NEWS b/etc/NEWS index 298a87c1f08..3b53f9df97a 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -91,6 +91,36 @@ closing brackets to be aligned with the line of the opening bracket. ** which-function-mode now applies to all applicable major modes by default. +** D-Bus + ++++ +*** New variables `dbus-compiled-version' and `dbus-runtime-version'. + ++++ +*** The D-Bus object manager interface is implemented. + ++++ +*** Variables of type :(u)int32 and :(u)int64 accept floating points, +if their value does not fit into Emacs's integer range. + ++++ +*** The function `dbus-call-method' works non-blocking now, it can be +interrupted by C-g. `dbus-call-method-non-blocking' is obsolete. + ++++ +*** Signals can be sent also as unicast message. + ++++ +*** The argument list of `dbus-register-signal' has been extended, +according to the new match rule types of D-Bus. See the manual for +details. + ++++ +*** `dbus-init-bus' supports private connections. + ++++ +*** There is a new function `dbus-setenv'. + ** Obsolete packages: *** mailpost.el diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 14a83de342a..334e34bb712 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,36 @@ +2012-04-22 Michael Albinus + + Move functions from C to Lisp. Make non-blocking method calls + the default. Implement further D-Bus standard interfaces. + + * net/dbus.el (dbus-message-internal): Declare function. Remove + unneeded function declarations. + (defvar dbus-message-type-invalid, dbus-message-type-method-call) + (dbus-message-type-method-return, dbus-message-type-error) + (dbus-message-type-signal): Declare variables. Remove local + definitions. + (dbus-interface-dbus, dbus-interface-peer) + (dbus-interface-introspectable, dbus-interface-properties) + (dbus-path-emacs, dbus-interface-emacs, dbus-return-values-table): + Adapt docstring. + (dbus-interface-objectmanager): New defconst. + (dbus-call-method, dbus-call-method-asynchronously) + (dbus-send-signal, dbus-method-return-internal) + (dbus-method-error-internal, dbus-register-service) + (dbus-register-signal, dbus-register-method): New defuns, moved + from dbusbind.c + (dbus-call-method-handler, dbus-setenv) + (dbus-get-all-managed-objects, dbus-managed-objects-handler): New + defuns. + (dbus-call-method-non-blocking): Make it an obsolete function. + (dbus-unregister-object, dbus-unregister-service) + (dbus-handle-event, dbus-register-property) + (dbus-property-handler): Obey the new structure of + `bus-registered-objects'. + (dbus-introspect): Use `dbus-call-method'. Use a timeout. + (dbus-get-property, dbus-set-property, dbus-get-all-properties): + Use `dbus-call-method'. + 2012-04-22 Chong Yidong * cus-edit.el (custom-commands, custom-reset-menu) diff --git a/lisp/net/dbus.el b/lisp/net/dbus.el index e3144a53fab..ee2bdecb1ac 100644 --- a/lisp/net/dbus.el +++ b/lisp/net/dbus.el @@ -28,19 +28,19 @@ ;; Low-level language bindings are implemented in src/dbusbind.c. +;; D-Bus support in the Emacs core can be disabled with configuration +;; option "--without-dbus". + ;;; Code: -;; D-Bus support in the Emacs core can be disabled with configuration -;; option "--without-dbus". Declare used subroutines and variables. -(declare-function dbus-call-method "dbusbind.c") -(declare-function dbus-call-method-asynchronously "dbusbind.c") +;; Declare used subroutines and variables. +(declare-function dbus-message-internal "dbusbind.c") (declare-function dbus-init-bus "dbusbind.c") -(declare-function dbus-method-return-internal "dbusbind.c") -(declare-function dbus-method-error-internal "dbusbind.c") -(declare-function dbus-register-service "dbusbind.c") -(declare-function dbus-register-signal "dbusbind.c") -(declare-function dbus-register-method "dbusbind.c") -(declare-function dbus-send-signal "dbusbind.c") +(defvar dbus-message-type-invalid) +(defvar dbus-message-type-method-call) +(defvar dbus-message-type-method-return) +(defvar dbus-message-type-error) +(defvar dbus-message-type-signal) (defvar dbus-debug) (defvar dbus-registered-objects-table) @@ -56,39 +56,93 @@ (defconst dbus-path-dbus "/org/freedesktop/DBus" "The object path used to talk to the bus itself.") +;; Default D-Bus interfaces. + (defconst dbus-interface-dbus "org.freedesktop.DBus" - "The interface exported by the object with `dbus-service-dbus' and `dbus-path-dbus'.") + "The interface exported by the service `dbus-service-dbus'.") (defconst dbus-interface-peer (concat dbus-interface-dbus ".Peer") - "The interface for peer objects.") + "The interface for peer objects. +See URL `http://dbus.freedesktop.org/doc/dbus-specification.html#standard-interfaces-peer'.") + +;; +;; +;; +;; +;; +;; +;; (defconst dbus-interface-introspectable (concat dbus-interface-dbus ".Introspectable") - "The interface supported by introspectable objects.") + "The interface supported by introspectable objects. +See URL `http://dbus.freedesktop.org/doc/dbus-specification.html#standard-interfaces-introspectable'.") + +;; +;; +;; +;; +;; (defconst dbus-interface-properties (concat dbus-interface-dbus ".Properties") - "The interface for property objects.") + "The interface for property objects. +See URL `http://dbus.freedesktop.org/doc/dbus-specification.html#standard-interfaces-properties'.") +;; +;; +;; +;; +;; +;; +;; +;; +;; +;; +;; +;; +;; +;; +;; +;; +;; +;; +;; +;; +;; + +(defconst dbus-interface-objectmanager + (concat dbus-interface-dbus ".ObjectManager") + "The object manager interface. +See URL `http://dbus.freedesktop.org/doc/dbus-specification.html#standard-interfaces-objectmanager'.") + +;; +;; +;; +;; +;; +;; +;; +;; +;; +;; +;; +;; +;; + +;; Emacs defaults. (defconst dbus-service-emacs "org.gnu.Emacs" "The well known service name of Emacs.") (defconst dbus-path-emacs "/org/gnu/Emacs" - "The object path head used by Emacs.") + "The object path namespace used by Emacs. +All object paths provided by the service `dbus-service-emacs' +shall be subdirectories of this path.") -(defconst dbus-message-type-invalid 0 - "This value is never a valid message type.") +(defconst dbus-interface-emacs "org.gnu.Emacs" + "The interface namespace used by Emacs.") -(defconst dbus-message-type-method-call 1 - "Message type of a method call message.") - -(defconst dbus-message-type-method-return 2 - "Message type of a method return message.") - -(defconst dbus-message-type-error 3 - "Message type of an error reply message.") - -(defconst dbus-message-type-signal 4 - "Message type of a signal message.") +;; D-Bus constants. (defmacro dbus-ignore-errors (&rest body) "Execute BODY; signal D-Bus error when `dbus-debug' is non-nil. @@ -105,15 +159,267 @@ Every function must accept two arguments, the event and the error variable caught in `condition-case' by `dbus-error'.") -;;; Hash table of registered functions. +;;; Basic D-Bus message functions. (defvar dbus-return-values-table (make-hash-table :test 'equal) "Hash table for temporary storing arguments of reply messages. -A key in this hash table is a list (BUS SERIAL). BUS is either a -Lisp symbol, `:system' or `:session', or a string denoting the -bus address. SERIAL is the serial number of the reply message. -See `dbus-call-method-non-blocking-handler' and -`dbus-call-method-non-blocking'.") +A key in this hash table is a list (:serial BUS SERIAL), like in +`dbus-registered-objects-table'. BUS is either a Lisp symbol, +`:system' or `:session', or a string denoting the bus address. +SERIAL is the serial number of the reply message.") + +(defun dbus-call-method-handler (&rest args) + "Handler for reply messages of asynchronous D-Bus message calls. +It calls the function stored in `dbus-registered-objects-table'. +The result will be made available in `dbus-return-values-table'." + (puthash (list :serial + (dbus-event-bus-name last-input-event) + (dbus-event-serial-number last-input-event)) + (if (= (length args) 1) (car args) args) + dbus-return-values-table)) + +(defun dbus-call-method (bus service path interface method &rest args) + "Call METHOD on the D-Bus BUS. + +BUS is either a Lisp symbol, `:system' or `:session', or a string +denoting the bus address. + +SERVICE is the D-Bus service name to be used. PATH is the D-Bus +object path SERVICE is registered at. INTERFACE is an interface +offered by SERVICE. It must provide METHOD. + +If the parameter `:timeout' is given, the following integer TIMEOUT +specifies the maximum number of milliseconds the method call must +return. The default value is 25,000. If the method call doesn't +return in time, a D-Bus error is raised. + +All other arguments ARGS are passed to METHOD as arguments. They are +converted into D-Bus types via the following rules: + + t and nil => DBUS_TYPE_BOOLEAN + number => DBUS_TYPE_UINT32 + integer => DBUS_TYPE_INT32 + float => DBUS_TYPE_DOUBLE + string => DBUS_TYPE_STRING + list => DBUS_TYPE_ARRAY + +All arguments can be preceded by a type symbol. For details about +type symbols, see Info node `(dbus)Type Conversion'. + +`dbus-call-method' returns the resulting values of METHOD as a list of +Lisp objects. The type conversion happens the other direction as for +input arguments. It follows the mapping rules: + + DBUS_TYPE_BOOLEAN => t or nil + DBUS_TYPE_BYTE => number + DBUS_TYPE_UINT16 => number + DBUS_TYPE_INT16 => integer + DBUS_TYPE_UINT32 => number or float + DBUS_TYPE_UNIX_FD => number or float + DBUS_TYPE_INT32 => integer or float + DBUS_TYPE_UINT64 => number or float + DBUS_TYPE_INT64 => integer or float + DBUS_TYPE_DOUBLE => float + DBUS_TYPE_STRING => string + DBUS_TYPE_OBJECT_PATH => string + DBUS_TYPE_SIGNATURE => string + DBUS_TYPE_ARRAY => list + DBUS_TYPE_VARIANT => list + DBUS_TYPE_STRUCT => list + DBUS_TYPE_DICT_ENTRY => list + +Example: + +\(dbus-call-method + :session \"org.gnome.seahorse\" \"/org/gnome/seahorse/keys/openpgp\" + \"org.gnome.seahorse.Keys\" \"GetKeyField\" + \"openpgp:657984B8C7A966DD\" \"simple-name\") + + => (t (\"Philip R. Zimmermann\")) + +If the result of the METHOD call is just one value, the converted Lisp +object is returned instead of a list containing this single Lisp object. + +\(dbus-call-method + :system \"org.freedesktop.Hal\" \"/org/freedesktop/Hal/devices/computer\" + \"org.freedesktop.Hal.Device\" \"GetPropertyString\" + \"system.kernel.machine\") + + => \"i686\"" + + (or (memq bus '(:system :session)) (stringp bus) + (signal 'wrong-type-argument (list 'keywordp bus))) + (or (stringp service) + (signal 'wrong-type-argument (list 'stringp service))) + (or (stringp path) + (signal 'wrong-type-argument (list 'stringp path))) + (or (stringp interface) + (signal 'wrong-type-argument (list 'stringp interface))) + (or (stringp method) + (signal 'wrong-type-argument (list 'stringp method))) + + (let ((timeout (plist-get args :timeout)) + (key + (apply + 'dbus-message-internal dbus-message-type-method-call + bus service path interface method 'dbus-call-method-handler args))) + ;; Wait until `dbus-call-method-handler' has put the result into + ;; `dbus-return-values-table'. If no timeout is given, use the + ;; default 25". + (with-timeout ((if timeout (/ timeout 1000.0) 25)) + (while (eq (gethash key dbus-return-values-table :ignore) :ignore) + (read-event nil nil 0.1))) + + ;; Cleanup `dbus-return-values-table'. Return the result. + (prog1 + (gethash key dbus-return-values-table) + (remhash key dbus-return-values-table)))) + +;; `dbus-call-method' works non-blocking now. +(defalias 'dbus-call-method-non-blocking 'dbus-call-method) +(make-obsolete 'dbus-call-method-non-blocking 'dbus-call-method "24.2") + +(defun dbus-call-method-asynchronously + (bus service path interface method handler &rest args) + "Call METHOD on the D-Bus BUS asynchronously. + +BUS is either a Lisp symbol, `:system' or `:session', or a string +denoting the bus address. + +SERVICE is the D-Bus service name to be used. PATH is the D-Bus +object path SERVICE is registered at. INTERFACE is an interface +offered by SERVICE. It must provide METHOD. + +HANDLER is a Lisp function, which is called when the corresponding +return message has arrived. If HANDLER is nil, no return message +will be expected. + +If the parameter `:timeout' is given, the following integer TIMEOUT +specifies the maximum number of milliseconds the method call must +return. The default value is 25,000. If the method call doesn't +return in time, a D-Bus error is raised. + +All other arguments ARGS are passed to METHOD as arguments. They are +converted into D-Bus types via the following rules: + + t and nil => DBUS_TYPE_BOOLEAN + number => DBUS_TYPE_UINT32 + integer => DBUS_TYPE_INT32 + float => DBUS_TYPE_DOUBLE + string => DBUS_TYPE_STRING + list => DBUS_TYPE_ARRAY + +All arguments can be preceded by a type symbol. For details about +type symbols, see Info node `(dbus)Type Conversion'. + +If HANDLER is a Lisp function, the function returns a key into the +hash table `dbus-registered-objects-table'. The corresponding entry +in the hash table is removed, when the return message has been arrived, +and HANDLER is called. + +Example: + +\(dbus-call-method-asynchronously + :system \"org.freedesktop.Hal\" \"/org/freedesktop/Hal/devices/computer\" + \"org.freedesktop.Hal.Device\" \"GetPropertyString\" 'message + \"system.kernel.machine\") + + => \(:serial :system 2) + + -| i686" + + (or (memq bus '(:system :session)) (stringp bus) + (signal 'wrong-type-argument (list 'keywordp bus))) + (or (stringp service) + (signal 'wrong-type-argument (list 'stringp service))) + (or (stringp path) + (signal 'wrong-type-argument (list 'stringp path))) + (or (stringp interface) + (signal 'wrong-type-argument (list 'stringp interface))) + (or (stringp method) + (signal 'wrong-type-argument (list 'stringp method))) + (or (null handler) (functionp handler) + (signal 'wrong-type-argument (list 'functionp handler))) + + (apply 'dbus-message-internal dbus-message-type-method-call + bus service path interface method handler args)) + +(defun dbus-send-signal (bus service path interface signal &rest args) + "Send signal SIGNAL on the D-Bus BUS. + +BUS is either a Lisp symbol, `:system' or `:session', or a string +denoting the bus address. The signal is sent from the D-Bus object +Emacs is registered at BUS. + +SERVICE is the D-Bus name SIGNAL is sent to. It can be either a known +name or a unique name. If SERVICE is nil, the signal is sent as +broadcast message. PATH is the D-Bus object path SIGNAL is sent from. +INTERFACE is an interface available at PATH. It must provide signal +SIGNAL. + +All other arguments ARGS are passed to SIGNAL as arguments. They are +converted into D-Bus types via the following rules: + + t and nil => DBUS_TYPE_BOOLEAN + number => DBUS_TYPE_UINT32 + integer => DBUS_TYPE_INT32 + float => DBUS_TYPE_DOUBLE + string => DBUS_TYPE_STRING + list => DBUS_TYPE_ARRAY + +All arguments can be preceded by a type symbol. For details about +type symbols, see Info node `(dbus)Type Conversion'. + +Example: + +\(dbus-send-signal + :session nil \"/org/gnu/Emacs\" \"org.gnu.Emacs.FileManager\" + \"FileModified\" \"/home/albinus/.emacs\")" + + (or (memq bus '(:system :session)) (stringp bus) + (signal 'wrong-type-argument (list 'keywordp bus))) + (or (null service) (stringp service) + (signal 'wrong-type-argument (list 'stringp service))) + (or (stringp path) + (signal 'wrong-type-argument (list 'stringp path))) + (or (stringp interface) + (signal 'wrong-type-argument (list 'stringp interface))) + (or (stringp signal) + (signal 'wrong-type-argument (list 'stringp signal))) + + (apply 'dbus-message-internal dbus-message-type-signal + bus service path interface signal args)) + +(defun dbus-method-return-internal (bus service serial &rest args) + "Return for message SERIAL on the D-Bus BUS. +This is an internal function, it shall not be used outside dbus.el." + + (or (memq bus '(:system :session)) (stringp bus) + (signal 'wrong-type-argument (list 'keywordp bus))) + (or (stringp service) + (signal 'wrong-type-argument (list 'stringp service))) + (or (natnump serial) + (signal 'wrong-type-argument (list 'natnump serial))) + + (apply 'dbus-message-internal dbus-message-type-method-return + bus service serial args)) + +(defun dbus-method-error-internal (bus service serial &rest args) + "Return error message for message SERIAL on the D-Bus BUS. +This is an internal function, it shall not be used outside dbus.el." + + (or (memq bus '(:system :session)) (stringp bus) + (signal 'wrong-type-argument (list 'keywordp bus))) + (or (stringp service) + (signal 'wrong-type-argument (list 'stringp service))) + (or (natnump serial) + (signal 'wrong-type-argument (list 'natnump serial))) + + (apply 'dbus-message-internal dbus-message-type-error + bus service serial args)) + + +;;; Hash table of registered functions. (defun dbus-list-hash-table () "Returns all registered member registrations to D-Bus. @@ -126,69 +432,78 @@ hash table." dbus-registered-objects-table) result)) -(defun dbus-unregister-object (object) - "Unregister OBJECT from D-Bus. -OBJECT must be the result of a preceding `dbus-register-method', -`dbus-register-property' or `dbus-register-signal' call. It -returns `t' if OBJECT has been unregistered, `nil' otherwise. +(defun dbus-setenv (bus variable value) + "Set the value of the BUS environment variable named VARIABLE to VALUE. -When OBJECT identifies the last method or property, which is -registered for the respective service, Emacs releases its -association to the service from D-Bus." - ;; Check parameter. - (unless (and (consp object) (not (null (car object))) (consp (cdr object))) - (signal 'wrong-type-argument (list 'D-Bus object))) +BUS is either a Lisp symbol, `:system' or `:session', or a string +denoting the bus address. Both VARIABLE and VALUE should be strings. - ;; Find the corresponding entry in the hash table. - (let* ((key (car object)) - (value (cadr object)) - (bus (car key)) - (service (car value)) - (entry (gethash key dbus-registered-objects-table)) - ret) - ;; key has the structure (BUS INTERFACE MEMBER). - ;; value has the structure (SERVICE PATH [HANDLER]). - ;; entry has the structure ((UNAME SERVICE PATH MEMBER [RULE]) ...). - ;; MEMBER is either a string (the handler), or a cons cell (a - ;; property value). UNAME and property values are not taken into - ;; account for comparison. +Normally, services inherit the environment of the BUS daemon. This +function adds to or modifies that environment when activating services. - ;; Loop over the registered functions. - (dolist (elt entry) - (when (equal - value - (butlast (cdr elt) (- (length (cdr elt)) (length value)))) - (setq ret t) - ;; Compute new hash value. If it is empty, remove it from the - ;; hash table. - (unless (puthash key (delete elt entry) dbus-registered-objects-table) - (remhash key dbus-registered-objects-table)) - ;; Remove match rule of signals. - (let ((rule (nth 4 elt))) - (when (stringp rule) - (setq service nil) ; We do not need to unregister the service. - (dbus-call-method - bus dbus-service-dbus dbus-path-dbus dbus-interface-dbus - "RemoveMatch" rule))))) - ;; Check, whether there is still a registered function or property - ;; for the given service. If not, unregister the service from the - ;; bus. - (when service - (dolist (elt entry) - (let (found) - (maphash - (lambda (k v) - (dolist (e v) - (ignore-errors - (when (and (equal bus (car k)) (string-equal service (cadr e))) - (setq found t))))) - dbus-registered-objects-table) - (unless found - (dbus-call-method - bus dbus-service-dbus dbus-path-dbus dbus-interface-dbus - "ReleaseName" service))))) - ;; Return. - ret)) +Some bus instances, such as `:system', may disable setting the environment." + (dbus-call-method + bus dbus-service-dbus dbus-path-dbus + dbus-interface-dbus "UpdateActivationEnvironment" + `(:array (:dict-entry ,variable ,value)))) + +(defun dbus-register-service (bus service &rest flags) + "Register known name SERVICE on the D-Bus BUS. + +BUS is either a Lisp symbol, `:system' or `:session', or a string +denoting the bus address. + +SERVICE is the D-Bus service name that should be registered. It must +be a known name. + +FLAGS are keywords, which control how the service name is registered. +The following keywords are recognized: + +`:allow-replacement': Allow another service to become the primary +owner if requested. + +`:replace-existing': Request to replace the current primary owner. + +`:do-not-queue': If we can not become the primary owner do not place +us in the queue. + +The function returns a keyword, indicating the result of the +operation. One of the following keywords is returned: + +`:primary-owner': Service has become the primary owner of the +requested name. + +`:in-queue': Service could not become the primary owner and has been +placed in the queue. + +`:exists': Service is already in the queue. + +`:already-owner': Service is already the primary owner." + + ;; Add ObjectManager handler. + (dbus-register-method + bus service nil dbus-interface-objectmanager "GetManagedObjects" + 'dbus-managed-objects-handler 'dont-register) + + (let ((arg 0) + reply) + (dolist (flag flags) + (setq arg + (+ arg + (case flag + (:allow-replacement 1) + (:replace-existing 2) + (:do-not-queue 4) + (t (signal 'wrong-type-argument (list flag))))))) + (setq reply (dbus-call-method + bus dbus-service-dbus dbus-path-dbus dbus-interface-dbus + "RequestName" service arg)) + (case reply + (1 :primary-owner) + (2 :in-queue) + (3 :exists) + (4 :already-owner) + (t (signal 'dbus-error (list "Could not register service" service)))))) (defun dbus-unregister-service (bus service) "Unregister all objects related to SERVICE from D-Bus BUS. @@ -209,7 +524,7 @@ queue of this service." (lambda (key value) (dolist (elt value) (ignore-errors - (when (and (equal bus (car key)) (string-equal service (cadr elt))) + (when (and (equal bus (cadr key)) (string-equal service (cadr elt))) (unless (puthash key (delete elt value) dbus-registered-objects-table) (remhash key dbus-registered-objects-table)))))) @@ -223,94 +538,274 @@ queue of this service." (3 :not-owner) (t (signal 'dbus-error (list "Could not unregister service" service)))))) -(defun dbus-call-method-non-blocking-handler (&rest args) - "Handler for reply messages of asynchronous D-Bus message calls. -It calls the function stored in `dbus-registered-objects-table'. -The result will be made available in `dbus-return-values-table'." - (puthash (list (dbus-event-bus-name last-input-event) - (dbus-event-serial-number last-input-event)) - (if (= (length args) 1) (car args) args) - dbus-return-values-table)) +(defun dbus-register-signal + (bus service path interface signal handler &rest args) + "Register for a signal on the D-Bus BUS. -(defun dbus-call-method-non-blocking - (bus service path interface method &rest args) - "Call METHOD on the D-Bus BUS, but don't block the event queue. -This is necessary for communicating to registered D-Bus methods, -which are running in the same Emacs process. +BUS is either a Lisp symbol, `:system' or `:session', or a string +denoting the bus address. -The arguments are the same as in `dbus-call-method'. +SERVICE is the D-Bus service name used by the sending D-Bus object. +It can be either a known name or the unique name of the D-Bus object +sending the signal. -usage: (dbus-call-method-non-blocking - BUS SERVICE PATH INTERFACE METHOD - &optional :timeout TIMEOUT &rest ARGS)" +PATH is the D-Bus object path SERVICE is registered. INTERFACE +is an interface offered by SERVICE. It must provide SIGNAL. +HANDLER is a Lisp function to be called when the signal is +received. It must accept as arguments the values SIGNAL is +sending. - (let ((key - (apply - 'dbus-call-method-asynchronously - bus service path interface method - 'dbus-call-method-non-blocking-handler args))) - ;; Wait until `dbus-call-method-non-blocking-handler' has put the - ;; result into `dbus-return-values-table'. - (while (eq (gethash key dbus-return-values-table :ignore) :ignore) - (read-event nil nil 0.1)) +SERVICE, PATH, INTERFACE and SIGNAL can be nil. This is +interpreted as a wildcard for the respective argument. - ;; Cleanup `dbus-return-values-table'. Return the result. - (prog1 - (gethash key dbus-return-values-table nil) - (remhash key dbus-return-values-table)))) +The remaining arguments ARGS can be keywords or keyword string pairs. +The meaning is as follows: -(defun dbus-name-owner-changed-handler (&rest args) - "Reapplies all member registrations to D-Bus. -This handler is applied when a \"NameOwnerChanged\" signal has -arrived. SERVICE is the object name for which the name owner has -been changed. OLD-OWNER is the previous owner of SERVICE, or the -empty string if SERVICE was not owned yet. NEW-OWNER is the new -owner of SERVICE, or the empty string if SERVICE loses any name owner. +`:argN' STRING: +`:pathN' STRING: This stands for the Nth argument of the +signal. `:pathN' arguments can be used for object path wildcard +matches as specified by D-Bus, whilest an `:argN' argument +requires an exact match. -usage: (dbus-name-owner-changed-handler service old-owner new-owner)" - (save-match-data - ;; Check the arguments. We should silently ignore it when they - ;; are wrong. - (if (and (= (length args) 3) - (stringp (car args)) - (stringp (cadr args)) - (stringp (caddr args))) - (let ((service (car args)) - (old-owner (cadr args))) - ;; Check whether SERVICE is a known name. - (when (not (string-match "^:" service)) - (maphash - (lambda (key value) - (dolist (elt value) - ;; key has the structure (BUS INTERFACE MEMBER). - ;; elt has the structure (UNAME SERVICE PATH HANDLER). - (when (string-equal old-owner (car elt)) - ;; Remove old key, and add new entry with changed name. - (dbus-unregister-object (list key (cdr elt))) - ;; Maybe we could arrange the lists a little bit better - ;; that we don't need to extract every single element? - (dbus-register-signal - ;; BUS SERVICE PATH - (nth 0 key) (nth 1 elt) (nth 2 elt) - ;; INTERFACE MEMBER HANDLER - (nth 1 key) (nth 2 key) (nth 3 elt))))) - (copy-hash-table dbus-registered-objects-table)))) - ;; The error is reported only in debug mode. - (when dbus-debug - (signal - 'dbus-error - (cons - (format "Wrong arguments of %s.NameOwnerChanged" dbus-interface-dbus) - args)))))) +`:arg-namespace' STRING: Register for the signals, which first +argument defines the service or interface namespace STRING. -;; Register the handler. -(when nil ;ignore-errors - (dbus-register-signal - :system dbus-service-dbus dbus-path-dbus dbus-interface-dbus - "NameOwnerChanged" 'dbus-name-owner-changed-handler) - (dbus-register-signal - :session dbus-service-dbus dbus-path-dbus dbus-interface-dbus - "NameOwnerChanged" 'dbus-name-owner-changed-handler)) +`:path-namespace' STRING: Register for the object path namespace +STRING. All signals sent from an object path, which has STRING as +the preceding string, are matched. This requires PATH to be nil. + +`:eavesdrop': Register for unicast signals which are not directed +to the D-Bus object Emacs is registered at D-Bus BUS, if the +security policy of BUS allows this. + +Example: + +\(defun my-signal-handler (device) + (message \"Device %s added\" device)) + +\(dbus-register-signal + :system \"org.freedesktop.Hal\" \"/org/freedesktop/Hal/Manager\" + \"org.freedesktop.Hal.Manager\" \"DeviceAdded\" 'my-signal-handler) + + => \(\(:signal :system \"org.freedesktop.Hal.Manager\" \"DeviceAdded\") + \(\"org.freedesktop.Hal\" \"/org/freedesktop/Hal/Manager\" my-signal-handler)) + +`dbus-register-signal' returns an object, which can be used in +`dbus-unregister-object' for removing the registration." + + (let ((counter 0) + (rule "type='signal'") + uname key key1 value) + + ;; Retrieve unique name of service. If service is a known name, + ;; we will register for the corresponding unique name, if any. + ;; Signals are sent always with the unique name as sender. Note: + ;; the unique name of `dbus-service-dbus' is that string itself. + (if (and (stringp service) + (not (zerop (length service))) + (not (string-equal service dbus-service-dbus)) + (not (string-match "^:" service))) + (setq uname (dbus-get-name-owner bus service)) + (setq uname service)) + + (setq rule (concat rule + (when uname (format ",sender='%s'" uname)) + (when interface (format ",interface='%s'" interface)) + (when signal (format ",member='%s'" signal)) + (when path (format ",path='%s'" path)))) + + ;; Add arguments to the rule. + (if (or (stringp (car args)) (null (car args))) + ;; As backward compatibility option, we allow just strings. + (dolist (arg args) + (if (stringp arg) + (setq rule (concat rule (format ",arg%d='%s'" counter arg))) + (if arg (signal 'wrong-type-argument (list "Wrong argument" arg)))) + (setq counter (1+ counter))) + + ;; Parse keywords. + (while args + (setq + key (car args) + rule (concat + rule + (cond + ;; `:arg0' .. `:arg63', `:path0' .. `:path63'. + ((and (keywordp key) + (string-match + "^:\\(arg\\|path\\)\\([[:digit:]]+\\)$" + (symbol-name key))) + (setq counter (match-string 2 (symbol-name key)) + args (cdr args) + value (car args)) + (unless (and (<= counter 63) (stringp value)) + (signal 'wrong-type-argument + (list "Wrong argument" key value))) + (format + ",arg%s%s='%s'" + counter + (if (string-equal (match-string 1 (symbol-name key)) "path") + "path" "") + value)) + ;; `:arg-namespace', `:path-namespace'. + ((and (keywordp key) + (string-match + "^:\\(arg\\|path\\)-namespace$" (symbol-name key))) + (setq args (cdr args) + value (car args)) + (unless (stringp value) + (signal 'wrong-type-argument + (list "Wrong argument" key value))) + (format + ",%s='%s'" + (if (string-equal (match-string 1 (symbol-name key)) "path") + "path_namespace" "arg0namespace") + value)) + ;; `:eavesdrop'. + ((eq key :eavesdrop) + ",eavesdrop='true'") + (t (signal 'wrong-type-argument (list "Wrong argument" key))))) + args (cdr args)))) + + ;; Add the rule to the bus. + (condition-case err + (dbus-call-method + bus dbus-service-dbus dbus-path-dbus dbus-interface-dbus + "AddMatch" rule) + (dbus-error + (if (not (string-match "eavesdrop" rule)) + (signal (car err) (cdr err)) + ;; The D-Bus spec says we shall fall back to a rule without eavesdrop. + (when dbus-debug (message "Removing eavesdrop from rule %s" rule)) + (setq rule (replace-regexp-in-string ",eavesdrop='true'" "" rule)) + (dbus-call-method + bus dbus-service-dbus dbus-path-dbus dbus-interface-dbus + "AddMatch" rule)))) + + (when dbus-debug (message "Matching rule \"%s\" created" rule)) + + ;; Create a hash table entry. + (setq key (list :signal bus interface signal) + key1 (list uname service path handler rule) + value (gethash key dbus-registered-objects-table)) + (unless (member key1 value) + (puthash key (cons key1 value) dbus-registered-objects-table)) + + ;; Return the object. + (list key (list service path handler)))) + +(defun dbus-register-method + (bus service path interface method handler &optional dont-register-service) + "Register for method METHOD on the D-Bus BUS. + +BUS is either a Lisp symbol, `:system' or `:session', or a string +denoting the bus address. + +SERVICE is the D-Bus service name of the D-Bus object METHOD is +registered for. It must be a known name (See discussion of +DONT-REGISTER-SERVICE below). + +PATH is the D-Bus object path SERVICE is registered (See discussion of +DONT-REGISTER-SERVICE below). INTERFACE is the interface offered by +SERVICE. It must provide METHOD. + +HANDLER is a Lisp function to be called when a method call is +received. It must accept the input arguments of METHOD. The return +value of HANDLER is used for composing the returning D-Bus message. +In case HANDLER shall return a reply message with an empty argument +list, HANDLER must return the symbol `:ignore'. + +When DONT-REGISTER-SERVICE is non-nil, the known name SERVICE is not +registered. This means that other D-Bus clients have no way of +noticing the newly registered method. When interfaces are constructed +incrementally by adding single methods or properties at a time, +DONT-REGISTER-SERVICE can be used to prevent other clients from +discovering the still incomplete interface." + + ;; Register SERVICE. + (unless (or dont-register-service + (member service (dbus-list-names bus))) + (dbus-register-service bus service)) + + ;; Create a hash table entry. We use nil for the unique name, + ;; because the method might be called from anybody. + (let* ((key (list :method bus interface method)) + (key1 (list nil service path handler)) + (value (gethash key dbus-registered-objects-table))) + + (unless (member key1 value) + (puthash key (cons key1 value) dbus-registered-objects-table)) + + ;; Return the object. + (list key (list service path handler)))) + +(defun dbus-unregister-object (object) + "Unregister OBJECT from D-Bus. +OBJECT must be the result of a preceding `dbus-register-method', +`dbus-register-property' or `dbus-register-signal' call. It +returns `t' if OBJECT has been unregistered, `nil' otherwise. + +When OBJECT identifies the last method or property, which is +registered for the respective service, Emacs releases its +association to the service from D-Bus." + ;; Check parameter. + (unless (and (consp object) (not (null (car object))) (consp (cdr object))) + (signal 'wrong-type-argument (list 'D-Bus object))) + + ;; Find the corresponding entry in the hash table. + (let* ((key (car object)) + (type (car key)) + (bus (cadr key)) + (value (cadr object)) + (service (car value)) + (entry (gethash key dbus-registered-objects-table)) + ret) + ;; key has the structure (TYPE BUS INTERFACE MEMBER). + ;; value has the structure (SERVICE PATH [HANDLER]). + ;; entry has the structure ((UNAME SERVICE PATH MEMBER [RULE]) ...). + ;; MEMBER is either a string (the handler), or a cons cell (a + ;; property value). UNAME and property values are not taken into + ;; account for comparison. + + ;; Loop over the registered functions. + (dolist (elt entry) + (when (equal + value + (butlast (cdr elt) (- (length (cdr elt)) (length value)))) + (setq ret t) + ;; Compute new hash value. If it is empty, remove it from the + ;; hash table. + (unless (puthash key (delete elt entry) dbus-registered-objects-table) + (remhash key dbus-registered-objects-table)) + ;; Remove match rule of signals. + (when (eq type :signal) + (dbus-call-method + bus dbus-service-dbus dbus-path-dbus dbus-interface-dbus + "RemoveMatch" (nth 4 elt))))) + + ;; Check, whether there is still a registered function or property + ;; for the given service. If not, unregister the service from the + ;; bus. + (when (and service (memq type '(:method :property)) + (not (catch :found + (progn + (maphash + (lambda (k v) + (dolist (e v) + (ignore-errors + (and + ;; Bus. + (equal bus (cadr k)) + ;; Service. + (string-equal service (cadr e)) + ;; Non-empty object path. + (caddr e) + (throw :found t))))) + dbus-registered-objects-table) + nil)))) + (dbus-unregister-service bus service)) + ;; Return. + ret)) ;;; D-Bus type conversion. @@ -437,9 +932,9 @@ If the HANDLER returns a `dbus-error', it is propagated as return message." (dbus-ignore-errors (if (eq result :ignore) (dbus-method-return-internal - (nth 1 event) (nth 3 event) (nth 4 event)) + (nth 1 event) (nth 4 event) (nth 3 event)) (apply 'dbus-method-return-internal - (nth 1 event) (nth 3 event) (nth 4 event) + (nth 1 event) (nth 4 event) (nth 3 event) (if (consp result) result (list result))))))) ;; Error handling. (dbus-error @@ -447,7 +942,7 @@ If the HANDLER returns a `dbus-error', it is propagated as return message." (when (= dbus-message-type-method-call (nth 2 event)) (dbus-ignore-errors (dbus-method-error-internal - (nth 1 event) (nth 3 event) (nth 4 event) (cadr err)))) + (nth 1 event) (nth 4 event) (nth 3 event) (cadr err)))) ;; Propagate D-Bus error messages. (run-hook-with-args 'dbus-event-error-hooks event err) (when (or dbus-debug (= dbus-message-type-error (nth 2 event))) @@ -596,11 +1091,11 @@ are strings. The result, the introspection data, is a string in XML format." ;; We don't want to raise errors. `dbus-call-method-non-blocking' ;; is used, because the handler can be registered in our Emacs - ;; instance; caller an callee would block each other. + ;; instance; caller and callee would block each other. (dbus-ignore-errors - (funcall - (if noninteractive 'dbus-call-method 'dbus-call-method-non-blocking) - bus service path dbus-interface-introspectable "Introspect"))) + (dbus-call-method + bus service path dbus-interface-introspectable "Introspect" + :timeout 1000))) (defun dbus-introspect-xml (bus service path) "Return the introspection data of SERVICE in D-Bus BUS at object path PATH. @@ -854,12 +1349,11 @@ be \"out\"." It will be checked at BUS, SERVICE, PATH. The result can be any valid D-Bus value, or `nil' if there is no PROPERTY." (dbus-ignore-errors - ;; "Get" returns a variant, so we must use the `car'. - (car - (funcall - (if noninteractive 'dbus-call-method 'dbus-call-method-non-blocking) - bus service path dbus-interface-properties - "Get" :timeout 500 interface property)))) + ;; "Get" returns a variant, so we must use the `car'. + (car + (dbus-call-method + bus service path dbus-interface-properties + "Get" :timeout 500 interface property)))) (defun dbus-set-property (bus service path interface property value) "Set value of PROPERTY of INTERFACE to VALUE. @@ -867,13 +1361,12 @@ It will be checked at BUS, SERVICE, PATH. When the value has been set successful, the result is VALUE. Otherwise, `nil' is returned." (dbus-ignore-errors - ;; "Set" requires a variant. - (funcall - (if noninteractive 'dbus-call-method 'dbus-call-method-non-blocking) - bus service path dbus-interface-properties - "Set" :timeout 500 interface property (list :variant value)) - ;; Return VALUE. - (dbus-get-property bus service path interface property))) + ;; "Set" requires a variant. + (dbus-call-method + bus service path dbus-interface-properties + "Set" :timeout 500 interface property (list :variant value)) + ;; Return VALUE. + (dbus-get-property bus service path interface property))) (defun dbus-get-all-properties (bus service path interface) "Return all properties of INTERFACE at BUS, SERVICE, PATH. @@ -884,10 +1377,7 @@ name of the property, and its value. If there are no properties, ;; "GetAll" returns "a{sv}". (let (result) (dolist (dict - (funcall - (if noninteractive - 'dbus-call-method - 'dbus-call-method-non-blocking) + (dbus-call-method bus service path dbus-interface-properties "GetAll" :timeout 500 interface) result) @@ -931,14 +1421,7 @@ constructed incrementally by adding single methods or properties at a time, DONT-REGISTER-SERVICE can be used to prevent other clients from discovering the still incomplete interface." (unless (member access '(:read :readwrite)) - (signal 'dbus-error (list "Access type invalid" access))) - - ;; Register SERVICE. - (unless (or dont-register-service - (member service (dbus-list-names bus))) - (dbus-call-method - bus dbus-service-dbus dbus-path-dbus dbus-interface-dbus - "RequestName" service 0)) + (signal 'wrong-type-argument (list "Access type invalid" access))) ;; Add handlers for the three property-related methods. (dbus-register-method @@ -951,20 +1434,20 @@ clients from discovering the still incomplete interface." bus service path dbus-interface-properties "Set" 'dbus-property-handler 'dont-register) - ;; Register the name SERVICE with BUS. - (unless dont-register-service + ;; Register SERVICE. + (unless (or dont-register-service (member service (dbus-list-names bus))) (dbus-register-service bus service)) ;; Send the PropertiesChanged signal. (when emits-signal (dbus-send-signal bus service path dbus-interface-properties "PropertiesChanged" - (list (list :dict-entry property (list :variant value))) + `((:dict-entry ,property (:variant ,value))) '(:array))) ;; Create a hash table entry. We use nil for the unique name, ;; because the property might be accessed from anybody. - (let ((key (list bus interface property)) + (let ((key (list :property bus interface property)) (val (list (list @@ -979,7 +1462,7 @@ clients from discovering the still incomplete interface." (defun dbus-property-handler (&rest args) "Default handler for the \"org.freedesktop.DBus.Properties\" interface. -It will be registered for all objects created by `dbus-register-object'." +It will be registered for all objects created by `dbus-register-property'." (let ((bus (dbus-event-bus-name last-input-event)) (service (dbus-event-service-name last-input-event)) (path (dbus-event-path-name last-input-event)) @@ -989,15 +1472,15 @@ It will be registered for all objects created by `dbus-register-object'." (cond ;; "Get" returns a variant. ((string-equal method "Get") - (let ((entry (gethash (list bus interface property) + (let ((entry (gethash (list :property bus interface property) dbus-registered-objects-table))) (when (string-equal path (nth 2 (car entry))) - (list (list :variant (cdar (last (car entry)))))))) + `((:variant ,(cdar (last (car entry)))))))) ;; "Set" expects a variant. ((string-equal method "Set") (let* ((value (caar (cddr args))) - (entry (gethash (list bus interface property) + (entry (gethash (list :property bus interface property) dbus-registered-objects-table)) ;; The value of the hash table is a list; in case of ;; properties it contains just one element (UNAME SERVICE @@ -1012,7 +1495,7 @@ It will be registered for all objects created by `dbus-register-object'." (unless (member :readwrite (car object)) (signal 'dbus-error (list "Property not writable at path" property path))) - (puthash (list bus interface property) + (puthash (list :property bus interface property) (list (append (butlast (car entry)) (list (cons (car object) value)))) dbus-registered-objects-table) @@ -1020,7 +1503,7 @@ It will be registered for all objects created by `dbus-register-object'." (when (member :emits-signal (car object)) (dbus-send-signal bus service path dbus-interface-properties "PropertiesChanged" - (list (list :dict-entry property (list :variant value))) + `((:dict-entry ,property (:variant ,value))) '(:array))) ;; Return empty reply. :ignore)) @@ -1030,7 +1513,7 @@ It will be registered for all objects created by `dbus-register-object'." (let (result) (maphash (lambda (key val) - (when (and (equal (butlast key) (list bus interface)) + (when (and (equal (butlast key) (list :property bus interface)) (string-equal path (nth 2 (car val))) (not (functionp (car (last (car val)))))) (add-to-list @@ -1042,15 +1525,151 @@ It will be registered for all objects created by `dbus-register-object'." ;; Return the result, or an empty array. (list :array (or result '(:signature "{sv}")))))))) + +;;; D-Bus object manager. + +(defun dbus-get-all-managed-objects (bus service path) + "Return all objects at BUS, SERVICE, PATH, and the children of PATH. +The result is a list of objects. Every object is a cons of an +existing path name, and the list of available interface objects. +An interface object is another cons, which car is the interface +name, and the cdr is the list of properties as returned by +`dbus-get-all-properties' for that path and interface. Example: + +\(dbus-get-all-managed-objects :session \"org.gnome.SettingsDaemon\" \"/\") + + => \(\(\"/org/gnome/SettingsDaemon/MediaKeys\" + \(\"org.gnome.SettingsDaemon.MediaKeys\") + \(\"org.freedesktop.DBus.Peer\") + \(\"org.freedesktop.DBus.Introspectable\") + \(\"org.freedesktop.DBus.Properties\") + \(\"org.freedesktop.DBus.ObjectManager\")) + \(\"/org/gnome/SettingsDaemon/Power\" + \(\"org.gnome.SettingsDaemon.Power.Keyboard\") + \(\"org.gnome.SettingsDaemon.Power.Screen\") + \(\"org.gnome.SettingsDaemon.Power\" + \(\"Icon\" . \". GThemedIcon battery-full-charged-symbolic \") + \(\"Tooltip\" . \"Laptop battery is charged\")) + \(\"org.freedesktop.DBus.Peer\") + \(\"org.freedesktop.DBus.Introspectable\") + \(\"org.freedesktop.DBus.Properties\") + \(\"org.freedesktop.DBus.ObjectManager\")) + ...) + +If possible, \"org.freedesktop.DBus.ObjectManager.GetManagedObjects\" +is used for retrieving the information. Otherwise, the information +is collected via \"org.freedesktop.DBus.Introspectable.Introspect\" +and \"org.freedesktop.DBus.Properties.GetAll\", which is slow." + (let ((result + ;; Direct call. Fails, if the target does not support the + ;; object manager interface. + (dbus-ignore-errors + (dbus-call-method + bus service path dbus-interface-objectmanager + "GetManagedObjects" :timeout 1000)))) + + (if result + ;; Massage the returned structure. + (dolist (entry result result) + ;; "a{oa{sa{sv}}}". + (dolist (entry1 (cdr entry)) + ;; "a{sa{sv}}". + (dolist (entry2 entry1) + ;; "a{sv}". + (if (cadr entry2) + ;; "sv". + (dolist (entry3 (cadr entry2)) + (setcdr entry3 (caadr entry3))) + (setcdr entry2 nil))))) + + ;; Fallback: collect the information. Slooow! + (dolist (object + (dbus-introspect-get-all-nodes bus service path) + result) + (let (result1) + (dolist + (interface + (dbus-introspect-get-interface-names bus service object) + result1) + (add-to-list + 'result1 + (cons interface + (dbus-get-all-properties bus service object interface)))) + (when result1 + (add-to-list 'result (cons object result1)))))))) + +(defun dbus-managed-objects-handler () + "Default handler for the \"org.freedesktop.DBus.ObjectManager\" interface. +It will be registered for all objects created by `dbus-register-method'." + (let* ((last-input-event last-input-event) + (bus (dbus-event-bus-name last-input-event)) + (service (dbus-event-service-name last-input-event)) + (path (dbus-event-path-name last-input-event))) + ;; "GetManagedObjects" returns "a{oa{sa{sv}}}". + (let (interfaces result) + + ;; Check for object path wildcard interfaces. + (maphash + (lambda (key val) + (when (and (equal (butlast key 2) (list :method bus)) + (null (nth 2 (car-safe val)))) + (add-to-list 'interfaces (nth 2 key)))) + dbus-registered-objects-table) + + ;; Check all registered object paths. + (maphash + (lambda (key val) + (let ((object (or (nth 2 (car-safe val)) "")) + (interface (nth 2 key))) + (when (and (equal (butlast key 2) (list :method bus)) + (string-prefix-p path object)) + (dolist (interface (cons (nth 2 key) interfaces)) + (unless (assoc object result) + (add-to-list 'result (list object))) + (unless (assoc interface (cdr (assoc object result))) + (setcdr + (assoc object result) + (append + (list (cons + interface + ;; We simulate "org.freedesktop.DBus.Properties.GetAll" + ;; by using an appropriate D-Bus event. + (let ((last-input-event + (append + (butlast last-input-event 4) + (list object dbus-interface-properties + "GetAll" 'dbus-property-handler)))) + (dbus-property-handler interface)))) + (cdr (assoc object result))))))))) + dbus-registered-objects-table) + + ;; Return the result, or an empty array. + (list + :array + (or + (mapcar + (lambda (x) + (list + :dict-entry :object-path (car x) + (cons :array (mapcar (lambda (y) (cons :dict-entry y)) (cdr x))))) + result) + '(:signature "{oa{sa{sv}}}")))))) + -;; Initialize :system and :session buses. This adds their file +;; Initialize `:system' and `:session' buses. This adds their file ;; descriptors to input_wait_mask, in order to detect incoming ;; messages immediately. (when (featurep 'dbusbind) (dbus-ignore-errors - (dbus-init-bus :system) + (dbus-init-bus :system)) + (dbus-ignore-errors (dbus-init-bus :session))) (provide 'dbus) +;;; TODO: + +;; * Implement org.freedesktop.DBus.ObjectManager.InterfacesAdded and +;; org.freedesktop.DBus.ObjectManager.InterfacesRemoved. + ;;; dbus.el ends here diff --git a/src/ChangeLog b/src/ChangeLog index a1220aeaa7d..205728f91da 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,48 @@ +2012-04-22 Michael Albinus + + Move functions from C to Lisp. Make non-blocking method calls + the default. Implement further D-Bus standard interfaces. + + * dbusbind.c (DBUS_NUM_MESSAGE_TYPES): Declare. + (QCdbus_request_name_allow_replacement) + (QCdbus_request_name_replace_existing) + (QCdbus_request_name_do_not_queue) + (QCdbus_request_name_reply_primary_owner) + (QCdbus_request_name_reply_in_queue) + (QCdbus_request_name_reply_exists) + (QCdbus_request_name_reply_already_owner): Move to dbus.el. + (QCdbus_registered_serial, QCdbus_registered_method) + (QCdbus_registered_signal): New Lisp objects. + (XD_DEBUG_MESSAGE): Use sizeof. + (XD_MESSAGE_TYPE_TO_STRING, XD_OBJECT_TO_STRING) + (XD_DBUS_VALIDATE_BUS_ADDRESS, XD_DBUS_VALIDATE_OBJECT) + (XD_DBUS_VALIDATE_BUS_NAME, XD_DBUS_VALIDATE_PATH) + (XD_DBUS_VALIDATE_INTERFACE, XD_DBUS_VALIDATE_MEMBER): New macros. + (XD_CHECK_DBUS_SERIAL): Rename from CHECK_DBUS_SERIAL_GET_SERIAL. + (xd_signature, xd_append_arg): Allow float for integer types. + (xd_get_connection_references): New function. + (xd_get_connection_address): Rename from xd_initialize. Return + cached address. + (xd_remove_watch): Do not unset $DBUS_SESSION_BUS_ADDRESS. + (xd_close_bus): Rename from Fdbus_close_bus. Not needed on Lisp + level. + (Fdbus_init_bus): New optional arg PRIVATE. Cache address. + Return number of recounts. + (Fdbus_get_unique_name): Make stronger parameter check. + (Fdbus_message_internal): New defun. + (Fdbus_call_method, Fdbus_call_method_asynchronously) + (Fdbus_method_return_internal, Fdbus_method_error_internal) + (Fdbus_send_signal, Fdbus_register_service) + (Fdbus_register_signal, Fdbus_register_method): Move to dbus.el. + (xd_read_message_1): Obey new structure of Vdbus_registered_objects. + (xd_read_queued_messages): Obey new structure of Vdbus_registered_buses. + (Vdbus_compiled_version, Vdbus_runtime_version) + (Vdbus_message_type_invalid, Vdbus_message_type_method_call) + (Vdbus_message_type_method_return, Vdbus_message_type_error) + (Vdbus_message_type_signal): New defvars. + (Vdbus_registered_buses, Vdbus_registered_objects_table): Adapt + docstring. + 2012-04-22 Paul Eggert Fix GC_MALLOC_CHECK debugging output on 64-bit hosts. diff --git a/src/dbusbind.c b/src/dbusbind.c index ad1a3f3cbe8..78e5c80baf3 100644 --- a/src/dbusbind.c +++ b/src/dbusbind.c @@ -28,19 +28,15 @@ along with GNU Emacs. If not, see . */ #include "keyboard.h" #include "process.h" +#ifndef DBUS_NUM_MESSAGE_TYPES +#define DBUS_NUM_MESSAGE_TYPES 5 +#endif + /* Subroutines. */ static Lisp_Object Qdbus_init_bus; -static Lisp_Object Qdbus_close_bus; static Lisp_Object Qdbus_get_unique_name; -static Lisp_Object Qdbus_call_method; -static Lisp_Object Qdbus_call_method_asynchronously; -static Lisp_Object Qdbus_method_return_internal; -static Lisp_Object Qdbus_method_error_internal; -static Lisp_Object Qdbus_send_signal; -static Lisp_Object Qdbus_register_service; -static Lisp_Object Qdbus_register_signal; -static Lisp_Object Qdbus_register_method; +static Lisp_Object Qdbus_message_internal; /* D-Bus error symbol. */ static Lisp_Object Qdbus_error; @@ -51,17 +47,6 @@ static Lisp_Object QCdbus_system_bus, QCdbus_session_bus; /* Lisp symbol for method call timeout. */ static Lisp_Object QCdbus_timeout; -/* Lisp symbols for name request flags. */ -static Lisp_Object QCdbus_request_name_allow_replacement; -static Lisp_Object QCdbus_request_name_replace_existing; -static Lisp_Object QCdbus_request_name_do_not_queue; - -/* Lisp symbols for name request replies. */ -static Lisp_Object QCdbus_request_name_reply_primary_owner; -static Lisp_Object QCdbus_request_name_reply_in_queue; -static Lisp_Object QCdbus_request_name_reply_exists; -static Lisp_Object QCdbus_request_name_reply_already_owner; - /* Lisp symbols of D-Bus types. */ static Lisp_Object QCdbus_type_byte, QCdbus_type_boolean; static Lisp_Object QCdbus_type_int16, QCdbus_type_uint16; @@ -75,6 +60,10 @@ static Lisp_Object QCdbus_type_unix_fd; static Lisp_Object QCdbus_type_array, QCdbus_type_variant; static Lisp_Object QCdbus_type_struct, QCdbus_type_dict_entry; +/* Lisp symbols of objects in `dbus-registered-objects-table'. */ +static Lisp_Object QCdbus_registered_serial, QCdbus_registered_method; +static Lisp_Object QCdbus_registered_signal; + /* Whether we are reading a D-Bus event. */ static int xd_in_read_queued_messages = 0; @@ -120,14 +109,14 @@ static int xd_in_read_queued_messages = 0; } while (0) /* Macros for debugging. In order to enable them, build with - "MYCPPFLAGS='-DDBUS_DEBUG -Wall' make". */ + "env MYCPPFLAGS='-DDBUS_DEBUG -Wall' make". */ #ifdef DBUS_DEBUG -#define XD_DEBUG_MESSAGE(...) \ - do { \ - char s[1024]; \ +#define XD_DEBUG_MESSAGE(...) \ + do { \ + char s[1024]; \ snprintf (s, sizeof s, __VA_ARGS__); \ - printf ("%s: %s\n", __func__, s); \ - message ("%s: %s", __func__, s); \ + printf ("%s: %s\n", __func__, s); \ + message ("%s: %s", __func__, s); \ } while (0) #define XD_DEBUG_VALID_LISP_OBJECT_P(object) \ do { \ @@ -144,7 +133,7 @@ static int xd_in_read_queued_messages = 0; if (!NILP (Vdbus_debug)) \ { \ char s[1024]; \ - snprintf (s, 1023, __VA_ARGS__); \ + snprintf (s, sizeof s, __VA_ARGS__); \ message ("%s: %s", __func__, s); \ } \ } while (0) @@ -241,23 +230,112 @@ xd_symbol_to_dbus_type (Lisp_Object object) #define XD_NEXT_VALUE(object) \ ((XD_DBUS_TYPE_P (CAR_SAFE (object))) ? CDR_SAFE (object) : object) +/* Transform the message type to its string representation for debug + messages. */ +#define XD_MESSAGE_TYPE_TO_STRING(mtype) \ + ((mtype == DBUS_MESSAGE_TYPE_INVALID) \ + ? "DBUS_MESSAGE_TYPE_INVALID" \ + : (mtype == DBUS_MESSAGE_TYPE_METHOD_CALL) \ + ? "DBUS_MESSAGE_TYPE_METHOD_CALL" \ + : (mtype == DBUS_MESSAGE_TYPE_METHOD_RETURN) \ + ? "DBUS_MESSAGE_TYPE_METHOD_RETURN" \ + : (mtype == DBUS_MESSAGE_TYPE_ERROR) \ + ? "DBUS_MESSAGE_TYPE_ERROR" \ + : "DBUS_MESSAGE_TYPE_SIGNAL") + +/* Transform the object to its string representation for debug + messages. */ +#define XD_OBJECT_TO_STRING(object) \ + SDATA (format2 ("%s", object, Qnil)) + /* Check whether X is a valid dbus serial number. If valid, set SERIAL to its value. Otherwise, signal an error. */ -#define CHECK_DBUS_SERIAL_GET_SERIAL(x, serial) \ - do \ - { \ - dbus_uint32_t DBUS_SERIAL_MAX = -1; \ - if (NATNUMP (x) && XINT (x) <= DBUS_SERIAL_MAX) \ - serial = XINT (x); \ - else if (MOST_POSITIVE_FIXNUM < DBUS_SERIAL_MAX \ - && FLOATP (x) \ - && 0 <= XFLOAT_DATA (x) \ - && XFLOAT_DATA (x) <= DBUS_SERIAL_MAX) \ - serial = XFLOAT_DATA (x); \ - else \ - XD_SIGNAL2 (build_string ("Invalid dbus serial"), x); \ - } \ - while (0) +#define XD_CHECK_DBUS_SERIAL(x, serial) \ + do { \ + dbus_uint32_t DBUS_SERIAL_MAX = -1; \ + if (NATNUMP (x) && XINT (x) <= DBUS_SERIAL_MAX) \ + serial = XINT (x); \ + else if (MOST_POSITIVE_FIXNUM < DBUS_SERIAL_MAX \ + && FLOATP (x) \ + && 0 <= XFLOAT_DATA (x) \ + && XFLOAT_DATA (x) <= DBUS_SERIAL_MAX) \ + serial = XFLOAT_DATA (x); \ + else \ + XD_SIGNAL2 (build_string ("Invalid dbus serial"), x); \ + } while (0) + +#define XD_DBUS_VALIDATE_BUS_ADDRESS(bus) \ + do { \ + if (STRINGP (bus)) \ + { \ + DBusAddressEntry **entries; \ + int len; \ + DBusError derror; \ + dbus_error_init (&derror); \ + if (!dbus_parse_address (SSDATA (bus), &entries, &len, &derror)) \ + XD_ERROR (derror); \ + /* Cleanup. */ \ + dbus_error_free (&derror); \ + dbus_address_entries_free (entries); \ + } \ + \ + else \ + { \ + CHECK_SYMBOL (bus); \ + if (!(EQ (bus, QCdbus_system_bus) || EQ (bus, QCdbus_session_bus))) \ + XD_SIGNAL2 (build_string ("Wrong bus name"), bus); \ + /* We do not want to have an autolaunch for the session bus. */ \ + if (EQ (bus, QCdbus_session_bus) \ + && getenv ("DBUS_SESSION_BUS_ADDRESS") == NULL) \ + XD_SIGNAL2 (build_string ("No connection to bus"), bus); \ + } \ + } while (0) + +#define XD_DBUS_VALIDATE_OBJECT(object, func) \ + do { \ + if (!NILP (object)) \ + { \ + DBusError derror; \ + CHECK_STRING (object); \ + dbus_error_init (&derror); \ + if (!func (SSDATA (object), &derror)) \ + XD_ERROR (derror); \ + /* Cleanup. */ \ + dbus_error_free (&derror); \ + } \ + } while (0) + +#if HAVE_DBUS_VALIDATE_BUS_NAME +#define XD_DBUS_VALIDATE_BUS_NAME(bus_name) \ + XD_DBUS_VALIDATE_OBJECT(bus_name, dbus_validate_bus_name); +#else +#define XD_DBUS_VALIDATE_BUS_NAME(bus_name) \ + if (!NILP (bus_name)) CHECK_STRING (bus_name); +#endif + +#if HAVE_DBUS_VALIDATE_PATH +#define XD_DBUS_VALIDATE_PATH(path) \ + XD_DBUS_VALIDATE_OBJECT(path, dbus_validate_path); +#else +#define XD_DBUS_VALIDATE_PATH(path) \ + if (!NILP (path)) CHECK_STRING (path); +#endif + +#if HAVE_DBUS_VALIDATE_INTERFACE +#define XD_DBUS_VALIDATE_INTERFACE(interface) \ + XD_DBUS_VALIDATE_OBJECT(interface, dbus_validate_interface); +#else +#define XD_DBUS_VALIDATE_INTERFACE(interface) \ + if (!NILP (interface)) CHECK_STRING (interface); +#endif + +#if HAVE_DBUS_VALIDATE_MEMBER +#define XD_DBUS_VALIDATE_MEMBER(member) \ + XD_DBUS_VALIDATE_OBJECT(member, dbus_validate_member); +#else +#define XD_DBUS_VALIDATE_MEMBER(member) \ + if (!NILP (member)) CHECK_STRING (member); +#endif /* Append to SIGNATURE a copy of X, making sure SIGNATURE does not become too long. */ @@ -293,11 +371,6 @@ xd_signature (char *signature, unsigned int dtype, unsigned int parent_type, Lis { case DBUS_TYPE_BYTE: case DBUS_TYPE_UINT16: - case DBUS_TYPE_UINT32: - case DBUS_TYPE_UINT64: -#ifdef DBUS_TYPE_UNIX_FD - case DBUS_TYPE_UNIX_FD: -#endif CHECK_NATNUM (object); sprintf (signature, "%c", dtype); break; @@ -309,14 +382,19 @@ xd_signature (char *signature, unsigned int dtype, unsigned int parent_type, Lis break; case DBUS_TYPE_INT16: - case DBUS_TYPE_INT32: - case DBUS_TYPE_INT64: CHECK_NUMBER (object); sprintf (signature, "%c", dtype); break; + case DBUS_TYPE_UINT32: + case DBUS_TYPE_UINT64: +#ifdef DBUS_TYPE_UNIX_FD + case DBUS_TYPE_UNIX_FD: +#endif + case DBUS_TYPE_INT32: + case DBUS_TYPE_INT64: case DBUS_TYPE_DOUBLE: - CHECK_FLOAT (object); + CHECK_NUMBER_OR_FLOAT (object); sprintf (signature, "%c", dtype); break; @@ -352,8 +430,8 @@ xd_signature (char *signature, unsigned int dtype, unsigned int parent_type, Lis } /* If the element type is DBUS_TYPE_SIGNATURE, and this is the - only element, the value of this element is used as he array's - element signature. */ + only element, the value of this element is used as the + array's element signature. */ if ((subtype == DBUS_TYPE_SIGNATURE) && STRINGP (CAR_SAFE (XD_NEXT_VALUE (elt))) && NILP (CDR_SAFE (XD_NEXT_VALUE (elt)))) @@ -505,9 +583,8 @@ xd_append_arg (unsigned int dtype, Lisp_Object object, DBusMessageIter *iter) } case DBUS_TYPE_INT32: - CHECK_NUMBER (object); { - dbus_int32_t val = XINT (object); + dbus_int32_t val = extract_float (object); XD_DEBUG_MESSAGE ("%c %d", dtype, val); if (!dbus_message_iter_append_basic (iter, dtype, &val)) XD_SIGNAL2 (build_string ("Unable to append argument"), object); @@ -518,9 +595,8 @@ xd_append_arg (unsigned int dtype, Lisp_Object object, DBusMessageIter *iter) #ifdef DBUS_TYPE_UNIX_FD case DBUS_TYPE_UNIX_FD: #endif - CHECK_NATNUM (object); { - dbus_uint32_t val = XFASTINT (object); + dbus_uint32_t val = extract_float (object); XD_DEBUG_MESSAGE ("%c %u", dtype, val); if (!dbus_message_iter_append_basic (iter, dtype, &val)) XD_SIGNAL2 (build_string ("Unable to append argument"), object); @@ -528,9 +604,8 @@ xd_append_arg (unsigned int dtype, Lisp_Object object, DBusMessageIter *iter) } case DBUS_TYPE_INT64: - CHECK_NUMBER (object); { - dbus_int64_t val = XINT (object); + dbus_int64_t val = extract_float (object); XD_DEBUG_MESSAGE ("%c %d", dtype, (int) val); if (!dbus_message_iter_append_basic (iter, dtype, &val)) XD_SIGNAL2 (build_string ("Unable to append argument"), object); @@ -538,19 +613,17 @@ xd_append_arg (unsigned int dtype, Lisp_Object object, DBusMessageIter *iter) } case DBUS_TYPE_UINT64: - CHECK_NATNUM (object); { - dbus_uint64_t val = XFASTINT (object); - XD_DEBUG_MESSAGE ("%c %"pI"d", dtype, XFASTINT (object)); + dbus_uint64_t val = extract_float (object); + XD_DEBUG_MESSAGE ("%c %"pI"d", dtype, val); if (!dbus_message_iter_append_basic (iter, dtype, &val)) XD_SIGNAL2 (build_string ("Unable to append argument"), object); return; } case DBUS_TYPE_DOUBLE: - CHECK_FLOAT (object); { - double val = XFLOAT_DATA (object); + double val = extract_float (object); XD_DEBUG_MESSAGE ("%c %f", dtype, val); if (!dbus_message_iter_append_basic (iter, dtype, &val)) XD_SIGNAL2 (build_string ("Unable to append argument"), object); @@ -614,7 +687,7 @@ xd_append_arg (unsigned int dtype, Lisp_Object object, DBusMessageIter *iter) dtype, CAR_SAFE (XD_NEXT_VALUE (object))); XD_DEBUG_MESSAGE ("%c %s %s", dtype, signature, - SDATA (format2 ("%s", object, Qnil))); + XD_OBJECT_TO_STRING (object)); if (!dbus_message_iter_open_container (iter, dtype, signature, &subiter)) XD_SIGNAL3 (build_string ("Cannot open container"), @@ -627,7 +700,7 @@ xd_append_arg (unsigned int dtype, Lisp_Object object, DBusMessageIter *iter) dtype, CAR_SAFE (XD_NEXT_VALUE (object))); XD_DEBUG_MESSAGE ("%c %s %s", dtype, signature, - SDATA (format2 ("%s", object, Qnil))); + XD_OBJECT_TO_STRING (object)); if (!dbus_message_iter_open_container (iter, dtype, signature, &subiter)) XD_SIGNAL3 (build_string ("Cannot open container"), @@ -637,8 +710,7 @@ xd_append_arg (unsigned int dtype, Lisp_Object object, DBusMessageIter *iter) case DBUS_TYPE_STRUCT: case DBUS_TYPE_DICT_ENTRY: /* These containers do not require a signature. */ - XD_DEBUG_MESSAGE ("%c %s", dtype, - SDATA (format2 ("%s", object, Qnil))); + XD_DEBUG_MESSAGE ("%c %s", dtype, XD_OBJECT_TO_STRING (object)); if (!dbus_message_iter_open_container (iter, dtype, NULL, &subiter)) XD_SIGNAL2 (build_string ("Cannot open container"), make_number (dtype)); @@ -777,7 +849,7 @@ xd_retrieve_arg (unsigned int dtype, DBusMessageIter *iter) result = Fcons (xd_retrieve_arg (subtype, &subiter), result); dbus_message_iter_next (&subiter); } - XD_DEBUG_MESSAGE ("%c %s", dtype, SDATA (format2 ("%s", result, Qnil))); + XD_DEBUG_MESSAGE ("%c %s", dtype, XD_OBJECT_TO_STRING (result)); RETURN_UNGCPRO (Fnreverse (result)); } @@ -787,85 +859,37 @@ xd_retrieve_arg (unsigned int dtype, DBusMessageIter *iter) } } -/* Initialize D-Bus connection. BUS is either a Lisp symbol, :system - or :session, or a string denoting the bus address. It tells which - D-Bus to initialize. If RAISE_ERROR is non-zero, signal an error - when the connection cannot be initialized. */ +/* Return the number of references of the shared CONNECTION. */ +static int +xd_get_connection_references (DBusConnection *connection) +{ + ptrdiff_t *refcount; + + /* We cannot access the DBusConnection structure, it is not public. + But we know, that the reference counter is the first field in + that structure. */ + refcount = (void *) &connection; + refcount = (void *) *refcount; + return *refcount; +} + +/* Return D-Bus connection address. BUS is either a Lisp symbol, + :system or :session, or a string denoting the bus address. */ static DBusConnection * -xd_initialize (Lisp_Object bus, int raise_error) +xd_get_connection_address (Lisp_Object bus) { DBusConnection *connection; - DBusError derror; + Lisp_Object val; - /* Parameter check. */ - if (!STRINGP (bus)) - { - CHECK_SYMBOL (bus); - if (!(EQ (bus, QCdbus_system_bus) || EQ (bus, QCdbus_session_bus))) - { - if (raise_error) - XD_SIGNAL2 (build_string ("Wrong bus name"), bus); - else - return NULL; - } - - /* We do not want to have an autolaunch for the session bus. */ - if (EQ (bus, QCdbus_session_bus) - && getenv ("DBUS_SESSION_BUS_ADDRESS") == NULL) - { - if (raise_error) - XD_SIGNAL2 (build_string ("No connection to bus"), bus); - else - return NULL; - } - } - - /* Open a connection to the bus. */ - dbus_error_init (&derror); - - if (STRINGP (bus)) - connection = dbus_connection_open (SSDATA (bus), &derror); + val = CDR_SAFE (Fassoc (bus, Vdbus_registered_buses)); + if (NILP (val)) + XD_SIGNAL2 (build_string ("No connection to bus"), bus); else - if (EQ (bus, QCdbus_system_bus)) - connection = dbus_bus_get (DBUS_BUS_SYSTEM, &derror); - else - connection = dbus_bus_get (DBUS_BUS_SESSION, &derror); + connection = (DBusConnection *) XFASTINT (val); - if (dbus_error_is_set (&derror)) - { - if (raise_error) - XD_ERROR (derror); - else - connection = NULL; - } - - /* If it is not the system or session bus, we must register - ourselves. Otherwise, we have called dbus_bus_get, which has - configured us to exit if the connection closes - we undo this - setting. */ - if (connection != NULL) - { - if (STRINGP (bus)) - dbus_bus_register (connection, &derror); - else - dbus_connection_set_exit_on_disconnect (connection, FALSE); - } - - if (dbus_error_is_set (&derror)) - { - if (raise_error) - XD_ERROR (derror); - else - connection = NULL; - } - - if (connection == NULL && raise_error) + if (!dbus_connection_get_is_connected (connection)) XD_SIGNAL2 (build_string ("No connection to bus"), bus); - /* Cleanup. */ - dbus_error_free (&derror); - - /* Return the result. */ return connection; } @@ -896,8 +920,8 @@ xd_add_watch (DBusWatch *watch, void *data) int fd = xd_find_watch_fd (watch); XD_DEBUG_MESSAGE ("fd %d, write %d, enabled %d", - fd, flags & DBUS_WATCH_WRITABLE, - dbus_watch_get_enabled (watch)); + fd, flags & DBUS_WATCH_WRITABLE, + dbus_watch_get_enabled (watch)); if (fd == -1) return FALSE; @@ -929,8 +953,8 @@ xd_remove_watch (DBusWatch *watch, void *data) /* Unset session environment. */ if (XSYMBOL (QCdbus_session_bus) == data) { - XD_DEBUG_MESSAGE ("unsetenv DBUS_SESSION_BUS_ADDRESS"); - unsetenv ("DBUS_SESSION_BUS_ADDRESS"); + // XD_DEBUG_MESSAGE ("unsetenv DBUS_SESSION_BUS_ADDRESS"); + // unsetenv ("DBUS_SESSION_BUS_ADDRESS"); } if (flags & DBUS_WATCH_WRITABLE) @@ -949,23 +973,111 @@ xd_toggle_watch (DBusWatch *watch, void *data) xd_remove_watch (watch, data); } -DEFUN ("dbus-init-bus", Fdbus_init_bus, Sdbus_init_bus, 1, 1, 0, - doc: /* Initialize connection to D-Bus BUS. */) - (Lisp_Object bus) +/* Close connection to D-Bus BUS. */ +static void +xd_close_bus (Lisp_Object bus) { DBusConnection *connection; - void *busp; + Lisp_Object val; + + /* Check whether we are connected. */ + val = Fassoc (bus, Vdbus_registered_buses); + if (NILP (val)) + return; + + /* Retrieve bus address. */ + connection = xd_get_connection_address (bus); + + /* Close connection, if there isn't another shared application. */ + if (xd_get_connection_references (connection) == 1) + { + XD_DEBUG_MESSAGE ("Close connection to bus %s", + XD_OBJECT_TO_STRING (bus)); + dbus_connection_close (connection); + } + + /* Decrement reference count. */ + dbus_connection_unref (connection); + + /* Remove bus from list of registered buses. */ + Vdbus_registered_buses = Fdelete (val, Vdbus_registered_buses); + + /* Return. */ + return; +} + +DEFUN ("dbus-init-bus", Fdbus_init_bus, Sdbus_init_bus, 1, 2, 0, + doc: /* Establish the connection to D-Bus BUS. + +BUS can be either the symbol `:system' or the symbol `:session', or it +can be a string denoting the address of the corresponding bus. For +the system and session buses, this function is called when loading +`dbus.el', there is no need to call it again. + +The function returns a number, which counts the connections this Emacs +session has established to the BUS under the same unique name (see +`dbus-get-unique-name'). It depends on the libraries Emacs is linked +with, and on the environment Emacs is running. For example, if Emacs +is linked with the gtk toolkit, and it runs in a GTK-aware environment +like Gnome, another connection might already be established. + +When PRIVATE is non-nil, a new connection is established instead of +reusing an existing one. It results in a new unique name at the bus. +This can be used, if it is necessary to distinguish from another +connection used in the same Emacs process, like the one established by +GTK+. It should be used with care for at least the `:system' and +`:session' buses, because other Emacs Lisp packages might already use +this connection to those buses. */) + (Lisp_Object bus, Lisp_Object private) +{ + DBusConnection *connection; + DBusError derror; + Lisp_Object val; + int refcount; /* Check parameter. */ - if (SYMBOLP (bus)) - busp = XSYMBOL (bus); - else if (STRINGP (bus)) - busp = XSTRING (bus); - else - wrong_type_argument (intern ("D-Bus"), bus); + XD_DBUS_VALIDATE_BUS_ADDRESS (bus); - /* Open a connection to the bus. */ - connection = xd_initialize (bus, TRUE); + /* Close bus if it is already open. */ + xd_close_bus (bus); + + /* Initialize. */ + dbus_error_init (&derror); + + /* Open the connection. */ + if (STRINGP (bus)) + if (NILP (private)) + connection = dbus_connection_open (SSDATA (bus), &derror); + else + connection = dbus_connection_open_private (SSDATA (bus), &derror); + + else + if (NILP (private)) + connection = dbus_bus_get (EQ (bus, QCdbus_system_bus) + ? DBUS_BUS_SYSTEM : DBUS_BUS_SESSION, + &derror); + else + connection = dbus_bus_get_private (EQ (bus, QCdbus_system_bus) + ? DBUS_BUS_SYSTEM : DBUS_BUS_SESSION, + &derror); + + if (dbus_error_is_set (&derror)) + XD_ERROR (derror); + + if (connection == NULL) + XD_SIGNAL2 (build_string ("No connection to bus"), bus); + + /* If it is not the system or session bus, we must register + ourselves. Otherwise, we have called dbus_bus_get, which has + configured us to exit if the connection closes - we undo this + setting. */ + if (STRINGP (bus)) + dbus_bus_register (connection, &derror); + else + dbus_connection_set_exit_on_disconnect (connection, FALSE); + + if (dbus_error_is_set (&derror)) + XD_ERROR (derror); /* Add the watch functions. We pass also the bus as data, in order to distinguish between the buses in xd_remove_watch. */ @@ -973,36 +1085,27 @@ DEFUN ("dbus-init-bus", Fdbus_init_bus, Sdbus_init_bus, 1, 1, 0, xd_add_watch, xd_remove_watch, xd_toggle_watch, - busp, NULL)) + SYMBOLP (bus) + ? (void *) XSYMBOL (bus) + : (void *) XSTRING (bus), + NULL)) XD_SIGNAL1 (build_string ("Cannot add watch functions")); /* Add bus to list of registered buses. */ - Vdbus_registered_buses = Fcons (bus, Vdbus_registered_buses); + XSETFASTINT (val, connection); + Vdbus_registered_buses = Fcons (Fcons (bus, val), Vdbus_registered_buses); /* We do not want to abort. */ putenv ((char *) "DBUS_FATAL_WARNINGS=0"); - /* Return. */ - return Qnil; -} + /* Cleanup. */ + dbus_error_free (&derror); -DEFUN ("dbus-close-bus", Fdbus_close_bus, Sdbus_close_bus, 1, 1, 0, - doc: /* Close connection to D-Bus BUS. */) - (Lisp_Object bus) -{ - DBusConnection *connection; - - /* Open a connection to the bus. */ - connection = xd_initialize (bus, TRUE); - - /* Decrement reference count to the bus. */ - dbus_connection_unref (connection); - - /* Remove bus from list of registered buses. */ - Vdbus_registered_buses = Fdelete (bus, Vdbus_registered_buses); - - /* Return. */ - return Qnil; + /* Return reference counter. */ + refcount = xd_get_connection_references (connection); + XD_DEBUG_MESSAGE ("Bus %s, Reference counter %d", + XD_OBJECT_TO_STRING (bus), refcount); + return make_number (refcount); } DEFUN ("dbus-get-unique-name", Fdbus_get_unique_name, Sdbus_get_unique_name, @@ -1013,8 +1116,11 @@ DEFUN ("dbus-get-unique-name", Fdbus_get_unique_name, Sdbus_get_unique_name, DBusConnection *connection; const char *name; - /* Open a connection to the bus. */ - connection = xd_initialize (bus, TRUE); + /* Check parameter. */ + XD_DBUS_VALIDATE_BUS_ADDRESS (bus); + + /* Retrieve bus address. */ + connection = xd_get_connection_address (bus); /* Request the name. */ name = dbus_bus_get_unique_name (connection); @@ -1025,341 +1131,241 @@ DEFUN ("dbus-get-unique-name", Fdbus_get_unique_name, Sdbus_get_unique_name, return build_string (name); } -DEFUN ("dbus-call-method", Fdbus_call_method, Sdbus_call_method, 5, MANY, 0, - doc: /* Call METHOD on the D-Bus BUS. +DEFUN ("dbus-message-internal", Fdbus_message_internal, Sdbus_message_internal, + 4, MANY, 0, + doc: /* Send a D-Bus message. +This is an internal function, it shall not be used outside dbus.el. -BUS is either a Lisp symbol, `:system' or `:session', or a string -denoting the bus address. +The following usages are expected: -SERVICE is the D-Bus service name to be used. PATH is the D-Bus -object path SERVICE is registered at. INTERFACE is an interface -offered by SERVICE. It must provide METHOD. +`dbus-call-method', `dbus-call-method-asynchronously': + \(dbus-message-internal + dbus-message-type-method-call BUS SERVICE PATH INTERFACE METHOD HANDLER + &optional :timeout TIMEOUT &rest ARGS) -If the parameter `:timeout' is given, the following integer TIMEOUT -specifies the maximum number of milliseconds the method call must -return. The default value is 25,000. If the method call doesn't -return in time, a D-Bus error is raised. +`dbus-send-signal': + \(dbus-message-internal + dbus-message-type-signal BUS SERVICE PATH INTERFACE SIGNAL &rest ARGS) -All other arguments ARGS are passed to METHOD as arguments. They are -converted into D-Bus types via the following rules: +`dbus-method-return-internal': + \(dbus-message-internal + dbus-message-type-method-return BUS SERVICE SERIAL &rest ARGS) - t and nil => DBUS_TYPE_BOOLEAN - number => DBUS_TYPE_UINT32 - integer => DBUS_TYPE_INT32 - float => DBUS_TYPE_DOUBLE - string => DBUS_TYPE_STRING - list => DBUS_TYPE_ARRAY +`dbus-method-error-internal': + \(dbus-message-internal + dbus-message-type-error BUS SERVICE SERIAL &rest ARGS) -All arguments can be preceded by a type symbol. For details about -type symbols, see Info node `(dbus)Type Conversion'. - -`dbus-call-method' returns the resulting values of METHOD as a list of -Lisp objects. The type conversion happens the other direction as for -input arguments. It follows the mapping rules: - - DBUS_TYPE_BOOLEAN => t or nil - DBUS_TYPE_BYTE => number - DBUS_TYPE_UINT16 => number - DBUS_TYPE_INT16 => integer - DBUS_TYPE_UINT32 => number or float - DBUS_TYPE_UNIX_FD => number or float - DBUS_TYPE_INT32 => integer or float - DBUS_TYPE_UINT64 => number or float - DBUS_TYPE_INT64 => integer or float - DBUS_TYPE_DOUBLE => float - DBUS_TYPE_STRING => string - DBUS_TYPE_OBJECT_PATH => string - DBUS_TYPE_SIGNATURE => string - DBUS_TYPE_ARRAY => list - DBUS_TYPE_VARIANT => list - DBUS_TYPE_STRUCT => list - DBUS_TYPE_DICT_ENTRY => list - -Example: - -\(dbus-call-method - :session "org.gnome.seahorse" "/org/gnome/seahorse/keys/openpgp" - "org.gnome.seahorse.Keys" "GetKeyField" - "openpgp:657984B8C7A966DD" "simple-name") - - => (t ("Philip R. Zimmermann")) - -If the result of the METHOD call is just one value, the converted Lisp -object is returned instead of a list containing this single Lisp object. - -\(dbus-call-method - :system "org.freedesktop.Hal" "/org/freedesktop/Hal/devices/computer" - "org.freedesktop.Hal.Device" "GetPropertyString" - "system.kernel.machine") - - => "i686" - -usage: (dbus-call-method BUS SERVICE PATH INTERFACE METHOD &optional :timeout TIMEOUT &rest ARGS) */) +usage: (dbus-message-internal &rest REST) */) (ptrdiff_t nargs, Lisp_Object *args) { - Lisp_Object bus, service, path, interface, method; - Lisp_Object result; - struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5; - DBusConnection *connection; - DBusMessage *dmessage; - DBusMessage *reply; - DBusMessageIter iter; - DBusError derror; - unsigned int dtype; - int timeout = -1; - ptrdiff_t i = 5; - char signature[DBUS_MAXIMUM_SIGNATURE_LENGTH]; - - /* Check parameters. */ - bus = args[0]; - service = args[1]; - path = args[2]; - interface = args[3]; - method = args[4]; - - CHECK_STRING (service); - CHECK_STRING (path); - CHECK_STRING (interface); - CHECK_STRING (method); - GCPRO5 (bus, service, path, interface, method); - - XD_DEBUG_MESSAGE ("%s %s %s %s", - SDATA (service), - SDATA (path), - SDATA (interface), - SDATA (method)); - - /* Open a connection to the bus. */ - connection = xd_initialize (bus, TRUE); - - /* Create the message. */ - dmessage = dbus_message_new_method_call (SSDATA (service), - SSDATA (path), - SSDATA (interface), - SSDATA (method)); - UNGCPRO; - if (dmessage == NULL) - XD_SIGNAL1 (build_string ("Unable to create a new message")); - - /* Check for timeout parameter. */ - if ((i+2 <= nargs) && (EQ ((args[i]), QCdbus_timeout))) - { - CHECK_NATNUM (args[i+1]); - timeout = XFASTINT (args[i+1]); - i = i+2; - } - - /* Initialize parameter list of message. */ - dbus_message_iter_init_append (dmessage, &iter); - - /* Append parameters to the message. */ - for (; i < nargs; ++i) - { - dtype = XD_OBJECT_TO_DBUS_TYPE (args[i]); - if (XD_DBUS_TYPE_P (args[i])) - { - XD_DEBUG_VALID_LISP_OBJECT_P (args[i]); - XD_DEBUG_VALID_LISP_OBJECT_P (args[i+1]); - XD_DEBUG_MESSAGE ("Parameter%"pD"d %s %s", i - 4, - SDATA (format2 ("%s", args[i], Qnil)), - SDATA (format2 ("%s", args[i+1], Qnil))); - ++i; - } - else - { - XD_DEBUG_VALID_LISP_OBJECT_P (args[i]); - XD_DEBUG_MESSAGE ("Parameter%"pD"d %s", i - 4, - SDATA (format2 ("%s", args[i], Qnil))); - } - - /* Check for valid signature. We use DBUS_TYPE_INVALID as - indication that there is no parent type. */ - xd_signature (signature, dtype, DBUS_TYPE_INVALID, args[i]); - - xd_append_arg (dtype, args[i], &iter); - } - - /* Send the message. */ - dbus_error_init (&derror); - reply = dbus_connection_send_with_reply_and_block (connection, - dmessage, - timeout, - &derror); - - if (dbus_error_is_set (&derror)) - XD_ERROR (derror); - - if (reply == NULL) - XD_SIGNAL1 (build_string ("No reply")); - - XD_DEBUG_MESSAGE ("Message sent"); - - /* Collect the results. */ - result = Qnil; - GCPRO1 (result); - - if (dbus_message_iter_init (reply, &iter)) - { - /* Loop over the parameters of the D-Bus reply message. Construct a - Lisp list, which is returned by `dbus-call-method'. */ - while ((dtype = dbus_message_iter_get_arg_type (&iter)) - != DBUS_TYPE_INVALID) - { - result = Fcons (xd_retrieve_arg (dtype, &iter), result); - dbus_message_iter_next (&iter); - } - } - else - { - /* No arguments: just return nil. */ - } - - /* Cleanup. */ - dbus_error_free (&derror); - dbus_message_unref (dmessage); - dbus_message_unref (reply); - - /* Return the result. If there is only one single Lisp object, - return it as-it-is, otherwise return the reversed list. */ - if (XFASTINT (Flength (result)) == 1) - RETURN_UNGCPRO (CAR_SAFE (result)); - else - RETURN_UNGCPRO (Fnreverse (result)); -} - -DEFUN ("dbus-call-method-asynchronously", Fdbus_call_method_asynchronously, - Sdbus_call_method_asynchronously, 6, MANY, 0, - doc: /* Call METHOD on the D-Bus BUS asynchronously. - -BUS is either a Lisp symbol, `:system' or `:session', or a string -denoting the bus address. - -SERVICE is the D-Bus service name to be used. PATH is the D-Bus -object path SERVICE is registered at. INTERFACE is an interface -offered by SERVICE. It must provide METHOD. - -HANDLER is a Lisp function, which is called when the corresponding -return message has arrived. If HANDLER is nil, no return message will -be expected. - -If the parameter `:timeout' is given, the following integer TIMEOUT -specifies the maximum number of milliseconds the method call must -return. The default value is 25,000. If the method call doesn't -return in time, a D-Bus error is raised. - -All other arguments ARGS are passed to METHOD as arguments. They are -converted into D-Bus types via the following rules: - - t and nil => DBUS_TYPE_BOOLEAN - number => DBUS_TYPE_UINT32 - integer => DBUS_TYPE_INT32 - float => DBUS_TYPE_DOUBLE - string => DBUS_TYPE_STRING - list => DBUS_TYPE_ARRAY - -All arguments can be preceded by a type symbol. For details about -type symbols, see Info node `(dbus)Type Conversion'. - -Unless HANDLER is nil, the function returns a key into the hash table -`dbus-registered-objects-table'. The corresponding entry in the hash -table is removed, when the return message has been arrived, and -HANDLER is called. - -Example: - -\(dbus-call-method-asynchronously - :system "org.freedesktop.Hal" "/org/freedesktop/Hal/devices/computer" - "org.freedesktop.Hal.Device" "GetPropertyString" 'message - "system.kernel.machine") - - => (:system 2) - - -| i686 - -usage: (dbus-call-method-asynchronously BUS SERVICE PATH INTERFACE METHOD HANDLER &optional :timeout TIMEOUT &rest ARGS) */) - (ptrdiff_t nargs, Lisp_Object *args) -{ - Lisp_Object bus, service, path, interface, method, handler; + Lisp_Object message_type, bus, service, handler; + Lisp_Object path = Qnil; + Lisp_Object interface = Qnil; + Lisp_Object member = Qnil; Lisp_Object result; struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5, gcpro6; DBusConnection *connection; DBusMessage *dmessage; DBusMessageIter iter; unsigned int dtype; - dbus_uint32_t serial; + unsigned int mtype; + dbus_uint32_t serial = 0; int timeout = -1; - ptrdiff_t i = 6; + ptrdiff_t count; char signature[DBUS_MAXIMUM_SIGNATURE_LENGTH]; + /* Initialize parameters. */ + message_type = args[0]; + bus = args[1]; + service = args[2]; + handler = Qnil; + + CHECK_NATNUM (message_type); + mtype = XFASTINT (message_type); + if ((mtype <= DBUS_MESSAGE_TYPE_INVALID) || (mtype >= DBUS_NUM_MESSAGE_TYPES)) + XD_SIGNAL2 (build_string ("Invalid message type"), message_type); + + if ((mtype == DBUS_MESSAGE_TYPE_METHOD_CALL) + || (mtype == DBUS_MESSAGE_TYPE_SIGNAL)) + { + path = args[3]; + interface = args[4]; + member = args[5]; + if (mtype == DBUS_MESSAGE_TYPE_METHOD_CALL) + handler = args[6]; + count = (mtype == DBUS_MESSAGE_TYPE_METHOD_CALL) ? 7 : 6; + } + else /* DBUS_MESSAGE_TYPE_METHOD_RETURN, DBUS_MESSAGE_TYPE_ERROR */ + { + XD_CHECK_DBUS_SERIAL (args[3], serial); + count = 4; + } + /* Check parameters. */ - bus = args[0]; - service = args[1]; - path = args[2]; - interface = args[3]; - method = args[4]; - handler = args[5]; + XD_DBUS_VALIDATE_BUS_ADDRESS (bus); + XD_DBUS_VALIDATE_BUS_NAME (service); + if (nargs < count) + xsignal2 (Qwrong_number_of_arguments, + Qdbus_message_internal, + make_number (nargs)); - CHECK_STRING (service); - CHECK_STRING (path); - CHECK_STRING (interface); - CHECK_STRING (method); - if (!NILP (handler) && !FUNCTIONP (handler)) - wrong_type_argument (Qinvalid_function, handler); - GCPRO6 (bus, service, path, interface, method, handler); + if ((mtype == DBUS_MESSAGE_TYPE_METHOD_CALL) + || (mtype == DBUS_MESSAGE_TYPE_SIGNAL)) + { + XD_DBUS_VALIDATE_PATH (path); + XD_DBUS_VALIDATE_INTERFACE (interface); + XD_DBUS_VALIDATE_MEMBER (member); + if (!NILP (handler) && (!FUNCTIONP (handler))) + wrong_type_argument (Qinvalid_function, handler); + } - XD_DEBUG_MESSAGE ("%s %s %s %s", - SDATA (service), - SDATA (path), - SDATA (interface), - SDATA (method)); + /* Protect Lisp variables. */ + GCPRO6 (bus, service, path, interface, member, handler); - /* Open a connection to the bus. */ - connection = xd_initialize (bus, TRUE); + /* Trace parameters. */ + switch (mtype) + { + case DBUS_MESSAGE_TYPE_METHOD_CALL: + XD_DEBUG_MESSAGE ("%s %s %s %s %s %s %s", + XD_MESSAGE_TYPE_TO_STRING (mtype), + XD_OBJECT_TO_STRING (bus), + XD_OBJECT_TO_STRING (service), + XD_OBJECT_TO_STRING (path), + XD_OBJECT_TO_STRING (interface), + XD_OBJECT_TO_STRING (member), + XD_OBJECT_TO_STRING (handler)); + break; + case DBUS_MESSAGE_TYPE_SIGNAL: + XD_DEBUG_MESSAGE ("%s %s %s %s %s %s", + XD_MESSAGE_TYPE_TO_STRING (mtype), + XD_OBJECT_TO_STRING (bus), + XD_OBJECT_TO_STRING (service), + XD_OBJECT_TO_STRING (path), + XD_OBJECT_TO_STRING (interface), + XD_OBJECT_TO_STRING (member)); + break; + default: /* DBUS_MESSAGE_TYPE_METHOD_RETURN, DBUS_MESSAGE_TYPE_ERROR */ + XD_DEBUG_MESSAGE ("%s %s %s %u", + XD_MESSAGE_TYPE_TO_STRING (mtype), + XD_OBJECT_TO_STRING (bus), + XD_OBJECT_TO_STRING (service), + serial); + } - /* Create the message. */ - dmessage = dbus_message_new_method_call (SSDATA (service), - SSDATA (path), - SSDATA (interface), - SSDATA (method)); + /* Retrieve bus address. */ + connection = xd_get_connection_address (bus); + + /* Create the D-Bus message. */ + dmessage = dbus_message_new (mtype); if (dmessage == NULL) - XD_SIGNAL1 (build_string ("Unable to create a new message")); + { + UNGCPRO; + XD_SIGNAL1 (build_string ("Unable to create a new message")); + } + + if (STRINGP (service)) + { + if (mtype != DBUS_MESSAGE_TYPE_SIGNAL) + /* Set destination. */ + { + if (!dbus_message_set_destination (dmessage, SSDATA (service))) + { + UNGCPRO; + XD_SIGNAL2 (build_string ("Unable to set the destination"), + service); + } + } + + else + /* Set destination for unicast signals. */ + { + Lisp_Object uname; + + /* If it is the same unique name as we are registered at the + bus or an unknown name, we regard it as broadcast message + due to backward compatibility. */ + if (dbus_bus_name_has_owner (connection, SSDATA (service), NULL)) + uname = call2 (intern ("dbus-get-name-owner"), bus, service); + else + uname = Qnil; + + if (STRINGP (uname) + && (strcmp (dbus_bus_get_unique_name (connection), SSDATA (uname)) + != 0) + && (!dbus_message_set_destination (dmessage, SSDATA (service)))) + { + UNGCPRO; + XD_SIGNAL2 (build_string ("Unable to set signal destination"), + service); + } + } + } + + /* Set message parameters. */ + if ((mtype == DBUS_MESSAGE_TYPE_METHOD_CALL) + || (mtype == DBUS_MESSAGE_TYPE_SIGNAL)) + { + if ((!dbus_message_set_path (dmessage, SSDATA (path))) + || (!dbus_message_set_interface (dmessage, SSDATA (interface))) + || (!dbus_message_set_member (dmessage, SSDATA (member)))) + { + UNGCPRO; + XD_SIGNAL1 (build_string ("Unable to set the message parameter")); + } + } + + else /* DBUS_MESSAGE_TYPE_METHOD_RETURN, DBUS_MESSAGE_TYPE_ERROR */ + { + if (!dbus_message_set_reply_serial (dmessage, serial)) + { + UNGCPRO; + XD_SIGNAL1 (build_string ("Unable to create a return message")); + } + + if ((mtype == DBUS_MESSAGE_TYPE_ERROR) + && (!dbus_message_set_error_name (dmessage, DBUS_ERROR_FAILED))) + { + UNGCPRO; + XD_SIGNAL1 (build_string ("Unable to create a error message")); + } + } /* Check for timeout parameter. */ - if ((i+2 <= nargs) && (EQ ((args[i]), QCdbus_timeout))) + if ((count+2 <= nargs) && (EQ ((args[count]), QCdbus_timeout))) { - CHECK_NATNUM (args[i+1]); - timeout = XFASTINT (args[i+1]); - i = i+2; + CHECK_NATNUM (args[count+1]); + timeout = XFASTINT (args[count+1]); + count = count+2; } /* Initialize parameter list of message. */ dbus_message_iter_init_append (dmessage, &iter); /* Append parameters to the message. */ - for (; i < nargs; ++i) + for (; count < nargs; ++count) { - dtype = XD_OBJECT_TO_DBUS_TYPE (args[i]); - if (XD_DBUS_TYPE_P (args[i])) + dtype = XD_OBJECT_TO_DBUS_TYPE (args[count]); + if (XD_DBUS_TYPE_P (args[count])) { - XD_DEBUG_VALID_LISP_OBJECT_P (args[i]); - XD_DEBUG_VALID_LISP_OBJECT_P (args[i+1]); - XD_DEBUG_MESSAGE ("Parameter%"pD"d %s %s", i - 4, - SDATA (format2 ("%s", args[i], Qnil)), - SDATA (format2 ("%s", args[i+1], Qnil))); - ++i; + XD_DEBUG_VALID_LISP_OBJECT_P (args[count]); + XD_DEBUG_VALID_LISP_OBJECT_P (args[count+1]); + XD_DEBUG_MESSAGE ("Parameter%"pD"d %s %s", count - 4, + XD_OBJECT_TO_STRING (args[count]), + XD_OBJECT_TO_STRING (args[count+1])); + ++count; } else { - XD_DEBUG_VALID_LISP_OBJECT_P (args[i]); - XD_DEBUG_MESSAGE ("Parameter%"pD"d %s", i - 4, - SDATA (format2 ("%s", args[i], Qnil))); + XD_DEBUG_VALID_LISP_OBJECT_P (args[count]); + XD_DEBUG_MESSAGE ("Parameter%"pD"d %s", count - 4, + XD_OBJECT_TO_STRING (args[count])); } /* Check for valid signature. We use DBUS_TYPE_INVALID as indication that there is no parent type. */ - xd_signature (signature, dtype, DBUS_TYPE_INVALID, args[i]); + xd_signature (signature, dtype, DBUS_TYPE_INVALID, args[count]); - xd_append_arg (dtype, args[i], &iter); + xd_append_arg (dtype, args[count], &iter); } if (!NILP (handler)) @@ -1368,11 +1374,15 @@ usage: (dbus-call-method-asynchronously BUS SERVICE PATH INTERFACE METHOD HANDLE message queue. */ if (!dbus_connection_send_with_reply (connection, dmessage, NULL, timeout)) - XD_SIGNAL1 (build_string ("Cannot send message")); + { + UNGCPRO; + XD_SIGNAL1 (build_string ("Cannot send message")); + } /* The result is the key in Vdbus_registered_objects_table. */ serial = dbus_message_get_serial (dmessage); - result = list2 (bus, make_fixnum_or_float (serial)); + result = list3 (QCdbus_registered_serial, + bus, make_fixnum_or_float (serial)); /* Create a hash table entry. */ Fputhash (result, handler, Vdbus_registered_objects_table); @@ -1382,12 +1392,15 @@ usage: (dbus-call-method-asynchronously BUS SERVICE PATH INTERFACE METHOD HANDLE /* Send the message. The message is just added to the outgoing message queue. */ if (!dbus_connection_send (connection, dmessage, NULL)) - XD_SIGNAL1 (build_string ("Cannot send message")); + { + UNGCPRO; + XD_SIGNAL1 (build_string ("Cannot send message")); + } result = Qnil; } - XD_DEBUG_MESSAGE ("Message sent"); + XD_DEBUG_MESSAGE ("Message sent: %s", XD_OBJECT_TO_STRING (result)); /* Cleanup. */ dbus_message_unref (dmessage); @@ -1396,300 +1409,6 @@ usage: (dbus-call-method-asynchronously BUS SERVICE PATH INTERFACE METHOD HANDLE RETURN_UNGCPRO (result); } -DEFUN ("dbus-method-return-internal", Fdbus_method_return_internal, - Sdbus_method_return_internal, - 3, MANY, 0, - doc: /* Return for message SERIAL on the D-Bus BUS. -This is an internal function, it shall not be used outside dbus.el. - -usage: (dbus-method-return-internal BUS SERIAL SERVICE &rest ARGS) */) - (ptrdiff_t nargs, Lisp_Object *args) -{ - Lisp_Object bus, service; - struct gcpro gcpro1, gcpro2; - DBusConnection *connection; - DBusMessage *dmessage; - DBusMessageIter iter; - dbus_uint32_t serial; - unsigned int ui_serial, dtype; - ptrdiff_t i; - char signature[DBUS_MAXIMUM_SIGNATURE_LENGTH]; - - /* Check parameters. */ - bus = args[0]; - service = args[2]; - - CHECK_DBUS_SERIAL_GET_SERIAL (args[1], serial); - CHECK_STRING (service); - GCPRO2 (bus, service); - - ui_serial = serial; - XD_DEBUG_MESSAGE ("%u %s ", ui_serial, SSDATA (service)); - - /* Open a connection to the bus. */ - connection = xd_initialize (bus, TRUE); - - /* Create the message. */ - dmessage = dbus_message_new (DBUS_MESSAGE_TYPE_METHOD_RETURN); - if ((dmessage == NULL) - || (!dbus_message_set_reply_serial (dmessage, serial)) - || (!dbus_message_set_destination (dmessage, SSDATA (service)))) - { - UNGCPRO; - XD_SIGNAL1 (build_string ("Unable to create a return message")); - } - - UNGCPRO; - - /* Initialize parameter list of message. */ - dbus_message_iter_init_append (dmessage, &iter); - - /* Append parameters to the message. */ - for (i = 3; i < nargs; ++i) - { - dtype = XD_OBJECT_TO_DBUS_TYPE (args[i]); - if (XD_DBUS_TYPE_P (args[i])) - { - XD_DEBUG_VALID_LISP_OBJECT_P (args[i]); - XD_DEBUG_VALID_LISP_OBJECT_P (args[i+1]); - XD_DEBUG_MESSAGE ("Parameter%"pD"d %s %s", i - 2, - SDATA (format2 ("%s", args[i], Qnil)), - SDATA (format2 ("%s", args[i+1], Qnil))); - ++i; - } - else - { - XD_DEBUG_VALID_LISP_OBJECT_P (args[i]); - XD_DEBUG_MESSAGE ("Parameter%"pD"d %s", i - 2, - SDATA (format2 ("%s", args[i], Qnil))); - } - - /* Check for valid signature. We use DBUS_TYPE_INVALID as - indication that there is no parent type. */ - xd_signature (signature, dtype, DBUS_TYPE_INVALID, args[i]); - - xd_append_arg (dtype, args[i], &iter); - } - - /* Send the message. The message is just added to the outgoing - message queue. */ - if (!dbus_connection_send (connection, dmessage, NULL)) - XD_SIGNAL1 (build_string ("Cannot send message")); - - XD_DEBUG_MESSAGE ("Message sent"); - - /* Cleanup. */ - dbus_message_unref (dmessage); - - /* Return. */ - return Qt; -} - -DEFUN ("dbus-method-error-internal", Fdbus_method_error_internal, - Sdbus_method_error_internal, - 3, MANY, 0, - doc: /* Return error message for message SERIAL on the D-Bus BUS. -This is an internal function, it shall not be used outside dbus.el. - -usage: (dbus-method-error-internal BUS SERIAL SERVICE &rest ARGS) */) - (ptrdiff_t nargs, Lisp_Object *args) -{ - Lisp_Object bus, service; - struct gcpro gcpro1, gcpro2; - DBusConnection *connection; - DBusMessage *dmessage; - DBusMessageIter iter; - dbus_uint32_t serial; - unsigned int ui_serial, dtype; - ptrdiff_t i; - char signature[DBUS_MAXIMUM_SIGNATURE_LENGTH]; - - /* Check parameters. */ - bus = args[0]; - service = args[2]; - - CHECK_DBUS_SERIAL_GET_SERIAL (args[1], serial); - CHECK_STRING (service); - GCPRO2 (bus, service); - - ui_serial = serial; - XD_DEBUG_MESSAGE ("%u %s ", ui_serial, SSDATA (service)); - - /* Open a connection to the bus. */ - connection = xd_initialize (bus, TRUE); - - /* Create the message. */ - dmessage = dbus_message_new (DBUS_MESSAGE_TYPE_ERROR); - if ((dmessage == NULL) - || (!dbus_message_set_error_name (dmessage, DBUS_ERROR_FAILED)) - || (!dbus_message_set_reply_serial (dmessage, serial)) - || (!dbus_message_set_destination (dmessage, SSDATA (service)))) - { - UNGCPRO; - XD_SIGNAL1 (build_string ("Unable to create a error message")); - } - - UNGCPRO; - - /* Initialize parameter list of message. */ - dbus_message_iter_init_append (dmessage, &iter); - - /* Append parameters to the message. */ - for (i = 3; i < nargs; ++i) - { - dtype = XD_OBJECT_TO_DBUS_TYPE (args[i]); - if (XD_DBUS_TYPE_P (args[i])) - { - XD_DEBUG_VALID_LISP_OBJECT_P (args[i]); - XD_DEBUG_VALID_LISP_OBJECT_P (args[i+1]); - XD_DEBUG_MESSAGE ("Parameter%"pD"d %s %s", i - 2, - SDATA (format2 ("%s", args[i], Qnil)), - SDATA (format2 ("%s", args[i+1], Qnil))); - ++i; - } - else - { - XD_DEBUG_VALID_LISP_OBJECT_P (args[i]); - XD_DEBUG_MESSAGE ("Parameter%"pD"d %s", i - 2, - SDATA (format2 ("%s", args[i], Qnil))); - } - - /* Check for valid signature. We use DBUS_TYPE_INVALID as - indication that there is no parent type. */ - xd_signature (signature, dtype, DBUS_TYPE_INVALID, args[i]); - - xd_append_arg (dtype, args[i], &iter); - } - - /* Send the message. The message is just added to the outgoing - message queue. */ - if (!dbus_connection_send (connection, dmessage, NULL)) - XD_SIGNAL1 (build_string ("Cannot send message")); - - XD_DEBUG_MESSAGE ("Message sent"); - - /* Cleanup. */ - dbus_message_unref (dmessage); - - /* Return. */ - return Qt; -} - -DEFUN ("dbus-send-signal", Fdbus_send_signal, Sdbus_send_signal, 5, MANY, 0, - doc: /* Send signal SIGNAL on the D-Bus BUS. - -BUS is either a Lisp symbol, `:system' or `:session', or a string -denoting the bus address. - -SERVICE is the D-Bus service name SIGNAL is sent from. PATH is the -D-Bus object path SERVICE is registered at. INTERFACE is an interface -offered by SERVICE. It must provide signal SIGNAL. - -All other arguments ARGS are passed to SIGNAL as arguments. They are -converted into D-Bus types via the following rules: - - t and nil => DBUS_TYPE_BOOLEAN - number => DBUS_TYPE_UINT32 - integer => DBUS_TYPE_INT32 - float => DBUS_TYPE_DOUBLE - string => DBUS_TYPE_STRING - list => DBUS_TYPE_ARRAY - -All arguments can be preceded by a type symbol. For details about -type symbols, see Info node `(dbus)Type Conversion'. - -Example: - -\(dbus-send-signal - :session "org.gnu.Emacs" "/org/gnu/Emacs" - "org.gnu.Emacs.FileManager" "FileModified" "/home/albinus/.emacs") - -usage: (dbus-send-signal BUS SERVICE PATH INTERFACE SIGNAL &rest ARGS) */) - (ptrdiff_t nargs, Lisp_Object *args) -{ - Lisp_Object bus, service, path, interface, signal; - struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5; - DBusConnection *connection; - DBusMessage *dmessage; - DBusMessageIter iter; - unsigned int dtype; - ptrdiff_t i; - char signature[DBUS_MAXIMUM_SIGNATURE_LENGTH]; - - /* Check parameters. */ - bus = args[0]; - service = args[1]; - path = args[2]; - interface = args[3]; - signal = args[4]; - - CHECK_STRING (service); - CHECK_STRING (path); - CHECK_STRING (interface); - CHECK_STRING (signal); - GCPRO5 (bus, service, path, interface, signal); - - XD_DEBUG_MESSAGE ("%s %s %s %s", - SDATA (service), - SDATA (path), - SDATA (interface), - SDATA (signal)); - - /* Open a connection to the bus. */ - connection = xd_initialize (bus, TRUE); - - /* Create the message. */ - dmessage = dbus_message_new_signal (SSDATA (path), - SSDATA (interface), - SSDATA (signal)); - UNGCPRO; - if (dmessage == NULL) - XD_SIGNAL1 (build_string ("Unable to create a new message")); - - /* Initialize parameter list of message. */ - dbus_message_iter_init_append (dmessage, &iter); - - /* Append parameters to the message. */ - for (i = 5; i < nargs; ++i) - { - dtype = XD_OBJECT_TO_DBUS_TYPE (args[i]); - if (XD_DBUS_TYPE_P (args[i])) - { - XD_DEBUG_VALID_LISP_OBJECT_P (args[i]); - XD_DEBUG_VALID_LISP_OBJECT_P (args[i+1]); - XD_DEBUG_MESSAGE ("Parameter%"pD"d %s %s", i - 4, - SDATA (format2 ("%s", args[i], Qnil)), - SDATA (format2 ("%s", args[i+1], Qnil))); - ++i; - } - else - { - XD_DEBUG_VALID_LISP_OBJECT_P (args[i]); - XD_DEBUG_MESSAGE ("Parameter%"pD"d %s", i - 4, - SDATA (format2 ("%s", args[i], Qnil))); - } - - /* Check for valid signature. We use DBUS_TYPE_INVALID as - indication that there is no parent type. */ - xd_signature (signature, dtype, DBUS_TYPE_INVALID, args[i]); - - xd_append_arg (dtype, args[i], &iter); - } - - /* Send the message. The message is just added to the outgoing - message queue. */ - if (!dbus_connection_send (connection, dmessage, NULL)) - XD_SIGNAL1 (build_string ("Cannot send message")); - - XD_DEBUG_MESSAGE ("Signal sent"); - - /* Cleanup. */ - dbus_message_unref (dmessage); - - /* Return. */ - return Qt; -} - /* Read one queued incoming message of the D-Bus BUS. BUS is either a Lisp symbol, :system or :session, or a string denoting the bus address. */ @@ -1702,7 +1421,7 @@ xd_read_message_1 (DBusConnection *connection, Lisp_Object bus) DBusMessage *dmessage; DBusMessageIter iter; unsigned int dtype; - int mtype; + unsigned int mtype; dbus_uint32_t serial; unsigned int ui_serial; const char *uname, *path, *interface, *member; @@ -1744,23 +1463,19 @@ xd_read_message_1 (DBusConnection *connection, Lisp_Object bus) member = dbus_message_get_member (dmessage); XD_DEBUG_MESSAGE ("Event received: %s %u %s %s %s %s %s", - (mtype == DBUS_MESSAGE_TYPE_INVALID) - ? "DBUS_MESSAGE_TYPE_INVALID" - : (mtype == DBUS_MESSAGE_TYPE_METHOD_CALL) - ? "DBUS_MESSAGE_TYPE_METHOD_CALL" - : (mtype == DBUS_MESSAGE_TYPE_METHOD_RETURN) - ? "DBUS_MESSAGE_TYPE_METHOD_RETURN" - : (mtype == DBUS_MESSAGE_TYPE_ERROR) - ? "DBUS_MESSAGE_TYPE_ERROR" - : "DBUS_MESSAGE_TYPE_SIGNAL", + XD_MESSAGE_TYPE_TO_STRING (mtype), ui_serial, uname, path, interface, member, - SDATA (format2 ("%s", args, Qnil))); + XD_OBJECT_TO_STRING (args)); - if ((mtype == DBUS_MESSAGE_TYPE_METHOD_RETURN) - || (mtype == DBUS_MESSAGE_TYPE_ERROR)) + if (mtype == DBUS_MESSAGE_TYPE_INVALID) + goto cleanup; + + else if ((mtype == DBUS_MESSAGE_TYPE_METHOD_RETURN) + || (mtype == DBUS_MESSAGE_TYPE_ERROR)) { /* Search for a registered function of the message. */ - key = list2 (bus, make_fixnum_or_float (serial)); + key = list3 (QCdbus_registered_serial, bus, + make_fixnum_or_float (serial)); value = Fgethash (key, Vdbus_registered_objects_table, Qnil); /* There shall be exactly one entry. Construct an event. */ @@ -1777,7 +1492,7 @@ xd_read_message_1 (DBusConnection *connection, Lisp_Object bus) event.arg = Fcons (value, args); } - else /* (mtype != DBUS_MESSAGE_TYPE_METHOD_RETURN) */ + else /* DBUS_MESSAGE_TYPE_METHOD_CALL, DBUS_MESSAGE_TYPE_SIGNAL. */ { /* Vdbus_registered_objects_table requires non-nil interface and member. */ @@ -1785,7 +1500,10 @@ xd_read_message_1 (DBusConnection *connection, Lisp_Object bus) goto cleanup; /* Search for a registered function of the message. */ - key = list3 (bus, build_string (interface), build_string (member)); + key = list4 ((mtype == DBUS_MESSAGE_TYPE_METHOD_CALL) + ? QCdbus_registered_method + : QCdbus_registered_signal, + bus, build_string (interface), build_string (member)); value = Fgethash (key, Vdbus_registered_objects_table, Qnil); /* Loop over the registered functions. Construct an event. */ @@ -1835,8 +1553,7 @@ xd_read_message_1 (DBusConnection *connection, Lisp_Object bus) /* Store it into the input event queue. */ kbd_buffer_store_event (&event); - XD_DEBUG_MESSAGE ("Event stored: %s", - SDATA (format2 ("%s", event.arg, Qnil))); + XD_DEBUG_MESSAGE ("Event stored: %s", XD_OBJECT_TO_STRING (event.arg)); /* Cleanup. */ cleanup: @@ -1851,8 +1568,8 @@ xd_read_message_1 (DBusConnection *connection, Lisp_Object bus) static Lisp_Object xd_read_message (Lisp_Object bus) { - /* Open a connection to the bus. */ - DBusConnection *connection = xd_initialize (bus, TRUE); + /* Retrieve bus address. */ + DBusConnection *connection = xd_get_connection_address (bus); /* Non blocking read of the next available message. */ dbus_connection_read_write (connection, 0); @@ -1869,14 +1586,16 @@ xd_read_queued_messages (int fd, void *data, int for_read) { Lisp_Object busp = Vdbus_registered_buses; Lisp_Object bus = Qnil; + Lisp_Object key; /* Find bus related to fd. */ if (data != NULL) while (!NILP (busp)) { - if ((SYMBOLP (CAR_SAFE (busp)) && XSYMBOL (CAR_SAFE (busp)) == data) - || (STRINGP (CAR_SAFE (busp)) && XSTRING (CAR_SAFE (busp)) == data)) - bus = CAR_SAFE (busp); + key = CAR_SAFE (CAR_SAFE (busp)); + if ((SYMBOLP (key) && XSYMBOL (key) == data) + || (STRINGP (key) && XSTRING (key) == data)) + bus = key; busp = CDR_SAFE (busp); } @@ -1889,327 +1608,6 @@ xd_read_queued_messages (int fd, void *data, int for_read) xd_in_read_queued_messages = 0; } -DEFUN ("dbus-register-service", Fdbus_register_service, Sdbus_register_service, - 2, MANY, 0, - doc: /* Register known name SERVICE on the D-Bus BUS. - -BUS is either a Lisp symbol, `:system' or `:session', or a string -denoting the bus address. - -SERVICE is the D-Bus service name that should be registered. It must -be a known name. - -FLAGS are keywords, which control how the service name is registered. -The following keywords are recognized: - -`:allow-replacement': Allow another service to become the primary -owner if requested. - -`:replace-existing': Request to replace the current primary owner. - -`:do-not-queue': If we can not become the primary owner do not place -us in the queue. - -The function returns a keyword, indicating the result of the -operation. One of the following keywords is returned: - -`:primary-owner': Service has become the primary owner of the -requested name. - -`:in-queue': Service could not become the primary owner and has been -placed in the queue. - -`:exists': Service is already in the queue. - -`:already-owner': Service is already the primary owner. - -Example: - -\(dbus-register-service :session dbus-service-emacs) - - => :primary-owner. - -\(dbus-register-service - :session "org.freedesktop.TextEditor" - dbus-service-allow-replacement dbus-service-replace-existing) - - => :already-owner. - -usage: (dbus-register-service BUS SERVICE &rest FLAGS) */) - (ptrdiff_t nargs, Lisp_Object *args) -{ - Lisp_Object bus, service; - DBusConnection *connection; - ptrdiff_t i; - unsigned int value; - unsigned int flags = 0; - int result; - DBusError derror; - - bus = args[0]; - service = args[1]; - - /* Check parameters. */ - CHECK_STRING (service); - - /* Process flags. */ - for (i = 2; i < nargs; ++i) { - value = ((EQ (args[i], QCdbus_request_name_replace_existing)) - ? DBUS_NAME_FLAG_REPLACE_EXISTING - : (EQ (args[i], QCdbus_request_name_allow_replacement)) - ? DBUS_NAME_FLAG_ALLOW_REPLACEMENT - : (EQ (args[i], QCdbus_request_name_do_not_queue)) - ? DBUS_NAME_FLAG_DO_NOT_QUEUE - : -1); - if (value == -1) - XD_SIGNAL2 (build_string ("Unrecognized name request flag"), args[i]); - flags |= value; - } - - /* Open a connection to the bus. */ - connection = xd_initialize (bus, TRUE); - - /* Request the known name from the bus. */ - dbus_error_init (&derror); - result = dbus_bus_request_name (connection, SSDATA (service), flags, - &derror); - if (dbus_error_is_set (&derror)) - XD_ERROR (derror); - - /* Cleanup. */ - dbus_error_free (&derror); - - /* Return object. */ - switch (result) - { - case DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER: - return QCdbus_request_name_reply_primary_owner; - case DBUS_REQUEST_NAME_REPLY_IN_QUEUE: - return QCdbus_request_name_reply_in_queue; - case DBUS_REQUEST_NAME_REPLY_EXISTS: - return QCdbus_request_name_reply_exists; - case DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER: - return QCdbus_request_name_reply_already_owner; - default: - /* This should not happen. */ - XD_SIGNAL2 (build_string ("Could not register service"), service); - } -} - -DEFUN ("dbus-register-signal", Fdbus_register_signal, Sdbus_register_signal, - 6, MANY, 0, - doc: /* Register for signal SIGNAL on the D-Bus BUS. - -BUS is either a Lisp symbol, `:system' or `:session', or a string -denoting the bus address. - -SERVICE is the D-Bus service name used by the sending D-Bus object. -It can be either a known name or the unique name of the D-Bus object -sending the signal. When SERVICE is nil, related signals from all -D-Bus objects shall be accepted. - -PATH is the D-Bus object path SERVICE is registered. It can also be -nil if the path name of incoming signals shall not be checked. - -INTERFACE is an interface offered by SERVICE. It must provide SIGNAL. -HANDLER is a Lisp function to be called when the signal is received. -It must accept as arguments the values SIGNAL is sending. - -All other arguments ARGS, if specified, must be strings. They stand -for the respective arguments of the signal in their order, and are -used for filtering as well. A nil argument might be used to preserve -the order. - -INTERFACE, SIGNAL and HANDLER must not be nil. Example: - -\(defun my-signal-handler (device) - (message "Device %s added" device)) - -\(dbus-register-signal - :system "org.freedesktop.Hal" "/org/freedesktop/Hal/Manager" - "org.freedesktop.Hal.Manager" "DeviceAdded" 'my-signal-handler) - - => ((:system "org.freedesktop.Hal.Manager" "DeviceAdded") - ("org.freedesktop.Hal" "/org/freedesktop/Hal/Manager" my-signal-handler)) - -`dbus-register-signal' returns an object, which can be used in -`dbus-unregister-object' for removing the registration. - -usage: (dbus-register-signal BUS SERVICE PATH INTERFACE SIGNAL HANDLER &rest ARGS) */) - (ptrdiff_t nargs, Lisp_Object *args) -{ - Lisp_Object bus, service, path, interface, signal, handler; - struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5, gcpro6; - Lisp_Object uname, key, key1, value; - DBusConnection *connection; - ptrdiff_t i; - char rule[DBUS_MAXIMUM_MATCH_RULE_LENGTH]; - int rulelen; - DBusError derror; - - /* Check parameters. */ - bus = args[0]; - service = args[1]; - path = args[2]; - interface = args[3]; - signal = args[4]; - handler = args[5]; - - if (!NILP (service)) CHECK_STRING (service); - if (!NILP (path)) CHECK_STRING (path); - CHECK_STRING (interface); - CHECK_STRING (signal); - if (!FUNCTIONP (handler)) - wrong_type_argument (Qinvalid_function, handler); - GCPRO6 (bus, service, path, interface, signal, handler); - - /* Retrieve unique name of service. If service is a known name, we - will register for the corresponding unique name, if any. Signals - are sent always with the unique name as sender. Note: the unique - name of "org.freedesktop.DBus" is that string itself. */ - if ((STRINGP (service)) - && (SBYTES (service) > 0) - && (strcmp (SSDATA (service), DBUS_SERVICE_DBUS) != 0) - && (strncmp (SSDATA (service), ":", 1) != 0)) - uname = call2 (intern ("dbus-get-name-owner"), bus, service); - else - uname = service; - - /* Create a matching rule if the unique name exists (when no - wildcard). */ - if (NILP (uname) || (SBYTES (uname) > 0)) - { - /* Open a connection to the bus. */ - connection = xd_initialize (bus, TRUE); - - /* Create a rule to receive related signals. */ - rulelen = snprintf (rule, sizeof rule, - "type='signal',interface='%s',member='%s'", - SDATA (interface), - SDATA (signal)); - if (! (0 <= rulelen && rulelen < sizeof rule)) - string_overflow (); - - /* Add unique name and path to the rule if they are non-nil. */ - if (!NILP (uname)) - { - int len = snprintf (rule + rulelen, sizeof rule - rulelen, - ",sender='%s'", SDATA (uname)); - if (! (0 <= len && len < sizeof rule - rulelen)) - string_overflow (); - rulelen += len; - } - - if (!NILP (path)) - { - int len = snprintf (rule + rulelen, sizeof rule - rulelen, - ",path='%s'", SDATA (path)); - if (! (0 <= len && len < sizeof rule - rulelen)) - string_overflow (); - rulelen += len; - } - - /* Add arguments to the rule if they are non-nil. */ - for (i = 6; i < nargs; ++i) - if (!NILP (args[i])) - { - int len; - CHECK_STRING (args[i]); - len = snprintf (rule + rulelen, sizeof rule - rulelen, - ",arg%"pD"d='%s'", i - 6, SDATA (args[i])); - if (! (0 <= len && len < sizeof rule - rulelen)) - string_overflow (); - rulelen += len; - } - - /* Add the rule to the bus. */ - dbus_error_init (&derror); - dbus_bus_add_match (connection, rule, &derror); - if (dbus_error_is_set (&derror)) - { - UNGCPRO; - XD_ERROR (derror); - } - - /* Cleanup. */ - dbus_error_free (&derror); - - XD_DEBUG_MESSAGE ("Matching rule \"%s\" created", rule); - } - - /* Create a hash table entry. */ - key = list3 (bus, interface, signal); - key1 = list5 (uname, service, path, handler, build_string (rule)); - value = Fgethash (key, Vdbus_registered_objects_table, Qnil); - - if (NILP (Fmember (key1, value))) - Fputhash (key, Fcons (key1, value), Vdbus_registered_objects_table); - - /* Return object. */ - RETURN_UNGCPRO (list2 (key, list3 (service, path, handler))); -} - -DEFUN ("dbus-register-method", Fdbus_register_method, Sdbus_register_method, - 6, 7, 0, - doc: /* Register for method METHOD on the D-Bus BUS. - -BUS is either a Lisp symbol, `:system' or `:session', or a string -denoting the bus address. - -SERVICE is the D-Bus service name of the D-Bus object METHOD is -registered for. It must be a known name (See discussion of -DONT-REGISTER-SERVICE below). - -PATH is the D-Bus object path SERVICE is registered (See discussion of -DONT-REGISTER-SERVICE below). INTERFACE is the interface offered by -SERVICE. It must provide METHOD. - -HANDLER is a Lisp function to be called when a method call is -received. It must accept the input arguments of METHOD. The return -value of HANDLER is used for composing the returning D-Bus message. -In case HANDLER shall return a reply message with an empty argument -list, HANDLER must return the symbol `:ignore'. - -When DONT-REGISTER-SERVICE is non-nil, the known name SERVICE is not -registered. This means that other D-Bus clients have no way of -noticing the newly registered method. When interfaces are constructed -incrementally by adding single methods or properties at a time, -DONT-REGISTER-SERVICE can be used to prevent other clients from -discovering the still incomplete interface.*/) - (Lisp_Object bus, Lisp_Object service, Lisp_Object path, - Lisp_Object interface, Lisp_Object method, Lisp_Object handler, - Lisp_Object dont_register_service) -{ - Lisp_Object key, key1, value; - Lisp_Object args[2] = { bus, service }; - - /* Check parameters. */ - CHECK_STRING (service); - CHECK_STRING (path); - CHECK_STRING (interface); - CHECK_STRING (method); - if (!FUNCTIONP (handler)) - wrong_type_argument (Qinvalid_function, handler); - /* TODO: We must check for a valid service name, otherwise there is - a segmentation fault. */ - - /* Request the name. */ - if (NILP (dont_register_service)) - Fdbus_register_service (2, args); - - /* Create a hash table entry. We use nil for the unique name, - because the method might be called from anybody. */ - key = list3 (bus, interface, method); - key1 = list4 (Qnil, service, path, handler); - value = Fgethash (key, Vdbus_registered_objects_table, Qnil); - - if (NILP (Fmember (key1, value))) - Fputhash (key, Fcons (key1, value), Vdbus_registered_objects_table); - - /* Return object. */ - return list2 (key, list3 (service, path, handler)); -} - void syms_of_dbusbind (void) @@ -2218,35 +1616,11 @@ syms_of_dbusbind (void) DEFSYM (Qdbus_init_bus, "dbus-init-bus"); defsubr (&Sdbus_init_bus); - DEFSYM (Qdbus_close_bus, "dbus-close-bus"); - defsubr (&Sdbus_close_bus); - DEFSYM (Qdbus_get_unique_name, "dbus-get-unique-name"); defsubr (&Sdbus_get_unique_name); - DEFSYM (Qdbus_call_method, "dbus-call-method"); - defsubr (&Sdbus_call_method); - - DEFSYM (Qdbus_call_method_asynchronously, "dbus-call-method-asynchronously"); - defsubr (&Sdbus_call_method_asynchronously); - - DEFSYM (Qdbus_method_return_internal, "dbus-method-return-internal"); - defsubr (&Sdbus_method_return_internal); - - DEFSYM (Qdbus_method_error_internal, "dbus-method-error-internal"); - defsubr (&Sdbus_method_error_internal); - - DEFSYM (Qdbus_send_signal, "dbus-send-signal"); - defsubr (&Sdbus_send_signal); - - DEFSYM (Qdbus_register_service, "dbus-register-service"); - defsubr (&Sdbus_register_service); - - DEFSYM (Qdbus_register_signal, "dbus-register-signal"); - defsubr (&Sdbus_register_signal); - - DEFSYM (Qdbus_register_method, "dbus-register-method"); - defsubr (&Sdbus_register_method); + DEFSYM (Qdbus_message_internal, "dbus-message-internal"); + defsubr (&Sdbus_message_internal); DEFSYM (Qdbus_error, "dbus-error"); Fput (Qdbus_error, Qerror_conditions, @@ -2256,13 +1630,6 @@ syms_of_dbusbind (void) DEFSYM (QCdbus_system_bus, ":system"); DEFSYM (QCdbus_session_bus, ":session"); - DEFSYM (QCdbus_request_name_allow_replacement, ":allow-replacement"); - DEFSYM (QCdbus_request_name_replace_existing, ":replace-existing"); - DEFSYM (QCdbus_request_name_do_not_queue, ":do-not-queue"); - DEFSYM (QCdbus_request_name_reply_primary_owner, ":primary-owner"); - DEFSYM (QCdbus_request_name_reply_exists, ":exists"); - DEFSYM (QCdbus_request_name_reply_in_queue, ":in-queue"); - DEFSYM (QCdbus_request_name_reply_already_owner, ":already-owner"); DEFSYM (QCdbus_timeout, ":timeout"); DEFSYM (QCdbus_type_byte, ":byte"); DEFSYM (QCdbus_type_boolean, ":boolean"); @@ -2276,19 +1643,73 @@ syms_of_dbusbind (void) DEFSYM (QCdbus_type_string, ":string"); DEFSYM (QCdbus_type_object_path, ":object-path"); DEFSYM (QCdbus_type_signature, ":signature"); - #ifdef DBUS_TYPE_UNIX_FD DEFSYM (QCdbus_type_unix_fd, ":unix-fd"); #endif - DEFSYM (QCdbus_type_array, ":array"); DEFSYM (QCdbus_type_variant, ":variant"); DEFSYM (QCdbus_type_struct, ":struct"); DEFSYM (QCdbus_type_dict_entry, ":dict-entry"); + DEFSYM (QCdbus_registered_serial, ":serial"); + DEFSYM (QCdbus_registered_method, ":method"); + DEFSYM (QCdbus_registered_signal, ":signal"); + + DEFVAR_LISP ("dbus-compiled-version", + Vdbus_compiled_version, + doc: /* The version of D-Bus Emacs is compiled against. */); +#ifdef DBUS_VERSION_STRING + Vdbus_compiled_version = make_pure_c_string (DBUS_VERSION_STRING); +#else + Vdbus_compiled_version = Qnil; +#endif + + DEFVAR_LISP ("dbus-runtime-version", + Vdbus_runtime_version, + doc: /* The version of D-Bus Emacs runs with. */); + { +#ifdef DBUS_VERSION + int major, minor, micro; + char s[1024]; + dbus_get_version (&major, &minor, µ); + snprintf (s, sizeof s, "%d.%d.%d", major, minor, micro); + Vdbus_runtime_version = make_string (s, strlen (s)); +#else + Vdbus_runtime_version = Qnil; +#endif + } + + DEFVAR_LISP ("dbus-message-type-invalid", + Vdbus_message_type_invalid, + doc: /* This value is never a valid message type. */); + Vdbus_message_type_invalid = make_number (DBUS_MESSAGE_TYPE_INVALID); + + DEFVAR_LISP ("dbus-message-type-method-call", + Vdbus_message_type_method_call, + doc: /* Message type of a method call message. */); + Vdbus_message_type_method_call = make_number (DBUS_MESSAGE_TYPE_METHOD_CALL); + + DEFVAR_LISP ("dbus-message-type-method-return", + Vdbus_message_type_method_return, + doc: /* Message type of a method return message. */); + Vdbus_message_type_method_return + = make_number (DBUS_MESSAGE_TYPE_METHOD_RETURN); + + DEFVAR_LISP ("dbus-message-type-error", + Vdbus_message_type_error, + doc: /* Message type of an error reply message. */); + Vdbus_message_type_error = make_number (DBUS_MESSAGE_TYPE_ERROR); + + DEFVAR_LISP ("dbus-message-type-signal", + Vdbus_message_type_signal, + doc: /* Message type of a signal message. */); + Vdbus_message_type_signal = make_number (DBUS_MESSAGE_TYPE_SIGNAL); DEFVAR_LISP ("dbus-registered-buses", Vdbus_registered_buses, - doc: /* List of D-Bus buses we are polling for messages. */); + doc: /* Alist of D-Bus buses we are polling for messages. + +The key is the symbol or string of the bus, and the value is the +connection address. */); Vdbus_registered_buses = Qnil; DEFVAR_LISP ("dbus-registered-objects-table", @@ -2299,27 +1720,28 @@ There are two different uses of the hash table: for accessing registered interfaces properties, targeted by signals or method calls, and for calling handlers in case of non-blocking method call returns. -In the first case, the key in the hash table is the list (BUS -INTERFACE MEMBER). BUS is either a Lisp symbol, `:system' or +In the first case, the key in the hash table is the list (TYPE BUS +INTERFACE MEMBER). TYPE is one of the Lisp symbols `:method', +`:signal' or `:property'. BUS is either a Lisp symbol, `:system' or `:session', or a string denoting the bus address. INTERFACE is a string which denotes a D-Bus interface, and MEMBER, also a string, is either a method, a signal or a property INTERFACE is offering. All arguments but BUS must not be nil. -The value in the hash table is a list of quadruple lists -\((UNAME SERVICE PATH OBJECT) (UNAME SERVICE PATH OBJECT) ...). -SERVICE is the service name as registered, UNAME is the corresponding -unique name. In case of registered methods and properties, UNAME is -nil. PATH is the object path of the sending object. All of them can -be nil, which means a wildcard then. OBJECT is either the handler to -be called when a D-Bus message, which matches the key criteria, -arrives (methods and signals), or a cons cell containing the value of -the property. +The value in the hash table is a list of quadruple lists \((UNAME +SERVICE PATH OBJECT [RULE]) ...). SERVICE is the service name as +registered, UNAME is the corresponding unique name. In case of +registered methods and properties, UNAME is nil. PATH is the object +path of the sending object. All of them can be nil, which means a +wildcard then. OBJECT is either the handler to be called when a D-Bus +message, which matches the key criteria, arrives (TYPE `:method' and +`:signal'), or a cons cell containing the value of the property (TYPE +`:property'). -For signals, there is also a fifth element RULE, which keeps the match -string the signal is registered with. +For entries of type `:signal', there is also a fifth element RULE, +which keeps the match string the signal is registered with. -In the second case, the key in the hash table is the list (BUS +In the second case, the key in the hash table is the list (:serial BUS SERIAL). BUS is either a Lisp symbol, `:system' or `:session', or a string denoting the bus address. SERIAL is the serial number of the non-blocking method call, a reply is expected. Both arguments must From de85e130f59b5164e2150abda92316f3a07d82c0 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sun, 22 Apr 2012 10:46:49 -0700 Subject: [PATCH 138/564] * dbusbind.c (XD_DBUS_VALIDATE_OBJECT): Define only if needed. --- src/ChangeLog | 4 ++++ src/dbusbind.c | 5 ++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index 205728f91da..0d557fcc1cf 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2012-04-22 Paul Eggert + + * dbusbind.c (XD_DBUS_VALIDATE_OBJECT): Define only if needed. + 2012-04-22 Michael Albinus Move functions from C to Lisp. Make non-blocking method calls diff --git a/src/dbusbind.c b/src/dbusbind.c index 78e5c80baf3..0ea08d7bf0e 100644 --- a/src/dbusbind.c +++ b/src/dbusbind.c @@ -291,6 +291,8 @@ xd_symbol_to_dbus_type (Lisp_Object object) } \ } while (0) +#if (HAVE_DBUS_VALIDATE_BUS_NAME || HAVE_DBUS_VALIDATE_PATH \ + || XD_DBUS_VALIDATE_OBJECT || HAVE_DBUS_VALIDATE_MEMBER) #define XD_DBUS_VALIDATE_OBJECT(object, func) \ do { \ if (!NILP (object)) \ @@ -304,6 +306,7 @@ xd_symbol_to_dbus_type (Lisp_Object object) dbus_error_free (&derror); \ } \ } while (0) +#endif #if HAVE_DBUS_VALIDATE_BUS_NAME #define XD_DBUS_VALIDATE_BUS_NAME(bus_name) \ @@ -864,7 +867,7 @@ static int xd_get_connection_references (DBusConnection *connection) { ptrdiff_t *refcount; - + /* We cannot access the DBusConnection structure, it is not public. But we know, that the reference counter is the first field in that structure. */ From c2d1019e3540ffcace2cd72d46a1e85958c4d584 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Mon, 23 Apr 2012 01:58:14 +0800 Subject: [PATCH 139/564] Make the "reset-saved" Custom operation reset to default if there is no saved value. * lisp/cus-edit.el (custom-variable-menu) (custom-variable-reset-saved, custom-face-menu) (custom-face-reset-saved): If there is no saved value, make the "reset-saved" operation bring back the default. (custom-face-state): Properly detect themed faces. Fixes: debbugs:9509 --- lisp/ChangeLog | 8 +++++ lisp/cus-edit.el | 90 ++++++++++++++++++++++++------------------------ 2 files changed, 53 insertions(+), 45 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 334e34bb712..11cb03dea14 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,11 @@ +2012-04-22 Chong Yidong + + * cus-edit.el (custom-variable-menu) + (custom-variable-reset-saved, custom-face-menu) + (custom-face-reset-saved): If there is no saved value, make the + "reset-saved" operation bring back the default (Bug#9509). + (custom-face-state): Properly detect themed faces. + 2012-04-22 Michael Albinus Move functions from C to Lisp. Make non-blocking method calls diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el index d20403ad341..924cbcddfc8 100644 --- a/lisp/cus-edit.el +++ b/lisp/cus-edit.el @@ -2823,10 +2823,8 @@ If STATE is nil, the value is computed by `custom-variable-state'." (memq (widget-get widget :custom-state) '(modified changed))))) ("Revert This Session's Customization" custom-variable-reset-saved (lambda (widget) - (and (or (get (widget-value widget) 'saved-value) - (get (widget-value widget) 'saved-variable-comment)) - (memq (widget-get widget :custom-state) - '(modified set changed rogue))))) + (memq (widget-get widget :custom-state) + '(modified set changed rogue)))) ,@(when (or custom-file init-file-user) '(("Erase Customization" custom-variable-reset-standard (lambda (widget) @@ -2977,23 +2975,25 @@ Optional EVENT is the location for the menu." (custom-variable-state-set-and-redraw widget)) (defun custom-variable-reset-saved (widget) - "Restore the saved value for the variable being edited by WIDGET. -This also updates the buffer to show that value. -The value that was current before this operation -becomes the backup value, so you can get it again." + "Restore the value of the variable being edited by WIDGET. +If there is a saved value, restore it; otherwise reset to the +uncustomized (themed or standard) value. + +Update the widget to show that value. The value that was current +before this operation becomes the backup value." (let* ((symbol (widget-value widget)) - (set (or (get symbol 'custom-set) 'set-default)) - (value (get symbol 'saved-value)) + (saved-value (get symbol 'saved-value)) (comment (get symbol 'saved-variable-comment))) - (cond ((or value comment) - (put symbol 'variable-comment comment) - (custom-variable-backup-value widget) - (custom-push-theme 'theme-value symbol 'user 'set (car-safe value)) - (condition-case nil - (funcall set symbol (eval (car value))) - (error nil))) - (t - (error "No saved value for %s" symbol))) + (custom-variable-backup-value widget) + (if (not (or saved-value comment)) + ;; If there is no saved value, remove the setting. + (custom-push-theme 'theme-value symbol 'user 'reset) + ;; Otherwise, apply the saved value. + (put symbol 'variable-comment comment) + (custom-push-theme 'theme-value symbol 'user 'set (car-safe saved-value)) + (ignore-errors + (funcall (or (get symbol 'custom-set) 'set-default) + symbol (eval (car saved-value))))) (put symbol 'customized-value nil) (put symbol 'customized-variable-comment nil) (widget-put widget :custom-state 'unknown) @@ -3619,8 +3619,7 @@ the present value is saved to its :shown-value property instead." (memq (widget-get widget :custom-state) '(modified changed)))) ("Revert This Session's Customization" custom-face-reset-saved (lambda (widget) - (or (get (widget-value widget) 'saved-face) - (get (widget-value widget) 'saved-face-comment)))) + (memq (widget-get widget :custom-state) '(modified set changed)))) ,@(when (or custom-file init-file-user) '(("Erase Customization" custom-face-reset-standard (lambda (widget) @@ -3675,18 +3674,17 @@ This is one of `set', `saved', `changed', `themed', or `rogue'." 'changed)) ((or (get face 'saved-face) (get face 'saved-face-comment)) - (if (equal (get face 'saved-face-comment) comment) - (cond - ((eq 'user (caar (get face 'theme-face))) - 'saved) - ((eq 'changed (caar (get face 'theme-face))) - 'changed) - (t 'themed)) - 'changed)) + (cond ((not (equal (get face 'saved-face-comment) comment)) + 'changed) + ((eq 'user (caar (get face 'theme-face))) + 'saved) + ((eq 'changed (caar (get face 'theme-face))) + 'changed) + (t 'themed))) ((get face 'face-defface-spec) - (if (equal comment nil) - 'standard - 'changed)) + (cond (comment 'changed) + ((get face 'theme-face) 'themed) + (t 'standard))) (t 'rogue)))) ;; If the user called set-face-attribute to change the default for ;; new frames, this face is "set outside of Customize". @@ -3776,24 +3774,26 @@ Optional EVENT is the location for the menu." "22.1") (defun custom-face-reset-saved (widget) - "Restore WIDGET to the face's default attributes." - (let* ((symbol (widget-value widget)) + "Restore WIDGET to the face's default attributes. +If there is a saved face, restore it; otherwise reset to the +uncustomized (themed or standard) face." + (let* ((face (widget-value widget)) (child (car (widget-get widget :children))) - (value (get symbol 'saved-face)) - (comment (get symbol 'saved-face-comment)) + (saved-face (get face 'saved-face)) + (comment (get face 'saved-face-comment)) (comment-widget (widget-get widget :comment-widget))) - (unless (or value comment) - (error "No saved value for this face")) - (put symbol 'customized-face nil) - (put symbol 'customized-face-comment nil) - (custom-push-theme 'theme-face symbol 'user 'set value) - (face-spec-set symbol value t) - (put symbol 'face-comment comment) - (widget-value-set child value) + (put face 'customized-face nil) + (put face 'customized-face-comment nil) + (custom-push-theme 'theme-face face 'user + (if saved-face 'set 'reset) + saved-face) + (face-spec-set face saved-face t) + (put face 'face-comment comment) + (widget-value-set child saved-face) ;; This call manages the comment visibility (widget-value-set comment-widget (or comment "")) (custom-face-state-set widget) - (custom-redraw-magic widget))) + (custom-redraw widget))) (defun custom-face-standard-value (widget) (get (widget-value widget) 'face-defface-spec)) From eeddc5310ac04e9f5a0cce072f378ff5c76dae65 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Mon, 23 Apr 2012 02:04:54 +0800 Subject: [PATCH 140/564] * faces.el (face-spec-set): Stop supporting deprecated form of third arg. --- etc/NEWS | 3 +++ lisp/ChangeLog | 3 +++ lisp/faces.el | 48 +++++++++++++++++++++--------------------------- 3 files changed, 27 insertions(+), 27 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 3b53f9df97a..e728002230c 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -138,6 +138,9 @@ Only variables defined using `defcustom' are considered user options. The function `user-variable-p' is now an obsolete alias for `custom-variable-p'. +** `face-spec-set' no longer sets frame-specific attributes when the +third argument is a frame (that usage was obsolete since Emacs 22.2). + * Lisp changes in Emacs 24.2 diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 11cb03dea14..dd2d9ff86aa 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -6,6 +6,9 @@ "reset-saved" operation bring back the default (Bug#9509). (custom-face-state): Properly detect themed faces. + * faces.el (face-spec-set): Stop supporting deprecated form of + third arg. + 2012-04-22 Michael Albinus Move functions from C to Lisp. Make non-blocking method calls diff --git a/lisp/faces.el b/lisp/faces.el index 8eacf5bcfe2..b3b0fa9b7d2 100644 --- a/lisp/faces.el +++ b/lisp/faces.el @@ -1532,35 +1532,29 @@ If SPEC is nil, return nil." face-attribute-name-alist))))) (defun face-spec-set (face spec &optional for-defface) - "Set FACE's face spec, which controls its appearance, to SPEC. -If FOR-DEFFACE is t, set the base spec, the one that `defface' - and Custom set. (In that case, the caller must put it in the - appropriate property, because that depends on the caller.) -If FOR-DEFFACE is nil, set the overriding spec (and store it - in the `face-override-spec' property of FACE). + "Set and apply the face spec for FACE. +If the optional argument FOR-DEFFACE is omitted or nil, set the +overriding spec to SPEC, recording it in the `face-override-spec' +property of FACE. See `defface' for the format of SPEC. -The appearance of FACE is controlled by the base spec, -by any custom theme specs on top of that, and by the -overriding spec on top of all the rest. +If FOR-DEFFACE is non-nil, set the base spec (the one set by +`defface' and Custom). In this case, SPEC is ignored; the caller +is responsible for putting the face spec in the `saved-face', +`customized-face', or `face-defface-spec', as appropriate. -FOR-DEFFACE can also be a frame, in which case we set the -frame-specific attributes of FACE for that frame based on SPEC. -That usage is deprecated. - -See `defface' for information about the format and meaning of SPEC." - (if (framep for-defface) - ;; Handle the deprecated case where third arg is a frame. - (face-spec-set-2 face for-defface spec) - (if for-defface - ;; When we reset the face based on its custom spec, then it is - ;; unmodified as far as Custom is concerned. - (put (or (get face 'face-alias) face) 'face-modified nil) - ;; When we change a face based on a spec from outside custom, - ;; record it for future frames. - (put (or (get face 'face-alias) face) 'face-override-spec spec)) - ;; Reset each frame according to the rules implied by all its specs. - (dolist (frame (frame-list)) - (face-spec-recalc face frame)))) +The appearance of FACE is controlled by the base spec, by any +custom theme specs on top of that, and by the overriding spec on +top of all the rest." + (if for-defface + ;; When we reset the face based on its custom spec, then it is + ;; unmodified as far as Custom is concerned. + (put (or (get face 'face-alias) face) 'face-modified nil) + ;; When we change a face based on a spec from outside custom, + ;; record it for future frames. + (put (or (get face 'face-alias) face) 'face-override-spec spec)) + ;; Reset each frame according to the rules implied by all its specs. + (dolist (frame (frame-list)) + (face-spec-recalc face frame))) (defun face-spec-recalc (face frame) "Reset the face attributes of FACE on FRAME according to its specs. From d0baac98ac8f673ec56bc8b0b1fd7d280831b015 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sun, 22 Apr 2012 12:23:51 -0700 Subject: [PATCH 141/564] Modernize and clean up gmalloc.c to assume C89 (Bug#9119). * gmalloc.c: (_MALLOC_INTERNAL, _MALLOC_H, _PP, __ptr_t) (__malloc_size_t, __malloc_ptrdiff_t): Remove. All uses removed, replaced by the definiens if needed, since we can assume C89 or better now. Include , for PTRDIFF_MAX, uintptr_t. (protect_malloc_state, align, get_contiguous_space) (malloc_atfork_handler_prepare, malloc_atfork_handler_parent) (malloc_atfork_handler_child, malloc_enable_thread) (malloc_initialize_1, __malloc_initialize, morecore_nolock) (_malloc_internal_nolock, _malloc_internal, malloc, _malloc) (_free, _realloc, _free_internal_nolock, _free_internal, free, cfree) (special_realloc, _realloc_internal_nolock, _realloc_internal) (realloc, calloc, __default_morecore, memalign, valloc, checkhdr) (freehook, mallochook, reallochook, mabort, mcheck, mprobe): Define using prototypes, not old style. (align, _malloc_internal_nolock, _free_internal_nolock, memalign): Don't assume ptrdiff_t and uintptr_t are no wider than unsigned long. (align): Don't assume that signed integer overflow wraps around. Omit unused local var. (malloc_initialize_1, morecore_nolock, _malloc_internal_nolock) (_free_internal_nolock, memalign, mallochook, reallochook): Omit no-longer-needed casts. (valloc): Use getpagesize, not __getpagesize. (MAGICWORD, MAGICFREE): Now randomish size_t values, not 32-bit. (struct hdr): The 'magic' member is now size_t, not unsigned long. --- src/ChangeLog | 27 +++ src/gmalloc.c | 601 +++++++++++++++++++------------------------------- 2 files changed, 252 insertions(+), 376 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 0d557fcc1cf..410e6e01f45 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,32 @@ 2012-04-22 Paul Eggert + Modernize and clean up gmalloc.c to assume C89 (Bug#9119). + * gmalloc.c: (_MALLOC_INTERNAL, _MALLOC_H, _PP, __ptr_t) + (__malloc_size_t, __malloc_ptrdiff_t): + Remove. All uses removed, replaced by the definiens if needed, + since we can assume C89 or better now. + Include , for PTRDIFF_MAX, uintptr_t. + (protect_malloc_state, align, get_contiguous_space) + (malloc_atfork_handler_prepare, malloc_atfork_handler_parent) + (malloc_atfork_handler_child, malloc_enable_thread) + (malloc_initialize_1, __malloc_initialize, morecore_nolock) + (_malloc_internal_nolock, _malloc_internal, malloc, _malloc) + (_free, _realloc, _free_internal_nolock, _free_internal, free, cfree) + (special_realloc, _realloc_internal_nolock, _realloc_internal) + (realloc, calloc, __default_morecore, memalign, valloc, checkhdr) + (freehook, mallochook, reallochook, mabort, mcheck, mprobe): + Define using prototypes, not old style. + (align, _malloc_internal_nolock, _free_internal_nolock, memalign): + Don't assume ptrdiff_t and uintptr_t are no wider than unsigned long. + (align): Don't assume that signed integer overflow wraps around. + Omit unused local var. + (malloc_initialize_1, morecore_nolock, _malloc_internal_nolock) + (_free_internal_nolock, memalign, mallochook, reallochook): + Omit no-longer-needed casts. + (valloc): Use getpagesize, not __getpagesize. + (MAGICWORD, MAGICFREE): Now randomish size_t values, not 32-bit. + (struct hdr): The 'magic' member is now size_t, not unsigned long. + * dbusbind.c (XD_DBUS_VALIDATE_OBJECT): Define only if needed. 2012-04-22 Michael Albinus diff --git a/src/gmalloc.c b/src/gmalloc.c index 7b5e6df009b..38406fd029a 100644 --- a/src/gmalloc.c +++ b/src/gmalloc.c @@ -1,9 +1,3 @@ -/* This file is no longer automatically generated from libc. */ - -#define _MALLOC_INTERNAL - -/* The malloc headers and source files from the C library follow here. */ - /* Declarations for `malloc' and friends. Copyright (C) 1990, 1991, 1992, 1993, 1995, 1996, 1999, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. @@ -27,12 +21,6 @@ Fifth Floor, Boston, MA 02110-1301, USA. The author may be reached (Email) at the address mike@ai.mit.edu, or (US mail) as Mike Haertel c/o Free Software Foundation. */ -#ifndef _MALLOC_H - -#define _MALLOC_H 1 - -#ifdef _MALLOC_INTERNAL - #ifdef HAVE_CONFIG_H #include #endif @@ -41,62 +29,44 @@ Fifth Floor, Boston, MA 02110-1301, USA. #define USE_PTHREAD #endif -#undef PP -#define PP(args) args -#undef __ptr_t -#define __ptr_t void * - #include #include +#include #include #ifdef USE_PTHREAD #include #endif -#endif /* _MALLOC_INTERNAL. */ - - #ifdef __cplusplus extern "C" { #endif #include -#define __malloc_size_t size_t -#define __malloc_ptrdiff_t ptrdiff_t /* Allocate SIZE bytes of memory. */ -extern __ptr_t malloc PP ((__malloc_size_t __size)); +extern void *malloc (size_t size); /* Re-allocate the previously allocated block - in __ptr_t, making the new block SIZE bytes long. */ -extern __ptr_t realloc PP ((__ptr_t __ptr, __malloc_size_t __size)); + in ptr, making the new block SIZE bytes long. */ +extern void *realloc (void *ptr, size_t size); /* Allocate NMEMB elements of SIZE bytes each, all initialized to 0. */ -extern __ptr_t calloc PP ((__malloc_size_t __nmemb, __malloc_size_t __size)); +extern void *calloc (size_t nmemb, size_t size); /* Free a block allocated by `malloc', `realloc' or `calloc'. */ -extern void free PP ((__ptr_t __ptr)); +extern void free (void *ptr); /* Allocate SIZE bytes allocated to ALIGNMENT bytes. */ -#if !defined (_MALLOC_INTERNAL) || defined (MSDOS) /* Avoid conflict. */ -extern __ptr_t memalign PP ((__malloc_size_t __alignment, - __malloc_size_t __size)); -extern int posix_memalign PP ((__ptr_t *, __malloc_size_t, - __malloc_size_t size)); -#endif - -/* Allocate SIZE bytes on a page boundary. */ -#if ! (defined (_MALLOC_INTERNAL) && defined (GMALLOC_INHIBIT_VALLOC)) -extern __ptr_t valloc PP ((__malloc_size_t __size)); +#ifdef MSDOS +extern void *memalign (size_t, size_t); +extern int posix_memalign (void **, size_t, size_t); #endif #ifdef USE_PTHREAD /* Set up mutexes and make malloc etc. thread-safe. */ -extern void malloc_enable_thread PP ((void)); +extern void malloc_enable_thread (void); #endif -#ifdef _MALLOC_INTERNAL - /* The allocator divides the heap into blocks of fixed size; large requests receive one or more whole blocks, and small requests receive a fragment of a block. Fragment sizes are powers of two, @@ -128,22 +98,22 @@ typedef union { struct { - __malloc_size_t nfree; /* Free frags in a fragmented block. */ - __malloc_size_t first; /* First free fragment of the block. */ + size_t nfree; /* Free frags in a fragmented block. */ + size_t first; /* First free fragment of the block. */ } frag; /* For a large object, in its first block, this has the number of blocks in the object. In the other blocks, this has a negative number which says how far back the first block is. */ - __malloc_ptrdiff_t size; + ptrdiff_t size; } info; } busy; /* Heap information for a free block (that may be the first of a free cluster). */ struct { - __malloc_size_t size; /* Size (in blocks) of a free cluster. */ - __malloc_size_t next; /* Index of next free cluster. */ - __malloc_size_t prev; /* Index of previous free cluster. */ + size_t size; /* Size (in blocks) of a free cluster. */ + size_t next; /* Index of next free cluster. */ + size_t prev; /* Index of previous free cluster. */ } free; } malloc_info; @@ -155,13 +125,13 @@ extern malloc_info *_heapinfo; /* Address to block number and vice versa. */ #define BLOCK(A) (((char *) (A) - _heapbase) / BLOCKSIZE + 1) -#define ADDRESS(B) ((__ptr_t) (((B) - 1) * BLOCKSIZE + _heapbase)) +#define ADDRESS(B) ((void *) (((B) - 1) * BLOCKSIZE + _heapbase)) /* Current search index for the heap table. */ -extern __malloc_size_t _heapindex; +extern size_t _heapindex; /* Limit of valid info table indices. */ -extern __malloc_size_t _heaplimit; +extern size_t _heaplimit; /* Doubly linked lists of free fragments. */ struct list @@ -177,26 +147,26 @@ extern struct list _fraghead[]; struct alignlist { struct alignlist *next; - __ptr_t aligned; /* The address that memaligned returned. */ - __ptr_t exact; /* The address that malloc returned. */ + void *aligned; /* The address that memaligned returned. */ + void *exact; /* The address that malloc returned. */ }; extern struct alignlist *_aligned_blocks; /* Instrumentation. */ -extern __malloc_size_t _chunks_used; -extern __malloc_size_t _bytes_used; -extern __malloc_size_t _chunks_free; -extern __malloc_size_t _bytes_free; +extern size_t _chunks_used; +extern size_t _bytes_used; +extern size_t _chunks_free; +extern size_t _bytes_free; /* Internal versions of `malloc', `realloc', and `free' used when these functions need to call each other. They are the same but don't call the hooks. */ -extern __ptr_t _malloc_internal PP ((__malloc_size_t __size)); -extern __ptr_t _realloc_internal PP ((__ptr_t __ptr, __malloc_size_t __size)); -extern void _free_internal PP ((__ptr_t __ptr)); -extern __ptr_t _malloc_internal_nolock PP ((__malloc_size_t __size)); -extern __ptr_t _realloc_internal_nolock PP ((__ptr_t __ptr, __malloc_size_t __size)); -extern void _free_internal_nolock PP ((__ptr_t __ptr)); +extern void *_malloc_internal (size_t); +extern void *_realloc_internal (void *, size_t); +extern void _free_internal (void *); +extern void *_malloc_internal_nolock (size_t); +extern void *_realloc_internal_nolock (void *, size_t); +extern void _free_internal_nolock (void *); #ifdef USE_PTHREAD extern pthread_mutex_t _malloc_mutex, _aligned_blocks_mutex; @@ -228,39 +198,36 @@ extern int _malloc_thread_enabled_p; #define UNLOCK_ALIGNED_BLOCKS() #endif -#endif /* _MALLOC_INTERNAL. */ - /* Given an address in the middle of a malloc'd object, return the address of the beginning of the object. */ -extern __ptr_t malloc_find_object_address PP ((__ptr_t __ptr)); +extern void *malloc_find_object_address (void *ptr); /* Underlying allocation function; successive calls should return contiguous pieces of memory. */ -extern __ptr_t (*__morecore) PP ((__malloc_ptrdiff_t __size)); +extern void *(*__morecore) (ptrdiff_t size); /* Default value of `__morecore'. */ -extern __ptr_t __default_morecore PP ((__malloc_ptrdiff_t __size)); +extern void *__default_morecore (ptrdiff_t size); /* If not NULL, this function is called after each time `__morecore' is called to increase the data size. */ -extern void (*__after_morecore_hook) PP ((void)); +extern void (*__after_morecore_hook) (void); /* Number of extra blocks to get each time we ask for more core. This reduces the frequency of calling `(*__morecore)'. */ -extern __malloc_size_t __malloc_extra_blocks; +extern size_t __malloc_extra_blocks; /* Nonzero if `malloc' has been called and done its initialization. */ extern int __malloc_initialized; /* Function called to initialize malloc data structures. */ -extern int __malloc_initialize PP ((void)); +extern int __malloc_initialize (void); /* Hooks for debugging versions. */ -extern void (*__malloc_initialize_hook) PP ((void)); -extern void (*__free_hook) PP ((__ptr_t __ptr)); -extern __ptr_t (*__malloc_hook) PP ((__malloc_size_t __size)); -extern __ptr_t (*__realloc_hook) PP ((__ptr_t __ptr, __malloc_size_t __size)); -extern __ptr_t (*__memalign_hook) PP ((__malloc_size_t __size, - __malloc_size_t __alignment)); +extern void (*__malloc_initialize_hook) (void); +extern void (*__free_hook) (void *ptr); +extern void *(*__malloc_hook) (size_t size); +extern void *(*__realloc_hook) (void *ptr, size_t size); +extern void *(*__memalign_hook) (size_t size, size_t alignment); /* Return values for `mprobe': these are the kinds of inconsistencies that `mcheck' enables detection of. */ @@ -277,52 +244,37 @@ enum mcheck_status before `malloc' is ever called. ABORTFUNC is called with an error code (see enum above) when an inconsistency is detected. If ABORTFUNC is null, the standard function prints on stderr and then calls `abort'. */ -extern int mcheck PP ((void (*__abortfunc) PP ((enum mcheck_status)))); +extern int mcheck (void (*abortfunc) (enum mcheck_status)); /* Check for aberrations in a particular malloc'd block. You must have called `mcheck' already. These are the same checks that `mcheck' does when you free or reallocate a block. */ -extern enum mcheck_status mprobe PP ((__ptr_t __ptr)); +extern enum mcheck_status mprobe (void *ptr); /* Activate a standard collection of tracing hooks. */ -extern void mtrace PP ((void)); -extern void muntrace PP ((void)); +extern void mtrace (void); +extern void muntrace (void); /* Statistics available to the user. */ struct mstats { - __malloc_size_t bytes_total; /* Total size of the heap. */ - __malloc_size_t chunks_used; /* Chunks allocated by the user. */ - __malloc_size_t bytes_used; /* Byte total of user-allocated chunks. */ - __malloc_size_t chunks_free; /* Chunks in the free list. */ - __malloc_size_t bytes_free; /* Byte total of chunks in the free list. */ + size_t bytes_total; /* Total size of the heap. */ + size_t chunks_used; /* Chunks allocated by the user. */ + size_t bytes_used; /* Byte total of user-allocated chunks. */ + size_t chunks_free; /* Chunks in the free list. */ + size_t bytes_free; /* Byte total of chunks in the free list. */ }; /* Pick up the current statistics. */ -extern struct mstats mstats PP ((void)); +extern struct mstats mstats (void); /* Call WARNFUN with a warning message when memory usage is high. */ -extern void memory_warnings PP ((__ptr_t __start, - void (*__warnfun) PP ((const char *)))); - - -/* Relocating allocator. */ - -/* Allocate SIZE bytes, and store the address in *HANDLEPTR. */ -extern __ptr_t r_alloc PP ((__ptr_t *__handleptr, __malloc_size_t __size)); - -/* Free the storage allocated in HANDLEPTR. */ -extern void r_alloc_free PP ((__ptr_t *__handleptr)); - -/* Adjust the block at HANDLEPTR to be SIZE bytes long. */ -extern __ptr_t r_re_alloc PP ((__ptr_t *__handleptr, __malloc_size_t __size)); - +extern void memory_warnings (void *start, void (*warnfun) (const char *)); #ifdef __cplusplus } #endif -#endif /* malloc.h */ /* Memory allocator `malloc'. Copyright 1990, 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. Written May 1989 by Mike Haertel. @@ -345,10 +297,6 @@ Fifth Floor, Boston, MA 02110-1301, USA. The author may be reached (Email) at the address mike@ai.mit.edu, or (US mail) as Mike Haertel c/o Free Software Foundation. */ -#ifndef _MALLOC_INTERNAL -#define _MALLOC_INTERNAL -#include -#endif #include /* On Cygwin there are two heaps. temacs uses the static heap @@ -362,15 +310,15 @@ Fifth Floor, Boston, MA 02110-1301, USA. this is changed in the future, we'll have to similarly deal with reinitializing ralloc. */ #ifdef CYGWIN -extern __ptr_t bss_sbrk PP ((ptrdiff_t __size)); +extern void *bss_sbrk (ptrdiff_t size); extern int bss_sbrk_did_unexec; char *bss_sbrk_heapbase; /* _heapbase for static heap */ malloc_info *bss_sbrk_heapinfo; /* _heapinfo for static heap */ #endif -__ptr_t (*__morecore) PP ((__malloc_ptrdiff_t __size)) = __default_morecore; +void *(*__morecore) (ptrdiff_t size) = __default_morecore; /* Debugging hook for `malloc'. */ -__ptr_t (*__malloc_hook) PP ((__malloc_size_t __size)); +void *(*__malloc_hook) (size_t size); /* Pointer to the base of the first block. */ char *_heapbase; @@ -379,30 +327,30 @@ char *_heapbase; malloc_info *_heapinfo; /* Number of info entries. */ -static __malloc_size_t heapsize; +static size_t heapsize; /* Search index in the info table. */ -__malloc_size_t _heapindex; +size_t _heapindex; /* Limit of valid info table indices. */ -__malloc_size_t _heaplimit; +size_t _heaplimit; /* Free lists for each fragment size. */ struct list _fraghead[BLOCKLOG]; /* Instrumentation. */ -__malloc_size_t _chunks_used; -__malloc_size_t _bytes_used; -__malloc_size_t _chunks_free; -__malloc_size_t _bytes_free; +size_t _chunks_used; +size_t _bytes_used; +size_t _chunks_free; +size_t _bytes_free; /* Are you experienced? */ int __malloc_initialized; -__malloc_size_t __malloc_extra_blocks; +size_t __malloc_extra_blocks; -void (*__malloc_initialize_hook) PP ((void)); -void (*__after_morecore_hook) PP ((void)); +void (*__malloc_initialize_hook) (void); +void (*__after_morecore_hook) (void); #if defined GC_MALLOC_CHECK && defined GC_PROTECT_MALLOC_STATE @@ -419,12 +367,11 @@ void (*__after_morecore_hook) PP ((void)); #include static int state_protected_p; -static __malloc_size_t last_state_size; +static size_t last_state_size; static malloc_info *last_heapinfo; void -protect_malloc_state (protect_p) - int protect_p; +protect_malloc_state (int protect_p) { /* If _heapinfo has been relocated, make sure its old location isn't left read-only; it will be reused by malloc. */ @@ -453,29 +400,25 @@ protect_malloc_state (protect_p) /* Aligned allocation. */ -static __ptr_t align PP ((__malloc_size_t)); -static __ptr_t -align (size) - __malloc_size_t size; +static void * +align (size_t size) { - __ptr_t result; - unsigned long int adj; + void *result; + ptrdiff_t adj; /* align accepts an unsigned argument, but __morecore accepts a - signed one. This could lead to trouble if SIZE overflows a - signed int type accepted by __morecore. We just punt in that + signed one. This could lead to trouble if SIZE overflows the + ptrdiff_t type accepted by __morecore. We just punt in that case, since they are requesting a ludicrous amount anyway. */ - if ((__malloc_ptrdiff_t)size < 0) + if (PTRDIFF_MAX < size) result = 0; else result = (*__morecore) (size); - adj = (unsigned long int) ((unsigned long int) ((char *) result - - (char *) NULL)) % BLOCKSIZE; + adj = (uintptr_t) result % BLOCKSIZE; if (adj != 0) { - __ptr_t new; adj = BLOCKSIZE - adj; - new = (*__morecore) (adj); + (*__morecore) (adj); result = (char *) result + adj; } @@ -488,14 +431,11 @@ align (size) /* Get SIZE bytes, if we can get them starting at END. Return the address of the space we got. If we cannot get space at END, fail and return 0. */ -static __ptr_t get_contiguous_space PP ((__malloc_ptrdiff_t, __ptr_t)); -static __ptr_t -get_contiguous_space (size, position) - __malloc_ptrdiff_t size; - __ptr_t position; +static void * +get_contiguous_space (ptrdiff_t size, void *position) { - __ptr_t before; - __ptr_t after; + void *before; + void *after; before = (*__morecore) (0); /* If we can tell in advance that the break is at the wrong place, @@ -525,7 +465,7 @@ get_contiguous_space (size, position) static inline void register_heapinfo (void) { - __malloc_size_t block, blocks; + size_t block, blocks; block = BLOCK (_heapinfo); blocks = BLOCKIFY (heapsize * sizeof (malloc_info)); @@ -548,21 +488,21 @@ pthread_mutex_t _aligned_blocks_mutex = PTHREAD_MUTEX_INITIALIZER; int _malloc_thread_enabled_p; static void -malloc_atfork_handler_prepare () +malloc_atfork_handler_prepare (void) { LOCK (); LOCK_ALIGNED_BLOCKS (); } static void -malloc_atfork_handler_parent () +malloc_atfork_handler_parent (void) { UNLOCK_ALIGNED_BLOCKS (); UNLOCK (); } static void -malloc_atfork_handler_child () +malloc_atfork_handler_child (void) { UNLOCK_ALIGNED_BLOCKS (); UNLOCK (); @@ -570,7 +510,7 @@ malloc_atfork_handler_child () /* Set up mutexes and make malloc etc. thread-safe. */ void -malloc_enable_thread () +malloc_enable_thread (void) { if (_malloc_thread_enabled_p) return; @@ -589,7 +529,7 @@ malloc_enable_thread () #endif static void -malloc_initialize_1 () +malloc_initialize_1 (void) { #ifdef GC_MCHECK mcheck (NULL); @@ -609,7 +549,7 @@ malloc_initialize_1 () (*__malloc_initialize_hook) (); heapsize = HEAP / BLOCKSIZE; - _heapinfo = (malloc_info *) align (heapsize * sizeof (malloc_info)); + _heapinfo = align (heapsize * sizeof (malloc_info)); if (_heapinfo == NULL) return; memset (_heapinfo, 0, heapsize * sizeof (malloc_info)); @@ -630,7 +570,7 @@ malloc_initialize_1 () main will call malloc which calls this function. That is before any threads or signal handlers has been set up, so we don't need thread protection. */ int -__malloc_initialize () +__malloc_initialize (void) { if (__malloc_initialized) return 0; @@ -644,14 +584,12 @@ static int morecore_recursing; /* Get neatly aligned memory, initializing or growing the heap info table as necessary. */ -static __ptr_t morecore_nolock PP ((__malloc_size_t)); -static __ptr_t -morecore_nolock (size) - __malloc_size_t size; +static void * +morecore_nolock (size_t size) { - __ptr_t result; + void *result; malloc_info *newinfo, *oldinfo; - __malloc_size_t newsize; + size_t newsize; if (morecore_recursing) /* Avoid recursion. The caller will know how to handle a null return. */ @@ -664,7 +602,7 @@ morecore_nolock (size) PROTECT_MALLOC_STATE (0); /* Check if we need to grow the info table. */ - if ((__malloc_size_t) BLOCK ((char *) result + size) > heapsize) + if ((size_t) BLOCK ((char *) result + size) > heapsize) { /* Calculate the new _heapinfo table size. We do not account for the added blocks in the table itself, as we hope to place them in @@ -673,7 +611,7 @@ morecore_nolock (size) newsize = heapsize; do newsize *= 2; - while ((__malloc_size_t) BLOCK ((char *) result + size) > newsize); + while ((size_t) BLOCK ((char *) result + size) > newsize); /* We must not reuse existing core for the new info table when called from realloc in the case of growing a large block, because the @@ -689,8 +627,8 @@ morecore_nolock (size) `morecore_recursing' flag and return null. */ int save = errno; /* Don't want to clobber errno with ENOMEM. */ morecore_recursing = 1; - newinfo = (malloc_info *) _realloc_internal_nolock - (_heapinfo, newsize * sizeof (malloc_info)); + newinfo = _realloc_internal_nolock (_heapinfo, + newsize * sizeof (malloc_info)); morecore_recursing = 0; if (newinfo == NULL) errno = save; @@ -710,7 +648,7 @@ morecore_nolock (size) /* Allocate new space for the malloc info table. */ while (1) { - newinfo = (malloc_info *) align (newsize * sizeof (malloc_info)); + newinfo = align (newsize * sizeof (malloc_info)); /* Did it fail? */ if (newinfo == NULL) @@ -721,8 +659,8 @@ morecore_nolock (size) /* Is it big enough to record status for its own space? If so, we win. */ - if ((__malloc_size_t) BLOCK ((char *) newinfo - + newsize * sizeof (malloc_info)) + if ((size_t) BLOCK ((char *) newinfo + + newsize * sizeof (malloc_info)) < newsize) break; @@ -759,13 +697,12 @@ morecore_nolock (size) } /* Allocate memory from the heap. */ -__ptr_t -_malloc_internal_nolock (size) - __malloc_size_t size; +void * +_malloc_internal_nolock (size_t size) { - __ptr_t result; - __malloc_size_t block, blocks, lastblocks, start; - register __malloc_size_t i; + void *result; + size_t block, blocks, lastblocks, start; + register size_t i; struct list *next; /* ANSI C allows `malloc (0)' to either return NULL, or to return a @@ -790,7 +727,7 @@ _malloc_internal_nolock (size) { /* Small allocation to receive a fragment of a block. Determine the logarithm to base two of the fragment size. */ - register __malloc_size_t log = 1; + register size_t log = 1; --size; while ((size /= 2) != 0) ++log; @@ -803,15 +740,14 @@ _malloc_internal_nolock (size) /* There are free fragments of this size. Pop a fragment out of the fragment list and return it. Update the block's nfree and first counters. */ - result = (__ptr_t) next; + result = next; next->prev->next = next->next; if (next->next != NULL) next->next->prev = next->prev; block = BLOCK (result); if (--_heapinfo[block].busy.info.frag.nfree != 0) - _heapinfo[block].busy.info.frag.first = (unsigned long int) - ((unsigned long int) ((char *) next->next - (char *) NULL) - % BLOCKSIZE) >> log; + _heapinfo[block].busy.info.frag.first = + (uintptr_t) next->next % BLOCKSIZE >> log; /* Update the statistics. */ ++_chunks_used; @@ -843,7 +779,7 @@ _malloc_internal_nolock (size) next->prev = &_fraghead[log]; _fraghead[log].next = next; - for (i = 2; i < (__malloc_size_t) (BLOCKSIZE >> log); ++i) + for (i = 2; i < (size_t) (BLOCKSIZE >> log); ++i) { next = (struct list *) ((char *) result + (i << log)); next->next = _fraghead[log].next; @@ -877,7 +813,7 @@ _malloc_internal_nolock (size) if (block == start) { /* Need to get more from the system. Get a little extra. */ - __malloc_size_t wantblocks = blocks + __malloc_extra_blocks; + size_t wantblocks = blocks + __malloc_extra_blocks; block = _heapinfo[0].free.prev; lastblocks = _heapinfo[block].free.size; /* Check to see if the new core will be contiguous with the @@ -959,11 +895,10 @@ _malloc_internal_nolock (size) return result; } -__ptr_t -_malloc_internal (size) - __malloc_size_t size; +void * +_malloc_internal (size_t size) { - __ptr_t result; + void *result; LOCK (); result = _malloc_internal_nolock (size); @@ -972,11 +907,10 @@ _malloc_internal (size) return result; } -__ptr_t -malloc (size) - __malloc_size_t size; +void * +malloc (size_t size) { - __ptr_t (*hook) (__malloc_size_t); + void *(*hook) (size_t); if (!__malloc_initialized && !__malloc_initialize ()) return NULL; @@ -998,24 +932,24 @@ malloc (size) /* On some ANSI C systems, some libc functions call _malloc, _free and _realloc. Make them use the GNU functions. */ -__ptr_t -_malloc (size) - __malloc_size_t size; +extern void *_malloc (size_t); +extern void _free (void *); +extern void *_realloc (void *, size_t); + +void * +_malloc (size_t size) { return malloc (size); } void -_free (ptr) - __ptr_t ptr; +_free (void *ptr) { free (ptr); } -__ptr_t -_realloc (ptr, size) - __ptr_t ptr; - __malloc_size_t size; +void * +_realloc (void *ptr, size_t size) { return realloc (ptr, size); } @@ -1043,14 +977,9 @@ Fifth Floor, Boston, MA 02110-1301, USA. The author may be reached (Email) at the address mike@ai.mit.edu, or (US mail) as Mike Haertel c/o Free Software Foundation. */ -#ifndef _MALLOC_INTERNAL -#define _MALLOC_INTERNAL -#include -#endif - /* Debugging hook for free. */ -void (*__free_hook) PP ((__ptr_t __ptr)); +void (*__free_hook) (void *__ptr); /* List of blocks allocated by memalign. */ struct alignlist *_aligned_blocks = NULL; @@ -1058,15 +987,14 @@ struct alignlist *_aligned_blocks = NULL; /* Return memory to the heap. Like `_free_internal' but don't lock mutex. */ void -_free_internal_nolock (ptr) - __ptr_t ptr; +_free_internal_nolock (void *ptr) { int type; - __malloc_size_t block, blocks; - register __malloc_size_t i; + size_t block, blocks; + register size_t i; struct list *prev, *next; - __ptr_t curbrk; - const __malloc_size_t lesscore_threshold + void *curbrk; + const size_t lesscore_threshold /* Threshold of free space at which we will return some to the system. */ = FINAL_FREE_BLOCKS + 2 * __malloc_extra_blocks; @@ -1162,12 +1090,12 @@ _free_internal_nolock (ptr) It's possible that moving _heapinfo will allow us to return some space to the system. */ - __malloc_size_t info_block = BLOCK (_heapinfo); - __malloc_size_t info_blocks = _heapinfo[info_block].busy.info.size; - __malloc_size_t prev_block = _heapinfo[block].free.prev; - __malloc_size_t prev_blocks = _heapinfo[prev_block].free.size; - __malloc_size_t next_block = _heapinfo[block].free.next; - __malloc_size_t next_blocks = _heapinfo[next_block].free.size; + size_t info_block = BLOCK (_heapinfo); + size_t info_blocks = _heapinfo[info_block].busy.info.size; + size_t prev_block = _heapinfo[block].free.prev; + size_t prev_blocks = _heapinfo[prev_block].free.size; + size_t next_block = _heapinfo[block].free.next; + size_t next_blocks = _heapinfo[next_block].free.size; if (/* Win if this block being freed is last in core, the info table is just before it, the previous free block is just before the @@ -1190,7 +1118,7 @@ _free_internal_nolock (ptr) ) { malloc_info *newinfo; - __malloc_size_t oldlimit = _heaplimit; + size_t oldlimit = _heaplimit; /* Free the old info table, clearing _heaplimit to avoid recursion into this code. We don't want to return the @@ -1205,8 +1133,7 @@ _free_internal_nolock (ptr) _heapindex = 0; /* Allocate new space for the info table and move its data. */ - newinfo = (malloc_info *) _malloc_internal_nolock (info_blocks - * BLOCKSIZE); + newinfo = _malloc_internal_nolock (info_blocks * BLOCKSIZE); PROTECT_MALLOC_STATE (0); memmove (newinfo, _heapinfo, info_blocks * BLOCKSIZE); _heapinfo = newinfo; @@ -1222,7 +1149,7 @@ _free_internal_nolock (ptr) /* Now see if we can return stuff to the system. */ if (block + blocks == _heaplimit && blocks >= lesscore_threshold) { - register __malloc_size_t bytes = blocks * BLOCKSIZE; + register size_t bytes = blocks * BLOCKSIZE; _heaplimit -= blocks; (*__morecore) (-bytes); _heapinfo[_heapinfo[block].free.prev].free.next @@ -1255,7 +1182,7 @@ _free_internal_nolock (ptr) /* If all fragments of this block are free, remove them from the fragment list and free the whole block. */ next = prev; - for (i = 1; i < (__malloc_size_t) (BLOCKSIZE >> type); ++i) + for (i = 1; i < (size_t) (BLOCKSIZE >> type); ++i) next = next->next; prev->prev->next = next; if (next != NULL) @@ -1280,7 +1207,7 @@ _free_internal_nolock (ptr) /* If some fragments of this block are free, link this fragment into the fragment list after the first free fragment of this block. */ - next = (struct list *) ptr; + next = ptr; next->next = prev->next; next->prev = prev; prev->next = next; @@ -1293,11 +1220,10 @@ _free_internal_nolock (ptr) /* No fragments of this block are free, so link this fragment into the fragment list and announce that it is the first free fragment of this block. */ - prev = (struct list *) ptr; + prev = ptr; _heapinfo[block].busy.info.frag.nfree = 1; - _heapinfo[block].busy.info.frag.first = (unsigned long int) - ((unsigned long int) ((char *) ptr - (char *) NULL) - % BLOCKSIZE >> type); + _heapinfo[block].busy.info.frag.first = + (uintptr_t) ptr % BLOCKSIZE >> type; prev->next = _fraghead[type].next; prev->prev = &_fraghead[type]; prev->prev->next = prev; @@ -1313,8 +1239,7 @@ _free_internal_nolock (ptr) /* Return memory to the heap. Like `free' but don't call a __free_hook if there is one. */ void -_free_internal (ptr) - __ptr_t ptr; +_free_internal (void *ptr) { LOCK (); _free_internal_nolock (ptr); @@ -1324,10 +1249,9 @@ _free_internal (ptr) /* Return memory to the heap. */ void -free (ptr) - __ptr_t ptr; +free (void *ptr) { - void (*hook) (__ptr_t) = __free_hook; + void (*hook) (void *) = __free_hook; if (hook != NULL) (*hook) (ptr); @@ -1340,8 +1264,7 @@ free (ptr) weak_alias (free, cfree) #else void -cfree (ptr) - __ptr_t ptr; +cfree (void *ptr) { free (ptr); } @@ -1368,32 +1291,24 @@ Fifth Floor, Boston, MA 02110-1301, USA. The author may be reached (Email) at the address mike@ai.mit.edu, or (US mail) as Mike Haertel c/o Free Software Foundation. */ -#ifndef _MALLOC_INTERNAL -#define _MALLOC_INTERNAL -#include -#endif - - #define min(A, B) ((A) < (B) ? (A) : (B)) /* On Cygwin the dumped emacs may try to realloc storage allocated in the static heap. We just malloc space in the new heap and copy the data. */ #ifdef CYGWIN -__ptr_t -special_realloc (ptr, size) - __ptr_t ptr; - __malloc_size_t size; +void * +special_realloc (void *ptr, size_t size) { - __ptr_t result; + void *result; int type; - __malloc_size_t block, oldsize; + size_t block, oldsize; block = ((char *) ptr - bss_sbrk_heapbase) / BLOCKSIZE + 1; type = bss_sbrk_heapinfo[block].busy.type; oldsize = type == 0 ? bss_sbrk_heapinfo[block].busy.info.size * BLOCKSIZE - : (__malloc_size_t) 1 << type; + : (size_t) 1 << type; result = _malloc_internal_nolock (size); if (result != NULL) memcpy (result, ptr, min (oldsize, size)); @@ -1402,7 +1317,7 @@ special_realloc (ptr, size) #endif /* Debugging hook for realloc. */ -__ptr_t (*__realloc_hook) PP ((__ptr_t __ptr, __malloc_size_t __size)); +void *(*__realloc_hook) (void *ptr, size_t size); /* Resize the given region to the new size, returning a pointer to the (possibly moved) region. This is optimized for speed; @@ -1410,14 +1325,12 @@ __ptr_t (*__realloc_hook) PP ((__ptr_t __ptr, __malloc_size_t __size)); achieved by unconditionally allocating and copying to a new region. This module has incestuous knowledge of the internals of both free and malloc. */ -__ptr_t -_realloc_internal_nolock (ptr, size) - __ptr_t ptr; - __malloc_size_t size; +void * +_realloc_internal_nolock (void *ptr, size_t size) { - __ptr_t result; + void *result; int type; - __malloc_size_t block, blocks, oldlimit; + size_t block, blocks, oldlimit; if (size == 0) { @@ -1497,7 +1410,7 @@ _realloc_internal_nolock (ptr, size) (void) _malloc_internal_nolock (blocks * BLOCKSIZE); else { - __ptr_t previous + void *previous = _malloc_internal_nolock ((block - _heapindex) * BLOCKSIZE); (void) _malloc_internal_nolock (blocks * BLOCKSIZE); _free_internal_nolock (previous); @@ -1512,8 +1425,8 @@ _realloc_internal_nolock (ptr, size) default: /* Old size is a fragment; type is logarithm to base two of the fragment size. */ - if (size > (__malloc_size_t) (1 << (type - 1)) && - size <= (__malloc_size_t) (1 << type)) + if (size > (size_t) (1 << (type - 1)) && + size <= (size_t) (1 << type)) /* The new size is the same kind of fragment. */ result = ptr; else @@ -1523,7 +1436,7 @@ _realloc_internal_nolock (ptr, size) result = _malloc_internal_nolock (size); if (result == NULL) goto out; - memcpy (result, ptr, min (size, (__malloc_size_t) 1 << type)); + memcpy (result, ptr, min (size, (size_t) 1 << type)); _free_internal_nolock (ptr); } break; @@ -1534,12 +1447,10 @@ _realloc_internal_nolock (ptr, size) return result; } -__ptr_t -_realloc_internal (ptr, size) - __ptr_t ptr; - __malloc_size_t size; +void * +_realloc_internal (void *ptr, size_t size) { - __ptr_t result; + void *result; LOCK (); result = _realloc_internal_nolock (ptr, size); @@ -1548,12 +1459,10 @@ _realloc_internal (ptr, size) return result; } -__ptr_t -realloc (ptr, size) - __ptr_t ptr; - __malloc_size_t size; +void * +realloc (void *ptr, size_t size) { - __ptr_t (*hook) (__ptr_t, __malloc_size_t); + void *(*hook) (void *, size_t); if (!__malloc_initialized && !__malloc_initialize ()) return NULL; @@ -1581,19 +1490,12 @@ Fifth Floor, Boston, MA 02110-1301, USA. The author may be reached (Email) at the address mike@ai.mit.edu, or (US mail) as Mike Haertel c/o Free Software Foundation. */ -#ifndef _MALLOC_INTERNAL -#define _MALLOC_INTERNAL -#include -#endif - /* Allocate an array of NMEMB elements each SIZE bytes long. The entire array is initialized to zeros. */ -__ptr_t -calloc (nmemb, size) - register __malloc_size_t nmemb; - register __malloc_size_t size; +void * +calloc (register size_t nmemb, register size_t size) { - register __ptr_t result = malloc (nmemb * size); + register void *result = malloc (nmemb * size); if (result != NULL) (void) memset (result, 0, nmemb * size); @@ -1618,11 +1520,6 @@ along with the GNU C Library; see the file COPYING. If not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -#ifndef _MALLOC_INTERNAL -#define _MALLOC_INTERNAL -#include -#endif - /* uClibc defines __GNU_LIBRARY__, but it is not completely compatible. */ #if !defined (__GNU_LIBRARY__) || defined (__UCLIBC__) @@ -1631,8 +1528,7 @@ MA 02110-1301, USA. */ /* It is best not to declare this and cast its result on foreign operating systems with potentially hostile include files. */ -#include -extern __ptr_t __sbrk PP ((ptrdiff_t increment)); +extern void *__sbrk (ptrdiff_t increment); #endif /* __GNU_LIBRARY__ && ! defined (__UCLIBC__) */ #ifndef NULL @@ -1642,19 +1538,18 @@ extern __ptr_t __sbrk PP ((ptrdiff_t increment)); /* Allocate INCREMENT more bytes of data space, and return the start of data space, or NULL on errors. If INCREMENT is negative, shrink data space. */ -__ptr_t -__default_morecore (increment) - __malloc_ptrdiff_t increment; +void * +__default_morecore (ptrdiff_t increment) { - __ptr_t result; + void *result; #if defined (CYGWIN) if (!bss_sbrk_did_unexec) { return bss_sbrk (increment); } #endif - result = (__ptr_t) __sbrk (increment); - if (result == (__ptr_t) -1) + result = (void *) __sbrk (increment); + if (result == (void *) -1) return NULL; return result; } @@ -1675,22 +1570,14 @@ License along with this library; see the file COPYING. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -#ifndef _MALLOC_INTERNAL -#define _MALLOC_INTERNAL -#include -#endif +void *(*__memalign_hook) (size_t size, size_t alignment); -__ptr_t (*__memalign_hook) PP ((__malloc_size_t __size, - __malloc_size_t __alignment)); - -__ptr_t -memalign (alignment, size) - __malloc_size_t alignment; - __malloc_size_t size; +void * +memalign (size_t alignment, size_t size) { - __ptr_t result; - unsigned long int adj, lastadj; - __ptr_t (*hook) (__malloc_size_t, __malloc_size_t) = __memalign_hook; + void *result; + size_t adj, lastadj; + void *(*hook) (size_t, size_t) = __memalign_hook; if (hook) return (*hook) (alignment, size); @@ -1703,7 +1590,7 @@ memalign (alignment, size) /* Figure out how much we will need to pad this particular block to achieve the required alignment. */ - adj = (unsigned long int) ((char *) result - (char *) NULL) % alignment; + adj = (uintptr_t) result % alignment; do { @@ -1714,7 +1601,7 @@ memalign (alignment, size) return NULL; lastadj = adj; - adj = (unsigned long int) ((char *) result - (char *) NULL) % alignment; + adj = (uintptr_t) result % alignment; /* It's conceivable we might have been so unlucky as to get a different block with weaker alignment. If so, this block is too short to contain SIZE after alignment correction. So we must @@ -1735,7 +1622,7 @@ memalign (alignment, size) break; if (l == NULL) { - l = (struct alignlist *) malloc (sizeof (struct alignlist)); + l = malloc (sizeof (struct alignlist)); if (l != NULL) { l->next = _aligned_blocks; @@ -1767,15 +1654,12 @@ memalign (alignment, size) #endif int -posix_memalign (memptr, alignment, size) - __ptr_t *memptr; - __malloc_size_t alignment; - __malloc_size_t size; +posix_memalign (void **memptr, size_t alignment, size_t size) { - __ptr_t mem; + void *mem; if (alignment == 0 - || alignment % sizeof (__ptr_t) != 0 + || alignment % sizeof (void *) != 0 || (alignment & (alignment - 1)) != 0) return EINVAL; @@ -1809,43 +1693,27 @@ Fifth Floor, Boston, MA 02110-1301, USA. The author may be reached (Email) at the address mike@ai.mit.edu, or (US mail) as Mike Haertel c/o Free Software Foundation. */ -#if defined (_MALLOC_INTERNAL) && defined (GMALLOC_INHIBIT_VALLOC) - /* Emacs defines GMALLOC_INHIBIT_VALLOC to avoid this definition on MSDOS, where it conflicts with a system header file. */ -#define ELIDE_VALLOC +#ifndef GMALLOC_INHIBIT_VALLOC +/* Allocate SIZE bytes on a page boundary. */ +extern void *valloc (size_t); + +#if defined _SC_PAGESIZE || !defined HAVE_GETPAGESIZE +# include "getpagesize.h" +#elif !defined getpagesize +extern int getpagesize (void); #endif -#ifndef ELIDE_VALLOC +static size_t pagesize; -#if defined (__GNU_LIBRARY__) || defined (_LIBC) -#include -#include -#if defined (__GLIBC__) && __GLIBC__ >= 2 -/* __getpagesize is already declared in with return type int */ -#else -extern size_t __getpagesize PP ((void)); -#endif -#else -#include "getpagesize.h" -#define __getpagesize() getpagesize () -#endif - -#ifndef _MALLOC_INTERNAL -#define _MALLOC_INTERNAL -#include -#endif - -static __malloc_size_t pagesize; - -__ptr_t -valloc (size) - __malloc_size_t size; +void * +valloc (size_t size) { if (pagesize == 0) - pagesize = __getpagesize (); + pagesize = getpagesize (); return memalign (pagesize, size); } @@ -1876,41 +1744,31 @@ Fifth Floor, Boston, MA 02110-1301, USA. The author may be reached (Email) at the address mike@ai.mit.edu, or (US mail) as Mike Haertel c/o Free Software Foundation. */ -#ifdef emacs #include -#else -#ifndef _MALLOC_INTERNAL -#define _MALLOC_INTERNAL -#include -#include -#endif -#endif /* Old hook values. */ -static void (*old_free_hook) (__ptr_t ptr); -static __ptr_t (*old_malloc_hook) (__malloc_size_t size); -static __ptr_t (*old_realloc_hook) (__ptr_t ptr, __malloc_size_t size); +static void (*old_free_hook) (void *ptr); +static void *(*old_malloc_hook) (size_t size); +static void *(*old_realloc_hook) (void *ptr, size_t size); /* Function to call when something awful happens. */ static void (*abortfunc) (enum mcheck_status); /* Arbitrary magical numbers. */ -#define MAGICWORD 0xfedabeeb -#define MAGICFREE 0xd8675309 +#define MAGICWORD (SIZE_MAX / 11 ^ SIZE_MAX / 13 << 3) +#define MAGICFREE (SIZE_MAX / 17 ^ SIZE_MAX / 19 << 4) #define MAGICBYTE ((char) 0xd7) #define MALLOCFLOOD ((char) 0x93) #define FREEFLOOD ((char) 0x95) struct hdr { - __malloc_size_t size; /* Exact size requested by user. */ - unsigned long int magic; /* Magic number to check header integrity. */ + size_t size; /* Exact size requested by user. */ + size_t magic; /* Magic number to check header integrity. */ }; -static enum mcheck_status checkhdr (const struct hdr *); static enum mcheck_status -checkhdr (hdr) - const struct hdr *hdr; +checkhdr (const struct hdr *hdr) { enum mcheck_status status; switch (hdr->magic) @@ -1933,10 +1791,8 @@ checkhdr (hdr) return status; } -static void freehook (__ptr_t); static void -freehook (ptr) - __ptr_t ptr; +freehook (void *ptr) { struct hdr *hdr; @@ -1955,15 +1811,13 @@ freehook (ptr) __free_hook = freehook; } -static __ptr_t mallochook (__malloc_size_t); -static __ptr_t -mallochook (size) - __malloc_size_t size; +static void * +mallochook (size_t size) { struct hdr *hdr; __malloc_hook = old_malloc_hook; - hdr = (struct hdr *) malloc (sizeof (struct hdr) + size + 1); + hdr = malloc (sizeof (struct hdr) + size + 1); __malloc_hook = mallochook; if (hdr == NULL) return NULL; @@ -1971,18 +1825,15 @@ mallochook (size) hdr->size = size; hdr->magic = MAGICWORD; ((char *) &hdr[1])[size] = MAGICBYTE; - memset ((__ptr_t) (hdr + 1), MALLOCFLOOD, size); - return (__ptr_t) (hdr + 1); + memset (hdr + 1, MALLOCFLOOD, size); + return hdr + 1; } -static __ptr_t reallochook (__ptr_t, __malloc_size_t); -static __ptr_t -reallochook (ptr, size) - __ptr_t ptr; - __malloc_size_t size; +static void * +reallochook (void *ptr, size_t size) { struct hdr *hdr = NULL; - __malloc_size_t osize = 0; + size_t osize = 0; if (ptr) { @@ -1997,7 +1848,7 @@ reallochook (ptr, size) __free_hook = old_free_hook; __malloc_hook = old_malloc_hook; __realloc_hook = old_realloc_hook; - hdr = (struct hdr *) realloc ((__ptr_t) hdr, sizeof (struct hdr) + size + 1); + hdr = realloc (hdr, sizeof (struct hdr) + size + 1); __free_hook = freehook; __malloc_hook = mallochook; __realloc_hook = reallochook; @@ -2009,12 +1860,11 @@ reallochook (ptr, size) ((char *) &hdr[1])[size] = MAGICBYTE; if (size > osize) memset ((char *) (hdr + 1) + osize, MALLOCFLOOD, size - osize); - return (__ptr_t) (hdr + 1); + return hdr + 1; } static void -mabort (status) - enum mcheck_status status; +mabort (enum mcheck_status status) { const char *msg; switch (status) @@ -2047,8 +1897,7 @@ mabort (status) static int mcheck_used = 0; int -mcheck (func) - void (*func) (enum mcheck_status); +mcheck (void (*func) (enum mcheck_status)) { abortfunc = (func != NULL) ? func : &mabort; @@ -2068,7 +1917,7 @@ mcheck (func) } enum mcheck_status -mprobe (__ptr_t ptr) +mprobe (void *ptr) { return mcheck_used ? checkhdr (ptr) : MCHECK_DISABLED; } From 9ec7751f83254ee3bc13030b7933d1b454c33cd5 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Mon, 23 Apr 2012 11:11:28 +0800 Subject: [PATCH 142/564] Doc fixes for where-is-internal. * doc/lispref/keymaps.texi (Scanning Keymaps): Fix description of NO-REMAP arg to where-is-internal. * src/keymap.c (where_is_internal): Doc fix (Bug#10872). --- doc/lispref/ChangeLog | 5 +++++ doc/lispref/keymaps.texi | 19 +++++++++++++------ src/ChangeLog | 4 ++++ src/keymap.c | 16 ++++++++++++---- 4 files changed, 34 insertions(+), 10 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index fa2b3386d19..1dbc35d46de 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,8 @@ +2012-04-23 Chong Yidong + + * keymaps.texi (Scanning Keymaps): Fix description of NO-REMAP arg + to where-is-internal (Bug#10872). + 2012-04-21 Glenn Morris * macros.texi (Indenting Macros): Fix typo. diff --git a/doc/lispref/keymaps.texi b/doc/lispref/keymaps.texi index f1d4690d470..f67174b6a52 100644 --- a/doc/lispref/keymaps.texi +++ b/doc/lispref/keymaps.texi @@ -1904,12 +1904,19 @@ If @var{noindirect} is non-@code{nil}, @code{where-is-internal} doesn't follow indirect keymap bindings. This makes it possible to search for an indirect definition itself. -When command remapping is in effect (@pxref{Remapping Commands}), -@code{where-is-internal} figures out when a command will be run due to -remapping and reports keys accordingly. It also returns @code{nil} if -@var{command} won't really be run because it has been remapped to some -other command. However, if @var{no-remap} is non-@code{nil}. -@code{where-is-internal} ignores remappings. +If another command @var{other-command} is remapped to @var{command} +(@pxref{Remapping Commands}), this function searches for the bindings +of @var{other-command} and treats them as though they are also +bindings for @var{command}. But if the @var{no-remap} argument is +non-@code{nil}, this function instead includes the vector @code{[remap +@var{other-command}]} in the list of possible key sequences, without +searching for the bindings of @var{other-command}. + +On the other hand, if @var{command} is remapped to another command, +this function still returns the original bindings of @var{command}, +even though those keys would actually invoke the other command. To +determine the remapping status of @var{command}, use the function +@code{command-remapping} (@pxref{Remapping Commands}). @smallexample @group diff --git a/src/ChangeLog b/src/ChangeLog index 2d5520c9dbb..faa2a104337 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2012-04-23 Chong Yidong + + * keymap.c (where_is_internal): Doc fix (Bug#10872). + 2012-04-20 Glenn Morris * fileio.c (Fcopy_file, Fset_file_selinux_context): diff --git a/src/keymap.c b/src/keymap.c index ecaeb32896e..3528a61d6ea 100644 --- a/src/keymap.c +++ b/src/keymap.c @@ -2553,7 +2553,8 @@ where_is_internal (Lisp_Object definition, Lisp_Object keymaps, DEFUN ("where-is-internal", Fwhere_is_internal, Swhere_is_internal, 1, 5, 0, doc: /* Return list of keys that invoke DEFINITION. If KEYMAP is a keymap, search only KEYMAP and the global keymap. -If KEYMAP is nil, search all the currently active keymaps. +If KEYMAP is nil, search all the currently active keymaps, except + for `overriding-local-map' (which is ignored). If KEYMAP is a list of keymaps, search only those keymaps. If optional 3rd arg FIRSTONLY is non-nil, return the first key sequence found, @@ -2568,9 +2569,16 @@ If optional 4th arg NOINDIRECT is non-nil, don't follow indirections to other keymaps or slots. This makes it possible to search for an indirect definition itself. -If optional 5th arg NO-REMAP is non-nil, don't search for key sequences -that invoke a command which is remapped to DEFINITION, but include the -remapped command in the returned list. */) +If another command OTHER-COMMAND is remapped to DEFINITION, search for +the bindings of OTHER-COMMAND and include them in the returned list. +But if optional 5th arg NO-REMAP is non-nil, just include the vector +[remap OTHER-COMMAND] in the returned list, without searching for +those other bindings. + +If DEFINITION is remapped to another command, this function still +returns its bindings, even though those key sequences actually invoke +the other command. Use `command-remapping' to find the remapping +status of DEFINITION. */) (Lisp_Object definition, Lisp_Object keymap, Lisp_Object firstonly, Lisp_Object noindirect, Lisp_Object no_remap) { /* The keymaps in which to search. */ From 775ab3953f56703789d1666bf16aa7c381edb835 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Mon, 23 Apr 2012 11:44:13 +0800 Subject: [PATCH 143/564] Fix last fix. --- doc/lispref/keymaps.texi | 41 +++++++++++++++++++--------------------- src/keymap.c | 19 ++++++++++--------- 2 files changed, 29 insertions(+), 31 deletions(-) diff --git a/doc/lispref/keymaps.texi b/doc/lispref/keymaps.texi index f67174b6a52..c44512b8807 100644 --- a/doc/lispref/keymaps.texi +++ b/doc/lispref/keymaps.texi @@ -1888,9 +1888,9 @@ maps searched are @var{keymap} and the global keymap. If @var{keymap} is a list of keymaps, only those keymaps are searched. Usually it's best to use @code{overriding-local-map} as the expression -for @var{keymap}. Then @code{where-is-internal} searches precisely the -keymaps that are active. To search only the global map, pass -@code{(keymap)} (an empty keymap) as @var{keymap}. +for @var{keymap}. Then @code{where-is-internal} searches precisely +the keymaps that are active. To search only the global map, pass the +value @code{(keymap)} (an empty keymap) as @var{keymap}. If @var{firstonly} is @code{non-ascii}, then the value is a single vector representing the first key sequence found, rather than a list of @@ -1904,27 +1904,24 @@ If @var{noindirect} is non-@code{nil}, @code{where-is-internal} doesn't follow indirect keymap bindings. This makes it possible to search for an indirect definition itself. -If another command @var{other-command} is remapped to @var{command} -(@pxref{Remapping Commands}), this function searches for the bindings -of @var{other-command} and treats them as though they are also -bindings for @var{command}. But if the @var{no-remap} argument is -non-@code{nil}, this function instead includes the vector @code{[remap -@var{other-command}]} in the list of possible key sequences, without -searching for the bindings of @var{other-command}. +The fifth argument, @var{no-remap}, determines how this function +treats command remappings (@pxref{Remapping Commands}). There are two +cases of interest: -On the other hand, if @var{command} is remapped to another command, -this function still returns the original bindings of @var{command}, -even though those keys would actually invoke the other command. To -determine the remapping status of @var{command}, use the function -@code{command-remapping} (@pxref{Remapping Commands}). +@table @asis +@item If a command @var{other-command} is remapped to @var{command}: +If @var{no-remap} is @code{nil}, find the bindings for +@var{other-command} and treat them as though they are also bindings +for @var{command}. If @var{no-remap} is non-@code{nil}, include the +vector @code{[remap @var{other-command}]} in the list of possible key +sequences, instead of finding those bindings. -@smallexample -@group -(where-is-internal 'describe-function) - @result{} ([8 102] [f1 102] [help 102] - [menu-bar help-menu describe describe-function]) -@end group -@end smallexample +@item If @var{command} is remapped to @var{other-command}: +If @var{no-remap} is @code{nil}, return the bindings for +@var{other-command} rather than @var{command}. If @var{no-remap} is +non-@code{nil}, return the bindings for @var{command}, ignoring the +fact that it is remapped. +@end table @end defun @deffn Command describe-bindings &optional prefix buffer-or-name diff --git a/src/keymap.c b/src/keymap.c index 3528a61d6ea..9f82175edc0 100644 --- a/src/keymap.c +++ b/src/keymap.c @@ -2569,16 +2569,17 @@ If optional 4th arg NOINDIRECT is non-nil, don't follow indirections to other keymaps or slots. This makes it possible to search for an indirect definition itself. -If another command OTHER-COMMAND is remapped to DEFINITION, search for -the bindings of OTHER-COMMAND and include them in the returned list. -But if optional 5th arg NO-REMAP is non-nil, just include the vector -[remap OTHER-COMMAND] in the returned list, without searching for -those other bindings. +The optional 5th arg NO-REMAP alters how command remapping is handled: -If DEFINITION is remapped to another command, this function still -returns its bindings, even though those key sequences actually invoke -the other command. Use `command-remapping' to find the remapping -status of DEFINITION. */) +- If another command OTHER-COMMAND is remapped to DEFINITION, normally + search for the bindings of OTHER-COMMAND and include them in the + returned list. But if NO-REMAP is non-nil, include the vector + [remap OTHER-COMMAND] in the returned list instead, without + searching for those other bindings. + +- If DEFINITION is remapped to OTHER-COMMAND, normally return the + bindings for OTHER-COMMAND. But if NO-REMAP is non-nil, return the + bindings for DEFINITION instead, ignoring its remapping. */) (Lisp_Object definition, Lisp_Object keymap, Lisp_Object firstonly, Lisp_Object noindirect, Lisp_Object no_remap) { /* The keymaps in which to search. */ From 888bec305043c6576d82f9988c63694b8133e3fd Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sun, 22 Apr 2012 21:08:51 -0700 Subject: [PATCH 144/564] * keyboard.c (handle_async_input): Define only if SYNC_INPUT || SIGIO. Problem reported by Juanma Barranquero for Windows -Wunused-function. --- src/ChangeLog | 5 +++++ src/keyboard.c | 2 ++ 2 files changed, 7 insertions(+) diff --git a/src/ChangeLog b/src/ChangeLog index 410e6e01f45..825211aa8ce 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2012-04-23 Paul Eggert + + * keyboard.c (handle_async_input): Define only if SYNC_INPUT || SIGIO. + Problem reported by Juanma Barranquero for Windows -Wunused-function. + 2012-04-22 Paul Eggert Modernize and clean up gmalloc.c to assume C89 (Bug#9119). diff --git a/src/keyboard.c b/src/keyboard.c index d55a726827e..6fa0e4afc3f 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -7169,6 +7169,7 @@ tty_read_avail_input (struct terminal *terminal, return nread; } +#if defined SYNC_INPUT || defined SIGIO static void handle_async_input (void) { @@ -7195,6 +7196,7 @@ handle_async_input (void) --handling_signal; #endif } +#endif /* SYNC_INPUT || SIGIO */ #ifdef SYNC_INPUT void From a74e8e38b9829bf5a5075fbe637e463c5be6114c Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sun, 22 Apr 2012 22:43:08 -0700 Subject: [PATCH 145/564] * configure.in: Remove wrong part of comment. --- configure.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.in b/configure.in index 4c6f4e537c6..46b2e9993ed 100644 --- a/configure.in +++ b/configure.in @@ -737,7 +737,7 @@ else AC_SUBST([WERROR_CFLAGS]) nw="$nw -Waggregate-return" # anachronistic - nw="$nw -Wlong-long" # C90 is anachronistic (lib/gethrxtime.h) + nw="$nw -Wlong-long" # C90 is anachronistic nw="$nw -Wc++-compat" # We don't care about C++ compilers nw="$nw -Wundef" # Warns on '#if GNULIB_FOO' etc in gnulib nw="$nw -Wtraditional" # Warns on #elif which we use often From 0ba2624f7dd2253853c6caf4fbfdc272822de3e3 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sun, 22 Apr 2012 22:44:49 -0700 Subject: [PATCH 146/564] Spelling fixes. --- doc/misc/dbus.texi | 2 +- lisp/abbrev.el | 2 +- lisp/net/dbus.el | 2 +- src/alloc.c | 2 +- src/keyboard.c | 2 +- src/term.c | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/misc/dbus.texi b/doc/misc/dbus.texi index e99e20b9aa0..865e99a3aa6 100644 --- a/doc/misc/dbus.texi +++ b/doc/misc/dbus.texi @@ -1707,7 +1707,7 @@ is as follows: @code{:pathN} @var{string}:@* This stands for the Nth argument of the signal. @code{:pathN} arguments can be used for object path wildcard matches as specified by -D-Bus, whilest an @code{:argN} argument requires an exact match. +D-Bus, while an @code{:argN} argument requires an exact match. @item @code{:arg-namespace} @var{string}:@* Register for the signals, which first argument defines the service or diff --git a/lisp/abbrev.el b/lisp/abbrev.el index 7f54d3dc253..9b82b3bc893 100644 --- a/lisp/abbrev.el +++ b/lisp/abbrev.el @@ -135,7 +135,7 @@ Otherwise display all abbrevs." (insert-abbrev-table-description table t))) (dolist (table (nreverse empty-tables)) (insert-abbrev-table-description table t))) - ;; Note: `list-abbrevs' can dispaly only local abbrevs, in + ;; Note: `list-abbrevs' can display only local abbrevs, in ;; which case editing could lose abbrevs of other tables. Thus ;; enter `edit-abbrevs-mode' only if LOCAL is nil. (edit-abbrevs-mode)) diff --git a/lisp/net/dbus.el b/lisp/net/dbus.el index ee2bdecb1ac..d845a4932e2 100644 --- a/lisp/net/dbus.el +++ b/lisp/net/dbus.el @@ -564,7 +564,7 @@ The meaning is as follows: `:argN' STRING: `:pathN' STRING: This stands for the Nth argument of the signal. `:pathN' arguments can be used for object path wildcard -matches as specified by D-Bus, whilest an `:argN' argument +matches as specified by D-Bus, while an `:argN' argument requires an exact match. `:arg-namespace' STRING: Register for the signals, which first diff --git a/src/alloc.c b/src/alloc.c index 6c9af7b71fa..a120ce9b61f 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -5838,7 +5838,7 @@ mark_buffer (Lisp_Object buf) } /* Mark the Lisp pointers in the terminal objects. - Called by the Fgarbage_collector. */ + Called by Fgarbage_collect. */ static void mark_terminals (void) diff --git a/src/keyboard.c b/src/keyboard.c index 6fa0e4afc3f..614746e35b2 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -12393,7 +12393,7 @@ keys_of_keyboard (void) } /* Mark the pointers in the kboard objects. - Called by the Fgarbage_collector. */ + Called by Fgarbage_collect. */ void mark_kboards (void) { diff --git a/src/term.c b/src/term.c index 53458c559dd..ce300f9442a 100644 --- a/src/term.c +++ b/src/term.c @@ -3601,7 +3601,7 @@ delete_tty (struct terminal *terminal) /* Mark the pointers in the tty_display_info objects. - Called by the Fgarbage_collector. */ + Called by Fgarbage_collect. */ void mark_ttys (void) From 1068fe4d1bde1f532aedb612244f0f3c4ad555be Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Mon, 23 Apr 2012 00:34:29 -0700 Subject: [PATCH 147/564] Fix minor GTK3 problems found by static checking. * emacsgtkfixed.c (EMACS_TYPE_FIXED, EMACS_FIXED, EmacsFixed) (EmacsFixedPrivate, EmacsFixedClass, struct _EmacsFixed) (struct _EmacsFixedClass, emacs_fixed_get_type): Move decls here from emacsgtkfixed.h, since they needn't be public. (emacs_fixed_get_type): Now static. (emacs_fixed_class_init): Omit unused local. (emacs_fixed_child_type): Remove; unused. * emacsgtkfixed.h (EMACS_TYPE_FIXED, EMACS_FIXED, EmacsFixed) (EmacsFixedPrivate, EmacsFixedClass, struct _EmacsFixed) (struct _EmacsFixedClass): Move to emacsgtkfixed.c. (EMACS_FIXED_CLASS, EMACS_IS_FIXED, EMACS_IS_FIXED_CLASS) (EMACS_FIXED_GET_CLASS): Remove; unused. * gtkutil.c (xg_create_frame_widgets) [!HAVE_GTK3]: Omit unused local. --- src/ChangeLog | 15 +++++++++++++++ src/emacsgtkfixed.c | 30 ++++++++++++++++++++++-------- src/emacsgtkfixed.h | 26 -------------------------- src/gtkutil.c | 2 ++ 4 files changed, 39 insertions(+), 34 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 825211aa8ce..1db958d8d67 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,20 @@ 2012-04-23 Paul Eggert + Fix minor GTK3 problems found by static checking. + * emacsgtkfixed.c (EMACS_TYPE_FIXED, EMACS_FIXED, EmacsFixed) + (EmacsFixedPrivate, EmacsFixedClass, struct _EmacsFixed) + (struct _EmacsFixedClass, emacs_fixed_get_type): + Move decls here from emacsgtkfixed.h, since they needn't be public. + (emacs_fixed_get_type): Now static. + (emacs_fixed_class_init): Omit unused local. + (emacs_fixed_child_type): Remove; unused. + * emacsgtkfixed.h (EMACS_TYPE_FIXED, EMACS_FIXED, EmacsFixed) + (EmacsFixedPrivate, EmacsFixedClass, struct _EmacsFixed) + (struct _EmacsFixedClass): Move to emacsgtkfixed.c. + (EMACS_FIXED_CLASS, EMACS_IS_FIXED, EMACS_IS_FIXED_CLASS) + (EMACS_FIXED_GET_CLASS): Remove; unused. + * gtkutil.c (xg_create_frame_widgets) [!HAVE_GTK3]: Omit unused local. + * keyboard.c (handle_async_input): Define only if SYNC_INPUT || SIGIO. Problem reported by Juanma Barranquero for Windows -Wunused-function. diff --git a/src/emacsgtkfixed.c b/src/emacsgtkfixed.c index fba672ff74d..1a62b59b7af 100644 --- a/src/emacsgtkfixed.c +++ b/src/emacsgtkfixed.c @@ -28,6 +28,27 @@ along with GNU Emacs. If not, see . */ #include "frame.h" #include "xterm.h" +#define EMACS_TYPE_FIXED emacs_fixed_get_type () +#define EMACS_FIXED(obj) \ + G_TYPE_CHECK_INSTANCE_CAST (obj, EMACS_TYPE_FIXED, EmacsFixed) + +typedef struct _EmacsFixed EmacsFixed; +typedef struct _EmacsFixedPrivate EmacsFixedPrivate; +typedef struct _EmacsFixedClass EmacsFixedClass; + +struct _EmacsFixed +{ + GtkFixed container; + + /*< private >*/ + EmacsFixedPrivate *priv; +}; + +struct _EmacsFixedClass +{ + GtkFixedClass parent_class; +}; + struct _EmacsFixedPrivate { struct frame *f; @@ -40,28 +61,21 @@ static void emacs_fixed_get_preferred_width (GtkWidget *widget, static void emacs_fixed_get_preferred_height (GtkWidget *widget, gint *minimum, gint *natural); +static GType emacs_fixed_get_type (void); G_DEFINE_TYPE (EmacsFixed, emacs_fixed, GTK_TYPE_FIXED) static void emacs_fixed_class_init (EmacsFixedClass *klass) { GtkWidgetClass *widget_class; - GtkFixedClass *fixed_class; widget_class = (GtkWidgetClass*) klass; - fixed_class = (GtkFixedClass*) klass; widget_class->get_preferred_width = emacs_fixed_get_preferred_width; widget_class->get_preferred_height = emacs_fixed_get_preferred_height; g_type_class_add_private (klass, sizeof (EmacsFixedPrivate)); } -static GType -emacs_fixed_child_type (GtkFixed *container) -{ - return GTK_TYPE_WIDGET; -} - static void emacs_fixed_init (EmacsFixed *fixed) { diff --git a/src/emacsgtkfixed.h b/src/emacsgtkfixed.h index 90fb37e521b..3fa294aa41e 100644 --- a/src/emacsgtkfixed.h +++ b/src/emacsgtkfixed.h @@ -27,33 +27,7 @@ G_BEGIN_DECLS struct frame; -#define EMACS_TYPE_FIXED (emacs_fixed_get_type ()) -#define EMACS_FIXED(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EMACS_TYPE_FIXED, EmacsFixed)) -#define EMACS_FIXED_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EMACS_TYPE_FIXED, EmacsFixedClass)) -#define EMACS_IS_FIXED(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EMACS_TYPE_FIXED)) -#define EMACS_IS_FIXED_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EMACS_TYPE_FIXED)) -#define EMACS_FIXED_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EMACS_TYPE_FIXED, EmacsFixedClass)) - -typedef struct _EmacsFixed EmacsFixed; -typedef struct _EmacsFixedPrivate EmacsFixedPrivate; -typedef struct _EmacsFixedClass EmacsFixedClass; - -struct _EmacsFixed -{ - GtkFixed container; - - /*< private >*/ - EmacsFixedPrivate *priv; -}; - - -struct _EmacsFixedClass -{ - GtkFixedClass parent_class; -}; - extern GtkWidget *emacs_fixed_new (struct frame *f); -extern GType emacs_fixed_get_type (void); G_END_DECLS diff --git a/src/gtkutil.c b/src/gtkutil.c index 4dbef65dedf..c8a505273fe 100644 --- a/src/gtkutil.c +++ b/src/gtkutil.c @@ -1090,7 +1090,9 @@ xg_create_frame_widgets (FRAME_PTR f) GtkWidget *wtop; GtkWidget *wvbox, *whbox; GtkWidget *wfixed; +#ifndef HAVE_GTK3 GtkRcStyle *style; +#endif char *title = 0; BLOCK_INPUT; From f621ccf5b8d7038c1e614616d7aa831a0e25b18f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agust=C3=ADn=20Mart=C3=ADn?= Date: Mon, 23 Apr 2012 12:03:33 +0200 Subject: [PATCH 148/564] Remove obsolete usage of (ispell-insert-word) `ispell-insert-word' is a plain `insert' together with word filtering through `translation-table-for-input' for character code unification. This was useful in Emacs 22, but is not needed for Emacs 23 and above since unification is now direct. Since XEmacs does not have `translation-table-for-input' there is no need at all to keep this old code, but use (insert) directly. --- lisp/ChangeLog | 7 +++++++ lisp/textmodes/ispell.el | 16 +++------------- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index dd2d9ff86aa..5afe17b6f74 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2012-04-23 Agustín Martín Domingo + + * ispell.el (ispell-insert-word) Remove unneeded function using + obsolete `translation-table-for-input'. + (ispell-word, ispell-process-line, ispell-complete-word): Use + plain `insert' instead of removed `ispell-insert-word'. + 2012-04-22 Chong Yidong * cus-edit.el (custom-variable-menu) diff --git a/lisp/textmodes/ispell.el b/lisp/textmodes/ispell.el index 53822694698..ba333117e08 100644 --- a/lisp/textmodes/ispell.el +++ b/lisp/textmodes/ispell.el @@ -1665,16 +1665,6 @@ This allows it to improve the suggestion list based on actual misspellings." (setq more-lines (= 0 (forward-line)))))))))))))) -;; Insert WORD while possibly translating characters by -;; translation-table-for-input. -(defun ispell-insert-word (word) - (let ((pos (point))) - (insert word) - ;; Avoid "obsolete" warnings for translation-table-for-input. - (with-no-warnings - (if (char-table-p translation-table-for-input) - (translate-region pos (point) translation-table-for-input))))) - ;;;###autoload (defun ispell-word (&optional following quietly continue region) "Check spelling of word under or before the cursor. @@ -1787,7 +1777,7 @@ quit spell session exited." ;; Insert first and then delete, ;; to avoid collapsing markers before and after ;; into a single place. - (ispell-insert-word new-word) + (insert new-word) (delete-region (point) end) ;; It is meaningless to preserve the cursor position ;; inside a word that has changed. @@ -3277,7 +3267,7 @@ Returns the sum SHIFT due to changes in word replacements." (delete-region (point) (+ word-len (point))) (if (not (listp replace)) (progn - (ispell-insert-word replace) ; insert dictionary word + (insert replace) ; insert dictionary word (ispell-send-replacement (car poss) replace) (setq accept-list (cons replace accept-list))) (let ((replace-word (car replace))) @@ -3451,7 +3441,7 @@ Standard ispell choices are then available." (setq word (if (atom replacement) replacement (car replacement)) cursor-location (+ (- (length word) (- end start)) cursor-location)) - (ispell-insert-word word) + (insert word) (if (not (atom replacement)) ; recheck spelling of replacement. (progn (goto-char cursor-location) From ca0294bbd827c08fd60d32e63c8e133342b6551d Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 23 Apr 2012 06:17:30 -0400 Subject: [PATCH 149/564] Auto-commit of generated files. --- autogen/config.in | 12 ++++++++++++ autogen/configure | 16 +++++++++++----- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/autogen/config.in b/autogen/config.in index 1082e150fc6..805629c9c8f 100644 --- a/autogen/config.in +++ b/autogen/config.in @@ -148,6 +148,18 @@ along with GNU Emacs. If not, see . */ /* Define to 1 if using D-Bus. */ #undef HAVE_DBUS +/* Define to 1 if you have the `dbus_validate_bus_name' function. */ +#undef HAVE_DBUS_VALIDATE_BUS_NAME + +/* Define to 1 if you have the `dbus_validate_interface' function. */ +#undef HAVE_DBUS_VALIDATE_INTERFACE + +/* Define to 1 if you have the `dbus_validate_member' function. */ +#undef HAVE_DBUS_VALIDATE_MEMBER + +/* Define to 1 if you have the `dbus_validate_path' function. */ +#undef HAVE_DBUS_VALIDATE_PATH + /* Define to 1 if you have the `dbus_watch_get_unix_fd' function. */ #undef HAVE_DBUS_WATCH_GET_UNIX_FD diff --git a/autogen/configure b/autogen/configure index 52575eb075b..5c57dcc0374 100755 --- a/autogen/configure +++ b/autogen/configure @@ -7144,7 +7144,7 @@ fi nw="$nw -Waggregate-return" # anachronistic - nw="$nw -Wlong-long" # C90 is anachronistic (lib/gethrxtime.h) + nw="$nw -Wlong-long" # C90 is anachronistic nw="$nw -Wc++-compat" # We don't care about C++ compilers nw="$nw -Wundef" # Warns on '#if GNULIB_FOO' etc in gnulib nw="$nw -Wtraditional" # Warns on #elif which we use often @@ -11913,12 +11913,18 @@ $as_echo "no" >&6; } $as_echo "#define HAVE_DBUS 1" >>confdefs.h - for ac_func in dbus_watch_get_unix_fd + for ac_func in dbus_watch_get_unix_fd \ + dbus_validate_bus_name \ + dbus_validate_path \ + dbus_validate_interface \ + dbus_validate_member do : - ac_fn_c_check_func "$LINENO" "dbus_watch_get_unix_fd" "ac_cv_func_dbus_watch_get_unix_fd" -if test "x$ac_cv_func_dbus_watch_get_unix_fd" = x""yes; then : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define HAVE_DBUS_WATCH_GET_UNIX_FD 1 +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi From da00640ab78cc69f9321d7bc6062c3119493f6a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agust=C3=ADn=20Mart=C3=ADn?= Date: Mon, 23 Apr 2012 12:33:25 +0200 Subject: [PATCH 150/564] ispell.el,flyspell.el: Preserve session localwords when switching back buffers. Once a word is declared valid for a session and a buffer it should stay valid for that buffer regardless buffer switches unless ispell process is explicitly killed or dictionary changed for that buffer. However, it is currently lost when we switch to a different buffer that triggers a new ispell process and then switch back to the original buffer (triggering a new ispell restart). These changes try to keep buffer session localwords accepted in above case. --- lisp/ChangeLog | 16 ++++++++++++++++ lisp/textmodes/flyspell.el | 6 +++++- lisp/textmodes/ispell.el | 26 ++++++++++++++++++++++---- 3 files changed, 43 insertions(+), 5 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 5afe17b6f74..5ead85734af 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,19 @@ +2012-04-23 Agustín Martín Domingo + + Preserve ispell session localwords when switching back to + original buffer. + + * ispell.el (ispell-buffer-session-localwords): New buffer-local + variable to hold buffer session localwords. + (ispell-kill-ispell): add option 'clear to delete session + localwords. + (ispell-command-loop, ispell-change-dictionary) + (ispell-buffer-local-words): Preserve session localwords when + needed. + + * flyspell.el (flyspell-process-localwords, flyspell-do-correct): + Preserve session localwords when needed. + 2012-04-23 Agustín Martín Domingo * ispell.el (ispell-insert-word) Remove unneeded function using diff --git a/lisp/textmodes/flyspell.el b/lisp/textmodes/flyspell.el index 72a3eb474f8..33fa551c8a4 100644 --- a/lisp/textmodes/flyspell.el +++ b/lisp/textmodes/flyspell.el @@ -1479,7 +1479,8 @@ The buffer to mark them in is `flyspell-large-region-buffer'." ;;* declared correct. */ ;;*---------------------------------------------------------------------*/ (defun flyspell-process-localwords (misspellings-buffer) - (let (localwords case-fold-search + (let ((localwords ispell-buffer-session-localwords) + case-fold-search (ispell-casechars (ispell-get-casechars))) ;; Get localwords from the original buffer (save-excursion @@ -2147,6 +2148,9 @@ If OPOINT is non-nil, restore point there after adjusting it for replacement." (setq ispell-pdict-modified-p '(t))) ((or (eq replace 'buffer) (eq replace 'session)) (ispell-send-string (concat "@" word "\n")) + (add-to-list 'ispell-buffer-session-localwords word) + (or ispell-buffer-local-name ; session localwords might conflict + (setq ispell-buffer-local-name (buffer-name))) (flyspell-unhighlight-at cursor-location) (if (null ispell-pdict-modified-p) (setq ispell-pdict-modified-p diff --git a/lisp/textmodes/ispell.el b/lisp/textmodes/ispell.el index ba333117e08..db058d05f35 100644 --- a/lisp/textmodes/ispell.el +++ b/lisp/textmodes/ispell.el @@ -1184,7 +1184,8 @@ The variable `ispell-library-directory' defines their location." `(menu-item ,(purecopy "Change Dictionary...") ispell-change-dictionary :help ,(purecopy "Supply explicit dictionary file name"))) (define-key ispell-menu-map [ispell-kill-ispell] - `(menu-item ,(purecopy "Kill Process") ispell-kill-ispell + `(menu-item ,(purecopy "Kill Process") + (lambda () (interactive) (ispell-kill-ispell nil 'clear)) :enable (and (boundp 'ispell-process) ispell-process (eq (ispell-process-status) 'run)) :help ,(purecopy "Terminate Ispell subprocess"))) @@ -1268,7 +1269,7 @@ The variable `ispell-library-directory' defines their location." ["Continue Check" ispell-continue t] ["Complete Word Frag"ispell-complete-word-interior-frag t] ["Complete Word" ispell-complete-word t] - ["Kill Process" ispell-kill-ispell t] + ["Kill Process" (ispell-kill-ispell nil 'clear) t] ["Customize..." (customize-group 'ispell) t] ;; flyspell-mode may not be bound... ;;["flyspell" flyspell-mode @@ -1537,6 +1538,11 @@ local variable syntax.") "Contains the buffer name if local word definitions were used. Ispell is then restarted because the local words could conflict.") +(defvar ispell-buffer-session-localwords nil + "List of words accepted for session in this buffer.") + +(make-variable-buffer-local 'ispell-buffer-session-localwords) + (defvar ispell-parser 'use-mode-name "Indicates whether ispell should parse the current buffer as TeX Code. Special value `use-mode-name' tries to guess using the name of `major-mode'. @@ -2025,6 +2031,9 @@ Global `ispell-quit' set to start location to continue spell session." nil) ((or (= char ?a) (= char ?A)) ; accept word without insert (ispell-send-string (concat "@" word "\n")) + (add-to-list 'ispell-buffer-session-localwords word) + (or ispell-buffer-local-name ; session localwords might conflict + (setq ispell-buffer-local-name (buffer-name))) (if (null ispell-pdict-modified-p) (setq ispell-pdict-modified-p (list ispell-pdict-modified-p))) @@ -2770,13 +2779,16 @@ Keeps argument list for future ispell invocations for no async support." (process-kill-without-query ispell-process))))))) ;;;###autoload -(defun ispell-kill-ispell (&optional no-error) +(defun ispell-kill-ispell (&optional no-error clear) "Kill current Ispell process (so that you may start a fresh one). -With NO-ERROR, just return non-nil if there was no Ispell running." +With NO-ERROR, just return non-nil if there was no Ispell running. +With CLEAR, buffer session localwords are cleaned." (interactive) ;; This hook is typically used by flyspell to flush some variables used ;; to optimize the common cases. (run-hooks 'ispell-kill-ispell-hook) + (if (or clear (interactive-p)) + (setq ispell-buffer-session-localwords nil)) (if (not (and ispell-process (eq (ispell-process-status) 'run))) (or no-error @@ -2837,6 +2849,7 @@ By just answering RET you can find out what the current dictionary is." (setq ispell-local-dictionary-overridden t)) (error "Undefined dictionary: %s" dict)) (ispell-internal-change-dictionary) + (setq ispell-buffer-session-localwords nil) (message "%s Ispell dictionary set to %s" (if arg "Global" "Local") dict)))) @@ -3906,6 +3919,11 @@ Both should not be used to define a buffer-local dictionary." ;; Actually start a new ispell process, because we need ;; to send commands now to specify the local words to it. (ispell-init-process) + (dolist (session-localword ispell-buffer-session-localwords) + (ispell-send-string (concat "@" session-localword "\n"))) + (or ispell-buffer-local-name + (if ispell-buffer-session-localwords + (setq ispell-buffer-local-name (buffer-name)))) (save-excursion (goto-char (point-min)) (while (search-forward ispell-words-keyword nil t) From 2df41f9c6f22d4e001082df4301c73dccfd01ef0 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Mon, 23 Apr 2012 13:57:06 +0200 Subject: [PATCH 151/564] * net/xesam.el (xesam-mode-map): Use let-bound map in initialization. (Bug#11292) --- lisp/ChangeLog | 5 +++++ lisp/net/xesam.el | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 5ead85734af..09245416423 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-04-23 Michael Albinus + + * net/xesam.el (xesam-mode-map): Use let-bound map in + initialization. (Bug#11292) + 2012-04-23 Agustín Martín Domingo Preserve ispell session localwords when switching back to diff --git a/lisp/net/xesam.el b/lisp/net/xesam.el index f47eeda8d97..b901c041863 100644 --- a/lisp/net/xesam.el +++ b/lisp/net/xesam.el @@ -449,7 +449,7 @@ If there is no registered search engine at all, the function returns `nil'." (defvar xesam-mode-map (let ((map (copy-keymap special-mode-map))) - (set-keymap-parent xesam-mode-map widget-keymap) + (set-keymap-parent map widget-keymap) map)) (define-derived-mode xesam-mode special-mode "Xesam" From 775c916bd7fb488b1a6cb907ee5522c0279d435c Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Mon, 23 Apr 2012 20:37:55 +0800 Subject: [PATCH 152/564] Remove non-option variable handling from customize-apropos and enable use of word lists for customize-apropos-options etc. * lisp/apropos.el (apropos-read-pattern): Make prompt less cryptic. * lisp/cus-edit.el (customize-apropos, customize-apropos-options): Disable matching of non-option variables. (customize-option, customize-option-other-window) (customize-changed-options): Doc fix. (customize-apropos-options, customize-apropos-faces) (customize-apropos-groups): Use apropos-read-pattern. Fixes: debbugs:11176 --- etc/NEWS | 4 +++ lisp/ChangeLog | 11 +++++++++ lisp/apropos.el | 2 +- lisp/cus-edit.el | 63 ++++++++++++++++++++---------------------------- 4 files changed, 42 insertions(+), 38 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index e728002230c..c4f89ab4a3b 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -78,6 +78,10 @@ character when doing minibuffer filename prompts. *** `custom-reset-button-menu' now defaults to t. +*** Non-option variables are never matched in `customize-apropos' and +`customize-apropos-options' (i.e. the prefix argument does nothing for +these commands now). + ** erc will look up server/channel names via auth-source and use the channel keys found, if any. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 09245416423..41b00159aee 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,14 @@ +2012-04-23 Chong Yidong + + * cus-edit.el (customize-apropos, customize-apropos-options): + Disable matching of non-option variables (Bug#11176). + (customize-option, customize-option-other-window) + (customize-changed-options): Doc fix. + (customize-apropos-options, customize-apropos-faces) + (customize-apropos-groups): Use apropos-read-pattern (Bug#11124). + + * apropos.el (apropos-read-pattern): Make prompt less cryptic. + 2012-04-23 Michael Albinus * net/xesam.el (xesam-mode-map): Use let-bound map in diff --git a/lisp/apropos.el b/lisp/apropos.el index 56b27e9b9b4..6bf396a1632 100644 --- a/lisp/apropos.el +++ b/lisp/apropos.el @@ -333,7 +333,7 @@ literally, or a string which is used as a regexp to search for. SUBJECT is a string that is included in the prompt to identify what kind of objects to search." (let ((pattern - (read-string (concat "Apropos " subject " (word list or regexp): ")))) + (read-string (concat "Search for " subject " (word list or regexp): ")))) (if (string-equal (regexp-quote pattern) pattern) ;; Split into words (split-string pattern "[ \t]+") diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el index 924cbcddfc8..4a003f2d043 100644 --- a/lisp/cus-edit.el +++ b/lisp/cus-edit.el @@ -1131,7 +1131,7 @@ If OTHER-WINDOW is non-nil, display in another window." ;;;###autoload (defun customize-option (symbol) - "Customize SYMBOL, which must be a user option variable." + "Customize SYMBOL, which must be a user option." (interactive (custom-variable-prompt)) (unless symbol (error "No variable specified")) @@ -1147,7 +1147,7 @@ If OTHER-WINDOW is non-nil, display in another window." ;;;###autoload (defun customize-option-other-window (symbol) - "Customize SYMBOL, which must be a user option variable. + "Customize SYMBOL, which must be a user option. Show the buffer in another window, but don't select it." (interactive (custom-variable-prompt)) (unless symbol @@ -1201,9 +1201,10 @@ the official name of the package, such as MH-E or Gnus.") ;;;###autoload (defun customize-changed-options (&optional since-version) "Customize all settings whose meanings have changed in Emacs itself. -This includes new user option variables and faces, and new -customization groups, as well as older options and faces whose meanings -or default values have changed since the previous major Emacs release. +This includes new user options and faces, and new customization +groups, as well as older options and faces whose meanings or +default values have changed since the previous major Emacs +release. With argument SINCE-VERSION (a string), customize all settings that were added or redefined since that version." @@ -1411,7 +1412,7 @@ suggest to customize that face, if it's customizable." ;;;###autoload (defun customize-apropos (pattern &optional type) - "Customize all loaded options, faces and groups matching PATTERN. + "Customize loaded options, faces and groups matching PATTERN. PATTERN can be a word, a list of words (separated by spaces), or a regexp (using some regexp special characters). If it is a word, search for matches for that word as a substring. If it is a list of words, @@ -1419,62 +1420,50 @@ search for matches for any two (or more) of those words. If TYPE is `options', include only options. If TYPE is `faces', include only faces. -If TYPE is `groups', include only groups. -If TYPE is t (interactively, with prefix arg), include variables -that are not customizable options, as well as faces and groups -\(but we recommend using `apropos-variable' instead)." - (interactive (list (apropos-read-pattern "symbol") current-prefix-arg)) +If TYPE is `groups', include only groups." + (interactive (list (apropos-read-pattern "symbol") nil)) (require 'apropos) + (unless (memq type '(nil options faces groups)) + (error "Invalid setting type %s" (symbol-name type))) (apropos-parse-pattern pattern) (let (found) (mapatoms `(lambda (symbol) (when (string-match apropos-regexp (symbol-name symbol)) - ,(if (not (memq type '(faces options))) + ,(if (memq type '(nil groups)) '(if (get symbol 'custom-group) (push (list symbol 'custom-group) found))) - ,(if (not (memq type '(options groups))) + ,(if (memq type '(nil faces)) '(if (custom-facep symbol) (push (list symbol 'custom-face) found))) - ,(if (not (memq type '(groups faces))) + ,(if (memq type '(nil options)) `(if (and (boundp symbol) (eq (indirect-variable symbol) symbol) (or (get symbol 'saved-value) - (custom-variable-p symbol) - ,(if (not (memq type '(nil options))) - '(get symbol 'variable-documentation)))) + (custom-variable-p symbol))) (push (list symbol 'custom-variable) found)))))) - (if (not found) - (error "No %s matching %s" - (if (eq type t) - "items" - (format "customizable %s" - (if (memq type '(options faces groups)) - (symbol-name type) - "items"))) - pattern) - (custom-buffer-create - (custom-sort-items found t custom-buffer-order-groups) - "*Customize Apropos*")))) + (unless found + (error "No customizable %s matching %s" (symbol-name type) pattern)) + (custom-buffer-create + (custom-sort-items found t custom-buffer-order-groups) + "*Customize Apropos*"))) ;;;###autoload -(defun customize-apropos-options (regexp &optional arg) - "Customize all loaded customizable options matching REGEXP. -With prefix ARG, include variables that are not customizable options -\(but it is better to use `apropos-variable' if you want to find those)." - (interactive "sCustomize options (regexp): \nP") - (customize-apropos regexp (or arg 'options))) +(defun customize-apropos-options (regexp &optional ignored) + "Customize all loaded customizable options matching REGEXP." + (interactive (list (apropos-read-pattern "options"))) + (customize-apropos regexp 'options)) ;;;###autoload (defun customize-apropos-faces (regexp) "Customize all loaded faces matching REGEXP." - (interactive "sCustomize faces (regexp): \n") + (interactive (list (apropos-read-pattern "faces"))) (customize-apropos regexp 'faces)) ;;;###autoload (defun customize-apropos-groups (regexp) "Customize all loaded groups matching REGEXP." - (interactive "sCustomize groups (regexp): \n") + (interactive (list (apropos-read-pattern "groups"))) (customize-apropos regexp 'groups)) ;;; Buffer. From 922d37d3e83008260a9d6eabc1bee6973ed3c6b8 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Mon, 23 Apr 2012 20:44:54 +0800 Subject: [PATCH 153/564] * apropos.el (apropos-read-pattern): Fix word list splitting. Fixes: debbugs:11132 --- lisp/ChangeLog | 1 + lisp/apropos.el | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 41b00159aee..2bef7214456 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -8,6 +8,7 @@ (customize-apropos-groups): Use apropos-read-pattern (Bug#11124). * apropos.el (apropos-read-pattern): Make prompt less cryptic. + Fix word list splitting (Bug#11132). 2012-04-23 Michael Albinus diff --git a/lisp/apropos.el b/lisp/apropos.el index 6bf396a1632..25163dcab99 100644 --- a/lisp/apropos.el +++ b/lisp/apropos.el @@ -336,7 +336,7 @@ kind of objects to search." (read-string (concat "Search for " subject " (word list or regexp): ")))) (if (string-equal (regexp-quote pattern) pattern) ;; Split into words - (split-string pattern "[ \t]+") + (split-string pattern "[ \t]+" t) pattern))) (defun apropos-parse-pattern (pattern) From 46c71e2314b443fbc0c50132afc4f3368e6b52e3 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Mon, 23 Apr 2012 23:38:48 +0800 Subject: [PATCH 154/564] Use proper faces in apropos.el. * lisp/apropos.el (apropos-symbol, apropos-keybinding, apropos-label) (apropos-property, apropos-function-button) (apropos-variable-button, apropos-misc-button): New faces. (apropos-symbol-face, apropos-keybinding-face) (apropos-label-face, apropos-property-face, apropos-match-face): Variables removed. (apropos-library-button, apropos-format-plist, apropos-print) (apropos-print-doc, apropos-describe-plist): Callers changed. Fixes: debbugs:8396 --- etc/NEWS | 9 +++++ lisp/ChangeLog | 8 ++++ lisp/apropos.el | 99 +++++++++++++++++++++++++------------------------ 3 files changed, 68 insertions(+), 48 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index c4f89ab4a3b..fcf9fc9397e 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -74,6 +74,15 @@ character when doing minibuffer filename prompts. * Changes in Specialized Modes and Packages in Emacs 24.2 +** Apropos + +*** The faces used by Apropos are now directly customizable. +These faces are named `apropos-symbol', `apropos-keybinding', and so on; +see the `apropos' Custom group for details. + +**** The old options whose values specified faces to use were removed +(i.e. `apropos-symbol-face', `apropos-keybinding-face', etc.). + ** Customize *** `custom-reset-button-menu' now defaults to t. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 2bef7214456..173b2345c58 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -9,6 +9,14 @@ * apropos.el (apropos-read-pattern): Make prompt less cryptic. Fix word list splitting (Bug#11132). + (apropos-symbol, apropos-keybinding, apropos-label) + (apropos-property, apropos-function-button) + (apropos-variable-button, apropos-misc-button): New faces. + (apropos-symbol-face, apropos-keybinding-face) + (apropos-label-face, apropos-property-face, apropos-match-face): + Variables removed (Bug#8396). + (apropos-library-button, apropos-format-plist, apropos-print) + (apropos-print-doc, apropos-describe-plist): Callers changed. 2012-04-23 Michael Albinus diff --git a/lisp/apropos.el b/lisp/apropos.el index 25163dcab99..f5373b38682 100644 --- a/lisp/apropos.el +++ b/lisp/apropos.el @@ -85,35 +85,48 @@ include key-binding information in its output." :group 'apropos :type 'boolean) - -(defcustom apropos-symbol-face 'bold - "Face for symbol name in Apropos output, or nil for none." +(defface apropos-symbol + '((t (:inherit bold))) + "Face for the symbol name in Apropos output." :group 'apropos - :type 'face) + :version "24.2") -(defcustom apropos-keybinding-face 'underline - "Face for lists of keybinding in Apropos output, or nil for none." +(defface apropos-keybinding + '((t (:inherit underline))) + "Face for lists of keybinding in Apropos output." :group 'apropos - :type 'face) + :version "24.2") -(defcustom apropos-label-face '(italic) - "Face for label (`Command', `Variable' ...) in Apropos output. -A value of nil means don't use any special font for them, and also -turns off mouse highlighting." - :group 'apropos - :type 'face) - -(defcustom apropos-property-face 'bold-italic +(defface apropos-property + '((t (:inherit font-lock-builtin-face))) "Face for property name in apropos output, or nil for none." :group 'apropos - :type 'face) + :version "24.2") + +(defface apropos-function-button + '((t (:inherit (font-lock-function-name-face button)))) + "Button face indicating a function, macro, or command in Apropos." + :group 'apropos + :version "24.2") + +(defface apropos-variable-button + '((t (:inherit (font-lock-variable-name-face button)))) + "Button face indicating a variable in Apropos." + :group 'apropos + :version "24.2") + +(defface apropos-misc-button + '((t (:inherit (font-lock-constant-face button)))) + "Button face indicating a miscellaneous object type in Apropos." + :group 'apropos + :version "24.2") (defcustom apropos-match-face 'match "Face for matching text in Apropos documentation/value, or nil for none. This applies when you look for matches in the documentation or variable value for the pattern; the part that matches gets displayed in this font." :group 'apropos - :type 'face) + :version "24.2") (defcustom apropos-sort-by-scores nil "Non-nil means sort matches by scores; best match is shown first. @@ -196,7 +209,7 @@ term, and the rest of the words are alternative terms.") ;;; Button types used by apropos (define-button-type 'apropos-symbol - 'face apropos-symbol-face + 'face 'apropos-symbol 'help-echo "mouse-2, RET: Display more help on this symbol" 'follow-link t 'action #'apropos-symbol-button-display-help) @@ -210,7 +223,7 @@ term, and the rest of the words are alternative terms.") (define-button-type 'apropos-function 'apropos-label "Function" 'apropos-short-label "f" - 'face '(font-lock-function-name-face button) + 'face 'apropos-function-button 'help-echo "mouse-2, RET: Display more help on this function" 'follow-link t 'action (lambda (button) @@ -219,7 +232,7 @@ term, and the rest of the words are alternative terms.") (define-button-type 'apropos-macro 'apropos-label "Macro" 'apropos-short-label "m" - 'face '(font-lock-function-name-face button) + 'face 'apropos-function-button 'help-echo "mouse-2, RET: Display more help on this macro" 'follow-link t 'action (lambda (button) @@ -228,7 +241,7 @@ term, and the rest of the words are alternative terms.") (define-button-type 'apropos-command 'apropos-label "Command" 'apropos-short-label "c" - 'face '(font-lock-function-name-face button) + 'face 'apropos-function-button 'help-echo "mouse-2, RET: Display more help on this command" 'follow-link t 'action (lambda (button) @@ -242,7 +255,7 @@ term, and the rest of the words are alternative terms.") (define-button-type 'apropos-variable 'apropos-label "Variable" 'apropos-short-label "v" - 'face '(font-lock-variable-name-face button) + 'face 'apropos-variable-button 'help-echo "mouse-2, RET: Display more help on this variable" 'follow-link t 'action (lambda (button) @@ -260,7 +273,7 @@ term, and the rest of the words are alternative terms.") (define-button-type 'apropos-group 'apropos-label "Group" 'apropos-short-label "g" - 'face '(font-lock-builtin-face button) + 'face 'apropos-misc-button 'help-echo "mouse-2, RET: Display more help on this group" 'follow-link t 'action (lambda (button) @@ -270,7 +283,7 @@ term, and the rest of the words are alternative terms.") (define-button-type 'apropos-widget 'apropos-label "Widget" 'apropos-short-label "w" - 'face '(font-lock-builtin-face button) + 'face 'apropos-misc-button 'help-echo "mouse-2, RET: Display more help on this widget" 'follow-link t 'action (lambda (button) @@ -279,7 +292,7 @@ term, and the rest of the words are alternative terms.") (define-button-type 'apropos-plist 'apropos-label "Properties" 'apropos-short-label "p" - 'face '(font-lock-keyword-face button) + 'face 'apropos-misc-button 'help-echo "mouse-2, RET: Display more help on this plist" 'follow-link t 'action (lambda (button) @@ -587,7 +600,7 @@ Returns list of symbols and documentation found." (let ((name (copy-sequence (symbol-name sym)))) (make-text-button name nil 'type 'apropos-library - 'face apropos-symbol-face + 'face 'apropos-symbol 'apropos-symbol name) name))) @@ -837,9 +850,8 @@ Returns list of symbols and documentation found." (while pl (setq p (format "%s %S" (car pl) (nth 1 pl))) (if (or (not compare) (string-match apropos-regexp p)) - (if apropos-property-face - (put-text-property 0 (length (symbol-name (car pl))) - 'face apropos-property-face p)) + (put-text-property 0 (length (symbol-name (car pl))) + 'face 'apropos-property p) (setq p nil)) (if p (progn @@ -1031,10 +1043,7 @@ If non-nil TEXT is a string that will be printed as a heading." (insert-text-button (symbol-name symbol) 'type 'apropos-symbol 'skip apropos-multi-type - ;; Can't use default, since user may have - ;; changed the variable! - ;; Just say `no' to variables containing faces! - 'face apropos-symbol-face) + 'face 'apropos-symbol) (if (and (eq apropos-sort-by-scores 'verbose) (cadr apropos-item)) (insert " (" (number-to-string (cadr apropos-item)) ") ")) @@ -1072,18 +1081,16 @@ If non-nil TEXT is a string that will be printed as a heading." (setq key (condition-case () (key-description key) (error))) - (if apropos-keybinding-face - (put-text-property 0 (length key) - 'face apropos-keybinding-face - key)) + (put-text-property 0 (length key) + 'face 'apropos-keybinding + key) key) item ", ")) (insert "M-x ... RET") - (when apropos-keybinding-face - (put-text-property (- (point) 11) (- (point) 8) - 'face apropos-keybinding-face) - (put-text-property (- (point) 3) (point) - 'face apropos-keybinding-face)))) + (put-text-property (- (point) 11) (- (point) 8) + 'face 'apropos-keybinding) + (put-text-property (- (point) 3) (point) + 'face 'apropos-keybinding))) (terpri)) (apropos-print-doc 2 (if (commandp symbol) @@ -1128,9 +1135,6 @@ If non-nil TEXT is a string that will be printed as a heading." (format "<%s>" (button-type-get type 'apropos-short-label)) (button-type-get type 'apropos-label)) 'type type - ;; Can't use the default button face, since user may have changed the - ;; variable! Just say `no' to variables containing faces! - 'face (append button-face apropos-label-face) 'apropos-symbol (car apropos-item)) (insert (if apropos-compact-layout " " ": "))) @@ -1177,9 +1181,8 @@ If non-nil TEXT is a string that will be printed as a heading." (princ "Symbol ") (prin1 symbol) (princ "'s plist is\n (") - (if apropos-symbol-face - (put-text-property (+ (point-min) 7) (- (point) 14) - 'face apropos-symbol-face)) + (put-text-property (+ (point-min) 7) (- (point) 14) + 'face 'apropos-symbol) (insert (apropos-format-plist symbol "\n ")) (princ ")"))) From 7511ded8c94e37aea836e3c13ccc9a5f77b07857 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Mon, 23 Apr 2012 23:48:22 +0800 Subject: [PATCH 155/564] * subr.el (accept-change-group): Fix arg usage. Fixes: debbugs:6095 --- lisp/ChangeLog | 4 ++++ lisp/subr.el | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 173b2345c58..c6a024a36e0 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-04-23 Andreas Politz + + * subr.el (accept-change-group): Fix arg usage (Bug#6095). + 2012-04-23 Chong Yidong * cus-edit.el (customize-apropos, customize-apropos-options): diff --git a/lisp/subr.el b/lisp/subr.el index 8e296aa7422..2404f6a56d2 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -2391,7 +2391,7 @@ to `accept-change-group' or `cancel-change-group'." This finishes the change group by accepting its changes as final." (dolist (elt handle) (with-current-buffer (car elt) - (if (eq elt t) + (if (eq (cdr elt) t) (setq buffer-undo-list t))))) (defun cancel-change-group (handle) From f0ee99a0d4aa7aa0f20e5ec673fb1936b5174eea Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 23 Apr 2012 19:22:23 +0300 Subject: [PATCH 156/564] Avoid assertion violation when scrolling minibuffer windows. src/xdisp.c (pos_visible_p): If the window start position is beyond ZV, start the display from buffer beginning. Prevents assertion violation in init_iterator when the minibuffer window is scrolled via the scroll bar. src/window.c (window_scroll_pixel_based): Likewise. --- src/ChangeLog | 9 +++++++++ src/window.c | 5 +++++ src/xdisp.c | 5 +++++ 3 files changed, 19 insertions(+) diff --git a/src/ChangeLog b/src/ChangeLog index faa2a104337..906d17535c6 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,12 @@ +2012-04-23 Eli Zaretskii + + * xdisp.c (pos_visible_p): If the window start position is beyond + ZV, start the display from buffer beginning. Prevents assertion + violation in init_iterator when the minibuffer window is scrolled + via the scroll bar. + + * window.c (window_scroll_pixel_based): Likewise. + 2012-04-23 Chong Yidong * keymap.c (where_is_internal): Doc fix (Bug#10872). diff --git a/src/window.c b/src/window.c index af7968f9edf..f93f58f9b72 100644 --- a/src/window.c +++ b/src/window.c @@ -4221,6 +4221,11 @@ window_scroll_pixel_based (Lisp_Object window, int n, int whole, int noerror) void *itdata = NULL; SET_TEXT_POS_FROM_MARKER (start, w->start); + /* Scrolling a minibuffer window via scroll bar when the echo area + shows long text sometimes resets the minibuffer contents behind + our backs. */ + if (CHARPOS (start) > ZV) + SET_TEXT_POS (start, BEGV, BEGV_BYTE); /* If PT is not visible in WINDOW, move back one half of the screen. Allow PT to be partially visible, otherwise diff --git a/src/xdisp.c b/src/xdisp.c index 9881adfa34d..e53d3a57cd6 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -1265,6 +1265,11 @@ pos_visible_p (struct window *w, EMACS_INT charpos, int *x, int *y, } SET_TEXT_POS_FROM_MARKER (top, w->start); + /* Scrolling a minibuffer window via scroll bar when the echo area + shows long text sometimes resets the minibuffer contents behind + our backs. */ + if (CHARPOS (top) > ZV) + SET_TEXT_POS (top, BEGV, BEGV_BYTE); /* Compute exact mode line heights. */ if (WINDOW_WANTS_MODELINE_P (w)) From 89a438bd861e9b80e8f80a23955624c74782921a Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Mon, 23 Apr 2012 15:46:35 -0700 Subject: [PATCH 157/564] Do not create empty overlays with the evaporate property (Bug#9642). * buffer.c (Fmove_overlay): Delete an evaporating overlay if it becomes empty after its bounds are adjusted to fit within its buffer. Without this fix, in a nonempty buffer (let ((o (make-overlay 1 2))) (overlay-put o 'evaporate t) (move-overlay o 0 1)) yields an empty overlay that has the evaporate property, which is not supposed to happen. --- src/ChangeLog | 8 ++++++++ src/buffer.c | 37 +++++++++++++++++++------------------ 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 1db958d8d67..8cb5202613e 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,13 @@ 2012-04-23 Paul Eggert + Do not create empty overlays with the evaporate property (Bug#9642). + * buffer.c (Fmove_overlay): Delete an evaporating overlay + if it becomes empty after its bounds are adjusted to fit within + its buffer. Without this fix, in a nonempty buffer (let ((o + (make-overlay 1 2))) (overlay-put o 'evaporate t) (move-overlay o 0 1)) + yields an empty overlay that has the evaporate property, which is + not supposed to happen. + Fix minor GTK3 problems found by static checking. * emacsgtkfixed.c (EMACS_TYPE_FIXED, EMACS_FIXED, EmacsFixed) (EmacsFixedPrivate, EmacsFixedClass, struct _EmacsFixed) diff --git a/src/buffer.c b/src/buffer.c index 9bac3ec742b..6c2e21c8125 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -3682,6 +3682,7 @@ buffer. */) struct buffer *b, *ob; Lisp_Object obuffer; int count = SPECPDL_INDEX (); + ptrdiff_t n_beg, n_end; CHECK_OVERLAY (overlay); if (NILP (buffer)) @@ -3700,15 +3701,23 @@ buffer. */) CHECK_NUMBER_COERCE_MARKER (beg); CHECK_NUMBER_COERCE_MARKER (end); - if (XINT (beg) == XINT (end) && ! NILP (Foverlay_get (overlay, Qevaporate))) - return Fdelete_overlay (overlay); - if (XINT (beg) > XINT (end)) { Lisp_Object temp; temp = beg; beg = end; end = temp; } + /* First set the overlay boundaries, which may clip them. */ + Fset_marker (OVERLAY_START (overlay), beg, buffer); + Fset_marker (OVERLAY_END (overlay), end, buffer); + n_beg = marker_position (OVERLAY_START (overlay)); + n_end = marker_position (OVERLAY_END (overlay)); + + /* Now, delete the overlay if it is empty after clipping and has the + evaporate property. */ + if (n_beg == n_end && ! NILP (Foverlay_get (overlay, Qevaporate))) + return Fdelete_overlay (overlay); + specbind (Qinhibit_quit, Qt); obuffer = Fmarker_buffer (OVERLAY_START (overlay)); @@ -3731,7 +3740,7 @@ buffer. */) } /* Redisplay where the overlay is going to be. */ - modify_overlay (b, XINT (beg), XINT (end)); + modify_overlay (b, n_beg, n_end); } else /* Redisplay the area the overlay has just left, or just enclosed. */ @@ -3741,16 +3750,12 @@ buffer. */) o_beg = OVERLAY_POSITION (OVERLAY_START (overlay)); o_end = OVERLAY_POSITION (OVERLAY_END (overlay)); - if (o_beg == XINT (beg)) - modify_overlay (b, o_end, XINT (end)); - else if (o_end == XINT (end)) - modify_overlay (b, o_beg, XINT (beg)); + if (o_beg == n_beg) + modify_overlay (b, o_end, n_end); + else if (o_end == n_end) + modify_overlay (b, o_beg, n_beg); else - { - if (XINT (beg) < o_beg) o_beg = XINT (beg); - if (XINT (end) > o_end) o_end = XINT (end); - modify_overlay (b, o_beg, o_end); - } + modify_overlay (b, min (o_beg, n_beg), max (o_end, n_end)); } if (!NILP (obuffer)) @@ -3762,12 +3767,8 @@ buffer. */) eassert (XOVERLAY (overlay)->next == NULL); } - Fset_marker (OVERLAY_START (overlay), beg, buffer); - Fset_marker (OVERLAY_END (overlay), end, buffer); - /* Put the overlay on the wrong list. */ - end = OVERLAY_END (overlay); - if (OVERLAY_POSITION (end) < b->overlay_center) + if (n_end < b->overlay_center) { XOVERLAY (overlay)->next = b->overlays_after; b->overlays_after = XOVERLAY (overlay); From 02fd101be2379fabdc5c45bf9ebd890e7c4bc58f Mon Sep 17 00:00:00 2001 From: Juanma Barranquero Date: Tue, 24 Apr 2012 01:15:08 +0200 Subject: [PATCH 158/564] src/gnutls.c (init_gnutls_functions): Fix bug#11311. The value of :loaded-from is now a cons. --- src/ChangeLog | 5 +++++ src/gnutls.c | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 8cb5202613e..73e54c21a60 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2012-04-23 Juanma Barranquero + + * gnutls.c (init_gnutls_functions): The value of :loaded-from is + now a cons (bug#11311). + 2012-04-23 Paul Eggert Do not create empty overlays with the evaporate property (Bug#9642). diff --git a/src/gnutls.c b/src/gnutls.c index 70eea3b0b89..09268aee397 100644 --- a/src/gnutls.c +++ b/src/gnutls.c @@ -201,7 +201,7 @@ init_gnutls_functions (Lisp_Object libraries) max_log_level = global_gnutls_log_level; GNUTLS_LOG2 (1, max_log_level, "GnuTLS library loaded:", - SDATA (Fget (Qgnutls_dll, QCloaded_from))); + SDATA (XCAR (Fget (Qgnutls_dll, QCloaded_from)))); return 1; } @@ -419,7 +419,7 @@ emacs_gnutls_read (struct Lisp_Process *proc, char *buf, EMACS_INT nbyte) { proc->gnutls_handshakes_tried++; emacs_gnutls_handshake (proc); - GNUTLS_LOG2i (5, log_level, "Retried handshake", + GNUTLS_LOG2i (5, log_level, "Retried handshake", proc->gnutls_handshakes_tried); return -1; } From c4cf6d91f36ebd8d05109926d9e16ba02693cb9f Mon Sep 17 00:00:00 2001 From: Ivan Andrus Date: Mon, 23 Apr 2012 22:07:40 -0400 Subject: [PATCH 159/564] * lisp/ibuf-ext.el (ibuffer-list-buffer-modes): Add `include-parents' arg. (ibuffer-filter-by-derived-mode): New filter. * lisp/ibuffer.el (ibuffer-mode-map): Bind to `/ w'. --- etc/NEWS | 2 ++ lisp/ChangeLog | 6 ++++++ lisp/ibuf-ext.el | 24 +++++++++++++++++++----- lisp/ibuffer.el | 3 ++- 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index fcf9fc9397e..8dcd70b413b 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -74,6 +74,8 @@ character when doing minibuffer filename prompts. * Changes in Specialized Modes and Packages in Emacs 24.2 +** New `derived-mode' filter for Ibuffer, bound to `/ w'. + ** Apropos *** The faces used by Apropos are now directly customizable. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c6a024a36e0..8b4409fec0a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2012-04-24 Ivan Andrus (tiny change) + + * ibuf-ext.el (ibuffer-list-buffer-modes): Add `include-parents' arg. + (ibuffer-filter-by-derived-mode): New filter. + * ibuffer.el (ibuffer-mode-map): Bind to `/ w'. + 2012-04-23 Andreas Politz * subr.el (accept-change-group): Fix arg usage (Bug#6095). diff --git a/lisp/ibuf-ext.el b/lisp/ibuf-ext.el index 22ec2f5df1f..dc90617f92e 100644 --- a/lisp/ibuf-ext.el +++ b/lisp/ibuf-ext.el @@ -973,8 +973,9 @@ Interactively, prompt for NAME, and use the current filters." (concat " [" (cadr type) ": " (format "%s]" (cdr qualifier))))))) -(defun ibuffer-list-buffer-modes () +(defun ibuffer-list-buffer-modes (&optional include-parents) "Create an alist of buffer modes currently in use. +If INCLUDE-PARENTS is non-nil then include parent modes. The list returned will be of the form (\"MODE-NAME\" . MODE-SYMBOL)." (let ((bufs (buffer-list)) (modes) @@ -982,10 +983,13 @@ The list returned will be of the form (\"MODE-NAME\" . MODE-SYMBOL)." (while bufs (setq this-mode (buffer-local-value 'major-mode (car bufs)) bufs (cdr bufs)) - (add-to-list - 'modes - `(,(symbol-name this-mode) . - ,this-mode))) + (while this-mode + (add-to-list + 'modes + `(,(symbol-name this-mode) . + ,this-mode)) + (setq this-mode (and include-parents + (get this-mode 'derived-mode-parent))))) modes)) @@ -1027,6 +1031,16 @@ currently used by buffers." ""))))) (eq qualifier (buffer-local-value 'major-mode buf))) +(define-ibuffer-filter derived-mode + "Toggle current view to buffers whose major mode inherits from QUALIFIER." + (:description "derived mode" + :reader + (intern + (completing-read "Filter by derived mode: " + (ibuffer-list-buffer-modes t) + nil nil ""))) + (with-current-buffer buf (derived-mode-p qualifier))) + ;;;###autoload (autoload 'ibuffer-filter-by-name "ibuf-ext") (define-ibuffer-filter name "Toggle current view to buffers with name matching QUALIFIER." diff --git a/lisp/ibuffer.el b/lisp/ibuffer.el index 464b35fc3a6..b8c000b6884 100644 --- a/lisp/ibuffer.el +++ b/lisp/ibuffer.el @@ -503,6 +503,7 @@ directory, like `default-directory'." (define-key map (kbd "/ m") 'ibuffer-filter-by-mode) (define-key map (kbd "/ M") 'ibuffer-filter-by-used-mode) + (define-key map (kbd "/ w") 'ibuffer-filter-by-derived-mode) (define-key map (kbd "/ n") 'ibuffer-filter-by-name) (define-key map (kbd "/ c") 'ibuffer-filter-by-content) (define-key map (kbd "/ e") 'ibuffer-filter-by-predicate) @@ -2645,7 +2646,7 @@ will be inserted before the group at point." ;;;;;; ibuffer-backward-filter-group ibuffer-forward-filter-group ;;;;;; ibuffer-toggle-filter-group ibuffer-mouse-toggle-filter-group ;;;;;; ibuffer-interactive-filter-by-mode ibuffer-mouse-filter-by-mode -;;;;;; ibuffer-auto-mode) "ibuf-ext" "ibuf-ext.el" "1400db1bc3d4a3010cbc4807a6725072") +;;;;;; ibuffer-auto-mode) "ibuf-ext" "ibuf-ext.el" "b2b8f11ad22546ad05d6db0b7d388ac1") ;;; Generated autoloads from ibuf-ext.el (autoload 'ibuffer-auto-mode "ibuf-ext" "\ From 9be2fd9b4f96bd00d222ae8ce13f8bb39802f930 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Tue, 24 Apr 2012 10:58:26 +0800 Subject: [PATCH 160/564] * src/xselect.c (x_convert_selection): Initialize a pointer. Fixes: debbugs:11315 --- src/ChangeLog | 4 ++++ src/xselect.c | 1 + 2 files changed, 5 insertions(+) diff --git a/src/ChangeLog b/src/ChangeLog index 906d17535c6..8c80a24b580 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2012-04-24 Chong Yidong + + * xselect.c (x_convert_selection): Initialize a pointer (Bug#11315). + 2012-04-23 Eli Zaretskii * xdisp.c (pos_visible_p): If the window start position is beyond diff --git a/src/xselect.c b/src/xselect.c index 173cf78bdaa..15ce8d487fa 100644 --- a/src/xselect.c +++ b/src/xselect.c @@ -931,6 +931,7 @@ x_convert_selection (struct input_event *event, Lisp_Object selection_symbol, /* Otherwise, record the converted selection to binary. */ cs = xmalloc (sizeof (struct selection_data)); + cs->data = NULL; cs->nofree = 1; cs->property = property; cs->wait_object = NULL; From d81bd05990457d9140300f2c882dcbf60c8ff74f Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Mon, 23 Apr 2012 23:40:57 -0400 Subject: [PATCH 161/564] * lisp/ibuffer.el (ibuffer-mode-map): Bind `/ m' to filter-used-mode and `/ M' to filter-derived-mode. * lisp/ibuf-ext.el (ibuffer-list-buffer-modes): Simplify; avoid add-to-list. (ibuffer-filter-by-mode, ibuffer-filter-by-used-mode) (ibuffer-mark-by-mode): Use default rather than initial-input. (ibuffer-filter-by-derived-mode): Autoload and require-match. --- etc/NEWS | 3 +- lisp/ChangeLog | 9 +++++ lisp/ibuf-ext.el | 98 +++++++++++++++++++++++------------------------- lisp/ibuffer.el | 8 ++-- 4 files changed, 61 insertions(+), 57 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 8dcd70b413b..edac7f58eaa 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -74,7 +74,8 @@ character when doing minibuffer filename prompts. * Changes in Specialized Modes and Packages in Emacs 24.2 -** New `derived-mode' filter for Ibuffer, bound to `/ w'. +** New `derived-mode' filter for Ibuffer, bound to `/ M'. +`/ m' is now bound to filter by used-mode, which used to be bound to `/ M'. ** Apropos diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 8b4409fec0a..848fc434956 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,12 @@ +2012-04-24 Stefan Monnier + + * ibuffer.el (ibuffer-mode-map): Bind `/ m' to filter-used-mode + and `/ M' to filter-derived-mode. + * ibuf-ext.el (ibuffer-list-buffer-modes): Simplify; avoid add-to-list. + (ibuffer-filter-by-mode, ibuffer-filter-by-used-mode) + (ibuffer-mark-by-mode): Use default rather than initial-input. + (ibuffer-filter-by-derived-mode): Autoload and require-match. + 2012-04-24 Ivan Andrus (tiny change) * ibuf-ext.el (ibuffer-list-buffer-modes): Add `include-parents' arg. diff --git a/lisp/ibuf-ext.el b/lisp/ibuf-ext.el index dc90617f92e..f943bd2fe58 100644 --- a/lisp/ibuf-ext.el +++ b/lisp/ibuf-ext.el @@ -974,23 +974,16 @@ Interactively, prompt for NAME, and use the current filters." (defun ibuffer-list-buffer-modes (&optional include-parents) - "Create an alist of buffer modes currently in use. -If INCLUDE-PARENTS is non-nil then include parent modes. -The list returned will be of the form (\"MODE-NAME\" . MODE-SYMBOL)." - (let ((bufs (buffer-list)) - (modes) - (this-mode)) - (while bufs - (setq this-mode (buffer-local-value 'major-mode (car bufs)) - bufs (cdr bufs)) - (while this-mode - (add-to-list - 'modes - `(,(symbol-name this-mode) . - ,this-mode)) - (setq this-mode (and include-parents - (get this-mode 'derived-mode-parent))))) - modes)) + "Create a completion table of buffer modes currently in use. +If INCLUDE-PARENTS is non-nil then include parent modes." + (let ((modes)) + (dolist (buf (buffer-list)) + (let ((this-mode (buffer-local-value 'major-mode buf))) + (while (and this-mode (not (memq this-mode modes))) + (push this-mode modes) + (setq this-mode (and include-parents + (get this-mode 'derived-mode-parent)))))) + (mapcar #'symbol-name modes))) ;;; Extra operation definitions @@ -1000,16 +993,19 @@ The list returned will be of the form (\"MODE-NAME\" . MODE-SYMBOL)." "Toggle current view to buffers with major mode QUALIFIER." (:description "major mode" :reader - (intern - (completing-read "Filter by major mode: " obarray - #'(lambda (e) - (string-match "-mode$" - (symbol-name e))) - t - (let ((buf (ibuffer-current-buffer))) - (if (and buf (buffer-live-p buf)) - (symbol-name (buffer-local-value 'major-mode buf)) - ""))))) + (let* ((buf (ibuffer-current-buffer)) + (default (if (and buf (buffer-live-p buf)) + (symbol-name (buffer-local-value + 'major-mode buf))))) + (intern + (completing-read + (if default + (format "Filter by major mode (default %s): " default) + "Filter by major mode: ") + obarray + #'(lambda (e) + (string-match "-mode\\'" (symbol-name e))) + t nil nil default)))) (eq qualifier (buffer-local-value 'major-mode buf))) ;;;###autoload (autoload 'ibuffer-filter-by-used-mode "ibuf-ext") @@ -1018,19 +1014,20 @@ The list returned will be of the form (\"MODE-NAME\" . MODE-SYMBOL)." Called interactively, this function allows selection of modes currently used by buffers." (:description "major mode in use" - :reader - (intern - (completing-read "Filter by major mode: " - (ibuffer-list-buffer-modes) - nil - t - (let ((buf (ibuffer-current-buffer))) - (if (and buf (buffer-live-p buf)) - (symbol-name (buffer-local-value - 'major-mode buf)) - ""))))) + :reader + (let* ((buf (ibuffer-current-buffer)) + (default (if (and buf (buffer-live-p buf)) + (symbol-name (buffer-local-value + 'major-mode buf))))) + (intern + (completing-read + (if default + (format "Filter by major mode (default %s): " default) + "Filter by major mode: ") + (ibuffer-list-buffer-modes) nil t nil nil default)))) (eq qualifier (buffer-local-value 'major-mode buf))) +;;;###autoload (autoload 'ibuffer-filter-by-derived-mode "ibuf-ext") (define-ibuffer-filter derived-mode "Toggle current view to buffers whose major mode inherits from QUALIFIER." (:description "derived mode" @@ -1038,7 +1035,7 @@ currently used by buffers." (intern (completing-read "Filter by derived mode: " (ibuffer-list-buffer-modes t) - nil nil ""))) + nil t))) (with-current-buffer buf (derived-mode-p qualifier))) ;;;###autoload (autoload 'ibuffer-filter-by-name "ibuf-ext") @@ -1480,19 +1477,16 @@ You can then feed the file name(s) to other commands with \\[yank]." (defun ibuffer-mark-by-mode (mode) "Mark all buffers whose major mode equals MODE." (interactive - (list (intern (completing-read "Mark by major mode: " obarray - #'(lambda (e) - ;; kind of a hack... - (and (fboundp e) - (string-match "-mode$" - (symbol-name e)))) - t - (let ((buf (ibuffer-current-buffer))) - (if (and buf (buffer-live-p buf)) - (with-current-buffer buf - (cons (symbol-name major-mode) - 0)) - "")))))) + (let* ((buf (ibuffer-current-buffer)) + (default (if (and buf (buffer-live-p buf)) + (symbol-name (buffer-local-value + 'major-mode buf))))) + (list (intern + (completing-read + (if default + (format "Mark by major mode (default %s): " default) + "Mark by major mode: ") + (ibuffer-list-buffer-modes) nil t nil nil default))))) (ibuffer-mark-on-buffer #'(lambda (buf) (eq (buffer-local-value 'major-mode buf) mode)))) diff --git a/lisp/ibuffer.el b/lisp/ibuffer.el index b8c000b6884..ffede147144 100644 --- a/lisp/ibuffer.el +++ b/lisp/ibuffer.el @@ -501,9 +501,8 @@ directory, like `default-directory'." (define-key map (kbd "s f") 'ibuffer-do-sort-by-filename/process) (define-key map (kbd "s m") 'ibuffer-do-sort-by-major-mode) - (define-key map (kbd "/ m") 'ibuffer-filter-by-mode) - (define-key map (kbd "/ M") 'ibuffer-filter-by-used-mode) - (define-key map (kbd "/ w") 'ibuffer-filter-by-derived-mode) + (define-key map (kbd "/ m") 'ibuffer-filter-by-used-mode) + (define-key map (kbd "/ M") 'ibuffer-filter-by-derived-mode) (define-key map (kbd "/ n") 'ibuffer-filter-by-name) (define-key map (kbd "/ c") 'ibuffer-filter-by-content) (define-key map (kbd "/ e") 'ibuffer-filter-by-predicate) @@ -2646,7 +2645,7 @@ will be inserted before the group at point." ;;;;;; ibuffer-backward-filter-group ibuffer-forward-filter-group ;;;;;; ibuffer-toggle-filter-group ibuffer-mouse-toggle-filter-group ;;;;;; ibuffer-interactive-filter-by-mode ibuffer-mouse-filter-by-mode -;;;;;; ibuffer-auto-mode) "ibuf-ext" "ibuf-ext.el" "b2b8f11ad22546ad05d6db0b7d388ac1") +;;;;;; ibuffer-auto-mode) "ibuf-ext" "ibuf-ext.el" "98491557b04909791f687f2eecc88320") ;;; Generated autoloads from ibuf-ext.el (autoload 'ibuffer-auto-mode "ibuf-ext" "\ @@ -2836,6 +2835,7 @@ Set this buffer's filters to filters with NAME from `ibuffer-saved-filters'. \(fn NAME)" t nil) (autoload 'ibuffer-filter-by-mode "ibuf-ext") (autoload 'ibuffer-filter-by-used-mode "ibuf-ext") + (autoload 'ibuffer-filter-by-derived-mode "ibuf-ext") (autoload 'ibuffer-filter-by-name "ibuf-ext") (autoload 'ibuffer-filter-by-filename "ibuf-ext") (autoload 'ibuffer-filter-by-size-gt "ibuf-ext") From acb71f1dad7b265eef5c5111bf15c3c612d1b19f Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Tue, 24 Apr 2012 13:34:50 +0800 Subject: [PATCH 162/564] Ensure that X selection convertors properly encode returned strings. Though not itself a regression, this bug was exposed by the support for MULTIPLE selections, which is new to Emacs 24 (see Bug#11315). * lisp/select.el (xselect--encode-string): New function, split from xselect-convert-to-string. (xselect-convert-to-string): Use it. (xselect-convert-to-filename, xselect-convert-to-os) (xselect-convert-to-host, xselect-convert-to-user): Ensure that returned strings are properly encoded. --- lisp/ChangeLog | 9 +++++++++ lisp/select.el | 47 +++++++++++++++++++++++++---------------------- 2 files changed, 34 insertions(+), 22 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index eb293610a67..834f54bc96e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,12 @@ +2012-04-24 Chong Yidong + + * select.el (xselect--encode-string): New function, split from + xselect-convert-to-string. + (xselect-convert-to-string): Use it. + (xselect-convert-to-filename, xselect-convert-to-os) + (xselect-convert-to-host, xselect-convert-to-user): Ensure that + returned strings are properly encoded (Bug#11315). + 2012-04-22 Chong Yidong * simple.el (delete-active-region): Move to killing custom group. diff --git a/lisp/select.el b/lisp/select.el index 0260eba4682..3948fcc5456 100644 --- a/lisp/select.el +++ b/lisp/select.el @@ -213,30 +213,25 @@ two markers or an overlay. Otherwise, it is nil." (defun xselect--int-to-cons (n) (cons (ash n -16) (logand n 65535))) -(defun xselect-convert-to-string (_selection type value) - (let (str coding) - ;; Get the actual string from VALUE. - (cond ((stringp value) - (setq str value)) - ((setq value (xselect--selection-bounds value)) - (with-current-buffer (nth 2 value) - (setq str (buffer-substring (nth 0 value) - (nth 1 value)))))) - (when str - ;; If TYPE is nil, this is a local request, thus return STR as - ;; is. Otherwise, encode STR. - (if (not type) - str - (setq coding (or next-selection-coding-system selection-coding-system)) +(defun xselect--encode-string (type str &optional can-modify) + (when str + ;; If TYPE is nil, this is a local request; return STR as-is. + (if (null type) + str + ;; Otherwise, encode STR. + (let ((coding (or next-selection-coding-system + selection-coding-system))) (if coding (setq coding (coding-system-base coding))) (let ((inhibit-read-only t)) ;; Suppress producing escape sequences for compositions. + ;; But avoid modifying the string if it's a buffer name etc. + (unless can-modify (setq str (substring str 0))) (remove-text-properties 0 (length str) '(composition nil) str) + ;; TEXT is a polymorphic target. Select the actual type + ;; from `UTF8_STRING', `COMPOUND_TEXT', `STRING', and + ;; `C_STRING'. (if (eq type 'TEXT) - ;; TEXT is a polymorphic target. We must select the - ;; actual type from `UTF8_STRING', `COMPOUND_TEXT', - ;; `STRING', and `C_STRING'. (if (not (multibyte-string-p str)) (setq type 'C_STRING) (let (non-latin-1 non-unicode eight-bit) @@ -279,6 +274,14 @@ two markers or an overlay. Otherwise, it is nil." (setq next-selection-coding-system nil) (cons type str)))) +(defun xselect-convert-to-string (_selection type value) + (let ((str (cond ((stringp value) value) + ((setq value (xselect--selection-bounds value)) + (with-current-buffer (nth 2 value) + (buffer-substring (nth 0 value) + (nth 1 value))))))) + (xselect--encode-string type str t))) + (defun xselect-convert-to-length (_selection _type value) (let ((len (cond ((stringp value) (length value)) @@ -311,7 +314,7 @@ two markers or an overlay. Otherwise, it is nil." (defun xselect-convert-to-filename (_selection _type value) (when (setq value (xselect--selection-bounds value)) - (buffer-file-name (nth 2 value)))) + (xselect--encode-string 'TEXT (buffer-file-name (nth 2 value))))) (defun xselect-convert-to-charpos (_selection _type value) (when (setq value (xselect--selection-bounds value)) @@ -337,13 +340,13 @@ two markers or an overlay. Otherwise, it is nil." (xselect--int-to-cons (max beg end)))))))) (defun xselect-convert-to-os (_selection _type _size) - (symbol-name system-type)) + (xselect--encode-string 'TEXT (symbol-name system-type))) (defun xselect-convert-to-host (_selection _type _size) - (system-name)) + (xselect--encode-string 'TEXT (system-name))) (defun xselect-convert-to-user (_selection _type _size) - (user-full-name)) + (xselect--encode-string 'TEXT (user-full-name))) (defun xselect-convert-to-class (_selection _type _size) "Convert selection to class. From a59d531e94ac7f76221d516999248b50dc95bfd1 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Tue, 24 Apr 2012 09:09:27 +0200 Subject: [PATCH 163/564] Obsoleted argument list of `dbus-register-signal'. --- etc/NEWS | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/etc/NEWS b/etc/NEWS index edac7f58eaa..bae92c109a1 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -157,6 +157,11 @@ The function `user-variable-p' is now an obsolete alias for ** `face-spec-set' no longer sets frame-specific attributes when the third argument is a frame (that usage was obsolete since Emacs 22.2). ++++ +** The arguments of `dbus-register-signal' are no longer just strings, +but keywords or keyword-string pairs. The old argument list will +still be supported for Emacs 24.x. + * Lisp changes in Emacs 24.2 From d69621ccc6e29c793efd767c5595e2b2413350f4 Mon Sep 17 00:00:00 2001 From: Juanma Barranquero Date: Tue, 24 Apr 2012 10:35:02 +0200 Subject: [PATCH 164/564] src/gnutls.c: Fix previous change. (init_gnutls_functions): Protect against (unlikely) manipulation of :loaded-from data. --- src/ChangeLog | 5 +++++ src/gnutls.c | 8 ++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 73e54c21a60..30ba6d6c4a9 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2012-04-24 Juanma Barranquero + + * gnutls.c (init_gnutls_functions): Protect against (unlikely) + manipulation of :loaded-from data. + 2012-04-23 Juanma Barranquero * gnutls.c (init_gnutls_functions): The value of :loaded-from is diff --git a/src/gnutls.c b/src/gnutls.c index 09268aee397..cf471314849 100644 --- a/src/gnutls.c +++ b/src/gnutls.c @@ -200,8 +200,12 @@ init_gnutls_functions (Lisp_Object libraries) max_log_level = global_gnutls_log_level; - GNUTLS_LOG2 (1, max_log_level, "GnuTLS library loaded:", - SDATA (XCAR (Fget (Qgnutls_dll, QCloaded_from)))); + { + Lisp_Object name = CAR_SAFE (Fget (Qgnutls_dll, QCloaded_from)); + GNUTLS_LOG2 (1, max_log_level, "GnuTLS library loaded:", + STRINGP (name) ? (const char *) SDATA (name) : "unknown"); + } + return 1; } From b1bac16eadc78ea3c72626f651d53f17065dcd0a Mon Sep 17 00:00:00 2001 From: Martin Rudalics Date: Tue, 24 Apr 2012 10:56:31 +0200 Subject: [PATCH 165/564] Don't clear echo area prematurely when handling select window events (Bug#11304). * keyboard.c (read_char): Don't wipe echo area for select window events: These might get delayed via `mouse-autoselect-window' (Bug#11304). * window.el (handle-select-window): Clear echo area since this is no more done by read_char (Bug#11304). --- lisp/ChangeLog | 5 +++++ lisp/window.el | 2 ++ src/ChangeLog | 6 ++++++ src/keyboard.c | 5 ++++- 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 848fc434956..1b5c9d75e9e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-04-24 Martin Rudalics + + * window.el (handle-select-window): Clear echo area since this is + no more done by read_char (Bug#11304). + 2012-04-24 Stefan Monnier * ibuffer.el (ibuffer-mode-map): Bind `/ m' to filter-used-mode diff --git a/lisp/window.el b/lisp/window.el index c148f5ee01f..b8f1bf3456d 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -5727,6 +5727,8 @@ is active. This function is run by `mouse-autoselect-window-timer'." (setq mouse-autoselect-window-state nil) ;; Run `mouse-leave-buffer-hook' when autoselecting window. (run-hooks 'mouse-leave-buffer-hook)) + ;; Clear echo area. + (message nil) (select-window window)))) (defun truncated-partial-width-window-p (&optional window) diff --git a/src/ChangeLog b/src/ChangeLog index 30ba6d6c4a9..3fccf8cc439 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2012-04-24 Martin Rudalics + + * keyboard.c (read_char): Don't wipe echo area for select window + events: These might get delayed via `mouse-autoselect-window' + (Bug#11304). + 2012-04-24 Juanma Barranquero * gnutls.c (init_gnutls_functions): Protect against (unlikely) diff --git a/src/keyboard.c b/src/keyboard.c index 614746e35b2..48b31d8b564 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -2984,7 +2984,10 @@ read_char (int commandflag, ptrdiff_t nmaps, Lisp_Object *maps, own stuff with the echo area. */ if (!CONSP (c) || (!(EQ (Qhelp_echo, XCAR (c))) - && !(EQ (Qswitch_frame, XCAR (c))))) + && !(EQ (Qswitch_frame, XCAR (c))) + /* Don't wipe echo area for select window events: These might + get delayed via `mouse-autoselect-window' (Bug#11304). */ + && !(EQ (Qselect_window, XCAR (c))))) { if (!NILP (echo_area_buffer[0])) safe_run_hooks (Qecho_area_clear_hook); From 257440aa1c368048203a111db15f5a791a07f53f Mon Sep 17 00:00:00 2001 From: Leo Liu Date: Tue, 24 Apr 2012 22:58:29 +0800 Subject: [PATCH 166/564] * lisp/progmodes/python.el: Move hideshow setup to the end. --- lisp/ChangeLog | 4 ++++ lisp/progmodes/python.el | 20 +++++++++++--------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 1b5c9d75e9e..b1f1ad99b23 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-04-24 Leo Liu + + * progmodes/python.el: Move hideshow setup to the end. + 2012-04-24 Martin Rudalics * window.el (handle-select-window): Clear echo area since this is diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index 2922330e6f9..f88d77d214d 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -2468,15 +2468,6 @@ with skeleton expansions for compound statement templates. nil t) (add-hook 'completion-at-point-functions 'python-completion-at-point nil 'local) - ;; Fixme: should be in hideshow. This seems to be of limited use - ;; since it isn't (can't be) indentation-based. Also hide-level - ;; doesn't seem to work properly. - (add-to-list 'hs-special-modes-alist - `(python-mode "^\\s-*\\(?:def\\|class\\)\\>" nil "#" - ,(lambda (_arg) - (python-end-of-defun) - (skip-chars-backward " \t\n")) - nil)) (set (make-local-variable 'skeleton-further-elements) '((< '(backward-delete-char-untabify (min python-indent (current-column)))) @@ -2717,6 +2708,17 @@ comint believe the user typed this string so that ;; continue standard unloading nil) +;;;; Finish up +;; Fixme: should be in hideshow. This seems to be of limited use +;; since it isn't (can't be) indentation-based. Also hide-level +;; doesn't seem to work properly. +(add-to-list 'hs-special-modes-alist + `(python-mode "^\\s-*\\(?:def\\|class\\)\\>" nil "#" + ,(lambda (_arg) + (python-end-of-defun) + (skip-chars-backward " \t\n")) + nil)) + (provide 'python) (provide 'python-21) From b613912badfb9050e6310ee14fddc90e0fd16b2c Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Tue, 24 Apr 2012 17:19:07 +0200 Subject: [PATCH 167/564] * notifications.el (notifications-interface) (notifications-notify-method, notifications-notify) (notifications-close-notification-method): Fix docstring. (notifications-get-capabilities-method): New defconst. (notifications-get-capabilities): New defun. * os.texi: (Notifications): Add notifications-get-capabilities. --- doc/lispref/ChangeLog | 4 ++++ doc/lispref/os.texi | 39 +++++++++++++++++++++++++++++++++++++++ lisp/ChangeLog | 8 ++++++++ lisp/notifications.el | 36 +++++++++++++++++++++++++++++++++--- 4 files changed, 84 insertions(+), 3 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index cc5660653f6..3bb2abd7cfe 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,7 @@ +2012-04-24 Michael Albinus + + * os.texi: (Notifications): Add notifications-get-capabilities. + 2012-04-20 Chong Yidong * processes.texi (Asynchronous Processes): Mention nil argument to diff --git a/doc/lispref/os.texi b/doc/lispref/os.texi index aae2e4434d7..424cddaff0a 100644 --- a/doc/lispref/os.texi +++ b/doc/lispref/os.texi @@ -2355,6 +2355,9 @@ by the user. The function receive the notification @var{id} and the closing @end itemize @end table +Which parameters are accepted by the notification server can be +checked via @code{notifications-get-capabilities}. + This function returns a notification id, an integer, which can be used to manipulate the notification item with @code{notifications-close-notification} or the @code{:replaces-id} @@ -2395,6 +2398,42 @@ A message window opens on the desktop. Press "I agree" This function closes a notification with identifier @var{id}. @end defun +@defun notifications-get-capabilities +Returns the capabilities of the notification server, a list of strings. +The following capabilities can be expected: + +@table @asis +@item "actions" +The server will provide the specified actions to the user. + +@item "body" +Supports body text. + +@item "body-hyperlinks" +The server supports hyperlinks in the notifications. + +@item "body-images" +The server supports images in the notifications. + +@item "body-markup" +Supports markup in the body text. + +@item "icon-multi" +The server will render an animation of all the frames in a given image +array. + +@item "icon-static" +Supports display of exactly 1 frame of any given image array. This +value is mutually exclusive with "icon-multi". + +@item "sound" +The server supports sounds on notifications. +@end table + +Further vendor-specific caps start with "x-vendor", like "x-gnome-foo-cap". +@end defun + + @node Dynamic Libraries @section Dynamically Loaded Libraries @cindex dynamic libraries diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b1f1ad99b23..269d72e3754 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,11 @@ +2012-04-24 Michael Albinus + + * notifications.el (notifications-interface) + (notifications-notify-method, notifications-notify) + (notifications-close-notification-method): Fix docstring. + (notifications-get-capabilities-method): New defconst. + (notifications-get-capabilities): New defun. + 2012-04-24 Leo Liu * progmodes/python.el: Move hideshow setup to the end. diff --git a/lisp/notifications.el b/lisp/notifications.el index b825eb65abf..9dad2a91b93 100644 --- a/lisp/notifications.el +++ b/lisp/notifications.el @@ -64,13 +64,16 @@ "D-Bus notifications service path.") (defconst notifications-interface "org.freedesktop.Notifications" - "D-Bus notifications service path.") + "D-Bus notifications service interface.") (defconst notifications-notify-method "Notify" - "D-Bus notifications service path.") + "D-Bus notifications notify method.") (defconst notifications-close-notification-method "CloseNotification" - "D-Bus notifications service path.") + "D-Bus notifications close notification method.") + +(defconst notifications-get-capabilities-method "GetCapabilities" + "D-Bus notifications get capabilities method.") (defconst notifications-action-signal "ActionInvoked" "D-Bus notifications action signal.") @@ -188,6 +191,9 @@ Various PARAMS can be set: - `undefined' if the notification server hasn't provided a reason +Which parameters are accepted by the notification server can be +checked via `notifications-get-capabilities'. + This function returns a notification id, an integer, which can be used to manipulate the notification item with `notifications-close-notification' or the `:replaces-id' argument @@ -322,4 +328,28 @@ of another `notifications-notify' call." notifications-close-notification-method :int32 id)) +(defun notifications-get-capabilities () + "Return the capabilities of the notification server, a list of strings. +The following capabilities can be expected: + + \"actions\" The server will provide the specified actions + to the user. + \"body\" Supports body text. + \"body-hyperlinks\" The server supports hyperlinks in the notifications. + \"body-images\" The server supports images in the notifications. + \"body-markup\" Supports markup in the body text. + \"icon-multi\" The server will render an animation of all the + frames in a given image array. + \"icon-static\" Supports display of exactly 1 frame of any + given image array. This value is mutually exclusive + with \"icon-multi\". + \"sound\" The server supports sounds on notifications. + +Further vendor-specific caps start with \"x-vendor\", like \"x-gnome-foo-cap\"." + (dbus-call-method :session + notifications-service + notifications-path + notifications-interface + notifications-get-capabilities-method)) + (provide 'notifications) From 85222d4485aaaf5b308859988ac3d06212e6bf3f Mon Sep 17 00:00:00 2001 From: Dmitry Gutov Date: Tue, 24 Apr 2012 11:51:14 -0400 Subject: [PATCH 168/564] * lisp/progmodes/ruby-mode.el: Handle general delimited literals. (ruby-syntax-general-delimiters-goto-beg) (ruby-syntax-propertize-general-delimiters): New functions. (ruby-syntax-propertize-function): Use them to handle GDL. (ruby-font-lock-keywords): Move old handling of GDL... (ruby-font-lock-syntactic-keywords): .. to here. (ruby-calculate-indent): Adjust indentation for GDL. Fixes: debbugs:6286 --- lisp/ChangeLog | 10 +++++++ lisp/progmodes/ruby-mode.el | 52 ++++++++++++++++++++++++++++++++----- 2 files changed, 56 insertions(+), 6 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b1f1ad99b23..03fbfd83255 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,13 @@ +2012-04-24 Dmitry Gutov + + * progmodes/ruby-mode.el: Handle general delimited literals (bug#6286). + (ruby-syntax-general-delimiters-goto-beg) + (ruby-syntax-propertize-general-delimiters): New functions. + (ruby-syntax-propertize-function): Use them to handle GDL. + (ruby-font-lock-keywords): Move old handling of GDL... + (ruby-font-lock-syntactic-keywords): .. to here. + (ruby-calculate-indent): Adjust indentation for GDL. + 2012-04-24 Leo Liu * progmodes/python.el: Move hideshow setup to the end. diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el index 66aa256f947..05a4042b67d 100644 --- a/lisp/progmodes/ruby-mode.el +++ b/lisp/progmodes/ruby-mode.el @@ -794,8 +794,8 @@ and `\\' when preceded by `?'." ;; (not (or (eolp) (looking-at "#") ;; (and (eq (car (nth 1 state)) ?{) ;; (looking-at "|")))))) - (or (not (eq ?/ c)) - (null (nth 0 (ruby-parse-region (or begin parse-start) (point))))) + ;; not a regexp or general delimited literal + (null (nth 0 (ruby-parse-region (or begin parse-start) (point)))) (or (not (eq ?| (char-after (point)))) (save-excursion (or (eolp) (forward-char -1)) @@ -1118,6 +1118,7 @@ See `add-log-current-defun-function'." "Syntactic keywords for Ruby mode. See `syntax-propertize-function'." (goto-char start) (ruby-syntax-propertize-heredoc end) + (ruby-syntax-general-delimiters-goto-beg) (funcall (syntax-propertize-rules ;; #{ }, #$hoge, #@foo are not comments @@ -1137,7 +1138,10 @@ See `add-log-current-defun-function'." ("^\\(=\\)begin\\_>" (1 "!")) ;; Handle here documents. ((concat ruby-here-doc-beg-re ".*\\(\n\\)") - (7 (prog1 "\"" (ruby-syntax-propertize-heredoc end))))) + (7 (prog1 "\"" (ruby-syntax-propertize-heredoc end)))) + ;; Handle percent literals: %w(), %q{}, etc. + ("\\(?:^\\|[[ \t\n<+(,=]\\)\\(%\\)[qQrswWx]?\\([[:punct:]]\\)" + (1 (prog1 "|" (ruby-syntax-propertize-general-delimiters end))))) (point) end)) (defun ruby-syntax-propertize-heredoc (limit) @@ -1163,6 +1167,41 @@ See `add-log-current-defun-function'." ;; Make extra sure we don't move back, lest we could fall into an ;; inf-loop. (if (< (point) start) (goto-char start)))))) + + (defun ruby-syntax-general-delimiters-goto-beg () + (let ((state (syntax-ppss))) + ;; Move to the start of the literal, in case it's multiline. + ;; TODO: determine the literal type more reliably here? + (when (eq t (nth 3 state)) + (goto-char (nth 8 state)) + (beginning-of-line)))) + + (defun ruby-syntax-propertize-general-delimiters (limit) + (goto-char (match-beginning 2)) + (let* ((op (char-after)) + (ops (char-to-string op)) + (cl (or (cdr (aref (syntax-table) op)) + (cdr (assoc op '((?< . ?>)))))) + parse-sexp-lookup-properties) + (ignore-errors + (if cl + (progn ; paired delimiters + ;; Delimiter pairs of the same kind can be nested + ;; inside the literal, as long as they are balanced. + ;; Create syntax table that ignores other characters. + (with-syntax-table (make-char-table 'syntax-table nil) + (modify-syntax-entry op (concat "(" (char-to-string cl))) + (modify-syntax-entry cl (concat ")" ops)) + (modify-syntax-entry ?\\ "\\") + (save-restriction + (narrow-to-region (point) limit) + (forward-list)))) ; skip to the paired character + ;; single character delimiter + (re-search-forward (concat "[^\\]\\(?:\\\\\\\\\\)*" + (regexp-quote ops)) limit nil)) + ;; if we reached here, the closing delimiter was found + (put-text-property (1- (point)) (point) + 'syntax-table (string-to-syntax "|"))))) ) ;; For Emacsen where syntax-propertize-rules is not (yet) available, @@ -1207,6 +1246,10 @@ This should only be called after matching against `ruby-here-doc-end-re'." (4 (7 . ?/)) (6 (7 . ?/))) ("^=en\\(d\\)\\_>" 1 "!") + ;; general delimited string + ("\\(^\\|[[ \t\n<+(,=]\\)\\(%[xrqQwW]?\\([^<[{(a-zA-Z0-9 \n]\\)[^\n\\\\]*\\(\\\\.[^\n\\\\]*\\)*\\(\\3\\)\\)" + (3 "\"") + (5 "\"")) ("^\\(=\\)begin\\_>" 1 (ruby-comment-beg-syntax)) ;; Currently, the following case is highlighted incorrectly: ;; @@ -1415,9 +1458,6 @@ See `font-lock-syntax-table'.") 1 font-lock-variable-name-face) '("\\(\\$\\|@\\|@@\\)\\(\\w\\|_\\)+" 0 font-lock-variable-name-face) - ;; general delimited string - '("\\(^\\|[[ \t\n<+(,=]\\)\\(%[xrqQwW]?\\([^<[{(a-zA-Z0-9 \n]\\)[^\n\\\\]*\\(\\\\.[^\n\\\\]*\\)*\\(\\3\\)\\)" - (2 font-lock-string-face)) ;; constants '("\\(^\\|[^_]\\)\\b\\([A-Z]+\\(\\w\\|_\\)*\\)" 2 font-lock-type-face) From 51a8ea2acf100a3a0ab783632c5fbcdb665a2e14 Mon Sep 17 00:00:00 2001 From: Dmitry Gutov Date: Tue, 24 Apr 2012 12:00:08 -0400 Subject: [PATCH 169/564] * lisp/progmodes/ruby-mode.el: Handle Cucumber defs (bug#6286). (ruby-syntax-propertize-regexp): New function. (ruby-syntax-propertize-function): Use it to handle regexp not preceded by a special keyword. --- lisp/ChangeLog | 5 +++++ lisp/progmodes/ruby-mode.el | 20 +++++++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 03fbfd83255..2328cf99c1a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,10 @@ 2012-04-24 Dmitry Gutov + * progmodes/ruby-mode.el: Handle Cucumber defs (bug#6286). + (ruby-syntax-propertize-regexp): New function. + (ruby-syntax-propertize-function): Use it to handle regexp not preceded + by a special keyword. + * progmodes/ruby-mode.el: Handle general delimited literals (bug#6286). (ruby-syntax-general-delimiters-goto-beg) (ruby-syntax-propertize-general-delimiters): New functions. diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el index 05a4042b67d..8818911159b 100644 --- a/lisp/progmodes/ruby-mode.el +++ b/lisp/progmodes/ruby-mode.el @@ -1131,9 +1131,8 @@ See `add-log-current-defun-function'." (nth 3 (syntax-ppss (match-beginning 0)))) (string-to-syntax "\\")))) ;; regexps - ("\\(^\\|[[=(,~?:;<>]\\|\\(^\\|\\s \\)\\(if\\|elsif\\|unless\\|while\\|until\\|when\\|and\\|or\\|&&\\|||\\)\\|g?sub!?\\|scan\\|split!?\\)\\s *\\(/\\)[^/\n\\\\]*\\(\\\\.[^/\n\\\\]*\\)*\\(/\\)" - (4 "\"/") - (6 "\"/")) + ("\\(^\\|[[=(,~?:;<>]\\|\\(?:^\\|\\s \\)\\(?:if\\|elsif\\|unless\\|while\\|until\\|when\\|and\\|or\\|&&\\|||\\)\\|g?sub!?\\|scan\\|split!?\\)?\\s *\\(/\\)[^/\n\\\\]*\\(?:\\\\.[^/\n\\\\]*\\)*\\(/\\)" + (2 (ruby-syntax-propertize-regexp))) ("^=en\\(d\\)\\_>" (1 "!")) ("^\\(=\\)begin\\_>" (1 "!")) ;; Handle here documents. @@ -1144,6 +1143,21 @@ See `add-log-current-defun-function'." (1 (prog1 "|" (ruby-syntax-propertize-general-delimiters end))))) (point) end)) + (defun ruby-syntax-propertize-regexp () + (let ((syn (string-to-syntax "\"/"))) + (goto-char (match-end 3)) + (if (or + ;; after paren, comma, operator, control flow keyword, + ;; or a method from hardcoded list + (match-beginning 1) + ;; followed by comma or block + (looking-at "[imxo]*\\s *\\(?:,\\|\\\\)")) + (progn + (put-text-property (1- (point)) (point) + 'syntax-table syn) + syn) + (goto-char (match-end 2))))) + (defun ruby-syntax-propertize-heredoc (limit) (let ((ppss (syntax-ppss)) (res '())) From dfbd787fe6a5684d699926d698aaf9166812a81b Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 24 Apr 2012 13:06:12 -0400 Subject: [PATCH 170/564] * lisp/progmodes/ruby-mode.el: Simplify last change, and cleanup code. (ruby-syntax-propertize-regexp): Remove. (ruby-syntax-propertize-function): Split regexp into chunks. Match following code directly. * test/indent/ruby.rb: New file, to test new syntax-propertize code. --- lisp/ChangeLog | 7 +++++ lisp/progmodes/ruby-mode.el | 63 ++++++++++++++++++++----------------- test/ChangeLog | 4 +++ test/indent/ruby.rb | 19 +++++++++++ 4 files changed, 65 insertions(+), 28 deletions(-) create mode 100644 test/indent/ruby.rb diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 2328cf99c1a..6ae22e6948f 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2012-04-24 Stefan Monnier + + * progmodes/ruby-mode.el: Simplify last change, and cleanup code. + (ruby-syntax-propertize-regexp): Remove. + (ruby-syntax-propertize-function): Split regexp into chunks. + Match following code directly. + 2012-04-24 Dmitry Gutov * progmodes/ruby-mode.el: Handle Cucumber defs (bug#6286). diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el index 8818911159b..5d79437c3c2 100644 --- a/lisp/progmodes/ruby-mode.el +++ b/lisp/progmodes/ruby-mode.el @@ -784,7 +784,7 @@ and `\\' when preceded by `?'." (not (looking-at "[a-z_]")))) (and (looking-at ruby-operator-re) (not (ruby-special-char-p)) - ;; operator at the end of line + ;; Operator at the end of line. (let ((c (char-after (point)))) (and ;; (or (null begin) @@ -794,8 +794,9 @@ and `\\' when preceded by `?'." ;; (not (or (eolp) (looking-at "#") ;; (and (eq (car (nth 1 state)) ?{) ;; (looking-at "|")))))) - ;; not a regexp or general delimited literal - (null (nth 0 (ruby-parse-region (or begin parse-start) (point)))) + ;; Not a regexp or general delimited literal. + (null (nth 0 (ruby-parse-region (or begin parse-start) + (point)))) (or (not (eq ?| (char-after (point)))) (save-excursion (or (eolp) (forward-char -1)) @@ -1110,6 +1111,8 @@ See `add-log-current-defun-function'." mlist))))) (declare-function ruby-syntax-propertize-heredoc "ruby-mode" (limit)) +(declare-function ruby-syntax-general-delimiters-goto-beg "ruby-mode" ()) +(declare-function ruby-syntax-propertize-general-delimiters "ruby-mode" (limit)) (if (eval-when-compile (fboundp #'syntax-propertize-rules)) ;; New code that works independently from font-lock. @@ -1121,18 +1124,37 @@ See `add-log-current-defun-function'." (ruby-syntax-general-delimiters-goto-beg) (funcall (syntax-propertize-rules - ;; #{ }, #$hoge, #@foo are not comments + ;; #{ }, #$hoge, #@foo are not comments. ("\\(#\\)[{$@]" (1 ".")) - ;; $' $" $` .... are variables - ;; ?' ?" ?` are ascii codes + ;; $' $" $` .... are variables. + ;; ?' ?" ?` are ascii codes. ("\\([?$]\\)[#\"'`]" (1 (unless (save-excursion ;; Not within a string. (nth 3 (syntax-ppss (match-beginning 0)))) (string-to-syntax "\\")))) - ;; regexps - ("\\(^\\|[[=(,~?:;<>]\\|\\(?:^\\|\\s \\)\\(?:if\\|elsif\\|unless\\|while\\|until\\|when\\|and\\|or\\|&&\\|||\\)\\|g?sub!?\\|scan\\|split!?\\)?\\s *\\(/\\)[^/\n\\\\]*\\(?:\\\\.[^/\n\\\\]*\\)*\\(/\\)" - (2 (ruby-syntax-propertize-regexp))) + ;; Regexps: regexps are distinguished from division either because + ;; of the keyword/symbol before them, or because of the code + ;; following them. + ((concat + ;; Special tokens that can't be followed by a division operator. + "\\(?:\\(^\\|[[=(,~?:;<>]\\|\\(?:^\\|\\s \\)" + (regexp-opt '("if" "elsif" "unless" "while" "until" "when" "and" + "or" "&&" "||" + "gsub" "gsub!" "sub" "sub!" "scan" "split" "split!")) + "\\)\\s *\\)?" + ;; The regular expression itself. + "\\(/\\)[^/\n\\\\]*\\(?:\\\\.[^/\n\\\\]*\\)*\\(/\\)" + ;; Special code that cannot follow a division operator. + ;; FIXME: Just because the second slash of "/foo/ do bar" can't + ;; be a division, doesn't mean it can't *start* a regexp, as in + ;; "x = toto/foo; if /do bar/". + "\\([imxo]*\\s *\\(?:,\\|\\_\\)\\)?") + (2 (when (or (match-beginning 1) (match-beginning 4)) + (string-to-syntax "\"/"))) + (3 (if (or (match-beginning 1) (match-beginning 4)) + (string-to-syntax "\"/") + (goto-char (match-end 2))))) ("^=en\\(d\\)\\_>" (1 "!")) ("^\\(=\\)begin\\_>" (1 "!")) ;; Handle here documents. @@ -1143,21 +1165,6 @@ See `add-log-current-defun-function'." (1 (prog1 "|" (ruby-syntax-propertize-general-delimiters end))))) (point) end)) - (defun ruby-syntax-propertize-regexp () - (let ((syn (string-to-syntax "\"/"))) - (goto-char (match-end 3)) - (if (or - ;; after paren, comma, operator, control flow keyword, - ;; or a method from hardcoded list - (match-beginning 1) - ;; followed by comma or block - (looking-at "[imxo]*\\s *\\(?:,\\|\\\\)")) - (progn - (put-text-property (1- (point)) (point) - 'syntax-table syn) - syn) - (goto-char (match-end 2))))) - (defun ruby-syntax-propertize-heredoc (limit) (let ((ppss (syntax-ppss)) (res '())) @@ -1199,7 +1206,7 @@ See `add-log-current-defun-function'." parse-sexp-lookup-properties) (ignore-errors (if cl - (progn ; paired delimiters + (progn ; Paired delimiters. ;; Delimiter pairs of the same kind can be nested ;; inside the literal, as long as they are balanced. ;; Create syntax table that ignores other characters. @@ -1210,10 +1217,10 @@ See `add-log-current-defun-function'." (save-restriction (narrow-to-region (point) limit) (forward-list)))) ; skip to the paired character - ;; single character delimiter + ;; Single character delimiter. (re-search-forward (concat "[^\\]\\(?:\\\\\\\\\\)*" (regexp-quote ops)) limit nil)) - ;; if we reached here, the closing delimiter was found + ;; If we reached here, the closing delimiter was found. (put-text-property (1- (point)) (point) 'syntax-table (string-to-syntax "|"))))) ) @@ -1260,7 +1267,7 @@ This should only be called after matching against `ruby-here-doc-end-re'." (4 (7 . ?/)) (6 (7 . ?/))) ("^=en\\(d\\)\\_>" 1 "!") - ;; general delimited string + ;; General delimited string. ("\\(^\\|[[ \t\n<+(,=]\\)\\(%[xrqQwW]?\\([^<[{(a-zA-Z0-9 \n]\\)[^\n\\\\]*\\(\\\\.[^\n\\\\]*\\)*\\(\\3\\)\\)" (3 "\"") (5 "\"")) diff --git a/test/ChangeLog b/test/ChangeLog index 66f8592c79c..ff38a8fa9e1 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,7 @@ +2012-04-24 Stefan Monnier + + * indent/ruby.rb: New file, to test new syntax-propertize code. + 2012-04-11 Glenn Morris * automated/vc-bzr.el (vc-bzr-test-faulty-bzr-autoloads): New test. diff --git a/test/indent/ruby.rb b/test/indent/ruby.rb new file mode 100644 index 00000000000..c4a747a1c78 --- /dev/null +++ b/test/indent/ruby.rb @@ -0,0 +1,19 @@ +# Don't mis-match "sub" at the end of words. +a = asub / aslb + bsub / bslb; + +b = %Q{This is a "string"} +c = %w(foo + bar + baz) +d = %!hello! + +# A "do" after a slash means that slash is not a division, but it doesn't imply +# it's a regexp-ender, since it can be a regexp-starter instead! +x = toto / foo; if /do bar/ then + toto = 1 + end + +# Some Cucumber code: +Given /toto/ do + print "hello" +end From e43042fe33b3cf184e31219d4aef08a5a59815f9 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Tue, 24 Apr 2012 19:56:30 +0200 Subject: [PATCH 171/564] * notifications.el (notifications-specification-version): Change to "1.2". (notifications-notify): Add :action-items, :resident and :transient hints. Change "image_data" to "image-data" and "image_path" to "image-path". (notifications-get-capabilities): Return a list of keywords. * os.texi (Notifications): Extend possible notification hints. --- doc/lispref/ChangeLog | 3 +- doc/lispref/os.texi | 43 ++++++++++++++++++-------- lisp/ChangeLog | 8 +++-- lisp/notifications.el | 72 ++++++++++++++++++++++++++++++------------- 4 files changed, 89 insertions(+), 37 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 3bb2abd7cfe..1c37e1600f4 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,6 +1,7 @@ 2012-04-24 Michael Albinus - * os.texi: (Notifications): Add notifications-get-capabilities. + * os.texi (Notifications): Extend possible notification hints. + Add notifications-get-capabilities. 2012-04-20 Chong Yidong diff --git a/doc/lispref/os.texi b/doc/lispref/os.texi index 424cddaff0a..d825a3f18c4 100644 --- a/doc/lispref/os.texi +++ b/doc/lispref/os.texi @@ -2271,7 +2271,7 @@ The notification title. @item :body @var{text} The notification body text. Depending on the implementation of the notification server, the text could contain HTML markups, like -@samp{"bold text"}, or hyperlinks. +@samp{"bold text"}, hyperlinks, or images. @item :app-name @var{name} The name of the application sending the notification. The default is @@ -2301,6 +2301,10 @@ the notification never expires. Default value is -1. @item :urgency @var{urgency} The urgency level. It can be @code{low}, @code{normal}, or @code{critical}. +@item :action-items +When this keyword is given, the @var{title} string of the actions is +interpreted as icon name. + @item :category @var{category} The type of notification this is, a string. @@ -2331,6 +2335,17 @@ example would be @samp{"message-new-instant"}. Causes the server to suppress playing any sounds, if it has that ability. +@item :resident +When set the server will not automatically remove the notification +when an action has been invoked. The notification will remain resident +in the server until it is explicitly removed by the user or by the +sender. This hint is likely only useful when the server has the +@code{:persistence} capability. + +@item :transient +When set the server will treat the notification as transient and +by-pass the server's persistence capability, if it should exist. + @item :x @var{position} @itemx :y @var{position} Specifies the X, Y location on the screen that the @@ -2402,35 +2417,39 @@ This function closes a notification with identifier @var{id}. Returns the capabilities of the notification server, a list of strings. The following capabilities can be expected: -@table @asis -@item "actions" +@table @code +@item :actions The server will provide the specified actions to the user. -@item "body" +@item :body Supports body text. -@item "body-hyperlinks" +@item :body-hyperlinks The server supports hyperlinks in the notifications. -@item "body-images" +@item :body-images The server supports images in the notifications. -@item "body-markup" +@item :body-markup Supports markup in the body text. -@item "icon-multi" +@item :icon-multi The server will render an animation of all the frames in a given image array. -@item "icon-static" +@item :icon-static Supports display of exactly 1 frame of any given image array. This -value is mutually exclusive with "icon-multi". +value is mutually exclusive with @code{:icon-multi}. -@item "sound" +@item :persistence +The server supports persistence of notifications. + +@item :sound The server supports sounds on notifications. @end table -Further vendor-specific caps start with "x-vendor", like "x-gnome-foo-cap". +Further vendor-specific caps start with @code{:x-vendor}, like +@code{:x-gnome-foo-cap}. @end defun diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 0eda6b28936..13d401b8413 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -22,10 +22,14 @@ 2012-04-24 Michael Albinus - * notifications.el (notifications-interface) - (notifications-notify-method, notifications-notify) + * notifications.el (notifications-specification-version): Change + to "1.2". + (notifications-interface, notifications-notify-method) (notifications-close-notification-method): Fix docstring. (notifications-get-capabilities-method): New defconst. + (notifications-notify): Add :action-items, :resident and + :transient hints. Change "image_data" to "image-data" and + "image_path" to "image-path". (notifications-get-capabilities): New defun. 2012-04-24 Leo Liu diff --git a/lisp/notifications.el b/lisp/notifications.el index 9dad2a91b93..1b24f530c6d 100644 --- a/lisp/notifications.el +++ b/lisp/notifications.el @@ -23,7 +23,7 @@ ;;; Commentary: ;; This package provides an implementation of the Desktop Notifications -;; . +;; . ;; In order to activate this package, you must add the following code ;; into your .emacs: @@ -45,7 +45,7 @@ (require 'dbus) -(defconst notifications-specification-version "1.1" +(defconst notifications-specification-version "1.2" "The version of the Desktop Notifications Specification implemented.") (defconst notifications-application-name "Emacs" @@ -157,6 +157,8 @@ Various PARAMS can be set: Default value is -1. :urgency The urgency level. Either `low', `normal' or `critical'. + :action-items Whether the TITLE of the actions is interpreted as + a named icon. :category The type of notification this is. :desktop-entry This specifies the name of the desktop filename representing the calling program. @@ -173,6 +175,11 @@ Various PARAMS can be set: be \"message-new-instant\". :suppress-sound Causes the server to suppress playing any sounds, if it has that ability. + :resident When set the server will not automatically remove the + notification when an action has been invoked. + :transient When set the server will treat the notification as transient + and by-pass the server's persistence capability, if it + should exist. :x Specifies the X location on the screen that the notification should point to. The \"y\" hint must also be specified. :y Specifies the Y location on the screen that the notification @@ -212,9 +219,12 @@ of another `notifications-notify' call." (desktop-entry (plist-get params :desktop-entry)) (image-data (plist-get params :image-data)) (image-path (plist-get params :image-path)) + (action-items (plist-get params :action-items)) (sound-file (plist-get params :sound-file)) (sound-name (plist-get params :sound-name)) (suppress-sound (plist-get params :suppress-sound)) + (resident (plist-get params :resident)) + (transient (plist-get params :transient)) (x (plist-get params :x)) (y (plist-get params :y)) id) @@ -236,12 +246,16 @@ of another `notifications-notify' call." (:variant :string ,desktop-entry)) t)) (when image-data (add-to-list 'hints `(:dict-entry - "image_data" + "image-data" (:variant :struct ,image-data)) t)) (when image-path (add-to-list 'hints `(:dict-entry - "image_path" + "image-path" (:variant :string ,image-path)) t)) + (when action-items + (add-to-list 'hints `(:dict-entry + "action-items" + (:variant :boolean ,action-items)) t)) (when sound-file (add-to-list 'hints `(:dict-entry "sound-file" @@ -254,6 +268,14 @@ of another `notifications-notify' call." (add-to-list 'hints `(:dict-entry "suppress-sound" (:variant :boolean ,suppress-sound)) t)) + (when resident + (add-to-list 'hints `(:dict-entry + "resident" + (:variant :boolean ,resident)) t)) + (when transient + (add-to-list 'hints `(:dict-entry + "transient" + (:variant :boolean ,transient)) t)) (when x (add-to-list 'hints `(:dict-entry "x" (:variant :int32 ,x)) t)) (when y @@ -332,24 +354,30 @@ of another `notifications-notify' call." "Return the capabilities of the notification server, a list of strings. The following capabilities can be expected: - \"actions\" The server will provide the specified actions - to the user. - \"body\" Supports body text. - \"body-hyperlinks\" The server supports hyperlinks in the notifications. - \"body-images\" The server supports images in the notifications. - \"body-markup\" Supports markup in the body text. - \"icon-multi\" The server will render an animation of all the - frames in a given image array. - \"icon-static\" Supports display of exactly 1 frame of any - given image array. This value is mutually exclusive - with \"icon-multi\". - \"sound\" The server supports sounds on notifications. + `:actions' The server will provide the specified actions + to the user. + `:action-icons' Supports using icons instead of text for + displaying actions. + `:body' Supports body text. + `:body-hyperlinks' The server supports hyperlinks in the notifications. + `:body-images' The server supports images in the notifications. + `:body-markup' Supports markup in the body text. + `:icon-multi' The server will render an animation of all the + frames in a given image array. + `:icon-static' Supports display of exactly 1 frame of any + given image array. This value is mutually exclusive + with `:icon-multi'. + `:persistence' The server supports persistence of notifications. + `:sound' The server supports sounds on notifications. -Further vendor-specific caps start with \"x-vendor\", like \"x-gnome-foo-cap\"." - (dbus-call-method :session - notifications-service - notifications-path - notifications-interface - notifications-get-capabilities-method)) +Further vendor-specific caps start with `:x-vendor', like `:x-gnome-foo-cap'." + (dbus-ignore-errors + (mapcar + (lambda (x) (intern (concat ":" x))) + (dbus-call-method :session + notifications-service + notifications-path + notifications-interface + notifications-get-capabilities-method)))) (provide 'notifications) From 42bf82050bdcbabaac3ee6cb44977bac22591296 Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Tue, 24 Apr 2012 21:05:25 +0200 Subject: [PATCH 172/564] * .gdbinit (xpr): Handle USE_2_TAGS_FOR_INTS. (xgetint): Add missing shift for LSB tags. --- src/.gdbinit | 13 ++++++++++--- src/ChangeLog | 5 +++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/.gdbinit b/src/.gdbinit index 7cd828733b1..13eca902d88 100644 --- a/src/.gdbinit +++ b/src/.gdbinit @@ -54,7 +54,7 @@ end define xgetint set $bugfix = $arg0 - set $int = gdb_use_union ? $bugfix.s.val : (gdb_use_lsb ? $bugfix : $bugfix << gdb_gctypebits) >> gdb_gctypebits + set $int = gdb_use_union ? $bugfix.s.val : (gdb_use_lsb ? $bugfix >> (gdb_gctypebits - 1) : $bugfix << gdb_gctypebits) >> gdb_gctypebits end define xgettype @@ -1003,8 +1003,15 @@ end define xpr xtype - if $type == Lisp_Int - xint + if gdb_use_union + if $type == Lisp_Int + xint + end + end + if !gdb_use_union + if $type == Lisp_Int0 || $type == Lisp_Int1 + xint + end end if $type == Lisp_Symbol xsymbol diff --git a/src/ChangeLog b/src/ChangeLog index 3fccf8cc439..06d65c7bf33 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2012-04-24 Andreas Schwab + + * .gdbinit (xpr): Handle USE_2_TAGS_FOR_INTS. + (xgetint): Add missing shift for LSB tags. + 2012-04-24 Martin Rudalics * keyboard.c (read_char): Don't wipe echo area for select window From 400386db61cea55ff62645e6d13fda216b5c66c7 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Tue, 24 Apr 2012 23:44:12 +0200 Subject: [PATCH 173/564] * notifications.el (notifications-get-capabilities): Fix docstring. --- lisp/notifications.el | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/lisp/notifications.el b/lisp/notifications.el index 1b24f530c6d..50c49750f73 100644 --- a/lisp/notifications.el +++ b/lisp/notifications.el @@ -354,21 +354,21 @@ of another `notifications-notify' call." "Return the capabilities of the notification server, a list of strings. The following capabilities can be expected: - `:actions' The server will provide the specified actions - to the user. - `:action-icons' Supports using icons instead of text for - displaying actions. - `:body' Supports body text. - `:body-hyperlinks' The server supports hyperlinks in the notifications. - `:body-images' The server supports images in the notifications. - `:body-markup' Supports markup in the body text. - `:icon-multi' The server will render an animation of all the - frames in a given image array. - `:icon-static' Supports display of exactly 1 frame of any - given image array. This value is mutually exclusive - with `:icon-multi'. - `:persistence' The server supports persistence of notifications. - `:sound' The server supports sounds on notifications. + :actions The server will provide the specified actions + to the user. + :action-icons Supports using icons instead of text for + displaying actions. + :body Supports body text. + :body-hyperlinks The server supports hyperlinks in the notifications. + :body-images The server supports images in the notifications. + :body-markup Supports markup in the body text. + :icon-multi The server will render an animation of all the + frames in a given image array. + :icon-static Supports display of exactly 1 frame of any + given image array. This value is mutually exclusive + with `:icon-multi'. + :persistence The server supports persistence of notifications. + :sound The server supports sounds on notifications. Further vendor-specific caps start with `:x-vendor', like `:x-gnome-foo-cap'." (dbus-ignore-errors From b53806394328b5766455adaf6ba2e9ca24bbad7f Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Tue, 24 Apr 2012 23:47:24 +0200 Subject: [PATCH 174/564] * notifications.el (top): Remove unneeded declarations. --- lisp/ChangeLog | 4 ++-- lisp/notifications.el | 6 ------ 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 13d401b8413..bdf6c7a1ac7 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -22,8 +22,8 @@ 2012-04-24 Michael Albinus - * notifications.el (notifications-specification-version): Change - to "1.2". + * notifications.el (top): Remove unneeded declarations. + (notifications-specification-version): Change to "1.2". (notifications-interface, notifications-notify-method) (notifications-close-notification-method): Fix docstring. (notifications-get-capabilities-method): New defconst. diff --git a/lisp/notifications.el b/lisp/notifications.el index 50c49750f73..83992834502 100644 --- a/lisp/notifications.el +++ b/lisp/notifications.el @@ -37,12 +37,6 @@ (eval-when-compile (require 'cl)) -;; Pacify byte-compiler. D-Bus support in the Emacs core can be -;; disabled with configuration option "--without-dbus". Declare used -;; subroutines and variables of `dbus' therefore. -(declare-function dbus-call-method "dbusbind.c") -(declare-function dbus-register-signal "dbusbind.c") - (require 'dbus) (defconst notifications-specification-version "1.2" From 0268cf45a7bb9dc1f62af9e19198cf93479b53b6 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Tue, 24 Apr 2012 23:52:37 +0200 Subject: [PATCH 175/564] Add `notifications-get-capabilities' of notifications.el. --- etc/NEWS | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/etc/NEWS b/etc/NEWS index bae92c109a1..3e296702065 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -137,6 +137,11 @@ details. +++ *** There is a new function `dbus-setenv'. ++++ +** notifications.el supports now version 1.2 of the Notifications API. +The function `notifications-get-capabilities' returns the supported +server properties. + ** Obsolete packages: *** mailpost.el From afc6df87865adae50b4ad2eea12d0771a144ee06 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Wed, 25 Apr 2012 11:07:57 +0300 Subject: [PATCH 176/564] Force interactive-mode in GDB on MS-Windows. lisp/progmodes/gdb-mi.el (gdb-init-1): Condition Windows-specific settings on 'system-type', not on 'window-system'. On MS-Windows, set interactive-mode on in GDB. --- lisp/ChangeLog | 6 ++++++ lisp/progmodes/gdb-mi.el | 9 +++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index bdf6c7a1ac7..e93cd07bda0 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2012-04-25 Eli Zaretskii + + * progmodes/gdb-mi.el (gdb-init-1): Condition Windows-specific + settings on 'system-type', not on 'window-system'. On MS-Windows, + set interactive-mode on in GDB. + 2012-04-24 Stefan Monnier * progmodes/ruby-mode.el: Simplify last change, and cleanup code. diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el index 1be74ff544b..9f9551cc5d8 100644 --- a/lisp/progmodes/gdb-mi.el +++ b/lisp/progmodes/gdb-mi.el @@ -862,8 +862,13 @@ detailed description of this mode. (gdb-clear-inferior-io) (gdb-inferior-io--init-proc (get-process "gdb-inferior")) - (if (eq window-system 'w32) - (gdb-input "-gdb-set new-console off" 'ignore)) + (when (eq system-type 'windows-nt) + ;; Don't create a separate console window for the debuggee. + (gdb-input "-gdb-set new-console off" 'ignore) + ;; Force GDB to behave as if its input and output stream were + ;; connected to a TTY device (since on Windows we use pipes for + ;; communicating with GDB). + (gdb-input "-gdb-set interactive-mode on" 'ignore)) (gdb-input "-gdb-set height 0" 'ignore) (when gdb-non-stop From 84412f2cbb7f282c15857493602b80f60e562051 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Wed, 25 Apr 2012 11:30:59 +0300 Subject: [PATCH 177/564] Better indexing of "base direction" of paragraphs in the user manual. doc/emacs/mule.texi (Bidirectional Editing): Improve indexing. Minor wording tweaks. --- doc/emacs/ChangeLog | 5 +++++ doc/emacs/mule.texi | 12 +++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index 18428c0ba48..deb10e0e488 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,3 +1,8 @@ +2012-04-25 Eli Zaretskii + + * mule.texi (Bidirectional Editing): Improve indexing. Minor + wording tweaks. + 2012-04-15 Chong Yidong * misc.texi (emacsclient Options): More clarifications. diff --git a/doc/emacs/mule.texi b/doc/emacs/mule.texi index 5f0e138deef..9c1d908f882 100644 --- a/doc/emacs/mule.texi +++ b/doc/emacs/mule.texi @@ -1763,15 +1763,17 @@ non-@code{nil}, Emacs reorders characters that have right-to-left directionality when they are displayed. The default value is @code{t}. +@cindex base direction of paragraphs +@cindex paragraph, base direction Each paragraph of bidirectional text can have its own @dfn{base direction}, either right-to-left or left-to-right. (Paragraph @c paragraph-separate etc have no influence on this? boundaries are empty lines, i.e.@: lines consisting entirely of -whitespace characters.) Text in left-to-right paragraphs begins at -the left margin of the window and is truncated or continued when it -reaches the right margin. By contrast, text in right-to-left -paragraphs begins at the right margin and is continued or truncated at -the left margin. +whitespace characters.) Text in left-to-right paragraphs begins on +the screen at the left margin of the window and is truncated or +continued when it reaches the right margin. By contrast, text in +right-to-left paragraphs is displayed starting at the right margin and +is continued or truncated at the left margin. @vindex bidi-paragraph-direction Emacs determines the base direction of each paragraph dynamically, From 1fc6097bfa931cf17f8a5b76ec8442e22d33c724 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Wed, 25 Apr 2012 16:38:11 +0800 Subject: [PATCH 178/564] * cus-edit.el (custom-buffer-create-internal): Update header text. --- lisp/ChangeLog | 4 ++++ lisp/cus-edit.el | 11 +++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e93cd07bda0..76b855e6bc9 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-04-25 Chong Yidong + + * cus-edit.el (custom-buffer-create-internal): Update header text. + 2012-04-25 Eli Zaretskii * progmodes/gdb-mi.el (gdb-init-1): Condition Windows-specific diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el index 4a003f2d043..8198a4594c4 100644 --- a/lisp/cus-edit.el +++ b/lisp/cus-edit.el @@ -1591,13 +1591,12 @@ Otherwise use brackets." (let ((init-file (or custom-file user-init-file))) ;; Insert verbose help at the top of the custom buffer. (when custom-buffer-verbose-help - (widget-insert (if init-file - "To apply changes, use the Save or Set buttons." - "Custom settings cannot be saved; maybe you started Emacs with `-q'.") - "\nFor details, see ") + (unless init-file + (widget-insert "Custom settings cannot be saved; maybe you started Emacs with `-q'.\n")) + (widget-insert "For help using this buffer, see ") (widget-create 'custom-manual - :tag "Saving Customizations" - "(emacs)Saving Customizations") + :tag "Easy Customization" + "(emacs)Easy Customization") (widget-insert " in the ") (widget-create 'custom-manual :tag "Emacs manual" From db9b177bcc4aabebebf604de7a0efc5b32981c5b Mon Sep 17 00:00:00 2001 From: Alex Harsanyi Date: Wed, 25 Apr 2012 12:28:29 +0200 Subject: [PATCH 179/564] Sync with soap-client repository. Support SOAP simpleType. (Bug#10331) * soap-client.el (soap-resolve-references-for-sequence-type) (soap-resolve-references-for-array-type): hack to prevent self references, see Bug#9. (soap-parse-envelope): report the contents of the 'detail' node when receiving a fault reply. (soap-parse-envelope): report the contents of the entire 'detail' node. * soap-inspect.el (soap-sample-value-for-simple-type) (soap-inspect-simple-type): new function * soap-client.el (soap-simple-type): new struct (soap-default-xsd-types, soap-default-soapenc-types) (soap-decode-basic-type, soap-encode-basic-type): support unsignedInt and double basic types (soap-resolve-references-for-simple-type) (soap-parse-simple-type, soap-encode-simple-type): new function (soap-parse-schema): parse xsd:simpleType declarations * soap-client.el (soap-default-xsd-types) (soap-default-soapenc-types): add integer, byte and anyURI types (soap-parse-complex-type-complex-content): use `soap-wk2l' to find the local name of "soapenc:Array" (soap-decode-basic-type, soap-encode-basic-type): support encoding decoding integer, byte and anyURI xsd types. --- lisp/ChangeLog | 30 +++++++++++ lisp/net/soap-client.el | 110 +++++++++++++++++++++++++++++++++------ lisp/net/soap-inspect.el | 25 +++++++++ 3 files changed, 149 insertions(+), 16 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 76b855e6bc9..533c1775ea9 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,33 @@ +2012-04-25 Alex Harsanyi + + Sync with soap-client repository. Support SOAP simpleType. (Bug#10331) + + * soap-client.el (soap-resolve-references-for-sequence-type) + (soap-resolve-references-for-array-type): hack to prevent self + references, see Bug#9. + (soap-parse-envelope): report the contents of the 'detail' node + when receiving a fault reply. + (soap-parse-envelope): report the contents of the entire 'detail' + node. + + * soap-inspect.el (soap-sample-value-for-simple-type) + (soap-inspect-simple-type): new function + + * soap-client.el (soap-simple-type): new struct + (soap-default-xsd-types, soap-default-soapenc-types) + (soap-decode-basic-type, soap-encode-basic-type): support + unsignedInt and double basic types + (soap-resolve-references-for-simple-type) + (soap-parse-simple-type, soap-encode-simple-type): new function + (soap-parse-schema): parse xsd:simpleType declarations + + * soap-client.el (soap-default-xsd-types) + (soap-default-soapenc-types): add integer, byte and anyURI types + (soap-parse-complex-type-complex-content): use `soap-wk2l' to find + the local name of "soapenc:Array" + (soap-decode-basic-type, soap-encode-basic-type): support encoding + decoding integer, byte and anyURI xsd types. + 2012-04-25 Chong Yidong * cus-edit.el (custom-buffer-create-internal): Update header text. diff --git a/lisp/net/soap-client.el b/lisp/net/soap-client.el index e17b283c55f..39369111935 100644 --- a/lisp/net/soap-client.el +++ b/lisp/net/soap-client.el @@ -369,6 +369,9 @@ binding) but the same name." kind ; a symbol of: string, dateTime, long, int ) +(defstruct (soap-simple-type (:include soap-basic-type)) + enumeration) + (defstruct soap-sequence-element name type nillable? multiple?) @@ -415,8 +418,9 @@ binding) but the same name." (defun soap-default-xsd-types () "Return a namespace containing some of the XMLSchema types." (let ((ns (make-soap-namespace :name "http://www.w3.org/2001/XMLSchema"))) - (dolist (type '("string" "dateTime" "boolean" "long" "int" "float" - "base64Binary" "anyType" "Array" "byte[]")) + (dolist (type '("string" "dateTime" "boolean" + "long" "int" "integer" "unsignedInt" "byte" "float" "double" + "base64Binary" "anyType" "anyURI" "Array" "byte[]")) (soap-namespace-put (make-soap-basic-type :name type :kind (intern type)) ns)) @@ -425,9 +429,10 @@ binding) but the same name." (defun soap-default-soapenc-types () "Return a namespace containing some of the SOAPEnc types." (let ((ns (make-soap-namespace - :name "http://schemas.xmlsoap.org/soap/encoding/"))) - (dolist (type '("string" "dateTime" "boolean" "long" "int" "float" - "base64Binary" "anyType" "Array" "byte[]")) + :name "http://schemas.xmlsoap.org/soap/encoding/"))) + (dolist (type '("string" "dateTime" "boolean" + "long" "int" "integer" "unsignedInt" "byte" "float" "double" + "base64Binary" "anyType" "anyURI" "Array" "byte[]")) (soap-namespace-put (make-soap-basic-type :name type :kind (intern type)) ns)) @@ -555,6 +560,15 @@ updated." (when resolver (funcall resolver element wsdl)))) +(defun soap-resolve-references-for-simple-type (type wsdl) + "Resolve the base type for the simple TYPE using the WSDL + document." + (let ((kind (soap-basic-type-kind type))) + (unless (symbolp kind) + (let ((basic-type (soap-wsdl-get kind wsdl 'soap-basic-type-p))) + (setf (soap-basic-type-kind type) + (soap-basic-type-kind basic-type)))))) + (defun soap-resolve-references-for-sequence-type (type wsdl) "Resolve references for a sequence TYPE using WSDL document. See also `soap-resolve-references-for-element' and @@ -562,12 +576,18 @@ See also `soap-resolve-references-for-element' and (let ((parent (soap-sequence-type-parent type))) (when (or (consp parent) (stringp parent)) (setf (soap-sequence-type-parent type) - (soap-wsdl-get parent wsdl 'soap-type-p)))) + (soap-wsdl-get + parent wsdl + ;; Prevent self references, see Bug#9 + (lambda (e) (and (not (eq e type)) (soap-type-p e))))))) (dolist (element (soap-sequence-type-elements type)) (let ((element-type (soap-sequence-element-type element))) (cond ((or (consp element-type) (stringp element-type)) (setf (soap-sequence-element-type element) - (soap-wsdl-get element-type wsdl 'soap-type-p))) + (soap-wsdl-get + element-type wsdl + ;; Prevent self references, see Bug#9 + (lambda (e) (and (not (eq e type)) (soap-type-p e)))))) ((soap-element-p element-type) ;; since the element already has a child element, it ;; could be an inline structure. we must resolve @@ -582,7 +602,10 @@ See also `soap-resolve-references-for-element' and (let ((element-type (soap-array-type-element-type type))) (when (or (consp element-type) (stringp element-type)) (setf (soap-array-type-element-type type) - (soap-wsdl-get element-type wsdl 'soap-type-p))))) + (soap-wsdl-get + element-type wsdl + ;; Prevent self references, see Bug#9 + (lambda (e) (and (not (eq e type)) (soap-type-p e)))))))) (defun soap-resolve-references-for-message (message wsdl) "Resolve references for a MESSAGE type using the WSDL document. @@ -679,6 +702,8 @@ See also `soap-resolve-references-for-element' and ;; Install resolvers for our types (progn + (put (aref (make-soap-simple-type) 0) 'soap-resolve-references + 'soap-resolve-references-for-simple-type) (put (aref (make-soap-sequence-type) 0) 'soap-resolve-references 'soap-resolve-references-for-sequence-type) (put (aref (make-soap-array-type) 0) 'soap-resolve-references @@ -854,6 +879,9 @@ Return a SOAP-NAMESPACE containing the elements." (let ((ns (make-soap-namespace :name (soap-get-target-namespace node)))) ;; NOTE: we only extract the complexTypes from the schema, we wouldn't ;; know how to handle basic types beyond the built in ones anyway. + (dolist (node (soap-xml-get-children1 node 'xsd:simpleType)) + (soap-namespace-put (soap-parse-simple-type node) ns)) + (dolist (node (soap-xml-get-children1 node 'xsd:complexType)) (soap-namespace-put (soap-parse-complex-type node) ns)) @@ -862,6 +890,26 @@ Return a SOAP-NAMESPACE containing the elements." ns))) +(defun soap-parse-simple-type (node) + "Parse NODE and construct a simple type from it." + (assert (eq (soap-l2wk (xml-node-name node)) 'xsd:simpleType) + nil + "soap-parse-complex-type: expecting xsd:simpleType node, got %s" + (soap-l2wk (xml-node-name node))) + (let ((name (xml-get-attribute-or-nil node 'name)) + type + enumeration + (restriction (car-safe + (soap-xml-get-children1 node 'xsd:restriction)))) + (unless restriction + (error "simpleType %s has no base type" name)) + + (setq type (xml-get-attribute-or-nil restriction 'base)) + (dolist (e (soap-xml-get-children1 restriction 'xsd:enumeration)) + (push (xml-get-attribute e 'value) enumeration)) + + (make-soap-simple-type :name name :kind type :enumeration enumeration))) + (defun soap-parse-schema-element (node) "Parse NODE and construct a schema element from it." (assert (eq (soap-l2wk (xml-node-name node)) 'xsd:element) @@ -975,7 +1023,7 @@ contents." extension 'xsd:sequence))))) (restriction (let ((base (xml-get-attribute-or-nil restriction 'base))) - (assert (equal base "soapenc:Array") + (assert (equal base (soap-wk2l "soapenc:Array")) nil "restrictions supported only for soapenc:Array types, this is a %s" base)) @@ -1245,9 +1293,9 @@ type-info stored in TYPE." (if (null contents) nil (ecase type-kind - (string (car contents)) + ((string anyURI) (car contents)) (dateTime (car contents)) ; TODO: convert to a date time - ((long int float) (string-to-number (car contents))) + ((long int integer unsignedInt byte float double) (string-to-number (car contents))) (boolean (string= (downcase (car contents)) "true")) (base64Binary (base64-decode-string (car contents))) (anyType (soap-decode-any-type node)) @@ -1293,6 +1341,10 @@ This is because it is easier to work with list results in LISP." (progn (put (aref (make-soap-basic-type) 0) 'soap-decoder 'soap-decode-basic-type) + ;; just use the basic type decoder for the simple type -- we accept any + ;; value and don't do any validation on it. + (put (aref (make-soap-simple-type) 0) + 'soap-decoder 'soap-decode-basic-type) (put (aref (make-soap-sequence-type) 0) 'soap-decoder 'soap-decode-sequence-type) (put (aref (make-soap-array-type) 0) @@ -1322,10 +1374,11 @@ WSDL is used to decode the NODE" fault 'faultcode)))) (car-safe (xml-node-children n)))) (fault-string (let ((n (car (xml-get-children - fault 'faultstring)))) - (car-safe (xml-node-children n))))) + fault 'faultstring)))) + (car-safe (xml-node-children n)))) + (detail (xml-get-children fault 'detail))) (while t - (signal 'soap-error (list fault-code fault-string)))))) + (signal 'soap-error (list fault-code fault-string detail)))))) ;; First (non string) element of the body is the root node of he ;; response @@ -1457,7 +1510,7 @@ instead." (progn (insert ">") (case basic-type - (string + ((string anyURI) (unless (stringp value) (error "Soap-encode-basic-type(%s, %s, %s): not a string value" xml-tag value xsi-type)) @@ -1484,10 +1537,19 @@ instead." xml-tag value xsi-type)) (insert (if value "true" "false"))) - ((long int) + ((long int integer byte unsignedInt) (unless (integerp value) (error "Soap-encode-basic-type(%s, %s, %s): not an integer value" xml-tag value xsi-type)) + (when (and (eq basic-type 'unsignedInt) (< value 0)) + (error "Soap-encode-basic-type(%s, %s, %s): not a positive integer" + xml-tag value xsi-type)) + (insert (number-to-string value))) + + ((float double) + (unless (numberp value) + (error "Soap-encode-basic-type(%s, %s, %s): not a number" + xml-tag value xsi-type)) (insert (number-to-string value))) (base64Binary @@ -1504,6 +1566,20 @@ instead." (insert " xsi:nil=\"true\">")) (insert "\n"))) +(defun soap-encode-simple-type (xml-tag value type) + "Encode inside XML-TAG the LISP VALUE according to TYPE." + + ;; Validate VALUE agains the simple type's enumeration, than just encode it + ;; using `soap-encode-basic-type' + + (let ((enumeration (soap-simple-type-enumeration type))) + (unless (and (> (length enumeration) 1) + (member value enumeration)) + (error "soap-encode-simple-type(%s, %s, %s): bad value, should be one of %s" + xml-tag value (soap-element-fq-name type) enumeration))) + + (soap-encode-basic-type xml-tag value type)) + (defun soap-encode-sequence-type (xml-tag value type) "Encode inside XML-TAG the LISP VALUE according to TYPE. Do not call this function directly, use `soap-encode-value' @@ -1564,6 +1640,8 @@ instead." (progn (put (aref (make-soap-basic-type) 0) 'soap-encoder 'soap-encode-basic-type) + (put (aref (make-soap-simple-type) 0) + 'soap-encoder 'soap-encode-simple-type) (put (aref (make-soap-sequence-type) 0) 'soap-encoder 'soap-encode-sequence-type) (put (aref (make-soap-array-type) 0) diff --git a/lisp/net/soap-inspect.el b/lisp/net/soap-inspect.el index 823f815d58f..23937e21770 100644 --- a/lisp/net/soap-inspect.el +++ b/lisp/net/soap-inspect.el @@ -66,6 +66,15 @@ use `soap-sample-value' instead." ;; TODO: we need better sample values for more types. (t (format "%s" (soap-basic-type-kind type))))) +(defun soap-sample-value-for-simple-type (type) + "Provive a sample value for TYPE which is a simple type. +This is a specific function which should not be called directly, +use `soap-sample-value' instead." + (let ((enumeration (soap-simple-type-enumeration type))) + (if (> (length enumeration) 1) + (elt enumeration (random (length enumeration))) + (soap-sample-value-for-basic-type type)))) + (defun soap-sample-value-for-seqence-type (type) "Provide a sample value for TYPE which is a sequence type. Values for sequence types are ALISTS of (slot-name . VALUE) for @@ -115,6 +124,9 @@ use `soap-sample-value' instead." (put (aref (make-soap-basic-type) 0) 'soap-sample-value 'soap-sample-value-for-basic-type) + (put (aref (make-soap-simple-type) 0) 'soap-sample-value + 'soap-sample-value-for-simple-type) + (put (aref (make-soap-sequence-type) 0) 'soap-sample-value 'soap-sample-value-for-seqence-type) @@ -204,6 +216,16 @@ entire WSDL can be inspected." (insert "\nSample value\n") (pp (soap-sample-value basic-type) (current-buffer))) +(defun soap-inspect-simple-type (simple-type) + "Insert information about SIMPLE-TYPE into the current buffer" + (insert "Simple type: " (soap-element-fq-name simple-type) "\n") + (insert "Base: " (symbol-name (soap-basic-type-kind simple-type)) "\n") + (let ((enumeration (soap-simple-type-enumeration simple-type))) + (when (> (length enumeration) 1) + (insert "Valid values: ") + (dolist (e enumeration) + (insert "\"" e "\" "))))) + (defun soap-inspect-sequence-type (sequence) "Insert information about SEQUENCE into the current buffer." (insert "Sequence type: " (soap-element-fq-name sequence) "\n") @@ -331,6 +353,9 @@ entire WSDL can be inspected." (put (aref (make-soap-basic-type) 0) 'soap-inspect 'soap-inspect-basic-type) + (put (aref (make-soap-simple-type) 0) 'soap-inspect + 'soap-inspect-simple-type) + (put (aref (make-soap-sequence-type) 0) 'soap-inspect 'soap-inspect-sequence-type) From 5055880d396c98f9bacfd4d19aa4a9ae85d3a87c Mon Sep 17 00:00:00 2001 From: Leo Liu Date: Wed, 25 Apr 2012 22:47:33 +0800 Subject: [PATCH 180/564] * lisp/files.el (auto-mode-alist): Use javascript-mode instead. --- lisp/ChangeLog | 4 ++++ lisp/files.el | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 533c1775ea9..cad73c2e2e7 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-04-25 Leo Liu + + * files.el (auto-mode-alist): Use javascript-mode instead. + 2012-04-25 Alex Harsanyi Sync with soap-client repository. Support SOAP simpleType. (Bug#10331) diff --git a/lisp/files.el b/lisp/files.el index d757e1a277c..703b443765d 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -2340,8 +2340,8 @@ ARC\\|ZIP\\|LZH\\|LHA\\|ZOO\\|[JEW]AR\\|XPI\\|RAR\\|7Z\\)\\'" . archive-mode) ("\\.dbk\\'" . xml-mode) ("\\.dtd\\'" . sgml-mode) ("\\.ds\\(ss\\)?l\\'" . dsssl-mode) - ("\\.js\\'" . js-mode) ; javascript-mode would be better - ("\\.json\\'" . js-mode) + ("\\.js\\'" . javascript-mode) + ("\\.json\\'" . javascript-mode) ("\\.[ds]?vh?\\'" . verilog-mode) ;; .emacs or .gnus or .viper following a directory delimiter in ;; Unix, MSDOG or VMS syntax. From 07875ee72bffac01a1978d0367883d6ceb88cc55 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Wed, 25 Apr 2012 23:06:51 +0800 Subject: [PATCH 181/564] Fix whitespace highlighting of context diffs. * lisp/vc/diff-mode.el (diff-setup-whitespace): New function. (diff-mode): Use it. * lisp/vc/diff.el (diff-sentinel): * lisp/vc/vc.el (vc-diff-finish): Call diff-setup-whitespace to assign Whitespace mode variables based on diff style. Fixes: debbugs:8612 --- lisp/ChangeLog | 9 +++++++++ lisp/vc/diff-mode.el | 22 +++++++++++++++++----- lisp/vc/diff.el | 3 +++ lisp/vc/vc.el | 21 ++++++++++++--------- 4 files changed, 41 insertions(+), 14 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index cad73c2e2e7..4ec3b1934a4 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,12 @@ +2012-04-25 Chong Yidong + + * vc/diff-mode.el (diff-setup-whitespace): New function. + (diff-mode): Use it. + + * vc/diff.el (diff-sentinel): + * vc/vc.el (vc-diff-finish): Call diff-setup-whitespace to assign + Whitespace mode variables based on diff style (Bug#8612). + 2012-04-25 Leo Liu * files.el (auto-mode-alist): Use javascript-mode instead. diff --git a/lisp/vc/diff-mode.el b/lisp/vc/diff-mode.el index 8b6b85dd22e..c92371fc90b 100644 --- a/lisp/vc/diff-mode.el +++ b/lisp/vc/diff-mode.el @@ -1283,11 +1283,7 @@ a diff with \\[diff-reverse-direction]. (set (make-local-variable 'end-of-defun-function) 'diff-end-of-file) - ;; Set up `whitespace-mode' so that turning it on will show trailing - ;; whitespace problems on the modified lines of the diff. - (set (make-local-variable 'whitespace-style) '(face trailing)) - (set (make-local-variable 'whitespace-trailing-regexp) - "^[-\+!<>].*?\\([\t ]+\\)$") + (diff-setup-whitespace) (setq buffer-read-only diff-default-read-only) ;; setup change hooks @@ -1332,6 +1328,22 @@ the mode if ARG is omitted or nil. ;;; Handy hook functions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(defun diff-setup-whitespace () + "Set up Whitespace mode variables for the current Diff mode buffer. +This sets `whitespace-style' and `whitespace-trailing-regexp' so +that Whitespace mode shows trailing whitespace problems on the +modified lines of the diff." + (set (make-local-variable 'whitespace-style) '(face trailing)) + (let ((style (save-excursion + (goto-char (point-min)) + (when (re-search-forward diff-hunk-header-re nil t) + (goto-char (match-beginning 0)) + (diff-hunk-style))))) + (set (make-local-variable 'whitespace-trailing-regexp) + (if (eq style 'context) + "^[-\+!] .*?\\([\t ]+\\)$" + "^[-\+!<>].*?\\([\t ]+\\)$")))) + (defun diff-delete-if-empty () ;; An empty diff file means there's no more diffs to integrate, so we ;; can just remove the file altogether. Very handy for .rej files if we diff --git a/lisp/vc/diff.el b/lisp/vc/diff.el index 05208894356..dd4b4757e88 100644 --- a/lisp/vc/diff.el +++ b/lisp/vc/diff.el @@ -30,6 +30,8 @@ ;;; Code: +(declare-function diff-setup-whitespace "diff-mode" ()) + (eval-when-compile (require 'cl)) (defgroup diff nil @@ -64,6 +66,7 @@ If optional args OLD-TEMP-FILE and/or NEW-TEMP-FILE are non-nil, delete the temporary files so named." (if old-temp-file (delete-file old-temp-file)) (if new-temp-file (delete-file new-temp-file)) + (diff-setup-whitespace) (save-excursion (goto-char (point-max)) (let ((inhibit-read-only t)) diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index 9ca9e00b8af..433383502da 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -655,6 +655,8 @@ (require 'vc-dispatcher) (require 'ediff) +(declare-function diff-setup-whitespace "diff-mode" ()) + (eval-when-compile (require 'cl) (require 'dired)) @@ -1524,17 +1526,18 @@ to override the value of `vc-diff-switches' and `diff-switches'." ;; possibility of an empty output is for an async process. (when (buffer-live-p buffer) (let ((window (get-buffer-window buffer t)) - (emptyp (zerop (buffer-size buffer)))) + (emptyp (zerop (buffer-size buffer)))) (with-current-buffer buffer - (and messages emptyp - (let ((inhibit-read-only t)) - (insert (cdr messages) ".\n") - (message "%s" (cdr messages)))) - (goto-char (point-min)) - (when window - (shrink-window-if-larger-than-buffer window))) + (and messages emptyp + (let ((inhibit-read-only t)) + (insert (cdr messages) ".\n") + (message "%s" (cdr messages)))) + (diff-setup-whitespace) + (goto-char (point-min)) + (when window + (shrink-window-if-larger-than-buffer window))) (when (and messages (not emptyp)) - (message "%sdone" (car messages)))))) + (message "%sdone" (car messages)))))) (defvar vc-diff-added-files nil "If non-nil, diff added files by comparing them to /dev/null.") From daf75653c2f1301332eb6c8af830050794ae0877 Mon Sep 17 00:00:00 2001 From: Leo Liu Date: Wed, 25 Apr 2012 23:23:19 +0800 Subject: [PATCH 182/564] * progmodes/python.el (python-send-region): Add suffix .py --- lisp/ChangeLog | 3 +++ lisp/progmodes/python.el | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 4ec3b1934a4..81313efc69b 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -9,6 +9,9 @@ 2012-04-25 Leo Liu + * progmodes/python.el (python-send-region): Add suffix .py to the + temp file. + * files.el (auto-mode-alist): Use javascript-mode instead. 2012-04-25 Alex Harsanyi diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index f88d77d214d..b00e42db4b7 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -1601,7 +1601,7 @@ behavior, change `python-remove-cwd-from-path' to nil." ;; Fixme: Write a `coding' header to the temp file if the region is ;; non-ASCII. (interactive "r") - (let* ((f (make-temp-file "py")) + (let* ((f (make-temp-file "py" nil ".py")) (command ;; IPython puts the FakeModule module into __main__ so ;; emacs.eexecfile becomes useless. From 784e7d6eebb4ac47d1f7b4e724b7aa843bc02f81 Mon Sep 17 00:00:00 2001 From: Leo Liu Date: Thu, 26 Apr 2012 00:46:01 +0800 Subject: [PATCH 183/564] * lisp/progmodes/python.el (python-pdbtrack-get-source-buffer): Use compilation-message if available to find real filename. --- lisp/ChangeLog | 5 +++++ lisp/progmodes/python.el | 17 +++++++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 81313efc69b..55df33b4d30 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-04-25 Leo Liu + + * progmodes/python.el (python-pdbtrack-get-source-buffer): Use + compilation-message if available to find real filename. + 2012-04-25 Chong Yidong * vc/diff-mode.el (diff-setup-whitespace): New function. diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index b00e42db4b7..620ea8cd519 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -2606,9 +2606,17 @@ problem." (let* ((filename (match-string 1 block)) (lineno (string-to-number (match-string 2 block))) (funcname (match-string 3 block)) + (msg (get-text-property 0 'compilation-message filename)) + (loc (and msg (compilation--message->loc msg))) funcbuffer) - (cond ((file-exists-p filename) + (cond ((and loc (markerp (compilation--loc->marker loc))) + (setq funcbuffer (marker-buffer (compilation--loc->marker loc))) + (list (with-current-buffer funcbuffer + (line-number-at-pos (compilation--loc->marker loc))) + funcbuffer)) + + ((file-exists-p filename) (list lineno (find-file-noselect filename))) ((setq funcbuffer (python-pdbtrack-grub-for-buffer funcname lineno)) @@ -2626,15 +2634,12 @@ problem." (buffer-substring (point-min) (point-max))) ))))))) - (list lineno funcbuffer)) + (list lineno funcbuffer)) ((= (elt filename 0) ?\<) (format "(Non-file source: '%s')" filename)) - (t (format "Not found: %s(), %s" funcname filename))) - ) - ) - ) + (t (format "Not found: %s(), %s" funcname filename)))))) (defun python-pdbtrack-grub-for-buffer (funcname _lineno) "Find recent Python mode buffer named, or having function named FUNCNAME." From ef24141c3621b7f283a9ae653473109ee7164e2b Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Wed, 25 Apr 2012 14:40:42 -0400 Subject: [PATCH 184/564] * lisp/minibuffer.el: Add support for completion of quoted/escaped data. (completion-table-with-quoting, completion-table-subvert): New funs. (completion--twq-try, completion--twq-all): New functions. (completion--nth-completion): New function. (completion-try-completion, completion-all-completions): Use it. --- etc/NEWS | 8 ++ lisp/ChangeLog | 61 +++++----- lisp/minibuffer.el | 282 ++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 294 insertions(+), 57 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 3e296702065..254e774a65e 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -169,6 +169,14 @@ still be supported for Emacs 24.x. * Lisp changes in Emacs 24.2 + +** Completion + +*** New function `completion-table-with-quoting' to handle completion +in the presence of quoting, such as file completion in shell buffers. + +*** New function `completion-table-subvert' to use an existing completion +table, but with a different prefix. * Changes in Emacs 24.2 on non-free operating systems diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 81313efc69b..0eb1293f2ac 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,11 @@ +2012-04-25 Stefan Monnier + + * minibuffer.el: Add support for completion of quoted/escaped data. + (completion-table-with-quoting, completion-table-subvert): New funs. + (completion--twq-try, completion--twq-all): New functions. + (completion--nth-completion): New function. + (completion-try-completion, completion-all-completions): Use it. + 2012-04-25 Chong Yidong * vc/diff-mode.el (diff-setup-whitespace): New function. @@ -16,32 +24,31 @@ 2012-04-25 Alex Harsanyi - Sync with soap-client repository. Support SOAP simpleType. (Bug#10331) + Sync with soap-client repository. Support SOAP simpleType (Bug#10331). * soap-client.el (soap-resolve-references-for-sequence-type) - (soap-resolve-references-for-array-type): hack to prevent self + (soap-resolve-references-for-array-type): Hack to prevent self references, see Bug#9. - (soap-parse-envelope): report the contents of the 'detail' node + (soap-parse-envelope): Report the contents of the 'detail' node when receiving a fault reply. - (soap-parse-envelope): report the contents of the entire 'detail' - node. + (soap-parse-envelope): Report the contents of the entire 'detail' node. * soap-inspect.el (soap-sample-value-for-simple-type) - (soap-inspect-simple-type): new function + (soap-inspect-simple-type): New function. - * soap-client.el (soap-simple-type): new struct + * soap-client.el (soap-simple-type): New struct. (soap-default-xsd-types, soap-default-soapenc-types) - (soap-decode-basic-type, soap-encode-basic-type): support - unsignedInt and double basic types + (soap-decode-basic-type, soap-encode-basic-type): + support unsignedInt and double basic types. (soap-resolve-references-for-simple-type) - (soap-parse-simple-type, soap-encode-simple-type): new function - (soap-parse-schema): parse xsd:simpleType declarations + (soap-parse-simple-type, soap-encode-simple-type): New function. + (soap-parse-schema): Parse xsd:simpleType declarations. * soap-client.el (soap-default-xsd-types) - (soap-default-soapenc-types): add integer, byte and anyURI types - (soap-parse-complex-type-complex-content): use `soap-wk2l' to find - the local name of "soapenc:Array" - (soap-decode-basic-type, soap-encode-basic-type): support encoding + (soap-default-soapenc-types): Add integer, byte and anyURI types. + (soap-parse-complex-type-complex-content): Use `soap-wk2l' to find + the local name of "soapenc:Array". + (soap-decode-basic-type, soap-encode-basic-type): Support encoding decoding integer, byte and anyURI xsd types. 2012-04-25 Chong Yidong @@ -161,8 +168,8 @@ * ispell.el (ispell-insert-word) Remove unneeded function using obsolete `translation-table-for-input'. - (ispell-word, ispell-process-line, ispell-complete-word): Use - plain `insert' instead of removed `ispell-insert-word'. + (ispell-word, ispell-process-line, ispell-complete-word): + Use plain `insert' instead of removed `ispell-insert-word'. 2012-04-22 Chong Yidong @@ -180,8 +187,8 @@ Move functions from C to Lisp. Make non-blocking method calls the default. Implement further D-Bus standard interfaces. - * net/dbus.el (dbus-message-internal): Declare function. Remove - unneeded function declarations. + * net/dbus.el (dbus-message-internal): Declare function. + Remove unneeded function declarations. (defvar dbus-message-type-invalid, dbus-message-type-method-call) (dbus-message-type-method-return, dbus-message-type-error) (dbus-message-type-signal): Declare variables. Remove local @@ -197,8 +204,8 @@ (dbus-register-signal, dbus-register-method): New defuns, moved from dbusbind.c (dbus-call-method-handler, dbus-setenv) - (dbus-get-all-managed-objects, dbus-managed-objects-handler): New - defuns. + (dbus-get-all-managed-objects, dbus-managed-objects-handler): + New defuns. (dbus-call-method-non-blocking): Make it an obsolete function. (dbus-unregister-object, dbus-unregister-service) (dbus-handle-event, dbus-register-property) @@ -323,8 +330,8 @@ 2012-04-20 Chong Yidong - * progmodes/gdb-mi.el (gdb-inferior-io--maybe-delete-pty): New - function to call delete-process on the gdb-inferior buffer's pty. + * progmodes/gdb-mi.el (gdb-inferior-io--maybe-delete-pty): + New function to call delete-process on the gdb-inferior buffer's pty. (gdb-reset): Use it, instead of relying on kill-buffer to kill the pty process (Bug#11273). (gdb-update): New arg to suppress talking to the gdb process. @@ -355,8 +362,8 @@ (c-comment-indent, c-scan-conditionals, c-indent-defun) (c-context-line-break): Bind case-fold-search to nil. - * progmodes/cc-mode.el (c-font-lock-fontify-region): Bind - case-fold-search to nil. + * progmodes/cc-mode.el (c-font-lock-fontify-region): + Bind case-fold-search to nil. 2012-04-20 Chong Yidong @@ -1107,8 +1114,8 @@ 2012-03-30 Agustín Martín Domingo - * ispell.el (ispell-get-extended-character-mode): Disable - extended-char-mode for hunspell. hunspell does not support it + * ispell.el (ispell-get-extended-character-mode): + Disable extended-char-mode for hunspell. hunspell does not support it and treats ~word as ordinary words in pipe mode. 2012-03-30 Glenn Morris diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index 5a990f6ab35..3f2bbd7999c 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -45,17 +45,6 @@ ;; corresponding to the displayed completions because we only ;; provide the start info but not the end info in ;; completion-base-position. -;; - quoting is problematic. E.g. the double-dollar quoting used in -;; substitute-in-file-name (and hence read-file-name-internal) bumps -;; into various bugs: -;; - choose-completion doesn't know how to quote the text it inserts. -;; E.g. it fails to double the dollars in file-name completion, or -;; to backslash-escape spaces and other chars in comint completion. -;; - when completing ~/tmp/fo$$o, the highlighting in *Completions* -;; is off by one position. -;; - all code like PCM which relies on all-completions to match -;; its argument gets confused because all-completions returns unquoted -;; texts (as desired for *Completions* output). ;; - C-x C-f ~/*/sr ? should not list "~/./src". ;; - minibuffer-force-complete completes ~/src/emacs/t/lisp/minibuffer.el ;; to ~/src/emacs/trunk/ and throws away lisp/minibuffer.el. @@ -66,12 +55,9 @@ ;; - Make things like icomplete-mode or lightning-completion work with ;; completion-in-region-mode. ;; - extend `metadata': -;; - quoting/unquoting (so we can complete files names with envvars -;; and backslashes, and all-completion can list names without -;; quoting backslashes and dollars). ;; - indicate how to turn all-completion's output into ;; try-completion's output: e.g. completion-ignored-extensions. -;; maybe that could be merged with the "quote" operation above. +;; maybe that could be merged with the "quote" operation. ;; - indicate that `all-completions' doesn't do prefix-completion ;; but just returns some list that relates in some other way to ;; the provided string (as is the case in filecache.el), in which @@ -224,6 +210,42 @@ case sensitive instead." (let ((completion-ignore-case (not dont-fold))) (complete-with-action action table string pred)))) +(defun completion-table-subvert (table s1 s2) + "Completion table that replaces the prefix S1 with S2 in STRING. +The result is a completion table which completes strings of the +form (concat S1 S) in the same way as TABLE completes strings of +the form (concat S2 S)." + (lambda (string pred action) + (let* ((str (if (eq t (compare-strings string 0 (length s1) s1 nil nil + completion-ignore-case)) + (concat s2 (substring string (length s1))))) + (res (if str (complete-with-action action table str pred)))) + (when res + (cond + ((eq (car-safe action) 'boundaries) + (let ((beg (or (and (eq (car-safe res) 'boundaries) (cadr res)) 0))) + (list* 'boundaries + (max (length s1) + (+ beg (- (length s1) (length s2)))) + (and (eq (car-safe res) 'boundaries) (cddr res))))) + ((stringp res) + (if (eq t (compare-strings res 0 (length s2) s2 nil nil + completion-ignore-case)) + (concat s1 (substring res (length s2))))) + ((eq action t) + (let ((bounds (completion-boundaries str table pred ""))) + (if (>= (car bounds) (length s2)) + res + (let ((re (concat "\\`" + (regexp-quote (substring s2 (car bounds)))))) + (delq nil + (mapcar (lambda (c) + (if (string-match re c) + (substring c (match-end 0)))) + res)))))) + ;; E.g. action=nil and it's the only completion. + (res)))))) + (defun completion-table-with-context (prefix table string pred action) ;; TODO: add `suffix' maybe? (let ((pred @@ -347,6 +369,186 @@ Note: TABLE needs to be a proper completion table which obeys predicates." (complete-with-action action table string pred)) tables))) +(defun completion-table-with-quoting (table unquote requote) + ;; A difficult part of completion-with-quoting is to map positions in the + ;; quoted string to equivalent positions in the unquoted string and + ;; vice-versa. There is no efficient and reliable algorithm that works for + ;; arbitrary quote and unquote functions. + ;; So to map from quoted positions to unquoted positions, we simply assume + ;; that `concat' and `unquote' commute (which tends to be the case). + ;; And we ask `requote' to do the work of mapping from unquoted positions + ;; back to quoted positions. + "Return a new completion table operating on quoted text. +TABLE operates on the unquoted text. +UNQUOTE is a function that takes a string and returns a new unquoted string. +REQUOTE is a function of 2 args (UPOS QSTR) where + QSTR is a string entered by the user (and hence indicating + the user's preferred form of quoting); and + UPOS is a position within the unquoted form of QSTR. +REQUOTE should return a pair (QPOS . QFUN) such that QPOS is the +position corresponding to UPOS but in QSTR, and QFUN is a function +of one argument (a string) which returns that argument appropriately quoted +for use at QPOS." + ;; FIXME: One problem with the current setup is that `qfun' doesn't know if + ;; its argument is "the end of the completion", so if the quoting used double + ;; quotes (for example), we end up completing "fo" to "foobar and throwing + ;; away the closing double quote. + (lambda (string pred action) + (cond + ((eq action 'metadata) + (append (completion-metadata string table pred) + '((completion--unquote-requote . t)))) + + ((eq action 'lambda) ;;test-completion + (let ((ustring (funcall unquote string))) + (test-completion ustring table pred))) + + ((eq (car-safe action) 'boundaries) + (let* ((ustring (funcall unquote string)) + (qsuffix (cdr action)) + (ufull (if (zerop (length qsuffix)) ustring + (funcall unquote (concat string qsuffix)))) + (_ (assert (string-prefix-p ustring ufull))) + (usuffix (substring ufull (length ustring))) + (boundaries (completion-boundaries ustring table pred usuffix)) + (qlboundary (car (funcall requote (car boundaries) string))) + (qrboundary (if (zerop (cdr boundaries)) 0 ;Common case. + (let* ((urfullboundary + (+ (cdr boundaries) (length ustring)))) + (- (car (funcall requote urfullboundary + (concat string qsuffix))) + (length string)))))) + (list* 'boundaries qlboundary qrboundary))) + + ((eq action nil) ;;try-completion + (let* ((ustring (funcall unquote string)) + (completion (try-completion ustring table pred))) + ;; Most forms of quoting allow several ways to quote the same string. + ;; So here we could simply requote `completion' in a kind of + ;; "canonical" quoted form without paying attention to the way + ;; `string' was quoted. But since we have to solve the more complex + ;; problems of "pay attention to the original quoting" for + ;; all-completions, we may as well use it here, since it provides + ;; a nicer behavior. + (if (not (stringp completion)) completion + (car (completion--twq-try + string ustring completion 0 unquote requote))))) + + ((eq action t) ;;all-completions + ;; When all-completions is used for completion-try/all-completions + ;; (e.g. for `pcm' style), we can't do the job properly here because + ;; the caller will match our output against some pattern derived from + ;; the user's (quoted) input, and we don't have access to that + ;; pattern, so we can't know how to requote our output so that it + ;; matches the quoting used in the pattern. It is to fix this + ;; fundamental problem that we have to introduce the new + ;; unquote-requote method so that completion-try/all-completions can + ;; pass the unquoted string to the style functions. + (pcase-let* + ((ustring (funcall unquote string)) + (completions (all-completions ustring table pred)) + (boundary (car (completion-boundaries ustring table pred "")))) + (completion--twq-all + string ustring completions boundary unquote requote))) + + ((eq action 'completion--unquote) + (let ((ustring (funcall unquote string)) + (uprefix (funcall unquote (substring string 0 pred)))) + ;; We presume (more or less) that `concat' and `unquote' commute. + (assert (string-prefix-p uprefix ustring)) + (list ustring table (length uprefix) + (lambda (unquoted-result op) + (pcase op + (`1 ;;try + (if (not (stringp (car-safe unquoted-result))) + unquoted-result + (completion--twq-try + string ustring + (car unquoted-result) (cdr unquoted-result) + unquote requote))) + (`2 ;;all + (let* ((last (last unquoted-result)) + (base (or (cdr last) 0))) + (when last + (setcdr last nil) + (completion--twq-all string ustring + unquoted-result base + unquote requote)))))))))))) + +(defun completion--twq-try (string ustring completion point + unquote requote) + ;; Basically two case: either the new result is + ;; - commonprefix1 morecommonprefix suffix + ;; - commonprefix newprefix suffix + (pcase-let* + ((prefix (fill-common-string-prefix ustring completion)) + (suffix (substring completion (max point (length prefix)))) + (`(,qpos . ,qfun) (funcall requote (length prefix) string)) + (qstr1 (if (> point (length prefix)) + (funcall qfun (substring completion (length prefix) point)))) + (qsuffix (funcall qfun suffix)) + (qstring (concat (substring string 0 qpos) qstr1 qsuffix)) + (qpoint + (cond + ((zerop point) 0) + ((> point (length prefix)) (+ qpos (length qstr1))) + (t (car (funcall requote point string)))))) + ;; Make sure `requote' worked. + (assert (equal (funcall unquote qstring) completion)) + (cons qstring qpoint))) + +(defun completion--twq-all (string ustring completions boundary + unquote requote) + (when completions + (pcase-let* + ((prefix + (let ((completion-regexp-list nil)) + (try-completion "" (cons (substring ustring boundary) + completions)))) + (`(,qfullpos . ,qfun) + (funcall requote (+ boundary (length prefix)) string)) + (qfullprefix (substring string 0 qfullpos)) + (_ (assert (let ((uboundarystr (substring ustring 0 boundary))) + (equal (funcall unquote qfullprefix) + (concat uboundarystr prefix))))) + (qboundary (car (funcall requote boundary string))) + (_ (assert (<= qboundary qfullpos))) + ;; FIXME: this split/quote/concat business messes up the carefully + ;; placed completions-common-part and completions-first-difference + ;; faces. We could try within the mapcar loop to search for the + ;; boundaries of those faces, pass them to `requote' to find their + ;; equivalent positions in the quoted output and re-add the faces: + ;; this might actually lead to correct results but would be + ;; pretty expensive. + ;; The better solution is to not quote the *Completions* display, + ;; which nicely circumvents the problem. The solution I used here + ;; instead is to hope that `qfun' preserves the text-properties and + ;; presume that the `first-difference' is not within the `prefix'; + ;; this presumption is not always true, but at least in practice it is + ;; true in most cases. + (qprefix (propertize (substring qfullprefix qboundary) + 'face 'completions-common-part))) + + ;; Here we choose to quote all elements returned, but a better option + ;; would be to return unquoted elements together with a function to + ;; requote them, so that *Completions* can show nicer unquoted values + ;; which only get quoted when needed by choose-completion. + (nconc + (mapcar (lambda (completion) + (assert (string-prefix-p prefix completion)) + (let* ((new (substring completion (length prefix))) + (qnew (funcall qfun new)) + (qcompletion (concat qprefix qnew))) + (assert + (equal (funcall unquote + (concat (substring string 0 qboundary) + qcompletion)) + (concat (substring ustring 0 boundary) + completion))) + qcompletion)) + completions) + qboundary)))) + ;; (defmacro complete-in-turn (a b) `(completion-table-in-turn ,a ,b)) ;; (defmacro dynamic-completion-table (fun) `(completion-table-dynamic ,fun)) (define-obsolete-function-alias @@ -535,21 +737,47 @@ completing buffer and file names, respectively." (delete-dups (append (cdr over) (copy-sequence completion-styles))) completion-styles))) +(defun completion--nth-completion (n string table pred point metadata) + "Call the Nth method of completion styles." + (unless metadata + (setq metadata + (completion-metadata (substring string 0 point) table pred))) + ;; We provide special support for quoting/unquoting here because it cannot + ;; reliably be done within the normal completion-table routines: Completion + ;; styles such as `substring' or `partial-completion' need to match the + ;; output of all-completions with the user's input, and since most/all + ;; quoting mechanisms allow several equivalent quoted forms, the + ;; completion-style can't do this matching (e.g. `substring' doesn't know + ;; that "\a\b\e" is a valid (quoted) substring of "label"). + ;; The quote/unquote function needs to come from the completion table (rather + ;; than from completion-extra-properties) because it may apply only to some + ;; part of the string (e.g. substitute-in-file-name). + (let ((requote + (when (completion-metadata-get metadata 'completion--unquote-requote) + (let ((new (funcall table string point 'completion--unquote))) + (setq string (pop new)) + (setq table (pop new)) + (setq point (pop new)) + (pop new)))) + (result + (completion--some (lambda (style) + (funcall (nth n (assq style + completion-styles-alist)) + string table pred point)) + (completion--styles metadata)))) + (if requote + (funcall requote result n) + result))) + (defun completion-try-completion (string table pred point &optional metadata) "Try to complete STRING using completion table TABLE. Only the elements of table that satisfy predicate PRED are considered. POINT is the position of point within STRING. The return value can be either nil to indicate that there is no completion, t to indicate that STRING is the only possible completion, -or a pair (STRING . NEWPOINT) of the completed result string together with +or a pair (NEWSTRING . NEWPOINT) of the completed result string together with a new position for point." - (completion--some (lambda (style) - (funcall (nth 1 (assq style completion-styles-alist)) - string table pred point)) - (completion--styles (or metadata - (completion-metadata - (substring string 0 point) - table pred))))) + (completion--nth-completion 1 string table pred point metadata)) (defun completion-all-completions (string table pred point &optional metadata) "List the possible completions of STRING in completion table TABLE. @@ -559,13 +787,7 @@ The return value is a list of completions and may contain the base-size in the last `cdr'." ;; FIXME: We need to additionally return the info needed for the ;; second part of completion-base-position. - (completion--some (lambda (style) - (funcall (nth 2 (assq style completion-styles-alist)) - string table pred point)) - (completion--styles (or metadata - (completion-metadata - (substring string 0 point) - table pred))))) + (completion--nth-completion 2 string table pred point metadata)) (defun minibuffer--bitset (modified completions exact) (logior (if modified 4 0) From 79c4eeb45046eca02bd4a5daad1b673eb48377a1 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Wed, 25 Apr 2012 14:42:15 -0400 Subject: [PATCH 185/564] * lisp/minibuffer.el: Use completion-table-with-quoting for read-file-name. (minibuffer--double-dollars): Preserve properties. (completion--sifn-requote): New function. (completion--file-name-table): Rewrite using it and c-t-with-quoting. --- lisp/ChangeLog | 5 +++ lisp/minibuffer.el | 83 +++++++++++++++++++--------------------------- 2 files changed, 39 insertions(+), 49 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 0eb1293f2ac..8a21f5966c7 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,10 @@ 2012-04-25 Stefan Monnier + * minibuffer.el: Use completion-table-with-quoting for read-file-name. + (minibuffer--double-dollars): Preserve properties. + (completion--sifn-requote): New function. + (completion--file-name-table): Rewrite using it and c-t-with-quoting. + * minibuffer.el: Add support for completion of quoted/escaped data. (completion-table-with-quoting, completion-table-subvert): New funs. (completion--twq-try, completion--twq-all): New functions. diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index 3f2bbd7999c..b1e9ccbdba8 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -1976,7 +1976,10 @@ This is only used when the minibuffer area has no active minibuffer.") ;;; Completion tables. (defun minibuffer--double-dollars (str) - (replace-regexp-in-string "\\$" "$$" str)) + ;; Reuse the actual "$" from the string to preserve any text-property it + ;; might have, such as `face'. + (replace-regexp-in-string "\\$" (lambda (dollar) (concat dollar dollar)) + str)) (defun completion--make-envvar-table () (mapcar (lambda (enventry) @@ -2102,58 +2105,40 @@ same as `substitute-in-file-name'." (make-obsolete-variable 'read-file-name-predicate "use the regular PRED argument" "23.2") -(defun completion--file-name-table (string pred action) +(defun completion--sifn-requote (upos qstr) + (let ((qpos 0)) + (while (and (> upos 0) + (string-match "\\$\\(\\$\\|\\([[:alnum:]_]+\\|{[^}]*}\\)\\)?" + qstr qpos)) + (cond + ((>= (- (match-beginning 0) qpos) upos) ; UPOS is before current match. + (setq qpos (+ qpos upos)) + (setq upos 0)) + ((not (match-end 1)) ;A sole $: probably an error. + (setq upos (- upos (- (match-end 0) qpos))) + (setq qpos (match-end 0))) + (t + (setq upos (- upos (- (match-beginning 0) qpos))) + (setq qpos (match-end 0)) + (setq upos (- upos (length (substitute-in-file-name + (match-string 0 qstr)))))))) + ;; If `upos' is negative, it's because it's within the expansion of an + ;; envvar, i.e. there is no exactly matching qpos, so we just use the next + ;; available qpos right after the envvar. + (cons (if (>= upos 0) (+ qpos upos) qpos) + #'minibuffer--double-dollars))) + +(defalias 'completion--file-name-table + (completion-table-with-quoting #'completion-file-name-table + #'substitute-in-file-name + #'completion--sifn-requote) "Internal subroutine for `read-file-name'. Do not call this. This is a completion table for file names, like `completion-file-name-table' -except that it passes the file name through `substitute-in-file-name'." - (cond - ((eq (car-safe action) 'boundaries) - ;; For the boundaries, we can't really delegate to - ;; substitute-in-file-name+completion-file-name-table and then fix - ;; them up (as we do for the other actions), because it would - ;; require us to track the relationship between `str' and - ;; `string', which is difficult. And in any case, if - ;; substitute-in-file-name turns "fo-$TO-ba" into "fo-o/b-ba", - ;; there's no way for us to return proper boundaries info, because - ;; the boundary is not (yet) in `string'. - ;; - ;; FIXME: Actually there is a way to return correct boundaries - ;; info, at the condition of modifying the all-completions - ;; return accordingly. But for now, let's not bother. - (completion-file-name-table string pred action)) - - (t - (let* ((default-directory - (if (stringp pred) - ;; It used to be that `pred' was abused to pass `dir' - ;; as an argument. - (prog1 (file-name-as-directory (expand-file-name pred)) - (setq pred nil)) - default-directory)) - (str (condition-case nil - (substitute-in-file-name string) - (error string))) - (comp (completion-file-name-table - str - (with-no-warnings (or pred read-file-name-predicate)) - action))) - - (cond - ((stringp comp) - ;; Requote the $s before returning the completion. - (minibuffer--double-dollars comp)) - ((and (null action) comp - ;; Requote the $s before checking for changes. - (setq str (minibuffer--double-dollars str)) - (not (string-equal string str))) - ;; If there's no real completion, but substitute-in-file-name - ;; changed the string, then return the new string. - str) - (t comp)))))) +except that it passes the file name through `substitute-in-file-name'.") (defalias 'read-file-name-internal - (completion-table-in-turn 'completion--embedded-envvar-table - 'completion--file-name-table) + (completion-table-in-turn #'completion--embedded-envvar-table + #'completion--file-name-table) "Internal subroutine for `read-file-name'. Do not call this.") (defvar read-file-name-function 'read-file-name-default From b4ff4f1fcb552dab77d4312f9adb9f290782fa98 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Wed, 25 Apr 2012 14:53:57 -0400 Subject: [PATCH 186/564] Use completion-table-with-quoting for comint and pcomplete. * lisp/comint.el (comint--unquote&requote-argument) (comint--unquote-argument, comint--requote-argument): New functions. (comint--unquote&expand-filename, comint-unquote-filename): Obsolete. (comint-quote-filename): Use regexp-opt-charset. (comint--common-suffix, comint--common-quoted-suffix) (comint--table-subvert): Remove. (comint-unquote-function, comint-requote-function): New vars. (comint--complete-file-name-data): Use them with completion-table-with-quoting. * lisp/pcmpl-unix.el (pcomplete/scp): Use completion-table-subvert. * lisp/pcomplete.el (pcomplete-arg-quote-list) (pcomplete-quote-arg-hook, pcomplete-quote-argument): Obsolete. (pcomplete-unquote-argument-function): Default to non-nil. (pcomplete-unquote-argument): Simplify. (pcomplete--common-quoted-suffix): Remove. (pcomplete-requote-argument-function): New var. (pcomplete--common-suffix): New function. (pcomplete-completions-at-point): Use completion-table-with-quoting and completion-table-subvert. --- lisp/ChangeLog | 21 ++++++ lisp/comint.el | 160 ++++++++++++++++++--------------------------- lisp/pcmpl-unix.el | 4 +- lisp/pcomplete.el | 137 ++++++++++++-------------------------- 4 files changed, 129 insertions(+), 193 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 8a21f5966c7..dc56bf3c1e2 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,26 @@ 2012-04-25 Stefan Monnier + Use completion-table-with-quoting for comint and pcomplete. + * comint.el (comint--unquote&requote-argument) + (comint--unquote-argument, comint--requote-argument): New functions. + (comint--unquote&expand-filename, comint-unquote-filename): Obsolete. + (comint-quote-filename): Use regexp-opt-charset. + (comint--common-suffix, comint--common-quoted-suffix) + (comint--table-subvert): Remove. + (comint-unquote-function, comint-requote-function): New vars. + (comint--complete-file-name-data): Use them with + completion-table-with-quoting. + * pcmpl-unix.el (pcomplete/scp): Use completion-table-subvert. + * pcomplete.el (pcomplete-arg-quote-list) + (pcomplete-quote-arg-hook, pcomplete-quote-argument): Obsolete. + (pcomplete-unquote-argument-function): Default to non-nil. + (pcomplete-unquote-argument): Simplify. + (pcomplete--common-quoted-suffix): Remove. + (pcomplete-requote-argument-function): New var. + (pcomplete--common-suffix): New function. + (pcomplete-completions-at-point): Use completion-table-with-quoting + and completion-table-subvert. + * minibuffer.el: Use completion-table-with-quoting for read-file-name. (minibuffer--double-dollars): Preserve properties. (completion--sifn-requote): New function. diff --git a/lisp/comint.el b/lisp/comint.el index 10981675971..2f8d7bd850c 100644 --- a/lisp/comint.el +++ b/lisp/comint.el @@ -104,6 +104,7 @@ (eval-when-compile (require 'cl)) (require 'ring) (require 'ansi-color) +(require 'regexp-opt) ;For regexp-opt-charset. ;; Buffer Local Variables: ;;============================================================================ @@ -3000,26 +3001,62 @@ interpreter (e.g., the percent notation of cmd.exe on Windows)." See `comint-word'." (comint-word comint-file-name-chars)) -(defun comint--unquote&expand-filename (filename) - ;; FIXME: The code below does unquote-then-expand which means that "\\$HOME" - ;; gets expanded to the same as "$HOME" - (comint-substitute-in-file-name - (comint-unquote-filename filename))) +(defun comint--unquote&requote-argument (qstr &optional upos) + (unless upos (setq upos 0)) + (let* ((qpos 0) + (dquotes nil) + (ustrs '()) + (re (concat + "[\"']\\|\\\\\\(.\\)" + "\\|\\$\\(?:\\([[:alpha:]][[:alnum:]]*\\)" + "\\|{\\(?2:[^{}]+\\)}\\)" + (when (memq system-type '(ms-dos windows-nt)) + "\\|%\\(?2:[^\\\\/]*\\)%"))) + (qupos nil) + (push (lambda (str end) + (push str ustrs) + (setq upos (- upos (length str))) + (unless (or qupos (> upos 0)) + (setq qupos (if (< end 0) (- end) (+ upos end)))))) + match) + (while (setq match (string-match re qstr qpos)) + (funcall push (substring qstr qpos match) match) + (cond + ((match-beginning 1) (funcall push (match-string 1 qstr) (match-end 0))) + ((match-beginning 2) (funcall push (getenv (match-string 2 qstr)) + (- (match-end 0)))) + ((eq (aref qstr match) ?\") (setq dquotes (not dquotes))) + ((eq (aref qstr match) ?\') + (cond + (dquotes (funcall push "'" (match-end 0))) + ((< match (1+ (length qstr))) + (let ((end (string-match "'" qstr (1+ match)))) + (funcall push (substring qstr (1+ match) end) + (or end (length qstr))))) + (t nil))) + (t (error "Unexpected case in comint--unquote&requote-argument!"))) + (setq qpos (match-end 0))) + (funcall push (substring qstr qpos) (length qstr)) + (list (mapconcat #'identity (nreverse ustrs) "") + qupos #'comint-quote-filename))) + +(defun comint--unquote-argument (str) + (car (comint--unquote&requote-argument str))) +(define-obsolete-function-alias 'comint--unquote&expand-filename + #'comint--unquote-argument "24.2") (defun comint-match-partial-filename () "Return the unquoted&expanded filename at point, or nil if none is found. Environment variables are substituted. See `comint-word'." (let ((filename (comint--match-partial-filename))) - (and filename (comint--unquote&expand-filename filename)))) + (and filename (comint--unquote-argument filename)))) (defun comint-quote-filename (filename) "Return FILENAME with magic characters quoted. Magic characters are those in `comint-file-name-quote-list'." (if (null comint-file-name-quote-list) filename - (let ((regexp - (format "[%s]" - (mapconcat 'char-to-string comint-file-name-quote-list "")))) + (let ((regexp (regexp-opt-charset comint-file-name-quote-list))) (save-match-data (let ((i 0)) (while (string-match regexp filename i) @@ -3033,6 +3070,12 @@ Magic characters are those in `comint-file-name-quote-list'." filename (save-match-data (replace-regexp-in-string "\\\\\\(.\\)" "\\1" filename t)))) +(make-obsolete 'comint-unquote-filename nil "24.2") + +(defun comint--requote-argument (upos qstr) + ;; See `completion-table-with-quoting'. + (let ((res (comint--unquote&requote-argument qstr upos))) + (cons (nth 1 res) (nth 2 res)))) (defun comint-completion-at-point () (run-hook-with-args-until-success 'comint-dynamic-complete-functions)) @@ -3066,87 +3109,6 @@ Returns t if successful." (when (comint--match-partial-filename) (comint--complete-file-name-data))) -;; FIXME: comint--common-suffix, comint--common-quoted-suffix, and -;; comint--table-subvert don't fully solve the problem, since -;; selecting a file from *Completions* won't quote it, among several -;; other problems. - -(defun comint--common-suffix (s1 s2) - (assert (not (or (string-match "\n" s1) (string-match "\n" s2)))) - ;; Since S2 is expected to be the "unquoted/expanded" version of S1, - ;; there shouldn't be any case difference, even if the completion is - ;; case-insensitive. - (let ((case-fold-search nil)) - (string-match ".*?\\(.*\\)\n.*\\1\\'" (concat s1 "\n" s2)) - (- (match-end 1) (match-beginning 1)))) - -(defun comint--common-quoted-suffix (s1 s2) - ;; FIXME: Copied in pcomplete.el. - "Find the common suffix between S1 and S2 where S1 is the expanded S2. -S1 is expected to be the unquoted and expanded version of S2. -Returns (PS1 . PS2), i.e. the shortest prefixes of S1 and S2, such that -S1 = (concat PS1 SS1) and S2 = (concat PS2 SS2) and -SS1 = (unquote SS2)." - (let* ((cs (comint--common-suffix s1 s2)) - (ss1 (substring s1 (- (length s1) cs))) - (qss1 (comint-quote-filename ss1)) - qc s2b) - (if (and (not (equal ss1 qss1)) - (setq qc (comint-quote-filename (substring ss1 0 1))) - (setq s2b (- (length s2) cs (length qc) -1)) - (>= s2b 0) ;bug#11158. - (eq t (compare-strings s2 s2b (- (length s2) cs -1) - qc nil nil))) - ;; The difference found is just that one char is quoted in S2 - ;; but not in S1, keep looking before this difference. - (comint--common-quoted-suffix - (substring s1 0 (- (length s1) cs)) - (substring s2 0 s2b)) - (cons (substring s1 0 (- (length s1) cs)) - (substring s2 0 (- (length s2) cs)))))) - -(defun comint--table-subvert (table s1 s2 &optional quote-fun unquote-fun) - "Completion table that replaces the prefix S1 with S2 in STRING. -The result is a completion table which completes strings of the -form (concat S1 S) in the same way as TABLE completes strings of -the form (concat S2 S)." - (lambda (string pred action) - (let* ((str (if (eq t (compare-strings string 0 (length s1) s1 nil nil - completion-ignore-case)) - (let ((rest (substring string (length s1)))) - (concat s2 (if unquote-fun - (funcall unquote-fun rest) rest))))) - (res (if str (complete-with-action action table str pred)))) - (when res - (cond - ((and (eq (car-safe action) 'boundaries)) - (let ((beg (or (and (eq (car-safe res) 'boundaries) (cadr res)) 0))) - (list* 'boundaries - (max (length s1) - ;; FIXME: Adjust because of quoting/unquoting. - (+ beg (- (length s1) (length s2)))) - (and (eq (car-safe res) 'boundaries) (cddr res))))) - ((stringp res) - (if (eq t (compare-strings res 0 (length s2) s2 nil nil - completion-ignore-case)) - (let ((rest (substring res (length s2)))) - (concat s1 (if quote-fun (funcall quote-fun rest) rest))))) - ((eq action t) - (let ((bounds (completion-boundaries str table pred ""))) - (if (>= (car bounds) (length s2)) - (if quote-fun (mapcar quote-fun res) res) - (let ((re (concat "\\`" - (regexp-quote (substring s2 (car bounds)))))) - (delq nil - (mapcar (lambda (c) - (if (string-match re c) - (let ((str (substring c (match-end 0)))) - (if quote-fun - (funcall quote-fun str) str)))) - res)))))) - ;; E.g. action=nil and it's the only completion. - (res)))))) - (defun comint-completion-file-name-table (string pred action) (if (not (file-name-absolute-p string)) (completion-file-name-table string pred action) @@ -3165,6 +3127,13 @@ the form (concat S2 S)." res))) (t (completion-file-name-table string pred action))))) +(defvar comint-unquote-function #'comint--unquote-argument + "Function to use for completion of quoted data. +See `completion-table-with-quoting' and `comint-requote-function'.") +(defvar comint-requote-function #'comint--requote-argument + "Function to use for completion of quoted data. +See `completion-table-with-quoting' and `comint-requote-function'.") + (defun comint--complete-file-name-data () "Return the completion data for file name at point." (let* ((filesuffix (cond ((not comint-completion-addsuffix) "") @@ -3175,14 +3144,11 @@ the form (concat S2 S)." (filename (comint--match-partial-filename)) (filename-beg (if filename (match-beginning 0) (point))) (filename-end (if filename (match-end 0) (point))) - (unquoted (if filename (comint--unquote&expand-filename filename) "")) (table - (let ((prefixes (comint--common-quoted-suffix - unquoted filename))) - (comint--table-subvert - #'comint-completion-file-name-table - (cdr prefixes) (car prefixes) - #'comint-quote-filename #'comint-unquote-filename)))) + (completion-table-with-quoting + #'comint-completion-file-name-table + comint-unquote-function + comint-requote-function))) (nconc (list filename-beg filename-end diff --git a/lisp/pcmpl-unix.el b/lisp/pcmpl-unix.el index 3af22c82dfb..ae4bd270b09 100644 --- a/lisp/pcmpl-unix.el +++ b/lisp/pcmpl-unix.el @@ -205,8 +205,8 @@ Includes files as well as host names followed by a colon." ;; Avoid connecting to the remote host when we're ;; only completing the host name. (list string) - (comint--table-subvert (pcomplete-all-entries) - "" "/ssh:"))) + (completion-table-subvert (pcomplete-all-entries) + "" "/ssh:"))) ((string-match "/" string) ; Local file name. (pcomplete-all-entries)) (t ;Host name or local file name. diff --git a/lisp/pcomplete.el b/lisp/pcomplete.el index cad2ffb2a2c..c9961a67f3d 100644 --- a/lisp/pcomplete.el +++ b/lisp/pcomplete.el @@ -165,22 +165,8 @@ A non-nil value is useful if `pcomplete-autolist' is non-nil too." :type 'boolean :group 'pcomplete) -(defcustom pcomplete-arg-quote-list nil - "List of characters to quote when completing an argument." - :type '(choice (repeat character) - (const :tag "Don't quote" nil)) - :group 'pcomplete) - -(defcustom pcomplete-quote-arg-hook nil - "A hook which is run to quote a character within a filename. -Each function is passed both the filename to be quoted, and the index -to be considered. If the function wishes to provide an alternate -quoted form, it need only return the replacement string. If no -function provides a replacement, quoting shall proceed as normal, -using a backslash to quote any character which is a member of -`pcomplete-arg-quote-list'." - :type 'hook - :group 'pcomplete) +(define-obsolete-variable-alias + 'pcomplete-arg-quote-list 'comint-file-name-quote-list "24.2") (defcustom pcomplete-man-function 'man "A function to that will be called to display a manual page. @@ -370,48 +356,28 @@ modified to be an empty string, or the desired separation string." ;; it pretty much impossible to have completion other than ;; prefix-completion. ;; -;; pcomplete--common-quoted-suffix and comint--table-subvert try to -;; work around this difficulty with heuristics, but it's -;; really a hack. +;; pcomplete--common-suffix and completion-table-subvert try to work around +;; this difficulty with heuristics, but it's really a hack. -(defvar pcomplete-unquote-argument-function nil) +(defvar pcomplete-unquote-argument-function #'comint--unquote-argument) -(defun pcomplete-unquote-argument (s) - (cond - (pcomplete-unquote-argument-function - (funcall pcomplete-unquote-argument-function s)) - ((null pcomplete-arg-quote-list) s) - (t - (replace-regexp-in-string "\\\\\\(.\\)" "\\1" s t)))) +(defsubst pcomplete-unquote-argument (s) + (funcall pcomplete-unquote-argument-function s)) -(defun pcomplete--common-quoted-suffix (s1 s2) - ;; FIXME: Copied in comint.el. - "Find the common suffix between S1 and S2 where S1 is the expanded S2. -S1 is expected to be the unquoted and expanded version of S2. -Returns (PS1 . PS2), i.e. the shortest prefixes of S1 and S2, such that -S1 = (concat PS1 SS1) and S2 = (concat PS2 SS2) and -SS1 = (unquote SS2)." - (let* ((cs (comint--common-suffix s1 s2)) - (ss1 (substring s1 (- (length s1) cs))) - (qss1 (pcomplete-quote-argument ss1)) - qc s2b) - (if (and (not (equal ss1 qss1)) - (setq qc (pcomplete-quote-argument (substring ss1 0 1))) - (setq s2b (- (length s2) cs (length qc) -1)) - (>= s2b 0) ;bug#11158. - (eq t (compare-strings s2 s2b (- (length s2) cs -1) - qc nil nil))) - ;; The difference found is just that one char is quoted in S2 - ;; but not in S1, keep looking before this difference. - (pcomplete--common-quoted-suffix - (substring s1 0 (- (length s1) cs)) - (substring s2 0 s2b)) - (cons (substring s1 0 (- (length s1) cs)) - (substring s2 0 (- (length s2) cs)))))) +(defvar pcomplete-requote-argument-function #'comint--requote-argument) + +(defun pcomplete--common-suffix (s1 s2) + ;; Since S2 is expected to be the "unquoted/expanded" version of S1, + ;; there shouldn't be any case difference, even if the completion is + ;; case-insensitive. + (let ((case-fold-search nil)) + (string-match + ;; \x3FFF7F is just an arbitrary char among the ones Emacs accepts + ;; that hopefully will never appear in normal text. + "\\(?:.\\|\n\\)*?\\(\\(?:.\\|\n\\)*\\)\x3FFF7F\\(?:.\\|\n\\)*\\1\\'" + (concat s1 "\x3FFF7F" s2)) + (- (match-end 1) (match-beginning 1)))) -;; I don't think such commands are usable before first setting up buffer-local -;; variables to parse args, so there's no point autoloading it. -;; ;;;###autoload (defun pcomplete-completions-at-point () "Provide standard completion using pcomplete's completion tables. Same as `pcomplete' but using the standard completion UI." @@ -442,34 +408,31 @@ Same as `pcomplete' but using the standard completion UI." ;; pcomplete-stub and works from the buffer's text instead, ;; we need to trick minibuffer-complete, into using ;; pcomplete-stub without its knowledge. To that end, we - ;; use comint--table-subvert to construct a completion + ;; use completion-table-subvert to construct a completion ;; table which expects strings using a prefix from the ;; buffer's text but internally uses the corresponding ;; prefix from pcomplete-stub. (beg (max (- (point) (length pcomplete-stub)) (pcomplete-begin))) - (buftext (buffer-substring beg (point)))) + (buftext (pcomplete-unquote-argument + (buffer-substring beg (point))))) (when completions (let ((table - (cond - ((not (equal pcomplete-stub buftext)) - ;; This isn't always strictly right (e.g. if - ;; FOO="toto/$FOO", then completion of /$FOO/bar may - ;; result in something incorrect), but given the lack of - ;; any other info, it's about as good as it gets, and in - ;; practice it should work just fine (fingers crossed). - (let ((prefixes (pcomplete--common-quoted-suffix + (completion-table-with-quoting + (if (equal pcomplete-stub buftext) + completions + ;; This may not always be strictly right, but given the lack + ;; of any other info, it's about as good as it gets, and in + ;; practice it should work just fine (fingers crossed). + (let ((suf-len (pcomplete--common-suffix pcomplete-stub buftext))) - (comint--table-subvert - completions (cdr prefixes) (car prefixes) - #'pcomplete-quote-argument #'pcomplete-unquote-argument))) - (t - (lambda (string pred action) - (let ((res (complete-with-action - action completions string pred))) - (if (stringp res) - (pcomplete-quote-argument res) - res)))))) + (completion-table-subvert + completions + (substring buftext 0 (- (length buftext) suf-len)) + (substring pcomplete-stub 0 + (- (length pcomplete-stub) suf-len))))) + pcomplete-unquote-argument-function + pcomplete-requote-argument-function)) (pred ;; Pare it down, if applicable. (when (and pcomplete-use-paring pcomplete-seen) @@ -828,22 +791,8 @@ this is `comint-dynamic-complete-functions'." (throw 'pcompleted t) pcomplete-args)))))) -(defun pcomplete-quote-argument (filename) - "Return FILENAME with magic characters quoted. -Magic characters are those in `pcomplete-arg-quote-list'." - (if (null pcomplete-arg-quote-list) - filename - (let ((index 0)) - (mapconcat (lambda (c) - (prog1 - (or (run-hook-with-args-until-success - 'pcomplete-quote-arg-hook filename index) - (when (memq c pcomplete-arg-quote-list) - (string ?\\ c)) - (char-to-string c)) - (setq index (1+ index)))) - filename - "")))) +(define-obsolete-function-alias + 'pcomplete-quote-argument #'comint-quote-filename "24.2") ;; file-system completion lists @@ -1179,14 +1128,14 @@ Returns non-nil if a space was appended at the end." (if (not pcomplete-ignore-case) (insert-and-inherit (if raw-p (substring entry (length stub)) - (pcomplete-quote-argument + (comint-quote-filename (substring entry (length stub))))) ;; the stub is not quoted at this time, so to determine the ;; length of what should be in the buffer, we must quote it ;; FIXME: Here we presume that quoting `stub' gives us the exact ;; text in the buffer before point, which is not guaranteed; ;; e.g. it is not the case in eshell when completing ${FOO}tm[TAB]. - (delete-char (- (length (pcomplete-quote-argument stub)))) + (delete-char (- (length (comint-quote-filename stub)))) ;; if there is already a backslash present to handle the first ;; character, don't bother quoting it (when (eq (char-before) ?\\) @@ -1194,7 +1143,7 @@ Returns non-nil if a space was appended at the end." (setq entry (substring entry 1))) (insert-and-inherit (if raw-p entry - (pcomplete-quote-argument entry)))) + (comint-quote-filename entry)))) (let (space-added) (when (and (not (memq (char-before) pcomplete-suffix-list)) addsuffix) @@ -1204,7 +1153,7 @@ Returns non-nil if a space was appended at the end." pcomplete-last-completion-stub stub) space-added))) -;; selection of completions +;; Selection of completions. (defun pcomplete-do-complete (stub completions) "Dynamically complete at point using STUB and COMPLETIONS. From cc356a5d470c0b9b0cb7034c8b25a729a38d58a1 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Wed, 25 Apr 2012 14:57:09 -0400 Subject: [PATCH 187/564] Remove unnecessary use of minibuffer-completing-file-name. * lisp/ffap.el: Remove old code for obsolete package. (ffap-complete-as-file-p): Remove. * lisp/mh-e/mh-utils.el (minibuffer-completing-file-name): Don't declare. --- lisp/ChangeLog | 3 + lisp/ffap.el | 14 --- lisp/mh-e/ChangeLog | 240 +++++++++++++++++++++--------------------- lisp/mh-e/mh-utils.el | 3 +- lisp/minibuffer.el | 2 +- 5 files changed, 127 insertions(+), 135 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index dc56bf3c1e2..30d632742bc 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2012-04-25 Stefan Monnier + * ffap.el: Remove old code for obsolete package. + (ffap-complete-as-file-p): Remove. + Use completion-table-with-quoting for comint and pcomplete. * comint.el (comint--unquote&requote-argument) (comint--unquote-argument, comint--requote-argument): New functions. diff --git a/lisp/ffap.el b/lisp/ffap.el index 52ffc9905ed..7ab6a75406d 100644 --- a/lisp/ffap.el +++ b/lisp/ffap.el @@ -1340,20 +1340,6 @@ which may actually result in an URL rather than a filename." ;; We must inform complete about whether our completion function ;; will do filename style completion. -(defun ffap-complete-as-file-p () - ;; Will `minibuffer-completion-table' complete the minibuffer - ;; contents as a filename? Assumes the minibuffer is current. - ;; Note: t and non-nil mean somewhat different reasons. - (if (eq minibuffer-completion-table 'ffap-read-file-or-url-internal) - (not (ffap-url-p (buffer-string))) ; t - (and minibuffer-completing-file-name '(t)))) ;list - -(and - (featurep 'complete) - (if (boundp 'PC-completion-as-file-name-predicate) - ;; modern version of complete.el, just set the variable: - (setq PC-completion-as-file-name-predicate 'ffap-complete-as-file-p))) - ;;; Highlighting (`ffap-highlight'): ;; diff --git a/lisp/mh-e/ChangeLog b/lisp/mh-e/ChangeLog index f98b4a7490e..6eedef1980e 100644 --- a/lisp/mh-e/ChangeLog +++ b/lisp/mh-e/ChangeLog @@ -1,3 +1,7 @@ +2012-04-25 Stefan Monnier + + * mh-utils.el (minibuffer-completing-file-name): Don't declare, unused. + 2012-04-21 Juanma Barranquero * mh-folder.el (top): Check whether which-func-modes is t before @@ -179,8 +183,8 @@ * mh-mime.el (mh-decode-message-subject): New function to decode RFC2047 encoded Subject lines. Used for reply drafts. - * mh-comp.el (mh-compose-and-send-mail): Call - `mh-decode-message-subject' on (reply or forward) message drafts. + * mh-comp.el (mh-compose-and-send-mail): + Call `mh-decode-message-subject' on (reply or forward) message drafts. 2010-05-07 Chong Yidong @@ -353,8 +357,8 @@ * mh-show.el (mh-show-preferred-alternative) * mh-e.el (mh-annotate-msg-hook): Sync docstring with manual. - * mh-comp.el (mh-send-letter, mh-redistribute): Mention - mh-annotate-msg-hook in docstring. + * mh-comp.el (mh-send-letter, mh-redistribute): + Mention mh-annotate-msg-hook in docstring. 2008-06-29 Jeffrey C Honig @@ -404,8 +408,8 @@ 2008-05-23 Bill Wohler - * mh-e.el (mh-invisible-header-fields-internal): Remove - DKIM-Signature as it is covered by DKIM-. Fully qualify X-EID. + * mh-e.el (mh-invisible-header-fields-internal): + Remove DKIM-Signature as it is covered by DKIM-. Fully qualify X-EID. 2008-05-19 Sergey Poznyakoff @@ -488,8 +492,8 @@ 2007-08-21 Jeffrey C Honig - * mh-folder.el (mh-folder-message-menu, mh-folder-mode-map): Add - folder mode support for mh-show-preferred-alternative (closes SF + * mh-folder.el (mh-folder-message-menu, mh-folder-mode-map): + Add folder mode support for mh-show-preferred-alternative (closes SF #1777321). * mh-show.el (mh-show-preferred-alternative) @@ -500,8 +504,8 @@ HTML when text content is lacking (closes SF #1777321). * mh-e.el: - (mh-invisible-header-fields-internal): Exclude Fax and Phone. Put - known exclusions as comments before the list and move parens to + (mh-invisible-header-fields-internal): Exclude Fax and Phone. + Put known exclusions as comments before the list and move parens to separate lines to aid in sorting (closes SF #1701231). * mh-mime.el (mm-decode-body): Remove explicit autoload of @@ -750,16 +754,16 @@ (mh-tool-bar-folder-buttons-set, mh-tool-bar-letter-buttons-set): Call it (closes SF #1452718). - * mh-folder.el (mh-folder-buttons-init-flag): Delete. Use - mh-folder-tool-bar-map instead. + * mh-folder.el (mh-folder-buttons-init-flag): Delete. + Use mh-folder-tool-bar-map instead. (image-load-path): Delete. No longer used. - (mh-folder-mode): Moved setting of image-load-path into + (mh-folder-mode): Move setting of image-load-path into mh-tool-bar-folder-buttons-init. - * mh-letter.el (mh-letter-buttons-init-flag): Delete. Use - mh-letter-tool-bar-map instead. + * mh-letter.el (mh-letter-buttons-init-flag): Delete. + Use mh-letter-tool-bar-map instead. (image-load-path): Delete. No longer used. - (mh-letter-mode): Moved setting of image-load-path into + (mh-letter-mode): Move setting of image-load-path into mh-tool-bar-letter-buttons-init. * mh-seq.el (mh-narrow-to-seq, mh-widen): Use with-current-buffer @@ -1007,8 +1011,8 @@ (mh-print-background-flag, mh-show-maximum-size) (mh-show-use-xface-flag, mh-store-default-directory) (mh-summary-height, mh-speed-update-interval) - (mh-show-threads-flag, mh-tool-bar-search-function): Add - :package-version keyword to these options (closes SF #1452724). + (mh-show-threads-flag, mh-tool-bar-search-function): + Add :package-version keyword to these options (closes SF #1452724). (mh-after-commands-processed-hook) (mh-alias-reloaded-hook, mh-before-commands-processed-hook) (mh-before-quit-hook, mh-before-send-letter-hook) @@ -1035,15 +1039,15 @@ (mh-speedbar-selected-folder-with-unseen-messages): : Add :package-version keyword to these faces (closes SF #1452724). - * mh-tool-bar.el (mh-tool-bar-define): Added commented-out + * mh-tool-bar.el (mh-tool-bar-define): Add commented-out :package-version keywords (closes SF #1452724). 2006-03-28 Bill Wohler * mh-tool-bar.el: Use clipboard-kill-region, clipboard-kill-ring-save, and clipboard-yank instead of undo, - kill-region, and menu-bar-kill-ring-save respectively. In - MH-Letter mode, move save-buffer and mh-fully-kill-draft icons in + kill-region, and menu-bar-kill-ring-save respectively. + In MH-Letter mode, move save-buffer and mh-fully-kill-draft icons in front of mh-compose-insertion to be consistent with other mailers, such as Evolution. In MH-Folder mode, move vanilla reply icon to the left of the other reply icons. Use mail/inbox icon instead of @@ -1099,8 +1103,8 @@ 2006-03-14 Bill Wohler - * mh-compat.el (mh-image-load-path-for-library): Incorporate - changes from image-load-path-for-library, which are: + * mh-compat.el (mh-image-load-path-for-library): + Incorporate changes from image-load-path-for-library, which are: (image-load-path-for-library): Pass value of path rather than symbol. Always return list of directories. Guarantee that image directory comes first. @@ -1126,8 +1130,8 @@ flag to replace-in-string. This was badly needed by mh-quote-pick-expr in order to properly quote subjects when using / s on XEmacs (closes SF #1447598). - (mh-image-load-path-for-library): Merged changes from Reiner. Add - no-error argument. If path t, just return directory. + (mh-image-load-path-for-library): Merged changes from Reiner. + Add no-error argument. If path t, just return directory. * mh-e.el (mh-profile-component): Drop `s' from mhparam -components for Mailutils compatibility (closes SF #1446985). @@ -1185,8 +1189,8 @@ local variable mh-image-directory to image-directory. Move error checks to default case in cond and simplify. - * mh-comp.el (mh-send-letter, mh-insert-auto-fields): Sync - docstrings with manual. + * mh-comp.el (mh-send-letter, mh-insert-auto-fields): + Sync docstrings with manual. 2006-03-02 Bill Wohler @@ -1212,8 +1216,8 @@ * mh-utils.el (mh-image-directory) (mh-image-load-path-called-flag): Delete. - (mh-image-load-path): Incorporate changes from Gnus team. Biggest - changes are that it no longer uses/sets mh-image-directory or + (mh-image-load-path): Incorporate changes from Gnus team. + Biggest changes are that it no longer uses/sets mh-image-directory or mh-image-load-path-called-flag, and returns the updated path rather than change it. (mh-logo-display): Change usage of mh-image-load-path. @@ -1278,8 +1282,8 @@ goto-addr.el. (mh-alias-suggest-alias): Use goto-address-mail-regexp instead of mh-address-mail-regexp. - (mh-alias-add-address-under-point): Use - goto-address-find-address-at-point instead of + (mh-alias-add-address-under-point): + Use goto-address-find-address-at-point instead of mh-goto-address-find-address-at-point. * mh-e.el (mh-show-use-goto-addr-flag): Delete. @@ -1360,7 +1364,7 @@ 2006-02-08 Peter S Galbraith - * mh-e.el (mh-invisible-header-fields-internal): Added entries + * mh-e.el (mh-invisible-header-fields-internal): Add entries "X-BrightmailFiltered:", "X-Brightmail-Tracker:" and "X-Hashcash". 2006-02-04 Bill Wohler @@ -1429,17 +1433,17 @@ * mh-search.el (which-func-mode): Shush compiler on Emacs 21 too. - * mh-alias.el (mh-alias-gecos-name): Use - mh-replace-regexp-in-string instead of replace-regexp-in-string. + * mh-alias.el (mh-alias-gecos-name): + Use mh-replace-regexp-in-string instead of replace-regexp-in-string. (crm, multi-prompt): Use mh-require instead of require. - (mh-goto-address-find-address-at-point): Use - mh-line-beginning-position and mh-line-end-position instead of - line-beginning-position and line-end-position. Use - mh-match-string-no-properties instead of + (mh-goto-address-find-address-at-point): + Use mh-line-beginning-position and mh-line-end-position instead of + line-beginning-position and line-end-position. + Use mh-match-string-no-properties instead of match-string-no-properties. - * mh-comp.el (mh-modify-header-field): Use - mh-line-beginning-position and mh-line-end-position instead of + * mh-comp.el (mh-modify-header-field): + Use mh-line-beginning-position and mh-line-end-position instead of line-beginning-position and line-end-position. * mh-compat.el (mailabbrev): Use mh-require instead of require. @@ -1474,16 +1478,16 @@ mh-line-end-position instead of line-beginning-position and line-end-position. - * mh-limit.el (mh-subject-to-sequence-unthreaded): Use - mh-match-string-no-properties instead of + * mh-limit.el (mh-subject-to-sequence-unthreaded): + Use mh-match-string-no-properties instead of match-string-no-properties. (mh-narrow-to-header-field): Use mh-line-beginning-position and mh-line-end-position instead of line-beginning-position and line-end-position. * mh-mime.el (mh-mime-inline-part, mh-mm-display-part) - (mh-mh-quote-unescaped-sharp, mh-mh-directive-present-p): Use - mh-line-beginning-position and mh-line-end-position instead of + (mh-mh-quote-unescaped-sharp, mh-mh-directive-present-p): + Use mh-line-beginning-position and mh-line-end-position instead of line-beginning-position and line-end-position. * mh-search.el (which-func): Use mh-require instead of require. @@ -1492,8 +1496,8 @@ (mh-mairix-next-result, mh-namazu-next-result) (mh-pick-next-result, mh-grep-next-result) (mh-index-create-imenu-index, mh-index-match-checksum) - (mh-md5sum-parser, mh-openssl-parser, mh-index-update-maps): Use - mh-line-beginning-position and mh-line-end-position instead of + (mh-md5sum-parser, mh-openssl-parser, mh-index-update-maps): + Use mh-line-beginning-position and mh-line-end-position instead of line-beginning-position and line-end-position. * mh-seq.el (mh-list-sequences): Use mh-view-mode-enter instead of @@ -1516,8 +1520,8 @@ (mh-speed-flists): Use mh-cancel-timer instead of cancel-timer. * mh-thread.el (mh-thread-find-children) - (mh-thread-parse-scan-line, mh-thread-generate): Use - mh-line-beginning-position and mh-line-end-position instead of + (mh-thread-parse-scan-line, mh-thread-generate): + Use mh-line-beginning-position and mh-line-end-position instead of line-beginning-position and line-end-position. * mh-utils.el (mh-colors-available-p): Use mh-display-color-cells @@ -1738,8 +1742,8 @@ (mh-letter-header-field-regexp, mh-pgp-support-flag) (mh-x-mailer-string): Move here from mh-comp.el. (mh-folder-line-matches-show-buffer-p): Move to mh-alias.el. - (mh-thread-scan-line-map, mh-thread-scan-line-map-stack): Move - here from mh-seq.el. + (mh-thread-scan-line-map, mh-thread-scan-line-map-stack): + Move here from mh-seq.el. (mh-draft-folder, mh-inbox, mh-user-path, mh-current-folder) (mh-previous-window-config, mh-seen-list, mh-seq-list) (mh-show-buffer, mh-showing-mode, mh-globals-hash) @@ -2042,10 +2046,10 @@ (mh-show-mouse, mh-modify, mh-goto-msg, mh-set-folder-modified-p): Move to new file mh-folder.el. (with-mh-folder-updating, mh-in-show-buffer) - (mh-do-at-event-location, mh-seq-msgs): Moved to mh-acros.el. + (mh-do-at-event-location, mh-seq-msgs): Move to mh-acros.el. (mh-make-seq, mh-seq-name, mh-notate, mh-find-seq) (mh-seq-to-msgs, mh-add-msgs-to-seq, mh-canonicalize-sequence): - Moved to mh-seq.el. + Move to mh-seq.el. (mh-show-xface-function, mh-uncompface-executable, mh-face-to-png) (mh-uncompface, mh-icontopbm, mh-face-foreground-compat) (mh-face-background-compat, mh-face-display-function) @@ -2070,8 +2074,8 @@ mh-init.el. (mh-help-messages): Now an alist of modes to an alist of messages. (mh-set-help): New function used to set mh-help-messages. - (mh-help): Adjust for new format of mh-help-messages. Add - help-messages argument. + (mh-help): Adjust for new format of mh-help-messages. + Add help-messages argument. (mh-prefix-help): Refactor to use mh-help. (mh-coalesce-msg-list, mh-greaterp, mh-lessp): Move here from mh-e.el. @@ -2202,8 +2206,8 @@ (mh-search-mode-map): Autoload so that keys are shown in help even before mh-search is loaded. (mh-search-mode): Sync docstring with manual. - (mh-index-do-search): Rename argument indexer to searcher. Sync - docstring with manual. + (mh-index-do-search): Rename argument indexer to searcher. + Sync docstring with manual. (mh-pick-do-search): Sync docstring with manual. (mh-index-p): Rename to mh-search-p. (mh-indexer-choices): Rename to mh-search-choices. @@ -2220,7 +2224,7 @@ 2006-01-13 Bill Wohler - * mh-acros.el (require): Added Satyaki's comment regarding what + * mh-acros.el (require): Add Satyaki's comment regarding what needs to happen to remove this defadvice which caused a little discussion on emacs-devel today (see Subject: mh-e/mh-acros.el advices `require' incorrectly). @@ -2292,8 +2296,8 @@ * mh-gnus.el: Require mh-acros. (mh-defmacro-compat, mh-defun-compat): Move to mh-acros.el. - * mh-utils.el (mh-x-image-url-cache-canonicalize): Use - url-hexify-string to remove special characters from filenames + * mh-utils.el (mh-x-image-url-cache-canonicalize): + Use url-hexify-string to remove special characters from filenames (closes SF #1396499). Note that this invalidates the existing names in your cache so you might as well remove ~/Mail/.mhe-x-image-cache/* now. @@ -2352,16 +2356,16 @@ than file-executable-p which returns t for directories. (mh-file-command-p): Move here from mh-utils, since mh-variant-*-info are the only functions to use it. - (mh-variant-set, mh-variant-set-variant, mh-variant-p): Use - function mh-variants instead of variable. More robust. + (mh-variant-set, mh-variant-set-variant, mh-variant-p): + Use function mh-variants instead of variable. More robust. (mh-find-path-run): Move here from mh-utils.el. Mention that checking this variable is unnecessary. (mh-find-path): Move here from mh-utils.el. With the advent of MH variants and an mhparam command that doesn't work if there isn't - an MH profile, we can't get libdir for running install-mh. So - don't bother. If there's an issue with the environment, direct the - user to install MH and run install-mh (closes SF #835192). Don't - read ~/.mh_profile directly. Use mh-profile-component which uses + an MH profile, we can't get libdir for running install-mh. + So don't bother. If there's an issue with the environment, direct the + user to install MH and run install-mh (closes SF #835192). + Don't read ~/.mh_profile directly. Use mh-profile-component which uses mhparam (closes SF #1016027). * mh-utils.el (mh-get-profile-field): Rename to @@ -2376,12 +2380,12 @@ (mh-no-install, mh-install): Delete. * mh-customize.el (mh-folder-msg-number): - * mh-mime.el (mh-file-mime-type): Removed trailing whitespace. + * mh-mime.el (mh-file-mime-type): Remove trailing whitespace. 2006-01-09 Bill Wohler - * mh-init.el (mh-variant-mu-mh-info, mh-variant-nmh-info): Applied - patch from Satyaki from SF #1016027. + * mh-init.el (mh-variant-mu-mh-info, mh-variant-nmh-info): + Applied patch from Satyaki from SF #1016027. * mh-e.el (mh-rescan-folder): Try to keep cursor at current message, even if cur sequence is no longer present (closes SF @@ -2429,7 +2433,7 @@ * mh-comp.el: Require cleanup, wrap compiler-shushing defvars with eval-when-compile. - (mh-file-is-vcard-p): Removed redundant test. + (mh-file-is-vcard-p): Remove redundant test. * mh-customize.el: Require cleanup, wrap compiler-shushing defvars with eval-when-compile. @@ -2455,8 +2459,8 @@ * mh-mime.el: Wrap compiler-shushing defvars with eval-when-compile. - (mh-have-file-command): Initialize variable to 'undefined. Add - docstring. Update function of same name accordingly. Also don't + (mh-have-file-command): Initialize variable to 'undefined. + Add docstring. Update function of same name accordingly. Also don't need to load executable any more. (mh-mime-content-types): Delete. (mh-minibuffer-read-type): Prompt user for type if @@ -2695,11 +2699,11 @@ with manual. (mh-yank-cur-msg): Mention that mh-ins-buf-prefix isn't used if you have added a mail-citation-hook and neither are used if you - use one of the supercite flavors of mh-yank-behavior. Sync - docstrings with manual. + use one of the supercite flavors of mh-yank-behavior. + Sync docstrings with manual. - * mh-customize.el (mh-kill-folder-suppress-prompt-hooks): Rename - from mh-kill-folder-suppress-prompt-hook since it is an abnormal + * mh-customize.el (mh-kill-folder-suppress-prompt-hooks): + Rename from mh-kill-folder-suppress-prompt-hook since it is an abnormal hook. Use "Hook run by `function'..." instead of "Invoked...". Sync docstrings with manual. (mh-ins-buf-prefix, mh-yank-behavior): Mention that @@ -2824,13 +2828,13 @@ * mh-customize.el (mh-speed-flists-interval): Rename to mh-speed-update-interval. - (mh-speed-run-flists-flag): Delete. Setting - mh-speed-flists-interval to 0 accomplishes the same thing. + (mh-speed-run-flists-flag): Delete. + Setting mh-speed-flists-interval to 0 accomplishes the same thing. - * mh-speed.el (mh-folder-speedbar-buttons, mh-speed-flists): Use - mh-speed-update-interval instead of mh-speed-run-flists-flag. - (mh-speed-toggle, mh-speed-view, mh-speed-refresh): Sync - docstrings with manual. + * mh-speed.el (mh-folder-speedbar-buttons, mh-speed-flists): + Use mh-speed-update-interval instead of mh-speed-run-flists-flag. + (mh-speed-toggle, mh-speed-view, mh-speed-refresh): + Sync docstrings with manual. 2005-12-09 Bill Wohler @@ -2847,8 +2851,8 @@ (mh-invisible-header-fields-internal): Add X-Bugzilla-* and X-Virus-Scanned. - * mh-customize.el (mh-insert-signature-hook): Rename - mh-letter-insert-signature-hook to mh-insert-signature-hook. + * mh-customize.el (mh-insert-signature-hook): + Rename mh-letter-insert-signature-hook to mh-insert-signature-hook. * mh-comp.el (mh-insert-signature): Ditto. @@ -2950,10 +2954,10 @@ (mh-next-undeleted-msg, mh-previous-undeleted-msg): Rename arg to count. Sync docstrings with manual. (mh-refile-or-write-again): Use output from mh-write-msg-to-file - so that message doesn't change when using this command. Sync - docstrings with manual. - (mh-page-msg, mh-previous-page): Rename arg to lines. Sync - docstrings with manual. + so that message doesn't change when using this command. + Sync docstrings with manual. + (mh-page-msg, mh-previous-page): Rename arg to lines. + Sync docstrings with manual. (mh-write-msg-to-file): Rename msg to message. Rename no-headers to no-header. Sync docstrings with manual. (mh-ps-print-map): Delete keybindings for deleted commands @@ -2977,8 +2981,8 @@ Sync docstrings with manual. (mh-toggle-mh-decode-mime-flag): Use English in message, not Lisp. Sync docstrings with manual. - (mh-mm-display-part, mh-mm-inline-message): Use - mh-highlight-citation-style instead of mh-highlight-citation-p. + (mh-mm-display-part, mh-mm-inline-message): + Use mh-highlight-citation-style instead of mh-highlight-citation-p. (mh-press-button): Sync docstrings with manual. (mh-display-with-external-viewer): Fix default output in minibuffer. Sync docstrings with manual. @@ -3069,8 +3073,8 @@ (mh-smail, mh-extract-rejected-mail, mh-forward, mh-redistribute) (mh-reply, mh-send, mh-send-other-window) (mh-fill-paragraph-function): Sync docstrings with manual. - (mh-edit-again, mh-extract-rejected-mail, mh-redistribute): Rename - msg argument to message (to make for a better docstring). + (mh-edit-again, mh-extract-rejected-mail, mh-redistribute): + Rename msg argument to message (to make for a better docstring). * mh-customize.el (mh-redist-full-contents-flag): Convert defvar to defcustom. Rename by adding -flag. @@ -3095,8 +3099,8 @@ * mh-customize.el (mh-compose-space-does-completion-flag) (mh-signature-separator-flag, mh-interpret-number-as-range-flag) (mh-adaptive-cmd-note-flag): Use "Non-nil means" instead of "On - means" to remain checkdoc clean and consistent with Emacs. I - raised this issue with the Emacs developers and Stallman agrees + means" to remain checkdoc clean and consistent with Emacs. + I raised this issue with the Emacs developers and Stallman agrees that "On means" should be allowed in custom docstrings but that this change requires thought and should wait until after the Emacs 22 release. @@ -3108,14 +3112,14 @@ * mh-customize.el (mh-interpret-number-as-range-flag): Add * to docstring. - (mh-adaptive-cmd-note-flag-check, mh-scan-format-file-check): New - functions to check input for mh-adaptive-cmd-note-flag and + (mh-adaptive-cmd-note-flag-check, mh-scan-format-file-check): + New functions to check input for mh-adaptive-cmd-note-flag and mh-scan-format-file respectively. (mh-adaptive-cmd-note-flag, mh-scan-format-file): Docstring fixes, add :set. - * mh-e.el (mh-scan-field-destination-offset): New variable. The - destination is the -, t, b, c, or n character for Replied, To, cc, + * mh-e.el (mh-scan-field-destination-offset): New variable. + The destination is the -, t, b, c, or n character for Replied, To, cc, Bcc, or Newsgroups respectively. (mh-make-folder, mh-regenerate-headers, mh-generate-new-cmd-note): Call new function mh-msg-num-width-to-column to make leap between @@ -3235,10 +3239,10 @@ 2005-10-23 Bill Wohler - * mh-comp.el (mh-letter-menu): Rename - mh-mhn-compose-external-compressed-tar to - mh-mh-compose-external-compressed-tar. Rename - mh-mhn-compose-anon-ftp to mh-mh-compose-anon-ftp. Rename + * mh-comp.el (mh-letter-menu): + Rename mh-mhn-compose-external-compressed-tar to + mh-mh-compose-external-compressed-tar. + Rename mh-mhn-compose-anon-ftp to mh-mh-compose-anon-ftp. Rename mh-edit-mhn to mh-mh-to-mime. Rename mh-mhn-directive-present-p to mh-mh-directive-present-p. Rename mh-revert-mhn-edit to mh-mh-to-mime-undo. Rename mh-gnus-pgp-support-flag to @@ -3248,21 +3252,21 @@ mh-mh-directive-present-p. (mh-send-letter): Rename mh-mhn-directive-present-p to mh-mh-directive-present-p. Rename mh-edit-mhn to mh-mh-to-mime. - (mh-letter-mode-map): Rename mh-edit-mhn to mh-mh-to-mime. Rename - mh-mhn-compose-anon-ftp to mh-mh-compose-anon-ftp. Rename - mh-mhn-compose-external-compressed-tar to + (mh-letter-mode-map): Rename mh-edit-mhn to mh-mh-to-mime. + Rename mh-mhn-compose-anon-ftp to mh-mh-compose-anon-ftp. + Rename mh-mhn-compose-external-compressed-tar to mh-mh-compose-external-compressed-tar. Rename mh-revert-mhn-edit to mh-mh-to-mime-undo. Rename mh-mhn-compose-external-type to mh-mh-compose-external-type. Rename mh-mhn-compose-anon-ftp to - mh-mh-compose-anon-ftp. Rename - mh-mhn-compose-external-compressed-tar to + mh-mh-compose-anon-ftp. + Rename mh-mhn-compose-external-compressed-tar to mh-mh-compose-external-compressed-tar. Rename mh-revert-mhn-edit to mh-mh-to-mime-undo. Rename mh-mhn-compose-external-type to mh-mh-compose-external-type. (mh-send-letter, mh-letter-mode-map): Rename mh-edit-mhn to mh-mh-to-mime, mh-revert-mhn-edit to mh-mh-to-mime-undo. - (mh-reply, mh-yank-cur-msg, mh-insert-prefix-string): Rename - mh-yank-from-start-of-msg to mh-yank-behavior. + (mh-reply, mh-yank-cur-msg, mh-insert-prefix-string): + Rename mh-yank-from-start-of-msg to mh-yank-behavior. (mh-letter-mode, mh-to-field, mh-to-fcc, mh-insert-signature) (mh-check-whom, mh-insert-auto-fields, mh-send-letter) (mh-insert-letter, mh-yank-cur-msg, mh-insert-prefix-string) @@ -3305,8 +3309,8 @@ (mh-mhn-compose-anon-ftp): Rename to mh-mh-compose-anon-ftp. Rename mh-mhn-compose-external-type to mh-mh-compose-external-type. (mh-mhn-compose-external-compressed-tar): Rename to - mh-mh-compose-external-compressed-tar. Rename - mh-mhn-compose-external-type to mh-mh-compose-external-type. + mh-mh-compose-external-compressed-tar. + Rename mh-mhn-compose-external-type to mh-mh-compose-external-type. (mh-mhn-compose-external-type): Rename to mh-mh-compose-external-type. (mh-edit-mhn): Rename to mh-mh-to-mime. Rename mh-mhn-args to mh-mh-to-mime-args. Rename mh-edit-mhn-hook to mh-mh-to-mime-hook. @@ -3323,8 +3327,8 @@ (mh-mh-compose-external-type): Rename extra-param argument to parameters. (mh-mml-to-mime, mh-secure-message, mh-mml-unsecure-message) - (mh-mime-display-part, mh-mime-display-single): Rename - mh-gnus-pgp-support-flag to mh-pgp-support-flag. + (mh-mime-display-part, mh-mime-display-single): + Rename mh-gnus-pgp-support-flag to mh-pgp-support-flag. (mh-compose-insertion): Rename mh-mhn-compose-insertion to mh-mh-attach-file. (mh-compose-forward): Rename mh-mhn-compose-forw to @@ -3389,8 +3393,8 @@ * mh-init.el (mh-image-load-path-called-flag): New variable which is used by mh-image-load-path so that it runs only once. - (mh-image-load-path): Modify so that it gets run only once. Also - flatten out heavily nested if statements to make it clearer. + (mh-image-load-path): Modify so that it gets run only once. + Also flatten out heavily nested if statements to make it clearer. * mh-e.el (mh-folder-mode): Call mh-image-load-path to allow Emacs to find images used in the toolbar. @@ -3414,11 +3418,11 @@ need to be indented. * mh-e.el: mh-folder-tick-face had been renamed to mh-folder-tick - but the code that invoked the face had not been updated. Tick - highlighting working again. + but the code that invoked the face had not been updated. + Tick highlighting working again. - * mh-seq.el (mh-non-seq-mode-line-annotation): Move - make-variable-buffer-local call to top level to avoid warnings in + * mh-seq.el (mh-non-seq-mode-line-annotation): + Move make-variable-buffer-local call to top level to avoid warnings in CVS Emacs. * mh-comp.el (mh-insert-letter): Replace deprecated read-input diff --git a/lisp/mh-e/mh-utils.el b/lisp/mh-e/mh-utils.el index 1944a4cd08f..2b5e51cfb34 100644 --- a/lisp/mh-e/mh-utils.el +++ b/lisp/mh-e/mh-utils.el @@ -732,8 +732,7 @@ See Info node `(elisp) Programmed Completion' for details." ;; Shush compiler. (mh-do-in-xemacs - (defvar completion-root-regexp) - (defvar minibuffer-completing-file-name)) + (defvar completion-root-regexp)) (defun mh-folder-completing-read (prompt default allow-root-folder-flag) "Read folder name with PROMPT and default result DEFAULT. diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index b1e9ccbdba8..733a132bb1c 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -2280,7 +2280,7 @@ and `read-file-name-function'." ;; use (eq minibuffer-completion-table #'read-file-name-internal), which is ;; probably even worse. Maybe We should add some read-file-name-setup-hook ;; instead, but for now, let's keep this non-obsolete. -;;(make-obsolete-variable 'minibuffer-completing-file-name nil "24.1" 'get) +;;(make-obsolete-variable 'minibuffer-completing-file-name nil "future" 'get) (defun read-file-name-default (prompt &optional dir default-filename mustmatch initial predicate) "Default method for reading file names. From 16152b76a4f0fd82674479b64d923bd86aab5f24 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 25 Apr 2012 20:31:47 -0400 Subject: [PATCH 188/564] Use Texinfo recommended convention for quotes+punctuation. --- doc/emacs/ChangeLog | 10 ++++++++++ doc/emacs/ack.texi | 6 +++--- doc/emacs/basic.texi | 4 ++-- doc/emacs/buffers.texi | 6 +++--- doc/emacs/building.texi | 2 +- doc/emacs/calendar.texi | 12 ++++++------ doc/emacs/cmdargs.texi | 2 +- doc/emacs/commands.texi | 2 +- doc/emacs/custom.texi | 4 ++-- doc/emacs/dired.texi | 10 +++++----- doc/emacs/display.texi | 8 ++++---- doc/emacs/emerge-xtra.texi | 2 +- doc/emacs/files.texi | 4 ++-- doc/emacs/fortran-xtra.texi | 2 +- doc/emacs/help.texi | 2 +- doc/emacs/kmacro.texi | 2 +- doc/emacs/mini.texi | 2 +- doc/emacs/misc.texi | 8 ++++---- doc/emacs/msdog-xtra.texi | 2 +- doc/emacs/picture-xtra.texi | 2 +- doc/emacs/programs.texi | 4 ++-- doc/emacs/rmail.texi | 2 +- doc/emacs/search.texi | 8 ++++---- doc/emacs/trouble.texi | 10 +++++----- doc/emacs/windows.texi | 4 ++-- doc/lispref/ChangeLog | 9 +++++++++ doc/lispref/buffers.texi | 2 +- doc/lispref/commands.texi | 8 ++++---- doc/lispref/compile.texi | 2 +- doc/lispref/control.texi | 4 ++-- doc/lispref/customize.texi | 4 ++-- doc/lispref/display.texi | 18 +++++++++--------- doc/lispref/eval.texi | 2 +- doc/lispref/files.texi | 10 +++++----- doc/lispref/frames.texi | 12 ++++++------ doc/lispref/hash.texi | 8 ++++---- doc/lispref/help.texi | 2 +- doc/lispref/intro.texi | 4 ++-- doc/lispref/keymaps.texi | 6 +++--- doc/lispref/lists.texi | 8 ++++---- doc/lispref/modes.texi | 10 +++++----- doc/lispref/numbers.texi | 2 +- doc/lispref/objects.texi | 4 ++-- doc/lispref/streams.texi | 4 ++-- doc/lispref/symbols.texi | 2 +- doc/lispref/syntax.texi | 4 ++-- doc/lispref/text.texi | 14 +++++++------- doc/lispref/tips.texi | 14 +++++++------- doc/lispref/variables.texi | 2 +- 49 files changed, 147 insertions(+), 128 deletions(-) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index deb10e0e488..8bca778b60c 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,3 +1,13 @@ +2012-04-26 Glenn Morris + + * ack.texi, basic.texi, buffers.texi, building.texi: + * calendar.texi, cmdargs.texi, commands.texi, custom.texi: + * dired.texi, display.texi, emerge-xtra.texi, files.texi: + * fortran-xtra.texi, help.texi, kmacro.texi, mini.texi, misc.texi: + * msdog-xtra.texi, picture-xtra.texi, programs.texi, rmail.texi: + * search.texi, trouble.texi, windows.texi: + Use Texinfo recommended convention for quotes+punctuation. + 2012-04-25 Eli Zaretskii * mule.texi (Bidirectional Editing): Improve indexing. Minor diff --git a/doc/emacs/ack.texi b/doc/emacs/ack.texi index 40e8cdfdbd0..5e4e6f25474 100644 --- a/doc/emacs/ack.texi +++ b/doc/emacs/ack.texi @@ -240,7 +240,7 @@ for compiled Emacs Lisp code. @item Mathias Dahl wrote @file{image-dired.el}, a package for viewing image -files as ``thumbnails.'' +files as ``thumbnails''. @item Julien Danjou wrote an implementation of ``Desktop Notifications'' @@ -1031,7 +1031,7 @@ Together with Dmitry Dzhus, he wrote @file{gdb-mi.el}, the successor to @item Danny Roozendaal implemented @file{handwrite.el}, which converts text -into ``handwriting.'' +into ``handwriting''. @item Markus Rost wrote @file{cus-test.el}, a testing framework for customize. @@ -1228,7 +1228,7 @@ the keyboard. @item Jean-Philippe Theberge wrote @file{thumbs.el}, a package for viewing -image files as ``thumbnails.'' +image files as ``thumbnails''. @item Spencer Thomas wrote the original @file{dabbrev.el}, providing a command diff --git a/doc/emacs/basic.texi b/doc/emacs/basic.texi index 5ad48eb48ef..2650b55811f 100644 --- a/doc/emacs/basic.texi +++ b/doc/emacs/basic.texi @@ -668,7 +668,7 @@ those two positions are the accessible ones. @xref{Narrowing}. @cindex arguments to commands In the terminology of mathematics and computing, @dfn{argument} -means ``data provided to a function or operation.'' You can give any +means ``data provided to a function or operation''. You can give any Emacs command a @dfn{numeric argument} (also called a @dfn{prefix argument}). Some commands interpret the argument as a repetition count. For example, giving @kbd{C-f} an argument of ten causes it to @@ -762,7 +762,7 @@ described when they come up; they exist to make an individual command more convenient, and they are documented in that command's documentation string. - We use the term ``prefix argument'' as well as ``numeric argument,'' + We use the term ``prefix argument'' as well as ``numeric argument'', to emphasize that you type these argument before the command, and to distinguish them from minibuffer arguments that come after the command. diff --git a/doc/emacs/buffers.texi b/doc/emacs/buffers.texi index d2783bcb0ba..90d5084e3d9 100644 --- a/doc/emacs/buffers.texi +++ b/doc/emacs/buffers.texi @@ -180,7 +180,7 @@ buffers that were current most recently come first. @samp{.} in the first field of a line indicates that the buffer is current. @samp{%} indicates a read-only buffer. @samp{*} indicates -that the buffer is ``modified.'' If several buffers are modified, it +that the buffer is ``modified''. If several buffers are modified, it may be time to save some with @kbd{C-x s} (@pxref{Save Commands}). Here is an example of a buffer list: @@ -392,7 +392,7 @@ line: @table @kbd @item ~ -Mark the buffer ``unmodified.'' The command @kbd{~} does this +Mark the buffer ``unmodified''. The command @kbd{~} does this immediately when you type it. @item % Toggle the buffer's read-only flag. The command @kbd{%} does @@ -590,7 +590,7 @@ rule or another is easier for you to remember and apply quickly. Iswitchb global minor mode provides convenient switching between buffers using substrings of their names. It replaces the normal definitions of @kbd{C-x b}, @kbd{C-x 4 b}, @kbd{C-x 5 b}, and @kbd{C-x -4 C-o} with alternative commands that are somewhat ``smarter.'' +4 C-o} with alternative commands that are somewhat ``smarter''. When one of these commands prompts you for a buffer name, you can type in just a substring of the name you want to choose. As you enter diff --git a/doc/emacs/building.texi b/doc/emacs/building.texi index fef7d2b2828..4b92376b8a9 100644 --- a/doc/emacs/building.texi +++ b/doc/emacs/building.texi @@ -331,7 +331,7 @@ you can do anything else in Emacs). @xref{MS-DOS}. Just as you can run a compiler from Emacs and then visit the lines with compilation errors, you can also run @command{grep} and then visit the lines on which matches were found. This works by treating -the matches reported by @command{grep} as if they were ``errors.'' +the matches reported by @command{grep} as if they were ``errors''. The output buffer uses Grep mode, which is a variant of Compilation mode (@pxref{Compilation Mode}). diff --git a/doc/emacs/calendar.texi b/doc/emacs/calendar.texi index c2851d4abd3..a1e98bfcb92 100644 --- a/doc/emacs/calendar.texi +++ b/doc/emacs/calendar.texi @@ -624,7 +624,7 @@ for all users in a @file{default.el} file. @xref{Init File}. These calendar commands display the dates and times of the phases of the moon (new moon, first quarter, full moon, last quarter). This feature is useful for debugging problems that ``depend on the phase of -the moon.'' +the moon''. @table @kbd @item M @@ -822,7 +822,7 @@ Display Mayan date for selected day (@code{calendar-mayan-print-date}). Otherwise, move point to the date you want to convert, then type the appropriate command starting with @kbd{p} from the table above. The -prefix @kbd{p} is a mnemonic for ``print,'' since Emacs ``prints'' the +prefix @kbd{p} is a mnemonic for ``print'', since Emacs ``prints'' the equivalent date in the echo area. @kbd{p o} displays the date in all forms known to Emacs. You can also use @kbd{Mouse-3} and then choose @kbd{Other calendars} from the menu that appears. This @@ -901,7 +901,7 @@ Islamic, or French names. @findex calendar-hebrew-list-yahrzeits @cindex yahrzeits One common issue concerning the Hebrew calendar is the computation -of the anniversary of a date of death, called a ``yahrzeit.'' The Emacs +of the anniversary of a date of death, called a ``yahrzeit''. The Emacs calendar includes a facility for such calculations. If you are in the calendar, the command @kbd{M-x calendar-hebrew-list-yahrzeits} asks you for a range of years and then displays a list of the yahrzeit dates for those @@ -1426,8 +1426,8 @@ that applies to the fourth Thursday in November: @noindent The 11 specifies November (the eleventh month), the 4 specifies Thursday (the fourth day of the week, where Sunday is numbered zero), and the -second 4 specifies the fourth Thursday (1 would mean ``first,'' 2 would -mean ``second,'' @minus{}2 would mean ``second-to-last,'' and so on). +second 4 specifies the fourth Thursday (1 would mean ``first'', 2 would +mean ``second'', @minus{}2 would mean ``second-to-last'', and so on). The month can be a single month or a list of months. Thus you could change the 11 above to @samp{'(1 2 3)} and have the entry apply to the last Thursday of January, February, and March. If the month is @code{t}, the @@ -1681,7 +1681,7 @@ timeclock-change}. Once you've collected data from a number of time intervals, you can use @kbd{M-x timeclock-workday-remaining} to see how much time is left to work today (assuming a typical average of 8 hours a day), and @kbd{M-x -timeclock-when-to-leave} which will calculate when you're ``done.'' +timeclock-when-to-leave} which will calculate when you're ``done''. @vindex timeclock-modeline-display @findex timeclock-modeline-display diff --git a/doc/emacs/cmdargs.texi b/doc/emacs/cmdargs.texi index 4c6d6ef7bad..222aa0f8434 100644 --- a/doc/emacs/cmdargs.texi +++ b/doc/emacs/cmdargs.texi @@ -442,7 +442,7 @@ Directory for the documentation string file, which is used to initialize the Lisp variable @code{doc-directory}. @item EMACSLOADPATH A colon-separated list of directories@footnote{ Here and below, -whenever we say ``colon-separated list of directories,'' it pertains +whenever we say ``colon-separated list of directories'', it pertains to Unix and GNU/Linux systems. On MS-DOS and MS-Windows, the directories are separated by semi-colons instead, since DOS/Windows file names might include a colon after a drive letter.} to search for diff --git a/doc/emacs/commands.texi b/doc/emacs/commands.texi index 3285b65e57b..9678adfe87f 100644 --- a/doc/emacs/commands.texi +++ b/doc/emacs/commands.texi @@ -166,7 +166,7 @@ commands, even though strictly speaking the key is bound to a command. Usually we state the name of the command which really does the work in parentheses after mentioning the key that runs it. For example, we will say that ``The command @kbd{C-n} (@code{next-line}) moves point -vertically down,'' meaning that the command @code{next-line} moves +vertically down'', meaning that the command @code{next-line} moves vertically down, and the key @kbd{C-n} is normally bound to it. Since we are discussing customization, we should tell you about diff --git a/doc/emacs/custom.texi b/doc/emacs/custom.texi index 72b4961e209..cfd45de6aca 100644 --- a/doc/emacs/custom.texi +++ b/doc/emacs/custom.texi @@ -1922,7 +1922,7 @@ single click definition has run when the first click was received. This constrains what you can do with double clicks, but user interface designers say that this constraint ought to be followed in any case. A double click should do something similar to the single click, only -``more so.'' The command for the double-click event should perform the +``more so''. The command for the double-click event should perform the extra work for the double click. If a double-click event has no binding, it changes to the @@ -1970,7 +1970,7 @@ or @samp{triple-}, which always precede @samp{drag-} or @samp{down-}. A frame includes areas that don't show text from the buffer, such as the mode line and the scroll bar. You can tell whether a mouse button comes from a special area of the screen by means of dummy ``prefix -keys.'' For example, if you click the mouse in the mode line, you get +keys''. For example, if you click the mouse in the mode line, you get the prefix key @code{mode-line} before the ordinary mouse-button symbol. Thus, here is how to define the command for clicking the first button in a mode line to run @code{scroll-up-command}: diff --git a/doc/emacs/dired.texi b/doc/emacs/dired.texi index 301f8a76477..f3a1ae2fc99 100644 --- a/doc/emacs/dired.texi +++ b/doc/emacs/dired.texi @@ -14,7 +14,7 @@ optionally some of its subdirectories as well. You can use the normal Emacs commands to move around in this buffer, and special Dired commands to operate on the listed files. - The Dired buffer is ``read-only,'' and inserting text in it is not + The Dired buffer is ``read-only'', and inserting text in it is not allowed. Ordinary printing characters such as @kbd{d} and @kbd{x} are redefined for special Dired commands. Some Dired commands @dfn{mark} or @dfn{flag} the @dfn{current file} (that is, the file on the current @@ -1252,7 +1252,7 @@ and erases all flags and marks. @findex wdired-change-to-wdired-mode Wdired is a special mode that allows you to perform file operations by editing the Dired buffer directly (the ``W'' in ``Wdired'' stands -for ``writable.'') To enter Wdired mode, type @kbd{C-x C-q} +for ``writable''.) To enter Wdired mode, type @kbd{C-x C-q} (@code{dired-toggle-read-only}) while in a Dired buffer. Alternatively, use the @samp{Immediate / Edit File Names} menu item. @@ -1297,7 +1297,7 @@ buffer containing image-dired, corresponding to the marked files. You can also enter Image-Dired directly by typing @kbd{M-x image-dired}. This prompts for a directory; specify one that has image files. This creates thumbnails for all the images in that -directory, and displays them all in the ``thumbnail buffer.'' This +directory, and displays them all in the ``thumbnail buffer''. This takes a long time if the directory contains many image files, and it asks for confirmation if the number of image files exceeds @code{image-dired-show-all-from-dir-max-files}. @@ -1408,7 +1408,7 @@ the current buffer. The default comparison method (used if you type @key{RET} at the prompt) is to compare just the file names---each file name that does -not appear in the other directory is ``different.'' You can specify +not appear in the other directory is ``different''. You can specify more stringent comparisons by entering a Lisp expression, which can refer to the variables @code{size1} and @code{size2}, the respective file sizes; @code{mtime1} and @code{mtime2}, the last modification @@ -1416,7 +1416,7 @@ times in seconds, as floating point numbers; and @code{fa1} and @code{fa2}, the respective file attribute lists (as returned by the function @code{file-attributes}). This expression is evaluated for each pair of like-named files, and if the expression's value is -non-@code{nil}, those files are considered ``different.'' +non-@code{nil}, those files are considered ``different''. For instance, the sequence @code{M-x dired-compare-directories @key{RET} (> mtime1 mtime2) @key{RET}} marks files newer in this diff --git a/doc/emacs/display.texi b/doc/emacs/display.texi index da33d352698..84e81f565cc 100644 --- a/doc/emacs/display.texi +++ b/doc/emacs/display.texi @@ -448,7 +448,7 @@ and visits it with View mode enabled. @cindex synchronizing windows @dfn{Follow mode} is a minor mode that makes two windows, both -showing the same buffer, scroll as a single tall ``virtual window.'' +showing the same buffer, scroll as a single tall ``virtual window''. To use Follow mode, go to a frame with just one window, split it into two side-by-side windows using @kbd{C-x 3}, and then type @kbd{M-x follow-mode}. From then on, you can edit the buffer in either of the @@ -982,15 +982,15 @@ fringes on the selected frame only, use @kbd{M-x set-fringe-style}. line (@pxref{Continuation Lines}). When one line of text is split into multiple screen lines, the left fringe shows a curving arrow for each screen line except the first, indicating that ``this is not the -real beginning.'' The right fringe shows a curving arrow for each +real beginning''. The right fringe shows a curving arrow for each screen line except the last, indicating that ``this is not the real -end.'' If the line's direction is right-to-left (@pxref{Bidirectional +end''. If the line's direction is right-to-left (@pxref{Bidirectional Editing}), the meanings of the curving arrows in the fringes are swapped. The fringes indicate line truncation with short horizontal arrows meaning ``there's more text on this line which is scrolled -horizontally out of view.'' Clicking the mouse on one of the arrows +horizontally out of view''. Clicking the mouse on one of the arrows scrolls the display horizontally in the direction of the arrow. The fringes can also indicate other things, such as buffer diff --git a/doc/emacs/emerge-xtra.texi b/doc/emacs/emerge-xtra.texi index 72e0b36b704..552580ef851 100644 --- a/doc/emacs/emerge-xtra.texi +++ b/doc/emacs/emerge-xtra.texi @@ -151,7 +151,7 @@ input. The mode line indicates Auto Advance mode with @samp{A}. If Skip Prefers mode is in effect, the @kbd{n} and @kbd{p} commands skip over differences in states ``prefer-A'' and ``prefer-B'' (@pxref{State of Difference}). Thus you see only differences for -which neither version is presumed ``correct.'' The mode line +which neither version is presumed ``correct''. The mode line indicates Skip Prefers mode with @samp{S}. This mode is only relevant when there is an ancestor. diff --git a/doc/emacs/files.texi b/doc/emacs/files.texi index 10ba9ed1fa6..31883a1f5cc 100644 --- a/doc/emacs/files.texi +++ b/doc/emacs/files.texi @@ -97,7 +97,7 @@ minibuffer, with a directory omitted, specifies the file When typing a file name into the minibuffer, you can make use of a couple of shortcuts: a double slash is interpreted as ``ignore -everything before the second slash in the pair,'' and @samp{~/} is +everything before the second slash in the pair'', and @samp{~/} is interpreted as your home directory. @xref{Minibuffer File}. @cindex environment variables in file names @@ -1340,7 +1340,7 @@ correct the line numbers in the hunk headers, to ensure that the diff remains ``correct''. To disable automatic line number correction, change the variable @code{diff-update-on-the-fly} to @code{nil}. - Diff mode treats each hunk as an ``error message,'' similar to + Diff mode treats each hunk as an ``error message'', similar to Compilation mode. Thus, you can use commands such as @kbd{C-x '} to visit the corresponding source locations. @xref{Compilation Mode}. diff --git a/doc/emacs/fortran-xtra.texi b/doc/emacs/fortran-xtra.texi index 0dc99034ae6..43e2e63863e 100644 --- a/doc/emacs/fortran-xtra.texi +++ b/doc/emacs/fortran-xtra.texi @@ -207,7 +207,7 @@ the Fortran standard counts from 1.) The variable @code{fortran-continuation-string} specifies what character to put in column 5. A line that starts with a tab character followed by any digit except @samp{0} is also a continuation line. We call this style of -continuation @dfn{tab format}. (Fortran 90 introduced ``free form,'' +continuation @dfn{tab format}. (Fortran 90 introduced ``free form'', with another style of continuation lines). @vindex indent-tabs-mode @r{(Fortran mode)} diff --git a/doc/emacs/help.texi b/doc/emacs/help.texi index eef38136583..e8c5614ff58 100644 --- a/doc/emacs/help.texi +++ b/doc/emacs/help.texi @@ -96,7 +96,7 @@ of the major mode, then global bindings (@code{describe-bindings}). @item C-h c @var{key} Show the name of the command that the key sequence @var{key} is bound to (@code{describe-key-briefly}). Here @kbd{c} stands for -``character.'' For more extensive information on @var{key}, use +``character''. For more extensive information on @var{key}, use @kbd{C-h k}. @item C-h d @var{topics} @key{RET} Display the commands and variables whose documentation matches diff --git a/doc/emacs/kmacro.texi b/doc/emacs/kmacro.texi index 766470e514b..e7522a9db43 100644 --- a/doc/emacs/kmacro.texi +++ b/doc/emacs/kmacro.texi @@ -225,7 +225,7 @@ desired macro is at the head of the ring. To execute the new macro ring head immediately, just type @kbd{C-k}. Note that Emacs treats the head of the macro ring as the ``last -defined keyboard macro.'' For instance, @key{F4} will execute that +defined keyboard macro''. For instance, @key{F4} will execute that macro, and @kbd{C-x C-k n} will give it a name. @vindex kmacro-ring-max diff --git a/doc/emacs/mini.texi b/doc/emacs/mini.texi index e498516ae7f..f50e3085f2d 100644 --- a/doc/emacs/mini.texi +++ b/doc/emacs/mini.texi @@ -88,7 +88,7 @@ Find file: /u2/emacs/src//etc/termcap @cindex slashes repeated in file name @findex file-name-shadow-mode Emacs interprets a double slash as ``ignore everything before the -second slash in the pair.'' In the example above, +second slash in the pair''. In the example above, @file{/u2/emacs/src/} is ignored, so the argument you supplied is @file{/etc/termcap}. The ignored part of the file name is dimmed if the terminal allows it. (To disable this dimming, turn off File Name diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi index 50b68767991..b91763116b8 100644 --- a/doc/emacs/misc.texi +++ b/doc/emacs/misc.texi @@ -1191,7 +1191,7 @@ that buffer. line mode, Term basically acts like Shell mode (@pxref{Shell Mode}). In char mode, each character is sent directly to the subshell, as -``terminal input.'' Any ``echoing'' of your input is the +``terminal input''. Any ``echoing'' of your input is the responsibility of the subshell. The sole exception is the terminal escape character, which by default is @kbd{C-c} (@pxref{Term Mode}). Any ``terminal output'' from the subshell goes into the buffer, @@ -2076,10 +2076,10 @@ Insert a byte with a code typed in octal. Insert a byte with a code typed in hex. @item C-x [ -Move to the beginning of a 1k-byte ``page.'' +Move to the beginning of a 1k-byte ``page''. @item C-x ] -Move to the end of a 1k-byte ``page.'' +Move to the end of a 1k-byte ``page''. @item M-g Move to an address specified in hex. @@ -2149,7 +2149,7 @@ usually turned on. However, this may be slow if there are a lot of buffers in the desktop. You can specify the maximum number of buffers to restore immediately with the variable @code{desktop-restore-eager}; the -remaining buffers are restored ``lazily,'' when Emacs is idle. +remaining buffers are restored ``lazily'', when Emacs is idle. @findex desktop-clear @vindex desktop-globals-to-clear diff --git a/doc/emacs/msdog-xtra.texi b/doc/emacs/msdog-xtra.texi index af8882a1fd4..0d05c8ac9c6 100644 --- a/doc/emacs/msdog-xtra.texi +++ b/doc/emacs/msdog-xtra.texi @@ -548,7 +548,7 @@ when invoked with the @samp{-nw} option. @cindex inferior processes under MS-DOS @findex compile @r{(MS-DOS)} @findex grep @r{(MS-DOS)} - Because MS-DOS is a single-process ``operating system,'' + Because MS-DOS is a single-process ``operating system'', asynchronous subprocesses are not available. In particular, Shell mode and its variants do not work. Most Emacs features that use asynchronous subprocesses also don't work on MS-DOS, including diff --git a/doc/emacs/picture-xtra.texi b/doc/emacs/picture-xtra.texi index 5a10bf2c31c..edf75f078d5 100644 --- a/doc/emacs/picture-xtra.texi +++ b/doc/emacs/picture-xtra.texi @@ -199,7 +199,7 @@ C-b} (@code{picture-motion-reverse}) moves in the opposite direction. With no argument, it moves to a point underneath the next ``interesting'' character that follows whitespace in the previous nonblank line. ``Next'' here means ``appearing at a horizontal position -greater than the one point starts out at.'' With an argument, as in +greater than the one point starts out at''. With an argument, as in @kbd{C-u M-@key{TAB}}, this command moves to the next such interesting character in the current line. @kbd{M-@key{TAB}} does not change the text; it only moves point. ``Interesting'' characters are defined by diff --git a/doc/emacs/programs.texi b/doc/emacs/programs.texi index 5f7abcf3881..23f808b93ea 100644 --- a/doc/emacs/programs.texi +++ b/doc/emacs/programs.texi @@ -1109,7 +1109,7 @@ You can also use @kbd{M-x info-lookup-file} to look for documentation for a file name. If you use @kbd{C-h S} in a major mode that does not support it, -it asks you to specify the ``symbol help mode.'' You should enter +it asks you to specify the ``symbol help mode''. You should enter a command such as @code{c-mode} that would select a major mode which @kbd{C-h S} does support. @@ -1451,7 +1451,7 @@ with the Foldout package (@pxref{Foldout}). This section gives a brief description of the special features available in C, C++, Objective-C, Java, CORBA IDL, Pike and AWK modes. -(These are called ``C mode and related modes.'') +(These are called ``C mode and related modes''.) @ifinfo @xref{Top,, CC Mode, ccmode, CC Mode}, for more details. @end ifinfo diff --git a/doc/emacs/rmail.texi b/doc/emacs/rmail.texi index 3b3605f800c..6221bbac1a8 100644 --- a/doc/emacs/rmail.texi +++ b/doc/emacs/rmail.texi @@ -1355,7 +1355,7 @@ your Rmail file (@pxref{Rmail Inbox}). When loaded for the first time, Rmail attempts to locate the @code{movemail} program and determine its version. There are two versions of the @code{movemail} program: the native one, shipped with GNU Emacs (the ``emacs version'') and the one -included in GNU mailutils (the ``mailutils version,'' +included in GNU mailutils (the ``mailutils version'', @pxref{movemail,,,mailutils,GNU mailutils}). They support the same command line syntax and the same basic subset of options. However, the Mailutils version offers additional features. diff --git a/doc/emacs/search.texi b/doc/emacs/search.texi index 38f00f03532..9d30c6f4caf 100644 --- a/doc/emacs/search.texi +++ b/doc/emacs/search.texi @@ -146,7 +146,7 @@ you don't like this feature, you can disable it by setting After exiting a search, you can search for the same string again by typing just @kbd{C-s C-s}. The first @kbd{C-s} is the key that invokes incremental search, and the second @kbd{C-s} means ``search -again.'' Similarly, @kbd{C-r C-r} searches backward for the last +again''. Similarly, @kbd{C-r C-r} searches backward for the last search string. In determining the last search string, it doesn't matter whether the string was searched for with @kbd{C-s} or @kbd{C-r}. @@ -552,7 +552,7 @@ therefore @samp{f} is a regular expression that matches the string @samp{ff}.) Likewise, @samp{o} is a regular expression that matches only @samp{o}. (When case distinctions are being ignored, these regexps also match @samp{F} and @samp{O}, but we consider this a generalization -of ``the same string,'' rather than an exception.) +of ``the same string'', rather than an exception.) Any two regular expressions @var{a} and @var{b} can be concatenated. The result is a regular expression which matches a string if @var{a} @@ -801,7 +801,7 @@ After the end of a @samp{\( @dots{} \)} construct, the matcher remembers the beginning and end of the text matched by that construct. Then, later on in the regular expression, you can use @samp{\} followed by the digit @var{d} to mean ``match the same text matched the @var{d}th time -by the @samp{\( @dots{} \)} construct.'' +by the @samp{\( @dots{} \)} construct''. The strings matching the first nine @samp{\( @dots{} \)} constructs appearing in a regular expression are assigned numbers 1 through 9 in @@ -1030,7 +1030,7 @@ it can refer to all or part of what is matched by the @var{regexp}. @samp{\&} in @var{newstring} stands for the entire match being replaced. @samp{\@var{d}} in @var{newstring}, where @var{d} is a digit, stands for whatever matched the @var{d}th parenthesized -grouping in @var{regexp}. (This is called a ``back reference.'') +grouping in @var{regexp}. (This is called a ``back reference''.) @samp{\#} refers to the count of replacements already made in this command, as a decimal number. In the first replacement, @samp{\#} stands for @samp{0}; in the second, for @samp{1}; and so on. For diff --git a/doc/emacs/trouble.texi b/doc/emacs/trouble.texi index b118295ab1a..3bbdecc0176 100644 --- a/doc/emacs/trouble.texi +++ b/doc/emacs/trouble.texi @@ -534,16 +534,16 @@ large, and Emacs displays @samp{I feel pretty today}. The bug report would need to provide all that information. You should not assume that the problem is due to the size of the file and say, ``I visited a large file, and Emacs displayed @samp{I feel pretty today}.'' This is -what we mean by ``guessing explanations.'' The problem might be due +what we mean by ``guessing explanations''. The problem might be due to the fact that there is a @samp{z} in the file name. If this is so, then when we got your report, we would try out the problem with some -``large file,'' probably with no @samp{z} in its name, and not see any +``large file'', probably with no @samp{z} in its name, and not see any problem. There is no way we could guess that we should try visiting a file with a @samp{z} in its name. You should not even say ``visit a file'' instead of @kbd{C-x C-f}. Similarly, rather than saying ``if I have three characters on the -line,'' say ``after I type @kbd{@key{RET} A B C @key{RET} C-p},'' if +line'', say ``after I type @kbd{@key{RET} A B C @key{RET} C-p}'', if that is the way you entered the text. If possible, try quickly to reproduce the bug by invoking Emacs with @@ -731,7 +731,7 @@ you can copy its output from the @file{*Messages*} buffer. @item A description of what behavior you observe that you believe is -incorrect. For example, ``The Emacs process gets a fatal signal,'' or, +incorrect. For example, ``The Emacs process gets a fatal signal'', or, ``The resulting text is as follows, which I think is wrong.'' Of course, if the bug is that Emacs gets a fatal signal, then one can't @@ -872,7 +872,7 @@ More detailed advice and other useful techniques for debugging Emacs are available in the file @file{etc/DEBUG} in the Emacs distribution. That file also includes instructions for investigating problems whereby Emacs stops responding (many people assume that Emacs is -``hung,'' whereas in fact it might be in an infinite loop). +``hung'', whereas in fact it might be in an infinite loop). To find the file @file{etc/DEBUG} in your Emacs installation, use the directory name stored in the variable @code{data-directory}. diff --git a/doc/emacs/windows.texi b/doc/emacs/windows.texi index ee0f0027454..72e01a368a1 100644 --- a/doc/emacs/windows.texi +++ b/doc/emacs/windows.texi @@ -151,7 +151,7 @@ selects the window without moving point in it. @kindex C-x o @findex other-window With the keyboard, you can switch windows by typing @kbd{C-x o} -(@code{other-window}). That is an @kbd{o}, for ``other,'' not a zero. +(@code{other-window}). That is an @kbd{o}, for ``other'', not a zero. When there are more than two windows, this command moves through all the windows in a cyclic order, generally top to bottom and left to right. After the rightmost and bottommost window, it goes back to the one at @@ -452,7 +452,7 @@ buffer. @xref{Follow Mode}. The Windmove package defines commands for moving directionally between neighboring windows in a frame. @kbd{M-x windmove-right} selects the window immediately to the right of the currently selected -one, and similarly for the ``left,'' ``up,'' and ``down'' +one, and similarly for the ``left'', ``up'', and ``down'' counterparts. @kbd{M-x windmove-default-keybindings} binds these commands to @kbd{S-right} etc.; doing so disables shift selection for those keys (@pxref{Shift Selection}). diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 1dbc35d46de..a5d36e73500 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,12 @@ +2012-04-26 Glenn Morris + + * buffers.texi, commands.texi, compile.texi, control.texi: + * customize.texi, display.texi, eval.texi, files.texi, frames.texi: + * hash.texi, help.texi, intro.texi, keymaps.texi, lists.texi: + * modes.texi, numbers.texi, objects.texi, streams.texi: + * symbols.texi, syntax.texi, text.texi, tips.texi, variables.texi: + Use Texinfo recommended convention for quotes+punctuation. + 2012-04-23 Chong Yidong * keymaps.texi (Scanning Keymaps): Fix description of NO-REMAP arg diff --git a/doc/lispref/buffers.texi b/doc/lispref/buffers.texi index 433663b4260..fecf2decfc3 100644 --- a/doc/lispref/buffers.texi +++ b/doc/lispref/buffers.texi @@ -482,7 +482,7 @@ correspond to the new file name, unless the new name is already in use. If @var{filename} is @code{nil} or the empty string, that stands for -``no visited file.'' In this case, @code{set-visited-file-name} marks +``no visited file''. In this case, @code{set-visited-file-name} marks the buffer as having no visited file, without changing the buffer's modified flag. diff --git a/doc/lispref/commands.texi b/doc/lispref/commands.texi index 617f050f498..b96d5878124 100644 --- a/doc/lispref/commands.texi +++ b/doc/lispref/commands.texi @@ -719,7 +719,7 @@ We use @code{"p"} because the numeric prefix argument is never message when called from a keyboard macro. The above method with the additional argument is usually best, -because it allows callers to say ``treat this call as interactive.'' +because it allows callers to say ``treat this call as interactive''. But you can also do the job by testing @code{called-interactively-p}. @defun called-interactively-p kind @@ -2326,7 +2326,7 @@ same symbol that would normally represent that combination of mouse button and modifier keys. The information about the window part is kept elsewhere in the event---in the coordinates. But @code{read-key-sequence} translates this information into imaginary -``prefix keys,'' all of which are symbols: @code{header-line}, +``prefix keys'', all of which are symbols: @code{header-line}, @code{horizontal-scroll-bar}, @code{menu-bar}, @code{mode-line}, @code{vertical-line}, and @code{vertical-scroll-bar}. You can define meanings for mouse clicks in special window parts by defining key @@ -2706,7 +2706,7 @@ individual events, which you can put in @code{unread-command-events}. @defvar unread-command-char This variable holds a character to be read as command input. -A value of -1 means ``empty.'' +A value of -1 means ``empty''. This variable is mostly obsolete now that you can use @code{unread-command-events} instead; it exists only to support programs @@ -3196,7 +3196,7 @@ using the minibuffer. Usually it is more convenient for the user if you change the major mode of the current buffer temporarily to a special major mode, which should have a command to go back to the previous mode. (The @kbd{e} command in Rmail uses this technique.) Or, if you wish to -give the user different text to edit ``recursively,'' create and select +give the user different text to edit ``recursively'', create and select a new buffer in a special mode. In this mode, define a command to complete the processing and go back to the previous buffer. (The @kbd{m} command in Rmail does this.) diff --git a/doc/lispref/compile.texi b/doc/lispref/compile.texi index 093c91f02b0..e6931aae016 100644 --- a/doc/lispref/compile.texi +++ b/doc/lispref/compile.texi @@ -275,7 +275,7 @@ reloading each file after recompiling it. use a special Lisp reader construct, @samp{#@@@var{count}}. This construct skips the next @var{count} characters. It also uses the @samp{#$} construct, which stands for ``the name of this file, as a -string.'' It is usually best not to use these constructs in Lisp source +string''. It is usually best not to use these constructs in Lisp source files, since they are not designed to be clear to humans reading the file. diff --git a/doc/lispref/control.texi b/doc/lispref/control.texi index 8c45a1a4faf..f8f9ddfa2e8 100644 --- a/doc/lispref/control.texi +++ b/doc/lispref/control.texi @@ -221,7 +221,7 @@ non-@code{nil}, the clause ``succeeds''; then @code{cond} evaluates its @var{body-forms}, and the value of the last of @var{body-forms} becomes the value of the @code{cond}. The remaining clauses are ignored. -If the value of @var{condition} is @code{nil}, the clause ``fails,'' so +If the value of @var{condition} is @code{nil}, the clause ``fails'', so the @code{cond} moves on to the following clause, trying its @var{condition}. @@ -623,7 +623,7 @@ error is signaled with data @code{(@var{tag} @var{value})}. @subsection Examples of @code{catch} and @code{throw} One way to use @code{catch} and @code{throw} is to exit from a doubly -nested loop. (In most languages, this would be done with a ``goto.'') +nested loop. (In most languages, this would be done with a ``goto''.) Here we compute @code{(foo @var{i} @var{j})} for @var{i} and @var{j} varying from 0 to 9: diff --git a/doc/lispref/customize.texi b/doc/lispref/customize.texi index ba977c70eb6..92bd7a80ac6 100644 --- a/doc/lispref/customize.texi +++ b/doc/lispref/customize.texi @@ -826,7 +826,7 @@ For example, @noindent describes a variable for which @code{t} means yes, @code{nil} means no, -and @code{foo} means ``ask.'' +and @code{foo} means ``ask''. @item (other @var{value}) This alternative can match any Lisp value, but if the user chooses this @@ -843,7 +843,7 @@ For example, @noindent describes a variable for which @code{t} means yes, @code{nil} means no, -and anything else means ``ask.'' If the user chooses @samp{Ask} from +and anything else means ``ask''. If the user chooses @samp{Ask} from the menu of alternatives, that specifies the value @code{foo}; but any other value (not @code{t}, @code{nil} or @code{foo}) displays as @samp{Ask}, just like @code{foo}. diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi index cc48133113f..1fe5a92e8a3 100644 --- a/doc/lispref/display.texi +++ b/doc/lispref/display.texi @@ -156,7 +156,7 @@ boundary. @xref{Filling}. indicate truncated and continued lines (@pxref{Fringes}). On a text terminal, a @samp{$} in the rightmost column of the window indicates truncation; a @samp{\} on the rightmost column indicates a line that -``wraps.'' (The display table can specify alternate characters to use +``wraps''. (The display table can specify alternate characters to use for this; @pxref{Display Tables}). @defopt truncate-lines @@ -452,7 +452,7 @@ prints the message of @var{reporter} followed by word ``done'' in the echo area. You should always call this function and not hope for -@code{progress-reporter-update} to print ``100%.'' Firstly, it may +@code{progress-reporter-update} to print ``100%''. Firstly, it may never print it, there are many good reasons for this not to happen. Secondly, ``done'' is more explicit. @end defun @@ -1309,7 +1309,7 @@ The return value is @var{overlay}. This is the only valid way to change the endpoints of an overlay. Do not try modifying the markers in the overlay by hand, as that fails to update other vital data structures and can cause some overlays to be -``lost.'' +``lost''. @end defun @defun remove-overlays &optional start end name value @@ -1386,7 +1386,7 @@ foo @end example Emacs stores the overlays of each buffer in two lists, divided -around an arbitrary ``center position.'' One list extends backwards +around an arbitrary ``center position''. One list extends backwards through the buffer from that center position, and the other extends forwards from that center position. The center position can be anywhere in the buffer. @@ -4360,7 +4360,7 @@ $$\pmatrix{ 2 & -1 & 0 \cr @end ifnottex @item disabled -Specifies transforming the image so that it looks ``disabled.'' +Specifies transforming the image so that it looks ``disabled''. @end table @item :mask @var{mask} @@ -5532,7 +5532,7 @@ Any @var{args} are passed to @var{map-function}. @subsection Abstract Display Example Here is a simple example using functions of the ewoc package to -implement a ``color components display,'' an area in a buffer that +implement a ``color components display'', an area in a buffer that represents a vector of three integers (itself representing a 24-bit RGB value) in various ways. @@ -5843,7 +5843,7 @@ display the character @var{c} as those glyphs; @pxref{Glyphs}). @strong{Warning:} if you use the display table to change the display of newline characters, the whole buffer will be displayed as one long -``line.'' +``line''. The display table also has six ``extra slots'' which serve special purposes. Here is a table of their meanings; @code{nil} in any slot @@ -6154,7 +6154,7 @@ capability (@samp{vb}). @defvar ring-bell-function If this is non-@code{nil}, it specifies how Emacs should ``ring the -bell.'' Its value should be a function of no arguments. If this is +bell''. Its value should be a function of no arguments. If this is non-@code{nil}, it takes precedence over the @code{visible-bell} variable. @end defvar @@ -6163,7 +6163,7 @@ variable. @section Window Systems Emacs works with several window systems, most notably the X Window -System. Both Emacs and X use the term ``window,'' but use it +System. Both Emacs and X use the term ``window'', but use it differently. An Emacs frame is a single window as far as X is concerned; the individual Emacs windows are not known to X at all. diff --git a/doc/lispref/eval.texi b/doc/lispref/eval.texi index 7f25b33eb43..5bb514451b8 100644 --- a/doc/lispref/eval.texi +++ b/doc/lispref/eval.texi @@ -104,7 +104,7 @@ interpretation. @xref{Command Loop}. @dfn{form} (or an @dfn{expression}). How Emacs evaluates a form depends on its data type. Emacs has three different kinds of form that are evaluated differently: symbols, lists, and ``all other -types.'' This section describes all three kinds, one by one, starting +types''. This section describes all three kinds, one by one, starting with the ``all other types'' which are self-evaluating forms. @menu diff --git a/doc/lispref/files.texi b/doc/lispref/files.texi index 062368e810d..62f9f6f43c3 100644 --- a/doc/lispref/files.texi +++ b/doc/lispref/files.texi @@ -72,8 +72,8 @@ back into the file. In spite of the distinction between files and buffers, people often refer to a file when they mean a buffer and vice-versa. Indeed, we say, -``I am editing a file,'' rather than, ``I am editing a buffer that I -will soon save as a file of the same name.'' Humans do not usually need +``I am editing a file'', rather than, ``I am editing a buffer that I +will soon save as a file of the same name''. Humans do not usually need to make the distinction explicit. When dealing with a computer program, however, it is good to keep the distinction in mind. @@ -689,7 +689,7 @@ The file lock is really a file, a symbolic link with a special name, stored in the same directory as the file you are editing. When you access files using NFS, there may be a small probability that -you and another user will both lock the same file ``simultaneously.'' +you and another user will both lock the same file ``simultaneously''. If this happens, it is possible for the two users to make changes simultaneously, but Emacs will still warn the user who saves second. Also, the detection of modification of a buffer visiting a file changed @@ -1807,7 +1807,7 @@ return value, but backup version numbers are kept. @end defun @defun file-name-extension filename &optional period -This function returns @var{filename}'s final ``extension,'' if any, +This function returns @var{filename}'s final ``extension'', if any, after applying @code{file-name-sans-versions} to remove any version/backup part. The extension, in a file name, is the part that follows the last @samp{.} in the last name component (minus any @@ -2799,7 +2799,7 @@ unlocking the buffer if it is locked. possibly others to be added in the future. It need not implement all these operations itself---when it has nothing special to do for a certain operation, it can reinvoke the primitive, to handle the -operation ``in the usual way.'' It should always reinvoke the primitive +operation ``in the usual way''. It should always reinvoke the primitive for an operation it does not recognize. Here's one way to do this: @smallexample diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi index 3a8accf251e..9d10326c294 100644 --- a/doc/lispref/frames.texi +++ b/doc/lispref/frames.texi @@ -883,7 +883,7 @@ This variable specifies how to blink the cursor. Each element has the form @code{(@var{on-state} . @var{off-state})}. Whenever the cursor type equals @var{on-state} (comparing using @code{equal}), the corresponding @var{off-state} specifies what the cursor looks like -when it blinks ``off.'' Both @var{on-state} and @var{off-state} +when it blinks ``off''. Both @var{on-state} and @var{off-state} should be suitable values for the @code{cursor-type} frame parameter. There are various defaults for how to blink each type of cursor, if @@ -1533,7 +1533,7 @@ track of such changes. @xref{Misc Events}. Most window systems use a desktop metaphor. Part of this metaphor is the idea that windows are stacked in a notional third dimension perpendicular to the screen surface, and thus ordered from ``highest'' -to ``lowest.'' Where two windows overlap, the one higher up covers +to ``lowest''. Where two windows overlap, the one higher up covers the one underneath. Even a window at the bottom of the stack can be seen if no other window overlaps it. @@ -1541,7 +1541,7 @@ seen if no other window overlaps it. @cindex lowering a frame A window's place in this ordering is not fixed; in fact, users tend to change the order frequently. @dfn{Raising} a window means moving -it ``up,'' to the top of the stack. @dfn{Lowering} a window means +it ``up'', to the top of the stack. @dfn{Lowering} a window means moving it to the bottom of the stack. This motion is in the notional third dimension only, and does not change the position of the window on the screen. @@ -1815,7 +1815,7 @@ the menu keymap as necessary. A dialog box is a variant of a pop-up menu---it looks a little different, it always appears in the center of a frame, and it has just one level and one or more buttons. The main use of dialog boxes is -for asking questions that the user can answer with ``yes,'' ``no,'' +for asking questions that the user can answer with ``yes'', ``no'', and a few other alternatives. With a single button, they can also force the user to acknowledge important information. The functions @code{y-or-n-p} and @code{yes-or-no-p} use dialog boxes instead of the @@ -2029,7 +2029,7 @@ colors.) These functions provide a way to determine which color names are valid, and what they look like. In some cases, the value depends on the @dfn{selected frame}, as described below; see @ref{Input Focus}, for the -meaning of the term ``selected frame.'' +meaning of the term ``selected frame''. To read user input of color names with completion, use @code{read-color} (@pxref{High-Level Completion, read-color}). @@ -2426,7 +2426,7 @@ software (as a string). Really this means whoever distributes the X server. When the developers of X labeled software distributors as -``vendors,'' they showed their false assumption that no system could +``vendors'', they showed their false assumption that no system could ever be developed and distributed noncommercially. @end defun diff --git a/doc/lispref/hash.texi b/doc/lispref/hash.texi index 0a2783b6f16..94d9e6e4485 100644 --- a/doc/lispref/hash.texi +++ b/doc/lispref/hash.texi @@ -75,13 +75,13 @@ alternatives: Keys which are numbers are ``the same'' if they are @code{equal}, that is, if they are equal in value and either both are integers or both are floating point numbers; otherwise, two distinct objects are never -``the same.'' +``the same''. @item eq Any two distinct Lisp objects are ``different'' as keys. @item equal -Two Lisp objects are ``the same,'' as keys, if they are equal +Two Lisp objects are ``the same'', as keys, if they are equal according to @code{equal}. @end table @@ -129,7 +129,7 @@ doing that takes some extra time. The default size is 65. @item :rehash-size @var{rehash-size} -When you add an association to a hash table and the table is ``full,'' +When you add an association to a hash table and the table is ``full'', it grows automatically. This value specifies how to make the hash table larger, at that time. @@ -263,7 +263,7 @@ will use @var{test-fn} to compare key values, and @var{hash-fn} to compute a ``hash code'' from a key value. The function @var{test-fn} should accept two arguments, two keys, and -return non-@code{nil} if they are considered ``the same.'' +return non-@code{nil} if they are considered ``the same''. The function @var{hash-fn} should accept one argument, a key, and return an integer that is the ``hash code'' of that key. For good results, the diff --git a/doc/lispref/help.texi b/doc/lispref/help.texi index 627197f09f1..3edeac2b6d5 100644 --- a/doc/lispref/help.texi +++ b/doc/lispref/help.texi @@ -600,7 +600,7 @@ subcommands of the prefix key. @defopt help-event-list The value of this variable is a list of event types that serve as -alternative ``help characters.'' These events are handled just like the +alternative ``help characters''. These events are handled just like the event specified by @code{help-char}. @end defopt diff --git a/doc/lispref/intro.texi b/doc/lispref/intro.texi index c963ba03545..9ae5e1fa849 100644 --- a/doc/lispref/intro.texi +++ b/doc/lispref/intro.texi @@ -147,7 +147,7 @@ printer'' refer to those routines in Lisp that convert textual representations of Lisp objects into actual Lisp objects, and vice versa. @xref{Printed Representation}, for more details. You, the person reading this manual, are thought of as ``the programmer'' and are -addressed as ``you.'' ``The user'' is the person who uses Lisp +addressed as ``you''. ``The user'' is the person who uses Lisp programs, including those you write. @cindex typographic conventions @@ -220,7 +220,7 @@ the examples in this manual, this is indicated with @samp{@result{}}: @end example @noindent -You can read this as ``@code{(car '(1 2))} evaluates to 1.'' +You can read this as ``@code{(car '(1 2))} evaluates to 1''. When a form is a macro call, it expands into a new form for Lisp to evaluate. We show the result of the expansion with diff --git a/doc/lispref/keymaps.texi b/doc/lispref/keymaps.texi index c44512b8807..2cec68719b6 100644 --- a/doc/lispref/keymaps.texi +++ b/doc/lispref/keymaps.texi @@ -1033,7 +1033,7 @@ binding of @var{othertype} in @var{othermap} and uses that. This feature permits you to define one key as an alias for another key. For example, an entry whose @sc{car} is the keymap called @code{esc-map} and whose @sc{cdr} is 32 (the code for @key{SPC}) means, ``Use the global -binding of @kbd{Meta-@key{SPC}}, whatever that may be.'' +binding of @kbd{Meta-@key{SPC}}, whatever that may be''. @end itemize @item @var{symbol} @@ -2152,7 +2152,7 @@ This works because @code{toggle-debug-on-error} is defined as a command which toggles the variable @code{debug-on-error}. @dfn{Radio buttons} are a group of menu items, in which at any time one -and only one is ``selected.'' There should be a variable whose value +and only one is ``selected''. There should be a variable whose value says which one is selected at any time. The @var{selected} form for each radio button in the group should check whether the variable has the right value for selecting that button. Clicking on the button should @@ -2429,7 +2429,7 @@ Next we define the menu items: Note the symbols which the bindings are ``made for''; these appear inside square brackets, in the key sequence being defined. In some cases, this symbol is the same as the command name; sometimes it is -different. These symbols are treated as ``function keys,'' but they are +different. These symbols are treated as ``function keys'', but they are not real function keys on the keyboard. They do not affect the functioning of the menu itself, but they are ``echoed'' in the echo area when the user selects from the menu, and they appear in the output of diff --git a/doc/lispref/lists.texi b/doc/lispref/lists.texi index c8433c79b54..68ec888b7e1 100644 --- a/doc/lispref/lists.texi +++ b/doc/lispref/lists.texi @@ -35,12 +35,12 @@ object that represents an ordered pair. That is, it has two slots, and each slot @dfn{holds}, or @dfn{refers to}, some Lisp object. One slot is known as the @sc{car}, and the other is known as the @sc{cdr}. (These names are traditional; see @ref{Cons Cell Type}.) @sc{cdr} is -pronounced ``could-er.'' +pronounced ``could-er''. We say that ``the @sc{car} of this cons cell is'' whatever object its @sc{car} slot currently holds, and likewise for the @sc{cdr}. - A list is a series of cons cells ``chained together,'' so that each + A list is a series of cons cells ``chained together'', so that each cell refers to the next one. There is one cons cell for each element of the list. By convention, the @sc{car}s of the cons cells hold the elements of the list, and the @sc{cdr}s are used to chain the list @@ -1633,7 +1633,7 @@ a @sc{cdr} @code{equal} to @var{value}. @code{rassoc} is like @code{assoc} except that it compares the @sc{cdr} of each @var{alist} association instead of the @sc{car}. You can think of -this as ``reverse @code{assoc},'' finding the key for a given value. +this as ``reverse @code{assoc}'', finding the key for a given value. @end defun @defun assq key alist @@ -1674,7 +1674,7 @@ a @sc{cdr} @code{eq} to @var{value}. @code{rassq} is like @code{assq} except that it compares the @sc{cdr} of each @var{alist} association instead of the @sc{car}. You can think of -this as ``reverse @code{assq},'' finding the key for a given value. +this as ``reverse @code{assq}'', finding the key for a given value. For example: diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi index 83fbd02b16c..aaed86d3da3 100644 --- a/doc/lispref/modes.texi +++ b/doc/lispref/modes.texi @@ -385,7 +385,7 @@ reserved for users. A major mode can also rebind the keys @kbd{M-n}, @kbd{M-p} and @kbd{M-s}. The bindings for @kbd{M-n} and @kbd{M-p} should normally -be some kind of ``moving forward and backward,'' but this does not +be some kind of ``moving forward and backward'', but this does not necessarily mean cursor motion. It is legitimate for a major mode to rebind a standard key sequence if @@ -939,7 +939,7 @@ such a major mode, please correct it to follow these conventions. When you defined a major mode using @code{define-derived-mode}, it automatically makes sure these conventions are followed. If you -define a major mode ``by hand,'' not using @code{define-derived-mode}, +define a major mode ``by hand'', not using @code{define-derived-mode}, use the following functions to handle these conventions automatically. @defun run-mode-hooks &rest hookvars @@ -1123,8 +1123,8 @@ documentation for the mode command. If you do not supply it, The argument @var{comment-list} is a list in which each element is either a character, a string of one or two characters, or a cons cell. A character or a string is set up in the mode's syntax table as a -``comment starter.'' If the entry is a cons cell, the @sc{car} is set -up as a ``comment starter'' and the @sc{cdr} as a ``comment ender.'' +``comment starter''. If the entry is a cons cell, the @sc{car} is set +up as a ``comment starter'' and the @sc{cdr} as a ``comment ender''. (Use @code{nil} for the latter if you want comments to end at the end of the line.) Note that the syntax table mechanism has limitations about what comment starters and enders are actually possible. @@ -1649,7 +1649,7 @@ See the command \\[hungry-electric-delete]." @end smallexample @noindent -This defines a minor mode named ``Hungry mode,'' a command named +This defines a minor mode named ``Hungry mode'', a command named @code{hungry-mode} to toggle it, a variable named @code{hungry-mode} which indicates whether the mode is enabled, and a variable named @code{hungry-mode-map} which holds the keymap that is active when the diff --git a/doc/lispref/numbers.texi b/doc/lispref/numbers.texi index 82336aa537f..5973137e587 100644 --- a/doc/lispref/numbers.texi +++ b/doc/lispref/numbers.texi @@ -778,7 +778,7 @@ and returns that value as a floating point number. sequence of @dfn{bits} (digits which are either zero or one). A bitwise operation acts on the individual bits of such a sequence. For example, @dfn{shifting} moves the whole sequence left or right one or more places, -reproducing the same pattern ``moved over.'' +reproducing the same pattern ``moved over''. The bitwise operations in Emacs Lisp apply only to integers. diff --git a/doc/lispref/objects.texi b/doc/lispref/objects.texi index 7901f27c4f5..cc451f82629 100644 --- a/doc/lispref/objects.texi +++ b/doc/lispref/objects.texi @@ -676,7 +676,7 @@ not distinguish between a cons cell slot ``holding'' a value versus @cindex atoms Because cons cells are so central to Lisp, we also have a word for -``an object which is not a cons cell.'' These objects are called +``an object which is not a cons cell''. These objects are called @dfn{atoms}. @cindex parenthesis @@ -1290,7 +1290,7 @@ without qualification, we mean a Lisp macro, not a keyboard macro. A @dfn{primitive function} is a function callable from Lisp but written in the C programming language. Primitive functions are also called @dfn{subrs} or @dfn{built-in functions}. (The word ``subr'' is -derived from ``subroutine.'') Most primitive functions evaluate all +derived from ``subroutine''.) Most primitive functions evaluate all their arguments when they are called. A primitive function that does not evaluate all its arguments is called a @dfn{special form} (@pxref{Special Forms}).@refill diff --git a/doc/lispref/streams.texi b/doc/lispref/streams.texi index 1628f32aa29..70b11d78b0a 100644 --- a/doc/lispref/streams.texi +++ b/doc/lispref/streams.texi @@ -115,7 +115,7 @@ When it is called with one argument (always a character), @var{function} should save the argument and arrange to return it on the next call. This is called @dfn{unreading} the character; it happens when the Lisp reader reads one character too many and wants to ``put it back where it -came from.'' In this case, it makes no difference what value +came from''. In this case, it makes no difference what value @var{function} returns. @end itemize @@ -619,7 +619,7 @@ spacing between calls. @defun terpri &optional stream @cindex newline in print This function outputs a newline to @var{stream}. The name stands -for ``terminate print.'' +for ``terminate print''. @end defun @defun write-char character &optional stream diff --git a/doc/lispref/symbols.texi b/doc/lispref/symbols.texi index 0ee22b905b6..f2ffc20f588 100644 --- a/doc/lispref/symbols.texi +++ b/doc/lispref/symbols.texi @@ -141,7 +141,7 @@ act correctly if it is evaluated with lexical scoping enabled @code{defun} defines a symbol as a function, creating a lambda expression and storing it in the function cell of the symbol. This lambda expression thus becomes the function definition of the symbol. -(The term ``function definition,'' meaning the contents of the function +(The term ``function definition'', meaning the contents of the function cell, is derived from the idea that @code{defun} gives the symbol its definition as a function.) @code{defsubst} and @code{defalias} are two other ways of defining a function. @xref{Functions}. diff --git a/doc/lispref/syntax.texi b/doc/lispref/syntax.texi index e2fb3238642..af6243fd457 100644 --- a/doc/lispref/syntax.texi +++ b/doc/lispref/syntax.texi @@ -57,7 +57,7 @@ Modes}, for an example of how to set up a syntax table. A syntax table can inherit the data for some characters from the standard syntax table, while specifying other characters itself. The ``inherit'' syntax class means ``inherit this character's syntax from -the standard syntax table.'' Just changing the standard syntax for a +the standard syntax table''. Just changing the standard syntax for a character affects all syntax tables that inherit from it. @defun syntax-table-p object @@ -618,7 +618,7 @@ higher-level functions for moving over balanced expressions. A character's syntax controls how it changes the state of the parser, rather than describing the state itself. For example, a string delimiter character toggles the parser state between -``in-string'' and ``in-code,'' but the syntax of characters does not +``in-string'' and ``in-code'', but the syntax of characters does not directly say whether they are inside a string. For example (note that 15 is the syntax code for generic string delimiters), diff --git a/doc/lispref/text.texi b/doc/lispref/text.texi index bae145c1694..4ed096d21a4 100644 --- a/doc/lispref/text.texi +++ b/doc/lispref/text.texi @@ -556,7 +556,7 @@ error; if some of the text in it is read-only, it signals a asking for any confirmation. It returns @code{nil}. Normally, deleting a large amount of text from a buffer inhibits further -auto-saving of that buffer ``because it has shrunk.'' However, +auto-saving of that buffer ``because it has shrunk''. However, @code{erase-buffer} does not do this, the idea being that the future text is not really related to the former text, and its size should not be compared with that of the former text. @@ -807,7 +807,7 @@ that treat it as a ring. Some people think this use of the word ``kill'' is unfortunate, since it refers to operations that specifically @emph{do not} destroy the -entities ``killed.'' This is in sharp contrast to ordinary life, in +entities ``killed''. This is in sharp contrast to ordinary life, in which death is permanent and ``killed'' entities do not come back to life. Therefore, other metaphors have been proposed. For example, the term ``cut ring'' makes sense to people who, in pre-computer days, used @@ -846,7 +846,7 @@ the entry made by the first one. For yanking, one entry in the kill ring is designated the ``front'' of the ring. Some yank commands ``rotate'' the ring by designating a -different element as the ``front.'' But this virtual rotation doesn't +different element as the ``front''. But this virtual rotation doesn't change the list itself---the most recent entry always comes first in the list. @@ -1094,8 +1094,8 @@ programs, when you are using a window system. Its value should be @code{nil} or a function of no arguments. If the value is a function, @code{current-kill} calls it to get the -``most recent kill.'' If the function returns a non-@code{nil} value, -then that value is used as the ``most recent kill.'' If it returns +``most recent kill''. If the function returns a non-@code{nil} value, +then that value is used as the ``most recent kill''. If it returns @code{nil}, then the front of the kill ring is used. To facilitate support for window systems that support multiple @@ -3505,7 +3505,7 @@ once for the same part of the buffer, you can use the variable If this variable's value is non-@code{nil}, it is a symbol which is used as a text property name. A non-@code{nil} value for that text property means, ``the other text properties for this character have already been -computed.'' +computed''. If all the characters in the range specified for @code{buffer-substring} have a non-@code{nil} value for this property, @code{buffer-substring} @@ -3809,7 +3809,7 @@ after @var{old-pos}.) If @var{escape-from-edge} is non-@code{nil}, @var{new-pos} can be anywhere in the two adjacent fields. Additionally, if two fields are separated by another field with the special value @code{boundary}, then any point within this special -field is also considered to be ``on the boundary.'' +field is also considered to be ``on the boundary''. Commands like @kbd{C-a} with no argument, that normally move backward to a specific kind of location and stay there once there, probably diff --git a/doc/lispref/tips.texi b/doc/lispref/tips.texi index 5874a848807..56c361cf86e 100644 --- a/doc/lispref/tips.texi +++ b/doc/lispref/tips.texi @@ -641,7 +641,7 @@ have the form (KEY . VALUE). Here, KEY is ... @item Never change the case of a Lisp symbol when you mention it in a doc -string. If the symbol's name is @code{foo}, write ``foo,'' not +string. If the symbol's name is @code{foo}, write ``foo'', not ``Foo'' (which is a different symbol). This might appear to contradict the policy of writing function @@ -773,9 +773,9 @@ is indicative and has a proper subject. @item The documentation string for a function that is a yes-or-no predicate -should start with words such as ``Return t if,'' to indicate -explicitly what constitutes ``truth.'' The word ``return'' avoids -starting the sentence with lower-case ``t,'' which could be somewhat +should start with words such as ``Return t if'', to indicate +explicitly what constitutes ``truth''. The word ``return'' avoids +starting the sentence with lower-case ``t'', which could be somewhat distracting. @item @@ -798,8 +798,8 @@ returned.'' @item Avoid using the word ``cause'' (or its equivalents) unnecessarily. -Instead of, ``Cause Emacs to display text in boldface,'' write just -``Display text in boldface.'' +Instead of, ``Cause Emacs to display text in boldface'', write just +``Display text in boldface''. @item Avoid using ``iff'' (a mathematics term meaning ``if and only if''), @@ -822,7 +822,7 @@ to set, use @code{defcustom}. @xref{Defining Variables}. @item The documentation string for a variable that is a yes-or-no flag should -start with words such as ``Non-nil means,'' to make it clear that +start with words such as ``Non-nil means'', to make it clear that all non-@code{nil} values are equivalent and indicate explicitly what @code{nil} and non-@code{nil} mean. @end itemize diff --git a/doc/lispref/variables.texi b/doc/lispref/variables.texi index 548d2e99414..6f54acea26a 100644 --- a/doc/lispref/variables.texi +++ b/doc/lispref/variables.texi @@ -671,7 +671,7 @@ symbol is changed. @code{setq} does not evaluate @var{symbol}; it sets the symbol that you write. We say that this argument is @dfn{automatically quoted}. The -@samp{q} in @code{setq} stands for ``quoted.'' +@samp{q} in @code{setq} stands for ``quoted''. The value of the @code{setq} form is the value of the last @var{form}. From 1a72be462423a71fa666a99854ccfaf422dfee96 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 25 Apr 2012 20:48:08 -0400 Subject: [PATCH 189/564] Add "et al." to authors for emacs and elisp manuals. This seems only fair, since there have been a large number of contributors since the original ones. * doc/emacs/emacs.texi: * doc/lispref/book-spine.texi, doc/lispref/elisp.texi, doc/lispref/vol1.texi: * doc/lispref/vol2.texi: Add "et al." to authors. --- doc/emacs/ChangeLog | 2 ++ doc/emacs/emacs.texi | 2 +- doc/lispref/ChangeLog | 3 +++ doc/lispref/book-spine.texi | 4 ++-- doc/lispref/elisp.texi | 4 ++-- doc/lispref/vol1.texi | 4 ++-- doc/lispref/vol2.texi | 4 ++-- 7 files changed, 14 insertions(+), 9 deletions(-) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index 8bca778b60c..26f77f3aa6f 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,5 +1,7 @@ 2012-04-26 Glenn Morris + * emacs.texi: Add "et al." to authors. + * ack.texi, basic.texi, buffers.texi, building.texi: * calendar.texi, cmdargs.texi, commands.texi, custom.texi: * dired.texi, display.texi, emerge-xtra.texi, files.texi: diff --git a/doc/emacs/emacs.texi b/doc/emacs/emacs.texi index 25e5bb2af0d..6d125edcf16 100644 --- a/doc/emacs/emacs.texi +++ b/doc/emacs/emacs.texi @@ -72,7 +72,7 @@ developing GNU and promoting software freedom.'' @sp 4 @center @value{EDITION} Edition, Updated for Emacs Version @value{EMACSVER}. @sp 5 -@center Richard Stallman +@center Richard Stallman et al. @page @vskip 0pt plus 1filll @insertcopying diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index a5d36e73500..d65a8813fda 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,5 +1,8 @@ 2012-04-26 Glenn Morris + * book-spine.texi, elisp.texi, vol1.texi, vol2.texi: + Add "et al." to authors. + * buffers.texi, commands.texi, compile.texi, control.texi: * customize.texi, display.texi, eval.texi, files.texi, frames.texi: * hash.texi, help.texi, intro.texi, keymaps.texi, lists.texi: diff --git a/doc/lispref/book-spine.texi b/doc/lispref/book-spine.texi index 270def6d8b3..721416316d2 100644 --- a/doc/lispref/book-spine.texi +++ b/doc/lispref/book-spine.texi @@ -20,8 +20,8 @@ @center by @center Bil Lewis, @center Dan LaLiberte, -@center and the -@center GNU Manual Group +@center the GNU Manual Group, +@center et al. @sp 5 @center Free Software Foundation @bye diff --git a/doc/lispref/elisp.texi b/doc/lispref/elisp.texi index 8064a6483f3..058067fe209 100644 --- a/doc/lispref/elisp.texi +++ b/doc/lispref/elisp.texi @@ -72,8 +72,8 @@ developing GNU and promoting software freedom.'' @subtitle For Emacs Version @value{EMACSVER} @subtitle Revision @value{VERSION}, @value{DATE} -@author by Bil Lewis, Dan LaLiberte, Richard Stallman -@author and the GNU Manual Group +@author by Bil Lewis, Dan LaLiberte, Richard Stallman, +@author the GNU Manual Group, et al. @page @vskip 0pt plus 1filll @insertcopying diff --git a/doc/lispref/vol1.texi b/doc/lispref/vol1.texi index b87599cf160..204c155680b 100644 --- a/doc/lispref/vol1.texi +++ b/doc/lispref/vol1.texi @@ -89,8 +89,8 @@ developing GNU and promoting software freedom.'' @subtitle For Emacs Version @value{EMACSVER} @subtitle Revision @value{VERSION}, @value{DATE} -@author by Bil Lewis, Dan LaLiberte, Richard Stallman -@author and the GNU Manual Group +@author by Bil Lewis, Dan LaLiberte, Richard Stallman, +@author the GNU Manual Group, et al. @page @vskip 0pt plus 1filll @insertcopying diff --git a/doc/lispref/vol2.texi b/doc/lispref/vol2.texi index 148a4f040a7..97d357c4ace 100644 --- a/doc/lispref/vol2.texi +++ b/doc/lispref/vol2.texi @@ -89,8 +89,8 @@ developing GNU and promoting software freedom.'' @subtitle For Emacs Version @value{EMACSVER} @subtitle Revision @value{VERSION}, @value{DATE} -@author by Bil Lewis, Dan LaLiberte, Richard Stallman -@author and the GNU Manual Group +@author by Bil Lewis, Dan LaLiberte, Richard Stallman, +@author the GNU Manual Group, et al. @page @vskip 0pt plus 1filll @insertcopying From 674ea9c6e466ac3faaaac32dc2a912d05e30dfee Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 25 Apr 2012 21:08:03 -0400 Subject: [PATCH 190/564] * doc/lispref/Makefile.in (srcs): Remove back.texi (which is unused). * doc/lispref/makefile.w32-in (srcs): Same. --- doc/lispref/ChangeLog | 5 +++++ doc/lispref/Makefile.in | 1 - doc/lispref/makefile.w32-in | 1 - 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 1c37e1600f4..00cba353b02 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,8 @@ +2012-04-26 Glenn Morris + + * makefile.w32-in (srcs): + * Makefile.in (srcs): Remove back.texi (which is unused). + 2012-04-24 Michael Albinus * os.texi (Notifications): Extend possible notification hints. diff --git a/doc/lispref/Makefile.in b/doc/lispref/Makefile.in index 10ec236eaee..a95ba45cfe3 100644 --- a/doc/lispref/Makefile.in +++ b/doc/lispref/Makefile.in @@ -47,7 +47,6 @@ srcs = \ $(srcdir)/abbrevs.texi \ $(srcdir)/advice.texi \ $(srcdir)/anti.texi \ - $(srcdir)/back.texi \ $(srcdir)/backups.texi \ $(srcdir)/buffers.texi \ $(srcdir)/commands.texi \ diff --git a/doc/lispref/makefile.w32-in b/doc/lispref/makefile.w32-in index 0a4aea2d7e0..b2c34f3c149 100644 --- a/doc/lispref/makefile.w32-in +++ b/doc/lispref/makefile.w32-in @@ -48,7 +48,6 @@ srcs = \ $(srcdir)/abbrevs.texi \ $(srcdir)/advice.texi \ $(srcdir)/anti.texi \ - $(srcdir)/back.texi \ $(srcdir)/backups.texi \ $(srcdir)/buffers.texi \ $(srcdir)/commands.texi \ From 562e638f783aaaef788401db1ecf589b0c502ddb Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 25 Apr 2012 18:47:05 -0700 Subject: [PATCH 191/564] Remove doc/lispref/tindex.pl I think it is not needed any more. * doc/lispref/tindex.pl: Remove file. * make-dist: No more doc/lispref/tindex.pl. --- ChangeLog | 4 ++ doc/lispref/ChangeLog | 2 + doc/lispref/tindex.pl | 124 ------------------------------------------ make-dist | 2 +- 4 files changed, 7 insertions(+), 125 deletions(-) delete mode 100755 doc/lispref/tindex.pl diff --git a/ChangeLog b/ChangeLog index 505a447c980..73b8c8c0fba 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2012-04-26 Glenn Morris + + * make-dist: No more doc/lispref/tindex.pl. + 2012-04-22 Michael Albinus * configure.in (dbus_validate_bus_name, dbus_validate_path) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 00cba353b02..52af52a151d 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,5 +1,7 @@ 2012-04-26 Glenn Morris + * tindex.pl: Remove file. + * makefile.w32-in (srcs): * Makefile.in (srcs): Remove back.texi (which is unused). diff --git a/doc/lispref/tindex.pl b/doc/lispref/tindex.pl deleted file mode 100755 index a8765716e71..00000000000 --- a/doc/lispref/tindex.pl +++ /dev/null @@ -1,124 +0,0 @@ -#! /usr/bin/perl - -# Copyright (C) 2000-2012 Free Software Foundation, Inc. - -# This file is part of GNU Emacs. - -# 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 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 -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with GNU Emacs. If not, see . - - -require 5; -use Getopt::Long; - -my $USAGE = < \$help, 'version' => \$version, - 'old=s' => \$old); -if ($version) { - print "0.1\n"; - exit 0; -} elsif (!$rc || !$old || @ARGV) { - print $USAGE; - exit 1; -} elsif ($help) { - print $USAGE; - exit 0; -} - -# Fill the hash %tindex with associations VAR -> COUNT where -# the keys VAR are identifiers mentioned in @tindex lines in the older -# files to process and COUNT is the number of times they are seen in -# the files. - -my %tindex; -my %removed; -my @old_files = glob "$old/*.texi"; -my @new_files = glob "*.texi"; -fatal ("No Texinfo files found in `$old'") unless @old_files; -fatal ("No Texinfo files found in current directory") unless @new_files; - -print "Scanning old files for \@tindex lines\n"; -foreach $file (@old_files) { - open (IN, "<$file") or fatal "Cannot open $file: $!"; - while () { - ++$tindex{$1} if /^\s*\@tindex\s+(\S+)/; - } - close IN; -} - -# Process current files and remove those @tindex lines which we -# know were already present in the files scanned above. - -print "Removing old \@tindex lines\n"; -foreach $file (@new_files) { - my $modified = 0; - my $contents = ""; - - open (IN, "< $file") or fatal "Cannot open $file.orig for reading: $!"; - while () { - if (/^\s*\@tindex\s+(\S+)/ && $tindex{$1}) { - ++$removed{$1}; - $modified = 1; - } else { - $contents = $contents . $_; - } - } - - close IN; - - if ($modified) { - print " $file\n"; - system ("cp $file $file.orig") == 0 or fatal "Cannot backup $file: $!"; - open (OUT, ">$file") or fatal "Cannot open $file for writing: $!"; - print OUT $contents; - close OUT; - } -} - -# Print a list of identifiers removed. - -print "Removed \@tindex commands for:\n"; -my $key; -foreach $key (keys %removed) { - print " $key\n"; -} - diff --git a/make-dist b/make-dist index 55dac98d713..44a123c658a 100755 --- a/make-dist +++ b/make-dist @@ -478,7 +478,7 @@ echo "Making links to \`doc/misc'" echo "Making links to \`doc/lispref'" (cd doc/lispref ln *.texi *.in makefile.w32-in README ChangeLog* ../../${tempdir}/doc/lispref - ln *.txt *.el spellfile tindex.pl ../../${tempdir}/doc/lispref + ln *.txt *.el spellfile ../../${tempdir}/doc/lispref ln two-volume.make ../../${tempdir}/doc/lispref) echo "Making links to \`doc/lispintro'" From 8191c3bda8a2858823ca268c323163ab5e3cb82a Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 25 Apr 2012 18:49:03 -0700 Subject: [PATCH 192/564] * doc/lispref/front-cover-1.texi: Remove file. Nothing includes or refers to it, and it has not been updated since Emacs 19. --- doc/lispref/ChangeLog | 2 ++ doc/lispref/front-cover-1.texi | 52 ---------------------------------- 2 files changed, 2 insertions(+), 52 deletions(-) delete mode 100644 doc/lispref/front-cover-1.texi diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 52af52a151d..c67fe8388e3 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,5 +1,7 @@ 2012-04-26 Glenn Morris + * front-cover-1.texi: Remove file. + * tindex.pl: Remove file. * makefile.w32-in (srcs): diff --git a/doc/lispref/front-cover-1.texi b/doc/lispref/front-cover-1.texi deleted file mode 100644 index 56d0f2b1c2d..00000000000 --- a/doc/lispref/front-cover-1.texi +++ /dev/null @@ -1,52 +0,0 @@ -\input texinfo @c -*-texinfo-*- -@comment %**start of header -@setfilename front1.info -@settitle GNU Emacs Lisp Reference Manual -@smallbook -@comment %**end of header - -@titlepage -. -@sp 2 -@center @titlefont{The} -@sp 1 -@center @titlefont{GNU} -@sp 1 -@center @titlefont{Emacs Lisp} -@sp 1 -@center @titlefont{Reference} -@sp 1 -@center @titlefont{Manual} -@sp 2 -@center GNU Emacs Version 19.29 -@center for Unix Users -@center Edition 2.4, June 1995 -@sp 2 -@center @titlefont{Volume 1} -@sp 2 -@center by Bil Lewis, Dan LaLiberte, -@center and the GNU Manual Group -@page -. -@sp 5 -@center @titlefont{The} -@sp 1 -@center @titlefont{GNU} -@sp 1 -@center @titlefont{Emacs Lisp} -@sp 1 -@center @titlefont{Reference} -@sp 1 -@center @titlefont{Manual} -@sp 2 -@center GNU Emacs Version 19.29 -@center for Unix Users -@center Edition 2.4, June 1995 -@sp 2 -@center @titlefont{Volume 2} -@sp 2 -@center by Bil Lewis, Dan LaLiberte, -@center and the GNU Manual Group - -@end titlepage -@bye From 8a4ca8e339479442885e7c79af1ec32cb79b7895 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 25 Apr 2012 18:51:41 -0700 Subject: [PATCH 193/564] * doc/lispref/elisp-covers.texi: Remove file. Nothing includes or refers to it, and it has not been updated since Emacs 19. --- doc/lispref/ChangeLog | 2 +- doc/lispref/elisp-covers.texi | 252 ---------------------------------- 2 files changed, 1 insertion(+), 253 deletions(-) delete mode 100644 doc/lispref/elisp-covers.texi diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index c67fe8388e3..5333e3af3df 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,6 +1,6 @@ 2012-04-26 Glenn Morris - * front-cover-1.texi: Remove file. + * elisp-covers.texi, front-cover-1.texi: Remove files. * tindex.pl: Remove file. diff --git a/doc/lispref/elisp-covers.texi b/doc/lispref/elisp-covers.texi deleted file mode 100644 index b2cc5a9adf2..00000000000 --- a/doc/lispref/elisp-covers.texi +++ /dev/null @@ -1,252 +0,0 @@ -\input texinfo @c -*-texinfo-*- -@c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 2001-2012 Free Software Foundation, Inc. -@c See the file elisp.texi for copying conditions. -@c -@comment %**start of header -@setfilename covers.info -@settitle GNU Emacs Lisp Reference Manual -@comment %**end of header - -@titlepage -@c ================ Volume 1 ================ -@w{ } -@sp 2 -@center @titlefont{The} -@sp 1 -@center @titlefont{GNU} -@sp 1 -@center @titlefont{Emacs Lisp} -@sp 1 -@center @titlefont{Reference} -@sp 1 -@center @titlefont{Manual} -@sp 2 -@center GNU Emacs Version 19 -@center for Unix Users -@center Edition 2.3, June 1994 -@sp 2 -@center @titlefont{Volume 1} -@sp 2 -@center by Bil Lewis, Dan LaLiberte, -@center and the GNU Manual Group - -@page -@c ================ Volume 2 ================ -@w{ } -@sp 5 -@center @titlefont{The} -@sp 1 -@center @titlefont{GNU} -@sp 1 -@center @titlefont{Emacs Lisp} -@sp 1 -@center @titlefont{Reference} -@sp 1 -@center @titlefont{Manual} -@sp 2 -@center GNU Emacs Version 19 -@center for Unix Users -@center Edition 2.3, June 1994 -@sp 2 -@center @titlefont{Volume 2} -@sp 2 -@center by Bil Lewis, -@center Dan LaLiberte, and -@center the GNU Manual Group - -@page -@c ================ Volume 1 with baseline skip 16pt ================ - -@tex -\global\baselineskip = 16pt -@end tex - -16 pts baseline skip: - -@w{ } -@sp 2 -@center @titlefont{The} -@sp 1 -@center @titlefont{GNU} -@sp 1 -@center @titlefont{Emacs Lisp} -@sp 1 -@center @titlefont{Reference} -@sp 1 -@center @titlefont{Manual} -@sp 2 -@center GNU Emacs Version 19 -@center for Unix Users -@center Edition 2.3, June 1994 -@sp 2 -@center @titlefont{Volume 1} -@sp 2 -@center by Bil Lewis, Dan LaLiberte, -@center and the GNU Manual Group - -@page -@c ================ Volume 1 with baseline skip 18pt ================ - -@tex -\global\baselineskip = 18pt -@end tex - -18 pts baseline skip, with 15pts between sections - -@w{ } -@sp 2 -@center @titlefont{The} -@sp 1 -@center @titlefont{GNU} -@sp 1 -@center @titlefont{Emacs Lisp} -@sp 1 -@center @titlefont{Reference} -@sp 1 -@center @titlefont{Manual} -@tex -\global\baselineskip = 15pt -@end tex - -@sp 2 -@center GNU Emacs Version 19 -@center for Unix Users -@center Edition 2.3, June 1994 -@sp 2 -@center @titlefont{Volume 1} -@sp 2 -@center by Bil Lewis, -@center Dan LaLiberte, and -@center the GNU Manual Group - -@page -@c ================ Volume 1 with more baseline skip 24 pts ================ - -@tex -\global\baselineskip = 24pt -@end tex - -24 pts baseline skip: - -@w{ } -@sp 2 -@center @titlefont{The} -@sp 1 -@center @titlefont{GNU} -@sp 1 -@center @titlefont{Emacs Lisp} -@sp 1 -@center @titlefont{Reference} -@sp 1 -@center @titlefont{Manual} -@sp 2 -@center GNU Emacs Version 19 -@center for Unix Users -@center Edition 2.3, June 1994 -@sp 2 -@center @titlefont{Volume 1} -@sp 2 -@center by Bil Lewis, Dan LaLiberte, -@center and the GNU Manual Group - -@page -@c ================ Volume 2 with more baseline skip 18 pts ================ - -@tex -\global\baselineskip = 18pt -@end tex - -18 pts baseline skip: - -@w{ } -@sp 5 -@center @titlefont{The} -@sp 1 -@center @titlefont{GNU} -@sp 1 -@center @titlefont{Emacs Lisp} -@sp 1 -@center @titlefont{Reference} -@sp 1 -@center @titlefont{Manual} -@sp 2 -@center GNU Emacs Version 19 -@center for Unix Users -@center Edition 2.3, June 1994 -@sp 2 -@center @titlefont{Volume 2} -@sp 2 -@center by Bil Lewis, Dan LaLiberte, -@center and the GNU Manual Group - -@page -@c ================ Volume 2 with more baseline skip 24 pts ================ - -@tex -\global\baselineskip = 24pt -@end tex - -24 pts baseline skip: - -@w{ } -@sp 5 -@center @titlefont{The} -@sp 1 -@center @titlefont{GNU} -@sp 1 -@center @titlefont{Emacs Lisp} -@sp 1 -@center @titlefont{Reference} -@sp 1 -@center @titlefont{Manual} -@sp 2 -@center GNU Emacs Version 19 -@center for Unix Users -@center Edition 2.3, June 1994 -@sp 2 -@center @titlefont{Volume 2} -@sp 2 -@center by Bil Lewis, Dan LaLiberte, -@center and the GNU Manual Group - - -@page -@c ================ Spine 1 ================ - -@w{@titlefont{The GNU Emacs Lisp Reference Manual --- Vol. 1}} -@sp 4 -@center GNU Emacs Version 19 -@center for Unix Users -@center Edition 2.3, June 1994 -@sp 4 -@center by Bil Lewis, Dan LaLiberte, -@center and the GNU Manual Group - -@sp 4 -@author The GNU Emacs Lisp Reference Manual --- Vol. 1 -@sp 3 -@author FSF - -@author - -@page -@c ================ Spine 2 ================ - -@w{@titlefont{The GNU Emacs Lisp Reference Manual --- Vol. 2}} -@sp 4 -@center GNU Emacs Version 19 -@center for Unix Users -@center Edition 2.3, June 1994 -@sp 4 -@center by Bil Lewis, Dan LaLiberte, -@center and the GNU Manual Group - - -@sp 4 -@author The GNU Emacs Lisp Reference Manual --- Vol. 2 -@sp 3 -@author FSF - -@end titlepage -@bye From 823ad1d7e83d2e98ba19d686f3c310707ca27c9a Mon Sep 17 00:00:00 2001 From: Daiki Ueno Date: Thu, 26 Apr 2012 11:03:19 +0900 Subject: [PATCH 194/564] Revive plstore editing mode previously reverted due to feature freeze. --- lisp/gnus/ChangeLog | 10 ++++ lisp/gnus/plstore.el | 135 +++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 139 insertions(+), 6 deletions(-) diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 52f140d9192..be4d0675781 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,13 @@ +2012-04-26 Daiki Ueno + + * plstore.el: Revive the editing feature. + (plstore-mode): New mode to edit plstore file. + (plstore-mode-toggle-display, plstore-mode-original) + (plstore-mode-decoded): New command. + (plstore--encode, plstore--decode, plstore--write-contents-functions) + (plstore--insert-buffer, plstore--make): New function. + (plstore-open, plstore-save): Simplify by using them. + 2012-04-16 Glenn Morris * nndraft.el (nndraft-request-list): Fix declaration. diff --git a/lisp/gnus/plstore.el b/lisp/gnus/plstore.el index cbd5e2a3b0a..2f446c84071 100644 --- a/lisp/gnus/plstore.el +++ b/lisp/gnus/plstore.el @@ -64,8 +64,18 @@ ;; ;; Editing: ;; -;; Currently not supported but in the future plstore will provide a -;; major mode to edit PLSTORE files. +;; This file also provides `plstore-mode', a major mode for editing +;; the PLSTORE format file. Visit a non-existing file and put the +;; following line: +;; +;; (("foo" :host "foo.example.org" :secret-user "user")) +;; +;; where the prefixing `:secret-' means the property (without +;; `:secret-' prefix) is marked as secret. Thus, when you save the +;; buffer, the `:secret-user' property is encrypted as `:user'. +;; +;; You can toggle the view between encrypted form and the decrypted +;; form with C-c C-c. ;;; Code: @@ -107,6 +117,10 @@ symmetric encryption will be used.") (put 'plstore-encrypt-to 'permanent-local t) +(defvar plstore-encoded nil) + +(put 'plstore-encoded 'permanent-local t) + (defvar plstore-cache-passphrase-for-symmetric-encryption nil) (defvar plstore-passphrase-alist nil) @@ -194,10 +208,6 @@ symmetric encryption will be used.") (generate-new-buffer (format " plstore %s" filename)))) (store (plstore--make buffer))) (with-current-buffer buffer - ;; In the future plstore will provide a major mode called - ;; `plstore-mode' to edit PLSTORE files. - (if (eq major-mode 'plstore-mode) - (error "%s is opened for editing; kill the buffer first" file)) (erase-buffer) (condition-case nil (insert-file-contents-literally file) @@ -435,6 +445,119 @@ If no one is selected, symmetric encryption will be performed. " (plstore--insert-buffer plstore) (save-buffer))) +(defun plstore--encode (plstore) + (plstore--decrypt plstore) + (let ((merged-alist (plstore--get-merged-alist plstore))) + (concat "(" + (mapconcat + (lambda (entry) + (setq entry (copy-sequence entry)) + (let ((merged-plist (cdr (assoc (car entry) merged-alist))) + (plist (cdr entry))) + (while plist + (if (string-match "\\`:secret-" (symbol-name (car plist))) + (setcar (cdr plist) + (plist-get + merged-plist + (intern (concat ":" + (substring (symbol-name + (car plist)) + (match-end 0))))))) + (setq plist (nthcdr 2 plist))) + (prin1-to-string entry))) + (plstore--get-alist plstore) + "\n") + ")"))) + +(defun plstore--decode (string) + (let* ((alist (car (read-from-string string))) + (pointer alist) + secret-alist + plist + entry) + (while pointer + (unless (stringp (car (car pointer))) + (error "Invalid PLSTORE format %s" string)) + (setq plist (cdr (car pointer))) + (while plist + (when (string-match "\\`:secret-" (symbol-name (car plist))) + (setq entry (assoc (car (car pointer)) secret-alist)) + (unless entry + (setq entry (list (car (car pointer))) + secret-alist (cons entry secret-alist))) + (setcdr entry (plist-put (cdr entry) + (intern (concat ":" + (substring (symbol-name + (car plist)) + (match-end 0)))) + (car (cdr plist)))) + (setcar (cdr plist) t)) + (setq plist (nthcdr 2 plist))) + (setq pointer (cdr pointer))) + (plstore--make nil alist nil secret-alist))) + +(defun plstore--write-contents-functions () + (when plstore-encoded + (let ((store (plstore--decode (buffer-string))) + (file (buffer-file-name))) + (unwind-protect + (progn + (set-visited-file-name nil) + (with-temp-buffer + (plstore--insert-buffer store) + (write-region (buffer-string) nil file))) + (set-visited-file-name file) + (set-buffer-modified-p nil)) + t))) + +(defun plstore-mode-original () + "Show the original form of the this buffer." + (interactive) + (when plstore-encoded + (if (and (buffer-modified-p) + (y-or-n-p "Save buffer before reading the original form? ")) + (save-buffer)) + (erase-buffer) + (insert-file-contents-literally (buffer-file-name)) + (set-buffer-modified-p nil) + (setq plstore-encoded nil))) + +(defun plstore-mode-decoded () + "Show the decoded form of the this buffer." + (interactive) + (unless plstore-encoded + (if (and (buffer-modified-p) + (y-or-n-p "Save buffer before decoding? ")) + (save-buffer)) + (let ((store (plstore--make (current-buffer)))) + (plstore--init-from-buffer store) + (erase-buffer) + (insert + (substitute-command-keys "\ +;;; You are looking at the decoded form of the PLSTORE file.\n\ +;;; To see the original form content, do \\[plstore-mode-toggle-display]\n\n")) + (insert (plstore--encode store)) + (set-buffer-modified-p nil) + (setq plstore-encoded t)))) + +(defun plstore-mode-toggle-display () + "Toggle the display mode of PLSTORE between the original and decoded forms." + (interactive) + (if plstore-encoded + (plstore-mode-original) + (plstore-mode-decoded))) + +;;;###autoload +(define-derived-mode plstore-mode emacs-lisp-mode "PLSTORE" + "Major mode for editing PLSTORE files." + (make-local-variable 'plstore-encoded) + (add-hook 'write-contents-functions #'plstore--write-contents-functions) + (define-key plstore-mode-map "\C-c\C-c" #'plstore-mode-toggle-display) + ;; to create a new file with plstore-mode, mark it as already decoded + (if (called-interactively-p 'any) + (setq plstore-encoded t) + (plstore-mode-decoded))) + (provide 'plstore) ;;; plstore.el ends here From f08ae1c9b5ee79aef764f4ef35ae4c84009333e6 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Thu, 26 Apr 2012 11:04:36 +0800 Subject: [PATCH 195/564] Adapt ediff window handling to multi-tty. * vc/ediff-init.el: Always define ediff-pixel-width/height. * vc/ediff-wind.el (ediff-setup-windows-default): New function. (ediff-window-setup-function): Use it as the default, to set up windows based on whether the current frame is graphical. (ediff-choose-window-setup-function-automatically): Make obsolete. Fixes: debbugs:2138 --- lisp/ChangeLog | 9 +++++++++ lisp/vc/ediff-init.el | 19 ++++++------------- lisp/vc/ediff-wind.el | 37 ++++++++++++++++++++++++++----------- 3 files changed, 41 insertions(+), 24 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index eb09afc0b55..04271849758 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,12 @@ +2012-04-26 Chong Yidong + + * vc/ediff-wind.el (ediff-setup-windows-default): New function. + (ediff-window-setup-function): Use it as the default, to set up + windows based on whether the current frame is graphical (Bug#2138). + (ediff-choose-window-setup-function-automatically): Make obsolete. + + * vc/ediff-init.el: Always define ediff-pixel-width/height. + 2012-04-25 Stefan Monnier * ffap.el: Remove old code for obsolete package. diff --git a/lisp/vc/ediff-init.el b/lisp/vc/ediff-init.el index ad6d69ee924..80ed9356850 100644 --- a/lisp/vc/ediff-init.el +++ b/lisp/vc/ediff-init.el @@ -786,19 +786,12 @@ TYPE-OF-EMACS is either 'xemacs or 'emacs." "") -(if (ediff-window-display-p) - (if (featurep 'xemacs) - (progn - (defalias 'ediff-display-pixel-width 'device-pixel-width) - (defalias 'ediff-display-pixel-height 'device-pixel-height)) - (defalias 'ediff-display-pixel-width - (if (fboundp 'display-pixel-width) - 'display-pixel-width - 'x-display-pixel-width)) - (defalias 'ediff-display-pixel-height - (if (fboundp 'display-pixel-height) - 'display-pixel-height - 'x-display-pixel-height)))) +(if (featurep 'xemacs) + (progn + (defalias 'ediff-display-pixel-width 'device-pixel-width) + (defalias 'ediff-display-pixel-height 'device-pixel-height)) + (defalias 'ediff-display-pixel-width 'display-pixel-width) + (defalias 'ediff-display-pixel-height 'display-pixel-height)) ;; A-list of current-diff-overlay symbols associated with buf types (defconst ediff-current-diff-overlay-alist diff --git a/lisp/vc/ediff-wind.el b/lisp/vc/ediff-wind.el index 83098fcb0c7..50f2be3b8dc 100644 --- a/lisp/vc/ediff-wind.el +++ b/lisp/vc/ediff-wind.el @@ -67,16 +67,23 @@ 'ediff-setup-windows-multiframe 'ediff-setup-windows-plain)) -(defcustom ediff-window-setup-function (ediff-choose-window-setup-function-automatically) +(make-obsolete 'ediff-choose-window-setup-function-automatically + 'ediff-setup-windows-default "24.2") + +(defcustom ediff-window-setup-function 'ediff-setup-windows-default "Function called to set up windows. -Ediff provides a choice of two functions: `ediff-setup-windows-plain', for -doing everything in one frame and `ediff-setup-windows-multiframe', which sets -the control panel in a separate frame. By default, the appropriate function is -chosen automatically depending on the current window system. -However, `ediff-toggle-multiframe' can be used to toggle between the multiframe -display and the single frame display. -If the multiframe function detects that one of the buffers A/B is seen in some -other frame, it will try to keep that buffer in that frame. +Ediff provides a choice of three functions: + (1) `ediff-setup-windows-multiframe', which sets the control panel + in a separate frame. + (2) `ediff-setup-windows-plain', which does everything in one frame + (3) `ediff-setup-windows-default' (the default), which does (1) + on a graphical display and (2) on a text terminal. + +The command \\[ediff-toggle-multiframe] can be used to toggle +between the multiframe display and the single frame display. If +the multiframe function detects that one of the buffers A/B is +seen in some other frame, it will try to keep that buffer in that +frame. If you don't like any of the two provided functions, write your own one. The basic guidelines: @@ -90,10 +97,12 @@ The basic guidelines: Buffer C may not be used in jobs that compare only two buffers. If you plan to do something fancy, take a close look at how the two provided functions are written." - :type '(choice (const :tag "Multi Frame" ediff-setup-windows-multiframe) + :type '(choice (const :tag "Choose Automatically" ediff-setup-windows-default) + (const :tag "Multi Frame" ediff-setup-windows-multiframe) (const :tag "Single Frame" ediff-setup-windows-plain) (function :tag "Other function")) - :group 'ediff-window) + :group 'ediff-window + :version "24.2") ;; indicates if we are in a multiframe setup (ediff-defvar-local ediff-multiframe nil "") @@ -333,6 +342,12 @@ into icons, regardless of the window manager." buffer-A buffer-B buffer-C control-buffer)) (run-hooks 'ediff-after-setup-windows-hook)) +(defun ediff-setup-windows-default (buffer-A buffer-B buffer-C control-buffer) + (funcall (if (display-graphic-p) + 'ediff-setup-windows-multiframe + 'ediff-setup-windows-plain) + buffer-A buffer-B buffer-C control-buffer)) + ;; Just set up 3 windows. ;; Usually used without windowing systems ;; With windowing, we want to use dedicated frames. From 88ed9e87e565504e377ff3dfcdbacbbbeb382926 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Wed, 25 Apr 2012 23:06:36 -0400 Subject: [PATCH 196/564] Deprecate the ((lambda ...) ...) form. * doc/lispref/functions.texi (Simple Lambda, Argument List): * doc/lispref/eval.texi (Function Indirection): Avoid deprecated form. --- doc/lispref/ChangeLog | 5 +++++ doc/lispref/eval.texi | 16 ++++++++++++++++ doc/lispref/functions.texi | 27 +++++++++++++-------------- etc/NEWS | 2 ++ 4 files changed, 36 insertions(+), 14 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index d65a8813fda..401b674f98b 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,8 @@ +2012-04-26 Stefan Monnier + + * functions.texi (Simple Lambda, Argument List): + * eval.texi (Function Indirection): Avoid deprecated form. + 2012-04-26 Glenn Morris * book-spine.texi, elisp.texi, vol1.texi, vol2.texi: diff --git a/doc/lispref/eval.texi b/doc/lispref/eval.texi index 5bb514451b8..62de337a5e3 100644 --- a/doc/lispref/eval.texi +++ b/doc/lispref/eval.texi @@ -305,6 +305,22 @@ function, not a symbol. Executing the function itself evaluates its body; this does involve symbol function indirection when calling @code{erste}. + This form is rarely used and is now deprecated. Instead, you should write it +as: + +@smallexample +@group +(funcall (lambda (arg) (erste arg)) + '(1 2 3)) +@end group +@end smallexample +or just +@smallexample +@group +(let ((arg '(1 2 3))) (erste arg)) +@end group +@end smallexample + The built-in function @code{indirect-function} provides an easy way to perform symbol function indirection explicitly. diff --git a/doc/lispref/functions.texi b/doc/lispref/functions.texi index 9ee94557066..24fe9ed5e68 100644 --- a/doc/lispref/functions.texi +++ b/doc/lispref/functions.texi @@ -267,13 +267,12 @@ function is the value returned by the last element of the body. @end example @noindent -We can call this function by writing it as the @sc{car} of an -expression, like this: +We can call this function by passing it to @code{funcall}, like this: @example @group -((lambda (a b c) (+ a b c)) - 1 2 3) +(funcall (lambda (a b c) (+ a b c)) + 1 2 3) @end group @end example @@ -288,8 +287,8 @@ this example: @example @group -((lambda (a b c) (+ a b c)) - 1 (* 2 3) (- 5 4)) +(funcall (lambda (a b c) (+ a b c)) + 1 (* 2 3) (- 5 4)) @end group @end example @@ -400,16 +399,16 @@ after a @code{&rest} argument. Here are some examples of argument lists and proper calls: @smallexample -((lambda (n) (1+ n)) ; @r{One required:} - 1) ; @r{requires exactly one argument.} +(funcall (lambda (n) (1+ n)) ; @r{One required:} + 1) ; @r{requires exactly one argument.} @result{} 2 -((lambda (n &optional n1) ; @r{One required and one optional:} - (if n1 (+ n n1) (1+ n))) ; @r{1 or 2 arguments.} - 1 2) +(funcall (lambda (n &optional n1) ; @r{One required and one optional:} + (if n1 (+ n n1) (1+ n))) ; @r{1 or 2 arguments.} + 1 2) @result{} 3 -((lambda (n &rest ns) ; @r{One required and one rest:} - (+ n (apply '+ ns))) ; @r{1 or more arguments.} - 1 2 3 4 5) +(funcall (lambda (n &rest ns) ; @r{One required and one rest:} + (+ n (apply '+ ns))) ; @r{1 or more arguments.} + 1 2 3 4 5) @result{} 15 @end smallexample diff --git a/etc/NEWS b/etc/NEWS index 68a4d57eff2..e87bcaec0f0 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1052,6 +1052,8 @@ So do `defcustom' and other forms that call `defvar' as a subroutine. *** New function `special-variable-p' to check whether a variable is declared as dynamically bound. +*** The form ((lambda ...) ...) is deprecated. + ** An Emacs Lisp testing tool is now included. Emacs Lisp developers can use this tool to write automated tests for their code. See the ERT info manual for details. From 0d42eb3e961e612b1b04e32e99c2998dd4d5d3be Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Wed, 25 Apr 2012 23:18:47 -0400 Subject: [PATCH 197/564] =?UTF-8?q?*=20lisp/vc/vc-mtn.el:=20*=20lisp/vc/vc?= =?UTF-8?q?-hg.el:=20*=20lisp/vc/vc-git.el:=20*=20lisp/vc/vc-dir.el:=20*?= =?UTF-8?q?=20lisp/vc/vc-cvs.el:=20*=20lisp/vc/vc-bzr.el:=20*=20lisp/vc/vc?= =?UTF-8?q?-arch.el:=20*=20lisp/vc/vc.el:=20Replace=20lexical-let=20by=20l?= =?UTF-8?q?exical-binding.=20*=20lisp/minibuffer.el=20(lazy-completion-tab?= =?UTF-8?q?le):=20Avoid=20((=CE=BB=20...)=20...).=20*=20lisp/emacs-lisp/cl?= =?UTF-8?q?-macs.el=20(lexical-let):=20Fix=20use=20in=20lexical-binding.?= =?UTF-8?q?=20*=20lisp/emacs-lisp/cconv.el=20(cconv-analyse-form):=20Warn?= =?UTF-8?q?=20use=20of=20((=CE=BB=20...)=20...).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lisp/ChangeLog | 14 +++ lisp/emacs-lisp/cconv.el | 4 +- lisp/emacs-lisp/cl-loaddefs.el | 2 +- lisp/emacs-lisp/cl-macs.el | 22 ++-- lisp/files.el | 3 +- lisp/minibuffer.el | 2 +- lisp/vc/vc-arch.el | 34 +++--- lisp/vc/vc-bzr.el | 203 ++++++++++++++++----------------- lisp/vc/vc-cvs.el | 16 ++- lisp/vc/vc-dir.el | 31 +++-- lisp/vc/vc-git.el | 28 +++-- lisp/vc/vc-hg.el | 25 ++-- lisp/vc/vc-mtn.el | 81 +++++++------ lisp/vc/vc.el | 173 ++++++++++++---------------- 14 files changed, 314 insertions(+), 324 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 04271849758..bb40b542792 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,17 @@ +2012-04-26 Stefan Monnier + + * vc/vc-mtn.el: + * vc/vc-hg.el: + * vc/vc-git.el: + * vc/vc-dir.el: + * vc/vc-cvs.el: + * vc/vc-bzr.el: + * vc/vc-arch.el: + * vc/vc.el: Replace lexical-let by lexical-binding. + * minibuffer.el (lazy-completion-table): Avoid ((λ ...) ...). + * emacs-lisp/cl-macs.el (lexical-let): Fix use in lexical-binding. + * emacs-lisp/cconv.el (cconv-analyse-form): Warn use of ((λ ...) ...). + 2012-04-26 Chong Yidong * vc/ediff-wind.el (ediff-setup-windows-default): New function. diff --git a/lisp/emacs-lisp/cconv.el b/lisp/emacs-lisp/cconv.el index b6b6a78a9bb..3ce0eadab55 100644 --- a/lisp/emacs-lisp/cconv.el +++ b/lisp/emacs-lisp/cconv.el @@ -639,7 +639,9 @@ and updates the data stored in ENV." (cconv-analyse-form (cadr forms) env) (setq forms (cddr forms)))) - (`((lambda . ,_) . ,_) ; first element is lambda expression + (`((lambda . ,_) . ,_) ; First element is lambda expression. + (byte-compile-log-warning + "Use of deprecated ((lambda ...) ...) form" t :warning) (dolist (exp `((function ,(car form)) . ,(cdr form))) (cconv-analyse-form exp env))) diff --git a/lisp/emacs-lisp/cl-loaddefs.el b/lisp/emacs-lisp/cl-loaddefs.el index 9e0099bb649..48be2f72972 100644 --- a/lisp/emacs-lisp/cl-loaddefs.el +++ b/lisp/emacs-lisp/cl-loaddefs.el @@ -286,7 +286,7 @@ This also does some trivial optimizations to make the form prettier. ;;;;;; flet progv psetq do-all-symbols do-symbols dotimes dolist ;;;;;; do* do loop return-from return block etypecase typecase ecase ;;;;;; case load-time-value eval-when destructuring-bind function* -;;;;;; defmacro* defun* gentemp gensym) "cl-macs" "cl-macs.el" "91b45885535a73dd8015973cb8c988e1") +;;;;;; defmacro* defun* gentemp gensym) "cl-macs" "cl-macs.el" "abb2e33c6f61539d69ddbe7c4046261b") ;;; Generated autoloads from cl-macs.el (autoload 'gensym "cl-macs" "\ diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el index 4fc71bbbc60..35cda8cfcf6 100644 --- a/lisp/emacs-lisp/cl-macs.el +++ b/lisp/emacs-lisp/cl-macs.el @@ -1483,18 +1483,24 @@ lexical closures as in Common Lisp. (cons 'progn body) (nconc (mapcar (function (lambda (x) (list (symbol-name (car x)) - (list 'symbol-value (caddr x)) + (list 'symbol-value (caddr x)) t))) vars) (list '(defun . cl-defun-expander)) cl-macro-environment)))) (if (not (get (car (last cl-closure-vars)) 'used)) - (list 'let (mapcar (function (lambda (x) - (list (caddr x) (cadr x)))) vars) - (sublis (mapcar (function (lambda (x) - (cons (caddr x) - (list 'quote (caddr x))))) - vars) - ebody)) + ;; Turn (let ((foo (gensym))) (set foo ) ...(symbol-value foo)...) + ;; into (let ((foo )) ...(symbol-value 'foo)...). + ;; This is good because it's more efficient but it only works with + ;; dynamic scoping, since with lexical scoping we'd need + ;; (let ((foo )) ...foo...). + `(progn + ,@(mapcar (lambda (x) `(defvar ,(caddr x))) vars) + (let ,(mapcar (lambda (x) (list (caddr x) (cadr x))) vars) + ,(sublis (mapcar (lambda (x) + (cons (caddr x) + (list 'quote (caddr x)))) + vars) + ebody))) (list 'let (mapcar (function (lambda (x) (list (caddr x) (list 'make-symbol diff --git a/lisp/files.el b/lisp/files.el index 703b443765d..96a5b40e791 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -3642,7 +3642,8 @@ and `file-local-variables-alist', without applying them." (when (and enable-local-variables (not (file-remote-p (or (buffer-file-name) default-directory)))) ;; Find the variables file. - (let ((variables-file (dir-locals-find-file (or (buffer-file-name) default-directory))) + (let ((variables-file (dir-locals-find-file + (or (buffer-file-name) default-directory))) (class nil) (dir-name nil)) (cond diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index 733a132bb1c..59bd0d231dc 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -199,7 +199,7 @@ You should give VAR a non-nil `risky-local-variable' property." `(completion-table-dynamic (lambda (,str) (when (functionp ,var) - (setq ,var (,fun))) + (setq ,var (funcall #',fun))) ,var)))) (defun completion-table-case-fold (table &optional dont-fold) diff --git a/lisp/vc/vc-arch.el b/lisp/vc/vc-arch.el index 052e6784b08..18dfbe1f5fa 100644 --- a/lisp/vc/vc-arch.el +++ b/lisp/vc/vc-arch.el @@ -1,4 +1,4 @@ -;;; vc-arch.el --- VC backend for the Arch version-control system +;;; vc-arch.el --- VC backend for the Arch version-control system -*- lexical-binding: t -*- ;; Copyright (C) 2004-2012 Free Software Foundation, Inc. @@ -59,7 +59,7 @@ ;;; Properties of the backend (defun vc-arch-revision-granularity () 'repository) -(defun vc-arch-checkout-model (files) 'implicit) +(defun vc-arch-checkout-model (_files) 'implicit) ;;; ;;; Customization options @@ -227,7 +227,7 @@ Only the value `maybe' can be trusted :-(." (vc-file-setprop file 'arch-root root))))) -(defun vc-arch-register (files &optional rev comment) +(defun vc-arch-register (files &optional rev _comment) (if rev (error "Explicit initial revision not supported for Arch")) (dolist (file files) (let ((tagmet (vc-arch-tagging-method file))) @@ -258,7 +258,7 @@ Only the value `maybe' can be trusted :-(." ;; Strip the terminating newline. (buffer-substring (point-min) (1- (point-max))))))))) -(defun vc-arch-workfile-unchanged-p (file) +(defun vc-arch-workfile-unchanged-p (_file) "Stub: arch workfiles are always considered to be in a changed state," nil) @@ -508,12 +508,11 @@ CALLBACK expects (ENTRIES &optional MORE-TO-COME); see "*")))))) (defun vc-arch-revision-completion-table (files) - (lexical-let ((files files)) - (lambda (string pred action) - ;; FIXME: complete revision patches as well. - (let* ((root (expand-file-name "{arch}" (vc-arch-root (car files)))) - (table (vc-arch--version-completion-table root string))) - (complete-with-action action table string pred))))) + (lambda (string pred action) + ;; FIXME: complete revision patches as well. + (let* ((root (expand-file-name "{arch}" (vc-arch-root (car files)))) + (table (vc-arch--version-completion-table root string))) + (complete-with-action action table string pred)))) ;;; Trimming revision libraries. @@ -547,13 +546,12 @@ CALLBACK expects (ENTRIES &optional MORE-TO-COME); see minrev)) (defun vc-arch-trim-make-sentinel (revs) - (if (null revs) (lambda (proc msg) (message "VC-Arch trimming ... done")) - (lexical-let ((revs revs)) - (lambda (proc msg) - (message "VC-Arch trimming %s..." (file-name-nondirectory (car revs))) - (rename-file (car revs) (concat (car revs) "*rm*")) - (setq proc (start-process "vc-arch-trim" nil - "rm" "-rf" (concat (car revs) "*rm*"))) + (if (null revs) (lambda (_proc _msg) (message "VC-Arch trimming ... done")) + (lambda (_proc _msg) + (message "VC-Arch trimming %s..." (file-name-nondirectory (car revs))) + (rename-file (car revs) (concat (car revs) "*rm*")) + (let ((proc (start-process "vc-arch-trim" nil + "rm" "-rf" (concat (car revs) "*rm*")))) (set-process-sentinel proc (vc-arch-trim-make-sentinel (cdr revs))))))) (defun vc-arch-trim-one-revlib (dir) @@ -572,7 +570,7 @@ CALLBACK expects (ENTRIES &optional MORE-TO-COME); see 'car-less-than-car)) (subdirs nil)) (when (cddr revs) - (dotimes (i (/ (length revs) 2)) + (dotimes (_i (/ (length revs) 2)) (let ((minrev (vc-arch-trim-find-least-useful-rev revs))) (setq revs (delq minrev revs)) (push minrev subdirs))) diff --git a/lisp/vc/vc-bzr.el b/lisp/vc/vc-bzr.el index 505e40f46ba..5488e53e32f 100644 --- a/lisp/vc/vc-bzr.el +++ b/lisp/vc/vc-bzr.el @@ -1,4 +1,4 @@ -;;; vc-bzr.el --- VC backend for the bzr revision control system +;;; vc-bzr.el --- VC backend for the bzr revision control system -*- lexical-binding: t -*- ;; Copyright (C) 2006-2012 Free Software Foundation, Inc. @@ -41,7 +41,7 @@ ;;; Properties of the backend (defun vc-bzr-revision-granularity () 'repository) -(defun vc-bzr-checkout-model (files) 'implicit) +(defun vc-bzr-checkout-model (_files) 'implicit) ;;; Code: @@ -208,9 +208,9 @@ in the repository root directory of FILE." ;; + working ( = packed_stat ) ;; parent = common ( as above ) + history ( = rev_id ) ;; kinds = (r)elocated, (a)bsent, (d)irectory, (f)ile, (l)ink - (lexical-let ((root (vc-bzr-root file))) + (let ((root (vc-bzr-root file))) (when root ; Short cut. - (lexical-let ((dirstate (expand-file-name vc-bzr-admin-dirstate root))) + (let ((dirstate (expand-file-name vc-bzr-admin-dirstate root))) (condition-case nil (with-temp-buffer (insert-file-contents dirstate) @@ -303,9 +303,8 @@ in the repository root directory of FILE." (defun vc-bzr-file-name-relative (filename) "Return file name FILENAME stripped of the initial Bzr repository path." - (lexical-let* - ((filename* (expand-file-name filename)) - (rootdir (vc-bzr-root filename*))) + (let* ((filename* (expand-file-name filename)) + (rootdir (vc-bzr-root filename*))) (when rootdir (file-relative-name filename* rootdir)))) @@ -412,9 +411,8 @@ in the branch repository (or whose status not be determined)." (with-temp-buffer ;; This is with-demoted-errors without the condition-case-unless-debug ;; annoyance, which makes it fail during ert testing. - (let (err) - (condition-case err (vc-bzr-command "status" t 0 file) - (error (message "Error: %S" err) nil))) + (condition-case err (vc-bzr-command "status" t 0 file) + (error (message "Error: %S" err) nil)) (let ((status 'unchanged)) ;; the only secure status indication in `bzr status' output ;; is a couple of lines following the pattern:: @@ -433,7 +431,7 @@ in the branch repository (or whose status not be determined)." (if (file-directory-p file) "/?" "\\*?") "[ \t\n]*$") nil t) - (lexical-let ((statusword (match-string 1))) + (let ((statusword (match-string 1))) ;; Erase the status text that matched. (delete-region (match-beginning 0) (match-end 0)) (setq status @@ -452,7 +450,7 @@ in the branch repository (or whose status not be determined)." (unless (eobp) (buffer-substring (point) (point-max)))))))) (defun vc-bzr-state (file) - (lexical-let ((result (vc-bzr-status file))) + (let ((result (vc-bzr-status file))) (when (consp result) (let ((warnings (cdr result))) (when warnings @@ -504,16 +502,15 @@ in the branch repository (or whose status not be determined)." (defun vc-bzr-working-revision (file) ;; Together with the code in vc-state-heuristic, this makes it possible ;; to get the initial VC state of a Bzr file even if Bzr is not installed. - (lexical-let* - ((rootdir (vc-bzr-root file)) - (branch-format-file (expand-file-name vc-bzr-admin-branch-format-file - rootdir)) - (revhistory-file (expand-file-name vc-bzr-admin-revhistory rootdir)) - (lastrev-file (expand-file-name vc-bzr-admin-lastrev rootdir))) + (let* ((rootdir (vc-bzr-root file)) + (branch-format-file (expand-file-name vc-bzr-admin-branch-format-file + rootdir)) + (revhistory-file (expand-file-name vc-bzr-admin-revhistory rootdir)) + (lastrev-file (expand-file-name vc-bzr-admin-lastrev rootdir))) ;; This looks at internal files to avoid forking a bzr process. ;; May break if they change their format. (if (and (file-exists-p branch-format-file) - ;; For lightweight checkouts (obtained with bzr checkout --lightweight) + ;; For lightweight checkouts (obtained with bzr co --lightweight) ;; the branch-format-file does not contain the revision ;; information, we need to look up the branch-format-file ;; in the place where the lightweight checkout comes @@ -532,17 +529,21 @@ in the branch repository (or whose status not be determined)." (when (re-search-forward "file://\\(.+\\)" nil t) (let ((l-c-parent-dir (match-string 1))) (when (and (memq system-type '(ms-dos windows-nt)) - (string-match-p "^/[[:alpha:]]:" l-c-parent-dir)) - ;;; The non-Windows code takes a shortcut by using the host/path - ;;; separator slash as the start of the absolute path. That - ;;; does not work on Windows, so we must remove it (bug#5345) + (string-match-p "^/[[:alpha:]]:" + l-c-parent-dir)) + ;;; The non-Windows code takes a shortcut by using + ;;; the host/path separator slash as the start of + ;;; the absolute path. That does not work on + ;;; Windows, so we must remove it (bug#5345) (setq l-c-parent-dir (substring l-c-parent-dir 1))) (setq branch-format-file (expand-file-name vc-bzr-admin-branch-format-file l-c-parent-dir)) (setq lastrev-file - (expand-file-name vc-bzr-admin-lastrev l-c-parent-dir)) - ;; FIXME: maybe it's overkill to check if both these files exist. + (expand-file-name vc-bzr-admin-lastrev + l-c-parent-dir)) + ;; FIXME: maybe it's overkill to check if both these + ;; files exist. (and (file-exists-p branch-format-file) (file-exists-p lastrev-file))))) t))) @@ -564,11 +565,10 @@ in the branch repository (or whose status not be determined)." (when (re-search-forward "[0-9]+" nil t) (buffer-substring (match-beginning 0) (match-end 0)))))) ;; fallback to calling "bzr revno" - (lexical-let* - ((result (vc-bzr-command-discarding-stderr - vc-bzr-program "revno" (file-relative-name file))) - (exitcode (car result)) - (output (cdr result))) + (let* ((result (vc-bzr-command-discarding-stderr + vc-bzr-program "revno" (file-relative-name file))) + (exitcode (car result)) + (output (cdr result))) (cond ((eq exitcode 0) (substring output 0 -1)) (t nil)))))) @@ -577,21 +577,21 @@ in the branch repository (or whose status not be determined)." "Create a new Bzr repository." (vc-bzr-command "init" nil 0 nil)) -(defun vc-bzr-init-revision (&optional file) +(defun vc-bzr-init-revision (&optional _file) "Always return nil, as Bzr cannot register explicit versions." nil) -(defun vc-bzr-previous-revision (file rev) +(defun vc-bzr-previous-revision (_file rev) (if (string-match "\\`[0-9]+\\'" rev) (number-to-string (1- (string-to-number rev))) (concat "before:" rev))) -(defun vc-bzr-next-revision (file rev) +(defun vc-bzr-next-revision (_file rev) (if (string-match "\\`[0-9]+\\'" rev) (number-to-string (1+ (string-to-number rev))) (error "Don't know how to compute the next revision of %s" rev))) -(defun vc-bzr-register (files &optional rev comment) +(defun vc-bzr-register (files &optional rev _comment) "Register FILES under bzr. Signal an error unless REV is nil. COMMENT is ignored." @@ -640,7 +640,7 @@ REV non-nil gets an error." (vc-bzr-command "cat" t 0 file "-r" rev) (vc-bzr-command "cat" t 0 file)))) -(defun vc-bzr-checkout (file &optional editable rev) +(defun vc-bzr-checkout (_file &optional _editable rev) (if rev (error "Operation not supported") ;; Else, there's nothing to do. nil)) @@ -791,7 +791,7 @@ Each line is tagged with the revision number, which has a `help-echo' property containing author and date information." (apply #'vc-bzr-command "annotate" buffer 'async file "--long" "--all" (if revision (list "-r" revision))) - (lexical-let ((table (make-hash-table :test 'equal))) + (let ((table (make-hash-table :test 'equal))) (set-process-filter (get-buffer-process buffer) (lambda (proc string) @@ -956,7 +956,7 @@ stream. Standard error output is discarded." ;; frob the results accordingly. (file-relative-name ,dir (vc-bzr-root ,dir))))) -(defun vc-bzr-dir-status-files (dir files default-state update-function) +(defun vc-bzr-dir-status-files (dir files _default-state update-function) "Return a list of conses (file . state) for DIR." (apply 'vc-bzr-command "status" (current-buffer) 'async dir "-v" "-S" files) (vc-exec-after @@ -1193,74 +1193,73 @@ stream. Standard error output is discarded." "revno" "submit" "tag"))) (defun vc-bzr-revision-completion-table (files) - (lexical-let ((files files)) - ;; What about using `files'?!? --Stef - (lambda (string pred action) - (cond - ((string-match "\\`\\(ancestor\\|branch\\|\\(revno:\\)?[-0-9]+:\\):" - string) - (completion-table-with-context (substring string 0 (match-end 0)) - (apply-partially - 'completion-table-with-predicate - 'completion-file-name-table - 'file-directory-p t) - (substring string (match-end 0)) - pred - action)) - ((string-match "\\`\\(before\\):" string) - (completion-table-with-context (substring string 0 (match-end 0)) - (vc-bzr-revision-completion-table files) - (substring string (match-end 0)) - pred - action)) - ((string-match "\\`\\(tag\\):" string) - (let ((prefix (substring string 0 (match-end 0))) - (tag (substring string (match-end 0))) - (table nil) - process-file-side-effects) - (with-temp-buffer - ;; "bzr-1.2 tags" is much faster with --show-ids. - (process-file vc-bzr-program nil '(t) nil "tags" "--show-ids") - ;; The output is ambiguous, unless we assume that revids do not - ;; contain spaces. - (goto-char (point-min)) - (while (re-search-forward "^\\(.*[^ \n]\\) +[^ \n]*$" nil t) - (push (match-string-no-properties 1) table))) - (completion-table-with-context prefix table tag pred action))) + ;; What about using `files'?!? --Stef + (lambda (string pred action) + (cond + ((string-match "\\`\\(ancestor\\|branch\\|\\(revno:\\)?[-0-9]+:\\):" + string) + (completion-table-with-context (substring string 0 (match-end 0)) + (apply-partially + 'completion-table-with-predicate + 'completion-file-name-table + 'file-directory-p t) + (substring string (match-end 0)) + pred + action)) + ((string-match "\\`\\(before\\):" string) + (completion-table-with-context (substring string 0 (match-end 0)) + (vc-bzr-revision-completion-table files) + (substring string (match-end 0)) + pred + action)) + ((string-match "\\`\\(tag\\):" string) + (let ((prefix (substring string 0 (match-end 0))) + (tag (substring string (match-end 0))) + (table nil) + process-file-side-effects) + (with-temp-buffer + ;; "bzr-1.2 tags" is much faster with --show-ids. + (process-file vc-bzr-program nil '(t) nil "tags" "--show-ids") + ;; The output is ambiguous, unless we assume that revids do not + ;; contain spaces. + (goto-char (point-min)) + (while (re-search-forward "^\\(.*[^ \n]\\) +[^ \n]*$" nil t) + (push (match-string-no-properties 1) table))) + (completion-table-with-context prefix table tag pred action))) - ((string-match "\\`annotate:" string) - (completion-table-with-context - (substring string 0 (match-end 0)) - (apply-partially #'completion-table-with-terminator '(":" . "\\`a\\`") - #'completion-file-name-table) - (substring string (match-end 0)) pred action)) + ((string-match "\\`annotate:" string) + (completion-table-with-context + (substring string 0 (match-end 0)) + (apply-partially #'completion-table-with-terminator '(":" . "\\`a\\`") + #'completion-file-name-table) + (substring string (match-end 0)) pred action)) - ((string-match "\\`date:" string) - (completion-table-with-context - (substring string 0 (match-end 0)) - '("yesterday" "today" "tomorrow") - (substring string (match-end 0)) pred action)) + ((string-match "\\`date:" string) + (completion-table-with-context + (substring string 0 (match-end 0)) + '("yesterday" "today" "tomorrow") + (substring string (match-end 0)) pred action)) - ((string-match "\\`\\([a-z]+\\):" string) - ;; no actual completion for the remaining keywords. - (completion-table-with-context (substring string 0 (match-end 0)) - (if (member (match-string 1 string) - vc-bzr-revision-keywords) - ;; If it's a valid keyword, - ;; use a non-empty table to - ;; indicate it. - '("") nil) - (substring string (match-end 0)) - pred - action)) - (t - ;; Could use completion-table-with-terminator, except that it - ;; currently doesn't work right w.r.t pcm and doesn't give - ;; the *Completions* output we want. - (complete-with-action action (eval-when-compile - (mapcar (lambda (s) (concat s ":")) - vc-bzr-revision-keywords)) - string pred)))))) + ((string-match "\\`\\([a-z]+\\):" string) + ;; no actual completion for the remaining keywords. + (completion-table-with-context (substring string 0 (match-end 0)) + (if (member (match-string 1 string) + vc-bzr-revision-keywords) + ;; If it's a valid keyword, + ;; use a non-empty table to + ;; indicate it. + '("") nil) + (substring string (match-end 0)) + pred + action)) + (t + ;; Could use completion-table-with-terminator, except that it + ;; currently doesn't work right w.r.t pcm and doesn't give + ;; the *Completions* output we want. + (complete-with-action action (eval-when-compile + (mapcar (lambda (s) (concat s ":")) + vc-bzr-revision-keywords)) + string pred))))) (provide 'vc-bzr) diff --git a/lisp/vc/vc-cvs.el b/lisp/vc/vc-cvs.el index 2d8d132a249..4d06e766a35 100644 --- a/lisp/vc/vc-cvs.el +++ b/lisp/vc/vc-cvs.el @@ -1,4 +1,4 @@ -;;; vc-cvs.el --- non-resident support for CVS version-control +;;; vc-cvs.el --- non-resident support for CVS version-control -*- lexical-binding: t -*- ;; Copyright (C) 1995, 1998-2012 Free Software Foundation, Inc. @@ -280,7 +280,7 @@ committed and support display of sticky tags." ;;; State-changing functions ;;; -(defun vc-cvs-register (files &optional rev comment) +(defun vc-cvs-register (files &optional _rev comment) "Register FILES into the CVS version-control system. COMMENT can be used to provide an initial description of FILES. Passes either `vc-cvs-register-switches' or `vc-register-switches' @@ -502,7 +502,7 @@ Will fail unless you have administrative privileges on the repo." (declare-function vc-rcs-print-log-cleanup "vc-rcs" ()) -(defun vc-cvs-print-log (files buffer &optional shortlog start-revision-ignored limit) +(defun vc-cvs-print-log (files buffer &optional _shortlog _start-revision limit) "Get change logs associated with FILES." (require 'vc-rcs) ;; It's just the catenation of the individual logs. @@ -1006,7 +1006,7 @@ state." (vc-exec-after `(vc-cvs-after-dir-status (quote ,update-function)))))) -(defun vc-cvs-dir-status-files (dir files default-state update-function) +(defun vc-cvs-dir-status-files (dir files _default-state update-function) "Create a list of conses (file . state) for DIR." (apply 'vc-cvs-command (current-buffer) 'async dir "-f" "status" files) (vc-exec-after @@ -1021,7 +1021,7 @@ state." (buffer-substring (point) (point-max))) (file-error nil))) -(defun vc-cvs-dir-extra-headers (dir) +(defun vc-cvs-dir-extra-headers (_dir) "Extract and represent per-directory properties of a CVS working copy." (let ((repo (condition-case nil @@ -1206,10 +1206,8 @@ is non-nil." res))) (defun vc-cvs-revision-completion-table (files) - (lexical-let ((files files) - table) - (setq table (lazy-completion-table - table (lambda () (vc-cvs-revision-table (car files))))) + (letrec ((table (lazy-completion-table + table (lambda () (vc-cvs-revision-table (car files)))))) table)) diff --git a/lisp/vc/vc-dir.el b/lisp/vc/vc-dir.el index 4c32eea2f72..acb1a4d8862 100644 --- a/lisp/vc/vc-dir.el +++ b/lisp/vc/vc-dir.el @@ -1,4 +1,4 @@ -;;; vc-dir.el --- Directory status display under VC +;;; vc-dir.el --- Directory status display under VC -*- lexical-binding: t -*- ;; Copyright (C) 2007-2012 Free Software Foundation, Inc. @@ -529,7 +529,7 @@ If a prefix argument is given, move by that many lines." (defun vc-dir-mark-unmark (mark-unmark-function) (if (use-region-p) - (let ((firstl (line-number-at-pos (region-beginning))) + (let (;; (firstl (line-number-at-pos (region-beginning))) (lastl (line-number-at-pos (region-end)))) (save-excursion (goto-char (region-beginning)) @@ -546,7 +546,7 @@ If a prefix argument is given, move by that many lines." ;; Non-nil iff a parent directory of arg is marked. ;; Return value, if non-nil is the `ewoc-data' for the marked parent. (let* ((argdir (vc-dir-node-directory arg)) - (arglen (length argdir)) + ;; (arglen (length argdir)) (crt arg) (found nil)) ;; Go through the predecessors, checking if any directory that is @@ -814,7 +814,7 @@ child files." ;; FIXME: use vc-dir-child-files-and-states here instead of duplicating it. (if (vc-dir-fileinfo->directory crt-data) (let* ((dir (vc-dir-fileinfo->directory crt-data)) - (dirlen (length dir)) + ;; (dirlen (length dir)) data) (while (and (setq crt (ewoc-next vc-ewoc crt)) @@ -842,7 +842,7 @@ If it is a file, return the corresponding cons for the file itself." result) (if (vc-dir-fileinfo->directory crt-data) (let* ((dir (vc-dir-fileinfo->directory crt-data)) - (dirlen (length dir)) + ;; (dirlen (length dir)) data) (while (and (setq crt (ewoc-next vc-ewoc crt)) @@ -861,7 +861,7 @@ If it is a file, return the corresponding cons for the file itself." (defun vc-dir-recompute-file-state (fname def-dir) (let* ((file-short (file-relative-name fname def-dir)) - (remove-me-when-CVS-works + (_remove-me-when-CVS-works (when (eq vc-dir-backend 'CVS) ;; FIXME: Warning: UGLY HACK. The CVS backend caches the state ;; info, this forces the backend to update it. @@ -875,15 +875,14 @@ If it is a file, return the corresponding cons for the file itself." ;; Give a DIRNAME string return the list of all child files shown in ;; the current *vc-dir* buffer. (let ((crt (ewoc-nth vc-ewoc 0)) - children - dname) + children) ;; Find DIR (while (and crt (not (string-prefix-p dirname (vc-dir-node-directory crt)))) (setq crt (ewoc-next vc-ewoc crt))) (while (and crt (string-prefix-p dirname - (setq dname (vc-dir-node-directory crt)))) + (vc-dir-node-directory crt))) (let ((data (ewoc-data crt))) (unless (vc-dir-fileinfo->directory data) (push (expand-file-name (vc-dir-fileinfo->name data)) children))) @@ -1014,7 +1013,7 @@ specific headers." (unless (buffer-live-p vc-dir-process-buffer) (setq vc-dir-process-buffer (generate-new-buffer (format " *VC-%s* tmp status" backend)))) - (lexical-let ((buffer (current-buffer))) + (let ((buffer (current-buffer))) (with-current-buffer vc-dir-process-buffer (setq default-directory def-dir) (erase-buffer) @@ -1045,7 +1044,7 @@ specific headers." (not (vc-dir-fileinfo->needs-update info)))))))))))) -(defun vc-dir-revert-buffer-function (&optional ignore-auto noconfirm) +(defun vc-dir-revert-buffer-function (&optional _ignore-auto _noconfirm) (vc-dir-refresh)) (defun vc-dir-refresh () @@ -1079,7 +1078,7 @@ Throw an error if another update process is in progress." ;; Bzr has serious locking problems, so setup the headers first (this is ;; synchronous) rather than doing it while dir-status is running. (ewoc-set-hf vc-ewoc (vc-dir-headers backend def-dir) "") - (lexical-let ((buffer (current-buffer))) + (let ((buffer (current-buffer))) (with-current-buffer vc-dir-process-buffer (setq default-directory def-dir) (erase-buffer) @@ -1219,7 +1218,7 @@ These are the commands available for use in the file status buffer: (let ((use-vc-backend backend)) (vc-dir-mode)))) -(defun vc-default-dir-extra-headers (backend dir) +(defun vc-default-dir-extra-headers (_backend _dir) ;; Be loud by default to remind people to add code to display ;; backend specific headers. ;; XXX: change this to return nil before the release. @@ -1234,7 +1233,7 @@ These are the commands available for use in the file status buffer: map) "Local keymap for visiting a file.") -(defun vc-default-dir-printer (backend fileentry) +(defun vc-default-dir-printer (_backend fileentry) "Pretty print FILEENTRY." ;; If you change the layout here, change vc-dir-move-to-goal-column. ;; VC backends can implement backend specific versions of this @@ -1267,10 +1266,10 @@ These are the commands available for use in the file status buffer: 'mouse-face 'highlight 'keymap vc-dir-filename-mouse-map)))) -(defun vc-default-extra-status-menu (backend) +(defun vc-default-extra-status-menu (_backend) nil) -(defun vc-default-status-fileinfo-extra (backend file) +(defun vc-default-status-fileinfo-extra (_backend _file) "Default absence of extra information returned for a file." nil) diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el index b71dc95dba2..c185c4e8fab 100644 --- a/lisp/vc/vc-git.el +++ b/lisp/vc/vc-git.el @@ -1,4 +1,4 @@ -;;; vc-git.el --- VC backend for the git version control system +;;; vc-git.el --- VC backend for the git version control system -*- lexical-binding: t -*- ;; Copyright (C) 2006-2012 Free Software Foundation, Inc. @@ -160,7 +160,7 @@ matching the resulting Git log output, and KEYWORDS is a list of ;;; BACKEND PROPERTIES (defun vc-git-revision-granularity () 'repository) -(defun vc-git-checkout-model (files) 'implicit) +(defun vc-git-checkout-model (_files) 'implicit) ;;; STATE-QUERYING FUNCTIONS @@ -233,7 +233,7 @@ matching the resulting Git log output, and KEYWORDS is a list of (vc-git--state-code diff-letter))) (if (vc-git--empty-db-p) 'added 'up-to-date))))) -(defun vc-git-working-revision (file) +(defun vc-git-working-revision (_file) "Git-specific version of `vc-working-revision'." (let* (process-file-side-effects (str (with-output-to-string @@ -471,14 +471,14 @@ or an empty string if none." (vc-exec-after `(vc-git-after-dir-status-stage ',stage ',files ',update-function))) -(defun vc-git-dir-status (dir update-function) +(defun vc-git-dir-status (_dir update-function) "Return a list of (FILE STATE EXTRA) entries for DIR." ;; Further things that would have to be fixed later: ;; - how to handle unregistered directories ;; - how to support vc-dir on a subdir of the project tree (vc-git-dir-status-goto-stage 'update-index nil update-function)) -(defun vc-git-dir-status-files (dir files default-state update-function) +(defun vc-git-dir-status-files (_dir files _default-state update-function) "Return a list of (FILE STATE EXTRA) entries for FILES in DIR." (vc-git-dir-status-goto-stage 'update-index files update-function)) @@ -512,7 +512,7 @@ or an empty string if none." :help "Show the contents of the current stash")) map)) -(defun vc-git-dir-extra-headers (dir) +(defun vc-git-dir-extra-headers (_dir) (let ((str (with-output-to-string (with-current-buffer standard-output (vc-git--out-ok "symbolic-ref" "HEAD")))) @@ -590,7 +590,7 @@ The car of the list is the current branch." "Create a new Git repository." (vc-git-command nil 0 nil "init")) -(defun vc-git-register (files &optional rev comment) +(defun vc-git-register (files &optional _rev _comment) "Register FILES into the git version-control system." (let (flist dlist) (dolist (crt files) @@ -609,7 +609,7 @@ The car of the list is the current branch." (declare-function log-edit-extract-headers "log-edit" (headers string)) -(defun vc-git-checkin (files rev comment) +(defun vc-git-checkin (files _rev comment) (let ((coding-system-for-write vc-git-commits-coding-system)) (apply 'vc-git-command nil 0 files (nconc (list "commit" "-m") @@ -635,7 +635,7 @@ The car of the list is the current branch." nil "cat-file" "blob" (concat (if rev rev "HEAD") ":" fullname)))) -(defun vc-git-checkout (file &optional editable rev) +(defun vc-git-checkout (file &optional _editable rev) (vc-git-command nil 0 file "checkout" (or rev "HEAD"))) (defun vc-git-revert (file &optional contents-done) @@ -821,7 +821,7 @@ or BRANCH^ (where \"^\" can be repeated)." (append (vc-switches 'git 'diff) (list "-p" (or rev1 "HEAD") rev2 "--"))))) -(defun vc-git-revision-table (files) +(defun vc-git-revision-table (_files) ;; What about `files'?!? --Stef (let (process-file-side-effects (table (list "HEAD"))) @@ -834,10 +834,8 @@ or BRANCH^ (where \"^\" can be repeated)." table)) (defun vc-git-revision-completion-table (files) - (lexical-let ((files files) - table) - (setq table (lazy-completion-table - table (lambda () (vc-git-revision-table files)))) + (letrec ((table (lazy-completion-table + table (lambda () (vc-git-revision-table files))))) table)) (defun vc-git-annotate-command (file buf &optional rev) @@ -876,7 +874,7 @@ or BRANCH^ (where \"^\" can be repeated)." (vc-git-command nil 0 nil "checkout" "-b" name) (vc-git-command nil 0 nil "tag" name))))) -(defun vc-git-retrieve-tag (dir name update) +(defun vc-git-retrieve-tag (dir name _update) (let ((default-directory dir)) (vc-git-command nil 0 nil "checkout" name) ;; FIXME: update buffers if `update' is true diff --git a/lisp/vc/vc-hg.el b/lisp/vc/vc-hg.el index a2728268816..e3af8a353ef 100644 --- a/lisp/vc/vc-hg.el +++ b/lisp/vc/vc-hg.el @@ -1,4 +1,4 @@ -;;; vc-hg.el --- VC backend for the mercurial version control system +;;; vc-hg.el --- VC backend for the mercurial version control system -*- lexical-binding: t -*- ;; Copyright (C) 2006-2012 Free Software Foundation, Inc. @@ -168,7 +168,7 @@ highlighting the Log View buffer." (defvar vc-hg-history nil) (defun vc-hg-revision-granularity () 'repository) -(defun vc-hg-checkout-model (files) 'implicit) +(defun vc-hg-checkout-model (_files) 'implicit) ;;; State querying functions @@ -338,10 +338,8 @@ highlighting the Log View buffer." ;; Modeled after the similar function in vc-cvs.el (defun vc-hg-revision-completion-table (files) - (lexical-let ((files files) - table) - (setq table (lazy-completion-table - table (lambda () (vc-hg-revision-table files)))) + (letrec ((table (lazy-completion-table + table (lambda () (vc-hg-revision-table files))))) table)) (defun vc-hg-annotate-command (file buffer &optional revision) @@ -377,12 +375,12 @@ Optional arg REVISION is a revision to annotate from." (expand-file-name (match-string-no-properties 4) (vc-hg-root default-directory))))))) -(defun vc-hg-previous-revision (file rev) +(defun vc-hg-previous-revision (_file rev) (let ((newrev (1- (string-to-number rev)))) (when (>= newrev 0) (number-to-string newrev)))) -(defun vc-hg-next-revision (file rev) +(defun vc-hg-next-revision (_file rev) (let ((newrev (1+ (string-to-number rev))) (tip-revision (with-temp-buffer @@ -408,7 +406,7 @@ Optional arg REVISION is a revision to annotate from." "Rename file from OLD to NEW using `hg mv'." (vc-hg-command nil 0 new "mv" old)) -(defun vc-hg-register (files &optional rev comment) +(defun vc-hg-register (files &optional _rev _comment) "Register FILES under hg. REV is ignored. COMMENT is ignored." @@ -438,7 +436,7 @@ COMMENT is ignored." (declare-function log-edit-extract-headers "log-edit" (headers string)) -(defun vc-hg-checkin (files rev comment) +(defun vc-hg-checkin (files _rev comment) "Hg-specific version of `vc-backend-checkin'. REV is ignored." (apply 'vc-hg-command nil 0 files @@ -455,7 +453,7 @@ REV is ignored." (vc-hg-command buffer 0 file "cat")))) ;; Modeled after the similar function in vc-bzr.el -(defun vc-hg-checkout (file &optional editable rev) +(defun vc-hg-checkout (file &optional _editable rev) "Retrieve a revision of FILE. EDITABLE is ignored. REV is the revision to check out into WORKFILE." @@ -511,8 +509,7 @@ REV is the revision to check out into WORKFILE." 'face 'font-lock-comment-face))))) (defun vc-hg-after-dir-status (update-function) - (let ((status-char nil) - (file nil) + (let ((file nil) (translation '((?= . up-to-date) (?C . up-to-date) (?A . added) @@ -567,7 +564,7 @@ REV is the revision to check out into WORKFILE." (vc-exec-after `(vc-hg-after-dir-status (quote ,update-function)))) -(defun vc-hg-dir-status-files (dir files default-state update-function) +(defun vc-hg-dir-status-files (dir files _default-state update-function) (apply 'vc-hg-command (current-buffer) 'async dir "status" "-C" files) (vc-exec-after `(vc-hg-after-dir-status (quote ,update-function)))) diff --git a/lisp/vc/vc-mtn.el b/lisp/vc/vc-mtn.el index 122743c3747..bd3a6207b73 100644 --- a/lisp/vc/vc-mtn.el +++ b/lisp/vc/vc-mtn.el @@ -1,4 +1,4 @@ -;;; vc-mtn.el --- VC backend for Monotone +;;; vc-mtn.el --- VC backend for Monotone -*- lexical-binding: t -*- ;; Copyright (C) 2007-2012 Free Software Foundation, Inc. @@ -76,7 +76,7 @@ If nil, use the value of `vc-diff-switches'. If t, use no switches." ;;;###autoload (vc-mtn-registered file)))) (defun vc-mtn-revision-granularity () 'repository) -(defun vc-mtn-checkout-model (files) 'implicit) +(defun vc-mtn-checkout-model (_files) 'implicit) (defun vc-mtn-root (file) (setq file (if (file-directory-p file) @@ -173,7 +173,7 @@ If nil, use the value of `vc-diff-switches'. If t, use no switches." (t ?:)) branch))) -(defun vc-mtn-register (files &optional rev comment) +(defun vc-mtn-register (files &optional _rev _comment) (vc-mtn-command nil 0 files "add")) (defun vc-mtn-responsible-p (file) (vc-mtn-root file)) @@ -181,7 +181,7 @@ If nil, use the value of `vc-diff-switches'. If t, use no switches." (declare-function log-edit-extract-headers "log-edit" (headers string)) -(defun vc-mtn-checkin (files rev comment) +(defun vc-mtn-checkin (files _rev comment) (apply 'vc-mtn-command nil 0 files (nconc (list "commit" "-m") (log-edit-extract-headers '(("Author" . "--author") @@ -201,7 +201,7 @@ If nil, use the value of `vc-diff-switches'. If t, use no switches." ;; (defun vc-mtn-rollback (files) ;; ) -(defun vc-mtn-print-log (files buffer &optional shortlog start-revision limit) +(defun vc-mtn-print-log (files buffer &optional _shortlog start-revision limit) (apply 'vc-mtn-command buffer 0 files "log" (append (when start-revision (list "--from" (format "%s" start-revision))) @@ -304,44 +304,43 @@ If nil, use the value of `vc-diff-switches'. If t, use no switches." (push (match-string 0) ids)) ids))) -(defun vc-mtn-revision-completion-table (files) +(defun vc-mtn-revision-completion-table (_files) ;; TODO: Implement completion for selectors ;; TODO: Implement completion for composite selectors. - (lexical-let ((files files)) - ;; What about using `files'?!? --Stef - (lambda (string pred action) - (cond - ;; "Tag" selectors. - ((string-match "\\`t:" string) - (complete-with-action action - (mapcar (lambda (tag) (concat "t:" tag)) - (vc-mtn-list-tags)) - string pred)) - ;; "Branch" selectors. - ((string-match "\\`b:" string) - (complete-with-action action - (mapcar (lambda (tag) (concat "b:" tag)) - (vc-mtn-list-branches)) - string pred)) - ;; "Head" selectors. Not sure how they differ from "branch" selectors. - ((string-match "\\`h:" string) - (complete-with-action action - (mapcar (lambda (tag) (concat "h:" tag)) - (vc-mtn-list-branches)) - string pred)) - ;; "ID" selectors. - ((string-match "\\`i:" string) - (complete-with-action action - (mapcar (lambda (tag) (concat "i:" tag)) - (vc-mtn-list-revision-ids - (substring string (match-end 0)))) - string pred)) - (t - (complete-with-action action - '("t:" "b:" "h:" "i:" - ;; Completion not implemented for these. - "a:" "c:" "d:" "e:" "l:") - string pred)))))) + ;; What about using `files'?!? --Stef + (lambda (string pred action) + (cond + ;; "Tag" selectors. + ((string-match "\\`t:" string) + (complete-with-action action + (mapcar (lambda (tag) (concat "t:" tag)) + (vc-mtn-list-tags)) + string pred)) + ;; "Branch" selectors. + ((string-match "\\`b:" string) + (complete-with-action action + (mapcar (lambda (tag) (concat "b:" tag)) + (vc-mtn-list-branches)) + string pred)) + ;; "Head" selectors. Not sure how they differ from "branch" selectors. + ((string-match "\\`h:" string) + (complete-with-action action + (mapcar (lambda (tag) (concat "h:" tag)) + (vc-mtn-list-branches)) + string pred)) + ;; "ID" selectors. + ((string-match "\\`i:" string) + (complete-with-action action + (mapcar (lambda (tag) (concat "i:" tag)) + (vc-mtn-list-revision-ids + (substring string (match-end 0)))) + string pred)) + (t + (complete-with-action action + '("t:" "b:" "h:" "i:" + ;; Completion not implemented for these. + "a:" "c:" "d:" "e:" "l:") + string pred))))) diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index 433383502da..ad828d6f78f 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -1,4 +1,4 @@ -;;; vc.el --- drive a version-control system from within Emacs +;;; vc.el --- drive a version-control system from within Emacs -*- lexical-binding: t -*- ;; Copyright (C) 1992-1998, 2000-2012 Free Software Foundation, Inc. @@ -1075,7 +1075,7 @@ For old-style locking-based version control systems, like RCS: (let* ((vc-fileset (vc-deduce-fileset nil t 'state-model-only-files)) (backend (car vc-fileset)) (files (nth 1 vc-fileset)) - (fileset-only-files (nth 2 vc-fileset)) + ;; (fileset-only-files (nth 2 vc-fileset)) ;; FIXME: We used to call `vc-recompute-state' here. (state (nth 3 vc-fileset)) ;; The backend should check that the checkout-model is consistent @@ -1410,34 +1410,31 @@ that the version control system supports this mode of operation. Runs the normal hooks `vc-before-checkin-hook' and `vc-checkin-hook'." (when vc-before-checkin-hook (run-hooks 'vc-before-checkin-hook)) - (lexical-let - ((backend backend)) - (vc-start-logentry - files comment initial-contents - "Enter a change comment." - "*vc-log*" - (lambda () - (vc-call-backend backend 'log-edit-mode)) - (lexical-let ((rev rev)) - (lambda (files comment) - (message "Checking in %s..." (vc-delistify files)) - ;; "This log message intentionally left almost blank". - ;; RCS 5.7 gripes about white-space-only comments too. - (or (and comment (string-match "[^\t\n ]" comment)) - (setq comment "*** empty log message ***")) - (with-vc-properties - files - ;; We used to change buffers to get local value of - ;; vc-checkin-switches, but 'the' local buffer is - ;; not a well-defined concept for filesets. - (progn - (vc-call-backend backend 'checkin files rev comment) - (mapc 'vc-delete-automatic-version-backups files)) - `((vc-state . up-to-date) - (vc-checkout-time . ,(nth 5 (file-attributes file))) - (vc-working-revision . nil))) - (message "Checking in %s...done" (vc-delistify files)))) - 'vc-checkin-hook))) + (vc-start-logentry + files comment initial-contents + "Enter a change comment." + "*vc-log*" + (lambda () + (vc-call-backend backend 'log-edit-mode)) + (lambda (files comment) + (message "Checking in %s..." (vc-delistify files)) + ;; "This log message intentionally left almost blank". + ;; RCS 5.7 gripes about white-space-only comments too. + (or (and comment (string-match "[^\t\n ]" comment)) + (setq comment "*** empty log message ***")) + (with-vc-properties + files + ;; We used to change buffers to get local value of + ;; vc-checkin-switches, but 'the' local buffer is + ;; not a well-defined concept for filesets. + (progn + (vc-call-backend backend 'checkin files rev comment) + (mapc 'vc-delete-automatic-version-backups files)) + `((vc-state . up-to-date) + (vc-checkout-time . ,(nth 5 (file-attributes file))) + (vc-working-revision . nil))) + (message "Checking in %s...done" (vc-delistify files))) + 'vc-checkin-hook)) ;;; Additional entry points for examining version histories @@ -1671,7 +1668,7 @@ Return t if the buffer had changes, nil otherwise." (list files rev1 rev2)))) ;;;###autoload -(defun vc-version-diff (files rev1 rev2) +(defun vc-version-diff (_files rev1 rev2) "Report diffs between revisions of the fileset in the repository history." (interactive (vc-diff-build-argument-list-internal)) ;; All that was just so we could do argument completion! @@ -1883,11 +1880,9 @@ The headers are reset to their non-expanded form." "Enter a replacement change comment." "*vc-log*" (lambda () (vc-call-backend backend 'log-edit-mode)) - (lexical-let ((rev rev) - (backend backend)) - (lambda (files comment) - (vc-call-backend backend - 'modify-change-comment files rev comment)))))) + (lambda (files comment) + (vc-call-backend backend + 'modify-change-comment files rev comment))))) ;;;###autoload (defun vc-merge () @@ -1952,7 +1947,7 @@ changes from the current branch." (error "Sorry, merging is not implemented for %s" backend))))) -(defun vc-maybe-resolve-conflicts (file status &optional name-A name-B) +(defun vc-maybe-resolve-conflicts (file status &optional _name-A _name-B) (vc-resynch-buffer file t (not (buffer-modified-p))) (if (zerop status) (message "Merge successful") (smerge-mode 1) @@ -2077,22 +2072,20 @@ Not all VC backends support short logs!") (when (and limit (not (eq 'limit-unsupported pl-return)) (not is-start-revision)) (goto-char (point-max)) - (lexical-let ((working-revision working-revision) - (limit limit)) - (insert "\n") - (insert-text-button "Show 2X entries" - 'action (lambda (&rest ignore) - (vc-print-log-internal - log-view-vc-backend log-view-vc-fileset - working-revision nil (* 2 limit))) - 'help-echo "Show the log again, and double the number of log entries shown") - (insert " ") - (insert-text-button "Show unlimited entries" - 'action (lambda (&rest ignore) - (vc-print-log-internal - log-view-vc-backend log-view-vc-fileset - working-revision nil nil)) - 'help-echo "Show the log again, including all entries")))) + (insert "\n") + (insert-text-button "Show 2X entries" + 'action (lambda (&rest _ignore) + (vc-print-log-internal + log-view-vc-backend log-view-vc-fileset + working-revision nil (* 2 limit))) + 'help-echo "Show the log again, and double the number of log entries shown") + (insert " ") + (insert-text-button "Show unlimited entries" + 'action (lambda (&rest _ignore) + (vc-print-log-internal + log-view-vc-backend log-view-vc-fileset + working-revision nil nil)) + 'help-echo "Show the log again, including all entries"))) (defun vc-print-log-internal (backend files working-revision &optional is-start-revision limit) @@ -2102,8 +2095,7 @@ Not all VC backends support short logs!") (let ((dir-present nil) (vc-short-log nil) (buffer-name "*vc-change-log*") - type - pl-return) + type) (dolist (file files) (when (file-directory-p file) (setq dir-present t))) @@ -2112,25 +2104,20 @@ Not all VC backends support short logs!") (memq 'directory vc-log-short-style) (memq 'file vc-log-short-style))))) (setq type (if vc-short-log 'short 'long)) - (lexical-let - ((working-revision working-revision) - (backend backend) - (limit limit) - (shortlog vc-short-log) - (files files) - (is-start-revision is-start-revision)) + (let ((shortlog vc-short-log)) (vc-log-internal-common backend buffer-name files type - (lambda (bk buf type-arg files-arg) - (vc-call-backend bk 'print-log files-arg buf - shortlog (when is-start-revision working-revision) limit)) - (lambda (bk files-arg ret) + (lambda (bk buf _type-arg files-arg) + (vc-call-backend bk 'print-log files-arg buf shortlog + (when is-start-revision working-revision) limit)) + (lambda (_bk _files-arg ret) (vc-print-log-setup-buttons working-revision is-start-revision limit ret)) (lambda (bk) (vc-call-backend bk 'show-log-entry working-revision)) - (lambda (ignore-auto noconfirm) - (vc-print-log-internal backend files working-revision is-start-revision limit)))))) + (lambda (_ignore-auto _noconfirm) + (vc-print-log-internal backend files working-revision + is-start-revision limit)))))) (defvar vc-log-view-type nil "Set this to differentiate the different types of logs.") @@ -2168,20 +2155,12 @@ Not all VC backends support short logs!") (defun vc-incoming-outgoing-internal (backend remote-location buffer-name type) (vc-log-internal-common backend buffer-name nil type - (lexical-let - ((remote-location remote-location)) - (lambda (bk buf type-arg files) - (vc-call-backend bk type-arg buf remote-location))) - (lambda (bk files-arg ret)) - (lambda (bk) - (goto-char (point-min))) - (lexical-let - ((backend backend) - (remote-location remote-location) - (buffer-name buffer-name) - (type type)) - (lambda (ignore-auto noconfirm) - (vc-incoming-outgoing-internal backend remote-location buffer-name type))))) + (lambda (bk buf type-arg _files) + (vc-call-backend bk type-arg buf remote-location)) + (lambda (_bk _files-arg _ret) nil) + (lambda (_bk) (goto-char (point-min))) + (lambda (_ignore-auto _noconfirm) + (vc-incoming-outgoing-internal backend remote-location buffer-name type)))) ;;;###autoload (defun vc-print-log (&optional working-revision limit) @@ -2246,11 +2225,11 @@ When called interactively with a prefix argument, prompt for REMOTE-LOCATION.." (interactive (when current-prefix-arg (list (read-string "Remote location (empty for default): ")))) - (let ((backend (vc-deduce-backend)) - rootdir working-revision) + (let ((backend (vc-deduce-backend))) (unless backend (error "Buffer is not version controlled")) - (vc-incoming-outgoing-internal backend remote-location "*vc-incoming*" 'log-incoming))) + (vc-incoming-outgoing-internal backend remote-location "*vc-incoming*" + 'log-incoming))) ;;;###autoload (defun vc-log-outgoing (&optional remote-location) @@ -2259,11 +2238,11 @@ When called interactively with a prefix argument, prompt for REMOTE-LOCATION." (interactive (when current-prefix-arg (list (read-string "Remote location (empty for default): ")))) - (let ((backend (vc-deduce-backend)) - rootdir working-revision) + (let ((backend (vc-deduce-backend))) (unless backend (error "Buffer is not version controlled")) - (vc-incoming-outgoing-internal backend remote-location "*vc-outgoing*" 'log-outgoing))) + (vc-incoming-outgoing-internal backend remote-location "*vc-outgoing*" + 'log-outgoing))) ;;;###autoload (defun vc-revert () @@ -2688,23 +2667,23 @@ log entries should be gathered." (when index (substring rev 0 index)))) -(defun vc-default-responsible-p (backend file) +(defun vc-default-responsible-p (_backend _file) "Indicate whether BACKEND is responsible for FILE. The default is to return nil always." nil) -(defun vc-default-could-register (backend file) +(defun vc-default-could-register (_backend _file) "Return non-nil if BACKEND could be used to register FILE. The default implementation returns t for all files." t) -(defun vc-default-latest-on-branch-p (backend file) +(defun vc-default-latest-on-branch-p (_backend _file) "Return non-nil if FILE is the latest on its branch. This default implementation always returns non-nil, which means that editing non-current revisions is not supported by default." t) -(defun vc-default-init-revision (backend) vc-default-init-revision) +(defun vc-default-init-revision (_backend) vc-default-init-revision) (defun vc-default-find-revision (backend file rev buffer) "Provide the new `find-revision' op based on the old `checkout' op. @@ -2718,7 +2697,7 @@ to provide the `find-revision' operation instead." (insert-file-contents-literally tmpfile))) (delete-file tmpfile)))) -(defun vc-default-rename-file (backend old new) +(defun vc-default-rename-file (_backend old new) (condition-case nil (add-name-to-file old new) (error (rename-file old new))) @@ -2730,11 +2709,11 @@ to provide the `find-revision' operation instead." (declare-function log-edit-mode "log-edit" ()) -(defun vc-default-log-edit-mode (backend) (log-edit-mode)) +(defun vc-default-log-edit-mode (_backend) (log-edit-mode)) -(defun vc-default-log-view-mode (backend) (log-view-mode)) +(defun vc-default-log-view-mode (_backend) (log-view-mode)) -(defun vc-default-show-log-entry (backend rev) +(defun vc-default-show-log-entry (_backend rev) (with-no-warnings (log-view-goto-rev rev))) @@ -2800,7 +2779,7 @@ to provide the `find-revision' operation instead." (defalias 'vc-default-revision-completion-table 'ignore) (defalias 'vc-default-mark-resolved 'ignore) -(defun vc-default-dir-status-files (backend dir files default-state update-function) +(defun vc-default-dir-status-files (_backend _dir files default-state update-function) (funcall update-function (mapcar (lambda (file) (list file default-state)) files))) From 8b71081d301534a7fa4816530f4c3af61c67d038 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Thu, 26 Apr 2012 11:43:32 +0800 Subject: [PATCH 198/564] Allow undoing in read-only diff-mode buffers. * lisp/vc/diff-mode.el (diff-undo): New command. (diff-mode-shared-map): Bind it to / and [remap undo]. Fixes: debbugs:5302 --- lisp/ChangeLog | 3 +++ lisp/vc/diff-mode.el | 28 +++++++++++----------------- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index bb40b542792..e7b0a0e1bf6 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -14,6 +14,9 @@ 2012-04-26 Chong Yidong + * vc/diff-mode.el (diff-undo): New command (Bug#5302). + (diff-mode-shared-map): Bind it to / and [remap undo]. + * vc/ediff-wind.el (ediff-setup-windows-default): New function. (ediff-window-setup-function): Use it as the default, to set up windows based on whether the current frame is graphical (Bug#2138). diff --git a/lisp/vc/diff-mode.el b/lisp/vc/diff-mode.el index c92371fc90b..067fc1c1f2b 100644 --- a/lisp/vc/diff-mode.el +++ b/lisp/vc/diff-mode.el @@ -107,8 +107,7 @@ when editing big diffs)." ;;;; (easy-mmode-defmap diff-mode-shared-map - '(;; From Pavel Machek's patch-mode. - ("n" . diff-hunk-next) + '(("n" . diff-hunk-next) ("N" . diff-file-next) ("p" . diff-hunk-prev) ("P" . diff-file-prev) @@ -116,27 +115,17 @@ when editing big diffs)." ([backtab] . diff-hunk-prev) ("k" . diff-hunk-kill) ("K" . diff-file-kill) - ;; From compilation-minor-mode. - ("}" . diff-file-next) + ("}" . diff-file-next) ; From compilation-minor-mode. ("{" . diff-file-prev) ("\C-m" . diff-goto-source) ([mouse-2] . diff-goto-source) - ;; From XEmacs's diff-mode. ("W" . widen) - ;;("." . diff-goto-source) ;display-buffer - ;;("f" . diff-goto-source) ;find-file - ("o" . diff-goto-source) ;other-window - ;;("w" . diff-goto-source) ;other-frame - ;;("N" . diff-narrow) - ;;("h" . diff-show-header) - ;;("j" . diff-show-difference) ;jump to Nth diff - ;;("q" . diff-quit) - ;; Not useful if you have to metafy them. - ;;(" " . scroll-up) - ;;("\177" . scroll-down) + ("o" . diff-goto-source) ; other-window ("A" . diff-ediff-patch) ("r" . diff-restrict-view) - ("R" . diff-reverse-direction)) + ("R" . diff-reverse-direction) + ("/" . diff-undo) + ([remap undo] . diff-undo)) "Basic keymap for `diff-mode', bound to various prefix keys." :inherit special-mode-map) @@ -1904,6 +1893,11 @@ For use in `add-log-current-defun-function'." (match-end 0) end props 'diff-refine-preproc)))))))) +(defun diff-undo (&optional arg) + "Perform `undo', ignoring the buffer's read-only status." + (interactive "P") + (let ((inhibit-read-only t)) + (undo arg))) (defun diff-add-change-log-entries-other-window () "Iterate through the current diff and create ChangeLog entries. From cb3e7ae07a6ad7c46f5d67984d54f10f19103bef Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Thu, 26 Apr 2012 16:00:47 +0800 Subject: [PATCH 199/564] Fixes for diff-hunk-kill. * lisp/vc/diff-mode.el (diff-beginning-of-hunk): Return a meaningful value, for symmetry with diff-end-of-hunk. (diff-split-hunk, diff-find-source-location) (diff-ignore-whitespace-hunk, diff-refine-hunk): Use it. (diff-bounds-of-hunk, diff-bounds-of-file): New functions. (diff-restrict-view, diff-hunk-kill, diff-file-kill): Use them to compute the relevant hunk or file properly. (diff-file-junk-re): Add bzr's "modified file" tag. Fixes: debbugs:6041 debbugs:6005 --- lisp/ChangeLog | 11 ++++ lisp/vc/diff-mode.el | 118 ++++++++++++++++++++++++++----------------- 2 files changed, 82 insertions(+), 47 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e7b0a0e1bf6..a709c017416 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,14 @@ +2012-04-26 Chong Yidong + + * vc/diff-mode.el (diff-beginning-of-hunk): Return a meaningful + value, for symmetry with diff-end-of-hunk. + (diff-split-hunk, diff-find-source-location) + (diff-ignore-whitespace-hunk, diff-refine-hunk): Use it. + (diff-bounds-of-hunk, diff-bounds-of-file): New functions. + (diff-restrict-view, diff-hunk-kill, diff-file-kill): Use them to + compute the relevant hunk or file properly (Bug#6005). + (diff-file-junk-re): Add bzr's "modified file" tag (Bug#6041). + 2012-04-26 Stefan Monnier * vc/vc-mtn.el: diff --git a/lisp/vc/diff-mode.el b/lisp/vc/diff-mode.el index 067fc1c1f2b..f3f7d8ce61b 100644 --- a/lisp/vc/diff-mode.el +++ b/lisp/vc/diff-mode.el @@ -434,6 +434,7 @@ See http://lists.gnu.org/archive/html/emacs-devel/2007-11/msg01990.html") style) (defun diff-end-of-hunk (&optional style donttrustheader) + "Advance to the end of the current hunk, and return its position." (let (end) (when (looking-at diff-hunk-header-re) ;; Especially important for unified (because headers are ambiguous). @@ -481,19 +482,21 @@ See http://lists.gnu.org/archive/html/emacs-devel/2007-11/msg01990.html") (goto-char (or end (point-max))))) (defun diff-beginning-of-hunk (&optional try-harder) - "Move back to beginning of hunk. -If TRY-HARDER is non-nil, try to cater to the case where we're not in a hunk -but in the file header instead, in which case move forward to the first hunk." + "Move back to the previous hunk beginning, and return its position. +If point is in a file header rather than a hunk, advance to the +next hunk if TRY-HARDER is non-nil; otherwise signal an error." (beginning-of-line) - (unless (looking-at diff-hunk-header-re) + (if (looking-at diff-hunk-header-re) + (point) (forward-line 1) (condition-case () (re-search-backward diff-hunk-header-re) (error - (if (not try-harder) - (error "Can't find the beginning of the hunk") - (diff-beginning-of-file-and-junk) - (diff-hunk-next)))))) + (unless try-harder + (error "Can't find the beginning of the hunk")) + (diff-beginning-of-file-and-junk) + (diff-hunk-next) + (point))))) (defun diff-unified-hunk-p () (save-excursion @@ -536,44 +539,72 @@ but in the file header instead, in which case move forward to the first hunk." (easy-mmode-define-navigation diff-file diff-file-header-re "file" diff-end-of-file) +(defun diff-bounds-of-hunk () + "Return the bounds of the diff hunk at point. +The return value is a list (BEG END), which are the hunk's start +and end positions. Signal an error if no hunk is found. If +point is in a file header, return the bounds of the next hunk." + (save-excursion + (let ((pos (point)) + (beg (diff-beginning-of-hunk t)) + (end (diff-end-of-hunk))) + (cond ((>= end pos) + (list beg end)) + ;; If this hunk ends above POS, consider the next hunk. + ((re-search-forward diff-hunk-header-re nil t) + (list (match-beginning 0) (diff-end-of-hunk))) + (t (error "No hunk found")))))) + +(defun diff-bounds-of-file () + "Return the bounds of the file segment at point. +The return value is a list (BEG END), which are the segment's +start and end positions." + (save-excursion + (let ((pos (point)) + (beg (progn (diff-beginning-of-file-and-junk) + (point)))) + (diff-end-of-file) + ;; bzr puts a newline after the last hunk. + (while (looking-at "^\n") + (forward-char 1)) + (if (> pos (point)) + (error "Not inside a file diff")) + (list beg (point))))) + (defun diff-restrict-view (&optional arg) "Restrict the view to the current hunk. If the prefix ARG is given, restrict the view to the current file instead." (interactive "P") - (save-excursion - (if arg (diff-beginning-of-file) (diff-beginning-of-hunk 'try-harder)) - (narrow-to-region (point) - (progn (if arg (diff-end-of-file) (diff-end-of-hunk)) - (point))) - (set (make-local-variable 'diff-narrowed-to) (if arg 'file 'hunk)))) - + (apply 'narrow-to-region + (if arg (diff-bounds-of-file) (diff-bounds-of-hunk))) + (set (make-local-variable 'diff-narrowed-to) (if arg 'file 'hunk))) (defun diff-hunk-kill () - "Kill current hunk." + "Kill the hunk at point." (interactive) - (diff-beginning-of-hunk) - (let* ((start (point)) - ;; Search the second match, since we're looking at the first. - (nexthunk (when (re-search-forward diff-hunk-header-re nil t 2) - (match-beginning 0))) - (firsthunk (ignore-errors - (goto-char start) - (diff-beginning-of-file) (diff-hunk-next) (point))) - (nextfile (ignore-errors (diff-file-next) (point))) + (let* ((hunk-bounds (diff-bounds-of-hunk)) + (file-bounds (ignore-errors (diff-bounds-of-file))) + ;; If the current hunk is the only one for its file, kill the + ;; file header too. + (bounds (if (and file-bounds + (progn (goto-char (car file-bounds)) + (= (progn (diff-hunk-next) (point)) + (car hunk-bounds))) + (progn (goto-char (cadr hunk-bounds)) + ;; bzr puts a newline after the last hunk. + (while (looking-at "^\n") + (forward-char 1)) + (= (point) (cadr file-bounds)))) + file-bounds + hunk-bounds)) (inhibit-read-only t)) - (goto-char start) - (if (and firsthunk (= firsthunk start) - (or (null nexthunk) - (and nextfile (> nexthunk nextfile)))) - ;; It's the only hunk for this file, so kill the file. - (diff-file-kill) - (diff-end-of-hunk) - (kill-region start (point))))) + (apply 'kill-region bounds) + (goto-char (car bounds)))) ;; "index ", "old mode", "new mode", "new file mode" and ;; "deleted file mode" are output by git-diff. (defconst diff-file-junk-re - "diff \\|index \\|\\(?:deleted file\\|new\\(?: file\\)?\\|old\\) mode") + "diff \\|index \\|\\(?:deleted file\\|new\\(?: file\\)?\\|old\\) mode\\|=== modified file") (defun diff-beginning-of-file-and-junk () "Go to the beginning of file-related diff-info. @@ -625,13 +656,8 @@ data such as \"Index: ...\" and such." (defun diff-file-kill () "Kill current file's hunks." (interactive) - (let ((orig (point)) - (start (progn (diff-beginning-of-file-and-junk) (point))) - (inhibit-read-only t)) - (diff-end-of-file) - (if (looking-at "^\n") (forward-char 1)) ;`tla' generates such diffs. - (if (> orig (point)) (error "Not inside a file diff")) - (kill-region start (point)))) + (let ((inhibit-read-only t)) + (apply 'kill-region (diff-bounds-of-file)))) (defun diff-kill-junk () "Kill spurious empty diffs." @@ -667,7 +693,7 @@ data such as \"Index: ...\" and such." (interactive) (beginning-of-line) (let ((pos (point)) - (start (progn (diff-beginning-of-hunk) (point)))) + (start (diff-beginning-of-hunk))) (unless (looking-at diff-hunk-header-re-unified) (error "diff-split-hunk only works on unified context diffs")) (forward-line 1) @@ -1589,8 +1615,7 @@ SWITCHED is non-nil if the patch is already applied. NOPROMPT, if non-nil, means not to prompt the user." (save-excursion (let* ((other (diff-xor other-file diff-jump-to-old-file)) - (char-offset (- (point) (progn (diff-beginning-of-hunk 'try-harder) - (point)))) + (char-offset (- (point) (diff-beginning-of-hunk t))) ;; Check that the hunk is well-formed. Otherwise diff-mode and ;; the user may disagree on what constitutes the hunk ;; (e.g. because an empty line truncates the hunk mid-course), @@ -1777,8 +1802,7 @@ For use in `add-log-current-defun-function'." (defun diff-ignore-whitespace-hunk () "Re-diff the current hunk, ignoring whitespace differences." (interactive) - (let* ((char-offset (- (point) (progn (diff-beginning-of-hunk 'try-harder) - (point)))) + (let* ((char-offset (- (point) (diff-beginning-of-hunk t))) (opts (case (char-after) (?@ "-bu") (?* "-bc") (t "-b"))) (line-nb (and (or (looking-at "[^0-9]+\\([0-9]+\\)") (error "Can't find line number")) @@ -1854,7 +1878,7 @@ For use in `add-log-current-defun-function'." (interactive) (require 'smerge-mode) (save-excursion - (diff-beginning-of-hunk 'try-harder) + (diff-beginning-of-hunk t) (let* ((start (point)) (style (diff-hunk-style)) ;Skips the hunk header as well. (beg (point)) From dce04f7f90fa8f613dd855cb300c837696483f1b Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Thu, 26 Apr 2012 16:43:20 +0800 Subject: [PATCH 200/564] * image.el (image-type-from-buffer): Only return supported image type. Fixes: debbugs:9045 --- lisp/ChangeLog | 3 +++ lisp/image.el | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index a709c017416..ad6fd35bc5d 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2012-04-26 Chong Yidong + * image.el (image-type-from-buffer): Only return supported image + type (Bug#9045). + * vc/diff-mode.el (diff-beginning-of-hunk): Return a meaningful value, for symmetry with diff-end-of-hunk. (diff-split-hunk, diff-find-source-location) diff --git a/lisp/image.el b/lisp/image.el index 348c208781e..27e41a57efe 100644 --- a/lisp/image.el +++ b/lisp/image.el @@ -282,7 +282,9 @@ be determined." types nil) (setq types (cdr types))))) (goto-char opoint) - type)) + (and type + (memq type image-types) + type))) ;;;###autoload From c4347ab9e544ae8c8a704fe29504ac7af4b21e66 Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Thu, 26 Apr 2012 11:27:37 +0200 Subject: [PATCH 201/564] Fixes: debbugs:11344 * vc/vc-git.el (vc-git-state): Fix regexp matching diff output. --- lisp/ChangeLog | 5 +++++ lisp/vc/vc-git.el | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 834f54bc96e..6d3fcf971b1 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-04-26 Andreas Schwab + + * vc/vc-git.el (vc-git-state): Fix regexp matching diff output. + (Bug#11344) + 2012-04-24 Chong Yidong * select.el (xselect--encode-string): New function, split from diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el index b71dc95dba2..9aa2ee72b55 100644 --- a/lisp/vc/vc-git.el +++ b/lisp/vc/vc-git.el @@ -220,7 +220,7 @@ matching the resulting Git log output, and KEYWORDS is a list of (let ((diff (vc-git--run-command-string file "diff-index" "-p" "--raw" "-z" "HEAD" "--"))) (if (and diff - (string-match ":[0-7]\\{6\\} [0-7]\\{6\\} [0-9a-f]\\{40\\} [0-9a-f]\\{40\\} \\([ADMUT]\\)\0[^\0]+\0\\(.\\)?" + (string-match ":[0-7]\\{6\\} [0-7]\\{6\\} [0-9a-f]\\{40\\} [0-9a-f]\\{40\\} \\([ADMUT]\\)\0[^\0]+\0\\(.*\n.\\)?" diff)) (let ((diff-letter (match-string 1 diff))) (if (not (match-beginning 2)) From 1c6900d923647582ea9c2ab90f0ccf1fe41603e0 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Thu, 26 Apr 2012 13:07:35 +0300 Subject: [PATCH 202/564] Don't disable Unicode menus on Windows NT and later due to random errors. src/w32menu.c: Include w32heap.h. (add_menu_item): If the call to AppendMenuW (via unicode_append_menu) fails, disable Unicode menus only if we are running on Windows 9X/Me. --- src/ChangeLog | 7 +++++++ src/w32menu.c | 9 +++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 06d65c7bf33..8b23806e57f 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2012-04-26 Eli Zaretskii + + * w32menu.c: Include w32heap.h. + (add_menu_item): If the call to AppendMenuW (via + unicode_append_menu) fails, disable Unicode menus only if we are + running on Windows 9X/Me. + 2012-04-24 Andreas Schwab * .gdbinit (xpr): Handle USE_2_TAGS_FOR_INTS. diff --git a/src/w32menu.c b/src/w32menu.c index 9091cb81627..5b95a083d90 100644 --- a/src/w32menu.c +++ b/src/w32menu.c @@ -48,6 +48,8 @@ along with GNU Emacs. If not, see . */ #include "dispextern.h" +#include "w32heap.h" /* for osinfo_cache */ + #undef HAVE_DIALOGS /* TODO: Implement native dialogs. */ #ifndef TRUE @@ -1498,8 +1500,11 @@ add_menu_item (HMENU menu, widget_value *wv, HMENU item) AppendMenu (menu, fuFlags, item != NULL ? (UINT) item: (UINT) wv->call_data, out_string); - /* Don't use Unicode menus in future. */ - unicode_append_menu = NULL; + /* Don't use Unicode menus in future, unless this is Windows + NT or later, where a failure of AppendMenuW does NOT mean + Unicode menus are unsupported. */ + if (osinfo_cache.dwPlatformId != VER_PLATFORM_WIN32_NT) + unicode_append_menu = NULL; } if (unicode_append_menu && (fuFlags & MF_OWNERDRAW)) From 4c3fa1d9adf3dca80e86b45488b0556f5f0fa495 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Thu, 26 Apr 2012 13:49:29 +0300 Subject: [PATCH 203/564] Allow word wrap together with whitespace-mode (bug #11341) src/xdisp.c (IT_DISPLAYING_WHITESPACE): In addition to the loaded display element, check also the underlying string or buffer character. --- src/ChangeLog | 4 ++++ src/xdisp.c | 18 ++++++++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 8b23806e57f..df0e6135498 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,9 @@ 2012-04-26 Eli Zaretskii + * xdisp.c (IT_DISPLAYING_WHITESPACE): In addition to the loaded + display element, check also the underlying string or buffer + character. (Bug#11341) + * w32menu.c: Include w32heap.h. (add_menu_item): If the call to AppendMenuW (via unicode_append_menu) fails, disable Unicode menus only if we are diff --git a/src/xdisp.c b/src/xdisp.c index 3cbd4b172f4..f2700bd6d25 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -383,11 +383,21 @@ static Lisp_Object Qline_height; #define IT_OVERFLOW_NEWLINE_INTO_FRINGE(it) 0 #endif /* HAVE_WINDOW_SYSTEM */ -/* Test if the display element loaded in IT is a space or tab - character. This is used to determine word wrapping. */ +/* Test if the display element loaded in IT, or the underlying buffer + or string character, is a space or a TAB character. This is used + to determine where word wrapping can occur. */ -#define IT_DISPLAYING_WHITESPACE(it) \ - (it->what == IT_CHARACTER && (it->c == ' ' || it->c == '\t')) +#define IT_DISPLAYING_WHITESPACE(it) \ + ((it->what == IT_CHARACTER && (it->c == ' ' || it->c == '\t')) \ + || ((STRINGP (it->string) \ + && (SREF (it->string, IT_STRING_BYTEPOS (*it)) == ' ' \ + || SREF (it->string, IT_STRING_BYTEPOS (*it)) == '\t')) \ + || (it->s \ + && (it->s[IT_BYTEPOS (*it)] == ' ' \ + || it->s[IT_BYTEPOS (*it)] == '\t')) \ + || (IT_BYTEPOS (*it) < ZV_BYTE \ + && (*BYTE_POS_ADDR (IT_BYTEPOS (*it)) == ' ' \ + || *BYTE_POS_ADDR (IT_BYTEPOS (*it)) == '\t')))) \ /* Name of the face used to highlight trailing whitespace. */ From e95a67dc75c3d41c428d6e215426f321b5a2f9e5 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 26 Apr 2012 08:43:28 -0400 Subject: [PATCH 204/564] Replace lexical-let by lexical-binding (except Gnus, CEDET, ERT). * lisp/term/ns-win.el (ns-define-service): * lisp/progmodes/pascal.el (pascal-goto-defun): * lisp/progmodes/js.el (js--read-tab): * lisp/progmodes/etags.el (tags-lazy-completion-table): * lisp/emacs-lisp/syntax.el (syntax-propertize-via-font-lock): * lisp/emacs-lisp/ewoc.el (ewoc--wrap): * lisp/emacs-lisp/assoc.el (aput, adelete, amake): * lisp/doc-view.el (doc-view-convert-current-doc): * lisp/url/url.el (url-retrieve-synchronously): * lisp/vc/diff.el (diff-no-select): Replace lexical-let by lexical-binding. --- lisp/ChangeLog | 13 ++++++++++ lisp/dired.el | 50 +++++++++++++++++++-------------------- lisp/doc-view.el | 13 +++++----- lisp/emacs-lisp/assoc.el | 18 +++++++------- lisp/emacs-lisp/ewoc.el | 9 ++++--- lisp/emacs-lisp/syntax.el | 15 ++++++------ lisp/mpc.el | 2 +- lisp/progmodes/etags.el | 4 ++-- lisp/progmodes/js.el | 14 ++++------- lisp/progmodes/pascal.el | 8 +++---- lisp/term/ns-win.el | 37 ++++++++++++++--------------- lisp/url/ChangeLog | 13 ++++++---- lisp/url/url.el | 6 ++--- lisp/vc/diff.el | 20 +++++++--------- 14 files changed, 113 insertions(+), 109 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ad6fd35bc5d..a02521ca147 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,16 @@ +2012-04-26 Stefan Monnier + + + * term/ns-win.el (ns-define-service): + * progmodes/pascal.el (pascal-goto-defun): + * progmodes/js.el (js--read-tab): + * progmodes/etags.el (tags-lazy-completion-table): + * emacs-lisp/syntax.el (syntax-propertize-via-font-lock): + * emacs-lisp/ewoc.el (ewoc--wrap): + * emacs-lisp/assoc.el (aput, adelete, amake): + * doc-view.el (doc-view-convert-current-doc): + * vc/diff.el (diff-no-select): Replace lexical-let by lexical-binding. + 2012-04-26 Chong Yidong * image.el (image-type-from-buffer): Only return supported image diff --git a/lisp/dired.el b/lisp/dired.el index 77fe9cb7614..f6f7d71c636 100644 --- a/lisp/dired.el +++ b/lisp/dired.el @@ -670,31 +670,31 @@ Don't use that together with FILTER." ;; (dolist (ext completion-ignored-extensions) ;; (if (eq ?/ (aref ext (1- (length ext)))) (push ext cie))) ;; (setq cie (concat (regexp-opt cie "\\(?:") "\\'")) -;; (lexical-let* ((default (and buffer-file-name -;; (abbreviate-file-name buffer-file-name))) -;; (cie cie) -;; (completion-table -;; ;; We need a mix of read-file-name and -;; ;; read-directory-name so that completion to directories -;; ;; is preferred, but if the user wants to enter a global -;; ;; pattern, he can still use completion on filenames to -;; ;; help him write the pattern. -;; ;; Essentially, we want to use -;; ;; (completion-table-with-predicate -;; ;; 'read-file-name-internal 'file-directory-p nil) -;; ;; but that doesn't work because read-file-name-internal -;; ;; does not obey its `predicate' argument. -;; (completion-table-in-turn -;; (lambda (str pred action) -;; (let ((read-file-name-predicate -;; (lambda (f) -;; (and (not (member f '("./" "../"))) -;; ;; Hack! Faster than file-directory-p! -;; (eq (aref f (1- (length f))) ?/) -;; (not (string-match cie f)))))) -;; (complete-with-action -;; action 'read-file-name-internal str nil))) -;; 'read-file-name-internal))) +;; (let* ((default (and buffer-file-name +;; (abbreviate-file-name buffer-file-name))) +;; (cie cie) +;; (completion-table +;; ;; We need a mix of read-file-name and +;; ;; read-directory-name so that completion to directories +;; ;; is preferred, but if the user wants to enter a global +;; ;; pattern, he can still use completion on filenames to +;; ;; help him write the pattern. +;; ;; Essentially, we want to use +;; ;; (completion-table-with-predicate +;; ;; 'read-file-name-internal 'file-directory-p nil) +;; ;; but that doesn't work because read-file-name-internal +;; ;; does not obey its `predicate' argument. +;; (completion-table-in-turn +;; (lambda (str pred action) +;; (let ((read-file-name-predicate +;; (lambda (f) +;; (and (not (member f '("./" "../"))) +;; ;; Hack! Faster than file-directory-p! +;; (eq (aref f (1- (length f))) ?/) +;; (not (string-match cie f)))))) +;; (complete-with-action +;; action 'read-file-name-internal str nil))) +;; 'read-file-name-internal))) ;; (minibuffer-with-setup-hook ;; (lambda () ;; (setq minibuffer-default default) diff --git a/lisp/doc-view.el b/lisp/doc-view.el index 53e7811bad1..78b6610ff3c 100644 --- a/lisp/doc-view.el +++ b/lisp/doc-view.el @@ -960,13 +960,12 @@ Those files are saved in the directory given by the function (odf ;; ODF files have to be converted to PDF before Ghostscript can ;; process it. - (lexical-let - ((pdf (expand-file-name "doc.pdf" doc-view-current-cache-dir)) - (opdf (expand-file-name (concat (file-name-sans-extension - (file-name-nondirectory doc-view-buffer-file-name)) - ".pdf") - doc-view-current-cache-dir)) - (png-file png-file)) + (let ((pdf (expand-file-name "doc.pdf" doc-view-current-cache-dir)) + (opdf (expand-file-name (concat (file-name-sans-extension + (file-name-nondirectory doc-view-buffer-file-name)) + ".pdf") + doc-view-current-cache-dir)) + (png-file png-file)) ;; The unoconv tool only supports a output directory, but no ;; file name. It's named like the input file with the ;; extension replaced by pdf. diff --git a/lisp/emacs-lisp/assoc.el b/lisp/emacs-lisp/assoc.el index 264374ed721..d3185c444d7 100644 --- a/lisp/emacs-lisp/assoc.el +++ b/lisp/emacs-lisp/assoc.el @@ -1,4 +1,4 @@ -;;; assoc.el --- insert/delete functions on association lists +;;; assoc.el --- insert/delete functions on association lists -*- lexical-binding: t -*- ;; Copyright (C) 1996, 2001-2012 Free Software Foundation, Inc. @@ -36,7 +36,7 @@ the order of any other key-value pair. Side effect sets alist to new sorted list." (set alist-symbol (sort (copy-alist (symbol-value alist-symbol)) - (function (lambda (a b) (equal (car a) key)))))) + (lambda (a _b) (equal (car a) key))))) (defun aelement (key value) @@ -71,8 +71,8 @@ If VALUE is not supplied, or is nil, the key-value pair will not be modified, but will be moved to the head of the alist. If the key-value pair cannot be found in the alist, it will be inserted into the head of the alist (with value nil if VALUE is nil or not supplied)." - (lexical-let ((elem (aelement key value)) - alist) + (let ((elem (aelement key value)) + alist) (asort alist-symbol key) (setq alist (symbol-value alist-symbol)) (cond ((null alist) (set alist-symbol elem)) @@ -86,7 +86,7 @@ of the alist (with value nil if VALUE is nil or not supplied)." Alist is referenced by ALIST-SYMBOL and the key-value pair to remove is pair matching KEY. Returns the altered alist." (asort alist-symbol key) - (lexical-let ((alist (symbol-value alist-symbol))) + (let ((alist (symbol-value alist-symbol))) (cond ((null alist) nil) ((anot-head-p alist key) alist) (t (set alist-symbol (cdr alist)))))) @@ -123,10 +123,10 @@ KEYLIST and VALUELIST should have the same number of elements, but this isn't enforced. If VALUELIST is smaller than KEYLIST, remaining keys are associated with nil. If VALUELIST is larger than KEYLIST, extra values are ignored. Returns the created alist." - (lexical-let ((keycar (car keylist)) - (keycdr (cdr keylist)) - (valcar (car valuelist)) - (valcdr (cdr valuelist))) + (let ((keycar (car keylist)) + (keycdr (cdr keylist)) + (valcar (car valuelist)) + (valcdr (cdr valuelist))) (cond ((null keycdr) (aput alist-symbol keycar valcar)) (t diff --git a/lisp/emacs-lisp/ewoc.el b/lisp/emacs-lisp/ewoc.el index 4fd87209b38..9e214a9703c 100644 --- a/lisp/emacs-lisp/ewoc.el +++ b/lisp/emacs-lisp/ewoc.el @@ -1,4 +1,4 @@ -;;; ewoc.el --- utility to maintain a view of a list of objects in a buffer +;;; ewoc.el --- utility to maintain a view of a list of objects in a buffer -*- lexical-binding: t -*- ;; Copyright (C) 1991-2012 Free Software Foundation, Inc. @@ -216,10 +216,9 @@ NODE and leaving the new node's start there. Return the new node." (ewoc--adjust m (point) R dll))) (defun ewoc--wrap (func) - (lexical-let ((ewoc--user-pp func)) - (lambda (data) - (funcall ewoc--user-pp data) - (insert "\n")))) + (lambda (data) + (funcall func data) + (insert "\n"))) ;;; =========================================================================== diff --git a/lisp/emacs-lisp/syntax.el b/lisp/emacs-lisp/syntax.el index 611a766922a..583d0b151c9 100644 --- a/lisp/emacs-lisp/syntax.el +++ b/lisp/emacs-lisp/syntax.el @@ -1,4 +1,4 @@ -;;; syntax.el --- helper functions to find syntactic context +;;; syntax.el --- helper functions to find syntactic context -*- lexical-binding: t -*- ;; Copyright (C) 2000-2012 Free Software Foundation, Inc. @@ -274,13 +274,12 @@ Note: back-references in REGEXPs do not work." "Propertize for syntax in START..END using font-lock syntax. KEYWORDS obeys the format used in `font-lock-syntactic-keywords'. The return value is a function suitable for `syntax-propertize-function'." - (lexical-let ((keywords keywords)) - (lambda (start end) - (with-no-warnings - (let ((font-lock-syntactic-keywords keywords)) - (font-lock-fontify-syntactic-keywords-region start end) - ;; In case it was eval'd/compiled. - (setq keywords font-lock-syntactic-keywords)))))) + (lambda (start end) + (with-no-warnings + (let ((font-lock-syntactic-keywords keywords)) + (font-lock-fontify-syntactic-keywords-region start end) + ;; In case it was eval'd/compiled. + (setq keywords font-lock-syntactic-keywords))))) (defun syntax-propertize (pos) "Ensure that syntax-table properties are set until POS." diff --git a/lisp/mpc.el b/lisp/mpc.el index ea7f6793309..a908e4bedac 100644 --- a/lisp/mpc.el +++ b/lisp/mpc.el @@ -406,7 +406,7 @@ which will be concatenated with proper quoting before passing them to MPD." (funcall callback (prog1 (mpc-proc-buf-to-alist (current-buffer)) (set-buffer buf)))))) - ;; (lexical-let ((res nil)) + ;; (let ((res nil)) ;; (mpc-proc-cmd-to-alist cmd (lambda (alist) (setq res alist))) ;; (mpc-proc-sync) ;; res) diff --git a/lisp/progmodes/etags.el b/lisp/progmodes/etags.el index d8a561340d3..638410ae627 100644 --- a/lisp/progmodes/etags.el +++ b/lisp/progmodes/etags.el @@ -1,4 +1,4 @@ -;;; etags.el --- etags facility for Emacs +;;; etags.el --- etags facility for Emacs -*- lexical-binding: t -*- ;; Copyright (C) 1985-1986, 1988-1989, 1992-1996, 1998, 2000-2012 ;; Free Software Foundation, Inc. @@ -781,7 +781,7 @@ tags table and its (recursively) included tags tables." (setq tags-completion-table nil))))) (defun tags-lazy-completion-table () - (lexical-let ((buf (current-buffer))) + (let ((buf (current-buffer))) (lambda (string pred action) (with-current-buffer buf (save-excursion diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el index 69da6737520..1c8a1f45e57 100644 --- a/lisp/progmodes/js.el +++ b/lisp/progmodes/js.el @@ -1,4 +1,4 @@ -;;; js.el --- Major mode for editing JavaScript +;;; js.el --- Major mode for editing JavaScript -*- lexical-binding: t -*- ;; Copyright (C) 2008-2012 Free Software Foundation, Inc. @@ -1036,17 +1036,12 @@ LIMIT defaults to point." (c-save-buffer-state (open-items - orig-match-start - orig-match-end - orig-depth parse prev-parse-point name case-fold-search filtered-class-styles - new-item - goal-point - end-prop) + goal-point) ;; Figure out which class styles we need to look for (setq filtered-class-styles @@ -2956,8 +2951,8 @@ browser, respectively." (ido-mode -1)) (with-js - (lexical-let ((tabs (js--get-tabs)) selected-tab-cname - selected-tab prev-hitab) + (let ((tabs (js--get-tabs)) selected-tab-cname + selected-tab prev-hitab) ;; Disambiguate names (setq tabs (loop with tab-names = (make-hash-table :test 'equal) @@ -3053,7 +3048,6 @@ browser, respectively." "gBrowser" "selectedTab") - with index = 0 for match in ido-matches for candidate-tab = (find-tab-by-cname match) if (eq (fourth candidate-tab) tab-to-match) diff --git a/lisp/progmodes/pascal.el b/lisp/progmodes/pascal.el index 8f7f313753c..5a6f4e20fbc 100644 --- a/lisp/progmodes/pascal.el +++ b/lisp/progmodes/pascal.el @@ -1353,21 +1353,21 @@ The default is a name found in the buffer around point." (default (if (pascal-comp-defun default nil 'lambda) default "")) (label - ;; Do completion with default + ;; Do completion with default. (completing-read (if (not (string= default "")) (concat "Label (default " default "): ") "Label: ") ;; Complete with the defuns found in the ;; current-buffer. - (lexical-let ((buf (current-buffer))) + (let ((buf (current-buffer))) (lambda (s p a) (with-current-buffer buf (pascal-comp-defun s p a)))) nil t ""))) - ;; If there was no response on prompt, use default value + ;; If there was no response on prompt, use default value. (if (string= label "") (setq label default)) - ;; Goto right place in buffer if label is not an empty string + ;; Goto right place in buffer if label is not an empty string. (or (string= label "") (progn (goto-char (point-min)) diff --git a/lisp/term/ns-win.el b/lisp/term/ns-win.el index b681ec3440f..feac0f1c537 100644 --- a/lisp/term/ns-win.el +++ b/lisp/term/ns-win.el @@ -1,4 +1,4 @@ -;;; ns-win.el --- lisp side of interface with NeXT/Open/GNUstep/MacOS X window system +;;; ns-win.el --- lisp side of interface with NeXT/Open/GNUstep/MacOS X window system -*- lexical-binding: t -*- ;; Copyright (C) 1993-1994, 2005-2012 Free Software Foundation, Inc. @@ -44,7 +44,7 @@ (error "%s: Loading ns-win.el but not compiled for GNUstep/MacOS" (invocation-name))) -(eval-when-compile (require 'cl)) ; lexical-let +(eval-when-compile (require 'cl)) ;; Documentation-purposes only: actually loaded in loadup.el. (require 'frame) @@ -65,7 +65,7 @@ ;; nsterm.m. (defvar ns-input-file) -(defun ns-handle-nxopen (switch &optional temp) +(defun ns-handle-nxopen (_switch &optional temp) (setq unread-command-events (append unread-command-events (if temp '(ns-open-temp-file) '(ns-open-file))) @@ -74,7 +74,7 @@ (defun ns-handle-nxopentemp (switch) (ns-handle-nxopen switch t)) -(defun ns-ignore-1-arg (switch) +(defun ns-ignore-1-arg (_switch) (setq x-invocation-args (cdr x-invocation-args))) (defun ns-parse-geometry (geom) @@ -201,21 +201,20 @@ The properties returned may include `top', `left', `height', and `width'." (mapconcat 'identity (cons "ns-service" path) "-"))))) ;; This defines the function. (defalias name - (lexical-let ((service service)) - (lambda (arg) - (interactive "p") - (let* ((in-string - (cond ((stringp arg) arg) - (mark-active - (buffer-substring (region-beginning) (region-end))))) - (out-string (ns-perform-service service in-string))) - (cond - ((stringp arg) out-string) - ((and out-string (or (not in-string) - (not (string= in-string out-string)))) - (if mark-active (delete-region (region-beginning) (region-end))) - (insert out-string) - (setq deactivate-mark nil))))))) + (lambda (arg) + (interactive "p") + (let* ((in-string + (cond ((stringp arg) arg) + (mark-active + (buffer-substring (region-beginning) (region-end))))) + (out-string (ns-perform-service service in-string))) + (cond + ((stringp arg) out-string) + ((and out-string (or (not in-string) + (not (string= in-string out-string)))) + (if mark-active (delete-region (region-beginning) (region-end))) + (insert out-string) + (setq deactivate-mark nil)))))) (cond ((lookup-key global-map mapping) (while (cdr path) diff --git a/lisp/url/ChangeLog b/lisp/url/ChangeLog index 3c9313e3e7d..7ce3489cfcc 100644 --- a/lisp/url/ChangeLog +++ b/lisp/url/ChangeLog @@ -1,3 +1,8 @@ +2012-04-26 Stefan Monnier + + * url.el (url-retrieve-synchronously): Replace lexical-let by + lexical-binding. + 2012-04-10 William Xu (tiny change) * url.el (url-retrieve-internal): Hexify multibye URL string first @@ -28,8 +33,8 @@ 2012-03-11 Chong Yidong - * url-http.el (url-http-end-of-document-sentinel): Handle - keepalive expiry by calling url-http again (Bug#10223). + * url-http.el (url-http-end-of-document-sentinel): + Handle keepalive expiry by calling url-http again (Bug#10223). (url-http): New arg, for the above. 2012-03-11 Devon Sean McCullough @@ -180,8 +185,8 @@ 2011-07-03 Lars Magne Ingebrigtsen - * url-http.el (url-http-wait-for-headers-change-function): Remove - pointless "HTTP/0.9 How I hate thee!" message (bug#6735). + * url-http.el (url-http-wait-for-headers-change-function): + Remove pointless "HTTP/0.9 How I hate thee!" message (bug#6735). 2011-06-04 Andreas Schwab diff --git a/lisp/url/url.el b/lisp/url/url.el index f3ef553bbce..7884882c6e7 100644 --- a/lisp/url/url.el +++ b/lisp/url/url.el @@ -1,4 +1,4 @@ -;;; url.el --- Uniform Resource Locator retrieval tool +;;; url.el --- Uniform Resource Locator retrieval tool -*- lexical-binding: t -*- ;; Copyright (C) 1996-1999, 2001, 2004-2012 Free Software Foundation, Inc. @@ -225,8 +225,8 @@ associated with it (the case for dired, info, or mailto URLs that need no further processing). URL is either a string or a parsed URL." (url-do-setup) - (lexical-let ((retrieval-done nil) - (asynch-buffer nil)) + (let ((retrieval-done nil) + (asynch-buffer nil)) (setq asynch-buffer (url-retrieve url (lambda (&rest ignored) (url-debug 'retrieval "Synchronous fetching done (%S)" (current-buffer)) diff --git a/lisp/vc/diff.el b/lisp/vc/diff.el index dd4b4757e88..2eefdee1836 100644 --- a/lisp/vc/diff.el +++ b/lisp/vc/diff.el @@ -1,4 +1,4 @@ -;;; diff.el --- run `diff' +;;; diff.el --- run `diff' -*- lexical-binding: t -*- ;; Copyright (C) 1992, 1994, 1996, 2001-2012 Free Software Foundation, Inc. @@ -147,11 +147,8 @@ specified in `diff-switches' are passed to the diff command." (buffer-enable-undo (current-buffer)) (diff-mode) (set (make-local-variable 'revert-buffer-function) - (lexical-let ((old old) (new new) - (switches switches) - (no-async no-async)) - (lambda (ignore-auto noconfirm) - (diff-no-select old new switches no-async (current-buffer))))) + (lambda (_ignore-auto _noconfirm) + (diff-no-select old new switches no-async (current-buffer)))) (setq default-directory thisdir) (let ((inhibit-read-only t)) (insert command "\n")) @@ -159,12 +156,11 @@ specified in `diff-switches' are passed to the diff command." (let ((proc (start-process "Diff" buf shell-file-name shell-command-switch command))) (set-process-filter proc 'diff-process-filter) - (lexical-let ((old-alt old-alt) (new-alt new-alt)) - (set-process-sentinel - proc (lambda (proc msg) - (with-current-buffer (process-buffer proc) - (diff-sentinel (process-exit-status proc) - old-alt new-alt)))))) + (set-process-sentinel + proc (lambda (proc _msg) + (with-current-buffer (process-buffer proc) + (diff-sentinel (process-exit-status proc) + old-alt new-alt))))) ;; Async processes aren't available. (let ((inhibit-read-only t)) (diff-sentinel From 3959f369381027edb1e708101fd8a2b9c90e8795 Mon Sep 17 00:00:00 2001 From: Bastien Guerry Date: Thu, 26 Apr 2012 18:57:34 +0200 Subject: [PATCH 205/564] lisp/org/ChangeLog: remove references to files that are not in the directory. --- lisp/org/ChangeLog | 101 --------------------------------------------- 1 file changed, 101 deletions(-) diff --git a/lisp/org/ChangeLog b/lisp/org/ChangeLog index 044bd383df9..9c85a75d16a 100644 --- a/lisp/org/ChangeLog +++ b/lisp/org/ChangeLog @@ -439,11 +439,6 @@ * org-attach.el (org-attach-store-link-p): Remove spurious quote in customization form choice. -2012-04-01 Tassilo Horn - - * org-contacts.el (org-contacts-check-mail-address): Add missing - word to `y-or-n-p' question. - 2012-04-01 Eric Schulte * ob-sh.el (org-babel-execute:sh): Pass all params to subroutine. @@ -1801,11 +1796,6 @@ define the way a timestamp in #+DATE will be exported. (org-infile-export-plist): Use the new option. -2012-01-03 Bastien Guerry - - * org-drill.el (org-drill-leech-method, org-drill-scope) - (org-drill-spaced-repetition-algorithm): Fix wrong :type spec. - 2012-01-03 Bastien Guerry * org.el (org-property-re): Also match cumulating properties @@ -5925,10 +5915,6 @@ * ob-exp.el (org-babel-exp-in-export-file): Bind `org-link-search-inhibit-query' to t to inhibit prompts. -2011-07-28 Julien Danjou - - * org-contacts.el: Merge org-contacts-wl.el. - 2011-07-28 Carsten Dominik * org-exp.el (org-export-add-options-to-plist): Use the right @@ -5963,10 +5949,6 @@ * org-agenda.el (org-agenda-open-link): Pass entire text of agenda line to `org-offer-links-in-entry'. -2011-07-28 Michael Markert - - * org-contacts-wl.el: New file. - 2011-07-28 Matt Lundin * org-bibtex.el (org-bibtex-search): New function. @@ -6732,9 +6714,6 @@ (org-agenda-open-link): Stop using prefix-length. (org-agenda-change-all-lines): Stop using prefix-length. - * org-colview-xemacs.el (org-columns-display-here): Stop using - prefix-length. Always return claned items. - * org-colview.el (org-columns-display-here): Stop using prefix-length. Always return claned items. @@ -13091,16 +13070,6 @@ * org-capture.el (org-capture-templates): Fix customize type. -2010-11-11 Carsten Dominik - - * org-colview-xemacs.el (org-columns-compile-map): - (org-columns-number-to-string): - (org-columns-string-to-number): Handle estimate ranges. - (org-estimate-mean-and-var): New function. - (org-estimate-combine): New function. - (org-estimate-print): New function. - (org-string-to-estimate): New function. - 2010-09-25 Juanma Barranquero * org.el (org-refile-targets): @@ -14128,9 +14097,6 @@ * org-src.el (org-edit-src-find-region-and-lang): Test for table.el as late as possible. - * org-colview-xemacs.el: Make sure this file is never loaded into - Emacs. Remove all tests for XEmacs. - * org-colview.el: Make sure this file is never loaded into XEmacs. * org-agenda.el (org-highlight, org-unhighlight): Use direct @@ -15493,9 +15459,6 @@ * org-exp.el (org-export): Use "1" as a sign to export only the subtree. - * org-colview-xemacs.el (org-columns-edit-value): - Use org-unrestricted property. - * org-colview.el (org-columns-edit-value): Use org-unrestricted property. @@ -15894,13 +15857,6 @@ (org-agenda-colview-summarize): Handle extended summary types properly. - * org-colview-xemacs.el (org-columns-display-here): Don't try to - calculate values if the underlying property is not set. - (org-columns-string-to-number): Convert age strings back into - fractional days. - (org-agenda-colview-summarize): Handle extended summary types - properly. - 2009-11-13 Carsten Dominik * org-exp.el (org-export-format-drawer-function): New variable. @@ -16079,10 +16035,6 @@ org-return-follows-link' is set and there is nothing else to do in this line. -2009-11-13 James TD Smith - - * org-colview-xemacs.el: Add in changes from org-colview.el. - 2009-11-13 Dan Davison * org-exp-blocks.el: Modify split separator regexp to avoid empty @@ -17208,9 +17160,6 @@ * org-colview.el (org-columns, org-columns-redo) (org-agenda-columns): Don't use `goto-line'. - * org-colview-xemacs.el (org-columns, org-agenda-columns): - Don't use `goto-line'. - * org-agenda.el (org-agenda-mode): Force visual line motion off. (org-agenda-add-entry-text-maxlines): Improve docstring. (org-agenda-start-with-entry-text-mode): New option. @@ -17315,10 +17264,6 @@ * org-colview.el (org-columns-edit-value, org-columns-new) (org-insert-columns-dblock): Use org-icompleting-read. - * org-colview-xemacs.el (org-columns-edit-value) - (org-columns-new, org-insert-columns-dblock): - Use org-icompleting-read. - * org-attach.el (org-attach-delete-one, org-attach-open): Use org-icompleting-read. @@ -18013,10 +17958,6 @@ in column values. (org-columns-capture-view): Exclude comment and archived trees. - * org-colview-xemacs.el (org-columns-capture-view): - Protect vertical bars in column values. - (org-columns-capture-view): Exclude comment and archived trees. - * org.el (org-quote-vert): New function. * org-latex.el (org-export-latex-verbatim-wrap): New option. @@ -18205,9 +18146,6 @@ * org-colview.el (org-dblock-write:columnview): Allow indented #+TBLFM line. - * org-colview-xemacs.el (org-dblock-write:columnview): - Allow indented #+TBLFM line. - * org-clock.el (org-dblock-write:clocktable): Allow indented #+TBLFM line. @@ -18284,9 +18222,6 @@ * org.el (org-enable-priority-commands): New option. - * org-colview-xemacs.el (org-columns-compute) - (org-columns-number-to-string): Fix problems with empty fields. - * org-colview.el (org-columns-compute) (org-columns-number-to-string): Fix problems with empty fields. @@ -18489,9 +18424,6 @@ (org-export-region-as-latex): Use the property list. (org-export-as-latex): ???? - * org-colview-xemacs.el (org-columns-remove-overlays) - (org-columns): Fix call to `local-variable-p'. - 2009-08-06 Carsten Dominik * org-latex.el (org-export-latex-after-blockquotes-hook): New hook. @@ -18927,12 +18859,6 @@ (org-columns-remove-overlays): Restore the value of `truncate-lines'. (org-columns): Remember the value of `truncate-lines'. - * org-colview-xemacs.el (org-colview-initial-truncate-line-value): - New variable. - (org-columns-remove-overlays): Restore the value of - `truncate-lines'. - (org-columns): Remember the value of `truncate-lines'. - * org.el (org-columns-skip-arrchived-trees): New option. * org-agenda.el (org-agenda-export-html-style): Define color for @@ -19674,10 +19600,6 @@ Better error catching when a date/time property does not have allowed values defined. - * org-colview-xemacs.el (org-colview-construct-allowed-dates): - Better error catching when a date/time property does not have - allowed values defined. - 2009-01-25 Carsten Dominik * org.el (org-map-entries): Restore point and restriction after @@ -20425,10 +20347,6 @@ * org-colview.el (org-columns-edit-value, org-columns-new) (org-insert-columns-dblock): Use `org-ido-completing-read'. - * org-colview-xemacs.el (org-columns-edit-value) - (org-columns-new, org-insert-columns-dblock): - Use `org-ido-completing-read'. - * org-attach.el (org-attach-delete-one, org-attach-open): Use `org-ido-completing-read'. @@ -21007,9 +20925,6 @@ * org-colview.el (org-columns-get-format-and-top-level): Remove resetting the marker. - * org-colview-xemacs.el (org-columns-get-format-and-top-level): - Remove resetting the marker. - * org.el (org-entry-property-inherited-from): Improve docstring. (org-entry-get-with-inheritance): Reset marker before starting the search. @@ -21184,11 +21099,6 @@ (org-columns-next-allowed-value): Use `org-colview-construct-allowed-dates'. - * org-colview-xemacs.el (org-colview-construct-allowed-dates): - New function. - (org-columns-next-allowed-value): - Use `org-colview-construct-allowed-dates'. - * org.el (org-protect-slash): New function. (org-get-refile-targets): Use `org-protect-slash'. @@ -21318,9 +21228,6 @@ * org-colview.el (org-columns-display-here): Use `org-columns-modify-value-for-display-function'. - * org-colview-xemacs.el (org-columns-display-here): - Use `org-columns-modify-value-for-display-function'. - * org.el (org-columns-modify-value-for-display-function): New option. * org-publish.el (org-publish-file): Make sure the directory match @@ -21511,8 +21418,6 @@ * org-colview.el (org-columns-next-allowed-value): Bug fix. - * org-colview-xemacs.el (org-columns-next-allowed-value): Bug fix. - * org-agenda.el (org-agenda-get-closed): Get the end time into the agenda prefix as well. @@ -21633,9 +21538,6 @@ * org-colview.el (org-columns-next-allowed-value): Handle next argument NTH to directly select a value. - * org-colview-xemacs.el (org-columns-next-allowed-value): Handle next - argument NTH to directly select a value. - 2008-06-17 Carsten Dominik * org-agenda.el (org-agenda-scheduled-leaders): Fix docstring. @@ -21779,9 +21681,6 @@ * org-clock.el (org-clock-display, org-clock-out) (org-update-mode-line): Use `org-time-clocksum-format'. - * org-colview-xemacs.el (org-columns-number-to-string): - Use `org-time-clocksum-format'. - * org-colview.el (org-columns-number-to-string): Use `org-time-clocksum-format'. From 2a12997ca97ac8cf0e44657e01c53ab51de497d0 Mon Sep 17 00:00:00 2001 From: Bastien Guerry Date: Thu, 26 Apr 2012 19:02:36 +0200 Subject: [PATCH 206/564] etc/ORG-NEWS: New file documenting changes between Org 6.34 and current one. --- etc/ORG-NEWS | 965 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 965 insertions(+) create mode 100644 etc/ORG-NEWS diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS new file mode 100644 index 00000000000..e0d9ccca72c --- /dev/null +++ b/etc/ORG-NEWS @@ -0,0 +1,965 @@ +ORG NEWS -- history of user-visible changes. -*- org -*- + +Copyright (C) 2012 Free Software Foundation, Inc. +See the end of the file for license conditions. + +Please send Org bug reports to emacs-orgmode@gnu.org. + +* Incompatible changes + +** Emacs 21 support has been dropped + :PROPERTIES: + :OrgVersion: 7.01 + :END: + + Do not use Org mode 7.xx with Emacs 21, use [[http://orgmode.org/org-6.36c.zip][version 6.36c]] instead. + +** XEmacs support requires the XEmacs development version + :PROPERTIES: + :OrgVersion: 7.01 + :END: + + To use Org mode 7.xx with XEmacs, you need to run the developer + version of XEmacs. We were about to drop XEmacs support entirely, + but Michael Sperber stepped in and made changes to XEmacs that made + it easier to keep the support. Thanks to Michael for this + last-minute save. + +** New keys for TODO sparse trees + :PROPERTIES: + :OrgVersion: 7.01 + :END: + + The key =C-c C-v= is now reserved for Org Babel action. TODO sparse + trees can still be made with =C-c / t= (all not-done states) and =C-c / + T= (specific states). + +** The Agenda =org-agenda-ndays= is now obsolete + :PROPERTIES: + :OrgVersion: 7.4 + :END: + + The variable =org-agenda-ndays= is obsolete - please use + =org-agenda-span= instead. + + Thanks to Julien Danjou for this. + +** Changes to the intended use of =org-export-latex-classes= + :PROPERTIES: + :OrgVersion: 6.35 + :END: + + So far this variable has been used to specify the complete header of the + LaTeX document, including all the =\usepackage= calls necessary for the + document. This setup makes it difficult to maintain the list of + packages that Org itself would like to call, for example for the special + symbol support it needs. + + First of all, you can *opt out of this change* in the following way: You + can say: /I want to have full control over headers, and I will take + responsibility to include the packages Org needs/. If that is what you + want, add this to your configuration and skip the rest of this section + (except maybe for the description of the =[EXTRA]= place holder): + + #+begin_src emacs-lisp + (setq org-export-latex-default-packages-alist nil + org-export-latex-packages-alist nil) + #+end_src + + /Continue to read here if you want to go along with the modified setup./ + + There are now two variables that should be used to list the LaTeX + packages that need to be included in all classes. The header definition + in =org-export-latex-classes= should then not contain the corresponding + =\usepackage= calls (see below). + + The two new variables are: + + 1. =org-export-latex-default-packages-alist= :: This is the variable + where Org-mode itself puts the packages it needs. Normally you + should not change this variable. The only reason to change it + anyway is when one of these packages causes a conflict with another + package you want to use. Then you can remove that packages and + hope that you are not using Org-mode functionality that needs it. + + 2. =org-export-latex-packages-alist= :: This is the variable where you + can put the packages that you'd like to use across all classes. + + The sequence how these customizations will show up in the LaTeX + document are: + + 1. Header from =org-export-latex-classes= + 2. =org-export-latex-default-packages-alist= + 3. =org-export-latex-packages-alist= + 4. Buffer-specific things set with =#+LaTeX_HEADER:= + + If you want more control about which segment is placed where, or if you + want, for a specific class, have full control over the header and + exclude some of the automatic building blocks, you can put the following + macro-like place holders into the header: + + #+begin_example + [DEFAULT-PACKAGES] \usepackage statements for default packages + [NO-DEFAULT-PACKAGES] do not include any of the default packages + [PACKAGES] \usepackage statements for packages + [NO-PACKAGES] do not include the packages + [EXTRA] the stuff from #+LaTeX_HEADER + [NO-EXTRA] do not include #+LaTeX_HEADER stuff + #+end_example + + If you have currently customized =org-export-latex-classes=, you should + revise that customization and remove any package calls that are covered + by =org-export-latex-default-packages-alist=. This applies to the + following packages: + + - inputenc + - fontenc + - fixltx2e + - graphicx + - longtable + - float + - wrapfig + - soul + - t1enc + - textcomp + - marvosym + - wasysym + - latexsym + - amssymb + - hyperref + + If one of these packages creates a conflict with another package you are + using, you can remove it from =org-export-latex-default-packages-alist=. + But then you risk that some of the advertised export features of Org + will not work properly. + + You can also consider moving packages that you use in all classes to + =org-export-latex-packages-alist=. If necessary, put the place holders + so that the packages get loaded in the right sequence. As said above, + for backward compatibility, if you omit the place holders, all the + variables will dump their content at the end of the header. + +** The constant =org-html-entities= is obsolete + :PROPERTIES: + :OrgVersion: 6.35 + :END: + + Its content is now part of the new constant =org-entities=, which is + defined in the file org-entities.el. =org-html-entities= was an internal + variable, but it is possible that some users did write code using it. + +** `org-bbdb-anniversary-format-alist' has changed + :PROPERTIES: + :OrgVersion: 7.5 + :END: + + Please check the docstring and update your settings accordingly. + +** Deleted =org-mode-p= + :PROPERTIES: + :OrgVersion: 7.8 + :END: + + This function has been deleted: please update your code. + +* Important new features + +** New Org to ODT exporter + :PROPERTIES: + :OrgVersion: 7.8 + :END: + + Jambunathan's Org to ODT exporter is now part of Org. + + To use it, it `C-c C-e o' in an Org file. See the documentation for more + information on how to customize it. + +** org-capture.el is now the default capture system + :PROPERTIES: + :OrgVersion: 7.01 + :END: + + This replaces the earlier system org-remember. The manual only describes + org-capture, but for people who prefer to continue to use org-remember, + we keep a static copy of the former manual section [[http://orgmode.org/org-remember.pdf][chapter about + remember]]. + + The new system has a technically cleaner implementation and more + possibilities for capturing different types of data. See [[http://thread.gmane.org/gmane.emacs.orgmode/26441/focus%3D26441][Carsten's + announcement]] for more details. + + To switch over to the new system: + + 1. Run + + : M-x org-capture-import-remember-templates RET + + to get a translated version of your remember templates into the + new variable =org-capture-templates=. This will "mostly" work, + but maybe not for all cases. At least it will give you a good + place to modify your templates. After running this command, + enter the customize buffer for this variable with + + : M-x customize-variable RET org-capture-templates RET + + and convince yourself that everything is OK. Then save the + customization. + + 2. Bind the command =org-capture= to a key, similar to what you did + with org-remember: + + : (define-key global-map "\C-cc" 'org-capture) + + If your fingers prefer =C-c r=, you can also use this key once + you have decided to move over completely to the new + implementation. During a test time, there is nothing wrong + with using both system in parallel. + +* New libraries + +** New Org libraries +*** org-eshell.el (Konrad Hinsen) + :PROPERTIES: + :OrgVersion: 7.8 + :END: + + Implement links to eshell buffers. + +*** org-special-blocks (Carsten Dominik) + :PROPERTIES: + :OrgVersion: 7.8 + :END: + +This package generalizes the #+begin_foo and #+end_foo tokens. + +To use, put the following in your init file: + +#+BEGIN_EXAMPLE +(require 'org-special-blocks) +#+END_EXAMPLE + +The tokens #+begin_center, #+begin_verse, etc. existed previously. This +package generalizes them (at least for the LaTeX and html exporters). When +a #+begin_foo token is encountered by the LaTeX exporter, it is expanded +into \begin{foo}. The text inside the environment is not protected, as +text inside environments generally is. When #+begin_foo is encountered by +the html exporter, a div with class foo is inserted into the HTML file. It +is up to the user to add this class to his or her stylesheet if this div is +to mean anything. + +*** org-taskjuggler.el (Christian Egli) + :PROPERTIES: + :OrgVersion: 7.01 + :END: + + Christian Egli's /org-taskjuggler.el/ module is now part of Org. He + also wrote a [[http://orgmode.org/worg/org-tutorials/org-taskjuggler.php][tutorial]] for it. + +*** org-ctags.el (Paul Sexton) + :PROPERTIES: + :OrgVersion: 6.34 + :END: + + Targets like =<>= can now be found by Emacs' etag + functionality, and Org-mode links can be used to to link to etags, also + in non-Org-mode files. For details, see the file /org-ctags.el/. + + This feature uses a new hook =org-open-link-functions= which will call + function to do something special with text links. + + Thanks to Paul Sexton for this contribution. + +*** org-docview.el (Jan Böcker) + :PROPERTIES: + :OrgVersion: 6.34 + :END: + + This new module allows links to various file types using docview, where + Emacs displays images of document pages. Docview link types can point + to a specific page in a document, for example to page 131 of the + Org-mode manual: + + : [[docview:~/.elisp/org/doc/org.pdf::131][Org-Mode Manual]] + + Thanks to Jan Böcker for this contribution. + +** New Babel libraries + +- ob-picolisp.el (Thorsten Jolitz) +- ob-fortran.el (Sergey Litvinov) +- ob-shen.el (Eric Schulte) +- ob-maxima.el (Eric S Fraga) +- ob-java.el (Eric Schulte) +- ob-lilypond.el (Martyn Jago) +- ob-awk.el (Eric Schulte) + +* Other new features and various enhancements + +** Hyperlinks + +*** Org-Bibtex -- major improvements + :PROPERTIES: + :OrgVersion: 7.6 + :END: + + Provides support for managing bibtex bibliographical references + data in headline properties. Each headline corresponds to a + single reference and the relevant bibliographic meta-data is + stored in headline properties, leaving the body of the headline + free to hold notes and comments. Org-bibtex is aware of all + standard bibtex reference types and fields. + + The key new functions are + +- org-bibtex-check :: queries the user to flesh out all required + (and with prefix argument optional) bibtex fields available + for the specific reference =type= of the current headline. + +- org-bibtex-create :: Create a new entry at the given level, + using org-bibtex-check to flesh out the relevant fields. + +- org-bibtex-yank :: Yank a bibtex entry on the kill ring as a + formatted Org-mode headline into the current buffer + +- org-bibtex-export-to-kill-ring :: Export the current headline + to the kill ring as a formatted bibtex entry. + + + +*** org-gnus.el now allows link creation from messages + :PROPERTIES: + :OrgVersion: 7.5 + :END: + + You can now create links from messages. This is particularily + useful when the user wants to stored messages that he sends, for + later check. Thanks to Ulf Stegemann for the patch. + + + +*** Modified link escaping + :PROPERTIES: + :OrgVersion: 7.5 + :END: + + David Maus worked on `org-link-escape'. See [[http://article.gmane.org/gmane.emacs.orgmode/37888][his message]]: + +: Percent escaping is used in Org mode to escape certain characters +: in links that would either break the parser (e.g. square brackets +: in link target oder description) or are not allowed to appear in +: a particular link type (e.g. non-ascii characters in a http: +: link). +: +: With this change in place Org will apply percent escaping and +: unescaping more consistently especially for non-ascii characters. +: Additionally some of the outstanding bugs or glitches concerning +: percent escaped links are solved. + + Thanks a lot to David for this work. + + + +*** Make =org-store-link= point to directory in a dired buffer + :PROPERTIES: + :OrgVersion: 6.35 + :END: + + When, in a dired buffer, the cursor is not in a line listing a + file, `org-store-link' will store a link to the directory. + + Patch by Stephen Eglen. + + + +*** Allow regexps in =org-file-apps= to capture link parameters + :PROPERTIES: + :OrgVersion: 6.35 + :END: + + The way extension regexps in =org-file-apps= are handled has + changed. Instead of matching against the file name, the regexps + are now matched against the whole link, and you can use grouping + to extract link parameters which you can then use in a command + string to be executed. + + For example, to allow linking to PDF files using the syntax + =file:/doc.pdf::=, you can add the following entry to + org-file-apps: + + #+begin_example + Extension: \.pdf::\([0-9]+\)\' + Command: evince "%s" -p %1 + #+end_example + + Thanks to Jan Böcker for a patch to this effect. + +** Dates and time + +*** Allow relative time when scheduling/adding a deadline + :PROPERTIES: + :OrgVersion: 7.7 + :END: + + You can now use relative duration strings like "-2d" or "++3w" + when calling =org-schedule= or =org-deadline=: it will schedule + (or set the deadline for) the item respectively two days before + today and three weeks after the current timestamp, if any. + + You can use this programmatically: =(org-schedule nil "+2d")= + will work on the current entry. + + You can also use this while (bulk-)rescheduling and + (bulk-)resetting the deadline of (several) items from the agenda. + + Thanks to Memnon Anon for a heads up about this! + + + + +*** American-style dates are now understood by =org-read-date= + :PROPERTIES: + :OrgVersion: 6.35 + :END: + + So when you are prompted for a date, you can now answer like this + + #+begin_example + 2/5/3 --> 2003-02-05 + 2/5 --> -02-05 + #+end_example + +** Agenda + +*** =org-agenda-custom-commands= has a default value + :PROPERTIES: + :OrgVersion: 7.8 + :END: + + This option used to be `nil' by default. This now has a default + value, displaying an agenda and all TODOs. See the docstring for + details. Thanks to Carsten for this. + + +*** Improved filtering through =org-agenda-to-appt= + :PROPERTIES: + :OrgVersion: 7.8 + :END: + + The new function allows the user to refine the scope of entries + to pass to =org-agenda-get-day-entries= and allows to filter out + entries using a function. + + Thanks to Peter Münster for raising a related issue and to + Tassilo Horn for this idea. Also thanks to Peter Münster for + [[git:68ffb7a7][fixing a small bug]] in the final implementation. + + + +*** Allow ap/pm times in agenda time grid + :PROPERTIES: + :OrgVersion: 7.4 + :END: + + Times in the agenda can now be displayed in am/pm format. See the new + variable =org-agenda-timegrid-use-ampm=. Thanks to C. A. Webber for + a patch to this effect. + + + +*** Agenda: Added a bulk "scattering" command + :PROPERTIES: + :OrgVersion: 7.4 + :END: + + =B S= in the agenda buffer will cause tasks to be rescheduled a random + number of days into the future, with 7 as the default. This is useful + if you've got a ton of tasks scheduled for today, you realize you'll + never deal with them all, and you just want them to be distributed + across the next N days. When called with a prefix arg, rescheduling + will avoid weekend days. + + Thanks to John Wiegley for this. + +** Exporting + +*** Simplification of org-export-html-preamble/postamble + :PROPERTIES: + :OrgVersion: 7.5 + :END: + + When set to `t', export the preamble/postamble as usual, honoring the + =org-export-email/author/creator-info= variables. + + When set to a formatting string, insert this string. See the docstring + of these variable for details about available %-sequences. + + You can set =:html-preamble= in publishing project in the same way: `t' + means to honor =:email/creator/author-info=, and a formatting string + will insert a string. + +*** New exporters to Latin-1 and UTF-8 + :PROPERTIES: + :OrgVersion: 6.35 + :END: + + While Ulf Stegemann was going through the entities list to improve the + LaTeX export, he had the great idea to provide representations for many + of the entities in Latin-1, and for all of them in UTF-8. This means + that we can now export files rich in special symbols to Latin-1 and to + UTF-8 files. These new exporters can be reached with the commands =C-c + C-e n= and =C-c C-e u=, respectively. + + When there is no representation for a given symbol in the targeted + coding system, you can choose to keep the TeX-macro-like + representation, or to get an "explanatory" representation. For + example, =\simeq= could be represented as "[approx. equal to]". Please + use the variable =org-entities-ascii-explanatory= to state your + preference. + +*** HTML export: Add class to outline containers using property + :PROPERTIES: + :OrgVersion: 6.35 + :END: + + The =HTML_CONTAINER_CLASS= property can now be used to add a class name + to the outline container of a node in HTML export. + +*** Throw an error when creating an image from a LaTeX snippet fails + :PROPERTIES: + :OrgVersion: 6.35 + :END: + + This behavior can be configured with the new option variable + =org-format-latex-signal-error=. + +*** Support for creating BEAMER presentations from Org-mode documents + :PROPERTIES: + :OrgVersion: 6.34 + :END: + + Org-mode documents or subtrees can now be converted directly in to + BEAMER presentation. Turning a tree into a simple presentations is + straight forward, and there is also quite some support to make richer + presentations as well. See the [[http://orgmode.org/manual/Beamer-class-export.html#Beamer-class-export][BEAMER section]] in the manual for more + details. + + Thanks to everyone who has contributed to the discussion about BEAMER + support and how it should work. This was a great example for how this + community can achieve a much better result than any individual could. + +** Refiling + +*** Refile targets can now be cached + :PROPERTIES: + :OrgVersion: 7.01 + :END: + + You can turn on caching of refile targets by setting the variable + =org-refile-use-cache=. This should speed up refiling if you have many + eligible targets in many files. If you need to update the cache + because Org misses a newly created entry or still offers a deleted one, + press =C-0 C-c C-w=. + +*** New logging support for refiling + :PROPERTIES: + :OrgVersion: 6.35 + :END: + + Whenever you refile an item, a time stamp and even a note can be added + to this entry. For details, see the new option =org-log-refile=. + + Thanks to Charles Cave for this idea. + +** Completion + +*** In-buffer completion is now done using John Wiegleys pcomplete.el + :PROPERTIES: + :OrgVersion: 7.4 + :END: + + Thanks to John Wiegley for much of this code. + +** Tables + +*** New command =org-table-transpose-table-at-point= + :PROPERTIES: + :OrgVersion: 7.8 + :END: + + See the docstring. This hack from Juan Pechiar is now part of Org's + core. Thanks to Juan! + +*** Display field's coordinates when editing it with =C-c `= + :PROPERTIES: + :OrgVersion: 7.7 + :END: + + When editing a field with =C-c `=, the field's coordinate will the + displayed in the buffer. + + Thanks to Michael Brand for a patch to this effect. + +*** Spreadsheet computation of durations and time values + :PROPERTIES: + :OrgVersion: 7.6 + :END: + + If you want to compute time values use the =T= flag, either in Calc + formulas or Elisp formulas: + + | Task 1 | Task 2 | Total | + |--------+--------+---------| + | 35:00 | 35:00 | 1:10:00 | + #+TBLFM: @2$3=$1+$2;T + + Values must be of the form =[HH:]MM:SS=, where hours are optional. + + Thanks to Martin Halder, Eric Schulte and Carsten for code and feedback + on this. + +*** Implement formulas applying to field ranges + :PROPERTIES: + :OrgVersion: 7.5 + :END: + + Carsten implemented this field-ranges formulas. + + : A frequently requested feature for tables has been to be able to define + : row formulas in a way similar to column formulas. The patch below allows + : things like + : + : @3= + : @2$2..@5$7= + : @I$2..@II$4= + : + : as the left hand side for table formulas in order to write a formula that + : is valid for an entire column or for a rectangular section in a + : table. + + Thanks a lot to Carsten for this. + +*** Sending radio tables from org buffers is now allowed + :PROPERTIES: + :OrgVersion: 7.4 + :END: + + Org radio tables can no also be sent inside Org buffers. Also, there + is a new hook which get called after a table has been sent. + + Thanks to Seweryn Kokot. + +** Lists + +*** Improved handling of lists + :PROPERTIES: + :OrgVersion: 7.5 + :END: + + Nicolas Goaziou extended and improved the way Org handles lists. + + 1. Indentation of text determines again end of items in lists. So, some + text less indented than the previous item doesn't close the whole + list anymore, only all items more indented than it. + + 2. Alphabetical bullets are implemented, through the use of the + variable `org-alphabetical-lists'. This also adds alphabetical + counters like [@c] or [@W]. + + 3. Lists can now safely contain drawers, inline tasks, or various + blocks, themselves containing lists. Two variables are controlling + this: `org-list-forbidden-blocks', and `org-list-export-context'. + + 4. Improve `newline-and-indent' (C-j): used in an item, it will keep + text from moving at column 0. This allows to split text and make + paragraphs and still not break the list. + + 5. Improve `org-toggle-item' (C-c -): used on a region with standard + text, it will change the region into one item. With a prefix + argument, it will fallback to the previous behavior and make every + line in region an item. It permits to easily integrate paragraphs + inside a list. + + 6. `fill-paragraph' (M-q) now understands lists. It can freely be used + inside items, or on text just after a list, even with no blank line + around, without breaking list structure. + + Thanks a lot to Nicolas for all this! + +** Inline display of linked images + :PROPERTIES: + :OrgVersion: 6.36 + :END: + + Images can now be displayed inline. The key C-c C-x C-v does toggle the + display of such images. Note that only image links that have no + description part will be inlined. + +** Implement offsets for ordered lists + :PROPERTIES: + :OrgVersion: 6.36 + :END: + + If you want to start an ordered plain list with a number different from + 1, you can now do it like this: + + : 1. [@start:12] will star a lit a number 12 + +** Babel: code block body expansion for table and preview + :PROPERTIES: + :OrgVersion: 6.36 + :END: + + In org-babel, code is "expanded" prior to evaluation. I.e. the code that + is actually evaluated comprises the code block contents, augmented with + the extra code which assigns the referenced data to variables. It is now + possible to preview expanded contents, and also to expand code during + during tangling. This expansion takes into account all header arguments, + and variables. + + A new key-binding `C-c M-b p' bound to `org-babel-expand-src-block' can + be used from inside of a source code block to preview its expanded + contents (which can be very useful for debugging). tangling + + The expanded body can now be tangled, this includes variable values + which may be the results of other source-code blocks, or stored in + headline properties or tables. One possible use for this is to allow + those using org-babel for their emacs initialization to store values + (e.g. usernames, passwords, etc...) in headline properties or in tables. + + Org-babel now supports three new header arguments, and new default + behavior for handling horizontal lines in tables (hlines), column names, + and rownames across all languages. + +** Editing Convenience and Appearance + +*** New command =org-copy-visible= (=C-c C-x v=) + :PROPERTIES: + :OrgVersion: 7.7 + :END: + + This command will copy the visible text in the region into the kill + ring. Thanks to Florian Beck for this function and to Carsten for + adding it to org.el and documenting it! + +*** Make it possible to protect hidden subtrees from being killed by =C-k= + :PROPERTIES: + :OrgVersion: 7.01 + :END: + + See the new variable =org-ctrl-k-protect-subtree=. This was a request + by Scott Otterson. + +*** Implement pretty display of entities, sub-, and superscripts. + :PROPERTIES: + :OrgVersion: 7.01 + :END: + + The command =C-c C-x \= toggles the display of Org's special entities + like =\alpha= as pretty unicode characters. Also, sub and superscripts + are displayed in a pretty way (raised/lower display, in a smaller + font). If you want to exclude sub- and superscripts, see the variable + =org-pretty-entities-include-sub-superscripts=. + + Thanks to Eric Schulte and Ulf Stegeman for making this possible. + +*** New faces for title, date, author and email address lines + :PROPERTIES: + :OrgVersion: 6.35 + :END: + + The keywords in these lines are now dimmed out, and the title is + displayed in a larger font, and a special font is also used for author, + date, and email information. This is implemented by the following new + faces: + + =org-document-title= + =org-document-info= + =org-document-info-keyword= + + In addition, the variable =org-hidden-keywords= can be used to make the + corresponding keywords disappear. + + Thanks to Dan Davison for this feature. + +*** Simpler way to specify faces for tags and todo keywords + :PROPERTIES: + :OrgVersion: 6.35 + :END: + + The variables =org-todo-keyword-faces=, =org-tag-faces=, and + =org-priority-faces= now accept simple color names as specifications. + The colors will be used as either foreground or background color for + the corresponding keyword. See also the variable + =org-faces-easy-properties=, which governs which face property is + affected by this setting. + + This is really a great simplification for setting keyword faces. The + change is based on an idea and patch by Ryan Thompson. + +*** in tables now means fixed width, not maximum width + :PROPERTIES: + :OrgVersion: 6.35 + :END: + + Requested by Michael Brand. + +*** Better level cycling function + :PROPERTIES: + :OrgVersion: 6.35 + :END: + + =TAB= in an empty headline cycles the level of that headline through + likely states. Ryan Thompson implemented an improved version of this + function, which does not depend upon when exactly this command is used. + Thanks to Ryan for this improvement. + +*** Adaptive filling + :PROPERTIES: + :OrgVersion: 6.35 + :END: + + For paragraph text, =org-adaptive-fill-function= did not handle the + base case of regular text which needed to be filled. This is now + fixed. Among other things, it allows email-style ">" comments to be + filled correctly. + + Thanks to Dan Hackney for this patch. + +*** `org-reveal' (=C-c C-r=) also decrypts encrypted entries (org-crypt.el) + :PROPERTIES: + :OrgVersion: 6.35 + :END: + + Thanks to Richard Riley for triggering this change. + +*** Better automatic letter selection for TODO keywords + :PROPERTIES: + :OrgVersion: 6.35 + :END: + + When all first letters of keywords have been used, Org now assigns more + meaningful characters based on the keywords. + + Thanks to Mikael Fornius for this patch. + +** Clocking + +*** Clock: Allow synchronous update of timestamps in CLOCK log + :PROPERTIES: + :OrgVersion: 7.7 + :END: + + Using =S-M-= on CLOCK log timestamps will increase/decrease + the two timestamps on this line so that duration will keep the same. + Note that duration can still be slightly modified in case a timestamp + needs some rounding. + + Thanks to Rainer Stengele for this idea. + +*** Localized clock tables + :PROPERTIES: + :OrgVersion: 7.5 + :END: + + Clock tables now support a new new =:lang= parameter, allowing the user + to customize the localization of the table headers. See the variable + =org-clock-clocktable-language-setup= which controls available + translated strings. + +*** Show clock overruns in mode line + :PROPERTIES: + :OrgVersion: 6.35 + :END: + + When clocking an item with a planned effort, overrunning the planned + time is now made visible in the mode line, for example using the new + face =org-mode-line-clock-overrun=, or by adding an extra string given + by =org-task-overrun-text=. + + Thanks to Richard Riley for a patch to this effect. + +*** Clock reports can now include the running, incomplete clock + :PROPERTIES: + :OrgVersion: 6.35 + :END: + + If you have a clock running, and the entry being clocked falls into the + scope when creating a clock table, the time so far spent can be added + to the total. This behavior depends on the setting of + =org-clock-report-include-clocking-task=. The default is =nil=. + + Thanks to Bernt Hansen for this useful addition. + +** Misc + +*** Improvements with inline tasks and indentation + :PROPERTIES: + :OrgVersion: 7.4 + :END: + + There is now a configurable way on how to export inline tasks. See the + new variable =org-inlinetask-export-templates=. + + Thanks to Nicolas Goaziou for coding these changes. + +*** A property value of "nil" now means to unset a property + :PROPERTIES: + :OrgVersion: 7.01 + :END: + + This can be useful in particular with property inheritance, if some + upper level has the property, and some grandchild of it would like to + have the default settings (i.e. not overruled by a property) back. + + Thanks to Robert Goldman and Bernt Hansen for suggesting this change. + +*** New helper functions in org-table.el + :PROPERTIES: + :OrgVersion: 6.35 + :END: + + There are new functions to access and write to a specific table field. + This is for hackers, and maybe for the org-babel people. + + #+begin_example + org-table-get + org-table-put + org-table-current-line + org-table-goto-line + #+end_example + +*** Archiving: Allow to reverse order in target node + :PROPERTIES: + :OrgVersion: 6.35 + :END: + + The new option =org-archive-reversed-order= allows to have archived + entries inserted in a last-on-top fashion in the target node. + + This was requested by Tom. + +*** Org-reveal: Double prefix arg shows the entire subtree of the parent + :PROPERTIES: + :OrgVersion: 6.35 + :END: + + This can help to get out of an inconsistent state produced for example + by viewing from the agenda. + + This was a request by Matt Lundin. +* License + +This file is part of GNU Emacs. + +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 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 +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Emacs. If not, see . From 2f885dcacb7fdc09700705e15b7741988d2ad70f Mon Sep 17 00:00:00 2001 From: Bastien Guerry Date: Thu, 26 Apr 2012 19:30:04 +0200 Subject: [PATCH 207/564] Sync with Org git commit 374c56b. --- doc/misc/ChangeLog | 5 +++ etc/ChangeLog | 10 +++++ etc/org/OrgOdtStyles.xml | 20 +++++----- lisp/org/ChangeLog | 69 ++++++++++++++++++++++++++++++++ lisp/org/ob-python.el | 2 +- lisp/org/org-agenda.el | 2 +- lisp/org/org-clock.el | 2 +- lisp/org/org-ctags.el | 2 +- lisp/org/org-faces.el | 10 +++++ lisp/org/org-footnote.el | 13 ++++-- lisp/org/org-list.el | 77 +++++++++++++++++++++++++----------- lisp/org/org-mouse.el | 1 + lisp/org/org-odt.el | 1 - lisp/org/org-table.el | 4 +- lisp/org/org.el | 85 +++++++++++++++++++++------------------- 15 files changed, 220 insertions(+), 83 deletions(-) diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index ea549e41b58..b2e34bac56d 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -1,3 +1,8 @@ +2012-04-26 Ippei Furuhashi (tiny change) + + * org.texi (Agenda commands): Fix two typos: give corresponding + function names, according to `org-agenda-view-mode-dispatch'. + 2012-04-21 Glenn Morris * faq.texi (Major packages and programs): Remove section. diff --git a/etc/ChangeLog b/etc/ChangeLog index d69d066f292..6ca6017be98 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,3 +1,13 @@ +2012-04-26 Jambunathan K + + * org/README: Update Copyright year. + +2012-04-26 Jambunathan K + + * org/OrgOdtStyles.xml (OrgDescriptionList): Modify style. With + this change, in a description list, if the description paragraph + spawns multiple lines then it will correctly indented. + 2012-04-20 Glenn Morris * CONTRIBUTE: Expand a bit on copyright assignments. diff --git a/etc/org/OrgOdtStyles.xml b/etc/org/OrgOdtStyles.xml index 470b7b134a7..84125c96d8a 100644 --- a/etc/org/OrgOdtStyles.xml +++ b/etc/org/OrgOdtStyles.xml @@ -649,34 +649,34 @@ - + - + - + - + - + - + - + - + - + - + diff --git a/lisp/org/ChangeLog b/lisp/org/ChangeLog index 9c85a75d16a..806acd8f446 100644 --- a/lisp/org/ChangeLog +++ b/lisp/org/ChangeLog @@ -1,3 +1,72 @@ +2012-04-26 Nicolas Goaziou + + * org-table.el (org-table-number-fraction): Fix typo. + +2012-04-26 Eric Schulte + + * ob-python.el (org-babel-execute:python): Ensure newline precedes + automatically-added returns. + +2012-04-26 Nicolas Goaziou + + * org-mouse.el (org-mode-hook): Do not move point when clicking on + a footnote reference. + +2012-04-26 Bastien Guerry + + * org-faces.el (org-date-selected): Fix docstring. + +2012-04-26 Bastien Guerry + + * org-ctags.el (org-ctags-new-topic-template): Remove * character + in front of variable docstring. + +2012-04-26 Nicolas Goaziou + + * org-list.el (org-list-struct-indent): Follow + `org-list-demote-modify-bullet' specifications for ordered + bullets. + (org-list-indent-item-generic, org-indent-item-tree) + (org-outdent-item-tree): Fix bug when operating on a region. + (org-outdent-item, org-indent-item): Allow to operate on a region. + + * org.el (org-shiftmetaleft, org-shiftmetaright): Allow to operate + on a region. + +2012-04-26 Nicolas Goaziou + + * org-footnote.el (org-footnote-normalize): Fix positionning in + HTML export without a footnote section. + +2012-04-26 Madan Ramakrishnan (tiny change) + + * org-agenda.el (org-agenda-bulk-mark): Truly make arg optional as + advertised by the function. + +2012-04-26 Zachary Kanfer (tiny change) + + * org.el (org-read-date-display): Fix bug when displaying the + overlay. + +2012-04-26 Bastien Guerry + + * org.el (org-mode): Don't use `buffer-face-mode' by default. + +2012-04-26 Bastien Guerry + + * org-faces.el (org-date-selected): New face. + +2012-04-26 Jambunathan K + + * org-odt.el (org-odt-format-org-link): Pay no heed to whether the + internal links destined for headlines provide a description or + not. In fact, the `org-store-link' and `org-insert-link' create + internal links which do have a description. + +2012-04-26 Bastien Guerry + + * org-clock.el (org-program-exists): Fix docstring. + 2012-04-11 Bastien Guerry * org.el (org-point-at-end-of-empty-headline): Only try to match diff --git a/lisp/org/ob-python.el b/lisp/org/ob-python.el index 0dc744aaa73..348248f35cf 100644 --- a/lisp/org/ob-python.el +++ b/lisp/org/ob-python.el @@ -64,7 +64,7 @@ This function is called by `org-babel-execute-src-block'." (preamble (cdr (assoc :preamble params))) (full-body (org-babel-expand-body:generic - (concat body (if return-val (format "return %s" return-val) "")) + (concat body (if return-val (format "\nreturn %s" return-val) "")) params (org-babel-variable-assignments:python params))) (result (org-babel-python-evaluate session full-body result-type result-params preamble))) diff --git a/lisp/org/org-agenda.el b/lisp/org/org-agenda.el index 3bb0fc84897..ddb56ca4bac 100644 --- a/lisp/org/org-agenda.el +++ b/lisp/org/org-agenda.el @@ -8294,7 +8294,7 @@ This is a command that has to be installed in `calendar-mode-map'." (defun org-agenda-bulk-mark (&optional arg) "Mark the entry at point for future bulk action." (interactive "p") - (dotimes (i (max arg 1)) + (dotimes (i (or arg 1)) (unless (org-get-at-bol 'org-agenda-diary-link) (let* ((m (org-get-at-bol 'org-hd-marker)) ov) diff --git a/lisp/org/org-clock.el b/lisp/org/org-clock.el index 434f6a1d5f6..aabcfc187db 100644 --- a/lisp/org/org-clock.el +++ b/lisp/org/org-clock.el @@ -664,7 +664,7 @@ Use alsa's aplay tool if available." (error (beep t) (beep t))))))))) (defun org-program-exists (program-name) - "Checks whenever we can locate program and launch it." + "Checks whenever we can locate PROGRAM-NAME using the `which' executable." (if (member system-type '(gnu/linux darwin)) (= 0 (call-process "which" nil nil nil program-name)))) diff --git a/lisp/org/org-ctags.el b/lisp/org/org-ctags.el index 48656190a0c..5874646ff48 100644 --- a/lisp/org/org-ctags.el +++ b/lisp/org/org-ctags.el @@ -188,7 +188,7 @@ See the ctags documentation for more information.") Created as a local variable in each buffer.") (defcustom org-ctags-new-topic-template - "* <<%t>>\n\n\n\n\n\n" + "<<%t>>\n\n\n\n\n\n" "Text to insert when creating a new org file via opening a hyperlink. The following patterns are replaced in the string: `%t' - replaced with the capitalized title of the hyperlink" diff --git a/lisp/org/org-faces.el b/lisp/org/org-faces.el index 481d662eca1..58f879dd51a 100644 --- a/lisp/org/org-faces.el +++ b/lisp/org/org-faces.el @@ -285,6 +285,16 @@ column view defines special faces for each outline level. See the file "Face for date/time stamps." :group 'org-faces) +(defface org-date-selected + (org-compatible-face nil + '((((class color) (min-colors 16) (background light)) (:foreground "Red1" :bold nil)) + (((class color) (min-colors 16) (background dark)) (:foreground "Pink" :bold nil)) + (((class color) (min-colors 8) (background light)) (:foreground "red" :bold nil)) + (((class color) (min-colors 8) (background dark)) (:foreground "red" :bold nil)) + (t (:inverse-video t)))) + "Face for highlighting the calendar day when using `org-read-date'." + :group 'org-faces) + (defface org-sexp-date '((((class color) (background light)) (:foreground "Purple")) (((class color) (background dark)) (:foreground "Cyan")) diff --git a/lisp/org/org-footnote.el b/lisp/org/org-footnote.el index 9319e0813c0..a9ba8d7510b 100644 --- a/lisp/org/org-footnote.el +++ b/lisp/org/org-footnote.el @@ -716,8 +716,8 @@ Additional note on `org-footnote-insert-pos-for-preprocessor': ((and org-footnote-section (eq major-mode 'org-mode)) (goto-char (point-min)) (if (re-search-forward - (concat "^\\*[ \t]+" (regexp-quote org-footnote-section) - "[ \t]*$") nil t) + (concat "^\\*[ \t]+" (regexp-quote org-footnote-section) + "[ \t]*$") nil t) (delete-region (match-beginning 0) (org-end-of-subtree t t))) ;; A new footnote section is inserted by default at the end of ;; the buffer. @@ -727,7 +727,14 @@ Additional note on `org-footnote-insert-pos-for-preprocessor': (unless (bolp) (newline))) ;; No footnote section set: Footnotes will be added at the end ;; of the section containing their first reference. - ((eq major-mode 'org-mode)) + ;; Nevertheless, in an export situation, set insertion point to + ;; `point-max' by default. + ((eq major-mode 'org-mode) + (when export-props + (goto-char (point-max)) + (skip-chars-backward " \r\t\n") + (forward-line) + (delete-region (point) (point-max)))) (t ;; Remove any left-over tag in the buffer, if one is set up. (when org-footnote-tag-for-non-org-mode-files diff --git a/lisp/org/org-list.el b/lisp/org/org-list.el index c3775888325..4498280ac77 100644 --- a/lisp/org/org-list.el +++ b/lisp/org/org-list.el @@ -1484,8 +1484,19 @@ bullets between START and END." (change-bullet-maybe (function (lambda (item) - (let* ((bul (org-trim (org-list-get-bullet item struct))) - (new-bul-p (cdr (assoc bul org-list-demote-modify-bullet)))) + (let ((new-bul-p + (cdr (assoc + ;; Normalize ordered bullets. + (let ((bul (org-trim + (org-list-get-bullet item struct)))) + (cond ((string-match "[A-Z]\\." bul) "A.") + ((string-match "[A-Z])" bul) "A)") + ((string-match "[a-z]\\." bul) "a.") + ((string-match "[a-z])" bul) "a)") + ((string-match "[0-9]\\." bul) "1.") + ((string-match "[0-9])" bul) "1)") + (t bul))) + org-list-demote-modify-bullet)))) (when new-bul-p (org-list-set-bullet item struct new-bul-p)))))) (ind (lambda (cell) @@ -2500,7 +2511,6 @@ STRUCT is the list structure. Return t if successful." (save-excursion - (beginning-of-line) (let* ((regionp (org-region-active-p)) (rbeg (and regionp (region-beginning))) (rend (and regionp (region-end))) @@ -2509,7 +2519,8 @@ Return t if successful." (prevs (org-list-prevs-alist struct)) ;; Are we going to move the whole list? (specialp - (and (= top (point)) + (and (not regionp) + (= top (point-at-bol)) (cdr (assq 'indent org-list-automatic-rules)) (if no-subtree (error @@ -2523,12 +2534,12 @@ Return t if successful." (progn (set-marker org-last-indent-begin-marker rbeg) (set-marker org-last-indent-end-marker rend)) - (set-marker org-last-indent-begin-marker (point)) + (set-marker org-last-indent-begin-marker (point-at-bol)) (set-marker org-last-indent-end-marker (cond (specialp (org-list-get-bottom-point struct)) - (no-subtree (1+ (point))) - (t (org-list-get-item-end (point) struct)))))) + (no-subtree (1+ (point-at-bol))) + (t (org-list-get-item-end (point-at-bol) struct)))))) (let* ((beg (marker-position org-last-indent-begin-marker)) (end (marker-position org-last-indent-end-marker))) (cond @@ -2583,19 +2594,35 @@ Return t if successful." "Outdent a local list item, but not its children. If a region is active, all items inside will be moved." (interactive) - (if (org-at-item-p) - (let ((struct (org-list-struct))) - (org-list-indent-item-generic -1 t struct)) - (error "Not at an item"))) + (let ((regionp (org-region-active-p))) + (cond + ((or (org-at-item-p) + (and regionp + (save-excursion (goto-char (region-beginning)) + (org-at-item-p)))) + (let ((struct (if (not regionp) (org-list-struct) + (save-excursion (goto-char (region-beginning)) + (org-list-struct))))) + (org-list-indent-item-generic -1 t struct))) + (regionp (error "Region not starting at an item")) + (t (error "Not at an item"))))) (defun org-indent-item () "Indent a local list item, but not its children. If a region is active, all items inside will be moved." (interactive) - (if (org-at-item-p) - (let ((struct (org-list-struct))) - (org-list-indent-item-generic 1 t struct)) - (error "Not at an item"))) + (let ((regionp (org-region-active-p))) + (cond + ((or (org-at-item-p) + (and regionp + (save-excursion (goto-char (region-beginning)) + (org-at-item-p)))) + (let ((struct (if (not regionp) (org-list-struct) + (save-excursion (goto-char (region-beginning)) + (org-list-struct))))) + (org-list-indent-item-generic 1 t struct))) + (regionp (error "Region not starting at an item")) + (t (error "Not at an item"))))) (defun org-outdent-item-tree () "Outdent a local list item including its children. @@ -2604,10 +2631,12 @@ If a region is active, all items inside will be moved." (let ((regionp (org-region-active-p))) (cond ((or (org-at-item-p) - (and (org-region-active-p) - (goto-char (region-beginning)) - (org-at-item-p))) - (let ((struct (org-list-struct))) + (and regionp + (save-excursion (goto-char (region-beginning)) + (org-at-item-p)))) + (let ((struct (if (not regionp) (org-list-struct) + (save-excursion (goto-char (region-beginning)) + (org-list-struct))))) (org-list-indent-item-generic -1 nil struct))) (regionp (error "Region not starting at an item")) (t (error "Not at an item"))))) @@ -2619,10 +2648,12 @@ If a region is active, all items inside will be moved." (let ((regionp (org-region-active-p))) (cond ((or (org-at-item-p) - (and (org-region-active-p) - (goto-char (region-beginning)) - (org-at-item-p))) - (let ((struct (org-list-struct))) + (and regionp + (save-excursion (goto-char (region-beginning)) + (org-at-item-p)))) + (let ((struct (if (not regionp) (org-list-struct) + (save-excursion (goto-char (region-beginning)) + (org-list-struct))))) (org-list-indent-item-generic 1 nil struct))) (regionp (error "Region not starting at an item")) (t (error "Not at an item"))))) diff --git a/lisp/org/org-mouse.el b/lisp/org/org-mouse.el index 5a87bd64697..b467064b888 100644 --- a/lisp/org/org-mouse.el +++ b/lisp/org/org-mouse.el @@ -915,6 +915,7 @@ This means, between the beginning of line and the point." ((assq :checkbox context) (org-toggle-checkbox)) ((assq :item-bullet context) (let ((org-cycle-include-plain-lists t)) (org-cycle))) + ((org-footnote-at-reference-p) nil) (t ad-do-it)))))) (defun org-mouse-move-tree-start (event) diff --git a/lisp/org/org-odt.el b/lisp/org/org-odt.el index 234272a378d..2e984a575bd 100644 --- a/lisp/org/org-odt.el +++ b/lisp/org/org-odt.el @@ -1689,7 +1689,6 @@ ATTR is a string of other attributes of the a element." (or (not thefile) (string= thefile "")) (plist-get org-lparse-opt-plist :section-numbers) (setq sec-frag fragment) - (org-find-text-property-in-string 'org-no-description fragment) (or (string-match "\\`sec\\(\\(-[0-9]+\\)+\\)" sec-frag) (and (setq sec-frag (loop for alias in org-export-target-aliases do diff --git a/lisp/org/org-table.el b/lisp/org/org-table.el index 08981b57e49..37e5c4f91a6 100644 --- a/lisp/org/org-table.el +++ b/lisp/org/org-table.el @@ -135,8 +135,8 @@ Other options offered by the customize interface are more restrictive." (defcustom org-table-number-fraction 0.5 "Fraction of numbers in a column required to make the column align right. -In a column all non-white fields are considered. If at least this -fraction of fields is matched by `org-table-number-fraction', +In a column all non-white fields are considered. If at least +this fraction of fields is matched by `org-table-number-regexp', alignment to the right border applies." :group 'org-table-settings :type 'number) diff --git a/lisp/org/org.el b/lisp/org/org.el index c2cc2354439..838a9a18ad4 100644 --- a/lisp/org/org.el +++ b/lisp/org/org.el @@ -5057,8 +5057,7 @@ The following commands are available: 'org-parse-arguments) (set (make-local-variable 'pcomplete-termination-string) "") (when (>= emacs-major-version 23) - (set (make-local-variable 'buffer-face-mode-face) 'org-default) - (buffer-face-mode)) + (set (make-local-variable 'buffer-face-mode-face) 'org-default)) ;; If empty file that did not turn on org-mode automatically, make it to. (if (and org-insert-mode-line-in-empty-file @@ -14915,7 +14914,7 @@ So these are more for recording a certain time/date." (org-time-stamp arg 'inactive)) (defvar org-date-ovl (make-overlay 1 1)) -(overlay-put org-date-ovl 'face 'org-warning) +(overlay-put org-date-ovl 'face 'org-date-selected) (org-detach-overlay org-date-ovl) (defvar org-ans1) ; dynamically scoped parameter @@ -15131,35 +15130,35 @@ user." (when org-read-date-display-live (when org-read-date-overlay (delete-overlay org-read-date-overlay)) - (let ((p (point))) - (end-of-line 1) - (while (not (equal (buffer-substring - (max (point-min) (- (point) 4)) (point)) - " ")) - (insert " ")) - (goto-char p)) - (let* ((ans (concat (buffer-substring (point-at-bol) (point-max)) - " " (or org-ans1 org-ans2))) - (org-end-time-was-given nil) - (f (org-read-date-analyze ans org-def org-defdecode)) - (fmts (if org-dcst - org-time-stamp-custom-formats - org-time-stamp-formats)) - (fmt (if (or org-with-time - (and (boundp 'org-time-was-given) org-time-was-given)) - (cdr fmts) - (car fmts))) - (txt (concat "=> " (format-time-string fmt (apply 'encode-time f))))) - (when (and org-end-time-was-given - (string-match org-plain-time-of-day-regexp txt)) - (setq txt (concat (substring txt 0 (match-end 0)) "-" - org-end-time-was-given - (substring txt (match-end 0))))) - (when org-read-date-analyze-futurep - (setq txt (concat txt " (=>F)"))) - (setq org-read-date-overlay - (make-overlay (1- (point-at-eol)) (point-at-eol))) - (org-overlay-display org-read-date-overlay txt 'secondary-selection)))) + (when (minibufferp (current-buffer)) + (save-excursion + (end-of-line 1) + (while (not (equal (buffer-substring + (max (point-min) (- (point) 4)) (point)) + " ")) + (insert " "))) + (let* ((ans (concat (buffer-substring (point-at-bol) (point-max)) + " " (or org-ans1 org-ans2))) + (org-end-time-was-given nil) + (f (org-read-date-analyze ans org-def org-defdecode)) + (fmts (if org-dcst + org-time-stamp-custom-formats + org-time-stamp-formats)) + (fmt (if (or org-with-time + (and (boundp 'org-time-was-given) org-time-was-given)) + (cdr fmts) + (car fmts))) + (txt (concat "=> " (format-time-string fmt (apply 'encode-time f))))) + (when (and org-end-time-was-given + (string-match org-plain-time-of-day-regexp txt)) + (setq txt (concat (substring txt 0 (match-end 0)) "-" + org-end-time-was-given + (substring txt (match-end 0))))) + (when org-read-date-analyze-futurep + (setq txt (concat txt " (=>F)"))) + (setq org-read-date-overlay + (make-overlay (1- (point-at-eol)) (point-at-eol))) + (org-overlay-display org-read-date-overlay txt 'secondary-selection))))) (defun org-read-date-analyze (ans org-def org-defdecode) "Analyze the combined answer of the date prompt." @@ -17969,28 +17968,34 @@ See the individual commands for more information." (defun org-shiftmetaleft () "Promote subtree or delete table column. -Calls `org-promote-subtree', `org-outdent-item', -or `org-table-delete-column', depending on context. -See the individual commands for more information." +Calls `org-promote-subtree', `org-outdent-item-tree', or +`org-table-delete-column', depending on context. See the +individual commands for more information." (interactive) (cond ((run-hook-with-args-until-success 'org-shiftmetaleft-hook)) ((org-at-table-p) (call-interactively 'org-table-delete-column)) ((org-at-heading-p) (call-interactively 'org-promote-subtree)) - ((org-at-item-p) (call-interactively 'org-outdent-item-tree)) + ((if (not (org-region-active-p)) (org-at-item-p) + (save-excursion (goto-char (region-beginning)) + (org-at-item-p))) + (call-interactively 'org-outdent-item-tree)) (t (org-modifier-cursor-error)))) (defun org-shiftmetaright () "Demote subtree or insert table column. -Calls `org-demote-subtree', `org-indent-item', -or `org-table-insert-column', depending on context. -See the individual commands for more information." +Calls `org-demote-subtree', `org-indent-item-tree', or +`org-table-insert-column', depending on context. See the +individual commands for more information." (interactive) (cond ((run-hook-with-args-until-success 'org-shiftmetaright-hook)) ((org-at-table-p) (call-interactively 'org-table-insert-column)) ((org-at-heading-p) (call-interactively 'org-demote-subtree)) - ((org-at-item-p) (call-interactively 'org-indent-item-tree)) + ((if (not (org-region-active-p)) (org-at-item-p) + (save-excursion (goto-char (region-beginning)) + (org-at-item-p))) + (call-interactively 'org-indent-item-tree)) (t (org-modifier-cursor-error)))) (defun org-shiftmetaup (&optional arg) From cf98857824ddf9e195f3dd8ed215dadb19ae0884 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 26 Apr 2012 13:56:38 -0400 Subject: [PATCH 208/564] Some menu fixes for doc/lispref * doc/lispref/elisp.texi, doc/lispref/vol1.texi, doc/lispref/vol2.texi: Some fixes for detailed menu. * doc/lispref/modes.texi (Major Modes, Auto-Indentation): * doc/lispref/buffers.texi (Buffers): Some fixes for menu descriptions. --- doc/lispref/ChangeLog | 6 ++++++ doc/lispref/buffers.texi | 2 +- doc/lispref/elisp.texi | 38 +++++++++++++++++++++++++++----------- doc/lispref/modes.texi | 20 ++++++++++---------- doc/lispref/vol1.texi | 39 ++++++++++++++++++++++++++++----------- doc/lispref/vol2.texi | 35 ++++++++++++++++++++++++++--------- 6 files changed, 98 insertions(+), 42 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 401b674f98b..c66fed1ca04 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,9 @@ +2012-04-26 Glenn Morris + + * elisp.texi, vol1.texi, vol2.texi: Some fixes for detailed menu. + * modes.texi (Major Modes, Auto-Indentation): + * buffers.texi (Buffers): Some fixes for menu descriptions. + 2012-04-26 Stefan Monnier * functions.texi (Simple Lambda, Argument List): diff --git a/doc/lispref/buffers.texi b/doc/lispref/buffers.texi index fecf2decfc3..fa0cb117772 100644 --- a/doc/lispref/buffers.texi +++ b/doc/lispref/buffers.texi @@ -24,7 +24,7 @@ not be displayed in any windows. * Buffer File Name:: The buffer file name indicates which file is visited. * Buffer Modification:: A buffer is @dfn{modified} if it needs to be saved. * Modification Time:: Determining whether the visited file was changed - ``behind Emacs's back''. + "behind Emacs's back". * Read Only Buffers:: Modifying text is not allowed in a read-only buffer. * The Buffer List:: How to look at all the existing buffers. * Creating Buffers:: Functions that create buffers. diff --git a/doc/lispref/elisp.texi b/doc/lispref/elisp.texi index 058067fe209..9c5ae73f718 100644 --- a/doc/lispref/elisp.texi +++ b/doc/lispref/elisp.texi @@ -459,7 +459,7 @@ Functions * Closures:: Functions that enclose a lexical environment. * Obsolete Functions:: Declaring functions obsolete. * Inline Functions:: Defining functions that the compiler - will open code. + will expand inline. * Declaring Functions:: Telling the compiler that a function is defined. * Function Safety:: Determining whether a function is safe to call. * Related Topics:: Cross-references to specific Lisp primitives @@ -492,7 +492,7 @@ Common Problems Using Macros * Eval During Expansion:: Don't evaluate them; put them in the expansion. * Repeated Expansion:: Avoid depending on how many times expansion is done. -Writing Customization Definitions +Customization Settings * Common Keywords:: Common keyword arguments for all kinds of customization declarations. @@ -753,6 +753,7 @@ Defining Menus various features. * Menu Separators:: Drawing a horizontal line through a menu. * Alias Menu Items:: Using command aliases in menu items. +* Toolkit Differences:: Not all toolkits provide the same features. Major and Minor Modes @@ -823,6 +824,21 @@ Multiline Font Lock Constructs * Region to Refontify:: Controlling which region gets refontified after a buffer change. +Automatic Indentation of code + +* SMIE:: A simple minded indentation engine. + +Simple Minded Indentation Engine + +* SMIE setup:: SMIE setup and features. +* Operator Precedence Grammars:: A very simple parsing technique. +* SMIE Grammar:: Defining the grammar of a language. +* SMIE Lexer:: Defining tokens. +* SMIE Tricks:: Working around the parser's limitations. +* SMIE Indentation:: Specifying indentation rules. +* SMIE Indentation Helpers:: Helper functions for indentation rules. +* SMIE Indentation Example:: Sample indentation rules. + Documentation * Documentation Basics:: Where doc strings are defined and stored. @@ -1219,8 +1235,7 @@ Processes * Datagrams:: UDP network connections. * Low-Level Network:: Lower-level but more general function to create connections and servers. -* Misc Network:: Additional relevant functions for - network connections. +* Misc Network:: Additional relevant functions for net connections. * Serial Ports:: Communicating with serial ports. * Byte Packing:: Using bindat to pack and unpack binary data. @@ -1340,6 +1355,7 @@ Images * GIF Images:: Special features for GIF format. * TIFF Images:: Special features for TIFF format. * PostScript Images:: Special features for PostScript format. +* ImageMagick Images:: Special features available through ImageMagick. * Other Image Types:: Various other formats are supported. * Defining Images:: Convenient ways to define an image for later use. * Showing Images:: Convenient ways to display an image once @@ -1395,13 +1411,6 @@ Operating System Interface * Notifications:: Desktop notifications. * Dynamic Libraries:: On-demand loading of support libraries. -Preparing Lisp code for distribution - -* Packaging Basics:: The basic concepts of Emacs Lisp packages. -* Simple Packages:: How to package a single .el file. -* Multi-file Packages:: How to package multiple files. -* Package Archives:: Maintaining package archives. - Starting Up Emacs * Startup Summary:: Sequence of actions Emacs performs at startup. @@ -1420,6 +1429,13 @@ Terminal Input * Input Modes:: Options for how input is processed. * Recording Input:: Saving histories of recent or all input events. +Preparing Lisp code for distribution + +* Packaging Basics:: The basic concepts of Emacs Lisp packages. +* Simple Packages:: How to package a single .el file. +* Multi-file Packages:: How to package multiple files. +* Package Archives:: Maintaining package archives. + Tips and Conventions * Coding Conventions:: Conventions for clean and robust programs. diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi index aaed86d3da3..e9be9f1763f 100644 --- a/doc/lispref/modes.texi +++ b/doc/lispref/modes.texi @@ -284,7 +284,7 @@ buffer is put in Fundamental mode (@pxref{Major Mode Conventions}). * Derived Modes:: Defining a new major mode based on another major mode. * Basic Major Modes:: Modes that other modes are often derived from. -* Mode Hooks:: Hooks run at the end of major mode commands. +* Mode Hooks:: Hooks run at the end of major mode functions. * Tabulated List Mode:: Parent mode for buffers containing tabulated data. * Generic Modes:: Defining a simple major mode that supports comment syntax and Font Lock mode. @@ -3375,7 +3375,7 @@ Another one is SMIE which takes an approach in the spirit of Lisp sexps and adapts it to non-Lisp languages. @menu -* SMIE:: A simple minded indentation engine +* SMIE:: A simple minded indentation engine. @end menu @node SMIE @@ -3401,14 +3401,14 @@ languages cannot be parsed correctly using SMIE, at least not without resorting to some special tricks (@pxref{SMIE Tricks}). @menu -* SMIE setup:: SMIE setup and features -* Operator Precedence Grammars:: A very simple parsing technique -* SMIE Grammar:: Defining the grammar of a language -* SMIE Lexer:: Defining tokens -* SMIE Tricks:: Working around the parser's limitations -* SMIE Indentation:: Specifying indentation rules -* SMIE Indentation Helpers:: Helper functions for indentation rules -* SMIE Indentation Example:: Sample indentation rules +* SMIE setup:: SMIE setup and features. +* Operator Precedence Grammars:: A very simple parsing technique. +* SMIE Grammar:: Defining the grammar of a language. +* SMIE Lexer:: Defining tokens. +* SMIE Tricks:: Working around the parser's limitations. +* SMIE Indentation:: Specifying indentation rules. +* SMIE Indentation Helpers:: Helper functions for indentation rules. +* SMIE Indentation Example:: Sample indentation rules. @end menu @node SMIE setup diff --git a/doc/lispref/vol1.texi b/doc/lispref/vol1.texi index 204c155680b..2687cd57d5a 100644 --- a/doc/lispref/vol1.texi +++ b/doc/lispref/vol1.texi @@ -479,7 +479,7 @@ Functions * Closures:: Functions that enclose a lexical environment. * Obsolete Functions:: Declaring functions obsolete. * Inline Functions:: Defining functions that the compiler - will open code. + will expand inline. * Declaring Functions:: Telling the compiler that a function is defined. * Function Safety:: Determining whether a function is safe to call. * Related Topics:: Cross-references to specific Lisp primitives @@ -512,7 +512,7 @@ Common Problems Using Macros * Eval During Expansion:: Don't evaluate them; put them in the expansion. * Repeated Expansion:: Avoid depending on how many times expansion is done. -Writing Customization Definitions +Customization Settings * Common Keywords:: Common keyword arguments for all kinds of customization declarations. @@ -775,6 +775,7 @@ Defining Menus various features. * Menu Separators:: Drawing a horizontal line through a menu. * Alias Menu Items:: Using command aliases in menu items. +* Toolkit Differences:: Not all toolkits provide the same features. Major and Minor Modes @@ -801,7 +802,7 @@ Major Modes * Derived Modes:: Defining a new major mode based on another major mode. * Basic Major Modes:: Modes that other modes are often derived from. -* Mode Hooks:: Hooks run at the end of major mode commands. +* Mode Hooks:: Hooks run at the end of major mode functions. * Tabulated List Mode:: Parent mode for buffers containing tabulated data. * Generic Modes:: Defining a simple major mode that supports comment syntax and Font Lock mode. @@ -845,6 +846,21 @@ Multiline Font Lock Constructs * Region to Refontify:: Controlling which region gets refontified after a buffer change. +Automatic Indentation of code + +* SMIE:: A simple minded indentation engine. + +Simple Minded Indentation Engine + +* SMIE setup:: SMIE setup and features. +* Operator Precedence Grammars:: A very simple parsing technique. +* SMIE Grammar:: Defining the grammar of a language. +* SMIE Lexer:: Defining tokens. +* SMIE Tricks:: Working around the parser's limitations. +* SMIE Indentation:: Specifying indentation rules. +* SMIE Indentation Helpers:: Helper functions for indentation rules. +* SMIE Indentation Example:: Sample indentation rules. + Documentation * Documentation Basics:: Where doc strings are defined and stored. @@ -1241,8 +1257,7 @@ Processes * Datagrams:: UDP network connections. * Low-Level Network:: Lower-level but more general function to create connections and servers. -* Misc Network:: Additional relevant functions for - network connections. +* Misc Network:: Additional relevant functions for net connections. * Serial Ports:: Communicating with serial ports. * Byte Packing:: Using bindat to pack and unpack binary data. @@ -1362,6 +1377,7 @@ Images * GIF Images:: Special features for GIF format. * TIFF Images:: Special features for TIFF format. * PostScript Images:: Special features for PostScript format. +* ImageMagick Images:: Special features available through ImageMagick. * Other Image Types:: Various other formats are supported. * Defining Images:: Convenient ways to define an image for later use. * Showing Images:: Convenient ways to display an image once @@ -1417,12 +1433,6 @@ Operating System Interface * Notifications:: Desktop notifications. * Dynamic Libraries:: On-demand loading of support libraries. -Preparing Lisp code for distribution - -* Packaging Basics:: The basic concepts of Emacs Lisp packages. -* Simple Packages:: How to package a single .el file. -* Multi-file Packages:: How to package multiple files. - Starting Up Emacs * Startup Summary:: Sequence of actions Emacs performs at startup. @@ -1441,6 +1451,13 @@ Terminal Input * Input Modes:: Options for how input is processed. * Recording Input:: Saving histories of recent or all input events. +Preparing Lisp code for distribution + +* Packaging Basics:: The basic concepts of Emacs Lisp packages. +* Simple Packages:: How to package a single .el file. +* Multi-file Packages:: How to package multiple files. +* Package Archives:: Maintaining package archives. + Tips and Conventions * Coding Conventions:: Conventions for clean and robust programs. diff --git a/doc/lispref/vol2.texi b/doc/lispref/vol2.texi index 97d357c4ace..c74e7c438b4 100644 --- a/doc/lispref/vol2.texi +++ b/doc/lispref/vol2.texi @@ -478,7 +478,7 @@ Functions * Closures:: Functions that enclose a lexical environment. * Obsolete Functions:: Declaring functions obsolete. * Inline Functions:: Defining functions that the compiler - will open code. + will expand inline. * Declaring Functions:: Telling the compiler that a function is defined. * Function Safety:: Determining whether a function is safe to call. * Related Topics:: Cross-references to specific Lisp primitives @@ -511,7 +511,7 @@ Common Problems Using Macros * Eval During Expansion:: Don't evaluate them; put them in the expansion. * Repeated Expansion:: Avoid depending on how many times expansion is done. -Writing Customization Definitions +Customization Settings * Common Keywords:: Common keyword arguments for all kinds of customization declarations. @@ -774,6 +774,7 @@ Defining Menus various features. * Menu Separators:: Drawing a horizontal line through a menu. * Alias Menu Items:: Using command aliases in menu items. +* Toolkit Differences:: Not all toolkits provide the same features. Major and Minor Modes @@ -800,7 +801,7 @@ Major Modes * Derived Modes:: Defining a new major mode based on another major mode. * Basic Major Modes:: Modes that other modes are often derived from. -* Mode Hooks:: Hooks run at the end of major mode commands. +* Mode Hooks:: Hooks run at the end of major mode functions. * Tabulated List Mode:: Parent mode for buffers containing tabulated data. * Generic Modes:: Defining a simple major mode that supports comment syntax and Font Lock mode. @@ -844,6 +845,21 @@ Multiline Font Lock Constructs * Region to Refontify:: Controlling which region gets refontified after a buffer change. +Automatic Indentation of code + +* SMIE:: A simple minded indentation engine. + +Simple Minded Indentation Engine + +* SMIE setup:: SMIE setup and features. +* Operator Precedence Grammars:: A very simple parsing technique. +* SMIE Grammar:: Defining the grammar of a language. +* SMIE Lexer:: Defining tokens. +* SMIE Tricks:: Working around the parser's limitations. +* SMIE Indentation:: Specifying indentation rules. +* SMIE Indentation Helpers:: Helper functions for indentation rules. +* SMIE Indentation Example:: Sample indentation rules. + Documentation * Documentation Basics:: Where doc strings are defined and stored. @@ -1361,6 +1377,7 @@ Images * GIF Images:: Special features for GIF format. * TIFF Images:: Special features for TIFF format. * PostScript Images:: Special features for PostScript format. +* ImageMagick Images:: Special features available through ImageMagick. * Other Image Types:: Various other formats are supported. * Defining Images:: Convenient ways to define an image for later use. * Showing Images:: Convenient ways to display an image once @@ -1416,12 +1433,6 @@ Operating System Interface * Notifications:: Desktop notifications. * Dynamic Libraries:: On-demand loading of support libraries. -Preparing Lisp code for distribution - -* Packaging Basics:: The basic concepts of Emacs Lisp packages. -* Simple Packages:: How to package a single .el file. -* Multi-file Packages:: How to package multiple files. - Starting Up Emacs * Startup Summary:: Sequence of actions Emacs performs at startup. @@ -1440,6 +1451,12 @@ Terminal Input * Input Modes:: Options for how input is processed. * Recording Input:: Saving histories of recent or all input events. +Preparing Lisp code for distribution + +* Packaging Basics:: The basic concepts of Emacs Lisp packages. +* Simple Packages:: How to package a single .el file. +* Multi-file Packages:: How to package multiple files. + Tips and Conventions * Coding Conventions:: Conventions for clean and robust programs. From 6bd40061bff73de98e9c4a684904a576466528ce Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 26 Apr 2012 14:10:02 -0400 Subject: [PATCH 209/564] ChangeLog fix --- etc/ChangeLog | 4 ---- 1 file changed, 4 deletions(-) diff --git a/etc/ChangeLog b/etc/ChangeLog index 6ca6017be98..6eadd33b6a7 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,7 +1,3 @@ -2012-04-26 Jambunathan K - - * org/README: Update Copyright year. - 2012-04-26 Jambunathan K * org/OrgOdtStyles.xml (OrgDescriptionList): Modify style. With From 657c21e46b0b1262421c27040e50bccb35b01cd6 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 26 Apr 2012 14:21:03 -0400 Subject: [PATCH 210/564] * lisp/emacs-lisp/assoc.el (aget): Fix dynamic-scoping issue. Fixes: debbugs:11352 --- lisp/ChangeLog | 1 + lisp/emacs-lisp/assoc.el | 1 + 2 files changed, 2 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index a02521ca147..87b525d7e66 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,6 @@ 2012-04-26 Stefan Monnier + * emacs-lisp/assoc.el (aget): Fix dynamic-scoping issue (bug#11352). * term/ns-win.el (ns-define-service): * progmodes/pascal.el (pascal-goto-defun): diff --git a/lisp/emacs-lisp/assoc.el b/lisp/emacs-lisp/assoc.el index d3185c444d7..8e6f7711d5b 100644 --- a/lisp/emacs-lisp/assoc.el +++ b/lisp/emacs-lisp/assoc.el @@ -101,6 +101,7 @@ returned. If no key-value pair matching KEY could be found in ALIST, or ALIST is nil then nil is returned. ALIST is not altered." + (defvar copy) (let ((copy (copy-alist alist))) (cond ((null alist) nil) ((progn (asort 'copy key) From cdb45185ee0bb3f5504bdb1e7c2dfdfcfb5a81c2 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 26 Apr 2012 14:57:49 -0400 Subject: [PATCH 211/564] ChangeLog fix --- lisp/org/ChangeLog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/org/ChangeLog b/lisp/org/ChangeLog index 806acd8f446..6af0e9bf6b9 100644 --- a/lisp/org/ChangeLog +++ b/lisp/org/ChangeLog @@ -35,7 +35,7 @@ 2012-04-26 Nicolas Goaziou - * org-footnote.el (org-footnote-normalize): Fix positionning in + * org-footnote.el (org-footnote-normalize): Fix positioning in HTML export without a footnote section. 2012-04-26 Madan Ramakrishnan (tiny change) From 5e0e5e3676bb46c303a4798c8e8a829f2e5343e4 Mon Sep 17 00:00:00 2001 From: Bastien Guerry Date: Thu, 26 Apr 2012 22:46:10 +0200 Subject: [PATCH 212/564] org-ctags.el (org-ctags-new-topic-template): Fix the option default value back again. This option was changed by error in this commit: http://git.savannah.gnu.org/cgit/emacs.git/diff/lisp/org/org-protocol.el?h=emacs-24&id=0fc749f9 I first overwrote this change by error, then backported it into Org git repo, then backported the error back into Emacs. This is now fixed. --- lisp/org/ChangeLog | 5 ----- lisp/org/org-ctags.el | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/lisp/org/ChangeLog b/lisp/org/ChangeLog index 6af0e9bf6b9..1f4c1f90997 100644 --- a/lisp/org/ChangeLog +++ b/lisp/org/ChangeLog @@ -16,11 +16,6 @@ * org-faces.el (org-date-selected): Fix docstring. -2012-04-26 Bastien Guerry - - * org-ctags.el (org-ctags-new-topic-template): Remove * character - in front of variable docstring. - 2012-04-26 Nicolas Goaziou * org-list.el (org-list-struct-indent): Follow diff --git a/lisp/org/org-ctags.el b/lisp/org/org-ctags.el index 5874646ff48..48656190a0c 100644 --- a/lisp/org/org-ctags.el +++ b/lisp/org/org-ctags.el @@ -188,7 +188,7 @@ See the ctags documentation for more information.") Created as a local variable in each buffer.") (defcustom org-ctags-new-topic-template - "<<%t>>\n\n\n\n\n\n" + "* <<%t>>\n\n\n\n\n\n" "Text to insert when creating a new org file via opening a hyperlink. The following patterns are replaced in the string: `%t' - replaced with the capitalized title of the hyperlink" From 36d55cd47912cf633a9f72567a9b9118f4f22776 Mon Sep 17 00:00:00 2001 From: Daiki Ueno Date: Thu, 26 Apr 2012 22:07:59 +0000 Subject: [PATCH 213/564] lisp/gnus/plstore.el: Fix buildbot failure with XEmacs --- lisp/gnus/ChangeLog | 6 ++++++ lisp/gnus/plstore.el | 14 +++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index be4d0675781..e25ffd933e6 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,9 @@ +2012-04-26 Daiki Ueno + + * plstore.el (plstore-called-interactively-p): New compat macro copied + from message.el. + (plstore-mode): Use it. + 2012-04-26 Daiki Ueno * plstore.el: Revive the editing feature. diff --git a/lisp/gnus/plstore.el b/lisp/gnus/plstore.el index 2f446c84071..6d5424e833d 100644 --- a/lisp/gnus/plstore.el +++ b/lisp/gnus/plstore.el @@ -547,6 +547,18 @@ If no one is selected, symmetric encryption will be performed. " (plstore-mode-original) (plstore-mode-decoded))) +(eval-when-compile + (defmacro plstore-called-interactively-p (kind) + (condition-case nil + (progn + (eval '(called-interactively-p 'any)) + ;; Emacs >=23.2 + `(called-interactively-p ,kind)) + ;; Emacs <23.2 + (wrong-number-of-arguments '(called-interactively-p)) + ;; XEmacs + (void-function '(interactive-p))))) + ;;;###autoload (define-derived-mode plstore-mode emacs-lisp-mode "PLSTORE" "Major mode for editing PLSTORE files." @@ -554,7 +566,7 @@ If no one is selected, symmetric encryption will be performed. " (add-hook 'write-contents-functions #'plstore--write-contents-functions) (define-key plstore-mode-map "\C-c\C-c" #'plstore-mode-toggle-display) ;; to create a new file with plstore-mode, mark it as already decoded - (if (called-interactively-p 'any) + (if (plstore-called-interactively-p 'any) (setq plstore-encoded t) (plstore-mode-decoded))) From a4289d0ee1edabe66d0de10929642bca36477670 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 26 Apr 2012 20:20:02 -0400 Subject: [PATCH 214/564] * doc/emacs/emacs.texi: Some fixes for detailed menu. --- doc/emacs/ChangeLog | 4 ++++ doc/emacs/emacs.texi | 52 +++++++++++++++++++++++++------------------- 2 files changed, 34 insertions(+), 22 deletions(-) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index 26f77f3aa6f..32a5e43b41b 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,3 +1,7 @@ +2012-04-27 Glenn Morris + + * emacs.texi: Some fixes for detailed menu. + 2012-04-26 Glenn Morris * emacs.texi: Add "et al." to authors. diff --git a/doc/emacs/emacs.texi b/doc/emacs/emacs.texi index 6d125edcf16..ca33b00494b 100644 --- a/doc/emacs/emacs.texi +++ b/doc/emacs/emacs.texi @@ -288,11 +288,11 @@ The Mark and the Region Killing and Moving Text * Deletion and Killing:: Commands that remove text. -* Yanking:: Recovering killed text. Moving text. (Pasting.) +* Yanking:: Commands that insert text. * Cut and Paste:: Clipboard and selections on graphical displays. -* Accumulating Text:: Other ways of copying text. +* Accumulating Text:: Other methods to add text to the buffer. * Rectangles:: Operating on text in rectangular areas. -* CUA Bindings:: Using @kbd{C-x}, @kbd{C-c}, @kbd{C-v} to kill and yank. +* CUA Bindings:: Using @kbd{C-x}/@kbd{C-c}/@kbd{C-v} to kill and yank. Deletion and Killing @@ -309,9 +309,9 @@ Yanking * Earlier Kills:: Yanking something killed some time ago. * Appending Kills:: Several kills in a row all yank together. -Killing and Yanking on Graphical Displays +"Cut and Paste" Operations on Graphical Displays -* Clipboard:: How Emacs interacts with the system clipboard. +* Clipboard:: How Emacs uses the system clipboard. * Primary Selection:: The temporarily selected text selection. * Secondary Selection:: Cutting without altering point and mark. @@ -328,7 +328,7 @@ Registers Controlling the Display * Scrolling:: Commands to move text up and down in a window. -* Recentering:: A scrolling command that centers the current line. +* Recentering:: A scroll command that centers the current line. * Auto Scrolling:: Redisplay scrolls text automatically when needed. * Horizontal Scrolling:: Moving text left and right in a window. * Narrowing:: Restricting display and editing to a portion @@ -486,7 +486,7 @@ Multiple Windows * Displaying Buffers:: How Emacs picks a window for displaying a buffer. * Window Convenience:: Convenience functions for window handling. -Displaying Buffers +Displaying a Buffer in a Window * Window Choice:: How @code{display-buffer} works. @@ -509,7 +509,7 @@ Frames and Graphical Displays * Tool Bars:: Enabling and disabling the tool bar. * Dialog Boxes:: Controlling use of dialog boxes. * Tooltips:: Displaying information at the current mouse position. -* Mouse Avoidance:: Moving the mouse pointer out of the way. +* Mouse Avoidance:: Preventing the mouse pointer from obscuring text. * Non-Window Terminals:: Multiple frames on terminals that show only one. * Text-Only Mouse:: Using the mouse in text terminals. @@ -540,7 +540,7 @@ International Character Set Support * Charsets:: How Emacs groups its internal character codes. * Bidirectional Editing:: Support for right-to-left scripts. -Modes +Major and Minor Modes * Major Modes:: Text mode vs. Lisp mode vs. C mode... * Minor Modes:: Each minor mode is a feature you can turn on @@ -600,7 +600,7 @@ Org Mode * TeX Print:: Commands for printing part of a file with TeX. * TeX Misc:: Customization of TeX mode, and related features. -Editing Enriched Text +Enriched Text * Enriched Mode:: Entering and exiting Enriched mode. * Hard and Soft Newlines:: There are two different kinds of newlines. @@ -783,7 +783,7 @@ Introduction to Version Control * Version Control Systems:: Supported version control back-end systems. * VCS Concepts:: Words and concepts related to version control. * VCS Merging:: How file conflicts are handled. -* VCS Changesets:: Changesets in version control. +* VCS Changesets:: How changes are grouped. * VCS Repositories:: Where version control repositories are stored. * Types of Log File:: The VCS log in contrast to the ChangeLog. @@ -798,10 +798,10 @@ VC Directory Mode * VC Directory Buffer:: What the buffer looks like and means. * VC Directory Commands:: Commands to use in a VC directory buffer. -Multiple Branches of a File +Version Control Branches * Switching Branches:: How to get to another existing branch. -* VC Pull:: Updating a branch from another branch. +* VC Pull:: Updating the contents of a branch. * Merging:: Transferring changes between branches. * Creating Branches:: How to start a new branch. @@ -828,12 +828,12 @@ Change Logs Tags Tables * Tag Syntax:: Tag syntax for various types of code and text files. -* Create Tags Table:: Creating a tags table with @code{etags}. +* Create Tags Table:: Creating a tags table with @command{etags}. * Etags Regexps:: Create arbitrary tags using regular expressions. * Select Tags Table:: How to visit a tags table. * Find Tag:: Commands to find the definition of a specific tag. * Tags Search:: Using a tags table for searching and replacing. -* List Tags:: Listing and finding tags defined in a file. +* List Tags:: Using tags for completion, and listing them. @ifnottex Merging Files with Emerge @@ -961,7 +961,7 @@ Document Viewing Sending Mail -* Mail Format:: Format of the mail being composed. +* Mail Format:: Format of a mail message. * Mail Headers:: Details of some standard mail header fields. * Mail Aliases:: Abbreviating and grouping mail addresses. * Mail Commands:: Special commands for editing mail being composed. @@ -1012,6 +1012,13 @@ Gnus * Gnus Group Buffer:: A short description of Gnus group commands. * Gnus Summary Buffer:: A short description of Gnus summary commands. +Document Viewing + +* DocView Navigation:: Navigating DocView buffers. +* DocView Searching:: Searching inside documents. +* DocView Slicing:: Specifying which part of a page is displayed. +* DocView Conversion:: Influencing and triggering conversion. + Running Shell Commands from Emacs * Single Shell:: How to run one shell command and return. @@ -1061,10 +1068,10 @@ Customization * Variables:: Many Emacs commands examine Emacs variables to decide what to do; by setting variables, you can control their functioning. -* Key Bindings:: Keymaps say what command each key runs. +* Key Bindings:: The keymaps say what command each key runs. By changing them, you can "redefine" keys. * Init File:: How to write common customizations in the - @file{.emacs} file. + initialization file. Easy Customization Interface @@ -1098,7 +1105,7 @@ Customizing Key Bindings * Local Keymaps:: Major and minor modes have their own keymaps. * Minibuffer Maps:: The minibuffer uses its own local keymaps. * Rebinding:: How to redefine one key's meaning conveniently. -* Init Rebinding:: Rebinding keys with your init file, @file{.emacs}. +* Init Rebinding:: Rebinding keys with your initialization file. * Modifier Keys:: Using modifier keys in key bindings. * Function Keys:: Rebinding terminal function keys. * Named ASCII Chars:: Distinguishing @key{TAB} from @kbd{C-i}, and so on. @@ -1107,7 +1114,7 @@ Customizing Key Bindings before it can be executed. This is done to protect beginners from surprises. -The Init File, @file{~/.emacs} +The Emacs Initialization File * Init Syntax:: Syntax of constants in Emacs Lisp. * Init Examples:: How to do some things with an init file. @@ -1167,7 +1174,7 @@ GTK resources * GTK Resource Basics:: Basic usage of GTK+ resources. * GTK Widget Names:: How GTK+ widgets are named. -* GTK Names in Emacs:: GTK+ widgets used by Emacs. +* GTK Names in Emacs:: GTK widgets used by Emacs. * GTK styles:: What can be customized in a GTK widget. Emacs and Mac OS / GNUstep @@ -1183,7 +1190,8 @@ Emacs and Microsoft Windows/MS-DOS * Text and Binary:: Text files use CRLF to terminate lines. * Windows Files:: File-name conventions on Windows. * ls in Lisp:: Emulation of @code{ls} for Dired. -* Windows HOME:: Where Emacs looks for your @file{.emacs}. +* Windows HOME:: Where Emacs looks for your @file{.emacs} and + where it starts up. * Windows Keyboard:: Windows-specific keyboard features. * Windows Mouse:: Windows-specific mouse features. * Windows Processes:: Running subprocesses on Windows. From 8da2b7872ccc8e408047aa4b492e84817508b902 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 26 Apr 2012 20:23:54 -0400 Subject: [PATCH 215/564] Fix previous change --- doc/emacs/emacs.texi | 7 ------- 1 file changed, 7 deletions(-) diff --git a/doc/emacs/emacs.texi b/doc/emacs/emacs.texi index ca33b00494b..13f60e8cfdf 100644 --- a/doc/emacs/emacs.texi +++ b/doc/emacs/emacs.texi @@ -952,13 +952,6 @@ Customizing the Calendar and Diary * Sexp Diary Entries:: More flexible diary entries. @end ifnottex -Document Viewing - -* DocView Navigation:: Navigating DocView buffers. -* DocView Searching:: Searching inside documents. -* DocView Slicing:: Specifying which part of a page is displayed. -* DocView Conversion:: Influencing and triggering conversion. - Sending Mail * Mail Format:: Format of a mail message. From 797e6e88e9cfae3c03287ef198223e7152da7c33 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 26 Apr 2012 20:30:56 -0400 Subject: [PATCH 216/564] * emacs-lisp/assoc.el: Move to obsolete/. --- etc/NEWS | 5 +++++ lisp/ChangeLog | 4 ++++ lisp/{emacs-lisp => obsolete}/assoc.el | 1 + 3 files changed, 10 insertions(+) rename lisp/{emacs-lisp => obsolete}/assoc.el (99%) diff --git a/etc/NEWS b/etc/NEWS index 254e774a65e..156933410ba 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -144,6 +144,11 @@ server properties. ** Obsolete packages: +*** assoc.el +In most cases, assoc+member+push+delq work just as well. +And in any case it's just a terrible package: ugly semantics, terrible +inefficiency, and not namespace-clean. + *** mailpost.el *** mouse-sel.el diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 87b525d7e66..9afa98fc2fe 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-04-27 Stefan Monnier + + * emacs-lisp/assoc.el: Move to obsolete/. + 2012-04-26 Stefan Monnier * emacs-lisp/assoc.el (aget): Fix dynamic-scoping issue (bug#11352). diff --git a/lisp/emacs-lisp/assoc.el b/lisp/obsolete/assoc.el similarity index 99% rename from lisp/emacs-lisp/assoc.el rename to lisp/obsolete/assoc.el index 8e6f7711d5b..d0738dfeb2c 100644 --- a/lisp/emacs-lisp/assoc.el +++ b/lisp/obsolete/assoc.el @@ -4,6 +4,7 @@ ;; Author: Barry A. Warsaw ;; Keywords: extensions +;; Obsolete-since: 24.2 ;; This file is part of GNU Emacs. From f2c3a9eb8528c16e1e917b97b4ced689c92d47cf Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Fri, 27 Apr 2012 10:15:51 +0800 Subject: [PATCH 217/564] Add NEWS entry pointing to ORG-NEWS. Delete non-Emacs-24 specific items from ORG-NEWS (since standalone Org mode has its own NEWS, these are not necessary). --- etc/NEWS | 5 ++++- etc/ORG-NEWS | 19 +------------------ 2 files changed, 5 insertions(+), 19 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index e87bcaec0f0..d4c702626bb 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -657,7 +657,7 @@ by default. (Its name is misleading, since it has nothing to do with MIME attachments.) The old name is now an obsolete alias to the new name. -** MH-E has been upgraded to MH-E version 8.3.1. +** MH-E has been updated to MH-E version 8.3.1. See MH-E-NEWS for details. ** Modula-2 mode provides auto-indentation. @@ -669,6 +669,9 @@ Completion is now performed via `completion-at-point', bound to C-M-i or M-TAB. If `nxml-bind-meta-tab-to-complete-flag' is non-nil (the default), this performs tag completion. +** Org mode has been updated to version 7.8.09. +See ORG-NEWS for details. + ** Prolog mode has been completely revamped, with lots of additional functionality such as more intelligent indentation, electricity, support for more variants, including Mercury, and a lot more. diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS index e0d9ccca72c..a6b31cf1249 100644 --- a/etc/ORG-NEWS +++ b/etc/ORG-NEWS @@ -7,24 +7,6 @@ Please send Org bug reports to emacs-orgmode@gnu.org. * Incompatible changes -** Emacs 21 support has been dropped - :PROPERTIES: - :OrgVersion: 7.01 - :END: - - Do not use Org mode 7.xx with Emacs 21, use [[http://orgmode.org/org-6.36c.zip][version 6.36c]] instead. - -** XEmacs support requires the XEmacs development version - :PROPERTIES: - :OrgVersion: 7.01 - :END: - - To use Org mode 7.xx with XEmacs, you need to run the developer - version of XEmacs. We were about to drop XEmacs support entirely, - but Michael Sperber stepped in and made changes to XEmacs that made - it easier to keep the support. Thanks to Michael for this - last-minute save. - ** New keys for TODO sparse trees :PROPERTIES: :OrgVersion: 7.01 @@ -947,6 +929,7 @@ to mean anything. by viewing from the agenda. This was a request by Matt Lundin. + * License This file is part of GNU Emacs. From c5bb756916baa63cc663d68d4c24e5ad33a764e8 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Fri, 27 Apr 2012 10:24:38 +0800 Subject: [PATCH 218/564] Fix for tool-bar confusion in read-key. * lisp/subr.el (read-key): Avoid running filter function when setting up temporary tool bar entries. Fixes: debbugs:9922 --- lisp/ChangeLog | 5 +++++ lisp/subr.el | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 6d3fcf971b1..baa8045ccc3 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-04-27 Chong Yidong + + * subr.el (read-key): Avoid running filter function when setting + up temporary tool bar entries (Bug#9922). + 2012-04-26 Andreas Schwab * vc/vc-git.el (vc-git-state): Fix regexp matching diff output. diff --git a/lisp/subr.el b/lisp/subr.el index 3b120e6ff6a..9b293bb21ac 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -2019,7 +2019,10 @@ some sort of escape sequence, the ambiguity is resolved via `read-key-delay'." (let ((map (make-sparse-keymap))) ;; Don't hide the menu-bar and tool-bar entries. (define-key map [menu-bar] (lookup-key global-map [menu-bar])) - (define-key map [tool-bar] (lookup-key global-map [tool-bar])) + (define-key map [tool-bar] + ;; This hack avoids evaluating the :filter (Bug#9922). + (or (cdr (assq 'tool-bar global-map)) + (lookup-key global-map [tool-bar]))) map)) (aref (catch 'read-key (read-key-sequence-vector prompt nil t)) 0)) (cancel-timer timer) From b360839071ef6c7a9e917fe57a4aaeb39138e8c0 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Fri, 27 Apr 2012 10:48:38 +0800 Subject: [PATCH 219/564] Fix missing prefix warning in pascal.el. * progmodes/pascal.el (pascal--extra-indent): Rename from ind, to fix "missing prefix" warning. All callers changed. --- lisp/ChangeLog | 5 +++++ lisp/progmodes/pascal.el | 47 ++++++++++++++++++++-------------------- 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 9afa98fc2fe..0b0065f520e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-04-27 Chong Yidong + + * progmodes/pascal.el (pascal--extra-indent): Rename from ind, to + fix "missig prefix" warning. All callers changed. + 2012-04-27 Stefan Monnier * emacs-lisp/assoc.el: Move to obsolete/. diff --git a/lisp/progmodes/pascal.el b/lisp/progmodes/pascal.el index 5a6f4e20fbc..62ba9418ced 100644 --- a/lisp/progmodes/pascal.el +++ b/lisp/progmodes/pascal.el @@ -467,6 +467,8 @@ no args, if that value is non-nil." ;;; ;;; Interactive functions ;;; +(defvar pascal--extra-indent 0) + (defun pascal-insert-block () "Insert Pascal begin ... end; block in the code with right indentation." (interactive) @@ -757,14 +759,14 @@ on the line which ends a function or procedure named NAME." ;;; Indentation ;;; (defconst pascal-indent-alist - '((block . (+ ind pascal-indent-level)) - (case . (+ ind pascal-case-indent)) - (caseblock . ind) (cpp . 0) - (declaration . (+ ind pascal-indent-level)) + '((block . (+ pascal--extra-indent pascal-indent-level)) + (case . (+ pascal--extra-indent pascal-case-indent)) + (caseblock . pascal--extra-indent) (cpp . 0) + (declaration . (+ pascal--extra-indent pascal-indent-level)) (paramlist . (pascal-indent-paramlist t)) (comment . (pascal-indent-comment)) - (defun . ind) (contexp . ind) - (unknown . ind) (string . 0) (progbeg . 0))) + (defun . pascal--extra-indent) (contexp . pascal--extra-indent) + (unknown . pascal--extra-indent) (string . 0) (progbeg . 0))) (defun pascal-indent-command () "Indent for special part of code." @@ -786,12 +788,11 @@ on the line which ends a function or procedure named NAME." (if (looking-at "[ \t]+$") (skip-chars-forward " \t")))) -(defvar ind) ;Used via `eval' in pascal-indent-alist. (defun pascal-indent-line () "Indent current line as a Pascal statement." (let* ((indent-str (pascal-calculate-indent)) (type (car indent-str)) - (ind (car (cdr indent-str)))) + (pascal--extra-indent (car (cdr indent-str)))) ;; Labels should not be indented. (if (and (looking-at "^[0-9a-zA-Z]+[ \t]*:[^=]") (not (eq type 'declaration))) @@ -803,13 +804,13 @@ on the line which ends a function or procedure named NAME." ()) (; Other things should have no extra indent (looking-at pascal-noindent-re) - (indent-to ind)) + (indent-to pascal--extra-indent)) (; Nested functions should be indented (looking-at pascal-defun-re) (if (and pascal-indent-nested-functions (eq type 'defun)) - (indent-to (+ ind pascal-indent-level)) - (indent-to ind))) + (indent-to (+ pascal--extra-indent pascal-indent-level)) + (indent-to pascal--extra-indent))) (; But most lines are treated this way (indent-to (eval (cdr (assoc type pascal-indent-alist)))) )))) @@ -949,7 +950,7 @@ Do not count labels, case-statements or records." (point-marker) (re-search-backward "\\" nil t))) (beg (point)) - (ind 0)) + (pascal--extra-indent 0)) ;; Get right indent (while (< (point) end) (if (re-search-forward @@ -959,8 +960,8 @@ Do not count labels, case-statements or records." (if (< (point) end) (progn (delete-horizontal-space) - (if (> (current-column) ind) - (setq ind (current-column))) + (if (> (current-column) pascal--extra-indent) + (setq pascal--extra-indent (current-column))) (pascal-end-of-statement)))) (goto-char beg) ;; Indent all case statements @@ -969,7 +970,7 @@ Do not count labels, case-statements or records." "^[ \t]*[^][ \t,\\.:]+[ \t]*\\(,[ \t]*[^ \t,:]+[ \t]*\\)*:" (marker-position end) 'move) (forward-char -1)) - (indent-to (1+ ind)) + (indent-to (1+ pascal--extra-indent)) (if (/= (following-char) ?:) () (forward-char 1) @@ -1017,7 +1018,7 @@ indent of the current line in parameterlist." (max (progn (pascal-declaration-end) (point)) pos)))) - ind) + pascal--extra-indent) (goto-char stpos) ;; Indent lines in record block @@ -1031,13 +1032,13 @@ indent of the current line in parameterlist." (forward-line 1))) ;; Do lineup - (setq ind (pascal-get-lineup-indent stpos edpos lineup)) + (setq pascal--extra-indent (pascal-get-lineup-indent stpos edpos lineup)) (goto-char stpos) (while (and (<= (point) edpos) (not (eobp))) (if (search-forward lineup (point-at-eol) 'move) (forward-char -1)) (delete-horizontal-space) - (indent-to ind) + (indent-to pascal--extra-indent) (if (not (looking-at lineup)) (forward-line 1) ; No more indent if there is no : or = (forward-char 1) @@ -1056,7 +1057,7 @@ indent of the current line in parameterlist." ;from b to e nicely. The lineup string is str." (defun pascal-get-lineup-indent (b e str) (save-excursion - (let ((ind 0) + (let ((pascal--extra-indent 0) (reg (concat str "\\|\\(\\\\)\\|" pascal-defun-re))) (goto-char b) ;; Get rightmost position @@ -1071,14 +1072,14 @@ indent of the current line in parameterlist." (t (goto-char (match-beginning 0)) (skip-chars-backward " \t") - (if (> (current-column) ind) - (setq ind (current-column))) + (if (> (current-column) pascal--extra-indent) + (setq pascal--extra-indent (current-column))) (goto-char (match-end 0)) (end-of-line) )))) ;; In case no lineup was found - (if (> ind 0) - (1+ ind) + (if (> pascal--extra-indent 0) + (1+ pascal--extra-indent) ;; No lineup-string found (goto-char b) (end-of-line) From 15cd8efd049338ec4a42ba00e96d2baf2c3cc51a Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Fri, 27 Apr 2012 13:40:46 +0800 Subject: [PATCH 220/564] Fix application of menu-bar-mode etc. by X resources. * lisp/startup.el (x-apply-session-resources): New function. * lisp/term/ns-win.el (ns-initialize-window-system): * lisp/term/w32-win.el (w32-initialize-window-system): * lisp/term/x-win.el (x-initialize-window-system): Use it to properly set menu-bar-mode and other vars from X resources, even if the initial frame is not a window-system frame (Bug#2299). --- lisp/ChangeLog | 8 +++++++ lisp/startup.el | 54 +++++++++++++++++++++++--------------------- lisp/term/ns-win.el | 1 + lisp/term/w32-win.el | 1 + lisp/term/x-win.el | 1 + 5 files changed, 39 insertions(+), 26 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f88a386178f..6710082665a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,13 @@ 2012-04-27 Chong Yidong + * startup.el (x-apply-session-resources): New function. + + * term/ns-win.el (ns-initialize-window-system): + * term/w32-win.el (w32-initialize-window-system): + * term/x-win.el (x-initialize-window-system): Use it to properly + set menu-bar-mode and other vars from X resources, even if the + initial frame is not a window-system frame (Bug#2299). + * subr.el (read-key): Avoid running filter function when setting up temporary tool bar entries (Bug#9922). diff --git a/lisp/startup.el b/lisp/startup.el index d6e73023699..862e14f0c9d 100644 --- a/lisp/startup.el +++ b/lisp/startup.el @@ -905,33 +905,12 @@ Amongst another things, it parses the command-line arguments." (run-hooks 'before-init-hook) - ;; Under X, this creates the X frame and deletes the terminal frame. + ;; Under X, create the X frame and delete the terminal frame. (unless (daemonp) - - ;; If X resources are available, use them to initialize the values - ;; of `tool-bar-mode' and `menu-bar-mode', as well as the value of - ;; `no-blinking-cursor' and the `cursor' face. - (cond - ((or noninteractive emacs-basic-display) - (setq menu-bar-mode nil - tool-bar-mode nil - no-blinking-cursor t)) - ((memq initial-window-system '(x w32 ns)) - (let ((no-vals '("no" "off" "false" "0"))) - (if (member (x-get-resource "menuBar" "MenuBar") no-vals) - (setq menu-bar-mode nil)) - (if (member (x-get-resource "toolBar" "ToolBar") no-vals) - (setq tool-bar-mode nil)) - (if (member (x-get-resource "cursorBlink" "CursorBlink") - no-vals) - (setq no-blinking-cursor t))) - ;; If the cursorColor X resource exists, alter the `cursor' face - ;; spec, but mark it as changed outside of Customize. - (let ((color (x-get-resource "cursorColor" "Foreground"))) - (when color - (put 'cursor 'theme-face - `((changed ((t :background ,color))))) - (put 'cursor 'face-modified t))))) + (if (or noninteractive emacs-basic-display) + (setq menu-bar-mode nil + tool-bar-mode nil + no-blinking-cursor t)) (frame-initialize)) (when (fboundp 'x-create-frame) @@ -1266,6 +1245,29 @@ the `--debug-init' option to view a complete error backtrace." (with-no-warnings (emacs-session-restore x-session-previous-id)))) +(defun x-apply-session-resources () + "Apply X resources which specify initial values for Emacs variables. +This is called from a window-system initialization function, such +as `x-initialize-window-system' for X, either at startup (prior +to reading the init file), or afterwards when the user first +opens a graphical frame. + +This can set the values of `menu-bar-mode', `tool-bar-mode', and +`no-blinking-cursor', as well as the `cursor' face. Changed +settings will be marked as \"CHANGED outside of Customize\"." + (let ((no-vals '("no" "off" "false" "0")) + (settings '(("menuBar" "MenuBar" menu-bar-mode nil) + ("toolBar" "ToolBar" tool-bar-mode nil) + ("cursorBlink" "CursorBlink" no-blinking-cursor t)))) + (dolist (x settings) + (if (member (x-get-resource (nth 0 x) (nth 1 x)) no-vals) + (set (nth 2 x) (nth 3 x))))) + (let ((color (x-get-resource "cursorColor" "Foreground"))) + (when color + (put 'cursor 'theme-face + `((changed ((t :background ,color))))) + (put 'cursor 'face-modified t)))) + (defcustom initial-scratch-message (purecopy "\ ;; This buffer is for notes you don't want to save, and for Lisp evaluation. ;; If you want to create a file, visit that file with C-x C-f, diff --git a/lisp/term/ns-win.el b/lisp/term/ns-win.el index feac0f1c537..6dd9eed0d2b 100644 --- a/lisp/term/ns-win.el +++ b/lisp/term/ns-win.el @@ -923,6 +923,7 @@ See the documentation of `create-fontset-from-fontset-spec' for the format.") ;; http://lists.gnu.org/archive/html/emacs-devel/2011-06/msg00505.html (ns-set-resource nil "ApplePressAndHoldEnabled" "NO") + (x-apply-session-resources) (setq ns-initialized t)) (add-to-list 'handle-args-function-alist '(ns . x-handle-args)) diff --git a/lisp/term/w32-win.el b/lisp/term/w32-win.el index 3e1c4161667..a4fac3441db 100644 --- a/lisp/term/w32-win.el +++ b/lisp/term/w32-win.el @@ -309,6 +309,7 @@ See the documentation of `create-fontset-from-fontset-spec' for the format.") ;; Set to a system sound if you want a fancy bell. (set-message-beep 'ok) + (x-apply-session-resources) (setq w32-initialized t)) (add-to-list 'handle-args-function-alist '(w32 . x-handle-args)) diff --git a/lisp/term/x-win.el b/lisp/term/x-win.el index 21d49267b21..498cc01fe22 100644 --- a/lisp/term/x-win.el +++ b/lisp/term/x-win.el @@ -1445,6 +1445,7 @@ Request data types in the order specified by `x-select-request-type'." ;; :help "Paste (yank) text most recently cut/copied") ;; nil)) + (x-apply-session-resources) (setq x-initialized t)) (add-to-list 'handle-args-function-alist '(x . x-handle-args)) From 578c1d4bf1e11476a030b8b3b49d879e8533ce03 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 26 Apr 2012 23:08:14 -0700 Subject: [PATCH 221/564] Fix dates of some merged ChangeLog entries --- doc/emacs/ChangeLog | 8 +++----- doc/misc/ChangeLog | 1 + etc/ChangeLog | 2 +- lisp/ChangeLog | 2 +- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index 50c3d868eb3..1a785ffa4c8 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -2,8 +2,6 @@ * emacs.texi: Some fixes for detailed menu. -2012-04-26 Glenn Morris - * emacs.texi: Add "et al." to authors. * ack.texi, basic.texi, buffers.texi, building.texi: @@ -14,10 +12,10 @@ * search.texi, trouble.texi, windows.texi: Use Texinfo recommended convention for quotes+punctuation. -2012-04-25 Eli Zaretskii +2012-04-27 Eli Zaretskii - * mule.texi (Bidirectional Editing): Improve indexing. Minor - wording tweaks. + * mule.texi (Bidirectional Editing): Improve indexing. + Minor wording tweaks. 2012-04-15 Chong Yidong diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index 3d0900db9e4..0a013e18364 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -8,6 +8,7 @@ * faq.texi (Major packages and programs): Remove section. There is no point listing 6 packages (cf etc/MORE.STUFF). (Finding Emacs and related packages): Move "Spell-checkers" here. + 2012-04-22 Michael Albinus * dbus.texi (Version): New node. diff --git a/etc/ChangeLog b/etc/ChangeLog index 1200b991597..f34e5d6d688 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,4 +1,4 @@ -2012-04-26 Jambunathan K +2012-04-27 Jambunathan K * org/OrgOdtStyles.xml (OrgDescriptionList): Modify style. With this change, in a description list, if the description paragraph diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 6710082665a..d8af3b5aaba 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -34,7 +34,7 @@ * progmodes/which-func.el (which-func-current): Quote % characters for mode-line processing. -2012-04-21 Chong Yidong +2012-04-27 Chong Yidong * xml.el (xml-parse-region, xml-parse-tag): Avoid errors due to reaching eob (Bug#11286). From 0cd38783c0395c0c070a578cd73cd85211791923 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 26 Apr 2012 23:21:10 -0700 Subject: [PATCH 222/564] Fix org-ctags.el change from trunk 2012-04-09T13:05:48Z!cyd@gnu.org * lisp/org/org-ctags.el (org-ctags-new-topic-template): Revert 2012-04-09 removal of * from defcustom value, not doc. --- lisp/org/ChangeLog | 7 ++++++- lisp/org/org-ctags.el | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/lisp/org/ChangeLog b/lisp/org/ChangeLog index c340fd45df3..8cdc90109b3 100644 --- a/lisp/org/ChangeLog +++ b/lisp/org/ChangeLog @@ -1,3 +1,8 @@ +2012-04-27 Glenn Morris + + * org-ctags.el (org-ctags-new-topic-template): + Revert 2012-04-09 removal of * from defcustom value, not doc. + 2012-04-27 Nicolas Goaziou * org-table.el (org-table-number-fraction): Fix typo. @@ -21950,7 +21955,7 @@ ;; add-log-time-zone-rule: t ;; End: - Copyright (C) 2008-2012 Free Software Foundation, Inc. + Copyright (C) 2008-2012 Free Software Foundation, Inc. This file is part of GNU Emacs. diff --git a/lisp/org/org-ctags.el b/lisp/org/org-ctags.el index 8b5bc6ecdf6..48656190a0c 100644 --- a/lisp/org/org-ctags.el +++ b/lisp/org/org-ctags.el @@ -188,7 +188,7 @@ See the ctags documentation for more information.") Created as a local variable in each buffer.") (defcustom org-ctags-new-topic-template - " <<%t>>\n\n\n\n\n\n" + "* <<%t>>\n\n\n\n\n\n" "Text to insert when creating a new org file via opening a hyperlink. The following patterns are replaced in the string: `%t' - replaced with the capitalized title of the hyperlink" From d1d2e2e86be31c26bfa158b8c15c1aa5e2e776a2 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Fri, 27 Apr 2012 22:16:02 +0800 Subject: [PATCH 223/564] * lisp/vc/diff.el (diff-sentinel): Go to bob. Fixes: debbugs:10259 --- lisp/ChangeLog | 2 ++ lisp/vc/diff.el | 1 + 2 files changed, 3 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index d8af3b5aaba..eaf07c087a2 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2012-04-27 Chong Yidong + * vc/diff.el (diff-sentinel): Go to bob (Bug#10259). + * startup.el (x-apply-session-resources): New function. * term/ns-win.el (ns-initialize-window-system): diff --git a/lisp/vc/diff.el b/lisp/vc/diff.el index 2eefdee1836..6cfee52cbb5 100644 --- a/lisp/vc/diff.el +++ b/lisp/vc/diff.el @@ -67,6 +67,7 @@ delete the temporary files so named." (if old-temp-file (delete-file old-temp-file)) (if new-temp-file (delete-file new-temp-file)) (diff-setup-whitespace) + (goto-char (point-min)) (save-excursion (goto-char (point-max)) (let ((inhibit-read-only t)) From 9723e05aa3a92b788da35a3f3b906fc1a9508fe5 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Sat, 28 Apr 2012 00:33:57 +0800 Subject: [PATCH 224/564] Bump version to 24.0.96. Regenerate AUTHORS and ldefs-boot.el. --- README | 2 +- configure.in | 2 +- doc/emacs/emacsver.texi | 2 +- doc/man/emacs.1 | 2 +- etc/AUTHORS | 108 +- lisp/ldefs-boot.el | 1487 +++++++++-------- msdos/sed2v2.inp | 2 +- nextstep/Cocoa/Emacs.base/Contents/Info.plist | 4 +- .../Resources/English.lproj/InfoPlist.strings | 4 +- .../Emacs.base/Resources/Emacs.desktop | 2 +- .../Emacs.base/Resources/Info-gnustep.plist | 4 +- nt/config.nt | 2 +- nt/emacs.rc | 8 +- nt/emacsclient.rc | 8 +- nt/makefile.w32-in | 2 +- 15 files changed, 827 insertions(+), 812 deletions(-) diff --git a/README b/README index 8710ad438aa..aebfaa87871 100644 --- a/README +++ b/README @@ -2,7 +2,7 @@ Copyright (C) 2001-2012 Free Software Foundation, Inc. See the end of the file for license conditions. -This directory tree holds version 24.0.95 of GNU Emacs, the extensible, +This directory tree holds version 24.0.96 of GNU Emacs, the extensible, customizable, self-documenting real-time display editor. The file INSTALL in this directory says how to build and install GNU diff --git a/configure.in b/configure.in index e848964e7bc..091edbbff2e 100644 --- a/configure.in +++ b/configure.in @@ -22,7 +22,7 @@ dnl You should have received a copy of the GNU General Public License dnl along with GNU Emacs. If not, see . AC_PREREQ(2.65) -AC_INIT(emacs, 24.0.95) +AC_INIT(emacs, 24.0.96) AC_CONFIG_HEADER(src/config.h:src/config.in) AC_CONFIG_SRCDIR(src/lisp.h) AC_CONFIG_AUX_DIR(build-aux) diff --git a/doc/emacs/emacsver.texi b/doc/emacs/emacsver.texi index 809fbcb6442..dd0274e6bcb 100644 --- a/doc/emacs/emacsver.texi +++ b/doc/emacs/emacsver.texi @@ -1,4 +1,4 @@ @c It would be nicer to generate this using configure and @version@. @c However, that would mean emacsver.texi would always be newer @c then the info files in release tarfiles. -@set EMACSVER 24.0.95 +@set EMACSVER 24.0.96 diff --git a/doc/man/emacs.1 b/doc/man/emacs.1 index 94d2a0c35bf..4047077f44e 100644 --- a/doc/man/emacs.1 +++ b/doc/man/emacs.1 @@ -1,5 +1,5 @@ .\" See section COPYING for copyright and redistribution information. -.TH EMACS 1 "2007 April 13" "GNU Emacs 24.0.95" +.TH EMACS 1 "2007 April 13" "GNU Emacs 24.0.96" . . .SH NAME diff --git a/etc/AUTHORS b/etc/AUTHORS index 1cf3a523596..867441b5e0c 100644 --- a/etc/AUTHORS +++ b/etc/AUTHORS @@ -71,9 +71,9 @@ Alan Mackenzie: wrote cc-awk.el and co-wrote cc-align.el cc-cmds.el cc-defs.el cc-engine.el cc-fonts.el cc-langs.el cc-mode.el cc-styles.el cc-vars.el and changed cc-mode.texi lread.c programs.texi font-lock.el font-core.el - isearch.el lisp.el modes.texi cc-subword.el display.texi os.texi - search.texi startup.el subr.el text.texi INSTALL.BZR add-log.el - buffers.texi bytecomp.el callint.c cc-fix.el and 22 other files + isearch.el lisp.el modes.texi cc-menus.el cc-subword.el display.texi + os.texi search.texi startup.el subr.el text.texi INSTALL.BZR add-log.el + buffers.texi bytecomp.el callint.c and 22 other files Alan Shutko: changed diary-lib.el calendar.el bindings.el cal-hebrew.el easy-mmode.el gnus-sum.el ibuf-ext.el ibuffer.el lunar.el macros.el @@ -197,7 +197,7 @@ Andreas Rottmann: changed emacsclient.1 emacsclient.c misc.texi server.el Andreas Schwab: changed Makefile.in configure.in lisp.h xdisp.c alloc.c process.c coding.c files.el keyboard.c xterm.c editfns.c emacs.c fns.c print.c eval.c fileio.c lread.c sysdep.c dired.el xfns.c buffer.c - and 577 other files + and 579 other files Andreas Seltenreich: changed nnweb.el gnus.texi message.el gnus-sum.el gnus.el nnslashdot.el gnus-srvr.el gnus-util.el mm-url.el mm-uu.el @@ -280,6 +280,8 @@ Artem Chuprina: changed message.el Ashwin Ram: wrote refer.el +Atsuo Ohki: changed lread.c + Aubrey Jaffer: changed info.el unexelf.c Axel Boldt: changed ehelp.el electric.el @@ -299,10 +301,10 @@ Barry Fishman: changed gnu-linux.h Bastien Guerry: wrote gnus-bookmark.el org-latex.el and co-wrote org-bibtex.el org-list.el org-protocol.el org-src.el and changed org.el org-agenda.el org-html.el org-clock.el org-exp.el - org.texi org-table.el org-capture.el org-publish.el org-timer.el + org-table.el org.texi org-capture.el org-publish.el org-timer.el org-export-latex.el org-archive.el org-ascii.el org-colview.el - org-exp-blocks.el org-mobile.el ob.el org-eshell.el bookmark.el info.el - org-attach.el and 36 other files + org-exp-blocks.el org-faces.el org-mobile.el ob.el org-eshell.el + org-pcomplete.el bookmark.el and 36 other files Ben A. Mesander: co-wrote erc-dcc.el @@ -466,10 +468,10 @@ and co-wrote idlw-help.el idlw-shell.el idlwave.el org-bbdb.el org-bibtex.el org-entities.el org-gnus.el org-list.el org-pcomplete.el org-src.el and changed org-latex.el org.texi org-publish.el orgcard.tex - org-export-latex.el org-colview-xemacs.el org-docbook.el org-attach.el - org-mouse.el org-protocol.el org-mac-message.el org-wl.el org-crypt.el + org-export-latex.el org-docbook.el org-attach.el org-mouse.el + org-protocol.el org-mac-message.el org-wl.el org-crypt.el org-freemind.el idlw-rinfo.el org-exp-blocks.el org-habit.el org-mhe.el - org-plot.el org-special-blocks.el reftex.texi and 24 other files + org-plot.el org-special-blocks.el reftex.texi ob.el and 23 other files Caveh Jalali: changed configure.in intel386.h sol2-4.h @@ -499,8 +501,8 @@ Chong Yidong: wrote compile-tests.el dichromacy-theme.el and co-wrote longlines.el tango-dark-theme.el tango-theme.el and changed xdisp.c simple.el display.texi files.el frames.texi files.texi cus-edit.el keyboard.c custom.el text.texi package.el - startup.el faces.el xterm.c emacs.texi misc.texi subr.el image.c - mouse.el custom.texi xfns.c and 845 other files + startup.el faces.el misc.texi subr.el xterm.c emacs.texi custom.texi + image.c mouse.el xfns.c and 846 other files Chris Chase: co-wrote idlw-shell.el idlwave.el @@ -589,7 +591,7 @@ Christopher J. White: changed url-http.el Christopher Oliver: changed mouse.el -Christopher Schmidt: changed ibuffer.el +Christopher Schmidt: changed ibuffer.el files.texi Christopher Suckling: co-wrote org-mac-message.el @@ -663,12 +665,12 @@ and co-wrote hideshow.el and changed vc.el Makefile.in configure.in vc-hg.el vc-git.el vc-bzr.el sysdep.c emacs.c process.c vc-cvs.el lisp.h term.c vc-hooks.el xterm.c keyboard.c vc-svn.el xterm.el callproc.c darwin.h term.el gnu-linux.h - and 918 other files + and 919 other files Dan Rosenberg: changed movemail.c -Dani Moncayo: changed buffers.texi lists.texi custom.texi dired.texi - makefile.w32-in text.texi +Dani Moncayo: changed buffers.texi lists.texi makefile.w32-in custom.texi + dired.texi text.texi Daniel Brockman: changed cus-start.el format-spec.el ibuffer.el rcirc.el @@ -1030,9 +1032,9 @@ Eli Tziperman: wrote rmail-spam-filter.el Eli Zaretskii: wrote [bidirectional display in xdisp.c] bidi.c rxvt.el tty-colors.el and changed makefile.w32-in xdisp.c msdos.c Makefile.in files.el - config.bat fileio.c simple.el msdos.h info.el mainmake.v2 rmail.el + config.bat simple.el fileio.c msdos.h info.el mainmake.v2 rmail.el sed1v2.inp display.texi w32.c pc-win.el process.c dispnew.c startup.el - dispextern.h dired.c and 702 other files + dispextern.h dired.c and 703 other files Elias Oltmanns: changed tls.el gnus-agent.el gnus-int.el gnus-srvr.el gnus.el @@ -1276,6 +1278,8 @@ Frédéric Perrin: changed vc-dispatcher.el G Dinesh Dutt: changed etags.el +Gabor Vida: changed ido.el + Gareth Jones: changed fns.c gnus-score.el Garrett Wollman: changed sendmail.el @@ -1335,9 +1339,9 @@ Giuseppe Scrivano: changed browse-url.el buffer.c configure.in sysdep.c Glenn Morris: wrote automated/f90.el automated/vc-bzr.el check-declare.el and changed Makefile.in configure.in calendar.el diary-lib.el rmail.el - progmodes/f90.el files.el cal-menu.el appt.el cal-hebrew.el fortran.el - bytecomp.el holidays.el emacs.texi calendar.texi ack.texi make-dist - simple.el sed1v2.inp cal-islam.el dired-x.el and 1249 other files + progmodes/f90.el files.el cal-menu.el appt.el cal-hebrew.el emacs.texi + fortran.el bytecomp.el holidays.el calendar.texi ack.texi simple.el + make-dist sed1v2.inp cal-islam.el dired-x.el and 1255 other files Glynn Clements: wrote gamegrid.el snake.el tetris.el @@ -1492,6 +1496,8 @@ Inoue Seiichiro: changed xterm.c xfns.c xterm.h International Business Machines: changed emacs.c fileio.c process.c sysdep.c unexcoff.c +Ippei Furuhashi: changed org.texi + Irie Shinsuke: changed subr.el Irie Tetsuya: changed gnus.texi message.texi @@ -1536,7 +1542,7 @@ Jaeyoun Chung: changed hangul3.el hanja3.el gnus-mule.el hangul.el Jambunathan K: wrote org-lparse.el org-odt.el and changed org.el org-exp.el org.texi OrgOdtContentTemplate.xml - org-footnote.el org-inlinetask.el OrgOdtStyles.xml htmlfontify.el + OrgOdtStyles.xml org-footnote.el org-inlinetask.el htmlfontify.el org-html.el package-x.el quail/indian.el tar-mode.el James Clark: wrote nxml-enc.el nxml-glyph.el nxml-maint.el nxml-mode.el @@ -1555,8 +1561,8 @@ James R. Larus: co-wrote mh-e.el James R. Van Zandt: changed sh-script.el James TD Smith: changed org.el org-colview.el org-clock.el - org-remember.el org-colview-xemacs.el org-plot.el org-agenda.el - org-compat.el org-habit.el org.texi + org-remember.el org-plot.el org-agenda.el org-compat.el org-habit.el + org.texi James Troup: changed gnus-sum.el @@ -1889,9 +1895,9 @@ Juan Pechiar: wrote ob-mscgen.el and changed ob-octave.el Juanma Barranquero: wrote emacs-lock.el -and changed makefile.w32-in subr.el w32fns.c files.el server.el bs.el - emacsclient.c help-fns.el faces.el org.el simple.el buffer.c xdisp.c - keyboard.c desktop.el process.c w32term.c window.c ido.el w32.c +and changed makefile.w32-in subr.el w32fns.c files.el server.el + emacsclient.c bs.el help-fns.el faces.el org.el simple.el buffer.c + xdisp.c keyboard.c desktop.el process.c w32term.c window.c ido.el w32.c allout.el and 1089 other files Juergen Kreileder: changed imap.el nnimap.el @@ -1912,7 +1918,7 @@ and co-wrote color.el and changed shr.el org-agenda.el gnus-art.el gnus-html.el gnus.el mm-decode.el gnus-group.el gnus-util.el message.el org.el gnus-sum.el gnus.texi mm-view.el nnimap.el mm-uu.el nnir.el sieve-manage.el - color-lab.el url-cache.el auth-source.el gnus-ems.el and 82 other files + color-lab.el url-cache.el auth-source.el gnus-ems.el and 80 other files Julien Gilles: wrote gnus-ml.el @@ -1933,6 +1939,8 @@ Justin Sheehy: changed gnus-sum.el nntp.el Justus Piater: changed smtpmail.el +Jérémie Courrèges-Anglas: changed org.texi + Jérémy Compostella: changed battery.el windmove.el window.el Jérôme Marant: changed Makefile.in make-dist bindings.el configure.in @@ -2202,7 +2210,7 @@ and co-wrote gnus-kill.el gnus-mh.el gnus-msg.el gnus-score.el and changed gnus.texi gnus-cite.el pop3.el smtpmail.el gnus-xmas.el auth-source.el proto-stream.el url-http.el gnutls.c subr.el xml.c dired.el editfns.c nnultimate.el gnus-nocem.el imap.el nnkiboze.el - nnrss.el nnslashdot.el simple.el spam-report.el and 210 other files + nnrss.el nnslashdot.el simple.el spam-report.el and 211 other files Lars Rasmusson: changed ebrowse.c @@ -2268,7 +2276,7 @@ Lucid, Inc.: changed byte-opt.el byte-run.el bytecode.c bytecomp.el Ludovic Courtes: changed nnregistry.el Ludovic Courtès: wrote nnregistry.el -and changed gnus.texi +and changed configure.in gnus.texi Lukas Huonker: changed tetris.el @@ -2287,6 +2295,8 @@ Lynn Slater: wrote help-macro.el Maciek Pasternacki: changed nnrss.el +Madan Ramakrishnan: changed org-agenda.el + Magnus Henoch: changed url-http.el ispell.el url.el dbusbind.c dns.el url-gw.el url-parse.el url-proxy.el autoinsert.el cl.texi configure.in dbus.el gnus.texi hashcash.el log-edit.el message.el org-clock.el @@ -2431,8 +2441,8 @@ Martin Pohlack: changed iimage.el pc-select.el Martin Rudalics: changed window.el window.c windows.texi frame.c buffer.c help.el window.h cus-start.el frame.el cus-edit.el files.el - buffers.texi dired.el subr.el add-log.el xdisp.c font-lock.el - help-fns.el lisp.h mouse.el wid-edit.el and 137 other files + buffers.texi dired.el subr.el add-log.el mouse.el xdisp.c font-lock.el + help-fns.el lisp.h wid-edit.el and 137 other files Martin Stjernholm: wrote cc-bytecomp.el and co-wrote cc-align.el cc-cmds.el cc-compat.el cc-defs.el cc-engine.el @@ -2481,7 +2491,7 @@ Matt Hodges: changed textmodes/table.el faces.el iswitchb.el simple.el edebug.texi eldoc.el em-hist.el em-pred.el fixit.texi icon.el ido.el locate.el paragraphs.el pcomplete.el repeat.el and 3 other files -Matt Lundin: changed org-agenda.el org-bibtex.el org-footnote.el org.el +Matt Lundin: changed org-agenda.el org-bibtex.el org.el org-footnote.el Matt Pharr: changed message.el @@ -2516,9 +2526,9 @@ Michael Albinus: wrote dbus.el secrets.el tramp-cmds.el tramp-compat.el and co-wrote tramp-cache.el tramp-sh.el tramp.el and changed tramp.texi dbusbind.c trampver.texi dbus.texi trampver.el ange-ftp.el tramp-fish.el files.el files.texi tramp-imap.el Makefile.in - tramp-vc.el tramp-util.el tramp-uu.el notifications.el simple.el + tramp-vc.el notifications.el tramp-util.el tramp-uu.el simple.el auth-source.el dired-aux.el configure.in em-unix.el fileio.c - and 66 other files + and 71 other files Michael Ben-Gershon: changed acorn.h configure.in riscix1-1.h riscix1-2.h unexec.c @@ -2559,9 +2569,8 @@ and changed viper*.el ediff*.el viper.texi ediff.texi ediff-hooks.el ediff-merge.el menu-bar.el appt.el desktop.el ediff-meta.el viper-mouse.el -Michael Markert: changed ob.el org-agenda.el org-ascii.el - org-contacts-wl.el org-docbook.el org-html.el org-latex.el org-table.el - org.el +Michael Markert: changed ob.el org-agenda.el org-ascii.el org-docbook.el + org-html.el org-latex.el org-table.el org.el Michael McNamara: co-wrote verilog-mode.el @@ -2637,6 +2646,8 @@ Mike Newton: co-wrote bibtex.el Mike Rowan: changed process.c alloc.c dispnew.c keyboard.c process.h sysdep.c xdisp.c +Mike Sperber: changed org-footnote.el + Mike Williams: wrote mouse-sel.el thingatpt.el and changed sgml-mode.el xml-lite.el @@ -2746,8 +2757,8 @@ Nicolas Avrutin: changed url-http.el Nicolas Goaziou: changed org-list.el org.el org-footnote.el org-exp.el org-latex.el org-html.el org-inlinetask.el org-indent.el org-docbook.el org-timer.el ob-asymptote.el org-ascii.el org-capture.el ob.el - org-agenda.el org-archive.el ob-exp.el org-clock.el org-macs.el - org-mouse.el org.texi and 3 other files + org-agenda.el org-archive.el org-mouse.el ob-exp.el org-clock.el + org-macs.el org-table.el and 3 other files Niels Giesen: changed icalendar.el org-agenda.el org-clock.el org-docbook.el org-icalendar.el @@ -3422,7 +3433,7 @@ and co-wrote font-lock.el and changed vc.el subr.el simple.el lisp.h keyboard.c files.el bytecomp.el keymap.c Makefile.in progmodes/compile.el xdisp.c pcvs.el alloc.c newcomment.el vc-hooks.el tex-mode.el buffer.c fileio.c eval.c - sh-script.el fill.el and 1033 other files + sh-script.el fill.el and 1034 other files Stefan Reichör: changed gnus-agent.el @@ -3573,7 +3584,7 @@ and changed subword.el image-mode.el Makefile.in cc-cmds.el emacsbug.el gnus-art.el gnus.texi nnimap.el files.el gnus-sum.el info.el org-footnote.el org.el reftex-ref.el saveplace.el simple.el tsdh-dark-theme.el tsdh-light-theme.el ack.texi artist.el bindings.el - and 26 other files + and 25 other files Tatsuya Ichikawa: changed gnus-agent.el gnus-cache.el @@ -3586,10 +3597,10 @@ Teemu Likonen: changed dired.el gnus-agent.el message.el Teodor Zlatanov: wrote auth-source.el gnus-registry.el gnus-sync.el gnus-tests.el gnutls.el registry.el spam-report.el url-future-tests.el url-future.el -and changed spam.el gnus.el nnimap.el gnus.texi gnus-sum.el gnus-util.el - auth.texi netrc.el gnus-start.el gnutls.c message.el spam-stat.el - encrypt.el nnir.el nnmail.el imap.el mail-source.el nnmairix.el nntp.el - Makefile.in gnus-encrypt.el and 97 other files +and changed spam.el gnus.el nnimap.el gnus.texi gnus-sum.el auth.texi + gnus-util.el gnutls.c netrc.el gnus-start.el message.el spam-stat.el + Makefile.in encrypt.el nnir.el nnmail.el gnutls.h imap.el + mail-source.el nnmairix.el nntp.el and 99 other files Terje Rosten: changed xfns.c version.el xterm.c xterm.h @@ -3682,8 +3693,7 @@ Tobias Ringström: changed etags.c Toby Allsopp: changed ldap.el eudc.el Toby Cubitt: co-wrote avl-tree.el - -Toby S. Cubitt: changed org.el +and changed org.el Toby Speight: changed generic-x.el window.el @@ -3959,7 +3969,7 @@ Yutaka Niibe: changed indent.c xdisp.c configure.in Makefile.in dispnew.c sysdep.c config.in dired.el emacs.c fill.el fns.c gmalloc.c gnu-linux.h indent.h process.c simple.el term.c window.c -Zachary Kanfer: changed cus-edit.el keyboard.c +Zachary Kanfer: changed cus-edit.el keyboard.c org.el Zhang Wei: changed chinese.el characters.el mule-cmds.el xfns.c erc.el faces.el fontset.el makefile.w32-in mm-util.el mule.el org-publish.el diff --git a/lisp/ldefs-boot.el b/lisp/ldefs-boot.el index 347adb98fd0..26a4a3e3662 100644 --- a/lisp/ldefs-boot.el +++ b/lisp/ldefs-boot.el @@ -5,7 +5,7 @@ ;;;### (autoloads (5x5-crack 5x5-crack-xor-mutate 5x5-crack-mutating-best ;;;;;; 5x5-crack-mutating-current 5x5-crack-randomly 5x5) "5x5" -;;;;;; "play/5x5.el" (20309 60936)) +;;;;;; "play/5x5.el" (20352 65510)) ;;; Generated autoloads from play/5x5.el (autoload '5x5 "5x5" "\ @@ -68,7 +68,7 @@ should return a grid vector array that is the new solution. ;;;*** ;;;### (autoloads (ada-mode ada-add-extensions) "ada-mode" "progmodes/ada-mode.el" -;;;;;; (20341 24416)) +;;;;;; (20352 65510)) ;;; Generated autoloads from progmodes/ada-mode.el (autoload 'ada-add-extensions "ada-mode" "\ @@ -88,7 +88,7 @@ Ada mode is the major mode for editing Ada code. ;;;*** ;;;### (autoloads (ada-header) "ada-stmt" "progmodes/ada-stmt.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from progmodes/ada-stmt.el (autoload 'ada-header "ada-stmt" "\ @@ -99,7 +99,7 @@ Insert a descriptive header at the top of the file. ;;;*** ;;;### (autoloads (ada-find-file) "ada-xref" "progmodes/ada-xref.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from progmodes/ada-xref.el (autoload 'ada-find-file "ada-xref" "\ @@ -114,7 +114,7 @@ Completion is available. ;;;;;; add-change-log-entry-other-window add-change-log-entry find-change-log ;;;;;; prompt-for-change-log-name add-log-mailing-address add-log-full-name ;;;;;; add-log-current-defun-function) "add-log" "vc/add-log.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from vc/add-log.el (put 'change-log-default-name 'safe-local-variable 'string-or-null-p) @@ -253,7 +253,7 @@ old-style time formats for entries are supported. ;;;### (autoloads (defadvice ad-activate ad-add-advice ad-disable-advice ;;;;;; ad-enable-advice ad-default-compilation-action ad-redefinition-action) -;;;;;; "advice" "emacs-lisp/advice.el" (20309 60936)) +;;;;;; "advice" "emacs-lisp/advice.el" (20352 65510)) ;;; Generated autoloads from emacs-lisp/advice.el (defvar ad-redefinition-action 'warn "\ @@ -398,7 +398,7 @@ usage: (defadvice FUNCTION (CLASS NAME [POSITION] [ARGLIST] FLAG...) ;;;### (autoloads (align-newline-and-indent align-unhighlight-rule ;;;;;; align-highlight-rule align-current align-entire align-regexp -;;;;;; align) "align" "align.el" (20309 60936)) +;;;;;; align) "align" "align.el" (20352 65510)) ;;; Generated autoloads from align.el (autoload 'align "align" "\ @@ -489,7 +489,7 @@ A replacement function for `newline-and-indent', aligning as it goes. ;;;### (autoloads (outlineify-sticky allout-mode allout-mode-p allout-auto-activation ;;;;;; allout-setup allout-auto-activation-helper) "allout" "allout.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from allout.el (autoload 'allout-auto-activation-helper "allout" "\ @@ -850,7 +850,7 @@ for details on preparing Emacs for automatic allout activation. ;;;### (autoloads (allout-widgets-mode allout-widgets-auto-activation ;;;;;; allout-widgets-setup allout-widgets) "allout-widgets" "allout-widgets.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from allout-widgets.el (let ((loads (get 'allout-widgets 'custom-loads))) (if (member '"allout-widgets" loads) nil (put 'allout-widgets 'custom-loads (cons '"allout-widgets" loads)))) @@ -910,7 +910,7 @@ outline hot-spot navigation (see `allout-mode'). ;;;*** ;;;### (autoloads (ange-ftp-hook-function ange-ftp-reread-dir) "ange-ftp" -;;;;;; "net/ange-ftp.el" (20309 60936)) +;;;;;; "net/ange-ftp.el" (20352 65510)) ;;; Generated autoloads from net/ange-ftp.el (defalias 'ange-ftp-re-read-dir 'ange-ftp-reread-dir) @@ -932,7 +932,7 @@ directory, so that Emacs will know its current contents. ;;;*** ;;;### (autoloads (animate-birthday-present animate-sequence animate-string) -;;;;;; "animate" "play/animate.el" (20309 60936)) +;;;;;; "animate" "play/animate.el" (20352 65510)) ;;; Generated autoloads from play/animate.el (autoload 'animate-string "animate" "\ @@ -965,7 +965,7 @@ the buffer *Birthday-Present-for-Name*. ;;;*** ;;;### (autoloads (ansi-color-process-output ansi-color-for-comint-mode-on) -;;;;;; "ansi-color" "ansi-color.el" (20309 60936)) +;;;;;; "ansi-color" "ansi-color.el" (20352 65510)) ;;; Generated autoloads from ansi-color.el (autoload 'ansi-color-for-comint-mode-on "ansi-color" "\ @@ -991,7 +991,7 @@ This is a good function to put in `comint-output-filter-functions'. ;;;*** ;;;### (autoloads (antlr-set-tabs antlr-mode antlr-show-makefile-rules) -;;;;;; "antlr-mode" "progmodes/antlr-mode.el" (20309 60936)) +;;;;;; "antlr-mode" "progmodes/antlr-mode.el" (20352 65510)) ;;; Generated autoloads from progmodes/antlr-mode.el (autoload 'antlr-show-makefile-rules "antlr-mode" "\ @@ -1027,7 +1027,7 @@ Used in `antlr-mode'. Also a useful function in `java-mode-hook'. ;;;*** ;;;### (autoloads (appt-activate appt-add) "appt" "calendar/appt.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from calendar/appt.el (autoload 'appt-add "appt" "\ @@ -1050,7 +1050,7 @@ ARG is positive, otherwise off. ;;;### (autoloads (apropos-documentation apropos-value apropos-library ;;;;;; apropos apropos-documentation-property apropos-command apropos-variable -;;;;;; apropos-read-pattern) "apropos" "apropos.el" (20309 60936)) +;;;;;; apropos-read-pattern) "apropos" "apropos.el" (20373 20070)) ;;; Generated autoloads from apropos.el (autoload 'apropos-read-pattern "apropos" "\ @@ -1158,8 +1158,8 @@ Returns list of symbols and documentation found. ;;;*** -;;;### (autoloads (archive-mode) "arc-mode" "arc-mode.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (archive-mode) "arc-mode" "arc-mode.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from arc-mode.el (autoload 'archive-mode "arc-mode" "\ @@ -1179,7 +1179,7 @@ archive. ;;;*** -;;;### (autoloads (array-mode) "array" "array.el" (20309 60936)) +;;;### (autoloads (array-mode) "array" "array.el" (20352 65510)) ;;; Generated autoloads from array.el (autoload 'array-mode "array" "\ @@ -1250,8 +1250,8 @@ Entering array mode calls the function `array-mode-hook'. ;;;*** -;;;### (autoloads (artist-mode) "artist" "textmodes/artist.el" (20328 -;;;;;; 17454)) +;;;### (autoloads (artist-mode) "artist" "textmodes/artist.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from textmodes/artist.el (autoload 'artist-mode "artist" "\ @@ -1457,8 +1457,8 @@ Keymap summary ;;;*** -;;;### (autoloads (asm-mode) "asm-mode" "progmodes/asm-mode.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (asm-mode) "asm-mode" "progmodes/asm-mode.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from progmodes/asm-mode.el (autoload 'asm-mode "asm-mode" "\ @@ -1486,7 +1486,7 @@ Special commands: ;;;*** ;;;### (autoloads (auth-source-cache-expiry) "auth-source" "gnus/auth-source.el" -;;;;;; (20332 33075)) +;;;;;; (20352 65510)) ;;; Generated autoloads from gnus/auth-source.el (defvar auth-source-cache-expiry 7200 "\ @@ -1499,7 +1499,7 @@ let-binding.") ;;;*** ;;;### (autoloads (autoarg-kp-mode autoarg-mode) "autoarg" "autoarg.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from autoarg.el (defvar autoarg-mode nil "\ @@ -1560,7 +1560,7 @@ This is similar to `autoarg-mode' but rebinds the keypad keys ;;;*** ;;;### (autoloads (autoconf-mode) "autoconf" "progmodes/autoconf.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from progmodes/autoconf.el (autoload 'autoconf-mode "autoconf" "\ @@ -1571,7 +1571,7 @@ Major mode for editing Autoconf configure.in files. ;;;*** ;;;### (autoloads (auto-insert-mode define-auto-insert auto-insert) -;;;;;; "autoinsert" "autoinsert.el" (20309 60936)) +;;;;;; "autoinsert" "autoinsert.el" (20352 65510)) ;;; Generated autoloads from autoinsert.el (autoload 'auto-insert "autoinsert" "\ @@ -1611,7 +1611,7 @@ insert a template for the file depending on the mode of the buffer. ;;;### (autoloads (batch-update-autoloads update-directory-autoloads ;;;;;; update-file-autoloads) "autoload" "emacs-lisp/autoload.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from emacs-lisp/autoload.el (put 'generated-autoload-file 'safe-local-variable 'stringp) @@ -1662,7 +1662,7 @@ should be non-nil). ;;;### (autoloads (global-auto-revert-mode turn-on-auto-revert-tail-mode ;;;;;; auto-revert-tail-mode turn-on-auto-revert-mode auto-revert-mode) -;;;;;; "autorevert" "autorevert.el" (20317 24654)) +;;;;;; "autorevert" "autorevert.el" (20352 65510)) ;;; Generated autoloads from autorevert.el (autoload 'auto-revert-mode "autorevert" "\ @@ -1751,7 +1751,7 @@ specifies in the mode line. ;;;*** ;;;### (autoloads (mouse-avoidance-mode mouse-avoidance-mode) "avoid" -;;;;;; "avoid.el" (20309 60936)) +;;;;;; "avoid.el" (20352 65510)) ;;; Generated autoloads from avoid.el (defvar mouse-avoidance-mode nil "\ @@ -1792,7 +1792,7 @@ definition of \"random distance\".) ;;;*** ;;;### (autoloads (display-battery-mode battery) "battery" "battery.el" -;;;;;; (20309 60936)) +;;;;;; (20369 4240)) ;;; Generated autoloads from battery.el (put 'battery-mode-line-string 'risky-local-variable t) @@ -1828,7 +1828,7 @@ seconds. ;;;*** ;;;### (autoloads (benchmark benchmark-run-compiled benchmark-run) -;;;;;; "benchmark" "emacs-lisp/benchmark.el" (20309 60936)) +;;;;;; "benchmark" "emacs-lisp/benchmark.el" (20352 65510)) ;;; Generated autoloads from emacs-lisp/benchmark.el (autoload 'benchmark-run "benchmark" "\ @@ -1861,7 +1861,7 @@ For non-interactive use see also `benchmark-run' and ;;;*** ;;;### (autoloads (bibtex-search-entry bibtex-mode bibtex-initialize) -;;;;;; "bibtex" "textmodes/bibtex.el" (20309 60936)) +;;;;;; "bibtex" "textmodes/bibtex.el" (20352 65510)) ;;; Generated autoloads from textmodes/bibtex.el (autoload 'bibtex-initialize "bibtex" "\ @@ -1950,7 +1950,7 @@ A prefix arg negates the value of `bibtex-search-entry-globally'. ;;;*** ;;;### (autoloads (bibtex-style-mode) "bibtex-style" "textmodes/bibtex-style.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from textmodes/bibtex-style.el (autoload 'bibtex-style-mode "bibtex-style" "\ @@ -1962,7 +1962,7 @@ Major mode for editing BibTeX style files. ;;;### (autoloads (binhex-decode-region binhex-decode-region-external ;;;;;; binhex-decode-region-internal) "binhex" "mail/binhex.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from mail/binhex.el (defconst binhex-begin-line "^:...............................................................$" "\ @@ -1986,8 +1986,8 @@ Binhex decode region between START and END. ;;;*** -;;;### (autoloads (blackbox) "blackbox" "play/blackbox.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (blackbox) "blackbox" "play/blackbox.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from play/blackbox.el (autoload 'blackbox "blackbox" "\ @@ -2110,7 +2110,7 @@ a reflection. ;;;;;; bookmark-save bookmark-write bookmark-delete bookmark-insert ;;;;;; bookmark-rename bookmark-insert-location bookmark-relocate ;;;;;; bookmark-jump-other-window bookmark-jump bookmark-set) "bookmark" -;;;;;; "bookmark.el" (20309 60936)) +;;;;;; "bookmark.el" (20352 65510)) ;;; Generated autoloads from bookmark.el (define-key ctl-x-r-map "b" 'bookmark-jump) (define-key ctl-x-r-map "m" 'bookmark-set) @@ -2311,7 +2311,7 @@ Incremental search of bookmarks, hiding the non-matches as we go. ;;;;;; browse-url-xdg-open browse-url-at-mouse browse-url-at-point ;;;;;; browse-url browse-url-of-region browse-url-of-dired-file ;;;;;; browse-url-of-buffer browse-url-of-file browse-url-browser-function) -;;;;;; "browse-url" "net/browse-url.el" (20309 60936)) +;;;;;; "browse-url" "net/browse-url.el" (20352 65510)) ;;; Generated autoloads from net/browse-url.el (defvar browse-url-browser-function 'browse-url-default-browser "\ @@ -2626,8 +2626,8 @@ from `browse-url-elinks-wrapper'. ;;;*** -;;;### (autoloads (snarf-bruces bruce) "bruce" "play/bruce.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (snarf-bruces bruce) "bruce" "play/bruce.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from play/bruce.el (autoload 'bruce "bruce" "\ @@ -2643,7 +2643,7 @@ Return a vector containing the lines from `bruce-phrases-file'. ;;;*** ;;;### (autoloads (bs-show bs-customize bs-cycle-previous bs-cycle-next) -;;;;;; "bs" "bs.el" (20309 60936)) +;;;;;; "bs" "bs.el" (20352 65510)) ;;; Generated autoloads from bs.el (autoload 'bs-cycle-next "bs" "\ @@ -2683,7 +2683,7 @@ name of buffer configuration. ;;;*** -;;;### (autoloads (bubbles) "bubbles" "play/bubbles.el" (20309 60936)) +;;;### (autoloads (bubbles) "bubbles" "play/bubbles.el" (20352 65510)) ;;; Generated autoloads from play/bubbles.el (autoload 'bubbles "bubbles" "\ @@ -2705,7 +2705,7 @@ columns on its right towards the left. ;;;*** ;;;### (autoloads (bug-reference-prog-mode bug-reference-mode) "bug-reference" -;;;;;; "progmodes/bug-reference.el" (20309 60936)) +;;;;;; "progmodes/bug-reference.el" (20352 65510)) ;;; Generated autoloads from progmodes/bug-reference.el (put 'bug-reference-url-format 'safe-local-variable (lambda (s) (or (stringp s) (and (symbolp s) (get s 'bug-reference-url-format))))) @@ -2729,7 +2729,7 @@ Like `bug-reference-mode', but only buttonize in comments and strings. ;;;;;; batch-byte-compile-if-not-done display-call-tree byte-compile ;;;;;; compile-defun byte-compile-file byte-recompile-directory ;;;;;; byte-force-recompile byte-compile-enable-warning byte-compile-disable-warning) -;;;;;; "bytecomp" "emacs-lisp/bytecomp.el" (20341 24416)) +;;;;;; "bytecomp" "emacs-lisp/bytecomp.el" (20352 65510)) ;;; Generated autoloads from emacs-lisp/bytecomp.el (put 'byte-compile-dynamic 'safe-local-variable 'booleanp) (put 'byte-compile-disable-print-circle 'safe-local-variable 'booleanp) @@ -2849,8 +2849,8 @@ and corresponding effects. ;;;*** -;;;### (autoloads nil "cal-china" "calendar/cal-china.el" (20309 -;;;;;; 60936)) +;;;### (autoloads nil "cal-china" "calendar/cal-china.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from calendar/cal-china.el (put 'calendar-chinese-time-zone 'risky-local-variable t) @@ -2859,7 +2859,7 @@ and corresponding effects. ;;;*** -;;;### (autoloads nil "cal-dst" "calendar/cal-dst.el" (20309 60936)) +;;;### (autoloads nil "cal-dst" "calendar/cal-dst.el" (20352 65510)) ;;; Generated autoloads from calendar/cal-dst.el (put 'calendar-daylight-savings-starts 'risky-local-variable t) @@ -2871,7 +2871,7 @@ and corresponding effects. ;;;*** ;;;### (autoloads (calendar-hebrew-list-yahrzeits) "cal-hebrew" "calendar/cal-hebrew.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from calendar/cal-hebrew.el (autoload 'calendar-hebrew-list-yahrzeits "cal-hebrew" "\ @@ -2887,8 +2887,8 @@ from the cursor position. ;;;### (autoloads (defmath calc-embedded-activate calc-embedded calc-grab-rectangle ;;;;;; calc-grab-region full-calc-keypad calc-keypad calc-eval quick-calc -;;;;;; full-calc calc calc-dispatch) "calc" "calc/calc.el" (20309 -;;;;;; 60936)) +;;;;;; full-calc calc calc-dispatch) "calc" "calc/calc.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from calc/calc.el (define-key ctl-x-map "*" 'calc-dispatch) @@ -2972,8 +2972,8 @@ See Info node `(calc)Defining Functions'. ;;;*** -;;;### (autoloads (calc-undo) "calc-undo" "calc/calc-undo.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (calc-undo) "calc-undo" "calc/calc-undo.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from calc/calc-undo.el (autoload 'calc-undo "calc-undo" "\ @@ -2983,8 +2983,8 @@ See Info node `(calc)Defining Functions'. ;;;*** -;;;### (autoloads (calculator) "calculator" "calculator.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (calculator) "calculator" "calculator.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from calculator.el (autoload 'calculator "calculator" "\ @@ -2995,8 +2995,8 @@ See the documentation for `calculator-mode' for more information. ;;;*** -;;;### (autoloads (calendar) "calendar" "calendar/calendar.el" (20343 -;;;;;; 47906)) +;;;### (autoloads (calendar) "calendar" "calendar/calendar.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from calendar/calendar.el (autoload 'calendar "calendar" "\ @@ -3040,7 +3040,7 @@ This function is suitable for execution in a .emacs file. ;;;*** ;;;### (autoloads (canlock-verify canlock-insert-header) "canlock" -;;;;;; "gnus/canlock.el" (20309 60936)) +;;;;;; "gnus/canlock.el" (20352 65510)) ;;; Generated autoloads from gnus/canlock.el (autoload 'canlock-insert-header "canlock" "\ @@ -3058,7 +3058,7 @@ it fails. ;;;*** ;;;### (autoloads (capitalized-words-mode) "cap-words" "progmodes/cap-words.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from progmodes/cap-words.el (autoload 'capitalized-words-mode "cap-words" "\ @@ -3097,15 +3097,15 @@ Obsoletes `c-forward-into-nomenclature'. ;;;*** -;;;### (autoloads nil "cc-compat" "progmodes/cc-compat.el" (20309 -;;;;;; 60936)) +;;;### (autoloads nil "cc-compat" "progmodes/cc-compat.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from progmodes/cc-compat.el (put 'c-indent-level 'safe-local-variable 'integerp) ;;;*** ;;;### (autoloads (c-guess-basic-syntax) "cc-engine" "progmodes/cc-engine.el" -;;;;;; (20324 28875)) +;;;;;; (20358 29669)) ;;; Generated autoloads from progmodes/cc-engine.el (autoload 'c-guess-basic-syntax "cc-engine" "\ @@ -3117,7 +3117,7 @@ Return the syntactic context of the current line. ;;;### (autoloads (c-guess-install c-guess-region-no-install c-guess-region ;;;;;; c-guess-buffer-no-install c-guess-buffer c-guess-no-install -;;;;;; c-guess) "cc-guess" "progmodes/cc-guess.el" (20309 60936)) +;;;;;; c-guess) "cc-guess" "progmodes/cc-guess.el" (20352 65510)) ;;; Generated autoloads from progmodes/cc-guess.el (defvar c-guess-guessed-offsets-alist nil "\ @@ -3217,7 +3217,7 @@ the absolute file name of the file if STYLE-NAME is nil. ;;;### (autoloads (awk-mode pike-mode idl-mode java-mode objc-mode ;;;;;; c++-mode c-mode c-initialize-cc-mode) "cc-mode" "progmodes/cc-mode.el" -;;;;;; (20324 28875)) +;;;;;; (20365 1028)) ;;; Generated autoloads from progmodes/cc-mode.el (autoload 'c-initialize-cc-mode "cc-mode" "\ @@ -3394,7 +3394,7 @@ Key bindings: ;;;*** ;;;### (autoloads (c-set-offset c-add-style c-set-style) "cc-styles" -;;;;;; "progmodes/cc-styles.el" (20309 60936)) +;;;;;; "progmodes/cc-styles.el" (20352 65510)) ;;; Generated autoloads from progmodes/cc-styles.el (autoload 'c-set-style "cc-styles" "\ @@ -3445,7 +3445,7 @@ and exists only for compatibility reasons. ;;;*** -;;;### (autoloads nil "cc-vars" "progmodes/cc-vars.el" (20309 60936)) +;;;### (autoloads nil "cc-vars" "progmodes/cc-vars.el" (20352 65510)) ;;; Generated autoloads from progmodes/cc-vars.el (put 'c-basic-offset 'safe-local-variable 'integerp) (put 'c-backslash-column 'safe-local-variable 'integerp) @@ -3455,7 +3455,7 @@ and exists only for compatibility reasons. ;;;### (autoloads (ccl-execute-with-args check-ccl-program define-ccl-program ;;;;;; declare-ccl-program ccl-dump ccl-compile) "ccl" "international/ccl.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from international/ccl.el (autoload 'ccl-compile "ccl" "\ @@ -3716,7 +3716,7 @@ See the documentation of `define-ccl-program' for the detail of CCL program. ;;;*** ;;;### (autoloads (cconv-closure-convert) "cconv" "emacs-lisp/cconv.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from emacs-lisp/cconv.el (autoload 'cconv-closure-convert "cconv" "\ @@ -3731,7 +3731,7 @@ Returns a form where all lambdas don't have any free variables. ;;;*** ;;;### (autoloads (cfengine-auto-mode cfengine2-mode cfengine3-mode) -;;;;;; "cfengine" "progmodes/cfengine.el" (20309 60936)) +;;;;;; "cfengine" "progmodes/cfengine.el" (20352 65510)) ;;; Generated autoloads from progmodes/cfengine.el (autoload 'cfengine3-mode "cfengine" "\ @@ -3761,7 +3761,7 @@ on the buffer contents ;;;*** ;;;### (autoloads (check-declare-directory check-declare-file) "check-declare" -;;;;;; "emacs-lisp/check-declare.el" (20309 60936)) +;;;;;; "emacs-lisp/check-declare.el" (20370 20099)) ;;; Generated autoloads from emacs-lisp/check-declare.el (autoload 'check-declare-file "check-declare" "\ @@ -3786,7 +3786,7 @@ Returns non-nil if any false statements are found. ;;;;;; checkdoc-comments checkdoc-continue checkdoc-start checkdoc-current-buffer ;;;;;; checkdoc-eval-current-buffer checkdoc-message-interactive ;;;;;; checkdoc-interactive checkdoc checkdoc-list-of-strings-p) -;;;;;; "checkdoc" "emacs-lisp/checkdoc.el" (20309 60936)) +;;;;;; "checkdoc" "emacs-lisp/checkdoc.el" (20352 65510)) ;;; Generated autoloads from emacs-lisp/checkdoc.el (put 'checkdoc-force-docstrings-flag 'safe-local-variable 'booleanp) (put 'checkdoc-force-history-flag 'safe-local-variable 'booleanp) @@ -3982,7 +3982,7 @@ checking of documentation strings. ;;;### (autoloads (pre-write-encode-hz post-read-decode-hz encode-hz-buffer ;;;;;; encode-hz-region decode-hz-buffer decode-hz-region) "china-util" -;;;;;; "language/china-util.el" (20309 60936)) +;;;;;; "language/china-util.el" (20352 65510)) ;;; Generated autoloads from language/china-util.el (autoload 'decode-hz-region "china-util" "\ @@ -4020,7 +4020,7 @@ Encode the text in the current buffer to HZ. ;;;*** ;;;### (autoloads (command-history list-command-history repeat-matching-complex-command) -;;;;;; "chistory" "chistory.el" (20309 60936)) +;;;;;; "chistory" "chistory.el" (20352 65510)) ;;; Generated autoloads from chistory.el (autoload 'repeat-matching-complex-command "chistory" "\ @@ -4059,7 +4059,7 @@ and runs the normal hook `command-history-hook'. ;;;*** -;;;### (autoloads nil "cl" "emacs-lisp/cl.el" (20309 60936)) +;;;### (autoloads nil "cl" "emacs-lisp/cl.el" (20352 65510)) ;;; Generated autoloads from emacs-lisp/cl.el (defvar custom-print-functions nil "\ @@ -4075,7 +4075,7 @@ a future Emacs interpreter will be able to use it.") ;;;*** ;;;### (autoloads (common-lisp-indent-function) "cl-indent" "emacs-lisp/cl-indent.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from emacs-lisp/cl-indent.el (autoload 'common-lisp-indent-function "cl-indent" "\ @@ -4154,7 +4154,7 @@ For example, the function `case' has an indent property ;;;*** ;;;### (autoloads (c-macro-expand) "cmacexp" "progmodes/cmacexp.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from progmodes/cmacexp.el (autoload 'c-macro-expand "cmacexp" "\ @@ -4174,8 +4174,8 @@ For use inside Lisp programs, see also `c-macro-expansion'. ;;;*** -;;;### (autoloads (run-scheme) "cmuscheme" "cmuscheme.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (run-scheme) "cmuscheme" "cmuscheme.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from cmuscheme.el (autoload 'run-scheme "cmuscheme" "\ @@ -4195,7 +4195,7 @@ is run). ;;;*** -;;;### (autoloads (color-name-to-rgb) "color" "color.el" (20309 60936)) +;;;### (autoloads (color-name-to-rgb) "color" "color.el" (20352 65510)) ;;; Generated autoloads from color.el (autoload 'color-name-to-rgb "color" "\ @@ -4217,7 +4217,7 @@ If FRAME cannot display COLOR, return nil. ;;;### (autoloads (comint-redirect-results-list-from-process comint-redirect-results-list ;;;;;; comint-redirect-send-command-to-process comint-redirect-send-command ;;;;;; comint-run make-comint make-comint-in-buffer) "comint" "comint.el" -;;;;;; (20321 40986)) +;;;;;; (20368 16194)) ;;; Generated autoloads from comint.el (defvar comint-output-filter-functions '(ansi-color-process-output comint-postoutput-scroll-to-bottom comint-watch-for-password-prompt) "\ @@ -4236,16 +4236,21 @@ either globally or locally.") (autoload 'make-comint-in-buffer "comint" "\ Make a Comint process NAME in BUFFER, running PROGRAM. If BUFFER is nil, it defaults to NAME surrounded by `*'s. -PROGRAM should be either a string denoting an executable program to create -via `start-file-process', or a cons pair of the form (HOST . SERVICE) denoting -a TCP connection to be opened via `open-network-stream'. If there is already -a running process in that buffer, it is not restarted. Optional fourth arg -STARTFILE is the name of a file, whose contents are sent to the -process as its initial input. +If there is a running process in BUFFER, it is not restarted. + +PROGRAM should be one of the following: +- a string, denoting an executable program to create via + `start-file-process' +- a cons pair of the form (HOST . SERVICE), denoting a TCP + connection to be opened via `open-network-stream' +- nil, denoting a newly-allocated pty. + +Optional fourth arg STARTFILE is the name of a file, whose +contents are sent to the process as its initial input. If PROGRAM is a string, any more args are arguments to PROGRAM. -Returns the (possibly newly created) process buffer. +Return the (possibly newly created) process buffer. \(fn NAME BUFFER PROGRAM &optional STARTFILE &rest SWITCHES)" nil nil) @@ -4312,7 +4317,7 @@ REGEXP-GROUP is the regular expression group in REGEXP to use. ;;;*** ;;;### (autoloads (compare-windows) "compare-w" "vc/compare-w.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from vc/compare-w.el (autoload 'compare-windows "compare-w" "\ @@ -4349,8 +4354,8 @@ on third call it again advances points to the next difference and so on. ;;;;;; compilation-shell-minor-mode compilation-mode compilation-start ;;;;;; compile compilation-disable-input compile-command compilation-search-path ;;;;;; compilation-ask-about-save compilation-window-height compilation-start-hook -;;;;;; compilation-mode-hook) "compile" "progmodes/compile.el" (20309 -;;;;;; 60936)) +;;;;;; compilation-mode-hook) "compile" "progmodes/compile.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from progmodes/compile.el (defvar compilation-mode-hook nil "\ @@ -4530,7 +4535,7 @@ This is the value of `next-error-function' in Compilation buffers. ;;;*** ;;;### (autoloads (dynamic-completion-mode) "completion" "completion.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from completion.el (defvar dynamic-completion-mode nil "\ @@ -4555,7 +4560,7 @@ if ARG is omitted or nil. ;;;### (autoloads (conf-xdefaults-mode conf-ppd-mode conf-colon-mode ;;;;;; conf-space-keywords conf-space-mode conf-javaprop-mode conf-windows-mode ;;;;;; conf-unix-mode conf-mode) "conf-mode" "textmodes/conf-mode.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from textmodes/conf-mode.el (autoload 'conf-mode "conf-mode" "\ @@ -4711,7 +4716,7 @@ For details see `conf-mode'. Example: ;;;*** ;;;### (autoloads (shuffle-vector cookie-snarf cookie-insert cookie) -;;;;;; "cookie1" "play/cookie1.el" (20309 60936)) +;;;;;; "cookie1" "play/cookie1.el" (20352 65510)) ;;; Generated autoloads from play/cookie1.el (autoload 'cookie "cookie1" "\ @@ -4743,8 +4748,8 @@ Randomly permute the elements of VECTOR (all permutations equally likely). ;;;*** ;;;### (autoloads (copyright-update-directory copyright copyright-fix-years -;;;;;; copyright-update) "copyright" "emacs-lisp/copyright.el" (20324 -;;;;;; 28875)) +;;;;;; copyright-update) "copyright" "emacs-lisp/copyright.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from emacs-lisp/copyright.el (put 'copyright-at-end-flag 'safe-local-variable 'booleanp) (put 'copyright-names-regexp 'safe-local-variable 'stringp) @@ -4783,7 +4788,7 @@ If FIX is non-nil, run `copyright-fix-years' instead. ;;;*** ;;;### (autoloads (cperl-perldoc-at-point cperl-perldoc cperl-mode) -;;;;;; "cperl-mode" "progmodes/cperl-mode.el" (20309 60936)) +;;;;;; "cperl-mode" "progmodes/cperl-mode.el" (20352 65510)) ;;; Generated autoloads from progmodes/cperl-mode.el (put 'cperl-indent-level 'safe-local-variable 'integerp) (put 'cperl-brace-offset 'safe-local-variable 'integerp) @@ -4982,7 +4987,7 @@ Run a `perldoc' on the word around point. ;;;*** ;;;### (autoloads (cpp-parse-edit cpp-highlight-buffer) "cpp" "progmodes/cpp.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from progmodes/cpp.el (autoload 'cpp-highlight-buffer "cpp" "\ @@ -5001,7 +5006,7 @@ Edit display information for cpp conditionals. ;;;*** ;;;### (autoloads (crisp-mode crisp-mode) "crisp" "emulation/crisp.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from emulation/crisp.el (defvar crisp-mode nil "\ @@ -5027,7 +5032,7 @@ if ARG is omitted or nil. ;;;*** ;;;### (autoloads (completing-read-multiple) "crm" "emacs-lisp/crm.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from emacs-lisp/crm.el (autoload 'completing-read-multiple "crm" "\ @@ -5062,8 +5067,8 @@ INHERIT-INPUT-METHOD. ;;;*** -;;;### (autoloads (css-mode) "css-mode" "textmodes/css-mode.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (css-mode) "css-mode" "textmodes/css-mode.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from textmodes/css-mode.el (autoload 'css-mode "css-mode" "\ @@ -5074,7 +5079,7 @@ Major mode to edit Cascading Style Sheets. ;;;*** ;;;### (autoloads (cua-selection-mode cua-mode) "cua-base" "emulation/cua-base.el" -;;;;;; (20315 3938)) +;;;;;; (20359 53408)) ;;; Generated autoloads from emulation/cua-base.el (defvar cua-mode nil "\ @@ -5134,7 +5139,7 @@ Enable CUA selection mode without the C-z/C-x/C-c/C-v bindings. ;;;;;; customize-mode customize customize-push-and-save customize-save-variable ;;;;;; customize-set-variable customize-set-value custom-menu-sort-alphabetically ;;;;;; custom-buffer-sort-alphabetically custom-browse-sort-alphabetically) -;;;;;; "cus-edit" "cus-edit.el" (20309 60936)) +;;;;;; "cus-edit" "cus-edit.el" (20352 65510)) ;;; Generated autoloads from cus-edit.el (defvar custom-browse-sort-alphabetically nil "\ @@ -5450,8 +5455,8 @@ The format is suitable for use with `easy-menu-define'. ;;;*** ;;;### (autoloads (customize-themes describe-theme custom-theme-visit-theme -;;;;;; customize-create-theme) "cus-theme" "cus-theme.el" (20335 -;;;;;; 8681)) +;;;;;; customize-create-theme) "cus-theme" "cus-theme.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from cus-theme.el (autoload 'customize-create-theme "cus-theme" "\ @@ -5485,7 +5490,7 @@ omitted, a buffer named *Custom Themes* is used. ;;;*** ;;;### (autoloads (cvs-status-mode) "cvs-status" "vc/cvs-status.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from vc/cvs-status.el (autoload 'cvs-status-mode "cvs-status" "\ @@ -5496,7 +5501,7 @@ Mode used for cvs status output. ;;;*** ;;;### (autoloads (global-cwarn-mode turn-on-cwarn-mode cwarn-mode) -;;;;;; "cwarn" "progmodes/cwarn.el" (20309 60936)) +;;;;;; "cwarn" "progmodes/cwarn.el" (20352 65510)) ;;; Generated autoloads from progmodes/cwarn.el (autoload 'cwarn-mode "cwarn" "\ @@ -5547,7 +5552,7 @@ See `cwarn-mode' for more information on Cwarn mode. ;;;### (autoloads (standard-display-cyrillic-translit cyrillic-encode-alternativnyj-char ;;;;;; cyrillic-encode-koi8-r-char) "cyril-util" "language/cyril-util.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from language/cyril-util.el (autoload 'cyrillic-encode-koi8-r-char "cyril-util" "\ @@ -5576,7 +5581,7 @@ If the argument is nil, we return the display table to its standard state. ;;;*** ;;;### (autoloads (dabbrev-expand dabbrev-completion) "dabbrev" "dabbrev.el" -;;;;;; (20320 14810)) +;;;;;; (20352 65510)) ;;; Generated autoloads from dabbrev.el (put 'dabbrev-case-fold-search 'risky-local-variable t) (put 'dabbrev-case-replace 'risky-local-variable t) @@ -5623,7 +5628,7 @@ See also `dabbrev-abbrev-char-regexp' and \\[dabbrev-completion]. ;;;*** ;;;### (autoloads (data-debug-new-buffer) "data-debug" "cedet/data-debug.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from cedet/data-debug.el (autoload 'data-debug-new-buffer "data-debug" "\ @@ -5633,8 +5638,8 @@ Create a new data-debug buffer with NAME. ;;;*** -;;;### (autoloads (dbus-handle-event) "dbus" "net/dbus.el" (20314 -;;;;;; 46279)) +;;;### (autoloads (dbus-handle-event) "dbus" "net/dbus.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from net/dbus.el (autoload 'dbus-handle-event "dbus" "\ @@ -5647,8 +5652,8 @@ If the HANDLER returns a `dbus-error', it is propagated as return message. ;;;*** -;;;### (autoloads (dcl-mode) "dcl-mode" "progmodes/dcl-mode.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (dcl-mode) "dcl-mode" "progmodes/dcl-mode.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from progmodes/dcl-mode.el (autoload 'dcl-mode "dcl-mode" "\ @@ -5775,7 +5780,7 @@ There is some minimal font-lock support (see vars ;;;*** ;;;### (autoloads (cancel-debug-on-entry debug-on-entry debug) "debug" -;;;;;; "emacs-lisp/debug.el" (20309 60936)) +;;;;;; "emacs-lisp/debug.el" (20352 65510)) ;;; Generated autoloads from emacs-lisp/debug.el (setq debugger 'debug) @@ -5819,7 +5824,7 @@ To specify a nil argument interactively, exit with an empty minibuffer. ;;;*** ;;;### (autoloads (decipher-mode decipher) "decipher" "play/decipher.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from play/decipher.el (autoload 'decipher "decipher" "\ @@ -5848,8 +5853,8 @@ The most useful commands are: ;;;*** ;;;### (autoloads (delimit-columns-rectangle delimit-columns-region -;;;;;; delimit-columns-customize) "delim-col" "delim-col.el" (20309 -;;;;;; 60936)) +;;;;;; delimit-columns-customize) "delim-col" "delim-col.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from delim-col.el (autoload 'delimit-columns-customize "delim-col" "\ @@ -5873,8 +5878,8 @@ START and END delimits the corners of text rectangle. ;;;*** -;;;### (autoloads (delphi-mode) "delphi" "progmodes/delphi.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (delphi-mode) "delphi" "progmodes/delphi.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from progmodes/delphi.el (autoload 'delphi-mode "delphi" "\ @@ -5925,8 +5930,8 @@ with no args, if that value is non-nil. ;;;*** -;;;### (autoloads (delete-selection-mode) "delsel" "delsel.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (delete-selection-mode) "delsel" "delsel.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from delsel.el (defalias 'pending-delete-mode 'delete-selection-mode) @@ -5956,7 +5961,7 @@ any selection. ;;;*** ;;;### (autoloads (derived-mode-init-mode-variables define-derived-mode) -;;;;;; "derived" "emacs-lisp/derived.el" (20309 60936)) +;;;;;; "derived" "emacs-lisp/derived.el" (20352 65510)) ;;; Generated autoloads from emacs-lisp/derived.el (autoload 'define-derived-mode "derived" "\ @@ -6023,7 +6028,7 @@ the first time the mode is used. ;;;*** ;;;### (autoloads (describe-char describe-text-properties) "descr-text" -;;;;;; "descr-text.el" (20309 60936)) +;;;;;; "descr-text.el" (20352 65510)) ;;; Generated autoloads from descr-text.el (autoload 'describe-text-properties "descr-text" "\ @@ -6060,7 +6065,7 @@ relevant to POS. ;;;### (autoloads (desktop-revert desktop-save-in-desktop-dir desktop-change-dir ;;;;;; desktop-load-default desktop-read desktop-remove desktop-save ;;;;;; desktop-clear desktop-locals-to-save desktop-save-mode) "desktop" -;;;;;; "desktop.el" (20309 60936)) +;;;;;; "desktop.el" (20352 65510)) ;;; Generated autoloads from desktop.el (defvar desktop-save-mode nil "\ @@ -6247,7 +6252,7 @@ Revert to the last loaded desktop. ;;;### (autoloads (gnus-article-outlook-deuglify-article gnus-outlook-deuglify-article ;;;;;; gnus-article-outlook-repair-attribution gnus-article-outlook-unwrap-lines) -;;;;;; "deuglify" "gnus/deuglify.el" (20309 60936)) +;;;;;; "deuglify" "gnus/deuglify.el" (20352 65510)) ;;; Generated autoloads from gnus/deuglify.el (autoload 'gnus-article-outlook-unwrap-lines "deuglify" "\ @@ -6280,7 +6285,7 @@ Deuglify broken Outlook (Express) articles and redisplay. ;;;*** ;;;### (autoloads (diary-mode diary-mail-entries diary) "diary-lib" -;;;;;; "calendar/diary-lib.el" (20309 60936)) +;;;;;; "calendar/diary-lib.el" (20352 65510)) ;;; Generated autoloads from calendar/diary-lib.el (autoload 'diary "diary-lib" "\ @@ -6323,7 +6328,7 @@ Major mode for editing the diary file. ;;;*** ;;;### (autoloads (diff-buffer-with-file diff-backup diff diff-command -;;;;;; diff-switches) "diff" "vc/diff.el" (20309 60936)) +;;;;;; diff-switches) "diff" "vc/diff.el" (20375 44114)) ;;; Generated autoloads from vc/diff.el (defvar diff-switches (purecopy "-c") "\ @@ -6367,7 +6372,7 @@ This requires the external program `diff' to be in your `exec-path'. ;;;*** ;;;### (autoloads (diff-minor-mode diff-mode) "diff-mode" "vc/diff-mode.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from vc/diff-mode.el (autoload 'diff-mode "diff-mode" "\ @@ -6399,7 +6404,7 @@ the mode if ARG is omitted or nil. ;;;*** -;;;### (autoloads (dig) "dig" "net/dig.el" (20309 60936)) +;;;### (autoloads (dig) "dig" "net/dig.el" (20352 65510)) ;;; Generated autoloads from net/dig.el (autoload 'dig "dig" "\ @@ -6411,7 +6416,7 @@ Optional arguments are passed to `dig-invoke'. ;;;*** ;;;### (autoloads (dired-mode dired-noselect dired-other-frame dired-other-window -;;;;;; dired dired-listing-switches) "dired" "dired.el" (20343 49216)) +;;;;;; dired dired-listing-switches) "dired" "dired.el" (20352 65510)) ;;; Generated autoloads from dired.el (defvar dired-listing-switches (purecopy "-al") "\ @@ -6533,7 +6538,7 @@ Keybindings: ;;;*** ;;;### (autoloads (dirtrack dirtrack-mode) "dirtrack" "dirtrack.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from dirtrack.el (autoload 'dirtrack-mode "dirtrack" "\ @@ -6563,8 +6568,8 @@ from `default-directory'. ;;;*** -;;;### (autoloads (disassemble) "disass" "emacs-lisp/disass.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (disassemble) "disass" "emacs-lisp/disass.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from emacs-lisp/disass.el (autoload 'disassemble "disass" "\ @@ -6583,7 +6588,7 @@ redefine OBJECT if it is a symbol. ;;;;;; standard-display-g1 standard-display-ascii standard-display-default ;;;;;; standard-display-8bit describe-current-display-table describe-display-table ;;;;;; set-display-table-slot display-table-slot make-display-table) -;;;;;; "disp-table" "disp-table.el" (20309 60936)) +;;;;;; "disp-table" "disp-table.el" (20352 65510)) ;;; Generated autoloads from disp-table.el (autoload 'make-display-table "disp-table" "\ @@ -6705,7 +6710,7 @@ in `.emacs'. ;;;*** ;;;### (autoloads (dissociated-press) "dissociate" "play/dissociate.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from play/dissociate.el (autoload 'dissociated-press "dissociate" "\ @@ -6721,7 +6726,7 @@ Default is 2. ;;;*** -;;;### (autoloads (dnd-protocol-alist) "dnd" "dnd.el" (20309 60936)) +;;;### (autoloads (dnd-protocol-alist) "dnd" "dnd.el" (20352 65510)) ;;; Generated autoloads from dnd.el (defvar dnd-protocol-alist `((,(purecopy "^file:///") . dnd-open-local-file) (,(purecopy "^file://") . dnd-open-file) (,(purecopy "^file:") . dnd-open-local-file) (,(purecopy "^\\(https?\\|ftp\\|file\\|nfs\\)://") . dnd-open-file)) "\ @@ -6742,7 +6747,7 @@ if some action was made, or nil if the URL is ignored.") ;;;*** ;;;### (autoloads (dns-mode-soa-increment-serial dns-mode) "dns-mode" -;;;;;; "textmodes/dns-mode.el" (20309 60936)) +;;;;;; "textmodes/dns-mode.el" (20352 65510)) ;;; Generated autoloads from textmodes/dns-mode.el (autoload 'dns-mode "dns-mode" "\ @@ -6766,8 +6771,8 @@ Locate SOA record and increment the serial field. ;;;*** ;;;### (autoloads (doc-view-bookmark-jump doc-view-minor-mode doc-view-mode-maybe -;;;;;; doc-view-mode doc-view-mode-p) "doc-view" "doc-view.el" (20309 -;;;;;; 60936)) +;;;;;; doc-view-mode doc-view-mode-p) "doc-view" "doc-view.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from doc-view.el (autoload 'doc-view-mode-p "doc-view" "\ @@ -6813,7 +6818,7 @@ See the command `doc-view-mode' for more information on this mode. ;;;*** -;;;### (autoloads (doctor) "doctor" "play/doctor.el" (20309 60936)) +;;;### (autoloads (doctor) "doctor" "play/doctor.el" (20352 65510)) ;;; Generated autoloads from play/doctor.el (autoload 'doctor "doctor" "\ @@ -6823,7 +6828,7 @@ Switch to *doctor* buffer and start giving psychotherapy. ;;;*** -;;;### (autoloads (double-mode) "double" "double.el" (20309 60936)) +;;;### (autoloads (double-mode) "double" "double.el" (20352 65510)) ;;; Generated autoloads from double.el (autoload 'double-mode "double" "\ @@ -6839,7 +6844,7 @@ strings when pressed twice. See `double-map' for details. ;;;*** -;;;### (autoloads (dunnet) "dunnet" "play/dunnet.el" (20309 60936)) +;;;### (autoloads (dunnet) "dunnet" "play/dunnet.el" (20352 65510)) ;;; Generated autoloads from play/dunnet.el (autoload 'dunnet "dunnet" "\ @@ -6851,7 +6856,7 @@ Switch to *dungeon* buffer and start game. ;;;### (autoloads (easy-mmode-defsyntax easy-mmode-defmap easy-mmode-define-keymap ;;;;;; define-globalized-minor-mode define-minor-mode) "easy-mmode" -;;;;;; "emacs-lisp/easy-mmode.el" (20309 60936)) +;;;;;; "emacs-lisp/easy-mmode.el" (20362 26480)) ;;; Generated autoloads from emacs-lisp/easy-mmode.el (defalias 'easy-mmode-define-minor-mode 'define-minor-mode) @@ -6977,8 +6982,8 @@ CSS contains a list of syntax specifications of the form (CHAR . SYNTAX). ;;;*** ;;;### (autoloads (easy-menu-change easy-menu-create-menu easy-menu-do-define -;;;;;; easy-menu-define) "easymenu" "emacs-lisp/easymenu.el" (20309 -;;;;;; 60936)) +;;;;;; easy-menu-define) "easymenu" "emacs-lisp/easymenu.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from emacs-lisp/easymenu.el (autoload 'easy-menu-define "easymenu" "\ @@ -7132,7 +7137,7 @@ To implement dynamic menus, either call this from ;;;;;; ebnf-eps-file ebnf-eps-directory ebnf-spool-region ebnf-spool-buffer ;;;;;; ebnf-spool-file ebnf-spool-directory ebnf-print-region ebnf-print-buffer ;;;;;; ebnf-print-file ebnf-print-directory ebnf-customize) "ebnf2ps" -;;;;;; "progmodes/ebnf2ps.el" (20309 60936)) +;;;;;; "progmodes/ebnf2ps.el" (20352 65510)) ;;; Generated autoloads from progmodes/ebnf2ps.el (autoload 'ebnf-customize "ebnf2ps" "\ @@ -7406,8 +7411,8 @@ See `ebnf-style-database' documentation. ;;;;;; ebrowse-tags-find-declaration-other-window ebrowse-tags-find-definition ;;;;;; ebrowse-tags-view-definition ebrowse-tags-find-declaration ;;;;;; ebrowse-tags-view-declaration ebrowse-member-mode ebrowse-electric-choose-tree -;;;;;; ebrowse-tree-mode) "ebrowse" "progmodes/ebrowse.el" (20309 -;;;;;; 60936)) +;;;;;; ebrowse-tree-mode) "ebrowse" "progmodes/ebrowse.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from progmodes/ebrowse.el (autoload 'ebrowse-tree-mode "ebrowse" "\ @@ -7556,7 +7561,7 @@ Display statistics for a class tree. ;;;*** ;;;### (autoloads (electric-buffer-list) "ebuff-menu" "ebuff-menu.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from ebuff-menu.el (autoload 'electric-buffer-list "ebuff-menu" "\ @@ -7581,7 +7586,7 @@ Run hooks in `electric-buffer-menu-mode-hook' on entry. ;;;*** ;;;### (autoloads (Electric-command-history-redo-expression) "echistory" -;;;;;; "echistory.el" (20309 60936)) +;;;;;; "echistory.el" (20352 65510)) ;;; Generated autoloads from echistory.el (autoload 'Electric-command-history-redo-expression "echistory" "\ @@ -7593,7 +7598,7 @@ With prefix arg NOCONFIRM, execute current line as-is without editing. ;;;*** ;;;### (autoloads (ecomplete-setup) "ecomplete" "gnus/ecomplete.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from gnus/ecomplete.el (autoload 'ecomplete-setup "ecomplete" "\ @@ -7603,7 +7608,7 @@ With prefix arg NOCONFIRM, execute current line as-is without editing. ;;;*** -;;;### (autoloads (global-ede-mode) "ede" "cedet/ede.el" (20309 60936)) +;;;### (autoloads (global-ede-mode) "ede" "cedet/ede.el" (20352 65510)) ;;; Generated autoloads from cedet/ede.el (defvar global-ede-mode nil "\ @@ -7630,7 +7635,7 @@ an EDE controlled project. ;;;### (autoloads (edebug-all-forms edebug-all-defs edebug-eval-top-level-form ;;;;;; edebug-basic-spec edebug-all-forms edebug-all-defs) "edebug" -;;;;;; "emacs-lisp/edebug.el" (20343 47906)) +;;;;;; "emacs-lisp/edebug.el" (20352 65510)) ;;; Generated autoloads from emacs-lisp/edebug.el (defvar edebug-all-defs nil "\ @@ -7703,7 +7708,7 @@ Toggle edebugging of all forms. ;;;;;; ediff-merge-directories-with-ancestor ediff-merge-directories ;;;;;; ediff-directories3 ediff-directory-revisions ediff-directories ;;;;;; ediff-buffers3 ediff-buffers ediff-backup ediff-current-file -;;;;;; ediff-files3 ediff-files) "ediff" "vc/ediff.el" (20309 60936)) +;;;;;; ediff-files3 ediff-files) "ediff" "vc/ediff.el" (20352 65510)) ;;; Generated autoloads from vc/ediff.el (autoload 'ediff-files "ediff" "\ @@ -7935,7 +7940,7 @@ With optional NODE, goes to that node. ;;;*** ;;;### (autoloads (ediff-customize) "ediff-help" "vc/ediff-help.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from vc/ediff-help.el (autoload 'ediff-customize "ediff-help" "\ @@ -7946,7 +7951,7 @@ With optional NODE, goes to that node. ;;;*** ;;;### (autoloads (ediff-show-registry) "ediff-mult" "vc/ediff-mult.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from vc/ediff-mult.el (autoload 'ediff-show-registry "ediff-mult" "\ @@ -7959,7 +7964,7 @@ Display Ediff's registry. ;;;*** ;;;### (autoloads (ediff-toggle-use-toolbar ediff-toggle-multiframe) -;;;;;; "ediff-util" "vc/ediff-util.el" (20309 60936)) +;;;;;; "ediff-util" "vc/ediff-util.el" (20352 65510)) ;;; Generated autoloads from vc/ediff-util.el (autoload 'ediff-toggle-multiframe "ediff-util" "\ @@ -7980,7 +7985,7 @@ To change the default, set the variable `ediff-use-toolbar-p', which see. ;;;### (autoloads (format-kbd-macro read-kbd-macro edit-named-kbd-macro ;;;;;; edit-last-kbd-macro edit-kbd-macro) "edmacro" "edmacro.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from edmacro.el (autoload 'edit-kbd-macro "edmacro" "\ @@ -8029,7 +8034,7 @@ or nil, use a compact 80-column format. ;;;*** ;;;### (autoloads (edt-emulation-on edt-set-scroll-margins) "edt" -;;;;;; "emulation/edt.el" (20309 60936)) +;;;;;; "emulation/edt.el" (20352 65510)) ;;; Generated autoloads from emulation/edt.el (autoload 'edt-set-scroll-margins "edt" "\ @@ -8047,7 +8052,7 @@ Turn on EDT Emulation. ;;;*** ;;;### (autoloads (electric-helpify with-electric-help) "ehelp" "ehelp.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from ehelp.el (autoload 'with-electric-help "ehelp" "\ @@ -8084,7 +8089,7 @@ BUFFER is put back into its original major mode. ;;;*** ;;;### (autoloads (turn-on-eldoc-mode eldoc-mode eldoc-minor-mode-string) -;;;;;; "eldoc" "emacs-lisp/eldoc.el" (20309 60936)) +;;;;;; "eldoc" "emacs-lisp/eldoc.el" (20352 65510)) ;;; Generated autoloads from emacs-lisp/eldoc.el (defvar eldoc-minor-mode-string (purecopy " ElDoc") "\ @@ -8131,7 +8136,7 @@ Emacs Lisp mode) that support ElDoc.") ;;;*** ;;;### (autoloads (electric-layout-mode electric-pair-mode electric-indent-mode) -;;;;;; "electric" "electric.el" (20309 60936)) +;;;;;; "electric" "electric.el" (20352 65510)) ;;; Generated autoloads from electric.el (defvar electric-indent-chars '(10) "\ @@ -8201,8 +8206,8 @@ The variable `electric-layout-rules' says when and how to insert newlines. ;;;*** -;;;### (autoloads (elide-head) "elide-head" "elide-head.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (elide-head) "elide-head" "elide-head.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from elide-head.el (autoload 'elide-head "elide-head" "\ @@ -8219,7 +8224,7 @@ This is suitable as an entry on `find-file-hook' or appropriate mode hooks. ;;;### (autoloads (elint-initialize elint-defun elint-current-buffer ;;;;;; elint-directory elint-file) "elint" "emacs-lisp/elint.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from emacs-lisp/elint.el (autoload 'elint-file "elint" "\ @@ -8255,8 +8260,8 @@ optional prefix argument REINIT is non-nil. ;;;*** ;;;### (autoloads (elp-results elp-instrument-package elp-instrument-list -;;;;;; elp-instrument-function) "elp" "emacs-lisp/elp.el" (20309 -;;;;;; 60936)) +;;;;;; elp-instrument-function) "elp" "emacs-lisp/elp.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from emacs-lisp/elp.el (autoload 'elp-instrument-function "elp" "\ @@ -8291,7 +8296,7 @@ displayed. ;;;*** ;;;### (autoloads (emacs-lock-mode) "emacs-lock" "emacs-lock.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from emacs-lock.el (autoload 'emacs-lock-mode "emacs-lock" "\ @@ -8319,7 +8324,7 @@ Other values are interpreted as usual. ;;;*** ;;;### (autoloads (report-emacs-bug-query-existing-bugs report-emacs-bug) -;;;;;; "emacsbug" "mail/emacsbug.el" (20309 60936)) +;;;;;; "emacsbug" "mail/emacsbug.el" (20352 65510)) ;;; Generated autoloads from mail/emacsbug.el (autoload 'report-emacs-bug "emacsbug" "\ @@ -8340,7 +8345,7 @@ The result is an alist with items of the form (URL SUBJECT NO). ;;;;;; emerge-revisions emerge-files-with-ancestor-remote emerge-files-remote ;;;;;; emerge-files-with-ancestor-command emerge-files-command emerge-buffers-with-ancestor ;;;;;; emerge-buffers emerge-files-with-ancestor emerge-files) "emerge" -;;;;;; "vc/emerge.el" (20309 60936)) +;;;;;; "vc/emerge.el" (20352 65510)) ;;; Generated autoloads from vc/emerge.el (autoload 'emerge-files "emerge" "\ @@ -8401,7 +8406,7 @@ Emerge two RCS revisions of a file, with another revision as ancestor. ;;;*** ;;;### (autoloads (enriched-decode enriched-encode enriched-mode) -;;;;;; "enriched" "textmodes/enriched.el" (20309 60936)) +;;;;;; "enriched" "textmodes/enriched.el" (20352 65510)) ;;; Generated autoloads from textmodes/enriched.el (autoload 'enriched-mode "enriched" "\ @@ -8441,8 +8446,8 @@ Commands: ;;;;;; epa-sign-region epa-verify-cleartext-in-region epa-verify-region ;;;;;; epa-decrypt-armor-in-region epa-decrypt-region epa-encrypt-file ;;;;;; epa-sign-file epa-verify-file epa-decrypt-file epa-select-keys -;;;;;; epa-list-secret-keys epa-list-keys) "epa" "epa.el" (20309 -;;;;;; 60936)) +;;;;;; epa-list-secret-keys epa-list-keys) "epa" "epa.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from epa.el (autoload 'epa-list-keys "epa" "\ @@ -8620,7 +8625,7 @@ Insert selected KEYS after the point. ;;;*** ;;;### (autoloads (epa-dired-do-encrypt epa-dired-do-sign epa-dired-do-verify -;;;;;; epa-dired-do-decrypt) "epa-dired" "epa-dired.el" (20309 60936)) +;;;;;; epa-dired-do-decrypt) "epa-dired" "epa-dired.el" (20352 65510)) ;;; Generated autoloads from epa-dired.el (autoload 'epa-dired-do-decrypt "epa-dired" "\ @@ -8646,7 +8651,7 @@ Encrypt marked files. ;;;*** ;;;### (autoloads (epa-file-disable epa-file-enable epa-file-handler) -;;;;;; "epa-file" "epa-file.el" (20309 60936)) +;;;;;; "epa-file" "epa-file.el" (20352 65510)) ;;; Generated autoloads from epa-file.el (autoload 'epa-file-handler "epa-file" "\ @@ -8668,7 +8673,7 @@ Encrypt marked files. ;;;### (autoloads (epa-global-mail-mode epa-mail-import-keys epa-mail-encrypt ;;;;;; epa-mail-sign epa-mail-verify epa-mail-decrypt epa-mail-mode) -;;;;;; "epa-mail" "epa-mail.el" (20315 8755)) +;;;;;; "epa-mail" "epa-mail.el" (20352 65510)) ;;; Generated autoloads from epa-mail.el (autoload 'epa-mail-mode "epa-mail" "\ @@ -8738,7 +8743,7 @@ if ARG is omitted or nil. ;;;*** -;;;### (autoloads (epg-make-context) "epg" "epg.el" (20309 60936)) +;;;### (autoloads (epg-make-context) "epg" "epg.el" (20352 65510)) ;;; Generated autoloads from epg.el (autoload 'epg-make-context "epg" "\ @@ -8749,7 +8754,7 @@ Return a context object. ;;;*** ;;;### (autoloads (epg-expand-group epg-check-configuration epg-configuration) -;;;;;; "epg-config" "epg-config.el" (20309 60936)) +;;;;;; "epg-config" "epg-config.el" (20352 65510)) ;;; Generated autoloads from epg-config.el (autoload 'epg-configuration "epg-config" "\ @@ -8770,7 +8775,7 @@ Look at CONFIG and try to expand GROUP. ;;;*** ;;;### (autoloads (erc-handle-irc-url erc-tls erc erc-select-read-args) -;;;;;; "erc" "erc/erc.el" (20309 60936)) +;;;;;; "erc" "erc/erc.el" (20352 65510)) ;;; Generated autoloads from erc/erc.el (autoload 'erc-select-read-args "erc" "\ @@ -8818,33 +8823,33 @@ Otherwise, connect to HOST:PORT as USER and /join CHANNEL. ;;;*** -;;;### (autoloads nil "erc-autoaway" "erc/erc-autoaway.el" (20309 -;;;;;; 60936)) +;;;### (autoloads nil "erc-autoaway" "erc/erc-autoaway.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from erc/erc-autoaway.el (autoload 'erc-autoaway-mode "erc-autoaway") ;;;*** -;;;### (autoloads nil "erc-button" "erc/erc-button.el" (20309 60936)) +;;;### (autoloads nil "erc-button" "erc/erc-button.el" (20352 65510)) ;;; Generated autoloads from erc/erc-button.el (autoload 'erc-button-mode "erc-button" nil t) ;;;*** -;;;### (autoloads nil "erc-capab" "erc/erc-capab.el" (20309 60936)) +;;;### (autoloads nil "erc-capab" "erc/erc-capab.el" (20352 65510)) ;;; Generated autoloads from erc/erc-capab.el (autoload 'erc-capab-identify-mode "erc-capab" nil t) ;;;*** -;;;### (autoloads nil "erc-compat" "erc/erc-compat.el" (20309 60936)) +;;;### (autoloads nil "erc-compat" "erc/erc-compat.el" (20352 65510)) ;;; Generated autoloads from erc/erc-compat.el (autoload 'erc-define-minor-mode "erc-compat") ;;;*** ;;;### (autoloads (erc-ctcp-query-DCC pcomplete/erc-mode/DCC erc-cmd-DCC) -;;;;;; "erc-dcc" "erc/erc-dcc.el" (20309 60936)) +;;;;;; "erc-dcc" "erc/erc-dcc.el" (20352 65510)) ;;; Generated autoloads from erc/erc-dcc.el (autoload 'erc-dcc-mode "erc-dcc") @@ -8877,7 +8882,7 @@ that subcommand. ;;;;;; erc-ezb-add-session erc-ezb-end-of-session-list erc-ezb-init-session-list ;;;;;; erc-ezb-identify erc-ezb-notice-autodetect erc-ezb-lookup-action ;;;;;; erc-ezb-get-login erc-cmd-ezb) "erc-ezbounce" "erc/erc-ezbounce.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from erc/erc-ezbounce.el (autoload 'erc-cmd-ezb "erc-ezbounce" "\ @@ -8939,8 +8944,8 @@ Add EZBouncer convenience functions to ERC. ;;;*** -;;;### (autoloads (erc-fill) "erc-fill" "erc/erc-fill.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (erc-fill) "erc-fill" "erc/erc-fill.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from erc/erc-fill.el (autoload 'erc-fill-mode "erc-fill" nil t) @@ -8953,7 +8958,7 @@ You can put this on `erc-insert-modify-hook' and/or `erc-send-modify-hook'. ;;;*** ;;;### (autoloads (erc-identd-stop erc-identd-start) "erc-identd" -;;;;;; "erc/erc-identd.el" (20309 60936)) +;;;;;; "erc/erc-identd.el" (20352 65510)) ;;; Generated autoloads from erc/erc-identd.el (autoload 'erc-identd-mode "erc-identd") @@ -8975,7 +8980,7 @@ system. ;;;*** ;;;### (autoloads (erc-create-imenu-index) "erc-imenu" "erc/erc-imenu.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from erc/erc-imenu.el (autoload 'erc-create-imenu-index "erc-imenu" "\ @@ -8985,20 +8990,20 @@ system. ;;;*** -;;;### (autoloads nil "erc-join" "erc/erc-join.el" (20309 60936)) +;;;### (autoloads nil "erc-join" "erc/erc-join.el" (20352 65510)) ;;; Generated autoloads from erc/erc-join.el (autoload 'erc-autojoin-mode "erc-join" nil t) ;;;*** -;;;### (autoloads nil "erc-list" "erc/erc-list.el" (20309 60936)) +;;;### (autoloads nil "erc-list" "erc/erc-list.el" (20352 65510)) ;;; Generated autoloads from erc/erc-list.el (autoload 'erc-list-mode "erc-list") ;;;*** ;;;### (autoloads (erc-save-buffer-in-logs erc-logging-enabled) "erc-log" -;;;;;; "erc/erc-log.el" (20309 60936)) +;;;;;; "erc/erc-log.el" (20352 65510)) ;;; Generated autoloads from erc/erc-log.el (autoload 'erc-log-mode "erc-log" nil t) @@ -9030,7 +9035,7 @@ You can save every individual message by putting this function on ;;;### (autoloads (erc-delete-dangerous-host erc-add-dangerous-host ;;;;;; erc-delete-keyword erc-add-keyword erc-delete-fool erc-add-fool ;;;;;; erc-delete-pal erc-add-pal) "erc-match" "erc/erc-match.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from erc/erc-match.el (autoload 'erc-match-mode "erc-match") @@ -9076,14 +9081,14 @@ Delete dangerous-host interactively to `erc-dangerous-hosts'. ;;;*** -;;;### (autoloads nil "erc-menu" "erc/erc-menu.el" (20309 60936)) +;;;### (autoloads nil "erc-menu" "erc/erc-menu.el" (20352 65510)) ;;; Generated autoloads from erc/erc-menu.el (autoload 'erc-menu-mode "erc-menu" nil t) ;;;*** ;;;### (autoloads (erc-cmd-WHOLEFT) "erc-netsplit" "erc/erc-netsplit.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from erc/erc-netsplit.el (autoload 'erc-netsplit-mode "erc-netsplit") @@ -9095,7 +9100,7 @@ Show who's gone. ;;;*** ;;;### (autoloads (erc-server-select erc-determine-network) "erc-networks" -;;;;;; "erc/erc-networks.el" (20309 60936)) +;;;;;; "erc/erc-networks.el" (20352 65510)) ;;; Generated autoloads from erc/erc-networks.el (autoload 'erc-determine-network "erc-networks" "\ @@ -9113,7 +9118,7 @@ Interactively select a server to connect to using `erc-server-alist'. ;;;*** ;;;### (autoloads (pcomplete/erc-mode/NOTIFY erc-cmd-NOTIFY) "erc-notify" -;;;;;; "erc/erc-notify.el" (20309 60936)) +;;;;;; "erc/erc-notify.el" (20352 65510)) ;;; Generated autoloads from erc/erc-notify.el (autoload 'erc-notify-mode "erc-notify" nil t) @@ -9131,33 +9136,33 @@ with args, toggle notify status of people. ;;;*** -;;;### (autoloads nil "erc-page" "erc/erc-page.el" (20309 60936)) +;;;### (autoloads nil "erc-page" "erc/erc-page.el" (20352 65510)) ;;; Generated autoloads from erc/erc-page.el (autoload 'erc-page-mode "erc-page") ;;;*** -;;;### (autoloads nil "erc-pcomplete" "erc/erc-pcomplete.el" (20309 -;;;;;; 60936)) +;;;### (autoloads nil "erc-pcomplete" "erc/erc-pcomplete.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from erc/erc-pcomplete.el (autoload 'erc-completion-mode "erc-pcomplete" nil t) ;;;*** -;;;### (autoloads nil "erc-replace" "erc/erc-replace.el" (20309 60936)) +;;;### (autoloads nil "erc-replace" "erc/erc-replace.el" (20352 65510)) ;;; Generated autoloads from erc/erc-replace.el (autoload 'erc-replace-mode "erc-replace") ;;;*** -;;;### (autoloads nil "erc-ring" "erc/erc-ring.el" (20309 60936)) +;;;### (autoloads nil "erc-ring" "erc/erc-ring.el" (20352 65510)) ;;; Generated autoloads from erc/erc-ring.el (autoload 'erc-ring-mode "erc-ring" nil t) ;;;*** ;;;### (autoloads (erc-nickserv-identify erc-nickserv-identify-mode) -;;;;;; "erc-services" "erc/erc-services.el" (20309 60936)) +;;;;;; "erc-services" "erc/erc-services.el" (20352 65510)) ;;; Generated autoloads from erc/erc-services.el (autoload 'erc-services-mode "erc-services" nil t) @@ -9174,14 +9179,14 @@ When called interactively, read the password using `read-passwd'. ;;;*** -;;;### (autoloads nil "erc-sound" "erc/erc-sound.el" (20309 60936)) +;;;### (autoloads nil "erc-sound" "erc/erc-sound.el" (20352 65510)) ;;; Generated autoloads from erc/erc-sound.el (autoload 'erc-sound-mode "erc-sound") ;;;*** ;;;### (autoloads (erc-speedbar-browser) "erc-speedbar" "erc/erc-speedbar.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from erc/erc-speedbar.el (autoload 'erc-speedbar-browser "erc-speedbar" "\ @@ -9192,21 +9197,21 @@ This will add a speedbar major display mode. ;;;*** -;;;### (autoloads nil "erc-spelling" "erc/erc-spelling.el" (20309 -;;;;;; 60936)) +;;;### (autoloads nil "erc-spelling" "erc/erc-spelling.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from erc/erc-spelling.el (autoload 'erc-spelling-mode "erc-spelling" nil t) ;;;*** -;;;### (autoloads nil "erc-stamp" "erc/erc-stamp.el" (20309 60936)) +;;;### (autoloads nil "erc-stamp" "erc/erc-stamp.el" (20352 65510)) ;;; Generated autoloads from erc/erc-stamp.el (autoload 'erc-timestamp-mode "erc-stamp" nil t) ;;;*** ;;;### (autoloads (erc-track-minor-mode) "erc-track" "erc/erc-track.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from erc/erc-track.el (defvar erc-track-minor-mode nil "\ @@ -9232,7 +9237,7 @@ keybindings will not do anything useful. ;;;*** ;;;### (autoloads (erc-truncate-buffer erc-truncate-buffer-to-size) -;;;;;; "erc-truncate" "erc/erc-truncate.el" (20309 60936)) +;;;;;; "erc-truncate" "erc/erc-truncate.el" (20352 65510)) ;;; Generated autoloads from erc/erc-truncate.el (autoload 'erc-truncate-mode "erc-truncate" nil t) @@ -9252,7 +9257,7 @@ Meant to be used in hooks, like `erc-insert-post-hook'. ;;;*** ;;;### (autoloads (erc-xdcc-add-file) "erc-xdcc" "erc/erc-xdcc.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from erc/erc-xdcc.el (autoload 'erc-xdcc-mode "erc-xdcc") @@ -9265,7 +9270,7 @@ Add a file to `erc-xdcc-files'. ;;;### (autoloads (ert-describe-test ert-run-tests-interactively ;;;;;; ert-run-tests-batch-and-exit ert-run-tests-batch ert-deftest) -;;;;;; "ert" "emacs-lisp/ert.el" (20309 60936)) +;;;;;; "ert" "emacs-lisp/ert.el" (20352 65510)) ;;; Generated autoloads from emacs-lisp/ert.el (autoload 'ert-deftest "ert" "\ @@ -9335,7 +9340,7 @@ Display the documentation for TEST-OR-TEST-NAME (a symbol or ert-test). ;;;*** ;;;### (autoloads (ert-kill-all-test-buffers) "ert-x" "emacs-lisp/ert-x.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from emacs-lisp/ert-x.el (put 'ert-with-test-buffer 'lisp-indent-function 1) @@ -9347,8 +9352,8 @@ Kill all test buffers that are still live. ;;;*** -;;;### (autoloads (eshell-mode) "esh-mode" "eshell/esh-mode.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (eshell-mode) "esh-mode" "eshell/esh-mode.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from eshell/esh-mode.el (autoload 'eshell-mode "esh-mode" "\ @@ -9361,7 +9366,7 @@ Emacs shell interactive mode. ;;;*** ;;;### (autoloads (eshell-command-result eshell-command eshell) "eshell" -;;;;;; "eshell/eshell.el" (20309 60936)) +;;;;;; "eshell/eshell.el" (20352 65510)) ;;; Generated autoloads from eshell/eshell.el (autoload 'eshell "eshell" "\ @@ -9402,7 +9407,7 @@ corresponding to a successful execution. ;;;;;; visit-tags-table tags-table-mode find-tag-default-function ;;;;;; find-tag-hook tags-add-tables tags-compression-info-list ;;;;;; tags-table-list tags-case-fold-search) "etags" "progmodes/etags.el" -;;;;;; (20332 33075)) +;;;;;; (20352 65510)) ;;; Generated autoloads from progmodes/etags.el (defvar tags-file-name nil "\ @@ -9720,7 +9725,7 @@ for \\[find-tag] (which see). ;;;;;; ethio-fidel-to-sera-marker ethio-fidel-to-sera-region ethio-fidel-to-sera-buffer ;;;;;; ethio-sera-to-fidel-marker ethio-sera-to-fidel-region ethio-sera-to-fidel-buffer ;;;;;; setup-ethiopic-environment-internal) "ethio-util" "language/ethio-util.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from language/ethio-util.el (autoload 'setup-ethiopic-environment-internal "ethio-util" "\ @@ -9890,7 +9895,7 @@ With ARG, insert that many delimiters. ;;;### (autoloads (eudc-load-eudc eudc-query-form eudc-expand-inline ;;;;;; eudc-get-phone eudc-get-email eudc-set-server) "eudc" "net/eudc.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from net/eudc.el (autoload 'eudc-set-server "eudc" "\ @@ -9946,7 +9951,7 @@ This does nothing except loading eudc by autoload side-effect. ;;;### (autoloads (eudc-display-jpeg-as-button eudc-display-jpeg-inline ;;;;;; eudc-display-sound eudc-display-mail eudc-display-url eudc-display-generic-binary) -;;;;;; "eudc-bob" "net/eudc-bob.el" (20309 60936)) +;;;;;; "eudc-bob" "net/eudc-bob.el" (20352 65510)) ;;; Generated autoloads from net/eudc-bob.el (autoload 'eudc-display-generic-binary "eudc-bob" "\ @@ -9982,7 +9987,7 @@ Display a button for the JPEG DATA. ;;;*** ;;;### (autoloads (eudc-try-bbdb-insert eudc-insert-record-at-point-into-bbdb) -;;;;;; "eudc-export" "net/eudc-export.el" (20309 60936)) +;;;;;; "eudc-export" "net/eudc-export.el" (20352 65510)) ;;; Generated autoloads from net/eudc-export.el (autoload 'eudc-insert-record-at-point-into-bbdb "eudc-export" "\ @@ -9999,7 +10004,7 @@ Call `eudc-insert-record-at-point-into-bbdb' if on a record. ;;;*** ;;;### (autoloads (eudc-edit-hotlist) "eudc-hotlist" "net/eudc-hotlist.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from net/eudc-hotlist.el (autoload 'eudc-edit-hotlist "eudc-hotlist" "\ @@ -10009,8 +10014,8 @@ Edit the hotlist of directory servers in a specialized buffer. ;;;*** -;;;### (autoloads (ewoc-create) "ewoc" "emacs-lisp/ewoc.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (ewoc-create) "ewoc" "emacs-lisp/ewoc.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from emacs-lisp/ewoc.el (autoload 'ewoc-create "ewoc" "\ @@ -10039,7 +10044,7 @@ fourth arg NOSEP non-nil inhibits this. ;;;### (autoloads (executable-make-buffer-file-executable-if-script-p ;;;;;; executable-self-display executable-set-magic executable-interpret ;;;;;; executable-command-find-posix-p) "executable" "progmodes/executable.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from progmodes/executable.el (autoload 'executable-command-find-posix-p "executable" "\ @@ -10082,7 +10087,7 @@ file modes. ;;;### (autoloads (expand-jump-to-next-slot expand-jump-to-previous-slot ;;;;;; expand-abbrev-hook expand-add-abbrevs) "expand" "expand.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from expand.el (autoload 'expand-add-abbrevs "expand" "\ @@ -10131,7 +10136,7 @@ This is used only in conjunction with `expand-add-abbrevs'. ;;;*** -;;;### (autoloads (f90-mode) "f90" "progmodes/f90.el" (20309 60936)) +;;;### (autoloads (f90-mode) "f90" "progmodes/f90.el" (20352 65510)) ;;; Generated autoloads from progmodes/f90.el (autoload 'f90-mode "f90" "\ @@ -10201,8 +10206,8 @@ with no args, if that value is non-nil. ;;;### (autoloads (variable-pitch-mode buffer-face-toggle buffer-face-set ;;;;;; buffer-face-mode text-scale-adjust text-scale-decrease text-scale-increase ;;;;;; text-scale-set face-remap-set-base face-remap-reset-base -;;;;;; face-remap-add-relative) "face-remap" "face-remap.el" (20329 -;;;;;; 30063)) +;;;;;; face-remap-add-relative) "face-remap" "face-remap.el" (20370 +;;;;;; 22954)) ;;; Generated autoloads from face-remap.el (autoload 'face-remap-add-relative "face-remap" "\ @@ -10350,7 +10355,7 @@ Besides the choice of face, it is the same as `buffer-face-mode'. ;;;### (autoloads (feedmail-queue-reminder feedmail-run-the-queue ;;;;;; feedmail-run-the-queue-global-prompt feedmail-run-the-queue-no-prompts -;;;;;; feedmail-send-it) "feedmail" "mail/feedmail.el" (20309 60936)) +;;;;;; feedmail-send-it) "feedmail" "mail/feedmail.el" (20352 65510)) ;;; Generated autoloads from mail/feedmail.el (autoload 'feedmail-send-it "feedmail" "\ @@ -10404,7 +10409,7 @@ you can set `feedmail-queue-reminder-alist' to nil. ;;;*** ;;;### (autoloads (ffap-bindings dired-at-point ffap-at-mouse ffap-menu -;;;;;; find-file-at-point ffap-next) "ffap" "ffap.el" (20309 60936)) +;;;;;; find-file-at-point ffap-next) "ffap" "ffap.el" (20352 65510)) ;;; Generated autoloads from ffap.el (autoload 'ffap-next "ffap" "\ @@ -10468,7 +10473,7 @@ Evaluate the forms in variable `ffap-bindings'. ;;;### (autoloads (file-cache-minibuffer-complete file-cache-add-directory-recursively ;;;;;; file-cache-add-directory-using-locate file-cache-add-directory-using-find ;;;;;; file-cache-add-file file-cache-add-directory-list file-cache-add-directory) -;;;;;; "filecache" "filecache.el" (20309 60936)) +;;;;;; "filecache" "filecache.el" (20352 65510)) ;;; Generated autoloads from filecache.el (autoload 'file-cache-add-directory "filecache" "\ @@ -10528,7 +10533,7 @@ the name is considered already unique; only the second substitution ;;;;;; copy-file-locals-to-dir-locals delete-dir-local-variable ;;;;;; add-dir-local-variable delete-file-local-variable-prop-line ;;;;;; add-file-local-variable-prop-line delete-file-local-variable -;;;;;; add-file-local-variable) "files-x" "files-x.el" (20309 60936)) +;;;;;; add-file-local-variable) "files-x" "files-x.el" (20352 65510)) ;;; Generated autoloads from files-x.el (autoload 'add-file-local-variable "files-x" "\ @@ -10593,8 +10598,8 @@ Copy directory-local variables to the -*- line. ;;;*** -;;;### (autoloads (filesets-init) "filesets" "filesets.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (filesets-init) "filesets" "filesets.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from filesets.el (autoload 'filesets-init "filesets" "\ @@ -10605,7 +10610,7 @@ Set up hooks, load the cache file -- if existing -- and build the menu. ;;;*** -;;;### (autoloads (find-cmd) "find-cmd" "find-cmd.el" (20309 60936)) +;;;### (autoloads (find-cmd) "find-cmd" "find-cmd.el" (20352 65510)) ;;; Generated autoloads from find-cmd.el (autoload 'find-cmd "find-cmd" "\ @@ -10625,7 +10630,7 @@ result is a string that should be ready for the command line. ;;;*** ;;;### (autoloads (find-grep-dired find-name-dired find-dired) "find-dired" -;;;;;; "find-dired.el" (20309 60936)) +;;;;;; "find-dired.el" (20352 65510)) ;;; Generated autoloads from find-dired.el (autoload 'find-dired "find-dired" "\ @@ -10665,7 +10670,7 @@ use in place of \"-ls\" as the final argument. ;;;### (autoloads (ff-mouse-find-other-file-other-window ff-mouse-find-other-file ;;;;;; ff-find-other-file ff-get-other-file) "find-file" "find-file.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from find-file.el (defvar ff-special-constructs `((,(purecopy "^#\\s *\\(include\\|import\\)\\s +[<\"]\\(.*\\)[>\"]") lambda nil (buffer-substring (match-beginning 2) (match-end 2)))) "\ @@ -10759,7 +10764,7 @@ Visit the file you click on in another window. ;;;;;; find-variable find-variable-noselect find-function-other-frame ;;;;;; find-function-other-window find-function find-function-noselect ;;;;;; find-function-search-for-symbol find-library) "find-func" -;;;;;; "emacs-lisp/find-func.el" (20309 60936)) +;;;;;; "emacs-lisp/find-func.el" (20352 65510)) ;;; Generated autoloads from emacs-lisp/find-func.el (autoload 'find-library "find-func" "\ @@ -10918,7 +10923,7 @@ Define some key bindings for the find-function family of functions. ;;;*** ;;;### (autoloads (find-lisp-find-dired-filter find-lisp-find-dired-subdirectories -;;;;;; find-lisp-find-dired) "find-lisp" "find-lisp.el" (20309 60936)) +;;;;;; find-lisp-find-dired) "find-lisp" "find-lisp.el" (20352 65510)) ;;; Generated autoloads from find-lisp.el (autoload 'find-lisp-find-dired "find-lisp" "\ @@ -10939,7 +10944,7 @@ Change the filter on a find-lisp-find-dired buffer to REGEXP. ;;;*** ;;;### (autoloads (finder-by-keyword finder-commentary finder-list-keywords) -;;;;;; "finder" "finder.el" (20309 60936)) +;;;;;; "finder" "finder.el" (20352 65510)) ;;; Generated autoloads from finder.el (autoload 'finder-list-keywords "finder" "\ @@ -10961,7 +10966,7 @@ Find packages matching a given keyword. ;;;*** ;;;### (autoloads (enable-flow-control-on enable-flow-control) "flow-ctrl" -;;;;;; "flow-ctrl.el" (20309 60936)) +;;;;;; "flow-ctrl.el" (20352 65510)) ;;; Generated autoloads from flow-ctrl.el (autoload 'enable-flow-control "flow-ctrl" "\ @@ -10983,7 +10988,7 @@ to get the effect of a C-q. ;;;*** ;;;### (autoloads (fill-flowed fill-flowed-encode) "flow-fill" "gnus/flow-fill.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from gnus/flow-fill.el (autoload 'fill-flowed-encode "flow-fill" "\ @@ -10999,7 +11004,7 @@ to get the effect of a C-q. ;;;*** ;;;### (autoloads (flymake-find-file-hook flymake-mode-off flymake-mode-on -;;;;;; flymake-mode) "flymake" "progmodes/flymake.el" (20309 60936)) +;;;;;; flymake-mode) "flymake" "progmodes/flymake.el" (20352 65510)) ;;; Generated autoloads from progmodes/flymake.el (autoload 'flymake-mode "flymake" "\ @@ -11029,7 +11034,7 @@ Turn flymake mode off. ;;;### (autoloads (flyspell-buffer flyspell-region flyspell-mode-off ;;;;;; turn-off-flyspell turn-on-flyspell flyspell-mode flyspell-prog-mode) -;;;;;; "flyspell" "textmodes/flyspell.el" (20309 60936)) +;;;;;; "flyspell" "textmodes/flyspell.el" (20352 65510)) ;;; Generated autoloads from textmodes/flyspell.el (autoload 'flyspell-prog-mode "flyspell" "\ @@ -11101,7 +11106,7 @@ Flyspell whole buffer. ;;;### (autoloads (follow-delete-other-windows-and-split follow-mode ;;;;;; turn-off-follow-mode turn-on-follow-mode) "follow" "follow.el" -;;;;;; (20329 33834)) +;;;;;; (20352 65510)) ;;; Generated autoloads from follow.el (autoload 'turn-on-follow-mode "follow" "\ @@ -11177,8 +11182,8 @@ in your `~/.emacs' file, replacing [f7] by your favorite key: ;;;*** -;;;### (autoloads (footnote-mode) "footnote" "mail/footnote.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (footnote-mode) "footnote" "mail/footnote.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from mail/footnote.el (autoload 'footnote-mode "footnote" "\ @@ -11197,7 +11202,7 @@ play around with the following keys: ;;;*** ;;;### (autoloads (forms-find-file-other-window forms-find-file forms-mode) -;;;;;; "forms" "forms.el" (20341 24416)) +;;;;;; "forms" "forms.el" (20352 65510)) ;;; Generated autoloads from forms.el (autoload 'forms-mode "forms" "\ @@ -11234,7 +11239,7 @@ Visit a file in Forms mode in other window. ;;;*** ;;;### (autoloads (fortran-mode) "fortran" "progmodes/fortran.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from progmodes/fortran.el (autoload 'fortran-mode "fortran" "\ @@ -11312,7 +11317,7 @@ with no args, if that value is non-nil. ;;;*** ;;;### (autoloads (fortune fortune-to-signature fortune-compile fortune-from-region -;;;;;; fortune-add-fortune) "fortune" "play/fortune.el" (20309 60936)) +;;;;;; fortune-add-fortune) "fortune" "play/fortune.el" (20352 65510)) ;;; Generated autoloads from play/fortune.el (autoload 'fortune-add-fortune "fortune" "\ @@ -11361,7 +11366,7 @@ and choose the directory as the fortune-file. ;;;*** ;;;### (autoloads (gdb gdb-enable-debug) "gdb-mi" "progmodes/gdb-mi.el" -;;;;;; (20320 14810)) +;;;;;; (20370 20099)) ;;; Generated autoloads from progmodes/gdb-mi.el (defvar gdb-enable-debug nil "\ @@ -11428,8 +11433,8 @@ detailed description of this mode. ;;;*** ;;;### (autoloads (generic-make-keywords-list generic-mode generic-mode-internal -;;;;;; define-generic-mode) "generic" "emacs-lisp/generic.el" (20309 -;;;;;; 60936)) +;;;;;; define-generic-mode) "generic" "emacs-lisp/generic.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from emacs-lisp/generic.el (defvar generic-mode-list nil "\ @@ -11506,7 +11511,7 @@ regular expression that can be used as an element of ;;;*** ;;;### (autoloads (glasses-mode) "glasses" "progmodes/glasses.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from progmodes/glasses.el (autoload 'glasses-mode "glasses" "\ @@ -11522,7 +11527,7 @@ add virtual separators (like underscores) at places they belong to. ;;;### (autoloads (gmm-tool-bar-from-list gmm-widget-p gmm-error ;;;;;; gmm-message gmm-regexp-concat) "gmm-utils" "gnus/gmm-utils.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from gnus/gmm-utils.el (autoload 'gmm-regexp-concat "gmm-utils" "\ @@ -11577,7 +11582,7 @@ DEFAULT-MAP specifies the default key map for ICON-LIST. ;;;*** ;;;### (autoloads (gnus gnus-other-frame gnus-slave gnus-no-server -;;;;;; gnus-slave-no-server) "gnus" "gnus/gnus.el" (20309 60936)) +;;;;;; gnus-slave-no-server) "gnus" "gnus/gnus.el" (20370 31722)) ;;; Generated autoloads from gnus/gnus.el (when (fboundp 'custom-autoload) (custom-autoload 'gnus-select-method "gnus")) @@ -11630,7 +11635,7 @@ prompt the user for the name of an NNTP server to use. ;;;;;; gnus-agent-get-undownloaded-list gnus-agent-delete-group ;;;;;; gnus-agent-rename-group gnus-agent-possibly-save-gcc gnus-agentize ;;;;;; gnus-slave-unplugged gnus-plugged gnus-unplugged) "gnus-agent" -;;;;;; "gnus/gnus-agent.el" (20309 60936)) +;;;;;; "gnus/gnus-agent.el" (20352 65510)) ;;; Generated autoloads from gnus/gnus-agent.el (autoload 'gnus-unplugged "gnus-agent" "\ @@ -11721,7 +11726,7 @@ If CLEAN, obsolete (ignore). ;;;*** ;;;### (autoloads (gnus-article-prepare-display) "gnus-art" "gnus/gnus-art.el" -;;;;;; (20309 60936)) +;;;;;; (20358 29669)) ;;; Generated autoloads from gnus/gnus-art.el (autoload 'gnus-article-prepare-display "gnus-art" "\ @@ -11732,7 +11737,7 @@ Make the current buffer look like a nice article. ;;;*** ;;;### (autoloads (gnus-bookmark-bmenu-list gnus-bookmark-jump gnus-bookmark-set) -;;;;;; "gnus-bookmark" "gnus/gnus-bookmark.el" (20309 60936)) +;;;;;; "gnus-bookmark" "gnus/gnus-bookmark.el" (20352 65510)) ;;; Generated autoloads from gnus/gnus-bookmark.el (autoload 'gnus-bookmark-set "gnus-bookmark" "\ @@ -11757,8 +11762,8 @@ deletion, or > if it is flagged for displaying. ;;;### (autoloads (gnus-cache-delete-group gnus-cache-rename-group ;;;;;; gnus-cache-generate-nov-databases gnus-cache-generate-active -;;;;;; gnus-jog-cache) "gnus-cache" "gnus/gnus-cache.el" (20309 -;;;;;; 60936)) +;;;;;; gnus-jog-cache) "gnus-cache" "gnus/gnus-cache.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from gnus/gnus-cache.el (autoload 'gnus-jog-cache "gnus-cache" "\ @@ -11800,7 +11805,7 @@ supported. ;;;*** ;;;### (autoloads (gnus-delay-initialize gnus-delay-send-queue gnus-delay-article) -;;;;;; "gnus-delay" "gnus/gnus-delay.el" (20309 60936)) +;;;;;; "gnus-delay" "gnus/gnus-delay.el" (20352 65510)) ;;; Generated autoloads from gnus/gnus-delay.el (autoload 'gnus-delay-article "gnus-delay" "\ @@ -11836,7 +11841,7 @@ Checking delayed messages is skipped if optional arg NO-CHECK is non-nil. ;;;*** ;;;### (autoloads (gnus-user-format-function-D gnus-user-format-function-d) -;;;;;; "gnus-diary" "gnus/gnus-diary.el" (20309 60936)) +;;;;;; "gnus-diary" "gnus/gnus-diary.el" (20352 65510)) ;;; Generated autoloads from gnus/gnus-diary.el (autoload 'gnus-user-format-function-d "gnus-diary" "\ @@ -11852,7 +11857,7 @@ Checking delayed messages is skipped if optional arg NO-CHECK is non-nil. ;;;*** ;;;### (autoloads (turn-on-gnus-dired-mode) "gnus-dired" "gnus/gnus-dired.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from gnus/gnus-dired.el (autoload 'turn-on-gnus-dired-mode "gnus-dired" "\ @@ -11863,7 +11868,7 @@ Convenience method to turn on gnus-dired-mode. ;;;*** ;;;### (autoloads (gnus-draft-reminder) "gnus-draft" "gnus/gnus-draft.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from gnus/gnus-draft.el (autoload 'gnus-draft-reminder "gnus-draft" "\ @@ -11875,8 +11880,8 @@ Reminder user if there are unsent drafts. ;;;### (autoloads (gnus-convert-png-to-face gnus-convert-face-to-png ;;;;;; gnus-face-from-file gnus-x-face-from-file gnus-insert-random-x-face-header -;;;;;; gnus-random-x-face) "gnus-fun" "gnus/gnus-fun.el" (20309 -;;;;;; 60936)) +;;;;;; gnus-random-x-face) "gnus-fun" "gnus/gnus-fun.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from gnus/gnus-fun.el (autoload 'gnus-random-x-face "gnus-fun" "\ @@ -11921,7 +11926,7 @@ FILE should be a PNG file that's 48x48 and smaller than or equal to ;;;*** ;;;### (autoloads (gnus-treat-mail-gravatar gnus-treat-from-gravatar) -;;;;;; "gnus-gravatar" "gnus/gnus-gravatar.el" (20309 60936)) +;;;;;; "gnus-gravatar" "gnus/gnus-gravatar.el" (20352 65510)) ;;; Generated autoloads from gnus/gnus-gravatar.el (autoload 'gnus-treat-from-gravatar "gnus-gravatar" "\ @@ -11939,7 +11944,7 @@ If gravatars are already displayed, remove them. ;;;*** ;;;### (autoloads (gnus-fetch-group-other-frame gnus-fetch-group) -;;;;;; "gnus-group" "gnus/gnus-group.el" (20309 60936)) +;;;;;; "gnus-group" "gnus/gnus-group.el" (20352 65510)) ;;; Generated autoloads from gnus/gnus-group.el (autoload 'gnus-fetch-group "gnus-group" "\ @@ -11957,7 +11962,7 @@ Pop up a frame and enter GROUP. ;;;*** ;;;### (autoloads (gnus-html-prefetch-images gnus-article-html) "gnus-html" -;;;;;; "gnus/gnus-html.el" (20309 60936)) +;;;;;; "gnus/gnus-html.el" (20352 65510)) ;;; Generated autoloads from gnus/gnus-html.el (autoload 'gnus-article-html "gnus-html" "\ @@ -11973,7 +11978,7 @@ Pop up a frame and enter GROUP. ;;;*** ;;;### (autoloads (gnus-batch-score) "gnus-kill" "gnus/gnus-kill.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from gnus/gnus-kill.el (defalias 'gnus-batch-kill 'gnus-batch-score) @@ -11988,7 +11993,7 @@ Usage: emacs -batch -l ~/.emacs -l gnus -f gnus-batch-score ;;;### (autoloads (gnus-mailing-list-mode gnus-mailing-list-insinuate ;;;;;; turn-on-gnus-mailing-list-mode) "gnus-ml" "gnus/gnus-ml.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from gnus/gnus-ml.el (autoload 'turn-on-gnus-mailing-list-mode "gnus-ml" "\ @@ -12013,7 +12018,7 @@ Minor mode for providing mailing-list commands. ;;;### (autoloads (gnus-group-split-fancy gnus-group-split gnus-group-split-update ;;;;;; gnus-group-split-setup) "gnus-mlspl" "gnus/gnus-mlspl.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from gnus/gnus-mlspl.el (autoload 'gnus-group-split-setup "gnus-mlspl" "\ @@ -12114,7 +12119,7 @@ Calling (gnus-group-split-fancy nil nil \"mail.others\") returns: ;;;*** ;;;### (autoloads (gnus-button-reply gnus-button-mailto gnus-msg-mail) -;;;;;; "gnus-msg" "gnus/gnus-msg.el" (20321 38938)) +;;;;;; "gnus-msg" "gnus/gnus-msg.el" (20359 42675)) ;;; Generated autoloads from gnus/gnus-msg.el (autoload 'gnus-msg-mail "gnus-msg" "\ @@ -12142,7 +12147,7 @@ Like `message-reply'. ;;;### (autoloads (gnus-treat-newsgroups-picon gnus-treat-mail-picon ;;;;;; gnus-treat-from-picon) "gnus-picon" "gnus/gnus-picon.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from gnus/gnus-picon.el (autoload 'gnus-treat-from-picon "gnus-picon" "\ @@ -12169,7 +12174,7 @@ If picons are already displayed, remove them. ;;;;;; gnus-sorted-nintersection gnus-sorted-range-intersection ;;;;;; gnus-sorted-intersection gnus-intersection gnus-sorted-complement ;;;;;; gnus-sorted-ndifference gnus-sorted-difference) "gnus-range" -;;;;;; "gnus/gnus-range.el" (20309 60936)) +;;;;;; "gnus/gnus-range.el" (20352 65510)) ;;; Generated autoloads from gnus/gnus-range.el (autoload 'gnus-sorted-difference "gnus-range" "\ @@ -12237,7 +12242,7 @@ Add NUM into sorted LIST by side effect. ;;;*** ;;;### (autoloads (gnus-registry-install-hooks gnus-registry-initialize) -;;;;;; "gnus-registry" "gnus/gnus-registry.el" (20309 60936)) +;;;;;; "gnus-registry" "gnus/gnus-registry.el" (20352 65510)) ;;; Generated autoloads from gnus/gnus-registry.el (autoload 'gnus-registry-initialize "gnus-registry" "\ @@ -12253,8 +12258,8 @@ Install the registry hooks. ;;;*** ;;;### (autoloads (gnus-sieve-article-add-rule gnus-sieve-generate -;;;;;; gnus-sieve-update) "gnus-sieve" "gnus/gnus-sieve.el" (20309 -;;;;;; 60936)) +;;;;;; gnus-sieve-update) "gnus-sieve" "gnus/gnus-sieve.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from gnus/gnus-sieve.el (autoload 'gnus-sieve-update "gnus-sieve" "\ @@ -12282,7 +12287,7 @@ See the documentation for these variables and functions for details. ;;;*** ;;;### (autoloads (gnus-update-format) "gnus-spec" "gnus/gnus-spec.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from gnus/gnus-spec.el (autoload 'gnus-update-format "gnus-spec" "\ @@ -12293,7 +12298,7 @@ Update the format specification near point. ;;;*** ;;;### (autoloads (gnus-declare-backend) "gnus-start" "gnus/gnus-start.el" -;;;;;; (20309 60936)) +;;;;;; (20358 29669)) ;;; Generated autoloads from gnus/gnus-start.el (autoload 'gnus-declare-backend "gnus-start" "\ @@ -12304,7 +12309,7 @@ Declare back end NAME with ABILITIES as a Gnus back end. ;;;*** ;;;### (autoloads (gnus-summary-bookmark-jump) "gnus-sum" "gnus/gnus-sum.el" -;;;;;; (20321 38938)) +;;;;;; (20352 65510)) ;;; Generated autoloads from gnus/gnus-sum.el (autoload 'gnus-summary-bookmark-jump "gnus-sum" "\ @@ -12316,7 +12321,7 @@ BOOKMARK is a bookmark name or a bookmark record. ;;;*** ;;;### (autoloads (gnus-sync-install-hooks gnus-sync-initialize) -;;;;;; "gnus-sync" "gnus/gnus-sync.el" (20309 60936)) +;;;;;; "gnus-sync" "gnus/gnus-sync.el" (20352 65510)) ;;; Generated autoloads from gnus/gnus-sync.el (autoload 'gnus-sync-initialize "gnus-sync" "\ @@ -12332,7 +12337,7 @@ Install the sync hooks. ;;;*** ;;;### (autoloads (gnus-add-configuration) "gnus-win" "gnus/gnus-win.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from gnus/gnus-win.el (autoload 'gnus-add-configuration "gnus-win" "\ @@ -12343,7 +12348,7 @@ Add the window configuration CONF to `gnus-buffer-configuration'. ;;;*** ;;;### (autoloads (gnutls-min-prime-bits) "gnutls" "net/gnutls.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from net/gnutls.el (defvar gnutls-min-prime-bits nil "\ @@ -12359,7 +12364,7 @@ A value of nil says to use the default gnutls value.") ;;;*** -;;;### (autoloads (gomoku) "gomoku" "play/gomoku.el" (20309 60936)) +;;;### (autoloads (gomoku) "gomoku" "play/gomoku.el" (20352 65510)) ;;; Generated autoloads from play/gomoku.el (autoload 'gomoku "gomoku" "\ @@ -12386,8 +12391,8 @@ Use \\[describe-mode] for more info. ;;;*** ;;;### (autoloads (goto-address-prog-mode goto-address-mode goto-address -;;;;;; goto-address-at-point) "goto-addr" "net/goto-addr.el" (20309 -;;;;;; 60936)) +;;;;;; goto-address-at-point) "goto-addr" "net/goto-addr.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from net/goto-addr.el (define-obsolete-function-alias 'goto-address-at-mouse 'goto-address-at-point "22.1") @@ -12429,7 +12434,7 @@ Like `goto-address-mode', but only for comments and strings. ;;;*** ;;;### (autoloads (gravatar-retrieve-synchronously gravatar-retrieve) -;;;;;; "gravatar" "gnus/gravatar.el" (20309 60936)) +;;;;;; "gravatar" "gnus/gravatar.el" (20352 65510)) ;;; Generated autoloads from gnus/gravatar.el (autoload 'gravatar-retrieve "gravatar" "\ @@ -12447,7 +12452,7 @@ Retrieve MAIL-ADDRESS gravatar and returns it. ;;;### (autoloads (zrgrep rgrep lgrep grep-find grep grep-mode grep-compute-defaults ;;;;;; grep-process-setup grep-setup-hook grep-find-command grep-command -;;;;;; grep-window-height) "grep" "progmodes/grep.el" (20309 60936)) +;;;;;; grep-window-height) "grep" "progmodes/grep.el" (20366 22731)) ;;; Generated autoloads from progmodes/grep.el (defvar grep-window-height nil "\ @@ -12530,8 +12535,8 @@ Sets `grep-last-buffer' and `compilation-window-height'. (autoload 'grep "grep" "\ Run grep, with user-specified args, and collect output in a buffer. While grep runs asynchronously, you can use \\[next-error] (M-x next-error), -or \\\\[compile-goto-error] in the grep output buffer, to go to the lines where grep -found matches. +or \\\\[compile-goto-error] in the *grep* buffer, to go to the lines where grep found +matches. To kill the grep job before it finishes, type \\[kill-compilation]. For doing a recursive `grep', see the `rgrep' command. For running `grep' in a specific directory, see `lgrep'. @@ -12587,9 +12592,10 @@ With \\[universal-argument] prefix, you can edit the constructed shell command l before it is executed. With two \\[universal-argument] prefixes, directly edit and run `grep-find-command'. -Collect output in a buffer. While find runs asynchronously, you -can use \\[next-error] (M-x next-error), or \\\\[compile-goto-error] in the grep output buffer, -to go to the lines where grep found matches. +Collect output in a buffer. While the recursive grep is running, +you can use \\[next-error] (M-x next-error), or \\\\[compile-goto-error] in the grep output buffer, +to visit the lines where matches were found. To kill the job +before it finishes, type \\[kill-compilation]. This command shares argument histories with \\[lgrep] and \\[grep-find]. @@ -12609,7 +12615,7 @@ file name to `*.gz', and sets `grep-highlight-matches' to `always'. ;;;*** -;;;### (autoloads (gs-load-image) "gs" "gs.el" (20309 60936)) +;;;### (autoloads (gs-load-image) "gs" "gs.el" (20352 65510)) ;;; Generated autoloads from gs.el (autoload 'gs-load-image "gs" "\ @@ -12623,7 +12629,7 @@ the form \"WINDOW-ID PIXMAP-ID\". Value is non-nil if successful. ;;;*** ;;;### (autoloads (gud-tooltip-mode gdb-script-mode jdb pdb perldb -;;;;;; xdb dbx sdb gud-gdb) "gud" "progmodes/gud.el" (20309 60936)) +;;;;;; xdb dbx sdb gud-gdb) "gud" "progmodes/gud.el" (20368 16951)) ;;; Generated autoloads from progmodes/gud.el (autoload 'gud-gdb "gud" "\ @@ -12711,8 +12717,8 @@ it if ARG is omitted or nil. ;;;*** -;;;### (autoloads (handwrite) "handwrite" "play/handwrite.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (handwrite) "handwrite" "play/handwrite.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from play/handwrite.el (autoload 'handwrite "handwrite" "\ @@ -12730,7 +12736,7 @@ Variables: `handwrite-linespace' (default 12) ;;;*** ;;;### (autoloads (hanoi-unix-64 hanoi-unix hanoi) "hanoi" "play/hanoi.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from play/hanoi.el (autoload 'hanoi "hanoi" "\ @@ -12759,7 +12765,7 @@ to be updated. ;;;### (autoloads (mail-check-payment mail-add-payment-async mail-add-payment ;;;;;; hashcash-verify-payment hashcash-insert-payment-async hashcash-insert-payment) -;;;;;; "hashcash" "mail/hashcash.el" (20309 60936)) +;;;;;; "hashcash" "mail/hashcash.el" (20352 65510)) ;;; Generated autoloads from mail/hashcash.el (autoload 'hashcash-insert-payment "hashcash" "\ @@ -12804,7 +12810,7 @@ Prefix arg sets default accept amount temporarily. ;;;### (autoloads (scan-buf-previous-region scan-buf-next-region ;;;;;; scan-buf-move-to-region help-at-pt-display-when-idle help-at-pt-set-timer ;;;;;; help-at-pt-cancel-timer display-local-help help-at-pt-kbd-string -;;;;;; help-at-pt-string) "help-at-pt" "help-at-pt.el" (20309 60936)) +;;;;;; help-at-pt-string) "help-at-pt" "help-at-pt.el" (20352 65510)) ;;; Generated autoloads from help-at-pt.el (autoload 'help-at-pt-string "help-at-pt" "\ @@ -12934,7 +12940,7 @@ different regions. With numeric argument ARG, behaves like ;;;### (autoloads (doc-file-to-info doc-file-to-man describe-categories ;;;;;; describe-syntax describe-variable variable-at-point describe-function-1 ;;;;;; find-lisp-object-file-name help-C-file-name describe-function) -;;;;;; "help-fns" "help-fns.el" (20309 60936)) +;;;;;; "help-fns" "help-fns.el" (20352 65510)) ;;; Generated autoloads from help-fns.el (autoload 'describe-function "help-fns" "\ @@ -13014,7 +13020,7 @@ Produce a texinfo buffer with sorted doc-strings from the DOC file. ;;;*** ;;;### (autoloads (three-step-help) "help-macro" "help-macro.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from help-macro.el (defvar three-step-help nil "\ @@ -13030,8 +13036,8 @@ gives the window that lists the options.") ;;;### (autoloads (help-xref-on-pp help-insert-xref-button help-xref-button ;;;;;; help-make-xrefs help-buffer help-setup-xref help-mode-finish -;;;;;; help-mode-setup help-mode) "help-mode" "help-mode.el" (20309 -;;;;;; 60936)) +;;;;;; help-mode-setup help-mode) "help-mode" "help-mode.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from help-mode.el (autoload 'help-mode "help-mode" "\ @@ -13124,7 +13130,7 @@ Add xrefs for symbols in `pp's output between FROM and TO. ;;;*** ;;;### (autoloads (Helper-help Helper-describe-bindings) "helper" -;;;;;; "emacs-lisp/helper.el" (20309 60936)) +;;;;;; "emacs-lisp/helper.el" (20352 65510)) ;;; Generated autoloads from emacs-lisp/helper.el (autoload 'Helper-describe-bindings "helper" "\ @@ -13140,7 +13146,7 @@ Provide help for current mode. ;;;*** ;;;### (autoloads (hexlify-buffer hexl-find-file hexl-mode) "hexl" -;;;;;; "hexl.el" (20309 60936)) +;;;;;; "hexl.el" (20352 65510)) ;;; Generated autoloads from hexl.el (autoload 'hexl-mode "hexl" "\ @@ -13237,7 +13243,7 @@ This discards the buffer's undo information. ;;;### (autoloads (hi-lock-write-interactive-patterns hi-lock-unface-buffer ;;;;;; hi-lock-face-phrase-buffer hi-lock-face-buffer hi-lock-line-face-buffer ;;;;;; global-hi-lock-mode hi-lock-mode) "hi-lock" "hi-lock.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from hi-lock.el (autoload 'hi-lock-mode "hi-lock" "\ @@ -13376,7 +13382,7 @@ be found in variable `hi-lock-interactive-patterns'. ;;;*** ;;;### (autoloads (hide-ifdef-mode) "hideif" "progmodes/hideif.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from progmodes/hideif.el (autoload 'hide-ifdef-mode "hideif" "\ @@ -13420,7 +13426,7 @@ Several variables affect how the hiding is done: ;;;*** ;;;### (autoloads (turn-off-hideshow hs-minor-mode) "hideshow" "progmodes/hideshow.el" -;;;;;; (20330 2324)) +;;;;;; (20352 65510)) ;;; Generated autoloads from progmodes/hideshow.el (defvar hs-special-modes-alist (mapcar 'purecopy '((c-mode "{" "}" "/[*/]" nil nil) (c++-mode "{" "}" "/[*/]" nil nil) (bibtex-mode ("@\\S(*\\(\\s(\\)" 1)) (java-mode "{" "}" "/[*/]" nil nil) (js-mode "{" "}" "/[*/]" nil))) "\ @@ -13486,8 +13492,8 @@ Unconditionally turn off `hs-minor-mode'. ;;;;;; highlight-compare-buffers highlight-changes-rotate-faces ;;;;;; highlight-changes-previous-change highlight-changes-next-change ;;;;;; highlight-changes-remove-highlight highlight-changes-visible-mode -;;;;;; highlight-changes-mode) "hilit-chg" "hilit-chg.el" (20309 -;;;;;; 60936)) +;;;;;; highlight-changes-mode) "hilit-chg" "hilit-chg.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from hilit-chg.el (autoload 'highlight-changes-mode "hilit-chg" "\ @@ -13622,7 +13628,7 @@ See `highlight-changes-mode' for more information on Highlight-Changes mode. ;;;;;; hippie-expand-ignore-buffers hippie-expand-max-buffers hippie-expand-no-restriction ;;;;;; hippie-expand-dabbrev-as-symbol hippie-expand-dabbrev-skip-space ;;;;;; hippie-expand-verbose hippie-expand-try-functions-list) "hippie-exp" -;;;;;; "hippie-exp.el" (20309 60936)) +;;;;;; "hippie-exp.el" (20352 65510)) ;;; Generated autoloads from hippie-exp.el (defvar hippie-expand-try-functions-list '(try-complete-file-name-partially try-complete-file-name try-expand-all-abbrevs try-expand-list try-expand-line try-expand-dabbrev try-expand-dabbrev-all-buffers try-expand-dabbrev-from-kill try-complete-lisp-symbol-partially try-complete-lisp-symbol) "\ @@ -13695,7 +13701,7 @@ argument VERBOSE non-nil makes the function verbose. ;;;*** ;;;### (autoloads (global-hl-line-mode hl-line-mode) "hl-line" "hl-line.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from hl-line.el (autoload 'hl-line-mode "hl-line" "\ @@ -13748,7 +13754,7 @@ Global-Hl-Line mode uses the functions `global-hl-line-unhighlight' and ;;;;;; holiday-bahai-holidays holiday-islamic-holidays holiday-christian-holidays ;;;;;; holiday-hebrew-holidays holiday-other-holidays holiday-local-holidays ;;;;;; holiday-oriental-holidays holiday-general-holidays) "holidays" -;;;;;; "calendar/holidays.el" (20309 60936)) +;;;;;; "calendar/holidays.el" (20354 57191)) ;;; Generated autoloads from calendar/holidays.el (define-obsolete-variable-alias 'general-holidays 'holiday-general-holidays "23.1") @@ -13896,8 +13902,8 @@ The optional LABEL is used to label the buffer created. ;;;*** -;;;### (autoloads (html2text) "html2text" "gnus/html2text.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (html2text) "html2text" "gnus/html2text.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from gnus/html2text.el (autoload 'html2text "html2text" "\ @@ -13908,7 +13914,7 @@ Convert HTML to plain text in the current buffer. ;;;*** ;;;### (autoloads (htmlfontify-copy-and-link-dir htmlfontify-buffer) -;;;;;; "htmlfontify" "htmlfontify.el" (20324 39235)) +;;;;;; "htmlfontify" "htmlfontify.el" (20352 65510)) ;;; Generated autoloads from htmlfontify.el (autoload 'htmlfontify-buffer "htmlfontify" "\ @@ -13941,8 +13947,8 @@ You may also want to set `hfy-page-header' and `hfy-page-footer'. ;;;*** ;;;### (autoloads (define-ibuffer-filter define-ibuffer-op define-ibuffer-sorter -;;;;;; define-ibuffer-column) "ibuf-macs" "ibuf-macs.el" (20309 -;;;;;; 60936)) +;;;;;; define-ibuffer-column) "ibuf-macs" "ibuf-macs.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from ibuf-macs.el (autoload 'define-ibuffer-column "ibuf-macs" "\ @@ -14039,7 +14045,7 @@ bound to the current value of the filter. ;;;*** ;;;### (autoloads (ibuffer ibuffer-other-window ibuffer-list-buffers) -;;;;;; "ibuffer" "ibuffer.el" (20317 25086)) +;;;;;; "ibuffer" "ibuffer.el" (20352 65510)) ;;; Generated autoloads from ibuffer.el (autoload 'ibuffer-list-buffers "ibuffer" "\ @@ -14080,7 +14086,7 @@ FORMATS is the value to use for `ibuffer-formats'. ;;;### (autoloads (icalendar-import-buffer icalendar-import-file ;;;;;; icalendar-export-region icalendar-export-file) "icalendar" -;;;;;; "calendar/icalendar.el" (20320 14810)) +;;;;;; "calendar/icalendar.el" (20352 65510)) ;;; Generated autoloads from calendar/icalendar.el (autoload 'icalendar-export-file "icalendar" "\ @@ -14132,8 +14138,8 @@ buffer `*icalendar-errors*'. ;;;*** -;;;### (autoloads (icomplete-mode) "icomplete" "icomplete.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (icomplete-mode) "icomplete" "icomplete.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from icomplete.el (defvar icomplete-mode nil "\ @@ -14155,7 +14161,7 @@ the mode if ARG is omitted or nil. ;;;*** -;;;### (autoloads (icon-mode) "icon" "progmodes/icon.el" (20309 60936)) +;;;### (autoloads (icon-mode) "icon" "progmodes/icon.el" (20352 65510)) ;;; Generated autoloads from progmodes/icon.el (autoload 'icon-mode "icon" "\ @@ -14196,7 +14202,7 @@ with no args, if that value is non-nil. ;;;*** ;;;### (autoloads (idlwave-shell) "idlw-shell" "progmodes/idlw-shell.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from progmodes/idlw-shell.el (autoload 'idlwave-shell "idlw-shell" "\ @@ -14222,7 +14228,7 @@ See also the variable `idlwave-shell-prompt-pattern'. ;;;*** ;;;### (autoloads (idlwave-mode) "idlwave" "progmodes/idlwave.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from progmodes/idlwave.el (autoload 'idlwave-mode "idlwave" "\ @@ -14356,8 +14362,8 @@ The main features of this mode are ;;;;;; ido-find-alternate-file ido-find-file-other-window ido-find-file ;;;;;; ido-find-file-in-dir ido-switch-buffer-other-frame ido-insert-buffer ;;;;;; ido-kill-buffer ido-display-buffer ido-switch-buffer-other-window -;;;;;; ido-switch-buffer ido-mode ido-mode) "ido" "ido.el" (20330 -;;;;;; 976)) +;;;;;; ido-switch-buffer ido-mode ido-mode) "ido" "ido.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from ido.el (defvar ido-mode nil "\ @@ -14617,7 +14623,7 @@ DEF, if non-nil, is the default value. ;;;*** -;;;### (autoloads (ielm) "ielm" "ielm.el" (20309 60936)) +;;;### (autoloads (ielm) "ielm" "ielm.el" (20352 65510)) ;;; Generated autoloads from ielm.el (autoload 'ielm "ielm" "\ @@ -14628,7 +14634,7 @@ Switches to the buffer `*ielm*', or creates it if it does not exist. ;;;*** -;;;### (autoloads (iimage-mode) "iimage" "iimage.el" (20309 60936)) +;;;### (autoloads (iimage-mode) "iimage" "iimage.el" (20352 65510)) ;;; Generated autoloads from iimage.el (define-obsolete-function-alias 'turn-on-iimage-mode 'iimage-mode "24.1") @@ -14649,7 +14655,7 @@ the mode if ARG is omitted or nil, and toggle it if ARG is `toggle'. ;;;;;; create-image image-type-auto-detected-p image-type-available-p ;;;;;; image-type image-type-from-file-name image-type-from-file-header ;;;;;; image-type-from-buffer image-type-from-data) "image" "image.el" -;;;;;; (20341 55868)) +;;;;;; (20352 65510)) ;;; Generated autoloads from image.el (autoload 'image-type-from-data "image" "\ @@ -14849,7 +14855,7 @@ If Emacs is compiled without ImageMagick support, do nothing. ;;;;;; image-dired-jump-thumbnail-buffer image-dired-delete-tag ;;;;;; image-dired-tag-files image-dired-show-all-from-dir image-dired-display-thumbs ;;;;;; image-dired-dired-with-window-configuration image-dired-dired-toggle-marked-thumbs) -;;;;;; "image-dired" "image-dired.el" (20309 60936)) +;;;;;; "image-dired" "image-dired.el" (20352 65510)) ;;; Generated autoloads from image-dired.el (autoload 'image-dired-dired-toggle-marked-thumbs "image-dired" "\ @@ -14987,7 +14993,7 @@ easy-to-use form. ;;;### (autoloads (auto-image-file-mode insert-image-file image-file-name-regexp ;;;;;; image-file-name-regexps image-file-name-extensions) "image-file" -;;;;;; "image-file.el" (20309 60936)) +;;;;;; "image-file.el" (20352 65510)) ;;; Generated autoloads from image-file.el (defvar image-file-name-extensions (purecopy '("png" "jpeg" "jpg" "gif" "tiff" "tif" "xbm" "xpm" "pbm" "pgm" "ppm" "pnm" "svg")) "\ @@ -15050,7 +15056,7 @@ An image file is one whose name has an extension in ;;;*** ;;;### (autoloads (image-bookmark-jump image-mode-as-text image-minor-mode -;;;;;; image-mode) "image-mode" "image-mode.el" (20309 60936)) +;;;;;; image-mode) "image-mode" "image-mode.el" (20352 65510)) ;;; Generated autoloads from image-mode.el (autoload 'image-mode "image-mode" "\ @@ -15095,7 +15101,7 @@ on these modes. ;;;*** ;;;### (autoloads (imenu imenu-add-menubar-index imenu-add-to-menubar -;;;;;; imenu-sort-function) "imenu" "imenu.el" (20321 38938)) +;;;;;; imenu-sort-function) "imenu" "imenu.el" (20358 29669)) ;;; Generated autoloads from imenu.el (defvar imenu-sort-function nil "\ @@ -15212,7 +15218,7 @@ for more information. ;;;### (autoloads (indian-2-column-to-ucs-region in-is13194-pre-write-conversion ;;;;;; in-is13194-post-read-conversion indian-compose-string indian-compose-region) -;;;;;; "ind-util" "language/ind-util.el" (20309 60936)) +;;;;;; "ind-util" "language/ind-util.el" (20352 65510)) ;;; Generated autoloads from language/ind-util.el (autoload 'indian-compose-region "ind-util" "\ @@ -15244,7 +15250,7 @@ Convert old Emacs Devanagari characters to UCS. ;;;### (autoloads (inferior-lisp inferior-lisp-prompt inferior-lisp-load-command ;;;;;; inferior-lisp-program inferior-lisp-filter-regexp) "inf-lisp" -;;;;;; "progmodes/inf-lisp.el" (20309 60936)) +;;;;;; "progmodes/inf-lisp.el" (20352 65510)) ;;; Generated autoloads from progmodes/inf-lisp.el (defvar inferior-lisp-filter-regexp (purecopy "\\`\\s *\\(:\\(\\w\\|\\s_\\)\\)?\\s *\\'") "\ @@ -15311,7 +15317,7 @@ of `inferior-lisp-program'). Runs the hooks from ;;;;;; Info-goto-emacs-key-command-node Info-goto-emacs-command-node ;;;;;; Info-mode info-finder info-apropos Info-index Info-directory ;;;;;; Info-on-current-buffer info-standalone info-emacs-manual -;;;;;; info info-other-window) "info" "info.el" (20330 2046)) +;;;;;; info info-other-window) "info" "info.el" (20352 65510)) ;;; Generated autoloads from info.el (autoload 'info-other-window "info" "\ @@ -15497,7 +15503,7 @@ Go to Info buffer that displays MANUAL, creating it if none already exists. ;;;### (autoloads (info-complete-file info-complete-symbol info-lookup-file ;;;;;; info-lookup-symbol info-lookup-reset) "info-look" "info-look.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from info-look.el (autoload 'info-lookup-reset "info-look" "\ @@ -15546,7 +15552,7 @@ Perform completion on file preceding point. ;;;### (autoloads (info-xref-docstrings info-xref-check-all-custom ;;;;;; info-xref-check-all info-xref-check) "info-xref" "info-xref.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from info-xref.el (autoload 'info-xref-check "info-xref" "\ @@ -15629,7 +15635,7 @@ the sources handy. ;;;*** ;;;### (autoloads (batch-info-validate Info-validate Info-split Info-split-threshold -;;;;;; Info-tagify) "informat" "informat.el" (20309 60936)) +;;;;;; Info-tagify) "informat" "informat.el" (20352 65510)) ;;; Generated autoloads from informat.el (autoload 'Info-tagify "informat" "\ @@ -15676,7 +15682,7 @@ For example, invoke \"emacs -batch -f batch-info-validate $info/ ~/*.info\" ;;;### (autoloads (isearch-process-search-multibyte-characters isearch-toggle-input-method ;;;;;; isearch-toggle-specified-input-method) "isearch-x" "international/isearch-x.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from international/isearch-x.el (autoload 'isearch-toggle-specified-input-method "isearch-x" "\ @@ -15696,8 +15702,8 @@ Toggle input method in interactive search. ;;;*** -;;;### (autoloads (isearchb-activate) "isearchb" "isearchb.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (isearchb-activate) "isearchb" "isearchb.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from isearchb.el (autoload 'isearchb-activate "isearchb" "\ @@ -15713,7 +15719,7 @@ accessed via isearchb. ;;;### (autoloads (iso-cvt-define-menu iso-cvt-write-only iso-cvt-read-only ;;;;;; iso-sgml2iso iso-iso2sgml iso-iso2duden iso-iso2gtex iso-gtex2iso ;;;;;; iso-tex2iso iso-iso2tex iso-german iso-spanish) "iso-cvt" -;;;;;; "international/iso-cvt.el" (20309 60936)) +;;;;;; "international/iso-cvt.el" (20352 65510)) ;;; Generated autoloads from international/iso-cvt.el (autoload 'iso-spanish "iso-cvt" "\ @@ -15804,7 +15810,7 @@ Add submenus to the File menu, to convert to and from various formats. ;;;*** ;;;### (autoloads nil "iso-transl" "international/iso-transl.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from international/iso-transl.el (or key-translation-map (setq key-translation-map (make-sparse-keymap))) (define-key key-translation-map "\C-x8" 'iso-transl-ctl-x-8-map) @@ -15816,7 +15822,7 @@ Add submenus to the File menu, to convert to and from various formats. ;;;;;; ispell-complete-word ispell-continue ispell-buffer ispell-comments-and-strings ;;;;;; ispell-region ispell-change-dictionary ispell-kill-ispell ;;;;;; ispell-help ispell-pdict-save ispell-word ispell-personal-dictionary) -;;;;;; "ispell" "textmodes/ispell.el" (20341 56798)) +;;;;;; "ispell" "textmodes/ispell.el" (20354 28814)) ;;; Generated autoloads from textmodes/ispell.el (put 'ispell-check-comments 'safe-local-variable (lambda (a) (memq a '(nil t exclusive)))) @@ -16042,8 +16048,8 @@ You can bind this to the key C-c i in GNUS or mail by adding to ;;;*** -;;;### (autoloads (iswitchb-mode) "iswitchb" "iswitchb.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (iswitchb-mode) "iswitchb" "iswitchb.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from iswitchb.el (defvar iswitchb-mode nil "\ @@ -16071,7 +16077,7 @@ between buffers using substrings. See `iswitchb' for details. ;;;### (autoloads (read-hiragana-string japanese-zenkaku-region japanese-hankaku-region ;;;;;; japanese-hiragana-region japanese-katakana-region japanese-zenkaku ;;;;;; japanese-hankaku japanese-hiragana japanese-katakana setup-japanese-environment-internal) -;;;;;; "japan-util" "language/japan-util.el" (20309 60936)) +;;;;;; "japan-util" "language/japan-util.el" (20352 65510)) ;;; Generated autoloads from language/japan-util.el (autoload 'setup-japanese-environment-internal "japan-util" "\ @@ -16149,7 +16155,7 @@ If non-nil, second arg INITIAL-INPUT is a string to insert before reading. ;;;*** ;;;### (autoloads (jka-compr-uninstall jka-compr-handler) "jka-compr" -;;;;;; "jka-compr.el" (20309 60936)) +;;;;;; "jka-compr.el" (20352 65510)) ;;; Generated autoloads from jka-compr.el (defvar jka-compr-inhibit nil "\ @@ -16172,7 +16178,7 @@ by `jka-compr-installed'. ;;;*** -;;;### (autoloads (js-mode) "js" "progmodes/js.el" (20309 60936)) +;;;### (autoloads (js-mode) "js" "progmodes/js.el" (20352 65510)) ;;; Generated autoloads from progmodes/js.el (autoload 'js-mode "js" "\ @@ -16186,7 +16192,7 @@ Major mode for editing JavaScript. ;;;### (autoloads (keypad-setup keypad-numlock-shifted-setup keypad-shifted-setup ;;;;;; keypad-numlock-setup keypad-setup) "keypad" "emulation/keypad.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from emulation/keypad.el (defvar keypad-setup nil "\ @@ -16242,7 +16248,7 @@ the decimal key on the keypad is mapped to DECIMAL instead of `.' ;;;*** ;;;### (autoloads (kinsoku) "kinsoku" "international/kinsoku.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from international/kinsoku.el (autoload 'kinsoku "kinsoku" "\ @@ -16263,8 +16269,8 @@ the context of text formatting. ;;;*** -;;;### (autoloads (kkc-region) "kkc" "international/kkc.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (kkc-region) "kkc" "international/kkc.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from international/kkc.el (defvar kkc-after-update-conversion-functions nil "\ @@ -16289,7 +16295,7 @@ and the return value is the length of the conversion. ;;;### (autoloads (kmacro-end-call-mouse kmacro-end-and-call-macro ;;;;;; kmacro-end-or-call-macro kmacro-start-macro-or-insert-counter ;;;;;; kmacro-call-macro kmacro-end-macro kmacro-start-macro kmacro-exec-ring-item) -;;;;;; "kmacro" "kmacro.el" (20309 60936)) +;;;;;; "kmacro" "kmacro.el" (20352 65510)) ;;; Generated autoloads from kmacro.el (global-set-key "\C-x(" 'kmacro-start-macro) (global-set-key "\C-x)" 'kmacro-end-macro) @@ -16400,7 +16406,7 @@ If kbd macro currently being defined end it before activating it. ;;;*** ;;;### (autoloads (setup-korean-environment-internal) "korea-util" -;;;;;; "language/korea-util.el" (20309 60936)) +;;;;;; "language/korea-util.el" (20352 65510)) ;;; Generated autoloads from language/korea-util.el (defvar default-korean-keyboard (purecopy (if (string-match "3" (or (getenv "HANGUL_KEYBOARD_TYPE") "")) "3" "")) "\ @@ -16415,7 +16421,7 @@ If kbd macro currently being defined end it before activating it. ;;;*** ;;;### (autoloads (landmark landmark-test-run) "landmark" "play/landmark.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from play/landmark.el (defalias 'landmark-repeat 'landmark-test-run) @@ -16447,7 +16453,7 @@ Use \\[describe-mode] for more info. ;;;### (autoloads (lao-compose-region lao-composition-function lao-transcribe-roman-to-lao-string ;;;;;; lao-transcribe-single-roman-syllable-to-lao lao-compose-string) -;;;;;; "lao-util" "language/lao-util.el" (20309 60936)) +;;;;;; "lao-util" "language/lao-util.el" (20352 65510)) ;;; Generated autoloads from language/lao-util.el (autoload 'lao-compose-string "lao-util" "\ @@ -16486,7 +16492,7 @@ Transcribe Romanized Lao string STR to Lao character string. ;;;### (autoloads (latexenc-find-file-coding-system latexenc-coding-system-to-inputenc ;;;;;; latexenc-inputenc-to-coding-system latex-inputenc-coding-alist) -;;;;;; "latexenc" "international/latexenc.el" (20309 60936)) +;;;;;; "latexenc" "international/latexenc.el" (20352 65510)) ;;; Generated autoloads from international/latexenc.el (defvar latex-inputenc-coding-alist (purecopy '(("ansinew" . windows-1252) ("applemac" . mac-roman) ("ascii" . us-ascii) ("cp1250" . windows-1250) ("cp1252" . windows-1252) ("cp1257" . cp1257) ("cp437de" . cp437) ("cp437" . cp437) ("cp850" . cp850) ("cp852" . cp852) ("cp858" . cp858) ("cp865" . cp865) ("latin1" . iso-8859-1) ("latin2" . iso-8859-2) ("latin3" . iso-8859-3) ("latin4" . iso-8859-4) ("latin5" . iso-8859-5) ("latin9" . iso-8859-15) ("next" . next) ("utf8" . utf-8) ("utf8x" . utf-8))) "\ @@ -16518,7 +16524,7 @@ coding system names is determined from `latex-inputenc-coding-alist'. ;;;*** ;;;### (autoloads (latin1-display-ucs-per-lynx latin1-display latin1-display) -;;;;;; "latin1-disp" "international/latin1-disp.el" (20309 60936)) +;;;;;; "latin1-disp" "international/latin1-disp.el" (20352 65510)) ;;; Generated autoloads from international/latin1-disp.el (defvar latin1-display nil "\ @@ -16560,7 +16566,7 @@ use either \\[customize] or the function `latin1-display'.") ;;;*** ;;;### (autoloads (ld-script-mode) "ld-script" "progmodes/ld-script.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from progmodes/ld-script.el (autoload 'ld-script-mode "ld-script" "\ @@ -16571,7 +16577,7 @@ A major mode to edit GNU ld script files ;;;*** ;;;### (autoloads (ledit-from-lisp-mode ledit-mode) "ledit" "ledit.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from ledit.el (defconst ledit-save-files t "\ @@ -16606,7 +16612,7 @@ do (setq lisp-mode-hook 'ledit-from-lisp-mode) ;;;*** -;;;### (autoloads (life) "life" "play/life.el" (20309 60936)) +;;;### (autoloads (life) "life" "play/life.el" (20352 65510)) ;;; Generated autoloads from play/life.el (autoload 'life "life" "\ @@ -16620,7 +16626,7 @@ generations (this defaults to 1). ;;;*** ;;;### (autoloads (global-linum-mode linum-mode linum-format) "linum" -;;;;;; "linum.el" (20309 60936)) +;;;;;; "linum.el" (20352 65510)) ;;; Generated autoloads from linum.el (defvar linum-format 'dynamic "\ @@ -16665,8 +16671,8 @@ See `linum-mode' for more information on Linum mode. ;;;*** -;;;### (autoloads (unload-feature) "loadhist" "loadhist.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (unload-feature) "loadhist" "loadhist.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from loadhist.el (autoload 'unload-feature "loadhist" "\ @@ -16698,7 +16704,7 @@ something strange, such as redefining an Emacs function. ;;;*** ;;;### (autoloads (locate-with-filter locate locate-ls-subdir-switches) -;;;;;; "locate" "locate.el" (20309 60936)) +;;;;;; "locate" "locate.el" (20352 65510)) ;;; Generated autoloads from locate.el (defvar locate-ls-subdir-switches (purecopy "-al") "\ @@ -16750,7 +16756,7 @@ except that FILTER is not optional. ;;;*** -;;;### (autoloads (log-edit) "log-edit" "vc/log-edit.el" (20309 60936)) +;;;### (autoloads (log-edit) "log-edit" "vc/log-edit.el" (20352 65510)) ;;; Generated autoloads from vc/log-edit.el (autoload 'log-edit "log-edit" "\ @@ -16777,8 +16783,8 @@ uses the current buffer. ;;;*** -;;;### (autoloads (log-view-mode) "log-view" "vc/log-view.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (log-view-mode) "log-view" "vc/log-view.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from vc/log-view.el (autoload 'log-view-mode "log-view" "\ @@ -16788,8 +16794,8 @@ Major mode for browsing CVS log output. ;;;*** -;;;### (autoloads (longlines-mode) "longlines" "longlines.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (longlines-mode) "longlines" "longlines.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from longlines.el (autoload 'longlines-mode "longlines" "\ @@ -16815,8 +16821,8 @@ newlines are indicated with a symbol. ;;;*** ;;;### (autoloads (print-region lpr-region print-buffer lpr-buffer -;;;;;; lpr-command lpr-switches printer-name) "lpr" "lpr.el" (20309 -;;;;;; 60936)) +;;;;;; lpr-command lpr-switches printer-name) "lpr" "lpr.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from lpr.el (defvar lpr-windows-system (memq system-type '(ms-dos windows-nt)) "\ @@ -16912,7 +16918,7 @@ for further customization of the printer command. ;;;*** ;;;### (autoloads (ls-lisp-support-shell-wildcards) "ls-lisp" "ls-lisp.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from ls-lisp.el (defvar ls-lisp-support-shell-wildcards t "\ @@ -16923,8 +16929,8 @@ Otherwise they are treated as Emacs regexps (for backward compatibility).") ;;;*** -;;;### (autoloads (lunar-phases) "lunar" "calendar/lunar.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (lunar-phases) "lunar" "calendar/lunar.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from calendar/lunar.el (autoload 'lunar-phases "lunar" "\ @@ -16938,8 +16944,8 @@ This function is suitable for execution in a .emacs file. ;;;*** -;;;### (autoloads (m4-mode) "m4-mode" "progmodes/m4-mode.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (m4-mode) "m4-mode" "progmodes/m4-mode.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from progmodes/m4-mode.el (autoload 'm4-mode "m4-mode" "\ @@ -16950,7 +16956,7 @@ A major mode to edit m4 macro files. ;;;*** ;;;### (autoloads (macroexpand-all) "macroexp" "emacs-lisp/macroexp.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from emacs-lisp/macroexp.el (autoload 'macroexpand-all "macroexp" "\ @@ -16964,7 +16970,7 @@ definitions to shadow the loaded ones for use in file byte-compilation. ;;;*** ;;;### (autoloads (apply-macro-to-region-lines kbd-macro-query insert-kbd-macro -;;;;;; name-last-kbd-macro) "macros" "macros.el" (20309 60936)) +;;;;;; name-last-kbd-macro) "macros" "macros.el" (20352 65510)) ;;; Generated autoloads from macros.el (autoload 'name-last-kbd-macro "macros" "\ @@ -17053,7 +17059,7 @@ and then select the region of un-tablified names and use ;;;*** ;;;### (autoloads (what-domain mail-extract-address-components) "mail-extr" -;;;;;; "mail/mail-extr.el" (20309 60936)) +;;;;;; "mail/mail-extr.el" (20352 65510)) ;;; Generated autoloads from mail/mail-extr.el (autoload 'mail-extract-address-components "mail-extr" "\ @@ -17085,7 +17091,7 @@ Convert mail domain DOMAIN to the country it corresponds to. ;;;### (autoloads (mail-hist-put-headers-into-history mail-hist-keep-history ;;;;;; mail-hist-enable mail-hist-define-keys) "mail-hist" "mail/mail-hist.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from mail/mail-hist.el (autoload 'mail-hist-define-keys "mail-hist" "\ @@ -17117,7 +17123,7 @@ This function normally would be called when the message is sent. ;;;### (autoloads (mail-fetch-field mail-unquote-printable-region ;;;;;; mail-unquote-printable mail-quote-printable-region mail-quote-printable ;;;;;; mail-file-babyl-p mail-dont-reply-to-names mail-use-rfc822) -;;;;;; "mail-utils" "mail/mail-utils.el" (20315 8755)) +;;;;;; "mail-utils" "mail/mail-utils.el" (20352 65510)) ;;; Generated autoloads from mail/mail-utils.el (defvar mail-use-rfc822 nil "\ @@ -17192,8 +17198,8 @@ matches may be returned from the message body. ;;;*** ;;;### (autoloads (define-mail-abbrev build-mail-abbrevs mail-abbrevs-setup -;;;;;; mail-abbrevs-mode) "mailabbrev" "mail/mailabbrev.el" (20309 -;;;;;; 60936)) +;;;;;; mail-abbrevs-mode) "mailabbrev" "mail/mailabbrev.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from mail/mailabbrev.el (defvar mail-abbrevs-mode nil "\ @@ -17244,7 +17250,7 @@ double-quotes. ;;;### (autoloads (mail-complete mail-completion-at-point-function ;;;;;; define-mail-alias expand-mail-aliases mail-complete-style) -;;;;;; "mailalias" "mail/mailalias.el" (20309 60936)) +;;;;;; "mailalias" "mail/mailalias.el" (20352 65510)) ;;; Generated autoloads from mail/mailalias.el (defvar mail-complete-style 'angles "\ @@ -17296,7 +17302,7 @@ current header, calls `mail-complete-function' and passes prefix ARG if any. ;;;*** ;;;### (autoloads (mailclient-send-it) "mailclient" "mail/mailclient.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from mail/mailclient.el (autoload 'mailclient-send-it "mailclient" "\ @@ -17310,7 +17316,7 @@ The mail client is taken to be the handler of mailto URLs. ;;;### (autoloads (makefile-imake-mode makefile-bsdmake-mode makefile-makepp-mode ;;;;;; makefile-gmake-mode makefile-automake-mode makefile-mode) -;;;;;; "make-mode" "progmodes/make-mode.el" (20309 60936)) +;;;;;; "make-mode" "progmodes/make-mode.el" (20352 65510)) ;;; Generated autoloads from progmodes/make-mode.el (autoload 'makefile-mode "make-mode" "\ @@ -17427,8 +17433,8 @@ An adapted `makefile-mode' that knows about imake. ;;;*** -;;;### (autoloads (make-command-summary) "makesum" "makesum.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (make-command-summary) "makesum" "makesum.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from makesum.el (autoload 'make-command-summary "makesum" "\ @@ -17440,7 +17446,7 @@ Previous contents of that buffer are killed first. ;;;*** ;;;### (autoloads (Man-bookmark-jump man-follow man) "man" "man.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from man.el (defalias 'manual-entry 'man) @@ -17494,7 +17500,7 @@ Default bookmark handler for Man buffers. ;;;*** -;;;### (autoloads (master-mode) "master" "master.el" (20309 60936)) +;;;### (autoloads (master-mode) "master" "master.el" (20352 65510)) ;;; Generated autoloads from master.el (autoload 'master-mode "master" "\ @@ -17517,7 +17523,7 @@ yourself the value of `master-of' by calling `master-show-slave'. ;;;*** ;;;### (autoloads (minibuffer-depth-indicate-mode) "mb-depth" "mb-depth.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from mb-depth.el (defvar minibuffer-depth-indicate-mode nil "\ @@ -17550,7 +17556,7 @@ recursion depth in the minibuffer prompt. This is only useful if ;;;;;; message-forward-make-body message-forward message-recover ;;;;;; message-supersede message-cancel-news message-followup message-wide-reply ;;;;;; message-reply message-news message-mail message-mode) "message" -;;;;;; "gnus/message.el" (20309 60936)) +;;;;;; "gnus/message.el" (20352 65510)) ;;; Generated autoloads from gnus/message.el (define-mail-user-agent 'message-user-agent 'message-mail 'message-send-and-exit 'message-kill-buffer 'message-send-hook) @@ -17716,7 +17722,7 @@ which specify the range to operate on. ;;;*** ;;;### (autoloads (metapost-mode metafont-mode) "meta-mode" "progmodes/meta-mode.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from progmodes/meta-mode.el (autoload 'metafont-mode "meta-mode" "\ @@ -17733,7 +17739,7 @@ Major mode for editing MetaPost sources. ;;;### (autoloads (metamail-region metamail-buffer metamail-interpret-body ;;;;;; metamail-interpret-header) "metamail" "mail/metamail.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from mail/metamail.el (autoload 'metamail-interpret-header "metamail" "\ @@ -17778,7 +17784,7 @@ redisplayed as output is inserted. ;;;### (autoloads (mh-fully-kill-draft mh-send-letter mh-user-agent-compose ;;;;;; mh-smail-batch mh-smail-other-window mh-smail) "mh-comp" -;;;;;; "mh-e/mh-comp.el" (20309 60936)) +;;;;;; "mh-e/mh-comp.el" (20352 65510)) ;;; Generated autoloads from mh-e/mh-comp.el (autoload 'mh-smail "mh-comp" "\ @@ -17868,7 +17874,7 @@ delete the draft message. ;;;*** -;;;### (autoloads (mh-version) "mh-e" "mh-e/mh-e.el" (20309 60936)) +;;;### (autoloads (mh-version) "mh-e" "mh-e/mh-e.el" (20352 65510)) ;;; Generated autoloads from mh-e/mh-e.el (put 'mh-progs 'risky-local-variable t) @@ -17885,7 +17891,7 @@ Display version information about MH-E and the MH mail handling system. ;;;*** ;;;### (autoloads (mh-folder-mode mh-nmail mh-rmail) "mh-folder" -;;;;;; "mh-e/mh-folder.el" (20309 60936)) +;;;;;; "mh-e/mh-folder.el" (20352 65510)) ;;; Generated autoloads from mh-e/mh-folder.el (autoload 'mh-rmail "mh-folder" "\ @@ -17967,7 +17973,7 @@ perform the operation on all messages in that region. ;;;*** ;;;### (autoloads (midnight-delay-set clean-buffer-list) "midnight" -;;;;;; "midnight.el" (20309 60936)) +;;;;;; "midnight.el" (20352 65510)) ;;; Generated autoloads from midnight.el (autoload 'clean-buffer-list "midnight" "\ @@ -17994,7 +18000,7 @@ to its second argument TM. ;;;*** ;;;### (autoloads (minibuffer-electric-default-mode) "minibuf-eldef" -;;;;;; "minibuf-eldef.el" (20309 60936)) +;;;;;; "minibuf-eldef.el" (20352 65510)) ;;; Generated autoloads from minibuf-eldef.el (defvar minibuffer-electric-default-mode nil "\ @@ -18024,7 +18030,7 @@ is modified to remove the default indication. ;;;*** ;;;### (autoloads (list-dynamic-libraries butterfly) "misc" "misc.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from misc.el (autoload 'butterfly "misc" "\ @@ -18054,7 +18060,7 @@ The return value is always nil. ;;;### (autoloads (multi-isearch-files-regexp multi-isearch-files ;;;;;; multi-isearch-buffers-regexp multi-isearch-buffers multi-isearch-setup) -;;;;;; "misearch" "misearch.el" (20309 60936)) +;;;;;; "misearch" "misearch.el" (20352 65510)) ;;; Generated autoloads from misearch.el (add-hook 'isearch-mode-hook 'multi-isearch-setup) @@ -18136,7 +18142,7 @@ whose file names match the specified wildcard. ;;;*** ;;;### (autoloads (mixal-mode) "mixal-mode" "progmodes/mixal-mode.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from progmodes/mixal-mode.el (autoload 'mixal-mode "mixal-mode" "\ @@ -18147,7 +18153,7 @@ Major mode for the mixal asm language. ;;;*** ;;;### (autoloads (mm-default-file-encoding) "mm-encode" "gnus/mm-encode.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from gnus/mm-encode.el (autoload 'mm-default-file-encoding "mm-encode" "\ @@ -18158,7 +18164,7 @@ Return a default encoding for FILE. ;;;*** ;;;### (autoloads (mm-inline-external-body mm-extern-cache-contents) -;;;;;; "mm-extern" "gnus/mm-extern.el" (20309 60936)) +;;;;;; "mm-extern" "gnus/mm-extern.el" (20352 65510)) ;;; Generated autoloads from gnus/mm-extern.el (autoload 'mm-extern-cache-contents "mm-extern" "\ @@ -18177,7 +18183,7 @@ If NO-DISPLAY is nil, display it. Otherwise, do nothing after replacing. ;;;*** ;;;### (autoloads (mm-inline-partial) "mm-partial" "gnus/mm-partial.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from gnus/mm-partial.el (autoload 'mm-inline-partial "mm-partial" "\ @@ -18191,7 +18197,7 @@ If NO-DISPLAY is nil, display it. Otherwise, do nothing after replacing. ;;;*** ;;;### (autoloads (mm-url-insert-file-contents-external mm-url-insert-file-contents) -;;;;;; "mm-url" "gnus/mm-url.el" (20309 60936)) +;;;;;; "mm-url" "gnus/mm-url.el" (20352 65510)) ;;; Generated autoloads from gnus/mm-url.el (autoload 'mm-url-insert-file-contents "mm-url" "\ @@ -18208,7 +18214,7 @@ Insert file contents of URL using `mm-url-program'. ;;;*** ;;;### (autoloads (mm-uu-dissect-text-parts mm-uu-dissect) "mm-uu" -;;;;;; "gnus/mm-uu.el" (20314 47703)) +;;;;;; "gnus/mm-uu.el" (20352 65510)) ;;; Generated autoloads from gnus/mm-uu.el (autoload 'mm-uu-dissect "mm-uu" "\ @@ -18228,7 +18234,7 @@ Assume text has been decoded if DECODED is non-nil. ;;;*** ;;;### (autoloads (mml-attach-file mml-to-mime) "mml" "gnus/mml.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from gnus/mml.el (autoload 'mml-to-mime "mml" "\ @@ -18253,7 +18259,7 @@ body) or \"attachment\" (separate from the body). ;;;*** ;;;### (autoloads (mml1991-sign mml1991-encrypt) "mml1991" "gnus/mml1991.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from gnus/mml1991.el (autoload 'mml1991-encrypt "mml1991" "\ @@ -18270,7 +18276,7 @@ body) or \"attachment\" (separate from the body). ;;;### (autoloads (mml2015-self-encrypt mml2015-sign mml2015-encrypt ;;;;;; mml2015-verify-test mml2015-verify mml2015-decrypt-test mml2015-decrypt) -;;;;;; "mml2015" "gnus/mml2015.el" (20309 60936)) +;;;;;; "mml2015" "gnus/mml2015.el" (20352 65510)) ;;; Generated autoloads from gnus/mml2015.el (autoload 'mml2015-decrypt "mml2015" "\ @@ -18310,8 +18316,8 @@ body) or \"attachment\" (separate from the body). ;;;*** -;;;### (autoloads (m2-mode) "modula2" "progmodes/modula2.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (m2-mode) "modula2" "progmodes/modula2.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from progmodes/modula2.el (defalias 'modula-2-mode 'm2-mode) @@ -18345,7 +18351,7 @@ followed by the first character of the construct. ;;;*** ;;;### (autoloads (denato-region nato-region unmorse-region morse-region) -;;;;;; "morse" "play/morse.el" (20309 60936)) +;;;;;; "morse" "play/morse.el" (20352 65510)) ;;; Generated autoloads from play/morse.el (autoload 'morse-region "morse" "\ @@ -18371,7 +18377,7 @@ Convert NATO phonetic alphabet in region to ordinary ASCII text. ;;;*** ;;;### (autoloads (mouse-drag-drag mouse-drag-throw) "mouse-drag" -;;;;;; "mouse-drag.el" (20309 60936)) +;;;;;; "mouse-drag.el" (20352 65510)) ;;; Generated autoloads from mouse-drag.el (autoload 'mouse-drag-throw "mouse-drag" "\ @@ -18418,8 +18424,8 @@ To test this function, evaluate: ;;;*** -;;;### (autoloads (mouse-sel-mode) "mouse-sel" "mouse-sel.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (mouse-sel-mode) "mouse-sel" "mouse-sel.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from mouse-sel.el (defvar mouse-sel-mode nil "\ @@ -18462,7 +18468,7 @@ kill ring; mouse-1 or mouse-3 kills it. ;;;*** -;;;### (autoloads (mpc) "mpc" "mpc.el" (20309 60936)) +;;;### (autoloads (mpc) "mpc" "mpc.el" (20352 65510)) ;;; Generated autoloads from mpc.el (autoload 'mpc "mpc" "\ @@ -18472,7 +18478,7 @@ Main entry point for MPC. ;;;*** -;;;### (autoloads (mpuz) "mpuz" "play/mpuz.el" (20309 60936)) +;;;### (autoloads (mpuz) "mpuz" "play/mpuz.el" (20352 65510)) ;;; Generated autoloads from play/mpuz.el (autoload 'mpuz "mpuz" "\ @@ -18482,7 +18488,7 @@ Multiplication puzzle with GNU Emacs. ;;;*** -;;;### (autoloads (msb-mode) "msb" "msb.el" (20309 60936)) +;;;### (autoloads (msb-mode) "msb" "msb.el" (20352 65510)) ;;; Generated autoloads from msb.el (defvar msb-mode nil "\ @@ -18512,7 +18518,7 @@ different buffer menu using the function `msb'. ;;;;;; describe-current-coding-system describe-current-coding-system-briefly ;;;;;; describe-coding-system describe-character-set list-charset-chars ;;;;;; read-charset list-character-sets) "mule-diag" "international/mule-diag.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from international/mule-diag.el (autoload 'list-character-sets "mule-diag" "\ @@ -18649,7 +18655,7 @@ The default is 20. If LIMIT is negative, do not limit the listing. ;;;;;; coding-system-translation-table-for-decode coding-system-pre-write-conversion ;;;;;; coding-system-post-read-conversion lookup-nested-alist set-nested-alist ;;;;;; truncate-string-to-width store-substring string-to-sequence) -;;;;;; "mule-util" "international/mule-util.el" (20309 60936)) +;;;;;; "mule-util" "international/mule-util.el" (20352 65510)) ;;; Generated autoloads from international/mule-util.el (autoload 'string-to-sequence "mule-util" "\ @@ -18789,8 +18795,8 @@ per-character basis, this may not be accurate. ;;;### (autoloads (network-connection network-connection-to-service ;;;;;; whois-reverse-lookup whois finger ftp run-dig dns-lookup-host ;;;;;; nslookup nslookup-host ping traceroute route arp netstat -;;;;;; iwconfig ifconfig) "net-utils" "net/net-utils.el" (20309 -;;;;;; 60936)) +;;;;;; iwconfig ifconfig) "net-utils" "net/net-utils.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from net/net-utils.el (autoload 'ifconfig "net-utils" "\ @@ -18884,8 +18890,8 @@ Open a network connection to HOST on PORT. ;;;*** -;;;### (autoloads (netrc-credentials) "netrc" "net/netrc.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (netrc-credentials) "netrc" "net/netrc.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from net/netrc.el (autoload 'netrc-credentials "netrc" "\ @@ -18898,7 +18904,7 @@ listed in the PORTS list. ;;;*** ;;;### (autoloads (open-network-stream) "network-stream" "net/network-stream.el" -;;;;;; (20332 33075)) +;;;;;; (20366 22869)) ;;; Generated autoloads from net/network-stream.el (autoload 'open-network-stream "network-stream" "\ @@ -18976,9 +18982,8 @@ values: certificate. This parameter will only be used when doing TLS or STARTTLS connections. -If :use-starttls-if-possible is non-nil, do opportunistic -STARTTLS upgrades even if Emacs doesn't have built-in TLS -functionality. +:use-starttls-if-possible is a boolean that says to do opportunistic +STARTTLS upgrades even if Emacs doesn't have built-in TLS functionality. :nowait is a boolean that says the connection should be made asynchronously, if possible. @@ -18994,7 +18999,7 @@ functionality. ;;;;;; uncomment-region comment-kill comment-set-column comment-indent ;;;;;; comment-indent-default comment-normalize-vars comment-multi-line ;;;;;; comment-padding comment-style comment-column) "newcomment" -;;;;;; "newcomment.el" (20332 33075)) +;;;;;; "newcomment.el" (20352 65510)) ;;; Generated autoloads from newcomment.el (defalias 'indent-for-comment 'comment-indent) @@ -19236,7 +19241,7 @@ unless optional argument SOFT is non-nil. ;;;*** ;;;### (autoloads (newsticker-start newsticker-running-p) "newst-backend" -;;;;;; "net/newst-backend.el" (20309 60936)) +;;;;;; "net/newst-backend.el" (20352 65510)) ;;; Generated autoloads from net/newst-backend.el (autoload 'newsticker-running-p "newst-backend" "\ @@ -19258,7 +19263,7 @@ Run `newsticker-start-hook' if newsticker was not running already. ;;;*** ;;;### (autoloads (newsticker-plainview) "newst-plainview" "net/newst-plainview.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from net/newst-plainview.el (autoload 'newsticker-plainview "newst-plainview" "\ @@ -19269,7 +19274,7 @@ Start newsticker plainview. ;;;*** ;;;### (autoloads (newsticker-show-news) "newst-reader" "net/newst-reader.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from net/newst-reader.el (autoload 'newsticker-show-news "newst-reader" "\ @@ -19280,7 +19285,7 @@ Start reading news. You may want to bind this to a key. ;;;*** ;;;### (autoloads (newsticker-start-ticker newsticker-ticker-running-p) -;;;;;; "newst-ticker" "net/newst-ticker.el" (20309 60936)) +;;;;;; "newst-ticker" "net/newst-ticker.el" (20352 65510)) ;;; Generated autoloads from net/newst-ticker.el (autoload 'newsticker-ticker-running-p "newst-ticker" "\ @@ -19301,7 +19306,7 @@ running already. ;;;*** ;;;### (autoloads (newsticker-treeview) "newst-treeview" "net/newst-treeview.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from net/newst-treeview.el (autoload 'newsticker-treeview "newst-treeview" "\ @@ -19312,7 +19317,7 @@ Start newsticker treeview. ;;;*** ;;;### (autoloads (nndiary-generate-nov-databases) "nndiary" "gnus/nndiary.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from gnus/nndiary.el (autoload 'nndiary-generate-nov-databases "nndiary" "\ @@ -19322,8 +19327,8 @@ Generate NOV databases in all nndiary directories. ;;;*** -;;;### (autoloads (nndoc-add-type) "nndoc" "gnus/nndoc.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (nndoc-add-type) "nndoc" "gnus/nndoc.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from gnus/nndoc.el (autoload 'nndoc-add-type "nndoc" "\ @@ -19338,7 +19343,7 @@ symbol in the alist. ;;;*** ;;;### (autoloads (nnfolder-generate-active-file) "nnfolder" "gnus/nnfolder.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from gnus/nnfolder.el (autoload 'nnfolder-generate-active-file "nnfolder" "\ @@ -19350,7 +19355,7 @@ This command does not work if you use short group names. ;;;*** ;;;### (autoloads (nnml-generate-nov-databases) "nnml" "gnus/nnml.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from gnus/nnml.el (autoload 'nnml-generate-nov-databases "nnml" "\ @@ -19361,7 +19366,7 @@ Generate NOV databases in all nnml directories. ;;;*** ;;;### (autoloads (disable-command enable-command disabled-command-function) -;;;;;; "novice" "novice.el" (20309 60936)) +;;;;;; "novice" "novice.el" (20352 65510)) ;;; Generated autoloads from novice.el (defvar disabled-command-function 'disabled-command-function "\ @@ -19394,7 +19399,7 @@ to future sessions. ;;;*** ;;;### (autoloads (nroff-mode) "nroff-mode" "textmodes/nroff-mode.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from textmodes/nroff-mode.el (autoload 'nroff-mode "nroff-mode" "\ @@ -19409,7 +19414,7 @@ closing requests for requests that are used in matched pairs. ;;;*** ;;;### (autoloads (nxml-glyph-display-string) "nxml-glyph" "nxml/nxml-glyph.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from nxml/nxml-glyph.el (autoload 'nxml-glyph-display-string "nxml-glyph" "\ @@ -19421,8 +19426,8 @@ Return nil if the face cannot display a glyph for N. ;;;*** -;;;### (autoloads (nxml-mode) "nxml-mode" "nxml/nxml-mode.el" (20317 -;;;;;; 29729)) +;;;### (autoloads (nxml-mode) "nxml-mode" "nxml/nxml-mode.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from nxml/nxml-mode.el (autoload 'nxml-mode "nxml-mode" "\ @@ -19484,7 +19489,7 @@ Many aspects this mode can be customized using ;;;*** ;;;### (autoloads (nxml-enable-unicode-char-name-sets) "nxml-uchnm" -;;;;;; "nxml/nxml-uchnm.el" (20309 60936)) +;;;;;; "nxml/nxml-uchnm.el" (20352 65510)) ;;; Generated autoloads from nxml/nxml-uchnm.el (autoload 'nxml-enable-unicode-char-name-sets "nxml-uchnm" "\ @@ -19508,7 +19513,7 @@ the variable `nxml-enabled-unicode-blocks'. ;;;;;; org-babel-pop-to-session-maybe org-babel-load-in-session-maybe ;;;;;; org-babel-expand-src-block-maybe org-babel-view-src-block-info ;;;;;; org-babel-execute-maybe org-babel-execute-safely-maybe) "ob" -;;;;;; "org/ob.el" (20345 9613)) +;;;;;; "org/ob.el" (20352 65510)) ;;; Generated autoloads from org/ob.el (autoload 'org-babel-execute-safely-maybe "ob" "\ @@ -19731,7 +19736,7 @@ Mark current src block ;;;*** ;;;### (autoloads (org-babel-describe-bindings) "ob-keys" "org/ob-keys.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from org/ob-keys.el (autoload 'org-babel-describe-bindings "ob-keys" "\ @@ -19742,7 +19747,7 @@ Describe all keybindings behind `org-babel-key-prefix'. ;;;*** ;;;### (autoloads (org-babel-lob-get-info org-babel-lob-execute-maybe -;;;;;; org-babel-lob-ingest) "ob-lob" "org/ob-lob.el" (20345 9613)) +;;;;;; org-babel-lob-ingest) "ob-lob" "org/ob-lob.el" (20352 65510)) ;;; Generated autoloads from org/ob-lob.el (autoload 'org-babel-lob-ingest "ob-lob" "\ @@ -19767,7 +19772,7 @@ Return a Library of Babel function call as a string. ;;;### (autoloads (org-babel-tangle org-babel-tangle-file org-babel-load-file ;;;;;; org-babel-tangle-lang-exts) "ob-tangle" "org/ob-tangle.el" -;;;;;; (20344 35712)) +;;;;;; (20352 65510)) ;;; Generated autoloads from org/ob-tangle.el (defvar org-babel-tangle-lang-exts '(("emacs-lisp" . "el")) "\ @@ -19809,7 +19814,7 @@ exported source code blocks by language. ;;;*** ;;;### (autoloads (inferior-octave) "octave-inf" "progmodes/octave-inf.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from progmodes/octave-inf.el (autoload 'inferior-octave "octave-inf" "\ @@ -19832,7 +19837,7 @@ startup file, `~/.emacs-octave'. ;;;*** ;;;### (autoloads (octave-mode) "octave-mod" "progmodes/octave-mod.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from progmodes/octave-mod.el (autoload 'octave-mode "octave-mod" "\ @@ -19920,7 +19925,7 @@ including a reproducible test case and send the message. ;;;;;; org-insert-link-global org-store-link org-run-like-in-org-mode ;;;;;; turn-on-orgstruct++ turn-on-orgstruct orgstruct-mode org-global-cycle ;;;;;; org-mode org-version org-babel-do-load-languages) "org" "org/org.el" -;;;;;; (20345 9613)) +;;;;;; (20377 65403)) ;;; Generated autoloads from org/org.el (autoload 'org-babel-do-load-languages "org" "\ @@ -20153,7 +20158,7 @@ Call the customize function with org as argument. ;;;;;; org-diary org-agenda-list-stuck-projects org-tags-view org-todo-list ;;;;;; org-search-view org-agenda-list org-batch-store-agenda-views ;;;;;; org-store-agenda-views org-batch-agenda-csv org-batch-agenda -;;;;;; org-agenda) "org-agenda" "org/org-agenda.el" (20344 35712)) +;;;;;; org-agenda) "org-agenda" "org/org-agenda.el" (20377 65403)) ;;; Generated autoloads from org/org-agenda.el (autoload 'org-agenda "org-agenda" "\ @@ -20407,7 +20412,7 @@ details and examples. ;;;### (autoloads (org-archive-subtree-default-with-confirmation ;;;;;; org-archive-subtree-default) "org-archive" "org/org-archive.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from org/org-archive.el (autoload 'org-archive-subtree-default "org-archive" "\ @@ -20427,8 +20432,8 @@ This command is set with the variable `org-archive-default-command'. ;;;### (autoloads (org-export-as-ascii org-export-region-as-ascii ;;;;;; org-replace-region-by-ascii org-export-as-ascii-to-buffer ;;;;;; org-export-as-utf8-to-buffer org-export-as-utf8 org-export-as-latin1-to-buffer -;;;;;; org-export-as-latin1) "org-ascii" "org/org-ascii.el" (20345 -;;;;;; 9613)) +;;;;;; org-export-as-latin1) "org-ascii" "org/org-ascii.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from org/org-ascii.el (autoload 'org-export-as-latin1 "org-ascii" "\ @@ -20501,8 +20506,8 @@ publishing directory. ;;;*** -;;;### (autoloads (org-attach) "org-attach" "org/org-attach.el" (20345 -;;;;;; 9613)) +;;;### (autoloads (org-attach) "org-attach" "org/org-attach.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from org/org-attach.el (autoload 'org-attach "org-attach" "\ @@ -20514,7 +20519,7 @@ Shows a list of commands and prompts for another key to execute a command. ;;;*** ;;;### (autoloads (org-bbdb-anniversaries) "org-bbdb" "org/org-bbdb.el" -;;;;;; (20345 9613)) +;;;;;; (20352 65510)) ;;; Generated autoloads from org/org-bbdb.el (autoload 'org-bbdb-anniversaries "org-bbdb" "\ @@ -20525,7 +20530,7 @@ Extract anniversaries from BBDB for display in the agenda. ;;;*** ;;;### (autoloads (org-capture-import-remember-templates org-capture-insert-template-here -;;;;;; org-capture) "org-capture" "org/org-capture.el" (20345 9613)) +;;;;;; org-capture) "org-capture" "org/org-capture.el" (20352 65510)) ;;; Generated autoloads from org/org-capture.el (autoload 'org-capture "org-capture" "\ @@ -20563,7 +20568,7 @@ Set org-capture-templates to be similar to `org-remember-templates'. ;;;*** ;;;### (autoloads (org-clock-persistence-insinuate org-get-clocktable) -;;;;;; "org-clock" "org/org-clock.el" (20345 9613)) +;;;;;; "org-clock" "org/org-clock.el" (20377 65403)) ;;; Generated autoloads from org/org-clock.el (autoload 'org-get-clocktable "org-clock" "\ @@ -20581,7 +20586,7 @@ Set up hooks for clock persistence. ;;;*** ;;;### (autoloads (org-datetree-find-date-create) "org-datetree" -;;;;;; "org/org-datetree.el" (20345 9613)) +;;;;;; "org/org-datetree.el" (20352 65510)) ;;; Generated autoloads from org/org-datetree.el (autoload 'org-datetree-find-date-create "org-datetree" "\ @@ -20597,7 +20602,7 @@ tree can be found. ;;;### (autoloads (org-export-as-docbook org-export-as-docbook-pdf-and-open ;;;;;; org-export-as-docbook-pdf org-export-region-as-docbook org-replace-region-by-docbook ;;;;;; org-export-as-docbook-to-buffer org-export-as-docbook-batch) -;;;;;; "org-docbook" "org/org-docbook.el" (20345 9613)) +;;;;;; "org-docbook" "org/org-docbook.el" (20352 65510)) ;;; Generated autoloads from org/org-docbook.el (autoload 'org-export-as-docbook-batch "org-docbook" "\ @@ -20674,7 +20679,7 @@ publishing directory. ;;;### (autoloads (org-insert-export-options-template org-export-as-org ;;;;;; org-export-visible org-export) "org-exp" "org/org-exp.el" -;;;;;; (20344 35712)) +;;;;;; (20352 65510)) ;;; Generated autoloads from org/org-exp.el (autoload 'org-export "org-exp" "\ @@ -20735,8 +20740,8 @@ Insert into the buffer a template with information for exporting. ;;;*** ;;;### (autoloads (org-feed-show-raw-feed org-feed-goto-inbox org-feed-update -;;;;;; org-feed-update-all) "org-feed" "org/org-feed.el" (20309 -;;;;;; 60936)) +;;;;;; org-feed-update-all) "org-feed" "org/org-feed.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from org/org-feed.el (autoload 'org-feed-update-all "org-feed" "\ @@ -20764,7 +20769,7 @@ Show the raw feed buffer of a feed. ;;;*** ;;;### (autoloads (org-footnote-normalize org-footnote-action) "org-footnote" -;;;;;; "org/org-footnote.el" (20344 35712)) +;;;;;; "org/org-footnote.el" (20377 65403)) ;;; Generated autoloads from org/org-footnote.el (autoload 'org-footnote-action "org-footnote" "\ @@ -20815,7 +20820,7 @@ Additional note on `org-footnote-insert-pos-for-preprocessor': ;;;### (autoloads (org-freemind-to-org-mode org-freemind-from-org-sparse-tree ;;;;;; org-freemind-from-org-mode org-freemind-from-org-mode-node ;;;;;; org-freemind-show org-export-as-freemind) "org-freemind" -;;;;;; "org/org-freemind.el" (20309 60936)) +;;;;;; "org/org-freemind.el" (20352 65510)) ;;; Generated autoloads from org/org-freemind.el (autoload 'org-export-as-freemind "org-freemind" "\ @@ -20876,7 +20881,7 @@ Convert FreeMind file MM-FILE to `org-mode' file ORG-FILE. ;;;### (autoloads (org-export-htmlize-generate-css org-export-as-html ;;;;;; org-export-region-as-html org-replace-region-by-html org-export-as-html-to-buffer ;;;;;; org-export-as-html-batch org-export-as-html-and-open) "org-html" -;;;;;; "org/org-html.el" (20344 35712)) +;;;;;; "org/org-html.el" (20352 65510)) ;;; Generated autoloads from org/org-html.el (put 'org-export-html-style-include-default 'safe-local-variable 'booleanp) @@ -20970,7 +20975,7 @@ that uses these same face definitions. ;;;### (autoloads (org-export-icalendar-combine-agenda-files org-export-icalendar-all-agenda-files ;;;;;; org-export-icalendar-this-file) "org-icalendar" "org/org-icalendar.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from org/org-icalendar.el (autoload 'org-export-icalendar-this-file "org-icalendar" "\ @@ -20998,7 +21003,7 @@ The file is stored under the name `org-combined-agenda-icalendar-file'. ;;;### (autoloads (org-id-store-link org-id-find-id-file org-id-find ;;;;;; org-id-goto org-id-get-with-outline-drilling org-id-get-with-outline-path-completion ;;;;;; org-id-get org-id-copy org-id-get-create) "org-id" "org/org-id.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from org/org-id.el (autoload 'org-id-get-create "org-id" "\ @@ -21067,7 +21072,7 @@ Store a link to the current entry, using its ID. ;;;*** ;;;### (autoloads (org-indent-mode) "org-indent" "org/org-indent.el" -;;;;;; (20344 35712)) +;;;;;; (20352 65510)) ;;; Generated autoloads from org/org-indent.el (autoload 'org-indent-mode "org-indent" "\ @@ -21085,7 +21090,7 @@ during idle time. ;;;*** ;;;### (autoloads (org-irc-store-link) "org-irc" "org/org-irc.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from org/org-irc.el (autoload 'org-irc-store-link "org-irc" "\ @@ -21098,7 +21103,7 @@ Dispatch to the appropriate function to store a link to an IRC session. ;;;### (autoloads (org-export-as-pdf-and-open org-export-as-pdf org-export-as-latex ;;;;;; org-export-region-as-latex org-replace-region-by-latex org-export-as-latex-to-buffer ;;;;;; org-export-as-latex-batch) "org-latex" "org/org-latex.el" -;;;;;; (20344 35712)) +;;;;;; (20352 65510)) ;;; Generated autoloads from org/org-latex.el (autoload 'org-export-as-latex-batch "org-latex" "\ @@ -21179,7 +21184,7 @@ Export as LaTeX, then process through to PDF, and open. ;;;### (autoloads (org-lparse-region org-replace-region-by org-lparse-to-buffer ;;;;;; org-lparse-batch org-lparse-and-open) "org-lparse" "org/org-lparse.el" -;;;;;; (20344 35712)) +;;;;;; (20352 65510)) ;;; Generated autoloads from org/org-lparse.el (autoload 'org-lparse-and-open "org-lparse" "\ @@ -21236,8 +21241,8 @@ in a window. A non-interactive call will only return the buffer. ;;;*** ;;;### (autoloads (org-mobile-create-sumo-agenda org-mobile-pull -;;;;;; org-mobile-push) "org-mobile" "org/org-mobile.el" (20309 -;;;;;; 60936)) +;;;;;; org-mobile-push) "org-mobile" "org/org-mobile.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from org/org-mobile.el (autoload 'org-mobile-push "org-mobile" "\ @@ -21263,7 +21268,7 @@ Create a file that contains all custom agenda views. ;;;### (autoloads (org-export-as-odf-and-open org-export-as-odf org-export-odt-convert ;;;;;; org-export-as-odt org-export-as-odt-batch org-export-as-odt-and-open) -;;;;;; "org-odt" "org/org-odt.el" (20344 35712)) +;;;;;; "org-odt" "org/org-odt.el" (20377 65403)) ;;; Generated autoloads from org/org-odt.el (autoload 'org-export-as-odt-and-open "org-odt" "\ @@ -21333,7 +21338,7 @@ formula file. ;;;*** ;;;### (autoloads (org-plot/gnuplot) "org-plot" "org/org-plot.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from org/org-plot.el (autoload 'org-plot/gnuplot "org-plot" "\ @@ -21347,7 +21352,7 @@ line directly before or after the table. ;;;### (autoloads (org-publish-current-project org-publish-current-file ;;;;;; org-publish-all org-publish) "org-publish" "org/org-publish.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from org/org-publish.el (defalias 'org-publish-project 'org-publish) @@ -21381,7 +21386,7 @@ the project. ;;;### (autoloads (org-remember-handler org-remember org-remember-apply-template ;;;;;; org-remember-annotation org-remember-insinuate) "org-remember" -;;;;;; "org/org-remember.el" (20309 60936)) +;;;;;; "org/org-remember.el" (20352 65510)) ;;; Generated autoloads from org/org-remember.el (autoload 'org-remember-insinuate "org-remember" "\ @@ -21457,7 +21462,7 @@ See also the variable `org-reverse-note-order'. ;;;*** ;;;### (autoloads (org-table-to-lisp orgtbl-mode turn-on-orgtbl) -;;;;;; "org-table" "org/org-table.el" (20345 9613)) +;;;;;; "org-table" "org/org-table.el" (20377 65403)) ;;; Generated autoloads from org/org-table.el (autoload 'turn-on-orgtbl "org-table" "\ @@ -21481,7 +21486,7 @@ The table is taken from the parameter TXT, or from the buffer at point. ;;;*** ;;;### (autoloads (org-export-as-taskjuggler-and-open org-export-as-taskjuggler) -;;;;;; "org-taskjuggler" "org/org-taskjuggler.el" (20309 60936)) +;;;;;; "org-taskjuggler" "org/org-taskjuggler.el" (20352 65510)) ;;; Generated autoloads from org/org-taskjuggler.el (autoload 'org-export-as-taskjuggler "org-taskjuggler" "\ @@ -21509,7 +21514,7 @@ with the TaskJuggler GUI. ;;;### (autoloads (org-timer-set-timer org-timer-item org-timer-change-times-in-region ;;;;;; org-timer org-timer-start) "org-timer" "org/org-timer.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from org/org-timer.el (autoload 'org-timer-start "org-timer" "\ @@ -21570,7 +21575,7 @@ replace any running timer. ;;;*** ;;;### (autoloads (org-export-as-xoxo) "org-xoxo" "org/org-xoxo.el" -;;;;;; (20345 9613)) +;;;;;; (20352 65510)) ;;; Generated autoloads from org/org-xoxo.el (autoload 'org-export-as-xoxo "org-xoxo" "\ @@ -21582,7 +21587,7 @@ The XOXO buffer is named *xoxo-* ;;;*** ;;;### (autoloads (outline-minor-mode outline-mode) "outline" "outline.el" -;;;;;; (20330 53092)) +;;;;;; (20352 65510)) ;;; Generated autoloads from outline.el (put 'outline-regexp 'safe-local-variable 'stringp) (put 'outline-heading-end-regexp 'safe-local-variable 'stringp) @@ -21646,7 +21651,7 @@ See the command `outline-mode' for more information on this mode. ;;;### (autoloads (list-packages describe-package package-initialize ;;;;;; package-refresh-contents package-install-file package-install-from-buffer ;;;;;; package-install package-enable-at-startup) "package" "emacs-lisp/package.el" -;;;;;; (20317 26260)) +;;;;;; (20352 65510)) ;;; Generated autoloads from emacs-lisp/package.el (defvar package-enable-at-startup t "\ @@ -21716,7 +21721,7 @@ The list is displayed in a buffer named `*Packages*'. ;;;*** -;;;### (autoloads (show-paren-mode) "paren" "paren.el" (20309 60936)) +;;;### (autoloads (show-paren-mode) "paren" "paren.el" (20352 65510)) ;;; Generated autoloads from paren.el (defvar show-paren-mode nil "\ @@ -21743,7 +21748,7 @@ matching parenthesis is highlighted in `show-paren-style' after ;;;*** ;;;### (autoloads (parse-time-string) "parse-time" "calendar/parse-time.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from calendar/parse-time.el (put 'parse-time-rules 'risky-local-variable t) @@ -21756,8 +21761,8 @@ unknown are returned as nil. ;;;*** -;;;### (autoloads (pascal-mode) "pascal" "progmodes/pascal.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (pascal-mode) "pascal" "progmodes/pascal.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from progmodes/pascal.el (autoload 'pascal-mode "pascal" "\ @@ -21810,7 +21815,7 @@ no args, if that value is non-nil. ;;;*** ;;;### (autoloads (password-in-cache-p password-cache-expiry password-cache) -;;;;;; "password-cache" "password-cache.el" (20309 60936)) +;;;;;; "password-cache" "password-cache.el" (20352 65510)) ;;; Generated autoloads from password-cache.el (defvar password-cache t "\ @@ -21832,7 +21837,7 @@ Check if KEY is in the cache. ;;;*** ;;;### (autoloads (pcase-let pcase-let* pcase) "pcase" "emacs-lisp/pcase.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from emacs-lisp/pcase.el (autoload 'pcase "pcase" "\ @@ -21891,8 +21896,8 @@ of the form (UPAT EXP). ;;;*** -;;;### (autoloads (pcomplete/cvs) "pcmpl-cvs" "pcmpl-cvs.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (pcomplete/cvs) "pcmpl-cvs" "pcmpl-cvs.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from pcmpl-cvs.el (autoload 'pcomplete/cvs "pcmpl-cvs" "\ @@ -21903,7 +21908,7 @@ Completion rules for the `cvs' command. ;;;*** ;;;### (autoloads (pcomplete/tar pcomplete/make pcomplete/bzip2 pcomplete/gzip) -;;;;;; "pcmpl-gnu" "pcmpl-gnu.el" (20309 60936)) +;;;;;; "pcmpl-gnu" "pcmpl-gnu.el" (20352 65510)) ;;; Generated autoloads from pcmpl-gnu.el (autoload 'pcomplete/gzip "pcmpl-gnu" "\ @@ -21931,7 +21936,7 @@ Completion for the GNU tar utility. ;;;*** ;;;### (autoloads (pcomplete/mount pcomplete/umount pcomplete/kill) -;;;;;; "pcmpl-linux" "pcmpl-linux.el" (20309 60936)) +;;;;;; "pcmpl-linux" "pcmpl-linux.el" (20352 65510)) ;;; Generated autoloads from pcmpl-linux.el (autoload 'pcomplete/kill "pcmpl-linux" "\ @@ -21951,8 +21956,8 @@ Completion for GNU/Linux `mount'. ;;;*** -;;;### (autoloads (pcomplete/rpm) "pcmpl-rpm" "pcmpl-rpm.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (pcomplete/rpm) "pcmpl-rpm" "pcmpl-rpm.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from pcmpl-rpm.el (autoload 'pcomplete/rpm "pcmpl-rpm" "\ @@ -21964,7 +21969,7 @@ Completion for the `rpm' command. ;;;### (autoloads (pcomplete/scp pcomplete/ssh pcomplete/chgrp pcomplete/chown ;;;;;; pcomplete/which pcomplete/xargs pcomplete/rm pcomplete/rmdir -;;;;;; pcomplete/cd) "pcmpl-unix" "pcmpl-unix.el" (20309 60936)) +;;;;;; pcomplete/cd) "pcmpl-unix" "pcmpl-unix.el" (20352 65510)) ;;; Generated autoloads from pcmpl-unix.el (autoload 'pcomplete/cd "pcmpl-unix" "\ @@ -22021,8 +22026,8 @@ Includes files as well as host names followed by a colon. ;;;### (autoloads (pcomplete-shell-setup pcomplete-comint-setup pcomplete-list ;;;;;; pcomplete-help pcomplete-expand pcomplete-continue pcomplete-expand-and-complete -;;;;;; pcomplete-reverse pcomplete) "pcomplete" "pcomplete.el" (20309 -;;;;;; 60936)) +;;;;;; pcomplete-reverse pcomplete) "pcomplete" "pcomplete.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from pcomplete.el (autoload 'pcomplete "pcomplete" "\ @@ -22081,7 +22086,7 @@ Setup `shell-mode' to use pcomplete. ;;;### (autoloads (cvs-dired-use-hook cvs-dired-action cvs-status ;;;;;; cvs-update cvs-examine cvs-quickdir cvs-checkout) "pcvs" -;;;;;; "vc/pcvs.el" (20309 60936)) +;;;;;; "vc/pcvs.el" (20352 65510)) ;;; Generated autoloads from vc/pcvs.el (autoload 'cvs-checkout "pcvs" "\ @@ -22156,7 +22161,7 @@ The exact behavior is determined also by `cvs-dired-use-hook'." (when (stringp d ;;;*** -;;;### (autoloads nil "pcvs-defs" "vc/pcvs-defs.el" (20309 60936)) +;;;### (autoloads nil "pcvs-defs" "vc/pcvs-defs.el" (20352 65510)) ;;; Generated autoloads from vc/pcvs-defs.el (defvar cvs-global-menu (let ((m (make-sparse-keymap "PCL-CVS"))) (define-key m [status] `(menu-item ,(purecopy "Directory Status") cvs-status :help ,(purecopy "A more verbose status of a workarea"))) (define-key m [checkout] `(menu-item ,(purecopy "Checkout Module") cvs-checkout :help ,(purecopy "Check out a module from the repository"))) (define-key m [update] `(menu-item ,(purecopy "Update Directory") cvs-update :help ,(purecopy "Fetch updates from the repository"))) (define-key m [examine] `(menu-item ,(purecopy "Examine Directory") cvs-examine :help ,(purecopy "Examine the current state of a workarea"))) (fset 'cvs-global-menu m)) "\ @@ -22165,7 +22170,7 @@ Global menu used by PCL-CVS.") ;;;*** ;;;### (autoloads (perl-mode) "perl-mode" "progmodes/perl-mode.el" -;;;;;; (20341 24416)) +;;;;;; (20352 65510)) ;;; Generated autoloads from progmodes/perl-mode.el (put 'perl-indent-level 'safe-local-variable 'integerp) (put 'perl-continued-statement-offset 'safe-local-variable 'integerp) @@ -22227,7 +22232,7 @@ Turning on Perl mode runs the normal hook `perl-mode-hook'. ;;;*** ;;;### (autoloads (picture-mode) "picture" "textmodes/picture.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from textmodes/picture.el (autoload 'picture-mode "picture" "\ @@ -22307,8 +22312,8 @@ they are not by default assigned to keys. ;;;*** -;;;### (autoloads (plstore-open) "plstore" "gnus/plstore.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (plstore-open) "plstore" "gnus/plstore.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from gnus/plstore.el (autoload 'plstore-open "plstore" "\ @@ -22319,7 +22324,7 @@ Create a plstore instance associated with FILE. ;;;*** ;;;### (autoloads (po-find-file-coding-system) "po" "textmodes/po.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from textmodes/po.el (autoload 'po-find-file-coding-system "po" "\ @@ -22330,7 +22335,7 @@ Called through `file-coding-system-alist', before the file is visited for real. ;;;*** -;;;### (autoloads (pong) "pong" "play/pong.el" (20309 60936)) +;;;### (autoloads (pong) "pong" "play/pong.el" (20352 65510)) ;;; Generated autoloads from play/pong.el (autoload 'pong "pong" "\ @@ -22346,7 +22351,7 @@ pong-mode keybindings:\\ ;;;*** -;;;### (autoloads (pop3-movemail) "pop3" "gnus/pop3.el" (20309 60936)) +;;;### (autoloads (pop3-movemail) "pop3" "gnus/pop3.el" (20352 65510)) ;;; Generated autoloads from gnus/pop3.el (autoload 'pop3-movemail "pop3" "\ @@ -22359,7 +22364,7 @@ Use streaming commands. ;;;### (autoloads (pp-macroexpand-last-sexp pp-eval-last-sexp pp-macroexpand-expression ;;;;;; pp-eval-expression pp pp-buffer pp-to-string) "pp" "emacs-lisp/pp.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from emacs-lisp/pp.el (autoload 'pp-to-string "pp" "\ @@ -22427,7 +22432,7 @@ Ignores leading comment characters. ;;;;;; pr-ps-buffer-print pr-ps-buffer-using-ghostscript pr-ps-buffer-preview ;;;;;; pr-ps-directory-ps-print pr-ps-directory-print pr-ps-directory-using-ghostscript ;;;;;; pr-ps-directory-preview pr-interface) "printing" "printing.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from printing.el (autoload 'pr-interface "printing" "\ @@ -23014,7 +23019,7 @@ are both set to t. ;;;*** -;;;### (autoloads (proced) "proced" "proced.el" (20309 60936)) +;;;### (autoloads (proced) "proced" "proced.el" (20352 65510)) ;;; Generated autoloads from proced.el (autoload 'proced "proced" "\ @@ -23030,7 +23035,7 @@ See `proced-mode' for a description of features available in Proced buffers. ;;;*** ;;;### (autoloads (run-prolog mercury-mode prolog-mode) "prolog" -;;;;;; "progmodes/prolog.el" (20309 60936)) +;;;;;; "progmodes/prolog.el" (20352 65510)) ;;; Generated autoloads from progmodes/prolog.el (autoload 'prolog-mode "prolog" "\ @@ -23065,8 +23070,8 @@ With prefix argument ARG, restart the Prolog process if running before. ;;;*** -;;;### (autoloads (bdf-directory-list) "ps-bdf" "ps-bdf.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (bdf-directory-list) "ps-bdf" "ps-bdf.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from ps-bdf.el (defvar bdf-directory-list (if (memq system-type '(ms-dos windows-nt)) (list (expand-file-name "fonts/bdf" installation-directory)) '("/usr/local/share/emacs/fonts/bdf")) "\ @@ -23077,8 +23082,8 @@ The default value is '(\"/usr/local/share/emacs/fonts/bdf\").") ;;;*** -;;;### (autoloads (ps-mode) "ps-mode" "progmodes/ps-mode.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (ps-mode) "ps-mode" "progmodes/ps-mode.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from progmodes/ps-mode.el (autoload 'ps-mode "ps-mode" "\ @@ -23129,8 +23134,8 @@ Typing \\\\[ps-run-goto-error] when the cursor is at the number ;;;;;; ps-spool-region ps-spool-buffer-with-faces ps-spool-buffer ;;;;;; ps-print-region-with-faces ps-print-region ps-print-buffer-with-faces ;;;;;; ps-print-buffer ps-print-customize ps-print-color-p ps-paper-type -;;;;;; ps-page-dimensions-database) "ps-print" "ps-print.el" (20309 -;;;;;; 60936)) +;;;;;; ps-page-dimensions-database) "ps-print" "ps-print.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from ps-print.el (defvar ps-page-dimensions-database (purecopy (list (list 'a4 (/ (* 72 21.0) 2.54) (/ (* 72 29.7) 2.54) "A4") (list 'a3 (/ (* 72 29.7) 2.54) (/ (* 72 42.0) 2.54) "A3") (list 'letter (* 72 8.5) (* 72 11.0) "Letter") (list 'legal (* 72 8.5) (* 72 14.0) "Legal") (list 'letter-small (* 72 7.68) (* 72 10.16) "LetterSmall") (list 'tabloid (* 72 11.0) (* 72 17.0) "Tabloid") (list 'ledger (* 72 17.0) (* 72 11.0) "Ledger") (list 'statement (* 72 5.5) (* 72 8.5) "Statement") (list 'executive (* 72 7.5) (* 72 10.0) "Executive") (list 'a4small (* 72 7.47) (* 72 10.85) "A4Small") (list 'b4 (* 72 10.125) (* 72 14.33) "B4") (list 'b5 (* 72 7.16) (* 72 10.125) "B5") '(addresslarge 236.0 99.0 "AddressLarge") '(addresssmall 236.0 68.0 "AddressSmall") '(cuthanging13 90.0 222.0 "CutHanging13") '(cuthanging15 90.0 114.0 "CutHanging15") '(diskette 181.0 136.0 "Diskette") '(eurofilefolder 139.0 112.0 "EuropeanFilefolder") '(eurofoldernarrow 526.0 107.0 "EuroFolderNarrow") '(eurofolderwide 526.0 136.0 "EuroFolderWide") '(euronamebadge 189.0 108.0 "EuroNameBadge") '(euronamebadgelarge 223.0 136.0 "EuroNameBadgeLarge") '(filefolder 230.0 37.0 "FileFolder") '(jewelry 76.0 136.0 "Jewelry") '(mediabadge 180.0 136.0 "MediaBadge") '(multipurpose 126.0 68.0 "MultiPurpose") '(retaillabel 90.0 104.0 "RetailLabel") '(shipping 271.0 136.0 "Shipping") '(slide35mm 26.0 104.0 "Slide35mm") '(spine8mm 187.0 26.0 "Spine8mm") '(topcoated 425.19685 136.0 "TopCoatedPaper") '(topcoatedpaper 396.0 136.0 "TopcoatedPaper150") '(vhsface 205.0 127.0 "VHSFace") '(vhsspine 400.0 50.0 "VHSSpine") '(zipdisk 156.0 136.0 "ZipDisk"))) "\ @@ -23327,7 +23332,7 @@ If EXTENSION is any other symbol, it is ignored. ;;;*** ;;;### (autoloads (jython-mode python-mode python-after-info-look -;;;;;; run-python) "python" "progmodes/python.el" (20309 60936)) +;;;;;; run-python) "python" "progmodes/python.el" (20352 65510)) ;;; Generated autoloads from progmodes/python.el (add-to-list 'interpreter-mode-alist (cons (purecopy "jython") 'jython-mode)) @@ -23413,7 +23418,7 @@ Runs `jython-mode-hook' after `python-mode-hook'. ;;;*** ;;;### (autoloads (quoted-printable-decode-region) "qp" "gnus/qp.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from gnus/qp.el (autoload 'quoted-printable-decode-region "qp" "\ @@ -23436,7 +23441,7 @@ them into characters should be done separately. ;;;;;; quail-defrule quail-install-decode-map quail-install-map ;;;;;; quail-define-rules quail-show-keyboard-layout quail-set-keyboard-layout ;;;;;; quail-define-package quail-use-package quail-title) "quail" -;;;;;; "international/quail.el" (20330 53092)) +;;;;;; "international/quail.el" (20352 65510)) ;;; Generated autoloads from international/quail.el (autoload 'quail-title "quail" "\ @@ -23667,8 +23672,8 @@ of each directory. ;;;### (autoloads (quickurl-list quickurl-list-mode quickurl-edit-urls ;;;;;; quickurl-browse-url-ask quickurl-browse-url quickurl-add-url -;;;;;; quickurl-ask quickurl) "quickurl" "net/quickurl.el" (20309 -;;;;;; 60936)) +;;;;;; quickurl-ask quickurl) "quickurl" "net/quickurl.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from net/quickurl.el (defconst quickurl-reread-hook-postfix "\n;; Local Variables:\n;; eval: (progn (require 'quickurl) (add-hook 'local-write-file-hooks (lambda () (quickurl-read) nil)))\n;; End:\n" "\ @@ -23740,7 +23745,7 @@ Display `quickurl-list' as a formatted list using `quickurl-list-mode'. ;;;*** ;;;### (autoloads (rcirc-track-minor-mode rcirc-connect rcirc) "rcirc" -;;;;;; "net/rcirc.el" (20325 32214)) +;;;;;; "net/rcirc.el" (20353 36975)) ;;; Generated autoloads from net/rcirc.el (autoload 'rcirc "rcirc" "\ @@ -23778,8 +23783,8 @@ if ARG is omitted or nil. ;;;*** -;;;### (autoloads (remote-compile) "rcompile" "net/rcompile.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (remote-compile) "rcompile" "net/rcompile.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from net/rcompile.el (autoload 'remote-compile "rcompile" "\ @@ -23791,7 +23796,7 @@ See \\[compile]. ;;;*** ;;;### (autoloads (re-builder) "re-builder" "emacs-lisp/re-builder.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from emacs-lisp/re-builder.el (defalias 'regexp-builder 're-builder) @@ -23809,7 +23814,7 @@ matching parts of the target buffer will be highlighted. ;;;*** -;;;### (autoloads (recentf-mode) "recentf" "recentf.el" (20309 60936)) +;;;### (autoloads (recentf-mode) "recentf" "recentf.el" (20352 65510)) ;;; Generated autoloads from recentf.el (defvar recentf-mode nil "\ @@ -23839,7 +23844,7 @@ were operated on recently. ;;;;;; string-rectangle delete-whitespace-rectangle open-rectangle ;;;;;; insert-rectangle yank-rectangle kill-rectangle extract-rectangle ;;;;;; delete-extract-rectangle delete-rectangle) "rect" "rect.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from rect.el (define-key ctl-x-r-map "c" 'clear-rectangle) (define-key ctl-x-r-map "k" 'kill-rectangle) @@ -23975,8 +23980,8 @@ with a prefix argument, prompt for START-AT and FORMAT. ;;;*** -;;;### (autoloads (refill-mode) "refill" "textmodes/refill.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (refill-mode) "refill" "textmodes/refill.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from textmodes/refill.el (autoload 'refill-mode "refill" "\ @@ -23997,7 +24002,7 @@ For true \"word wrap\" behavior, use `visual-line-mode' instead. ;;;*** ;;;### (autoloads (reftex-reset-scanning-information reftex-mode -;;;;;; turn-on-reftex) "reftex" "textmodes/reftex.el" (20309 60936)) +;;;;;; turn-on-reftex) "reftex" "textmodes/reftex.el" (20352 65510)) ;;; Generated autoloads from textmodes/reftex.el (autoload 'turn-on-reftex "reftex" "\ @@ -24053,7 +24058,7 @@ This enforces rescanning the buffer on next use. ;;;*** ;;;### (autoloads (reftex-citation) "reftex-cite" "textmodes/reftex-cite.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from textmodes/reftex-cite.el (autoload 'reftex-citation "reftex-cite" "\ @@ -24083,7 +24088,7 @@ While entering the regexp, completion on knows citation keys is possible. ;;;*** ;;;### (autoloads (reftex-isearch-minor-mode) "reftex-global" "textmodes/reftex-global.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from textmodes/reftex-global.el (autoload 'reftex-isearch-minor-mode "reftex-global" "\ @@ -24100,7 +24105,7 @@ With no argument, this command toggles ;;;*** ;;;### (autoloads (reftex-index-phrases-mode) "reftex-index" "textmodes/reftex-index.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from textmodes/reftex-index.el (autoload 'reftex-index-phrases-mode "reftex-index" "\ @@ -24133,7 +24138,7 @@ Here are all local bindings. ;;;*** ;;;### (autoloads (reftex-all-document-files) "reftex-parse" "textmodes/reftex-parse.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from textmodes/reftex-parse.el (autoload 'reftex-all-document-files "reftex-parse" "\ @@ -24145,8 +24150,8 @@ of master file. ;;;*** -;;;### (autoloads nil "reftex-vars" "textmodes/reftex-vars.el" (20309 -;;;;;; 60936)) +;;;### (autoloads nil "reftex-vars" "textmodes/reftex-vars.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from textmodes/reftex-vars.el (put 'reftex-vref-is-default 'safe-local-variable (lambda (x) (or (stringp x) (symbolp x)))) (put 'reftex-fref-is-default 'safe-local-variable (lambda (x) (or (stringp x) (symbolp x)))) @@ -24156,7 +24161,7 @@ of master file. ;;;*** ;;;### (autoloads (regexp-opt-depth regexp-opt) "regexp-opt" "emacs-lisp/regexp-opt.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from emacs-lisp/regexp-opt.el (autoload 'regexp-opt "regexp-opt" "\ @@ -24187,7 +24192,7 @@ This means the number of non-shy regexp grouping constructs ;;;### (autoloads (remember-diary-extract-entries remember-clipboard ;;;;;; remember-other-frame remember) "remember" "textmodes/remember.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from textmodes/remember.el (autoload 'remember "remember" "\ @@ -24218,7 +24223,7 @@ Extract diary entries from the region. ;;;*** -;;;### (autoloads (repeat) "repeat" "repeat.el" (20309 60936)) +;;;### (autoloads (repeat) "repeat" "repeat.el" (20352 65510)) ;;; Generated autoloads from repeat.el (autoload 'repeat "repeat" "\ @@ -24241,7 +24246,7 @@ recently executed command not bound to an input event\". ;;;*** ;;;### (autoloads (reporter-submit-bug-report) "reporter" "mail/reporter.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from mail/reporter.el (autoload 'reporter-submit-bug-report "reporter" "\ @@ -24273,7 +24278,7 @@ mail-sending package is used for editing and sending the message. ;;;*** ;;;### (autoloads (reposition-window) "reposition" "reposition.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from reposition.el (autoload 'reposition-window "reposition" "\ @@ -24300,7 +24305,7 @@ first comment line visible (if point is in a comment). ;;;*** ;;;### (autoloads (global-reveal-mode reveal-mode) "reveal" "reveal.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from reveal.el (autoload 'reveal-mode "reveal" "\ @@ -24336,7 +24341,7 @@ the mode if ARG is omitted or nil. ;;;*** ;;;### (autoloads (make-ring ring-p) "ring" "emacs-lisp/ring.el" -;;;;;; (20321 41303)) +;;;;;; (20352 65510)) ;;; Generated autoloads from emacs-lisp/ring.el (autoload 'ring-p "ring" "\ @@ -24351,7 +24356,7 @@ Make a ring that can contain SIZE elements. ;;;*** -;;;### (autoloads (rlogin) "rlogin" "net/rlogin.el" (20309 60936)) +;;;### (autoloads (rlogin) "rlogin" "net/rlogin.el" (20352 65510)) ;;; Generated autoloads from net/rlogin.el (autoload 'rlogin "rlogin" "\ @@ -24400,7 +24405,7 @@ variable. ;;;;;; rmail-secondary-file-directory rmail-primary-inbox-list rmail-highlighted-headers ;;;;;; rmail-retry-ignored-headers rmail-displayed-headers rmail-ignored-headers ;;;;;; rmail-user-mail-address-regexp rmail-movemail-variant-p) -;;;;;; "rmail" "mail/rmail.el" (20315 8755)) +;;;;;; "rmail" "mail/rmail.el" (20370 20099)) ;;; Generated autoloads from mail/rmail.el (autoload 'rmail-movemail-variant-p "rmail" "\ @@ -24584,7 +24589,7 @@ Set PASSWORD to be used for retrieving mail from a POP or IMAP server. ;;;*** ;;;### (autoloads (rmail-output-body-to-file rmail-output-as-seen -;;;;;; rmail-output) "rmailout" "mail/rmailout.el" (20309 60936)) +;;;;;; rmail-output) "rmailout" "mail/rmailout.el" (20352 65510)) ;;; Generated autoloads from mail/rmailout.el (put 'rmail-output-file-alist 'risky-local-variable t) @@ -24649,7 +24654,7 @@ than appending to it. Deletes the message after writing if ;;;*** ;;;### (autoloads (rng-c-load-schema) "rng-cmpct" "nxml/rng-cmpct.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from nxml/rng-cmpct.el (autoload 'rng-c-load-schema "rng-cmpct" "\ @@ -24661,7 +24666,7 @@ Return a pattern. ;;;*** ;;;### (autoloads (rng-nxml-mode-init) "rng-nxml" "nxml/rng-nxml.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from nxml/rng-nxml.el (autoload 'rng-nxml-mode-init "rng-nxml" "\ @@ -24674,7 +24679,7 @@ Validation will be enabled if `rng-nxml-auto-validate-flag' is non-nil. ;;;*** ;;;### (autoloads (rng-validate-mode) "rng-valid" "nxml/rng-valid.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from nxml/rng-valid.el (autoload 'rng-validate-mode "rng-valid" "\ @@ -24704,8 +24709,8 @@ to use for finding the schema. ;;;*** -;;;### (autoloads (rng-xsd-compile) "rng-xsd" "nxml/rng-xsd.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (rng-xsd-compile) "rng-xsd" "nxml/rng-xsd.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from nxml/rng-xsd.el (put 'http://www\.w3\.org/2001/XMLSchema-datatypes 'rng-dt-compile 'rng-xsd-compile) @@ -24733,7 +24738,7 @@ must be equal. ;;;*** ;;;### (autoloads (robin-use-package robin-modify-package robin-define-package) -;;;;;; "robin" "international/robin.el" (20309 60936)) +;;;;;; "robin" "international/robin.el" (20352 65510)) ;;; Generated autoloads from international/robin.el (autoload 'robin-define-package "robin" "\ @@ -24766,7 +24771,7 @@ Start using robin package NAME, which is a string. ;;;*** ;;;### (autoloads (toggle-rot13-mode rot13-other-window rot13-region -;;;;;; rot13-string rot13) "rot13" "rot13.el" (20309 60936)) +;;;;;; rot13-string rot13) "rot13" "rot13.el" (20352 65510)) ;;; Generated autoloads from rot13.el (autoload 'rot13 "rot13" "\ @@ -24804,7 +24809,7 @@ Toggle the use of ROT13 encoding for the current window. ;;;*** ;;;### (autoloads (rst-minor-mode rst-mode) "rst" "textmodes/rst.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from textmodes/rst.el (add-to-list 'auto-mode-alist (purecopy '("\\.re?st\\'" . rst-mode))) @@ -24841,7 +24846,7 @@ for modes derived from Text mode, like Mail mode. ;;;*** ;;;### (autoloads (ruby-mode) "ruby-mode" "progmodes/ruby-mode.el" -;;;;;; (20330 53092)) +;;;;;; (20352 65510)) ;;; Generated autoloads from progmodes/ruby-mode.el (autoload 'ruby-mode "ruby-mode" "\ @@ -24862,8 +24867,8 @@ The variable `ruby-indent-level' controls the amount of indentation. ;;;*** -;;;### (autoloads (ruler-mode) "ruler-mode" "ruler-mode.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (ruler-mode) "ruler-mode" "ruler-mode.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from ruler-mode.el (defvar ruler-mode nil "\ @@ -24880,8 +24885,8 @@ if ARG is omitted or nil. ;;;*** -;;;### (autoloads (rx rx-to-string) "rx" "emacs-lisp/rx.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (rx rx-to-string) "rx" "emacs-lisp/rx.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from emacs-lisp/rx.el (autoload 'rx-to-string "rx" "\ @@ -25192,8 +25197,8 @@ enclosed in `(and ...)'. ;;;*** -;;;### (autoloads (savehist-mode) "savehist" "savehist.el" (20314 -;;;;;; 46279)) +;;;### (autoloads (savehist-mode) "savehist" "savehist.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from savehist.el (defvar savehist-mode nil "\ @@ -25225,7 +25230,7 @@ histories, which is probably undesirable. ;;;*** ;;;### (autoloads (dsssl-mode scheme-mode) "scheme" "progmodes/scheme.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from progmodes/scheme.el (autoload 'scheme-mode "scheme" "\ @@ -25267,7 +25272,7 @@ that variable's value is a string. ;;;*** ;;;### (autoloads (gnus-score-mode) "score-mode" "gnus/score-mode.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from gnus/score-mode.el (autoload 'gnus-score-mode "score-mode" "\ @@ -25281,7 +25286,7 @@ This mode is an extended emacs-lisp mode. ;;;*** ;;;### (autoloads (scroll-all-mode) "scroll-all" "scroll-all.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from scroll-all.el (defvar scroll-all-mode nil "\ @@ -25307,7 +25312,7 @@ one window apply to all visible windows in the same frame. ;;;*** ;;;### (autoloads (scroll-lock-mode) "scroll-lock" "scroll-lock.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from scroll-lock.el (autoload 'scroll-lock-mode "scroll-lock" "\ @@ -25323,7 +25328,7 @@ vertically fixed relative to window boundaries during scrolling. ;;;*** -;;;### (autoloads nil "secrets" "net/secrets.el" (20309 60936)) +;;;### (autoloads nil "secrets" "net/secrets.el" (20352 65510)) ;;; Generated autoloads from net/secrets.el (when (featurep 'dbusbind) (autoload 'secrets-show-secrets "secrets" nil t)) @@ -25331,7 +25336,7 @@ vertically fixed relative to window boundaries during scrolling. ;;;*** ;;;### (autoloads (semantic-mode semantic-default-submodes) "semantic" -;;;;;; "cedet/semantic.el" (20309 60936)) +;;;;;; "cedet/semantic.el" (20352 65510)) ;;; Generated autoloads from cedet/semantic.el (defvar semantic-default-submodes '(global-semantic-idle-scheduler-mode global-semanticdb-minor-mode) "\ @@ -25385,7 +25390,7 @@ Semantic mode. ;;;;;; mail-personal-alias-file mail-default-reply-to mail-archive-file-name ;;;;;; mail-header-separator send-mail-function mail-interactive ;;;;;; mail-self-blind mail-specify-envelope-from mail-from-style) -;;;;;; "sendmail" "mail/sendmail.el" (20320 14810)) +;;;;;; "sendmail" "mail/sendmail.el" (20370 20099)) ;;; Generated autoloads from mail/sendmail.el (defvar mail-from-style 'default "\ @@ -25667,8 +25672,8 @@ Like `mail' command, but display mail buffer in another frame. ;;;*** ;;;### (autoloads (server-save-buffers-kill-terminal server-mode -;;;;;; server-force-delete server-start) "server" "server.el" (20341 -;;;;;; 60214)) +;;;;;; server-force-delete server-start) "server" "server.el" (20362 +;;;;;; 35575)) ;;; Generated autoloads from server.el (put 'server-host 'risky-local-variable t) @@ -25735,7 +25740,7 @@ only these files will be asked to be saved. ;;;*** -;;;### (autoloads (ses-mode) "ses" "ses.el" (20309 60936)) +;;;### (autoloads (ses-mode) "ses" "ses.el" (20352 65510)) ;;; Generated autoloads from ses.el (autoload 'ses-mode "ses" "\ @@ -25754,7 +25759,7 @@ These are active only in the minibuffer, when entering or editing a formula: ;;;*** ;;;### (autoloads (html-mode sgml-mode) "sgml-mode" "textmodes/sgml-mode.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from textmodes/sgml-mode.el (autoload 'sgml-mode "sgml-mode" "\ @@ -25820,7 +25825,7 @@ To work around that, do: ;;;*** ;;;### (autoloads (sh-mode) "sh-script" "progmodes/sh-script.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from progmodes/sh-script.el (put 'sh-shell 'safe-local-variable 'symbolp) @@ -25885,7 +25890,7 @@ with your script for an edit-interpret-debug cycle. ;;;*** ;;;### (autoloads (list-load-path-shadows) "shadow" "emacs-lisp/shadow.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from emacs-lisp/shadow.el (autoload 'list-load-path-shadows "shadow" "\ @@ -25935,8 +25940,8 @@ function, `load-path-shadows-find'. ;;;*** ;;;### (autoloads (shadow-initialize shadow-define-regexp-group shadow-define-literal-group -;;;;;; shadow-define-cluster) "shadowfile" "shadowfile.el" (20309 -;;;;;; 60936)) +;;;;;; shadow-define-cluster) "shadowfile" "shadowfile.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from shadowfile.el (autoload 'shadow-define-cluster "shadowfile" "\ @@ -25975,7 +25980,7 @@ Set up file shadowing. ;;;*** ;;;### (autoloads (shell shell-dumb-shell-regexp) "shell" "shell.el" -;;;;;; (20321 41252)) +;;;;;; (20352 65510)) ;;; Generated autoloads from shell.el (defvar shell-dumb-shell-regexp (purecopy "cmd\\(proxy\\)?\\.exe") "\ @@ -26023,8 +26028,8 @@ Otherwise, one argument `-i' is passed to the shell. ;;;*** -;;;### (autoloads (shr-insert-document) "shr" "gnus/shr.el" (20327 -;;;;;; 64029)) +;;;### (autoloads (shr-insert-document) "shr" "gnus/shr.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from gnus/shr.el (autoload 'shr-insert-document "shr" "\ @@ -26037,7 +26042,7 @@ DOM should be a parse tree as generated by ;;;*** ;;;### (autoloads (sieve-upload-and-bury sieve-upload sieve-manage) -;;;;;; "sieve" "gnus/sieve.el" (20309 60936)) +;;;;;; "sieve" "gnus/sieve.el" (20352 65510)) ;;; Generated autoloads from gnus/sieve.el (autoload 'sieve-manage "sieve" "\ @@ -26058,7 +26063,7 @@ DOM should be a parse tree as generated by ;;;*** ;;;### (autoloads (sieve-mode) "sieve-mode" "gnus/sieve-mode.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from gnus/sieve-mode.el (autoload 'sieve-mode "sieve-mode" "\ @@ -26073,8 +26078,8 @@ Turning on Sieve mode runs `sieve-mode-hook'. ;;;*** -;;;### (autoloads (simula-mode) "simula" "progmodes/simula.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (simula-mode) "simula" "progmodes/simula.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from progmodes/simula.el (autoload 'simula-mode "simula" "\ @@ -26123,7 +26128,7 @@ with no arguments, if that value is non-nil. ;;;*** ;;;### (autoloads (skeleton-pair-insert-maybe skeleton-insert skeleton-proxy-new -;;;;;; define-skeleton) "skeleton" "skeleton.el" (20309 60936)) +;;;;;; define-skeleton) "skeleton" "skeleton.el" (20352 65510)) ;;; Generated autoloads from skeleton.el (defvar skeleton-filter-function 'identity "\ @@ -26233,7 +26238,7 @@ symmetrical ones, and the same character twice for the others. ;;;*** ;;;### (autoloads (smerge-start-session smerge-mode smerge-ediff) -;;;;;; "smerge-mode" "vc/smerge-mode.el" (20309 60936)) +;;;;;; "smerge-mode" "vc/smerge-mode.el" (20352 65510)) ;;; Generated autoloads from vc/smerge-mode.el (autoload 'smerge-ediff "smerge-mode" "\ @@ -26261,7 +26266,7 @@ If no conflict maker is found, turn off `smerge-mode'. ;;;*** ;;;### (autoloads (smiley-buffer smiley-region) "smiley" "gnus/smiley.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from gnus/smiley.el (autoload 'smiley-region "smiley" "\ @@ -26279,7 +26284,7 @@ interactively. If there's no argument, do it at the current buffer. ;;;*** ;;;### (autoloads (smtpmail-send-queued-mail smtpmail-send-it) "smtpmail" -;;;;;; "mail/smtpmail.el" (20314 46279)) +;;;;;; "mail/smtpmail.el" (20352 65510)) ;;; Generated autoloads from mail/smtpmail.el (autoload 'smtpmail-send-it "smtpmail" "\ @@ -26294,7 +26299,7 @@ Send mail that was queued as a result of setting `smtpmail-queue-mail'. ;;;*** -;;;### (autoloads (snake) "snake" "play/snake.el" (20309 60936)) +;;;### (autoloads (snake) "snake" "play/snake.el" (20352 65510)) ;;; Generated autoloads from play/snake.el (autoload 'snake "snake" "\ @@ -26318,7 +26323,7 @@ Snake mode keybindings: ;;;*** ;;;### (autoloads (snmpv2-mode snmp-mode) "snmp-mode" "net/snmp-mode.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from net/snmp-mode.el (autoload 'snmp-mode "snmp-mode" "\ @@ -26347,8 +26352,8 @@ then `snmpv2-mode-hook'. ;;;*** -;;;### (autoloads (sunrise-sunset) "solar" "calendar/solar.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (sunrise-sunset) "solar" "calendar/solar.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from calendar/solar.el (autoload 'sunrise-sunset "solar" "\ @@ -26363,8 +26368,8 @@ This function is suitable for execution in a .emacs file. ;;;*** -;;;### (autoloads (solitaire) "solitaire" "play/solitaire.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (solitaire) "solitaire" "play/solitaire.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from play/solitaire.el (autoload 'solitaire "solitaire" "\ @@ -26441,7 +26446,7 @@ Pick your favorite shortcuts: ;;;### (autoloads (reverse-region sort-columns sort-regexp-fields ;;;;;; sort-fields sort-numeric-fields sort-pages sort-paragraphs -;;;;;; sort-lines sort-subr) "sort" "sort.el" (20320 14810)) +;;;;;; sort-lines sort-subr) "sort" "sort.el" (20352 65510)) ;;; Generated autoloads from sort.el (put 'sort-fold-case 'safe-local-variable 'booleanp) @@ -26585,8 +26590,8 @@ From a program takes two point or marker arguments, BEG and END. ;;;*** -;;;### (autoloads (spam-initialize) "spam" "gnus/spam.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (spam-initialize) "spam" "gnus/spam.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from gnus/spam.el (autoload 'spam-initialize "spam" "\ @@ -26602,7 +26607,7 @@ installed through `spam-necessary-extra-headers'. ;;;### (autoloads (spam-report-deagentize spam-report-agentize spam-report-url-to-file ;;;;;; spam-report-url-ping-mm-url spam-report-process-queue) "spam-report" -;;;;;; "gnus/spam-report.el" (20309 60936)) +;;;;;; "gnus/spam-report.el" (20352 65510)) ;;; Generated autoloads from gnus/spam-report.el (autoload 'spam-report-process-queue "spam-report" "\ @@ -26645,7 +26650,7 @@ Spam reports will be queued with the method used when ;;;*** ;;;### (autoloads (speedbar-get-focus speedbar-frame-mode) "speedbar" -;;;;;; "speedbar.el" (20315 2375)) +;;;;;; "speedbar.el" (20352 65510)) ;;; Generated autoloads from speedbar.el (defalias 'speedbar 'speedbar-frame-mode) @@ -26669,8 +26674,8 @@ selected. If the speedbar frame is active, then select the attached frame. ;;;*** -;;;### (autoloads (snarf-spooks spook) "spook" "play/spook.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (snarf-spooks spook) "spook" "play/spook.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from play/spook.el (autoload 'spook "spook" "\ @@ -26689,7 +26694,7 @@ Return a vector containing the lines from `spook-phrases-file'. ;;;;;; sql-ms sql-ingres sql-solid sql-mysql sql-sqlite sql-informix ;;;;;; sql-sybase sql-oracle sql-product-interactive sql-connect ;;;;;; sql-mode sql-help sql-add-product-keywords) "sql" "progmodes/sql.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from progmodes/sql.el (autoload 'sql-add-product-keywords "sql" "\ @@ -27185,7 +27190,7 @@ buffer. ;;;*** ;;;### (autoloads (srecode-template-mode) "srecode/srt-mode" "cedet/srecode/srt-mode.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from cedet/srecode/srt-mode.el (autoload 'srecode-template-mode "srecode/srt-mode" "\ @@ -27198,7 +27203,7 @@ Major-mode for writing SRecode macros. ;;;*** ;;;### (autoloads (starttls-open-stream) "starttls" "gnus/starttls.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from gnus/starttls.el (autoload 'starttls-open-stream "starttls" "\ @@ -27225,8 +27230,8 @@ GnuTLS requires a port number. ;;;;;; strokes-mode strokes-list-strokes strokes-load-user-strokes ;;;;;; strokes-help strokes-describe-stroke strokes-do-complex-stroke ;;;;;; strokes-do-stroke strokes-read-complex-stroke strokes-read-stroke -;;;;;; strokes-global-set-stroke) "strokes" "strokes.el" (20309 -;;;;;; 60936)) +;;;;;; strokes-global-set-stroke) "strokes" "strokes.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from strokes.el (autoload 'strokes-global-set-stroke "strokes" "\ @@ -27340,7 +27345,7 @@ Read a complex stroke and insert its glyph into the current buffer. ;;;*** ;;;### (autoloads (studlify-buffer studlify-word studlify-region) -;;;;;; "studly" "play/studly.el" (20309 60936)) +;;;;;; "studly" "play/studly.el" (20352 65510)) ;;; Generated autoloads from play/studly.el (autoload 'studlify-region "studly" "\ @@ -27361,7 +27366,7 @@ Studlify-case the current buffer. ;;;*** ;;;### (autoloads (global-subword-mode subword-mode) "subword" "progmodes/subword.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from progmodes/subword.el (autoload 'subword-mode "subword" "\ @@ -27417,7 +27422,7 @@ See `subword-mode' for more information on Subword mode. ;;;*** ;;;### (autoloads (sc-cite-original) "supercite" "mail/supercite.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from mail/supercite.el (autoload 'sc-cite-original "supercite" "\ @@ -27449,8 +27454,8 @@ and `sc-post-hook' is run after the guts of this function. ;;;*** -;;;### (autoloads (gpm-mouse-mode) "t-mouse" "t-mouse.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (gpm-mouse-mode) "t-mouse" "t-mouse.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from t-mouse.el (define-obsolete-function-alias 't-mouse-mode 'gpm-mouse-mode "23.1") @@ -27478,7 +27483,7 @@ It relies on the `gpm' daemon being activated. ;;;*** -;;;### (autoloads (tabify untabify) "tabify" "tabify.el" (20309 60936)) +;;;### (autoloads (tabify untabify) "tabify" "tabify.el" (20352 65510)) ;;; Generated autoloads from tabify.el (autoload 'untabify "tabify" "\ @@ -27513,7 +27518,7 @@ The variable `tab-width' controls the spacing of tab stops. ;;;;;; table-recognize table-insert-row-column table-insert-column ;;;;;; table-insert-row table-insert table-point-left-cell-hook ;;;;;; table-point-entered-cell-hook table-load-hook table-cell-map-hook) -;;;;;; "table" "textmodes/table.el" (20309 60936)) +;;;;;; "table" "textmodes/table.el" (20352 65510)) ;;; Generated autoloads from textmodes/table.el (defvar table-cell-map-hook nil "\ @@ -28102,7 +28107,7 @@ converts a table into plain text without frames. It is a companion to ;;;*** ;;;### (autoloads (tabulated-list-mode) "tabulated-list" "emacs-lisp/tabulated-list.el" -;;;;;; (20328 25588)) +;;;;;; (20365 34527)) ;;; Generated autoloads from emacs-lisp/tabulated-list.el (autoload 'tabulated-list-mode "tabulated-list" "\ @@ -28144,7 +28149,7 @@ as the ewoc pretty-printer. ;;;*** -;;;### (autoloads (talk talk-connect) "talk" "talk.el" (20309 60936)) +;;;### (autoloads (talk talk-connect) "talk" "talk.el" (20352 65510)) ;;; Generated autoloads from talk.el (autoload 'talk-connect "talk" "\ @@ -28159,7 +28164,7 @@ Connect to the Emacs talk group from the current X display or tty frame. ;;;*** -;;;### (autoloads (tar-mode) "tar-mode" "tar-mode.el" (20324 28875)) +;;;### (autoloads (tar-mode) "tar-mode" "tar-mode.el" (20352 65510)) ;;; Generated autoloads from tar-mode.el (autoload 'tar-mode "tar-mode" "\ @@ -28183,7 +28188,7 @@ See also: variables `tar-update-datestamp' and `tar-anal-blocksize'. ;;;*** ;;;### (autoloads (tcl-help-on-word inferior-tcl tcl-mode) "tcl" -;;;;;; "progmodes/tcl.el" (20309 60936)) +;;;;;; "progmodes/tcl.el" (20352 65510)) ;;; Generated autoloads from progmodes/tcl.el (autoload 'tcl-mode "tcl" "\ @@ -28231,7 +28236,7 @@ Prefix argument means invert sense of `tcl-use-smart-word-finder'. ;;;*** -;;;### (autoloads (rsh telnet) "telnet" "net/telnet.el" (20309 60936)) +;;;### (autoloads (rsh telnet) "telnet" "net/telnet.el" (20352 65510)) ;;; Generated autoloads from net/telnet.el (autoload 'telnet "telnet" "\ @@ -28257,7 +28262,7 @@ Normally input is edited in Emacs and sent a line at a time. ;;;*** ;;;### (autoloads (serial-term ansi-term term make-term) "term" "term.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from term.el (autoload 'make-term "term" "\ @@ -28299,8 +28304,8 @@ use in that buffer. ;;;*** -;;;### (autoloads (terminal-emulator) "terminal" "terminal.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (terminal-emulator) "terminal" "terminal.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from terminal.el (autoload 'terminal-emulator "terminal" "\ @@ -28337,7 +28342,7 @@ subprocess started. ;;;*** ;;;### (autoloads (testcover-this-defun) "testcover" "emacs-lisp/testcover.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from emacs-lisp/testcover.el (autoload 'testcover-this-defun "testcover" "\ @@ -28347,7 +28352,7 @@ Start coverage on function under point. ;;;*** -;;;### (autoloads (tetris) "tetris" "play/tetris.el" (20309 60936)) +;;;### (autoloads (tetris) "tetris" "play/tetris.el" (20352 65510)) ;;; Generated autoloads from play/tetris.el (autoload 'tetris "tetris" "\ @@ -28378,7 +28383,7 @@ tetris-mode keybindings: ;;;;;; tex-start-commands tex-start-options slitex-run-command latex-run-command ;;;;;; tex-run-command tex-offer-save tex-main-file tex-first-line-header-regexp ;;;;;; tex-directory tex-shell-file-name) "tex-mode" "textmodes/tex-mode.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from textmodes/tex-mode.el (defvar tex-shell-file-name nil "\ @@ -28680,7 +28685,7 @@ Major mode to edit DocTeX files. ;;;*** ;;;### (autoloads (texi2info texinfo-format-region texinfo-format-buffer) -;;;;;; "texinfmt" "textmodes/texinfmt.el" (20309 60936)) +;;;;;; "texinfmt" "textmodes/texinfmt.el" (20352 65510)) ;;; Generated autoloads from textmodes/texinfmt.el (autoload 'texinfo-format-buffer "texinfmt" "\ @@ -28720,7 +28725,7 @@ if large. You can use `Info-split' to do this manually. ;;;*** ;;;### (autoloads (texinfo-mode texinfo-close-quote texinfo-open-quote) -;;;;;; "texinfo" "textmodes/texinfo.el" (20309 60936)) +;;;;;; "texinfo" "textmodes/texinfo.el" (20352 65510)) ;;; Generated autoloads from textmodes/texinfo.el (defvar texinfo-open-quote (purecopy "``") "\ @@ -28806,7 +28811,7 @@ value of `texinfo-mode-hook'. ;;;### (autoloads (thai-composition-function thai-compose-buffer ;;;;;; thai-compose-string thai-compose-region) "thai-util" "language/thai-util.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from language/thai-util.el (autoload 'thai-compose-region "thai-util" "\ @@ -28835,7 +28840,7 @@ Compose Thai characters in the current buffer. ;;;### (autoloads (list-at-point number-at-point symbol-at-point ;;;;;; sexp-at-point thing-at-point bounds-of-thing-at-point forward-thing) -;;;;;; "thingatpt" "thingatpt.el" (20309 60936)) +;;;;;; "thingatpt" "thingatpt.el" (20352 65510)) ;;; Generated autoloads from thingatpt.el (autoload 'forward-thing "thingatpt" "\ @@ -28898,7 +28903,7 @@ Return the Lisp list at point, or nil if none is found. ;;;### (autoloads (thumbs-dired-setroot thumbs-dired-show thumbs-dired-show-marked ;;;;;; thumbs-show-from-dir thumbs-find-thumb) "thumbs" "thumbs.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from thumbs.el (autoload 'thumbs-find-thumb "thumbs" "\ @@ -28936,8 +28941,8 @@ In dired, call the setroot program on the image at point. ;;;;;; tibetan-post-read-conversion tibetan-compose-buffer tibetan-decompose-buffer ;;;;;; tibetan-decompose-string tibetan-decompose-region tibetan-compose-region ;;;;;; tibetan-compose-string tibetan-transcription-to-tibetan tibetan-tibetan-to-transcription -;;;;;; tibetan-char-p) "tibet-util" "language/tibet-util.el" (20309 -;;;;;; 60936)) +;;;;;; tibetan-char-p) "tibet-util" "language/tibet-util.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from language/tibet-util.el (autoload 'tibetan-char-p "tibet-util" "\ @@ -29011,7 +29016,7 @@ See also docstring of the function tibetan-compose-region. ;;;*** ;;;### (autoloads (tildify-buffer tildify-region) "tildify" "textmodes/tildify.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from textmodes/tildify.el (autoload 'tildify-region "tildify" "\ @@ -29036,7 +29041,7 @@ This function performs no refilling of the changed text. ;;;### (autoloads (emacs-init-time emacs-uptime display-time-world ;;;;;; display-time-mode display-time display-time-day-and-date) -;;;;;; "time" "time.el" (20309 60936)) +;;;;;; "time" "time.el" (20352 65510)) ;;; Generated autoloads from time.el (defvar display-time-day-and-date nil "\ @@ -29102,7 +29107,7 @@ Return a string giving the duration of the Emacs initialization. ;;;;;; time-to-day-in-year date-leap-year-p days-between date-to-day ;;;;;; time-add time-subtract time-since days-to-time time-less-p ;;;;;; seconds-to-time date-to-time) "time-date" "calendar/time-date.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from calendar/time-date.el (autoload 'date-to-time "time-date" "\ @@ -29216,7 +29221,7 @@ This function does not work for SECONDS greater than `most-positive-fixnum'. ;;;*** ;;;### (autoloads (time-stamp-toggle-active time-stamp) "time-stamp" -;;;;;; "time-stamp.el" (20309 60936)) +;;;;;; "time-stamp.el" (20352 65510)) ;;; Generated autoloads from time-stamp.el (put 'time-stamp-format 'safe-local-variable 'stringp) (put 'time-stamp-time-zone 'safe-local-variable 'string-or-null-p) @@ -29260,7 +29265,7 @@ With ARG, turn time stamping on if and only if arg is positive. ;;;;;; timeclock-workday-remaining-string timeclock-reread-log timeclock-query-out ;;;;;; timeclock-change timeclock-status-string timeclock-out timeclock-in ;;;;;; timeclock-modeline-display) "timeclock" "calendar/timeclock.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from calendar/timeclock.el (autoload 'timeclock-modeline-display "timeclock" "\ @@ -29360,7 +29365,7 @@ relative only to the time worked today, and not to past time. ;;;*** ;;;### (autoloads (batch-titdic-convert titdic-convert) "titdic-cnv" -;;;;;; "international/titdic-cnv.el" (20309 60936)) +;;;;;; "international/titdic-cnv.el" (20352 65510)) ;;; Generated autoloads from international/titdic-cnv.el (autoload 'titdic-convert "titdic-cnv" "\ @@ -29383,7 +29388,7 @@ To get complete usage, invoke \"emacs -batch -f batch-titdic-convert -h\". ;;;*** ;;;### (autoloads (tmm-prompt tmm-menubar-mouse tmm-menubar) "tmm" -;;;;;; "tmm.el" (20309 60936)) +;;;;;; "tmm.el" (20352 65510)) ;;; Generated autoloads from tmm.el (define-key global-map "\M-`" 'tmm-menubar) (define-key global-map [menu-bar mouse-1] 'tmm-menubar-mouse) @@ -29423,7 +29428,7 @@ Its value should be an event that has a binding in MENU. ;;;### (autoloads (todo-show todo-cp todo-mode todo-print todo-top-priorities ;;;;;; todo-insert-item todo-add-item-non-interactively todo-add-category) -;;;;;; "todo-mode" "calendar/todo-mode.el" (20309 60936)) +;;;;;; "todo-mode" "calendar/todo-mode.el" (20352 65510)) ;;; Generated autoloads from calendar/todo-mode.el (autoload 'todo-add-category "todo-mode" "\ @@ -29483,7 +29488,7 @@ Show TODO list. ;;;### (autoloads (tool-bar-local-item-from-menu tool-bar-add-item-from-menu ;;;;;; tool-bar-local-item tool-bar-add-item toggle-tool-bar-mode-from-frame) -;;;;;; "tool-bar" "tool-bar.el" (20309 60936)) +;;;;;; "tool-bar" "tool-bar.el" (20352 65510)) ;;; Generated autoloads from tool-bar.el (autoload 'toggle-tool-bar-mode-from-frame "tool-bar" "\ @@ -29554,7 +29559,7 @@ holds a keymap. ;;;*** ;;;### (autoloads (tpu-edt-on tpu-edt-mode) "tpu-edt" "emulation/tpu-edt.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from emulation/tpu-edt.el (defvar tpu-edt-mode nil "\ @@ -29584,7 +29589,7 @@ Turn on TPU/edt emulation. ;;;*** ;;;### (autoloads (tpu-mapper) "tpu-mapper" "emulation/tpu-mapper.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from emulation/tpu-mapper.el (autoload 'tpu-mapper "tpu-mapper" "\ @@ -29618,7 +29623,7 @@ your local X guru can try to figure out why the key is being ignored. ;;;*** -;;;### (autoloads (tq-create) "tq" "emacs-lisp/tq.el" (20309 60936)) +;;;### (autoloads (tq-create) "tq" "emacs-lisp/tq.el" (20352 65510)) ;;; Generated autoloads from emacs-lisp/tq.el (autoload 'tq-create "tq" "\ @@ -29632,7 +29637,7 @@ to a tcp server on another machine. ;;;*** ;;;### (autoloads (trace-function-background trace-function trace-buffer) -;;;;;; "trace" "emacs-lisp/trace.el" (20309 60936)) +;;;;;; "trace" "emacs-lisp/trace.el" (20352 65510)) ;;; Generated autoloads from emacs-lisp/trace.el (defvar trace-buffer (purecopy "*trace-output*") "\ @@ -29669,7 +29674,7 @@ BUFFER defaults to `trace-buffer'. ;;;### (autoloads (tramp-unload-tramp tramp-completion-handle-file-name-completion ;;;;;; tramp-completion-handle-file-name-all-completions tramp-unload-file-name-handlers ;;;;;; tramp-file-name-handler tramp-syntax tramp-mode) "tramp" -;;;;;; "net/tramp.el" (20343 48993)) +;;;;;; "net/tramp.el" (20352 65510)) ;;; Generated autoloads from net/tramp.el (defvar tramp-mode t "\ @@ -29802,7 +29807,7 @@ Discard Tramp from loading remote files. ;;;*** ;;;### (autoloads (tramp-ftp-enable-ange-ftp) "tramp-ftp" "net/tramp-ftp.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from net/tramp-ftp.el (autoload 'tramp-ftp-enable-ange-ftp "tramp-ftp" "\ @@ -29812,8 +29817,8 @@ Discard Tramp from loading remote files. ;;;*** -;;;### (autoloads (help-with-tutorial) "tutorial" "tutorial.el" (20341 -;;;;;; 56798)) +;;;### (autoloads (help-with-tutorial) "tutorial" "tutorial.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from tutorial.el (autoload 'help-with-tutorial "tutorial" "\ @@ -29838,7 +29843,7 @@ resumed later. ;;;*** ;;;### (autoloads (tai-viet-composition-function) "tv-util" "language/tv-util.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from language/tv-util.el (autoload 'tai-viet-composition-function "tv-util" "\ @@ -29849,7 +29854,7 @@ resumed later. ;;;*** ;;;### (autoloads (2C-split 2C-associate-buffer 2C-two-columns) "two-column" -;;;;;; "textmodes/two-column.el" (20309 60936)) +;;;;;; "textmodes/two-column.el" (20352 65510)) ;;; Generated autoloads from textmodes/two-column.el (autoload '2C-command "two-column" () t 'keymap) (global-set-key "\C-x6" '2C-command) @@ -29900,7 +29905,7 @@ First column's text sSs Second column's text ;;;;;; type-break type-break-mode type-break-keystroke-threshold ;;;;;; type-break-good-break-interval type-break-good-rest-interval ;;;;;; type-break-interval type-break-mode) "type-break" "type-break.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from type-break.el (defvar type-break-mode nil "\ @@ -30082,7 +30087,7 @@ FRAC should be the inverse of the fractional value; for example, a value of ;;;*** -;;;### (autoloads (uce-reply-to-uce) "uce" "mail/uce.el" (20309 60936)) +;;;### (autoloads (uce-reply-to-uce) "uce" "mail/uce.el" (20352 65510)) ;;; Generated autoloads from mail/uce.el (autoload 'uce-reply-to-uce "uce" "\ @@ -30100,7 +30105,7 @@ You might need to set `uce-mail-reader' before using this. ;;;;;; ucs-normalize-NFKC-string ucs-normalize-NFKC-region ucs-normalize-NFKD-string ;;;;;; ucs-normalize-NFKD-region ucs-normalize-NFC-string ucs-normalize-NFC-region ;;;;;; ucs-normalize-NFD-string ucs-normalize-NFD-region) "ucs-normalize" -;;;;;; "international/ucs-normalize.el" (20309 60936)) +;;;;;; "international/ucs-normalize.el" (20352 65510)) ;;; Generated autoloads from international/ucs-normalize.el (autoload 'ucs-normalize-NFD-region "ucs-normalize" "\ @@ -30166,7 +30171,7 @@ Normalize the string STR by the Unicode NFC and Mac OS's HFS Plus. ;;;*** ;;;### (autoloads (ununderline-region underline-region) "underline" -;;;;;; "textmodes/underline.el" (20309 60936)) +;;;;;; "textmodes/underline.el" (20352 65510)) ;;; Generated autoloads from textmodes/underline.el (autoload 'underline-region "underline" "\ @@ -30187,7 +30192,7 @@ which specify the range to operate on. ;;;*** ;;;### (autoloads (unrmail batch-unrmail) "unrmail" "mail/unrmail.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from mail/unrmail.el (autoload 'batch-unrmail "unrmail" "\ @@ -30206,8 +30211,8 @@ Convert old-style Rmail Babyl file FILE to system inbox format file TO-FILE. ;;;*** -;;;### (autoloads (unsafep) "unsafep" "emacs-lisp/unsafep.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (unsafep) "unsafep" "emacs-lisp/unsafep.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from emacs-lisp/unsafep.el (autoload 'unsafep "unsafep" "\ @@ -30220,7 +30225,7 @@ UNSAFEP-VARS is a list of symbols with local bindings. ;;;*** ;;;### (autoloads (url-retrieve-synchronously url-retrieve) "url" -;;;;;; "url/url.el" (20309 60936)) +;;;;;; "url/url.el" (20352 65510)) ;;; Generated autoloads from url/url.el (autoload 'url-retrieve "url" "\ @@ -30264,7 +30269,7 @@ no further processing). URL is either a string or a parsed URL. ;;;*** ;;;### (autoloads (url-register-auth-scheme url-get-authentication) -;;;;;; "url-auth" "url/url-auth.el" (20309 60936)) +;;;;;; "url-auth" "url/url-auth.el" (20352 65510)) ;;; Generated autoloads from url/url-auth.el (autoload 'url-get-authentication "url-auth" "\ @@ -30306,7 +30311,7 @@ RATING a rating between 1 and 10 of the strength of the authentication. ;;;*** ;;;### (autoloads (url-cache-extract url-is-cached url-store-in-cache) -;;;;;; "url-cache" "url/url-cache.el" (20309 60936)) +;;;;;; "url-cache" "url/url-cache.el" (20352 65510)) ;;; Generated autoloads from url/url-cache.el (autoload 'url-store-in-cache "url-cache" "\ @@ -30327,7 +30332,7 @@ Extract FNAM from the local disk cache. ;;;*** -;;;### (autoloads (url-cid) "url-cid" "url/url-cid.el" (20309 60936)) +;;;### (autoloads (url-cid) "url-cid" "url/url-cid.el" (20352 65510)) ;;; Generated autoloads from url/url-cid.el (autoload 'url-cid "url-cid" "\ @@ -30338,7 +30343,7 @@ Extract FNAM from the local disk cache. ;;;*** ;;;### (autoloads (url-dav-vc-registered url-dav-supported-p) "url-dav" -;;;;;; "url/url-dav.el" (20309 60936)) +;;;;;; "url/url-dav.el" (20352 65510)) ;;; Generated autoloads from url/url-dav.el (autoload 'url-dav-supported-p "url-dav" "\ @@ -30353,8 +30358,8 @@ Extract FNAM from the local disk cache. ;;;*** -;;;### (autoloads (url-file) "url-file" "url/url-file.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (url-file) "url-file" "url/url-file.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from url/url-file.el (autoload 'url-file "url-file" "\ @@ -30365,7 +30370,7 @@ Handle file: and ftp: URLs. ;;;*** ;;;### (autoloads (url-open-stream url-gateway-nslookup-host) "url-gw" -;;;;;; "url/url-gw.el" (20309 60936)) +;;;;;; "url/url-gw.el" (20352 65510)) ;;; Generated autoloads from url/url-gw.el (autoload 'url-gateway-nslookup-host "url-gw" "\ @@ -30385,7 +30390,7 @@ Might do a non-blocking connection; use `process-status' to check. ;;;### (autoloads (url-insert-file-contents url-file-local-copy url-copy-file ;;;;;; url-file-handler url-handler-mode) "url-handlers" "url/url-handlers.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from url/url-handlers.el (defvar url-handler-mode nil "\ @@ -30440,7 +30445,7 @@ accessible. ;;;*** ;;;### (autoloads (url-http-options url-http-file-attributes url-http-file-exists-p -;;;;;; url-http) "url-http" "url/url-http.el" (20316 49235)) +;;;;;; url-http) "url-http" "url/url-http.el" (20352 65510)) ;;; Generated autoloads from url/url-http.el (autoload 'url-http "url-http" "\ @@ -30509,7 +30514,7 @@ HTTPS retrievals are asynchronous.") ;;;*** -;;;### (autoloads (url-irc) "url-irc" "url/url-irc.el" (20309 60936)) +;;;### (autoloads (url-irc) "url-irc" "url/url-irc.el" (20352 65510)) ;;; Generated autoloads from url/url-irc.el (autoload 'url-irc "url-irc" "\ @@ -30519,8 +30524,8 @@ HTTPS retrievals are asynchronous.") ;;;*** -;;;### (autoloads (url-ldap) "url-ldap" "url/url-ldap.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (url-ldap) "url-ldap" "url/url-ldap.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from url/url-ldap.el (autoload 'url-ldap "url-ldap" "\ @@ -30534,7 +30539,7 @@ URL can be a URL string, or a URL vector of the type returned by ;;;*** ;;;### (autoloads (url-mailto url-mail) "url-mailto" "url/url-mailto.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from url/url-mailto.el (autoload 'url-mail "url-mailto" "\ @@ -30550,7 +30555,7 @@ Handle the mailto: URL syntax. ;;;*** ;;;### (autoloads (url-data url-generic-emulator-loader url-info -;;;;;; url-man) "url-misc" "url/url-misc.el" (20309 60936)) +;;;;;; url-man) "url-misc" "url/url-misc.el" (20352 65510)) ;;; Generated autoloads from url/url-misc.el (autoload 'url-man "url-misc" "\ @@ -30582,7 +30587,7 @@ Fetch a data URL (RFC 2397). ;;;*** ;;;### (autoloads (url-snews url-news) "url-news" "url/url-news.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from url/url-news.el (autoload 'url-news "url-news" "\ @@ -30599,7 +30604,7 @@ Fetch a data URL (RFC 2397). ;;;### (autoloads (url-ns-user-pref url-ns-prefs isInNet isResolvable ;;;;;; dnsResolve dnsDomainIs isPlainHostName) "url-ns" "url/url-ns.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from url/url-ns.el (autoload 'isPlainHostName "url-ns" "\ @@ -30640,7 +30645,7 @@ Fetch a data URL (RFC 2397). ;;;*** ;;;### (autoloads (url-generic-parse-url url-recreate-url) "url-parse" -;;;;;; "url/url-parse.el" (20309 60936)) +;;;;;; "url/url-parse.el" (20352 65510)) ;;; Generated autoloads from url/url-parse.el (autoload 'url-recreate-url "url-parse" "\ @@ -30658,7 +30663,7 @@ TYPE USER PASSWORD HOST PORTSPEC FILENAME TARGET ATTRIBUTES FULLNESS. ;;;*** ;;;### (autoloads (url-setup-privacy-info) "url-privacy" "url/url-privacy.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from url/url-privacy.el (autoload 'url-setup-privacy-info "url-privacy" "\ @@ -30669,7 +30674,7 @@ Setup variables that expose info about you and your system. ;;;*** ;;;### (autoloads (url-queue-retrieve) "url-queue" "url/url-queue.el" -;;;;;; (20335 9743)) +;;;;;; (20352 65510)) ;;; Generated autoloads from url/url-queue.el (autoload 'url-queue-retrieve "url-queue" "\ @@ -30689,7 +30694,7 @@ The variable `url-queue-timeout' sets a timeout. ;;;;;; url-pretty-length url-strip-leading-spaces url-eat-trailing-space ;;;;;; url-get-normalized-date url-lazy-message url-normalize-url ;;;;;; url-insert-entities-in-string url-parse-args url-debug url-debug) -;;;;;; "url-util" "url/url-util.el" (20309 60936)) +;;;;;; "url-util" "url/url-util.el" (20352 65510)) ;;; Generated autoloads from url/url-util.el (defvar url-debug nil "\ @@ -30825,7 +30830,7 @@ This uses `url-current-object', set locally to the buffer. ;;;*** ;;;### (autoloads (ask-user-about-supersession-threat ask-user-about-lock) -;;;;;; "userlock" "userlock.el" (20309 60936)) +;;;;;; "userlock" "userlock.el" (20352 65510)) ;;; Generated autoloads from userlock.el (autoload 'ask-user-about-lock "userlock" "\ @@ -30855,7 +30860,7 @@ The buffer in question is current when this function is called. ;;;### (autoloads (utf-7-imap-pre-write-conversion utf-7-pre-write-conversion ;;;;;; utf-7-imap-post-read-conversion utf-7-post-read-conversion) -;;;;;; "utf-7" "international/utf-7.el" (20309 60936)) +;;;;;; "utf-7" "international/utf-7.el" (20352 65510)) ;;; Generated autoloads from international/utf-7.el (autoload 'utf-7-post-read-conversion "utf-7" "\ @@ -30880,7 +30885,7 @@ The buffer in question is current when this function is called. ;;;*** -;;;### (autoloads (utf7-encode) "utf7" "gnus/utf7.el" (20309 60936)) +;;;### (autoloads (utf7-encode) "utf7" "gnus/utf7.el" (20352 65510)) ;;; Generated autoloads from gnus/utf7.el (autoload 'utf7-encode "utf7" "\ @@ -30892,7 +30897,7 @@ Encode UTF-7 STRING. Use IMAP modification if FOR-IMAP is non-nil. ;;;### (autoloads (uudecode-decode-region uudecode-decode-region-internal ;;;;;; uudecode-decode-region-external) "uudecode" "mail/uudecode.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from mail/uudecode.el (autoload 'uudecode-decode-region-external "uudecode" "\ @@ -30922,8 +30927,8 @@ If FILE-NAME is non-nil, save the result to FILE-NAME. ;;;;;; vc-print-log vc-retrieve-tag vc-create-tag vc-merge vc-insert-headers ;;;;;; vc-revision-other-window vc-root-diff vc-ediff vc-version-ediff ;;;;;; vc-diff vc-version-diff vc-register vc-next-action vc-before-checkin-hook -;;;;;; vc-checkin-hook vc-checkout-hook) "vc" "vc/vc.el" (20333 -;;;;;; 51787)) +;;;;;; vc-checkin-hook vc-checkout-hook) "vc" "vc/vc.el" (20375 +;;;;;; 44124)) ;;; Generated autoloads from vc/vc.el (defvar vc-checkout-hook nil "\ @@ -31201,7 +31206,7 @@ Return the branch part of a revision number REV. ;;;*** ;;;### (autoloads (vc-annotate) "vc-annotate" "vc/vc-annotate.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from vc/vc-annotate.el (autoload 'vc-annotate "vc-annotate" "\ @@ -31238,7 +31243,7 @@ mode-specific menu. `vc-annotate-color-map' and ;;;*** -;;;### (autoloads nil "vc-arch" "vc/vc-arch.el" (20309 60936)) +;;;### (autoloads nil "vc-arch" "vc/vc-arch.el" (20352 65510)) ;;; Generated autoloads from vc/vc-arch.el (defun vc-arch-registered (file) (if (vc-find-root file "{arch}/=tagging-method") @@ -31248,7 +31253,7 @@ mode-specific menu. `vc-annotate-color-map' and ;;;*** -;;;### (autoloads nil "vc-bzr" "vc/vc-bzr.el" (20332 33075)) +;;;### (autoloads nil "vc-bzr" "vc/vc-bzr.el" (20352 65510)) ;;; Generated autoloads from vc/vc-bzr.el (defconst vc-bzr-admin-dirname ".bzr" "\ @@ -31264,7 +31269,7 @@ Name of the format file in a .bzr directory.") ;;;*** -;;;### (autoloads nil "vc-cvs" "vc/vc-cvs.el" (20309 60936)) +;;;### (autoloads nil "vc-cvs" "vc/vc-cvs.el" (20352 65510)) ;;; Generated autoloads from vc/vc-cvs.el (defun vc-cvs-registered (f) "Return non-nil if file F is registered with CVS." @@ -31275,7 +31280,7 @@ Name of the format file in a .bzr directory.") ;;;*** -;;;### (autoloads (vc-dir) "vc-dir" "vc/vc-dir.el" (20309 60936)) +;;;### (autoloads (vc-dir) "vc-dir" "vc/vc-dir.el" (20352 65510)) ;;; Generated autoloads from vc/vc-dir.el (autoload 'vc-dir "vc-dir" "\ @@ -31300,7 +31305,7 @@ These are the commands available for use in the file status buffer: ;;;*** ;;;### (autoloads (vc-do-command) "vc-dispatcher" "vc/vc-dispatcher.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from vc/vc-dispatcher.el (autoload 'vc-do-command "vc-dispatcher" "\ @@ -31323,7 +31328,7 @@ case, and the process object in the asynchronous case. ;;;*** -;;;### (autoloads nil "vc-git" "vc/vc-git.el" (20341 24416)) +;;;### (autoloads nil "vc-git" "vc/vc-git.el" (20377 65403)) ;;; Generated autoloads from vc/vc-git.el (defun vc-git-registered (file) "Return non-nil if FILE is registered with git." @@ -31334,7 +31339,7 @@ case, and the process object in the asynchronous case. ;;;*** -;;;### (autoloads nil "vc-hg" "vc/vc-hg.el" (20320 14810)) +;;;### (autoloads nil "vc-hg" "vc/vc-hg.el" (20352 65510)) ;;; Generated autoloads from vc/vc-hg.el (defun vc-hg-registered (file) "Return non-nil if FILE is registered with hg." @@ -31345,7 +31350,7 @@ case, and the process object in the asynchronous case. ;;;*** -;;;### (autoloads nil "vc-mtn" "vc/vc-mtn.el" (20309 60936)) +;;;### (autoloads nil "vc-mtn" "vc/vc-mtn.el" (20352 65510)) ;;; Generated autoloads from vc/vc-mtn.el (defconst vc-mtn-admin-dir "_MTN" "\ @@ -31362,7 +31367,7 @@ Name of the monotone directory's format file.") ;;;*** ;;;### (autoloads (vc-rcs-master-templates) "vc-rcs" "vc/vc-rcs.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from vc/vc-rcs.el (defvar vc-rcs-master-templates (purecopy '("%sRCS/%s,v" "%s%s,v" "%sRCS/%s")) "\ @@ -31376,7 +31381,7 @@ For a description of possible values, see `vc-check-master-templates'.") ;;;*** ;;;### (autoloads (vc-sccs-master-templates) "vc-sccs" "vc/vc-sccs.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from vc/vc-sccs.el (defvar vc-sccs-master-templates (purecopy '("%sSCCS/s.%s" "%ss.%s" vc-sccs-search-project-dir)) "\ @@ -31393,7 +31398,7 @@ find any project directory." (let ((project-dir (getenv "PROJECTDIR")) dirs dir) ;;;*** -;;;### (autoloads nil "vc-svn" "vc/vc-svn.el" (20309 60936)) +;;;### (autoloads nil "vc-svn" "vc/vc-svn.el" (20352 65510)) ;;; Generated autoloads from vc/vc-svn.el (defun vc-svn-registered (f) (let ((admin-dir (cond ((and (eq system-type 'windows-nt) @@ -31407,7 +31412,7 @@ find any project directory." (let ((project-dir (getenv "PROJECTDIR")) dirs dir) ;;;*** ;;;### (autoloads (vera-mode) "vera-mode" "progmodes/vera-mode.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from progmodes/vera-mode.el (add-to-list 'auto-mode-alist (cons (purecopy "\\.vr[hi]?\\'") 'vera-mode)) @@ -31465,7 +31470,7 @@ Key bindings: ;;;*** ;;;### (autoloads (verilog-mode) "verilog-mode" "progmodes/verilog-mode.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from progmodes/verilog-mode.el (autoload 'verilog-mode "verilog-mode" "\ @@ -31604,7 +31609,7 @@ Key bindings specific to `verilog-mode-map' are: ;;;*** ;;;### (autoloads (vhdl-mode) "vhdl-mode" "progmodes/vhdl-mode.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from progmodes/vhdl-mode.el (autoload 'vhdl-mode "vhdl-mode" "\ @@ -32145,7 +32150,7 @@ Key bindings: ;;;*** -;;;### (autoloads (vi-mode) "vi" "emulation/vi.el" (20309 60936)) +;;;### (autoloads (vi-mode) "vi" "emulation/vi.el" (20352 65510)) ;;; Generated autoloads from emulation/vi.el (autoload 'vi-mode "vi" "\ @@ -32200,7 +32205,7 @@ Syntax table and abbrevs while in vi mode remain as they were in Emacs. ;;;### (autoloads (viqr-pre-write-conversion viqr-post-read-conversion ;;;;;; viet-encode-viqr-buffer viet-encode-viqr-region viet-decode-viqr-buffer ;;;;;; viet-decode-viqr-region viet-encode-viscii-char) "viet-util" -;;;;;; "language/viet-util.el" (20309 60936)) +;;;;;; "language/viet-util.el" (20352 65510)) ;;; Generated autoloads from language/viet-util.el (autoload 'viet-encode-viscii-char "viet-util" "\ @@ -32248,7 +32253,7 @@ Convert Vietnamese characters of the current buffer to `VIQR' mnemonics. ;;;;;; view-mode view-buffer-other-frame view-buffer-other-window ;;;;;; view-buffer view-file-other-frame view-file-other-window ;;;;;; view-file kill-buffer-if-not-modified view-remove-frame-by-deleting) -;;;;;; "view" "view.el" (20324 28875)) +;;;;;; "view" "view.el" (20352 65510)) ;;; Generated autoloads from view.el (defvar view-remove-frame-by-deleting t "\ @@ -32502,8 +32507,8 @@ Exit View mode and make the current buffer editable. ;;;*** -;;;### (autoloads (vip-mode vip-setup) "vip" "emulation/vip.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (vip-mode vip-setup) "vip" "emulation/vip.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from emulation/vip.el (autoload 'vip-setup "vip" "\ @@ -32519,7 +32524,7 @@ Turn on VIP emulation of VI. ;;;*** ;;;### (autoloads (viper-mode toggle-viper-mode) "viper" "emulation/viper.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from emulation/viper.el (autoload 'toggle-viper-mode "viper" "\ @@ -32536,7 +32541,7 @@ Turn on Viper emulation of Vi in Emacs. See Info node `(viper)Top'. ;;;*** ;;;### (autoloads (warn lwarn display-warning) "warnings" "emacs-lisp/warnings.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from emacs-lisp/warnings.el (defvar warning-prefix-function nil "\ @@ -32626,7 +32631,7 @@ this is equivalent to `display-warning', using ;;;*** ;;;### (autoloads (wdired-change-to-wdired-mode) "wdired" "wdired.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from wdired.el (autoload 'wdired-change-to-wdired-mode "wdired" "\ @@ -32642,7 +32647,7 @@ See `wdired-mode'. ;;;*** -;;;### (autoloads (webjump) "webjump" "net/webjump.el" (20309 60936)) +;;;### (autoloads (webjump) "webjump" "net/webjump.el" (20352 65510)) ;;; Generated autoloads from net/webjump.el (autoload 'webjump "webjump" "\ @@ -32659,7 +32664,7 @@ Please submit bug reports and other feedback to the author, Neil W. Van Dyke ;;;*** ;;;### (autoloads (which-function-mode which-func-mode) "which-func" -;;;;;; "progmodes/which-func.el" (20309 60936)) +;;;;;; "progmodes/which-func.el" (20371 45292)) ;;; Generated autoloads from progmodes/which-func.el (put 'which-func-format 'risky-local-variable t) (put 'which-func-current 'risky-local-variable t) @@ -32695,7 +32700,7 @@ in certain major modes. ;;;### (autoloads (whitespace-report-region whitespace-report whitespace-cleanup-region ;;;;;; whitespace-cleanup global-whitespace-toggle-options whitespace-toggle-options ;;;;;; global-whitespace-newline-mode global-whitespace-mode whitespace-newline-mode -;;;;;; whitespace-mode) "whitespace" "whitespace.el" (20309 60936)) +;;;;;; whitespace-mode) "whitespace" "whitespace.el" (20352 65510)) ;;; Generated autoloads from whitespace.el (autoload 'whitespace-mode "whitespace" "\ @@ -33094,7 +33099,7 @@ cleaning up these problems. ;;;*** ;;;### (autoloads (widget-minor-mode widget-browse-other-window widget-browse -;;;;;; widget-browse-at) "wid-browse" "wid-browse.el" (20309 60936)) +;;;;;; widget-browse-at) "wid-browse" "wid-browse.el" (20352 65510)) ;;; Generated autoloads from wid-browse.el (autoload 'widget-browse-at "wid-browse" "\ @@ -33123,8 +33128,8 @@ if ARG is omitted or nil. ;;;*** ;;;### (autoloads (widget-setup widget-insert widget-delete widget-create -;;;;;; widget-prompt-value widgetp) "wid-edit" "wid-edit.el" (20329 -;;;;;; 31524)) +;;;;;; widget-prompt-value widgetp) "wid-edit" "wid-edit.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from wid-edit.el (autoload 'widgetp "wid-edit" "\ @@ -33167,8 +33172,8 @@ Setup current buffer so editing string widgets works. ;;;*** ;;;### (autoloads (windmove-default-keybindings windmove-down windmove-right -;;;;;; windmove-up windmove-left) "windmove" "windmove.el" (20309 -;;;;;; 60936)) +;;;;;; windmove-up windmove-left) "windmove" "windmove.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from windmove.el (autoload 'windmove-left "windmove" "\ @@ -33221,7 +33226,7 @@ Default MODIFIER is 'shift. ;;;*** ;;;### (autoloads (winner-mode winner-mode) "winner" "winner.el" -;;;;;; (20309 60936)) +;;;;;; (20352 65510)) ;;; Generated autoloads from winner.el (defvar winner-mode nil "\ @@ -33240,7 +33245,7 @@ With arg, turn Winner mode on if and only if arg is positive. ;;;*** ;;;### (autoloads (woman-bookmark-jump woman-find-file woman-dired-find-file -;;;;;; woman woman-locale) "woman" "woman.el" (20309 60936)) +;;;;;; woman woman-locale) "woman" "woman.el" (20352 65510)) ;;; Generated autoloads from woman.el (defvar woman-locale nil "\ @@ -33289,7 +33294,7 @@ Default bookmark handler for Woman buffers. ;;;*** ;;;### (autoloads (wordstar-mode) "ws-mode" "emulation/ws-mode.el" -;;;;;; (20320 14810)) +;;;;;; (20352 65510)) ;;; Generated autoloads from emulation/ws-mode.el (autoload 'wordstar-mode "ws-mode" "\ @@ -33401,7 +33406,7 @@ The key bindings are: ;;;*** -;;;### (autoloads (xesam-search) "xesam" "net/xesam.el" (20309 60936)) +;;;### (autoloads (xesam-search) "xesam" "net/xesam.el" (20352 65510)) ;;; Generated autoloads from net/xesam.el (autoload 'xesam-search "xesam" "\ @@ -33421,7 +33426,7 @@ Example: ;;;*** ;;;### (autoloads (xml-parse-region xml-parse-file) "xml" "xml.el" -;;;;;; (20309 60936)) +;;;;;; (20370 33496)) ;;; Generated autoloads from xml.el (autoload 'xml-parse-file "xml" "\ @@ -33447,7 +33452,7 @@ If PARSE-NS is non-nil, then QNAMES are expanded. ;;;*** ;;;### (autoloads (xmltok-get-declared-encoding-position) "xmltok" -;;;;;; "nxml/xmltok.el" (20309 60936)) +;;;;;; "nxml/xmltok.el" (20352 65510)) ;;; Generated autoloads from nxml/xmltok.el (autoload 'xmltok-get-declared-encoding-position "xmltok" "\ @@ -33465,8 +33470,8 @@ If LIMIT is non-nil, then do not consider characters beyond LIMIT. ;;;*** -;;;### (autoloads (xterm-mouse-mode) "xt-mouse" "xt-mouse.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (xterm-mouse-mode) "xt-mouse" "xt-mouse.el" (20352 +;;;;;; 65510)) ;;; Generated autoloads from xt-mouse.el (defvar xterm-mouse-mode nil "\ @@ -33496,7 +33501,7 @@ down the SHIFT key while pressing the mouse button. ;;;*** ;;;### (autoloads (yenc-extract-filename yenc-decode-region) "yenc" -;;;;;; "gnus/yenc.el" (20309 60936)) +;;;;;; "gnus/yenc.el" (20352 65510)) ;;; Generated autoloads from gnus/yenc.el (autoload 'yenc-decode-region "yenc" "\ @@ -33512,7 +33517,7 @@ Extract file name from an yenc header. ;;;*** ;;;### (autoloads (psychoanalyze-pinhead apropos-zippy insert-zippyism -;;;;;; yow) "yow" "play/yow.el" (20309 60936)) +;;;;;; yow) "yow" "play/yow.el" (20352 65510)) ;;; Generated autoloads from play/yow.el (autoload 'yow "yow" "\ @@ -33538,7 +33543,7 @@ Zippy goes to the analyst. ;;;*** -;;;### (autoloads (zone) "zone" "play/zone.el" (20309 60936)) +;;;### (autoloads (zone) "zone" "play/zone.el" (20352 65510)) ;;; Generated autoloads from play/zone.el (autoload 'zone "zone" "\ @@ -33749,7 +33754,7 @@ Zone out, completely. ;;;;;; "vc/ediff-ptch.el" "vc/ediff-vers.el" "vc/ediff-wind.el" ;;;;;; "vc/pcvs-info.el" "vc/pcvs-parse.el" "vc/pcvs-util.el" "vc/vc-dav.el" ;;;;;; "vcursor.el" "vt-control.el" "vt100-led.el" "w32-fns.el" -;;;;;; "w32-vars.el" "x-dnd.el") (20345 10919 58375)) +;;;;;; "w32-vars.el" "x-dnd.el") (20378 51005 591713)) ;;;*** diff --git a/msdos/sed2v2.inp b/msdos/sed2v2.inp index b96b1000c49..e41e8f8a371 100644 --- a/msdos/sed2v2.inp +++ b/msdos/sed2v2.inp @@ -59,7 +59,7 @@ /^#undef PACKAGE_STRING/s/^.*$/#define PACKAGE_STRING ""/ /^#undef PACKAGE_TARNAME/s/^.*$/#define PACKAGE_TARNAME ""/ /^#undef PACKAGE_VERSION/s/^.*$/#define PACKAGE_VERSION ""/ -/^#undef VERSION/s/^.*$/#define VERSION "24.0.95"/ +/^#undef VERSION/s/^.*$/#define VERSION "24.0.96"/ /^#undef HAVE_DECL_GETENV/s/^.*$/#define HAVE_DECL_GETENV 1/ /^#undef SYS_SIGLIST_DECLARED/s/^.*$/#define SYS_SIGLIST_DECLARED 1/ /^#undef HAVE_DIRENT_H/s/^.*$/#define HAVE_DIRENT_H 1/ diff --git a/nextstep/Cocoa/Emacs.base/Contents/Info.plist b/nextstep/Cocoa/Emacs.base/Contents/Info.plist index 8fa9d4a125b..2e66f8a0f8c 100644 --- a/nextstep/Cocoa/Emacs.base/Contents/Info.plist +++ b/nextstep/Cocoa/Emacs.base/Contents/Info.plist @@ -553,7 +553,7 @@ along with GNU Emacs. If not, see . CFBundleExecutable Emacs CFBundleGetInfoString - Emacs 24.0.95 Copyright (C) 2012 Free Software Foundation, Inc. + Emacs 24.0.96 Copyright (C) 2012 Free Software Foundation, Inc. CFBundleIconFile Emacs.icns CFBundleIdentifier @@ -566,7 +566,7 @@ along with GNU Emacs. If not, see . APPL CFBundleShortVersionString - 24.0.95 + 24.0.96 CFBundleSignature EMAx diff --git a/nextstep/Cocoa/Emacs.base/Contents/Resources/English.lproj/InfoPlist.strings b/nextstep/Cocoa/Emacs.base/Contents/Resources/English.lproj/InfoPlist.strings index 4be577ecc14..f1ca770b1df 100644 --- a/nextstep/Cocoa/Emacs.base/Contents/Resources/English.lproj/InfoPlist.strings +++ b/nextstep/Cocoa/Emacs.base/Contents/Resources/English.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ /* Localized versions of Info.plist keys */ CFBundleName = "Emacs"; -CFBundleShortVersionString = "Version 24.0.95"; -CFBundleGetInfoString = "Emacs version 24.0.95, NS Windowing"; +CFBundleShortVersionString = "Version 24.0.96"; +CFBundleGetInfoString = "Emacs version 24.0.96, NS Windowing"; NSHumanReadableCopyright = "Copyright (C) 2012 Free Software Foundation, Inc."; diff --git a/nextstep/GNUstep/Emacs.base/Resources/Emacs.desktop b/nextstep/GNUstep/Emacs.base/Resources/Emacs.desktop index add1a608a5e..0e69c5bb045 100644 --- a/nextstep/GNUstep/Emacs.base/Resources/Emacs.desktop +++ b/nextstep/GNUstep/Emacs.base/Resources/Emacs.desktop @@ -1,7 +1,7 @@ [Desktop Entry] Encoding=UTF-8 Type=Application -Version=24.0.95 +Version=24.0.96 Categories=GNUstep Name=Emacs Comment=GNU Emacs for NeXT/Open/GNUstep and OS X diff --git a/nextstep/GNUstep/Emacs.base/Resources/Info-gnustep.plist b/nextstep/GNUstep/Emacs.base/Resources/Info-gnustep.plist index 86e3897421c..14d7a79c59a 100644 --- a/nextstep/GNUstep/Emacs.base/Resources/Info-gnustep.plist +++ b/nextstep/GNUstep/Emacs.base/Resources/Info-gnustep.plist @@ -2,7 +2,7 @@ ApplicationDescription = "GNU Emacs for GNUstep / OS X"; ApplicationIcon = emacs.tiff; ApplicationName = Emacs; - ApplicationRelease = "24.0.95"; + ApplicationRelease = "24.0.96"; Authors = ( "Adrian Robert (GNUstep)", "Christophe de Dinechin (MacOS X)", @@ -13,7 +13,7 @@ ); Copyright = "Copyright (C) 2012 Free Software Foundation, Inc."; CopyrightDescription = "Released under the GNU General Public License Version 3 or later"; - FullVersionID = "Emacs 24.0.95, NS Windowing"; + FullVersionID = "Emacs 24.0.96, NS Windowing"; NSExecutable = Emacs; NSIcon = emacs.tiff; NSPrincipalClass = NSApplication; diff --git a/nt/config.nt b/nt/config.nt index 2e8215b3488..9180033b3a1 100644 --- a/nt/config.nt +++ b/nt/config.nt @@ -331,7 +331,7 @@ along with GNU Emacs. If not, see . */ #define PACKAGE "emacs" /* Version number of package */ -#define VERSION "24.0.95" +#define VERSION "24.0.96" /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ diff --git a/nt/emacs.rc b/nt/emacs.rc index a5fd0e3163b..baa8f68d698 100644 --- a/nt/emacs.rc +++ b/nt/emacs.rc @@ -7,8 +7,8 @@ Emacs ICON icons\emacs.ico #endif VS_VERSION_INFO VERSIONINFO - FILEVERSION 24,0,95,0 - PRODUCTVERSION 24,0,95,0 + FILEVERSION 24,0,96,0 + PRODUCTVERSION 24,0,96,0 FILEFLAGSMASK 0x3FL #ifdef EMACSDEBUG FILEFLAGS 0x1L @@ -25,12 +25,12 @@ BEGIN BEGIN VALUE "CompanyName", "Free Software Foundation\0" VALUE "FileDescription", "GNU Emacs: The extensible self-documenting text editor\0" - VALUE "FileVersion", "24, 0, 95, 0\0" + VALUE "FileVersion", "24, 0, 96, 0\0" VALUE "InternalName", "Emacs\0" VALUE "LegalCopyright", "Copyright (C) 2001-2012\0" VALUE "OriginalFilename", "emacs.exe" VALUE "ProductName", "Emacs\0" - VALUE "ProductVersion", "24, 0, 95, 0\0" + VALUE "ProductVersion", "24, 0, 96, 0\0" VALUE "OLESelfRegister", "\0" END END diff --git a/nt/emacsclient.rc b/nt/emacsclient.rc index f0543ea1a6e..4a6bfd15e55 100644 --- a/nt/emacsclient.rc +++ b/nt/emacsclient.rc @@ -5,8 +5,8 @@ Emacs ICON icons\emacs.ico #endif VS_VERSION_INFO VERSIONINFO - FILEVERSION 24,0,95,0 - PRODUCTVERSION 24,0,95,0 + FILEVERSION 24,0,96,0 + PRODUCTVERSION 24,0,96,0 FILEFLAGSMASK 0x3FL #ifdef EMACSDEBUG FILEFLAGS 0x1L @@ -23,12 +23,12 @@ BEGIN BEGIN VALUE "CompanyName", "Free Software Foundation\0" VALUE "FileDescription", "GNU EmacsClient: Client for the extensible self-documenting text editor\0" - VALUE "FileVersion", "24, 0, 95, 0\0" + VALUE "FileVersion", "24, 0, 96, 0\0" VALUE "InternalName", "EmacsClient\0" VALUE "LegalCopyright", "Copyright (C) 2001-2012\0" VALUE "OriginalFilename", "emacsclientw.exe" VALUE "ProductName", "EmacsClient\0" - VALUE "ProductVersion", "24, 0, 95, 0\0" + VALUE "ProductVersion", "24, 0, 96, 0\0" VALUE "OLESelfRegister", "\0" END END diff --git a/nt/makefile.w32-in b/nt/makefile.w32-in index 5bd7fec0cc0..121b2804af8 100644 --- a/nt/makefile.w32-in +++ b/nt/makefile.w32-in @@ -22,7 +22,7 @@ # FIXME: This file uses DOS EOLs. Convert to Unix after 22.1 is out # (and remove or replace this comment). -VERSION = 24.0.95 +VERSION = 24.0.96 TMP_DIST_DIR = emacs-$(VERSION) From 09affde083d7f76535e95395745cf24e4116f6cf Mon Sep 17 00:00:00 2001 From: Alan Mackenzie Date: Fri, 27 Apr 2012 17:49:31 +0000 Subject: [PATCH 225/564] Update CC Mode version to 5.32.3. --- lisp/ChangeLog | 4 ++++ lisp/progmodes/cc-defs.el | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index baa8045ccc3..3b16a4c575a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-04-27 Alan Mackenzie + + * progmodes/cc-defs.el (c-version): Update to 5.32.3. + 2012-04-27 Chong Yidong * subr.el (read-key): Avoid running filter function when setting diff --git a/lisp/progmodes/cc-defs.el b/lisp/progmodes/cc-defs.el index 93a72796561..5d758b53b56 100644 --- a/lisp/progmodes/cc-defs.el +++ b/lisp/progmodes/cc-defs.el @@ -93,7 +93,7 @@ ;;; Variables also used at compile time. -(defconst c-version "5.32.2" +(defconst c-version "5.32.3" "CC Mode version number.") (defconst c-version-sym (intern c-version)) From 9eb25ee858d889a0fb45b4b10fbacb6002aae7ee Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 28 Apr 2012 00:45:03 -0700 Subject: [PATCH 226/564] Reword some doc/emacs to remove/reduce some overly long/short lines. * xresources.texi (Resources): * mule.texi (Language Environments): * misc.texi (Amusements): * maintaining.texi (VC Change Log): * frames.texi (Fonts): * custom.texi (Specifying File Variables, Minibuffer Maps): * cmdargs.texi (Initial Options): * building.texi (Flymake): Reword to remove/reduce some overly long/short lines. --- doc/emacs/ChangeLog | 12 ++++++++++++ doc/emacs/building.texi | 10 +++++----- doc/emacs/cmdargs.texi | 2 +- doc/emacs/custom.texi | 8 ++++---- doc/emacs/frames.texi | 4 ++-- doc/emacs/maintaining.texi | 2 +- doc/emacs/misc.texi | 4 ++-- doc/emacs/mule.texi | 2 +- doc/emacs/xresources.texi | 2 +- 9 files changed, 29 insertions(+), 17 deletions(-) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index 32a5e43b41b..91f50958920 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,3 +1,15 @@ +2012-04-28 Glenn Morris + + * xresources.texi (Resources): + * mule.texi (Language Environments): + * misc.texi (Amusements): + * maintaining.texi (VC Change Log): + * frames.texi (Fonts): + * custom.texi (Specifying File Variables, Minibuffer Maps): + * cmdargs.texi (Initial Options): + * building.texi (Flymake): + Reword to remove/reduce some overly long/short lines. + 2012-04-27 Glenn Morris * emacs.texi: Some fixes for detailed menu. diff --git a/doc/emacs/building.texi b/doc/emacs/building.texi index 4b92376b8a9..999afa7df2c 100644 --- a/doc/emacs/building.texi +++ b/doc/emacs/building.texi @@ -426,11 +426,11 @@ syntax checking tool used depends on the language; for example, for C/C++ files this is usually the C compiler. Flymake can also use build tools such as @code{make} for checking complicated projects. - To enable Flymake mode, type @kbd{M-x flymake-mode}. You can go to -the errors found by Flymake mode with @kbd{M-x -flymake-goto-next-error} and @kbd{M-x flymake-goto-prev-error}. To -display any error messages associated with the current line, use -@kbd{M-x flymake-display-err-menu-for-current-line}. + To enable Flymake mode, type @kbd{M-x flymake-mode}. You can jump to +the errors that it finds by using @kbd{M-x +flymake-goto-next-error} and @kbd{M-x flymake-goto-prev-error}. +Use the command @kbd{M-x flymake-display-err-menu-for-current-line} +to display any error messages associated with the current line. For more details about using Flymake, @ifnottex diff --git a/doc/emacs/cmdargs.texi b/doc/emacs/cmdargs.texi index 222aa0f8434..c387b99915f 100644 --- a/doc/emacs/cmdargs.texi +++ b/doc/emacs/cmdargs.texi @@ -308,7 +308,7 @@ in your initialization file (@pxref{Entering Emacs}). @opindex -Q @itemx --quick @opindex --quick -Start emacs with minimum customizations, similar to using @samp{-q}, +Start emacs with minimum customizations. This is similar to using @samp{-q}, @samp{--no-site-file}, @samp{--no-site-lisp}, and @samp{--no-splash} together. This also stops Emacs from processing X resources by setting @code{inhibit-x-resources} to @code{t} (@pxref{Resources}). diff --git a/doc/emacs/custom.texi b/doc/emacs/custom.texi index cfd45de6aca..bf2602f8f08 100644 --- a/doc/emacs/custom.texi +++ b/doc/emacs/custom.texi @@ -1054,8 +1054,8 @@ pair with a colon and semicolon. The special variable/value pair @findex add-file-local-variable-prop-line @findex delete-file-local-variable-prop-line @findex copy-dir-locals-to-file-locals-prop-line - Instead of adding variable/value pairs by hand, you can use the -command @kbd{M-x add-file-local-variable-prop-line}. This prompts for + You can use the command @kbd{M-x add-file-local-variable-prop-line} +instead of adding entries by hand. It prompts for a variable and value, and adds them to the first line in the appropriate way. @kbd{M-x delete-file-local-variable-prop-line} prompts for a variable, and deletes its entry from the line. @kbd{M-x @@ -1522,7 +1522,7 @@ circumstances. @vindex minibuffer-local-completion-map @vindex minibuffer-local-must-match-map @vindex minibuffer-local-filename-completion-map -@vindex minibuffer-local-must-match-filename-map +@vindex minibuffer-local-filename-must-match-map The minibuffer has its own set of local keymaps; they contain various completion and exit commands. @@ -1539,7 +1539,7 @@ just like @key{RET}. for cautious completion. @item @code{minibuffer-local-filename-completion-map} and -@code{minibuffer-local-must-match-filename-map} are like the two +@code{minibuffer-local-filename-must-match-map} are like the two previous ones, but they are specifically for file name completion. They do not bind @key{SPC}. @end itemize diff --git a/doc/emacs/frames.texi b/doc/emacs/frames.texi index 9e9909e8bca..7b912ec9722 100644 --- a/doc/emacs/frames.texi +++ b/doc/emacs/frames.texi @@ -666,8 +666,8 @@ The font slant---normally @samp{r} (roman), @samp{i} (italic), Some font names support other values. @item widthtype The font width---normally @samp{normal}, @samp{condensed}, -@samp{extended}, or @samp{semicondensed} (some font names support -other values). +@samp{semicondensed}, or @samp{extended}. Some font names support +other values. @item style An optional additional style name. Usually it is empty---most XLFDs have two hyphens in a row at this point. diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi index 9d56b3bdc6e..72583f25c8b 100644 --- a/doc/emacs/maintaining.texi +++ b/doc/emacs/maintaining.texi @@ -893,7 +893,7 @@ Display the change history for the current repository (@code{vc-print-root-log}). @item C-x v I -Display the changes that will be received with a pull operation +Display the changes that a pull operation will retrieve (@code{vc-log-incoming}). @item C-x v O diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi index b91763116b8..ecbcda1ce8a 100644 --- a/doc/emacs/misc.texi +++ b/doc/emacs/misc.texi @@ -2481,8 +2481,8 @@ find the one you select (@code{ffap-menu}). @findex animate-birthday-present @cindex animate - The @code{animate} package makes text dance. For an example, try -@kbd{M-x animate-birthday-present}. + The @code{animate} package makes text dance (e.g. try +@kbd{M-x animate-birthday-present}). @findex blackbox @findex mpuz diff --git a/doc/emacs/mule.texi b/doc/emacs/mule.texi index 9c1d908f882..cffcb7573ff 100644 --- a/doc/emacs/mule.texi +++ b/doc/emacs/mule.texi @@ -350,7 +350,7 @@ to the Emacs session. The supported language environments @cindex Euro sign @cindex UTF-8 @quotation -ASCII, Belarusian, Bengali, Brazilian Portuguese, Bulgarian, +ASCII, Belarusian, Bengali, Brazilian Portuguese, Bulgarian, Cham, Chinese-BIG5, Chinese-CNS, Chinese-EUC-TW, Chinese-GB, Chinese-GBK, Chinese-GB18030, Croatian, Cyrillic-ALT, Cyrillic-ISO, Cyrillic-KOI8, Czech, Devanagari, Dutch, English, Esperanto, Ethiopic, French, diff --git a/doc/emacs/xresources.texi b/doc/emacs/xresources.texi index 66281d6dbbb..b99c98d84e0 100644 --- a/doc/emacs/xresources.texi +++ b/doc/emacs/xresources.texi @@ -47,7 +47,7 @@ its own list of resources; to update it, use the command @command{xrdb}---for instance, @samp{xrdb ~/.Xdefaults}. @cindex registry, setting resources (MS-Windows) - (MS-Windows systems do not support X resource files; on Windows, + (MS-Windows systems do not support X resource files; on such systems, Emacs looks for X resources in the Windows Registry, first under the key @samp{HKEY_CURRENT_USER\SOFTWARE\GNU\Emacs}, which affects only the current user and override the system-wide settings, and then under From 7eac3782ca6c72f8860af1e1428cdd9f698af0fc Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 28 Apr 2012 01:05:01 -0700 Subject: [PATCH 227/564] Reword some doc/lispref to remove/reduce some overly long/short lines. * package.texi (Packaging Basics): * loading.texi (Autoload): * files.texi (Magic File Names): Reword to remove/reduce some overly long/short lines. --- doc/lispref/ChangeLog | 7 +++++++ doc/lispref/files.texi | 3 ++- doc/lispref/loading.texi | 9 ++++----- doc/lispref/package.texi | 4 ++-- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index c66fed1ca04..8588ae88ef8 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,10 @@ +2012-04-28 Glenn Morris + + * package.texi (Packaging Basics): + * loading.texi (Autoload): + * files.texi (Magic File Names): + Reword to remove/reduce some overly long/short lines. + 2012-04-26 Glenn Morris * elisp.texi, vol1.texi, vol2.texi: Some fixes for detailed menu. diff --git a/doc/lispref/files.texi b/doc/lispref/files.texi index 62f9f6f43c3..d18ba458969 100644 --- a/doc/lispref/files.texi +++ b/doc/lispref/files.texi @@ -2951,7 +2951,8 @@ between consecutive checks. For example: @example (defun display-time-file-nonempty-p (file) - (let ((remote-file-name-inhibit-cache (- display-time-interval 5))) + (let ((remote-file-name-inhibit-cache + (- display-time-interval 5))) (and (file-exists-p file) (< 0 (nth 7 (file-attributes (file-chase-links file))))))) @end example diff --git a/doc/lispref/loading.texi b/doc/lispref/loading.texi index 0c02f338c7b..3806ab15b8b 100644 --- a/doc/lispref/loading.texi +++ b/doc/lispref/loading.texi @@ -514,11 +514,10 @@ the following: @file{mode-local.el}). @item Definitions for major or minor modes: -@code{define-derived-mode}, @code{define-minor-mode}, -@code{define-compilation-mode}, @code{define-generic-mode}, -@code{easy-mmode-define-global-mode}, @code{define-global-minor-mode}, -@code{define-globalized-minor-mode}, and -@code{easy-mmode-define-minor-mode}. +@code{define-minor-mode}, @code{define-globalized-minor-mode}, +@code{define-generic-mode}, @code{easy-mmode-define-minor-mode}, +@code{easy-mmode-define-global-mode}, @code{define-compilation-mode}, +@code{define-derived-mode}, and @code{define-global-minor-mode}. @item Other definition types: @code{defcustom}, @code{defgroup}, @code{defclass} diff --git a/doc/lispref/package.texi b/doc/lispref/package.texi index b17f13b6b89..e9737f15a1c 100644 --- a/doc/lispref/package.texi +++ b/doc/lispref/package.texi @@ -77,8 +77,8 @@ if any dependency cannot be found, the package cannot be installed. @end table @cindex content directory, package - Installing a package, either via the Package Menu, or via the -command @code{package-install-file}, creates a subdirectory of + Installing a package, either via the command @code{package-install-file}, +or via the Package Menu, creates a subdirectory of @code{package-user-dir} named @file{@var{name}-@var{version}}, where @var{name} is the package's name and @var{version} its version (e.g. @file{~/.emacs.d/elpa/auctex-11.86/}). We call this the From 44d2bfd09a910af38567ce32752cf97932006097 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 28 Apr 2012 07:17:27 -0400 Subject: [PATCH 228/564] Auto-commit of generated files. --- autogen/configure | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/autogen/configure b/autogen/configure index e9dcce1ccb5..c6b78090d21 100755 --- a/autogen/configure +++ b/autogen/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.65 for emacs 24.0.95. +# Generated by GNU Autoconf 2.65 for emacs 24.0.96. # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, @@ -549,8 +549,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='emacs' PACKAGE_TARNAME='emacs' -PACKAGE_VERSION='24.0.95' -PACKAGE_STRING='emacs 24.0.95' +PACKAGE_VERSION='24.0.96' +PACKAGE_STRING='emacs 24.0.96' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1887,7 +1887,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures emacs 24.0.95 to adapt to many kinds of systems. +\`configure' configures emacs 24.0.96 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1961,7 +1961,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of emacs 24.0.95:";; + short | recursive ) echo "Configuration of emacs 24.0.96:";; esac cat <<\_ACEOF @@ -2124,7 +2124,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -emacs configure 24.0.95 +emacs configure 24.0.96 generated by GNU Autoconf 2.65 Copyright (C) 2009 Free Software Foundation, Inc. @@ -2846,7 +2846,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by emacs $as_me 24.0.95, which was +It was created by emacs $as_me 24.0.96, which was generated by GNU Autoconf 2.65. Invocation command line was $ $0 $@ @@ -3679,7 +3679,7 @@ fi # Define the identity of the package. PACKAGE='emacs' - VERSION='24.0.95' + VERSION='24.0.96' cat >>confdefs.h <<_ACEOF @@ -23159,7 +23159,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by emacs $as_me 24.0.95, which was +This file was extended by emacs $as_me 24.0.96, which was generated by GNU Autoconf 2.65. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -23225,7 +23225,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -emacs config.status 24.0.95 +emacs config.status 24.0.96 configured by $0, generated by GNU Autoconf 2.65, with options \\"\$ac_cs_config\\" From 52af8e0a1db59f2090d7b26a6bb95420e865095e Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 28 Apr 2012 11:26:17 -0700 Subject: [PATCH 229/564] * emacs-lisp-intro.texi (Syntax): Reword to avoid underfull hbox. --- doc/lispintro/ChangeLog | 6 +++++- doc/lispintro/emacs-lisp-intro.texi | 10 +++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/doc/lispintro/ChangeLog b/doc/lispintro/ChangeLog index aae78b4aff1..5e81e4d080b 100644 --- a/doc/lispintro/ChangeLog +++ b/doc/lispintro/ChangeLog @@ -1,3 +1,7 @@ +2012-04-28 Glenn Morris + + * emacs-lisp-intro.texi (Syntax): Reword to avoid underfull hbox. + 2012-04-07 Glenn Morris * Makefile.in: Replace non-portable use of $< in ordinary rules. @@ -498,7 +502,7 @@ ;; coding: utf-8 ;; End: - Copyright (C) 2001-2012 Free Software Foundation, Inc. + Copyright (C) 2001-2012 Free Software Foundation, Inc. This file is part of GNU Emacs. diff --git a/doc/lispintro/emacs-lisp-intro.texi b/doc/lispintro/emacs-lisp-intro.texi index 6a9927b785f..b2b30978144 100644 --- a/doc/lispintro/emacs-lisp-intro.texi +++ b/doc/lispintro/emacs-lisp-intro.texi @@ -1084,6 +1084,14 @@ Robert J. Chassell \fi @end tex +@c Note: this resetting of the page number back to 1 causes TeX to gripe +@c about already having seen page numbers 1-4 before (in the preface): +@c pdfTeX warning (ext4): destination with the same identifier (name{1}) +@c has been already used, duplicate ignored +@c I guess that is harmless (what happens if a later part of the text +@c makes a link to something in the first 4 pages though?). +@c Note that eg the Emacs manual has a preface, but does not bother +@c resetting the page numbers back to 1 after that. @iftex @headings off @evenheading @thispage @| @| @thischapter @@ -14855,7 +14863,7 @@ action would serve our purpose, except that a hyphen is merely the most common character within symbols that is not typically a word constituent character; there are others, too. -Alternatively, we can redefine the regular expression used in the +Alternatively, we can redefine the regexp used in the @code{@value{COUNT-WORDS}} definition so as to include symbols. This procedure has the merit of clarity, but the task is a little tricky. From 31cc861c833a20669b3bc1a81d42949b9431e479 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 28 Apr 2012 11:43:55 -0700 Subject: [PATCH 230/564] * doc/misc/faq.texi: Convert @inforefs to @xrefs. Fix some malformed cross-references. --- doc/misc/ChangeLog | 5 ++++ doc/misc/faq.texi | 67 +++++++++++++++++++++++----------------------- 2 files changed, 38 insertions(+), 34 deletions(-) diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index b2e34bac56d..a3eac6a2ed2 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -1,3 +1,8 @@ +2012-04-28 Glenn Morris + + * faq.texi: Convert @inforefs to @xrefs. + Fix some malformed cross-references. + 2012-04-26 Ippei Furuhashi (tiny change) * org.texi (Agenda commands): Fix two typos: give corresponding diff --git a/doc/misc/faq.texi b/doc/misc/faq.texi index 34005bcb9a0..cd553f22dd0 100644 --- a/doc/misc/faq.texi +++ b/doc/misc/faq.texi @@ -195,8 +195,7 @@ pressed.}. Also, on very few keyboards does @kbd{C-?} generate @acronym{ASCII} code 127. @c FIXME I cannot understand the previous sentence. -@inforef{Keys, Keys, emacs}, for more information. (@xref{Emacs -manual}, for more information about Info.) +@xref{Keys,,, emacs, The GNU Emacs Manual}. @node Extended commands @section What does @file{M-x @var{command}} mean? @@ -1338,7 +1337,7 @@ of files from Macintosh, Microsoft, and Unix platforms. @cindex Init file, setting up @cindex Customization file, setting up -@inforef{Init File, Init File, emacs}. +@xref{Init File,,, emacs, The GNU Emacs Manual}. In general, new Emacs users should not be provided with @file{.emacs} files, because this can cause confusing non-standard behavior. Then @@ -1353,8 +1352,8 @@ rather than Lisp code. While Customize might indeed make it easier to configure Emacs, consider taking a bit of time to learn Emacs Lisp and modifying your @file{.emacs} directly. Simple configuration options are described -rather completely in @inforef{Init File, Init File, emacs}, for users -interested in performing frequently requested, basic tasks. +rather completely in @ref{Init File,,, emacs, The GNU Emacs Manual}, +for users interested in performing frequently requested, basic tasks. Sometimes users are unsure as to where their @file{.emacs} file should be found. Visiting the file as @file{~/.emacs} from Emacs will find @@ -1370,7 +1369,7 @@ The main Customize entry point is @kbd{M-x customize @key{RET}}. This command takes you to a buffer listing all the available Customize groups. From there, you can access all customizable options and faces, change their values, and save your changes to your init file. -@inforef{Easy Customization, Easy Customization, emacs}. +@xref{Easy Customization,,, emacs, The GNU Emacs Manual}. If you know the name of the group in advance (e.g. ``shell''), use @kbd{M-x customize-group @key{RET}}. @@ -1675,16 +1674,16 @@ M-x replace-regexp @key{RET} [^ @key{TAB} C-q @key{LFD} C-q @key{RET} C-q C-l @k @cindex Searching for newlines @cindex Replacing newlines -Use @kbd{C-q C-j}. For more information, see @inforef{Special Isearch, -Special Input for Incremental Search, emacs}. - +Use @kbd{C-q C-j}. For more information, +@pxref{Special Isearch,, Special Input for Incremental Search, emacs, +The GNU Emacs Manual}. @node Yanking text in isearch @section How do I copy text from the kill ring into the search string? @cindex Yanking text into the search string @cindex isearch yanking -Use @kbd{M-y}. @inforef{Isearch Yank, Isearch Yanking, emacs}. +Use @kbd{M-y}. @xref{Isearch Yank,,, emacs, The GNU Emacs Manual}. @node Wrapping words automatically @section How do I make Emacs wrap words for me? @@ -2133,7 +2132,7 @@ commands you've typed. To repeat a set of commands, use keyboard macros. Use @kbd{C-x (} and @kbd{C-x )} to make a keyboard macro that invokes the command and then -type @kbd{C-x e}. (@inforef{Keyboard Macros, Keyboard Macros, emacs}.) +type @kbd{C-x e}. @xref{Keyboard Macros,,, emacs, The GNU Emacs Manual}. If you're really desperate for the @code{.} command in @code{vi} that redoes the last insertion/deletion, use VIPER, a @code{vi} emulation @@ -2145,7 +2144,7 @@ mode which comes with Emacs, and which appears to support it. @cindex X resources @cindex Setting X resources -@inforef{X Resources, X Resources, emacs}. +@xref{X Resources,,, emacs, The GNU Emacs Manual}. You can also use a resource editor, such as editres (for X11R5 and onwards), to look at the resource names for the menu bar, assuming Emacs @@ -2256,7 +2255,7 @@ See also the variable @code{track-eol} and the command @cindex Suspending Emacs @kbd{C-z} iconifies Emacs when running under X and suspends Emacs -otherwise. @inforef{Frame Commands, Frame Commands, emacs}. +otherwise. @xref{Frame Commands,,, emacs, The GNU Emacs Manual}. @node Using regular expressions @section How do I use regexps (regular expressions) in Emacs? @@ -2266,7 +2265,7 @@ otherwise. @inforef{Frame Commands, Frame Commands, emacs}. @cindex Unix regexps, differences from Emacs @cindex Text strings, putting regexps in -@inforef{Regexp Backslash, Regexp Backslash, emacs}. +@xref{Regexp Backslash,,, emacs, The GNU Emacs Manual}. The @code{or} operator is @samp{\|}, not @samp{|}, and the grouping operators are @samp{\(} and @samp{\)}. Also, the string syntax for a backslash is @@ -2323,7 +2322,7 @@ To accept all replacements in each file, hit @kbd{!}. Another way to do the same thing is to use the ``tags'' feature of Emacs: it includes the command @code{tags-query-replace} which performs a query-replace across all the files mentioned in the @file{TAGS} file. -@inforef{Tags Search, Tags Search, emacs}. +@xref{Tags Search,,, emacs, The GNU Emacs Manual}. @node Documentation for etags @section Where is the documentation for @code{etags}? @@ -2366,8 +2365,8 @@ the Unix shell, try GNU @code{ls} with the @samp{-B} option. GNU @code{ls} is part of the GNU Fileutils package, available from @samp{ftp.gnu.org} and its mirrors (@pxref{Current GNU distributions}). -To disable or change the way backups are made, @inforef{Backup Names, , -emacs}. +To disable or change the way backups are made, +@pxref{Backup Names,,, emacs, The GNU Emacs Manual}. @cindex Backup files in a single directory Beginning with Emacs 21.1, you can control where Emacs puts backup files @@ -2397,8 +2396,8 @@ package (@pxref{Packages that do not come with Emacs}). This package also allows you to place all auto-save files in one directory, such as @file{/tmp}. -To disable or change how @code{auto-save-mode} works, @inforef{Auto -Save, , emacs}. +To disable or change how @code{auto-save-mode} works, +@pxref{Auto Save,,, emacs, The GNU Emacs Manual}. @node Going to a line by number @section How can I go to a certain line given its number? @@ -2621,7 +2620,7 @@ consult the documentation of the variables @code{ps-printer-name}, Customize the @code{scroll-conservatively} variable with @kbd{M-x customize-variable @key{RET} scroll-conservatively @key{RET}} and set it to a large value like, say, 10000. For an explanation of what this -means, @inforef{Auto Scrolling, Auto Scrolling, emacs}. +means, @pxref{Auto Scrolling,,, emacs, The GNU Emacs Manual}. Alternatively, use the following Lisp form in your @file{.emacs}: @@ -2692,8 +2691,8 @@ put the following in your @file{.emacs} file: To avoid the slightly distracting visual effect of Emacs starting with its default frame size and then growing to fullscreen, you can add an -@samp{Emacs.Geometry} entry to the Windows registry settings (see -@pxref{(emacs)X Resources}). +@samp{Emacs.Geometry} entry to the Windows registry settings. +@xref{X Resources,,, emacs, The GNU Emacs Manual}. To compute the correct values for width and height, first maximize the Emacs frame and then evaluate @code{(frame-height)} and @@ -3058,7 +3057,7 @@ You can also tell Emacs whether to allow the evaluation of Emacs Lisp code found at the bottom of files by setting the variable @code{enable-local-eval}. -For more information, @inforef{File Variables, File Variables, emacs}. +@xref{File Variables,,, emacs, The GNU Emacs Manual}. @item Synthetic X events. (Yes, a risk; use @samp{MIT-MAGIC-COOKIE-1} or @@ -3501,7 +3500,7 @@ Keys can be bound to commands either interactively or in your To bind a key just in the current major mode, type @kbd{M-x local-set-key @key{RET} @var{key} @var{cmd} @key{RET}}. -@inforef{Key Bindings, Key Bindings, emacs}, for further details. +@xref{Key Bindings,,, emacs, The GNU Emacs Manual}. To make the process of binding keys interactively easier, use the following ``trick'': First bind the key interactively, then immediately @@ -3766,8 +3765,8 @@ keymaps. However, in the specific case of @kbd{C-h} and @key{DEL}, you should toggle @code{normal-erase-is-backspace-mode} instead of calling -@code{keyboard-translate}. @inforef{DEL Does Not Delete, DEL Does Not Delete, -emacs}. +@code{keyboard-translate}. +@xref{DEL Does Not Delete,,, emacs, The GNU Emacs Manual}. Keyboard translations are not the same as key bindings in keymaps. Emacs contains numerous keymaps that apply in different situations, but @@ -3895,7 +3894,7 @@ terminals. Non-@acronym{ASCII} keys and mouse events (e.g. @kbd{C-=} and @cindex @key{Meta} key and @code{xterm} @cindex Xterm and @key{Meta} key -@inforef{Unibyte Mode, Single-Byte Character Set Support, emacs}. +@xref{Unibyte Mode,, Single-Byte Character Set Support, emacs, The GNU Emacs Manual}. If the advice in the Emacs manual fails, try all of these methods before asking for further help: @@ -4019,8 +4018,8 @@ You can get the old behavior by binding @kbd{SPC} to @cindex Displaying eight-bit characters @cindex Eight-bit characters, displaying -@inforef{Unibyte Mode, Single-byte Character Set -Support, emacs}. On a Unix, when Emacs runs on a text-only terminal +@xref{Unibyte Mode,, Single-byte Character Set Support, emacs, The GNU +Emacs Manual}. On a Unix, when Emacs runs on a text-only terminal display or is invoked with @samp{emacs -nw}, you typically need to use @code{set-terminal-coding-system} to tell Emacs what the terminal can display, even after setting the language environment; otherwise @@ -4035,10 +4034,10 @@ terminal coding system automatically. @cindex Eight-bit characters, entering @cindex Input, 8-bit characters -Various methods are available for input of eight-bit characters. See -@inforef{Unibyte Mode, Single-byte Character Set -Support, emacs}. For more sophisticated methods, @inforef{Input -Methods, Input Methods, emacs}. +Various methods are available for input of eight-bit characters. +@xref{Unibyte Mode,, Single-byte Character Set Support, emacs, The GNU +Emacs Manual}. For more sophisticated methods, +@pxref{Input Methods,,, emacs, The GNU Emacs Manual}. @node Right-to-left alphabets @section Where is an Emacs that can handle Semitic (right-to-left) alphabets? @@ -4377,7 +4376,7 @@ you to start Emacs quickly when you needed to. Use @kbd{M-x gnus}. For more information on Gnus, @pxref{Top,, the Gnus Manual, gnus, The Gnus Manual}, which includes @ref{Frequently Asked -Questions,, the Gnus FAQ, gnus}. +Questions,, the Gnus FAQ, gnus, The Gnus Manual}. @node Gnus does not work with NNTP From f9e320bb015b4328db43815fb2e1821e388d0845 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 28 Apr 2012 12:04:01 -0700 Subject: [PATCH 231/564] Remove some overfull lines in doc/misc/faq * doc/misc/faq.texi: (File-name conventions): Shorten section name to avoid overfull line. (How to add fonts): Use smallexample to avoid overfull lines. --- doc/misc/ChangeLog | 2 ++ doc/misc/faq.texi | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index a3eac6a2ed2..0064deb02fa 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -2,6 +2,8 @@ * faq.texi: Convert @inforefs to @xrefs. Fix some malformed cross-references. + (File-name conventions): Shorten section name to avoid overfull line. + (How to add fonts): Use smallexample to avoid overfull lines. 2012-04-26 Ippei Furuhashi (tiny change) diff --git a/doc/misc/faq.texi b/doc/misc/faq.texi index cd553f22dd0..9bb3feb52e1 100644 --- a/doc/misc/faq.texi +++ b/doc/misc/faq.texi @@ -251,7 +251,7 @@ reference to follow it. Emacs manual. @node File-name conventions -@section What are @file{etc/GNU}, @file{src/config.h}, @file{site-lisp/default.el}, etc.? +@section What are @file{src/config.h}, @file{site-lisp/default.el}, etc.? @cindex File-name conventions @cindex Conventions for file names @cindex Directories and files that come with Emacs @@ -4132,7 +4132,7 @@ set up @code{w32-bdf-filename-alist}: Now, create fontsets for the BDF fonts: -@lisp +@smallexample (create-fontset-from-fontset-spec "-*-fixed-medium-r-normal-*-16-*-*-*-c-*-fontset-bdf, japanese-jisx0208:-*-*-medium-r-normal-*-16-*-*-*-c-*-jisx0208.1983-*, @@ -4144,7 +4144,7 @@ Now, create fontsets for the BDF fonts: tibetan-1-column:-TibMdXA-fixed-medium-r-normal--16-160-72-72-m-80-MuleTibetan-1, ethiopic:-Admas-Ethiomx16f-Medium-R-Normal--16-150-100-100-M-160-Ethiopic-Unicode, tibetan:-TibMdXA-fixed-medium-r-normal--16-160-72-72-m-160-MuleTibetan-0") -@end lisp +@end smallexample Many of the international bdf fonts from Intlfonts are type 0, and therefore need to be added to font-encoding-alist: From 461ef3c5186ce4df67039615b30b84b0c86d7da4 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sat, 28 Apr 2012 16:04:34 -0400 Subject: [PATCH 232/564] Add some shell indentation test cases. * test/indent/shell.sh: * test/indent/shell.rc: Add some test cases. --- test/ChangeLog | 5 +++++ test/indent/shell.rc | 9 ++++++++- test/indent/shell.sh | 4 +++- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/test/ChangeLog b/test/ChangeLog index ff38a8fa9e1..0f3db27f188 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,8 @@ +2012-04-28 Stefan Monnier + + * indent/shell.sh: + * indent/shell.rc: Ad some test cases. + 2012-04-24 Stefan Monnier * indent/ruby.rb: New file, to test new syntax-propertize code. diff --git a/test/indent/shell.rc b/test/indent/shell.rc index 841223555b9..e5c63e335b9 100755 --- a/test/indent/shell.rc +++ b/test/indent/shell.rc @@ -1,7 +1,10 @@ #!/bin/rc if (foo) { - echo 1 + echo 1 \ + toto \ + tutu + titi } if not { echo 2 @@ -23,6 +26,10 @@ switch ($a) { for (i in a b c) echo "$i" # KNOWN INDENT BUG echo titi + if (foo) + echo 3 # KNOWN INDENT BUG + if not + echo 4 # KNOWN INDENT BUG case * echo other diff --git a/test/indent/shell.sh b/test/indent/shell.sh index 89f47d0bfe3..26a01dc3bda 100755 --- a/test/indent/shell.sh +++ b/test/indent/shell.sh @@ -13,6 +13,7 @@ foo () { case toto in a) hello # KNOWN INDENT BUG ;; b) hi # KNOWN INDENT BUG + ;; c) hi # KNOWN INDENT BUG esac case $toto in @@ -34,7 +35,8 @@ foo () { sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | - cat # KNOWN INDENT BUG + grep '.' | # KNOWN INDENT BUG + sed 1d case toto in -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ From 8b6c19f4c23e69f2133a8432d614abdc03bdadc6 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sat, 28 Apr 2012 17:59:08 -0400 Subject: [PATCH 233/564] Avoid the obsolete `assoc' package. * lisp/speedbar.el (speedbar-refresh): Avoid adelete. (speedbar-file-lists): Simplify and avoid aput. * lisp/man.el (Man--sections, Man--refpages): New vars, replacing Man-sections-alist and Man-refpages-alist. (Man-build-section-alist, Man-build-references-alist): Use them; avoid aput. (Man--last-section, Man--last-refpage): New vars. (Man-follow-manual-reference): Use them. Use the `default' arg of completing-read. (Man-goto-section): Idem. Move prompt to the `interactive' spec. * lisp/gnus/auth-source.el (auth-source--aput-1, auth-source--aput) (auth-source--aget): New functions and macros. Use them instead of aput/aget. --- lisp/ChangeLog | 14 ++++++ lisp/gnus/ChangeLog | 6 +++ lisp/gnus/auth-source.el | 98 ++++++++++++++++++++++++---------------- lisp/man.el | 91 +++++++++++++++++++------------------ lisp/speedbar.el | 22 ++++----- 5 files changed, 135 insertions(+), 96 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index eaf07c087a2..13c6c1ecbed 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,17 @@ +2012-04-28 Stefan Monnier + + Avoid the obsolete `assoc' package. + * speedbar.el (speedbar-refresh): Avoid adelete. + (speedbar-file-lists): Simplify and avoid aput. + * man.el (Man--sections, Man--refpages): New vars, replacing + Man-sections-alist and Man-refpages-alist. + (Man-build-section-alist, Man-build-references-alist): + Use them; avoid aput. + (Man--last-section, Man--last-refpage): New vars. + (Man-follow-manual-reference): Use them. + Use the `default' arg of completing-read. + (Man-goto-section): Idem. Move prompt to the `interactive' spec. + 2012-04-27 Chong Yidong * vc/diff.el (diff-sentinel): Go to bob (Bug#10259). diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 556094ca614..cacd20ce99d 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,9 @@ +2012-04-28 Stefan Monnier + + * auth-source.el (auth-source--aput-1, auth-source--aput) + (auth-source--aget): New functions and macros. + Use them instead of aput/aget. + 2012-04-27 Andreas Schwab * gnus.el (debbugs-gnu): Don't override existing autoload definition. diff --git a/lisp/gnus/auth-source.el b/lisp/gnus/auth-source.el index 34fe5afe7af..d3d213a753b 100644 --- a/lisp/gnus/auth-source.el +++ b/lisp/gnus/auth-source.el @@ -42,7 +42,6 @@ (require 'password-cache) (require 'mm-util) (require 'gnus-util) -(require 'assoc) (eval-when-compile (require 'cl)) (require 'eieio) @@ -853,6 +852,21 @@ while \(:host t) would find all host entries." ;;; Backend specific parsing: netrc/authinfo backend +(defun auth-source--aput-1 (alist key val) + (let ((seen ()) + (rest alist)) + (while (and (consp rest) (not (equal key (caar rest)))) + (push (pop rest) seen)) + (cons (cons key val) + (if (null rest) alist + (nconc (nreverse seen) + (if (equal key (caar rest)) (cdr rest) rest)))))) +(defmacro auth-source--aput (var key val) + `(setq ,var (auth-source--aput-1 ,var ,key ,val))) + +(defun auth-source--aget (alist key) + (cdr (assoc key alist))) + ;;; (auth-source-netrc-parse "~/.authinfo.gpg") (defun* auth-source-netrc-parse (&rest spec @@ -888,10 +902,11 @@ Note that the MAX parameter is used so we can exit the parse early." ;; cache all netrc files (used to be just .gpg files) ;; Store the contents of the file heavily encrypted in memory. ;; (note for the irony-impaired: they are just obfuscated) - (aput 'auth-source-netrc-cache file - (list :mtime (nth 5 (file-attributes file)) - :secret (lexical-let ((v (mapcar '1+ (buffer-string)))) - (lambda () (apply 'string (mapcar '1- v))))))) + (auth-source--aput + auth-source-netrc-cache file + (list :mtime (nth 5 (file-attributes file)) + :secret (lexical-let ((v (mapcar '1+ (buffer-string)))) + (lambda () (apply 'string (mapcar '1- v))))))) (goto-char (point-min)) ;; Go through the file, line by line. (while (and (not (eobp)) @@ -937,21 +952,21 @@ Note that the MAX parameter is used so we can exit the parse early." (auth-source-search-collection host (or - (aget alist "machine") - (aget alist "host") + (auth-source--aget alist "machine") + (auth-source--aget alist "host") t)) (auth-source-search-collection user (or - (aget alist "login") - (aget alist "account") - (aget alist "user") + (auth-source--aget alist "login") + (auth-source--aget alist "account") + (auth-source--aget alist "user") t)) (auth-source-search-collection port (or - (aget alist "port") - (aget alist "protocol") + (auth-source--aget alist "port") + (auth-source--aget alist "protocol") t)) (or ;; the required list of keys is nil, or @@ -1166,7 +1181,7 @@ See `auth-source-search' for details on SPEC." ;; just the value otherwise (t (symbol-value br))))) (when br-choice - (aput 'valist br br-choice))))) + (auth-source--aput valist br br-choice))))) ;; for extra required elements, see if the spec includes a value for them (dolist (er create-extra) @@ -1175,17 +1190,18 @@ See `auth-source-search' for details on SPEC." collect (nth i spec)))) (dolist (k keys) (when (equal (symbol-name k) name) - (aput 'valist er (plist-get spec k)))))) + (auth-source--aput valist er (plist-get spec k)))))) ;; for each required element (dolist (r required) - (let* ((data (aget valist r)) + (let* ((data (auth-source--aget valist r)) ;; take the first element if the data is a list (data (or (auth-source-netrc-element-or-first data) (plist-get current-data (intern (format ":%s" r) obarray)))) ;; this is the default to be offered - (given-default (aget auth-source-creation-defaults r)) + (given-default (auth-source--aget + auth-source-creation-defaults r)) ;; the default supplementals are simple: ;; for the user, try `given-default' and then (user-login-name); ;; otherwise take `given-default' @@ -1197,22 +1213,22 @@ See `auth-source-search' for details on SPEC." (cons 'user (or (auth-source-netrc-element-or-first - (aget valist 'user)) + (auth-source--aget valist 'user)) (plist-get artificial :user) "[any user]")) (cons 'host (or (auth-source-netrc-element-or-first - (aget valist 'host)) + (auth-source--aget valist 'host)) (plist-get artificial :host) "[any host]")) (cons 'port (or (auth-source-netrc-element-or-first - (aget valist 'port)) + (auth-source--aget valist 'port)) (plist-get artificial :port) "[any port]")))) - (prompt (or (aget auth-source-creation-prompts r) + (prompt (or (auth-source--aget auth-source-creation-prompts r) (case r (secret "%p password for %u@%h: ") (user "%p user name for %h: ") @@ -1221,9 +1237,9 @@ See `auth-source-search' for details on SPEC." (format "Enter %s (%%u@%%h:%%p): " r))) (prompt (auth-source-format-prompt prompt - `((?u ,(aget printable-defaults 'user)) - (?h ,(aget printable-defaults 'host)) - (?p ,(aget printable-defaults 'port)))))) + `((?u ,(auth-source--aget printable-defaults 'user)) + (?h ,(auth-source--aget printable-defaults 'host)) + (?p ,(auth-source--aget printable-defaults 'port)))))) ;; Store the data, prompting for the password if needed. (setq data (or data @@ -1384,7 +1400,7 @@ Respects `auth-source-save-behavior'. Uses file) (message "Saved new authentication information to %s" file) nil)))) - (aput 'auth-source-netrc-cache key "ran")))) + (auth-source--aput auth-source-netrc-cache key "ran")))) ;;; Backend specific parsing: Secrets API backend @@ -1609,7 +1625,7 @@ authentication tokens: ;; just the value otherwise (t (symbol-value br))))) (when br-choice - (aput 'valist br br-choice))))) + (auth-source--aput valist br br-choice))))) ;; for extra required elements, see if the spec includes a value for them (dolist (er create-extra) @@ -1618,17 +1634,18 @@ authentication tokens: collect (nth i spec)))) (dolist (k keys) (when (equal (symbol-name k) name) - (aput 'valist er (plist-get spec k)))))) + (auth-source--aput valist er (plist-get spec k)))))) ;; for each required element (dolist (r required) - (let* ((data (aget valist r)) + (let* ((data (auth-source--aget valist r)) ;; take the first element if the data is a list (data (or (auth-source-netrc-element-or-first data) (plist-get current-data (intern (format ":%s" r) obarray)))) ;; this is the default to be offered - (given-default (aget auth-source-creation-defaults r)) + (given-default (auth-source--aget + auth-source-creation-defaults r)) ;; the default supplementals are simple: ;; for the user, try `given-default' and then (user-login-name); ;; otherwise take `given-default' @@ -1640,22 +1657,22 @@ authentication tokens: (cons 'user (or (auth-source-netrc-element-or-first - (aget valist 'user)) + (auth-source--aget valist 'user)) (plist-get artificial :user) "[any user]")) (cons 'host (or (auth-source-netrc-element-or-first - (aget valist 'host)) + (auth-source--aget valist 'host)) (plist-get artificial :host) "[any host]")) (cons 'port (or (auth-source-netrc-element-or-first - (aget valist 'port)) + (auth-source--aget valist 'port)) (plist-get artificial :port) "[any port]")))) - (prompt (or (aget auth-source-creation-prompts r) + (prompt (or (auth-source--aget auth-source-creation-prompts r) (case r (secret "%p password for %u@%h: ") (user "%p user name for %h: ") @@ -1664,20 +1681,21 @@ authentication tokens: (format "Enter %s (%%u@%%h:%%p): " r))) (prompt (auth-source-format-prompt prompt - `((?u ,(aget printable-defaults 'user)) - (?h ,(aget printable-defaults 'host)) - (?p ,(aget printable-defaults 'port)))))) + `((?u ,(auth-source--aget printable-defaults 'user)) + (?h ,(auth-source--aget printable-defaults 'host)) + (?p ,(auth-source--aget printable-defaults 'port)))))) ;; Store the data, prompting for the password if needed. (setq data (or data (if (eq r 'secret) (or (eval default) (read-passwd prompt)) (if (stringp default) - (read-string (if (string-match ": *\\'" prompt) - (concat (substring prompt 0 (match-beginning 0)) - " (default " default "): ") - (concat prompt "(default " default ") ")) - nil nil default) + (read-string + (if (string-match ": *\\'" prompt) + (concat (substring prompt 0 (match-beginning 0)) + " (default " default "): ") + (concat prompt "(default " default ") ")) + nil nil default) (eval default))))) (when data diff --git a/lisp/man.el b/lisp/man.el index 0a7b831ca8e..6912486dffa 100644 --- a/lisp/man.el +++ b/lisp/man.el @@ -89,7 +89,6 @@ ;;; Code: (eval-when-compile (require 'cl)) -(require 'assoc) (require 'button) ;; vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv @@ -360,10 +359,10 @@ Otherwise, the value is whatever the function (make-variable-buffer-local 'Man-arguments) (put 'Man-arguments 'permanent-local t) -(defvar Man-sections-alist nil) -(make-variable-buffer-local 'Man-sections-alist) -(defvar Man-refpages-alist nil) -(make-variable-buffer-local 'Man-refpages-alist) +(defvar Man--sections nil) +(make-variable-buffer-local 'Man--sections) +(defvar Man--refpages nil) +(make-variable-buffer-local 'Man--refpages) (defvar Man-page-list nil) (make-variable-buffer-local 'Man-page-list) (defvar Man-current-page 0) @@ -1370,17 +1369,19 @@ The following key bindings are currently in effect in the buffer: (run-mode-hooks 'Man-mode-hook)) (defsubst Man-build-section-alist () - "Build the association list of manpage sections." - (setq Man-sections-alist nil) + "Build the list of manpage sections." + (setq Man--sections nil) (goto-char (point-min)) (let ((case-fold-search nil)) (while (re-search-forward Man-heading-regexp (point-max) t) - (aput 'Man-sections-alist (match-string 1)) + (let ((section (match-string 1))) + (unless (member section Man--sections) + (push section Man--sections))) (forward-line 1)))) (defsubst Man-build-references-alist () - "Build the association list of references (in the SEE ALSO section)." - (setq Man-refpages-alist nil) + "Build the list of references (in the SEE ALSO section)." + (setq Man--refpages nil) (save-excursion (if (Man-find-section Man-see-also-regexp) (let ((start (progn (forward-line 1) (point))) @@ -1406,10 +1407,11 @@ The following key bindings are currently in effect in the buffer: len (1- (length word)))) (if (memq (aref word len) '(?- ?­)) (setq hyphenated (substring word 0 len))) - (if (string-match Man-reference-regexp word) - (aput 'Man-refpages-alist word)))) + (and (string-match Man-reference-regexp word) + (not (member word Man--refpages)) + (push word Man--refpages)))) (skip-chars-forward " \t\n,")))))) - (setq Man-refpages-alist (nreverse Man-refpages-alist))) + (setq Man--refpages (nreverse Man--refpages))) (defun Man-build-page-list () "Build the list of separate manpages in the buffer." @@ -1541,21 +1543,22 @@ Returns t if section is found, nil otherwise." nil) )) -(defun Man-goto-section () - "Query for section to move point to." - (interactive) - (aput 'Man-sections-alist - (let* ((default (aheadsym Man-sections-alist)) - (completion-ignore-case t) - chosen - (prompt (concat "Go to section (default " default "): "))) - (setq chosen (completing-read prompt Man-sections-alist)) - (if (or (not chosen) - (string= chosen "")) - default - chosen))) - (unless (Man-find-section (aheadsym Man-sections-alist)) - (error "Section not found"))) +(defvar Man--last-section nil) + +(defun Man-goto-section (section) + "Move point to SECTION." + (interactive + (let* ((default (if (member Man--last-section Man--sections) + Man--last-section + (car Man--sections))) + (completion-ignore-case t) + (prompt (concat "Go to section (default " default "): ")) + (chosen (completing-read prompt Man--sections + nil nil nil nil default))) + (list chosen))) + (setq Man--last-section section) + (unless (Man-find-section section) + (error "Section %s not found" section))) (defun Man-goto-see-also-section () @@ -1586,11 +1589,13 @@ as \"tcgetp-grp(3V)\", and point is at \"grp(3V)\", we return (setq word (current-word)))) word))) +(defvar Man--last-refpage nil) + (defun Man-follow-manual-reference (reference) "Get one of the manpages referred to in the \"SEE ALSO\" section. Specify which REFERENCE to use; default is based on word at point." (interactive - (if (not Man-refpages-alist) + (if (not Man--refpages) (error "There are no references in the current man page") (list (let* ((default (or @@ -1603,26 +1608,22 @@ Specify which REFERENCE to use; default is based on word at point." (substring word 0 (match-beginning 0)) word)) - Man-refpages-alist)) - (aheadsym Man-refpages-alist))) + Man--refpages)) + (if (member Man--last-refpage Man--refpages) + Man--last-refpage + (car Man--refpages)))) (defaults (mapcar 'substring-no-properties - (delete-dups - (delq nil (cons default - (mapcar 'car Man-refpages-alist)))))) - chosen - (prompt (concat "Refer to (default " default "): "))) - (setq chosen (completing-read prompt Man-refpages-alist - nil nil nil nil defaults)) - (if (or (not chosen) - (string= chosen "")) - default - chosen))))) - (if (not Man-refpages-alist) + (cons default Man--refpages))) + (prompt (concat "Refer to (default " default "): ")) + (chosen (completing-read prompt Man--refpages + nil nil nil nil defaults))) + chosen)))) + (if (not Man--refpages) (error "Can't find any references in the current manpage") - (aput 'Man-refpages-alist reference) + (setq Man--last-refpage reference) (Man-getpage-in-background - (Man-translate-references (aheadsym Man-refpages-alist))))) + (Man-translate-references reference)))) (defun Man-kill () "Kill the buffer containing the manpage." diff --git a/lisp/speedbar.el b/lisp/speedbar.el index 9065d9ed131..c1e86e17e37 100644 --- a/lisp/speedbar.el +++ b/lisp/speedbar.el @@ -125,7 +125,6 @@ this version is not backward compatible to 0.14 or earlier.") ;;; TODO: ;; - Timeout directories we haven't visited in a while. -(require 'assoc) (require 'easymenu) (require 'dframe) (require 'sb-image) @@ -1413,9 +1412,10 @@ Argument ARG represents to force a refresh past any caches that may exist." (dframe-power-click arg) deactivate-mark) ;; We need to hack something so this works in detached frames. - (while dl - (adelete 'speedbar-directory-contents-alist (car dl)) - (setq dl (cdr dl))) + (dolist (d dl) + (setq speedbar-directory-contents-alist + (delq (assoc d speedbar-directory-contents-alist) + speedbar-directory-contents-alist))) (if (<= 1 speedbar-verbosity-level) (speedbar-message "Refreshing speedbar...")) (speedbar-update-contents) @@ -1898,12 +1898,9 @@ matching ignored headers. Cache any directory files found in `speedbar-directory-contents-alist' and use that cache before scanning the file-system." (setq directory (expand-file-name directory)) - ;; If in powerclick mode, then the directory we are getting - ;; should be rescanned. - (if dframe-power-click - (adelete 'speedbar-directory-contents-alist directory)) ;; find the directory, either in the cache, or build it. - (or (cdr-safe (assoc directory speedbar-directory-contents-alist)) + (or (and (not dframe-power-click) ;; In powerclick mode, always rescan. + (cdr-safe (assoc directory speedbar-directory-contents-alist))) (let ((default-directory directory) (dir (directory-files directory nil)) (dirs nil) @@ -1917,8 +1914,11 @@ the file-system." (setq dirs (cons (car dir) dirs)) (setq files (cons (car dir) files)))) (setq dir (cdr dir))) - (let ((nl (cons (nreverse dirs) (list (nreverse files))))) - (aput 'speedbar-directory-contents-alist directory nl) + (let ((nl (cons (nreverse dirs) (list (nreverse files)))) + (ae (assoc directory speedbar-directory-contents-alist))) + (if ae (setcdr ae nl) + (push (cons directory nl) + speedbar-directory-contents-alist)) nl)) )) From 13c379eed08ffee0081d3c86439962a6b2f94500 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sat, 28 Apr 2012 15:17:27 -0700 Subject: [PATCH 234/564] Do not avoid creating empty evaporating overlays (Bug#9642). * buffer.c (Fmove_overlay): Revert the change of 2012-04-23. That is, do not delete an evaporating overlay if it becomes empty after its bounds are adjusted to fit within its buffer. This fix caused other problems, and I'm reverting it until we get to the bottom of them. --- src/ChangeLog | 9 +++++++++ src/buffer.c | 37 ++++++++++++++++++------------------- 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 55caf3c607c..6cef4f61f90 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,12 @@ +2012-04-28 Paul Eggert + + Do not avoid creating empty evaporating overlays (Bug#9642). + * buffer.c (Fmove_overlay): Revert the change of 2012-04-23. + That is, do not delete an evaporating overlay if it becomes + empty after its bounds are adjusted to fit within its buffer. + This fix caused other problems, and I'm reverting it until we get + to the bottom of them. + 2012-04-27 Chong Yidong * xselect.c (x_convert_selection): Initialize a pointer (Bug#11315). diff --git a/src/buffer.c b/src/buffer.c index 6c2e21c8125..9bac3ec742b 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -3682,7 +3682,6 @@ buffer. */) struct buffer *b, *ob; Lisp_Object obuffer; int count = SPECPDL_INDEX (); - ptrdiff_t n_beg, n_end; CHECK_OVERLAY (overlay); if (NILP (buffer)) @@ -3701,23 +3700,15 @@ buffer. */) CHECK_NUMBER_COERCE_MARKER (beg); CHECK_NUMBER_COERCE_MARKER (end); + if (XINT (beg) == XINT (end) && ! NILP (Foverlay_get (overlay, Qevaporate))) + return Fdelete_overlay (overlay); + if (XINT (beg) > XINT (end)) { Lisp_Object temp; temp = beg; beg = end; end = temp; } - /* First set the overlay boundaries, which may clip them. */ - Fset_marker (OVERLAY_START (overlay), beg, buffer); - Fset_marker (OVERLAY_END (overlay), end, buffer); - n_beg = marker_position (OVERLAY_START (overlay)); - n_end = marker_position (OVERLAY_END (overlay)); - - /* Now, delete the overlay if it is empty after clipping and has the - evaporate property. */ - if (n_beg == n_end && ! NILP (Foverlay_get (overlay, Qevaporate))) - return Fdelete_overlay (overlay); - specbind (Qinhibit_quit, Qt); obuffer = Fmarker_buffer (OVERLAY_START (overlay)); @@ -3740,7 +3731,7 @@ buffer. */) } /* Redisplay where the overlay is going to be. */ - modify_overlay (b, n_beg, n_end); + modify_overlay (b, XINT (beg), XINT (end)); } else /* Redisplay the area the overlay has just left, or just enclosed. */ @@ -3750,12 +3741,16 @@ buffer. */) o_beg = OVERLAY_POSITION (OVERLAY_START (overlay)); o_end = OVERLAY_POSITION (OVERLAY_END (overlay)); - if (o_beg == n_beg) - modify_overlay (b, o_end, n_end); - else if (o_end == n_end) - modify_overlay (b, o_beg, n_beg); + if (o_beg == XINT (beg)) + modify_overlay (b, o_end, XINT (end)); + else if (o_end == XINT (end)) + modify_overlay (b, o_beg, XINT (beg)); else - modify_overlay (b, min (o_beg, n_beg), max (o_end, n_end)); + { + if (XINT (beg) < o_beg) o_beg = XINT (beg); + if (XINT (end) > o_end) o_end = XINT (end); + modify_overlay (b, o_beg, o_end); + } } if (!NILP (obuffer)) @@ -3767,8 +3762,12 @@ buffer. */) eassert (XOVERLAY (overlay)->next == NULL); } + Fset_marker (OVERLAY_START (overlay), beg, buffer); + Fset_marker (OVERLAY_END (overlay), end, buffer); + /* Put the overlay on the wrong list. */ - if (n_end < b->overlay_center) + end = OVERLAY_END (overlay); + if (OVERLAY_POSITION (end) < b->overlay_center) { XOVERLAY (overlay)->next = b->overlays_after; b->overlays_after = XOVERLAY (overlay); From c93b886f957b55df4fe45d986c34242832ec4a28 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Sun, 29 Apr 2012 09:48:23 +0800 Subject: [PATCH 235/564] Fix Follow mode's calculation of window ends. * lisp/follow.el (follow-calc-win-end): Rewrite to handle partial screen lines correctly. (follow-avoid-tail-recenter): Minor cleanup. Fixes: debbugs:8390 --- lisp/ChangeLog | 6 ++ lisp/follow.el | 209 +++++++++++++------------------------------------ 2 files changed, 62 insertions(+), 153 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 13c6c1ecbed..3f656ab999a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2012-04-29 Chong Yidong + + * follow.el (follow-calc-win-end): Rewrite to handle partial + screen lines correctly (Bug#8390). + (follow-avoid-tail-recenter): Minor cleanup. + 2012-04-28 Stefan Monnier Avoid the obsolete `assoc' package. diff --git a/lisp/follow.el b/lisp/follow.el index 850cb7b22db..e033c76b4e3 100644 --- a/lisp/follow.el +++ b/lisp/follow.el @@ -24,8 +24,6 @@ ;;; Commentary: -;;{{{ Documentation - ;; `Follow mode' is a minor mode for Emacs and XEmacs that ;; combines windows into one tall virtual window. ;; @@ -220,11 +218,9 @@ ;; non-selected window unaligned. It will, however, pop right back ;; when it is selected.) -;;}}} - ;;; Code: -;;{{{ Preliminaries +;; Preliminaries ;; Make the compiler shut up! ;; There are two strategies: @@ -266,8 +262,7 @@ 'byte-compile-obsolete) (put 'frame-first-window 'byte-compile 'nil)))))) -;;}}} -;;{{{ Variables +;;; Variables (defgroup follow nil "Synchronize windows showing the same buffer." @@ -286,7 +281,7 @@ :group 'follow) (make-obsolete-variable 'follow-mode-off-hook 'follow-mode-hook "22.2") -;;{{{ Keymap/Menu +;;; Keymap/Menu ;; Define keys for the follow-mode minor mode map and replace some ;; functions in the global map. All `follow' mode special functions @@ -373,8 +368,6 @@ After that, changing the prefix key requires manipulating keymaps." "--" ["Follow mode" follow-mode :style toggle :selected follow-mode])) -;;}}} - (defcustom follow-mode-line-text " Follow" "Text shown in the mode line when Follow mode is active. Defaults to \" Follow\". Examples of other values @@ -448,8 +441,7 @@ Used by `follow-window-size-change'.") (defvar follow-windows-start-end-cache nil "Cache used by `follow-window-start-end'.") -;;}}} -;;{{{ Debug messages +;;; Debug messages ;; This inline function must be as small as possible! ;; Maybe we should define a macro that expands to nil if @@ -460,15 +452,12 @@ Used by `follow-window-size-change'.") (if (and (boundp 'follow-debug) follow-debug) (apply 'message args))) -;;}}} -;;{{{ Cache +;;; Cache (dolist (cmd follow-cache-command-list) (put cmd 'follow-mode-use-cache t)) -;;}}} - -;;{{{ The mode +;;; The mode ;;;###autoload (defun turn-on-follow-mode () @@ -536,8 +525,7 @@ Keys specific to Follow mode: ((not follow-mode) ; Off (force-mode-line-update)))) -;;}}} -;;{{{ Find file hook +;;; Find file hook ;; This will start follow-mode whenever a new file is loaded, if ;; the variable `follow-auto' is non-nil. @@ -548,15 +536,9 @@ Keys specific to Follow mode: "Find-file hook for Follow mode. See the variable `follow-auto'." (if follow-auto (follow-mode t))) -;;}}} +;;; User functions -;;{{{ User functions - -;;; -;;; User functions usable when in Follow mode. -;;; - -;;{{{ Scroll +;;; Scroll ;; `scroll-up' and `-down', but for windows in Follow mode. ;; @@ -633,8 +615,7 @@ Works like `scroll-up' when not in Follow mode." (vertical-motion (- next-screen-context-lines 1)) (setq follow-internal-force-redisplay t)))))) -;;}}} -;;{{{ Buffer +;;; Buffer ;;;###autoload (defun follow-delete-other-windows-and-split (&optional arg) @@ -709,8 +690,7 @@ in your `~/.emacs' file: (follow-mode 1)) (follow-switch-to-buffer-all)) -;;}}} -;;{{{ Movement +;;; Movement ;; Note, these functions are not very useful, at least not unless you ;; rebind the rather cumbersome key sequence `C-c . p'. @@ -744,8 +724,7 @@ in your `~/.emacs' file: (interactive) (select-window (car (reverse (follow-all-followers))))) -;;}}} -;;{{{ Redraw +;;; Redraw (defun follow-recenter (&optional arg) "Recenter the middle window around point. @@ -792,8 +771,7 @@ Follow mode since the windows should always be aligned." (sit-for 0) (follow-redisplay)) -;;}}} -;;{{{ End of buffer +;;; End of buffer (defun follow-end-of-buffer (&optional arg) "Move point to the end of the buffer, Follow mode style. @@ -816,15 +794,7 @@ of the way from the true end." (with-no-warnings (end-of-buffer arg)))) -;;}}} - -;;}}} - -;;{{{ Display - -;;;; The display routines - -;;{{{ Information gathering functions +;;; Display (defun follow-all-followers (&optional testwin) "Return all windows displaying the same buffer as the TESTWIN. @@ -859,46 +829,21 @@ from the selected window." (cons pred (cdr windows)))) -;; This function is optimized function for speed! - (defun follow-calc-win-end (&optional win) - "Calculate the presumed window end for WIN. - -Actually, the position returned is the start of the next -window, normally is the end plus one. - -If WIN is nil, the selected window is used. - -Returns (end-pos end-of-buffer-p)" - (if (featurep 'xemacs) - ;; XEmacs can calculate the end of the window by using - ;; the 'guarantee options. GOOD! - (let ((end (window-end win t))) - (if (= end (point-max (window-buffer win))) - (list end t) - (list (+ end 1) nil))) - ;; Emacs: We have to calculate the end by ourselves. - ;; This code works on both XEmacs and Emacs, but now - ;; that XEmacs has got custom-written code, this could - ;; be optimized for Emacs. - (let (height buffer-end-p) - (with-selected-window (or win (selected-window)) - (save-excursion - (goto-char (window-start)) - (setq height - (- (window-height) - (if header-line-format 2 1))) - (setq buffer-end-p - (if (bolp) - (not (= height (vertical-motion height))) - (save-restriction - ;; Fix a mis-feature in `vertical-motion': - ;; The start of the window is assumed to - ;; coincide with the start of a line. - (narrow-to-region (point) (point-max)) - (not (= height (vertical-motion height)))))) - (list (point) buffer-end-p)))))) + "Calculate the end position for window WIN. +Return (END-POS END-OF-BUFFER). +Actually, the position returned is the start of the line after +the last fully-visible line in WIN. If WIN is nil, the selected +window is used." + (let* ((win (or win (selected-window))) + (edges (window-inside-pixel-edges win)) + (ht (- (nth 3 edges) (nth 1 edges))) + (last-line-pos (posn-point (posn-at-x-y 0 (1- ht) win)))) + (if (pos-visible-in-window-p last-line-pos win) + (let ((end (window-end win t))) + (list end (= end (point-max)))) + (list last-line-pos nil)))) ;; Can't use `save-window-excursion' since it triggers a redraw. (defun follow-calc-win-start (windows pos win) @@ -1023,8 +968,7 @@ Note that this handles the case when the cache has been set to nil." (vertical-motion 1 win) (set-window-start win (point) 'noforce))))) -;;}}} -;;{{{ Selection functions +;;; Selection functions ;; Make a window in WINDOWS selected if it currently ;; is displaying the position DEST. @@ -1112,8 +1056,8 @@ Otherwise, return nil." (set-window-start (car windows) (point) 'noforce) (setq end-pos-end-p (follow-calc-win-end (car windows))) (goto-char (car end-pos-end-p)) - ;; Visible, if dest above end, or if eob is visible inside - ;; the window. + ;; Visible, if dest above end, or if eob is visible + ;; inside the window. (if (or (car (cdr end-pos-end-p)) (< dest (point))) (setq win (car windows)) @@ -1124,9 +1068,7 @@ Otherwise, return nil." (goto-char dest)) win)) - -;;}}} -;;{{{ Redisplay +;;; Redisplay ;; Redraw all the windows on the screen, starting with the top window. ;; The window used as as marker is WIN, or the selected window if WIN @@ -1240,8 +1182,7 @@ should be a member of WINDOWS, starts at position START." (setq res (point)))))) res))) -;;}}} -;;{{{ Avoid tail recenter +;;; Avoid tail recenter ;; This sets the window internal flag `force_start'. The effect is that ;; windows only displaying the tail aren't recentered. @@ -1253,12 +1194,6 @@ should be a member of WINDOWS, starts at position START." ;; window-start position is equal to (point-max) of the buffer it ;; displays. ;; -;; This function is also added to `post-command-idle-hook', introduced -;; in Emacs 19.30. This is needed since the vaccine injected by the -;; call from `post-command-hook' only works until the next redisplay. -;; It is possible that the functions in the `post-command-idle-hook' -;; can cause a redisplay, and hence a new vaccine is needed. -;; ;; Sometimes, calling this function could actually cause a redisplay, ;; especially if it is placed in the debug filter section. I must ;; investigate this further... @@ -1270,35 +1205,27 @@ This is done by reading and rewriting the start position of non-first windows in Follow mode." (if follow-avoid-tail-recenter-p (let* ((orig-buffer (current-buffer)) - (top (frame-first-window (selected-frame))) - (win top) - (who '()) ; list of (buffer . frame) - start - pair) ; (buffer . frame) + (top (frame-first-window (selected-frame))) + (win top) + who) ; list of (buffer . frame) ;; If the only window in the frame is a minibuffer ;; window, `next-window' will never find it again... - (if (window-minibuffer-p top) - nil + (unless (window-minibuffer-p top) (while ;; look, no body! - (progn - (setq start (window-start win)) + (let ((start (window-start win)) + (pair (cons (window-buffer win) (window-frame win)))) (set-buffer (window-buffer win)) - (setq pair (cons (window-buffer win) (window-frame win))) - (if (member pair who) - (if (and (boundp 'follow-mode) follow-mode - (eq (point-max) start)) - ;; Write the same window start back, but don't - ;; set the NOFORCE flag. - (set-window-start win start)) - (setq who (cons pair who))) + (cond ((null (member pair who)) + (setq who (cons pair who))) + ((and follow-mode (eq (point-max) start)) + ;; Write the same window start back, but don't + ;; set the NOFORCE flag. + (set-window-start win start))) (setq win (next-window win 'not t)) (not (eq win top)))) ;; Loop while this is true. (set-buffer orig-buffer))))) -;;}}} - -;;}}} -;;{{{ Post Command Hook +;;; Post Command Hook ;; The magic little box. This function is called after every command. @@ -1460,8 +1387,7 @@ non-first windows in Follow mode." ;; recenter them. (follow-avoid-tail-recenter))))) -;;}}} -;;{{{ The region +;;; The region ;; Tries to make the highlighted area representing the region look ;; good when spanning several windows. @@ -1484,8 +1410,7 @@ non-first windows in Follow mode." (set-window-point (car succ) (nth 1 (assq (car succ) win-start-end))) (setq succ (cdr succ))))) -;;}}} -;;{{{ Scroll bar +;;; Scroll bar ;;;; Scroll-bar support code. @@ -1602,8 +1527,7 @@ WINDOW can be an object or a window." (select-window orig-win))))) (error nil))))) -;;}}} -;;{{{ Process output +;;; Process output ;; The following sections installs a spy that listens to process ;; output and tries to reposition the windows whose buffers are in @@ -1629,7 +1553,7 @@ WINDOW can be an object or a window." ;; Discussion: Should we also advice `process-filter' to make our ;; filter invisible to others? -;;{{{ Advice for `set-process-filter' +;;; Advice for `set-process-filter' ;; Do not call this with 'follow-generic-filter as the name of the ;; filter... @@ -1700,8 +1624,7 @@ magic stuff before the real process filter is called." (setq alist (cdr alist))) (setq follow-process-filter-alist new))) -;;}}} -;;{{{ Start/stop interception of processes. +;;; Start/stop interception of processes. ;; Normally, all new processes are intercepted by our `set-process-filter'. ;; This is needed to intercept old processes that were started before we were @@ -1747,8 +1670,7 @@ report this using the `report-emacs-bug' function." follow-process-filter-alist)))) (setq follow-intercept-processes nil)) -;;}}} -;;{{{ The filter +;;; The filter ;; The following section is a naive method to make buffers with ;; process output to work with Follow mode. Whenever the start of the @@ -1889,10 +1811,7 @@ report this using the `report-emacs-bug' function." (not (input-pending-p))) (sit-for 0))) -;;}}} - -;;}}} -;;{{{ Window size change +;;; Window size change ;; In Emacs 19.29, the functions in `window-size-change-functions' are ;; called every time a window in a frame changes size. Most notably, it @@ -1954,9 +1873,7 @@ report this using the `report-emacs-bug' function." (set-buffer orig-buffer) (select-window orig-window))))) -;;}}} - -;;{{{ XEmacs isearch +;;; XEmacs isearch ;; In XEmacs, isearch often finds matches in other windows than the ;; currently selected. However, when exiting the old window @@ -1981,8 +1898,7 @@ report this using the `report-emacs-bug' function." (current-window-configuration)) (set-buffer buf))))) -;;}}} -;;{{{ Tail window handling +;;; Tail window handling ;; In Emacs (not XEmacs) windows showing nothing are sometimes ;; recentered. When in Follow mode, this is not desirable for @@ -2002,10 +1918,6 @@ report this using the `report-emacs-bug' function." ;; By patching `sit-for' we can make sure that to catch all explicit ;; updates initiated by lisp programs. Internal calls, on the other ;; hand, are not handled. -;; -;; Please note that the function `follow-avoid-tail-recenter' is also -;; called from other places, e.g. `post-command-hook' and -;; `post-command-idle-hook'. ;; If this function is called it is too late for this window, but ;; we might save other windows from being recentered. @@ -2037,8 +1949,7 @@ Don't recenter windows showing only the end of a buffer. This prevents `mouse-drag-region' from messing things up." (follow-avoid-tail-recenter))) -;;}}} -;;{{{ profile support +;;; Profile support ;; The following (non-evaluated) section can be used to ;; profile this package using `elp'. @@ -2071,9 +1982,7 @@ This prevents `mouse-drag-region' from messing things up." follow-post-command-hook )))) -;;}}} - -;;{{{ The end +;;; The end (defun follow-unload-function () "Unload Follow mode library." @@ -2106,14 +2015,8 @@ This prevents `mouse-drag-region' from messing things up." ;; continue standard processing nil) -;; -;; We're done! -;; - (provide 'follow) -;;}}} - ;; /------------------------------------------------------------------------\ ;; | "I [..] am rarely happier then when spending an entire day programming | ;; | my computer to perform automatically a task that it would otherwise | From 5a5fd9f33aee06409dfe2feaadaff6bc14f71f58 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Sun, 29 Apr 2012 14:56:58 +0800 Subject: [PATCH 236/564] * doc/lispref/text.texi (Change Hooks): Minor fix for after-change-functions. --- doc/lispref/ChangeLog | 4 ++++ doc/lispref/text.texi | 16 ++++++++-------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 8588ae88ef8..79177a3f59d 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,7 @@ +2012-04-29 Chong Yidong + + * text.texi (Change Hooks): Minor fix for after-change-functions. + 2012-04-28 Glenn Morris * package.texi (Packaging Basics): diff --git a/doc/lispref/text.texi b/doc/lispref/text.texi index 4ed096d21a4..bc65e314da0 100644 --- a/doc/lispref/text.texi +++ b/doc/lispref/text.texi @@ -4334,15 +4334,15 @@ buffer that is about to change is always the current buffer. @defvar after-change-functions This variable holds a list of functions to call after any buffer -modification. Each function receives three arguments: the beginning and -end of the region just changed, and the length of the text that existed -before the change. All three arguments are integers. The buffer that's -about to change is always the current buffer. +modification. Each function receives three arguments: the beginning +and end of the region just changed, and the length of the text that +existed before the change. All three arguments are integers. The +buffer has been changed is always the current buffer. -The length of the old text is the difference between the buffer positions -before and after that text as it was before the change. As for the -changed text, its length is simply the difference between the first two -arguments. +The length of the old text is the difference between the buffer +positions before and after that text as it was before the change. As +for the changed text, its length is simply the difference between the +first two arguments. @end defvar Output of messages into the @file{*Messages*} buffer does not From 2fa85638a036673b63055a86c6bd5b7b789a9d9d Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sun, 29 Apr 2012 20:19:08 +0300 Subject: [PATCH 237/564] Fix bug #11367 with assertion violation during vertical motion in egg.el. src/xdisp.c (pos_visible_p): If already at a newline from the display string before the 'while' loop, don't walk back the glyphs from it3.glyph_row. Solves assertion violation when the display string begins with a newline (egg.el). --- src/ChangeLog | 7 +++++++ src/xdisp.c | 14 +++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index 8c80a24b580..e2eb95f60d0 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2012-04-29 Eli Zaretskii + + * xdisp.c (pos_visible_p): If already at a newline from the + display string before the 'while' loop, don't walk back the glyphs + from it3.glyph_row. Solves assertion violation when the display + string begins with a newline (egg.el). (Bug#11367) + 2012-04-24 Chong Yidong * xselect.c (x_convert_selection): Initialize a pointer (Bug#11315). diff --git a/src/xdisp.c b/src/xdisp.c index e53d3a57cd6..cc75d386f0d 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -1375,6 +1375,7 @@ pos_visible_p (struct window *w, EMACS_INT charpos, int *x, int *y, Lisp_Object startpos, endpos; EMACS_INT start, end; struct it it3; + int it3_moved; /* Find the first and the last buffer positions covered by the display string. */ @@ -1431,6 +1432,15 @@ pos_visible_p (struct window *w, EMACS_INT charpos, int *x, int *y, begins. */ start_display (&it3, w, top); move_it_to (&it3, -1, 0, top_y, -1, MOVE_TO_X | MOVE_TO_Y); + /* If it3_moved stays zero after the 'while' loop + below, that means we already were at a newline + before the loop (e.g., the display string begins + with a newline), so we don't need to (and cannot) + inspect the glyphs of it3.glyph_row, because + PRODUCE_GLYPHS will not produce anything for a + newline, and thus it3.glyph_row stays at its + stale content it got at top of the window. */ + it3_moved = 0; /* Finally, advance the iterator until we hit the first display element whose character position is CHARPOS, or until the first newline from the @@ -1442,6 +1452,7 @@ pos_visible_p (struct window *w, EMACS_INT charpos, int *x, int *y, if (IT_CHARPOS (it3) == charpos || ITERATOR_AT_END_OF_LINE_P (&it3)) break; + it3_moved = 1; set_iterator_to_next (&it3, 0); } top_x = it3.current_x - it3.pixel_width; @@ -1452,7 +1463,8 @@ pos_visible_p (struct window *w, EMACS_INT charpos, int *x, int *y, display string, move back over the glyphs produced from the string, until we find the rightmost glyph not from the string. */ - if (IT_CHARPOS (it3) != charpos && EQ (it3.object, string)) + if (it3_moved + && IT_CHARPOS (it3) != charpos && EQ (it3.object, string)) { struct glyph *g = it3.glyph_row->glyphs[TEXT_AREA] + it3.glyph_row->used[TEXT_AREA]; From a706a3bca4e676dc3b6c7bb1b4a584b085364c0c Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Sun, 29 Apr 2012 22:05:44 +0200 Subject: [PATCH 238/564] Fixes: debbugs:11380 * make-docfile.c (scan_lisp_file) [DEBUG]: Also skip if and byte-code forms. --- lib-src/ChangeLog | 5 +++++ lib-src/make-docfile.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index fc6d905cfb2..d225b77f156 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog @@ -1,3 +1,8 @@ +2012-04-29 Andreas Schwab + + * make-docfile.c (scan_lisp_file) [DEBUG]: Also skip if and + byte-code forms. (Bug#11380) + 2012-04-20 Chong Yidong * emacsclient.c (decode_options): Move -t -n corner case handling diff --git a/lib-src/make-docfile.c b/lib-src/make-docfile.c index 3e79cae4f41..b33b13f34ce 100644 --- a/lib-src/make-docfile.c +++ b/lib-src/make-docfile.c @@ -1361,7 +1361,7 @@ scan_lisp_file (const char *filename, const char *mode) #ifdef DEBUG else if (! strcmp (buffer, "if") || ! strcmp (buffer, "byte-code")) - ; + continue; #endif else From a162959e48173bd77707a8f4beac65b28eaa2f78 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sun, 29 Apr 2012 23:51:44 -0700 Subject: [PATCH 239/564] Tweak page break in display.texi * doc/emacs/display.texi (Auto Scrolling): Reword to avoid repetition and improve page break. --- doc/emacs/ChangeLog | 7 ++++++- doc/emacs/display.texi | 9 +++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index 91f50958920..ecc6aa50ef9 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,3 +1,8 @@ +2012-04-30 Glenn Morris + + * display.texi (Auto Scrolling): + Reword to avoid repetition and improve page break. + 2012-04-28 Glenn Morris * xresources.texi (Resources): @@ -9225,7 +9230,7 @@ ;; coding: utf-8 ;; End: - Copyright (C) 1993-1999, 2001-2012 Free Software Foundation, Inc. + Copyright (C) 1993-1999, 2001-2012 Free Software Foundation, Inc. This file is part of GNU Emacs. diff --git a/doc/emacs/display.texi b/doc/emacs/display.texi index 84e81f565cc..de5e8df9dc5 100644 --- a/doc/emacs/display.texi +++ b/doc/emacs/display.texi @@ -260,14 +260,11 @@ placed from the top margin of the window; thus, as with These two variables are ignored if either @code{scroll-step} or @code{scroll-conservatively} are set to a non-zero value. - Note that @code{scroll-margin}, described below, limits the amount -of scrolling so as to put point outside of the top or bottom margin, -even if aggressive scrolling specifies a fraction @var{f} that is -larger than the window portion between the top and the bottom margins. - @vindex scroll-margin The variable @code{scroll-margin} restricts how close point can come -to the top or bottom of a window. Its value is a number of screen +to the top or bottom of a window (even if aggressive scrolling +specifies a fraction @var{f} that is larger than the window portion +between the top and the bottom margins). Its value is a number of screen lines; if point comes within that many lines of the top or bottom of the window, Emacs performs automatic scrolling. By default, @code{scroll-margin} is 0. From e20588131de2e57108d7a15e975160debe4951e1 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sun, 29 Apr 2012 23:53:56 -0700 Subject: [PATCH 240/564] * doc/emacs/search.texi (Regexp Search): Just say "Emacs". --- doc/emacs/ChangeLog | 2 ++ doc/emacs/search.texi | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index ecc6aa50ef9..e61bbb860c6 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,5 +1,7 @@ 2012-04-30 Glenn Morris + * search.texi (Regexp Search): Just say "Emacs". + * display.texi (Auto Scrolling): Reword to avoid repetition and improve page break. diff --git a/doc/emacs/search.texi b/doc/emacs/search.texi index 9d30c6f4caf..152ac605843 100644 --- a/doc/emacs/search.texi +++ b/doc/emacs/search.texi @@ -456,7 +456,7 @@ apply to the lazy highlight, which always matches whole words. @cindex search for a regular expression A @dfn{regular expression} (or @dfn{regexp} for short) is a pattern -that denotes a class of alternative strings to match. GNU Emacs +that denotes a class of alternative strings to match. Emacs provides both incremental and nonincremental ways to search for a match for a regexp. The syntax of regular expressions is explained in the next section. From a017d05f06b13add0164d6b3de9d96e2bad6d292 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 30 Apr 2012 00:46:03 -0700 Subject: [PATCH 241/564] Regenerate etc/refcards/*.pdf --- admin/FOR-RELEASE | 1 + etc/refcards/calccard.pdf | Bin 153616 -> 153779 bytes etc/refcards/cs-dired-ref.pdf | Bin 67057 -> 66941 bytes etc/refcards/cs-refcard.pdf | Bin 87237 -> 87189 bytes etc/refcards/de-refcard.pdf | Bin 125665 -> 125594 bytes etc/refcards/dired-ref.pdf | Bin 85646 -> 85574 bytes etc/refcards/fr-dired-ref.pdf | Bin 87517 -> 87452 bytes etc/refcards/fr-refcard.pdf | Bin 121482 -> 121431 bytes etc/refcards/gnus-booklet.pdf | Bin 152568 -> 152542 bytes etc/refcards/gnus-refcard.pdf | Bin 154872 -> 154831 bytes etc/refcards/pl-refcard.pdf | Bin 65689 -> 92536 bytes etc/refcards/pt-br-refcard.pdf | Bin 116731 -> 116662 bytes etc/refcards/refcard.pdf | Bin 116497 -> 116725 bytes etc/refcards/ru-refcard.pdf | Bin 147939 -> 147864 bytes etc/refcards/sk-dired-ref.pdf | Bin 66284 -> 66171 bytes etc/refcards/sk-refcard.pdf | Bin 88590 -> 88535 bytes 16 files changed, 1 insertion(+) diff --git a/admin/FOR-RELEASE b/admin/FOR-RELEASE index f53b74e98c4..e03e1ad98b1 100644 --- a/admin/FOR-RELEASE +++ b/admin/FOR-RELEASE @@ -37,6 +37,7 @@ Regenerate the pdf versions in etc/refcards/. What paper size are the English versions supposed to be on? On Debian testing, the packages texlive-lang-czechslovak and texlive-lang-polish will let you generate the cs-* and sk-* pdfs. +(You may need texlive-lang-cyrillic, texlive-lang-german for others.) The Makefile rules did not work for me, I had to use something like: csplain -output-format=pdf cs-refcard diff --git a/etc/refcards/calccard.pdf b/etc/refcards/calccard.pdf index 58b203672deffc327ff6bf9ccfe5d81ce85ae270..5e97c2a9d92d62950dd7c984b5ead951da7b643d 100644 GIT binary patch delta 25868 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

>p-CTk({CcMoAYbvUH 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 W6-B9OT!yAbCT50Qs;aL3Zd?FBo7-Lh delta 25642 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®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 diff --git a/etc/refcards/cs-dired-ref.pdf b/etc/refcards/cs-dired-ref.pdf index cf16c1afd10d04a1927512e6e8b132ed875f6b7c..1b5a8612ed98e566b52ec871e7980e6aa4308de5 100644 GIT binary patch delta 23152 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 delta 23236 zcmey{#qzP6Wr7lmk)@^OWIr2?`lHdA#gBIg{&sLFPMzZ){=9r*H1Ch|Z-+b&$4%PDjUOJizBu>5MKSfhwXUwB2mQnA zqeU&Z?f2pmn*ZnXr}oR{+e~LlJ-o7IL3(x8jLQX!qPGdQ*?p@?txAh^IIhxs-S#5? z-UD?vo=WYrdHdGC{_y?v(=V=B^YK<$hPv2^*)Q}&%`Q53-8uU2e!OL{utM;LWn#JJ zHv;#aRTA;C*X_GHZNsm958JODxwE*Y^wEx6_gh!gf4i_E!Cs($y?OYzEB%jt^=Wr6 z>Pa;CrCuX$k|(+Fxnb|?X~GiIp8A*E@=aj9aq{S@WqTt;-yWJe<=oU*W$(#75-H3Sh)pW1X);$W|saMi}#h$OR?i2KpefslS zZg$p=FRYadOgC@5HYXrC_|mKWzjc|ndcHlxy*##i+fLWh_qI3vUb4n`$6iUZ*0)_R z1=5x~X`fJf*Rf`K1>53T&u{;2Sn&7Ar39x(uC^wdrp}tVX6FvIHlCLHDVh)WncTju zwaSsxaao%}_p{1C`3sG*r>qKQAG2b4@ST~#rbg#n@U7WPS2YF-{9Cb#S&nm&$ec3$ z9C<@W(GaD4cl9N{m4+-2WB#AF5MZCG-uhG{_N`5rcu}_d{a8n_VkClvd=9~Z(emGcy8CyOJ$Snt^RgB(SN-y`9{r#_W{k` z5A^&zk5t7 zW_$U(d)aKYznJ(>b?>@il-HFnb1Js^&R70b2VaP1hF*@De3e<<`Bcn@wDgx|3zjWi z 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 diff --git a/etc/refcards/cs-refcard.pdf b/etc/refcards/cs-refcard.pdf index 7d0f92fa404e447ed54632c79baa491eafe4e8d5..963adcc7bb90614ac5edd219f64d185a724c22de 100644 GIT binary patch delta 12508 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 O42+GqR8?L5-M9dm$sdyd delta 12531 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 RS(q7E7;veoy863u0RXkWFMI$1 diff --git a/etc/refcards/de-refcard.pdf b/etc/refcards/de-refcard.pdf index c7a619b0486a300053b664f4319bfe6695de4a22..bccc60993f6fc78b089fe8aabf517e3103bd9a15 100644 GIT binary patch delta 38979 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 delta 39087 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 F7XTBKist|T diff --git a/etc/refcards/dired-ref.pdf b/etc/refcards/dired-ref.pdf index 18a02e28ae7213be3668ab177bc42912f33e5e9e..0f579670808d8a5e7b3c84f1900b8848e7eb1ba9 100644 GIT binary patch delta 30128 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

|8~nc-rX6i<9=(45`80*-;LZ0% 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 ZB(bQZq9`?u%fiIm(ws|G)z#mP3jm3fj0*q& delta 30166 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%0DvQLP8(2G13;~t)u^0cO> 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 OGjmfeRaIAiH!cACjXlQz delta 32087 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 diff --git a/etc/refcards/fr-refcard.pdf b/etc/refcards/fr-refcard.pdf index 91f4fafe2d04b994d6d1dd7871edade009fe4a0c..020ffbdeea055bde7cad2c0d87b665184967c541 100644 GIT binary patch delta 38552 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 ZtGFbwsHCDOHH{0LZ;ZKARbBnvxBz6BD^&mh delta 38557 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%0DvvOQJ$ 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 delta 4045 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 diff --git a/etc/refcards/gnus-refcard.pdf b/etc/refcards/gnus-refcard.pdf index 016f8fd70516e1d9bba95464a061bc12b08a16d6..c64ed30f39f2d6bc9468fdbad38a8725113289b7 100644 GIT binary patch delta 6899 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 delta 6924 zcmX@Vlk>+;&JBL@jFyu>`fF@1m!Ha3-+FQJ-Woao9b41;FU!byzA9ezqst*^r+9FF z&tskL7gILL>^S*z-|LX62foifmHGQ;*PU7XleiLh z^3LOS^3ffCDq3D`+}>zo#Vir<%g=qstOv2Xqu)U~IZ?I|HaA-d7y97g(OZJc6ZZ*o%3bbC;e5Yx$E{7s}j&zC8Vn6*}K7~_W=`TI> z&b}4;x+~J``>f@fT^<@9x|QBmOec1oS$F@Mu42`V+T|T^R7jHz~)-S@* zc~k2yhVnBvMi~C|wsh1vX2^C!ntQ4)SNerhFO*v~&eZ3etl`_e_fDCAOKtjtlb<%0 zX)6`!Tsy`hc-6Br(X)3|?FW;24X+j_%@(?HI#qY)70dNWF4qi1CImlW>gf3s^y<7- z&0M8$tHd=NmqeebaC%4QC~9u+y8eQ9>XFT!k9eOl%nF(&JZ1m%8xOy&oN9I>_x3aI zwX!zet5ersW!k^)R{c`8(*D(Ms~_B}=x^5gkhc0XYwg{YXa33PeDV6oo4^snGe5Wd zYz>n@V(pylnErbnf3B=&|06qR>LkD5@Bb}}!;#*bI(+!)RY zJZ^Akc2QfKeUW*RWKPK21=|!u(;hLkn`K#sYHnOr(0+2`;pMX%A6L27&tOmrP@4Ev z!QpzU%*iwFE@kuxHY&6;waN(jEk3#^(1BGg`GJ~hiMH$61>SxMA`@2aWZG$cX>Mb~ zbcyff#aHT*_?AV=JyB*?od1F4Z&6uWylf7RQ2{y+cwY~PaI9lCd; z^{nFVw0< zp5B`AS0_kTNGa*#?9C;5&WkQxwkl6M6eRhA^JbTJpxwsTTlU5NJ#F^)zVr7hZT}@_ z_XWOtX~;-3_|4H?`^W*E%X3B7*Z6NVTzlgFBGHXMUJEN7ugMiqFFwj}xkq`KXpMG4 zN@d=+&WAxZqDjJH%xUtWJ$Cb&=bfD7zT&-YtJ1zd!a=KR`gSGNp7nows6EpCh}pZU zx3`bo@!h#-_5lF~E7R)dfByWOqZzw*pRj5A&EWdIwZ*BHJM-48zSo_1h>=-JV8zl` z?=GzF`eh=vweQEZe@i^?u4^f-RrxD?e$r(}Pfmwt2bFhz*A6^WX>wScsWNX>m~GlN{)Qi5`e=P-ZxYOt4C*4{g&{%_^=lH;@2 z-D>G$4dPc7nqA+gdO7%#)$*M|b2l4#Xgulp`PzPN%>Oq@-)6cjNsKHwzj)6TIoCFe ziwCDN&FAm^R-Yrb;-}Holq-8ZZgwttN?ZYrVrN`fA4}Hl!~v z)fEnOt1R~K%A4;vBUKj2|1ojA|DS_jTkux;BDe5O2F^W9Jgzg( zW^JDN?Ltl2Zr0yR878i|;(F%!>uV3TPZE8UwrUpht;bG>?yj12xYBe7SAh&m7mK6I zwxoq-yLFtzf(2e*6S?oQlW}E0eP~E`QA*Yx!QR5B-+Zpmozq<`Qg^>=A#>J)6MTm= zj;F6-mJ^(Q`O3P`&hOuZ((mXTow%%Ge8*fy>kux zB-C!2s7i=DTBNY`jfm-{71Pe1sB;u6dfjVSU-;~RlAUjWewkKbO7L07<~J|e{r>#R z*YsNcJFbtB@vkHQca{u6{tQ7~7Q0-zx8;77TJ>Sf()GrXZcB}sI9qsryfv-6mB+xW z`=w<@=GkxSu9!@FdEuPWgsy$kE55(#lW{-odv_y;WxuG_-NQzUnr1DZ@o)7jnU~p# z@n<(2pRLWY!e;Ue=|+b0M_kRS7418+A3PS3IKE!-{cQeEn@;?GFzZu5h5xLEyJgV_ z)oU)Vh(8smQom!v>S@2q7avot(JbqD{f1HR#fHj>M^r7kKi8%j|mvqT(_ych&~h{^-~*l4vY{yin;eywzg=G>xZ^&ih^9Ij!InBaOVXf=DAz~XPJQsRC8SHD>~#qe?B{?wb{lxF>Z_QRgG_q#W7PCwTyE#D}= zL&ooc)!T=C5l@dD_LmF49cNpg$oj(Z0Pni)c)^(0dyk*K6>f3xghjitTV|h2M{W0; zeP1X0++(SCSbbP;PU7WX9;cVdO|YN!V6B#AXzrfxuU?ceM=m+=&2ickC($^`FL|Or zHB$5xj(cx@&hX>jip9%+>^iahz&x|KJAqHinLaw-5?7n~{u;}Ta?7R`A$_kti|%?B z_lm-<#g{B68_s1(VKCsIap<_$vI4~vuJs8V2lmgh{NtCaVicCrw9#Rqv|1Y59NQwx zWg=ZVCr;d-DYs=tw?M0S9Ly?tCU$*`0O+*dyFwh`E_>n&L0~myG)pOJL#+YE;;5%+5W$i3#1;p zt3Fw>SoT-vt$2=|R;gQ2`^(YQrxd#w%=pZC(^E|Ge{>WuB00(YIaYZ1NK#$RyT3oUc)vS^Yfo;nI~r%{VQH+?P*+5 zaI*bWb6l-*l}*t12b-quS@TJ~J@Aq(UztYa52H=Cnhf6sUhew0|Le>>!Px^MrCS8>(<4)54^ z>VTQf{@=^9^P29vB%3UXSm^xl@eZp!AzJHK?47u{{`^6Idl~EBC0_jV>rcJhVG>hw z_N~kL=gZ`IqJo`o^SzLlzv+G1px0>C{+i~g&m>+SXFk?7WoEIuruUtHYku@Z>Mz{J zxnk{HzhliiQ@jOLrrx^V+abK^)y5<}_UqHCdMT^<@!`rgr}gunX*~`oRm-tlDse-jqVLnX?zMHw zZF5)M{odZ}7o@dro?2FPI8&qpSMIX6cUfQVx$yewee2`D<7RAM$nm!LRgwFg2)>=$ za>G_1%lBWNr*qoWAh-(RZtx>(7bai%76xarc@~);hKFZt@|Q7dL-}FHh?bht=oL{Rys7lWM%eU^TXZqziPg0&2Z~ATJcW%y^pH^u?YJHuT^VvMFXkPwW z=(cCq)?;tjmlfLt9&XI+e)>^hn+3c0i`o3y1`IQES+Ciaa#qg`_RH%&zBy7;Tjh5B z+<4iK*3%@`zffAv$2!B&=4Ri9bI_C>F7f5)%+_7Tri=0o|mW{Vs)OUX*u z?ACtKSGD+|75fU`)0b;!NJ!cjbp%~1O9_#_|G9obdc}g7Qo$`>wEWL|SO2)#@z1(x zn?m}+erA!{{VPMx*7skY8QE-=w=vFVZw6cW<;t17ua<>rzO`MmYSv7?tm6Xfm+bty zgPT7H#c*foB2$q_FB)fNg8)IJxz@`a;4)^p3CpO3v2gR+g;sg5&QYfjhZ<{ z1xI^=Z*5#46j)!d?M~&Y^SWx)L(_}4dh!>hL>Tb# zF1i`4zo6$(hvXiC6YjgV9^80A!PQ&B)Ots#nyI8k``Rk;vx)zkKd3M7*Qk*G^hTL$ z-G{KVNej6}f0rfto$x*5)S9-!zVB3VzjDQudF3(-3-8@ySjbUcf3!F+Q|8sz+V{8T zs61FM#$Wr*bmf7-l8Q4IW_sK1t96{#RJ{CI*L6QunZF0C9vwB4w2=ROtM__Vyy5w| zGv@g0Z@Q(#eYt7Y50TpH&_ixn%j3MKswU=ehX|{yD@;nQlQ#7Yoigz`XUdX;-AB@r zPg~9U`>Q+HW7_`GIE}y$LQ}1Rd2~-L7*{o=0=*?tm1{zDK-x?8HJjYC=_Wb%A z+cy};x!ykztX?+P=W@j)tK02E*YZ-Qh0lINW=@cioCxpOGRLE|})wlCt$|n0zz8*ZuX9oKxcRBQ%=2x&BR32!4J3 zwz+;>t9Iw339e~Yak&W_HR`97Ju8#Fe4wY#Wr5dbx68Ur>(Bbe-Cl0J|4wJ^{q>#< z%?fdMdmkK}|LyQ$-#CrmGp2ugpB=mP_f4Y{2aG(NM2uerRn%|0=c2@8m)NL(e*1^^ z8=1>@8SRkEGCdyJe@X3N#nlUXvu^z9ln`wYI-<$*nr+XSO^1ahN)%q?_sm%nRBwBx z`BsB;-@-X1GG?}7-`3n(Ka)p}KRLKfW@CUQ?vt4-< z-*wMnI3w9|EA?!W%Znu^;;%`cau$kNwd`tr-y`3roi8PJNn6xktvl56bDGhexCS2$ zHybY71^RCv*>Q>lK0H3-TY&=SgZbqzD%8?(8yz^JR2v_0O@?xE@ zn``%({63@k=5wxj$u^c8ueuurrSEkU7T4YoIk0}W=z-`Pz49GKS5=qytZ89>9qn^^L-^Wj=dSC1pWxfiZ`^gqyR_7H{-Zl_SzdQ%8cm;lf2H>4Ulx;NYYDfOi{c27nt%M!gVNFrSN>|xhPkP=^+6|c)EBZ+H3Nzr*>GY z2b6@La+axIAX)f+Z+-NadjTSi)g0lQxnK6&lRhXo|JT85qR*VGLzi3a-*kP}OorLA z<-R;^NtA857Tyo0rKN3%xTvbV8-#{L9{{y_4<* zu^q5soR~H7r><0| zDOignIrkLpytQxpq5A39OW(KdDSKD)=!wqkZ-?$)dEawo8Dr8G-}f88?c87Tv$!H4 zZSA^;7g!(dKG=DVZ);+HW_{KCblbLr2YVwQwoGMDWpy%hH*+c7{xS1VE$_m{-^`bM z-yXkF&*Jm&CXej&`{G(Ff4^S9KR4_G)7*<|?zX8!PAh*eJR#vn&+S$2@qF)|B%ifE zP&EC?H{m~_zjj7DA3X0WFMjEB#(AH;Ya_k>C@x^QVe@`^^<43J+Yab1*k=7@v0P|R zl4q*Ao{*mK0=cBMTEtG<8PihQ?@tYhY|*VS?sI17j0&^Z++7Ha4(;n&$=gxUq?)sWF-* z#-?UQXr44MHpTR$v6+#%`SidjCgFOhxd>y;j7`zQ#Ms=x6g}LH%}tFl#4HRgF~Y~f z!Wbvb22eBHn&r-A*du)!Oo7WxFoTtq@pM_jmyx~*u>m~OI6j?-;E0Z D6X^8p diff --git a/etc/refcards/pl-refcard.pdf b/etc/refcards/pl-refcard.pdf index 47299efa1bf0fe4db68cf208a0fc0ecfda831361..ddeeca97daa9cc463118bbb2fb3093c0e1aac2e8 100644 GIT binary patch literal 92536 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 literal 65689 zcmY!laBiKoPeM#q-|oY@AyX4m|8v6pNA2UiUNd599sW&QH&-IxY_vv8PkIK7s z6Mbqg#(i|2!*~C;sohmK>8-zOXZTqy{PS+JMbqK){s}DthrD<0=2D&#oK`MYmOeL8 zZ7tLOxp((=)j!xO`06}=J#!1Q)vbfk$1H=+%{*A4?f)%?=bm&$8K=tc%X$}1daJHE zdijviy`qzccZyu+`Bu(WeTi#@W_i9}tMr_YHgmiR9`5PcGR=WkxqSVHh&Ic2W$}-a z*RD+~`Yy7Z!HOxJrRPFH)U&cpfBsy~ywmaN*6AJf2{!V3t|k7ie$Li=`yRKcgyKDzlw5`JnF6xYc2;_OG-A?&eW}=JQi!q-4QU0d(eH0bABKHmoIWG6)Jy3 zgCLNc z7M!3EUe$2)xszbrZwh(oh8b3bgpFSMlQ|-YcX4?FgA>rtvH+HLLPN%(u=L_tUXL(|eH z&gYr%Vbi2zE~Vaqt$iNW6AgOaZFQSbc(h;WMn{!@dh49^ny&({p1ic^)p3`2rCN~} z4y@Ck7+M-ceyT5Q*c|uqh-0WH+YQ6BrDDDQhtK#FNH>LuY*bRgB*UIzXvsmGp=JMwHiqwXg zi-KgCI&*E6Ux{3tn7zEg+F)k!2JWnq$rZbP{?2Z?8o=ld?t4qnNo8o5Q(bMC#V^Yb~&*jgV7 zC2^Fj{m%AQ!~HaqvdWJex{{L*L@l#)yrNs?zsTtOn|rn|Ctqs#`)XQGtxc%K)o_c` zwHJ4|yxW{HZ;klG5RWkZNmq@+esFA-=~%{7xiRyM%nqqTvL3%)6kXAK;_++Ve8H7E zOZv8%F{MpD^&;D&*jsD=Exv4lzaLd&sy!8SCOL7wUy-Z%erp8Rv0J+Xv+g}Oa>`TB zc)re_SwC8yc)mJv;r=4!6{Y+#tlqI^$M$z0g~g42ZMpZg$S^dIrTqCpn-H_F|0MoD>sX+$ zcxd9oKdjqhl&p0<5;^^(|r*pi)3OrGTpb;1%7Y8!oxP8yt@t8tp`Z5FwpE!+ zbZ)XbOUb3zuhtmy9^UI~_)h1z$27@;Le9+{ck}%=K6pGwWS*M(era*_qM$SfvG=@g z6aD;}R&H6s{CEEItfrIe`<&Zq*zZiYl6bJ~YOeaEeVUVkp1xJP;Mbb8gtKzGPu%iv z3BlWfCcaNsc3xr~DYLWjg0S#}uoF4w1l2U=cP@P)F(HymD@Drw(A>s*5%;w>=V-o8 zG0fH4&FKB+?WUDGB8^4kr!cPnsD8Xc>B*X7MHhd3uDn^($?x%C2UErGJ&�R2J0O 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

>T{K|z!e`i&G z-Spt+2bp%pGKa&Qeit2Oe_J&0Wf?STS}bt3f4KkGNsGP>OsW~ptf3PUIh0oH z6itBzC(e)iBQ)Flnf0($q;mCAfmfy1|MHA2dxl7+Bgj2g6x8995yh;l?;ur zk1<3*Hz1ps8gc2vcM&`3JL|jZLsk#@fp-u?_78*i4Wn%s#?rAw*%q7++XDO@q^PQ=#?o(>n1E(dKKB1JgEMOoCuGx`|=^K_IyKBd};0J(!JNu*cY#RZh5}={{H)ach`SEA(5@^rZ)NJ+NgJuau%&+$m<-+OWogz;^=#{2lkhKoOD$}a0aa&@u9 zPM>X-Cf9UrloYiJe)mZn*USr+O+PpDbJydh3%P-f(SHxig#S4H=7!iSdFT2Ti>lUq z-aBHG4ek~?dUPyap6b43@$+pjasvx*Px-R&lD*Qg`s@k&AFq1acRH+sXV1&?+pE9K zPMjfrDCY28B{5gszBnP_*K*?T_p2tp)?0dfTSMsWa+WGq*7baxvA?q}b6;L|e#T3i z?!+*o^G2&B)Sv052|YgQleTB3=9#QC-p?|dr$rv$VU%}yQg98S+m z`sKUx3*Wa7_p3{NWO^uu0t&-9%laBvddML^9odJ(K$a{-lwDqTB-#WywPxRo18FaGE&)9U|VMpACzp}gFxSz$ivmpgV$iC}ck z={%l###we(y;Jzj2NNn&qUNsfzn1!jaUB=esw0jjC#8)2a;DA8nELR??21+4eaBC9 z|50$#-za?) zcQ(HlDJa)FGs|Pm^K*sso?pH^A;a-XWUAwr4U((*PZs>+pK(F&y|$~e{DKaJ%ZFn- z)p?WVB?(MqO1UAwS}CpTZ3b7snV$X`Dgtc6BFzT-)*J|5n7eqQ&!bzSiZfC^uU|ez z?Wlr2m)yri`CUmz@;B)V>$J#@V2)J-_eHKd<@Irp;wK8RHUKQ(GGv z`nNGx?f%r)+w^$_w|p0U@^gP;>D+(vzoabK#IL4KS+((v^sPmIr=4)Kj^MlLzrT5+ z>%|k(zMOsff9a3cTSeSr^?h$t7qIrF7e8b8R;iIG7+5<0Z>Il_&k1|Z?LMT=yyV@#+oR-1U5?rtxo3_h#1YY;s$CRc%?0@!HEr zFSnfIsXd#n#dr5-X4j3GALTtCoYQo!RkPdw^@#e%rd zF0aKKwtri3KXU~W`<$eGg|8fHlGg-&$-h5q|E3qcla{JpIBR;P{7=oxiYJF`9H+1G zUe9ojqt(q@?VEXERPvI@s;q{alb*3x#v8AD%rAN{_28MdEE^N)MBX!PUoGc+5~!A+ z)O_Trj>}=Q{*JGPrxm8gRoX<>Fkj6$@HD*Ohq}5`)2*Z4r@h6WQjKbk_*%Fw)Q!XSa0hj?QzNt|i&G zw{!BXrxI$tk1rnei7BXTaC-g5yfny6yrw^72ACM|bbSP+$u1OPN z^X^=faQSP5MCHk;^)54azUg^-?{nM0|LcX_0?R_Kyv~!{wSaqH!288IyveaTEQ`hc{L_P0t6FdNF?t|g z^Y-GlM`g02F}goe*qsC_B#mCazTqsz!DgzGzBFz5WJQ(J^K3dzU&WN#J+Z#B<)BN)lN{q}ycT1isTHf^ChvpQcW2dARw>y4rtv z&QYRwBW46AxbWS6Q^=92-LXC9#zHQh)}NwxoFC>N+u&A`HEr&H|1&!(*T(9#CY%31 z%WZq4N?CH&S1*^;oZ#k-$3kZAQ(x$iq4~Z^>4Dz&ALqrDZ=RjCQ|h|M_Zd&^HcTn5 z6R3RKy{*oK=%lE|(?8X}bcx9=ZR!u=oa@@;E&hMa<#!LRzK+`Ex2K%d_ETN@ zwcxWaZksNMdcMM~{fq8n_OIm)34gcWicI#->{ZPFf9>6b?)}`~I1b%WKO}YD z%MWVz3x2Iwcgtx4&)WS~EJ_D2Pe}5to2{lVHc3&{y0$@K<+qmOMP3tZxE-U|Ig%Q+ zxylX~)lO+uNMB&ETS?+>N6P$}lSHPi?23`zk)oIq%%v(K{(RbW2i@@fn~jXD^2%Qv zTWsxDceQr)#ygWb(x*joeLWd=vwH80k8@*Y>G?hjHV*X^IPNNyEImsr`&GV=fsVR% zocg!mPT5oH3zg4h9Zfu%+BsqFnuRiAM#7$} zpP@^cc$Zio5pNEhFfT}=aIbHJlk1MTvpbouZZzz&PxM@DQ68(;yXnS^cB_Y{f6X#~ z6X_dnJ!#?Om8z1doJnt9CY!SJb!tb<`5Pg+WcM2H|CVxPO;zQ8+NPe~RDMY8!&(lL z_8G?an*I2uKfJ8E_V@0PeQ67G#P{Ct^JZLiM}DEt#|OLozY6Q_2xwVlekY+cu@9Y6QkQw@RD;#1=%7ypl5FJEGKb?pu3$-5rt z3B9_1p=EjHmr#X%|9IzT=|-QtjY8j)SKaw5KReWQ<~#OTH<~}}-PN?uY|>oo3xDIM z`+c(5oOsZt|H#ageI8;7M-$%5hp0Td-^8u=e=)0YRLc9hhN?bTX)_amYneWZJ zMKx36_x^d=sry!H?~R)k9`Ssy-n_~2cqHT{ygJKEODns~?B}oid!pN%Ic~iUe&oI| z{h3~!?vj$~=m`?i^922VuP@Keh?^GlRFEg`j*ZMdG1e@T`BmS;Vt@VIsoRvkR^4au z>M0Y}^`Gfn)f~1$PwTR@MGEg8?>jReyX~m{zxtEwKI?~->K|Dm&zLV$gh(vE5h1=zg}?le(8qV!5e5-jrG% z^Zr|t9P+qt!iE=bZ%Z$l9rapDn$@Vg;=->#ANEJ@XZvefD=7NQ-&Bpa_Ia0yg+`LS zwS-XVC#TtOepQ})xF^Qy^M%vt=}twv1RlJsJhb+WZkF%7n!IV3Z$;hT=CHB&^go_0 zeLLlMo3GYfqq0<0;#xs>_zv6OMl%x+O~1sNYbo-k>dEOnY&DS!?UpNq8%V60eR|dU zikj(#Hx~UUe`mX6iOr-4y>+ko&MGhVQT+M3E0`zydrl3zUy-<-&F{Y--z{0d_wdTH zr0sJuY8UA}E?=CcDc*f=zT6qNKjr)xR;MzpW+{JXWpiy|XPjqR&E6oYvxv`^mDd4F3m_K`eS7mkV}E3K%&pzq9ekD^sO-7q@K- zS1WAPDNQzKnH)KB$y}e-^YY82$}W4z`7SrpDLhozXCXU(@!}aw$2t2sH2z*O_1L$< zzVyp+L$g=;FSs8t%-G6)rT^vc>__i|E83oFzgOOpR~L2Du5{P;S-BgX&dlu;;4?mu zUAx78`QNCI|D{h?Tc3;3`M%gy`++5 zvi@Zg-X!)rJ66?IOrQjLP3VM`_vwg|Oi<06aLuE_e$BgJIu-abi#bM(;_Bt!O_U-&#`$O*BA=VvH-{S7R_4kfm zx%!8}wzRsRQggM>G@B=0(p&#w`khJ54;KDiX0zUCzq7jW<>^H#waPz_<#34Jxj%>F zcH^g`F180=*2e6gx9v)b`a%DdFHY`cQ-ASX>dS@3Tm7X?m!`G->{7Kl&s7?zQR3Gzan zv*DZpBI#o9%4WP2D{L}Mc3IM1p)#XOTJ&hfqqQ0xT{1}m2N~VoNirYiEjoP0CeM*2 zu#baDt7tI?PuD~lwcR_zoRjp-r5|rRcH~s{=isSt+m85_m`6u@t}0uWwd&XU`hVZ| zzps8@9e;VsO^dE&nLAf^&o*;fTABAQE4O07j!!E2zMn52|7a!@F7&7Ni7mfogvWtH zYch8|P40h`K6%40!8_TWy~|(DT{yAuWn0swQ>M3UKTcG1JZKfY+q5|6xqjrP8)cy_ zRz@lgOE=zKa*1`da){MK#XHwxr3DsUJNo}*S!l(MwX=WpYebuuPO&m_lhx2+TlMWl z2;)Mn=y37q=f1Pu{eK<(TUW&q!0Ph)3TIUU19N&mL!rszwz%w8Y8?&-0K(>4WN>y?$*pIOtk^U|G+f9rns za$Xc(7a8Jz$L^zW<*o1bC+a1x2RJlxzAwF`A-+#)iuaHHf`G$%(w*HE<){%|Mk^FHtJMGu4So7|61^bPMjl3>y z%hrC4dAob@GV>4)zxw@NEN454kDk!+Dp76iTuZoxLnx8$g96~i^-Mk zbBpb_T|HPo*Q(R_nb-d06Px0betOku@*J!@(R`XI#G7Tsi`Cyk($wvDw!YiZbL_Ox zzsP^AM-w%=&s}hK;#j`wOCw8y^NA#d%Qde}+#gMOdu!d9?v=HY@0T~Q?>=`=z%IIY zpZdhp>r9@wGOupsnOh_#%&uvwT3N7Q*6P)7x+NO2He?-AZ793Dv3FP2()jl4cBL2h zaP;>7}dPNi*%r)MOeP&Cn; z<8@|Z+^zgcKVOwQ^)Rewcj5Sb&iLod-;cO1^UQSHt5_}gai*7s&V+9>Q=-3iK48B1 zfbZa;ec=)@21>e@!<;N5Or0D(I~(NQ&F@M}srU48tWu5$-dS78+nRfz?#7$#ZYvW{ zTy}dT%H?v->JEqFui5L0L)mw9{Cze1PQ#l5)+<+4oj$2)tPK^~>1jAS!l7@v|K*w6 z*Oxw=^5^%7&(G%WD9l(>BYosp=kDigBwqIf&T!u+lj1kudh2PCa>g|UH{ae~;jr4$ z{KTK9^JcYpq+U!rx={J=+k9@>Z#xPm`|3HUO`f?r%-HQ zJW+8plD@Fzc}jM2>~s4QIUm&Jv^!WQ3Z2$Zd+;i__IF=N0rPR~Ukf^9yV-0zns$8L zCuG;PJ#@-6M@Es&?m~+5q&H4`tJ-(TG4kWw$LjBxesAn4nP|PTT2cDa+PGB>hh_5B zS3A|O+^thvwne&^W6npdTe?d&o_VLaNTL7!oaS%u zznX?z)!ZvtviH8!pWL<+?sg$REOsty<=DNPA&PG=pM_-lymy_qOPy45_x0Ymp?&*8 zqR*n!d7eK)c)~*D8`{=wF^_)}x{LpuxJ6>;V&;hg#YRuR>69GVy4GWA_;H6cr#?kR zXUT2n6oa{s@NJrC%CjjqZRcB7rft)l95ht=pRjRdTr`Y6!nY&skU`=*AE$5HfexEp zcqh(2k-Rf*%IM#KC zEd7<0$iDmSAupbTYvuX(78j=mpRqf)InDSCvl+YQQR5G3)#@>O>SX6Ig*^Dv^T||b zO~#SV2V#qE`Q@AlnQy$dS$v_>mEwM0CBJyS+9q!Iof8u5{6%69>h9ZJ*8b+sO`%Jr zt9CB!R$iB~G@z{c=z_3Gn-@=b-_H1=f$fFphN7qGM#)FIdhZ)o&C-sF7eAjZe(p7& z)ywDNB2S)|8?D&=`^m|?z8qQG_X1ZAFxH0l8MGze5X?TNeC?*GwbFWp@E=bKm!=+l z8gO)5X5T92Ew>n^n>*X>uiDPPRA&B}o|9)HBzN{|&TN^UxR)vS{gmnNw5zz+91HpH z$|3SKMr1bEiRG&kRJ^9c)3pIgFpMp=_oL}&yy}gdb@HL}t?*ENm?5+8ldp<4JoYWIj zb)c@d@6h|_onmK_zFtgEugKx+f4Io*M!-I~6D}WW>{Ms{mHl($f5MG7p^KzG6rapD z%=y7_f1QSAj!t{pHqUA!4LeQSN_}^olaG(rEM=--|IH%t&i0kx;~2p`J1b%zZdj^V zu))_$NREw9-)Q^4JpU%5ev;jI#_!7q?xlyg z-B+!DVp1`W|KHS*<7%w`Te$ouw|@C)r=!$ex4f}Y`$un~*NTYGTs@*{52 z#xg2Dg6HHMDlm0h?dE%2SE)zHdrRdB#V->Jj=t+q$p4UTTfOJr+x+Z|m5;l;jQP^V z(nZuoQ&Qgh`g{3_?8>_S`!F->p{d-BwFfE^1U^fz;W;9Dmy;=W-cUt}S!$)6wRTf#k-zEQ-Z|bzu zKF>7fADB72vf@W%k9lOof;&k{u78EY=ASFW(tAN#7LT|05Ylai{RSX`1?lv$jupID-wq@R?SoDDfRJ1Mb9KdC4&IW;FW ztpvh?9I*`&%uX$V3umX6KqTNR%27`ZPsz{8Nh|^#9uDnMrB)>8B<6w-4=+oFogJQD zl$uzQT7=~c@zmmCYzK*#<|d^U6=$aB5qq3CXe|!xSn-0K(qjEW{le1J;*!k#Jow4t z5C+(5#2+eNnwOGVRGge&l&TL}tx$pejB))c^c4)CD`Aj(e;_`|y+1Q^W90jxk4CYV z2p``S7x^uV@$%*b_8X>+0!)gWEO{O;EF3iWT9P=9NQm#ey{T*V9o6vOCwbn}X5Z1y zOQ0fzs}`OO6_Hcs{K7wBr%!q9)zoj+@Atgj zq!XgS`Q;;5apC7ltQ^jJQ+_BNNu7K`JwT(o@@{IRN5^Tm&*n??q+5d)ssz30&i_@_ zdU{Vy)1DZ!HN}ySzd645Id58W!B<{?KF7>}yq{l0A4=A=BpT^Y+^^vyq4RdH?6u#T zTka@vB%R*0;i=N~4{zUhhI@p0g`ZSXTD)h`-s?wy>^NE5S||O7*^DiZ>z0g+(5}*Z zPo~$+{gik4%5?F4n<{=y3ZH)NhT-SO*KN|?*4+Kv8=HUZT;FWr|6zyjtZHu8wx0Ex z7yBWjOClZ*}L-f-F>9Nn3Fr09|Ip{X-mbJXuC$ElYI zXm?CKqLpO!(Qf0citY&KGpg5wK6jM1NPlEBoG;;iL$KzNTB5&?!Y2;)CKWY7k%L0c z9O6kDhBGDHbW~(IU5^wb85%Z4IQ6JZ6I$GndL-jfauUx&#~#%(A$@^)EN6p1GWegp z{9#kY%{?-QWS29}Gnw>5`@M2p>s^E0D!bqR`22J0x5;m(eycC{P?tSva7m>ix?oFxI=HzpssJW;-PleDPmt794KFP0{U^;Ozj z%g;H^U8e8xGCb4%*XzQYkC*rR%iMo!aw)U@vS|9Xov)6z>L1%zQP%XA#S|1>|nvcShV1SYoBeZUt^Mh$Q6#RoA*yXa=UOzi0{yi zE_s;;GMgUxwr}`wkpHN{1Xq&D&{w{KUqhU=_+ZK^QsYn%7U-{!aN zELZg3IG~U@LBX%Z{VKC9clwPUCH83|k_&fFEI-eZsDZ40UT{AIZ>fL8A{3!I@{r1I@PulM- zh`qb+Pr>s$JGH~lt)2aQ+3o6ewVPF>ca|vUujiE8ck=n8ozh$6uCTi<)Bd}7M(o+$ zTkbVD`E~TGEu5Mmy2W|&gYF4?zQ2u+c2%&nQ;MB-a+yL=l$Xwedl3wr7LtCye_elX zZ~JUx$niAS)T7%NRxyW6|Gu_W#m!=~y@8alJevY%?&G&_Q-U*=*Vr#m`2R5eVT47^ zx$`IfCFk!vG5@YGqY^vo+T~}=GMslv{JMPE{alRQ-mH7GS6^Ef@$CCob)WhOi>%hLr>8Z4JG(pa^GZ|D`=X4$ItPg162=Z^EMKFMWnIeIKA;FMFm zkk$R8aBduT6Z|z>Pk8!uT$dS#~CsjX) zSMB}%N%i!#x_@`~t`_$(|E6CmT_D6`dMI~qqhzvGuk&V>Z5Io8Uh*%}$@{r6|8?L$ z9x3MSj!(^s4y0aZ-94GRX~w+7YaLg5 zFNuZQCw@P{a(w2k5AVVbL`n5k|9f}LF@MIlId^-vy<5J~T`FsG?fU4wdz!cCp38QN zNO@AMZ881crb$axm!%opOSN-obKY+8=xxLG`tHAW^K94cn8~p%_}`%mJM-+?&MVE_ zGN~k2VnK_8(BX4}M;HUW6C=Zt6^l(?sH`~fbmNXs>)&2IWtPbN`tpm}yPbBgdeQ83 z!7VgoyUm{IqB4uqOb(hZ$Ow3=D*cd0Imh^umCpu|^vh*0e8aDOvE=IA@Ggyi=AUW( zx2qg<<9=z^Nc!#ndE-ivSyB<_Y}qhV1NAv72KgFRs;U9!ewh3e`}LTYcYc%Fg6|i1 z-Jc*_VzY7izBNr>*R$S=Q|GIAI_2YZF1ebsEsxK(UzF)@EB36l-R8{lD8l5sSte(T zN?WAC{YfX%_WWgYo!nu-8n-Xqro6OVBA{dPBvmc7%eU=gI98-Sa1qVke2C#)v0q94 z8@7de<#!fT&M7d=$Vf<7`rzhssZYJdiT7n*UzmQ~z%ucw1OJNG=NHw^Vze{+lw~oq zQc^B9eKY4Nt7uV6*10p8&Rc{;rXM)ZUa_RF<=czsxf`S;8a6YAFvqf|TGw+51@ieb+FTuRSN{ z@cnH+wshI{?mH(uEj^6+d96b9YWuKa_qA82BrAogKVy}gCSE^9_B!h+2hkI+w@i9< z=Ci$2<#8Vaq21R-w_S=~zq3!R)<#r^PrpAyXZ_`EnGzG$hrKp&eHFBT^-B2fKW3Zt zGFG$n#*}5gU3`1KiP(z>XOHk>i4Iqg08nkEyFUz{%Ne&Z7%?fy{g3UVhG$U6F8q{@z#foLBmqux(h#EUYxEsco^j z>>m$p4=$aj+Dw9P#3%gWn#ect;a?m7$m;@8-oMufeq!^;;Vgf6Q|EQyL_>!pwh2bh z{5^U1Cj7UbbnU*cfuR0|X|EUU)-`LJS#EMZtJ=HY{ggH(_Cdyzl&_A-6HdJw=l=BL`4l*6USLC- z<}w;NwpBDLxyflv`!y9dvd_wtVFAZAV;3S+j;X1>rje9n|dnWRr zF)YvFO#Fn$e=|R@{s{W~H|W~6t<%pr9geiK>6$3H;?R9x-h;QjbN#eEbK-f+tu$Xv zwUT$J%_z*3U6ES7gsE^p*WTPtR||p7bJj;qP(JCU#k05RNX24S#j^_-raTv!_Waem zgKhyHUn}hYcLzD<#>OYrdblxidWZyV%ly~LY4$Ln(%I#8x1-&Kz_)vwo~m~z{JfzR zu_|#AL#zw?<427`Di*)La!p%4&F9AzuN{ml96q$O+`BvbfW-cJlMiIDy}bBrs&HT7 zT>DzFX-k#sDnxI|zFxI1KfzU@O5T`5c=~~lU)=gzz3=}&@Z)dn;*YmpF1~FRZCL+? z^+iYEW9}8Zk3OGvfVZU5^hHD8>N+PADa*&AYr@)X=WwYX^8CGjz2Whwd26~n(iWHH z`SY=zKKSYI#`u6&+*|&AdgI(Zf3uEQoBP>fyK9$Cjg?#QPST8P(W$7<#%s8eb_!}$XUE-K-4~Q$ zF{$P7y1!o@-=Frcp>2c4r}IbnuSqh`<5IU=`8WB~!Fi&$@9w=<-&?ygzfPo<@!bA` zA53>@8p{u|*qfNneVqI$^~I$p(|*`CR2BUFHTPP}vLi*?7I7%ARtt}s7Q(mU)u&Id z)I9%g`w;6@$gui^Xjm@um7dho&)CFSC625yQZ$t5aF`Lcr1$frw%p@Vk99rP99J+A z6PjOJpYFNc+e~;>+%(B)zLibRS-D~J)Y|uMpZ@Q}=GQ+y{*9eq^8WVIeOFIko_lq{ z)GyyJ$nAOk_SM%@TfTpL`!eTt^%=J5{$H6NZGI~j^I7NkH;@0pveR9!*Jd}J_N^|A zv8d>>3%Fho2z4Ze6NuMIC)AsVE-@I3D&hAfB0JG7*_jpa9R zv0PydY2C6UNq_!&>*|DZjR38~4ja0BPk!m2-q75BzR@OCb#jbsv}B~yLc_IRyk69H z?zz78;^D*Dk8`3=?PBAU^Er4e_L1L(-b=481gtbM*%Ec@Mnvr06AI=g)3!|#DzhlTZMu~X5EIUlqF zEOxwoohr9kobP^n{sR`tZ!z{2Jf9A~n3t*2!RoYezlDK_OG3usnpv%)L2;AJ_L&H+ zU=S6Qliu;c@CJAMtEMNV)1s9&eC%U=_S&al%FpTi{z*cui{~l7o;&|CW8bTZ?>4+# zG|g`Hd)*VxNlzXoN?9^(&Ya3-%NqD~RNhoaKCLS5TMR?U?$+Sf=~iRp%~F zSIqqPwAiU)&N`+Gb!8LEV;0Ql%oBcjXoC&67cZy(+UboJ4y@54;iegBf!h@#ZiO$u zAN?Vmt10q@){m1c>s0n$yeU%tv|TdpoaA-e2e;0wdE&KGO-$nh-=syslWiwPALH`* zG4rhC)=XJz3+v@x+Sw6mLXwxfZmhZCZJQYx7&%e)faGSY3)7xw_B%vglhc{Bxm?!q z;m%IiKsKKrvI?t>R`*D~*mA13VB5s+b6d6lC7s)&A|16#rFqg+Mx9jxCmMHbRWaYa zpg~hFGwZKVz;?bhG23&V{`z_EwwLwdn{VFK$X*Ecy=1h~N9MWx``uSB@b%S}h<}pT z-_hUJRA9`j4)ik{7C}m}>2p?N|Loe{N`HA(xe+ zuAZn%;Ho#VXLq)r;>w=6y0rDC=+6b$b}DVtQF2}C)&0J_jnT+lvAbTo;*Ln3MC}Bf zS1ht~ohF=Mo3LyD^EVT-7B?0vc<=|Q9#w9CdzeUX`qF$alih@E z4#V?{C|G@sG?ZK~%c8eY`%ufq^J@41EFgDqZ_0R4xaFnclc5w2Iy_YRi zZEL48&(W#i6ItM@B4uywI8iQG;Qbo4&%$1pzqbBQEpg&9iTa=}!1#UQg_rBrDeTtS zc_UIc;6>6VVUgO6bMq}KC4c>6xT`mB-GjON{&atwemX6*w!v;uPRAA2<;yguIC!;6 zE4}9Vy6ar>L;FRUsy@;0A36$fbf^De2^J39(bSrd{#N?K)B-L~7VA&WtAuuOefm_g zpk-C>I-bd1k6LF-#Ww~gef&@%aP1P)tFJ!0A3T5b`uf4xg1YOnChOXw)-E>Bu#G;* zc;QmPgDS&Rm#<$=9&xry(Ejk@-pgqh@;|t~C=pDHX*nlexi-Cj?qAve4~w(s^DN)o zZDOe~eO2G3;~i5k7Ov#Us@P>=t7*);#Ah>d_4Mm+)L@5 z>sRlwTE8LW&F0HCmy&J-GK&Wsv_5+F>0#Cn!BX1}eeeEM^7Fuh7|~dvxl^XC^GUcM ze!_jC)Ov=%a|%Jrb$lAPPv{TcsN@~m5v^bvz`SbDo+YOyOqf6Ay1A}RN`v$nrX^=j zwCBc%@g6#OsoZwbWuagP9?@W-=qT>DdWQ?cnfTs)=oajBWh?Zqo98z7=%0%^=VZe! zw(i`;6u|g_>ty8%?HA9d1Wd?y_UOfn2+3_LG+JBNW{76FzE@wWqT#q?^BS9NF>6^_ zt(Ms*&O2eSL+7Z`fn04~ugRZ+HebxE$ez5A|TsmrW?e(~Gb=b^40T5wNklzXq~IC^q2R|r3q;avs&id z>+uX&))=9+FCgwJ)5n4t<`?8-4GwYrIe5GN+w9E+ntsPl#@NiAAs(o}c;(R4&ld%r z6cpZ@-Y);Haouyq9#?I_b)HXp!WM`Yuv7{9?X7;EQXI_T(Rb#Ak5^K&6Z52I2Gh!8 z>o2hSRsZ>Xxc2O$hNLp)T|Vz`m415m_V4lC-`?KdQqlNaZ2dlwo#~2wGgha)yyu)< z++BDraO*_ZLawP=icOWdlb6NbWxX{wTiAQ)#6r%6by@no@}EDYfBY#arCQL}?IYx# z6hS-!gQ-;lTi=Ofol4VV71>sVQ6c$#&w(hk44 z8Bx;987mtuNq1#^)nx7bxyEDv=2PqETRxMXZ;_m-eCXt+kDRX2nk92vo#w9-ViD7d zlGt&sEiT=z@SXFOXto_6)M8q`i4N4Fjrk`MmTzieJkb85 z%ZF*7Y{iDMfE)hB`JW!PsIR}A>3S+iX5ow#7MZi$W==kGX#G6B^PZ=sUuSr}iL18M zFRd;ra6eNTZ@~)ITOYUIHZ5ri(E8{bkm9nuiNh;SN&oiW-<%p2k2mKZ*Yn&^Ul4kr z@sQ3|t9HpJY@Z`9{8Z1Ge<(U#)TZEBaJtFmXH|2T{(kS=&^3G7uh<6Jgu8!Lwf9CI zE39ja*RHTXod0vfDch;hy3Fd(dF2Kh1;1Huri*c{ zxM3jB(JA#@b1jo~{jKC zE?oLQH9pI!Nb2#=UG7yLX?wKv1lLcWA$_xA$LfV1$G@DJldR1BY0ahtK1&XsYVJ3k z!nOha{`Up{EUf$R=;My~T87QOe^!gXXju|stTd~-knP@Pm7Li7g;RaHX4ikZb@O(5 zw3J`z{5=fs9{u|~HCp0Z+rHgD^mmtOe`(t_Nh~*NqtblM-22h>G6CDySMJ%H^SF(F z+uzRPwwVE(UgfV>bKNSQy`i}vc&|0jk>l@!UNc47+om<2x@Qp5@NR2wboR8SC2{8L ztk+k5ICeahDSl1znY?Mt-ybj1T^JE|qI&((1LD2smk7D;ea@xYJAHE&-zN3h2NLhh z>YV=X`oH(B^tK&)XMQlVP)WHuW7pMJcbpbn6nRvi?O+xv z94o3e?IiQ_JLT<*A0ElC|Mk-4MQiKaGyjfVOMYPd>e?gj4wu6*<$C<l|=mU!iL zx%g7?%xAZX732e^^KsNZzVw&L>4rh4hOx!x!zDYpzW+`ud9hx=Qs(S#?)t+fXJVIo zKlWNIJmp7wXScX_>W(+T#gn_9EDaQG+>t&>qgf@eP|;|PWYOL|G1L3&C29+EOGWkm z-MO-8Nl>NhmAnK7)1SJgqQ91{YFx|wI9b{K;h!Ca)9!O#-J-;p(&V9~qQ0=Xan|(f zx92de-B`BmwS4^MM?Z^x%($~wgCoVsgVQ5a)g>q+kKgmKz>j9;Ux^PqHm^UrBdh6o z`X6`yUcm=uf3^3vPkg+#ZI#An#&`Fp|5?soke`tGVf`&8fkd-3Wu=6(^>-9@Oz{3? zJh#QB|8RJ(L51#=HD>#btv0ssE6(}!e0?RKLj0|8p&i0CK5w&bSFKyTc-zuhC$&Ay zH9m`23cg&q(la8(E%BV_>($>&x5#EEvF~?kayq#GtDTm8;A$Pe-^tsn&T{bU{`_B8 z+5Kn1kNYS0{a^h5XA{%Er7cG!5Bf$kZ!TQ^s(4oaPUG?qEA6D3|9Ljo=FUAnYv1Y| zi}u8n2c-`ctd(|7DAsN1{u-He$>NGhk7U;V z%FW9k3oKr|_++7l;~#VFURFoUSyMC6>HN@XD)6kSZ)!#BA&<3KEmEQ%e+*Qqwc@Y}McI-mk8ZnPRIRZt82`Ti~3Uk?B!Ylp0*+7m{3+ zootz+Zg0nBW1pCkpOmUwkyxOcmYGwMT2!o%TAXaF5X#V5P5LUS6(OZmgGIl&)`RX=$l%V5Dzk zq+67drdwQ@SCUwvn^&x?4%L?#0oRsStOs_JUUGh}erANep`L+0%p%YvFlaY;W`3Rm z$l}DL{L&Iz^%S!dOS81ZL|xMqqf}i(!_-7w0|NsC-4x4Ib7Rxgq@?6zLzqnkNG?RN zsvspz-%!t3UtOUfCCw_JC_kk%Ikm`E-95lZ!963txTH84WVM2Yp1GmAKGf$_a8N~V z0d~JvBo;tDZ&Q(5VC9>il9^WNl30>zXJlY#ple{PYhV~+U}$A%U}bEqYhYnzU|^$< zrjiS+)fqfxOpI0}l}K9ii$e1AbL>*eG7E||G)?s^Efk#d3o5~r*$PGm29^pzi7A=M zi8%_cm8lBB`DrEPiAAXp$AC?Q8epRjiZrA!qhcr~7Wn$&569eGQ1S+;vvSE#F3nBN zEAez8GVxF`zEhIn&MYV`$^qw(lw|$XoK%pDiuDck4E5C&Qj)FG@{4j4OKjB>3kq^F zlM_oo)9(c-Y3g=1DalqPnI$=?cHrFSm{S5_Fh}T4HHViMm}u zj&4zET5@7hie5@tCL|JaGVLG?ux@>XiCCftEEMG8X2)ft4=x@+MTH%g0+j&u3_=u} zsd*{3>gAw95#u0Bq*57{$u+R$aZN6LaN5nx&jaNg4Hqj=wlgp`Ff=eUGyvx~bpr!+ zO)h=k{1gHzzy{?PX@GN3j7D~hrUJ3KNRvxH1QgdAsIjPNXP26n0;*jqic-_K3>3_a zxj9M?FvoD8k%0Mj3a zW|k)Cab#p}WRC7W6C(?AjC5dPjOjNMV^ef{jf~Ar(9@}*nI%S=G%_~Abc>0J33}KY znV6WPiy0dknxcoFv4tUqn@x-j4KVy>Y;J^Zo{5djH8L|WLidM}xuGGt`;5#@j4|vmH^odF7Dkw9$imbF!(K~6V~liQ ziJ8`n4GhiD^Ng{9u@SmnV?z@&bT^wBnHeMbt)wV1Gbgo(%f?1QKRB~0Rl&?yK|d%z zzeK@M!9XEMLEkekEnfjt)(3Ivd%7q@+n5^|Ik_0R8CtkFIhmUqTRI!LSeQB*nVK6K l8<<$Q8QKw65zA#~$5mXCSX2Tobj?hR%uTseRbBnvxB$hKr;-2w diff --git a/etc/refcards/pt-br-refcard.pdf b/etc/refcards/pt-br-refcard.pdf index dff1c3f6c00f20f5b975de22206d7b18d2ce8d02..dc61712a998f171ed9a9e6802075cca57de089fc 100644 GIT binary patch delta 32694 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 Hc(Z-|xMxva_49wjk_$yT4f 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 delta 32801 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 GjSB!cLVR@q diff --git a/etc/refcards/refcard.pdf b/etc/refcards/refcard.pdf index f6c47d8a5f65df6a58766614f5a0e8313d46c6e1..f2a720d656bfe3deed3ac6da885d534913905f86 100644 GIT binary patch delta 54349 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 diff --git a/etc/refcards/ru-refcard.pdf b/etc/refcards/ru-refcard.pdf index 3bdc7895a9d7b956f683af277af271894428ccad..2289acff75521870f0530ef06ff4284185862d4d 100644 GIT binary patch delta 7593 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 FE&%pl8_xg$ delta 7649 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 diff --git a/etc/refcards/sk-dired-ref.pdf b/etc/refcards/sk-dired-ref.pdf index e14764bd8f8ca72354daf238e0816cafc2e30fc7..2cd9ef12fd9e1855bfa87bca90f4c6dd7da89a56 100644 GIT binary patch delta 21463 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 z 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 delta 21532 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%0AA|k7fF6!i8W>!_+%=tB*aiP&c&*G{U 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 z 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 Date: Mon, 30 Apr 2012 11:09:26 +0200 Subject: [PATCH 242/564] Fix entry in display-buffer--action-function-custom-type --- lisp/ChangeLog | 5 +++++ lisp/window.el | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 3b16a4c575a..eb1f5d22829 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-04-30 Martin Rudalics + + * window.el (display-buffer--action-function-custom-type): Fix + entry. + 2012-04-27 Alan Mackenzie * progmodes/cc-defs.el (c-version): Update to 5.32.3. diff --git a/lisp/window.el b/lisp/window.el index 7abe3fbfe7f..49f84960078 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -4607,7 +4607,7 @@ The actual non-nil value of this variable will be copied to the '(choice :tag "Function" (const :tag "--" ignore) ; default for insertion (const display-buffer-reuse-window) - (const display-buffer-use-some-window) + (const display-buffer-pop-up-window) (const display-buffer-same-window) (const display-buffer-pop-up-frame) (const display-buffer-use-some-window) From 9cc7819c6145afaa2c50c08c3073c28000fcafe3 Mon Sep 17 00:00:00 2001 From: Leo Liu Date: Mon, 30 Apr 2012 19:57:47 +0800 Subject: [PATCH 243/564] * lisp/ibuf-ext.el (ibuffer-diff-buffer-with-file-1): Avoid buffer read-only error. --- lisp/ChangeLog | 5 +++++ lisp/ibuf-ext.el | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 3f656ab999a..8e826aa69fa 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-04-30 Leo Liu + + * ibuf-ext.el (ibuffer-diff-buffer-with-file-1): Avoid buffer + read-only error. + 2012-04-29 Chong Yidong * follow.el (follow-calc-win-end): Rewrite to handle partial diff --git a/lisp/ibuf-ext.el b/lisp/ibuf-ext.el index f943bd2fe58..58d38f77b66 100644 --- a/lisp/ibuf-ext.el +++ b/lisp/ibuf-ext.el @@ -1356,8 +1356,8 @@ a prefix argument reverses the meaning of that variable." (diff-sentinel (call-process shell-file-name nil (current-buffer) nil - shell-command-switch command))) - (insert "\n")))) + shell-command-switch command)) + (insert "\n"))))) (sit-for 0) (when (file-exists-p tempfile) (delete-file tempfile))))) From 91af76bf30b0acca02fa4320d8d8f7182e57acdc Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 30 Apr 2012 15:50:12 +0300 Subject: [PATCH 244/564] Resurrect encoding of replies by Rmail which was lost in 2012-04-11T21:37:13Z!monnier@iro.umontreal.ca. lisp/mail/rmail.el (rmail-yank-current-message): Use the encoding of the yanked message in preference to the default value of buffer-file-coding-system. --- lisp/ChangeLog | 6 ++++++ lisp/mail/rmail.el | 13 +++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index eb1f5d22829..ae273d9d610 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2012-04-30 Eli Zaretskii + + * mail/rmail.el (rmail-yank-current-message): Use the encoding of + the yanked message in preference to the default value of + buffer-file-coding-system. + 2012-04-30 Martin Rudalics * window.el (display-buffer--action-function-custom-type): Fix diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el index 265347ca69a..d70e578a0fa 100644 --- a/lisp/mail/rmail.el +++ b/lisp/mail/rmail.el @@ -3567,8 +3567,17 @@ If BUFFER is not swapped, yank out of its message viewer buffer." (with-current-buffer buffer (unless (rmail-buffers-swapped-p) (setq buffer rmail-view-buffer))) - (insert-buffer buffer)) - + (insert-buffer buffer) + ;; If they yank the text of BUFFER, the encoding of BUFFER is a + ;; better default for the reply message than the default value of + ;; buffer-file-coding-system. + (and (coding-system-equal (default-value 'buffer-file-coding-system) + buffer-file-coding-system) + (setq buffer-file-coding-system + (coding-system-change-text-conversion + buffer-file-coding-system (coding-system-base + (with-current-buffer buffer + buffer-file-coding-system)))))) (defun rmail-start-mail (&optional noerase to subject in-reply-to cc replybuffer sendactions same-window From 74dd3a6bbbd97771520fdff5f52844ddfd2f79fa Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Tue, 1 May 2012 02:07:23 +0200 Subject: [PATCH 245/564] * .gdbinit (xpr): Remove checks for no longer existing misc types. (xintfwd, xboolfwd, xobjfwd, xbufobjfwd, xkbobjfwd, xbuflocal): Remove. --- src/.gdbinit | 78 --------------------------------------------------- src/ChangeLog | 6 ++++ 2 files changed, 6 insertions(+), 78 deletions(-) diff --git a/src/.gdbinit b/src/.gdbinit index 13eca902d88..8f8508f291f 100644 --- a/src/.gdbinit +++ b/src/.gdbinit @@ -703,60 +703,6 @@ Print $ as a misc free-cell pointer. This command assumes that $ is an Emacs Lisp Misc value. end -define xintfwd - xgetptr $ - print (struct Lisp_Intfwd *) $ptr -end -document xintfwd -Print $ as an integer forwarding pointer. -This command assumes that $ is an Emacs Lisp Misc value. -end - -define xboolfwd - xgetptr $ - print (struct Lisp_Boolfwd *) $ptr -end -document xboolfwd -Print $ as a boolean forwarding pointer. -This command assumes that $ is an Emacs Lisp Misc value. -end - -define xobjfwd - xgetptr $ - print (struct Lisp_Objfwd *) $ptr -end -document xobjfwd -Print $ as an object forwarding pointer. -This command assumes that $ is an Emacs Lisp Misc value. -end - -define xbufobjfwd - xgetptr $ - print (struct Lisp_Buffer_Objfwd *) $ptr -end -document xbufobjfwd -Print $ as a buffer-local object forwarding pointer. -This command assumes that $ is an Emacs Lisp Misc value. -end - -define xkbobjfwd - xgetptr $ - print (struct Lisp_Kboard_Objfwd *) $ptr -end -document xkbobjfwd -Print $ as a kboard-local object forwarding pointer. -This command assumes that $ is an Emacs Lisp Misc value. -end - -define xbuflocal - xgetptr $ - print (struct Lisp_Buffer_Local_Value *) $ptr -end -document xbuflocal -Print $ as a buffer-local-value pointer. -This command assumes that $ is an Emacs Lisp Misc value. -end - define xsymbol set $sym = $ xgetptr $sym @@ -1030,36 +976,12 @@ define xpr if $misc == Lisp_Misc_Free xmiscfree end - if $misc == Lisp_Misc_Boolfwd - xboolfwd - end if $misc == Lisp_Misc_Marker xmarker end - if $misc == Lisp_Misc_Intfwd - xintfwd - end - if $misc == Lisp_Misc_Boolfwd - xboolfwd - end - if $misc == Lisp_Misc_Objfwd - xobjfwd - end - if $misc == Lisp_Misc_Buffer_Objfwd - xbufobjfwd - end - if $misc == Lisp_Misc_Buffer_Local_Value - xbuflocal - end -# if $misc == Lisp_Misc_Some_Buffer_Local_Value -# xvalue -# end if $misc == Lisp_Misc_Overlay xoverlay end - if $misc == Lisp_Misc_Kboard_Objfwd - xkbobjfwd - end # if $misc == Lisp_Misc_Save_Value # xsavevalue # end diff --git a/src/ChangeLog b/src/ChangeLog index 6cef4f61f90..25e33d61199 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2012-04-30 Andreas Schwab + + * .gdbinit (xpr): Remove checks for no longer existing misc types. + (xintfwd, xboolfwd, xobjfwd, xbufobjfwd, xkbobjfwd, xbuflocal): + Remove. + 2012-04-28 Paul Eggert Do not avoid creating empty evaporating overlays (Bug#9642). From 4737362e43c22bb212c33667f0c264dc7772dc03 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 30 Apr 2012 20:12:02 -0400 Subject: [PATCH 246/564] Remove LD_SWITCH_X_SITE_AUX, which is no longer used * configure.in (LD_SWITCH_X_SITE_AUX): Remove; no longer used. * src/Makefile.in (LD_SWITCH_X_SITE_AUX): Remove; no longer used. --- ChangeLog | 4 ++++ configure.in | 21 +++++++++------------ src/ChangeLog | 4 ++++ src/Makefile.in | 6 ++---- 4 files changed, 19 insertions(+), 16 deletions(-) diff --git a/ChangeLog b/ChangeLog index 73b8c8c0fba..f6317b3b924 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2012-05-01 Glenn Morris + + * configure.in (LD_SWITCH_X_SITE_AUX): Remove; no longer used. + 2012-04-26 Glenn Morris * make-dist: No more doc/lispref/tindex.pl. diff --git a/configure.in b/configure.in index 46b2e9993ed..0504033141b 100644 --- a/configure.in +++ b/configure.in @@ -973,7 +973,7 @@ AC_SUBST(LD_SWITCH_SYSTEM) ac_link="$ac_link $LD_SWITCH_SYSTEM" -## This setting of LD_SWITCH_SYSTEM references LD_SWITCH_X_SITE_AUX, +## This setting of LD_SWITCH_SYSTEM references LD_SWITCH_X_SITE_AUX_RPATH, ## which has not been defined yet. When this was handled with cpp, ## it was expanded to null when configure sourced the s/*.h file. ## Thus LD_SWITCH_SYSTEM had different values in configure and the Makefiles. @@ -985,7 +985,6 @@ ac_link="$ac_link $LD_SWITCH_SYSTEM" ## LD_SWITCH_SYSTEM_TEMACS. case "$opsys" in netbsd|openbsd) - ## _AUX_RPATH is like _AUX, but uses -rpath instead of -R. LD_SWITCH_SYSTEM="\$(LD_SWITCH_X_SITE_AUX_RPATH) $LD_SWITCH_SYSTEM" ;; esac @@ -1500,13 +1499,11 @@ else window_system=x11 fi -LD_SWITCH_X_SITE_AUX= LD_SWITCH_X_SITE_AUX_RPATH= if test "${x_libraries}" != NONE; then if test -n "${x_libraries}"; then LD_SWITCH_X_SITE=-L`echo ${x_libraries} | sed -e "s/:/ -L/g"` - LD_SWITCH_X_SITE_AUX=-R`echo ${x_libraries} | sed -e "s/:/ -R/g"` - LD_SWITCH_X_SITE_AUX_RPATH=`echo ${LD_SWITCH_X_SITE_AUX} | sed -e 's/-R/-Wl,-rpath,/'` + LD_SWITCH_X_SITE_AUX_RPATH=-Wl,-rpath`echo ${x_libraries} | sed -e "s/:/ -Wl,-rpath/g"` fi x_default_search_path="" x_search_path=${x_libraries} @@ -1529,7 +1526,6 @@ ${x_library}/X11/%T/%N%S" fi done fi -AC_SUBST(LD_SWITCH_X_SITE_AUX) AC_SUBST(LD_SWITCH_X_SITE_AUX_RPATH) if test "${x_includes}" != NONE && test -n "${x_includes}"; then @@ -1858,9 +1854,9 @@ if test "${HAVE_X11}" = "yes"; then CPPFLAGS="$C_SWITCH_X_SITE $CPPFLAGS" # On Solaris, arrange for LD_RUN_PATH to point to the X libraries for tests. - # This is handled by LD_SWITCH_X_SITE_AUX during the real build, - # but it's more convenient here to set LD_RUN_PATH - # since this also works on hosts that don't understand LD_SWITCH_X_SITE_AUX. + # This is handled by LD_SWITCH_X_SITE_AUX_RPATH during the real build, + # but it's more convenient here to set LD_RUN_PATH since this + # also works on hosts that don't understand LD_SWITCH_X_SITE_AUX_RPATH. if test "${x_libraries}" != NONE && test -n "${x_libraries}"; then LD_RUN_PATH=$x_libraries${LD_RUN_PATH+:}$LD_RUN_PATH export LD_RUN_PATH @@ -3510,9 +3506,10 @@ case "$opsys" in LD_SWITCH_SYSTEM_TEMACS="-X $LD_SWITCH_SYSTEM_TEMACS" ;; - ## LD_SWITCH_X_SITE_AUX is a -R option saying where to find X at run-time. - ## When handled by cpp, this was in LD_SWITCH_SYSTEM. However, at - ## the point where configure sourced the s/*.h file, LD_SWITCH_X_SITE_AUX + ## LD_SWITCH_X_SITE_AUX_RPATH is a -rpath option saying where to + ## find X at run-time. + ## When handled by cpp, this was in LD_SWITCH_SYSTEM. However, at the + ## point where configure sourced the s/*.h file, LD_SWITCH_X_SITE_AUX_RPATH ## had not yet been defined and was expanded to null. Hence LD_SWITCH_SYSTEM ## had different values in configure (in ac_link) and src/Makefile.in. ## It seems clearer therefore to put this piece in LD_SWITCH_SYSTEM_TEMACS. diff --git a/src/ChangeLog b/src/ChangeLog index 25e33d61199..dc8683839a6 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2012-05-01 Glenn Morris + + * Makefile.in (LD_SWITCH_X_SITE_AUX): Remove; no longer used. + 2012-04-30 Andreas Schwab * .gdbinit (xpr): Remove checks for no longer existing misc types. diff --git a/src/Makefile.in b/src/Makefile.in index 37480f8269d..7bea8c2b29d 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -94,10 +94,8 @@ C_SWITCH_X_SITE=@C_SWITCH_X_SITE@ ## substituted in this or any other Makefile. Cf C_SWITCH_X_SITE. LD_SWITCH_X_SITE= -## Next two must come before LD_SWITCH_SYSTEM. -## If needed, a -R option that says where to find X windows at run time. -LD_SWITCH_X_SITE_AUX=@LD_SWITCH_X_SITE_AUX@ -## As above, but using -rpath instead. +## This must come before LD_SWITCH_SYSTEM. +## If needed, a -rpath option that says where to find X windows at run time. LD_SWITCH_X_SITE_AUX_RPATH=@LD_SWITCH_X_SITE_AUX_RPATH@ ## System-specific LDFLAGS. From 4d5c63499ad91b69ffd08bcfbc248bd66a2d8641 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 30 Apr 2012 20:16:02 -0400 Subject: [PATCH 247/564] Rename autoconf output variable LD_SWITCH_X_SITE_AUX_RPATH * configure.in (LD_SWITCH_X_SITE_RPATH): Rename from LD_SWITCH_X_SITE_AUX_RPATH. * src/Makefile.in (LD_SWITCH_X_SITE_RPATH): Rename from LD_SWITCH_X_SITE_AUX_RPATH. --- ChangeLog | 3 +++ configure.in | 20 ++++++++++---------- src/ChangeLog | 3 +++ src/Makefile.in | 2 +- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index f6317b3b924..090f0de7c12 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2012-05-01 Glenn Morris + * configure.in (LD_SWITCH_X_SITE_RPATH): + Rename from LD_SWITCH_X_SITE_AUX_RPATH. + * configure.in (LD_SWITCH_X_SITE_AUX): Remove; no longer used. 2012-04-26 Glenn Morris diff --git a/configure.in b/configure.in index 0504033141b..47ab49793a4 100644 --- a/configure.in +++ b/configure.in @@ -973,7 +973,7 @@ AC_SUBST(LD_SWITCH_SYSTEM) ac_link="$ac_link $LD_SWITCH_SYSTEM" -## This setting of LD_SWITCH_SYSTEM references LD_SWITCH_X_SITE_AUX_RPATH, +## This setting of LD_SWITCH_SYSTEM references LD_SWITCH_X_SITE_RPATH, ## which has not been defined yet. When this was handled with cpp, ## it was expanded to null when configure sourced the s/*.h file. ## Thus LD_SWITCH_SYSTEM had different values in configure and the Makefiles. @@ -985,7 +985,7 @@ ac_link="$ac_link $LD_SWITCH_SYSTEM" ## LD_SWITCH_SYSTEM_TEMACS. case "$opsys" in netbsd|openbsd) - LD_SWITCH_SYSTEM="\$(LD_SWITCH_X_SITE_AUX_RPATH) $LD_SWITCH_SYSTEM" ;; + LD_SWITCH_SYSTEM="\$(LD_SWITCH_X_SITE_RPATH) $LD_SWITCH_SYSTEM" ;; esac @@ -1499,11 +1499,11 @@ else window_system=x11 fi -LD_SWITCH_X_SITE_AUX_RPATH= +LD_SWITCH_X_SITE_RPATH= if test "${x_libraries}" != NONE; then if test -n "${x_libraries}"; then LD_SWITCH_X_SITE=-L`echo ${x_libraries} | sed -e "s/:/ -L/g"` - LD_SWITCH_X_SITE_AUX_RPATH=-Wl,-rpath`echo ${x_libraries} | sed -e "s/:/ -Wl,-rpath/g"` + LD_SWITCH_X_SITE_RPATH=-Wl,-rpath`echo ${x_libraries} | sed -e "s/:/ -Wl,-rpath/g"` fi x_default_search_path="" x_search_path=${x_libraries} @@ -1526,7 +1526,7 @@ ${x_library}/X11/%T/%N%S" fi done fi -AC_SUBST(LD_SWITCH_X_SITE_AUX_RPATH) +AC_SUBST(LD_SWITCH_X_SITE_RPATH) if test "${x_includes}" != NONE && test -n "${x_includes}"; then C_SWITCH_X_SITE="$isystem"`echo ${x_includes} | sed -e "s/:/ $isystem/g"` @@ -1854,9 +1854,9 @@ if test "${HAVE_X11}" = "yes"; then CPPFLAGS="$C_SWITCH_X_SITE $CPPFLAGS" # On Solaris, arrange for LD_RUN_PATH to point to the X libraries for tests. - # This is handled by LD_SWITCH_X_SITE_AUX_RPATH during the real build, + # This is handled by LD_SWITCH_X_SITE_RPATH during the real build, # but it's more convenient here to set LD_RUN_PATH since this - # also works on hosts that don't understand LD_SWITCH_X_SITE_AUX_RPATH. + # also works on hosts that don't understand LD_SWITCH_X_SITE_RPATH. if test "${x_libraries}" != NONE && test -n "${x_libraries}"; then LD_RUN_PATH=$x_libraries${LD_RUN_PATH+:}$LD_RUN_PATH export LD_RUN_PATH @@ -3506,14 +3506,14 @@ case "$opsys" in LD_SWITCH_SYSTEM_TEMACS="-X $LD_SWITCH_SYSTEM_TEMACS" ;; - ## LD_SWITCH_X_SITE_AUX_RPATH is a -rpath option saying where to + ## LD_SWITCH_X_SITE_RPATH is a -rpath option saying where to ## find X at run-time. ## When handled by cpp, this was in LD_SWITCH_SYSTEM. However, at the - ## point where configure sourced the s/*.h file, LD_SWITCH_X_SITE_AUX_RPATH + ## point where configure sourced the s/*.h file, LD_SWITCH_X_SITE_RPATH ## had not yet been defined and was expanded to null. Hence LD_SWITCH_SYSTEM ## had different values in configure (in ac_link) and src/Makefile.in. ## It seems clearer therefore to put this piece in LD_SWITCH_SYSTEM_TEMACS. - gnu*) LD_SWITCH_SYSTEM_TEMACS="\$(LD_SWITCH_X_SITE_AUX_RPATH)" ;; + gnu*) LD_SWITCH_SYSTEM_TEMACS="\$(LD_SWITCH_X_SITE_RPATH)" ;; *) LD_SWITCH_SYSTEM_TEMACS= ;; esac diff --git a/src/ChangeLog b/src/ChangeLog index dc8683839a6..f1e175a968d 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,8 @@ 2012-05-01 Glenn Morris + * Makefile.in (LD_SWITCH_X_SITE_RPATH): + Rename from LD_SWITCH_X_SITE_AUX_RPATH. + * Makefile.in (LD_SWITCH_X_SITE_AUX): Remove; no longer used. 2012-04-30 Andreas Schwab diff --git a/src/Makefile.in b/src/Makefile.in index 7bea8c2b29d..32276084b3f 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -96,7 +96,7 @@ LD_SWITCH_X_SITE= ## This must come before LD_SWITCH_SYSTEM. ## If needed, a -rpath option that says where to find X windows at run time. -LD_SWITCH_X_SITE_AUX_RPATH=@LD_SWITCH_X_SITE_AUX_RPATH@ +LD_SWITCH_X_SITE_RPATH=@LD_SWITCH_X_SITE_RPATH@ ## System-specific LDFLAGS. LD_SWITCH_SYSTEM=@LD_SWITCH_SYSTEM@ From 6eac8dc9ac4a6478b88a397a876c272b16c0facc Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Mon, 30 Apr 2012 20:21:23 -0400 Subject: [PATCH 248/564] * lisp/minibuffer.el (completion-table-with-quoting): Fix compatibility all-completions code to not return a number in the last cdr. --- lisp/ChangeLog | 5 +++++ lisp/minibuffer.el | 19 +++++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 8e826aa69fa..7919a9607c9 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-05-01 Stefan Monnier + + * minibuffer.el (completion-table-with-quoting): Fix compatibility + all-completions code to not return a number in the last cdr. + 2012-04-30 Leo Liu * ibuf-ext.el (ibuffer-diff-buffer-with-file-1): Avoid buffer diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index 59bd0d231dc..1d459b0db62 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -420,6 +420,13 @@ for use at QPOS." (length string)))))) (list* 'boundaries qlboundary qrboundary))) + ;; In "normal" use a c-t-with-quoting completion table should never be + ;; called with action in (t nil) because `completion--unquote' should have + ;; been called before and would have returned a different completion table + ;; to apply to the unquoted text. But there's still a lot of code around + ;; that likes to use all/try-completions directly, so we do our best to + ;; handle those calls as well as we can. + ((eq action nil) ;;try-completion (let* ((ustring (funcall unquote string)) (completion (try-completion ustring table pred))) @@ -447,10 +454,14 @@ for use at QPOS." (pcase-let* ((ustring (funcall unquote string)) (completions (all-completions ustring table pred)) - (boundary (car (completion-boundaries ustring table pred "")))) - (completion--twq-all - string ustring completions boundary unquote requote))) - + (boundary (car (completion-boundaries ustring table pred ""))) + (completions + (completion--twq-all + string ustring completions boundary unquote requote)) + (last (last completions))) + (when (consp last) (setcdr last nil)) + completions)) + ((eq action 'completion--unquote) (let ((ustring (funcall unquote string)) (uprefix (funcall unquote (substring string 0 pred)))) From 9311dcff1de585f39b16e07fbc5a9fb681a06642 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 30 Apr 2012 20:30:11 -0400 Subject: [PATCH 249/564] Remove HAVE_LIBNCURSES; it is required to be true Also, it was a confusing name, since it does not necessarily mean that we literally have libncurses; rather that we have tputs etc. * configure.in (HAVE_LIBNCURSES): Remove; it is required to be true. * src/dispnew.c: Remove HAVE_LIBNCURSES test; it is always true on relevant platforms. * nt/config.nt (HAVE_LIBNCURSES): Remove undef; not needed. --- ChangeLog | 2 ++ configure.in | 13 ++----------- nt/ChangeLog | 4 ++++ nt/config.nt | 3 +-- src/ChangeLog | 3 +++ src/dispnew.c | 7 ++++--- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/ChangeLog b/ChangeLog index 090f0de7c12..40bdeece6f0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 2012-05-01 Glenn Morris + * configure.in (HAVE_LIBNCURSES): Remove; it is required to be true. + * configure.in (LD_SWITCH_X_SITE_RPATH): Rename from LD_SWITCH_X_SITE_AUX_RPATH. diff --git a/configure.in b/configure.in index 47ab49793a4..1322703b3f4 100644 --- a/configure.in +++ b/configure.in @@ -2893,12 +2893,6 @@ Please try installing whichever of these libraries is most appropriate for your system, together with its header files. For example, a libncurses-dev(el) or similar package.]) fi -# Must define this when any termcap library is found. -AC_DEFINE(HAVE_LIBNCURSES, 1, - [Define to 1 if you have the `ncurses' library (-lncurses).]) -## FIXME This was the cpp logic, but I am not sure it is right. -## The above test has not necessarily found libncurses. -HAVE_LIBNCURSES=yes ## Use terminfo instead of termcap? ## Note only system files NOT using terminfo are: @@ -2917,11 +2911,8 @@ case "$opsys" in ## Mac OS X 10.2. So if configure detects it, set the command-line ## option to use it. darwin|gnu*) - ## (HAVE_LIBNCURSES was not always true, but is since 2010-03-18.) - if test "x$HAVE_LIBNCURSES" = "xyes"; then - TERMINFO=yes - LIBS_TERMCAP="-lncurses" - fi + TERMINFO=yes + LIBS_TERMCAP="-lncurses" ;; freebsd) diff --git a/nt/ChangeLog b/nt/ChangeLog index c76695a4a99..0374a3df0f5 100644 --- a/nt/ChangeLog +++ b/nt/ChangeLog @@ -1,3 +1,7 @@ +2012-05-01 Glenn Morris + + * config.nt (HAVE_LIBNCURSES): Remove undef; not needed. + 2012-04-14 Dani Moncayo (tiny change) * makefile.w32-in: Fix typo (Bug#10261). diff --git a/nt/config.nt b/nt/config.nt index 8aadf2c150d..8b819af5cac 100644 --- a/nt/config.nt +++ b/nt/config.nt @@ -1,6 +1,6 @@ /* GNU Emacs site configuration template file. -*- C -*- -Copyright (C) 1988, 1993-1994, 2001-2012 Free Software Foundation, Inc. +Copyright (C) 1988, 1993-1994, 2001-2012 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -138,7 +138,6 @@ along with GNU Emacs. If not, see . */ #undef HAVE_LIBPTHREADS #undef HAVE_LIBRESOLV #undef HAVE_LIBXMU -#undef HAVE_LIBNCURSES #undef HAVE_LIBINTL /* movemail Kerberos support */ diff --git a/src/ChangeLog b/src/ChangeLog index f1e175a968d..c02d919a2e2 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,8 @@ 2012-05-01 Glenn Morris + * dispnew.c: Remove HAVE_LIBNCURSES test; + it is always true on relevant platforms. + * Makefile.in (LD_SWITCH_X_SITE_RPATH): Rename from LD_SWITCH_X_SITE_AUX_RPATH. diff --git a/src/dispnew.c b/src/dispnew.c index b313852efe2..a50877a6a90 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -1,5 +1,6 @@ /* Updating of data structures for redisplay. - Copyright (C) 1985-1988, 1993-1995, 1997-2012 Free Software Foundation, Inc. + +Copyright (C) 1985-1988, 1993-1995, 1997-2012 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -87,7 +88,7 @@ along with GNU Emacs. If not, see . */ #endif #endif /* not __GNU_LIBRARY__ */ -#if defined (HAVE_TERM_H) && defined (GNU_LINUX) && defined (HAVE_LIBNCURSES) +#if defined (HAVE_TERM_H) && defined (GNU_LINUX) #include /* for tgetent */ #endif @@ -6303,7 +6304,7 @@ init_display (void) #ifdef HAVE_X11 Vwindow_system_version = make_number (11); #endif -#if defined (GNU_LINUX) && defined (HAVE_LIBNCURSES) +#ifdef GNU_LINUX /* In some versions of ncurses, tputs crashes if we have not called tgetent. So call tgetent. */ From 43b3c7d40c2224a5c2c123883a5b4185e0743f9e Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 30 Apr 2012 20:34:56 -0400 Subject: [PATCH 250/564] Update comment in configure.in --- configure.in | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/configure.in b/configure.in index 1322703b3f4..f337f1b3eaf 100644 --- a/configure.in +++ b/configure.in @@ -2896,8 +2896,7 @@ fi ## Use terminfo instead of termcap? ## Note only system files NOT using terminfo are: -## freebsd < 40000, ms-w32, msdos, netbsd < 599002500, and -## darwin|gnu without ncurses. +## freebsd < 40000, ms-w32, msdos, netbsd < 599002500 TERMINFO=no case "$opsys" in ## cygwin: Fewer environment variables to go wrong, more terminal types. From 262f06da76ea679145baf71ce549cef5af4b0875 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 30 Apr 2012 20:46:02 -0400 Subject: [PATCH 251/564] * configure.in: Invert the TERMINFO logic (since "yes" is far more common than "no") --- ChangeLog | 3 +++ configure.in | 22 ++++++---------------- 2 files changed, 9 insertions(+), 16 deletions(-) diff --git a/ChangeLog b/ChangeLog index 40bdeece6f0..423a40421cd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2012-05-01 Glenn Morris + * configure.in: Invert the TERMINFO logic, + since "yes" is far more common than "no". + * configure.in (HAVE_LIBNCURSES): Remove; it is required to be true. * configure.in (LD_SWITCH_X_SITE_RPATH): diff --git a/configure.in b/configure.in index f337f1b3eaf..4ee84c61eb5 100644 --- a/configure.in +++ b/configure.in @@ -2894,25 +2894,15 @@ for your system, together with its header files. For example, a libncurses-dev(el) or similar package.]) fi -## Use terminfo instead of termcap? -## Note only system files NOT using terminfo are: -## freebsd < 40000, ms-w32, msdos, netbsd < 599002500 -TERMINFO=no +## Use termcap instead of terminfo? +## Only true for: freebsd < 40000, ms-w32, msdos, netbsd < 599002500. +TERMINFO=yes case "$opsys" in - ## cygwin: Fewer environment variables to go wrong, more terminal types. - ## hpux10-20: Use the system provided termcap(3) library. - ## openbsd: David Mazieres says this - ## is necessary. Otherwise Emacs dumps core when run -nw. - aix4-2|cygwin|hpux*|irix6-5|openbsd|sol2*|unixware) TERMINFO=yes ;; - ## darwin: Prevents crashes when running Emacs in Terminal.app under 10.2. ## The ncurses library has been moved out of the System framework in ## Mac OS X 10.2. So if configure detects it, set the command-line ## option to use it. - darwin|gnu*) - TERMINFO=yes - LIBS_TERMCAP="-lncurses" - ;; + darwin|gnu*) LIBS_TERMCAP="-lncurses" ;; freebsd) AC_MSG_CHECKING([whether FreeBSD is new enough to use terminfo]) @@ -2926,18 +2916,18 @@ fail; AC_MSG_RESULT($emacs_cv_freebsd_terminfo) if test $emacs_cv_freebsd_terminfo = yes; then - TERMINFO=yes LIBS_TERMCAP="-lncurses" else + TERMINFO=no LIBS_TERMCAP="-ltermcap" fi ;; netbsd) if test $ac_cv_search_tputs = -lterminfo; then - TERMINFO=yes LIBS_TERMCAP="-lterminfo" else + TERMINFO=no LIBS_TERMCAP="-ltermcap" fi ;; From e3da5b1949267a54568b330186b7931da26fc482 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 30 Apr 2012 20:50:55 -0400 Subject: [PATCH 252/564] * configure.in (LIBS_TERMCAP): Remove unreachable branch for sol2. --- ChangeLog | 2 ++ configure.in | 5 ++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 423a40421cd..08c264b68dd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 2012-05-01 Glenn Morris + * configure.in (LIBS_TERMCAP): Remove unreachable branch for sol2. + * configure.in: Invert the TERMINFO logic, since "yes" is far more common than "no". diff --git a/configure.in b/configure.in index 4ee84c61eb5..76d267577f4 100644 --- a/configure.in +++ b/configure.in @@ -2938,12 +2938,11 @@ case "$opsys" in ## hpux: Make sure we get select from libc rather than from libcurses ## because libcurses on HPUX 10.10 has a broken version of select. ## We used to use -lc -lcurses, but this may be cleaner. + ## FIXME? But TERMINFO = yes on hpux (it used to be explicitly + # set that way, now it uses the default). Isn't this a contradiction? hpux*) LIBS_TERMCAP="-ltermcap" ;; openbsd) LIBS_TERMCAP="-lncurses" ;; - - ## Must use system termcap, if we use any termcap. It does special things. - sol2*) test "$TERMINFO" != yes && LIBS_TERMCAP="-ltermcap" ;; esac TERMCAP_OBJ=tparam.o From 3ba0a545ecf6e8385ffb65033015be0b16e0226f Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 30 Apr 2012 20:56:47 -0400 Subject: [PATCH 253/564] * configure.in: Combine adjacent $opsys case blocks. --- ChangeLog | 2 ++ configure.in | 4 +--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 08c264b68dd..137248c0d89 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 2012-05-01 Glenn Morris + * configure.in: Combine adjacent $opsys case blocks. + * configure.in (LIBS_TERMCAP): Remove unreachable branch for sol2. * configure.in: Invert the TERMINFO logic, diff --git a/configure.in b/configure.in index 76d267577f4..42a6b3364c9 100644 --- a/configure.in +++ b/configure.in @@ -2932,9 +2932,8 @@ fail; fi ;; -esac + openbsd) LIBS_TERMCAP="-lncurses" ;; -case "$opsys" in ## hpux: Make sure we get select from libc rather than from libcurses ## because libcurses on HPUX 10.10 has a broken version of select. ## We used to use -lc -lcurses, but this may be cleaner. @@ -2942,7 +2941,6 @@ case "$opsys" in # set that way, now it uses the default). Isn't this a contradiction? hpux*) LIBS_TERMCAP="-ltermcap" ;; - openbsd) LIBS_TERMCAP="-lncurses" ;; esac TERMCAP_OBJ=tparam.o From a4a18b8bbef0fe4265d675f9c56ea17566566484 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 30 Apr 2012 21:07:14 -0400 Subject: [PATCH 254/564] Use libtinfo in preference to libncurses (bug#9741) * configure.in: Try libtinfo for tputs. (LIBS_TERMCAP) [gnu*]: Use libtinfo if it was found. * etc/NEWS: Mention this. --- ChangeLog | 3 +++ configure.in | 13 ++++++++++--- etc/NEWS | 3 +++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 137248c0d89..109132d0f98 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2012-05-01 Glenn Morris + * configure.in: Try libtinfo for tputs. + (LIBS_TERMCAP) [gnu*]: Use libtinfo if it was found. (Bug#9741) + * configure.in: Combine adjacent $opsys case blocks. * configure.in (LIBS_TERMCAP): Remove unreachable branch for sol2. diff --git a/configure.in b/configure.in index 42a6b3364c9..4ad5efbb811 100644 --- a/configure.in +++ b/configure.in @@ -2868,7 +2868,7 @@ AC_DEFUN([tputs_link_source], [ ]) # Maybe curses should be tried earlier? # See http://debbugs.gnu.org/cgi/bugreport.cgi?bug=9736#35 -for tputs_library in '' ncurses terminfo termcap curses; do +for tputs_library in '' tinfo ncurses terminfo termcap curses; do OLIBS=$LIBS if test -z "$tputs_library"; then LIBS_TERMCAP= @@ -2888,7 +2888,8 @@ done AC_MSG_RESULT([$msg]) if test "X$msg" = Xno; then AC_MSG_ERROR([The required function `tputs' was not found in any library. -These libraries were tried: libncurses, libterminfo, libtermcap, libcurses. +The following libraries were tried (in order): + libtinfo, libncurses, libterminfo, libtermcap, libcurses Please try installing whichever of these libraries is most appropriate for your system, together with its header files. For example, a libncurses-dev(el) or similar package.]) @@ -2897,12 +2898,18 @@ fi ## Use termcap instead of terminfo? ## Only true for: freebsd < 40000, ms-w32, msdos, netbsd < 599002500. TERMINFO=yes +## FIXME? In the cases below where we unconditionally set +## LIBS_TERMCAP="-lncurses", this overrides LIBS_TERMCAP = -ltinfo, +## if that was found above to have tputs. +## Should we use the gnu* logic everywhere? case "$opsys" in ## darwin: Prevents crashes when running Emacs in Terminal.app under 10.2. ## The ncurses library has been moved out of the System framework in ## Mac OS X 10.2. So if configure detects it, set the command-line ## option to use it. - darwin|gnu*) LIBS_TERMCAP="-lncurses" ;; + darwin) LIBS_TERMCAP="-lncurses" ;; + + gnu*) [ "x$LIBS_TERMCAP" = x ] && LIBS_TERMCAP="-lncurses" ;; freebsd) AC_MSG_CHECKING([whether FreeBSD is new enough to use terminfo]) diff --git a/etc/NEWS b/etc/NEWS index ce3cfe7accf..ef809aad4e4 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -29,6 +29,9 @@ possibly-questionable C code. On a recent GNU system there should be no warnings; on older and on non-GNU systems the generated warnings may be useful. +--- +** Emacs uses libtinfo in preference to libncurses, if available. + * Startup Changes in Emacs 24.2 From 1056cb66e67bccaf3001174d9ef28e962f6b5af1 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 30 Apr 2012 21:13:18 -0400 Subject: [PATCH 255/564] Fix typo in previous rpath-related change (thanks hydra) --- configure.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.in b/configure.in index 4ad5efbb811..2c2ccccc11a 100644 --- a/configure.in +++ b/configure.in @@ -1503,7 +1503,7 @@ LD_SWITCH_X_SITE_RPATH= if test "${x_libraries}" != NONE; then if test -n "${x_libraries}"; then LD_SWITCH_X_SITE=-L`echo ${x_libraries} | sed -e "s/:/ -L/g"` - LD_SWITCH_X_SITE_RPATH=-Wl,-rpath`echo ${x_libraries} | sed -e "s/:/ -Wl,-rpath/g"` + LD_SWITCH_X_SITE_RPATH=-Wl,-rpath,`echo ${x_libraries} | sed -e "s/:/ -Wl,-rpath,/g"` fi x_default_search_path="" x_search_path=${x_libraries} From 99cf43f93ba5f0b0ba1f82f76a7151b81fb4d168 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 30 Apr 2012 20:45:39 -0700 Subject: [PATCH 256/564] Remove references to macros that are not defined anywhere * src/syssignal.h: Remove reference to BROKEN_SIGINFO (last used in s/ptx4.h), BROKEN_SIGTSTP (last used in m/ustation.h, m/dpx2.h), and BROKEN_SIGURG (was in s/gnu-linux.h prior to 2008-02-10). All were removed before 23.1. --- src/ChangeLog | 5 +++++ src/syssignal.h | 15 +++++---------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index c02d919a2e2..0e17d5dd345 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,10 @@ 2012-05-01 Glenn Morris + * syssignal.h: Remove reference to BROKEN_SIGINFO (last used in + s/ptx4.h), BROKEN_SIGTSTP (last used in m/ustation.h, m/dpx2.h), + and BROKEN_SIGURG (was in s/gnu-linux.h prior to 2008-02-10). + All were removed before 23.1. + * dispnew.c: Remove HAVE_LIBNCURSES test; it is always true on relevant platforms. diff --git a/src/syssignal.h b/src/syssignal.h index 86135d71215..a2522f24429 100644 --- a/src/syssignal.h +++ b/src/syssignal.h @@ -1,5 +1,6 @@ /* syssignal.h - System-dependent definitions for signals. - Copyright (C) 1993, 1999, 2001-2012 Free Software Foundation, Inc. + +Copyright (C) 1993, 1999, 2001-2012 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -82,24 +83,18 @@ void croak (char *) NO_RETURN; #define sigfree() sigsetmask (SIGEMPTYMASK) -#if defined (SIGINFO) && defined (BROKEN_SIGINFO) -#undef SIGINFO -#endif #if defined (SIGIO) && defined (BROKEN_SIGIO) # undef SIGIO #endif +/* Last user: m/ibmrs6000.h */ #if defined (SIGPOLL) && defined (BROKEN_SIGPOLL) #undef SIGPOLL #endif -#if defined (SIGTSTP) && defined (BROKEN_SIGTSTP) -#undef SIGTSTP -#endif -#if defined (SIGURG) && defined (BROKEN_SIGURG) -#undef SIGURG -#endif +/* Last user: m/ibmrs6000.h */ #if defined (SIGAIO) && defined (BROKEN_SIGAIO) #undef SIGAIO #endif +/* Last user: m/ibmrs6000.h */ #if defined (SIGPTY) && defined (BROKEN_SIGPTY) #undef SIGPTY #endif From 290af740031366b4d7ba35edf83dc1aff971d551 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 30 Apr 2012 23:59:34 -0700 Subject: [PATCH 257/564] Remove no-byte-compile setting from some lisp/term files. Not that compiling these will bring any noticeable speed benefit, but there's really no reason not to compile them. The extra disk space and build time is negligible, and it might reveal use of obsolete functions, bugs, etc. --- lisp/ChangeLog | 9 +++++++++ lisp/term/AT386.el | 2 +- lisp/term/apollo.el | 1 - lisp/term/bobcat.el | 1 - lisp/term/cygwin.el | 2 +- lisp/term/iris-ansi.el | 2 +- lisp/term/linux.el | 1 - lisp/term/lk201.el | 1 - lisp/term/news.el | 2 +- lisp/term/screen.el | 1 - lisp/term/vt102.el | 1 - lisp/term/vt125.el | 1 - lisp/term/vt200.el | 1 - lisp/term/vt201.el | 1 - lisp/term/vt220.el | 1 - lisp/term/vt240.el | 1 - lisp/term/vt300.el | 1 - lisp/term/vt320.el | 1 - lisp/term/vt400.el | 1 - lisp/term/vt420.el | 1 - lisp/term/wyse50.el | 4 ++-- 21 files changed, 15 insertions(+), 21 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 7919a9607c9..e3f91f562bc 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,12 @@ +2012-05-01 Glenn Morris + + * term/AT386.el, term/apollo.el, term/bobcat.el, term/cygwin.el: + * term/iris-ansi.el, term/linux.el, term/lk201.el, term/news.el: + * term/screen.el, term/vt102.el, term/vt125.el, term/vt200.el: + * term/vt201.el, term/vt220.el, term/vt240.el, term/vt300.el: + * term/vt320.el, term/vt400.el, term/vt420.el, term/wyse50.el: + Remove no-byte-compile setting. + 2012-05-01 Stefan Monnier * minibuffer.el (completion-table-with-quoting): Fix compatibility diff --git a/lisp/term/AT386.el b/lisp/term/AT386.el index bbd408e8fbc..12707c12ba2 100644 --- a/lisp/term/AT386.el +++ b/lisp/term/AT386.el @@ -1,4 +1,4 @@ -;;; AT386.el --- terminal support package for IBM AT keyboards -*- no-byte-compile: t -*- +;;; AT386.el --- terminal support package for IBM AT keyboards ;; Copyright (C) 1992, 2001-2012 Free Software Foundation, Inc. diff --git a/lisp/term/apollo.el b/lisp/term/apollo.el index c570a20112b..e4cabac3bf1 100644 --- a/lisp/term/apollo.el +++ b/lisp/term/apollo.el @@ -1,4 +1,3 @@ -;; -*- no-byte-compile: t -*- (defun terminal-init-apollo () "Terminal initialization function for apollo." (tty-run-terminal-initialization (selected-frame) "vt100")) diff --git a/lisp/term/bobcat.el b/lisp/term/bobcat.el index d9ab1a5fb16..f26dc6b9198 100644 --- a/lisp/term/bobcat.el +++ b/lisp/term/bobcat.el @@ -1,4 +1,3 @@ -;; -*- no-byte-compile: t -*- (defun terminal-init-bobcat () "Terminal initialization function for bobcat." diff --git a/lisp/term/cygwin.el b/lisp/term/cygwin.el index cfce07035cf..d69433a77c2 100644 --- a/lisp/term/cygwin.el +++ b/lisp/term/cygwin.el @@ -1,4 +1,4 @@ -;;; cygwin.el --- support for the Cygwin terminal -*- no-byte-compile: t -*- +;;; cygwin.el --- support for the Cygwin terminal ;;; The Cygwin terminal can't really display underlines. diff --git a/lisp/term/iris-ansi.el b/lisp/term/iris-ansi.el index 945fe1f5a69..9a9a31f4253 100644 --- a/lisp/term/iris-ansi.el +++ b/lisp/term/iris-ansi.el @@ -1,4 +1,4 @@ -;;; iris-ansi.el --- configure Emacs for SGI xwsh and winterm apps -*- no-byte-compile: t -*- +;;; iris-ansi.el --- configure Emacs for SGI xwsh and winterm apps ;; Copyright (C) 1997, 2001-2012 Free Software Foundation, Inc. diff --git a/lisp/term/linux.el b/lisp/term/linux.el index 76115e7d58a..e85c8d2ce0d 100644 --- a/lisp/term/linux.el +++ b/lisp/term/linux.el @@ -1,4 +1,3 @@ -;; -*- no-byte-compile: t -*- ;; The Linux console handles Latin-1 by default. (defun terminal-init-linux () diff --git a/lisp/term/lk201.el b/lisp/term/lk201.el index e1da0f6f1db..76a3a31cedc 100644 --- a/lisp/term/lk201.el +++ b/lisp/term/lk201.el @@ -1,4 +1,3 @@ -;; -*- no-byte-compile: t -*- ;; Define function key sequences for DEC terminals. (defvar lk201-function-map diff --git a/lisp/term/news.el b/lisp/term/news.el index 19d0ff3f7e6..70a1be8497e 100644 --- a/lisp/term/news.el +++ b/lisp/term/news.el @@ -1,4 +1,4 @@ -;;; news.el --- keypad and function key bindings for the Sony NEWS keyboard -*- no-byte-compile: t -*- +;;; news.el --- keypad and function key bindings for the Sony NEWS keyboard ;; Copyright (C) 1989, 1993, 2001-2012 Free Software Foundation, Inc. diff --git a/lisp/term/screen.el b/lisp/term/screen.el index 4931a422e09..678ed1f0ba0 100644 --- a/lisp/term/screen.el +++ b/lisp/term/screen.el @@ -1,4 +1,3 @@ -;; -*- no-byte-compile: t -*- ;; Treat a screen terminal similar to an xterm. (load "term/xterm") diff --git a/lisp/term/vt102.el b/lisp/term/vt102.el index 0f2e3805f58..261b0bb5fd6 100644 --- a/lisp/term/vt102.el +++ b/lisp/term/vt102.el @@ -1,4 +1,3 @@ -;; -*- no-byte-compile: t -*- (defun terminal-init-vt102 () "Terminal initialization function for vt102." diff --git a/lisp/term/vt125.el b/lisp/term/vt125.el index 029f762ef3f..2b2098d483d 100644 --- a/lisp/term/vt125.el +++ b/lisp/term/vt125.el @@ -1,4 +1,3 @@ -;; -*- no-byte-compile: t -*- (defun terminal-init-vt125 () "Terminal initialization function for vt125." diff --git a/lisp/term/vt200.el b/lisp/term/vt200.el index 09ad64d01f6..550266816e0 100644 --- a/lisp/term/vt200.el +++ b/lisp/term/vt200.el @@ -1,4 +1,3 @@ -;; -*- no-byte-compile: t -*- ;; For our purposes we can treat the vt200 and vt100 almost alike. ;; Most differences are handled by the termcap entry. (defun terminal-init-vt200 () diff --git a/lisp/term/vt201.el b/lisp/term/vt201.el index cbeba00b651..a65b4737731 100644 --- a/lisp/term/vt201.el +++ b/lisp/term/vt201.el @@ -1,4 +1,3 @@ -;; -*- no-byte-compile: t -*- ;; For our purposes we can treat the vt200 and vt100 almost alike. ;; Most differences are handled by the termcap entry. (defun terminal-init-vt201 () diff --git a/lisp/term/vt220.el b/lisp/term/vt220.el index 647b79ea357..0dd43353c55 100644 --- a/lisp/term/vt220.el +++ b/lisp/term/vt220.el @@ -1,4 +1,3 @@ -;; -*- no-byte-compile: t -*- ;; For our purposes we can treat the vt200 and vt100 almost alike. ;; Most differences are handled by the termcap entry. (defun terminal-init-vt220 () diff --git a/lisp/term/vt240.el b/lisp/term/vt240.el index 2da4e7ed3c7..b58d4211ce7 100644 --- a/lisp/term/vt240.el +++ b/lisp/term/vt240.el @@ -1,4 +1,3 @@ -;; -*- no-byte-compile: t -*- ;; For our purposes we can treat the vt200 and vt100 almost alike. ;; Most differences are handled by the termcap entry. (defun terminal-init-vt240 () diff --git a/lisp/term/vt300.el b/lisp/term/vt300.el index 52198d840ae..a2664552a64 100644 --- a/lisp/term/vt300.el +++ b/lisp/term/vt300.el @@ -1,4 +1,3 @@ -;; -*- no-byte-compile: t -*- (defun terminal-init-vt300 () "Terminal initialization function for vt300." (tty-run-terminal-initialization (selected-frame) "vt100") diff --git a/lisp/term/vt320.el b/lisp/term/vt320.el index 9b04a5d6ee4..08ed9a8ffb9 100644 --- a/lisp/term/vt320.el +++ b/lisp/term/vt320.el @@ -1,4 +1,3 @@ -;; -*- no-byte-compile: t -*- (defun terminal-init-vt320 () "Terminal initialization function for vt320." (tty-run-terminal-initialization (selected-frame) "vt100") diff --git a/lisp/term/vt400.el b/lisp/term/vt400.el index 4c5870c5ad8..ad4a5fdbb4f 100644 --- a/lisp/term/vt400.el +++ b/lisp/term/vt400.el @@ -1,4 +1,3 @@ -;; -*- no-byte-compile: t -*- (defun terminal-init-vt400 () "Terminal initialization function for vt400." (tty-run-terminal-initialization (selected-frame) "vt100") diff --git a/lisp/term/vt420.el b/lisp/term/vt420.el index 0476b639c23..f6745a3953a 100644 --- a/lisp/term/vt420.el +++ b/lisp/term/vt420.el @@ -1,4 +1,3 @@ -;; -*- no-byte-compile: t -*- (defun terminal-init-vt420 () "Terminal initialization function for vt420." (tty-run-terminal-initialization (selected-frame) "vt100") diff --git a/lisp/term/wyse50.el b/lisp/term/wyse50.el index f08ababe0df..d037962af19 100644 --- a/lisp/term/wyse50.el +++ b/lisp/term/wyse50.el @@ -1,4 +1,4 @@ -;;; wyse50.el --- terminal support code for Wyse 50 -*- no-byte-compile: t -*- +;;; wyse50.el --- terminal support code for Wyse 50 ;; Copyright (C) 1989, 1993-1994, 2001-2012 Free Software Foundation, Inc. @@ -141,7 +141,7 @@ C-l Scrn CLR M-r M-x move-to-window-line, Funct up-arrow or down-arrow are similar" (interactive) ;; Not needed any more now that we use input-decode-map. - ;; (dolist (key-definition + ;; (dolist (key-definition ;; ;; By unsetting C-a and then binding it to a prefix, we ;; ;; allow the rest of the function keys which start with C-a ;; ;; to be recognized. From bbba8869a2235d5e9a979d6e8822fbf1e0097c41 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 1 May 2012 00:38:15 -0700 Subject: [PATCH 258/564] Only print the edition number of the manuals in the TeX version Frankly, I think the edition conveys little to no information. The version number of Emacs is much more relevant. No-one seems to know what the rules are for updating the edition anyway... * doc/emacs/emacs.texi (@copying): Only print EDITION in the TeX version. * doc/lispref/elisp.texi (@copying): * doc/lispref/intro.texi (Introduction): Only print VERSION in the TeX version. --- doc/emacs/ChangeLog | 4 ++++ doc/emacs/emacs.texi | 17 ++++++++++++++++- doc/lispref/ChangeLog | 5 +++++ doc/lispref/elisp.texi | 8 +++++++- doc/lispref/intro.texi | 10 +++++++--- 5 files changed, 39 insertions(+), 5 deletions(-) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index e61bbb860c6..4e0a8a8f428 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,3 +1,7 @@ +2012-05-01 Glenn Morris + + * emacs.texi (@copying): Only print EDITION in the TeX version. + 2012-04-30 Glenn Morris * search.texi (Regexp Search): Just say "Emacs". diff --git a/doc/emacs/emacs.texi b/doc/emacs/emacs.texi index 13f60e8cfdf..9042f84e3b6 100644 --- a/doc/emacs/emacs.texi +++ b/doc/emacs/emacs.texi @@ -3,12 +3,27 @@ @setfilename ../../info/emacs @settitle GNU Emacs Manual -@c The edition number appears in several places in this file +@c The edition number appears in more than one place in this file +@c I don't really know what it means... +@c For example, it has said "Sixteenth" since sometime in the Emacs 22 +@c series, all through 23, and into 24. So it is not very useful IMO, +@c and offers nothing that EMACSVER does not. I guess it relates +@c mainly to the published book sold by the FSF. Hence no longer +@c bother including it except iftex. Really, I think it should not be +@c here at all (since anyone can make a pdf version), but should just +@c be something added by the FSF during the publishing process. +@c Also, the lispref uses a float (3.0), whereas this uses an ordinal, +@c so the format is not even consistent. @set EDITION Sixteenth @include emacsver.texi @copying +@iftex This is the @value{EDITION} edition of the @cite{GNU Emacs Manual},@* +@end iftex +@ifnottex +This is the @cite{GNU Emacs Manual}, +@end ifnottex updated for Emacs version @value{EMACSVER}. Copyright @copyright{} 1985-1987, 1993-2012 Free Software Foundation, Inc. diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 79177a3f59d..58508adb899 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,8 @@ +2012-05-01 Glenn Morris + + * elisp.texi (@copying): + * intro.texi (Introduction): Only print VERSION in the TeX version. + 2012-04-29 Chong Yidong * text.texi (Change Hooks): Minor fix for after-change-functions. diff --git a/doc/lispref/elisp.texi b/doc/lispref/elisp.texi index 9c5ae73f718..cbec93c4f6c 100644 --- a/doc/lispref/elisp.texi +++ b/doc/lispref/elisp.texi @@ -6,6 +6,7 @@ @c Version of the manual and of Emacs. @c Please remember to update these in vol1.texi and vol2.texi as well. +@c (See comments for EDITION in emacs.texi) @set VERSION 3.1 @include emacsver.texi @set DATE July 2012 @@ -40,7 +41,12 @@ @c @syncodeindex tp fn @copying -This is edition @value{VERSION} of the GNU Emacs Lisp Reference Manual,@* +@iftex +This is edition @value{VERSION} of the @cite{GNU Emacs Lisp Reference Manual},@* +@end iftex +@ifnottex +This is the @cite{GNU Emacs Lisp Reference Manual} +@end ifnottex corresponding to Emacs version @value{EMACSVER}. Copyright @copyright{} 1990-1996, 1998-2012 Free Software Foundation, Inc. diff --git a/doc/lispref/intro.texi b/doc/lispref/intro.texi index 9ae5e1fa849..2e678e02158 100644 --- a/doc/lispref/intro.texi +++ b/doc/lispref/intro.texi @@ -1,6 +1,6 @@ @c -*-coding: iso-latin-1-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990-1994, 2001-2012 Free Software Foundation, Inc. +@c Copyright (C) 1990-1994, 2001-2012 Free Software Foundation, Inc. @c See the file elisp.texi for copying conditions. @setfilename ../../info/intro @@ -34,8 +34,12 @@ Lisp that have counterparts in many programming languages, and later chapters describe features that are peculiar to Emacs Lisp or relate specifically to editing. - This is edition @value{VERSION} of the GNU Emacs Lisp Reference -Manual, corresponding to Emacs version @value{EMACSVER}. + This is +@iftex +edition @value{VERSION} of +@end iftex +the @cite{GNU Emacs Lisp Reference Manual}, +corresponding to Emacs version @value{EMACSVER}. @menu * Caveats:: Flaws and a request for help. From ae629daec9f8d0e4d2bd7b4ba9e42ab94ec672e6 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 1 May 2012 06:17:25 -0400 Subject: [PATCH 259/564] Auto-commit of generated files. --- autogen/Makefile.in | 3 +- autogen/config.in | 3 -- autogen/configure | 83 +++++++++++++++++---------------------------- 3 files changed, 32 insertions(+), 57 deletions(-) diff --git a/autogen/Makefile.in b/autogen/Makefile.in index 597fa3ec6aa..0fa0710d725 100644 --- a/autogen/Makefile.in +++ b/autogen/Makefile.in @@ -488,8 +488,7 @@ LD_FIRSTFLAG = @LD_FIRSTFLAG@ LD_SWITCH_SYSTEM = @LD_SWITCH_SYSTEM@ LD_SWITCH_SYSTEM_TEMACS = @LD_SWITCH_SYSTEM_TEMACS@ LD_SWITCH_X_SITE = @LD_SWITCH_X_SITE@ -LD_SWITCH_X_SITE_AUX = @LD_SWITCH_X_SITE_AUX@ -LD_SWITCH_X_SITE_AUX_RPATH = @LD_SWITCH_X_SITE_AUX_RPATH@ +LD_SWITCH_X_SITE_RPATH = @LD_SWITCH_X_SITE_RPATH@ LIBGIF = @LIBGIF@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ diff --git a/autogen/config.in b/autogen/config.in index 805629c9c8f..10efc70e6d3 100644 --- a/autogen/config.in +++ b/autogen/config.in @@ -474,9 +474,6 @@ along with GNU Emacs. If not, see . */ /* Define to 1 if you have the `mail' library (-lmail). */ #undef HAVE_LIBMAIL -/* Define to 1 if you have the `ncurses' library (-lncurses). */ -#undef HAVE_LIBNCURSES - /* Define to 1 if using libotf. */ #undef HAVE_LIBOTF diff --git a/autogen/configure b/autogen/configure index 5c57dcc0374..6e8ddc505fe 100755 --- a/autogen/configure +++ b/autogen/configure @@ -1164,8 +1164,7 @@ LIB_STANDARD NS_OBJC_OBJ NS_OBJ TEMACS_LDFLAGS2 -LD_SWITCH_X_SITE_AUX_RPATH -LD_SWITCH_X_SITE_AUX +LD_SWITCH_X_SITE_RPATH XMKMF DEPFLAGS MKDEPDIR @@ -8359,7 +8358,7 @@ esac ac_link="$ac_link $LD_SWITCH_SYSTEM" -## This setting of LD_SWITCH_SYSTEM references LD_SWITCH_X_SITE_AUX, +## This setting of LD_SWITCH_SYSTEM references LD_SWITCH_X_SITE_RPATH, ## which has not been defined yet. When this was handled with cpp, ## it was expanded to null when configure sourced the s/*.h file. ## Thus LD_SWITCH_SYSTEM had different values in configure and the Makefiles. @@ -8371,8 +8370,7 @@ ac_link="$ac_link $LD_SWITCH_SYSTEM" ## LD_SWITCH_SYSTEM_TEMACS. case "$opsys" in netbsd|openbsd) - ## _AUX_RPATH is like _AUX, but uses -rpath instead of -R. - LD_SWITCH_SYSTEM="\$(LD_SWITCH_X_SITE_AUX_RPATH) $LD_SWITCH_SYSTEM" ;; + LD_SWITCH_SYSTEM="\$(LD_SWITCH_X_SITE_RPATH) $LD_SWITCH_SYSTEM" ;; esac @@ -10253,13 +10251,11 @@ else window_system=x11 fi -LD_SWITCH_X_SITE_AUX= -LD_SWITCH_X_SITE_AUX_RPATH= +LD_SWITCH_X_SITE_RPATH= if test "${x_libraries}" != NONE; then if test -n "${x_libraries}"; then LD_SWITCH_X_SITE=-L`echo ${x_libraries} | sed -e "s/:/ -L/g"` - LD_SWITCH_X_SITE_AUX=-R`echo ${x_libraries} | sed -e "s/:/ -R/g"` - LD_SWITCH_X_SITE_AUX_RPATH=`echo ${LD_SWITCH_X_SITE_AUX} | sed -e 's/-R/-Wl,-rpath,/'` + LD_SWITCH_X_SITE_RPATH=-Wl,-rpath,`echo ${x_libraries} | sed -e "s/:/ -Wl,-rpath,/g"` fi x_default_search_path="" x_search_path=${x_libraries} @@ -10284,7 +10280,6 @@ ${x_library}/X11/%T/%N%S" fi - if test "${x_includes}" != NONE && test -n "${x_includes}"; then C_SWITCH_X_SITE="$isystem"`echo ${x_includes} | sed -e "s/:/ $isystem/g"` fi @@ -11089,9 +11084,9 @@ if test "${HAVE_X11}" = "yes"; then CPPFLAGS="$C_SWITCH_X_SITE $CPPFLAGS" # On Solaris, arrange for LD_RUN_PATH to point to the X libraries for tests. - # This is handled by LD_SWITCH_X_SITE_AUX during the real build, - # but it's more convenient here to set LD_RUN_PATH - # since this also works on hosts that don't understand LD_SWITCH_X_SITE_AUX. + # This is handled by LD_SWITCH_X_SITE_RPATH during the real build, + # but it's more convenient here to set LD_RUN_PATH since this + # also works on hosts that don't understand LD_SWITCH_X_SITE_RPATH. if test "${x_libraries}" != NONE && test -n "${x_libraries}"; then LD_RUN_PATH=$x_libraries${LD_RUN_PATH+:}$LD_RUN_PATH export LD_RUN_PATH @@ -14818,7 +14813,7 @@ $as_echo_n "checking for library containing tputs... " >&6; } # Maybe curses should be tried earlier? # See http://debbugs.gnu.org/cgi/bugreport.cgi?bug=9736#35 -for tputs_library in '' ncurses terminfo termcap curses; do +for tputs_library in '' tinfo ncurses terminfo termcap curses; do OLIBS=$LIBS if test -z "$tputs_library"; then LIBS_TERMCAP= @@ -14879,42 +14874,28 @@ done $as_echo "$msg" >&6; } if test "X$msg" = Xno; then as_fn_error "The required function \`tputs' was not found in any library. -These libraries were tried: libncurses, libterminfo, libtermcap, libcurses. +The following libraries were tried (in order): + libtinfo, libncurses, libterminfo, libtermcap, libcurses Please try installing whichever of these libraries is most appropriate for your system, together with its header files. For example, a libncurses-dev(el) or similar package." "$LINENO" 5 fi -# Must define this when any termcap library is found. -$as_echo "#define HAVE_LIBNCURSES 1" >>confdefs.h - -## FIXME This was the cpp logic, but I am not sure it is right. -## The above test has not necessarily found libncurses. -HAVE_LIBNCURSES=yes - -## Use terminfo instead of termcap? -## Note only system files NOT using terminfo are: -## freebsd < 40000, ms-w32, msdos, netbsd < 599002500, and -## darwin|gnu without ncurses. -TERMINFO=no +## Use termcap instead of terminfo? +## Only true for: freebsd < 40000, ms-w32, msdos, netbsd < 599002500. +TERMINFO=yes +## FIXME? In the cases below where we unconditionally set +## LIBS_TERMCAP="-lncurses", this overrides LIBS_TERMCAP = -ltinfo, +## if that was found above to have tputs. +## Should we use the gnu* logic everywhere? case "$opsys" in - ## cygwin: Fewer environment variables to go wrong, more terminal types. - ## hpux10-20: Use the system provided termcap(3) library. - ## openbsd: David Mazieres says this - ## is necessary. Otherwise Emacs dumps core when run -nw. - aix4-2|cygwin|hpux*|irix6-5|openbsd|sol2*|unixware) TERMINFO=yes ;; - ## darwin: Prevents crashes when running Emacs in Terminal.app under 10.2. ## The ncurses library has been moved out of the System framework in ## Mac OS X 10.2. So if configure detects it, set the command-line ## option to use it. - darwin|gnu*) - ## (HAVE_LIBNCURSES was not always true, but is since 2010-03-18.) - if test "x$HAVE_LIBNCURSES" = "xyes"; then - TERMINFO=yes - LIBS_TERMCAP="-lncurses" - fi - ;; + darwin) LIBS_TERMCAP="-lncurses" ;; + + gnu*) "x$LIBS_TERMCAP" = x && LIBS_TERMCAP="-lncurses" ;; freebsd) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether FreeBSD is new enough to use terminfo" >&5 @@ -14950,34 +14931,31 @@ fi $as_echo "$emacs_cv_freebsd_terminfo" >&6; } if test $emacs_cv_freebsd_terminfo = yes; then - TERMINFO=yes LIBS_TERMCAP="-lncurses" else + TERMINFO=no LIBS_TERMCAP="-ltermcap" fi ;; netbsd) if test $ac_cv_search_tputs = -lterminfo; then - TERMINFO=yes LIBS_TERMCAP="-lterminfo" else + TERMINFO=no LIBS_TERMCAP="-ltermcap" fi ;; -esac + openbsd) LIBS_TERMCAP="-lncurses" ;; -case "$opsys" in ## hpux: Make sure we get select from libc rather than from libcurses ## because libcurses on HPUX 10.10 has a broken version of select. ## We used to use -lc -lcurses, but this may be cleaner. + ## FIXME? But TERMINFO = yes on hpux (it used to be explicitly + # set that way, now it uses the default). Isn't this a contradiction? hpux*) LIBS_TERMCAP="-ltermcap" ;; - openbsd) LIBS_TERMCAP="-lncurses" ;; - - ## Must use system termcap, if we use any termcap. It does special things. - sol2*) test "$TERMINFO" != yes && LIBS_TERMCAP="-ltermcap" ;; esac TERMCAP_OBJ=tparam.o @@ -22854,13 +22832,14 @@ case "$opsys" in LD_SWITCH_SYSTEM_TEMACS="-X $LD_SWITCH_SYSTEM_TEMACS" ;; - ## LD_SWITCH_X_SITE_AUX is a -R option saying where to find X at run-time. - ## When handled by cpp, this was in LD_SWITCH_SYSTEM. However, at - ## the point where configure sourced the s/*.h file, LD_SWITCH_X_SITE_AUX + ## LD_SWITCH_X_SITE_RPATH is a -rpath option saying where to + ## find X at run-time. + ## When handled by cpp, this was in LD_SWITCH_SYSTEM. However, at the + ## point where configure sourced the s/*.h file, LD_SWITCH_X_SITE_RPATH ## had not yet been defined and was expanded to null. Hence LD_SWITCH_SYSTEM ## had different values in configure (in ac_link) and src/Makefile.in. ## It seems clearer therefore to put this piece in LD_SWITCH_SYSTEM_TEMACS. - gnu*) LD_SWITCH_SYSTEM_TEMACS="\$(LD_SWITCH_X_SITE_AUX_RPATH)" ;; + gnu*) LD_SWITCH_SYSTEM_TEMACS="\$(LD_SWITCH_X_SITE_RPATH)" ;; *) LD_SWITCH_SYSTEM_TEMACS= ;; esac From eb0ae1d14375a40eeda911da4812191d4f8d4baf Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 1 May 2012 06:20:43 -0400 Subject: [PATCH 260/564] Auto-commit of loaddefs files. --- lisp/ibuffer.el | 2 +- lisp/ldefs-boot.el | 1825 ++++++++++++++++++++++---------------------- 2 files changed, 897 insertions(+), 930 deletions(-) diff --git a/lisp/ibuffer.el b/lisp/ibuffer.el index ffede147144..adb7a12243a 100644 --- a/lisp/ibuffer.el +++ b/lisp/ibuffer.el @@ -2645,7 +2645,7 @@ will be inserted before the group at point." ;;;;;; ibuffer-backward-filter-group ibuffer-forward-filter-group ;;;;;; ibuffer-toggle-filter-group ibuffer-mouse-toggle-filter-group ;;;;;; ibuffer-interactive-filter-by-mode ibuffer-mouse-filter-by-mode -;;;;;; ibuffer-auto-mode) "ibuf-ext" "ibuf-ext.el" "98491557b04909791f687f2eecc88320") +;;;;;; ibuffer-auto-mode) "ibuf-ext" "ibuf-ext.el" "296999191b08d76d9763a8ebf510d5d8") ;;; Generated autoloads from ibuf-ext.el (autoload 'ibuffer-auto-mode "ibuf-ext" "\ diff --git a/lisp/ldefs-boot.el b/lisp/ldefs-boot.el index 347adb98fd0..487587bdbac 100644 --- a/lisp/ldefs-boot.el +++ b/lisp/ldefs-boot.el @@ -5,7 +5,7 @@ ;;;### (autoloads (5x5-crack 5x5-crack-xor-mutate 5x5-crack-mutating-best ;;;;;; 5x5-crack-mutating-current 5x5-crack-randomly 5x5) "5x5" -;;;;;; "play/5x5.el" (20309 60936)) +;;;;;; "play/5x5.el" (20355 10021)) ;;; Generated autoloads from play/5x5.el (autoload '5x5 "5x5" "\ @@ -68,7 +68,7 @@ should return a grid vector array that is the new solution. ;;;*** ;;;### (autoloads (ada-mode ada-add-extensions) "ada-mode" "progmodes/ada-mode.el" -;;;;;; (20341 24416)) +;;;;;; (20355 10021)) ;;; Generated autoloads from progmodes/ada-mode.el (autoload 'ada-add-extensions "ada-mode" "\ @@ -88,7 +88,7 @@ Ada mode is the major mode for editing Ada code. ;;;*** ;;;### (autoloads (ada-header) "ada-stmt" "progmodes/ada-stmt.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from progmodes/ada-stmt.el (autoload 'ada-header "ada-stmt" "\ @@ -99,7 +99,7 @@ Insert a descriptive header at the top of the file. ;;;*** ;;;### (autoloads (ada-find-file) "ada-xref" "progmodes/ada-xref.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from progmodes/ada-xref.el (autoload 'ada-find-file "ada-xref" "\ @@ -114,7 +114,7 @@ Completion is available. ;;;;;; add-change-log-entry-other-window add-change-log-entry find-change-log ;;;;;; prompt-for-change-log-name add-log-mailing-address add-log-full-name ;;;;;; add-log-current-defun-function) "add-log" "vc/add-log.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from vc/add-log.el (put 'change-log-default-name 'safe-local-variable 'string-or-null-p) @@ -214,13 +214,13 @@ Runs `change-log-mode-hook'. \(fn)" t nil) (defvar add-log-lisp-like-modes '(emacs-lisp-mode lisp-mode scheme-mode dsssl-mode lisp-interaction-mode) "\ -*Modes that look like Lisp to `add-log-current-defun'.") +Modes that look like Lisp to `add-log-current-defun'.") (defvar add-log-c-like-modes '(c-mode c++-mode c++-c-mode objc-mode) "\ -*Modes that look like C to `add-log-current-defun'.") +Modes that look like C to `add-log-current-defun'.") (defvar add-log-tex-like-modes '(TeX-mode plain-TeX-mode LaTeX-mode tex-mode) "\ -*Modes that look like TeX to `add-log-current-defun'.") +Modes that look like TeX to `add-log-current-defun'.") (autoload 'add-log-current-defun "add-log" "\ Return name of function definition point is in, or nil. @@ -253,7 +253,7 @@ old-style time formats for entries are supported. ;;;### (autoloads (defadvice ad-activate ad-add-advice ad-disable-advice ;;;;;; ad-enable-advice ad-default-compilation-action ad-redefinition-action) -;;;;;; "advice" "emacs-lisp/advice.el" (20309 60936)) +;;;;;; "advice" "emacs-lisp/advice.el" (20355 10021)) ;;; Generated autoloads from emacs-lisp/advice.el (defvar ad-redefinition-action 'warn "\ @@ -398,7 +398,7 @@ usage: (defadvice FUNCTION (CLASS NAME [POSITION] [ARGLIST] FLAG...) ;;;### (autoloads (align-newline-and-indent align-unhighlight-rule ;;;;;; align-highlight-rule align-current align-entire align-regexp -;;;;;; align) "align" "align.el" (20309 60936)) +;;;;;; align) "align" "align.el" (20355 10021)) ;;; Generated autoloads from align.el (autoload 'align "align" "\ @@ -489,7 +489,7 @@ A replacement function for `newline-and-indent', aligning as it goes. ;;;### (autoloads (outlineify-sticky allout-mode allout-mode-p allout-auto-activation ;;;;;; allout-setup allout-auto-activation-helper) "allout" "allout.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from allout.el (autoload 'allout-auto-activation-helper "allout" "\ @@ -850,7 +850,7 @@ for details on preparing Emacs for automatic allout activation. ;;;### (autoloads (allout-widgets-mode allout-widgets-auto-activation ;;;;;; allout-widgets-setup allout-widgets) "allout-widgets" "allout-widgets.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from allout-widgets.el (let ((loads (get 'allout-widgets 'custom-loads))) (if (member '"allout-widgets" loads) nil (put 'allout-widgets 'custom-loads (cons '"allout-widgets" loads)))) @@ -910,7 +910,7 @@ outline hot-spot navigation (see `allout-mode'). ;;;*** ;;;### (autoloads (ange-ftp-hook-function ange-ftp-reread-dir) "ange-ftp" -;;;;;; "net/ange-ftp.el" (20309 60936)) +;;;;;; "net/ange-ftp.el" (20373 11301)) ;;; Generated autoloads from net/ange-ftp.el (defalias 'ange-ftp-re-read-dir 'ange-ftp-reread-dir) @@ -932,7 +932,7 @@ directory, so that Emacs will know its current contents. ;;;*** ;;;### (autoloads (animate-birthday-present animate-sequence animate-string) -;;;;;; "animate" "play/animate.el" (20309 60936)) +;;;;;; "animate" "play/animate.el" (20355 10021)) ;;; Generated autoloads from play/animate.el (autoload 'animate-string "animate" "\ @@ -965,7 +965,7 @@ the buffer *Birthday-Present-for-Name*. ;;;*** ;;;### (autoloads (ansi-color-process-output ansi-color-for-comint-mode-on) -;;;;;; "ansi-color" "ansi-color.el" (20309 60936)) +;;;;;; "ansi-color" "ansi-color.el" (20355 10021)) ;;; Generated autoloads from ansi-color.el (autoload 'ansi-color-for-comint-mode-on "ansi-color" "\ @@ -991,7 +991,7 @@ This is a good function to put in `comint-output-filter-functions'. ;;;*** ;;;### (autoloads (antlr-set-tabs antlr-mode antlr-show-makefile-rules) -;;;;;; "antlr-mode" "progmodes/antlr-mode.el" (20309 60936)) +;;;;;; "antlr-mode" "progmodes/antlr-mode.el" (20355 10021)) ;;; Generated autoloads from progmodes/antlr-mode.el (autoload 'antlr-show-makefile-rules "antlr-mode" "\ @@ -1027,7 +1027,7 @@ Used in `antlr-mode'. Also a useful function in `java-mode-hook'. ;;;*** ;;;### (autoloads (appt-activate appt-add) "appt" "calendar/appt.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from calendar/appt.el (autoload 'appt-add "appt" "\ @@ -1050,7 +1050,7 @@ ARG is positive, otherwise off. ;;;### (autoloads (apropos-documentation apropos-value apropos-library ;;;;;; apropos apropos-documentation-property apropos-command apropos-variable -;;;;;; apropos-read-pattern) "apropos" "apropos.el" (20309 60936)) +;;;;;; apropos-read-pattern) "apropos" "apropos.el" (20374 32165)) ;;; Generated autoloads from apropos.el (autoload 'apropos-read-pattern "apropos" "\ @@ -1158,8 +1158,8 @@ Returns list of symbols and documentation found. ;;;*** -;;;### (autoloads (archive-mode) "arc-mode" "arc-mode.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (archive-mode) "arc-mode" "arc-mode.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from arc-mode.el (autoload 'archive-mode "arc-mode" "\ @@ -1179,7 +1179,7 @@ archive. ;;;*** -;;;### (autoloads (array-mode) "array" "array.el" (20309 60936)) +;;;### (autoloads (array-mode) "array" "array.el" (20355 10021)) ;;; Generated autoloads from array.el (autoload 'array-mode "array" "\ @@ -1250,13 +1250,13 @@ Entering array mode calls the function `array-mode-hook'. ;;;*** -;;;### (autoloads (artist-mode) "artist" "textmodes/artist.el" (20328 -;;;;;; 17454)) +;;;### (autoloads (artist-mode) "artist" "textmodes/artist.el" (20357 +;;;;;; 58785)) ;;; Generated autoloads from textmodes/artist.el (autoload 'artist-mode "artist" "\ Toggle Artist mode. -With argument STATE, turn Artist mode on if STATE is positive. +With argument ARG, turn Artist mode on if ARG is positive. Artist lets you draw lines, squares, rectangles and poly-lines, ellipses and circles with your mouse and/or keyboard. @@ -1445,20 +1445,19 @@ Variables Hooks - When entering artist-mode, the hook `artist-mode-init-hook' is called. - When quitting artist-mode, the hook `artist-mode-exit-hook' is called. + Turning the mode on or off runs `artist-mode-hook'. Keymap summary \\{artist-mode-map} -\(fn &optional STATE)" t nil) +\(fn &optional ARG)" t nil) ;;;*** -;;;### (autoloads (asm-mode) "asm-mode" "progmodes/asm-mode.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (asm-mode) "asm-mode" "progmodes/asm-mode.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from progmodes/asm-mode.el (autoload 'asm-mode "asm-mode" "\ @@ -1486,7 +1485,7 @@ Special commands: ;;;*** ;;;### (autoloads (auth-source-cache-expiry) "auth-source" "gnus/auth-source.el" -;;;;;; (20332 33075)) +;;;;;; (20381 5411)) ;;; Generated autoloads from gnus/auth-source.el (defvar auth-source-cache-expiry 7200 "\ @@ -1499,7 +1498,7 @@ let-binding.") ;;;*** ;;;### (autoloads (autoarg-kp-mode autoarg-mode) "autoarg" "autoarg.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from autoarg.el (defvar autoarg-mode nil "\ @@ -1560,7 +1559,7 @@ This is similar to `autoarg-mode' but rebinds the keypad keys ;;;*** ;;;### (autoloads (autoconf-mode) "autoconf" "progmodes/autoconf.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from progmodes/autoconf.el (autoload 'autoconf-mode "autoconf" "\ @@ -1571,7 +1570,7 @@ Major mode for editing Autoconf configure.in files. ;;;*** ;;;### (autoloads (auto-insert-mode define-auto-insert auto-insert) -;;;;;; "autoinsert" "autoinsert.el" (20309 60936)) +;;;;;; "autoinsert" "autoinsert.el" (20355 10021)) ;;; Generated autoloads from autoinsert.el (autoload 'auto-insert "autoinsert" "\ @@ -1611,7 +1610,7 @@ insert a template for the file depending on the mode of the buffer. ;;;### (autoloads (batch-update-autoloads update-directory-autoloads ;;;;;; update-file-autoloads) "autoload" "emacs-lisp/autoload.el" -;;;;;; (20309 60936)) +;;;;;; (20356 55829)) ;;; Generated autoloads from emacs-lisp/autoload.el (put 'generated-autoload-file 'safe-local-variable 'stringp) @@ -1662,7 +1661,7 @@ should be non-nil). ;;;### (autoloads (global-auto-revert-mode turn-on-auto-revert-tail-mode ;;;;;; auto-revert-tail-mode turn-on-auto-revert-mode auto-revert-mode) -;;;;;; "autorevert" "autorevert.el" (20317 24654)) +;;;;;; "autorevert" "autorevert.el" (20373 11301)) ;;; Generated autoloads from autorevert.el (autoload 'auto-revert-mode "autorevert" "\ @@ -1751,7 +1750,7 @@ specifies in the mode line. ;;;*** ;;;### (autoloads (mouse-avoidance-mode mouse-avoidance-mode) "avoid" -;;;;;; "avoid.el" (20309 60936)) +;;;;;; "avoid.el" (20369 14251)) ;;; Generated autoloads from avoid.el (defvar mouse-avoidance-mode nil "\ @@ -1792,7 +1791,7 @@ definition of \"random distance\".) ;;;*** ;;;### (autoloads (display-battery-mode battery) "battery" "battery.el" -;;;;;; (20309 60936)) +;;;;;; (20369 14251)) ;;; Generated autoloads from battery.el (put 'battery-mode-line-string 'risky-local-variable t) @@ -1828,7 +1827,7 @@ seconds. ;;;*** ;;;### (autoloads (benchmark benchmark-run-compiled benchmark-run) -;;;;;; "benchmark" "emacs-lisp/benchmark.el" (20309 60936)) +;;;;;; "benchmark" "emacs-lisp/benchmark.el" (20355 10021)) ;;; Generated autoloads from emacs-lisp/benchmark.el (autoload 'benchmark-run "benchmark" "\ @@ -1861,7 +1860,7 @@ For non-interactive use see also `benchmark-run' and ;;;*** ;;;### (autoloads (bibtex-search-entry bibtex-mode bibtex-initialize) -;;;;;; "bibtex" "textmodes/bibtex.el" (20309 60936)) +;;;;;; "bibtex" "textmodes/bibtex.el" (20355 10021)) ;;; Generated autoloads from textmodes/bibtex.el (autoload 'bibtex-initialize "bibtex" "\ @@ -1950,7 +1949,7 @@ A prefix arg negates the value of `bibtex-search-entry-globally'. ;;;*** ;;;### (autoloads (bibtex-style-mode) "bibtex-style" "textmodes/bibtex-style.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from textmodes/bibtex-style.el (autoload 'bibtex-style-mode "bibtex-style" "\ @@ -1962,7 +1961,7 @@ Major mode for editing BibTeX style files. ;;;### (autoloads (binhex-decode-region binhex-decode-region-external ;;;;;; binhex-decode-region-internal) "binhex" "mail/binhex.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from mail/binhex.el (defconst binhex-begin-line "^:...............................................................$" "\ @@ -1986,8 +1985,8 @@ Binhex decode region between START and END. ;;;*** -;;;### (autoloads (blackbox) "blackbox" "play/blackbox.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (blackbox) "blackbox" "play/blackbox.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from play/blackbox.el (autoload 'blackbox "blackbox" "\ @@ -2110,7 +2109,7 @@ a reflection. ;;;;;; bookmark-save bookmark-write bookmark-delete bookmark-insert ;;;;;; bookmark-rename bookmark-insert-location bookmark-relocate ;;;;;; bookmark-jump-other-window bookmark-jump bookmark-set) "bookmark" -;;;;;; "bookmark.el" (20309 60936)) +;;;;;; "bookmark.el" (20355 10021)) ;;; Generated autoloads from bookmark.el (define-key ctl-x-r-map "b" 'bookmark-jump) (define-key ctl-x-r-map "m" 'bookmark-set) @@ -2311,7 +2310,7 @@ Incremental search of bookmarks, hiding the non-matches as we go. ;;;;;; browse-url-xdg-open browse-url-at-mouse browse-url-at-point ;;;;;; browse-url browse-url-of-region browse-url-of-dired-file ;;;;;; browse-url-of-buffer browse-url-of-file browse-url-browser-function) -;;;;;; "browse-url" "net/browse-url.el" (20309 60936)) +;;;;;; "browse-url" "net/browse-url.el" (20361 20134)) ;;; Generated autoloads from net/browse-url.el (defvar browse-url-browser-function 'browse-url-default-browser "\ @@ -2626,8 +2625,8 @@ from `browse-url-elinks-wrapper'. ;;;*** -;;;### (autoloads (snarf-bruces bruce) "bruce" "play/bruce.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (snarf-bruces bruce) "bruce" "play/bruce.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from play/bruce.el (autoload 'bruce "bruce" "\ @@ -2643,7 +2642,7 @@ Return a vector containing the lines from `bruce-phrases-file'. ;;;*** ;;;### (autoloads (bs-show bs-customize bs-cycle-previous bs-cycle-next) -;;;;;; "bs" "bs.el" (20309 60936)) +;;;;;; "bs" "bs.el" (20369 14251)) ;;; Generated autoloads from bs.el (autoload 'bs-cycle-next "bs" "\ @@ -2683,7 +2682,7 @@ name of buffer configuration. ;;;*** -;;;### (autoloads (bubbles) "bubbles" "play/bubbles.el" (20309 60936)) +;;;### (autoloads (bubbles) "bubbles" "play/bubbles.el" (20355 10021)) ;;; Generated autoloads from play/bubbles.el (autoload 'bubbles "bubbles" "\ @@ -2705,7 +2704,7 @@ columns on its right towards the left. ;;;*** ;;;### (autoloads (bug-reference-prog-mode bug-reference-mode) "bug-reference" -;;;;;; "progmodes/bug-reference.el" (20309 60936)) +;;;;;; "progmodes/bug-reference.el" (20355 10021)) ;;; Generated autoloads from progmodes/bug-reference.el (put 'bug-reference-url-format 'safe-local-variable (lambda (s) (or (stringp s) (and (symbolp s) (get s 'bug-reference-url-format))))) @@ -2729,7 +2728,7 @@ Like `bug-reference-mode', but only buttonize in comments and strings. ;;;;;; batch-byte-compile-if-not-done display-call-tree byte-compile ;;;;;; compile-defun byte-compile-file byte-recompile-directory ;;;;;; byte-force-recompile byte-compile-enable-warning byte-compile-disable-warning) -;;;;;; "bytecomp" "emacs-lisp/bytecomp.el" (20341 24416)) +;;;;;; "bytecomp" "emacs-lisp/bytecomp.el" (20355 10021)) ;;; Generated autoloads from emacs-lisp/bytecomp.el (put 'byte-compile-dynamic 'safe-local-variable 'booleanp) (put 'byte-compile-disable-print-circle 'safe-local-variable 'booleanp) @@ -2849,8 +2848,8 @@ and corresponding effects. ;;;*** -;;;### (autoloads nil "cal-china" "calendar/cal-china.el" (20309 -;;;;;; 60936)) +;;;### (autoloads nil "cal-china" "calendar/cal-china.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from calendar/cal-china.el (put 'calendar-chinese-time-zone 'risky-local-variable t) @@ -2859,7 +2858,7 @@ and corresponding effects. ;;;*** -;;;### (autoloads nil "cal-dst" "calendar/cal-dst.el" (20309 60936)) +;;;### (autoloads nil "cal-dst" "calendar/cal-dst.el" (20355 10021)) ;;; Generated autoloads from calendar/cal-dst.el (put 'calendar-daylight-savings-starts 'risky-local-variable t) @@ -2871,7 +2870,7 @@ and corresponding effects. ;;;*** ;;;### (autoloads (calendar-hebrew-list-yahrzeits) "cal-hebrew" "calendar/cal-hebrew.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from calendar/cal-hebrew.el (autoload 'calendar-hebrew-list-yahrzeits "cal-hebrew" "\ @@ -2887,8 +2886,8 @@ from the cursor position. ;;;### (autoloads (defmath calc-embedded-activate calc-embedded calc-grab-rectangle ;;;;;; calc-grab-region full-calc-keypad calc-keypad calc-eval quick-calc -;;;;;; full-calc calc calc-dispatch) "calc" "calc/calc.el" (20309 -;;;;;; 60936)) +;;;;;; full-calc calc calc-dispatch) "calc" "calc/calc.el" (20373 +;;;;;; 11301)) ;;; Generated autoloads from calc/calc.el (define-key ctl-x-map "*" 'calc-dispatch) @@ -2972,8 +2971,8 @@ See Info node `(calc)Defining Functions'. ;;;*** -;;;### (autoloads (calc-undo) "calc-undo" "calc/calc-undo.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (calc-undo) "calc-undo" "calc/calc-undo.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from calc/calc-undo.el (autoload 'calc-undo "calc-undo" "\ @@ -2983,8 +2982,8 @@ See Info node `(calc)Defining Functions'. ;;;*** -;;;### (autoloads (calculator) "calculator" "calculator.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (calculator) "calculator" "calculator.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from calculator.el (autoload 'calculator "calculator" "\ @@ -2995,8 +2994,8 @@ See the documentation for `calculator-mode' for more information. ;;;*** -;;;### (autoloads (calendar) "calendar" "calendar/calendar.el" (20343 -;;;;;; 47906)) +;;;### (autoloads (calendar) "calendar" "calendar/calendar.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from calendar/calendar.el (autoload 'calendar "calendar" "\ @@ -3040,7 +3039,7 @@ This function is suitable for execution in a .emacs file. ;;;*** ;;;### (autoloads (canlock-verify canlock-insert-header) "canlock" -;;;;;; "gnus/canlock.el" (20309 60936)) +;;;;;; "gnus/canlock.el" (20355 10021)) ;;; Generated autoloads from gnus/canlock.el (autoload 'canlock-insert-header "canlock" "\ @@ -3058,7 +3057,7 @@ it fails. ;;;*** ;;;### (autoloads (capitalized-words-mode) "cap-words" "progmodes/cap-words.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from progmodes/cap-words.el (autoload 'capitalized-words-mode "cap-words" "\ @@ -3097,15 +3096,15 @@ Obsoletes `c-forward-into-nomenclature'. ;;;*** -;;;### (autoloads nil "cc-compat" "progmodes/cc-compat.el" (20309 -;;;;;; 60936)) +;;;### (autoloads nil "cc-compat" "progmodes/cc-compat.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from progmodes/cc-compat.el (put 'c-indent-level 'safe-local-variable 'integerp) ;;;*** ;;;### (autoloads (c-guess-basic-syntax) "cc-engine" "progmodes/cc-engine.el" -;;;;;; (20324 28875)) +;;;;;; (20373 11301)) ;;; Generated autoloads from progmodes/cc-engine.el (autoload 'c-guess-basic-syntax "cc-engine" "\ @@ -3117,7 +3116,7 @@ Return the syntactic context of the current line. ;;;### (autoloads (c-guess-install c-guess-region-no-install c-guess-region ;;;;;; c-guess-buffer-no-install c-guess-buffer c-guess-no-install -;;;;;; c-guess) "cc-guess" "progmodes/cc-guess.el" (20309 60936)) +;;;;;; c-guess) "cc-guess" "progmodes/cc-guess.el" (20355 10021)) ;;; Generated autoloads from progmodes/cc-guess.el (defvar c-guess-guessed-offsets-alist nil "\ @@ -3217,7 +3216,7 @@ the absolute file name of the file if STYLE-NAME is nil. ;;;### (autoloads (awk-mode pike-mode idl-mode java-mode objc-mode ;;;;;; c++-mode c-mode c-initialize-cc-mode) "cc-mode" "progmodes/cc-mode.el" -;;;;;; (20324 28875)) +;;;;;; (20369 14251)) ;;; Generated autoloads from progmodes/cc-mode.el (autoload 'c-initialize-cc-mode "cc-mode" "\ @@ -3394,7 +3393,7 @@ Key bindings: ;;;*** ;;;### (autoloads (c-set-offset c-add-style c-set-style) "cc-styles" -;;;;;; "progmodes/cc-styles.el" (20309 60936)) +;;;;;; "progmodes/cc-styles.el" (20355 10021)) ;;; Generated autoloads from progmodes/cc-styles.el (autoload 'c-set-style "cc-styles" "\ @@ -3445,7 +3444,7 @@ and exists only for compatibility reasons. ;;;*** -;;;### (autoloads nil "cc-vars" "progmodes/cc-vars.el" (20309 60936)) +;;;### (autoloads nil "cc-vars" "progmodes/cc-vars.el" (20355 10021)) ;;; Generated autoloads from progmodes/cc-vars.el (put 'c-basic-offset 'safe-local-variable 'integerp) (put 'c-backslash-column 'safe-local-variable 'integerp) @@ -3455,7 +3454,7 @@ and exists only for compatibility reasons. ;;;### (autoloads (ccl-execute-with-args check-ccl-program define-ccl-program ;;;;;; declare-ccl-program ccl-dump ccl-compile) "ccl" "international/ccl.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from international/ccl.el (autoload 'ccl-compile "ccl" "\ @@ -3716,7 +3715,7 @@ See the documentation of `define-ccl-program' for the detail of CCL program. ;;;*** ;;;### (autoloads (cconv-closure-convert) "cconv" "emacs-lisp/cconv.el" -;;;;;; (20309 60936)) +;;;;;; (20377 8374)) ;;; Generated autoloads from emacs-lisp/cconv.el (autoload 'cconv-closure-convert "cconv" "\ @@ -3731,7 +3730,7 @@ Returns a form where all lambdas don't have any free variables. ;;;*** ;;;### (autoloads (cfengine-auto-mode cfengine2-mode cfengine3-mode) -;;;;;; "cfengine" "progmodes/cfengine.el" (20309 60936)) +;;;;;; "cfengine" "progmodes/cfengine.el" (20355 10021)) ;;; Generated autoloads from progmodes/cfengine.el (autoload 'cfengine3-mode "cfengine" "\ @@ -3761,7 +3760,7 @@ on the buffer contents ;;;*** ;;;### (autoloads (check-declare-directory check-declare-file) "check-declare" -;;;;;; "emacs-lisp/check-declare.el" (20309 60936)) +;;;;;; "emacs-lisp/check-declare.el" (20378 29222)) ;;; Generated autoloads from emacs-lisp/check-declare.el (autoload 'check-declare-file "check-declare" "\ @@ -3786,7 +3785,7 @@ Returns non-nil if any false statements are found. ;;;;;; checkdoc-comments checkdoc-continue checkdoc-start checkdoc-current-buffer ;;;;;; checkdoc-eval-current-buffer checkdoc-message-interactive ;;;;;; checkdoc-interactive checkdoc checkdoc-list-of-strings-p) -;;;;;; "checkdoc" "emacs-lisp/checkdoc.el" (20309 60936)) +;;;;;; "checkdoc" "emacs-lisp/checkdoc.el" (20355 10021)) ;;; Generated autoloads from emacs-lisp/checkdoc.el (put 'checkdoc-force-docstrings-flag 'safe-local-variable 'booleanp) (put 'checkdoc-force-history-flag 'safe-local-variable 'booleanp) @@ -3982,7 +3981,7 @@ checking of documentation strings. ;;;### (autoloads (pre-write-encode-hz post-read-decode-hz encode-hz-buffer ;;;;;; encode-hz-region decode-hz-buffer decode-hz-region) "china-util" -;;;;;; "language/china-util.el" (20309 60936)) +;;;;;; "language/china-util.el" (20355 10021)) ;;; Generated autoloads from language/china-util.el (autoload 'decode-hz-region "china-util" "\ @@ -4020,7 +4019,7 @@ Encode the text in the current buffer to HZ. ;;;*** ;;;### (autoloads (command-history list-command-history repeat-matching-complex-command) -;;;;;; "chistory" "chistory.el" (20309 60936)) +;;;;;; "chistory" "chistory.el" (20355 10021)) ;;; Generated autoloads from chistory.el (autoload 'repeat-matching-complex-command "chistory" "\ @@ -4059,7 +4058,7 @@ and runs the normal hook `command-history-hook'. ;;;*** -;;;### (autoloads nil "cl" "emacs-lisp/cl.el" (20309 60936)) +;;;### (autoloads nil "cl" "emacs-lisp/cl.el" (20355 10021)) ;;; Generated autoloads from emacs-lisp/cl.el (defvar custom-print-functions nil "\ @@ -4075,7 +4074,7 @@ a future Emacs interpreter will be able to use it.") ;;;*** ;;;### (autoloads (common-lisp-indent-function) "cl-indent" "emacs-lisp/cl-indent.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from emacs-lisp/cl-indent.el (autoload 'common-lisp-indent-function "cl-indent" "\ @@ -4154,7 +4153,7 @@ For example, the function `case' has an indent property ;;;*** ;;;### (autoloads (c-macro-expand) "cmacexp" "progmodes/cmacexp.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from progmodes/cmacexp.el (autoload 'c-macro-expand "cmacexp" "\ @@ -4174,8 +4173,8 @@ For use inside Lisp programs, see also `c-macro-expansion'. ;;;*** -;;;### (autoloads (run-scheme) "cmuscheme" "cmuscheme.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (run-scheme) "cmuscheme" "cmuscheme.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from cmuscheme.el (autoload 'run-scheme "cmuscheme" "\ @@ -4195,7 +4194,7 @@ is run). ;;;*** -;;;### (autoloads (color-name-to-rgb) "color" "color.el" (20309 60936)) +;;;### (autoloads (color-name-to-rgb) "color" "color.el" (20355 10021)) ;;; Generated autoloads from color.el (autoload 'color-name-to-rgb "color" "\ @@ -4217,7 +4216,7 @@ If FRAME cannot display COLOR, return nil. ;;;### (autoloads (comint-redirect-results-list-from-process comint-redirect-results-list ;;;;;; comint-redirect-send-command-to-process comint-redirect-send-command ;;;;;; comint-run make-comint make-comint-in-buffer) "comint" "comint.el" -;;;;;; (20321 40986)) +;;;;;; (20376 40834)) ;;; Generated autoloads from comint.el (defvar comint-output-filter-functions '(ansi-color-process-output comint-postoutput-scroll-to-bottom comint-watch-for-password-prompt) "\ @@ -4236,16 +4235,21 @@ either globally or locally.") (autoload 'make-comint-in-buffer "comint" "\ Make a Comint process NAME in BUFFER, running PROGRAM. If BUFFER is nil, it defaults to NAME surrounded by `*'s. -PROGRAM should be either a string denoting an executable program to create -via `start-file-process', or a cons pair of the form (HOST . SERVICE) denoting -a TCP connection to be opened via `open-network-stream'. If there is already -a running process in that buffer, it is not restarted. Optional fourth arg -STARTFILE is the name of a file, whose contents are sent to the -process as its initial input. +If there is a running process in BUFFER, it is not restarted. + +PROGRAM should be one of the following: +- a string, denoting an executable program to create via + `start-file-process' +- a cons pair of the form (HOST . SERVICE), denoting a TCP + connection to be opened via `open-network-stream' +- nil, denoting a newly-allocated pty. + +Optional fourth arg STARTFILE is the name of a file, whose +contents are sent to the process as its initial input. If PROGRAM is a string, any more args are arguments to PROGRAM. -Returns the (possibly newly created) process buffer. +Return the (possibly newly created) process buffer. \(fn NAME BUFFER PROGRAM &optional STARTFILE &rest SWITCHES)" nil nil) @@ -4312,7 +4316,7 @@ REGEXP-GROUP is the regular expression group in REGEXP to use. ;;;*** ;;;### (autoloads (compare-windows) "compare-w" "vc/compare-w.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from vc/compare-w.el (autoload 'compare-windows "compare-w" "\ @@ -4349,8 +4353,8 @@ on third call it again advances points to the next difference and so on. ;;;;;; compilation-shell-minor-mode compilation-mode compilation-start ;;;;;; compile compilation-disable-input compile-command compilation-search-path ;;;;;; compilation-ask-about-save compilation-window-height compilation-start-hook -;;;;;; compilation-mode-hook) "compile" "progmodes/compile.el" (20309 -;;;;;; 60936)) +;;;;;; compilation-mode-hook) "compile" "progmodes/compile.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from progmodes/compile.el (defvar compilation-mode-hook nil "\ @@ -4374,7 +4378,7 @@ Number of lines in a compilation window. If nil, use Emacs default.") (custom-autoload 'compilation-window-height "compile" t) (defvar compilation-process-setup-function nil "\ -*Function to call to customize the compilation process. +Function to call to customize the compilation process. This function is called immediately before the compilation process is started. It can be used to set any variables or functions that are used while processing the output of the compilation process.") @@ -4530,7 +4534,7 @@ This is the value of `next-error-function' in Compilation buffers. ;;;*** ;;;### (autoloads (dynamic-completion-mode) "completion" "completion.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from completion.el (defvar dynamic-completion-mode nil "\ @@ -4555,7 +4559,7 @@ if ARG is omitted or nil. ;;;### (autoloads (conf-xdefaults-mode conf-ppd-mode conf-colon-mode ;;;;;; conf-space-keywords conf-space-mode conf-javaprop-mode conf-windows-mode ;;;;;; conf-unix-mode conf-mode) "conf-mode" "textmodes/conf-mode.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from textmodes/conf-mode.el (autoload 'conf-mode "conf-mode" "\ @@ -4711,7 +4715,7 @@ For details see `conf-mode'. Example: ;;;*** ;;;### (autoloads (shuffle-vector cookie-snarf cookie-insert cookie) -;;;;;; "cookie1" "play/cookie1.el" (20309 60936)) +;;;;;; "cookie1" "play/cookie1.el" (20364 27900)) ;;; Generated autoloads from play/cookie1.el (autoload 'cookie "cookie1" "\ @@ -4743,8 +4747,8 @@ Randomly permute the elements of VECTOR (all permutations equally likely). ;;;*** ;;;### (autoloads (copyright-update-directory copyright copyright-fix-years -;;;;;; copyright-update) "copyright" "emacs-lisp/copyright.el" (20324 -;;;;;; 28875)) +;;;;;; copyright-update) "copyright" "emacs-lisp/copyright.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from emacs-lisp/copyright.el (put 'copyright-at-end-flag 'safe-local-variable 'booleanp) (put 'copyright-names-regexp 'safe-local-variable 'stringp) @@ -4783,7 +4787,7 @@ If FIX is non-nil, run `copyright-fix-years' instead. ;;;*** ;;;### (autoloads (cperl-perldoc-at-point cperl-perldoc cperl-mode) -;;;;;; "cperl-mode" "progmodes/cperl-mode.el" (20309 60936)) +;;;;;; "cperl-mode" "progmodes/cperl-mode.el" (20355 10021)) ;;; Generated autoloads from progmodes/cperl-mode.el (put 'cperl-indent-level 'safe-local-variable 'integerp) (put 'cperl-brace-offset 'safe-local-variable 'integerp) @@ -4982,7 +4986,7 @@ Run a `perldoc' on the word around point. ;;;*** ;;;### (autoloads (cpp-parse-edit cpp-highlight-buffer) "cpp" "progmodes/cpp.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from progmodes/cpp.el (autoload 'cpp-highlight-buffer "cpp" "\ @@ -5001,7 +5005,7 @@ Edit display information for cpp conditionals. ;;;*** ;;;### (autoloads (crisp-mode crisp-mode) "crisp" "emulation/crisp.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from emulation/crisp.el (defvar crisp-mode nil "\ @@ -5027,7 +5031,7 @@ if ARG is omitted or nil. ;;;*** ;;;### (autoloads (completing-read-multiple) "crm" "emacs-lisp/crm.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from emacs-lisp/crm.el (autoload 'completing-read-multiple "crm" "\ @@ -5062,8 +5066,8 @@ INHERIT-INPUT-METHOD. ;;;*** -;;;### (autoloads (css-mode) "css-mode" "textmodes/css-mode.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (css-mode) "css-mode" "textmodes/css-mode.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from textmodes/css-mode.el (autoload 'css-mode "css-mode" "\ @@ -5074,7 +5078,7 @@ Major mode to edit Cascading Style Sheets. ;;;*** ;;;### (autoloads (cua-selection-mode cua-mode) "cua-base" "emulation/cua-base.el" -;;;;;; (20315 3938)) +;;;;;; (20361 20134)) ;;; Generated autoloads from emulation/cua-base.el (defvar cua-mode nil "\ @@ -5134,7 +5138,7 @@ Enable CUA selection mode without the C-z/C-x/C-c/C-v bindings. ;;;;;; customize-mode customize customize-push-and-save customize-save-variable ;;;;;; customize-set-variable customize-set-value custom-menu-sort-alphabetically ;;;;;; custom-buffer-sort-alphabetically custom-browse-sort-alphabetically) -;;;;;; "cus-edit" "cus-edit.el" (20309 60936)) +;;;;;; "cus-edit" "cus-edit.el" (20375 53029)) ;;; Generated autoloads from cus-edit.el (defvar custom-browse-sort-alphabetically nil "\ @@ -5239,14 +5243,14 @@ Customize GROUP, which must be a customization group, in another window. (defalias 'customize-variable 'customize-option) (autoload 'customize-option "cus-edit" "\ -Customize SYMBOL, which must be a user option variable. +Customize SYMBOL, which must be a user option. \(fn SYMBOL)" t nil) (defalias 'customize-variable-other-window 'customize-option-other-window) (autoload 'customize-option-other-window "cus-edit" "\ -Customize SYMBOL, which must be a user option variable. +Customize SYMBOL, which must be a user option. Show the buffer in another window, but don't select it. \(fn SYMBOL)" t nil) @@ -5286,9 +5290,10 @@ the official name of the package, such as MH-E or Gnus.") (autoload 'customize-changed-options "cus-edit" "\ Customize all settings whose meanings have changed in Emacs itself. -This includes new user option variables and faces, and new -customization groups, as well as older options and faces whose meanings -or default values have changed since the previous major Emacs release. +This includes new user options and faces, and new customization +groups, as well as older options and faces whose meanings or +default values have changed since the previous major Emacs +release. With argument SINCE-VERSION (a string), customize all settings that were added or redefined since that version. @@ -5332,7 +5337,7 @@ Customize all saved options and faces. \(fn)" t nil) (autoload 'customize-apropos "cus-edit" "\ -Customize all loaded options, faces and groups matching PATTERN. +Customize loaded options, faces and groups matching PATTERN. PATTERN can be a word, a list of words (separated by spaces), or a regexp (using some regexp special characters). If it is a word, search for matches for that word as a substring. If it is a list of words, @@ -5341,18 +5346,13 @@ search for matches for any two (or more) of those words. If TYPE is `options', include only options. If TYPE is `faces', include only faces. If TYPE is `groups', include only groups. -If TYPE is t (interactively, with prefix arg), include variables -that are not customizable options, as well as faces and groups -\(but we recommend using `apropos-variable' instead). \(fn PATTERN &optional TYPE)" t nil) (autoload 'customize-apropos-options "cus-edit" "\ Customize all loaded customizable options matching REGEXP. -With prefix ARG, include variables that are not customizable options -\(but it is better to use `apropos-variable' if you want to find those). -\(fn REGEXP &optional ARG)" t nil) +\(fn REGEXP &optional IGNORED)" t nil) (autoload 'customize-apropos-faces "cus-edit" "\ Customize all loaded faces matching REGEXP. @@ -5450,8 +5450,8 @@ The format is suitable for use with `easy-menu-define'. ;;;*** ;;;### (autoloads (customize-themes describe-theme custom-theme-visit-theme -;;;;;; customize-create-theme) "cus-theme" "cus-theme.el" (20335 -;;;;;; 8681)) +;;;;;; customize-create-theme) "cus-theme" "cus-theme.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from cus-theme.el (autoload 'customize-create-theme "cus-theme" "\ @@ -5485,7 +5485,7 @@ omitted, a buffer named *Custom Themes* is used. ;;;*** ;;;### (autoloads (cvs-status-mode) "cvs-status" "vc/cvs-status.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from vc/cvs-status.el (autoload 'cvs-status-mode "cvs-status" "\ @@ -5496,7 +5496,7 @@ Mode used for cvs status output. ;;;*** ;;;### (autoloads (global-cwarn-mode turn-on-cwarn-mode cwarn-mode) -;;;;;; "cwarn" "progmodes/cwarn.el" (20309 60936)) +;;;;;; "cwarn" "progmodes/cwarn.el" (20355 10021)) ;;; Generated autoloads from progmodes/cwarn.el (autoload 'cwarn-mode "cwarn" "\ @@ -5547,7 +5547,7 @@ See `cwarn-mode' for more information on Cwarn mode. ;;;### (autoloads (standard-display-cyrillic-translit cyrillic-encode-alternativnyj-char ;;;;;; cyrillic-encode-koi8-r-char) "cyril-util" "language/cyril-util.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from language/cyril-util.el (autoload 'cyrillic-encode-koi8-r-char "cyril-util" "\ @@ -5576,7 +5576,7 @@ If the argument is nil, we return the display table to its standard state. ;;;*** ;;;### (autoloads (dabbrev-expand dabbrev-completion) "dabbrev" "dabbrev.el" -;;;;;; (20320 14810)) +;;;;;; (20355 10021)) ;;; Generated autoloads from dabbrev.el (put 'dabbrev-case-fold-search 'risky-local-variable t) (put 'dabbrev-case-replace 'risky-local-variable t) @@ -5623,7 +5623,7 @@ See also `dabbrev-abbrev-char-regexp' and \\[dabbrev-completion]. ;;;*** ;;;### (autoloads (data-debug-new-buffer) "data-debug" "cedet/data-debug.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from cedet/data-debug.el (autoload 'data-debug-new-buffer "data-debug" "\ @@ -5633,8 +5633,8 @@ Create a new data-debug buffer with NAME. ;;;*** -;;;### (autoloads (dbus-handle-event) "dbus" "net/dbus.el" (20314 -;;;;;; 46279)) +;;;### (autoloads (dbus-handle-event) "dbus" "net/dbus.el" (20373 +;;;;;; 11301)) ;;; Generated autoloads from net/dbus.el (autoload 'dbus-handle-event "dbus" "\ @@ -5647,8 +5647,8 @@ If the HANDLER returns a `dbus-error', it is propagated as return message. ;;;*** -;;;### (autoloads (dcl-mode) "dcl-mode" "progmodes/dcl-mode.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (dcl-mode) "dcl-mode" "progmodes/dcl-mode.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from progmodes/dcl-mode.el (autoload 'dcl-mode "dcl-mode" "\ @@ -5775,7 +5775,7 @@ There is some minimal font-lock support (see vars ;;;*** ;;;### (autoloads (cancel-debug-on-entry debug-on-entry debug) "debug" -;;;;;; "emacs-lisp/debug.el" (20309 60936)) +;;;;;; "emacs-lisp/debug.el" (20355 10021)) ;;; Generated autoloads from emacs-lisp/debug.el (setq debugger 'debug) @@ -5819,7 +5819,7 @@ To specify a nil argument interactively, exit with an empty minibuffer. ;;;*** ;;;### (autoloads (decipher-mode decipher) "decipher" "play/decipher.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from play/decipher.el (autoload 'decipher "decipher" "\ @@ -5848,8 +5848,8 @@ The most useful commands are: ;;;*** ;;;### (autoloads (delimit-columns-rectangle delimit-columns-region -;;;;;; delimit-columns-customize) "delim-col" "delim-col.el" (20309 -;;;;;; 60936)) +;;;;;; delimit-columns-customize) "delim-col" "delim-col.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from delim-col.el (autoload 'delimit-columns-customize "delim-col" "\ @@ -5873,8 +5873,8 @@ START and END delimits the corners of text rectangle. ;;;*** -;;;### (autoloads (delphi-mode) "delphi" "progmodes/delphi.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (delphi-mode) "delphi" "progmodes/delphi.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from progmodes/delphi.el (autoload 'delphi-mode "delphi" "\ @@ -5925,8 +5925,8 @@ with no args, if that value is non-nil. ;;;*** -;;;### (autoloads (delete-selection-mode) "delsel" "delsel.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (delete-selection-mode) "delsel" "delsel.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from delsel.el (defalias 'pending-delete-mode 'delete-selection-mode) @@ -5956,7 +5956,7 @@ any selection. ;;;*** ;;;### (autoloads (derived-mode-init-mode-variables define-derived-mode) -;;;;;; "derived" "emacs-lisp/derived.el" (20309 60936)) +;;;;;; "derived" "emacs-lisp/derived.el" (20355 10021)) ;;; Generated autoloads from emacs-lisp/derived.el (autoload 'define-derived-mode "derived" "\ @@ -6023,7 +6023,7 @@ the first time the mode is used. ;;;*** ;;;### (autoloads (describe-char describe-text-properties) "descr-text" -;;;;;; "descr-text.el" (20309 60936)) +;;;;;; "descr-text.el" (20369 14251)) ;;; Generated autoloads from descr-text.el (autoload 'describe-text-properties "descr-text" "\ @@ -6060,7 +6060,7 @@ relevant to POS. ;;;### (autoloads (desktop-revert desktop-save-in-desktop-dir desktop-change-dir ;;;;;; desktop-load-default desktop-read desktop-remove desktop-save ;;;;;; desktop-clear desktop-locals-to-save desktop-save-mode) "desktop" -;;;;;; "desktop.el" (20309 60936)) +;;;;;; "desktop.el" (20355 10021)) ;;; Generated autoloads from desktop.el (defvar desktop-save-mode nil "\ @@ -6247,7 +6247,7 @@ Revert to the last loaded desktop. ;;;### (autoloads (gnus-article-outlook-deuglify-article gnus-outlook-deuglify-article ;;;;;; gnus-article-outlook-repair-attribution gnus-article-outlook-unwrap-lines) -;;;;;; "deuglify" "gnus/deuglify.el" (20309 60936)) +;;;;;; "deuglify" "gnus/deuglify.el" (20355 10021)) ;;; Generated autoloads from gnus/deuglify.el (autoload 'gnus-article-outlook-unwrap-lines "deuglify" "\ @@ -6280,7 +6280,7 @@ Deuglify broken Outlook (Express) articles and redisplay. ;;;*** ;;;### (autoloads (diary-mode diary-mail-entries diary) "diary-lib" -;;;;;; "calendar/diary-lib.el" (20309 60936)) +;;;;;; "calendar/diary-lib.el" (20355 10021)) ;;; Generated autoloads from calendar/diary-lib.el (autoload 'diary "diary-lib" "\ @@ -6323,7 +6323,7 @@ Major mode for editing the diary file. ;;;*** ;;;### (autoloads (diff-buffer-with-file diff-backup diff diff-command -;;;;;; diff-switches) "diff" "vc/diff.el" (20309 60936)) +;;;;;; diff-switches) "diff" "vc/diff.el" (20379 50083)) ;;; Generated autoloads from vc/diff.el (defvar diff-switches (purecopy "-c") "\ @@ -6367,7 +6367,7 @@ This requires the external program `diff' to be in your `exec-path'. ;;;*** ;;;### (autoloads (diff-minor-mode diff-mode) "diff-mode" "vc/diff-mode.el" -;;;;;; (20309 60936)) +;;;;;; (20377 8374)) ;;; Generated autoloads from vc/diff-mode.el (autoload 'diff-mode "diff-mode" "\ @@ -6399,7 +6399,7 @@ the mode if ARG is omitted or nil. ;;;*** -;;;### (autoloads (dig) "dig" "net/dig.el" (20309 60936)) +;;;### (autoloads (dig) "dig" "net/dig.el" (20355 10021)) ;;; Generated autoloads from net/dig.el (autoload 'dig "dig" "\ @@ -6411,7 +6411,7 @@ Optional arguments are passed to `dig-invoke'. ;;;*** ;;;### (autoloads (dired-mode dired-noselect dired-other-frame dired-other-window -;;;;;; dired dired-listing-switches) "dired" "dired.el" (20343 49216)) +;;;;;; dired dired-listing-switches) "dired" "dired.el" (20378 29222)) ;;; Generated autoloads from dired.el (defvar dired-listing-switches (purecopy "-al") "\ @@ -6533,7 +6533,7 @@ Keybindings: ;;;*** ;;;### (autoloads (dirtrack dirtrack-mode) "dirtrack" "dirtrack.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from dirtrack.el (autoload 'dirtrack-mode "dirtrack" "\ @@ -6563,8 +6563,8 @@ from `default-directory'. ;;;*** -;;;### (autoloads (disassemble) "disass" "emacs-lisp/disass.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (disassemble) "disass" "emacs-lisp/disass.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from emacs-lisp/disass.el (autoload 'disassemble "disass" "\ @@ -6583,7 +6583,7 @@ redefine OBJECT if it is a symbol. ;;;;;; standard-display-g1 standard-display-ascii standard-display-default ;;;;;; standard-display-8bit describe-current-display-table describe-display-table ;;;;;; set-display-table-slot display-table-slot make-display-table) -;;;;;; "disp-table" "disp-table.el" (20309 60936)) +;;;;;; "disp-table" "disp-table.el" (20355 10021)) ;;; Generated autoloads from disp-table.el (autoload 'make-display-table "disp-table" "\ @@ -6705,7 +6705,7 @@ in `.emacs'. ;;;*** ;;;### (autoloads (dissociated-press) "dissociate" "play/dissociate.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from play/dissociate.el (autoload 'dissociated-press "dissociate" "\ @@ -6721,7 +6721,7 @@ Default is 2. ;;;*** -;;;### (autoloads (dnd-protocol-alist) "dnd" "dnd.el" (20309 60936)) +;;;### (autoloads (dnd-protocol-alist) "dnd" "dnd.el" (20355 10021)) ;;; Generated autoloads from dnd.el (defvar dnd-protocol-alist `((,(purecopy "^file:///") . dnd-open-local-file) (,(purecopy "^file://") . dnd-open-file) (,(purecopy "^file:") . dnd-open-local-file) (,(purecopy "^\\(https?\\|ftp\\|file\\|nfs\\)://") . dnd-open-file)) "\ @@ -6742,7 +6742,7 @@ if some action was made, or nil if the URL is ignored.") ;;;*** ;;;### (autoloads (dns-mode-soa-increment-serial dns-mode) "dns-mode" -;;;;;; "textmodes/dns-mode.el" (20309 60936)) +;;;;;; "textmodes/dns-mode.el" (20355 10021)) ;;; Generated autoloads from textmodes/dns-mode.el (autoload 'dns-mode "dns-mode" "\ @@ -6766,8 +6766,8 @@ Locate SOA record and increment the serial field. ;;;*** ;;;### (autoloads (doc-view-bookmark-jump doc-view-minor-mode doc-view-mode-maybe -;;;;;; doc-view-mode doc-view-mode-p) "doc-view" "doc-view.el" (20309 -;;;;;; 60936)) +;;;;;; doc-view-mode doc-view-mode-p) "doc-view" "doc-view.el" (20378 +;;;;;; 29222)) ;;; Generated autoloads from doc-view.el (autoload 'doc-view-mode-p "doc-view" "\ @@ -6813,7 +6813,7 @@ See the command `doc-view-mode' for more information on this mode. ;;;*** -;;;### (autoloads (doctor) "doctor" "play/doctor.el" (20309 60936)) +;;;### (autoloads (doctor) "doctor" "play/doctor.el" (20355 10021)) ;;; Generated autoloads from play/doctor.el (autoload 'doctor "doctor" "\ @@ -6823,7 +6823,7 @@ Switch to *doctor* buffer and start giving psychotherapy. ;;;*** -;;;### (autoloads (double-mode) "double" "double.el" (20309 60936)) +;;;### (autoloads (double-mode) "double" "double.el" (20355 10021)) ;;; Generated autoloads from double.el (autoload 'double-mode "double" "\ @@ -6839,7 +6839,7 @@ strings when pressed twice. See `double-map' for details. ;;;*** -;;;### (autoloads (dunnet) "dunnet" "play/dunnet.el" (20309 60936)) +;;;### (autoloads (dunnet) "dunnet" "play/dunnet.el" (20355 10021)) ;;; Generated autoloads from play/dunnet.el (autoload 'dunnet "dunnet" "\ @@ -6851,7 +6851,7 @@ Switch to *dungeon* buffer and start game. ;;;### (autoloads (easy-mmode-defsyntax easy-mmode-defmap easy-mmode-define-keymap ;;;;;; define-globalized-minor-mode define-minor-mode) "easy-mmode" -;;;;;; "emacs-lisp/easy-mmode.el" (20309 60936)) +;;;;;; "emacs-lisp/easy-mmode.el" (20362 40996)) ;;; Generated autoloads from emacs-lisp/easy-mmode.el (defalias 'easy-mmode-define-minor-mode 'define-minor-mode) @@ -6977,8 +6977,8 @@ CSS contains a list of syntax specifications of the form (CHAR . SYNTAX). ;;;*** ;;;### (autoloads (easy-menu-change easy-menu-create-menu easy-menu-do-define -;;;;;; easy-menu-define) "easymenu" "emacs-lisp/easymenu.el" (20309 -;;;;;; 60936)) +;;;;;; easy-menu-define) "easymenu" "emacs-lisp/easymenu.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from emacs-lisp/easymenu.el (autoload 'easy-menu-define "easymenu" "\ @@ -7132,7 +7132,7 @@ To implement dynamic menus, either call this from ;;;;;; ebnf-eps-file ebnf-eps-directory ebnf-spool-region ebnf-spool-buffer ;;;;;; ebnf-spool-file ebnf-spool-directory ebnf-print-region ebnf-print-buffer ;;;;;; ebnf-print-file ebnf-print-directory ebnf-customize) "ebnf2ps" -;;;;;; "progmodes/ebnf2ps.el" (20309 60936)) +;;;;;; "progmodes/ebnf2ps.el" (20373 11301)) ;;; Generated autoloads from progmodes/ebnf2ps.el (autoload 'ebnf-customize "ebnf2ps" "\ @@ -7406,8 +7406,8 @@ See `ebnf-style-database' documentation. ;;;;;; ebrowse-tags-find-declaration-other-window ebrowse-tags-find-definition ;;;;;; ebrowse-tags-view-definition ebrowse-tags-find-declaration ;;;;;; ebrowse-tags-view-declaration ebrowse-member-mode ebrowse-electric-choose-tree -;;;;;; ebrowse-tree-mode) "ebrowse" "progmodes/ebrowse.el" (20309 -;;;;;; 60936)) +;;;;;; ebrowse-tree-mode) "ebrowse" "progmodes/ebrowse.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from progmodes/ebrowse.el (autoload 'ebrowse-tree-mode "ebrowse" "\ @@ -7556,7 +7556,7 @@ Display statistics for a class tree. ;;;*** ;;;### (autoloads (electric-buffer-list) "ebuff-menu" "ebuff-menu.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from ebuff-menu.el (autoload 'electric-buffer-list "ebuff-menu" "\ @@ -7581,7 +7581,7 @@ Run hooks in `electric-buffer-menu-mode-hook' on entry. ;;;*** ;;;### (autoloads (Electric-command-history-redo-expression) "echistory" -;;;;;; "echistory.el" (20309 60936)) +;;;;;; "echistory.el" (20355 10021)) ;;; Generated autoloads from echistory.el (autoload 'Electric-command-history-redo-expression "echistory" "\ @@ -7593,7 +7593,7 @@ With prefix arg NOCONFIRM, execute current line as-is without editing. ;;;*** ;;;### (autoloads (ecomplete-setup) "ecomplete" "gnus/ecomplete.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from gnus/ecomplete.el (autoload 'ecomplete-setup "ecomplete" "\ @@ -7603,7 +7603,7 @@ With prefix arg NOCONFIRM, execute current line as-is without editing. ;;;*** -;;;### (autoloads (global-ede-mode) "ede" "cedet/ede.el" (20309 60936)) +;;;### (autoloads (global-ede-mode) "ede" "cedet/ede.el" (20355 10021)) ;;; Generated autoloads from cedet/ede.el (defvar global-ede-mode nil "\ @@ -7630,7 +7630,7 @@ an EDE controlled project. ;;;### (autoloads (edebug-all-forms edebug-all-defs edebug-eval-top-level-form ;;;;;; edebug-basic-spec edebug-all-forms edebug-all-defs) "edebug" -;;;;;; "emacs-lisp/edebug.el" (20343 47906)) +;;;;;; "emacs-lisp/edebug.el" (20355 10021)) ;;; Generated autoloads from emacs-lisp/edebug.el (defvar edebug-all-defs nil "\ @@ -7703,7 +7703,7 @@ Toggle edebugging of all forms. ;;;;;; ediff-merge-directories-with-ancestor ediff-merge-directories ;;;;;; ediff-directories3 ediff-directory-revisions ediff-directories ;;;;;; ediff-buffers3 ediff-buffers ediff-backup ediff-current-file -;;;;;; ediff-files3 ediff-files) "ediff" "vc/ediff.el" (20309 60936)) +;;;;;; ediff-files3 ediff-files) "ediff" "vc/ediff.el" (20373 11301)) ;;; Generated autoloads from vc/ediff.el (autoload 'ediff-files "ediff" "\ @@ -7935,7 +7935,7 @@ With optional NODE, goes to that node. ;;;*** ;;;### (autoloads (ediff-customize) "ediff-help" "vc/ediff-help.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from vc/ediff-help.el (autoload 'ediff-customize "ediff-help" "\ @@ -7946,7 +7946,7 @@ With optional NODE, goes to that node. ;;;*** ;;;### (autoloads (ediff-show-registry) "ediff-mult" "vc/ediff-mult.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from vc/ediff-mult.el (autoload 'ediff-show-registry "ediff-mult" "\ @@ -7959,7 +7959,7 @@ Display Ediff's registry. ;;;*** ;;;### (autoloads (ediff-toggle-use-toolbar ediff-toggle-multiframe) -;;;;;; "ediff-util" "vc/ediff-util.el" (20309 60936)) +;;;;;; "ediff-util" "vc/ediff-util.el" (20355 10021)) ;;; Generated autoloads from vc/ediff-util.el (autoload 'ediff-toggle-multiframe "ediff-util" "\ @@ -7980,7 +7980,7 @@ To change the default, set the variable `ediff-use-toolbar-p', which see. ;;;### (autoloads (format-kbd-macro read-kbd-macro edit-named-kbd-macro ;;;;;; edit-last-kbd-macro edit-kbd-macro) "edmacro" "edmacro.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from edmacro.el (autoload 'edit-kbd-macro "edmacro" "\ @@ -8029,7 +8029,7 @@ or nil, use a compact 80-column format. ;;;*** ;;;### (autoloads (edt-emulation-on edt-set-scroll-margins) "edt" -;;;;;; "emulation/edt.el" (20309 60936)) +;;;;;; "emulation/edt.el" (20355 10021)) ;;; Generated autoloads from emulation/edt.el (autoload 'edt-set-scroll-margins "edt" "\ @@ -8047,7 +8047,7 @@ Turn on EDT Emulation. ;;;*** ;;;### (autoloads (electric-helpify with-electric-help) "ehelp" "ehelp.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from ehelp.el (autoload 'with-electric-help "ehelp" "\ @@ -8084,7 +8084,7 @@ BUFFER is put back into its original major mode. ;;;*** ;;;### (autoloads (turn-on-eldoc-mode eldoc-mode eldoc-minor-mode-string) -;;;;;; "eldoc" "emacs-lisp/eldoc.el" (20309 60936)) +;;;;;; "eldoc" "emacs-lisp/eldoc.el" (20355 10021)) ;;; Generated autoloads from emacs-lisp/eldoc.el (defvar eldoc-minor-mode-string (purecopy " ElDoc") "\ @@ -8131,7 +8131,7 @@ Emacs Lisp mode) that support ElDoc.") ;;;*** ;;;### (autoloads (electric-layout-mode electric-pair-mode electric-indent-mode) -;;;;;; "electric" "electric.el" (20309 60936)) +;;;;;; "electric" "electric.el" (20369 14251)) ;;; Generated autoloads from electric.el (defvar electric-indent-chars '(10) "\ @@ -8201,8 +8201,8 @@ The variable `electric-layout-rules' says when and how to insert newlines. ;;;*** -;;;### (autoloads (elide-head) "elide-head" "elide-head.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (elide-head) "elide-head" "elide-head.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from elide-head.el (autoload 'elide-head "elide-head" "\ @@ -8219,7 +8219,7 @@ This is suitable as an entry on `find-file-hook' or appropriate mode hooks. ;;;### (autoloads (elint-initialize elint-defun elint-current-buffer ;;;;;; elint-directory elint-file) "elint" "emacs-lisp/elint.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from emacs-lisp/elint.el (autoload 'elint-file "elint" "\ @@ -8255,8 +8255,8 @@ optional prefix argument REINIT is non-nil. ;;;*** ;;;### (autoloads (elp-results elp-instrument-package elp-instrument-list -;;;;;; elp-instrument-function) "elp" "emacs-lisp/elp.el" (20309 -;;;;;; 60936)) +;;;;;; elp-instrument-function) "elp" "emacs-lisp/elp.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from emacs-lisp/elp.el (autoload 'elp-instrument-function "elp" "\ @@ -8291,7 +8291,7 @@ displayed. ;;;*** ;;;### (autoloads (emacs-lock-mode) "emacs-lock" "emacs-lock.el" -;;;;;; (20309 60936)) +;;;;;; (20361 20134)) ;;; Generated autoloads from emacs-lock.el (autoload 'emacs-lock-mode "emacs-lock" "\ @@ -8319,7 +8319,7 @@ Other values are interpreted as usual. ;;;*** ;;;### (autoloads (report-emacs-bug-query-existing-bugs report-emacs-bug) -;;;;;; "emacsbug" "mail/emacsbug.el" (20309 60936)) +;;;;;; "emacsbug" "mail/emacsbug.el" (20355 10021)) ;;; Generated autoloads from mail/emacsbug.el (autoload 'report-emacs-bug "emacsbug" "\ @@ -8340,7 +8340,7 @@ The result is an alist with items of the form (URL SUBJECT NO). ;;;;;; emerge-revisions emerge-files-with-ancestor-remote emerge-files-remote ;;;;;; emerge-files-with-ancestor-command emerge-files-command emerge-buffers-with-ancestor ;;;;;; emerge-buffers emerge-files-with-ancestor emerge-files) "emerge" -;;;;;; "vc/emerge.el" (20309 60936)) +;;;;;; "vc/emerge.el" (20355 10021)) ;;; Generated autoloads from vc/emerge.el (autoload 'emerge-files "emerge" "\ @@ -8401,7 +8401,7 @@ Emerge two RCS revisions of a file, with another revision as ancestor. ;;;*** ;;;### (autoloads (enriched-decode enriched-encode enriched-mode) -;;;;;; "enriched" "textmodes/enriched.el" (20309 60936)) +;;;;;; "enriched" "textmodes/enriched.el" (20355 10021)) ;;; Generated autoloads from textmodes/enriched.el (autoload 'enriched-mode "enriched" "\ @@ -8441,8 +8441,8 @@ Commands: ;;;;;; epa-sign-region epa-verify-cleartext-in-region epa-verify-region ;;;;;; epa-decrypt-armor-in-region epa-decrypt-region epa-encrypt-file ;;;;;; epa-sign-file epa-verify-file epa-decrypt-file epa-select-keys -;;;;;; epa-list-secret-keys epa-list-keys) "epa" "epa.el" (20309 -;;;;;; 60936)) +;;;;;; epa-list-secret-keys epa-list-keys) "epa" "epa.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from epa.el (autoload 'epa-list-keys "epa" "\ @@ -8620,7 +8620,7 @@ Insert selected KEYS after the point. ;;;*** ;;;### (autoloads (epa-dired-do-encrypt epa-dired-do-sign epa-dired-do-verify -;;;;;; epa-dired-do-decrypt) "epa-dired" "epa-dired.el" (20309 60936)) +;;;;;; epa-dired-do-decrypt) "epa-dired" "epa-dired.el" (20355 10021)) ;;; Generated autoloads from epa-dired.el (autoload 'epa-dired-do-decrypt "epa-dired" "\ @@ -8646,7 +8646,7 @@ Encrypt marked files. ;;;*** ;;;### (autoloads (epa-file-disable epa-file-enable epa-file-handler) -;;;;;; "epa-file" "epa-file.el" (20309 60936)) +;;;;;; "epa-file" "epa-file.el" (20355 10021)) ;;; Generated autoloads from epa-file.el (autoload 'epa-file-handler "epa-file" "\ @@ -8668,7 +8668,7 @@ Encrypt marked files. ;;;### (autoloads (epa-global-mail-mode epa-mail-import-keys epa-mail-encrypt ;;;;;; epa-mail-sign epa-mail-verify epa-mail-decrypt epa-mail-mode) -;;;;;; "epa-mail" "epa-mail.el" (20315 8755)) +;;;;;; "epa-mail" "epa-mail.el" (20355 10021)) ;;; Generated autoloads from epa-mail.el (autoload 'epa-mail-mode "epa-mail" "\ @@ -8738,7 +8738,7 @@ if ARG is omitted or nil. ;;;*** -;;;### (autoloads (epg-make-context) "epg" "epg.el" (20309 60936)) +;;;### (autoloads (epg-make-context) "epg" "epg.el" (20355 10021)) ;;; Generated autoloads from epg.el (autoload 'epg-make-context "epg" "\ @@ -8749,7 +8749,7 @@ Return a context object. ;;;*** ;;;### (autoloads (epg-expand-group epg-check-configuration epg-configuration) -;;;;;; "epg-config" "epg-config.el" (20309 60936)) +;;;;;; "epg-config" "epg-config.el" (20373 11301)) ;;; Generated autoloads from epg-config.el (autoload 'epg-configuration "epg-config" "\ @@ -8770,7 +8770,7 @@ Look at CONFIG and try to expand GROUP. ;;;*** ;;;### (autoloads (erc-handle-irc-url erc-tls erc erc-select-read-args) -;;;;;; "erc" "erc/erc.el" (20309 60936)) +;;;;;; "erc" "erc/erc.el" (20356 2211)) ;;; Generated autoloads from erc/erc.el (autoload 'erc-select-read-args "erc" "\ @@ -8818,33 +8818,33 @@ Otherwise, connect to HOST:PORT as USER and /join CHANNEL. ;;;*** -;;;### (autoloads nil "erc-autoaway" "erc/erc-autoaway.el" (20309 -;;;;;; 60936)) +;;;### (autoloads nil "erc-autoaway" "erc/erc-autoaway.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from erc/erc-autoaway.el (autoload 'erc-autoaway-mode "erc-autoaway") ;;;*** -;;;### (autoloads nil "erc-button" "erc/erc-button.el" (20309 60936)) +;;;### (autoloads nil "erc-button" "erc/erc-button.el" (20355 10021)) ;;; Generated autoloads from erc/erc-button.el (autoload 'erc-button-mode "erc-button" nil t) ;;;*** -;;;### (autoloads nil "erc-capab" "erc/erc-capab.el" (20309 60936)) +;;;### (autoloads nil "erc-capab" "erc/erc-capab.el" (20355 10021)) ;;; Generated autoloads from erc/erc-capab.el (autoload 'erc-capab-identify-mode "erc-capab" nil t) ;;;*** -;;;### (autoloads nil "erc-compat" "erc/erc-compat.el" (20309 60936)) +;;;### (autoloads nil "erc-compat" "erc/erc-compat.el" (20355 10021)) ;;; Generated autoloads from erc/erc-compat.el (autoload 'erc-define-minor-mode "erc-compat") ;;;*** ;;;### (autoloads (erc-ctcp-query-DCC pcomplete/erc-mode/DCC erc-cmd-DCC) -;;;;;; "erc-dcc" "erc/erc-dcc.el" (20309 60936)) +;;;;;; "erc-dcc" "erc/erc-dcc.el" (20355 10021)) ;;; Generated autoloads from erc/erc-dcc.el (autoload 'erc-dcc-mode "erc-dcc") @@ -8877,7 +8877,7 @@ that subcommand. ;;;;;; erc-ezb-add-session erc-ezb-end-of-session-list erc-ezb-init-session-list ;;;;;; erc-ezb-identify erc-ezb-notice-autodetect erc-ezb-lookup-action ;;;;;; erc-ezb-get-login erc-cmd-ezb) "erc-ezbounce" "erc/erc-ezbounce.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from erc/erc-ezbounce.el (autoload 'erc-cmd-ezb "erc-ezbounce" "\ @@ -8939,8 +8939,8 @@ Add EZBouncer convenience functions to ERC. ;;;*** -;;;### (autoloads (erc-fill) "erc-fill" "erc/erc-fill.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (erc-fill) "erc-fill" "erc/erc-fill.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from erc/erc-fill.el (autoload 'erc-fill-mode "erc-fill" nil t) @@ -8953,7 +8953,7 @@ You can put this on `erc-insert-modify-hook' and/or `erc-send-modify-hook'. ;;;*** ;;;### (autoloads (erc-identd-stop erc-identd-start) "erc-identd" -;;;;;; "erc/erc-identd.el" (20309 60936)) +;;;;;; "erc/erc-identd.el" (20355 10021)) ;;; Generated autoloads from erc/erc-identd.el (autoload 'erc-identd-mode "erc-identd") @@ -8975,7 +8975,7 @@ system. ;;;*** ;;;### (autoloads (erc-create-imenu-index) "erc-imenu" "erc/erc-imenu.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from erc/erc-imenu.el (autoload 'erc-create-imenu-index "erc-imenu" "\ @@ -8985,20 +8985,20 @@ system. ;;;*** -;;;### (autoloads nil "erc-join" "erc/erc-join.el" (20309 60936)) +;;;### (autoloads nil "erc-join" "erc/erc-join.el" (20356 2211)) ;;; Generated autoloads from erc/erc-join.el (autoload 'erc-autojoin-mode "erc-join" nil t) ;;;*** -;;;### (autoloads nil "erc-list" "erc/erc-list.el" (20309 60936)) +;;;### (autoloads nil "erc-list" "erc/erc-list.el" (20355 10021)) ;;; Generated autoloads from erc/erc-list.el (autoload 'erc-list-mode "erc-list") ;;;*** ;;;### (autoloads (erc-save-buffer-in-logs erc-logging-enabled) "erc-log" -;;;;;; "erc/erc-log.el" (20309 60936)) +;;;;;; "erc/erc-log.el" (20355 10021)) ;;; Generated autoloads from erc/erc-log.el (autoload 'erc-log-mode "erc-log" nil t) @@ -9030,7 +9030,7 @@ You can save every individual message by putting this function on ;;;### (autoloads (erc-delete-dangerous-host erc-add-dangerous-host ;;;;;; erc-delete-keyword erc-add-keyword erc-delete-fool erc-add-fool ;;;;;; erc-delete-pal erc-add-pal) "erc-match" "erc/erc-match.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from erc/erc-match.el (autoload 'erc-match-mode "erc-match") @@ -9076,14 +9076,14 @@ Delete dangerous-host interactively to `erc-dangerous-hosts'. ;;;*** -;;;### (autoloads nil "erc-menu" "erc/erc-menu.el" (20309 60936)) +;;;### (autoloads nil "erc-menu" "erc/erc-menu.el" (20355 10021)) ;;; Generated autoloads from erc/erc-menu.el (autoload 'erc-menu-mode "erc-menu" nil t) ;;;*** ;;;### (autoloads (erc-cmd-WHOLEFT) "erc-netsplit" "erc/erc-netsplit.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from erc/erc-netsplit.el (autoload 'erc-netsplit-mode "erc-netsplit") @@ -9095,7 +9095,7 @@ Show who's gone. ;;;*** ;;;### (autoloads (erc-server-select erc-determine-network) "erc-networks" -;;;;;; "erc/erc-networks.el" (20309 60936)) +;;;;;; "erc/erc-networks.el" (20355 10021)) ;;; Generated autoloads from erc/erc-networks.el (autoload 'erc-determine-network "erc-networks" "\ @@ -9113,7 +9113,7 @@ Interactively select a server to connect to using `erc-server-alist'. ;;;*** ;;;### (autoloads (pcomplete/erc-mode/NOTIFY erc-cmd-NOTIFY) "erc-notify" -;;;;;; "erc/erc-notify.el" (20309 60936)) +;;;;;; "erc/erc-notify.el" (20355 10021)) ;;; Generated autoloads from erc/erc-notify.el (autoload 'erc-notify-mode "erc-notify" nil t) @@ -9131,33 +9131,33 @@ with args, toggle notify status of people. ;;;*** -;;;### (autoloads nil "erc-page" "erc/erc-page.el" (20309 60936)) +;;;### (autoloads nil "erc-page" "erc/erc-page.el" (20355 10021)) ;;; Generated autoloads from erc/erc-page.el (autoload 'erc-page-mode "erc-page") ;;;*** -;;;### (autoloads nil "erc-pcomplete" "erc/erc-pcomplete.el" (20309 -;;;;;; 60936)) +;;;### (autoloads nil "erc-pcomplete" "erc/erc-pcomplete.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from erc/erc-pcomplete.el (autoload 'erc-completion-mode "erc-pcomplete" nil t) ;;;*** -;;;### (autoloads nil "erc-replace" "erc/erc-replace.el" (20309 60936)) +;;;### (autoloads nil "erc-replace" "erc/erc-replace.el" (20355 10021)) ;;; Generated autoloads from erc/erc-replace.el (autoload 'erc-replace-mode "erc-replace") ;;;*** -;;;### (autoloads nil "erc-ring" "erc/erc-ring.el" (20309 60936)) +;;;### (autoloads nil "erc-ring" "erc/erc-ring.el" (20355 10021)) ;;; Generated autoloads from erc/erc-ring.el (autoload 'erc-ring-mode "erc-ring" nil t) ;;;*** ;;;### (autoloads (erc-nickserv-identify erc-nickserv-identify-mode) -;;;;;; "erc-services" "erc/erc-services.el" (20309 60936)) +;;;;;; "erc-services" "erc/erc-services.el" (20357 58785)) ;;; Generated autoloads from erc/erc-services.el (autoload 'erc-services-mode "erc-services" nil t) @@ -9174,14 +9174,14 @@ When called interactively, read the password using `read-passwd'. ;;;*** -;;;### (autoloads nil "erc-sound" "erc/erc-sound.el" (20309 60936)) +;;;### (autoloads nil "erc-sound" "erc/erc-sound.el" (20355 10021)) ;;; Generated autoloads from erc/erc-sound.el (autoload 'erc-sound-mode "erc-sound") ;;;*** ;;;### (autoloads (erc-speedbar-browser) "erc-speedbar" "erc/erc-speedbar.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from erc/erc-speedbar.el (autoload 'erc-speedbar-browser "erc-speedbar" "\ @@ -9192,21 +9192,21 @@ This will add a speedbar major display mode. ;;;*** -;;;### (autoloads nil "erc-spelling" "erc/erc-spelling.el" (20309 -;;;;;; 60936)) +;;;### (autoloads nil "erc-spelling" "erc/erc-spelling.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from erc/erc-spelling.el (autoload 'erc-spelling-mode "erc-spelling" nil t) ;;;*** -;;;### (autoloads nil "erc-stamp" "erc/erc-stamp.el" (20309 60936)) +;;;### (autoloads nil "erc-stamp" "erc/erc-stamp.el" (20355 10021)) ;;; Generated autoloads from erc/erc-stamp.el (autoload 'erc-timestamp-mode "erc-stamp" nil t) ;;;*** ;;;### (autoloads (erc-track-minor-mode) "erc-track" "erc/erc-track.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from erc/erc-track.el (defvar erc-track-minor-mode nil "\ @@ -9232,7 +9232,7 @@ keybindings will not do anything useful. ;;;*** ;;;### (autoloads (erc-truncate-buffer erc-truncate-buffer-to-size) -;;;;;; "erc-truncate" "erc/erc-truncate.el" (20309 60936)) +;;;;;; "erc-truncate" "erc/erc-truncate.el" (20355 10021)) ;;; Generated autoloads from erc/erc-truncate.el (autoload 'erc-truncate-mode "erc-truncate" nil t) @@ -9252,7 +9252,7 @@ Meant to be used in hooks, like `erc-insert-post-hook'. ;;;*** ;;;### (autoloads (erc-xdcc-add-file) "erc-xdcc" "erc/erc-xdcc.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from erc/erc-xdcc.el (autoload 'erc-xdcc-mode "erc-xdcc") @@ -9265,7 +9265,7 @@ Add a file to `erc-xdcc-files'. ;;;### (autoloads (ert-describe-test ert-run-tests-interactively ;;;;;; ert-run-tests-batch-and-exit ert-run-tests-batch ert-deftest) -;;;;;; "ert" "emacs-lisp/ert.el" (20309 60936)) +;;;;;; "ert" "emacs-lisp/ert.el" (20355 10021)) ;;; Generated autoloads from emacs-lisp/ert.el (autoload 'ert-deftest "ert" "\ @@ -9335,7 +9335,7 @@ Display the documentation for TEST-OR-TEST-NAME (a symbol or ert-test). ;;;*** ;;;### (autoloads (ert-kill-all-test-buffers) "ert-x" "emacs-lisp/ert-x.el" -;;;;;; (20309 60936)) +;;;;;; (20364 28960)) ;;; Generated autoloads from emacs-lisp/ert-x.el (put 'ert-with-test-buffer 'lisp-indent-function 1) @@ -9347,8 +9347,8 @@ Kill all test buffers that are still live. ;;;*** -;;;### (autoloads (eshell-mode) "esh-mode" "eshell/esh-mode.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (eshell-mode) "esh-mode" "eshell/esh-mode.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from eshell/esh-mode.el (autoload 'eshell-mode "esh-mode" "\ @@ -9361,7 +9361,7 @@ Emacs shell interactive mode. ;;;*** ;;;### (autoloads (eshell-command-result eshell-command eshell) "eshell" -;;;;;; "eshell/eshell.el" (20309 60936)) +;;;;;; "eshell/eshell.el" (20373 11301)) ;;; Generated autoloads from eshell/eshell.el (autoload 'eshell "eshell" "\ @@ -9402,11 +9402,11 @@ corresponding to a successful execution. ;;;;;; visit-tags-table tags-table-mode find-tag-default-function ;;;;;; find-tag-hook tags-add-tables tags-compression-info-list ;;;;;; tags-table-list tags-case-fold-search) "etags" "progmodes/etags.el" -;;;;;; (20332 33075)) +;;;;;; (20378 29222)) ;;; Generated autoloads from progmodes/etags.el (defvar tags-file-name nil "\ -*File name of tags table. +File name of tags table. To switch to a new tags table, setting this variable is sufficient. If you set this variable, do not also set `tags-table-list'. Use the `etags' program to make a tags table file.") @@ -9414,14 +9414,14 @@ Use the `etags' program to make a tags table file.") (put 'tags-file-name 'safe-local-variable 'stringp) (defvar tags-case-fold-search 'default "\ -*Whether tags operations should be case-sensitive. +Whether tags operations should be case-sensitive. A value of t means case-insensitive, a value of nil means case-sensitive. Any other value means use the setting of `case-fold-search'.") (custom-autoload 'tags-case-fold-search "etags" t) (defvar tags-table-list nil "\ -*List of file names of tags tables to search. +List of file names of tags tables to search. An element that is a directory means the file \"TAGS\" in that directory. To switch to a new list of tags tables, setting this variable is sufficient. If you set this variable, do not also set `tags-file-name'. @@ -9430,7 +9430,7 @@ Use the `etags' program to make a tags table file.") (custom-autoload 'tags-table-list "etags" t) (defvar tags-compression-info-list (purecopy '("" ".Z" ".bz2" ".gz" ".xz" ".tgz")) "\ -*List of extensions tried by etags when jka-compr is used. +List of extensions tried by etags when jka-compr is used. An empty string means search the non-compressed file. These extensions will be tried only if jka-compr was activated \(i.e. via customize of `auto-compression-mode' or by calling the function @@ -9439,7 +9439,7 @@ These extensions will be tried only if jka-compr was activated (custom-autoload 'tags-compression-info-list "etags" t) (defvar tags-add-tables 'ask-user "\ -*Control whether to add a new tags table to the current list. +Control whether to add a new tags table to the current list. t means do; nil means don't (always start a new list). Any other value means ask the user whether to add a new tags table to the current list (as opposed to starting a new list).") @@ -9447,14 +9447,14 @@ to the current list (as opposed to starting a new list).") (custom-autoload 'tags-add-tables "etags" t) (defvar find-tag-hook nil "\ -*Hook to be run by \\[find-tag] after finding a tag. See `run-hooks'. +Hook to be run by \\[find-tag] after finding a tag. See `run-hooks'. The value in the buffer in which \\[find-tag] is done is used, not the value in the buffer \\[find-tag] goes to.") (custom-autoload 'find-tag-hook "etags" t) (defvar find-tag-default-function nil "\ -*A function of no arguments used by \\[find-tag] to pick a default tag. +A function of no arguments used by \\[find-tag] to pick a default tag. If nil, and the symbol that is the value of `major-mode' has a `find-tag-default-function' property (see `put'), that is used. Otherwise, `find-tag-default' is used.") @@ -9720,7 +9720,7 @@ for \\[find-tag] (which see). ;;;;;; ethio-fidel-to-sera-marker ethio-fidel-to-sera-region ethio-fidel-to-sera-buffer ;;;;;; ethio-sera-to-fidel-marker ethio-sera-to-fidel-region ethio-sera-to-fidel-buffer ;;;;;; setup-ethiopic-environment-internal) "ethio-util" "language/ethio-util.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from language/ethio-util.el (autoload 'setup-ethiopic-environment-internal "ethio-util" "\ @@ -9890,7 +9890,7 @@ With ARG, insert that many delimiters. ;;;### (autoloads (eudc-load-eudc eudc-query-form eudc-expand-inline ;;;;;; eudc-get-phone eudc-get-email eudc-set-server) "eudc" "net/eudc.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from net/eudc.el (autoload 'eudc-set-server "eudc" "\ @@ -9946,7 +9946,7 @@ This does nothing except loading eudc by autoload side-effect. ;;;### (autoloads (eudc-display-jpeg-as-button eudc-display-jpeg-inline ;;;;;; eudc-display-sound eudc-display-mail eudc-display-url eudc-display-generic-binary) -;;;;;; "eudc-bob" "net/eudc-bob.el" (20309 60936)) +;;;;;; "eudc-bob" "net/eudc-bob.el" (20355 10021)) ;;; Generated autoloads from net/eudc-bob.el (autoload 'eudc-display-generic-binary "eudc-bob" "\ @@ -9982,7 +9982,7 @@ Display a button for the JPEG DATA. ;;;*** ;;;### (autoloads (eudc-try-bbdb-insert eudc-insert-record-at-point-into-bbdb) -;;;;;; "eudc-export" "net/eudc-export.el" (20309 60936)) +;;;;;; "eudc-export" "net/eudc-export.el" (20355 10021)) ;;; Generated autoloads from net/eudc-export.el (autoload 'eudc-insert-record-at-point-into-bbdb "eudc-export" "\ @@ -9999,7 +9999,7 @@ Call `eudc-insert-record-at-point-into-bbdb' if on a record. ;;;*** ;;;### (autoloads (eudc-edit-hotlist) "eudc-hotlist" "net/eudc-hotlist.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from net/eudc-hotlist.el (autoload 'eudc-edit-hotlist "eudc-hotlist" "\ @@ -10009,8 +10009,8 @@ Edit the hotlist of directory servers in a specialized buffer. ;;;*** -;;;### (autoloads (ewoc-create) "ewoc" "emacs-lisp/ewoc.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (ewoc-create) "ewoc" "emacs-lisp/ewoc.el" (20378 +;;;;;; 29222)) ;;; Generated autoloads from emacs-lisp/ewoc.el (autoload 'ewoc-create "ewoc" "\ @@ -10039,7 +10039,7 @@ fourth arg NOSEP non-nil inhibits this. ;;;### (autoloads (executable-make-buffer-file-executable-if-script-p ;;;;;; executable-self-display executable-set-magic executable-interpret ;;;;;; executable-command-find-posix-p) "executable" "progmodes/executable.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from progmodes/executable.el (autoload 'executable-command-find-posix-p "executable" "\ @@ -10082,7 +10082,7 @@ file modes. ;;;### (autoloads (expand-jump-to-next-slot expand-jump-to-previous-slot ;;;;;; expand-abbrev-hook expand-add-abbrevs) "expand" "expand.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from expand.el (autoload 'expand-add-abbrevs "expand" "\ @@ -10131,7 +10131,7 @@ This is used only in conjunction with `expand-add-abbrevs'. ;;;*** -;;;### (autoloads (f90-mode) "f90" "progmodes/f90.el" (20309 60936)) +;;;### (autoloads (f90-mode) "f90" "progmodes/f90.el" (20355 10021)) ;;; Generated autoloads from progmodes/f90.el (autoload 'f90-mode "f90" "\ @@ -10201,8 +10201,8 @@ with no args, if that value is non-nil. ;;;### (autoloads (variable-pitch-mode buffer-face-toggle buffer-face-set ;;;;;; buffer-face-mode text-scale-adjust text-scale-decrease text-scale-increase ;;;;;; text-scale-set face-remap-set-base face-remap-reset-base -;;;;;; face-remap-add-relative) "face-remap" "face-remap.el" (20329 -;;;;;; 30063)) +;;;;;; face-remap-add-relative) "face-remap" "face-remap.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from face-remap.el (autoload 'face-remap-add-relative "face-remap" "\ @@ -10350,7 +10350,7 @@ Besides the choice of face, it is the same as `buffer-face-mode'. ;;;### (autoloads (feedmail-queue-reminder feedmail-run-the-queue ;;;;;; feedmail-run-the-queue-global-prompt feedmail-run-the-queue-no-prompts -;;;;;; feedmail-send-it) "feedmail" "mail/feedmail.el" (20309 60936)) +;;;;;; feedmail-send-it) "feedmail" "mail/feedmail.el" (20364 28028)) ;;; Generated autoloads from mail/feedmail.el (autoload 'feedmail-send-it "feedmail" "\ @@ -10404,7 +10404,7 @@ you can set `feedmail-queue-reminder-alist' to nil. ;;;*** ;;;### (autoloads (ffap-bindings dired-at-point ffap-at-mouse ffap-menu -;;;;;; find-file-at-point ffap-next) "ffap" "ffap.el" (20309 60936)) +;;;;;; find-file-at-point ffap-next) "ffap" "ffap.el" (20376 40834)) ;;; Generated autoloads from ffap.el (autoload 'ffap-next "ffap" "\ @@ -10468,7 +10468,7 @@ Evaluate the forms in variable `ffap-bindings'. ;;;### (autoloads (file-cache-minibuffer-complete file-cache-add-directory-recursively ;;;;;; file-cache-add-directory-using-locate file-cache-add-directory-using-find ;;;;;; file-cache-add-file file-cache-add-directory-list file-cache-add-directory) -;;;;;; "filecache" "filecache.el" (20309 60936)) +;;;;;; "filecache" "filecache.el" (20355 10021)) ;;; Generated autoloads from filecache.el (autoload 'file-cache-add-directory "filecache" "\ @@ -10528,7 +10528,7 @@ the name is considered already unique; only the second substitution ;;;;;; copy-file-locals-to-dir-locals delete-dir-local-variable ;;;;;; add-dir-local-variable delete-file-local-variable-prop-line ;;;;;; add-file-local-variable-prop-line delete-file-local-variable -;;;;;; add-file-local-variable) "files-x" "files-x.el" (20309 60936)) +;;;;;; add-file-local-variable) "files-x" "files-x.el" (20355 10021)) ;;; Generated autoloads from files-x.el (autoload 'add-file-local-variable "files-x" "\ @@ -10593,8 +10593,8 @@ Copy directory-local variables to the -*- line. ;;;*** -;;;### (autoloads (filesets-init) "filesets" "filesets.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (filesets-init) "filesets" "filesets.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from filesets.el (autoload 'filesets-init "filesets" "\ @@ -10605,7 +10605,7 @@ Set up hooks, load the cache file -- if existing -- and build the menu. ;;;*** -;;;### (autoloads (find-cmd) "find-cmd" "find-cmd.el" (20309 60936)) +;;;### (autoloads (find-cmd) "find-cmd" "find-cmd.el" (20355 10021)) ;;; Generated autoloads from find-cmd.el (autoload 'find-cmd "find-cmd" "\ @@ -10625,7 +10625,7 @@ result is a string that should be ready for the command line. ;;;*** ;;;### (autoloads (find-grep-dired find-name-dired find-dired) "find-dired" -;;;;;; "find-dired.el" (20309 60936)) +;;;;;; "find-dired.el" (20355 10021)) ;;; Generated autoloads from find-dired.el (autoload 'find-dired "find-dired" "\ @@ -10665,11 +10665,11 @@ use in place of \"-ls\" as the final argument. ;;;### (autoloads (ff-mouse-find-other-file-other-window ff-mouse-find-other-file ;;;;;; ff-find-other-file ff-get-other-file) "find-file" "find-file.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from find-file.el (defvar ff-special-constructs `((,(purecopy "^#\\s *\\(include\\|import\\)\\s +[<\"]\\(.*\\)[>\"]") lambda nil (buffer-substring (match-beginning 2) (match-end 2)))) "\ -*List of special constructs for `ff-treat-as-special' to recognize. +List of special constructs for `ff-treat-as-special' to recognize. Each element, tried in order, has the form (REGEXP . EXTRACT). If REGEXP matches the current line (from the beginning of the line), `ff-treat-as-special' calls function EXTRACT with no args. @@ -10759,7 +10759,7 @@ Visit the file you click on in another window. ;;;;;; find-variable find-variable-noselect find-function-other-frame ;;;;;; find-function-other-window find-function find-function-noselect ;;;;;; find-function-search-for-symbol find-library) "find-func" -;;;;;; "emacs-lisp/find-func.el" (20309 60936)) +;;;;;; "emacs-lisp/find-func.el" (20355 10021)) ;;; Generated autoloads from emacs-lisp/find-func.el (autoload 'find-library "find-func" "\ @@ -10918,7 +10918,7 @@ Define some key bindings for the find-function family of functions. ;;;*** ;;;### (autoloads (find-lisp-find-dired-filter find-lisp-find-dired-subdirectories -;;;;;; find-lisp-find-dired) "find-lisp" "find-lisp.el" (20309 60936)) +;;;;;; find-lisp-find-dired) "find-lisp" "find-lisp.el" (20355 10021)) ;;; Generated autoloads from find-lisp.el (autoload 'find-lisp-find-dired "find-lisp" "\ @@ -10939,7 +10939,7 @@ Change the filter on a find-lisp-find-dired buffer to REGEXP. ;;;*** ;;;### (autoloads (finder-by-keyword finder-commentary finder-list-keywords) -;;;;;; "finder" "finder.el" (20309 60936)) +;;;;;; "finder" "finder.el" (20355 10021)) ;;; Generated autoloads from finder.el (autoload 'finder-list-keywords "finder" "\ @@ -10961,7 +10961,7 @@ Find packages matching a given keyword. ;;;*** ;;;### (autoloads (enable-flow-control-on enable-flow-control) "flow-ctrl" -;;;;;; "flow-ctrl.el" (20309 60936)) +;;;;;; "flow-ctrl.el" (20355 10021)) ;;; Generated autoloads from flow-ctrl.el (autoload 'enable-flow-control "flow-ctrl" "\ @@ -10983,7 +10983,7 @@ to get the effect of a C-q. ;;;*** ;;;### (autoloads (fill-flowed fill-flowed-encode) "flow-fill" "gnus/flow-fill.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from gnus/flow-fill.el (autoload 'fill-flowed-encode "flow-fill" "\ @@ -10999,7 +10999,7 @@ to get the effect of a C-q. ;;;*** ;;;### (autoloads (flymake-find-file-hook flymake-mode-off flymake-mode-on -;;;;;; flymake-mode) "flymake" "progmodes/flymake.el" (20309 60936)) +;;;;;; flymake-mode) "flymake" "progmodes/flymake.el" (20373 11301)) ;;; Generated autoloads from progmodes/flymake.el (autoload 'flymake-mode "flymake" "\ @@ -11029,7 +11029,7 @@ Turn flymake mode off. ;;;### (autoloads (flyspell-buffer flyspell-region flyspell-mode-off ;;;;;; turn-off-flyspell turn-on-flyspell flyspell-mode flyspell-prog-mode) -;;;;;; "flyspell" "textmodes/flyspell.el" (20309 60936)) +;;;;;; "flyspell" "textmodes/flyspell.el" (20374 32165)) ;;; Generated autoloads from textmodes/flyspell.el (autoload 'flyspell-prog-mode "flyspell" "\ @@ -11101,7 +11101,7 @@ Flyspell whole buffer. ;;;### (autoloads (follow-delete-other-windows-and-split follow-mode ;;;;;; turn-off-follow-mode turn-on-follow-mode) "follow" "follow.el" -;;;;;; (20329 33834)) +;;;;;; (20381 5411)) ;;; Generated autoloads from follow.el (autoload 'turn-on-follow-mode "follow" "\ @@ -11177,8 +11177,8 @@ in your `~/.emacs' file, replacing [f7] by your favorite key: ;;;*** -;;;### (autoloads (footnote-mode) "footnote" "mail/footnote.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (footnote-mode) "footnote" "mail/footnote.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from mail/footnote.el (autoload 'footnote-mode "footnote" "\ @@ -11197,7 +11197,7 @@ play around with the following keys: ;;;*** ;;;### (autoloads (forms-find-file-other-window forms-find-file forms-mode) -;;;;;; "forms" "forms.el" (20341 24416)) +;;;;;; "forms" "forms.el" (20355 10021)) ;;; Generated autoloads from forms.el (autoload 'forms-mode "forms" "\ @@ -11234,7 +11234,7 @@ Visit a file in Forms mode in other window. ;;;*** ;;;### (autoloads (fortran-mode) "fortran" "progmodes/fortran.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from progmodes/fortran.el (autoload 'fortran-mode "fortran" "\ @@ -11312,7 +11312,7 @@ with no args, if that value is non-nil. ;;;*** ;;;### (autoloads (fortune fortune-to-signature fortune-compile fortune-from-region -;;;;;; fortune-add-fortune) "fortune" "play/fortune.el" (20309 60936)) +;;;;;; fortune-add-fortune) "fortune" "play/fortune.el" (20355 10021)) ;;; Generated autoloads from play/fortune.el (autoload 'fortune-add-fortune "fortune" "\ @@ -11361,7 +11361,7 @@ and choose the directory as the fortune-file. ;;;*** ;;;### (autoloads (gdb gdb-enable-debug) "gdb-mi" "progmodes/gdb-mi.el" -;;;;;; (20320 14810)) +;;;;;; (20378 29222)) ;;; Generated autoloads from progmodes/gdb-mi.el (defvar gdb-enable-debug nil "\ @@ -11428,8 +11428,8 @@ detailed description of this mode. ;;;*** ;;;### (autoloads (generic-make-keywords-list generic-mode generic-mode-internal -;;;;;; define-generic-mode) "generic" "emacs-lisp/generic.el" (20309 -;;;;;; 60936)) +;;;;;; define-generic-mode) "generic" "emacs-lisp/generic.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from emacs-lisp/generic.el (defvar generic-mode-list nil "\ @@ -11506,7 +11506,7 @@ regular expression that can be used as an element of ;;;*** ;;;### (autoloads (glasses-mode) "glasses" "progmodes/glasses.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from progmodes/glasses.el (autoload 'glasses-mode "glasses" "\ @@ -11522,7 +11522,7 @@ add virtual separators (like underscores) at places they belong to. ;;;### (autoloads (gmm-tool-bar-from-list gmm-widget-p gmm-error ;;;;;; gmm-message gmm-regexp-concat) "gmm-utils" "gnus/gmm-utils.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from gnus/gmm-utils.el (autoload 'gmm-regexp-concat "gmm-utils" "\ @@ -11577,7 +11577,7 @@ DEFAULT-MAP specifies the default key map for ICON-LIST. ;;;*** ;;;### (autoloads (gnus gnus-other-frame gnus-slave gnus-no-server -;;;;;; gnus-slave-no-server) "gnus" "gnus/gnus.el" (20309 60936)) +;;;;;; gnus-slave-no-server) "gnus" "gnus/gnus.el" (20378 29222)) ;;; Generated autoloads from gnus/gnus.el (when (fboundp 'custom-autoload) (custom-autoload 'gnus-select-method "gnus")) @@ -11630,7 +11630,7 @@ prompt the user for the name of an NNTP server to use. ;;;;;; gnus-agent-get-undownloaded-list gnus-agent-delete-group ;;;;;; gnus-agent-rename-group gnus-agent-possibly-save-gcc gnus-agentize ;;;;;; gnus-slave-unplugged gnus-plugged gnus-unplugged) "gnus-agent" -;;;;;; "gnus/gnus-agent.el" (20309 60936)) +;;;;;; "gnus/gnus-agent.el" (20355 10021)) ;;; Generated autoloads from gnus/gnus-agent.el (autoload 'gnus-unplugged "gnus-agent" "\ @@ -11721,7 +11721,7 @@ If CLEAN, obsolete (ignore). ;;;*** ;;;### (autoloads (gnus-article-prepare-display) "gnus-art" "gnus/gnus-art.el" -;;;;;; (20309 60936)) +;;;;;; (20361 20134)) ;;; Generated autoloads from gnus/gnus-art.el (autoload 'gnus-article-prepare-display "gnus-art" "\ @@ -11732,7 +11732,7 @@ Make the current buffer look like a nice article. ;;;*** ;;;### (autoloads (gnus-bookmark-bmenu-list gnus-bookmark-jump gnus-bookmark-set) -;;;;;; "gnus-bookmark" "gnus/gnus-bookmark.el" (20309 60936)) +;;;;;; "gnus-bookmark" "gnus/gnus-bookmark.el" (20355 10021)) ;;; Generated autoloads from gnus/gnus-bookmark.el (autoload 'gnus-bookmark-set "gnus-bookmark" "\ @@ -11757,8 +11757,8 @@ deletion, or > if it is flagged for displaying. ;;;### (autoloads (gnus-cache-delete-group gnus-cache-rename-group ;;;;;; gnus-cache-generate-nov-databases gnus-cache-generate-active -;;;;;; gnus-jog-cache) "gnus-cache" "gnus/gnus-cache.el" (20309 -;;;;;; 60936)) +;;;;;; gnus-jog-cache) "gnus-cache" "gnus/gnus-cache.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from gnus/gnus-cache.el (autoload 'gnus-jog-cache "gnus-cache" "\ @@ -11800,7 +11800,7 @@ supported. ;;;*** ;;;### (autoloads (gnus-delay-initialize gnus-delay-send-queue gnus-delay-article) -;;;;;; "gnus-delay" "gnus/gnus-delay.el" (20309 60936)) +;;;;;; "gnus-delay" "gnus/gnus-delay.el" (20355 10021)) ;;; Generated autoloads from gnus/gnus-delay.el (autoload 'gnus-delay-article "gnus-delay" "\ @@ -11836,7 +11836,7 @@ Checking delayed messages is skipped if optional arg NO-CHECK is non-nil. ;;;*** ;;;### (autoloads (gnus-user-format-function-D gnus-user-format-function-d) -;;;;;; "gnus-diary" "gnus/gnus-diary.el" (20309 60936)) +;;;;;; "gnus-diary" "gnus/gnus-diary.el" (20355 10021)) ;;; Generated autoloads from gnus/gnus-diary.el (autoload 'gnus-user-format-function-d "gnus-diary" "\ @@ -11852,7 +11852,7 @@ Checking delayed messages is skipped if optional arg NO-CHECK is non-nil. ;;;*** ;;;### (autoloads (turn-on-gnus-dired-mode) "gnus-dired" "gnus/gnus-dired.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from gnus/gnus-dired.el (autoload 'turn-on-gnus-dired-mode "gnus-dired" "\ @@ -11863,7 +11863,7 @@ Convenience method to turn on gnus-dired-mode. ;;;*** ;;;### (autoloads (gnus-draft-reminder) "gnus-draft" "gnus/gnus-draft.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from gnus/gnus-draft.el (autoload 'gnus-draft-reminder "gnus-draft" "\ @@ -11875,8 +11875,8 @@ Reminder user if there are unsent drafts. ;;;### (autoloads (gnus-convert-png-to-face gnus-convert-face-to-png ;;;;;; gnus-face-from-file gnus-x-face-from-file gnus-insert-random-x-face-header -;;;;;; gnus-random-x-face) "gnus-fun" "gnus/gnus-fun.el" (20309 -;;;;;; 60936)) +;;;;;; gnus-random-x-face) "gnus-fun" "gnus/gnus-fun.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from gnus/gnus-fun.el (autoload 'gnus-random-x-face "gnus-fun" "\ @@ -11921,7 +11921,7 @@ FILE should be a PNG file that's 48x48 and smaller than or equal to ;;;*** ;;;### (autoloads (gnus-treat-mail-gravatar gnus-treat-from-gravatar) -;;;;;; "gnus-gravatar" "gnus/gnus-gravatar.el" (20309 60936)) +;;;;;; "gnus-gravatar" "gnus/gnus-gravatar.el" (20355 10021)) ;;; Generated autoloads from gnus/gnus-gravatar.el (autoload 'gnus-treat-from-gravatar "gnus-gravatar" "\ @@ -11939,7 +11939,7 @@ If gravatars are already displayed, remove them. ;;;*** ;;;### (autoloads (gnus-fetch-group-other-frame gnus-fetch-group) -;;;;;; "gnus-group" "gnus/gnus-group.el" (20309 60936)) +;;;;;; "gnus-group" "gnus/gnus-group.el" (20355 10021)) ;;; Generated autoloads from gnus/gnus-group.el (autoload 'gnus-fetch-group "gnus-group" "\ @@ -11957,7 +11957,7 @@ Pop up a frame and enter GROUP. ;;;*** ;;;### (autoloads (gnus-html-prefetch-images gnus-article-html) "gnus-html" -;;;;;; "gnus/gnus-html.el" (20309 60936)) +;;;;;; "gnus/gnus-html.el" (20355 10021)) ;;; Generated autoloads from gnus/gnus-html.el (autoload 'gnus-article-html "gnus-html" "\ @@ -11973,7 +11973,7 @@ Pop up a frame and enter GROUP. ;;;*** ;;;### (autoloads (gnus-batch-score) "gnus-kill" "gnus/gnus-kill.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from gnus/gnus-kill.el (defalias 'gnus-batch-kill 'gnus-batch-score) @@ -11988,7 +11988,7 @@ Usage: emacs -batch -l ~/.emacs -l gnus -f gnus-batch-score ;;;### (autoloads (gnus-mailing-list-mode gnus-mailing-list-insinuate ;;;;;; turn-on-gnus-mailing-list-mode) "gnus-ml" "gnus/gnus-ml.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from gnus/gnus-ml.el (autoload 'turn-on-gnus-mailing-list-mode "gnus-ml" "\ @@ -12013,7 +12013,7 @@ Minor mode for providing mailing-list commands. ;;;### (autoloads (gnus-group-split-fancy gnus-group-split gnus-group-split-update ;;;;;; gnus-group-split-setup) "gnus-mlspl" "gnus/gnus-mlspl.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from gnus/gnus-mlspl.el (autoload 'gnus-group-split-setup "gnus-mlspl" "\ @@ -12114,7 +12114,7 @@ Calling (gnus-group-split-fancy nil nil \"mail.others\") returns: ;;;*** ;;;### (autoloads (gnus-button-reply gnus-button-mailto gnus-msg-mail) -;;;;;; "gnus-msg" "gnus/gnus-msg.el" (20321 38938)) +;;;;;; "gnus-msg" "gnus/gnus-msg.el" (20361 20134)) ;;; Generated autoloads from gnus/gnus-msg.el (autoload 'gnus-msg-mail "gnus-msg" "\ @@ -12142,7 +12142,7 @@ Like `message-reply'. ;;;### (autoloads (gnus-treat-newsgroups-picon gnus-treat-mail-picon ;;;;;; gnus-treat-from-picon) "gnus-picon" "gnus/gnus-picon.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from gnus/gnus-picon.el (autoload 'gnus-treat-from-picon "gnus-picon" "\ @@ -12169,7 +12169,7 @@ If picons are already displayed, remove them. ;;;;;; gnus-sorted-nintersection gnus-sorted-range-intersection ;;;;;; gnus-sorted-intersection gnus-intersection gnus-sorted-complement ;;;;;; gnus-sorted-ndifference gnus-sorted-difference) "gnus-range" -;;;;;; "gnus/gnus-range.el" (20309 60936)) +;;;;;; "gnus/gnus-range.el" (20355 10021)) ;;; Generated autoloads from gnus/gnus-range.el (autoload 'gnus-sorted-difference "gnus-range" "\ @@ -12237,7 +12237,7 @@ Add NUM into sorted LIST by side effect. ;;;*** ;;;### (autoloads (gnus-registry-install-hooks gnus-registry-initialize) -;;;;;; "gnus-registry" "gnus/gnus-registry.el" (20309 60936)) +;;;;;; "gnus-registry" "gnus/gnus-registry.el" (20355 10021)) ;;; Generated autoloads from gnus/gnus-registry.el (autoload 'gnus-registry-initialize "gnus-registry" "\ @@ -12253,8 +12253,8 @@ Install the registry hooks. ;;;*** ;;;### (autoloads (gnus-sieve-article-add-rule gnus-sieve-generate -;;;;;; gnus-sieve-update) "gnus-sieve" "gnus/gnus-sieve.el" (20309 -;;;;;; 60936)) +;;;;;; gnus-sieve-update) "gnus-sieve" "gnus/gnus-sieve.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from gnus/gnus-sieve.el (autoload 'gnus-sieve-update "gnus-sieve" "\ @@ -12282,7 +12282,7 @@ See the documentation for these variables and functions for details. ;;;*** ;;;### (autoloads (gnus-update-format) "gnus-spec" "gnus/gnus-spec.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from gnus/gnus-spec.el (autoload 'gnus-update-format "gnus-spec" "\ @@ -12293,7 +12293,7 @@ Update the format specification near point. ;;;*** ;;;### (autoloads (gnus-declare-backend) "gnus-start" "gnus/gnus-start.el" -;;;;;; (20309 60936)) +;;;;;; (20361 20134)) ;;; Generated autoloads from gnus/gnus-start.el (autoload 'gnus-declare-backend "gnus-start" "\ @@ -12304,7 +12304,7 @@ Declare back end NAME with ABILITIES as a Gnus back end. ;;;*** ;;;### (autoloads (gnus-summary-bookmark-jump) "gnus-sum" "gnus/gnus-sum.el" -;;;;;; (20321 38938)) +;;;;;; (20355 10021)) ;;; Generated autoloads from gnus/gnus-sum.el (autoload 'gnus-summary-bookmark-jump "gnus-sum" "\ @@ -12316,7 +12316,7 @@ BOOKMARK is a bookmark name or a bookmark record. ;;;*** ;;;### (autoloads (gnus-sync-install-hooks gnus-sync-initialize) -;;;;;; "gnus-sync" "gnus/gnus-sync.el" (20309 60936)) +;;;;;; "gnus-sync" "gnus/gnus-sync.el" (20355 10021)) ;;; Generated autoloads from gnus/gnus-sync.el (autoload 'gnus-sync-initialize "gnus-sync" "\ @@ -12332,7 +12332,7 @@ Install the sync hooks. ;;;*** ;;;### (autoloads (gnus-add-configuration) "gnus-win" "gnus/gnus-win.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from gnus/gnus-win.el (autoload 'gnus-add-configuration "gnus-win" "\ @@ -12343,7 +12343,7 @@ Add the window configuration CONF to `gnus-buffer-configuration'. ;;;*** ;;;### (autoloads (gnutls-min-prime-bits) "gnutls" "net/gnutls.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from net/gnutls.el (defvar gnutls-min-prime-bits nil "\ @@ -12359,7 +12359,7 @@ A value of nil says to use the default gnutls value.") ;;;*** -;;;### (autoloads (gomoku) "gomoku" "play/gomoku.el" (20309 60936)) +;;;### (autoloads (gomoku) "gomoku" "play/gomoku.el" (20355 10021)) ;;; Generated autoloads from play/gomoku.el (autoload 'gomoku "gomoku" "\ @@ -12386,8 +12386,8 @@ Use \\[describe-mode] for more info. ;;;*** ;;;### (autoloads (goto-address-prog-mode goto-address-mode goto-address -;;;;;; goto-address-at-point) "goto-addr" "net/goto-addr.el" (20309 -;;;;;; 60936)) +;;;;;; goto-address-at-point) "goto-addr" "net/goto-addr.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from net/goto-addr.el (define-obsolete-function-alias 'goto-address-at-mouse 'goto-address-at-point "22.1") @@ -12429,7 +12429,7 @@ Like `goto-address-mode', but only for comments and strings. ;;;*** ;;;### (autoloads (gravatar-retrieve-synchronously gravatar-retrieve) -;;;;;; "gravatar" "gnus/gravatar.el" (20309 60936)) +;;;;;; "gravatar" "gnus/gravatar.el" (20355 10021)) ;;; Generated autoloads from gnus/gravatar.el (autoload 'gravatar-retrieve "gravatar" "\ @@ -12447,11 +12447,11 @@ Retrieve MAIL-ADDRESS gravatar and returns it. ;;;### (autoloads (zrgrep rgrep lgrep grep-find grep grep-mode grep-compute-defaults ;;;;;; grep-process-setup grep-setup-hook grep-find-command grep-command -;;;;;; grep-window-height) "grep" "progmodes/grep.el" (20309 60936)) +;;;;;; grep-window-height) "grep" "progmodes/grep.el" (20369 14251)) ;;; Generated autoloads from progmodes/grep.el (defvar grep-window-height nil "\ -*Number of lines in a grep window. If nil, use `compilation-window-height'.") +Number of lines in a grep window. If nil, use `compilation-window-height'.") (custom-autoload 'grep-window-height "grep" t) @@ -12530,8 +12530,8 @@ Sets `grep-last-buffer' and `compilation-window-height'. (autoload 'grep "grep" "\ Run grep, with user-specified args, and collect output in a buffer. While grep runs asynchronously, you can use \\[next-error] (M-x next-error), -or \\\\[compile-goto-error] in the grep output buffer, to go to the lines where grep -found matches. +or \\\\[compile-goto-error] in the *grep* buffer, to go to the lines where grep found +matches. To kill the grep job before it finishes, type \\[kill-compilation]. For doing a recursive `grep', see the `rgrep' command. For running `grep' in a specific directory, see `lgrep'. @@ -12587,9 +12587,10 @@ With \\[universal-argument] prefix, you can edit the constructed shell command l before it is executed. With two \\[universal-argument] prefixes, directly edit and run `grep-find-command'. -Collect output in a buffer. While find runs asynchronously, you -can use \\[next-error] (M-x next-error), or \\\\[compile-goto-error] in the grep output buffer, -to go to the lines where grep found matches. +Collect output in a buffer. While the recursive grep is running, +you can use \\[next-error] (M-x next-error), or \\\\[compile-goto-error] in the grep output buffer, +to visit the lines where matches were found. To kill the job +before it finishes, type \\[kill-compilation]. This command shares argument histories with \\[lgrep] and \\[grep-find]. @@ -12609,7 +12610,7 @@ file name to `*.gz', and sets `grep-highlight-matches' to `always'. ;;;*** -;;;### (autoloads (gs-load-image) "gs" "gs.el" (20309 60936)) +;;;### (autoloads (gs-load-image) "gs" "gs.el" (20355 10021)) ;;; Generated autoloads from gs.el (autoload 'gs-load-image "gs" "\ @@ -12623,7 +12624,7 @@ the form \"WINDOW-ID PIXMAP-ID\". Value is non-nil if successful. ;;;*** ;;;### (autoloads (gud-tooltip-mode gdb-script-mode jdb pdb perldb -;;;;;; xdb dbx sdb gud-gdb) "gud" "progmodes/gud.el" (20309 60936)) +;;;;;; xdb dbx sdb gud-gdb) "gud" "progmodes/gud.el" (20373 11301)) ;;; Generated autoloads from progmodes/gud.el (autoload 'gud-gdb "gud" "\ @@ -12711,8 +12712,8 @@ it if ARG is omitted or nil. ;;;*** -;;;### (autoloads (handwrite) "handwrite" "play/handwrite.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (handwrite) "handwrite" "play/handwrite.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from play/handwrite.el (autoload 'handwrite "handwrite" "\ @@ -12730,7 +12731,7 @@ Variables: `handwrite-linespace' (default 12) ;;;*** ;;;### (autoloads (hanoi-unix-64 hanoi-unix hanoi) "hanoi" "play/hanoi.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from play/hanoi.el (autoload 'hanoi "hanoi" "\ @@ -12759,7 +12760,7 @@ to be updated. ;;;### (autoloads (mail-check-payment mail-add-payment-async mail-add-payment ;;;;;; hashcash-verify-payment hashcash-insert-payment-async hashcash-insert-payment) -;;;;;; "hashcash" "mail/hashcash.el" (20309 60936)) +;;;;;; "hashcash" "mail/hashcash.el" (20355 10021)) ;;; Generated autoloads from mail/hashcash.el (autoload 'hashcash-insert-payment "hashcash" "\ @@ -12804,7 +12805,7 @@ Prefix arg sets default accept amount temporarily. ;;;### (autoloads (scan-buf-previous-region scan-buf-next-region ;;;;;; scan-buf-move-to-region help-at-pt-display-when-idle help-at-pt-set-timer ;;;;;; help-at-pt-cancel-timer display-local-help help-at-pt-kbd-string -;;;;;; help-at-pt-string) "help-at-pt" "help-at-pt.el" (20309 60936)) +;;;;;; help-at-pt-string) "help-at-pt" "help-at-pt.el" (20355 10021)) ;;; Generated autoloads from help-at-pt.el (autoload 'help-at-pt-string "help-at-pt" "\ @@ -12934,7 +12935,7 @@ different regions. With numeric argument ARG, behaves like ;;;### (autoloads (doc-file-to-info doc-file-to-man describe-categories ;;;;;; describe-syntax describe-variable variable-at-point describe-function-1 ;;;;;; find-lisp-object-file-name help-C-file-name describe-function) -;;;;;; "help-fns" "help-fns.el" (20309 60936)) +;;;;;; "help-fns" "help-fns.el" (20355 10021)) ;;; Generated autoloads from help-fns.el (autoload 'describe-function "help-fns" "\ @@ -13014,7 +13015,7 @@ Produce a texinfo buffer with sorted doc-strings from the DOC file. ;;;*** ;;;### (autoloads (three-step-help) "help-macro" "help-macro.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from help-macro.el (defvar three-step-help nil "\ @@ -13030,8 +13031,8 @@ gives the window that lists the options.") ;;;### (autoloads (help-xref-on-pp help-insert-xref-button help-xref-button ;;;;;; help-make-xrefs help-buffer help-setup-xref help-mode-finish -;;;;;; help-mode-setup help-mode) "help-mode" "help-mode.el" (20309 -;;;;;; 60936)) +;;;;;; help-mode-setup help-mode) "help-mode" "help-mode.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from help-mode.el (autoload 'help-mode "help-mode" "\ @@ -13124,7 +13125,7 @@ Add xrefs for symbols in `pp's output between FROM and TO. ;;;*** ;;;### (autoloads (Helper-help Helper-describe-bindings) "helper" -;;;;;; "emacs-lisp/helper.el" (20309 60936)) +;;;;;; "emacs-lisp/helper.el" (20355 10021)) ;;; Generated autoloads from emacs-lisp/helper.el (autoload 'Helper-describe-bindings "helper" "\ @@ -13140,7 +13141,7 @@ Provide help for current mode. ;;;*** ;;;### (autoloads (hexlify-buffer hexl-find-file hexl-mode) "hexl" -;;;;;; "hexl.el" (20309 60936)) +;;;;;; "hexl.el" (20361 20134)) ;;; Generated autoloads from hexl.el (autoload 'hexl-mode "hexl" "\ @@ -13155,7 +13156,7 @@ using the function `hexlify-buffer'. Each line in the buffer has an \"address\" (displayed in hexadecimal) representing the offset into the file that the characters on this line are at and 16 characters from the file (displayed as hexadecimal -values grouped every 16 bits) and as their ASCII values. +values grouped every `hexl-bits' bits) and as their ASCII values. If any of the characters (displayed as ASCII characters) are unprintable (control or meta characters) they will be replaced as @@ -13237,7 +13238,7 @@ This discards the buffer's undo information. ;;;### (autoloads (hi-lock-write-interactive-patterns hi-lock-unface-buffer ;;;;;; hi-lock-face-phrase-buffer hi-lock-face-buffer hi-lock-line-face-buffer ;;;;;; global-hi-lock-mode hi-lock-mode) "hi-lock" "hi-lock.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from hi-lock.el (autoload 'hi-lock-mode "hi-lock" "\ @@ -13376,7 +13377,7 @@ be found in variable `hi-lock-interactive-patterns'. ;;;*** ;;;### (autoloads (hide-ifdef-mode) "hideif" "progmodes/hideif.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from progmodes/hideif.el (autoload 'hide-ifdef-mode "hideif" "\ @@ -13420,11 +13421,11 @@ Several variables affect how the hiding is done: ;;;*** ;;;### (autoloads (turn-off-hideshow hs-minor-mode) "hideshow" "progmodes/hideshow.el" -;;;;;; (20330 2324)) +;;;;;; (20356 55829)) ;;; Generated autoloads from progmodes/hideshow.el (defvar hs-special-modes-alist (mapcar 'purecopy '((c-mode "{" "}" "/[*/]" nil nil) (c++-mode "{" "}" "/[*/]" nil nil) (bibtex-mode ("@\\S(*\\(\\s(\\)" 1)) (java-mode "{" "}" "/[*/]" nil nil) (js-mode "{" "}" "/[*/]" nil))) "\ -*Alist for initializing the hideshow variables for different modes. +Alist for initializing the hideshow variables for different modes. Each element has the form (MODE START END COMMENT-START FORWARD-SEXP-FUNC ADJUST-BEG-FUNC). @@ -13486,8 +13487,8 @@ Unconditionally turn off `hs-minor-mode'. ;;;;;; highlight-compare-buffers highlight-changes-rotate-faces ;;;;;; highlight-changes-previous-change highlight-changes-next-change ;;;;;; highlight-changes-remove-highlight highlight-changes-visible-mode -;;;;;; highlight-changes-mode) "hilit-chg" "hilit-chg.el" (20309 -;;;;;; 60936)) +;;;;;; highlight-changes-mode) "hilit-chg" "hilit-chg.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from hilit-chg.el (autoload 'highlight-changes-mode "hilit-chg" "\ @@ -13622,7 +13623,7 @@ See `highlight-changes-mode' for more information on Highlight-Changes mode. ;;;;;; hippie-expand-ignore-buffers hippie-expand-max-buffers hippie-expand-no-restriction ;;;;;; hippie-expand-dabbrev-as-symbol hippie-expand-dabbrev-skip-space ;;;;;; hippie-expand-verbose hippie-expand-try-functions-list) "hippie-exp" -;;;;;; "hippie-exp.el" (20309 60936)) +;;;;;; "hippie-exp.el" (20355 10021)) ;;; Generated autoloads from hippie-exp.el (defvar hippie-expand-try-functions-list '(try-complete-file-name-partially try-complete-file-name try-expand-all-abbrevs try-expand-list try-expand-line try-expand-dabbrev try-expand-dabbrev-all-buffers try-expand-dabbrev-from-kill try-complete-lisp-symbol-partially try-complete-lisp-symbol) "\ @@ -13695,7 +13696,7 @@ argument VERBOSE non-nil makes the function verbose. ;;;*** ;;;### (autoloads (global-hl-line-mode hl-line-mode) "hl-line" "hl-line.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from hl-line.el (autoload 'hl-line-mode "hl-line" "\ @@ -13748,7 +13749,7 @@ Global-Hl-Line mode uses the functions `global-hl-line-unhighlight' and ;;;;;; holiday-bahai-holidays holiday-islamic-holidays holiday-christian-holidays ;;;;;; holiday-hebrew-holidays holiday-other-holidays holiday-local-holidays ;;;;;; holiday-oriental-holidays holiday-general-holidays) "holidays" -;;;;;; "calendar/holidays.el" (20309 60936)) +;;;;;; "calendar/holidays.el" (20361 20134)) ;;; Generated autoloads from calendar/holidays.el (define-obsolete-variable-alias 'general-holidays 'holiday-general-holidays "23.1") @@ -13896,8 +13897,8 @@ The optional LABEL is used to label the buffer created. ;;;*** -;;;### (autoloads (html2text) "html2text" "gnus/html2text.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (html2text) "html2text" "gnus/html2text.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from gnus/html2text.el (autoload 'html2text "html2text" "\ @@ -13908,7 +13909,7 @@ Convert HTML to plain text in the current buffer. ;;;*** ;;;### (autoloads (htmlfontify-copy-and-link-dir htmlfontify-buffer) -;;;;;; "htmlfontify" "htmlfontify.el" (20324 39235)) +;;;;;; "htmlfontify" "htmlfontify.el" (20355 10021)) ;;; Generated autoloads from htmlfontify.el (autoload 'htmlfontify-buffer "htmlfontify" "\ @@ -13941,8 +13942,8 @@ You may also want to set `hfy-page-header' and `hfy-page-footer'. ;;;*** ;;;### (autoloads (define-ibuffer-filter define-ibuffer-op define-ibuffer-sorter -;;;;;; define-ibuffer-column) "ibuf-macs" "ibuf-macs.el" (20309 -;;;;;; 60936)) +;;;;;; define-ibuffer-column) "ibuf-macs" "ibuf-macs.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from ibuf-macs.el (autoload 'define-ibuffer-column "ibuf-macs" "\ @@ -14039,7 +14040,7 @@ bound to the current value of the filter. ;;;*** ;;;### (autoloads (ibuffer ibuffer-other-window ibuffer-list-buffers) -;;;;;; "ibuffer" "ibuffer.el" (20317 25086)) +;;;;;; "ibuffer" "ibuffer.el" (20374 32165)) ;;; Generated autoloads from ibuffer.el (autoload 'ibuffer-list-buffers "ibuffer" "\ @@ -14080,7 +14081,7 @@ FORMATS is the value to use for `ibuffer-formats'. ;;;### (autoloads (icalendar-import-buffer icalendar-import-file ;;;;;; icalendar-export-region icalendar-export-file) "icalendar" -;;;;;; "calendar/icalendar.el" (20320 14810)) +;;;;;; "calendar/icalendar.el" (20355 10021)) ;;; Generated autoloads from calendar/icalendar.el (autoload 'icalendar-export-file "icalendar" "\ @@ -14132,8 +14133,8 @@ buffer `*icalendar-errors*'. ;;;*** -;;;### (autoloads (icomplete-mode) "icomplete" "icomplete.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (icomplete-mode) "icomplete" "icomplete.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from icomplete.el (defvar icomplete-mode nil "\ @@ -14155,7 +14156,7 @@ the mode if ARG is omitted or nil. ;;;*** -;;;### (autoloads (icon-mode) "icon" "progmodes/icon.el" (20309 60936)) +;;;### (autoloads (icon-mode) "icon" "progmodes/icon.el" (20355 10021)) ;;; Generated autoloads from progmodes/icon.el (autoload 'icon-mode "icon" "\ @@ -14196,7 +14197,7 @@ with no args, if that value is non-nil. ;;;*** ;;;### (autoloads (idlwave-shell) "idlw-shell" "progmodes/idlw-shell.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from progmodes/idlw-shell.el (autoload 'idlwave-shell "idlw-shell" "\ @@ -14222,7 +14223,7 @@ See also the variable `idlwave-shell-prompt-pattern'. ;;;*** ;;;### (autoloads (idlwave-mode) "idlwave" "progmodes/idlwave.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from progmodes/idlwave.el (autoload 'idlwave-mode "idlwave" "\ @@ -14356,8 +14357,8 @@ The main features of this mode are ;;;;;; ido-find-alternate-file ido-find-file-other-window ido-find-file ;;;;;; ido-find-file-in-dir ido-switch-buffer-other-frame ido-insert-buffer ;;;;;; ido-kill-buffer ido-display-buffer ido-switch-buffer-other-window -;;;;;; ido-switch-buffer ido-mode ido-mode) "ido" "ido.el" (20330 -;;;;;; 976)) +;;;;;; ido-switch-buffer ido-mode ido-mode) "ido" "ido.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from ido.el (defvar ido-mode nil "\ @@ -14617,7 +14618,7 @@ DEF, if non-nil, is the default value. ;;;*** -;;;### (autoloads (ielm) "ielm" "ielm.el" (20309 60936)) +;;;### (autoloads (ielm) "ielm" "ielm.el" (20355 10021)) ;;; Generated autoloads from ielm.el (autoload 'ielm "ielm" "\ @@ -14628,7 +14629,7 @@ Switches to the buffer `*ielm*', or creates it if it does not exist. ;;;*** -;;;### (autoloads (iimage-mode) "iimage" "iimage.el" (20309 60936)) +;;;### (autoloads (iimage-mode) "iimage" "iimage.el" (20355 10021)) ;;; Generated autoloads from iimage.el (define-obsolete-function-alias 'turn-on-iimage-mode 'iimage-mode "24.1") @@ -14649,7 +14650,7 @@ the mode if ARG is omitted or nil, and toggle it if ARG is `toggle'. ;;;;;; create-image image-type-auto-detected-p image-type-available-p ;;;;;; image-type image-type-from-file-name image-type-from-file-header ;;;;;; image-type-from-buffer image-type-from-data) "image" "image.el" -;;;;;; (20341 55868)) +;;;;;; (20377 8374)) ;;; Generated autoloads from image.el (autoload 'image-type-from-data "image" "\ @@ -14828,7 +14829,8 @@ Example: (autoload 'imagemagick-register-types "image" "\ Register file types that can be handled by ImageMagick. -This registers the ImageMagick types listed in `imagemagick-types', +This function is called at startup, after loading the init file. +It registers the ImageMagick types listed in `imagemagick-types', excluding those listed in `imagemagick-types-inhibit'. Registered image types are added to `auto-mode-alist', so that @@ -14849,7 +14851,7 @@ If Emacs is compiled without ImageMagick support, do nothing. ;;;;;; image-dired-jump-thumbnail-buffer image-dired-delete-tag ;;;;;; image-dired-tag-files image-dired-show-all-from-dir image-dired-display-thumbs ;;;;;; image-dired-dired-with-window-configuration image-dired-dired-toggle-marked-thumbs) -;;;;;; "image-dired" "image-dired.el" (20309 60936)) +;;;;;; "image-dired" "image-dired.el" (20355 10021)) ;;; Generated autoloads from image-dired.el (autoload 'image-dired-dired-toggle-marked-thumbs "image-dired" "\ @@ -14987,7 +14989,7 @@ easy-to-use form. ;;;### (autoloads (auto-image-file-mode insert-image-file image-file-name-regexp ;;;;;; image-file-name-regexps image-file-name-extensions) "image-file" -;;;;;; "image-file.el" (20309 60936)) +;;;;;; "image-file.el" (20355 10021)) ;;; Generated autoloads from image-file.el (defvar image-file-name-extensions (purecopy '("png" "jpeg" "jpg" "gif" "tiff" "tif" "xbm" "xpm" "pbm" "pgm" "ppm" "pnm" "svg")) "\ @@ -15050,7 +15052,7 @@ An image file is one whose name has an extension in ;;;*** ;;;### (autoloads (image-bookmark-jump image-mode-as-text image-minor-mode -;;;;;; image-mode) "image-mode" "image-mode.el" (20309 60936)) +;;;;;; image-mode) "image-mode" "image-mode.el" (20355 10021)) ;;; Generated autoloads from image-mode.el (autoload 'image-mode "image-mode" "\ @@ -15095,7 +15097,7 @@ on these modes. ;;;*** ;;;### (autoloads (imenu imenu-add-menubar-index imenu-add-to-menubar -;;;;;; imenu-sort-function) "imenu" "imenu.el" (20321 38938)) +;;;;;; imenu-sort-function) "imenu" "imenu.el" (20369 14251)) ;;; Generated autoloads from imenu.el (defvar imenu-sort-function nil "\ @@ -15212,7 +15214,7 @@ for more information. ;;;### (autoloads (indian-2-column-to-ucs-region in-is13194-pre-write-conversion ;;;;;; in-is13194-post-read-conversion indian-compose-string indian-compose-region) -;;;;;; "ind-util" "language/ind-util.el" (20309 60936)) +;;;;;; "ind-util" "language/ind-util.el" (20355 10021)) ;;; Generated autoloads from language/ind-util.el (autoload 'indian-compose-region "ind-util" "\ @@ -15244,11 +15246,11 @@ Convert old Emacs Devanagari characters to UCS. ;;;### (autoloads (inferior-lisp inferior-lisp-prompt inferior-lisp-load-command ;;;;;; inferior-lisp-program inferior-lisp-filter-regexp) "inf-lisp" -;;;;;; "progmodes/inf-lisp.el" (20309 60936)) +;;;;;; "progmodes/inf-lisp.el" (20355 10021)) ;;; Generated autoloads from progmodes/inf-lisp.el (defvar inferior-lisp-filter-regexp (purecopy "\\`\\s *\\(:\\(\\w\\|\\s_\\)\\)?\\s *\\'") "\ -*What not to save on inferior Lisp's input history. +What not to save on inferior Lisp's input history. Input matching this regexp is not saved on the input history in Inferior Lisp mode. Default is whitespace followed by 0 or 1 single-letter colon-keyword \(as in :a, :c, etc.)") @@ -15256,12 +15258,12 @@ mode. Default is whitespace followed by 0 or 1 single-letter colon-keyword (custom-autoload 'inferior-lisp-filter-regexp "inf-lisp" t) (defvar inferior-lisp-program (purecopy "lisp") "\ -*Program name for invoking an inferior Lisp in Inferior Lisp mode.") +Program name for invoking an inferior Lisp in Inferior Lisp mode.") (custom-autoload 'inferior-lisp-program "inf-lisp" t) (defvar inferior-lisp-load-command (purecopy "(load \"%s\")\n") "\ -*Format-string for building a Lisp expression to load a file. +Format-string for building a Lisp expression to load a file. This format string should use `%s' to substitute a file name and should result in a Lisp expression that will command the inferior Lisp to load that file. The default works acceptably on most Lisps. @@ -15290,7 +15292,7 @@ This is a fine thing to set in your .emacs file or through Custom.") (custom-autoload 'inferior-lisp-prompt "inf-lisp" t) (defvar inferior-lisp-mode-hook 'nil "\ -*Hook for customizing Inferior Lisp mode.") +Hook for customizing Inferior Lisp mode.") (autoload 'inferior-lisp "inf-lisp" "\ Run an inferior Lisp process, input and output via buffer `*inferior-lisp*'. @@ -15311,7 +15313,7 @@ of `inferior-lisp-program'). Runs the hooks from ;;;;;; Info-goto-emacs-key-command-node Info-goto-emacs-command-node ;;;;;; Info-mode info-finder info-apropos Info-index Info-directory ;;;;;; Info-on-current-buffer info-standalone info-emacs-manual -;;;;;; info info-other-window) "info" "info.el" (20330 2046)) +;;;;;; info info-other-window) "info" "info.el" (20355 10021)) ;;; Generated autoloads from info.el (autoload 'info-other-window "info" "\ @@ -15497,7 +15499,7 @@ Go to Info buffer that displays MANUAL, creating it if none already exists. ;;;### (autoloads (info-complete-file info-complete-symbol info-lookup-file ;;;;;; info-lookup-symbol info-lookup-reset) "info-look" "info-look.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from info-look.el (autoload 'info-lookup-reset "info-look" "\ @@ -15546,7 +15548,7 @@ Perform completion on file preceding point. ;;;### (autoloads (info-xref-docstrings info-xref-check-all-custom ;;;;;; info-xref-check-all info-xref-check) "info-xref" "info-xref.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from info-xref.el (autoload 'info-xref-check "info-xref" "\ @@ -15629,7 +15631,7 @@ the sources handy. ;;;*** ;;;### (autoloads (batch-info-validate Info-validate Info-split Info-split-threshold -;;;;;; Info-tagify) "informat" "informat.el" (20309 60936)) +;;;;;; Info-tagify) "informat" "informat.el" (20355 10021)) ;;; Generated autoloads from informat.el (autoload 'Info-tagify "informat" "\ @@ -15676,7 +15678,7 @@ For example, invoke \"emacs -batch -f batch-info-validate $info/ ~/*.info\" ;;;### (autoloads (isearch-process-search-multibyte-characters isearch-toggle-input-method ;;;;;; isearch-toggle-specified-input-method) "isearch-x" "international/isearch-x.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from international/isearch-x.el (autoload 'isearch-toggle-specified-input-method "isearch-x" "\ @@ -15696,8 +15698,8 @@ Toggle input method in interactive search. ;;;*** -;;;### (autoloads (isearchb-activate) "isearchb" "isearchb.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (isearchb-activate) "isearchb" "isearchb.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from isearchb.el (autoload 'isearchb-activate "isearchb" "\ @@ -15713,7 +15715,7 @@ accessed via isearchb. ;;;### (autoloads (iso-cvt-define-menu iso-cvt-write-only iso-cvt-read-only ;;;;;; iso-sgml2iso iso-iso2sgml iso-iso2duden iso-iso2gtex iso-gtex2iso ;;;;;; iso-tex2iso iso-iso2tex iso-german iso-spanish) "iso-cvt" -;;;;;; "international/iso-cvt.el" (20309 60936)) +;;;;;; "international/iso-cvt.el" (20355 10021)) ;;; Generated autoloads from international/iso-cvt.el (autoload 'iso-spanish "iso-cvt" "\ @@ -15804,7 +15806,7 @@ Add submenus to the File menu, to convert to and from various formats. ;;;*** ;;;### (autoloads nil "iso-transl" "international/iso-transl.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from international/iso-transl.el (or key-translation-map (setq key-translation-map (make-sparse-keymap))) (define-key key-translation-map "\C-x8" 'iso-transl-ctl-x-8-map) @@ -15816,13 +15818,13 @@ Add submenus to the File menu, to convert to and from various formats. ;;;;;; ispell-complete-word ispell-continue ispell-buffer ispell-comments-and-strings ;;;;;; ispell-region ispell-change-dictionary ispell-kill-ispell ;;;;;; ispell-help ispell-pdict-save ispell-word ispell-personal-dictionary) -;;;;;; "ispell" "textmodes/ispell.el" (20341 56798)) +;;;;;; "ispell" "textmodes/ispell.el" (20374 32165)) ;;; Generated autoloads from textmodes/ispell.el (put 'ispell-check-comments 'safe-local-variable (lambda (a) (memq a '(nil t exclusive)))) (defvar ispell-personal-dictionary nil "\ -*File name of your personal spelling dictionary, or nil. +File name of your personal spelling dictionary, or nil. If nil, the default personal dictionary, (\"~/.ispell_DICTNAME\" for ispell or \"~/.aspell.LANG.pws\" for aspell) is used, where DICTNAME is the name of your default dictionary and LANG the two letter language code.") @@ -15841,7 +15843,7 @@ and added as a submenu of the \"Edit\" menu.") (defvar ispell-menu-map-needed (and (not ispell-menu-map) (not (featurep 'xemacs)) 'reload)) -(if ispell-menu-map-needed (progn (setq ispell-menu-map (make-sparse-keymap "Spell")) (define-key ispell-menu-map [ispell-change-dictionary] `(menu-item ,(purecopy "Change Dictionary...") ispell-change-dictionary :help ,(purecopy "Supply explicit dictionary file name"))) (define-key ispell-menu-map [ispell-kill-ispell] `(menu-item ,(purecopy "Kill Process") ispell-kill-ispell :enable (and (boundp 'ispell-process) ispell-process (eq (ispell-process-status) 'run)) :help ,(purecopy "Terminate Ispell subprocess"))) (define-key ispell-menu-map [ispell-pdict-save] `(menu-item ,(purecopy "Save Dictionary") (lambda nil (interactive) (ispell-pdict-save t t)) :help ,(purecopy "Save personal dictionary"))) (define-key ispell-menu-map [ispell-customize] `(menu-item ,(purecopy "Customize...") (lambda nil (interactive) (customize-group 'ispell)) :help ,(purecopy "Customize spell checking options"))) (define-key ispell-menu-map [ispell-help] `(menu-item ,(purecopy "Help") (lambda nil (interactive) (describe-function 'ispell-help)) :help ,(purecopy "Show standard Ispell keybindings and commands"))) (define-key ispell-menu-map [flyspell-mode] `(menu-item ,(purecopy "Automatic spell checking (Flyspell)") flyspell-mode :help ,(purecopy "Check spelling while you edit the text") :button (:toggle bound-and-true-p flyspell-mode))) (define-key ispell-menu-map [ispell-complete-word] `(menu-item ,(purecopy "Complete Word") ispell-complete-word :help ,(purecopy "Complete word at cursor using dictionary"))) (define-key ispell-menu-map [ispell-complete-word-interior-frag] `(menu-item ,(purecopy "Complete Word Fragment") ispell-complete-word-interior-frag :help ,(purecopy "Complete word fragment at cursor"))))) +(if ispell-menu-map-needed (progn (setq ispell-menu-map (make-sparse-keymap "Spell")) (define-key ispell-menu-map [ispell-change-dictionary] `(menu-item ,(purecopy "Change Dictionary...") ispell-change-dictionary :help ,(purecopy "Supply explicit dictionary file name"))) (define-key ispell-menu-map [ispell-kill-ispell] `(menu-item ,(purecopy "Kill Process") (lambda nil (interactive) (ispell-kill-ispell nil 'clear)) :enable (and (boundp 'ispell-process) ispell-process (eq (ispell-process-status) 'run)) :help ,(purecopy "Terminate Ispell subprocess"))) (define-key ispell-menu-map [ispell-pdict-save] `(menu-item ,(purecopy "Save Dictionary") (lambda nil (interactive) (ispell-pdict-save t t)) :help ,(purecopy "Save personal dictionary"))) (define-key ispell-menu-map [ispell-customize] `(menu-item ,(purecopy "Customize...") (lambda nil (interactive) (customize-group 'ispell)) :help ,(purecopy "Customize spell checking options"))) (define-key ispell-menu-map [ispell-help] `(menu-item ,(purecopy "Help") (lambda nil (interactive) (describe-function 'ispell-help)) :help ,(purecopy "Show standard Ispell keybindings and commands"))) (define-key ispell-menu-map [flyspell-mode] `(menu-item ,(purecopy "Automatic spell checking (Flyspell)") flyspell-mode :help ,(purecopy "Check spelling while you edit the text") :button (:toggle bound-and-true-p flyspell-mode))) (define-key ispell-menu-map [ispell-complete-word] `(menu-item ,(purecopy "Complete Word") ispell-complete-word :help ,(purecopy "Complete word at cursor using dictionary"))) (define-key ispell-menu-map [ispell-complete-word-interior-frag] `(menu-item ,(purecopy "Complete Word Fragment") ispell-complete-word-interior-frag :help ,(purecopy "Complete word fragment at cursor"))))) (if ispell-menu-map-needed (progn (define-key ispell-menu-map [ispell-continue] `(menu-item ,(purecopy "Continue Spell-Checking") ispell-continue :enable (and (boundp 'ispell-region-end) (marker-position ispell-region-end) (equal (marker-buffer ispell-region-end) (current-buffer))) :help ,(purecopy "Continue spell checking last region"))) (define-key ispell-menu-map [ispell-word] `(menu-item ,(purecopy "Spell-Check Word") ispell-word :help ,(purecopy "Spell-check word at cursor"))) (define-key ispell-menu-map [ispell-comments-and-strings] `(menu-item ,(purecopy "Spell-Check Comments") ispell-comments-and-strings :help ,(purecopy "Spell-check only comments and strings"))))) @@ -15857,7 +15859,7 @@ Valid forms include: (KEY FUNCTION ARGS) - FUNCTION called with ARGS returns end of region.") (defvar ispell-tex-skip-alists (purecopy '((("\\\\addcontentsline" ispell-tex-arg-end 2) ("\\\\add\\(tocontents\\|vspace\\)" ispell-tex-arg-end) ("\\\\\\([aA]lph\\|arabic\\)" ispell-tex-arg-end) ("\\\\bibliographystyle" ispell-tex-arg-end) ("\\\\makebox" ispell-tex-arg-end 0) ("\\\\e?psfig" ispell-tex-arg-end) ("\\\\document\\(class\\|style\\)" . "\\\\begin[ \n]*{[ \n]*document[ \n]*}")) (("\\(figure\\|table\\)\\*?" ispell-tex-arg-end 0) ("list" ispell-tex-arg-end 2) ("program" . "\\\\end[ \n]*{[ \n]*program[ \n]*}") ("verbatim\\*?" . "\\\\end[ \n]*{[ \n]*verbatim\\*?[ \n]*}")))) "\ -*Lists of regions to be skipped in TeX mode. +Lists of regions to be skipped in TeX mode. First list is used raw. Second list has key placed inside \\begin{}. @@ -15865,7 +15867,7 @@ Delete or add any regions you want to be automatically selected for skipping in latex mode.") (defconst ispell-html-skip-alists '(("<[cC][oO][dD][eE]\\>[^>]*>" "") ("<[sS][cC][rR][iI][pP][tT]\\>[^>]*>" "") ("<[aA][pP][pP][lL][eE][tT]\\>[^>]*>" "") ("<[vV][eE][rR][bB]\\>[^>]*>" "<[vV][eE][rR][bB]\\>[^>]*>") ("<[tT][tT]/" "/") ("<[^ \n>]" ">") ("&[^ \n;]" "[; \n]")) "\ -*Lists of start and end keys to skip in HTML buffers. +Lists of start and end keys to skip in HTML buffers. Same format as `ispell-skip-region-alist'. Note - substrings of other matches must come last (e.g. \"<[tT][tT]/\" and \"<[^ \\t\\n>]\").") @@ -15939,8 +15941,9 @@ SPC: Accept word this time. (autoload 'ispell-kill-ispell "ispell" "\ Kill current Ispell process (so that you may start a fresh one). With NO-ERROR, just return non-nil if there was no Ispell running. +With CLEAR, buffer session localwords are cleaned. -\(fn &optional NO-ERROR)" t nil) +\(fn &optional NO-ERROR CLEAR)" t nil) (autoload 'ispell-change-dictionary "ispell" "\ Change to dictionary DICT for Ispell. @@ -16042,8 +16045,8 @@ You can bind this to the key C-c i in GNUS or mail by adding to ;;;*** -;;;### (autoloads (iswitchb-mode) "iswitchb" "iswitchb.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (iswitchb-mode) "iswitchb" "iswitchb.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from iswitchb.el (defvar iswitchb-mode nil "\ @@ -16071,7 +16074,7 @@ between buffers using substrings. See `iswitchb' for details. ;;;### (autoloads (read-hiragana-string japanese-zenkaku-region japanese-hankaku-region ;;;;;; japanese-hiragana-region japanese-katakana-region japanese-zenkaku ;;;;;; japanese-hankaku japanese-hiragana japanese-katakana setup-japanese-environment-internal) -;;;;;; "japan-util" "language/japan-util.el" (20309 60936)) +;;;;;; "japan-util" "language/japan-util.el" (20355 10021)) ;;; Generated autoloads from language/japan-util.el (autoload 'setup-japanese-environment-internal "japan-util" "\ @@ -16149,7 +16152,7 @@ If non-nil, second arg INITIAL-INPUT is a string to insert before reading. ;;;*** ;;;### (autoloads (jka-compr-uninstall jka-compr-handler) "jka-compr" -;;;;;; "jka-compr.el" (20309 60936)) +;;;;;; "jka-compr.el" (20355 10021)) ;;; Generated autoloads from jka-compr.el (defvar jka-compr-inhibit nil "\ @@ -16172,7 +16175,7 @@ by `jka-compr-installed'. ;;;*** -;;;### (autoloads (js-mode) "js" "progmodes/js.el" (20309 60936)) +;;;### (autoloads (js-mode) "js" "progmodes/js.el" (20378 29222)) ;;; Generated autoloads from progmodes/js.el (autoload 'js-mode "js" "\ @@ -16186,7 +16189,7 @@ Major mode for editing JavaScript. ;;;### (autoloads (keypad-setup keypad-numlock-shifted-setup keypad-shifted-setup ;;;;;; keypad-numlock-setup keypad-setup) "keypad" "emulation/keypad.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from emulation/keypad.el (defvar keypad-setup nil "\ @@ -16242,7 +16245,7 @@ the decimal key on the keypad is mapped to DECIMAL instead of `.' ;;;*** ;;;### (autoloads (kinsoku) "kinsoku" "international/kinsoku.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from international/kinsoku.el (autoload 'kinsoku "kinsoku" "\ @@ -16263,8 +16266,8 @@ the context of text formatting. ;;;*** -;;;### (autoloads (kkc-region) "kkc" "international/kkc.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (kkc-region) "kkc" "international/kkc.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from international/kkc.el (defvar kkc-after-update-conversion-functions nil "\ @@ -16289,7 +16292,7 @@ and the return value is the length of the conversion. ;;;### (autoloads (kmacro-end-call-mouse kmacro-end-and-call-macro ;;;;;; kmacro-end-or-call-macro kmacro-start-macro-or-insert-counter ;;;;;; kmacro-call-macro kmacro-end-macro kmacro-start-macro kmacro-exec-ring-item) -;;;;;; "kmacro" "kmacro.el" (20309 60936)) +;;;;;; "kmacro" "kmacro.el" (20355 10021)) ;;; Generated autoloads from kmacro.el (global-set-key "\C-x(" 'kmacro-start-macro) (global-set-key "\C-x)" 'kmacro-end-macro) @@ -16400,11 +16403,11 @@ If kbd macro currently being defined end it before activating it. ;;;*** ;;;### (autoloads (setup-korean-environment-internal) "korea-util" -;;;;;; "language/korea-util.el" (20309 60936)) +;;;;;; "language/korea-util.el" (20355 10021)) ;;; Generated autoloads from language/korea-util.el (defvar default-korean-keyboard (purecopy (if (string-match "3" (or (getenv "HANGUL_KEYBOARD_TYPE") "")) "3" "")) "\ -*The kind of Korean keyboard for Korean input method. +The kind of Korean keyboard for Korean input method. \"\" for 2, \"3\" for 3.") (autoload 'setup-korean-environment-internal "korea-util" "\ @@ -16415,7 +16418,7 @@ If kbd macro currently being defined end it before activating it. ;;;*** ;;;### (autoloads (landmark landmark-test-run) "landmark" "play/landmark.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from play/landmark.el (defalias 'landmark-repeat 'landmark-test-run) @@ -16447,7 +16450,7 @@ Use \\[describe-mode] for more info. ;;;### (autoloads (lao-compose-region lao-composition-function lao-transcribe-roman-to-lao-string ;;;;;; lao-transcribe-single-roman-syllable-to-lao lao-compose-string) -;;;;;; "lao-util" "language/lao-util.el" (20309 60936)) +;;;;;; "lao-util" "language/lao-util.el" (20355 10021)) ;;; Generated autoloads from language/lao-util.el (autoload 'lao-compose-string "lao-util" "\ @@ -16486,7 +16489,7 @@ Transcribe Romanized Lao string STR to Lao character string. ;;;### (autoloads (latexenc-find-file-coding-system latexenc-coding-system-to-inputenc ;;;;;; latexenc-inputenc-to-coding-system latex-inputenc-coding-alist) -;;;;;; "latexenc" "international/latexenc.el" (20309 60936)) +;;;;;; "latexenc" "international/latexenc.el" (20355 10021)) ;;; Generated autoloads from international/latexenc.el (defvar latex-inputenc-coding-alist (purecopy '(("ansinew" . windows-1252) ("applemac" . mac-roman) ("ascii" . us-ascii) ("cp1250" . windows-1250) ("cp1252" . windows-1252) ("cp1257" . cp1257) ("cp437de" . cp437) ("cp437" . cp437) ("cp850" . cp850) ("cp852" . cp852) ("cp858" . cp858) ("cp865" . cp865) ("latin1" . iso-8859-1) ("latin2" . iso-8859-2) ("latin3" . iso-8859-3) ("latin4" . iso-8859-4) ("latin5" . iso-8859-5) ("latin9" . iso-8859-15) ("next" . next) ("utf8" . utf-8) ("utf8x" . utf-8))) "\ @@ -16518,7 +16521,7 @@ coding system names is determined from `latex-inputenc-coding-alist'. ;;;*** ;;;### (autoloads (latin1-display-ucs-per-lynx latin1-display latin1-display) -;;;;;; "latin1-disp" "international/latin1-disp.el" (20309 60936)) +;;;;;; "latin1-disp" "international/latin1-disp.el" (20355 10021)) ;;; Generated autoloads from international/latin1-disp.el (defvar latin1-display nil "\ @@ -16560,7 +16563,7 @@ use either \\[customize] or the function `latin1-display'.") ;;;*** ;;;### (autoloads (ld-script-mode) "ld-script" "progmodes/ld-script.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from progmodes/ld-script.el (autoload 'ld-script-mode "ld-script" "\ @@ -16571,7 +16574,7 @@ A major mode to edit GNU ld script files ;;;*** ;;;### (autoloads (ledit-from-lisp-mode ledit-mode) "ledit" "ledit.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from ledit.el (defconst ledit-save-files t "\ @@ -16606,7 +16609,7 @@ do (setq lisp-mode-hook 'ledit-from-lisp-mode) ;;;*** -;;;### (autoloads (life) "life" "play/life.el" (20309 60936)) +;;;### (autoloads (life) "life" "play/life.el" (20355 10021)) ;;; Generated autoloads from play/life.el (autoload 'life "life" "\ @@ -16620,7 +16623,7 @@ generations (this defaults to 1). ;;;*** ;;;### (autoloads (global-linum-mode linum-mode linum-format) "linum" -;;;;;; "linum.el" (20309 60936)) +;;;;;; "linum.el" (20355 10021)) ;;; Generated autoloads from linum.el (defvar linum-format 'dynamic "\ @@ -16665,8 +16668,8 @@ See `linum-mode' for more information on Linum mode. ;;;*** -;;;### (autoloads (unload-feature) "loadhist" "loadhist.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (unload-feature) "loadhist" "loadhist.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from loadhist.el (autoload 'unload-feature "loadhist" "\ @@ -16698,7 +16701,7 @@ something strange, such as redefining an Emacs function. ;;;*** ;;;### (autoloads (locate-with-filter locate locate-ls-subdir-switches) -;;;;;; "locate" "locate.el" (20309 60936)) +;;;;;; "locate" "locate.el" (20355 10021)) ;;; Generated autoloads from locate.el (defvar locate-ls-subdir-switches (purecopy "-al") "\ @@ -16750,7 +16753,7 @@ except that FILTER is not optional. ;;;*** -;;;### (autoloads (log-edit) "log-edit" "vc/log-edit.el" (20309 60936)) +;;;### (autoloads (log-edit) "log-edit" "vc/log-edit.el" (20355 10021)) ;;; Generated autoloads from vc/log-edit.el (autoload 'log-edit "log-edit" "\ @@ -16777,8 +16780,8 @@ uses the current buffer. ;;;*** -;;;### (autoloads (log-view-mode) "log-view" "vc/log-view.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (log-view-mode) "log-view" "vc/log-view.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from vc/log-view.el (autoload 'log-view-mode "log-view" "\ @@ -16788,8 +16791,8 @@ Major mode for browsing CVS log output. ;;;*** -;;;### (autoloads (longlines-mode) "longlines" "longlines.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (longlines-mode) "longlines" "longlines.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from longlines.el (autoload 'longlines-mode "longlines" "\ @@ -16815,8 +16818,8 @@ newlines are indicated with a symbol. ;;;*** ;;;### (autoloads (print-region lpr-region print-buffer lpr-buffer -;;;;;; lpr-command lpr-switches printer-name) "lpr" "lpr.el" (20309 -;;;;;; 60936)) +;;;;;; lpr-command lpr-switches printer-name) "lpr" "lpr.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from lpr.el (defvar lpr-windows-system (memq system-type '(ms-dos windows-nt)) "\ @@ -16912,7 +16915,7 @@ for further customization of the printer command. ;;;*** ;;;### (autoloads (ls-lisp-support-shell-wildcards) "ls-lisp" "ls-lisp.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from ls-lisp.el (defvar ls-lisp-support-shell-wildcards t "\ @@ -16923,8 +16926,8 @@ Otherwise they are treated as Emacs regexps (for backward compatibility).") ;;;*** -;;;### (autoloads (lunar-phases) "lunar" "calendar/lunar.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (lunar-phases) "lunar" "calendar/lunar.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from calendar/lunar.el (autoload 'lunar-phases "lunar" "\ @@ -16938,8 +16941,8 @@ This function is suitable for execution in a .emacs file. ;;;*** -;;;### (autoloads (m4-mode) "m4-mode" "progmodes/m4-mode.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (m4-mode) "m4-mode" "progmodes/m4-mode.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from progmodes/m4-mode.el (autoload 'm4-mode "m4-mode" "\ @@ -16950,7 +16953,7 @@ A major mode to edit m4 macro files. ;;;*** ;;;### (autoloads (macroexpand-all) "macroexp" "emacs-lisp/macroexp.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from emacs-lisp/macroexp.el (autoload 'macroexpand-all "macroexp" "\ @@ -16964,7 +16967,7 @@ definitions to shadow the loaded ones for use in file byte-compilation. ;;;*** ;;;### (autoloads (apply-macro-to-region-lines kbd-macro-query insert-kbd-macro -;;;;;; name-last-kbd-macro) "macros" "macros.el" (20309 60936)) +;;;;;; name-last-kbd-macro) "macros" "macros.el" (20355 10021)) ;;; Generated autoloads from macros.el (autoload 'name-last-kbd-macro "macros" "\ @@ -17053,7 +17056,7 @@ and then select the region of un-tablified names and use ;;;*** ;;;### (autoloads (what-domain mail-extract-address-components) "mail-extr" -;;;;;; "mail/mail-extr.el" (20309 60936)) +;;;;;; "mail/mail-extr.el" (20355 10021)) ;;; Generated autoloads from mail/mail-extr.el (autoload 'mail-extract-address-components "mail-extr" "\ @@ -17085,7 +17088,7 @@ Convert mail domain DOMAIN to the country it corresponds to. ;;;### (autoloads (mail-hist-put-headers-into-history mail-hist-keep-history ;;;;;; mail-hist-enable mail-hist-define-keys) "mail-hist" "mail/mail-hist.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from mail/mail-hist.el (autoload 'mail-hist-define-keys "mail-hist" "\ @@ -17099,7 +17102,7 @@ Define keys for accessing mail header history. For use in hooks. \(fn)" nil nil) (defvar mail-hist-keep-history t "\ -*Non-nil means keep a history for headers and text of outgoing mail.") +Non-nil means keep a history for headers and text of outgoing mail.") (custom-autoload 'mail-hist-keep-history "mail-hist" t) @@ -17117,7 +17120,7 @@ This function normally would be called when the message is sent. ;;;### (autoloads (mail-fetch-field mail-unquote-printable-region ;;;;;; mail-unquote-printable mail-quote-printable-region mail-quote-printable ;;;;;; mail-file-babyl-p mail-dont-reply-to-names mail-use-rfc822) -;;;;;; "mail-utils" "mail/mail-utils.el" (20315 8755)) +;;;;;; "mail-utils" "mail/mail-utils.el" (20355 10021)) ;;; Generated autoloads from mail/mail-utils.el (defvar mail-use-rfc822 nil "\ @@ -17192,8 +17195,8 @@ matches may be returned from the message body. ;;;*** ;;;### (autoloads (define-mail-abbrev build-mail-abbrevs mail-abbrevs-setup -;;;;;; mail-abbrevs-mode) "mailabbrev" "mail/mailabbrev.el" (20309 -;;;;;; 60936)) +;;;;;; mail-abbrevs-mode) "mailabbrev" "mail/mailabbrev.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from mail/mailabbrev.el (defvar mail-abbrevs-mode nil "\ @@ -17244,7 +17247,7 @@ double-quotes. ;;;### (autoloads (mail-complete mail-completion-at-point-function ;;;;;; define-mail-alias expand-mail-aliases mail-complete-style) -;;;;;; "mailalias" "mail/mailalias.el" (20309 60936)) +;;;;;; "mailalias" "mail/mailalias.el" (20355 10021)) ;;; Generated autoloads from mail/mailalias.el (defvar mail-complete-style 'angles "\ @@ -17296,7 +17299,7 @@ current header, calls `mail-complete-function' and passes prefix ARG if any. ;;;*** ;;;### (autoloads (mailclient-send-it) "mailclient" "mail/mailclient.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from mail/mailclient.el (autoload 'mailclient-send-it "mailclient" "\ @@ -17310,7 +17313,7 @@ The mail client is taken to be the handler of mailto URLs. ;;;### (autoloads (makefile-imake-mode makefile-bsdmake-mode makefile-makepp-mode ;;;;;; makefile-gmake-mode makefile-automake-mode makefile-mode) -;;;;;; "make-mode" "progmodes/make-mode.el" (20309 60936)) +;;;;;; "make-mode" "progmodes/make-mode.el" (20355 10021)) ;;; Generated autoloads from progmodes/make-mode.el (autoload 'makefile-mode "make-mode" "\ @@ -17427,8 +17430,8 @@ An adapted `makefile-mode' that knows about imake. ;;;*** -;;;### (autoloads (make-command-summary) "makesum" "makesum.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (make-command-summary) "makesum" "makesum.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from makesum.el (autoload 'make-command-summary "makesum" "\ @@ -17440,7 +17443,7 @@ Previous contents of that buffer are killed first. ;;;*** ;;;### (autoloads (Man-bookmark-jump man-follow man) "man" "man.el" -;;;;;; (20309 60936)) +;;;;;; (20381 5411)) ;;; Generated autoloads from man.el (defalias 'manual-entry 'man) @@ -17494,7 +17497,7 @@ Default bookmark handler for Man buffers. ;;;*** -;;;### (autoloads (master-mode) "master" "master.el" (20309 60936)) +;;;### (autoloads (master-mode) "master" "master.el" (20355 10021)) ;;; Generated autoloads from master.el (autoload 'master-mode "master" "\ @@ -17517,7 +17520,7 @@ yourself the value of `master-of' by calling `master-show-slave'. ;;;*** ;;;### (autoloads (minibuffer-depth-indicate-mode) "mb-depth" "mb-depth.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from mb-depth.el (defvar minibuffer-depth-indicate-mode nil "\ @@ -17550,7 +17553,7 @@ recursion depth in the minibuffer prompt. This is only useful if ;;;;;; message-forward-make-body message-forward message-recover ;;;;;; message-supersede message-cancel-news message-followup message-wide-reply ;;;;;; message-reply message-news message-mail message-mode) "message" -;;;;;; "gnus/message.el" (20309 60936)) +;;;;;; "gnus/message.el" (20355 10021)) ;;; Generated autoloads from gnus/message.el (define-mail-user-agent 'message-user-agent 'message-mail 'message-send-and-exit 'message-kill-buffer 'message-send-hook) @@ -17716,7 +17719,7 @@ which specify the range to operate on. ;;;*** ;;;### (autoloads (metapost-mode metafont-mode) "meta-mode" "progmodes/meta-mode.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from progmodes/meta-mode.el (autoload 'metafont-mode "meta-mode" "\ @@ -17733,7 +17736,7 @@ Major mode for editing MetaPost sources. ;;;### (autoloads (metamail-region metamail-buffer metamail-interpret-body ;;;;;; metamail-interpret-header) "metamail" "mail/metamail.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from mail/metamail.el (autoload 'metamail-interpret-header "metamail" "\ @@ -17778,7 +17781,7 @@ redisplayed as output is inserted. ;;;### (autoloads (mh-fully-kill-draft mh-send-letter mh-user-agent-compose ;;;;;; mh-smail-batch mh-smail-other-window mh-smail) "mh-comp" -;;;;;; "mh-e/mh-comp.el" (20309 60936)) +;;;;;; "mh-e/mh-comp.el" (20355 10021)) ;;; Generated autoloads from mh-e/mh-comp.el (autoload 'mh-smail "mh-comp" "\ @@ -17868,7 +17871,7 @@ delete the draft message. ;;;*** -;;;### (autoloads (mh-version) "mh-e" "mh-e/mh-e.el" (20309 60936)) +;;;### (autoloads (mh-version) "mh-e" "mh-e/mh-e.el" (20355 10021)) ;;; Generated autoloads from mh-e/mh-e.el (put 'mh-progs 'risky-local-variable t) @@ -17885,7 +17888,7 @@ Display version information about MH-E and the MH mail handling system. ;;;*** ;;;### (autoloads (mh-folder-mode mh-nmail mh-rmail) "mh-folder" -;;;;;; "mh-e/mh-folder.el" (20309 60936)) +;;;;;; "mh-e/mh-folder.el" (20371 55972)) ;;; Generated autoloads from mh-e/mh-folder.el (autoload 'mh-rmail "mh-folder" "\ @@ -17967,7 +17970,7 @@ perform the operation on all messages in that region. ;;;*** ;;;### (autoloads (midnight-delay-set clean-buffer-list) "midnight" -;;;;;; "midnight.el" (20309 60936)) +;;;;;; "midnight.el" (20355 10021)) ;;; Generated autoloads from midnight.el (autoload 'clean-buffer-list "midnight" "\ @@ -17994,7 +17997,7 @@ to its second argument TM. ;;;*** ;;;### (autoloads (minibuffer-electric-default-mode) "minibuf-eldef" -;;;;;; "minibuf-eldef.el" (20309 60936)) +;;;;;; "minibuf-eldef.el" (20355 10021)) ;;; Generated autoloads from minibuf-eldef.el (defvar minibuffer-electric-default-mode nil "\ @@ -18024,7 +18027,7 @@ is modified to remove the default indication. ;;;*** ;;;### (autoloads (list-dynamic-libraries butterfly) "misc" "misc.el" -;;;;;; (20309 60936)) +;;;;;; (20356 27828)) ;;; Generated autoloads from misc.el (autoload 'butterfly "misc" "\ @@ -18054,7 +18057,7 @@ The return value is always nil. ;;;### (autoloads (multi-isearch-files-regexp multi-isearch-files ;;;;;; multi-isearch-buffers-regexp multi-isearch-buffers multi-isearch-setup) -;;;;;; "misearch" "misearch.el" (20309 60936)) +;;;;;; "misearch" "misearch.el" (20355 10021)) ;;; Generated autoloads from misearch.el (add-hook 'isearch-mode-hook 'multi-isearch-setup) @@ -18136,7 +18139,7 @@ whose file names match the specified wildcard. ;;;*** ;;;### (autoloads (mixal-mode) "mixal-mode" "progmodes/mixal-mode.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from progmodes/mixal-mode.el (autoload 'mixal-mode "mixal-mode" "\ @@ -18147,7 +18150,7 @@ Major mode for the mixal asm language. ;;;*** ;;;### (autoloads (mm-default-file-encoding) "mm-encode" "gnus/mm-encode.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from gnus/mm-encode.el (autoload 'mm-default-file-encoding "mm-encode" "\ @@ -18158,7 +18161,7 @@ Return a default encoding for FILE. ;;;*** ;;;### (autoloads (mm-inline-external-body mm-extern-cache-contents) -;;;;;; "mm-extern" "gnus/mm-extern.el" (20309 60936)) +;;;;;; "mm-extern" "gnus/mm-extern.el" (20355 10021)) ;;; Generated autoloads from gnus/mm-extern.el (autoload 'mm-extern-cache-contents "mm-extern" "\ @@ -18177,7 +18180,7 @@ If NO-DISPLAY is nil, display it. Otherwise, do nothing after replacing. ;;;*** ;;;### (autoloads (mm-inline-partial) "mm-partial" "gnus/mm-partial.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from gnus/mm-partial.el (autoload 'mm-inline-partial "mm-partial" "\ @@ -18191,7 +18194,7 @@ If NO-DISPLAY is nil, display it. Otherwise, do nothing after replacing. ;;;*** ;;;### (autoloads (mm-url-insert-file-contents-external mm-url-insert-file-contents) -;;;;;; "mm-url" "gnus/mm-url.el" (20309 60936)) +;;;;;; "mm-url" "gnus/mm-url.el" (20355 10021)) ;;; Generated autoloads from gnus/mm-url.el (autoload 'mm-url-insert-file-contents "mm-url" "\ @@ -18208,7 +18211,7 @@ Insert file contents of URL using `mm-url-program'. ;;;*** ;;;### (autoloads (mm-uu-dissect-text-parts mm-uu-dissect) "mm-uu" -;;;;;; "gnus/mm-uu.el" (20314 47703)) +;;;;;; "gnus/mm-uu.el" (20355 10021)) ;;; Generated autoloads from gnus/mm-uu.el (autoload 'mm-uu-dissect "mm-uu" "\ @@ -18228,7 +18231,7 @@ Assume text has been decoded if DECODED is non-nil. ;;;*** ;;;### (autoloads (mml-attach-file mml-to-mime) "mml" "gnus/mml.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from gnus/mml.el (autoload 'mml-to-mime "mml" "\ @@ -18253,7 +18256,7 @@ body) or \"attachment\" (separate from the body). ;;;*** ;;;### (autoloads (mml1991-sign mml1991-encrypt) "mml1991" "gnus/mml1991.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from gnus/mml1991.el (autoload 'mml1991-encrypt "mml1991" "\ @@ -18270,7 +18273,7 @@ body) or \"attachment\" (separate from the body). ;;;### (autoloads (mml2015-self-encrypt mml2015-sign mml2015-encrypt ;;;;;; mml2015-verify-test mml2015-verify mml2015-decrypt-test mml2015-decrypt) -;;;;;; "mml2015" "gnus/mml2015.el" (20309 60936)) +;;;;;; "mml2015" "gnus/mml2015.el" (20355 10021)) ;;; Generated autoloads from gnus/mml2015.el (autoload 'mml2015-decrypt "mml2015" "\ @@ -18310,8 +18313,8 @@ body) or \"attachment\" (separate from the body). ;;;*** -;;;### (autoloads (m2-mode) "modula2" "progmodes/modula2.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (m2-mode) "modula2" "progmodes/modula2.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from progmodes/modula2.el (defalias 'modula-2-mode 'm2-mode) @@ -18345,7 +18348,7 @@ followed by the first character of the construct. ;;;*** ;;;### (autoloads (denato-region nato-region unmorse-region morse-region) -;;;;;; "morse" "play/morse.el" (20309 60936)) +;;;;;; "morse" "play/morse.el" (20355 10021)) ;;; Generated autoloads from play/morse.el (autoload 'morse-region "morse" "\ @@ -18371,7 +18374,7 @@ Convert NATO phonetic alphabet in region to ordinary ASCII text. ;;;*** ;;;### (autoloads (mouse-drag-drag mouse-drag-throw) "mouse-drag" -;;;;;; "mouse-drag.el" (20309 60936)) +;;;;;; "mouse-drag.el" (20355 10021)) ;;; Generated autoloads from mouse-drag.el (autoload 'mouse-drag-throw "mouse-drag" "\ @@ -18418,51 +18421,7 @@ To test this function, evaluate: ;;;*** -;;;### (autoloads (mouse-sel-mode) "mouse-sel" "mouse-sel.el" (20309 -;;;;;; 60936)) -;;; Generated autoloads from mouse-sel.el - -(defvar mouse-sel-mode nil "\ -Non-nil if Mouse-Sel mode is enabled. -See the command `mouse-sel-mode' for a description of this minor mode. -Setting this variable directly does not take effect; -either customize it (see the info node `Easy Customization') -or call the function `mouse-sel-mode'.") - -(custom-autoload 'mouse-sel-mode "mouse-sel" nil) - -(autoload 'mouse-sel-mode "mouse-sel" "\ -Toggle Mouse Sel mode. -With a prefix argument ARG, enable Mouse Sel mode if ARG is -positive, and disable it otherwise. If called from Lisp, enable -the mode if ARG is omitted or nil. - -Mouse Sel mode is a global minor mode. When enabled, mouse -selection is enhanced in various ways: - -- Double-clicking on symbol constituents selects symbols. -Double-clicking on quotes or parentheses selects sexps. -Double-clicking on whitespace selects whitespace. -Triple-clicking selects lines. -Quad-clicking selects paragraphs. - -- Selecting sets the region & X primary selection, but does NOT affect -the `kill-ring', nor do the kill-ring functions change the X selection. -Because the mouse handlers set the primary selection directly, -mouse-sel sets the variables `interprogram-cut-function' and -`interprogram-paste-function' to nil. - -- Clicking mouse-2 inserts the contents of the primary selection at -the mouse position (or point, if `mouse-yank-at-point' is non-nil). - -- mouse-2 while selecting or extending copies selection to the -kill ring; mouse-1 or mouse-3 kills it. - -\(fn &optional ARG)" t nil) - -;;;*** - -;;;### (autoloads (mpc) "mpc" "mpc.el" (20309 60936)) +;;;### (autoloads (mpc) "mpc" "mpc.el" (20378 29222)) ;;; Generated autoloads from mpc.el (autoload 'mpc "mpc" "\ @@ -18472,7 +18431,7 @@ Main entry point for MPC. ;;;*** -;;;### (autoloads (mpuz) "mpuz" "play/mpuz.el" (20309 60936)) +;;;### (autoloads (mpuz) "mpuz" "play/mpuz.el" (20355 10021)) ;;; Generated autoloads from play/mpuz.el (autoload 'mpuz "mpuz" "\ @@ -18482,7 +18441,7 @@ Multiplication puzzle with GNU Emacs. ;;;*** -;;;### (autoloads (msb-mode) "msb" "msb.el" (20309 60936)) +;;;### (autoloads (msb-mode) "msb" "msb.el" (20355 10021)) ;;; Generated autoloads from msb.el (defvar msb-mode nil "\ @@ -18512,7 +18471,7 @@ different buffer menu using the function `msb'. ;;;;;; describe-current-coding-system describe-current-coding-system-briefly ;;;;;; describe-coding-system describe-character-set list-charset-chars ;;;;;; read-charset list-character-sets) "mule-diag" "international/mule-diag.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from international/mule-diag.el (autoload 'list-character-sets "mule-diag" "\ @@ -18649,7 +18608,7 @@ The default is 20. If LIMIT is negative, do not limit the listing. ;;;;;; coding-system-translation-table-for-decode coding-system-pre-write-conversion ;;;;;; coding-system-post-read-conversion lookup-nested-alist set-nested-alist ;;;;;; truncate-string-to-width store-substring string-to-sequence) -;;;;;; "mule-util" "international/mule-util.el" (20309 60936)) +;;;;;; "mule-util" "international/mule-util.el" (20355 10021)) ;;; Generated autoloads from international/mule-util.el (autoload 'string-to-sequence "mule-util" "\ @@ -18789,8 +18748,8 @@ per-character basis, this may not be accurate. ;;;### (autoloads (network-connection network-connection-to-service ;;;;;; whois-reverse-lookup whois finger ftp run-dig dns-lookup-host ;;;;;; nslookup nslookup-host ping traceroute route arp netstat -;;;;;; iwconfig ifconfig) "net-utils" "net/net-utils.el" (20309 -;;;;;; 60936)) +;;;;;; iwconfig ifconfig) "net-utils" "net/net-utils.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from net/net-utils.el (autoload 'ifconfig "net-utils" "\ @@ -18884,8 +18843,8 @@ Open a network connection to HOST on PORT. ;;;*** -;;;### (autoloads (netrc-credentials) "netrc" "net/netrc.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (netrc-credentials) "netrc" "net/netrc.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from net/netrc.el (autoload 'netrc-credentials "netrc" "\ @@ -18898,7 +18857,7 @@ listed in the PORTS list. ;;;*** ;;;### (autoloads (open-network-stream) "network-stream" "net/network-stream.el" -;;;;;; (20332 33075)) +;;;;;; (20369 14251)) ;;; Generated autoloads from net/network-stream.el (autoload 'open-network-stream "network-stream" "\ @@ -18976,9 +18935,8 @@ values: certificate. This parameter will only be used when doing TLS or STARTTLS connections. -If :use-starttls-if-possible is non-nil, do opportunistic -STARTTLS upgrades even if Emacs doesn't have built-in TLS -functionality. +:use-starttls-if-possible is a boolean that says to do opportunistic +STARTTLS upgrades even if Emacs doesn't have built-in TLS functionality. :nowait is a boolean that says the connection should be made asynchronously, if possible. @@ -18994,7 +18952,7 @@ functionality. ;;;;;; uncomment-region comment-kill comment-set-column comment-indent ;;;;;; comment-indent-default comment-normalize-vars comment-multi-line ;;;;;; comment-padding comment-style comment-column) "newcomment" -;;;;;; "newcomment.el" (20332 33075)) +;;;;;; "newcomment.el" (20365 17199)) ;;; Generated autoloads from newcomment.el (defalias 'indent-for-comment 'comment-indent) @@ -19023,11 +18981,11 @@ Comments might be indented to a different value in order not to go beyond (put 'comment-column 'safe-local-variable 'integerp) (defvar comment-start nil "\ -*String to insert to start a new comment, or nil if no comment syntax.") +String to insert to start a new comment, or nil if no comment syntax.") (put 'comment-start 'safe-local-variable 'string-or-null-p) (defvar comment-start-skip nil "\ -*Regexp to match the start of a comment plus everything up to its body. +Regexp to match the start of a comment plus everything up to its body. If there are any \\(...\\) pairs, the comment delimiter text is held to begin at the place matched by the close of the first pair.") (put 'comment-start-skip 'safe-local-variable 'string-or-null-p) @@ -19037,7 +18995,7 @@ Regexp to match the end of a comment plus everything back to its body.") (put 'comment-end-skip 'safe-local-variable 'string-or-null-p) (defvar comment-end (purecopy "") "\ -*String to insert to end a new comment. +String to insert to end a new comment. Should be an empty string if comments are terminated by end-of-line.") (put 'comment-end 'safe-local-variable 'string-or-null-p) @@ -19236,7 +19194,7 @@ unless optional argument SOFT is non-nil. ;;;*** ;;;### (autoloads (newsticker-start newsticker-running-p) "newst-backend" -;;;;;; "net/newst-backend.el" (20309 60936)) +;;;;;; "net/newst-backend.el" (20355 10021)) ;;; Generated autoloads from net/newst-backend.el (autoload 'newsticker-running-p "newst-backend" "\ @@ -19258,7 +19216,7 @@ Run `newsticker-start-hook' if newsticker was not running already. ;;;*** ;;;### (autoloads (newsticker-plainview) "newst-plainview" "net/newst-plainview.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from net/newst-plainview.el (autoload 'newsticker-plainview "newst-plainview" "\ @@ -19269,7 +19227,7 @@ Start newsticker plainview. ;;;*** ;;;### (autoloads (newsticker-show-news) "newst-reader" "net/newst-reader.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from net/newst-reader.el (autoload 'newsticker-show-news "newst-reader" "\ @@ -19280,7 +19238,7 @@ Start reading news. You may want to bind this to a key. ;;;*** ;;;### (autoloads (newsticker-start-ticker newsticker-ticker-running-p) -;;;;;; "newst-ticker" "net/newst-ticker.el" (20309 60936)) +;;;;;; "newst-ticker" "net/newst-ticker.el" (20355 10021)) ;;; Generated autoloads from net/newst-ticker.el (autoload 'newsticker-ticker-running-p "newst-ticker" "\ @@ -19301,7 +19259,7 @@ running already. ;;;*** ;;;### (autoloads (newsticker-treeview) "newst-treeview" "net/newst-treeview.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from net/newst-treeview.el (autoload 'newsticker-treeview "newst-treeview" "\ @@ -19312,7 +19270,7 @@ Start newsticker treeview. ;;;*** ;;;### (autoloads (nndiary-generate-nov-databases) "nndiary" "gnus/nndiary.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from gnus/nndiary.el (autoload 'nndiary-generate-nov-databases "nndiary" "\ @@ -19322,8 +19280,8 @@ Generate NOV databases in all nndiary directories. ;;;*** -;;;### (autoloads (nndoc-add-type) "nndoc" "gnus/nndoc.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (nndoc-add-type) "nndoc" "gnus/nndoc.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from gnus/nndoc.el (autoload 'nndoc-add-type "nndoc" "\ @@ -19338,7 +19296,7 @@ symbol in the alist. ;;;*** ;;;### (autoloads (nnfolder-generate-active-file) "nnfolder" "gnus/nnfolder.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from gnus/nnfolder.el (autoload 'nnfolder-generate-active-file "nnfolder" "\ @@ -19350,7 +19308,7 @@ This command does not work if you use short group names. ;;;*** ;;;### (autoloads (nnml-generate-nov-databases) "nnml" "gnus/nnml.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from gnus/nnml.el (autoload 'nnml-generate-nov-databases "nnml" "\ @@ -19361,7 +19319,7 @@ Generate NOV databases in all nnml directories. ;;;*** ;;;### (autoloads (disable-command enable-command disabled-command-function) -;;;;;; "novice" "novice.el" (20309 60936)) +;;;;;; "novice" "novice.el" (20355 10021)) ;;; Generated autoloads from novice.el (defvar disabled-command-function 'disabled-command-function "\ @@ -19394,7 +19352,7 @@ to future sessions. ;;;*** ;;;### (autoloads (nroff-mode) "nroff-mode" "textmodes/nroff-mode.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from textmodes/nroff-mode.el (autoload 'nroff-mode "nroff-mode" "\ @@ -19409,7 +19367,7 @@ closing requests for requests that are used in matched pairs. ;;;*** ;;;### (autoloads (nxml-glyph-display-string) "nxml-glyph" "nxml/nxml-glyph.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from nxml/nxml-glyph.el (autoload 'nxml-glyph-display-string "nxml-glyph" "\ @@ -19421,8 +19379,8 @@ Return nil if the face cannot display a glyph for N. ;;;*** -;;;### (autoloads (nxml-mode) "nxml-mode" "nxml/nxml-mode.el" (20317 -;;;;;; 29729)) +;;;### (autoloads (nxml-mode) "nxml-mode" "nxml/nxml-mode.el" (20369 +;;;;;; 14251)) ;;; Generated autoloads from nxml/nxml-mode.el (autoload 'nxml-mode "nxml-mode" "\ @@ -19484,7 +19442,7 @@ Many aspects this mode can be customized using ;;;*** ;;;### (autoloads (nxml-enable-unicode-char-name-sets) "nxml-uchnm" -;;;;;; "nxml/nxml-uchnm.el" (20309 60936)) +;;;;;; "nxml/nxml-uchnm.el" (20355 10021)) ;;; Generated autoloads from nxml/nxml-uchnm.el (autoload 'nxml-enable-unicode-char-name-sets "nxml-uchnm" "\ @@ -19508,7 +19466,7 @@ the variable `nxml-enabled-unicode-blocks'. ;;;;;; org-babel-pop-to-session-maybe org-babel-load-in-session-maybe ;;;;;; org-babel-expand-src-block-maybe org-babel-view-src-block-info ;;;;;; org-babel-execute-maybe org-babel-execute-safely-maybe) "ob" -;;;;;; "org/ob.el" (20345 9613)) +;;;;;; "org/ob.el" (20355 10021)) ;;; Generated autoloads from org/ob.el (autoload 'org-babel-execute-safely-maybe "ob" "\ @@ -19731,7 +19689,7 @@ Mark current src block ;;;*** ;;;### (autoloads (org-babel-describe-bindings) "ob-keys" "org/ob-keys.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from org/ob-keys.el (autoload 'org-babel-describe-bindings "ob-keys" "\ @@ -19742,7 +19700,7 @@ Describe all keybindings behind `org-babel-key-prefix'. ;;;*** ;;;### (autoloads (org-babel-lob-get-info org-babel-lob-execute-maybe -;;;;;; org-babel-lob-ingest) "ob-lob" "org/ob-lob.el" (20345 9613)) +;;;;;; org-babel-lob-ingest) "ob-lob" "org/ob-lob.el" (20355 10021)) ;;; Generated autoloads from org/ob-lob.el (autoload 'org-babel-lob-ingest "ob-lob" "\ @@ -19767,7 +19725,7 @@ Return a Library of Babel function call as a string. ;;;### (autoloads (org-babel-tangle org-babel-tangle-file org-babel-load-file ;;;;;; org-babel-tangle-lang-exts) "ob-tangle" "org/ob-tangle.el" -;;;;;; (20344 35712)) +;;;;;; (20355 10021)) ;;; Generated autoloads from org/ob-tangle.el (defvar org-babel-tangle-lang-exts '(("emacs-lisp" . "el")) "\ @@ -19809,7 +19767,7 @@ exported source code blocks by language. ;;;*** ;;;### (autoloads (inferior-octave) "octave-inf" "progmodes/octave-inf.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from progmodes/octave-inf.el (autoload 'inferior-octave "octave-inf" "\ @@ -19832,7 +19790,7 @@ startup file, `~/.emacs-octave'. ;;;*** ;;;### (autoloads (octave-mode) "octave-mod" "progmodes/octave-mod.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from progmodes/octave-mod.el (autoload 'octave-mode "octave-mod" "\ @@ -19920,7 +19878,7 @@ including a reproducible test case and send the message. ;;;;;; org-insert-link-global org-store-link org-run-like-in-org-mode ;;;;;; turn-on-orgstruct++ turn-on-orgstruct orgstruct-mode org-global-cycle ;;;;;; org-mode org-version org-babel-do-load-languages) "org" "org/org.el" -;;;;;; (20345 9613)) +;;;;;; (20378 29222)) ;;; Generated autoloads from org/org.el (autoload 'org-babel-do-load-languages "org" "\ @@ -20153,7 +20111,7 @@ Call the customize function with org as argument. ;;;;;; org-diary org-agenda-list-stuck-projects org-tags-view org-todo-list ;;;;;; org-search-view org-agenda-list org-batch-store-agenda-views ;;;;;; org-store-agenda-views org-batch-agenda-csv org-batch-agenda -;;;;;; org-agenda) "org-agenda" "org/org-agenda.el" (20344 35712)) +;;;;;; org-agenda) "org-agenda" "org/org-agenda.el" (20378 29222)) ;;; Generated autoloads from org/org-agenda.el (autoload 'org-agenda "org-agenda" "\ @@ -20407,7 +20365,7 @@ details and examples. ;;;### (autoloads (org-archive-subtree-default-with-confirmation ;;;;;; org-archive-subtree-default) "org-archive" "org/org-archive.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from org/org-archive.el (autoload 'org-archive-subtree-default "org-archive" "\ @@ -20427,8 +20385,8 @@ This command is set with the variable `org-archive-default-command'. ;;;### (autoloads (org-export-as-ascii org-export-region-as-ascii ;;;;;; org-replace-region-by-ascii org-export-as-ascii-to-buffer ;;;;;; org-export-as-utf8-to-buffer org-export-as-utf8 org-export-as-latin1-to-buffer -;;;;;; org-export-as-latin1) "org-ascii" "org/org-ascii.el" (20345 -;;;;;; 9613)) +;;;;;; org-export-as-latin1) "org-ascii" "org/org-ascii.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from org/org-ascii.el (autoload 'org-export-as-latin1 "org-ascii" "\ @@ -20501,8 +20459,8 @@ publishing directory. ;;;*** -;;;### (autoloads (org-attach) "org-attach" "org/org-attach.el" (20345 -;;;;;; 9613)) +;;;### (autoloads (org-attach) "org-attach" "org/org-attach.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from org/org-attach.el (autoload 'org-attach "org-attach" "\ @@ -20514,7 +20472,7 @@ Shows a list of commands and prompts for another key to execute a command. ;;;*** ;;;### (autoloads (org-bbdb-anniversaries) "org-bbdb" "org/org-bbdb.el" -;;;;;; (20345 9613)) +;;;;;; (20355 10021)) ;;; Generated autoloads from org/org-bbdb.el (autoload 'org-bbdb-anniversaries "org-bbdb" "\ @@ -20525,7 +20483,7 @@ Extract anniversaries from BBDB for display in the agenda. ;;;*** ;;;### (autoloads (org-capture-import-remember-templates org-capture-insert-template-here -;;;;;; org-capture) "org-capture" "org/org-capture.el" (20345 9613)) +;;;;;; org-capture) "org-capture" "org/org-capture.el" (20355 10021)) ;;; Generated autoloads from org/org-capture.el (autoload 'org-capture "org-capture" "\ @@ -20563,7 +20521,7 @@ Set org-capture-templates to be similar to `org-remember-templates'. ;;;*** ;;;### (autoloads (org-clock-persistence-insinuate org-get-clocktable) -;;;;;; "org-clock" "org/org-clock.el" (20345 9613)) +;;;;;; "org-clock" "org/org-clock.el" (20378 29222)) ;;; Generated autoloads from org/org-clock.el (autoload 'org-get-clocktable "org-clock" "\ @@ -20581,7 +20539,7 @@ Set up hooks for clock persistence. ;;;*** ;;;### (autoloads (org-datetree-find-date-create) "org-datetree" -;;;;;; "org/org-datetree.el" (20345 9613)) +;;;;;; "org/org-datetree.el" (20355 10021)) ;;; Generated autoloads from org/org-datetree.el (autoload 'org-datetree-find-date-create "org-datetree" "\ @@ -20597,7 +20555,7 @@ tree can be found. ;;;### (autoloads (org-export-as-docbook org-export-as-docbook-pdf-and-open ;;;;;; org-export-as-docbook-pdf org-export-region-as-docbook org-replace-region-by-docbook ;;;;;; org-export-as-docbook-to-buffer org-export-as-docbook-batch) -;;;;;; "org-docbook" "org/org-docbook.el" (20345 9613)) +;;;;;; "org-docbook" "org/org-docbook.el" (20355 10021)) ;;; Generated autoloads from org/org-docbook.el (autoload 'org-export-as-docbook-batch "org-docbook" "\ @@ -20674,7 +20632,7 @@ publishing directory. ;;;### (autoloads (org-insert-export-options-template org-export-as-org ;;;;;; org-export-visible org-export) "org-exp" "org/org-exp.el" -;;;;;; (20344 35712)) +;;;;;; (20355 10021)) ;;; Generated autoloads from org/org-exp.el (autoload 'org-export "org-exp" "\ @@ -20735,8 +20693,8 @@ Insert into the buffer a template with information for exporting. ;;;*** ;;;### (autoloads (org-feed-show-raw-feed org-feed-goto-inbox org-feed-update -;;;;;; org-feed-update-all) "org-feed" "org/org-feed.el" (20309 -;;;;;; 60936)) +;;;;;; org-feed-update-all) "org-feed" "org/org-feed.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from org/org-feed.el (autoload 'org-feed-update-all "org-feed" "\ @@ -20764,7 +20722,7 @@ Show the raw feed buffer of a feed. ;;;*** ;;;### (autoloads (org-footnote-normalize org-footnote-action) "org-footnote" -;;;;;; "org/org-footnote.el" (20344 35712)) +;;;;;; "org/org-footnote.el" (20378 29222)) ;;; Generated autoloads from org/org-footnote.el (autoload 'org-footnote-action "org-footnote" "\ @@ -20815,7 +20773,7 @@ Additional note on `org-footnote-insert-pos-for-preprocessor': ;;;### (autoloads (org-freemind-to-org-mode org-freemind-from-org-sparse-tree ;;;;;; org-freemind-from-org-mode org-freemind-from-org-mode-node ;;;;;; org-freemind-show org-export-as-freemind) "org-freemind" -;;;;;; "org/org-freemind.el" (20309 60936)) +;;;;;; "org/org-freemind.el" (20355 10021)) ;;; Generated autoloads from org/org-freemind.el (autoload 'org-export-as-freemind "org-freemind" "\ @@ -20876,7 +20834,7 @@ Convert FreeMind file MM-FILE to `org-mode' file ORG-FILE. ;;;### (autoloads (org-export-htmlize-generate-css org-export-as-html ;;;;;; org-export-region-as-html org-replace-region-by-html org-export-as-html-to-buffer ;;;;;; org-export-as-html-batch org-export-as-html-and-open) "org-html" -;;;;;; "org/org-html.el" (20344 35712)) +;;;;;; "org/org-html.el" (20355 10021)) ;;; Generated autoloads from org/org-html.el (put 'org-export-html-style-include-default 'safe-local-variable 'booleanp) @@ -20970,7 +20928,7 @@ that uses these same face definitions. ;;;### (autoloads (org-export-icalendar-combine-agenda-files org-export-icalendar-all-agenda-files ;;;;;; org-export-icalendar-this-file) "org-icalendar" "org/org-icalendar.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from org/org-icalendar.el (autoload 'org-export-icalendar-this-file "org-icalendar" "\ @@ -20998,7 +20956,7 @@ The file is stored under the name `org-combined-agenda-icalendar-file'. ;;;### (autoloads (org-id-store-link org-id-find-id-file org-id-find ;;;;;; org-id-goto org-id-get-with-outline-drilling org-id-get-with-outline-path-completion ;;;;;; org-id-get org-id-copy org-id-get-create) "org-id" "org/org-id.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from org/org-id.el (autoload 'org-id-get-create "org-id" "\ @@ -21067,7 +21025,7 @@ Store a link to the current entry, using its ID. ;;;*** ;;;### (autoloads (org-indent-mode) "org-indent" "org/org-indent.el" -;;;;;; (20344 35712)) +;;;;;; (20355 10021)) ;;; Generated autoloads from org/org-indent.el (autoload 'org-indent-mode "org-indent" "\ @@ -21085,7 +21043,7 @@ during idle time. ;;;*** ;;;### (autoloads (org-irc-store-link) "org-irc" "org/org-irc.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from org/org-irc.el (autoload 'org-irc-store-link "org-irc" "\ @@ -21098,7 +21056,7 @@ Dispatch to the appropriate function to store a link to an IRC session. ;;;### (autoloads (org-export-as-pdf-and-open org-export-as-pdf org-export-as-latex ;;;;;; org-export-region-as-latex org-replace-region-by-latex org-export-as-latex-to-buffer ;;;;;; org-export-as-latex-batch) "org-latex" "org/org-latex.el" -;;;;;; (20344 35712)) +;;;;;; (20355 10021)) ;;; Generated autoloads from org/org-latex.el (autoload 'org-export-as-latex-batch "org-latex" "\ @@ -21179,7 +21137,7 @@ Export as LaTeX, then process through to PDF, and open. ;;;### (autoloads (org-lparse-region org-replace-region-by org-lparse-to-buffer ;;;;;; org-lparse-batch org-lparse-and-open) "org-lparse" "org/org-lparse.el" -;;;;;; (20344 35712)) +;;;;;; (20355 10021)) ;;; Generated autoloads from org/org-lparse.el (autoload 'org-lparse-and-open "org-lparse" "\ @@ -21236,8 +21194,8 @@ in a window. A non-interactive call will only return the buffer. ;;;*** ;;;### (autoloads (org-mobile-create-sumo-agenda org-mobile-pull -;;;;;; org-mobile-push) "org-mobile" "org/org-mobile.el" (20309 -;;;;;; 60936)) +;;;;;; org-mobile-push) "org-mobile" "org/org-mobile.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from org/org-mobile.el (autoload 'org-mobile-push "org-mobile" "\ @@ -21263,7 +21221,7 @@ Create a file that contains all custom agenda views. ;;;### (autoloads (org-export-as-odf-and-open org-export-as-odf org-export-odt-convert ;;;;;; org-export-as-odt org-export-as-odt-batch org-export-as-odt-and-open) -;;;;;; "org-odt" "org/org-odt.el" (20344 35712)) +;;;;;; "org-odt" "org/org-odt.el" (20378 29222)) ;;; Generated autoloads from org/org-odt.el (autoload 'org-export-as-odt-and-open "org-odt" "\ @@ -21333,7 +21291,7 @@ formula file. ;;;*** ;;;### (autoloads (org-plot/gnuplot) "org-plot" "org/org-plot.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from org/org-plot.el (autoload 'org-plot/gnuplot "org-plot" "\ @@ -21347,7 +21305,7 @@ line directly before or after the table. ;;;### (autoloads (org-publish-current-project org-publish-current-file ;;;;;; org-publish-all org-publish) "org-publish" "org/org-publish.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from org/org-publish.el (defalias 'org-publish-project 'org-publish) @@ -21381,7 +21339,7 @@ the project. ;;;### (autoloads (org-remember-handler org-remember org-remember-apply-template ;;;;;; org-remember-annotation org-remember-insinuate) "org-remember" -;;;;;; "org/org-remember.el" (20309 60936)) +;;;;;; "org/org-remember.el" (20355 10021)) ;;; Generated autoloads from org/org-remember.el (autoload 'org-remember-insinuate "org-remember" "\ @@ -21457,7 +21415,7 @@ See also the variable `org-reverse-note-order'. ;;;*** ;;;### (autoloads (org-table-to-lisp orgtbl-mode turn-on-orgtbl) -;;;;;; "org-table" "org/org-table.el" (20345 9613)) +;;;;;; "org-table" "org/org-table.el" (20378 29222)) ;;; Generated autoloads from org/org-table.el (autoload 'turn-on-orgtbl "org-table" "\ @@ -21481,7 +21439,7 @@ The table is taken from the parameter TXT, or from the buffer at point. ;;;*** ;;;### (autoloads (org-export-as-taskjuggler-and-open org-export-as-taskjuggler) -;;;;;; "org-taskjuggler" "org/org-taskjuggler.el" (20309 60936)) +;;;;;; "org-taskjuggler" "org/org-taskjuggler.el" (20355 10021)) ;;; Generated autoloads from org/org-taskjuggler.el (autoload 'org-export-as-taskjuggler "org-taskjuggler" "\ @@ -21509,7 +21467,7 @@ with the TaskJuggler GUI. ;;;### (autoloads (org-timer-set-timer org-timer-item org-timer-change-times-in-region ;;;;;; org-timer org-timer-start) "org-timer" "org/org-timer.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from org/org-timer.el (autoload 'org-timer-start "org-timer" "\ @@ -21570,7 +21528,7 @@ replace any running timer. ;;;*** ;;;### (autoloads (org-export-as-xoxo) "org-xoxo" "org/org-xoxo.el" -;;;;;; (20345 9613)) +;;;;;; (20355 10021)) ;;; Generated autoloads from org/org-xoxo.el (autoload 'org-export-as-xoxo "org-xoxo" "\ @@ -21582,7 +21540,7 @@ The XOXO buffer is named *xoxo-* ;;;*** ;;;### (autoloads (outline-minor-mode outline-mode) "outline" "outline.el" -;;;;;; (20330 53092)) +;;;;;; (20355 10021)) ;;; Generated autoloads from outline.el (put 'outline-regexp 'safe-local-variable 'stringp) (put 'outline-heading-end-regexp 'safe-local-variable 'stringp) @@ -21646,7 +21604,7 @@ See the command `outline-mode' for more information on this mode. ;;;### (autoloads (list-packages describe-package package-initialize ;;;;;; package-refresh-contents package-install-file package-install-from-buffer ;;;;;; package-install package-enable-at-startup) "package" "emacs-lisp/package.el" -;;;;;; (20317 26260)) +;;;;;; (20369 14251)) ;;; Generated autoloads from emacs-lisp/package.el (defvar package-enable-at-startup t "\ @@ -21716,7 +21674,7 @@ The list is displayed in a buffer named `*Packages*'. ;;;*** -;;;### (autoloads (show-paren-mode) "paren" "paren.el" (20309 60936)) +;;;### (autoloads (show-paren-mode) "paren" "paren.el" (20355 10021)) ;;; Generated autoloads from paren.el (defvar show-paren-mode nil "\ @@ -21743,7 +21701,7 @@ matching parenthesis is highlighted in `show-paren-style' after ;;;*** ;;;### (autoloads (parse-time-string) "parse-time" "calendar/parse-time.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from calendar/parse-time.el (put 'parse-time-rules 'risky-local-variable t) @@ -21756,8 +21714,8 @@ unknown are returned as nil. ;;;*** -;;;### (autoloads (pascal-mode) "pascal" "progmodes/pascal.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (pascal-mode) "pascal" "progmodes/pascal.el" (20378 +;;;;;; 29222)) ;;; Generated autoloads from progmodes/pascal.el (autoload 'pascal-mode "pascal" "\ @@ -21810,7 +21768,7 @@ no args, if that value is non-nil. ;;;*** ;;;### (autoloads (password-in-cache-p password-cache-expiry password-cache) -;;;;;; "password-cache" "password-cache.el" (20309 60936)) +;;;;;; "password-cache" "password-cache.el" (20355 10021)) ;;; Generated autoloads from password-cache.el (defvar password-cache t "\ @@ -21832,7 +21790,7 @@ Check if KEY is in the cache. ;;;*** ;;;### (autoloads (pcase-let pcase-let* pcase) "pcase" "emacs-lisp/pcase.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from emacs-lisp/pcase.el (autoload 'pcase "pcase" "\ @@ -21891,8 +21849,8 @@ of the form (UPAT EXP). ;;;*** -;;;### (autoloads (pcomplete/cvs) "pcmpl-cvs" "pcmpl-cvs.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (pcomplete/cvs) "pcmpl-cvs" "pcmpl-cvs.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from pcmpl-cvs.el (autoload 'pcomplete/cvs "pcmpl-cvs" "\ @@ -21903,7 +21861,7 @@ Completion rules for the `cvs' command. ;;;*** ;;;### (autoloads (pcomplete/tar pcomplete/make pcomplete/bzip2 pcomplete/gzip) -;;;;;; "pcmpl-gnu" "pcmpl-gnu.el" (20309 60936)) +;;;;;; "pcmpl-gnu" "pcmpl-gnu.el" (20355 10021)) ;;; Generated autoloads from pcmpl-gnu.el (autoload 'pcomplete/gzip "pcmpl-gnu" "\ @@ -21931,7 +21889,7 @@ Completion for the GNU tar utility. ;;;*** ;;;### (autoloads (pcomplete/mount pcomplete/umount pcomplete/kill) -;;;;;; "pcmpl-linux" "pcmpl-linux.el" (20309 60936)) +;;;;;; "pcmpl-linux" "pcmpl-linux.el" (20355 10021)) ;;; Generated autoloads from pcmpl-linux.el (autoload 'pcomplete/kill "pcmpl-linux" "\ @@ -21951,8 +21909,8 @@ Completion for GNU/Linux `mount'. ;;;*** -;;;### (autoloads (pcomplete/rpm) "pcmpl-rpm" "pcmpl-rpm.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (pcomplete/rpm) "pcmpl-rpm" "pcmpl-rpm.el" (20361 +;;;;;; 20134)) ;;; Generated autoloads from pcmpl-rpm.el (autoload 'pcomplete/rpm "pcmpl-rpm" "\ @@ -21964,7 +21922,7 @@ Completion for the `rpm' command. ;;;### (autoloads (pcomplete/scp pcomplete/ssh pcomplete/chgrp pcomplete/chown ;;;;;; pcomplete/which pcomplete/xargs pcomplete/rm pcomplete/rmdir -;;;;;; pcomplete/cd) "pcmpl-unix" "pcmpl-unix.el" (20309 60936)) +;;;;;; pcomplete/cd) "pcmpl-unix" "pcmpl-unix.el" (20376 40834)) ;;; Generated autoloads from pcmpl-unix.el (autoload 'pcomplete/cd "pcmpl-unix" "\ @@ -22021,8 +21979,8 @@ Includes files as well as host names followed by a colon. ;;;### (autoloads (pcomplete-shell-setup pcomplete-comint-setup pcomplete-list ;;;;;; pcomplete-help pcomplete-expand pcomplete-continue pcomplete-expand-and-complete -;;;;;; pcomplete-reverse pcomplete) "pcomplete" "pcomplete.el" (20309 -;;;;;; 60936)) +;;;;;; pcomplete-reverse pcomplete) "pcomplete" "pcomplete.el" (20376 +;;;;;; 40834)) ;;; Generated autoloads from pcomplete.el (autoload 'pcomplete "pcomplete" "\ @@ -22081,7 +22039,7 @@ Setup `shell-mode' to use pcomplete. ;;;### (autoloads (cvs-dired-use-hook cvs-dired-action cvs-status ;;;;;; cvs-update cvs-examine cvs-quickdir cvs-checkout) "pcvs" -;;;;;; "vc/pcvs.el" (20309 60936)) +;;;;;; "vc/pcvs.el" (20364 45187)) ;;; Generated autoloads from vc/pcvs.el (autoload 'cvs-checkout "pcvs" "\ @@ -22156,7 +22114,7 @@ The exact behavior is determined also by `cvs-dired-use-hook'." (when (stringp d ;;;*** -;;;### (autoloads nil "pcvs-defs" "vc/pcvs-defs.el" (20309 60936)) +;;;### (autoloads nil "pcvs-defs" "vc/pcvs-defs.el" (20355 10021)) ;;; Generated autoloads from vc/pcvs-defs.el (defvar cvs-global-menu (let ((m (make-sparse-keymap "PCL-CVS"))) (define-key m [status] `(menu-item ,(purecopy "Directory Status") cvs-status :help ,(purecopy "A more verbose status of a workarea"))) (define-key m [checkout] `(menu-item ,(purecopy "Checkout Module") cvs-checkout :help ,(purecopy "Check out a module from the repository"))) (define-key m [update] `(menu-item ,(purecopy "Update Directory") cvs-update :help ,(purecopy "Fetch updates from the repository"))) (define-key m [examine] `(menu-item ,(purecopy "Examine Directory") cvs-examine :help ,(purecopy "Examine the current state of a workarea"))) (fset 'cvs-global-menu m)) "\ @@ -22165,7 +22123,7 @@ Global menu used by PCL-CVS.") ;;;*** ;;;### (autoloads (perl-mode) "perl-mode" "progmodes/perl-mode.el" -;;;;;; (20341 24416)) +;;;;;; (20365 17199)) ;;; Generated autoloads from progmodes/perl-mode.el (put 'perl-indent-level 'safe-local-variable 'integerp) (put 'perl-continued-statement-offset 'safe-local-variable 'integerp) @@ -22227,7 +22185,7 @@ Turning on Perl mode runs the normal hook `perl-mode-hook'. ;;;*** ;;;### (autoloads (picture-mode) "picture" "textmodes/picture.el" -;;;;;; (20309 60936)) +;;;;;; (20373 11301)) ;;; Generated autoloads from textmodes/picture.el (autoload 'picture-mode "picture" "\ @@ -22307,8 +22265,8 @@ they are not by default assigned to keys. ;;;*** -;;;### (autoloads (plstore-open) "plstore" "gnus/plstore.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (plstore-mode plstore-open) "plstore" "gnus/plstore.el" +;;;;;; (20378 29222)) ;;; Generated autoloads from gnus/plstore.el (autoload 'plstore-open "plstore" "\ @@ -22316,10 +22274,15 @@ Create a plstore instance associated with FILE. \(fn FILE)" nil nil) +(autoload 'plstore-mode "plstore" "\ +Major mode for editing PLSTORE files. + +\(fn)" t nil) + ;;;*** ;;;### (autoloads (po-find-file-coding-system) "po" "textmodes/po.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from textmodes/po.el (autoload 'po-find-file-coding-system "po" "\ @@ -22330,7 +22293,7 @@ Called through `file-coding-system-alist', before the file is visited for real. ;;;*** -;;;### (autoloads (pong) "pong" "play/pong.el" (20309 60936)) +;;;### (autoloads (pong) "pong" "play/pong.el" (20355 10021)) ;;; Generated autoloads from play/pong.el (autoload 'pong "pong" "\ @@ -22346,7 +22309,7 @@ pong-mode keybindings:\\ ;;;*** -;;;### (autoloads (pop3-movemail) "pop3" "gnus/pop3.el" (20309 60936)) +;;;### (autoloads (pop3-movemail) "pop3" "gnus/pop3.el" (20355 10021)) ;;; Generated autoloads from gnus/pop3.el (autoload 'pop3-movemail "pop3" "\ @@ -22359,7 +22322,7 @@ Use streaming commands. ;;;### (autoloads (pp-macroexpand-last-sexp pp-eval-last-sexp pp-macroexpand-expression ;;;;;; pp-eval-expression pp pp-buffer pp-to-string) "pp" "emacs-lisp/pp.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from emacs-lisp/pp.el (autoload 'pp-to-string "pp" "\ @@ -22427,7 +22390,7 @@ Ignores leading comment characters. ;;;;;; pr-ps-buffer-print pr-ps-buffer-using-ghostscript pr-ps-buffer-preview ;;;;;; pr-ps-directory-ps-print pr-ps-directory-print pr-ps-directory-using-ghostscript ;;;;;; pr-ps-directory-preview pr-interface) "printing" "printing.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from printing.el (autoload 'pr-interface "printing" "\ @@ -23014,7 +22977,7 @@ are both set to t. ;;;*** -;;;### (autoloads (proced) "proced" "proced.el" (20309 60936)) +;;;### (autoloads (proced) "proced" "proced.el" (20355 10021)) ;;; Generated autoloads from proced.el (autoload 'proced "proced" "\ @@ -23030,7 +22993,7 @@ See `proced-mode' for a description of features available in Proced buffers. ;;;*** ;;;### (autoloads (run-prolog mercury-mode prolog-mode) "prolog" -;;;;;; "progmodes/prolog.el" (20309 60936)) +;;;;;; "progmodes/prolog.el" (20373 11301)) ;;; Generated autoloads from progmodes/prolog.el (autoload 'prolog-mode "prolog" "\ @@ -23065,8 +23028,8 @@ With prefix argument ARG, restart the Prolog process if running before. ;;;*** -;;;### (autoloads (bdf-directory-list) "ps-bdf" "ps-bdf.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (bdf-directory-list) "ps-bdf" "ps-bdf.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from ps-bdf.el (defvar bdf-directory-list (if (memq system-type '(ms-dos windows-nt)) (list (expand-file-name "fonts/bdf" installation-directory)) '("/usr/local/share/emacs/fonts/bdf")) "\ @@ -23077,8 +23040,8 @@ The default value is '(\"/usr/local/share/emacs/fonts/bdf\").") ;;;*** -;;;### (autoloads (ps-mode) "ps-mode" "progmodes/ps-mode.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (ps-mode) "ps-mode" "progmodes/ps-mode.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from progmodes/ps-mode.el (autoload 'ps-mode "ps-mode" "\ @@ -23129,8 +23092,8 @@ Typing \\\\[ps-run-goto-error] when the cursor is at the number ;;;;;; ps-spool-region ps-spool-buffer-with-faces ps-spool-buffer ;;;;;; ps-print-region-with-faces ps-print-region ps-print-buffer-with-faces ;;;;;; ps-print-buffer ps-print-customize ps-print-color-p ps-paper-type -;;;;;; ps-page-dimensions-database) "ps-print" "ps-print.el" (20309 -;;;;;; 60936)) +;;;;;; ps-page-dimensions-database) "ps-print" "ps-print.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from ps-print.el (defvar ps-page-dimensions-database (purecopy (list (list 'a4 (/ (* 72 21.0) 2.54) (/ (* 72 29.7) 2.54) "A4") (list 'a3 (/ (* 72 29.7) 2.54) (/ (* 72 42.0) 2.54) "A3") (list 'letter (* 72 8.5) (* 72 11.0) "Letter") (list 'legal (* 72 8.5) (* 72 14.0) "Legal") (list 'letter-small (* 72 7.68) (* 72 10.16) "LetterSmall") (list 'tabloid (* 72 11.0) (* 72 17.0) "Tabloid") (list 'ledger (* 72 17.0) (* 72 11.0) "Ledger") (list 'statement (* 72 5.5) (* 72 8.5) "Statement") (list 'executive (* 72 7.5) (* 72 10.0) "Executive") (list 'a4small (* 72 7.47) (* 72 10.85) "A4Small") (list 'b4 (* 72 10.125) (* 72 14.33) "B4") (list 'b5 (* 72 7.16) (* 72 10.125) "B5") '(addresslarge 236.0 99.0 "AddressLarge") '(addresssmall 236.0 68.0 "AddressSmall") '(cuthanging13 90.0 222.0 "CutHanging13") '(cuthanging15 90.0 114.0 "CutHanging15") '(diskette 181.0 136.0 "Diskette") '(eurofilefolder 139.0 112.0 "EuropeanFilefolder") '(eurofoldernarrow 526.0 107.0 "EuroFolderNarrow") '(eurofolderwide 526.0 136.0 "EuroFolderWide") '(euronamebadge 189.0 108.0 "EuroNameBadge") '(euronamebadgelarge 223.0 136.0 "EuroNameBadgeLarge") '(filefolder 230.0 37.0 "FileFolder") '(jewelry 76.0 136.0 "Jewelry") '(mediabadge 180.0 136.0 "MediaBadge") '(multipurpose 126.0 68.0 "MultiPurpose") '(retaillabel 90.0 104.0 "RetailLabel") '(shipping 271.0 136.0 "Shipping") '(slide35mm 26.0 104.0 "Slide35mm") '(spine8mm 187.0 26.0 "Spine8mm") '(topcoated 425.19685 136.0 "TopCoatedPaper") '(topcoatedpaper 396.0 136.0 "TopcoatedPaper150") '(vhsface 205.0 127.0 "VHSFace") '(vhsspine 400.0 50.0 "VHSSpine") '(zipdisk 156.0 136.0 "ZipDisk"))) "\ @@ -23327,7 +23290,7 @@ If EXTENSION is any other symbol, it is ignored. ;;;*** ;;;### (autoloads (jython-mode python-mode python-after-info-look -;;;;;; run-python) "python" "progmodes/python.el" (20309 60936)) +;;;;;; run-python) "python" "progmodes/python.el" (20376 40834)) ;;; Generated autoloads from progmodes/python.el (add-to-list 'interpreter-mode-alist (cons (purecopy "jython") 'jython-mode)) @@ -23413,7 +23376,7 @@ Runs `jython-mode-hook' after `python-mode-hook'. ;;;*** ;;;### (autoloads (quoted-printable-decode-region) "qp" "gnus/qp.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from gnus/qp.el (autoload 'quoted-printable-decode-region "qp" "\ @@ -23436,7 +23399,7 @@ them into characters should be done separately. ;;;;;; quail-defrule quail-install-decode-map quail-install-map ;;;;;; quail-define-rules quail-show-keyboard-layout quail-set-keyboard-layout ;;;;;; quail-define-package quail-use-package quail-title) "quail" -;;;;;; "international/quail.el" (20330 53092)) +;;;;;; "international/quail.el" (20356 55829)) ;;; Generated autoloads from international/quail.el (autoload 'quail-title "quail" "\ @@ -23667,8 +23630,8 @@ of each directory. ;;;### (autoloads (quickurl-list quickurl-list-mode quickurl-edit-urls ;;;;;; quickurl-browse-url-ask quickurl-browse-url quickurl-add-url -;;;;;; quickurl-ask quickurl) "quickurl" "net/quickurl.el" (20309 -;;;;;; 60936)) +;;;;;; quickurl-ask quickurl) "quickurl" "net/quickurl.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from net/quickurl.el (defconst quickurl-reread-hook-postfix "\n;; Local Variables:\n;; eval: (progn (require 'quickurl) (add-hook 'local-write-file-hooks (lambda () (quickurl-read) nil)))\n;; End:\n" "\ @@ -23740,7 +23703,7 @@ Display `quickurl-list' as a formatted list using `quickurl-list-mode'. ;;;*** ;;;### (autoloads (rcirc-track-minor-mode rcirc-connect rcirc) "rcirc" -;;;;;; "net/rcirc.el" (20325 32214)) +;;;;;; "net/rcirc.el" (20371 55972)) ;;; Generated autoloads from net/rcirc.el (autoload 'rcirc "rcirc" "\ @@ -23778,8 +23741,8 @@ if ARG is omitted or nil. ;;;*** -;;;### (autoloads (remote-compile) "rcompile" "net/rcompile.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (remote-compile) "rcompile" "net/rcompile.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from net/rcompile.el (autoload 'remote-compile "rcompile" "\ @@ -23791,7 +23754,7 @@ See \\[compile]. ;;;*** ;;;### (autoloads (re-builder) "re-builder" "emacs-lisp/re-builder.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from emacs-lisp/re-builder.el (defalias 'regexp-builder 're-builder) @@ -23809,7 +23772,7 @@ matching parts of the target buffer will be highlighted. ;;;*** -;;;### (autoloads (recentf-mode) "recentf" "recentf.el" (20309 60936)) +;;;### (autoloads (recentf-mode) "recentf" "recentf.el" (20356 2211)) ;;; Generated autoloads from recentf.el (defvar recentf-mode nil "\ @@ -23839,7 +23802,7 @@ were operated on recently. ;;;;;; string-rectangle delete-whitespace-rectangle open-rectangle ;;;;;; insert-rectangle yank-rectangle kill-rectangle extract-rectangle ;;;;;; delete-extract-rectangle delete-rectangle) "rect" "rect.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from rect.el (define-key ctl-x-r-map "c" 'clear-rectangle) (define-key ctl-x-r-map "k" 'kill-rectangle) @@ -23975,8 +23938,8 @@ with a prefix argument, prompt for START-AT and FORMAT. ;;;*** -;;;### (autoloads (refill-mode) "refill" "textmodes/refill.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (refill-mode) "refill" "textmodes/refill.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from textmodes/refill.el (autoload 'refill-mode "refill" "\ @@ -23997,7 +23960,7 @@ For true \"word wrap\" behavior, use `visual-line-mode' instead. ;;;*** ;;;### (autoloads (reftex-reset-scanning-information reftex-mode -;;;;;; turn-on-reftex) "reftex" "textmodes/reftex.el" (20309 60936)) +;;;;;; turn-on-reftex) "reftex" "textmodes/reftex.el" (20355 10021)) ;;; Generated autoloads from textmodes/reftex.el (autoload 'turn-on-reftex "reftex" "\ @@ -24053,7 +24016,7 @@ This enforces rescanning the buffer on next use. ;;;*** ;;;### (autoloads (reftex-citation) "reftex-cite" "textmodes/reftex-cite.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from textmodes/reftex-cite.el (autoload 'reftex-citation "reftex-cite" "\ @@ -24083,7 +24046,7 @@ While entering the regexp, completion on knows citation keys is possible. ;;;*** ;;;### (autoloads (reftex-isearch-minor-mode) "reftex-global" "textmodes/reftex-global.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from textmodes/reftex-global.el (autoload 'reftex-isearch-minor-mode "reftex-global" "\ @@ -24100,7 +24063,7 @@ With no argument, this command toggles ;;;*** ;;;### (autoloads (reftex-index-phrases-mode) "reftex-index" "textmodes/reftex-index.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from textmodes/reftex-index.el (autoload 'reftex-index-phrases-mode "reftex-index" "\ @@ -24133,7 +24096,7 @@ Here are all local bindings. ;;;*** ;;;### (autoloads (reftex-all-document-files) "reftex-parse" "textmodes/reftex-parse.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from textmodes/reftex-parse.el (autoload 'reftex-all-document-files "reftex-parse" "\ @@ -24145,8 +24108,8 @@ of master file. ;;;*** -;;;### (autoloads nil "reftex-vars" "textmodes/reftex-vars.el" (20309 -;;;;;; 60936)) +;;;### (autoloads nil "reftex-vars" "textmodes/reftex-vars.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from textmodes/reftex-vars.el (put 'reftex-vref-is-default 'safe-local-variable (lambda (x) (or (stringp x) (symbolp x)))) (put 'reftex-fref-is-default 'safe-local-variable (lambda (x) (or (stringp x) (symbolp x)))) @@ -24156,7 +24119,7 @@ of master file. ;;;*** ;;;### (autoloads (regexp-opt-depth regexp-opt) "regexp-opt" "emacs-lisp/regexp-opt.el" -;;;;;; (20309 60936)) +;;;;;; (20363 61861)) ;;; Generated autoloads from emacs-lisp/regexp-opt.el (autoload 'regexp-opt "regexp-opt" "\ @@ -24187,7 +24150,7 @@ This means the number of non-shy regexp grouping constructs ;;;### (autoloads (remember-diary-extract-entries remember-clipboard ;;;;;; remember-other-frame remember) "remember" "textmodes/remember.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from textmodes/remember.el (autoload 'remember "remember" "\ @@ -24218,7 +24181,7 @@ Extract diary entries from the region. ;;;*** -;;;### (autoloads (repeat) "repeat" "repeat.el" (20309 60936)) +;;;### (autoloads (repeat) "repeat" "repeat.el" (20355 10021)) ;;; Generated autoloads from repeat.el (autoload 'repeat "repeat" "\ @@ -24241,7 +24204,7 @@ recently executed command not bound to an input event\". ;;;*** ;;;### (autoloads (reporter-submit-bug-report) "reporter" "mail/reporter.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from mail/reporter.el (autoload 'reporter-submit-bug-report "reporter" "\ @@ -24273,7 +24236,7 @@ mail-sending package is used for editing and sending the message. ;;;*** ;;;### (autoloads (reposition-window) "reposition" "reposition.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from reposition.el (autoload 'reposition-window "reposition" "\ @@ -24300,7 +24263,7 @@ first comment line visible (if point is in a comment). ;;;*** ;;;### (autoloads (global-reveal-mode reveal-mode) "reveal" "reveal.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from reveal.el (autoload 'reveal-mode "reveal" "\ @@ -24336,7 +24299,7 @@ the mode if ARG is omitted or nil. ;;;*** ;;;### (autoloads (make-ring ring-p) "ring" "emacs-lisp/ring.el" -;;;;;; (20321 41303)) +;;;;;; (20355 10021)) ;;; Generated autoloads from emacs-lisp/ring.el (autoload 'ring-p "ring" "\ @@ -24351,7 +24314,7 @@ Make a ring that can contain SIZE elements. ;;;*** -;;;### (autoloads (rlogin) "rlogin" "net/rlogin.el" (20309 60936)) +;;;### (autoloads (rlogin) "rlogin" "net/rlogin.el" (20355 10021)) ;;; Generated autoloads from net/rlogin.el (autoload 'rlogin "rlogin" "\ @@ -24400,7 +24363,7 @@ variable. ;;;;;; rmail-secondary-file-directory rmail-primary-inbox-list rmail-highlighted-headers ;;;;;; rmail-retry-ignored-headers rmail-displayed-headers rmail-ignored-headers ;;;;;; rmail-user-mail-address-regexp rmail-movemail-variant-p) -;;;;;; "rmail" "mail/rmail.el" (20315 8755)) +;;;;;; "rmail" "mail/rmail.el" (20369 14251)) ;;; Generated autoloads from mail/rmail.el (autoload 'rmail-movemail-variant-p "rmail" "\ @@ -24584,7 +24547,7 @@ Set PASSWORD to be used for retrieving mail from a POP or IMAP server. ;;;*** ;;;### (autoloads (rmail-output-body-to-file rmail-output-as-seen -;;;;;; rmail-output) "rmailout" "mail/rmailout.el" (20309 60936)) +;;;;;; rmail-output) "rmailout" "mail/rmailout.el" (20355 10021)) ;;; Generated autoloads from mail/rmailout.el (put 'rmail-output-file-alist 'risky-local-variable t) @@ -24649,7 +24612,7 @@ than appending to it. Deletes the message after writing if ;;;*** ;;;### (autoloads (rng-c-load-schema) "rng-cmpct" "nxml/rng-cmpct.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from nxml/rng-cmpct.el (autoload 'rng-c-load-schema "rng-cmpct" "\ @@ -24661,7 +24624,7 @@ Return a pattern. ;;;*** ;;;### (autoloads (rng-nxml-mode-init) "rng-nxml" "nxml/rng-nxml.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from nxml/rng-nxml.el (autoload 'rng-nxml-mode-init "rng-nxml" "\ @@ -24674,7 +24637,7 @@ Validation will be enabled if `rng-nxml-auto-validate-flag' is non-nil. ;;;*** ;;;### (autoloads (rng-validate-mode) "rng-valid" "nxml/rng-valid.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from nxml/rng-valid.el (autoload 'rng-validate-mode "rng-valid" "\ @@ -24704,8 +24667,8 @@ to use for finding the schema. ;;;*** -;;;### (autoloads (rng-xsd-compile) "rng-xsd" "nxml/rng-xsd.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (rng-xsd-compile) "rng-xsd" "nxml/rng-xsd.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from nxml/rng-xsd.el (put 'http://www\.w3\.org/2001/XMLSchema-datatypes 'rng-dt-compile 'rng-xsd-compile) @@ -24733,7 +24696,7 @@ must be equal. ;;;*** ;;;### (autoloads (robin-use-package robin-modify-package robin-define-package) -;;;;;; "robin" "international/robin.el" (20309 60936)) +;;;;;; "robin" "international/robin.el" (20355 10021)) ;;; Generated autoloads from international/robin.el (autoload 'robin-define-package "robin" "\ @@ -24766,7 +24729,7 @@ Start using robin package NAME, which is a string. ;;;*** ;;;### (autoloads (toggle-rot13-mode rot13-other-window rot13-region -;;;;;; rot13-string rot13) "rot13" "rot13.el" (20309 60936)) +;;;;;; rot13-string rot13) "rot13" "rot13.el" (20355 10021)) ;;; Generated autoloads from rot13.el (autoload 'rot13 "rot13" "\ @@ -24804,7 +24767,7 @@ Toggle the use of ROT13 encoding for the current window. ;;;*** ;;;### (autoloads (rst-minor-mode rst-mode) "rst" "textmodes/rst.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from textmodes/rst.el (add-to-list 'auto-mode-alist (purecopy '("\\.re?st\\'" . rst-mode))) @@ -24841,7 +24804,7 @@ for modes derived from Text mode, like Mail mode. ;;;*** ;;;### (autoloads (ruby-mode) "ruby-mode" "progmodes/ruby-mode.el" -;;;;;; (20330 53092)) +;;;;;; (20375 53029)) ;;; Generated autoloads from progmodes/ruby-mode.el (autoload 'ruby-mode "ruby-mode" "\ @@ -24862,8 +24825,8 @@ The variable `ruby-indent-level' controls the amount of indentation. ;;;*** -;;;### (autoloads (ruler-mode) "ruler-mode" "ruler-mode.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (ruler-mode) "ruler-mode" "ruler-mode.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from ruler-mode.el (defvar ruler-mode nil "\ @@ -24880,8 +24843,8 @@ if ARG is omitted or nil. ;;;*** -;;;### (autoloads (rx rx-to-string) "rx" "emacs-lisp/rx.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (rx rx-to-string) "rx" "emacs-lisp/rx.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from emacs-lisp/rx.el (autoload 'rx-to-string "rx" "\ @@ -25192,8 +25155,8 @@ enclosed in `(and ...)'. ;;;*** -;;;### (autoloads (savehist-mode) "savehist" "savehist.el" (20314 -;;;;;; 46279)) +;;;### (autoloads (savehist-mode) "savehist" "savehist.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from savehist.el (defvar savehist-mode nil "\ @@ -25225,7 +25188,7 @@ histories, which is probably undesirable. ;;;*** ;;;### (autoloads (dsssl-mode scheme-mode) "scheme" "progmodes/scheme.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from progmodes/scheme.el (autoload 'scheme-mode "scheme" "\ @@ -25267,7 +25230,7 @@ that variable's value is a string. ;;;*** ;;;### (autoloads (gnus-score-mode) "score-mode" "gnus/score-mode.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from gnus/score-mode.el (autoload 'gnus-score-mode "score-mode" "\ @@ -25281,7 +25244,7 @@ This mode is an extended emacs-lisp mode. ;;;*** ;;;### (autoloads (scroll-all-mode) "scroll-all" "scroll-all.el" -;;;;;; (20309 60936)) +;;;;;; (20363 61861)) ;;; Generated autoloads from scroll-all.el (defvar scroll-all-mode nil "\ @@ -25307,7 +25270,7 @@ one window apply to all visible windows in the same frame. ;;;*** ;;;### (autoloads (scroll-lock-mode) "scroll-lock" "scroll-lock.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from scroll-lock.el (autoload 'scroll-lock-mode "scroll-lock" "\ @@ -25323,7 +25286,7 @@ vertically fixed relative to window boundaries during scrolling. ;;;*** -;;;### (autoloads nil "secrets" "net/secrets.el" (20309 60936)) +;;;### (autoloads nil "secrets" "net/secrets.el" (20355 10021)) ;;; Generated autoloads from net/secrets.el (when (featurep 'dbusbind) (autoload 'secrets-show-secrets "secrets" nil t)) @@ -25331,7 +25294,7 @@ vertically fixed relative to window boundaries during scrolling. ;;;*** ;;;### (autoloads (semantic-mode semantic-default-submodes) "semantic" -;;;;;; "cedet/semantic.el" (20309 60936)) +;;;;;; "cedet/semantic.el" (20355 10021)) ;;; Generated autoloads from cedet/semantic.el (defvar semantic-default-submodes '(global-semantic-idle-scheduler-mode global-semanticdb-minor-mode) "\ @@ -25385,7 +25348,7 @@ Semantic mode. ;;;;;; mail-personal-alias-file mail-default-reply-to mail-archive-file-name ;;;;;; mail-header-separator send-mail-function mail-interactive ;;;;;; mail-self-blind mail-specify-envelope-from mail-from-style) -;;;;;; "sendmail" "mail/sendmail.el" (20320 14810)) +;;;;;; "sendmail" "mail/sendmail.el" (20369 14251)) ;;; Generated autoloads from mail/sendmail.el (defvar mail-from-style 'default "\ @@ -25588,7 +25551,7 @@ header when sending a message to a mailing list.") (custom-autoload 'mail-mailing-lists "sendmail" t) (defvar sendmail-coding-system nil "\ -*Coding system for encoding the outgoing mail. +Coding system for encoding the outgoing mail. This has higher priority than the default `buffer-file-coding-system' and `default-sendmail-coding-system', but lower priority than the local value of `buffer-file-coding-system'. @@ -25667,8 +25630,8 @@ Like `mail' command, but display mail buffer in another frame. ;;;*** ;;;### (autoloads (server-save-buffers-kill-terminal server-mode -;;;;;; server-force-delete server-start) "server" "server.el" (20341 -;;;;;; 60214)) +;;;;;; server-force-delete server-start) "server" "server.el" (20370 +;;;;;; 35109)) ;;; Generated autoloads from server.el (put 'server-host 'risky-local-variable t) @@ -25679,10 +25642,10 @@ Like `mail' command, but display mail buffer in another frame. (autoload 'server-start "server" "\ Allow this Emacs process to be a server for client processes. -This starts a server communications subprocess through which -client \"editors\" can send your editing commands to this Emacs -job. To use the server, set up the program `emacsclient' in the -Emacs distribution as your standard \"editor\". +This starts a server communications subprocess through which client +\"editors\" can send your editing commands to this Emacs job. +To use the server, set up the program `emacsclient' in the Emacs +distribution as your standard \"editor\". Optional argument LEAVE-DEAD (interactively, a prefix arg) means just kill any existing server communications subprocess. @@ -25735,7 +25698,7 @@ only these files will be asked to be saved. ;;;*** -;;;### (autoloads (ses-mode) "ses" "ses.el" (20309 60936)) +;;;### (autoloads (ses-mode) "ses" "ses.el" (20373 11301)) ;;; Generated autoloads from ses.el (autoload 'ses-mode "ses" "\ @@ -25754,7 +25717,7 @@ These are active only in the minibuffer, when entering or editing a formula: ;;;*** ;;;### (autoloads (html-mode sgml-mode) "sgml-mode" "textmodes/sgml-mode.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from textmodes/sgml-mode.el (autoload 'sgml-mode "sgml-mode" "\ @@ -25820,7 +25783,7 @@ To work around that, do: ;;;*** ;;;### (autoloads (sh-mode) "sh-script" "progmodes/sh-script.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from progmodes/sh-script.el (put 'sh-shell 'safe-local-variable 'symbolp) @@ -25885,7 +25848,7 @@ with your script for an edit-interpret-debug cycle. ;;;*** ;;;### (autoloads (list-load-path-shadows) "shadow" "emacs-lisp/shadow.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from emacs-lisp/shadow.el (autoload 'list-load-path-shadows "shadow" "\ @@ -25935,8 +25898,8 @@ function, `load-path-shadows-find'. ;;;*** ;;;### (autoloads (shadow-initialize shadow-define-regexp-group shadow-define-literal-group -;;;;;; shadow-define-cluster) "shadowfile" "shadowfile.el" (20309 -;;;;;; 60936)) +;;;;;; shadow-define-cluster) "shadowfile" "shadowfile.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from shadowfile.el (autoload 'shadow-define-cluster "shadowfile" "\ @@ -25975,7 +25938,7 @@ Set up file shadowing. ;;;*** ;;;### (autoloads (shell shell-dumb-shell-regexp) "shell" "shell.el" -;;;;;; (20321 41252)) +;;;;;; (20355 10021)) ;;; Generated autoloads from shell.el (defvar shell-dumb-shell-regexp (purecopy "cmd\\(proxy\\)?\\.exe") "\ @@ -26023,8 +25986,8 @@ Otherwise, one argument `-i' is passed to the shell. ;;;*** -;;;### (autoloads (shr-insert-document) "shr" "gnus/shr.el" (20327 -;;;;;; 64029)) +;;;### (autoloads (shr-insert-document) "shr" "gnus/shr.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from gnus/shr.el (autoload 'shr-insert-document "shr" "\ @@ -26037,7 +26000,7 @@ DOM should be a parse tree as generated by ;;;*** ;;;### (autoloads (sieve-upload-and-bury sieve-upload sieve-manage) -;;;;;; "sieve" "gnus/sieve.el" (20309 60936)) +;;;;;; "sieve" "gnus/sieve.el" (20355 10021)) ;;; Generated autoloads from gnus/sieve.el (autoload 'sieve-manage "sieve" "\ @@ -26058,7 +26021,7 @@ DOM should be a parse tree as generated by ;;;*** ;;;### (autoloads (sieve-mode) "sieve-mode" "gnus/sieve-mode.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from gnus/sieve-mode.el (autoload 'sieve-mode "sieve-mode" "\ @@ -26073,8 +26036,8 @@ Turning on Sieve mode runs `sieve-mode-hook'. ;;;*** -;;;### (autoloads (simula-mode) "simula" "progmodes/simula.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (simula-mode) "simula" "progmodes/simula.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from progmodes/simula.el (autoload 'simula-mode "simula" "\ @@ -26123,7 +26086,7 @@ with no arguments, if that value is non-nil. ;;;*** ;;;### (autoloads (skeleton-pair-insert-maybe skeleton-insert skeleton-proxy-new -;;;;;; define-skeleton) "skeleton" "skeleton.el" (20309 60936)) +;;;;;; define-skeleton) "skeleton" "skeleton.el" (20355 10021)) ;;; Generated autoloads from skeleton.el (defvar skeleton-filter-function 'identity "\ @@ -26233,7 +26196,7 @@ symmetrical ones, and the same character twice for the others. ;;;*** ;;;### (autoloads (smerge-start-session smerge-mode smerge-ediff) -;;;;;; "smerge-mode" "vc/smerge-mode.el" (20309 60936)) +;;;;;; "smerge-mode" "vc/smerge-mode.el" (20355 10021)) ;;; Generated autoloads from vc/smerge-mode.el (autoload 'smerge-ediff "smerge-mode" "\ @@ -26261,7 +26224,7 @@ If no conflict maker is found, turn off `smerge-mode'. ;;;*** ;;;### (autoloads (smiley-buffer smiley-region) "smiley" "gnus/smiley.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from gnus/smiley.el (autoload 'smiley-region "smiley" "\ @@ -26279,7 +26242,7 @@ interactively. If there's no argument, do it at the current buffer. ;;;*** ;;;### (autoloads (smtpmail-send-queued-mail smtpmail-send-it) "smtpmail" -;;;;;; "mail/smtpmail.el" (20314 46279)) +;;;;;; "mail/smtpmail.el" (20355 10021)) ;;; Generated autoloads from mail/smtpmail.el (autoload 'smtpmail-send-it "smtpmail" "\ @@ -26294,7 +26257,7 @@ Send mail that was queued as a result of setting `smtpmail-queue-mail'. ;;;*** -;;;### (autoloads (snake) "snake" "play/snake.el" (20309 60936)) +;;;### (autoloads (snake) "snake" "play/snake.el" (20355 10021)) ;;; Generated autoloads from play/snake.el (autoload 'snake "snake" "\ @@ -26318,7 +26281,7 @@ Snake mode keybindings: ;;;*** ;;;### (autoloads (snmpv2-mode snmp-mode) "snmp-mode" "net/snmp-mode.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from net/snmp-mode.el (autoload 'snmp-mode "snmp-mode" "\ @@ -26347,8 +26310,8 @@ then `snmpv2-mode-hook'. ;;;*** -;;;### (autoloads (sunrise-sunset) "solar" "calendar/solar.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (sunrise-sunset) "solar" "calendar/solar.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from calendar/solar.el (autoload 'sunrise-sunset "solar" "\ @@ -26363,8 +26326,8 @@ This function is suitable for execution in a .emacs file. ;;;*** -;;;### (autoloads (solitaire) "solitaire" "play/solitaire.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (solitaire) "solitaire" "play/solitaire.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from play/solitaire.el (autoload 'solitaire "solitaire" "\ @@ -26441,7 +26404,7 @@ Pick your favorite shortcuts: ;;;### (autoloads (reverse-region sort-columns sort-regexp-fields ;;;;;; sort-fields sort-numeric-fields sort-pages sort-paragraphs -;;;;;; sort-lines sort-subr) "sort" "sort.el" (20320 14810)) +;;;;;; sort-lines sort-subr) "sort" "sort.el" (20355 10021)) ;;; Generated autoloads from sort.el (put 'sort-fold-case 'safe-local-variable 'booleanp) @@ -26585,8 +26548,8 @@ From a program takes two point or marker arguments, BEG and END. ;;;*** -;;;### (autoloads (spam-initialize) "spam" "gnus/spam.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (spam-initialize) "spam" "gnus/spam.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from gnus/spam.el (autoload 'spam-initialize "spam" "\ @@ -26602,7 +26565,7 @@ installed through `spam-necessary-extra-headers'. ;;;### (autoloads (spam-report-deagentize spam-report-agentize spam-report-url-to-file ;;;;;; spam-report-url-ping-mm-url spam-report-process-queue) "spam-report" -;;;;;; "gnus/spam-report.el" (20309 60936)) +;;;;;; "gnus/spam-report.el" (20355 10021)) ;;; Generated autoloads from gnus/spam-report.el (autoload 'spam-report-process-queue "spam-report" "\ @@ -26645,7 +26608,7 @@ Spam reports will be queued with the method used when ;;;*** ;;;### (autoloads (speedbar-get-focus speedbar-frame-mode) "speedbar" -;;;;;; "speedbar.el" (20315 2375)) +;;;;;; "speedbar.el" (20381 5411)) ;;; Generated autoloads from speedbar.el (defalias 'speedbar 'speedbar-frame-mode) @@ -26669,8 +26632,8 @@ selected. If the speedbar frame is active, then select the attached frame. ;;;*** -;;;### (autoloads (snarf-spooks spook) "spook" "play/spook.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (snarf-spooks spook) "spook" "play/spook.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from play/spook.el (autoload 'spook "spook" "\ @@ -26689,7 +26652,7 @@ Return a vector containing the lines from `spook-phrases-file'. ;;;;;; sql-ms sql-ingres sql-solid sql-mysql sql-sqlite sql-informix ;;;;;; sql-sybase sql-oracle sql-product-interactive sql-connect ;;;;;; sql-mode sql-help sql-add-product-keywords) "sql" "progmodes/sql.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from progmodes/sql.el (autoload 'sql-add-product-keywords "sql" "\ @@ -27185,7 +27148,7 @@ buffer. ;;;*** ;;;### (autoloads (srecode-template-mode) "srecode/srt-mode" "cedet/srecode/srt-mode.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from cedet/srecode/srt-mode.el (autoload 'srecode-template-mode "srecode/srt-mode" "\ @@ -27198,7 +27161,7 @@ Major-mode for writing SRecode macros. ;;;*** ;;;### (autoloads (starttls-open-stream) "starttls" "gnus/starttls.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from gnus/starttls.el (autoload 'starttls-open-stream "starttls" "\ @@ -27225,8 +27188,8 @@ GnuTLS requires a port number. ;;;;;; strokes-mode strokes-list-strokes strokes-load-user-strokes ;;;;;; strokes-help strokes-describe-stroke strokes-do-complex-stroke ;;;;;; strokes-do-stroke strokes-read-complex-stroke strokes-read-stroke -;;;;;; strokes-global-set-stroke) "strokes" "strokes.el" (20309 -;;;;;; 60936)) +;;;;;; strokes-global-set-stroke) "strokes" "strokes.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from strokes.el (autoload 'strokes-global-set-stroke "strokes" "\ @@ -27340,7 +27303,7 @@ Read a complex stroke and insert its glyph into the current buffer. ;;;*** ;;;### (autoloads (studlify-buffer studlify-word studlify-region) -;;;;;; "studly" "play/studly.el" (20309 60936)) +;;;;;; "studly" "play/studly.el" (20355 10021)) ;;; Generated autoloads from play/studly.el (autoload 'studlify-region "studly" "\ @@ -27361,7 +27324,7 @@ Studlify-case the current buffer. ;;;*** ;;;### (autoloads (global-subword-mode subword-mode) "subword" "progmodes/subword.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from progmodes/subword.el (autoload 'subword-mode "subword" "\ @@ -27417,7 +27380,7 @@ See `subword-mode' for more information on Subword mode. ;;;*** ;;;### (autoloads (sc-cite-original) "supercite" "mail/supercite.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from mail/supercite.el (autoload 'sc-cite-original "supercite" "\ @@ -27449,8 +27412,8 @@ and `sc-post-hook' is run after the guts of this function. ;;;*** -;;;### (autoloads (gpm-mouse-mode) "t-mouse" "t-mouse.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (gpm-mouse-mode) "t-mouse" "t-mouse.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from t-mouse.el (define-obsolete-function-alias 't-mouse-mode 'gpm-mouse-mode "23.1") @@ -27478,7 +27441,7 @@ It relies on the `gpm' daemon being activated. ;;;*** -;;;### (autoloads (tabify untabify) "tabify" "tabify.el" (20309 60936)) +;;;### (autoloads (tabify untabify) "tabify" "tabify.el" (20355 10021)) ;;; Generated autoloads from tabify.el (autoload 'untabify "tabify" "\ @@ -27513,7 +27476,7 @@ The variable `tab-width' controls the spacing of tab stops. ;;;;;; table-recognize table-insert-row-column table-insert-column ;;;;;; table-insert-row table-insert table-point-left-cell-hook ;;;;;; table-point-entered-cell-hook table-load-hook table-cell-map-hook) -;;;;;; "table" "textmodes/table.el" (20309 60936)) +;;;;;; "table" "textmodes/table.el" (20355 10021)) ;;; Generated autoloads from textmodes/table.el (defvar table-cell-map-hook nil "\ @@ -28102,7 +28065,7 @@ converts a table into plain text without frames. It is a companion to ;;;*** ;;;### (autoloads (tabulated-list-mode) "tabulated-list" "emacs-lisp/tabulated-list.el" -;;;;;; (20328 25588)) +;;;;;; (20369 14251)) ;;; Generated autoloads from emacs-lisp/tabulated-list.el (autoload 'tabulated-list-mode "tabulated-list" "\ @@ -28144,7 +28107,7 @@ as the ewoc pretty-printer. ;;;*** -;;;### (autoloads (talk talk-connect) "talk" "talk.el" (20309 60936)) +;;;### (autoloads (talk talk-connect) "talk" "talk.el" (20355 10021)) ;;; Generated autoloads from talk.el (autoload 'talk-connect "talk" "\ @@ -28159,7 +28122,7 @@ Connect to the Emacs talk group from the current X display or tty frame. ;;;*** -;;;### (autoloads (tar-mode) "tar-mode" "tar-mode.el" (20324 28875)) +;;;### (autoloads (tar-mode) "tar-mode" "tar-mode.el" (20364 26741)) ;;; Generated autoloads from tar-mode.el (autoload 'tar-mode "tar-mode" "\ @@ -28183,7 +28146,7 @@ See also: variables `tar-update-datestamp' and `tar-anal-blocksize'. ;;;*** ;;;### (autoloads (tcl-help-on-word inferior-tcl tcl-mode) "tcl" -;;;;;; "progmodes/tcl.el" (20309 60936)) +;;;;;; "progmodes/tcl.el" (20355 10021)) ;;; Generated autoloads from progmodes/tcl.el (autoload 'tcl-mode "tcl" "\ @@ -28231,7 +28194,7 @@ Prefix argument means invert sense of `tcl-use-smart-word-finder'. ;;;*** -;;;### (autoloads (rsh telnet) "telnet" "net/telnet.el" (20309 60936)) +;;;### (autoloads (rsh telnet) "telnet" "net/telnet.el" (20355 10021)) ;;; Generated autoloads from net/telnet.el (autoload 'telnet "telnet" "\ @@ -28257,7 +28220,7 @@ Normally input is edited in Emacs and sent a line at a time. ;;;*** ;;;### (autoloads (serial-term ansi-term term make-term) "term" "term.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from term.el (autoload 'make-term "term" "\ @@ -28299,8 +28262,8 @@ use in that buffer. ;;;*** -;;;### (autoloads (terminal-emulator) "terminal" "terminal.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (terminal-emulator) "terminal" "terminal.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from terminal.el (autoload 'terminal-emulator "terminal" "\ @@ -28337,7 +28300,7 @@ subprocess started. ;;;*** ;;;### (autoloads (testcover-this-defun) "testcover" "emacs-lisp/testcover.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from emacs-lisp/testcover.el (autoload 'testcover-this-defun "testcover" "\ @@ -28347,7 +28310,7 @@ Start coverage on function under point. ;;;*** -;;;### (autoloads (tetris) "tetris" "play/tetris.el" (20309 60936)) +;;;### (autoloads (tetris) "tetris" "play/tetris.el" (20355 10021)) ;;; Generated autoloads from play/tetris.el (autoload 'tetris "tetris" "\ @@ -28378,7 +28341,7 @@ tetris-mode keybindings: ;;;;;; tex-start-commands tex-start-options slitex-run-command latex-run-command ;;;;;; tex-run-command tex-offer-save tex-main-file tex-first-line-header-regexp ;;;;;; tex-directory tex-shell-file-name) "tex-mode" "textmodes/tex-mode.el" -;;;;;; (20309 60936)) +;;;;;; (20364 45187)) ;;; Generated autoloads from textmodes/tex-mode.el (defvar tex-shell-file-name nil "\ @@ -28680,7 +28643,7 @@ Major mode to edit DocTeX files. ;;;*** ;;;### (autoloads (texi2info texinfo-format-region texinfo-format-buffer) -;;;;;; "texinfmt" "textmodes/texinfmt.el" (20309 60936)) +;;;;;; "texinfmt" "textmodes/texinfmt.el" (20355 10021)) ;;; Generated autoloads from textmodes/texinfmt.el (autoload 'texinfo-format-buffer "texinfmt" "\ @@ -28720,7 +28683,7 @@ if large. You can use `Info-split' to do this manually. ;;;*** ;;;### (autoloads (texinfo-mode texinfo-close-quote texinfo-open-quote) -;;;;;; "texinfo" "textmodes/texinfo.el" (20309 60936)) +;;;;;; "texinfo" "textmodes/texinfo.el" (20355 10021)) ;;; Generated autoloads from textmodes/texinfo.el (defvar texinfo-open-quote (purecopy "``") "\ @@ -28806,7 +28769,7 @@ value of `texinfo-mode-hook'. ;;;### (autoloads (thai-composition-function thai-compose-buffer ;;;;;; thai-compose-string thai-compose-region) "thai-util" "language/thai-util.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from language/thai-util.el (autoload 'thai-compose-region "thai-util" "\ @@ -28835,7 +28798,7 @@ Compose Thai characters in the current buffer. ;;;### (autoloads (list-at-point number-at-point symbol-at-point ;;;;;; sexp-at-point thing-at-point bounds-of-thing-at-point forward-thing) -;;;;;; "thingatpt" "thingatpt.el" (20309 60936)) +;;;;;; "thingatpt" "thingatpt.el" (20355 10021)) ;;; Generated autoloads from thingatpt.el (autoload 'forward-thing "thingatpt" "\ @@ -28898,7 +28861,7 @@ Return the Lisp list at point, or nil if none is found. ;;;### (autoloads (thumbs-dired-setroot thumbs-dired-show thumbs-dired-show-marked ;;;;;; thumbs-show-from-dir thumbs-find-thumb) "thumbs" "thumbs.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from thumbs.el (autoload 'thumbs-find-thumb "thumbs" "\ @@ -28936,8 +28899,8 @@ In dired, call the setroot program on the image at point. ;;;;;; tibetan-post-read-conversion tibetan-compose-buffer tibetan-decompose-buffer ;;;;;; tibetan-decompose-string tibetan-decompose-region tibetan-compose-region ;;;;;; tibetan-compose-string tibetan-transcription-to-tibetan tibetan-tibetan-to-transcription -;;;;;; tibetan-char-p) "tibet-util" "language/tibet-util.el" (20309 -;;;;;; 60936)) +;;;;;; tibetan-char-p) "tibet-util" "language/tibet-util.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from language/tibet-util.el (autoload 'tibetan-char-p "tibet-util" "\ @@ -29011,7 +28974,7 @@ See also docstring of the function tibetan-compose-region. ;;;*** ;;;### (autoloads (tildify-buffer tildify-region) "tildify" "textmodes/tildify.el" -;;;;;; (20309 60936)) +;;;;;; (20373 11301)) ;;; Generated autoloads from textmodes/tildify.el (autoload 'tildify-region "tildify" "\ @@ -29036,7 +28999,7 @@ This function performs no refilling of the changed text. ;;;### (autoloads (emacs-init-time emacs-uptime display-time-world ;;;;;; display-time-mode display-time display-time-day-and-date) -;;;;;; "time" "time.el" (20309 60936)) +;;;;;; "time" "time.el" (20355 10021)) ;;; Generated autoloads from time.el (defvar display-time-day-and-date nil "\ @@ -29102,7 +29065,7 @@ Return a string giving the duration of the Emacs initialization. ;;;;;; time-to-day-in-year date-leap-year-p days-between date-to-day ;;;;;; time-add time-subtract time-since days-to-time time-less-p ;;;;;; seconds-to-time date-to-time) "time-date" "calendar/time-date.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from calendar/time-date.el (autoload 'date-to-time "time-date" "\ @@ -29216,7 +29179,7 @@ This function does not work for SECONDS greater than `most-positive-fixnum'. ;;;*** ;;;### (autoloads (time-stamp-toggle-active time-stamp) "time-stamp" -;;;;;; "time-stamp.el" (20309 60936)) +;;;;;; "time-stamp.el" (20355 10021)) ;;; Generated autoloads from time-stamp.el (put 'time-stamp-format 'safe-local-variable 'stringp) (put 'time-stamp-time-zone 'safe-local-variable 'string-or-null-p) @@ -29260,7 +29223,7 @@ With ARG, turn time stamping on if and only if arg is positive. ;;;;;; timeclock-workday-remaining-string timeclock-reread-log timeclock-query-out ;;;;;; timeclock-change timeclock-status-string timeclock-out timeclock-in ;;;;;; timeclock-modeline-display) "timeclock" "calendar/timeclock.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from calendar/timeclock.el (autoload 'timeclock-modeline-display "timeclock" "\ @@ -29360,7 +29323,7 @@ relative only to the time worked today, and not to past time. ;;;*** ;;;### (autoloads (batch-titdic-convert titdic-convert) "titdic-cnv" -;;;;;; "international/titdic-cnv.el" (20309 60936)) +;;;;;; "international/titdic-cnv.el" (20355 10021)) ;;; Generated autoloads from international/titdic-cnv.el (autoload 'titdic-convert "titdic-cnv" "\ @@ -29383,7 +29346,7 @@ To get complete usage, invoke \"emacs -batch -f batch-titdic-convert -h\". ;;;*** ;;;### (autoloads (tmm-prompt tmm-menubar-mouse tmm-menubar) "tmm" -;;;;;; "tmm.el" (20309 60936)) +;;;;;; "tmm.el" (20356 55829)) ;;; Generated autoloads from tmm.el (define-key global-map "\M-`" 'tmm-menubar) (define-key global-map [menu-bar mouse-1] 'tmm-menubar-mouse) @@ -29423,7 +29386,7 @@ Its value should be an event that has a binding in MENU. ;;;### (autoloads (todo-show todo-cp todo-mode todo-print todo-top-priorities ;;;;;; todo-insert-item todo-add-item-non-interactively todo-add-category) -;;;;;; "todo-mode" "calendar/todo-mode.el" (20309 60936)) +;;;;;; "todo-mode" "calendar/todo-mode.el" (20355 10021)) ;;; Generated autoloads from calendar/todo-mode.el (autoload 'todo-add-category "todo-mode" "\ @@ -29483,7 +29446,7 @@ Show TODO list. ;;;### (autoloads (tool-bar-local-item-from-menu tool-bar-add-item-from-menu ;;;;;; tool-bar-local-item tool-bar-add-item toggle-tool-bar-mode-from-frame) -;;;;;; "tool-bar" "tool-bar.el" (20309 60936)) +;;;;;; "tool-bar" "tool-bar.el" (20355 10021)) ;;; Generated autoloads from tool-bar.el (autoload 'toggle-tool-bar-mode-from-frame "tool-bar" "\ @@ -29554,7 +29517,7 @@ holds a keymap. ;;;*** ;;;### (autoloads (tpu-edt-on tpu-edt-mode) "tpu-edt" "emulation/tpu-edt.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from emulation/tpu-edt.el (defvar tpu-edt-mode nil "\ @@ -29584,7 +29547,7 @@ Turn on TPU/edt emulation. ;;;*** ;;;### (autoloads (tpu-mapper) "tpu-mapper" "emulation/tpu-mapper.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from emulation/tpu-mapper.el (autoload 'tpu-mapper "tpu-mapper" "\ @@ -29618,7 +29581,7 @@ your local X guru can try to figure out why the key is being ignored. ;;;*** -;;;### (autoloads (tq-create) "tq" "emacs-lisp/tq.el" (20309 60936)) +;;;### (autoloads (tq-create) "tq" "emacs-lisp/tq.el" (20355 10021)) ;;; Generated autoloads from emacs-lisp/tq.el (autoload 'tq-create "tq" "\ @@ -29632,7 +29595,7 @@ to a tcp server on another machine. ;;;*** ;;;### (autoloads (trace-function-background trace-function trace-buffer) -;;;;;; "trace" "emacs-lisp/trace.el" (20309 60936)) +;;;;;; "trace" "emacs-lisp/trace.el" (20355 10021)) ;;; Generated autoloads from emacs-lisp/trace.el (defvar trace-buffer (purecopy "*trace-output*") "\ @@ -29669,11 +29632,11 @@ BUFFER defaults to `trace-buffer'. ;;;### (autoloads (tramp-unload-tramp tramp-completion-handle-file-name-completion ;;;;;; tramp-completion-handle-file-name-all-completions tramp-unload-file-name-handlers ;;;;;; tramp-file-name-handler tramp-syntax tramp-mode) "tramp" -;;;;;; "net/tramp.el" (20343 48993)) +;;;;;; "net/tramp.el" (20373 11301)) ;;; Generated autoloads from net/tramp.el (defvar tramp-mode t "\ -*Whether Tramp is enabled. +Whether Tramp is enabled. If it is set to nil, all remote file names are used literally.") (custom-autoload 'tramp-mode "tramp" t) @@ -29706,7 +29669,7 @@ Value for `tramp-file-name-regexp' for URL-like remoting. See `tramp-file-name-structure' for more explanations.") (defconst tramp-file-name-regexp (cond ((equal tramp-syntax 'ftp) tramp-file-name-regexp-unified) ((equal tramp-syntax 'sep) tramp-file-name-regexp-separate) ((equal tramp-syntax 'url) tramp-file-name-regexp-url) (t (error "Wrong `tramp-syntax' defined"))) "\ -*Regular expression matching file names handled by Tramp. +Regular expression matching file names handled by Tramp. This regexp should match Tramp file names but no other file names. When tramp.el is loaded, this regular expression is prepended to `file-name-handler-alist', and that is searched sequentially. Thus, @@ -29738,7 +29701,7 @@ Value for `tramp-completion-file-name-regexp' for URL-like remoting. See `tramp-file-name-structure' for more explanations.") (defconst tramp-completion-file-name-regexp (cond ((equal tramp-syntax 'ftp) tramp-completion-file-name-regexp-unified) ((equal tramp-syntax 'sep) tramp-completion-file-name-regexp-separate) ((equal tramp-syntax 'url) tramp-completion-file-name-regexp-url) (t (error "Wrong `tramp-syntax' defined"))) "\ -*Regular expression matching file names handled by Tramp completion. +Regular expression matching file names handled by Tramp completion. This regexp should match partial Tramp file names only. Please note that the entry in `file-name-handler-alist' is made when @@ -29802,7 +29765,7 @@ Discard Tramp from loading remote files. ;;;*** ;;;### (autoloads (tramp-ftp-enable-ange-ftp) "tramp-ftp" "net/tramp-ftp.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from net/tramp-ftp.el (autoload 'tramp-ftp-enable-ange-ftp "tramp-ftp" "\ @@ -29812,8 +29775,8 @@ Discard Tramp from loading remote files. ;;;*** -;;;### (autoloads (help-with-tutorial) "tutorial" "tutorial.el" (20341 -;;;;;; 56798)) +;;;### (autoloads (help-with-tutorial) "tutorial" "tutorial.el" (20369 +;;;;;; 14251)) ;;; Generated autoloads from tutorial.el (autoload 'help-with-tutorial "tutorial" "\ @@ -29838,7 +29801,7 @@ resumed later. ;;;*** ;;;### (autoloads (tai-viet-composition-function) "tv-util" "language/tv-util.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from language/tv-util.el (autoload 'tai-viet-composition-function "tv-util" "\ @@ -29849,7 +29812,7 @@ resumed later. ;;;*** ;;;### (autoloads (2C-split 2C-associate-buffer 2C-two-columns) "two-column" -;;;;;; "textmodes/two-column.el" (20309 60936)) +;;;;;; "textmodes/two-column.el" (20364 31990)) ;;; Generated autoloads from textmodes/two-column.el (autoload '2C-command "two-column" () t 'keymap) (global-set-key "\C-x6" '2C-command) @@ -29900,7 +29863,7 @@ First column's text sSs Second column's text ;;;;;; type-break type-break-mode type-break-keystroke-threshold ;;;;;; type-break-good-break-interval type-break-good-rest-interval ;;;;;; type-break-interval type-break-mode) "type-break" "type-break.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from type-break.el (defvar type-break-mode nil "\ @@ -30082,7 +30045,7 @@ FRAC should be the inverse of the fractional value; for example, a value of ;;;*** -;;;### (autoloads (uce-reply-to-uce) "uce" "mail/uce.el" (20309 60936)) +;;;### (autoloads (uce-reply-to-uce) "uce" "mail/uce.el" (20355 10021)) ;;; Generated autoloads from mail/uce.el (autoload 'uce-reply-to-uce "uce" "\ @@ -30100,7 +30063,7 @@ You might need to set `uce-mail-reader' before using this. ;;;;;; ucs-normalize-NFKC-string ucs-normalize-NFKC-region ucs-normalize-NFKD-string ;;;;;; ucs-normalize-NFKD-region ucs-normalize-NFC-string ucs-normalize-NFC-region ;;;;;; ucs-normalize-NFD-string ucs-normalize-NFD-region) "ucs-normalize" -;;;;;; "international/ucs-normalize.el" (20309 60936)) +;;;;;; "international/ucs-normalize.el" (20355 10021)) ;;; Generated autoloads from international/ucs-normalize.el (autoload 'ucs-normalize-NFD-region "ucs-normalize" "\ @@ -30166,7 +30129,7 @@ Normalize the string STR by the Unicode NFC and Mac OS's HFS Plus. ;;;*** ;;;### (autoloads (ununderline-region underline-region) "underline" -;;;;;; "textmodes/underline.el" (20309 60936)) +;;;;;; "textmodes/underline.el" (20355 10021)) ;;; Generated autoloads from textmodes/underline.el (autoload 'underline-region "underline" "\ @@ -30187,7 +30150,7 @@ which specify the range to operate on. ;;;*** ;;;### (autoloads (unrmail batch-unrmail) "unrmail" "mail/unrmail.el" -;;;;;; (20309 60936)) +;;;;;; (20369 14251)) ;;; Generated autoloads from mail/unrmail.el (autoload 'batch-unrmail "unrmail" "\ @@ -30206,8 +30169,8 @@ Convert old-style Rmail Babyl file FILE to system inbox format file TO-FILE. ;;;*** -;;;### (autoloads (unsafep) "unsafep" "emacs-lisp/unsafep.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (unsafep) "unsafep" "emacs-lisp/unsafep.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from emacs-lisp/unsafep.el (autoload 'unsafep "unsafep" "\ @@ -30220,7 +30183,7 @@ UNSAFEP-VARS is a list of symbols with local bindings. ;;;*** ;;;### (autoloads (url-retrieve-synchronously url-retrieve) "url" -;;;;;; "url/url.el" (20309 60936)) +;;;;;; "url/url.el" (20378 29222)) ;;; Generated autoloads from url/url.el (autoload 'url-retrieve "url" "\ @@ -30250,6 +30213,8 @@ take effect. If SILENT, then don't message progress reports and the like. If INHIBIT-COOKIES, cookies will neither be stored nor sent to the server. +If URL is a multibyte string, it will be encoded as utf-8 and +URL-encoded before it's used. \(fn URL CALLBACK &optional CBARGS SILENT INHIBIT-COOKIES)" nil nil) @@ -30264,7 +30229,7 @@ no further processing). URL is either a string or a parsed URL. ;;;*** ;;;### (autoloads (url-register-auth-scheme url-get-authentication) -;;;;;; "url-auth" "url/url-auth.el" (20309 60936)) +;;;;;; "url-auth" "url/url-auth.el" (20355 10021)) ;;; Generated autoloads from url/url-auth.el (autoload 'url-get-authentication "url-auth" "\ @@ -30306,7 +30271,7 @@ RATING a rating between 1 and 10 of the strength of the authentication. ;;;*** ;;;### (autoloads (url-cache-extract url-is-cached url-store-in-cache) -;;;;;; "url-cache" "url/url-cache.el" (20309 60936)) +;;;;;; "url-cache" "url/url-cache.el" (20355 10021)) ;;; Generated autoloads from url/url-cache.el (autoload 'url-store-in-cache "url-cache" "\ @@ -30327,7 +30292,7 @@ Extract FNAM from the local disk cache. ;;;*** -;;;### (autoloads (url-cid) "url-cid" "url/url-cid.el" (20309 60936)) +;;;### (autoloads (url-cid) "url-cid" "url/url-cid.el" (20355 10021)) ;;; Generated autoloads from url/url-cid.el (autoload 'url-cid "url-cid" "\ @@ -30338,7 +30303,7 @@ Extract FNAM from the local disk cache. ;;;*** ;;;### (autoloads (url-dav-vc-registered url-dav-supported-p) "url-dav" -;;;;;; "url/url-dav.el" (20309 60936)) +;;;;;; "url/url-dav.el" (20355 10021)) ;;; Generated autoloads from url/url-dav.el (autoload 'url-dav-supported-p "url-dav" "\ @@ -30353,8 +30318,8 @@ Extract FNAM from the local disk cache. ;;;*** -;;;### (autoloads (url-file) "url-file" "url/url-file.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (url-file) "url-file" "url/url-file.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from url/url-file.el (autoload 'url-file "url-file" "\ @@ -30365,7 +30330,7 @@ Handle file: and ftp: URLs. ;;;*** ;;;### (autoloads (url-open-stream url-gateway-nslookup-host) "url-gw" -;;;;;; "url/url-gw.el" (20309 60936)) +;;;;;; "url/url-gw.el" (20355 10021)) ;;; Generated autoloads from url/url-gw.el (autoload 'url-gateway-nslookup-host "url-gw" "\ @@ -30385,7 +30350,7 @@ Might do a non-blocking connection; use `process-status' to check. ;;;### (autoloads (url-insert-file-contents url-file-local-copy url-copy-file ;;;;;; url-file-handler url-handler-mode) "url-handlers" "url/url-handlers.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from url/url-handlers.el (defvar url-handler-mode nil "\ @@ -30440,7 +30405,7 @@ accessible. ;;;*** ;;;### (autoloads (url-http-options url-http-file-attributes url-http-file-exists-p -;;;;;; url-http) "url-http" "url/url-http.el" (20316 49235)) +;;;;;; url-http) "url-http" "url/url-http.el" (20355 10021)) ;;; Generated autoloads from url/url-http.el (autoload 'url-http "url-http" "\ @@ -30509,7 +30474,7 @@ HTTPS retrievals are asynchronous.") ;;;*** -;;;### (autoloads (url-irc) "url-irc" "url/url-irc.el" (20309 60936)) +;;;### (autoloads (url-irc) "url-irc" "url/url-irc.el" (20355 10021)) ;;; Generated autoloads from url/url-irc.el (autoload 'url-irc "url-irc" "\ @@ -30519,8 +30484,8 @@ HTTPS retrievals are asynchronous.") ;;;*** -;;;### (autoloads (url-ldap) "url-ldap" "url/url-ldap.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (url-ldap) "url-ldap" "url/url-ldap.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from url/url-ldap.el (autoload 'url-ldap "url-ldap" "\ @@ -30534,7 +30499,7 @@ URL can be a URL string, or a URL vector of the type returned by ;;;*** ;;;### (autoloads (url-mailto url-mail) "url-mailto" "url/url-mailto.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from url/url-mailto.el (autoload 'url-mail "url-mailto" "\ @@ -30550,7 +30515,7 @@ Handle the mailto: URL syntax. ;;;*** ;;;### (autoloads (url-data url-generic-emulator-loader url-info -;;;;;; url-man) "url-misc" "url/url-misc.el" (20309 60936)) +;;;;;; url-man) "url-misc" "url/url-misc.el" (20355 10021)) ;;; Generated autoloads from url/url-misc.el (autoload 'url-man "url-misc" "\ @@ -30582,7 +30547,7 @@ Fetch a data URL (RFC 2397). ;;;*** ;;;### (autoloads (url-snews url-news) "url-news" "url/url-news.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from url/url-news.el (autoload 'url-news "url-news" "\ @@ -30599,7 +30564,7 @@ Fetch a data URL (RFC 2397). ;;;### (autoloads (url-ns-user-pref url-ns-prefs isInNet isResolvable ;;;;;; dnsResolve dnsDomainIs isPlainHostName) "url-ns" "url/url-ns.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from url/url-ns.el (autoload 'isPlainHostName "url-ns" "\ @@ -30640,7 +30605,7 @@ Fetch a data URL (RFC 2397). ;;;*** ;;;### (autoloads (url-generic-parse-url url-recreate-url) "url-parse" -;;;;;; "url/url-parse.el" (20309 60936)) +;;;;;; "url/url-parse.el" (20355 10021)) ;;; Generated autoloads from url/url-parse.el (autoload 'url-recreate-url "url-parse" "\ @@ -30658,7 +30623,7 @@ TYPE USER PASSWORD HOST PORTSPEC FILENAME TARGET ATTRIBUTES FULLNESS. ;;;*** ;;;### (autoloads (url-setup-privacy-info) "url-privacy" "url/url-privacy.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from url/url-privacy.el (autoload 'url-setup-privacy-info "url-privacy" "\ @@ -30669,7 +30634,7 @@ Setup variables that expose info about you and your system. ;;;*** ;;;### (autoloads (url-queue-retrieve) "url-queue" "url/url-queue.el" -;;;;;; (20335 9743)) +;;;;;; (20355 10021)) ;;; Generated autoloads from url/url-queue.el (autoload 'url-queue-retrieve "url-queue" "\ @@ -30689,7 +30654,7 @@ The variable `url-queue-timeout' sets a timeout. ;;;;;; url-pretty-length url-strip-leading-spaces url-eat-trailing-space ;;;;;; url-get-normalized-date url-lazy-message url-normalize-url ;;;;;; url-insert-entities-in-string url-parse-args url-debug url-debug) -;;;;;; "url-util" "url/url-util.el" (20309 60936)) +;;;;;; "url-util" "url/url-util.el" (20356 27828)) ;;; Generated autoloads from url/url-util.el (defvar url-debug nil "\ @@ -30825,7 +30790,7 @@ This uses `url-current-object', set locally to the buffer. ;;;*** ;;;### (autoloads (ask-user-about-supersession-threat ask-user-about-lock) -;;;;;; "userlock" "userlock.el" (20309 60936)) +;;;;;; "userlock" "userlock.el" (20355 10021)) ;;; Generated autoloads from userlock.el (autoload 'ask-user-about-lock "userlock" "\ @@ -30855,7 +30820,7 @@ The buffer in question is current when this function is called. ;;;### (autoloads (utf-7-imap-pre-write-conversion utf-7-pre-write-conversion ;;;;;; utf-7-imap-post-read-conversion utf-7-post-read-conversion) -;;;;;; "utf-7" "international/utf-7.el" (20309 60936)) +;;;;;; "utf-7" "international/utf-7.el" (20355 10021)) ;;; Generated autoloads from international/utf-7.el (autoload 'utf-7-post-read-conversion "utf-7" "\ @@ -30880,7 +30845,7 @@ The buffer in question is current when this function is called. ;;;*** -;;;### (autoloads (utf7-encode) "utf7" "gnus/utf7.el" (20309 60936)) +;;;### (autoloads (utf7-encode) "utf7" "gnus/utf7.el" (20355 10021)) ;;; Generated autoloads from gnus/utf7.el (autoload 'utf7-encode "utf7" "\ @@ -30892,7 +30857,7 @@ Encode UTF-7 STRING. Use IMAP modification if FOR-IMAP is non-nil. ;;;### (autoloads (uudecode-decode-region uudecode-decode-region-internal ;;;;;; uudecode-decode-region-external) "uudecode" "mail/uudecode.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from mail/uudecode.el (autoload 'uudecode-decode-region-external "uudecode" "\ @@ -30922,8 +30887,8 @@ If FILE-NAME is non-nil, save the result to FILE-NAME. ;;;;;; vc-print-log vc-retrieve-tag vc-create-tag vc-merge vc-insert-headers ;;;;;; vc-revision-other-window vc-root-diff vc-ediff vc-version-ediff ;;;;;; vc-diff vc-version-diff vc-register vc-next-action vc-before-checkin-hook -;;;;;; vc-checkin-hook vc-checkout-hook) "vc" "vc/vc.el" (20333 -;;;;;; 51787)) +;;;;;; vc-checkin-hook vc-checkout-hook) "vc" "vc/vc.el" (20377 +;;;;;; 8374)) ;;; Generated autoloads from vc/vc.el (defvar vc-checkout-hook nil "\ @@ -31201,7 +31166,7 @@ Return the branch part of a revision number REV. ;;;*** ;;;### (autoloads (vc-annotate) "vc-annotate" "vc/vc-annotate.el" -;;;;;; (20309 60936)) +;;;;;; (20356 55829)) ;;; Generated autoloads from vc/vc-annotate.el (autoload 'vc-annotate "vc-annotate" "\ @@ -31238,7 +31203,7 @@ mode-specific menu. `vc-annotate-color-map' and ;;;*** -;;;### (autoloads nil "vc-arch" "vc/vc-arch.el" (20309 60936)) +;;;### (autoloads nil "vc-arch" "vc/vc-arch.el" (20377 8374)) ;;; Generated autoloads from vc/vc-arch.el (defun vc-arch-registered (file) (if (vc-find-root file "{arch}/=tagging-method") @@ -31248,7 +31213,7 @@ mode-specific menu. `vc-annotate-color-map' and ;;;*** -;;;### (autoloads nil "vc-bzr" "vc/vc-bzr.el" (20332 33075)) +;;;### (autoloads nil "vc-bzr" "vc/vc-bzr.el" (20377 8374)) ;;; Generated autoloads from vc/vc-bzr.el (defconst vc-bzr-admin-dirname ".bzr" "\ @@ -31264,7 +31229,7 @@ Name of the format file in a .bzr directory.") ;;;*** -;;;### (autoloads nil "vc-cvs" "vc/vc-cvs.el" (20309 60936)) +;;;### (autoloads nil "vc-cvs" "vc/vc-cvs.el" (20377 8374)) ;;; Generated autoloads from vc/vc-cvs.el (defun vc-cvs-registered (f) "Return non-nil if file F is registered with CVS." @@ -31275,7 +31240,7 @@ Name of the format file in a .bzr directory.") ;;;*** -;;;### (autoloads (vc-dir) "vc-dir" "vc/vc-dir.el" (20309 60936)) +;;;### (autoloads (vc-dir) "vc-dir" "vc/vc-dir.el" (20377 8374)) ;;; Generated autoloads from vc/vc-dir.el (autoload 'vc-dir "vc-dir" "\ @@ -31300,7 +31265,7 @@ These are the commands available for use in the file status buffer: ;;;*** ;;;### (autoloads (vc-do-command) "vc-dispatcher" "vc/vc-dispatcher.el" -;;;;;; (20309 60936)) +;;;;;; (20364 45187)) ;;; Generated autoloads from vc/vc-dispatcher.el (autoload 'vc-do-command "vc-dispatcher" "\ @@ -31323,7 +31288,7 @@ case, and the process object in the asynchronous case. ;;;*** -;;;### (autoloads nil "vc-git" "vc/vc-git.el" (20341 24416)) +;;;### (autoloads nil "vc-git" "vc/vc-git.el" (20378 29222)) ;;; Generated autoloads from vc/vc-git.el (defun vc-git-registered (file) "Return non-nil if FILE is registered with git." @@ -31334,7 +31299,7 @@ case, and the process object in the asynchronous case. ;;;*** -;;;### (autoloads nil "vc-hg" "vc/vc-hg.el" (20320 14810)) +;;;### (autoloads nil "vc-hg" "vc/vc-hg.el" (20377 8374)) ;;; Generated autoloads from vc/vc-hg.el (defun vc-hg-registered (file) "Return non-nil if FILE is registered with hg." @@ -31345,7 +31310,7 @@ case, and the process object in the asynchronous case. ;;;*** -;;;### (autoloads nil "vc-mtn" "vc/vc-mtn.el" (20309 60936)) +;;;### (autoloads nil "vc-mtn" "vc/vc-mtn.el" (20377 8374)) ;;; Generated autoloads from vc/vc-mtn.el (defconst vc-mtn-admin-dir "_MTN" "\ @@ -31362,7 +31327,7 @@ Name of the monotone directory's format file.") ;;;*** ;;;### (autoloads (vc-rcs-master-templates) "vc-rcs" "vc/vc-rcs.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from vc/vc-rcs.el (defvar vc-rcs-master-templates (purecopy '("%sRCS/%s,v" "%s%s,v" "%sRCS/%s")) "\ @@ -31376,7 +31341,7 @@ For a description of possible values, see `vc-check-master-templates'.") ;;;*** ;;;### (autoloads (vc-sccs-master-templates) "vc-sccs" "vc/vc-sccs.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from vc/vc-sccs.el (defvar vc-sccs-master-templates (purecopy '("%sSCCS/s.%s" "%ss.%s" vc-sccs-search-project-dir)) "\ @@ -31393,7 +31358,7 @@ find any project directory." (let ((project-dir (getenv "PROJECTDIR")) dirs dir) ;;;*** -;;;### (autoloads nil "vc-svn" "vc/vc-svn.el" (20309 60936)) +;;;### (autoloads nil "vc-svn" "vc/vc-svn.el" (20355 10021)) ;;; Generated autoloads from vc/vc-svn.el (defun vc-svn-registered (f) (let ((admin-dir (cond ((and (eq system-type 'windows-nt) @@ -31407,7 +31372,7 @@ find any project directory." (let ((project-dir (getenv "PROJECTDIR")) dirs dir) ;;;*** ;;;### (autoloads (vera-mode) "vera-mode" "progmodes/vera-mode.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from progmodes/vera-mode.el (add-to-list 'auto-mode-alist (cons (purecopy "\\.vr[hi]?\\'") 'vera-mode)) @@ -31465,7 +31430,7 @@ Key bindings: ;;;*** ;;;### (autoloads (verilog-mode) "verilog-mode" "progmodes/verilog-mode.el" -;;;;;; (20309 60936)) +;;;;;; (20373 11301)) ;;; Generated autoloads from progmodes/verilog-mode.el (autoload 'verilog-mode "verilog-mode" "\ @@ -31604,7 +31569,7 @@ Key bindings specific to `verilog-mode-map' are: ;;;*** ;;;### (autoloads (vhdl-mode) "vhdl-mode" "progmodes/vhdl-mode.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from progmodes/vhdl-mode.el (autoload 'vhdl-mode "vhdl-mode" "\ @@ -32145,7 +32110,7 @@ Key bindings: ;;;*** -;;;### (autoloads (vi-mode) "vi" "emulation/vi.el" (20309 60936)) +;;;### (autoloads (vi-mode) "vi" "emulation/vi.el" (20355 10021)) ;;; Generated autoloads from emulation/vi.el (autoload 'vi-mode "vi" "\ @@ -32200,7 +32165,7 @@ Syntax table and abbrevs while in vi mode remain as they were in Emacs. ;;;### (autoloads (viqr-pre-write-conversion viqr-post-read-conversion ;;;;;; viet-encode-viqr-buffer viet-encode-viqr-region viet-decode-viqr-buffer ;;;;;; viet-decode-viqr-region viet-encode-viscii-char) "viet-util" -;;;;;; "language/viet-util.el" (20309 60936)) +;;;;;; "language/viet-util.el" (20355 10021)) ;;; Generated autoloads from language/viet-util.el (autoload 'viet-encode-viscii-char "viet-util" "\ @@ -32248,7 +32213,7 @@ Convert Vietnamese characters of the current buffer to `VIQR' mnemonics. ;;;;;; view-mode view-buffer-other-frame view-buffer-other-window ;;;;;; view-buffer view-file-other-frame view-file-other-window ;;;;;; view-file kill-buffer-if-not-modified view-remove-frame-by-deleting) -;;;;;; "view" "view.el" (20324 28875)) +;;;;;; "view" "view.el" (20355 10021)) ;;; Generated autoloads from view.el (defvar view-remove-frame-by-deleting t "\ @@ -32502,8 +32467,8 @@ Exit View mode and make the current buffer editable. ;;;*** -;;;### (autoloads (vip-mode vip-setup) "vip" "emulation/vip.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (vip-mode vip-setup) "vip" "emulation/vip.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from emulation/vip.el (autoload 'vip-setup "vip" "\ @@ -32519,7 +32484,7 @@ Turn on VIP emulation of VI. ;;;*** ;;;### (autoloads (viper-mode toggle-viper-mode) "viper" "emulation/viper.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from emulation/viper.el (autoload 'toggle-viper-mode "viper" "\ @@ -32536,7 +32501,7 @@ Turn on Viper emulation of Vi in Emacs. See Info node `(viper)Top'. ;;;*** ;;;### (autoloads (warn lwarn display-warning) "warnings" "emacs-lisp/warnings.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from emacs-lisp/warnings.el (defvar warning-prefix-function nil "\ @@ -32626,7 +32591,7 @@ this is equivalent to `display-warning', using ;;;*** ;;;### (autoloads (wdired-change-to-wdired-mode) "wdired" "wdired.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from wdired.el (autoload 'wdired-change-to-wdired-mode "wdired" "\ @@ -32642,7 +32607,7 @@ See `wdired-mode'. ;;;*** -;;;### (autoloads (webjump) "webjump" "net/webjump.el" (20309 60936)) +;;;### (autoloads (webjump) "webjump" "net/webjump.el" (20355 10021)) ;;; Generated autoloads from net/webjump.el (autoload 'webjump "webjump" "\ @@ -32659,7 +32624,7 @@ Please submit bug reports and other feedback to the author, Neil W. Van Dyke ;;;*** ;;;### (autoloads (which-function-mode which-func-mode) "which-func" -;;;;;; "progmodes/which-func.el" (20309 60936)) +;;;;;; "progmodes/which-func.el" (20378 29222)) ;;; Generated autoloads from progmodes/which-func.el (put 'which-func-format 'risky-local-variable t) (put 'which-func-current 'risky-local-variable t) @@ -32695,7 +32660,7 @@ in certain major modes. ;;;### (autoloads (whitespace-report-region whitespace-report whitespace-cleanup-region ;;;;;; whitespace-cleanup global-whitespace-toggle-options whitespace-toggle-options ;;;;;; global-whitespace-newline-mode global-whitespace-mode whitespace-newline-mode -;;;;;; whitespace-mode) "whitespace" "whitespace.el" (20309 60936)) +;;;;;; whitespace-mode) "whitespace" "whitespace.el" (20355 10021)) ;;; Generated autoloads from whitespace.el (autoload 'whitespace-mode "whitespace" "\ @@ -33094,7 +33059,7 @@ cleaning up these problems. ;;;*** ;;;### (autoloads (widget-minor-mode widget-browse-other-window widget-browse -;;;;;; widget-browse-at) "wid-browse" "wid-browse.el" (20309 60936)) +;;;;;; widget-browse-at) "wid-browse" "wid-browse.el" (20355 10021)) ;;; Generated autoloads from wid-browse.el (autoload 'widget-browse-at "wid-browse" "\ @@ -33123,8 +33088,8 @@ if ARG is omitted or nil. ;;;*** ;;;### (autoloads (widget-setup widget-insert widget-delete widget-create -;;;;;; widget-prompt-value widgetp) "wid-edit" "wid-edit.el" (20329 -;;;;;; 31524)) +;;;;;; widget-prompt-value widgetp) "wid-edit" "wid-edit.el" (20373 +;;;;;; 11301)) ;;; Generated autoloads from wid-edit.el (autoload 'widgetp "wid-edit" "\ @@ -33167,8 +33132,8 @@ Setup current buffer so editing string widgets works. ;;;*** ;;;### (autoloads (windmove-default-keybindings windmove-down windmove-right -;;;;;; windmove-up windmove-left) "windmove" "windmove.el" (20309 -;;;;;; 60936)) +;;;;;; windmove-up windmove-left) "windmove" "windmove.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from windmove.el (autoload 'windmove-left "windmove" "\ @@ -33221,7 +33186,7 @@ Default MODIFIER is 'shift. ;;;*** ;;;### (autoloads (winner-mode winner-mode) "winner" "winner.el" -;;;;;; (20309 60936)) +;;;;;; (20355 10021)) ;;; Generated autoloads from winner.el (defvar winner-mode nil "\ @@ -33240,7 +33205,7 @@ With arg, turn Winner mode on if and only if arg is positive. ;;;*** ;;;### (autoloads (woman-bookmark-jump woman-find-file woman-dired-find-file -;;;;;; woman woman-locale) "woman" "woman.el" (20309 60936)) +;;;;;; woman woman-locale) "woman" "woman.el" (20370 35109)) ;;; Generated autoloads from woman.el (defvar woman-locale nil "\ @@ -33289,7 +33254,7 @@ Default bookmark handler for Woman buffers. ;;;*** ;;;### (autoloads (wordstar-mode) "ws-mode" "emulation/ws-mode.el" -;;;;;; (20320 14810)) +;;;;;; (20355 10021)) ;;; Generated autoloads from emulation/ws-mode.el (autoload 'wordstar-mode "ws-mode" "\ @@ -33401,7 +33366,7 @@ The key bindings are: ;;;*** -;;;### (autoloads (xesam-search) "xesam" "net/xesam.el" (20309 60936)) +;;;### (autoloads (xesam-search) "xesam" "net/xesam.el" (20374 32165)) ;;; Generated autoloads from net/xesam.el (autoload 'xesam-search "xesam" "\ @@ -33421,7 +33386,7 @@ Example: ;;;*** ;;;### (autoloads (xml-parse-region xml-parse-file) "xml" "xml.el" -;;;;;; (20309 60936)) +;;;;;; (20378 29222)) ;;; Generated autoloads from xml.el (autoload 'xml-parse-file "xml" "\ @@ -33447,7 +33412,7 @@ If PARSE-NS is non-nil, then QNAMES are expanded. ;;;*** ;;;### (autoloads (xmltok-get-declared-encoding-position) "xmltok" -;;;;;; "nxml/xmltok.el" (20309 60936)) +;;;;;; "nxml/xmltok.el" (20355 10021)) ;;; Generated autoloads from nxml/xmltok.el (autoload 'xmltok-get-declared-encoding-position "xmltok" "\ @@ -33465,8 +33430,8 @@ If LIMIT is non-nil, then do not consider characters beyond LIMIT. ;;;*** -;;;### (autoloads (xterm-mouse-mode) "xt-mouse" "xt-mouse.el" (20309 -;;;;;; 60936)) +;;;### (autoloads (xterm-mouse-mode) "xt-mouse" "xt-mouse.el" (20355 +;;;;;; 10021)) ;;; Generated autoloads from xt-mouse.el (defvar xterm-mouse-mode nil "\ @@ -33496,7 +33461,7 @@ down the SHIFT key while pressing the mouse button. ;;;*** ;;;### (autoloads (yenc-extract-filename yenc-decode-region) "yenc" -;;;;;; "gnus/yenc.el" (20309 60936)) +;;;;;; "gnus/yenc.el" (20355 10021)) ;;; Generated autoloads from gnus/yenc.el (autoload 'yenc-decode-region "yenc" "\ @@ -33512,7 +33477,7 @@ Extract file name from an yenc header. ;;;*** ;;;### (autoloads (psychoanalyze-pinhead apropos-zippy insert-zippyism -;;;;;; yow) "yow" "play/yow.el" (20309 60936)) +;;;;;; yow) "yow" "play/yow.el" (20364 42504)) ;;; Generated autoloads from play/yow.el (autoload 'yow "yow" "\ @@ -33538,7 +33503,7 @@ Zippy goes to the analyst. ;;;*** -;;;### (autoloads (zone) "zone" "play/zone.el" (20309 60936)) +;;;### (autoloads (zone) "zone" "play/zone.el" (20355 10021)) ;;; Generated autoloads from play/zone.el (autoload 'zone "zone" "\ @@ -33554,46 +33519,47 @@ Zone out, completely. ;;;;;; "calc/calc-fin.el" "calc/calc-forms.el" "calc/calc-frac.el" ;;;;;; "calc/calc-funcs.el" "calc/calc-graph.el" "calc/calc-help.el" ;;;;;; "calc/calc-incom.el" "calc/calc-keypd.el" "calc/calc-lang.el" -;;;;;; "calc/calc-macs.el" "calc/calc-map.el" "calc/calc-math.el" -;;;;;; "calc/calc-menu.el" "calc/calc-misc.el" "calc/calc-mode.el" -;;;;;; "calc/calc-mtx.el" "calc/calc-nlfit.el" "calc/calc-poly.el" -;;;;;; "calc/calc-prog.el" "calc/calc-rewr.el" "calc/calc-rules.el" -;;;;;; "calc/calc-sel.el" "calc/calc-stat.el" "calc/calc-store.el" -;;;;;; "calc/calc-stuff.el" "calc/calc-trail.el" "calc/calc-units.el" -;;;;;; "calc/calc-vec.el" "calc/calc-yank.el" "calc/calcalg2.el" -;;;;;; "calc/calcalg3.el" "calc/calccomp.el" "calc/calcsel2.el" -;;;;;; "calendar/cal-bahai.el" "calendar/cal-coptic.el" "calendar/cal-french.el" -;;;;;; "calendar/cal-html.el" "calendar/cal-islam.el" "calendar/cal-iso.el" -;;;;;; "calendar/cal-julian.el" "calendar/cal-loaddefs.el" "calendar/cal-mayan.el" -;;;;;; "calendar/cal-menu.el" "calendar/cal-move.el" "calendar/cal-persia.el" -;;;;;; "calendar/cal-tex.el" "calendar/cal-x.el" "calendar/diary-loaddefs.el" -;;;;;; "calendar/hol-loaddefs.el" "cdl.el" "cedet/cedet-cscope.el" -;;;;;; "cedet/cedet-files.el" "cedet/cedet-global.el" "cedet/cedet-idutils.el" -;;;;;; "cedet/cedet.el" "cedet/ede/auto.el" "cedet/ede/autoconf-edit.el" -;;;;;; "cedet/ede/base.el" "cedet/ede/cpp-root.el" "cedet/ede/custom.el" -;;;;;; "cedet/ede/dired.el" "cedet/ede/emacs.el" "cedet/ede/files.el" -;;;;;; "cedet/ede/generic.el" "cedet/ede/linux.el" "cedet/ede/locate.el" -;;;;;; "cedet/ede/make.el" "cedet/ede/makefile-edit.el" "cedet/ede/pconf.el" -;;;;;; "cedet/ede/pmake.el" "cedet/ede/proj-archive.el" "cedet/ede/proj-aux.el" -;;;;;; "cedet/ede/proj-comp.el" "cedet/ede/proj-elisp.el" "cedet/ede/proj-info.el" -;;;;;; "cedet/ede/proj-misc.el" "cedet/ede/proj-obj.el" "cedet/ede/proj-prog.el" -;;;;;; "cedet/ede/proj-scheme.el" "cedet/ede/proj-shared.el" "cedet/ede/proj.el" -;;;;;; "cedet/ede/project-am.el" "cedet/ede/shell.el" "cedet/ede/simple.el" -;;;;;; "cedet/ede/source.el" "cedet/ede/speedbar.el" "cedet/ede/srecode.el" -;;;;;; "cedet/ede/system.el" "cedet/ede/util.el" "cedet/inversion.el" -;;;;;; "cedet/mode-local.el" "cedet/pulse.el" "cedet/semantic/analyze.el" -;;;;;; "cedet/semantic/analyze/complete.el" "cedet/semantic/analyze/debug.el" -;;;;;; "cedet/semantic/analyze/fcn.el" "cedet/semantic/analyze/refs.el" -;;;;;; "cedet/semantic/bovine.el" "cedet/semantic/bovine/c-by.el" -;;;;;; "cedet/semantic/bovine/c.el" "cedet/semantic/bovine/debug.el" -;;;;;; "cedet/semantic/bovine/el.el" "cedet/semantic/bovine/gcc.el" -;;;;;; "cedet/semantic/bovine/make-by.el" "cedet/semantic/bovine/make.el" -;;;;;; "cedet/semantic/bovine/scm-by.el" "cedet/semantic/bovine/scm.el" -;;;;;; "cedet/semantic/chart.el" "cedet/semantic/complete.el" "cedet/semantic/ctxt.el" -;;;;;; "cedet/semantic/db-debug.el" "cedet/semantic/db-ebrowse.el" -;;;;;; "cedet/semantic/db-el.el" "cedet/semantic/db-file.el" "cedet/semantic/db-find.el" -;;;;;; "cedet/semantic/db-global.el" "cedet/semantic/db-javascript.el" -;;;;;; "cedet/semantic/db-mode.el" "cedet/semantic/db-ref.el" "cedet/semantic/db-typecache.el" +;;;;;; "calc/calc-loaddefs.el" "calc/calc-macs.el" "calc/calc-map.el" +;;;;;; "calc/calc-math.el" "calc/calc-menu.el" "calc/calc-misc.el" +;;;;;; "calc/calc-mode.el" "calc/calc-mtx.el" "calc/calc-nlfit.el" +;;;;;; "calc/calc-poly.el" "calc/calc-prog.el" "calc/calc-rewr.el" +;;;;;; "calc/calc-rules.el" "calc/calc-sel.el" "calc/calc-stat.el" +;;;;;; "calc/calc-store.el" "calc/calc-stuff.el" "calc/calc-trail.el" +;;;;;; "calc/calc-units.el" "calc/calc-vec.el" "calc/calc-yank.el" +;;;;;; "calc/calcalg2.el" "calc/calcalg3.el" "calc/calccomp.el" +;;;;;; "calc/calcsel2.el" "calendar/cal-bahai.el" "calendar/cal-coptic.el" +;;;;;; "calendar/cal-french.el" "calendar/cal-html.el" "calendar/cal-islam.el" +;;;;;; "calendar/cal-iso.el" "calendar/cal-julian.el" "calendar/cal-loaddefs.el" +;;;;;; "calendar/cal-mayan.el" "calendar/cal-menu.el" "calendar/cal-move.el" +;;;;;; "calendar/cal-persia.el" "calendar/cal-tex.el" "calendar/cal-x.el" +;;;;;; "calendar/diary-loaddefs.el" "calendar/hol-loaddefs.el" "cdl.el" +;;;;;; "cedet/cedet-cscope.el" "cedet/cedet-files.el" "cedet/cedet-global.el" +;;;;;; "cedet/cedet-idutils.el" "cedet/cedet.el" "cedet/ede/auto.el" +;;;;;; "cedet/ede/autoconf-edit.el" "cedet/ede/base.el" "cedet/ede/cpp-root.el" +;;;;;; "cedet/ede/custom.el" "cedet/ede/dired.el" "cedet/ede/emacs.el" +;;;;;; "cedet/ede/files.el" "cedet/ede/generic.el" "cedet/ede/linux.el" +;;;;;; "cedet/ede/loaddefs.el" "cedet/ede/locate.el" "cedet/ede/make.el" +;;;;;; "cedet/ede/makefile-edit.el" "cedet/ede/pconf.el" "cedet/ede/pmake.el" +;;;;;; "cedet/ede/proj-archive.el" "cedet/ede/proj-aux.el" "cedet/ede/proj-comp.el" +;;;;;; "cedet/ede/proj-elisp.el" "cedet/ede/proj-info.el" "cedet/ede/proj-misc.el" +;;;;;; "cedet/ede/proj-obj.el" "cedet/ede/proj-prog.el" "cedet/ede/proj-scheme.el" +;;;;;; "cedet/ede/proj-shared.el" "cedet/ede/proj.el" "cedet/ede/project-am.el" +;;;;;; "cedet/ede/shell.el" "cedet/ede/simple.el" "cedet/ede/source.el" +;;;;;; "cedet/ede/speedbar.el" "cedet/ede/srecode.el" "cedet/ede/system.el" +;;;;;; "cedet/ede/util.el" "cedet/inversion.el" "cedet/mode-local.el" +;;;;;; "cedet/pulse.el" "cedet/semantic/analyze.el" "cedet/semantic/analyze/complete.el" +;;;;;; "cedet/semantic/analyze/debug.el" "cedet/semantic/analyze/fcn.el" +;;;;;; "cedet/semantic/analyze/refs.el" "cedet/semantic/bovine.el" +;;;;;; "cedet/semantic/bovine/c-by.el" "cedet/semantic/bovine/c.el" +;;;;;; "cedet/semantic/bovine/debug.el" "cedet/semantic/bovine/el.el" +;;;;;; "cedet/semantic/bovine/gcc.el" "cedet/semantic/bovine/make-by.el" +;;;;;; "cedet/semantic/bovine/make.el" "cedet/semantic/bovine/scm-by.el" +;;;;;; "cedet/semantic/bovine/scm.el" "cedet/semantic/chart.el" +;;;;;; "cedet/semantic/complete.el" "cedet/semantic/ctxt.el" "cedet/semantic/db-debug.el" +;;;;;; "cedet/semantic/db-ebrowse.el" "cedet/semantic/db-el.el" +;;;;;; "cedet/semantic/db-file.el" "cedet/semantic/db-find.el" "cedet/semantic/db-global.el" +;;;;;; "cedet/semantic/db-javascript.el" "cedet/semantic/db-mode.el" +;;;;;; "cedet/semantic/db-ref.el" "cedet/semantic/db-typecache.el" ;;;;;; "cedet/semantic/db.el" "cedet/semantic/debug.el" "cedet/semantic/decorate.el" ;;;;;; "cedet/semantic/decorate/include.el" "cedet/semantic/decorate/mode.el" ;;;;;; "cedet/semantic/dep.el" "cedet/semantic/doc.el" "cedet/semantic/ede-grammar.el" @@ -33601,13 +33567,13 @@ Zone out, completely. ;;;;;; "cedet/semantic/fw.el" "cedet/semantic/grammar-wy.el" "cedet/semantic/grammar.el" ;;;;;; "cedet/semantic/html.el" "cedet/semantic/ia-sb.el" "cedet/semantic/ia.el" ;;;;;; "cedet/semantic/idle.el" "cedet/semantic/imenu.el" "cedet/semantic/java.el" -;;;;;; "cedet/semantic/lex-spp.el" "cedet/semantic/lex.el" "cedet/semantic/mru-bookmark.el" -;;;;;; "cedet/semantic/sb.el" "cedet/semantic/scope.el" "cedet/semantic/senator.el" -;;;;;; "cedet/semantic/sort.el" "cedet/semantic/symref.el" "cedet/semantic/symref/cscope.el" -;;;;;; "cedet/semantic/symref/filter.el" "cedet/semantic/symref/global.el" -;;;;;; "cedet/semantic/symref/grep.el" "cedet/semantic/symref/idutils.el" -;;;;;; "cedet/semantic/symref/list.el" "cedet/semantic/tag-file.el" -;;;;;; "cedet/semantic/tag-ls.el" "cedet/semantic/tag-write.el" +;;;;;; "cedet/semantic/lex-spp.el" "cedet/semantic/lex.el" "cedet/semantic/loaddefs.el" +;;;;;; "cedet/semantic/mru-bookmark.el" "cedet/semantic/sb.el" "cedet/semantic/scope.el" +;;;;;; "cedet/semantic/senator.el" "cedet/semantic/sort.el" "cedet/semantic/symref.el" +;;;;;; "cedet/semantic/symref/cscope.el" "cedet/semantic/symref/filter.el" +;;;;;; "cedet/semantic/symref/global.el" "cedet/semantic/symref/grep.el" +;;;;;; "cedet/semantic/symref/idutils.el" "cedet/semantic/symref/list.el" +;;;;;; "cedet/semantic/tag-file.el" "cedet/semantic/tag-ls.el" "cedet/semantic/tag-write.el" ;;;;;; "cedet/semantic/tag.el" "cedet/semantic/texi.el" "cedet/semantic/util-modes.el" ;;;;;; "cedet/semantic/util.el" "cedet/semantic/wisent.el" "cedet/semantic/wisent/comp.el" ;;;;;; "cedet/semantic/wisent/java-tags.el" "cedet/semantic/wisent/javascript.el" @@ -33619,11 +33585,11 @@ Zone out, completely. ;;;;;; "cedet/srecode/el.el" "cedet/srecode/expandproto.el" "cedet/srecode/extract.el" ;;;;;; "cedet/srecode/fields.el" "cedet/srecode/filters.el" "cedet/srecode/find.el" ;;;;;; "cedet/srecode/getset.el" "cedet/srecode/insert.el" "cedet/srecode/java.el" -;;;;;; "cedet/srecode/map.el" "cedet/srecode/mode.el" "cedet/srecode/semantic.el" -;;;;;; "cedet/srecode/srt-wy.el" "cedet/srecode/srt.el" "cedet/srecode/table.el" -;;;;;; "cedet/srecode/template.el" "cedet/srecode/texi.el" "cus-dep.el" -;;;;;; "dframe.el" "dired-aux.el" "dired-x.el" "dos-fns.el" "dos-vars.el" -;;;;;; "dos-w32.el" "dynamic-setting.el" "emacs-lisp/assoc.el" "emacs-lisp/authors.el" +;;;;;; "cedet/srecode/loaddefs.el" "cedet/srecode/map.el" "cedet/srecode/mode.el" +;;;;;; "cedet/srecode/semantic.el" "cedet/srecode/srt-wy.el" "cedet/srecode/srt.el" +;;;;;; "cedet/srecode/table.el" "cedet/srecode/template.el" "cedet/srecode/texi.el" +;;;;;; "cus-dep.el" "dframe.el" "dired-aux.el" "dired-x.el" "dos-fns.el" +;;;;;; "dos-vars.el" "dos-w32.el" "dynamic-setting.el" "emacs-lisp/authors.el" ;;;;;; "emacs-lisp/avl-tree.el" "emacs-lisp/bindat.el" "emacs-lisp/byte-opt.el" ;;;;;; "emacs-lisp/chart.el" "emacs-lisp/cl-extra.el" "emacs-lisp/cl-loaddefs.el" ;;;;;; "emacs-lisp/cl-macs.el" "emacs-lisp/cl-seq.el" "emacs-lisp/cl-specs.el" @@ -33644,31 +33610,32 @@ Zone out, completely. ;;;;;; "eshell/em-pred.el" "eshell/em-prompt.el" "eshell/em-rebind.el" ;;;;;; "eshell/em-script.el" "eshell/em-smart.el" "eshell/em-term.el" ;;;;;; "eshell/em-unix.el" "eshell/em-xtra.el" "eshell/esh-arg.el" -;;;;;; "eshell/esh-cmd.el" "eshell/esh-ext.el" "eshell/esh-io.el" -;;;;;; "eshell/esh-module.el" "eshell/esh-opt.el" "eshell/esh-proc.el" -;;;;;; "eshell/esh-util.el" "eshell/esh-var.el" "ezimage.el" "foldout.el" -;;;;;; "format-spec.el" "forms-d2.el" "forms-pass.el" "fringe.el" -;;;;;; "generic-x.el" "gnus/compface.el" "gnus/gnus-async.el" "gnus/gnus-bcklg.el" -;;;;;; "gnus/gnus-cite.el" "gnus/gnus-cus.el" "gnus/gnus-demon.el" -;;;;;; "gnus/gnus-dup.el" "gnus/gnus-eform.el" "gnus/gnus-ems.el" -;;;;;; "gnus/gnus-int.el" "gnus/gnus-logic.el" "gnus/gnus-mh.el" -;;;;;; "gnus/gnus-salt.el" "gnus/gnus-score.el" "gnus/gnus-setup.el" -;;;;;; "gnus/gnus-srvr.el" "gnus/gnus-topic.el" "gnus/gnus-undo.el" -;;;;;; "gnus/gnus-util.el" "gnus/gnus-uu.el" "gnus/gnus-vm.el" "gnus/gssapi.el" -;;;;;; "gnus/ietf-drums.el" "gnus/legacy-gnus-agent.el" "gnus/mail-parse.el" -;;;;;; "gnus/mail-prsvr.el" "gnus/mail-source.el" "gnus/mailcap.el" -;;;;;; "gnus/messcompat.el" "gnus/mm-bodies.el" "gnus/mm-decode.el" -;;;;;; "gnus/mm-util.el" "gnus/mm-view.el" "gnus/mml-sec.el" "gnus/mml-smime.el" -;;;;;; "gnus/nnagent.el" "gnus/nnbabyl.el" "gnus/nndir.el" "gnus/nndraft.el" -;;;;;; "gnus/nneething.el" "gnus/nngateway.el" "gnus/nnheader.el" -;;;;;; "gnus/nnimap.el" "gnus/nnir.el" "gnus/nnmail.el" "gnus/nnmaildir.el" -;;;;;; "gnus/nnmairix.el" "gnus/nnmbox.el" "gnus/nnmh.el" "gnus/nnnil.el" -;;;;;; "gnus/nnoo.el" "gnus/nnregistry.el" "gnus/nnrss.el" "gnus/nnspool.el" -;;;;;; "gnus/nntp.el" "gnus/nnvirtual.el" "gnus/nnweb.el" "gnus/registry.el" -;;;;;; "gnus/rfc1843.el" "gnus/rfc2045.el" "gnus/rfc2047.el" "gnus/rfc2104.el" -;;;;;; "gnus/rfc2231.el" "gnus/rtree.el" "gnus/shr-color.el" "gnus/sieve-manage.el" -;;;;;; "gnus/smime.el" "gnus/spam-stat.el" "gnus/spam-wash.el" "hex-util.el" -;;;;;; "hfy-cmap.el" "ibuf-ext.el" "international/cp51932.el" "international/eucjp-ms.el" +;;;;;; "eshell/esh-cmd.el" "eshell/esh-ext.el" "eshell/esh-groups.el" +;;;;;; "eshell/esh-io.el" "eshell/esh-module.el" "eshell/esh-opt.el" +;;;;;; "eshell/esh-proc.el" "eshell/esh-util.el" "eshell/esh-var.el" +;;;;;; "ezimage.el" "foldout.el" "format-spec.el" "forms-d2.el" +;;;;;; "forms-pass.el" "fringe.el" "generic-x.el" "gnus/compface.el" +;;;;;; "gnus/gnus-async.el" "gnus/gnus-bcklg.el" "gnus/gnus-cite.el" +;;;;;; "gnus/gnus-cus.el" "gnus/gnus-demon.el" "gnus/gnus-dup.el" +;;;;;; "gnus/gnus-eform.el" "gnus/gnus-ems.el" "gnus/gnus-int.el" +;;;;;; "gnus/gnus-logic.el" "gnus/gnus-mh.el" "gnus/gnus-salt.el" +;;;;;; "gnus/gnus-score.el" "gnus/gnus-setup.el" "gnus/gnus-srvr.el" +;;;;;; "gnus/gnus-topic.el" "gnus/gnus-undo.el" "gnus/gnus-util.el" +;;;;;; "gnus/gnus-uu.el" "gnus/gnus-vm.el" "gnus/gssapi.el" "gnus/ietf-drums.el" +;;;;;; "gnus/legacy-gnus-agent.el" "gnus/mail-parse.el" "gnus/mail-prsvr.el" +;;;;;; "gnus/mail-source.el" "gnus/mailcap.el" "gnus/messcompat.el" +;;;;;; "gnus/mm-bodies.el" "gnus/mm-decode.el" "gnus/mm-util.el" +;;;;;; "gnus/mm-view.el" "gnus/mml-sec.el" "gnus/mml-smime.el" "gnus/nnagent.el" +;;;;;; "gnus/nnbabyl.el" "gnus/nndir.el" "gnus/nndraft.el" "gnus/nneething.el" +;;;;;; "gnus/nngateway.el" "gnus/nnheader.el" "gnus/nnimap.el" "gnus/nnir.el" +;;;;;; "gnus/nnmail.el" "gnus/nnmaildir.el" "gnus/nnmairix.el" "gnus/nnmbox.el" +;;;;;; "gnus/nnmh.el" "gnus/nnnil.el" "gnus/nnoo.el" "gnus/nnregistry.el" +;;;;;; "gnus/nnrss.el" "gnus/nnspool.el" "gnus/nntp.el" "gnus/nnvirtual.el" +;;;;;; "gnus/nnweb.el" "gnus/registry.el" "gnus/rfc1843.el" "gnus/rfc2045.el" +;;;;;; "gnus/rfc2047.el" "gnus/rfc2104.el" "gnus/rfc2231.el" "gnus/rtree.el" +;;;;;; "gnus/shr-color.el" "gnus/sieve-manage.el" "gnus/smime.el" +;;;;;; "gnus/spam-stat.el" "gnus/spam-wash.el" "hex-util.el" "hfy-cmap.el" +;;;;;; "ibuf-ext.el" "international/cp51932.el" "international/eucjp-ms.el" ;;;;;; "international/fontset.el" "international/iso-ascii.el" "international/ja-dic-cnv.el" ;;;;;; "international/ja-dic-utl.el" "international/ogonek.el" "international/uni-bidi.el" ;;;;;; "international/uni-category.el" "international/uni-combining.el" @@ -33679,14 +33646,13 @@ Zone out, completely. ;;;;;; "international/uni-old-name.el" "international/uni-titlecase.el" ;;;;;; "international/uni-uppercase.el" "json.el" "kermit.el" "language/hanja-util.el" ;;;;;; "language/thai-word.el" "ldefs-boot.el" "loadup.el" "mail/blessmail.el" -;;;;;; "mail/mailheader.el" "mail/mailpost.el" "mail/mspools.el" -;;;;;; "mail/rfc2368.el" "mail/rfc822.el" "mail/rmail-spam-filter.el" -;;;;;; "mail/rmailedit.el" "mail/rmailkwd.el" "mail/rmailmm.el" -;;;;;; "mail/rmailmsc.el" "mail/rmailsort.el" "mail/rmailsum.el" -;;;;;; "mail/undigest.el" "md4.el" "mh-e/mh-acros.el" "mh-e/mh-alias.el" -;;;;;; "mh-e/mh-buffers.el" "mh-e/mh-compat.el" "mh-e/mh-funcs.el" -;;;;;; "mh-e/mh-gnus.el" "mh-e/mh-identity.el" "mh-e/mh-inc.el" -;;;;;; "mh-e/mh-junk.el" "mh-e/mh-letter.el" "mh-e/mh-limit.el" +;;;;;; "mail/mailheader.el" "mail/mspools.el" "mail/rfc2368.el" +;;;;;; "mail/rfc822.el" "mail/rmail-spam-filter.el" "mail/rmailedit.el" +;;;;;; "mail/rmailkwd.el" "mail/rmailmm.el" "mail/rmailmsc.el" "mail/rmailsort.el" +;;;;;; "mail/rmailsum.el" "mail/undigest.el" "md4.el" "mh-e/mh-acros.el" +;;;;;; "mh-e/mh-alias.el" "mh-e/mh-buffers.el" "mh-e/mh-compat.el" +;;;;;; "mh-e/mh-funcs.el" "mh-e/mh-gnus.el" "mh-e/mh-identity.el" +;;;;;; "mh-e/mh-inc.el" "mh-e/mh-junk.el" "mh-e/mh-letter.el" "mh-e/mh-limit.el" ;;;;;; "mh-e/mh-loaddefs.el" "mh-e/mh-mime.el" "mh-e/mh-print.el" ;;;;;; "mh-e/mh-scan.el" "mh-e/mh-search.el" "mh-e/mh-seq.el" "mh-e/mh-show.el" ;;;;;; "mh-e/mh-speed.el" "mh-e/mh-thread.el" "mh-e/mh-tool-bar.el" @@ -33742,14 +33708,15 @@ Zone out, completely. ;;;;;; "textmodes/reftex-dcr.el" "textmodes/reftex-ref.el" "textmodes/reftex-sel.el" ;;;;;; "textmodes/reftex-toc.el" "textmodes/texnfo-upd.el" "timezone.el" ;;;;;; "tooltip.el" "tree-widget.el" "uniquify.el" "url/url-about.el" -;;;;;; "url/url-cookie.el" "url/url-dired.el" "url/url-expand.el" -;;;;;; "url/url-ftp.el" "url/url-future.el" "url/url-history.el" -;;;;;; "url/url-imap.el" "url/url-methods.el" "url/url-nfs.el" "url/url-proxy.el" -;;;;;; "url/url-vars.el" "vc/ediff-diff.el" "vc/ediff-init.el" "vc/ediff-merg.el" -;;;;;; "vc/ediff-ptch.el" "vc/ediff-vers.el" "vc/ediff-wind.el" -;;;;;; "vc/pcvs-info.el" "vc/pcvs-parse.el" "vc/pcvs-util.el" "vc/vc-dav.el" -;;;;;; "vcursor.el" "vt-control.el" "vt100-led.el" "w32-fns.el" -;;;;;; "w32-vars.el" "x-dnd.el") (20345 10919 58375)) +;;;;;; "url/url-cookie.el" "url/url-dired.el" "url/url-domsuf.el" +;;;;;; "url/url-expand.el" "url/url-ftp.el" "url/url-future.el" +;;;;;; "url/url-history.el" "url/url-imap.el" "url/url-methods.el" +;;;;;; "url/url-nfs.el" "url/url-proxy.el" "url/url-vars.el" "vc/ediff-diff.el" +;;;;;; "vc/ediff-init.el" "vc/ediff-merg.el" "vc/ediff-ptch.el" +;;;;;; "vc/ediff-vers.el" "vc/ediff-wind.el" "vc/pcvs-info.el" "vc/pcvs-parse.el" +;;;;;; "vc/pcvs-util.el" "vc/vc-dav.el" "vcursor.el" "vt-control.el" +;;;;;; "vt100-led.el" "w32-fns.el" "w32-vars.el" "x-dnd.el") (20383 +;;;;;; 47348 883221)) ;;;*** From 782fbf2a338e61231655e76b1727790374e02ca1 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Tue, 1 May 2012 21:37:56 +0800 Subject: [PATCH 261/564] * lisp/follow.el: Rework, eliminating reliance on advice. (set-process-filter, process-filter, sit-for): Advice deleted. (follow-mode-off-hook): Obsolete hook removed. (follow-avoid-tail-recenter-p, follow-process-filter-alist): Vars deleted. (follow-auto): Use a :set function. (follow-mode): Rewritten. Don't advise process filters. (follow-switch-to-current-buffer-all, follow-scroll-up) (follow-scroll-down): Assume follow-mode is bound. (follow-comint-scroll-to-bottom) (follow-align-compilation-windows): New functions. (follow--window-sorter): New function. (follow-all-followers): Use it to explicitly sort windows by their positions; don't make assumptions about next-window order. (follow-windows-start-end, follow-delete-other-windows-and-split) (follow-calc-win-start): Doc fix. (follow-windows-aligned-p, follow-select-if-visible): Don't call vertical-motion unnecessarily. (follow-adjust-window): New function. (follow-post-command-hook): Use it. (follow-call-set-process-filter, follow-call-process-filter) (follow-intercept-process-output, follow-tidy-process-filter-alist) (follow-stop-intercept-process-output, follow-generic-filter): Functions deleted. (follow-scroll-bar-toolkit-scroll, follow-scroll-bar-drag) (follow-scroll-bar-scroll-up, follow-scroll-bar-scroll-down): New functions, replacing advice on scroll-bar-* commands. * lisp/comint.el (comint-adjust-point): New function. (comint-postoutput-scroll-to-bottom): Use it. Call follow-comint-scroll-to-bottom for Follow mode buffers. --- etc/NEWS | 7 + lisp/ChangeLog | 34 ++ lisp/comint.el | 64 ++- lisp/follow.el | 1394 ++++++++++++++---------------------------------- 4 files changed, 469 insertions(+), 1030 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index ef809aad4e4..01d8d308831 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -100,6 +100,13 @@ these commands now). ** erc will look up server/channel names via auth-source and use the channel keys found, if any. +** Follow mode + +*** The obsolete variable `follow-mode-off-hook' has been removed. + +*** Follow mode no longer works by using advice. +The option `follow-intercept-processes' has been removed. + ** The `server-auth-key' variable can be used to set a permanent shared key for Emacs Server. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e3f91f562bc..31fda48df48 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,37 @@ +2012-05-01 Chong Yidong + + * follow.el: Eliminate advice. + (set-process-filter, process-filter, sit-for): Advice deleted. + (follow-mode-off-hook): Obsolete hook removed. + (follow-avoid-tail-recenter-p, follow-process-filter-alist): Vars + deleted. + (follow-auto): Use a :set function. + (follow-mode): Rewritten. Don't advise process filters. + (follow-switch-to-current-buffer-all, follow-scroll-up) + (follow-scroll-down): Assume follow-mode is bound. + (follow-comint-scroll-to-bottom) + (follow-align-compilation-windows): New functions. + (follow--window-sorter): New function. + (follow-all-followers): Use it to explicitly sort windows by their + positions; don't make assumptions about next-window order. + (follow-windows-start-end, follow-delete-other-windows-and-split) + (follow-calc-win-start): Doc fix. + (follow-windows-aligned-p, follow-select-if-visible): Don't call + vertical-motion unnecessarily. + (follow-adjust-window): New function. + (follow-post-command-hook): Use it. + (follow-call-set-process-filter, follow-call-process-filter) + (follow-intercept-process-output, follow-tidy-process-filter-alist) + (follow-stop-intercept-process-output, follow-generic-filter): + Functions deleted. + (follow-scroll-bar-toolkit-scroll, follow-scroll-bar-drag) + (follow-scroll-bar-scroll-up, follow-scroll-bar-scroll-down): New + functions, replacing advice on scroll-bar-* commands. + + * comint.el (comint-adjust-point): New function. + (comint-postoutput-scroll-to-bottom): Use it. Call + follow-comint-scroll-to-bottom for Follow mode buffers. + 2012-05-01 Glenn Morris * term/AT386.el, term/apollo.el, term/bobcat.el, term/cygwin.el: diff --git a/lisp/comint.el b/lisp/comint.el index 2f8d7bd850c..8103db0e9bb 100644 --- a/lisp/comint.el +++ b/lisp/comint.el @@ -2101,43 +2101,51 @@ This function should be a pre-command hook." (select-window selected)))) nil t)))))) +(defvar follow-mode) +(declare-function follow-comint-scroll-to-bottom "follow" ()) + (defun comint-postoutput-scroll-to-bottom (_string) "Go to the end of buffer in some or all windows showing it. -Does not scroll if the current line is the last line in the buffer. +Do not scroll if the current line is the last line in the buffer. Depends on the value of `comint-move-point-for-output' and `comint-scroll-show-maximum-output'. This function should be in the list `comint-output-filter-functions'." - (let* ((selected (selected-window)) - (current (current-buffer)) - (process (get-buffer-process current)) - (scroll comint-move-point-for-output)) + (let* ((current (current-buffer)) + (process (get-buffer-process current))) (unwind-protect - (if process - (walk-windows - (lambda (window) - (when (eq (window-buffer window) current) - (select-window window) - (if (and (< (point) (process-mark process)) - (or (eq scroll t) (eq scroll 'all) - ;; Maybe user wants point to jump to end. - (and (eq scroll 'this) (eq selected window)) - (and (eq scroll 'others) (not (eq selected window))) - ;; If point was at the end, keep it at end. - (and (marker-position comint-last-output-start) - (>= (point) comint-last-output-start)))) - (goto-char (process-mark process))) - ;; Optionally scroll so that the text - ;; ends at the bottom of the window. - (if (and comint-scroll-show-maximum-output - (= (point) (point-max))) - (save-excursion - (goto-char (point-max)) - (recenter (- -1 scroll-margin)))) - (select-window selected))) - nil t)) + (cond + ((null process)) + ((bound-and-true-p follow-mode) + (follow-comint-scroll-to-bottom)) + (t + (let ((selected (selected-window))) + (dolist (w (get-buffer-window-list current nil t)) + (select-window w) + (unwind-protect + (progn + (comint-adjust-point selected) + ;; Optionally scroll to the bottom of the window. + (and comint-scroll-show-maximum-output + (eobp) + (recenter (- -1 scroll-margin)))) + (select-window selected)))))) (set-buffer current)))) +(defun comint-adjust-point (selected) + "Move point in the selected window based on Comint settings. +SELECTED is the window that was originally selected." + (let ((process (get-buffer-process (current-buffer)))) + (and (< (point) (process-mark process)) + (or (memq comint-move-point-for-output '(t all)) + ;; Maybe user wants point to jump to end. + (eq comint-move-point-for-output + (if (eq (selected-window) selected) 'this 'others)) + ;; If point was at the end, keep it at end. + (and (marker-position comint-last-output-start) + (>= (point) comint-last-output-start))) + (goto-char (process-mark process))))) + (defun comint-truncate-buffer (&optional _string) "Truncate the buffer to `comint-buffer-maximum-size'. This function could be on `comint-output-filter-functions' or bound to a key." diff --git a/lisp/follow.el b/lisp/follow.el index e033c76b4e3..53dd4c2c354 100644 --- a/lisp/follow.el +++ b/lisp/follow.el @@ -1,5 +1,4 @@ ;;; follow.el --- synchronize windows showing the same buffer - ;; Copyright (C) 1995-1997, 1999, 2001-2012 Free Software Foundation, Inc. ;; Author: Anders Lindgren @@ -107,24 +106,11 @@ ;; (setq truncate-partial-width-windows nil) -;; Since the display of XEmacs is pixel-oriented, a line could be -;; clipped in half at the bottom of the window. -;; -;; To make XEmacs avoid clipping (normal) lines, please place the -;; following line in your init-file: -;; -;; (setq pixel-vertical-clip-threshold 30) - - ;; The correct way to configure Follow mode, or any other mode for ;; that matter, is to create one or more functions that do ;; whatever you would like to do. These functions are then added to ;; a hook. ;; -;; When `Follow' mode is activated, functions stored in the hook -;; `follow-mode-hook' are called. When it is deactivated -;; `follow-mode-off-hook' is run. -;; ;; The keymap `follow-key-map' contains key bindings activated by ;; `follow-mode'. ;; @@ -196,77 +182,29 @@ ;; Example from my ~/.emacs: ;; (global-set-key [f8] 'follow-mode) - ;; Implementation: ;; -;; In an ideal world, follow mode would have been implemented in the -;; kernel of the display routines, making sure that the windows (using -;; follow mode) ALWAYS are aligned. On planet Earth, however, we must -;; accept a solution where we ALMOST ALWAYS can make sure that the -;; windows are aligned. +;; The main method by which Follow mode aligns windows is via the +;; function `follow-post-command-hook', which is run after each +;; command. This "fixes up" the alignment of other windows which are +;; showing the same Follow mode buffer, on the same frame as the +;; selected window. It does not try to deal with buffers other than +;; the buffer of the selected frame, or windows on other frames. ;; -;; Follow mode does this in three places: -;; 1) After each user command. -;; 2) After a process output has been performed. -;; 3) When a scrollbar has been moved. -;; -;; This will cover most situations. (Let me know if there are other -;; situations that should be covered.) -;; -;; Note that only the selected window is checked, for the reason of -;; efficiency and code complexity. (I.e. it is possible to make a -;; non-selected window unaligned. It will, however, pop right back -;; when it is selected.) +;; Comint mode specially calls `follow-comint-scroll-to-bottom' on +;; Follow mode buffers. This function scrolls the bottom-most window +;; in a window chain and aligns the other windows accordingly. Follow +;; mode adds a function to `compilation-filter-hook' to align +;; compilation buffers. ;;; Code: -;; Preliminaries - -;; Make the compiler shut up! -;; There are two strategies: -;; 1) Shut warnings off completely. -;; 2) Handle each warning separately. -;; -;; Since I would like to see real errors, I've selected the latter -;; method. -;; -;; The problem with undefined variables and functions has been solved -;; by using `set', `symbol-value' and `symbol-function' rather than -;; `setq' and direct references to variables and functions. -;; -;; For example: -;; (if (boundp 'foo) ... (symbol-value 'foo) ) -;; (set 'foo ...) <-- XEmacs doesn't fall for this one. -;; (funcall (symbol-function 'set) 'bar ...) -;; -;; Note: When this file is interpreted, `eval-when-compile' is -;; evaluated. Since it doesn't hurt to evaluate it, but it is a bit -;; annoying, we test if the byte-compiler has been loaded. This can, -;; of course, lead to some occasional unintended evaluation... -;; -;; Should someone come up with a better solution, please let me -;; know. - (require 'easymenu) -(eval-when-compile - (if (or (featurep 'bytecomp) - (featurep 'byte-compile)) - (cond ((featurep 'xemacs) - ;; Make XEmacs shut up! I'm using standard Emacs - ;; functions, they are NOT obsolete! - (if (eq (get 'force-mode-line-update 'byte-compile) - 'byte-compile-obsolete) - (put 'force-mode-line-update 'byte-compile 'nil)) - (if (eq (get 'frame-first-window 'byte-compile) - 'byte-compile-obsolete) - (put 'frame-first-window 'byte-compile 'nil)))))) - ;;; Variables (defgroup follow nil "Synchronize windows showing the same buffer." - :prefix "follow-" :group 'windows :group 'convenience) @@ -275,28 +213,15 @@ :type 'hook :group 'follow) -(defcustom follow-mode-off-hook nil - "Hooks to run when Follow mode is turned off." - :type 'hook - :group 'follow) -(make-obsolete-variable 'follow-mode-off-hook 'follow-mode-hook "22.2") - ;;; Keymap/Menu ;; Define keys for the follow-mode minor mode map and replace some -;; functions in the global map. All `follow' mode special functions -;; can be found on (the somewhat cumbersome) "C-c . " -;; (Control-C dot ). (As of Emacs 19.29 the keys -;; C-c are reserved for minor modes.) +;; functions in the global map. All Follow mode special functions can +;; be found on the `C-c .' prefix key. ;; -;; To change the prefix, redefine `follow-mode-prefix' before -;; `follow' is loaded, or see the section on `follow-mode-hook' -;; above for an example of how to bind the keys the way you like. -;; -;; Please note that the keymap is defined the first time this file is -;; loaded. Also note that the only valid way to manipulate the -;; keymap is to use `define-key'. Don't change it using `setq' or -;; similar! +;; To change the prefix, redefine `follow-mode-prefix' before `follow' +;; is loaded, or see the section on `follow-mode-hook' above for an +;; example of how to bind the keys the way you like. (defcustom follow-mode-prefix "\C-c." "Prefix key to use for follow commands in Follow mode. @@ -329,6 +254,11 @@ After that, changing the prefix key requires manipulating keymaps." ;; the look and feel of Follow mode.) (define-key mainmap [remap end-of-buffer] 'follow-end-of-buffer) + (define-key mainmap [remap scroll-bar-toolkit-scroll] 'follow-scroll-bar-toolkit-scroll) + (define-key mainmap [remap scroll-bar-drag] 'follow-scroll-bar-drag) + (define-key mainmap [remap scroll-bar-scroll-up] 'follow-scroll-bar-scroll-up) + (define-key mainmap [remap scroll-bar-scroll-down] 'follow-scroll-bar-scroll-down) + mainmap) "Minor mode keymap for Follow mode.") @@ -340,16 +270,8 @@ After that, changing the prefix key requires manipulating keymaps." '(["Follow mode" follow-mode :style toggle :selected follow-mode]))) -;; If there is a `tools' menu, we use it. However, we can't add a -;; minor-mode specific item to it (it's broken), so we make the -;; contents ghosted when not in use, and add ourselves to the -;; global map. (easy-menu-add-item nil '("Tools") '("Follow" - ;; The Emacs code used to just gray out operations when follow-mode was - ;; not enabled, whereas the XEmacs code used to remove it altogether. - ;; Not sure which is preferable, but clearly the preference should not - ;; depend on the flavor. :filter follow-menu-filter ["Scroll Up" follow-scroll-up follow-mode] ["Scroll Down" follow-scroll-down follow-mode] @@ -378,30 +300,12 @@ are \" Fw\", or simply \"\"." (defcustom follow-auto nil "Non-nil activates Follow mode whenever a file is loaded." :type 'boolean - :group 'follow) - -(defcustom follow-intercept-processes (fboundp 'start-process) - "When non-nil, Follow mode will monitor process output." - :type 'boolean - :group 'follow) - -(defvar follow-avoid-tail-recenter-p (not (featurep 'xemacs)) - "When non-nil, patch Emacs so that tail windows won't be recentered. - -A \"tail window\" is a window that displays only the end of -the buffer. Normally it is practical for the user that empty -windows are recentered automatically. However, when using -Follow mode it breaks the display when the end is displayed -in a window \"above\" the last window. This is for -example the case when displaying a short page in info. - -Must be set before Follow mode is loaded. - -Please note that it is not possible to fully prevent Emacs from -recentering empty windows. Please report if you find a repeatable -situation in which Emacs recenters empty windows. - -XEmacs, as of 19.12, does not recenter windows, good!") + :group 'follow + :set (lambda (symbol value) + (if value + (add-hook 'find-file-hook 'follow-find-file-hook t) + (remove-hook 'find-file-hook 'follow-find-file-hook)) + (set-default symbol value))) (defvar follow-cache-command-list '(next-line previous-line forward-char backward-char) @@ -425,9 +329,6 @@ property `follow-mode-use-cache' to non-nil.") (defvar follow-internal-force-redisplay nil "True when Follow mode should redisplay the windows.") -(defvar follow-process-filter-alist '() - "The original filters for processes intercepted by Follow mode.") - (defvar follow-active-menu nil "The menu visible when Follow mode is active.") @@ -503,38 +404,31 @@ To split one large window into two side-by-side windows, the commands Only windows displayed in the same frame follow each other. -If the variable `follow-intercept-processes' is non-nil, Follow mode -will listen to the output of processes and redisplay accordingly. -\(This is the default.) - This command runs the normal hook `follow-mode-hook'. Keys specific to Follow mode: \\{follow-mode-map}" :keymap follow-mode-map - (when (and follow-mode follow-intercept-processes) - (follow-intercept-process-output)) - (cond (follow-mode ; On - ;; XEmacs: If this is non-nil, the window will scroll before - ;; the point will have a chance to get into the next window. - (when (boundp 'scroll-on-clipped-lines) - (setq scroll-on-clipped-lines nil)) - (force-mode-line-update) - (add-hook 'post-command-hook 'follow-post-command-hook t)) - - ((not follow-mode) ; Off - (force-mode-line-update)))) - -;;; Find file hook - -;; This will start follow-mode whenever a new file is loaded, if -;; the variable `follow-auto' is non-nil. - -(add-hook 'find-file-hook 'follow-find-file-hook t) + (if follow-mode + (progn + (add-hook 'compilation-filter-hook 'follow-align-compilation-windows t t) + (add-hook 'post-command-hook 'follow-post-command-hook t) + (add-hook 'window-size-change-functions 'follow-window-size-change t)) + ;; Remove globally-installed hook functions only if there is no + ;; other Follow mode buffer. + (let ((buffers (buffer-list)) + following) + (while (and (not following) buffers) + (setq following (buffer-local-value 'follow-mode (car buffers)) + buffers (cdr buffers))) + (unless following + (remove-hook 'post-command-hook 'follow-post-command-hook) + (remove-hook 'window-size-change-functions 'follow-window-size-change))) + (remove-hook 'compilation-filter-hook 'follow-align-compilation-windows t))) (defun follow-find-file-hook () "Find-file hook for Follow mode. See the variable `follow-auto'." - (if follow-auto (follow-mode t))) + (if follow-auto (follow-mode 1))) ;;; User functions @@ -566,7 +460,7 @@ Negative ARG means scroll downward. Works like `scroll-up' when not in Follow mode." (interactive "P") - (cond ((not (and (boundp 'follow-mode) follow-mode)) + (cond ((not follow-mode) (scroll-up arg)) (arg (save-excursion (scroll-up arg)) @@ -595,7 +489,7 @@ Negative ARG means scroll upward. Works like `scroll-up' when not in Follow mode." (interactive "P") - (cond ((not (and (boundp 'follow-mode) follow-mode)) + (cond ((not follow-mode) (scroll-up arg)) (arg (save-excursion (scroll-down arg))) @@ -615,6 +509,47 @@ Works like `scroll-up' when not in Follow mode." (vertical-motion (- next-screen-context-lines 1)) (setq follow-internal-force-redisplay t)))))) +(declare-function comint-adjust-point "comint" (window)) +(defvar comint-scroll-show-maximum-output) + +(defun follow-comint-scroll-to-bottom (&optional window) + "Scroll the bottom-most window in the current Follow chain. +This is to be called by `comint-postoutput-scroll-to-bottom'." + (let* ((buffer (current-buffer)) + (selected (selected-window)) + (is-selected (eq (window-buffer) buffer)) + some-window) + (when (or is-selected + (setq some-window (get-buffer-window))) + (let* ((pos (progn (comint-adjust-point nil) (point))) + (win (if is-selected + selected + (car (last (follow-all-followers some-window)))))) + (select-window win) + (goto-char pos) + (setq follow-windows-start-end-cache nil) + (follow-adjust-window win pos) + (unless is-selected + (select-window selected) + (set-buffer buffer)))))) + +(defun follow-align-compilation-windows () + "Align the windows of the current Follow mode buffer. +This is to be called from `compilation-filter-hook'." + (let ((buffer (current-buffer)) + (win (get-buffer-window)) + (selected (selected-window))) + (when (and follow-mode (waiting-for-user-input-p) win) + (let ((windows (follow-all-followers win))) + (unless (eq (window-buffer selected) buffer) + (setq win (car windows)) + (select-window win)) + (follow-redisplay windows win t) + (setq follow-windows-start-end-cache nil) + (unless (eq selected win) + (select-window selected) + (set-buffer buffer)))))) + ;;; Buffer ;;;###autoload @@ -630,11 +565,7 @@ two windows always will display two successive pages. If ARG is positive, the leftmost window is selected. If negative, the rightmost is selected. If ARG is nil, the leftmost window is -selected if the original window is the first one in the frame. - -To bind this command to a hotkey, place the following line -in your `~/.emacs' file, replacing [f7] by your favorite key: - (global-set-key [f7] 'follow-delete-other-windows-and-split)" +selected if the original window is the first one in the frame." (interactive "P") (let ((other (or (and (null arg) (not (eq (selected-window) @@ -670,24 +601,19 @@ Defaults to current buffer." (current-buffer)))) (or buffer (setq buffer (current-buffer))) (let ((orig-window (selected-window))) - (walk-windows - (function - (lambda (win) - (select-window win) - (switch-to-buffer buffer)))) + (walk-windows (lambda (win) + (select-window win) + (switch-to-buffer buffer)) + 'no-minibuf) (select-window orig-window) (follow-redisplay))) (defun follow-switch-to-current-buffer-all () - "Show current buffer in all windows on this frame, and enter Follow mode. - -To bind this command to a hotkey place the following line -in your `~/.emacs' file: - (global-set-key [f7] 'follow-switch-to-current-buffer-all)" + "Show current buffer in all windows on this frame, and enter Follow mode." (interactive) - (or (and (boundp 'follow-mode) follow-mode) - (follow-mode 1)) + (unless follow-mode + (follow-mode 1)) (follow-switch-to-buffer-all)) ;;; Movement @@ -756,9 +682,7 @@ from the bottom." (win (nth (/ (- (length windows) 1) 2) windows))) (select-window win) (goto-char dest) - (recenter) - ;;(setq follow-internal-force-redisplay t) - ))) + (recenter)))) (defun follow-redraw () @@ -796,28 +720,35 @@ of the way from the true end." ;;; Display -(defun follow-all-followers (&optional testwin) - "Return all windows displaying the same buffer as the TESTWIN. -The list contains only windows displayed in the same frame as TESTWIN. -If TESTWIN is nil the selected window is used." - (or (window-live-p testwin) - (setq testwin (selected-window))) - (let* ((top (frame-first-window (window-frame testwin))) - (win top) - (done nil) - (windows '()) - (buffer (window-buffer testwin))) - (while (and (not done) win) - (if (eq (window-buffer win) buffer) - (setq windows (cons win windows))) - (setq win (next-window win 'not)) - (if (eq win top) - (setq done t))) - (nreverse windows))) +(defun follow--window-sorter (w1 w2) + "Sorting function for W1 and W2 based on their positions. +Return non-nil if W1 is above W2; if their top-lines +are at the same position, return non-nil if W1 is to the +left of W2." + (let* ((edge-1 (window-pixel-edges w1)) + (edge-2 (window-pixel-edges w2)) + (y1 (nth 1 edge-1)) + (y2 (nth 1 edge-2))) + (if (= y1 y2) + (< (car edge-1) (car edge-2)) + (< y1 y2)))) +(defun follow-all-followers (&optional win) + "Return all windows displaying the same buffer as the WIN. +The list is sorted with topmost and leftmost windows first, and +contains only windows in the same frame as WIN. If WIN is nil, +it defaults to the selected window." + (unless (window-live-p win) + (setq win (selected-window))) + (let ((buffer (window-buffer win)) + windows) + (dolist (w (window-list (window-frame win) 'no-minibuf win)) + (if (eq (window-buffer w) buffer) + (push w windows))) + (sort windows 'follow--window-sorter))) (defun follow-split-followers (windows &optional win) - "Split the WINDOWS into the sets: predecessors and successors. + "Split WINDOWS into two sets: predecessors and successors. Return `(PRED . SUCC)' where `PRED' and `SUCC' are ordered starting from the selected window." (or win @@ -828,7 +759,6 @@ from the selected window." (setq windows (cdr windows))) (cons pred (cdr windows)))) - (defun follow-calc-win-end (&optional win) "Calculate the end position for window WIN. Return (END-POS END-OF-BUFFER). @@ -845,20 +775,19 @@ window is used." (list end (= end (point-max)))) (list last-line-pos nil)))) -;; Can't use `save-window-excursion' since it triggers a redraw. (defun follow-calc-win-start (windows pos win) - "Calculate where WIN will start if the first in WINDOWS start at POS. - -If WIN is nil the point below all windows is returned." - (let (start) - (while (and windows (not (eq (car windows) win))) - (setq start (window-start (car windows))) + "Determine the start of window WIN in a Follow mode window chain. +WINDOWS is a list of chained windows, and POS is the starting +position for the first window in the list. If WIN is nil, return +the point below all windows." + (while (and windows (not (eq (car windows) win))) + (let ((old-start (window-start (car windows)))) + ;; Can't use `save-window-excursion' since it triggers a redraw. (set-window-start (car windows) pos 'noforce) (setq pos (car (follow-calc-win-end (car windows)))) - (set-window-start (car windows) start 'noforce) - (setq windows (cdr windows))) - pos)) - + (set-window-start (car windows) old-start 'noforce) + (setq windows (cdr windows)))) + pos) ;; The result from `follow-windows-start-end' is cached when using ;; a handful simple commands, like cursor movement commands. @@ -877,23 +806,8 @@ Note that this handles the case when the cache has been set to nil." (setq cache (cdr cache))) (and res (null windows) (null cache)))) - -(defsubst follow-invalidate-cache () - "Force `follow-windows-start-end' to recalculate the end of the window." - (setq follow-windows-start-end-cache nil)) - - -;; Build a list of windows and their start and end positions. -;; Useful to avoid calculating start/end position whenever they are needed. -;; The list has the format: -;; ((Win Start End End-of-buffer-visible-p) ...) - -;; Used to have a `save-window-excursion', but it obviously triggered -;; redraws of the display. Check if I used it for anything. - - (defun follow-windows-start-end (windows) - "Builds a list of (WIN START END BUFFER-END-P) for every window in WINDOWS." + "Return a list of (WIN START END BUFFER-END-P) for window list WINDOWS." (if (follow-cache-valid-p windows) follow-windows-start-end-cache (let ((orig-win (selected-window)) @@ -905,7 +819,6 @@ Note that this handles the case when the cache has been set to nil." (select-window orig-win) (setq follow-windows-start-end-cache (nreverse win-start-end))))) - (defsubst follow-pos-visible (pos win win-start-end) "Non-nil when POS is visible in WIN." (let ((wstart-wend-bend (cdr (assq win win-start-end)))) @@ -919,20 +832,16 @@ Note that this handles the case when the cache has been set to nil." ;; should start at a full screen line. (defsubst follow-windows-aligned-p (win-start-end) - "Non-nil if the follower windows are aligned." - (let ((res t)) - (save-excursion - (goto-char (window-start (caar win-start-end))) - (unless (bolp) - (vertical-motion 0 (caar win-start-end)) - (setq res (eq (point) (window-start (caar win-start-end)))))) - (while (and res (cdr win-start-end)) - ;; At least two followers left - (setq res (eq (car (cdr (cdr (car win-start-end)))) - (car (cdr (car (cdr win-start-end)))))) + "Non-nil if the follower windows are aligned. +The argument, WIN-START-END, should be a list of the form +returned by `follow-windows-start-end'." + (let ((result t)) + (while (and win-start-end result) + (if (cdr win-start-end) + (setq result (eq (nth 2 (car win-start-end)) + (nth 1 (cadr win-start-end))))) (setq win-start-end (cdr win-start-end))) - res)) - + result)) ;; Check if the point is visible in all windows. (So that ;; no one will be recentered.) @@ -968,42 +877,22 @@ Note that this handles the case when the cache has been set to nil." (vertical-motion 1 win) (set-window-start win (point) 'noforce))))) -;;; Selection functions - -;; Make a window in WINDOWS selected if it currently -;; is displaying the position DEST. -;; -;; We don't select a window if it just has been moved. - (defun follow-select-if-visible (dest win-start-end) "Select and return a window, if DEST is visible in it. Return the selected window." - (let (win win-end) + (let (win win-end wse) (while (and (not win) win-start-end) ;; Don't select a window that was just moved. This makes it - ;; possible to later select the last window after a `end-of-buffer' - ;; command. - (when (follow-pos-visible dest (caar win-start-end) win-start-end) - (setq win (caar win-start-end) - win-end (car (cddr (car win-start-end)))) + ;; possible to later select the last window after a + ;; `end-of-buffer' command. + (setq wse (car win-start-end)) + (when (follow-pos-visible dest (car wse) win-start-end) + (setq win (car wse) + win-end (nth 2 wse)) (select-window win)) (setq win-start-end (cdr win-start-end))) - ;; The last line of the window may be partially visible; if so, - ;; and if point is visible in the next window, select the next - ;; window instead. - (and win - (/= dest (point-max)) - win-start-end - (follow-pos-visible dest (caar win-start-end) win-start-end) - (save-excursion - (goto-char dest) - (vertical-motion 1 win) - (>= (point) win-end)) - (setq win (caar win-start-end)) - (select-window win)) win)) - ;; Lets select a window showing the end. Make sure we only select it if ;; it wasn't just moved here. (I.e. M-> shall not unconditionally place ;; the point in the selected window.) @@ -1109,7 +998,6 @@ repositioning the other windows." (set-window-start w start)) (setq start (car (follow-calc-win-end w)))))) - (defun follow-estimate-first-window-start (windows win start) "Estimate the position of the first window. The estimate is computed by assuming that the window WIN, which @@ -1148,9 +1036,6 @@ should be a member of WINDOWS, starts at position START." ;; Find the starting point, start at GUESS and search upward. Return ;; a point on the same line as GUESS, or above. -;; -;; (Is this ever used? I must make sure it works just in case it is -;; ever called.) (defun follow-calculate-first-window-start-from-below (windows guess &optional win start) @@ -1184,46 +1069,36 @@ should be a member of WINDOWS, starts at position START." ;;; Avoid tail recenter -;; This sets the window internal flag `force_start'. The effect is that -;; windows only displaying the tail aren't recentered. -;; Has to be called before every redisplay... (Great isn't it?) +;; This sets the window internal flag `force_start'. The effect is +;; that windows only displaying the tail aren't recentered. ;; -;; XEmacs doesn't recenter the tail, GOOD! -;; -;; A window displaying only the tail, is a window whose -;; window-start position is equal to (point-max) of the buffer it -;; displays. -;; -;; Sometimes, calling this function could actually cause a redisplay, -;; especially if it is placed in the debug filter section. I must -;; investigate this further... +;; A window displaying only the tail, is a window whose window-start +;; position is equal to (point-max) of the buffer it displays. (defun follow-avoid-tail-recenter (&rest _rest) "Make sure windows displaying the end of a buffer aren't recentered. - This is done by reading and rewriting the start position of non-first windows in Follow mode." - (if follow-avoid-tail-recenter-p - (let* ((orig-buffer (current-buffer)) - (top (frame-first-window (selected-frame))) - (win top) - who) ; list of (buffer . frame) - ;; If the only window in the frame is a minibuffer - ;; window, `next-window' will never find it again... - (unless (window-minibuffer-p top) - (while ;; look, no body! - (let ((start (window-start win)) - (pair (cons (window-buffer win) (window-frame win)))) - (set-buffer (window-buffer win)) - (cond ((null (member pair who)) - (setq who (cons pair who))) - ((and follow-mode (eq (point-max) start)) - ;; Write the same window start back, but don't - ;; set the NOFORCE flag. - (set-window-start win start))) - (setq win (next-window win 'not t)) - (not (eq win top)))) ;; Loop while this is true. - (set-buffer orig-buffer))))) + (let* ((orig-buffer (current-buffer)) + (top (frame-first-window (selected-frame))) + (win top) + who) ; list of (buffer . frame) + ;; If the only window in the frame is a minibuffer + ;; window, `next-window' will never find it again... + (unless (window-minibuffer-p top) + (while ;; look, no body! + (let ((start (window-start win)) + (pair (cons (window-buffer win) (window-frame win)))) + (set-buffer (window-buffer win)) + (cond ((null (member pair who)) + (setq who (cons pair who))) + ((and follow-mode (eq (point-max) start)) + ;; Write the same window start back, but don't + ;; set the NOFORCE flag. + (set-window-start win start))) + (setq win (next-window win 'not t)) + (not (eq win top)))) ;; Loop while this is true. + (set-buffer orig-buffer)))) ;;; Post Command Hook @@ -1246,146 +1121,149 @@ non-first windows in Follow mode." (with-current-buffer (window-buffer win) (unless (and (symbolp this-command) (get this-command 'follow-mode-use-cache)) - (follow-invalidate-cache)) - (when (and follow-mode - (not (window-minibuffer-p win))) - ;; The buffer shown in the selected window is in follow - ;; mode. Find the current state of the display. - (let* ((windows (follow-all-followers win)) - (dest (point)) - (win-start-end (progn - (follow-update-window-start (car windows)) - (follow-windows-start-end windows))) - (aligned (follow-windows-aligned-p win-start-end)) - (visible (follow-pos-visible dest win win-start-end)) - selected-window-up-to-date) - (unless (and aligned visible) - (follow-invalidate-cache)) - (follow-avoid-tail-recenter) - ;; Select a window to display point. - (unless follow-internal-force-redisplay - (if (eq dest (point-max)) - ;; At point-max, we have to be careful since the - ;; display can be aligned while `dest' can be - ;; visible in several windows. - (cond - ;; Select the current window, but only when the - ;; display is correct. (When inserting characters - ;; in a tail window, the display is not correct, as - ;; they are shown twice.) - ;; - ;; Never stick to the current window after a - ;; deletion. The reason is cosmetic: when typing - ;; `DEL' in a window showing only the end of the - ;; file, a character would be removed from the - ;; window above, which is very unintuitive. - ((and visible - aligned - (not (memq this-command - '(backward-delete-char - delete-backward-char - backward-delete-char-untabify - kill-region)))) - (follow-debug-message "Max: same")) - ;; If the end is visible, and the window doesn't - ;; seems like it just has been moved, select it. - ((follow-select-if-end-visible win-start-end) - (follow-debug-message "Max: end visible") - (setq visible t aligned nil) - (goto-char dest)) - ;; Just show the end... - (t - (follow-debug-message "Max: default") - (select-window (car (reverse windows))) - (goto-char dest) - (setq visible nil aligned nil))) + (setq follow-windows-start-end-cache nil))) + (follow-adjust-window win (point))))) - ;; We're not at the end, here life is much simpler. - (cond - ;; This is the normal case! - ;; It should be optimized for speed. - ((and visible aligned) - (follow-debug-message "same")) - ;; Pick a position in any window. If the display is - ;; ok, this will pick the `correct' window. - ((follow-select-if-visible dest win-start-end) - (follow-debug-message "visible") - (goto-char dest) - ;; We have to perform redisplay, since scrolling is - ;; needed in case the line is partially visible. - (setq visible nil)) - ;; Not visible anywhere else, lets pick this one. - ;; (Is this case used?) - (visible - (follow-debug-message "visible in selected.")) - ;; Far out! - ((eq dest (point-min)) - (follow-debug-message "min") - (select-window (car windows)) - (goto-char dest) - (set-window-start (selected-window) (point-min)) - (setq win-start-end (follow-windows-start-end windows)) - (follow-invalidate-cache) - (setq visible t aligned nil)) - ;; If we can position the cursor without moving the first - ;; window, do it. This is the case that catches `RET' - ;; at the bottom of a window. - ((follow-select-if-visible-from-first dest windows) - (follow-debug-message "Below first") - (setq visible t aligned t)) - ;; None of the above. For simplicity, we stick to the - ;; selected window. - (t - (follow-debug-message "None") - (setq visible nil aligned nil)))) - ;; If a new window has been selected, make sure that the - ;; old is not scrolled when the point is outside the - ;; window. - (unless (eq win (selected-window)) - (let ((p (window-point win))) - (set-window-start win (window-start win) nil) - (set-window-point win p)))) - (unless visible - ;; If point may not be visible in the selected window, - ;; perform a redisplay; this ensures scrolling. - (redisplay) - (setq selected-window-up-to-date t) - (follow-avoid-tail-recenter) - (setq win-start-end (follow-windows-start-end windows)) - (follow-invalidate-cache) - (setq aligned nil)) - ;; Now redraw the windows around the selected window. - (unless (and (not follow-internal-force-redisplay) - (or aligned - (follow-windows-aligned-p win-start-end)) - (follow-point-visible-all-windows-p - win-start-end)) - (setq follow-internal-force-redisplay nil) - (follow-redisplay windows (selected-window) - selected-window-up-to-date) - (setq win-start-end (follow-windows-start-end windows)) - (follow-invalidate-cache) - ;; When the point ends up in another window. This - ;; happens when dest is in the beginning of the file and - ;; the selected window is not the first. It can also, - ;; in rare situations happen when long lines are used - ;; and there is a big difference between the width of - ;; the windows. (When scrolling one line in a wide - ;; window which will cause a move larger that an entire - ;; small window.) - (unless (follow-pos-visible dest win win-start-end) - (follow-select-if-visible dest win-start-end) - (goto-char dest))) +(defun follow-adjust-window (win dest) + ;; Adjust the window WIN and its followers. + (with-current-buffer (window-buffer win) + (when (and follow-mode + (not (window-minibuffer-p win))) + (let* ((windows (follow-all-followers win)) + (win-start-end (progn + (follow-update-window-start (car windows)) + (follow-windows-start-end windows))) + (aligned (follow-windows-aligned-p win-start-end)) + (visible (follow-pos-visible dest win win-start-end)) + selected-window-up-to-date) + (unless (and aligned visible) + (setq follow-windows-start-end-cache nil)) - ;; If the region is visible, make it look good when spanning - ;; multiple windows. - (when (region-active-p) - (follow-maximize-region - (selected-window) windows win-start-end)))) - ;; Whether or not the buffer was in follow mode, we must - ;; update the windows displaying the tail so that Emacs won't - ;; recenter them. - (follow-avoid-tail-recenter))))) + ;; Select a window to display point. + (unless follow-internal-force-redisplay + (if (eq dest (point-max)) + ;; Be careful at point-max: the display can be aligned + ;; while DEST can be visible in several windows. + (cond + ;; Select the current window, but only when the display + ;; is correct. (When inserting characters in a tail + ;; window, the display is not correct, as they are + ;; shown twice.) + ;; + ;; Never stick to the current window after a deletion. + ;; Otherwise, when typing `DEL' in a window showing + ;; only the end of the file, a character would be + ;; removed from the window above, which is very + ;; unintuitive. + ((and visible + aligned + (not (memq this-command + '(backward-delete-char + delete-backward-char + backward-delete-char-untabify + kill-region)))) + (follow-debug-message "Max: same")) + ;; If the end is visible, and the window doesn't + ;; seems like it just has been moved, select it. + ((follow-select-if-end-visible win-start-end) + (follow-debug-message "Max: end visible") + (setq visible t aligned nil) + (goto-char dest)) + ;; Just show the end... + (t + (follow-debug-message "Max: default") + (select-window (car (last windows))) + (goto-char dest) + (setq visible nil aligned nil))) + + ;; We're not at the end, here life is much simpler. + (cond + ;; This is the normal case! + ;; It should be optimized for speed. + ((and visible aligned) + (follow-debug-message "same")) + ;; Pick a position in any window. If the display is ok, + ;; this picks the `correct' window. + ((follow-select-if-visible dest win-start-end) + (follow-debug-message "visible") + (goto-char dest) + ;; Perform redisplay, in case line is partially visible. + (setq visible nil)) + ;; Not visible anywhere else, lets pick this one. + (visible + (follow-debug-message "visible in selected.")) + ;; If DEST is before the first window start, select the + ;; first window. + ((< dest (nth 1 (car win-start-end))) + (follow-debug-message "before first") + (select-window (car windows)) + (goto-char dest) + (setq visible nil aligned nil)) + ;; If we can position the cursor without moving the first + ;; window, do it. This is the case that catches `RET' at + ;; the bottom of a window. + ((follow-select-if-visible-from-first dest windows) + (follow-debug-message "Below first") + (setq visible t aligned t)) + ;; None of the above. Stick to the selected window. + (t + (follow-debug-message "None") + (setq visible nil aligned nil)))) + + ;; If a new window was selected, make sure that the old is + ;; not scrolled when the point is outside the window. + (unless (eq win (selected-window)) + (let ((p (window-point win))) + (set-window-start win (window-start win) nil) + (set-window-point win p)))) + + (unless visible + ;; If point may not be visible in the selected window, + ;; perform a redisplay; this ensures scrolling. + (let ((opoint (point))) + (redisplay) + ;; If this `redisplay' moved point, we got clobbered by a + ;; previous call to `set-window-start'. Try again. + (when (/= (point) opoint) + (goto-char opoint) + (redisplay))) + + (setq selected-window-up-to-date t) + (follow-avoid-tail-recenter) + (setq win-start-end (follow-windows-start-end windows) + follow-windows-start-end-cache nil + aligned nil)) + + ;; Now redraw the windows around the selected window. + (unless (and (not follow-internal-force-redisplay) + (or aligned + (follow-windows-aligned-p win-start-end)) + (follow-point-visible-all-windows-p win-start-end)) + (setq follow-internal-force-redisplay nil) + (follow-redisplay windows (selected-window) + selected-window-up-to-date) + (setq win-start-end (follow-windows-start-end windows) + follow-windows-start-end-cache nil) + ;; The point can ends up in another window when DEST is at + ;; the beginning of the buffer and the selected window is + ;; not the first. It can also happen when long lines are + ;; used and there is a big difference between the width of + ;; the windows. (When scrolling one line in a wide window + ;; which will cause a move larger that an entire small + ;; window.) + (unless (follow-pos-visible dest win win-start-end) + (follow-select-if-visible dest win-start-end) + (goto-char dest))) + + ;; If the region is visible, make it look good when spanning + ;; multiple windows. + (when (region-active-p) + (follow-maximize-region + (selected-window) windows win-start-end))) + + ;; Whether or not the buffer was in follow mode, update windows + ;; displaying the tail so that Emacs won't recenter them. + (follow-avoid-tail-recenter)))) ;;; The region @@ -1414,429 +1292,59 @@ non-first windows in Follow mode." ;;;; Scroll-bar support code. -;; Why is it needed? Well, if the selected window is in follow mode, -;; all its followers stick to it blindly. If one of them is scrolled, -;; it immediately returns to the original position when the mouse is -;; released. If the selected window is not a follower of the dragged -;; window the windows will be unaligned. +;; This handles the case where the user drags the scroll bar of a +;; non-selected window whose buffer is in Follow mode. -;; The advices don't get compiled. Aesthetically, this might be a -;; problem but in practical life it isn't. +(defun follow-scroll-bar-toolkit-scroll (event) + (interactive "e") + (scroll-bar-toolkit-scroll event) + (follow-redraw-after-event event)) -;; Discussion: Now when the other windows in the chain follow the -;; dragged, should we really select it? +(defun follow-scroll-bar-drag (event) + (interactive "e") + (scroll-bar-drag event) + (follow-redraw-after-event event)) -(cond ((fboundp 'scroll-bar-drag) - ;;; - ;;; Emacs style scrollbars. - ;;; +(defun follow-scroll-bar-scroll-up (event) + (interactive "e") + (scroll-bar-scroll-up event) + (follow-redraw-after-event event)) - ;; Select the dragged window if it is a follower of the - ;; selected window. - ;; - ;; Generate advices of the form: - ;; (defadvice scroll-bar-drag (after follow-scroll-bar-drag activate) - ;; "Adviced by `follow-mode'." - ;; (follow-redraw-after-event (ad-get-arg 0))) - (let ((cmds '(scroll-bar-drag - scroll-bar-drag-1 ; Executed at every move. - scroll-bar-scroll-down - scroll-bar-scroll-up - scroll-bar-set-window-start))) - (while cmds - (eval - `(defadvice ,(intern (symbol-name (car cmds))) - (after - ,(intern (concat "follow-" (symbol-name (car cmds)))) - activate) - "Adviced by Follow mode." - (follow-redraw-after-event (ad-get-arg 0)))) - (setq cmds (cdr cmds)))) +(defun follow-scroll-bar-scroll-down (event) + (interactive "e") + (scroll-bar-scroll-down event) + (follow-redraw-after-event event)) - - (defun follow-redraw-after-event (event) - "Adviced by Follow mode." - (condition-case nil - (let* ((orig-win (selected-window)) - (win (nth 0 (funcall - (symbol-function 'event-start) event))) - (fmode (assq 'follow-mode - (buffer-local-variables - (window-buffer win))))) - (if (and fmode (cdr fmode)) - ;; The selected window is in follow-mode - (progn - ;; Recenter around the dragged window. - (select-window win) - (follow-redisplay) - (select-window orig-win)))) - (error nil)))) - - - ((fboundp 'scrollbar-vertical-drag) - ;;; - ;;; XEmacs style scrollbars. - ;;; - - ;; Advice all scrollbar functions on the form: - ;; - ;; (defadvice scrollbar-line-down - ;; (after follow-scrollbar-line-down activate) - ;; (follow-xemacs-scrollbar-support (ad-get-arg 0))) - - (let ((cmds '(scrollbar-line-down ; Window - scrollbar-line-up - scrollbar-page-down ; Object - scrollbar-page-up - scrollbar-to-bottom ; Window - scrollbar-to-top - scrollbar-vertical-drag ; Object - ))) - - (while cmds - (eval - `(defadvice ,(intern (symbol-name (car cmds))) - (after - ,(intern (concat "follow-" (symbol-name (car cmds)))) - activate) - "Adviced by `follow-mode'." - (follow-xemacs-scrollbar-support (ad-get-arg 0)))) - (setq cmds (cdr cmds)))) - - - (defun follow-xemacs-scrollbar-support (window) - "Redraw windows showing the same buffer as shown in WINDOW. -WINDOW is either the dragged window, or a cons containing the -window as its first element. This is called while the user drags -the scrollbar. - -WINDOW can be an object or a window." - (condition-case nil - (progn - (if (consp window) - (setq window (car window))) - (let ((fmode (assq 'follow-mode - (buffer-local-variables - (window-buffer window)))) - (orig-win (selected-window))) - (if (and fmode (cdr fmode)) - (progn - ;; Recenter around the dragged window. - (select-window window) - (follow-redisplay) - (select-window orig-win))))) - (error nil))))) - -;;; Process output - -;; The following sections installs a spy that listens to process -;; output and tries to reposition the windows whose buffers are in -;; Follow mode. We play safe as much as possible... -;; -;; When follow-mode is activated all active processes are -;; intercepted. All new processes that change their filter function -;; using `set-process-filter' are also intercepted. The reason is -;; that a process can cause a redisplay recentering "tail" windows. -;; Note that it doesn't hurt to spy on more processes than needed. -;; -;; Technically, we set the process filter to `follow-generic-filter'. -;; The original filter is stored in `follow-process-filter-alist'. -;; Our generic filter calls the original filter, or inserts the -;; output into the buffer, if the buffer originally didn't have an -;; output filter. It also makes sure that the windows connected to -;; the buffer are aligned. -;; -;; Discussion: How do we find processes that don't call -;; `set-process-filter'? (How often are processes created in a -;; buffer after Follow mode are activated?) -;; -;; Discussion: Should we also advice `process-filter' to make our -;; filter invisible to others? - -;;; Advice for `set-process-filter' - -;; Do not call this with 'follow-generic-filter as the name of the -;; filter... - -(defadvice set-process-filter (before follow-set-process-filter activate) - "Ensure process output will be displayed correctly in Follow mode buffers. - -Follow mode inserts its own process filter to do its -magic stuff before the real process filter is called." - (if follow-intercept-processes - (progn - (setq follow-process-filter-alist - (delq (assq (ad-get-arg 0) follow-process-filter-alist) - follow-process-filter-alist)) - (follow-tidy-process-filter-alist) - (cond ((eq (ad-get-arg 1) t)) - ((eq (ad-get-arg 1) nil) - (ad-set-arg 1 'follow-generic-filter)) - (t - (setq follow-process-filter-alist - (cons (cons (ad-get-arg 0) (ad-get-arg 1)) - follow-process-filter-alist)) - (ad-set-arg 1 'follow-generic-filter)))))) - - -(defun follow-call-set-process-filter (proc filter) - "Call original `set-process-filter' without the Follow mode advice." - (ad-disable-advice 'set-process-filter 'before - 'follow-set-process-filter) - (ad-activate 'set-process-filter) - (prog1 - (set-process-filter proc filter) - (ad-enable-advice 'set-process-filter 'before - 'follow-set-process-filter) - (ad-activate 'set-process-filter))) - - -(defadvice process-filter (after follow-process-filter activate) - "Return the original process filter, not `follow-generic-filter'." - (cond ((eq ad-return-value 'follow-generic-filter) - (setq ad-return-value - (cdr-safe (assq (ad-get-arg 0) - follow-process-filter-alist)))))) - - -(defun follow-call-process-filter (proc) - "Call original `process-filter' without the Follow mode advice." - (ad-disable-advice 'process-filter 'after - 'follow-process-filter) - (ad-activate 'process-filter) - (prog1 - (process-filter proc) - (ad-enable-advice 'process-filter 'after - 'follow-process-filter) - (ad-activate 'process-filter))) - - -(defun follow-tidy-process-filter-alist () - "Remove old processes from `follow-process-filter-alist'." - (let ((alist follow-process-filter-alist) - (ps (process-list)) - (new ())) - (while alist - (if (and (not (memq (process-status (car (car alist))) - '(exit signal closed nil))) - (memq (car (car alist)) ps)) - (setq new (cons (car alist) new))) - (setq alist (cdr alist))) - (setq follow-process-filter-alist new))) - -;;; Start/stop interception of processes. - -;; Normally, all new processes are intercepted by our `set-process-filter'. -;; This is needed to intercept old processes that were started before we were -;; loaded, and processes we have forgotten by calling -;; `follow-stop-intercept-process-output'. - -(defun follow-intercept-process-output () - "Intercept all active processes. - -This is needed so that Follow mode can track all display events in the -system. (See `follow-mode'.)" - (interactive) - (let ((list (process-list))) - (while list - (if (eq (process-filter (car list)) 'follow-generic-filter) - nil - ;; The custom `set-process-filter' defined above. - (set-process-filter (car list) (process-filter (car list)))) - (setq list (cdr list)))) - (setq follow-intercept-processes t)) - - -(defun follow-stop-intercept-process-output () - "Stop Follow mode from spying on processes. - -All current spypoints are removed and no new will be added. - -The effect is that Follow mode won't be able to handle buffers -connected to processes. - -The only reason to call this function is if the Follow mode spy filter -would interfere with some other package. If this happens, please -report this using the `report-emacs-bug' function." - (interactive) - (follow-tidy-process-filter-alist) - (dolist (process (process-list)) - (when (eq (follow-call-process-filter process) 'follow-generic-filter) - (follow-call-set-process-filter - process - (cdr-safe (assq process follow-process-filter-alist))) - (setq follow-process-filter-alist - (delq (assq process follow-process-filter-alist) - follow-process-filter-alist)))) - (setq follow-intercept-processes nil)) - -;;; The filter - -;; The following section is a naive method to make buffers with -;; process output to work with Follow mode. Whenever the start of the -;; window displaying the buffer is moved, we move it back to its -;; original position and try to select a new window. (If we fail, -;; the normal redisplay functions of Emacs will scroll it right -;; back!) - -(defun follow-generic-filter (proc output) - "Process output filter for process connected to buffers in Follow mode." - (let* ((old-buffer (current-buffer)) - (orig-win (selected-window)) - (buf (process-buffer proc)) - (win (and buf (if (eq buf (window-buffer orig-win)) - orig-win - (get-buffer-window buf t)))) - (return-to-orig-win (and win (not (eq win orig-win)))) - (orig-window-start (and win (window-start win)))) - - ;; If input is pending, the `sit-for' below won't redraw the - ;; display. In that case, calling `follow-avoid-tail-recenter' may - ;; provoke the process handling code to schedule a redisplay. - ;(or (input-pending-p) - ; (follow-avoid-tail-recenter)) - - ;; Output the `output'. - (let ((filter (cdr-safe (assq proc follow-process-filter-alist)))) - (cond - ;; Call the original filter function - (filter - (funcall filter proc output)) - - ;; No filter, but we've got a buffer. Just output into it. - (buf - (set-buffer buf) - (if (not (marker-buffer (process-mark proc))) - (set-marker (process-mark proc) (point-max))) - (let ((moving (= (point) (process-mark proc))) - deactivate-mark - (inhibit-read-only t)) - (save-excursion - (goto-char (process-mark proc)) - ;; `insert-before-markers' just in case the user's next - ;; command is M-y. - (insert-before-markers output) - (set-marker (process-mark proc) (point))) - (if moving (goto-char (process-mark proc))))))) - - ;; If we're in follow mode, do our stuff. Select a new window and - ;; redisplay. (Actually, it is redundant to check `buf', but I - ;; feel it's more correct.) - (if (and buf (window-live-p win)) - (progn - (set-buffer buf) - (if (and (boundp 'follow-mode) follow-mode) - (progn - (select-window win) - (let* ((windows (follow-all-followers win)) - (win-start-end (follow-windows-start-end windows)) - (new-window-start (window-start win)) - (new-window-point (window-point win))) - (cond - ;; The start of the selected window was repositioned. - ;; Try to use the original start position and continue - ;; working with a window to the "right" in the window - ;; chain. This will create the effect that the output - ;; starts in one window and continues into the next. - - ;; If the display has changed so much that it is not - ;; possible to keep the original window fixed and still - ;; display the point then we give up and use the new - ;; window start. - - ;; This case is typically used when the process filter - ;; tries to reposition the start of the window in order - ;; to view the tail of the output. - ((not (eq orig-window-start new-window-start)) - (follow-debug-message "filter: Moved") - (set-window-start win orig-window-start) - (follow-redisplay windows win) - (setq win-start-end (follow-windows-start-end windows)) - (follow-select-if-visible new-window-point - win-start-end) - (goto-char new-window-point) - (if (eq win (selected-window)) - (set-window-start win new-window-start)) - (setq win-start-end (follow-windows-start-end windows))) - ;; Stick to this window, if point is visible in it. - ((pos-visible-in-window-p new-window-point) - (follow-debug-message "filter: Visible in window")) - ;; Avoid redisplaying the first window. If the - ;; point is visible at a window below, - ;; redisplay and select it. - ((follow-select-if-visible-from-first - new-window-point windows) - (follow-debug-message "filter: Seen from first") - (setq win-start-end - (follow-windows-start-end windows))) - ;; None of the above. We stick to the current window. - (t - (follow-debug-message "filter: nothing"))) - - ;; Here we have selected a window. Make sure the - ;; windows are aligned and the point is visible - ;; in the selected window. - (if (and (not (follow-pos-visible - (point) (selected-window) win-start-end)) - (not return-to-orig-win)) - (progn - (sit-for 0) - (setq win-start-end - (follow-windows-start-end windows)))) - - (if (or follow-internal-force-redisplay - (not (follow-windows-aligned-p win-start-end))) - (follow-redisplay windows))))))) - - ;; return to the original window. - (if return-to-orig-win - (select-window orig-win)) - ;; Restore the original buffer, unless the filter explicitly - ;; changed buffer or killed the old buffer. - (if (and (eq buf (current-buffer)) - (buffer-name old-buffer)) - (set-buffer old-buffer))) - - (follow-invalidate-cache) - - ;; Normally, if the display has been changed, it is redrawn. All - ;; windows showing only the end of a buffer are unconditionally - ;; recentered; we can't prevent that by calling - ;; `follow-avoid-tail-recenter'. - ;; - ;; We force a redisplay here on our own, so Emacs does need to. - ;; (However, redisplaying when there's input available just seems - ;; to make things worse, so we exclude that case.) - (if (and follow-avoid-tail-recenter-p - (not (input-pending-p))) - (sit-for 0))) +(defun follow-redraw-after-event (event) + "Re-align the Follow mode windows acted on by EVENT." + (let ((window (nth 0 (event-end event))) + (orig-win (selected-window))) + (when (and (buffer-local-value 'follow-mode (window-buffer window)) + ;; Ignore the case where we scroll the selected window; + ;; that is handled by the post-command hook function. + (not (eq window (selected-window)))) + (select-window window) + (follow-redisplay) + (select-window orig-win)))) ;;; Window size change -;; In Emacs 19.29, the functions in `window-size-change-functions' are -;; called every time a window in a frame changes size. Most notably, it -;; is called after the frame has been resized. +;; The functions in `window-size-change-functions' are called every +;; time a window in a frame changes size, most notably after the frame +;; has been resized. We call `follow-post-command-hook' for every +;; Follow mode buffer visible in any window in the resized frame. ;; -;; We basically call our post-command-hook for every buffer that is -;; visible in any window in the resized frame, which is in follow-mode. -;; -;; Since this function can be called indirectly from -;; `follow-post-command-hook' we have a potential infinite loop. We -;; handle this problem by simply not doing anything at all in this -;; situation. The variable `follow-inside-post-command-hook' contains -;; information about whether the execution actually is inside the +;; Since `follow-window-size-change' can be called indirectly from +;; `follow-post-command-hook' we have a potential infinite loop. To +;; avoid this, we simply do not do anything in this situation. The +;; variable `follow-inside-post-command-hook' contains information +;; about whether the execution actually is inside the ;; post-command-hook or not. -(if (boundp 'window-size-change-functions) - (add-hook 'window-size-change-functions 'follow-window-size-change)) - - (defun follow-window-size-change (frame) "Redraw all windows in FRAME, when in Follow mode." - ;; Below, we call `post-command-hook'. This makes sure that we - ;; don't start a mutually recursive endless loop. - (if follow-inside-post-command-hook - nil + ;; Below, we call `post-command-hook'. Avoid an infloop. + (unless follow-inside-post-command-hook (let ((buffers '()) (orig-window (selected-window)) (orig-buffer (current-buffer)) @@ -1846,108 +1354,26 @@ report this using the `report-emacs-bug' function." (select-frame frame) (unwind-protect (walk-windows - (function - (lambda (win) - (setq buf (window-buffer win)) - (if (memq buf buffers) - nil - (set-buffer buf) - (if (and (boundp 'follow-mode) - follow-mode) - (progn - (setq windows (follow-all-followers win)) - (if (memq orig-window windows) - (progn - ;; Make sure we're redrawing around the - ;; selected window. - ;; - ;; We must be really careful not to do this - ;; when we are (indirectly) called by - ;; `post-command-hook'. - (select-window orig-window) - (follow-post-command-hook) - (setq orig-window (selected-window))) - (follow-redisplay windows win)) - (setq buffers (cons buf buffers)))))))) + (lambda (win) + (setq buf (window-buffer win)) + (unless (memq buf buffers) + (set-buffer buf) + (when follow-mode + (setq windows (follow-all-followers win)) + (if (not (memq orig-window windows)) + (follow-redisplay windows win) + ;; Make sure we're redrawing around the selected + ;; window. + (select-window orig-window) + (follow-post-command-hook) + (setq orig-window (selected-window))) + (setq buffers (cons buf buffers))))) + 'no-minibuf) (select-frame orig-frame) (set-buffer orig-buffer) (select-window orig-window))))) -;;; XEmacs isearch - -;; In XEmacs, isearch often finds matches in other windows than the -;; currently selected. However, when exiting the old window -;; configuration is restored, with the exception of the beginning of -;; the start of the window for the selected window. This is not much -;; help for us. -;; -;; We overwrite the stored window configuration with the current, -;; unless we are in `slow-search-mode', i.e. only a few lines -;; of text is visible. - -(if (featurep 'xemacs) - (defadvice isearch-done (before follow-isearch-done activate) - (if (and (boundp 'follow-mode) - follow-mode - (boundp 'isearch-window-configuration) - isearch-window-configuration - (boundp 'isearch-slow-terminal-mode) - (not isearch-slow-terminal-mode)) - (let ((buf (current-buffer))) - (setq isearch-window-configuration - (current-window-configuration)) - (set-buffer buf))))) - -;;; Tail window handling - -;; In Emacs (not XEmacs) windows showing nothing are sometimes -;; recentered. When in Follow mode, this is not desirable for -;; non-first windows in the window chain. This section tries to -;; make the windows stay where they should be. -;; -;; If the display is updated, all windows starting at (point-max) are -;; going to be recentered at the next redisplay, unless we do a -;; read-and-write cycle to update the `force' flag inside the windows. -;; -;; In 19.30, a new variable `window-scroll-functions' is called every -;; time a window is recentered. It is not perfect for our situation, -;; since when it is called for a tail window, it is to late. However, -;; if it is called for another window, we can try to update our -;; windows. -;; -;; By patching `sit-for' we can make sure that to catch all explicit -;; updates initiated by lisp programs. Internal calls, on the other -;; hand, are not handled. - -;; If this function is called it is too late for this window, but -;; we might save other windows from being recentered. - -(if (and follow-avoid-tail-recenter-p (boundp 'window-scroll-functions)) - (add-hook 'window-scroll-functions 'follow-avoid-tail-recenter t)) - - -;; This prevents all packages that calls `sit-for' directly -;; to recenter tail windows. - -(if follow-avoid-tail-recenter-p - (defadvice sit-for (before follow-sit-for activate) - "Adviced by Follow mode. - -Avoid to recenter windows displaying only the end of a file as when -displaying a short file in two windows, using Follow mode." - (follow-avoid-tail-recenter))) - - -;; Without this advice, `mouse-drag-region' would start to recenter -;; tail windows. - -(if (and follow-avoid-tail-recenter-p - (fboundp 'move-overlay)) - (defadvice move-overlay (before follow-move-overlay activate) - "Adviced by Follow mode. -Don't recenter windows showing only the end of a buffer. -This prevents `mouse-drag-region' from messing things up." - (follow-avoid-tail-recenter))) +(add-hook 'window-scroll-functions 'follow-avoid-tail-recenter t) ;;; Profile support @@ -1956,64 +1382,28 @@ This prevents `mouse-drag-region' from messing things up." ;; ;; Invalid indentation on purpose! -(cond (nil -(setq elp-function-list - '(window-end - vertical-motion - ; sit-for ;; elp can't handle advices... - follow-mode - follow-all-followers - follow-split-followers - follow-redisplay - follow-estimate-first-window-start - follow-calculate-first-window-start-from-above - follow-calculate-first-window-start-from-below - follow-calc-win-end - follow-calc-win-start - follow-pos-visible - follow-windows-start-end - follow-cache-valid-p - follow-select-if-visible - follow-select-if-visible-from-first - follow-windows-aligned-p - follow-point-visible-all-windows-p - follow-avoid-tail-recenter - follow-update-window-start - follow-post-command-hook - )))) - -;;; The end - -(defun follow-unload-function () - "Unload Follow mode library." - (easy-menu-remove-item nil '("Tools") "Follow") - (follow-stop-intercept-process-output) - (dolist (group '((before - ;; XEmacs - isearch-done - ;; both - set-process-filter sit-for move-overlay) - (after - ;; Emacs - scroll-bar-drag scroll-bar-drag-1 scroll-bar-scroll-down - scroll-bar-scroll-up scroll-bar-set-window-start - ;; XEmacs - scrollbar-line-down scrollbar-line-up scrollbar-page-down - scrollbar-page-up scrollbar-to-bottom scrollbar-to-top - scrollbar-vertical-drag - ;; both - process-filter))) - (let ((class (car group))) - (dolist (fun (cdr group)) - (when (functionp fun) - (condition-case nil - (progn - (ad-remove-advice fun class - (intern (concat "follow-" (symbol-name fun)))) - (ad-update fun)) - (error nil)))))) - ;; continue standard processing - nil) +;; (setq elp-function-list +;; '(window-end +;; vertical-motion +;; follow-mode +;; follow-all-followers +;; follow-split-followers +;; follow-redisplay +;; follow-estimate-first-window-start +;; follow-calculate-first-window-start-from-above +;; follow-calculate-first-window-start-from-below +;; follow-calc-win-end +;; follow-calc-win-start +;; follow-pos-visible +;; follow-windows-start-end +;; follow-cache-valid-p +;; follow-select-if-visible +;; follow-select-if-visible-from-first +;; follow-windows-aligned-p +;; follow-point-visible-all-windows-p +;; follow-avoid-tail-recenter +;; follow-update-window-start +;; follow-post-command-hook)) (provide 'follow) From 87233a14e07a61981e3ce51350efb8b7ee5adcd2 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Tue, 1 May 2012 22:00:16 +0800 Subject: [PATCH 262/564] Fix mouse wheel scrolling in Follow mode. * lisp/follow.el (follow-mwheel-scroll): New function. (follow-redraw-after-event): Fix last change. Fixes: debbugs:4112 --- lisp/ChangeLog | 1 + lisp/follow.el | 18 +++++++++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 31fda48df48..cb7e1377c92 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -27,6 +27,7 @@ (follow-scroll-bar-toolkit-scroll, follow-scroll-bar-drag) (follow-scroll-bar-scroll-up, follow-scroll-bar-scroll-down): New functions, replacing advice on scroll-bar-* commands. + (follow-mwheel-scroll): New function (Bug#4112). * comint.el (comint-adjust-point): New function. (comint-postoutput-scroll-to-bottom): Use it. Call diff --git a/lisp/follow.el b/lisp/follow.el index 53dd4c2c354..4c76b43da2d 100644 --- a/lisp/follow.el +++ b/lisp/follow.el @@ -258,6 +258,7 @@ After that, changing the prefix key requires manipulating keymaps." (define-key mainmap [remap scroll-bar-drag] 'follow-scroll-bar-drag) (define-key mainmap [remap scroll-bar-scroll-up] 'follow-scroll-bar-scroll-up) (define-key mainmap [remap scroll-bar-scroll-down] 'follow-scroll-bar-scroll-down) + (define-key mainmap [remap mwheel-scroll] 'follow-mwheel-scroll) mainmap) "Minor mode keymap for Follow mode.") @@ -1315,17 +1316,24 @@ non-first windows in Follow mode." (scroll-bar-scroll-down event) (follow-redraw-after-event event)) +(defun follow-mwheel-scroll (event) + (interactive "e") + (mwheel-scroll event) + (follow-redraw-after-event event)) + (defun follow-redraw-after-event (event) - "Re-align the Follow mode windows acted on by EVENT." - (let ((window (nth 0 (event-end event))) - (orig-win (selected-window))) - (when (and (buffer-local-value 'follow-mode (window-buffer window)) + "Re-align the Follow mode windows affected by EVENT." + (let* ((window (nth 0 (event-end event))) + (buffer (window-buffer window)) + (orig-win (selected-window))) + (when (and (buffer-local-value 'follow-mode buffer) ;; Ignore the case where we scroll the selected window; ;; that is handled by the post-command hook function. (not (eq window (selected-window)))) (select-window window) (follow-redisplay) - (select-window orig-win)))) + (unless (eq (window-buffer orig-win) buffer) + (select-window orig-win))))) ;;; Window size change From b593d6a999b21dfee6939b24866a5ec6fbe7d11b Mon Sep 17 00:00:00 2001 From: "Aaron S. Hawley" Date: Tue, 1 May 2012 12:10:02 -0400 Subject: [PATCH 263/564] Reimplement execute-extended-command in Elisp. * src/keyboard.c (Fexecute_extended_command, Vsuggest_key_bindings): Move to simple.el. * lisp/simple.el (suggest-key-bindings, execute-extended-command): Move from keyboard.c. --- lisp/ChangeLog | 18 ++++-- lisp/simple.el | 50 +++++++++++++++++ src/ChangeLog | 21 ++++--- src/keyboard.c | 147 ------------------------------------------------- 4 files changed, 75 insertions(+), 161 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index cb7e1377c92..cfc40bc01a8 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,10 +1,16 @@ +2012-05-01 Aaron S. Hawley + Stefan Monnier + + * simple.el (suggest-key-bindings, execute-extended-command): + Move from keyboard.c. + 2012-05-01 Chong Yidong * follow.el: Eliminate advice. (set-process-filter, process-filter, sit-for): Advice deleted. (follow-mode-off-hook): Obsolete hook removed. - (follow-avoid-tail-recenter-p, follow-process-filter-alist): Vars - deleted. + (follow-avoid-tail-recenter-p, follow-process-filter-alist): + Vars deleted. (follow-auto): Use a :set function. (follow-mode): Rewritten. Don't advise process filters. (follow-switch-to-current-buffer-all, follow-scroll-up) @@ -25,13 +31,13 @@ (follow-stop-intercept-process-output, follow-generic-filter): Functions deleted. (follow-scroll-bar-toolkit-scroll, follow-scroll-bar-drag) - (follow-scroll-bar-scroll-up, follow-scroll-bar-scroll-down): New - functions, replacing advice on scroll-bar-* commands. + (follow-scroll-bar-scroll-up, follow-scroll-bar-scroll-down): + New functions, replacing advice on scroll-bar-* commands. (follow-mwheel-scroll): New function (Bug#4112). * comint.el (comint-adjust-point): New function. - (comint-postoutput-scroll-to-bottom): Use it. Call - follow-comint-scroll-to-bottom for Follow mode buffers. + (comint-postoutput-scroll-to-bottom): Use it. + Call follow-comint-scroll-to-bottom for Follow mode buffers. 2012-05-01 Glenn Morris diff --git a/lisp/simple.el b/lisp/simple.el index 55f7d1261ee..3d8a3a38dbd 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -1354,6 +1354,56 @@ to get different commands to edit and resubmit." "M-x ") obarray 'commandp t nil 'extended-command-history))) +(defcustom suggest-key-bindings t + "Non-nil means show the equivalent key-binding when M-x command has one. +The value can be a length of time to show the message for. +If the value is non-nil and not a number, we wait 2 seconds." + :group 'keyboard + :type '(choice (const :tag "off" nil) + (integer :tag "time" 2) + (other :tag "on"))) + +(defun execute-extended-command (prefixarg &optional command-name) + ;; Based on Fexecute_extended_command in keyboard.c of Emacs. + ;; Aaron S. Hawley 2009-08-24 + "Read function name, then read its arguments and call it. + +To pass a numeric argument to the command you are invoking with, specify +the numeric argument to this command. + +Noninteractively, the argument PREFIXARG is the prefix argument to +give to the command you invoke, if it asks for an argument." + (interactive (list current-prefix-arg (read-extended-command))) + ;; Emacs<24 calling-convention was with a single `prefixarg' argument. + (if (null command-name) (setq command-name (read-extended-command))) + (let* ((function (and (stringp command-name) (intern-soft command-name))) + (binding (and suggest-key-bindings + (not executing-kbd-macro) + (where-is-internal function overriding-local-map t)))) + (unless (commandp function) + (error "`%s' is not a valid command name" command-name)) + ;; Set this_command_keys to the concatenation of saved-keys and + ;; function, followed by a RET. + (setq this-command function) + (let ((prefix-arg prefixarg)) + (command-execute function 'record)) + ;; If enabled, show which key runs this command. + (when binding + ;; But first wait, and skip the message if there is input. + (let* ((waited + ;; If this command displayed something in the echo area; + ;; wait a few seconds, then display our suggestion message. + (sit-for (cond + ((zerop (length (current-message))) 0) + ((numberp suggest-key-bindings) suggest-key-bindings) + (t 2))))) + (when (and waited (not (consp unread-command-events))) + (with-temp-message + (format "You can run the command `%s' with %s" + function (key-description binding)) + (sit-for (if (numberp suggest-key-bindings) + suggest-key-bindings + 2)))))))) (defvar minibuffer-history nil "Default minibuffer history list. diff --git a/src/ChangeLog b/src/ChangeLog index 0e17d5dd345..f624517efb2 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2012-05-01 Stefan Monnier + + * keyboard.c (Fexecute_extended_command, Vsuggest_key_bindings): + Move to simple.el. + 2012-05-01 Glenn Morris * syssignal.h: Remove reference to BROKEN_SIGINFO (last used in @@ -52,8 +57,8 @@ 2012-04-27 Eli Zaretskii - * dispnew.c (swap_glyph_pointers, copy_row_except_pointers): Don't - overrun array limits of glyph row's used[] array. (Bug#11288) + * dispnew.c (swap_glyph_pointers, copy_row_except_pointers): + Don't overrun array limits of glyph row's used[] array. (Bug#11288) 2012-04-26 Eli Zaretskii @@ -169,8 +174,8 @@ (XD_CHECK_DBUS_SERIAL): Rename from CHECK_DBUS_SERIAL_GET_SERIAL. (xd_signature, xd_append_arg): Allow float for integer types. (xd_get_connection_references): New function. - (xd_get_connection_address): Rename from xd_initialize. Return - cached address. + (xd_get_connection_address): Rename from xd_initialize. + Return cached address. (xd_remove_watch): Do not unset $DBUS_SESSION_BUS_ADDRESS. (xd_close_bus): Rename from Fdbus_close_bus. Not needed on Lisp level. @@ -188,8 +193,8 @@ (Vdbus_message_type_invalid, Vdbus_message_type_method_call) (Vdbus_message_type_method_return, Vdbus_message_type_error) (Vdbus_message_type_signal): New defvars. - (Vdbus_registered_buses, Vdbus_registered_objects_table): Adapt - docstring. + (Vdbus_registered_buses, Vdbus_registered_objects_table): + Adapt docstring. 2012-04-22 Paul Eggert @@ -219,8 +224,8 @@ 2012-04-21 Eduard Wiebe - * sysdep.c (list_system_processes, system_process_attributes): Add - implementation for FreeBSD (Bug#5243). + * sysdep.c (list_system_processes, system_process_attributes): + Add implementation for FreeBSD (Bug#5243). 2012-04-21 Andreas Schwab diff --git a/src/keyboard.c b/src/keyboard.c index 48b31d8b564..a1ad1fed325 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -10340,146 +10340,6 @@ a special event, so ignore the prefix argument and don't clear it. */) } - -DEFUN ("execute-extended-command", Fexecute_extended_command, Sexecute_extended_command, - 1, 1, "P", - doc: /* Read function name, then read its arguments and call it. - -To pass a numeric argument to the command you are invoking with, specify -the numeric argument to this command. - -Noninteractively, the argument PREFIXARG is the prefix argument to -give to the command you invoke, if it asks for an argument. */) - (Lisp_Object prefixarg) -{ - Lisp_Object function; - EMACS_INT saved_last_point_position; - Lisp_Object saved_keys, saved_last_point_position_buffer; - Lisp_Object bindings, value; - struct gcpro gcpro1, gcpro2, gcpro3; -#ifdef HAVE_WINDOW_SYSTEM - /* The call to Fcompleting_read will start and cancel the hourglass, - but if the hourglass was already scheduled, this means that no - hourglass will be shown for the actual M-x command itself. - So we restart it if it is already scheduled. Note that checking - hourglass_shown_p is not enough, normally the hourglass is not shown, - just scheduled to be shown. */ - int hstarted = hourglass_started (); -#endif - - saved_keys = Fvector (this_command_key_count, - XVECTOR (this_command_keys)->contents); - saved_last_point_position_buffer = last_point_position_buffer; - saved_last_point_position = last_point_position; - GCPRO3 (saved_keys, prefixarg, saved_last_point_position_buffer); - - function = call0 (intern ("read-extended-command")); - -#ifdef HAVE_WINDOW_SYSTEM - if (hstarted) start_hourglass (); -#endif - - if (STRINGP (function) && SCHARS (function) == 0) - error ("No command name given"); - - /* Set this_command_keys to the concatenation of saved_keys and - function, followed by a RET. */ - { - Lisp_Object *keys; - int i; - - this_command_key_count = 0; - this_command_key_count_reset = 0; - this_single_command_key_start = 0; - - keys = XVECTOR (saved_keys)->contents; - for (i = 0; i < ASIZE (saved_keys); i++) - add_command_key (keys[i]); - - for (i = 0; i < SCHARS (function); i++) - add_command_key (Faref (function, make_number (i))); - - add_command_key (make_number ('\015')); - } - - last_point_position = saved_last_point_position; - last_point_position_buffer = saved_last_point_position_buffer; - - UNGCPRO; - - function = Fintern (function, Qnil); - KVAR (current_kboard, Vprefix_arg) = prefixarg; - Vthis_command = function; - real_this_command = function; - - /* If enabled, show which key runs this command. */ - if (!NILP (Vsuggest_key_bindings) - && NILP (Vexecuting_kbd_macro) - && SYMBOLP (function)) - bindings = Fwhere_is_internal (function, Voverriding_local_map, - Qt, Qnil, Qnil); - else - bindings = Qnil; - - value = Qnil; - GCPRO3 (bindings, value, function); - value = Fcommand_execute (function, Qt, Qnil, Qnil); - - /* If the command has a key binding, print it now. */ - if (!NILP (bindings) - && ! (VECTORP (bindings) && EQ (Faref (bindings, make_number (0)), - Qmouse_movement))) - { - /* But first wait, and skip the message if there is input. */ - Lisp_Object waited; - - /* If this command displayed something in the echo area; - wait a few seconds, then display our suggestion message. */ - if (NILP (echo_area_buffer[0])) - waited = sit_for (make_number (0), 0, 2); - else if (NUMBERP (Vsuggest_key_bindings)) - waited = sit_for (Vsuggest_key_bindings, 0, 2); - else - waited = sit_for (make_number (2), 0, 2); - - if (!NILP (waited) && ! CONSP (Vunread_command_events)) - { - Lisp_Object binding; - char *newmessage; - int message_p = push_message (); - int count = SPECPDL_INDEX (); - ptrdiff_t newmessage_len, newmessage_alloc; - USE_SAFE_ALLOCA; - - record_unwind_protect (pop_message_unwind, Qnil); - binding = Fkey_description (bindings, Qnil); - newmessage_alloc = - (sizeof "You can run the command `' with " - + SBYTES (SYMBOL_NAME (function)) + SBYTES (binding)); - SAFE_ALLOCA (newmessage, char *, newmessage_alloc); - newmessage_len = - esprintf (newmessage, "You can run the command `%s' with %s", - SDATA (SYMBOL_NAME (function)), - SDATA (binding)); - message2 (newmessage, - newmessage_len, - STRING_MULTIBYTE (binding)); - if (NUMBERP (Vsuggest_key_bindings)) - waited = sit_for (Vsuggest_key_bindings, 0, 2); - else - waited = sit_for (make_number (2), 0, 2); - - if (!NILP (waited) && message_p) - restore_message (); - - SAFE_FREE (); - unbind_to (count, Qnil); - } - } - - RETURN_UNGCPRO (value); -} - /* Return nonzero if input events are pending. */ @@ -11791,7 +11651,6 @@ syms_of_keyboard (void) defsubr (&Sset_quit_char); defsubr (&Sset_input_mode); defsubr (&Scurrent_input_mode); - defsubr (&Sexecute_extended_command); defsubr (&Sposn_at_point); defsubr (&Sposn_at_x_y); @@ -12195,12 +12054,6 @@ If this variable is non-nil, `delayed-warnings-hook' will be run immediately after running `post-command-hook'. */); Vdelayed_warnings_list = Qnil; - DEFVAR_LISP ("suggest-key-bindings", Vsuggest_key_bindings, - doc: /* Non-nil means show the equivalent key-binding when M-x command has one. -The value can be a length of time to show the message for. -If the value is non-nil and not a number, we wait 2 seconds. */); - Vsuggest_key_bindings = Qt; - DEFVAR_LISP ("timer-list", Vtimer_list, doc: /* List of active absolute time timers in order of increasing time. */); Vtimer_list = Qnil; From c8f8221fd15ea7fdc3e7abb35f7d39b949c3acb9 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 1 May 2012 14:37:21 -0400 Subject: [PATCH 264/564] * lisp/gnus/nnimap.el (nnimap-open-connection-1): Don't leave an "opening..." message once it's actually open. --- lisp/gnus/ChangeLog | 5 +++++ lisp/gnus/nnimap.el | 2 ++ 2 files changed, 7 insertions(+) diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index cacd20ce99d..4938336742a 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,8 @@ +2012-05-01 Stefan Monnier + + * nnimap.el (nnimap-open-connection-1): Don't leave an "opening..." + message once it's actually open. + 2012-04-28 Stefan Monnier * auth-source.el (auth-source--aput-1, auth-source--aput) diff --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el index f978b8c9906..114d83b7286 100644 --- a/lisp/gnus/nnimap.el +++ b/lisp/gnus/nnimap.el @@ -475,6 +475,8 @@ textual parts.") (when nnimap-object (when (nnimap-capability "QRESYNC") (nnimap-command "ENABLE QRESYNC")) + (nnheader-message 7 "Opening connection to %s...done" + nnimap-address) (nnimap-process nnimap-object)))))))) (autoload 'rfc2104-hash "rfc2104") From d80ac57b32c2cf2b3b86e60a550858c81f214ebc Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 1 May 2012 14:47:23 -0400 Subject: [PATCH 265/564] * lisp/cus-edit.el (custom-variable-documentation): Simplify with format. --- lisp/ChangeLog | 4 ++++ lisp/cus-edit.el | 16 ++++++++-------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index cfc40bc01a8..e4c45a23478 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-05-01 Glenn Morris + + * cus-edit.el (custom-variable-documentation): Simplify with format. + 2012-05-01 Aaron S. Hawley Stefan Monnier diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el index 8198a4594c4..4458bb7b56f 100644 --- a/lisp/cus-edit.el +++ b/lisp/cus-edit.el @@ -1,6 +1,6 @@ ;;; cus-edit.el --- tools for customizing Emacs and Lisp packages ;; -;; Copyright (C) 1996-1997, 1999-2012 Free Software Foundation, Inc. +;; Copyright (C) 1996-1997, 1999-2012 Free Software Foundation, Inc. ;; ;; Author: Per Abrahamsen ;; Maintainer: FSF @@ -2460,15 +2460,15 @@ If INITIAL-STRING is non-nil, use that rather than \"Parent groups:\"." "Return documentation of VARIABLE for use in Custom buffer. Normally just return the docstring. But if VARIABLE automatically becomes buffer local when set, append a message to that effect." - (if (and (local-variable-if-set-p variable) - (or (not (local-variable-p variable)) - (with-temp-buffer - (local-variable-if-set-p variable)))) - (concat (documentation-property variable 'variable-documentation) + (format "%s%s" (documentation-property variable 'variable-documentation) + (if (and (local-variable-if-set-p variable) + (or (not (local-variable-p variable)) + (with-temp-buffer + (local-variable-if-set-p variable)))) "\n This variable automatically becomes buffer-local when set outside Custom. -However, setting it through Custom sets the default value.") - (documentation-property variable 'variable-documentation))) +However, setting it through Custom sets the default value." + ""))) (define-widget 'custom-variable 'custom "A widget for displaying a Custom variable. From beb83b5ac5c552ae221fc96cf55de18936978736 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 1 May 2012 14:48:46 -0400 Subject: [PATCH 266/564] * lisp/eshell/esh-cmd.el (eshell-debug-command): Doc fix. Add :set. --- lisp/ChangeLog | 2 ++ lisp/eshell/esh-cmd.el | 14 +++++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e4c45a23478..887441d1c9d 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2012-05-01 Glenn Morris + * eshell/esh-cmd.el (eshell-debug-command): Doc fix. Add :set. + * cus-edit.el (custom-variable-documentation): Simplify with format. 2012-05-01 Aaron S. Hawley diff --git a/lisp/eshell/esh-cmd.el b/lisp/eshell/esh-cmd.el index 6075b56915b..86de9725790 100644 --- a/lisp/eshell/esh-cmd.el +++ b/lisp/eshell/esh-cmd.el @@ -1,6 +1,6 @@ ;;; esh-cmd.el --- command invocation -;; Copyright (C) 1999-2012 Free Software Foundation, Inc. +;; Copyright (C) 1999-2012 Free Software Foundation, Inc. ;; Author: John Wiegley @@ -236,10 +236,14 @@ return non-nil if the command is complex." :group 'eshell-cmd) (defcustom eshell-debug-command nil - "If non-nil, enable debugging code. SSLLOOWW. -This option is only useful for reporting bugs. If you enable it, you -will have to visit the file 'eshell-cmd.el' and run the command -\\[eval-buffer]." + "If non-nil, enable Eshell debugging code. +This is slow, and only useful for debugging problems with Eshell. +If you change this without using customize after Eshell has loaded, +you must re-load 'eshell-cmd.el'." + :initialize 'custom-initialize-default + :set (lambda (symbol value) + (set sym val) + (load-library "esh-cmd")) :type 'boolean :group 'eshell-cmd) From aac7ba08b8ab6c37bc0d8f8f81846204bafc27e4 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 1 May 2012 15:27:10 -0400 Subject: [PATCH 267/564] Further doc fix. --- lisp/eshell/esh-cmd.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/eshell/esh-cmd.el b/lisp/eshell/esh-cmd.el index 86de9725790..b1f8fd037a4 100644 --- a/lisp/eshell/esh-cmd.el +++ b/lisp/eshell/esh-cmd.el @@ -239,7 +239,7 @@ return non-nil if the command is complex." "If non-nil, enable Eshell debugging code. This is slow, and only useful for debugging problems with Eshell. If you change this without using customize after Eshell has loaded, -you must re-load 'eshell-cmd.el'." +you must re-load 'esh-cmd.el'." :initialize 'custom-initialize-default :set (lambda (symbol value) (set sym val) From 479a28157056d08bf6619dc3a6f6f9bcea87918d Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 1 May 2012 15:31:18 -0400 Subject: [PATCH 268/564] Some updates for etc/TODO --- etc/TODO | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/etc/TODO b/etc/TODO index 6aa74df5a79..2c361ede993 100644 --- a/etc/TODO +++ b/etc/TODO @@ -1,6 +1,6 @@ Emacs TODO List -*-outline-*- -Copyright (C) 2001-2012 Free Software Foundation, Inc. +Copyright (C) 2001-2012 Free Software Foundation, Inc. See the end of the file for license conditions. @@ -24,7 +24,6 @@ to the FSF. ** Improve the "code snippets" support: consolidate skeleton.el, tempo.el, and expand.el (any other?) and then advertise/use/improve it. ** Improve VC: yes, there's a lot of work to be done there :-( - And most of it could/should make it into Emacs-23.3. ** Random things that cross my mind right now that I'd like to see (some of them from my local hacks), but it's not obvious at all whether they'll @@ -433,18 +432,13 @@ http://lists.gnu.org/archive/html/emacs-devel/2008-02/msg02234.html ** Highlight rectangles (`mouse-track-rectangle-p' in XEmacs). Already in CUA, but it's a valuable feature worth making more general. -** Provide MIME support for Rmail using the Gnus MIME library. [Maybe - not now feasible, given Gnus maintenance decisions. fx looked at - this and can say where some of the problems are.] - ** Eliminate the storm of warnings concerning char/unsigned char mismatches that we get with GCC 4.x and proprietary compilers on various systems. They make it difficult to spot the important warnings. ** Fix anything necessary to use `long long' EMACS_INTs with GCC. -** Split out parts of lisp.h [and generate Makefile dependencies automatically.] -[the last bit is done, see DEPFLAGS etc in src/Makefile.in ] +** Split out parts of lisp.h. ** Update the FAQ. From ab1121bd6de4533213cc9723b8d20f89bf10f063 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 1 May 2012 17:05:28 -0400 Subject: [PATCH 269/564] Don't hard-code manual pages in top-level Makefile.in * Makefile.in (MAN_PAGES): Remove. (install-arch-indep, uninstall): Don't use $MAN_PAGES. --- ChangeLog | 3 +++ Makefile.in | 12 ++++-------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 109132d0f98..eda8c04f086 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2012-05-01 Glenn Morris + * Makefile.in (MAN_PAGES): Remove. + (install-arch-indep, uninstall): Don't use $MAN_PAGES. + * configure.in: Try libtinfo for tputs. (LIBS_TERMCAP) [gnu*]: Use libtinfo if it was found. (Bug#9741) diff --git a/Makefile.in b/Makefile.in index 1746412dfa5..a6dd44afa24 100644 --- a/Makefile.in +++ b/Makefile.in @@ -122,13 +122,9 @@ sharedstatedir=@sharedstatedir@ libexecdir=@libexecdir@ # Where to install Emacs's man pages. -# This used to allow choice of the numeric extension, but this made -# little sense since the files were always installed in man1/ -# (and they contain cross-references that expect them to be there). +# Note they contain cross-references that expect them to be in section 1. mandir=@mandir@ man1dir=$(mandir)/man1 -MAN_PAGES=ctags.1 ebrowse.1 emacs.1 emacsclient.1 etags.1 \ - grep-changelog.1 rcs-checkin.1 # Where to install and expect the info files describing Emacs. In the # past, this defaulted to a subdirectory of ${prefix}/lib/emacs, but @@ -642,7 +638,7 @@ install-arch-indep: mkdir info install-etc -chmod -R a+r $(DESTDIR)${datadir}/emacs/${version} ${COPYDESTS} thisdir=`/bin/pwd`; \ cd ${mansrcdir}; \ - for page in ${MAN_PAGES}; do \ + for page in *.1; do \ (cd $${thisdir}; \ ${INSTALL_DATA} ${mansrcdir}/$${page} $(DESTDIR)${man1dir}/$${page}; \ chmod a+r $(DESTDIR)${man1dir}/$${page}; \ @@ -734,8 +730,8 @@ uninstall: done;) (if [ -n "${GZIP_INFO}" ] && [ -n "${GZIP_PROG}" ]; then \ ext=.gz; else ext=; fi; \ - cd $(DESTDIR)${man1dir} && for page in ${MAN_PAGES}; do \ - rm -f $$page$$ext; done ) + cd ${mansrcdir} && for page in *.1; do \ + rm -f $(DESTDIR)${man1dir}/$$page$$ext; done ) (cd $(DESTDIR)${bindir} && rm -f $(EMACSFULL) $(EMACS)) (cd $(DESTDIR)${icondir} && rm -f hicolor/*x*/apps/emacs.png hicolor/*x*/apps/emacs22.png hicolor/scalable/apps/emacs.svg hicolor/scalable/mimetypes/emacs-document.svg ) -rm -f $(DESTDIR)${desktopdir}/emacs.desktop From 976f7668ab5166673c3010eed82bae8ea8a30b69 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 1 May 2012 17:06:59 -0400 Subject: [PATCH 270/564] * lisp/cus-start.el (suggest-key-bindings): Remove, now it is in Lisp. --- lisp/ChangeLog | 2 ++ lisp/cus-start.el | 11 ++++------- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 887441d1c9d..07505a32536 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2012-05-01 Glenn Morris + * cus-start.el (suggest-key-bindings): Remove, now it is in Lisp. + * eshell/esh-cmd.el (eshell-debug-command): Doc fix. Add :set. * cus-edit.el (custom-variable-documentation): Simplify with format. diff --git a/lisp/cus-start.el b/lisp/cus-start.el index 83973e4a534..9198eaddc37 100644 --- a/lisp/cus-start.el +++ b/lisp/cus-start.el @@ -1,7 +1,7 @@ ;;; cus-start.el --- define customization properties of builtins -;; -;; Copyright (C) 1997, 1999-2012 Free Software Foundation, Inc. -;; + +;; Copyright (C) 1997, 1999-2012 Free Software Foundation, Inc. + ;; Author: Per Abrahamsen ;; Keywords: internal ;; Package: emacs @@ -22,7 +22,7 @@ ;; along with GNU Emacs. If not, see . ;;; Commentary: -;; + ;; This file adds customize support for built-in variables. ;; While dumping Emacs, this file is loaded, but it only records @@ -269,9 +269,6 @@ Leaving \"Default\" unchecked is equivalent with specifying a default of (const :tag "only shift-selection or mouse-drag" only) (const :tag "off" nil)) "24.1") - (suggest-key-bindings keyboard (choice (const :tag "off" nil) - (integer :tag "time" 2) - (other :tag "on"))) (debug-on-event debug (choice (const :tag "None" nil) (const :tag "When sent SIGUSR1" sigusr1) From 723ea6b5d6b03418d2f7e273c82aa91732ace079 Mon Sep 17 00:00:00 2001 From: Ted Zlatanov Date: Tue, 1 May 2012 22:28:14 +0000 Subject: [PATCH 271/564] auth.texi (Help for users): Update for .gpg file being second --- doc/misc/ChangeLog | 4 ++++ doc/misc/auth.texi | 13 ++++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index 0a013e18364..62841734d9f 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -1,3 +1,7 @@ +2012-05-01 Teodor Zlatanov + + * auth.texi (Help for users): Update for .gpg file being second. + 2012-04-27 Ippei Furuhashi (tiny change) * org.texi (Agenda commands): Fix two typos: give corresponding diff --git a/doc/misc/auth.texi b/doc/misc/auth.texi index 4ce4e337a0f..3a1e4155e97 100644 --- a/doc/misc/auth.texi +++ b/doc/misc/auth.texi @@ -180,12 +180,15 @@ Here's a mixed example using two sources: @end defvar If you don't customize @code{auth-sources}, you'll have to live with -the defaults: any host and any port are looked up in the netrc -file @file{~/.authinfo.gpg}, which is a GnuPG encrypted file -(@pxref{GnuPG and EasyPG Assistant Configuration}). +the defaults: the unencrypted netrc file @file{~/.authinfo} will be +used for any host and any port. -If that fails, the unencrypted netrc files @file{~/.authinfo} and -@file{~/.netrc} will be used. +If that fails, any host and any port are looked up in the netrc file +@file{~/.authinfo.gpg}, which is a GnuPG encrypted file (@pxref{GnuPG +and EasyPG Assistant Configuration}). + +Finally, the unencrypted netrc file @file{~/.netrc} will be used for +any host and any port. The typical netrc line example is without a port. From 9fa0e4168d1e70956ef4b64a47dbf1579b3685a1 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 1 May 2012 20:11:24 -0400 Subject: [PATCH 272/564] * configure.in (LIBS_TERMCAP): Fix netbsd logic, broken 2012-03-04. Ref http://debbugs.gnu.org/6190 --- ChangeLog | 4 ++++ configure.in | 3 +-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9fa1b8da7d0..12dd29bfcbf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2012-05-02 Glenn Morris + + * configure.in (LIBS_TERMCAP): Fix netbsd logic, broken 2012-03-04. + 2012-04-18 Ludovic Courtès * configure.in: Don't use the -R option (Bug#11251). diff --git a/configure.in b/configure.in index 091edbbff2e..68d14716e68 100644 --- a/configure.in +++ b/configure.in @@ -2878,9 +2878,8 @@ fail; ;; netbsd) - if test $ac_cv_search_tputs = -lterminfo; then + if [ "x$LIBS_TERMCAP" = "x-lterminfo" ]; then TERMINFO=yes - LIBS_TERMCAP="-lterminfo" else LIBS_TERMCAP="-ltermcap" fi From 9e7a4bcfd87cc6403a86729d4cb17b6e3ec27443 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 1 May 2012 21:22:26 -0400 Subject: [PATCH 273/564] Fix some info/dir entries * doc/misc/emacs-gnutls.texi, doc/misc/ert.texi, doc/misc/org.texi: Fix dircategory, direntry to match info/dir. * doc/misc/viper.texi: Make direntry shorter (also it is no longer "newest"). * info/dir: Make some entries consistent with the source texi files. --- ChangeLog | 2 ++ doc/misc/ChangeLog | 7 +++++++ doc/misc/emacs-gnutls.texi | 4 ++-- doc/misc/ert.texi | 4 ++-- doc/misc/org.texi | 2 +- doc/misc/viper.texi | 4 +--- info/dir | 16 +++++++--------- 7 files changed, 22 insertions(+), 17 deletions(-) diff --git a/ChangeLog b/ChangeLog index 12dd29bfcbf..8f92ad7896d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 2012-05-02 Glenn Morris + * info/dir: Make some entries consistent with the source texi files. + * configure.in (LIBS_TERMCAP): Fix netbsd logic, broken 2012-03-04. 2012-04-18 Ludovic Courtès diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index 0064deb02fa..fb40c033216 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -1,3 +1,10 @@ +2012-05-02 Glenn Morris + + * viper.texi: Make direntry shorter (also it is no longer "newest"). + + * emacs-gnutls.texi, ert.texi, org.texi: + Fix dircategory, direntry to match info/dir. + 2012-04-28 Glenn Morris * faq.texi: Convert @inforefs to @xrefs. diff --git a/doc/misc/emacs-gnutls.texi b/doc/misc/emacs-gnutls.texi index d429f21fbf6..12e65c9e8dd 100644 --- a/doc/misc/emacs-gnutls.texi +++ b/doc/misc/emacs-gnutls.texi @@ -30,9 +30,9 @@ license to the document, as described in section 6 of the license. @end quotation @end copying -@dircategory Emacs lisp libraries +@dircategory Emacs network features @direntry -* GnuTLS: (gnutls). The Emacs GnuTLS Integration. +* GnuTLS: (emacs-gnutls). The Emacs GnuTLS integration. @end direntry @titlepage diff --git a/doc/misc/ert.texi b/doc/misc/ert.texi index 6002e678ff1..b357b3d5e67 100644 --- a/doc/misc/ert.texi +++ b/doc/misc/ert.texi @@ -4,9 +4,9 @@ @settitle Emacs Lisp Regression Testing @c %**end of header -@dircategory Emacs +@dircategory Emacs misc features @direntry -* ERT: (ert). Emacs Lisp Regression Testing. +* ERT: (ert). Emacs Lisp regression testing tool. @end direntry @copying diff --git a/doc/misc/org.texi b/doc/misc/org.texi index 67633e1acac..775ff638eef 100644 --- a/doc/misc/org.texi +++ b/doc/misc/org.texi @@ -286,7 +286,7 @@ license to the document, as described in section 6 of the license. @end quotation @end copying -@dircategory Emacs +@dircategory Emacs editing modes @direntry * Org Mode: (org). Outline-based notes management and organizer @end direntry diff --git a/doc/misc/viper.texi b/doc/misc/viper.texi index 86455524b1f..94f7e53ce8c 100644 --- a/doc/misc/viper.texi +++ b/doc/misc/viper.texi @@ -25,9 +25,7 @@ developing GNU and promoting software freedom.'' @dircategory Emacs misc features @direntry -* VIPER: (viper). The newest Emacs VI-emulation mode. - (also, A VI Plan for Emacs Rescue - or the VI PERil.) +* VIPER: (viper). A VI-emulation mode for Emacs. @end direntry @finalout diff --git a/info/dir b/info/dir index d18a38cefa6..cf039593d52 100644 --- a/info/dir +++ b/info/dir @@ -19,6 +19,7 @@ The Info Directory * Menu: +Texinfo documentation system * Info: (info). How to use the documentation browsing system. Emacs @@ -54,7 +55,7 @@ Emacs network features you're replying to, in flexible ways. * Sieve: (sieve). Managing Sieve scripts in Emacs. * TRAMP: (tramp). Transparent Remote Access, Multiple Protocol - GNU Emacs remote file access via rsh and rcp. + Emacs remote file access via rsh and rcp. Emacs misc features * Autotype: (autotype). Convenient features for text that you enter @@ -67,7 +68,7 @@ Emacs misc features * Ediff: (ediff). A visual interface for comparing and merging programs. * EDT: (edt). An Emacs emulation of the EDT editor. -* EIEIO: (eieio). An object system for Emacs Lisp. +* EIEIO: (eieio). An objects system for Emacs Lisp. * ERT: (ert). Emacs Lisp regression testing tool. * Eshell: (eshell). A command shell implemented in Emacs Lisp. * Flymake: (flymake). A universal on-the-fly syntax checker. @@ -77,18 +78,15 @@ Emacs misc features * RefTeX: (reftex). Emacs support for LaTeX cross-references and citations. * Remember: (remember). Simple information manager for Emacs. -* Semantic: (semantic). Source code parsing utilities for Emacs. -* SES: (ses). Simple Emacs Spreadsheet +* Semantic: (semantic). Source code parser library and utilities. +* SES: (ses). Simple Emacs Spreadsheet. * Speedbar: (speedbar). File/Tag summarizing utility. * VIP: (vip). An older VI-emulation for Emacs. -* VIPER: (viper). The newest Emacs VI-emulation mode. - (also, A VI Plan for Emacs Rescue - or the VI PERil.) +* VIPER: (viper). A VI-emulation mode for Emacs. * WoMan: (woman). Browse UN*X Manual Pages "W.O. (without) Man". Emacs lisp libraries -* Auth-source: (auth). A single configuration for multiple - applications. +* Auth-source: (auth). The Emacs auth-source library. * CL: (cl). Partial Common Lisp support for Emacs Lisp. * D-Bus: (dbus). Using D-Bus in Emacs. * Emacs MIME: (emacs-mime). Emacs MIME de/composition library. From 7adecb9936e52431118a060d87e0550b3bc5ad4b Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 1 May 2012 22:10:43 -0400 Subject: [PATCH 274/564] * Makefile.in (install-arch-indep): Combine install-data, install-info loops. --- ChangeLog | 5 +++++ Makefile.in | 12 ++---------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index eda8c04f086..e52b39b05ae 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2012-05-02 Glenn Morris + + * Makefile.in (install-arch-indep): + Combine adjacent install-data and install-info loops. + 2012-05-01 Glenn Morris * Makefile.in (MAN_PAGES): Remove. diff --git a/Makefile.in b/Makefile.in index a6dd44afa24..b7ec97c3c9d 100644 --- a/Makefile.in +++ b/Makefile.in @@ -623,18 +623,10 @@ install-arch-indep: mkdir info install-etc ${GZIP_PROG} -9n $(DESTDIR)${infodir}/$$f; \ else true; fi; \ done; \ + (cd $${thisdir}; \ + ${INSTALL_INFO} --info-dir=$(DESTDIR)${infodir} $(DESTDIR)${infodir}/$$elt); \ done); \ else true; fi - -unset CDPATH; \ - thisdir=`/bin/pwd`; \ - if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd $(DESTDIR)${infodir} && /bin/pwd)` ]; \ - then \ - for elt in $(INFO_FILES); do \ - test "$(HAVE_MAKEINFO)" = "no" && test ! -f $$elt && continue; \ - (cd $${thisdir}; \ - ${INSTALL_INFO} --info-dir=$(DESTDIR)${infodir} $(DESTDIR)${infodir}/$$elt); \ - done; \ - else true; fi -chmod -R a+r $(DESTDIR)${datadir}/emacs/${version} ${COPYDESTS} thisdir=`/bin/pwd`; \ cd ${mansrcdir}; \ From 3fef57a2f66ec269f8ed016ad5bf39f2346c6b54 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 1 May 2012 23:46:34 -0700 Subject: [PATCH 275/564] * Makefile.in (INFO_FILES): Add emacs-gnutls; accidentally omitted from 2012-04-12 backport from trunk. (Do not merge to trunk.) --- ChangeLog | 5 ++++- Makefile.in | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8f92ad7896d..46dff7c807f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2012-05-02 Glenn Morris + * Makefile.in (INFO_FILES): Add emacs-gnutls; accidentally + omitted from 2012-04-12 backport from trunk. + * info/dir: Make some entries consistent with the source texi files. * configure.in (LIBS_TERMCAP): Fix netbsd logic, broken 2012-03-04. @@ -10,7 +13,7 @@ 2012-04-12 Teodor Zlatanov - * info/dir, Makefile.in (INFO_FILES): Add emacs-gnutls. + * info/dir: Add emacs-gnutls. 2012-03-04 Paul Eggert diff --git a/Makefile.in b/Makefile.in index af0c902b381..d57c1690f47 100644 --- a/Makefile.in +++ b/Makefile.in @@ -136,7 +136,7 @@ MAN_PAGES=ctags.1 ebrowse.1 emacs.1 emacsclient.1 etags.1 \ # system, it is inappropriate to imply that it is part of Emacs. infodir=@infodir@ INFO_FILES=ada-mode auth autotype calc ccmode cl dbus dired-x ebrowse \ - ede ediff edt eieio efaq eintr elisp emacs emacs-mime epa erc \ + ede ediff edt eieio efaq eintr elisp emacs emacs-gnutls emacs-mime epa erc \ ert eshell eudc flymake forms gnus idlwave info mairix-el \ message mh-e newsticker nxml-mode org pcl-cvs pgg rcirc \ reftex remember sasl sc semantic ses sieve smtpmail speedbar \ From a36e64d04bd36f982cd82dfbc4eba8bf5d79cb06 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 1 May 2012 23:53:21 -0700 Subject: [PATCH 276/564] Makefile.in fix for systems without /bin/install or somesuch * Makefile.in (install-arch-indep, uninstall): Ensure that INSTALL-type commands are run from top-level. --- ChangeLog | 3 +++ Makefile.in | 12 ++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 46dff7c807f..2abe4a131c5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2012-05-02 Glenn Morris + * Makefile.in (install-arch-indep, uninstall): + Ensure that INSTALL-type commands are run from top-level. + * Makefile.in (INFO_FILES): Add emacs-gnutls; accidentally omitted from 2012-04-12 backport from trunk. diff --git a/Makefile.in b/Makefile.in index d57c1690f47..7ee41a5bdd5 100644 --- a/Makefile.in +++ b/Makefile.in @@ -236,6 +236,11 @@ gamedir=@gamedir@ # ==================== Utility Programs for the Build ==================== # Allow the user to specify the install program. +# Note that if the system does not provide a suitable install, +# configure will use build-aux/install-sh. Annoyingly, it does +# not use an absolute path. So we must take care to always run +# INSTALL-type commands from the top-level directory. +# This explains (I think) the cd thisdir seen in several install rules. INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ @@ -621,7 +626,8 @@ install-arch-indep: mkdir info install-etc for elt in $(INFO_FILES); do \ test "$(HAVE_MAKEINFO)" = "no" && test ! -f $$elt && continue; \ for f in `ls $$elt $$elt-[1-9] $$elt-[1-9][0-9] 2>/dev/null`; do \ - ${INSTALL_DATA} $$f $(DESTDIR)${infodir}/$$f; \ + (cd $${thisdir}; \ + ${INSTALL_DATA} ${srcdir}/info/$$f $(DESTDIR)${infodir}/$$f); \ chmod a+r $(DESTDIR)${infodir}/$$f; \ if [ -n "${GZIP_INFO}" ] && [ -n "${GZIP_PROG}" ]; then \ rm -f $(DESTDIR)${infodir}/$$f.gz; \ @@ -724,9 +730,11 @@ uninstall: fi ; \ done -rm -rf $(DESTDIR)${libexecdir}/emacs/${version} + thisdir=`/bin/pwd`; \ (cd $(DESTDIR)${infodir} && \ for elt in $(INFO_FILES); do \ - $(INSTALL_INFO) --remove --info-dir=. $$elt; \ + (cd $${thisdir}; \ + $(INSTALL_INFO) --remove --info-dir=$(DESTDIR)${infodir} $(DESTDIR)${infodir}/$$elt); \ if [ -n "${GZIP_INFO}" ] && [ -n "${GZIP_PROG}" ]; then \ ext=.gz; else ext=; fi; \ for f in `ls $$elt$$ext $$elt-[1-9]$$ext $$elt-[1-9][0-9]$$ext 2>/dev/null`; do \ From cd3771a08b8a1fed5aa91eb2ac559d41801668ea Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 2 May 2012 00:01:36 -0700 Subject: [PATCH 277/564] * Makefile.in (uninstall): Remove useless-use-of-for. For some reason it caused problems on an old Solaris. --- ChangeLog | 3 +++ Makefile.in | 4 +--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2abe4a131c5..bf47bf07d74 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2012-05-02 Glenn Morris + * Makefile.in (uninstall): Remove useless-use-of-for; that for + some reason caused problems on an old Solaris. + * Makefile.in (install-arch-indep, uninstall): Ensure that INSTALL-type commands are run from top-level. diff --git a/Makefile.in b/Makefile.in index 7ee41a5bdd5..9a9be4f0a43 100644 --- a/Makefile.in +++ b/Makefile.in @@ -737,9 +737,7 @@ uninstall: $(INSTALL_INFO) --remove --info-dir=$(DESTDIR)${infodir} $(DESTDIR)${infodir}/$$elt); \ if [ -n "${GZIP_INFO}" ] && [ -n "${GZIP_PROG}" ]; then \ ext=.gz; else ext=; fi; \ - for f in `ls $$elt$$ext $$elt-[1-9]$$ext $$elt-[1-9][0-9]$$ext 2>/dev/null`; do \ - rm -f $$f; \ - done; \ + rm -f $$elt$$ext $$elt-[1-9]$$ext $$elt-[1-9][0-9]$$ext; \ done;) (if [ -n "${GZIP_INFO}" ] && [ -n "${GZIP_PROG}" ]; then \ ext=.gz; else ext=; fi; \ From 6116bd7e7a88d47eb8bf0b830249461f47f8b943 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 2 May 2012 00:12:52 -0700 Subject: [PATCH 278/564] * admin/bzrmerge.el (bzrmerge-skip-regexp): Add "Auto-commit". --- admin/ChangeLog | 6 +++++- admin/bzrmerge.el | 3 ++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/admin/ChangeLog b/admin/ChangeLog index a3a756bde64..01f10f4aea5 100644 --- a/admin/ChangeLog +++ b/admin/ChangeLog @@ -1,3 +1,7 @@ +2012-05-02 Glenn Morris + + * bzrmerge.el (bzrmerge-skip-regexp): Add "Auto-commit". + 2012-04-10 Glenn Morris * bzrmerge.el (bzrmerge-skip-regexp): Add "from trunk". @@ -1262,7 +1266,7 @@ ;; coding: utf-8 ;; End: - Copyright (C) 2001-2012 Free Software Foundation, Inc. + Copyright (C) 2001-2012 Free Software Foundation, Inc. This file is part of GNU Emacs. diff --git a/admin/bzrmerge.el b/admin/bzrmerge.el index 0c72c8b5c93..15238f44d9d 100644 --- a/admin/bzrmerge.el +++ b/admin/bzrmerge.el @@ -28,7 +28,8 @@ (require 'cl)) ; assert (defvar bzrmerge-skip-regexp - "back[- ]?port\\|merge\\|sync\\|re-?generate\\|bump version\\|from trunk" + "back[- ]?port\\|merge\\|sync\\|re-?generate\\|bump version\\|from trunk\\|\ +Auto-commit" "Regexp matching logs of revisions that might be skipped. `bzrmerge-missing' will ask you if it should skip any matches.") From 226b674362163c251ffc43954e8f7b80822de57d Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 2 May 2012 00:33:52 -0700 Subject: [PATCH 279/564] Add change missed from previous merge from emacs-24 --- doc/misc/emacs-gnutls.texi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/misc/emacs-gnutls.texi b/doc/misc/emacs-gnutls.texi index d429f21fbf6..12e65c9e8dd 100644 --- a/doc/misc/emacs-gnutls.texi +++ b/doc/misc/emacs-gnutls.texi @@ -30,9 +30,9 @@ license to the document, as described in section 6 of the license. @end quotation @end copying -@dircategory Emacs lisp libraries +@dircategory Emacs network features @direntry -* GnuTLS: (gnutls). The Emacs GnuTLS Integration. +* GnuTLS: (emacs-gnutls). The Emacs GnuTLS integration. @end direntry @titlepage From 9aa071dfb9739328b39b9cbb4130b39b5ed30c85 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 2 May 2012 00:45:16 -0700 Subject: [PATCH 280/564] Don't hard-code the list of info files in the top-level Makefile The sed '/ing directory/d' piece is to remove the annoying "entering/leaving directory" messages that GNU make insists on printing when called recursively. --no-print-directory isn't portable. * Makefile.in (INFO_FILES): Remove variable. (INFO_NONMISC): New variable. (install-arch-indep, uninstall): Don't use $INFO_FILES. * doc/misc/Makefile.in (echo-info): New phony target, used by top-level. --- ChangeLog | 4 ++++ Makefile.in | 21 ++++++++------------- doc/misc/ChangeLog | 2 ++ doc/misc/Makefile.in | 7 +++++-- 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5836ea1276b..bf4d53edf4b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2012-05-02 Glenn Morris + * Makefile.in (INFO_FILES): Remove variable. + (INFO_NONMISC): New variable. + (install-arch-indep, uninstall): Don't use $INFO_FILES. + * Makefile.in (uninstall): Remove useless-use-of-for; that for some reason caused problems on an old Solaris. diff --git a/Makefile.in b/Makefile.in index 4b225fffd58..ef1f3c90c6f 100644 --- a/Makefile.in +++ b/Makefile.in @@ -126,17 +126,10 @@ libexecdir=@libexecdir@ mandir=@mandir@ man1dir=$(mandir)/man1 -# Where to install and expect the info files describing Emacs. In the -# past, this defaulted to a subdirectory of ${prefix}/lib/emacs, but -# since there are now many packages documented with the texinfo -# system, it is inappropriate to imply that it is part of Emacs. +# Where to install and expect the info files describing Emacs. infodir=@infodir@ -INFO_FILES=ada-mode auth autotype calc ccmode cl dbus dired-x ebrowse \ - ede ediff edt eieio efaq eintr elisp emacs emacs-gnutls \ - emacs-mime epa erc ert eshell eudc flymake forms gnus \ - idlwave info mairix-el message mh-e newsticker nxml-mode \ - org pcl-cvs pgg rcirc reftex remember sasl sc semantic ses \ - sieve smtpmail speedbar tramp url vip viper widget woman +# Info files not in the doc/misc directory (we get those via make echo-info). +INFO_NONMISC=emacs eintr elisp # If no makeinfo was found and configured --without-makeinfo, "no"; else "yes". HAVE_MAKEINFO=@HAVE_MAKEINFO@ @@ -617,8 +610,9 @@ install-arch-indep: mkdir info install-etc ${INSTALL_DATA} ${srcdir}/info/dir $(DESTDIR)${infodir}/dir; \ chmod a+r $(DESTDIR)${infodir}/dir); \ fi; \ + info_misc=`cd $${thisdir}/doc/misc; ${MAKE} echo-info | sed '/ing directory/d'`; \ cd ${srcdir}/info ; \ - for elt in $(INFO_FILES); do \ + for elt in ${INFO_NONMISC} $${info_misc}; do \ test "$(HAVE_MAKEINFO)" = "no" && test ! -f $$elt && continue; \ for f in `ls $$elt $$elt-[1-9] $$elt-[1-9][0-9] 2>/dev/null`; do \ (cd $${thisdir}; \ @@ -718,8 +712,9 @@ uninstall: done -rm -rf $(DESTDIR)${libexecdir}/emacs/${version} thisdir=`/bin/pwd`; \ - (cd $(DESTDIR)${infodir} && \ - for elt in $(INFO_FILES); do \ + (info_misc=`cd doc/misc; ${MAKE} echo-info | sed '/ing directory/d'`; \ + cd $(DESTDIR)${infodir} && \ + for elt in ${INFO_NONMISC} $${info_misc}; do \ (cd $${thisdir}; \ $(INSTALL_INFO) --remove --info-dir=$(DESTDIR)${infodir} $(DESTDIR)${infodir}/$$elt); \ if [ -n "${GZIP_INFO}" ] && [ -n "${GZIP_PROG}" ]; then \ diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index e8ebe45e8ba..0d6300a1b82 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -1,5 +1,7 @@ 2012-05-02 Glenn Morris + * Makefile.in (echo-info): New phony target, used by top-level. + * viper.texi: Make direntry shorter (also it is no longer "newest"). * emacs-gnutls.texi, ert.texi, org.texi: diff --git a/doc/misc/Makefile.in b/doc/misc/Makefile.in index 390b077bbb0..383ec3a9db9 100644 --- a/doc/misc/Makefile.in +++ b/doc/misc/Makefile.in @@ -43,7 +43,6 @@ emacsdir = $(srcdir)/../emacs MAKEINFO = @MAKEINFO@ MAKEINFO_OPTS = --force -I$(emacsdir) -# Also add new entries to INFO_FILES in the top-level Makefile.in. INFO_TARGETS = \ $(infodir)/ada-mode \ $(infodir)/auth \ @@ -210,7 +209,11 @@ ENVADD = TEXINPUTS="$(srcdir):$(emacsdir):$(TEXINPUTS)" \ mkinfodir = @cd ${srcdir}; test -d ${infodir} || mkdir ${infodir} || test -d ${infodir} -.PHONY: info dvi pdf +.PHONY: info dvi pdf echo-info + +## Used by top-level Makefile. +echo-info: + @echo $(INFO_TARGETS) | sed 's|[^ ]*/||g' info: $(INFO_TARGETS) From bf98199cf1bea244378538d60838f81cb3a34b49 Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Wed, 2 May 2012 18:12:13 +0800 Subject: [PATCH 281/564] Add NUL-termination to some uses of strncpy. * lib-src/pop.c (pop_stat, pop_list, pop_multi_first, pop_last): NUL-terminate the error buffer. * src/w32font.c (fill_in_logfont): NUL-terminate a string (Bug#11372). --- lib-src/ChangeLog | 5 +++++ lib-src/pop.c | 8 +++++++- src/ChangeLog | 4 ++++ src/w32font.c | 7 +++++-- 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index e58b291ec89..8e07193ae0c 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog @@ -1,3 +1,8 @@ +2012-05-02 Jim Meyering + + * lib-src/pop.c (pop_stat, pop_list, pop_multi_first, pop_last): + NUL-terminate the error buffer (Bug#11372). + 2012-04-15 Chong Yidong * emacsclient.c (decode_options): Move -t -n corner case handling diff --git a/lib-src/pop.c b/lib-src/pop.c index 37494d17a44..c4c7f2b4e2f 100644 --- a/lib-src/pop.c +++ b/lib-src/pop.c @@ -346,6 +346,7 @@ pop_stat (popserver server, int *count, int *size) if (0 == strncmp (fromserver, "-ERR", 4)) { strncpy (pop_error, fromserver, ERROR_MAX); + pop_error[ERROR_MAX-1] = '\0'; } else { @@ -447,7 +448,10 @@ pop_list (popserver server, int message, int **IDs, int **sizes) if (strncmp (fromserver, "+OK ", 4)) { if (! strncmp (fromserver, "-ERR", 4)) - strncpy (pop_error, fromserver, ERROR_MAX); + { + strncpy (pop_error, fromserver, ERROR_MAX); + pop_error[ERROR_MAX-1] = '\0'; + } else { strcpy (pop_error, @@ -687,6 +691,7 @@ pop_multi_first (popserver server, const char *command, char **response) if (0 == strncmp (*response, "-ERR", 4)) { strncpy (pop_error, *response, ERROR_MAX); + pop_error[ERROR_MAX-1] = '\0'; return (-1); } else if (0 == strncmp (*response, "+OK", 3)) @@ -860,6 +865,7 @@ pop_last (popserver server) if (! strncmp (fromserver, "-ERR", 4)) { strncpy (pop_error, fromserver, ERROR_MAX); + pop_error[ERROR_MAX-1] = '\0'; return (-1); } else if (strncmp (fromserver, "+OK ", 4)) diff --git a/src/ChangeLog b/src/ChangeLog index e2eb95f60d0..8aa1707cd30 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2012-05-02 Jim Meyering + + * w32font.c (fill_in_logfont): NUL-terminate a string (Bug#11372). + 2012-04-29 Eli Zaretskii * xdisp.c (pos_visible_p): If already at a newline from the diff --git a/src/w32font.c b/src/w32font.c index dab9f4c61b4..8badace9635 100644 --- a/src/w32font.c +++ b/src/w32font.c @@ -2045,8 +2045,11 @@ fill_in_logfont (FRAME_PTR f, LOGFONT *logfont, Lisp_Object font_spec) /* Font families are interned, but allow for strings also in case of user input. */ else if (SYMBOLP (tmp)) - strncpy (logfont->lfFaceName, - SDATA (ENCODE_SYSTEM (SYMBOL_NAME (tmp))), LF_FACESIZE); + { + strncpy (logfont->lfFaceName, + SDATA (ENCODE_SYSTEM (SYMBOL_NAME (tmp))), LF_FACESIZE); + logfont->lfFaceName[LF_FACESIZE-1] = '\0'; + } } tmp = AREF (font_spec, FONT_ADSTYLE_INDEX); From 3f83ace8490fef379df303d1d7a86b099329f018 Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Wed, 2 May 2012 18:17:03 +0800 Subject: [PATCH 282/564] * src/xterm.c (x_term_init): Use memcpy instead of strncpy. Fixes: debbugs:11373 --- src/ChangeLog | 4 ++++ src/xterm.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index fb5cab2ac3c..33d95c6c7c6 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2012-05-02 Jim Meyering + + * xterm.c (x_term_init): Use memcpy instead of strncpy (Bug#11373). + 2012-05-02 Eli Zaretskii * xdisp.c (pos_visible_p): If already at a newline from the diff --git a/src/xterm.c b/src/xterm.c index f5272fc7630..02fa137d6a7 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -10146,7 +10146,7 @@ x_term_init (Lisp_Object display_name, char *xrm_option, char *resource_name) /* Set the name of the terminal. */ terminal->name = (char *) xmalloc (SBYTES (display_name) + 1); - strncpy (terminal->name, SSDATA (display_name), SBYTES (display_name)); + memcpy (terminal->name, SSDATA (display_name), SBYTES (display_name)); terminal->name[SBYTES (display_name)] = 0; #if 0 From c7b8541ee7840221973a2b3908d5535c1d32598b Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Wed, 2 May 2012 18:20:35 +0800 Subject: [PATCH 283/564] * src/xfns.c (x_window): Use xstrdup (Bug#11375). --- src/ChangeLog | 2 ++ src/xfns.c | 5 +---- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 33d95c6c7c6..d621dcc8859 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -2,6 +2,8 @@ * xterm.c (x_term_init): Use memcpy instead of strncpy (Bug#11373). + * xfns.c (x_window): Use xstrdup (Bug#11375). + 2012-05-02 Eli Zaretskii * xdisp.c (pos_visible_p): If already at a newline from the diff --git a/src/xfns.c b/src/xfns.c index df1b39b018f..510a66d6349 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -2439,7 +2439,6 @@ x_window (struct frame *f, long window_prompting, int minibuffer_only) /* Do some needed geometry management. */ { - ptrdiff_t len; char *tem, shell_position[sizeof "=x++" + 4 * INT_STRLEN_BOUND (int)]; Arg gal[10]; int gac = 0; @@ -2508,13 +2507,11 @@ x_window (struct frame *f, long window_prompting, int minibuffer_only) } } - len = strlen (shell_position) + 1; /* We don't free this because we don't know whether it is safe to free it while the frame exists. It isn't worth the trouble of arranging to free it when the frame is deleted. */ - tem = (char *) xmalloc (len); - strncpy (tem, shell_position, len); + tem = (char *) xstrdup (shell_position); XtSetArg (gal[gac], XtNgeometry, tem); gac++; XtSetValues (shell_widget, gal, gac); } From 1e6f32f816c83b5a78e514d77b8f1d7052561d2e Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Wed, 2 May 2012 18:41:27 +0800 Subject: [PATCH 284/564] * lib-src/emacsclient.c (send_to_emacs): Avoid invalid strcpy upon partial send. Fixes: debbugs:11374 --- lib-src/ChangeLog | 5 +++++ lib-src/emacsclient.c | 40 ++++++++++++++++++++++------------------ 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index d225b77f156..007a365708c 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog @@ -1,3 +1,8 @@ +2012-05-02 Jim Meyering + + * emacsclient.c (send_to_emacs): Avoid invalid strcpy upon partial + send (Bug#11374). + 2012-04-29 Andreas Schwab * make-docfile.c (scan_lisp_file) [DEBUG]: Also skip if and diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c index ea55398306b..d8e9e256584 100644 --- a/lib-src/emacsclient.c +++ b/lib-src/emacsclient.c @@ -119,6 +119,8 @@ char *(getcwd) (char *, size_t); # define IF_LINT(Code) /* empty */ #endif +#define min(x, y) (((x) < (y)) ? (x) : (y)) + /* Name used to invoke this program. */ const char *progname; @@ -783,33 +785,35 @@ sock_err_message (const char *function_name) static void send_to_emacs (HSOCKET s, const char *data) { - while (data) + size_t dlen; + + if (!data) + return; + + dlen = strlen (data); + while (*data) { - size_t dlen = strlen (data); - if (dlen + sblen >= SEND_BUFFER_SIZE) - { - int part = SEND_BUFFER_SIZE - sblen; - strncpy (&send_buffer[sblen], data, part); - data += part; - sblen = SEND_BUFFER_SIZE; - } - else if (dlen) - { - strcpy (&send_buffer[sblen], data); - data = NULL; - sblen += dlen; - } - else - break; + size_t part = min (dlen, SEND_BUFFER_SIZE - sblen); + memcpy (&send_buffer[sblen], data, part); + data += part; + sblen += part; if (sblen == SEND_BUFFER_SIZE || (sblen > 0 && send_buffer[sblen-1] == '\n')) { int sent = send (s, send_buffer, sblen, 0); + if (sent < 0) + { + message (TRUE, "%s: failed to send %d bytes to socket: %s\n", + progname, sblen, strerror (errno)); + fail (); + } if (sent != sblen) - strcpy (send_buffer, &send_buffer[sent]); + memmove (send_buffer, &send_buffer[sent], sblen - sent); sblen -= sent; } + + dlen -= part; } } From 7b97c76414846f8982b7f96afca4cda5e9ecfcc5 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Wed, 2 May 2012 18:57:03 +0800 Subject: [PATCH 285/564] Fix naming of abnormal hook vars in allout.el. * lisp/allout.el (allout-exposure-change-functions) (allout-structure-added-functions) (allout-structure-deleted-functions) (allout-structure-shifted-functions): Rename abnormal hooks from *-hook, and convert to defcustoms. (allout-after-copy-or-kill-hook, allout-post-undo-hook): Convert to defcustoms. (allout-mode-hook, allout-mode-deactivate-hook): Doc fix. * lisp/allout-widgets.el: Hook callers changed. --- lisp/ChangeLog | 13 +++++ lisp/allout-widgets.el | 26 +++++----- lisp/allout.el | 114 +++++++++++++++++++++++++---------------- 3 files changed, 96 insertions(+), 57 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e144bf1507e..d1a6cd0dcd2 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,16 @@ +2012-05-02 Chong Yidong + + * allout.el (allout-exposure-change-functions) + (allout-structure-added-functions) + (allout-structure-deleted-functions) + (allout-structure-shifted-functions): Rename abnormal hooks from + *-hook, and convert to defcustoms. + (allout-after-copy-or-kill-hook, allout-post-undo-hook): Convert + to defcustoms. + (allout-mode-hook, allout-mode-deactivate-hook): Doc fix. + + * allout-widgets.el: Hook callers changed. + 2012-05-02 Eli Zaretskii * mail/rmail.el (rmail-yank-current-message): Use the encoding of diff --git a/lisp/allout-widgets.el b/lisp/allout-widgets.el index 16420d8af27..6a5b0d5f7bf 100644 --- a/lisp/allout-widgets.el +++ b/lisp/allout-widgets.el @@ -579,13 +579,13 @@ outline hot-spot navigation \(see `allout-mode')." (if (current-local-map) (set-keymap-parent allout-item-body-keymap (current-local-map))) - (add-hook 'allout-exposure-change-hook + (add-hook 'allout-exposure-change-functions 'allout-widgets-exposure-change-recorder nil 'local) - (add-hook 'allout-structure-added-hook + (add-hook 'allout-structure-added-functions 'allout-widgets-additions-recorder nil 'local) - (add-hook 'allout-structure-deleted-hook + (add-hook 'allout-structure-deleted-functions 'allout-widgets-deletions-recorder nil 'local) - (add-hook 'allout-structure-shifted-hook + (add-hook 'allout-structure-shifted-functions 'allout-widgets-shifts-recorder nil 'local) (add-hook 'allout-after-copy-or-kill-hook 'allout-widgets-after-copy-or-kill-function nil 'local) @@ -626,13 +626,13 @@ outline hot-spot navigation \(see `allout-mode')." (remove-hook 'after-change-functions 'allout-widgets-after-change-handler 'local) - (remove-hook 'allout-exposure-change-hook + (remove-hook 'allout-exposure-change-functions 'allout-widgets-exposure-change-recorder 'local) - (remove-hook 'allout-structure-added-hook + (remove-hook 'allout-structure-added-functions 'allout-widgets-additions-recorder 'local) - (remove-hook 'allout-structure-deleted-hook + (remove-hook 'allout-structure-deleted-functions 'allout-widgets-deletions-recorder 'local) - (remove-hook 'allout-structure-shifted-hook + (remove-hook 'allout-structure-shifted-functions 'allout-widgets-shifts-recorder 'local) (remove-hook 'allout-after-copy-or-kill-hook 'allout-widgets-after-copy-or-kill-function 'local) @@ -992,7 +992,7 @@ Records changes in `allout-widgets-changes-record'." (defun allout-widgets-exposure-change-processor (changes) "Widgetize and adjust item widgets tracking allout outline exposure changes. -Generally invoked via `allout-exposure-change-hook'." +Generally invoked via `allout-exposure-change-functions'." (let ((changes (sort changes (function (lambda (this next) (< (cadr this) (cadr next)))))) @@ -1059,7 +1059,7 @@ Generally invoked via `allout-exposure-change-hook'." (defun allout-widgets-additions-recorder (from to) "Record allout item additions for tracking during post-command processing. -Intended for use on `allout-structure-added-hook'. +Intended for use on `allout-structure-added-functions'. FROM point at the start of the first new item and TO is point at the start of the last one. @@ -1106,8 +1106,7 @@ Dispatched by `allout-widgets-post-command-business' in response to ;;;_ > allout-widgets-deletions-recorder (depth from) (defun allout-widgets-deletions-recorder (depth from) "Record allout item deletions for tracking during post-command processing. - -Intended for use on `allout-structure-deleted-hook'. +Intended for use on `allout-structure-deleted-functions'. DEPTH is the depth of the deleted subtree, and FROM is the point from which the subtree was deleted. @@ -1134,8 +1133,7 @@ Dispatched by `allout-widgets-post-command-business' in response to ;;;_ > allout-widgets-shifts-recorder (shifted-amount at) (defun allout-widgets-shifts-recorder (shifted-amount at) "Record outline subtree shifts for tracking during post-command processing. - -Intended for use on `allout-structure-shifted-hook'. +Intended for use on `allout-structure-shifted-functions'. SHIFTED-AMOUNT is the depth change and AT is the point at the start of the subtree that's been shifted. diff --git a/lisp/allout.el b/lisp/allout.el index 4883e4244a8..6e544716247 100644 --- a/lisp/allout.el +++ b/lisp/allout.el @@ -1403,19 +1403,19 @@ their settings before allout-mode was started." ,expr)) ;;;_ = allout-mode-hook (defvar allout-mode-hook nil - "Hook that's run when allout mode starts.") + "Hook run when allout mode starts.") ;;;_ = allout-mode-deactivate-hook (defvar allout-mode-deactivate-hook nil - "Hook that's run when allout mode ends.") + "Hook run when allout mode ends.") (define-obsolete-variable-alias 'allout-mode-deactivate-hook 'allout-mode-off-hook "24.1") ;;;_ = allout-exposure-category (defvar allout-exposure-category nil "Symbol for use as allout invisible-text overlay category.") -;;;_ = allout-exposure-change-hook -(defvar allout-exposure-change-hook nil - "Hook that's run after allout outline subtree exposure changes. +;;;_ = allout-exposure-change-functions +(defcustom allout-exposure-change-functions nil + "Abnormal hook run after allout outline subtree exposure changes. It is run at the conclusion of `allout-flag-region'. Functions on the hook must take three arguments: @@ -1424,21 +1424,33 @@ Functions on the hook must take three arguments: - TO -- integer indicating the point of the end of the change. - FLAG -- change mode: nil for exposure, otherwise concealment. -This hook might be invoked multiple times by a single command.") -;;;_ = allout-structure-added-hook -(defvar allout-structure-added-hook nil - "Hook that's run after addition of items to the outline. +This hook might be invoked multiple times by a single command." + :type 'hook + :group 'allout + :version "24.2") +(define-obsolete-variable-alias 'allout-exposure-change-hook + 'allout-exposure-change-functions "24.2") + +;;;_ = allout-structure-added-functions +(defcustom allout-structure-added-functions nil + "Abnormal hook run after adding items to an Allout outline. Functions on the hook should take two arguments: - NEW-START -- integer indicating position of start of the first new item. - NEW-END -- integer indicating position of end of the last new item. -This hook might be invoked multiple times by a single command.") -;;;_ = allout-structure-deleted-hook -(defvar allout-structure-deleted-hook nil - "Hook that's run after disciplined deletion of subtrees from the outline. +This hook might be invoked multiple times by a single command." + :type 'hook + :group 'allout + :version "24.2") +(define-obsolete-variable-alias 'allout-structure-added-hook + 'allout-structure-added-functions "24.2") + +;;;_ = allout-structure-deleted-functions +(defcustom allout-structure-deleted-functions nil + "Abnormal hook run after deleting subtrees from an Allout outline. Functions on the hook must take two arguments: - DEPTH -- integer indicating the depth of the subtree that was deleted. @@ -1447,11 +1459,17 @@ Functions on the hook must take two arguments: Some edits that remove or invalidate items may be missed by this hook: specifically edits that native allout routines do not control. -This hook might be invoked multiple times by a single command.") -;;;_ = allout-structure-shifted-hook -(defvar allout-structure-shifted-hook nil - "Hook that's run after shifting of items in the outline. +This hook might be invoked multiple times by a single command." + :type 'hook + :group 'allout + :version "24.2") +(define-obsolete-variable-alias 'allout-structure-deleted-hook + 'allout-structure-deleted-functions "24.2") + +;;;_ = allout-structure-shifted-functions +(defcustom allout-structure-shifted-functions nil + "Abnormal hook run after shifting items in an Allout outline. Functions on the hook should take two arguments: - DEPTH-CHANGE -- integer indicating depth increase, negative for decrease @@ -1460,20 +1478,30 @@ Functions on the hook should take two arguments: Some edits that shift items can be missed by this hook: specifically edits that native allout routines do not control. -This hook might be invoked multiple times by a single command.") +This hook might be invoked multiple times by a single command." + :type 'hook + :group 'allout + :version "24.2") + +(define-obsolete-variable-alias 'allout-structure-shifted-hook + 'allout-structure-shifted-functions "24.2") + ;;;_ = allout-after-copy-or-kill-hook -(defvar allout-after-copy-or-kill-hook nil - "Hook that's run after copying outline text. +(defcustom allout-after-copy-or-kill-hook nil + "Normal hook run after copying outline text.." + :type 'hook + :group 'allout + :version "24.2") -Functions on the hook should not require any arguments.") ;;;_ = allout-post-undo-hook -(defvar allout-post-undo-hook nil - "Hook that's run after undo activity. - +(defcustom allout-post-undo-hook nil + "Normal hook run after undo activity. The item that's current when the hook is run *may* be the one -that was affected by the undo. +that was affected by the undo.." + :type 'hook + :group 'allout + :version "24.2") -Functions on the hook should not require any arguments.") ;;;_ = allout-outside-normal-auto-fill-function (defvar allout-outside-normal-auto-fill-function nil "Value of `normal-auto-fill-function' outside of allout mode. @@ -1883,10 +1911,10 @@ without changes to the allout core. Here are key ones: `allout-mode-hook' `allout-mode-deactivate-hook' (deprecated) `allout-mode-off-hook' -`allout-exposure-change-hook' -`allout-structure-added-hook' -`allout-structure-deleted-hook' -`allout-structure-shifted-hook' +`allout-exposure-change-functions' +`allout-structure-added-functions' +`allout-structure-deleted-functions' +`allout-structure-shifted-functions' `allout-after-copy-or-kill-hook' `allout-post-undo-hook' @@ -3845,7 +3873,7 @@ Nuances: (allout-show-children))) (end-of-line) - (run-hook-with-args 'allout-structure-added-hook start end) + (run-hook-with-args 'allout-structure-added-functions start end) ) ) ) @@ -3970,7 +3998,7 @@ Note that refill of indented paragraphs is not done." nil ;;; number-control nil ;;; index t) ;;; do-successors - (run-hook-with-args 'allout-exposure-change-hook + (run-hook-with-args 'allout-exposure-change-functions from to t)) (setq arg (1- arg)) (if (<= arg 0) @@ -4071,7 +4099,7 @@ this function." (not (allout-encrypted-topic-p))) (allout-reindent-body current-depth new-depth)) - (run-hook-with-args 'allout-exposure-change-hook mb me nil) + (run-hook-with-args 'allout-exposure-change-functions mb me nil) ;; Recursively rectify successive siblings of orig topic if ;; caller elected for it: @@ -4333,7 +4361,7 @@ the file can be adjusted to any positive depth, however." (allout-show-children)))))) (let ((where (point))) (allout-rebullet-topic 1 (and (> arg 1) 'sans-offspring)) - (run-hook-with-args 'allout-structure-shifted-hook arg where)))) + (run-hook-with-args 'allout-structure-shifted-functions arg where)))) ;;;_ > allout-shift-out (arg) (defun allout-shift-out (arg) "Decrease depth of current heading and any topics collapsed within it. @@ -4373,7 +4401,7 @@ subtopics into siblings of the item." (goto-char child-point) (allout-shift-out 1)))) (allout-rebullet-topic (* arg -1)))) - (run-hook-with-args 'allout-structure-shifted-hook (* arg -1) where)))) + (run-hook-with-args 'allout-structure-shifted-functions (* arg -1) where)))) ;;;_ : Surgery (kill-ring) functions with special provisions for outlines: ;;;_ > allout-kill-line (&optional arg) (defun allout-kill-line (&optional arg) @@ -4408,7 +4436,7 @@ subtopics into siblings of the item." (if (not (save-match-data (looking-at allout-regexp))) (allout-next-heading)) (allout-renumber-to-depth depth))) - (run-hook-with-args 'allout-structure-deleted-hook depth (point)))))) + (run-hook-with-args 'allout-structure-deleted-functions depth (point)))))) ;;;_ > allout-copy-line-as-kill () (defun allout-copy-line-as-kill () "Like `allout-kill-topic', but save to kill ring instead of deleting." @@ -4456,7 +4484,7 @@ Topic exposure is marked with text-properties, to be used by (save-excursion (allout-renumber-to-depth depth)) - (run-hook-with-args 'allout-structure-deleted-hook depth (point))))) + (run-hook-with-args 'allout-structure-deleted-functions depth (point))))) ;;;_ > allout-copy-topic-as-kill () (defun allout-copy-topic-as-kill () "Like `allout-kill-topic', but save to kill ring instead of deleting." @@ -4668,7 +4696,7 @@ however, are left exactly like normal, non-allout-specific yanks." (allout-deannotate-hidden (allout-mark-marker t) (point))) (if (not resituate) (exchange-point-and-mark)) - (run-hook-with-args 'allout-structure-added-hook subj-beg subj-end)))) + (run-hook-with-args 'allout-structure-added-functions subj-beg subj-end)))) ;;;_ > allout-yank (&optional arg) (defun allout-yank (&optional arg) "`allout-mode' yank, with depth and numbering adjustment of yanked topics. @@ -4765,9 +4793,9 @@ by pops to non-distinctive yanks. Bug..." ;;;_ > allout-flag-region (from to flag) (defun allout-flag-region (from to flag) "Conceal text between FROM and TO if FLAG is non-nil, else reveal it. - -Exposure-change hook `allout-exposure-change-hook' is run with the same -arguments as this function, after the exposure changes are made." +After the exposure changes are made, run the abnormal hook +`allout-exposure-change-functions' with the same arguments as +this function." ;; We use outline invisibility spec. (remove-overlays from to 'category 'allout-exposure-category) @@ -4783,7 +4811,7 @@ arguments as this function, after the exposure changes are made." (overlay-put o (pop props) (pop props)) (error nil)))))) (setq allout-this-command-hid-text t)) - (run-hook-with-args 'allout-exposure-change-hook from to flag)) + (run-hook-with-args 'allout-exposure-change-functions from to flag)) ;;;_ > allout-flag-current-subtree (flag) (defun allout-flag-current-subtree (flag) "Conceal currently-visible topic's subtree if FLAG non-nil, else reveal it." @@ -6022,7 +6050,7 @@ See `allout-toggle-current-subtree-encryption' for more details." (allout-inhibit-auto-save-info-for-decryption was-buffer-saved-size) (allout-maybe-resume-auto-save-info-after-encryption)) - (run-hook-with-args 'allout-structure-added-hook + (run-hook-with-args 'allout-structure-added-functions bullet-pos subtree-end)))) ;;;_ > allout-encrypt-string (text decrypt allout-buffer keymode-cue ;;; &optional rejected) From c635b6d5458afe1e86f044a407a0331ee75dc816 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 2 May 2012 07:17:25 -0400 Subject: [PATCH 286/564] Auto-commit of generated files. --- autogen/configure | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/autogen/configure b/autogen/configure index c6b78090d21..7c954129fca 100755 --- a/autogen/configure +++ b/autogen/configure @@ -14415,9 +14415,8 @@ $as_echo "$emacs_cv_freebsd_terminfo" >&6; } ;; netbsd) - if test $ac_cv_search_tputs = -lterminfo; then + if "x$LIBS_TERMCAP" = "x-lterminfo" ; then TERMINFO=yes - LIBS_TERMCAP="-lterminfo" else LIBS_TERMCAP="-ltermcap" fi From 069a7756f78b308730e862daf0a6711f4cd642db Mon Sep 17 00:00:00 2001 From: Juanma Barranquero Date: Wed, 2 May 2012 13:33:49 +0200 Subject: [PATCH 287/564] lib-src/emacsclient.c (min): Undef before redefining it. --- lib-src/ChangeLog | 4 ++++ lib-src/emacsclient.c | 3 +++ 2 files changed, 7 insertions(+) diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index 007a365708c..f5715cba446 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog @@ -1,3 +1,7 @@ +2012-05-02 Juanma Barranquero + + * emacsclient.c (min): Undef before redefining it. + 2012-05-02 Jim Meyering * emacsclient.c (send_to_emacs): Avoid invalid strcpy upon partial diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c index d8e9e256584..29504445407 100644 --- a/lib-src/emacsclient.c +++ b/lib-src/emacsclient.c @@ -119,6 +119,9 @@ char *(getcwd) (char *, size_t); # define IF_LINT(Code) /* empty */ #endif +#ifdef min +#undef min +#endif #define min(x, y) (((x) < (y)) ? (x) : (y)) From 55a714795dbd59a16608d2b565e12fec5b5ba130 Mon Sep 17 00:00:00 2001 From: Juanma Barranquero Date: Wed, 2 May 2012 13:38:01 +0200 Subject: [PATCH 288/564] Silence byte-compiler warnings. lisp/notifications.el (dbus-debug): lisp/term/linux.el (gpm-mouse-enable): lisp/term/screen.el (xterm-register-default-colors): Declare. --- lisp/ChangeLog | 6 ++++++ lisp/notifications.el | 4 +++- lisp/term/linux.el | 2 ++ lisp/term/screen.el | 2 ++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index d1a6cd0dcd2..c264cb6bf26 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2012-05-02 Juanma Barranquero + + * notifications.el (dbus-debug): + * term/linux.el (gpm-mouse-enable): + * term/screen.el (xterm-register-default-colors): Declare. + 2012-05-02 Chong Yidong * allout.el (allout-exposure-change-functions) diff --git a/lisp/notifications.el b/lisp/notifications.el index 83992834502..7a79d5f6754 100644 --- a/lisp/notifications.el +++ b/lisp/notifications.el @@ -173,7 +173,7 @@ Various PARAMS can be set: notification when an action has been invoked. :transient When set the server will treat the notification as transient and by-pass the server's persistence capability, if it - should exist. + should exist. :x Specifies the X location on the screen that the notification should point to. The \"y\" hint must also be specified. :y Specifies the Y location on the screen that the notification @@ -344,6 +344,8 @@ of another `notifications-notify' call." notifications-close-notification-method :int32 id)) +(defvar dbus-debug) ; used in the macroexpansion of dbus-ignore-errors + (defun notifications-get-capabilities () "Return the capabilities of the notification server, a list of strings. The following capabilities can be expected: diff --git a/lisp/term/linux.el b/lisp/term/linux.el index e85c8d2ce0d..00bcdfdf542 100644 --- a/lisp/term/linux.el +++ b/lisp/term/linux.el @@ -1,5 +1,7 @@ ;; The Linux console handles Latin-1 by default. +(declare-function gpm-mouse-enable "t-mouse" ()) + (defun terminal-init-linux () "Terminal initialization function for linux." (unless (terminal-coding-system) diff --git a/lisp/term/screen.el b/lisp/term/screen.el index 678ed1f0ba0..d37a695086a 100644 --- a/lisp/term/screen.el +++ b/lisp/term/screen.el @@ -1,6 +1,8 @@ ;; Treat a screen terminal similar to an xterm. (load "term/xterm") +(declare-function xterm-register-default-colors "xterm" ()) + (defun terminal-init-screen () "Terminal initialization function for screen." ;; Use the xterm color initialization code. From 5d3385a0ebc280b07c3432ae066d001417d882fc Mon Sep 17 00:00:00 2001 From: Juanma Barranquero Date: Wed, 2 May 2012 13:43:14 +0200 Subject: [PATCH 289/564] Fix ChangeLog typos. --- lib-src/ChangeLog | 2 +- lisp/ChangeLog | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index f5715cba446..79c4e0e10cb 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog @@ -16,7 +16,7 @@ * emacsclient.c (decode_options): Move -t -n corner case handling into server.el (Bug#11102). - (main): Send -tty to Emacs under more circumstanced (Bug#8314). + (main): Send -tty to Emacs under more circumstances (Bug#8314). 2012-04-18 Paul Eggert diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c264cb6bf26..2aa0d9db207 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -11,8 +11,8 @@ (allout-structure-deleted-functions) (allout-structure-shifted-functions): Rename abnormal hooks from *-hook, and convert to defcustoms. - (allout-after-copy-or-kill-hook, allout-post-undo-hook): Convert - to defcustoms. + (allout-after-copy-or-kill-hook, allout-post-undo-hook): + Convert to defcustoms. (allout-mode-hook, allout-mode-deactivate-hook): Doc fix. * allout-widgets.el: Hook callers changed. @@ -25,8 +25,8 @@ 2012-05-02 Martin Rudalics - * window.el (display-buffer--action-function-custom-type): Fix - entry. + * window.el (display-buffer--action-function-custom-type): + Fix entry. 2012-05-02 Alan Mackenzie @@ -8254,7 +8254,7 @@ insecure exception for current topic. Also note that auto-saves are handled differently. - (allout-auto-save-temporarily-disabled), (allout-just-did-undo): + (allout-auto-save-temporarily-disabled, allout-just-did-undo): State variables for tracking auto-save inhibition situation. (allout-write-contents-hook-handler): Rename from @@ -10701,8 +10701,8 @@ (newsticker--plainview-tool-bar-map): Move tool-bar icons to etc/images/newsticker. - * net/newst-backend.el (newsticker--do-run-auto-mark-filter), - (newsticker--process-auto-mark-filter-match): : Tell user about + * net/newst-backend.el (newsticker--do-run-auto-mark-filter) + (newsticker--process-auto-mark-filter-match): Tell user about auto-marking. 2011-05-13 Didier Verna From 2bc356d71c2511fa1231149538c988c430471bdb Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Wed, 2 May 2012 21:00:29 +0800 Subject: [PATCH 290/564] Add customization data to several built-in variables. * lisp/cus-start.el (gc-cons-percentage, exec-suffixes) (dos-display-scancodes, dos-hyper-key, dos-super-key) (dos-keypad-mode, debug-on-signal, vertical-centering-font-regexp) (make-cursor-line-fully-visible, void-text-area-pointer) (font-list-limit): Add customization data. * doc/lispref/display.texi (Font Lookup): * doc/lispref/frames.texi (Pointer Shape): * doc/lispref/processes.texi (Subprocess Creation): Use defopt for options. --- doc/lispref/ChangeLog | 6 ++++++ doc/lispref/display.texi | 12 ++++++------ doc/lispref/frames.texi | 4 ++-- doc/lispref/processes.texi | 4 ++-- lisp/ChangeLog | 6 ++++++ lisp/cus-start.el | 28 ++++++++++++++++++++++++++-- 6 files changed, 48 insertions(+), 12 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index dd439721f4d..c3eadfc8558 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,9 @@ +2012-05-02 Chong Yidong + + * display.texi (Font Lookup): + * frames.texi (Pointer Shape): + * processes.texi (Subprocess Creation): Use defopt for options. + 2012-05-02 Glenn Morris * elisp.texi (@copying): diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi index 4ec3b8bf08a..cafa8ddd18b 100644 --- a/doc/lispref/display.texi +++ b/doc/lispref/display.texi @@ -2923,13 +2923,13 @@ The last three elements give additional information about the font. encoding of the font. @end defun -@defvar font-list-limit +@defopt font-list-limit This variable specifies maximum number of fonts to consider in font -matching. The function @code{x-family-fonts} will not return more than -that many fonts, and font selection will consider only that many fonts -when searching a matching font for face attributes. The default is -currently 100. -@end defvar +matching. The function @code{x-family-fonts} will not return more +than that many fonts, and font selection will consider only that many +fonts when searching a matching font for face attributes. The default +is 100. +@end defopt @node Fontsets @subsection Fontsets diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi index 869f03e2273..2ff4df55669 100644 --- a/doc/lispref/frames.texi +++ b/doc/lispref/frames.texi @@ -1881,12 +1881,12 @@ of the buffer contents), the mouse pointer usually uses the @code{arrow} style, but you can specify a different style (one of those above) by setting @code{void-text-area-pointer}. -@defvar void-text-area-pointer +@defopt void-text-area-pointer This variable specifies the mouse pointer style for void text areas. These include the areas after the end of a line or below the last line in the buffer. The default is to use the @code{arrow} (non-text) pointer style. -@end defvar +@end defopt When using X, you can specify what the @code{text} pointer style really looks like by setting the variable @code{x-pointer-shape}. diff --git a/doc/lispref/processes.texi b/doc/lispref/processes.texi index 71736584865..ea68cf9ce96 100644 --- a/doc/lispref/processes.texi +++ b/doc/lispref/processes.texi @@ -96,12 +96,12 @@ Expansion}). @code{nil} in this list refers to Executing a program can also try adding suffixes to the specified name: -@defvar exec-suffixes +@defopt exec-suffixes This variable is a list of suffixes (strings) to try adding to the specified program file name. The list should include @code{""} if you want the name to be tried exactly as specified. The default value is system-dependent. -@end defvar +@end defopt @strong{Please note:} The argument @var{program} contains only the name of the program; it may not contain any command-line arguments. You diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 2aa0d9db207..d2ab4b60c8b 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -6,6 +6,12 @@ 2012-05-02 Chong Yidong + * cus-start.el (gc-cons-percentage, exec-suffixes) + (dos-display-scancodes, dos-hyper-key, dos-super-key) + (dos-keypad-mode, debug-on-signal, vertical-centering-font-regexp) + (make-cursor-line-fully-visible, void-text-area-pointer) + (font-list-limit): Add customization data. + * allout.el (allout-exposure-change-functions) (allout-structure-added-functions) (allout-structure-deleted-functions) diff --git a/lisp/cus-start.el b/lisp/cus-start.el index 9198eaddc37..3863e718f58 100644 --- a/lisp/cus-start.el +++ b/lisp/cus-start.el @@ -48,6 +48,7 @@ ;; :tag - custom-tag property (let ((all '(;; alloc.c (gc-cons-threshold alloc integer) + (gc-cons-percentage alloc float) (garbage-collection-messages alloc boolean) ;; buffer.c (mode-line-format mode-line sexp) ;Hard to do right. @@ -132,6 +133,7 @@ Leaving \"Default\" unchecked is equivalent with specifying a default of (exec-path execute (repeat (choice (const :tag "default directory" nil) (directory :format "%v")))) + (exec-suffixes execute (repeat string)) ;; charset.c (charset-map-path installation (repeat (directory :format "%v"))) @@ -174,6 +176,13 @@ Leaving \"Default\" unchecked is equivalent with specifying a default of (inverse-video display boolean) (visible-bell display boolean) (no-redraw-on-reenter display boolean) + + ;; dosfns.c + (dos-display-scancodes display boolean) + (dos-hyper-key keyboard integer) + (dos-super-key keyboard integer) + (dos-keypad-mode keyboard integer) + ;; editfns.c (user-full-name mail string) ;; eval.c @@ -190,8 +199,9 @@ Leaving \"Default\" unchecked is equivalent with specifying a default of (const :tag "always" t))) (debug-ignored-errors debug (repeat (choice symbol regexp))) (debug-on-quit debug boolean) - ;; fileio.c - (delete-by-moving-to-trash auto-save boolean "23.1") + (debug-on-signal debug boolean) + ;; fileio.c + (delete-by-moving-to-trash auto-save boolean "23.1") (auto-save-visited-file-name auto-save boolean) ;; filelock.c (temporary-file-directory @@ -227,6 +237,8 @@ Leaving \"Default\" unchecked is equivalent with specifying a default of (use-dialog-box menu boolean "21.1") (use-file-dialog menu boolean "22.1") (focus-follows-mouse frames boolean "20.3") + ;; fontset.c + (vertical-centering-font-regexp display regexp) ;; frame.c (default-frame-alist frames (repeat (cons :format "%v" @@ -419,6 +431,7 @@ since it could result in memory overflow and make Emacs crash." (hscroll-margin windows integer "22.1") (hscroll-step windows number "22.1") (truncate-partial-width-windows display boolean "23.1") + (make-cursor-line-fully-visible windows boolean) (mode-line-inverse-video mode-line boolean) (mode-line-in-non-selected-windows mode-line boolean "22.1") (line-number-display-limit display @@ -449,10 +462,21 @@ since it could result in memory overflow and make Emacs crash." (const :tag "System default" :value nil)) "23.3") (tool-bar-max-label-size frames integer "23.3") (auto-hscroll-mode scrolling boolean "21.1") + (void-text-area-pointer cursor + (choice + (const :tag "Standard (text pointer)" :value nil) + (const :tag "Arrow" :value arrow) + (const :tag "Text pointer" :value text) + (const :tag "Hand" :value hand) + (const :tag "Vertical dragger" :value vdrag) + (const :tag "Horizontal dragger" :value hdrag) + (const :tag "Same as mode line" :value modeline) + (const :tag "Hourglass" :value hourglass))) (display-hourglass cursor boolean) (hourglass-delay cursor number) ;; xfaces.c + (font-list-limit display integer) (scalable-fonts-allowed display boolean "22.1") ;; xfns.c (x-bitmap-file-path installation From 687d464f5c60cfe135436dab3dc29620ea8d1f95 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Wed, 2 May 2012 21:06:08 +0800 Subject: [PATCH 291/564] Backport Bug#11374 fix from trunk --- lib-src/ChangeLog | 5 ++++- lib-src/emacsclient.c | 40 ++++++++++++++++++++++------------------ 2 files changed, 26 insertions(+), 19 deletions(-) diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index 8e07193ae0c..90fd722141b 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog @@ -1,4 +1,7 @@ -2012-05-02 Jim Meyering +2012-05-02 Jim Meyering + + * emacsclient.c (send_to_emacs): Avoid invalid strcpy upon partial + send (Bug#11374). * lib-src/pop.c (pop_stat, pop_list, pop_multi_first, pop_last): NUL-terminate the error buffer (Bug#11372). diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c index 48b4384d487..931f6d10c5c 100644 --- a/lib-src/emacsclient.c +++ b/lib-src/emacsclient.c @@ -119,6 +119,8 @@ char *(getcwd) (char *, size_t); # define IF_LINT(Code) /* empty */ #endif +#define min(x, y) (((x) < (y)) ? (x) : (y)) + /* Name used to invoke this program. */ const char *progname; @@ -783,33 +785,35 @@ sock_err_message (const char *function_name) static void send_to_emacs (HSOCKET s, const char *data) { - while (data) + size_t dlen; + + if (!data) + return; + + dlen = strlen (data); + while (*data) { - size_t dlen = strlen (data); - if (dlen + sblen >= SEND_BUFFER_SIZE) - { - int part = SEND_BUFFER_SIZE - sblen; - strncpy (&send_buffer[sblen], data, part); - data += part; - sblen = SEND_BUFFER_SIZE; - } - else if (dlen) - { - strcpy (&send_buffer[sblen], data); - data = NULL; - sblen += dlen; - } - else - break; + size_t part = min (dlen, SEND_BUFFER_SIZE - sblen); + memcpy (&send_buffer[sblen], data, part); + data += part; + sblen += part; if (sblen == SEND_BUFFER_SIZE || (sblen > 0 && send_buffer[sblen-1] == '\n')) { int sent = send (s, send_buffer, sblen, 0); + if (sent < 0) + { + message (TRUE, "%s: failed to send %d bytes to socket: %s\n", + progname, sblen, strerror (errno)); + fail (); + } if (sent != sblen) - strcpy (send_buffer, &send_buffer[sent]); + memmove (send_buffer, &send_buffer[sent], sblen - sent); sblen -= sent; } + + dlen -= part; } } From be4e7c155b6922dd6105f4be57164210c3441f37 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Wed, 2 May 2012 21:06:50 +0800 Subject: [PATCH 292/564] Backport 2012-05-02T11:33:49Z!lekktu@gmail.com from trunk --- lib-src/ChangeLog | 4 ++++ lib-src/emacsclient.c | 3 +++ 2 files changed, 7 insertions(+) diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index 90fd722141b..3a1212c5031 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog @@ -1,3 +1,7 @@ +2012-05-02 Juanma Barranquero + + * emacsclient.c (min): Undef before redefining it. + 2012-05-02 Jim Meyering * emacsclient.c (send_to_emacs): Avoid invalid strcpy upon partial diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c index 931f6d10c5c..c2b0a80c670 100644 --- a/lib-src/emacsclient.c +++ b/lib-src/emacsclient.c @@ -119,6 +119,9 @@ char *(getcwd) (char *, size_t); # define IF_LINT(Code) /* empty */ #endif +#ifdef min +#undef min +#endif #define min(x, y) (((x) < (y)) ? (x) : (y)) From 2dd1ff26f20e10d9751e411695dc2ee34d8f593a Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 2 May 2012 12:10:02 -0400 Subject: [PATCH 293/564] Auto-commit of generated files. --- autogen/configure | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/autogen/configure b/autogen/configure index 6e8ddc505fe..5a70efc967f 100755 --- a/autogen/configure +++ b/autogen/configure @@ -14939,9 +14939,7 @@ $as_echo "$emacs_cv_freebsd_terminfo" >&6; } ;; netbsd) - if test $ac_cv_search_tputs = -lterminfo; then - LIBS_TERMCAP="-lterminfo" - else + if "x$LIBS_TERMCAP" != "x-lterminfo" ; then TERMINFO=no LIBS_TERMCAP="-ltermcap" fi From 3d6af4d1f67b07bb35b108fa43fb05083ef84d5e Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 2 May 2012 09:14:20 -0700 Subject: [PATCH 294/564] Fix merged ChangeLog entry --- ChangeLog | 3 --- 1 file changed, 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index bf4d53edf4b..2d30d3449f4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -10,9 +10,6 @@ * Makefile.in (install-arch-indep, uninstall): Ensure that INSTALL-type commands are run from top-level. - * Makefile.in (INFO_FILES): Add emacs-gnutls; accidentally - omitted from 2012-04-12 backport from trunk. - * info/dir: Make some entries consistent with the source texi files. * configure.in (LIBS_TERMCAP): Fix netbsd logic, broken 2012-03-04. From a64fe9146ef4d0c3966b76867f4ef97479e99477 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 2 May 2012 09:28:03 -0700 Subject: [PATCH 295/564] Yet more merged ChangeLog fixes --- ChangeLog | 4 ---- 1 file changed, 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2d30d3449f4..3b8af27e7f6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -14,10 +14,6 @@ * configure.in (LIBS_TERMCAP): Fix netbsd logic, broken 2012-03-04. - * info/dir: Make some entries consistent with the source texi files. - - * configure.in (LIBS_TERMCAP): Fix netbsd logic, broken 2012-03-04. - 2012-05-02 Glenn Morris * Makefile.in (install-arch-indep): From 3c30e76668068bad00494c16a742cd9a5cb609fe Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 2 May 2012 12:55:00 -0400 Subject: [PATCH 296/564] configure.in tweak for LD_SWITCH_SYSTEM on FreeBSD, NetBSD (bug#10313) * configure.in (LD_SWITCH_SYSTEM): Don't try to defeat the choices made by FreeBSD and NetBSD. --- ChangeLog | 3 +++ configure.in | 8 ++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3b8af27e7f6..1286f7dcf5a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2012-05-02 Glenn Morris + * configure.in (LD_SWITCH_SYSTEM): Don't try to defeat + the choices made by FreeBSD and NetBSD. (Bug#10313) + * Makefile.in (INFO_FILES): Remove variable. (INFO_NONMISC): New variable. (install-arch-indep, uninstall): Don't use $INFO_FILES. diff --git a/configure.in b/configure.in index c0a12672c62..2bf78e522ec 100644 --- a/configure.in +++ b/configure.in @@ -951,7 +951,9 @@ case "$opsys" in ## Let `ld' find image libs and similar things in /usr/local/lib. ## The system compiler, GCC, has apparently been modified to not ## look there, contrary to what a stock GCC would do. - LD_SWITCH_SYSTEM=-L/usr/local/lib +### It's not our place to do this. See bug#10313#17. +### LD_SWITCH_SYSTEM=-L/usr/local/lib + : ;; gnu-linux) @@ -960,7 +962,9 @@ case "$opsys" in ;; netbsd) - LD_SWITCH_SYSTEM="-Wl,-rpath,/usr/pkg/lib -L/usr/pkg/lib -Wl,-rpath,/usr/local/lib -L/usr/local/lib" +### It's not our place to do this. See bug#10313#17. +### LD_SWITCH_SYSTEM="-Wl,-rpath,/usr/pkg/lib -L/usr/pkg/lib -Wl,-rpath,/usr/local/lib -L/usr/local/lib" + : ;; openbsd) From 0c16dfed7078493adb0efd587fd3762b4642b712 Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Wed, 2 May 2012 13:21:54 -0400 Subject: [PATCH 297/564] * intervals.c (adjust_intervals_for_insertion): Initialize `newi' with RESET_INTERVAL. * buffer.c (Fget_buffer_create, Fmake_indirect_buffer): Remove duplicated buffer name initialization. --- src/ChangeLog | 8 ++++++++ src/buffer.c | 2 -- src/intervals.c | 1 + 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index d621dcc8859..01e137d2fcc 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2012-05-02 Dmitry Antipov + + * intervals.c (adjust_intervals_for_insertion): Initialize `newi' + with RESET_INTERVAL. + + * buffer.c (Fget_buffer_create, Fmake_indirect_buffer): + Remove duplicated buffer name initialization. + 2012-05-02 Jim Meyering * xterm.c (x_term_init): Use memcpy instead of strncpy (Bug#11373). diff --git a/src/buffer.c b/src/buffer.c index 9bac3ec742b..2ddbc699481 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -392,7 +392,6 @@ even if it is dead. The return value is never nil. */) BVAR (b, mark) = Fmake_marker (); BUF_MARKERS (b) = NULL; - BVAR (b, name) = name; /* Put this in the alist of all live buffers. */ XSETBUFFER (buffer, b); @@ -612,7 +611,6 @@ CLONE nil means the indirect buffer's state is reset to default values. */) Vbuffer_alist = nconc2 (Vbuffer_alist, Fcons (Fcons (name, buf), Qnil)); BVAR (b, mark) = Fmake_marker (); - BVAR (b, name) = name; /* The multibyte status belongs to the base buffer. */ BVAR (b, enable_multibyte_characters) = BVAR (b->base_buffer, enable_multibyte_characters); diff --git a/src/intervals.c b/src/intervals.c index 88f47f58b52..a750ccd13f7 100644 --- a/src/intervals.c +++ b/src/intervals.c @@ -1000,6 +1000,7 @@ adjust_intervals_for_insertion (INTERVAL tree, Lisp_Object pleft, pright; struct interval newi; + RESET_INTERVAL (&newi); pleft = NULL_INTERVAL_P (prev) ? Qnil : prev->plist; pright = NULL_INTERVAL_P (i) ? Qnil : i->plist; newi.plist = merge_properties_sticky (pleft, pright); From 187e9b902d564a6513d1079360155560cc517423 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 2 May 2012 13:41:21 -0400 Subject: [PATCH 298/564] NEWS addition re configure.in and BSD -L options --- etc/NEWS | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/etc/NEWS b/etc/NEWS index 01d8d308831..cd15273c3db 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -32,6 +32,11 @@ may be useful. --- ** Emacs uses libtinfo in preference to libncurses, if available. +--- +** On FreeBSD and NetBSD, configure no longer adds /usr/local/lib and +/usr/pkg/lib to the linker search path. You must add them yourself if +you want them. + * Startup Changes in Emacs 24.2 From 99d2758343245de1ac452a9b8d1f4c1521f8c8d6 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Wed, 2 May 2012 17:34:57 -0400 Subject: [PATCH 299/564] * subr.el (read-passwd): Better clean after ourselves. Fixes: debbugs:11392 --- lisp/ChangeLog | 4 ++++ lisp/subr.el | 29 ++++++++++++++++++----------- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index d2ab4b60c8b..40df0618c0e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-05-02 Stefan Monnier + + * subr.el (read-passwd): Better clean after ourselves (bug#11392). + 2012-05-02 Juanma Barranquero * notifications.el (dbus-debug): diff --git a/lisp/subr.el b/lisp/subr.el index b548f82ca5a..1f9f3aee9fa 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -2115,21 +2115,21 @@ by doing (clear-string STRING)." (message "Password not repeated accurately; please start over") (sit-for 1)))) success) - (let (minibuf) + (let ((hide-chars-fun + (lambda (beg end _len) + (clear-this-command-keys) + (setq beg (min end (max (minibuffer-prompt-end) + beg))) + (dotimes (i (- end beg)) + (put-text-property (+ i beg) (+ 1 i beg) + 'display (string ?.))))) + minibuf) (minibuffer-with-setup-hook (lambda () (setq minibuf (current-buffer)) ;; Turn off electricity. (set (make-local-variable 'post-self-insert-hook) nil) - (add-hook 'after-change-functions - (lambda (beg end _len) - (clear-this-command-keys) - (setq beg (min end (max (minibuffer-prompt-end) - beg))) - (dotimes (i (- end beg)) - (put-text-property (+ i beg) (+ 1 i beg) - 'display (string ?.)))) - nil t)) + (add-hook 'after-change-functions hide-chars-fun nil 'local)) (unwind-protect (read-string prompt nil (let ((sym (make-symbol "forget-history"))) @@ -2137,7 +2137,14 @@ by doing (clear-string STRING)." sym) default) (when (buffer-live-p minibuf) - (with-current-buffer minibuf (erase-buffer)))))))) + (with-current-buffer minibuf + ;; Not sure why but it seems that there might be cases where the + ;; minibuffer is not always properly reset later on, so undo + ;; whatever we've done here (bug#11392). + (remove-hook 'after-change-functions hide-chars-fun 'local) + (kill-local-variable 'post-self-insert-hook) + ;; And of course, don't keep the sensitive data around. + (erase-buffer)))))))) ;; This should be used by `call-interactively' for `n' specs. (defun read-number (prompt &optional default) From 7ed806a75c15de00d60ef37f347b5800370fb77c Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 2 May 2012 16:25:46 -0700 Subject: [PATCH 300/564] Fix race conditions involving setenv, gmtime, localtime, asctime. Without this fix, interrupts could mess up code that uses these nonreentrant functions, since setting TZ invalidates existing tm_zone or tzname values, and since most of these functions return pointers to static storage. * editfns.c (format_time_string, Fdecode_time, Fencode_time) (Fcurrent_time_string, Fcurrent_time_zone, Fset_time_zone_rule): Grow the critical sections to include not just invoking localtime/gmtime, but also accessing these functions' results including their tm_zone values if any, and any related TZ setting. (format_time_string): Last arg is now struct tm *, not struct tm **, so that the struct tm is saved in the critical section. All callers changed. Simplify allocation of initial buffer, partly motivated by the fact that memory allocation needs to be outside the critical section. --- src/ChangeLog | 18 +++++++ src/editfns.c | 143 ++++++++++++++++++++++++++++---------------------- 2 files changed, 97 insertions(+), 64 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 01e137d2fcc..bf297616e82 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,21 @@ +2012-05-02 Paul Eggert + + Fix race conditions involving setenv, gmtime, localtime, asctime. + Without this fix, interrupts could mess up code that uses these + nonreentrant functions, since setting TZ invalidates existing + tm_zone or tzname values, and since most of these functions return + pointers to static storage. + * editfns.c (format_time_string, Fdecode_time, Fencode_time) + (Fcurrent_time_string, Fcurrent_time_zone, Fset_time_zone_rule): + Grow the critical sections to include not just invoking + localtime/gmtime, but also accessing these functions' results + including their tm_zone values if any, and any related TZ setting. + (format_time_string): Last arg is now struct tm *, not struct tm **, + so that the struct tm is saved in the critical section. All + callers changed. Simplify allocation of initial buffer, partly + motivated by the fact that memory allocation needs to be outside + the critical section. + 2012-05-02 Dmitry Antipov * intervals.c (adjust_intervals_for_insertion): Initialize `newi' diff --git a/src/editfns.c b/src/editfns.c index a41565d8588..b52bc0c2a99 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -86,7 +86,7 @@ extern Lisp_Object w32_get_internal_run_time (void); static void time_overflow (void) NO_RETURN; static Lisp_Object format_time_string (char const *, ptrdiff_t, Lisp_Object, - int, time_t *, struct tm **); + int, time_t *, struct tm *); static int tm_diff (struct tm *, struct tm *); static void update_buffer_properties (EMACS_INT, EMACS_INT); @@ -1704,7 +1704,7 @@ usage: (format-time-string FORMAT-STRING &optional TIME UNIVERSAL) */) (Lisp_Object format_string, Lisp_Object timeval, Lisp_Object universal) { time_t t; - struct tm *tm; + struct tm tm; CHECK_STRING (format_string); format_string = code_convert_string_norecord (format_string, @@ -1715,54 +1715,55 @@ usage: (format-time-string FORMAT-STRING &optional TIME UNIVERSAL) */) static Lisp_Object format_time_string (char const *format, ptrdiff_t formatlen, - Lisp_Object timeval, int ut, time_t *tval, struct tm **tmp) + Lisp_Object timeval, int ut, time_t *tval, struct tm *tmp) { - ptrdiff_t size; + char buffer[4000]; + char *buf = buffer; + size_t size = sizeof buffer; + size_t len; + Lisp_Object bufstring; int usec; int ns; struct tm *tm; + USE_SAFE_ALLOCA; if (! (lisp_time_argument (timeval, tval, &usec) && 0 <= usec && usec < 1000000)) error ("Invalid time specification"); ns = usec * 1000; - /* This is probably enough. */ - size = formatlen; - if (size <= (STRING_BYTES_BOUND - 50) / 6) - size = size * 6 + 50; - - BLOCK_INPUT; - tm = ut ? gmtime (tval) : localtime (tval); - UNBLOCK_INPUT; - if (! tm) - time_overflow (); - *tmp = tm; - - synchronize_system_time_locale (); - while (1) { - char *buf = (char *) alloca (size + 1); - size_t result; + BLOCK_INPUT; + + synchronize_system_time_locale (); + + tm = ut ? gmtime (tval) : localtime (tval); + if (! tm) + { + UNBLOCK_INPUT; + time_overflow (); + } + *tmp = *tm; buf[0] = '\1'; - BLOCK_INPUT; - result = emacs_nmemftime (buf, size, format, formatlen, tm, ut, ns); - UNBLOCK_INPUT; - if ((result > 0 && result < size) || (result == 0 && buf[0] == '\0')) - return code_convert_string_norecord (make_unibyte_string (buf, result), - Vlocale_coding_system, 0); + len = emacs_nmemftime (buf, size, format, formatlen, tm, ut, ns); + if ((0 < len && len < size) || (len == 0 && buf[0] == '\0')) + break; - /* If buffer was too small, make it bigger and try again. */ - BLOCK_INPUT; - result = emacs_nmemftime (NULL, (size_t) -1, format, formatlen, - tm, ut, ns); + /* Buffer was too small, so make it bigger and try again. */ + len = emacs_nmemftime (NULL, SIZE_MAX, format, formatlen, tm, ut, ns); UNBLOCK_INPUT; - if (STRING_BYTES_BOUND <= result) + if (STRING_BYTES_BOUND <= len) string_overflow (); - size = result + 1; + size = len + 1; + SAFE_ALLOCA (buf, char *, size); } + + UNBLOCK_INPUT; + bufstring = make_unibyte_string (buf, len); + SAFE_FREE (); + return code_convert_string_norecord (bufstring, Vlocale_coding_system, 0); } DEFUN ("decode-time", Fdecode_time, Sdecode_time, 0, 1, 0, @@ -1792,31 +1793,32 @@ DOW and ZONE.) */) BLOCK_INPUT; decoded_time = localtime (&time_spec); + /* Make a copy, in case a signal handler modifies TZ or the struct. */ + if (decoded_time) + save_tm = *decoded_time; UNBLOCK_INPUT; if (! (decoded_time - && MOST_NEGATIVE_FIXNUM - TM_YEAR_BASE <= decoded_time->tm_year - && decoded_time->tm_year <= MOST_POSITIVE_FIXNUM - TM_YEAR_BASE)) + && MOST_NEGATIVE_FIXNUM - TM_YEAR_BASE <= save_tm.tm_year + && save_tm.tm_year <= MOST_POSITIVE_FIXNUM - TM_YEAR_BASE)) time_overflow (); - XSETFASTINT (list_args[0], decoded_time->tm_sec); - XSETFASTINT (list_args[1], decoded_time->tm_min); - XSETFASTINT (list_args[2], decoded_time->tm_hour); - XSETFASTINT (list_args[3], decoded_time->tm_mday); - XSETFASTINT (list_args[4], decoded_time->tm_mon + 1); + XSETFASTINT (list_args[0], save_tm.tm_sec); + XSETFASTINT (list_args[1], save_tm.tm_min); + XSETFASTINT (list_args[2], save_tm.tm_hour); + XSETFASTINT (list_args[3], save_tm.tm_mday); + XSETFASTINT (list_args[4], save_tm.tm_mon + 1); /* On 64-bit machines an int is narrower than EMACS_INT, thus the cast below avoids overflow in int arithmetics. */ - XSETINT (list_args[5], TM_YEAR_BASE + (EMACS_INT) decoded_time->tm_year); - XSETFASTINT (list_args[6], decoded_time->tm_wday); - list_args[7] = (decoded_time->tm_isdst)? Qt : Qnil; + XSETINT (list_args[5], TM_YEAR_BASE + (EMACS_INT) save_tm.tm_year); + XSETFASTINT (list_args[6], save_tm.tm_wday); + list_args[7] = save_tm.tm_isdst ? Qt : Qnil; - /* Make a copy, in case gmtime modifies the struct. */ - save_tm = *decoded_time; BLOCK_INPUT; decoded_time = gmtime (&time_spec); - UNBLOCK_INPUT; if (decoded_time == 0) list_args[8] = Qnil; else XSETINT (list_args[8], tm_diff (&save_tm, decoded_time)); + UNBLOCK_INPUT; return Flist (9, list_args); } @@ -1898,21 +1900,23 @@ usage: (encode-time SECOND MINUTE HOUR DAY MONTH YEAR &optional ZONE) */) else error ("Invalid time zone specification"); + BLOCK_INPUT; + /* Set TZ before calling mktime; merely adjusting mktime's returned value doesn't suffice, since that would mishandle leap seconds. */ set_time_zone_rule (tzstring); - BLOCK_INPUT; value = mktime (&tm); - UNBLOCK_INPUT; /* Restore TZ to previous value. */ newenv = environ; environ = oldenv; - xfree (newenv); #ifdef LOCALTIME_CACHE tzset (); #endif + UNBLOCK_INPUT; + + xfree (newenv); } if (value == (time_t) -1) @@ -1939,24 +1943,29 @@ but this is considered obsolete. */) { time_t value; struct tm *tm; - register char *tem; + char *tem = NULL; + char buf[sizeof "Mon Apr 30 12:49:17 2012" - 1]; if (! lisp_time_argument (specified_time, &value, NULL)) error ("Invalid time specification"); /* Convert to a string, checking for out-of-range time stamps. + Omit the trailing newline. Don't use 'ctime', as that might dump core if VALUE is out of range. */ BLOCK_INPUT; tm = localtime (&value); + if (tm && TM_YEAR_IN_ASCTIME_RANGE (tm->tm_year)) + { + tem = asctime (tm); + if (tem) + memcpy (buf, tem, sizeof buf); + } UNBLOCK_INPUT; - if (! (tm && TM_YEAR_IN_ASCTIME_RANGE (tm->tm_year) && (tem = asctime (tm)))) + if (! tem) time_overflow (); - /* Remove the trailing newline. */ - tem[strlen (tem) - 1] = '\0'; - - return build_string (tem); + return make_unibyte_string (buf, sizeof buf); } /* Yield A - B, measured in seconds. @@ -2000,22 +2009,22 @@ the data it can't find. */) (Lisp_Object specified_time) { time_t value; + int offset; struct tm *t; struct tm localtm; - struct tm *localt; Lisp_Object zone_offset, zone_name; zone_offset = Qnil; zone_name = format_time_string ("%Z", sizeof "%Z" - 1, specified_time, - 0, &value, &localt); - localtm = *localt; + 0, &value, &localtm); BLOCK_INPUT; t = gmtime (&value); + if (t) + offset = tm_diff (&localtm, t); UNBLOCK_INPUT; if (t) { - int offset = tm_diff (&localtm, t); zone_offset = make_number (offset); if (SCHARS (zone_name) == 0) { @@ -2053,9 +2062,16 @@ only the former. */) (Lisp_Object tz) { const char *tzstring; + char **old_environbuf; + + if (! (NILP (tz) || EQ (tz, Qt))) + CHECK_STRING (tz); + + BLOCK_INPUT; /* When called for the first time, save the original TZ. */ - if (!environbuf) + old_environbuf = environbuf; + if (!old_environbuf) initial_tz = (char *) getenv ("TZ"); if (NILP (tz)) @@ -2063,15 +2079,14 @@ only the former. */) else if (EQ (tz, Qt)) tzstring = "UTC0"; else - { - CHECK_STRING (tz); - tzstring = SSDATA (tz); - } + tzstring = SSDATA (tz); set_time_zone_rule (tzstring); - xfree (environbuf); environbuf = environ; + UNBLOCK_INPUT; + + xfree (old_environbuf); return Qnil; } From aa89a0efd42802be43d5a8d589da2a13fdbae5f0 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 2 May 2012 21:11:42 -0400 Subject: [PATCH 301/564] * doc/lispintro/emacs-lisp-intro.texi: Update GNU Press contact details. --- doc/lispintro/ChangeLog | 4 ++++ doc/lispintro/emacs-lisp-intro.texi | 22 +++++++++++----------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/doc/lispintro/ChangeLog b/doc/lispintro/ChangeLog index 5e81e4d080b..46709e2d888 100644 --- a/doc/lispintro/ChangeLog +++ b/doc/lispintro/ChangeLog @@ -1,3 +1,7 @@ +2012-05-03 Glenn Morris + + * emacs-lisp-intro.texi: Update GNU Press contact details. + 2012-04-28 Glenn Morris * emacs-lisp-intro.texi (Syntax): Reword to avoid underfull hbox. diff --git a/doc/lispintro/emacs-lisp-intro.texi b/doc/lispintro/emacs-lisp-intro.texi index b2b30978144..81a0edd7aba 100644 --- a/doc/lispintro/emacs-lisp-intro.texi +++ b/doc/lispintro/emacs-lisp-intro.texi @@ -234,27 +234,27 @@ Copyright @copyright{} 1990-1995, 1997, 2001-2012 Free Software Foundation, Inc. @iftex Published by the:@* -GNU Press, @hfill @uref{http://www.gnupress.org}@* -a division of the @hfill General: @email{press@@gnu.org}@* -Free Software Foundation, Inc. @hfill Orders:@w{ } @email{sales@@gnu.org}@* -51 Franklin Street, Fifth Floor @hfill Tel: +1 (617) 542-5942@* -Boston, MA 02110-1301 USA @hfill Fax: +1 (617) 542-2652@* +GNU Press, @hfill @uref{http://www.fsf.org/campaigns/gnu-press/}@* +a division of the @hfill email: @email{sales@@fsf.org}@* +Free Software Foundation, Inc. @hfill Tel: +1 (617) 542-5942@* +51 Franklin Street, Fifth Floor @hfill Fax: +1 (617) 542-2652@* +Boston, MA 02110-1301 USA @end iftex @ifnottex Published by the: @example -GNU Press, Website: http://www.gnupress.org -a division of the General: press@@gnu.org -Free Software Foundation, Inc. Orders: sales@@gnu.org -51 Franklin Street, Fifth Floor Tel: +1 (617) 542-5942 -Boston, MA 02110-1301 USA Fax: +1 (617) 542-2652 +GNU Press, http://www.fsf.org/campaigns/gnu-press/ +a division of the email: sales@@fsf.org +Free Software Foundation, Inc. Tel: +1 (617) 542-5942 +51 Franklin Street, Fifth Floor Fax: +1 (617) 542-2652 +Boston, MA 02110-1301 USA @end example @end ifnottex @sp 1 -@c Printed copies are available for $30 each.@* +@c Printed copies are available from @uref{http://shop.fsf.org/} for $35 each.@* ISBN 1-882114-43-4 Permission is granted to copy, distribute and/or modify this document From ebf87fdb515d5d2e6af2d5fb2457a8966aab2ede Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 2 May 2012 21:13:19 -0400 Subject: [PATCH 302/564] * etc/refcards/README: Update --- etc/refcards/README | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/etc/refcards/README b/etc/refcards/README index a1fa2f063b5..0372826416e 100644 --- a/etc/refcards/README +++ b/etc/refcards/README @@ -1,8 +1,11 @@ -Some of the *.tex files need special versions of TeX to typeset them. -The files cs-*.tex and sk-*.tex need csTeX, a special version of TeX -tailored to typesetting Czech and Slovak documents. We provide -generated files for these documents, so that you could print them -without installing the modified TeX versions. +To generate these refcards, you need to install the TeX document +production system. For example, http://www.tug.org/texlive/ . + +All modern GNU/Linux distributions provide TeX packages, so the +easiest way is just to install those. Your distribution may have +split some of the files needed to process non-English output into +separate, optional packages such as: texlive-lang-cyrillic, +texlive-lang-czechslovak, texlive-lang-german, and texlive-lang-polish. COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES @@ -12,5 +15,5 @@ it is reproduced here for convenience. File: gnus-logo.eps, gnus-logo.pdf Author: Luis Fernandes - Copyright (C) 2001-2012 Free Software Foundation, Inc. + Copyright (C) 2001-2012 Free Software Foundation, Inc. License: GNU General Public License version 3 or later (see COPYING) From 187c4f85ade8364f210546d789ec953f1e54af90 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 2 May 2012 21:22:38 -0400 Subject: [PATCH 303/564] * doc/emacs/fixit.texi (Fixit, Undo): Reword to improve page-breaks. --- doc/emacs/ChangeLog | 4 ++++ doc/emacs/fixit.texi | 9 ++++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index 4e0a8a8f428..edc89a02f34 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,3 +1,7 @@ +2012-05-03 Glenn Morris + + * fixit.texi (Fixit, Undo): Reword to improve page-breaks. + 2012-05-01 Glenn Morris * emacs.texi (@copying): Only print EDITION in the TeX version. diff --git a/doc/emacs/fixit.texi b/doc/emacs/fixit.texi index 85fac2b146b..2857e2b1af6 100644 --- a/doc/emacs/fixit.texi +++ b/doc/emacs/fixit.texi @@ -8,9 +8,9 @@ @cindex mistakes, correcting In this chapter we describe commands that are useful when you catch -a mistake while editing. The most fundamental command for correcting -erroneous editing is the undo command @kbd{C-/} (which is also bound -to @kbd{C-x u} and @kbd{C-_}). This undoes a single command, or a +a mistake while editing. The most fundamental of these commands is +the undo command @kbd{C-/} (also bound to @kbd{C-x u} and @kbd{C-_}). +This undoes a single command, or a part of a command (as in the case of @code{query-replace}), or several consecutive character insertions. Consecutive repetitions of @kbd{C-/} undo earlier and earlier changes, back to the limit of the @@ -60,7 +60,6 @@ beginners to remember: @samp{u} stands for ``undo''. It is also bound to @kbd{C-_} because typing @kbd{C-/} on some text terminals actually enters @kbd{C-_}.}. This undoes the most recent change in the buffer, and moves point back to where it was before that change. - Consecutive repetitions of @kbd{C-/} (or its aliases) undo earlier and earlier changes in the current buffer. If all the recorded changes have already been undone, the undo command signals an error. @@ -75,7 +74,7 @@ changes you have undone, type @kbd{C-f} or any other command that harmlessly breaks the sequence of undoing; then type @kbd{C-/} to undo the undo command. - On the other hand, if you want to resume undoing, without redoing + Alternatively, if you want to resume undoing, without redoing previous undo commands, use @kbd{M-x undo-only}. This is like @code{undo}, but will not redo changes you have just undone. From 0244c17ae63341234b50f81955fbf702fc46ea1a Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 2 May 2012 21:41:54 -0400 Subject: [PATCH 304/564] Tweak page breaks in doc/emacs/buffers.texi * doc/emacs/buffers.texi (Buffers, Kill Buffer, Several Buffers) (Indirect Buffers): Tweak line- and page-breaks. --- doc/emacs/ChangeLog | 3 +++ doc/emacs/buffers.texi | 21 ++++++++++----------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index edc89a02f34..f8c9c79cc81 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,5 +1,8 @@ 2012-05-03 Glenn Morris + * buffers.texi (Buffers, Kill Buffer, Several Buffers) + (Indirect Buffers): Tweak line- and page-breaks. + * fixit.texi (Fixit, Undo): Reword to improve page-breaks. 2012-05-01 Glenn Morris diff --git a/doc/emacs/buffers.texi b/doc/emacs/buffers.texi index 90d5084e3d9..5dd95cc2a6f 100644 --- a/doc/emacs/buffers.texi +++ b/doc/emacs/buffers.texi @@ -46,7 +46,7 @@ This is because Emacs tracks buffer positions using that data type. For typical 64-bit machines, this maximum buffer size is @math{2^61 - 2} bytes, or about 2 EiB. For typical 32-bit machines, the maximum is usually @math{2^29 - 2} bytes, or about 512 MiB. Buffer sizes are -also limited by the amount of memory present in the system. +also limited by the amount of memory in the system. @menu * Select Buffer:: Creating a new buffer or reselecting an old one. @@ -326,8 +326,8 @@ for a mere hour. @cindex Midnight mode @vindex midnight-mode @vindex midnight-hook - You can also have this buffer purging done for you, every day at -midnight, by enabling Midnight mode. Midnight mode operates each day + You can also have this buffer purging done for you, once a day, +by enabling Midnight mode. Midnight mode operates each day at midnight; at that time, it runs @code{clean-buffer-list}, or whichever functions you have placed in the normal hook @code{midnight-hook} (@pxref{Hooks}). To enable Midnight mode, use @@ -361,7 +361,7 @@ the buffer menu in another window, and selects that window. The buffer menu is a read-only buffer, and can be changed only through the special commands described in this section. The usual -Emacs cursor motion commands can be used in this buffer. The +cursor motion commands can be used in this buffer. The following commands apply to the buffer described on the current line: @table @kbd @@ -476,13 +476,13 @@ Auto Revert mode applies to the @file{*Buffer List*} buffer only if An @dfn{indirect buffer} shares the text of some other buffer, which is called the @dfn{base buffer} of the indirect buffer. In some ways it -is the analogue, for buffers, of a symbolic link between files. +is a buffer analogue of a symbolic link between files. @table @kbd @findex make-indirect-buffer @item M-x make-indirect-buffer @key{RET} @var{base-buffer} @key{RET} @var{indirect-name} @key{RET} -Create an indirect buffer named @var{indirect-name} whose base buffer -is @var{base-buffer}. +Create an indirect buffer named @var{indirect-name} with base buffer +@var{base-buffer}. @findex clone-indirect-buffer @item M-x clone-indirect-buffer @key{RET} Create an indirect buffer that is a twin copy of the current buffer. @@ -520,10 +520,9 @@ buffer in another window. These functions run the hook @code{clone-indirect-buffer-hook} after creating the indirect buffer. The more general way to make an indirect buffer is with the command -@kbd{M-x make-indirect-buffer}. It creates an indirect buffer from -buffer @var{base-buffer}, under the name @var{indirect-name}. It -prompts for both @var{base-buffer} and @var{indirect-name} using the -minibuffer. +@kbd{M-x make-indirect-buffer}. It creates an indirect buffer +named @var{indirect-name} from a buffer @var{base-buffer}, prompting for +both using the minibuffer. @node Buffer Convenience @section Convenience Features and Customization of Buffer Handling From fe76231124691dd3d9419c3c68f6d292f71c8386 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 2 May 2012 22:04:07 -0400 Subject: [PATCH 305/564] * doc/emacs/frames.texi (Fonts): Tweak line and page breaks. Change cross-reference. Use example rather than smallexample (these examples are not wide, smallexample saves little vertical space, but makes things harder to read). --- doc/emacs/ChangeLog | 3 +++ doc/emacs/frames.texi | 46 +++++++++++++++++++++---------------------- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index f8c9c79cc81..033ce545a92 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,5 +1,8 @@ 2012-05-03 Glenn Morris + * frames.texi (Fonts): Tweak line and page breaks. + Use example rather than smallexample. Change cross-reference. + * buffers.texi (Buffers, Kill Buffer, Several Buffers) (Indirect Buffers): Tweak line- and page-breaks. diff --git a/doc/emacs/frames.texi b/doc/emacs/frames.texi index 7b912ec9722..e0f8ca36286 100644 --- a/doc/emacs/frames.texi +++ b/doc/emacs/frames.texi @@ -492,13 +492,13 @@ this for future sessions, click on @samp{Save Options} in the @samp{Options} menu. @item -Add a line to your init file (@pxref{Init File}), modifying the -variable @code{default-frame-alist} to specify the @code{font} -parameter (@pxref{Creating Frames}), like this: +Add a line to your init file, modifying the variable +@code{default-frame-alist} to specify the @code{font} parameter +(@pxref{Frame Parameters}), like this: -@smallexample +@example (add-to-list 'default-frame-alist '(font . "DejaVu Sans Mono-10")) -@end smallexample +@end example @cindex X defaults file @cindex X resources file @@ -506,14 +506,14 @@ parameter (@pxref{Creating Frames}), like this: Add an @samp{emacs.font} X resource setting to your X resource file, like this: -@smallexample +@example emacs.font: DejaVu Sans Mono-12 -@end smallexample +@end example @noindent You must restart X, or use the @command{xrdb} command, for the X -resources file to take effect. @xref{Resources}. When specifying a -font in your X resources file, you should not quote it. +resources file to take effect. @xref{Resources}. Do not quote +font names in X resource files. @item If you are running Emacs on the GNOME desktop, you can tell Emacs to @@ -535,9 +535,9 @@ names the font that it's rendered in. first is to use a @dfn{Fontconfig pattern}. Fontconfig patterns have the following form: -@smallexample +@example @var{fontname}[-@var{fontsize}][:@var{name1}=@var{values1}][:@var{name2}=@var{values2}]... -@end smallexample +@end example @noindent Within this format, any of the elements in braces may be omitted. @@ -577,13 +577,13 @@ One of @samp{monospace}, @samp{proportional}, @samp{dual-width}, or @noindent Here are some examples of Fontconfig patterns: -@smallexample +@example Monospace Monospace-12 Monospace-12:bold DejaVu Sans Mono:bold:italic Monospace-12:weight=bold:slant=italic -@end smallexample +@end example For a more detailed description of Fontconfig patterns, see the Fontconfig manual, which is distributed with Fontconfig and available @@ -593,9 +593,9 @@ online at @url{http://fontconfig.org/fontconfig-user.html}. The second way to specify a font is to use a @dfn{GTK font pattern}. These have the syntax -@smallexample +@example @var{fontname} [@var{properties}] [@var{fontsize}] -@end smallexample +@end example @noindent where @var{fontname} is the family name, @var{properties} is a list of @@ -619,10 +619,10 @@ omitted, a default width is used. @noindent Here are some examples of GTK font patterns: -@smallexample +@example Monospace 12 Monospace Bold Italic 12 -@end smallexample +@end example @cindex XLFD @cindex X Logical Font Description @@ -631,9 +631,9 @@ Logical Font Description}). This is the traditional method for specifying fonts under X. Each XLFD consists of fourteen words or numbers, separated by dashes, like this: -@smallexample +@example -misc-fixed-medium-r-semicondensed--13-*-*-*-c-60-iso8859-1 -@end smallexample +@end example @noindent A wildcard character (@samp{*}) in an XLFD matches any sequence of @@ -644,10 +644,10 @@ results, supply all 14 dashes and use wildcards only within a field. Case is insignificant in an XLFD. The syntax for an XLFD is as follows: -@smallexample +@example -@var{maker}-@var{family}-@var{weight}-@var{slant}-@var{widthtype}-@var{style}@dots{} @dots{}-@var{pixels}-@var{height}-@var{horiz}-@var{vert}-@var{spacing}-@var{width}-@var{registry}-@var{encoding} -@end smallexample +@end example @noindent The entries have the following meanings: @@ -706,9 +706,9 @@ nickname''. Certain fonts have shorter nicknames, which you can use instead of a normal font specification. For instance, @samp{6x13} is equivalent to -@smallexample +@example -misc-fixed-medium-r-semicondensed--13-*-*-*-c-60-iso8859-1 -@end smallexample +@end example @cindex client-side fonts @cindex server-side fonts From 430e2ae69eda893c51c6b85bbce428fecaef3339 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 2 May 2012 22:05:45 -0400 Subject: [PATCH 306/564] * doc/emacs/frames.texi (Text-Only Mouse): Fix xref. --- doc/emacs/ChangeLog | 1 + doc/emacs/frames.texi | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index 033ce545a92..94d3afc7c72 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -2,6 +2,7 @@ * frames.texi (Fonts): Tweak line and page breaks. Use example rather than smallexample. Change cross-reference. + (Text-Only Mouse): Fix xref. * buffers.texi (Buffers, Kill Buffer, Several Buffers) (Indirect Buffers): Tweak line- and page-breaks. diff --git a/doc/emacs/frames.texi b/doc/emacs/frames.texi index e0f8ca36286..80a12afeb1b 100644 --- a/doc/emacs/frames.texi +++ b/doc/emacs/frames.texi @@ -1160,9 +1160,9 @@ enable mouse support. You must have the gpm server installed and running on your system in order for this to work. @iftex -@pxref{MS-DOS Mouse,,,emacs-xtra,Specialized Emacs Features}, +@xref{MS-DOS Mouse,,,emacs-xtra,Specialized Emacs Features}, @end iftex @ifnottex -@pxref{MS-DOS Mouse}, +@xref{MS-DOS Mouse}, @end ifnottex for information about mouse support on MS-DOS. From c4c30a4e6aaaa86aeacfffaffca751a79bb62944 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 2 May 2012 22:10:18 -0400 Subject: [PATCH 307/564] * doc/emacs/mule.texi (Output Coding): Reword to improve page-breaks. --- doc/emacs/ChangeLog | 2 ++ doc/emacs/mule.texi | 11 +++++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index 94d3afc7c72..0f3f13ee829 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,5 +1,7 @@ 2012-05-03 Glenn Morris + * mule.texi (Output Coding): Reword to improve page-breaks. + * frames.texi (Fonts): Tweak line and page breaks. Use example rather than smallexample. Change cross-reference. (Text-Only Mouse): Fix xref. diff --git a/doc/emacs/mule.texi b/doc/emacs/mule.texi index cffcb7573ff..b0b35bf14b5 100644 --- a/doc/emacs/mule.texi +++ b/doc/emacs/mule.texi @@ -991,12 +991,11 @@ and asks you to choose one of those coding systems. behaves a bit differently. It additionally checks whether the @c What determines this? most-preferred coding system is recommended for use in MIME messages; -if not, Emacs tells you that the most-preferred coding system is not -recommended and prompts you for another coding system. This is so you -won't inadvertently send a message encoded in a way that your -recipient's mail software will have difficulty decoding. (You can -still use an unsuitable coding system if you type its name in response -to the question.) +if not, it informs you of this fact and prompts you for another coding +system. This is so you won't inadvertently send a message encoded in +a way that your recipient's mail software will have difficulty +decoding. (You can still use an unsuitable coding system if you enter +its name at the prompt.) @c It seems that select-message-coding-system does this. @c Both sendmail.el and smptmail.el call it; i.e. smtpmail.el still From 0b40418e9fa9f1465d78aa5a0257d5701f04d8bc Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 2 May 2012 22:14:32 -0400 Subject: [PATCH 308/564] Tweaks for doc/emacs/modes.texi * doc/emacs/modes.texi (Major Modes, Minor Modes): Reword to improve page-breaks. (Major Modes): Use example rather than smallexample. --- doc/emacs/ChangeLog | 3 +++ doc/emacs/modes.texi | 10 ++++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index 0f3f13ee829..83511037c69 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,5 +1,8 @@ 2012-05-03 Glenn Morris + * modes.texi (Major Modes, Minor Modes): Reword to improve page-breaks. + (Major Modes): Use example rather than smallexample. + * mule.texi (Output Coding): Reword to improve page-breaks. * frames.texi (Fonts): Tweak line and page breaks. diff --git a/doc/emacs/modes.texi b/doc/emacs/modes.texi index 52ecd37fcf2..a48299768a8 100644 --- a/doc/emacs/modes.texi +++ b/doc/emacs/modes.texi @@ -65,8 +65,7 @@ process (@pxref{Interactive Shell}). first visit a file or create a buffer (@pxref{Choosing Modes}). You can explicitly select a new major mode by using an @kbd{M-x} command. Take the name of the mode and add @code{-mode} to get the name of the -command to select that mode. Thus, you can enter Lisp mode with -@kbd{M-x lisp-mode}. +command to select that mode (e.g., @kbd{M-x lisp-mode} enters Lisp mode). @vindex major-mode The value of the buffer-local variable @code{major-mode} is a symbol @@ -81,9 +80,9 @@ change this default value via the Customization interface (@pxref{Easy Customization}), or by adding a line like this to your init file (@pxref{Init File}): -@smallexample +@example (setq-default major-mode 'text-mode) -@end smallexample +@end example @noindent If the default value of @code{major-mode} is @code{nil}, the major @@ -216,8 +215,7 @@ in individual buffers. @xref{Faces}. @findex linum-mode @cindex Linum mode @item -Linum mode displays each line's line number in the window's left -margin. Its mode command is @code{linum-mode}. +Linum mode displays each line's line number in the window's left margin. @item Outline minor mode provides similar facilities to the major mode From 2bd785a208c84e7ae73884d09a1087da52780b4a Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Wed, 2 May 2012 22:39:23 -0400 Subject: [PATCH 309/564] =?UTF-8?q?*=20lisp/emacs-lisp/bytecomp.el=20(byte?= =?UTF-8?q?-compile-file-form-custom-declare-variable):=20Compile=20all=20?= =?UTF-8?q?elements,=20since=20cconv.el=20might=20have=20introduced=20:fun?= =?UTF-8?q?-body,=20internal-make-closure,=20and=20friends=20for=20bytecom?= =?UTF-8?q?p=20to=20handle.=20*=20lisp/custom.el=20(defcustom):=20Avoid=20?= =?UTF-8?q?((=CE=BB=20..)=20..).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes: debbugs:11391 --- lisp/ChangeLog | 8 ++++++++ lisp/custom.el | 2 +- lisp/emacs-lisp/bytecomp.el | 14 +------------- 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 40df0618c0e..69e887f0d19 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,11 @@ +2012-05-03 Stefan Monnier + + * emacs-lisp/bytecomp.el + (byte-compile-file-form-custom-declare-variable): Compile all elements, + since cconv.el might have introduced :fun-body, internal-make-closure, + and friends for bytecomp to handle (bug#11391). + * custom.el (defcustom): Avoid ((λ ..) ..). + 2012-05-02 Stefan Monnier * subr.el (read-passwd): Better clean after ourselves (bug#11392). diff --git a/lisp/custom.el b/lisp/custom.el index 611d5688f30..d0eadcc23ff 100644 --- a/lisp/custom.el +++ b/lisp/custom.el @@ -335,7 +335,7 @@ for more information." ;; expression is checked by the byte-compiler, and that ;; lexical-binding is obeyed, so quote the expression with ;; `lambda' rather than with `quote'. - `(list (lambda () ,standard)) + ``(funcall #',(lambda () ,standard)) `',standard) ,doc ,@args)) diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el index 93c6518d215..9cb0a376e36 100644 --- a/lisp/emacs-lisp/bytecomp.el +++ b/lisp/emacs-lisp/bytecomp.el @@ -2267,19 +2267,7 @@ list that represents a doc string reference. (when (byte-compile-warning-enabled-p 'callargs) (byte-compile-nogroup-warn form)) (push (nth 1 (nth 1 form)) byte-compile-bound-variables) - ;; Don't compile the expression because it may be displayed to the user. - ;; (when (eq (car-safe (nth 2 form)) 'quote) - ;; ;; (nth 2 form) is meant to evaluate to an expression, so if we have the - ;; ;; final value already, we can byte-compile it. - ;; (setcar (cdr (nth 2 form)) - ;; (byte-compile-top-level (cadr (nth 2 form)) nil 'file))) - (let ((tail (nthcdr 4 form))) - (while tail - (unless (keywordp (car tail)) ;No point optimizing keywords. - ;; Compile the keyword arguments. - (setcar tail (byte-compile-top-level (car tail) nil 'file))) - (setq tail (cdr tail)))) - form) + (byte-compile-keep-pending form)) (put 'require 'byte-hunk-handler 'byte-compile-file-form-require) (defun byte-compile-file-form-require (form) From 2e51d4b5fb960ce0240a0eccbb0ed30cc7f53743 Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Thu, 3 May 2012 14:47:24 +0900 Subject: [PATCH 310/564] mail/rmailmm.el (rmail-show-mime): Catch an error caused by text decoding, and show a warning message without signalling an error (Bug#11282). --- lisp/ChangeLog | 6 ++++++ lisp/mail/rmailmm.el | 48 ++++++++++++++++++++++++++++---------------- 2 files changed, 37 insertions(+), 17 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index d2ab4b60c8b..d35f5475bbc 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2012-05-03 Kenichi Handa + + * mail/rmailmm.el (rmail-show-mime): Catch an error caused by text + decoding, and show a warning message without signalling an error + (Bug#11282). + 2012-05-02 Juanma Barranquero * notifications.el (dbus-debug): diff --git a/lisp/mail/rmailmm.el b/lisp/mail/rmailmm.el index 9adc5eb9a06..67b2e62275f 100644 --- a/lisp/mail/rmailmm.el +++ b/lisp/mail/rmailmm.el @@ -1300,26 +1300,40 @@ The arguments ARG and STATE have no effect in this case." (rmail-mime-mbox-buffer rmail-buffer) (rmail-mime-view-buffer rmail-view-buffer) (rmail-mime-coding-system nil)) + ;; If ENTITY is not a vector, it is a string describing an error. (if (vectorp entity) (with-current-buffer rmail-mime-view-buffer (erase-buffer) - (rmail-mime-insert entity) - (if (consp rmail-mime-coding-system) - ;; Decoding is done by rfc2047-decode-region only for a - ;; header. But, as the used coding system may have been - ;; overridden by mm-charset-override-alist, we can't - ;; trust (car rmail-mime-coding-system). So, here we - ;; try the decoding again with mm-charset-override-alist - ;; bound to nil. - (let ((mm-charset-override-alist nil)) - (setq rmail-mime-coding-system - (rmail-mime-find-header-encoding - (rmail-mime-entity-header entity))))) - (set-buffer-file-coding-system - (if rmail-mime-coding-system - (coding-system-base rmail-mime-coding-system) - 'undecided) - t t)) + ;; This condition-case is for catching an error in the + ;; internal MIME decoding (e.g. incorrect BASE64 form) that + ;; may be signaled by rmail-mime-insert. + ;; FIXME: The current code doesn't set a proper error symbol + ;; in ERR. We must find a way to propagate a correct error + ;; symbol that is caused in the very deep code of text + ;; decoding (e.g. an error by base64-decode-region called by + ;; post-read-conversion function of utf-7). + (condition-case err + (progn + (rmail-mime-insert entity) + (if (consp rmail-mime-coding-system) + ;; Decoding is done by rfc2047-decode-region only for a + ;; header. But, as the used coding system may have been + ;; overridden by mm-charset-override-alist, we can't + ;; trust (car rmail-mime-coding-system). So, here we + ;; try the decoding again with mm-charset-override-alist + ;; bound to nil. + (let ((mm-charset-override-alist nil)) + (setq rmail-mime-coding-system + (rmail-mime-find-header-encoding + (rmail-mime-entity-header entity))))) + (set-buffer-file-coding-system + (if rmail-mime-coding-system + (coding-system-base rmail-mime-coding-system) + 'undecided) + t t)) + (error (setq entity (format "%s" err)))))) + ;; Re-check ENTITY. It may be set to an error string. + (when (stringp entity) ;; Decoding failed. ENTITY is an error message. Insert the ;; original message body as is, and show warning. (let ((region (with-current-buffer rmail-mime-mbox-buffer From 4223d75523a085c44d536841a6ae7a565538d8f1 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 2 May 2012 23:22:54 -0700 Subject: [PATCH 311/564] More page break tweaks for the manual * doc/emacs/text.texi (Pages, Filling, Foldout, Org Mode, HTML Mode) (Nroff Mode, Enriched Indentation, Table Rows and Columns): Tweak line and page breaks. --- doc/emacs/ChangeLog | 4 ++++ doc/emacs/text.texi | 34 ++++++++++++++++++---------------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index 83511037c69..c7d2f0b7eda 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,5 +1,9 @@ 2012-05-03 Glenn Morris + * text.texi (Pages, Filling, Foldout, Org Mode, HTML Mode) + (Nroff Mode, Enriched Indentation, Table Rows and Columns): + Tweak line and page breaks. + * modes.texi (Major Modes, Minor Modes): Reword to improve page-breaks. (Major Modes): Use example rather than smallexample. diff --git a/doc/emacs/text.texi b/doc/emacs/text.texi index e56b00e2723..90f4732079b 100644 --- a/doc/emacs/text.texi +++ b/doc/emacs/text.texi @@ -379,8 +379,8 @@ delimited once again. The reason @kbd{C-x C-p} includes only the following page delimiter in the region is to ensure that. A numeric argument to @kbd{C-x C-p} specifies which page to go to, -relative to the current one. Zero means the current page. One means -the next page, and @minus{}1 means the previous one. +relative to the current one. Zero means the current page, one +the next page, and @minus{}1 the previous one. @kindex C-x l @findex count-lines-page @@ -412,7 +412,7 @@ beginning of a line. specified width. Emacs does filling in two ways. In Auto Fill mode, inserting text with self-inserting characters also automatically fills it. There are also explicit fill commands that you can use when editing -text leaves it unfilled. +text. @menu * Auto Fill:: Auto Fill mode breaks long lines automatically. @@ -1240,6 +1240,7 @@ quad click: exit all folds and hide text. @end itemize @end table +@c FIXME not marked as a user variable @vindex foldout-mouse-modifiers You can specify different modifier keys (instead of @kbd{Control-Meta-}) by setting @code{foldout-mouse-modifiers}; but if @@ -1248,7 +1249,7 @@ it in order for this to take effect. To use the Foldout package, you can type @kbd{M-x load-library @key{RET} foldout @key{RET}}; or you can arrange for to do that -automatically by putting this in your init file (@pxref{Init File}): +automatically by putting the following in your init file: @example (eval-after-load "outline" '(require 'foldout)) @@ -1307,8 +1308,8 @@ with @kbd{M-} (@code{org-metaleft}) and @kbd{M-} if invoked on a body line. The following subsections give basic instructions for using Org mode -as an organizer and as an authoring system. @xref{Top,The Org Mode -Manual,,org, The Org Manual}, for details. +as an organizer and as an authoring system. For details, @pxref{Top, +The Org Mode Manual, Introduction, org, The Org Manual}. @menu * Org Organizer:: Managing TODO lists and agendas. @@ -1886,8 +1887,8 @@ the tag at point. @kindex C-c / @r{(SGML mode)} @findex sgml-close-tag Insert a close tag for the innermost unterminated tag -(@code{sgml-close-tag}). If called from within a tag or a comment, -close this element instead of inserting a close tag. +(@code{sgml-close-tag}). If called within a tag or a comment, +close it instead of inserting a close tag. @item C-c 8 @kindex C-c 8 @r{(SGML mode)} @@ -1948,10 +1949,10 @@ always insert explicit closing tags as well. @cindex nroff @findex nroff-mode @vindex nroff-mode-hook - Nroff mode is a major mode derived from Text mode, which is + Nroff mode, a major mode derived from Text mode, is specialized for editing nroff files (e.g.@: Unix man pages). Type @kbd{M-x nroff-mode} to enter this mode. Entering Nroff mode runs the -hook @code{text-mode-hook}, followed by @code{nroff-mode-hook} +hook @code{text-mode-hook}, then @code{nroff-mode-hook} (@pxref{Hooks}). In Nroff mode, nroff command lines are treated as paragraph @@ -2209,7 +2210,7 @@ for the right or left margin of a paragraph or a part of a paragraph. These margins also affect fill commands such as @kbd{M-q} (@pxref{Filling}). - The Indentation submenu of Text Properties provides four commands + The Indentation submenu of Text Properties offers commands for specifying indentation: @table @code @@ -2292,10 +2293,9 @@ commands do nothing on text with this setting. You can, however, still indent the left margin. @end table +@vindex default-justification You can also specify justification styles using the Justification submenu in the Text Properties menu. - -@vindex default-justification The default justification style is specified by the per-buffer variable @code{default-justification}. Its value should be one of the symbols @code{left}, @code{right}, @code{full}, @code{center}, or @@ -2578,10 +2578,12 @@ to @code{nil}. @findex table-insert-row @kbd{M-x table-insert-row} inserts a row of cells before the current table row. The current row, together with point, is pushed down past -the new row. To insert rows after the last row at the bottom of a +the new row. To insert a row after the last row at the bottom of a table, invoke this command with point below the table, just below the -bottom edge. A numeric prefix argument specifies the number of rows -to insert. +bottom edge. You can insert more than one row at a time by using a +numeric prefix argument. + +@c A numeric prefix argument specifies the number of rows to insert. @findex table-insert-column Similarly, @kbd{M-x table-insert-column} inserts a column of cells From e258c6a6aee28f1e68a8e85bf6d47895992dee4a Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 2 May 2012 23:43:02 -0700 Subject: [PATCH 312/564] Small edits for programs.texi in Emacs manual * doc/emacs/programs.texi (Programs, Electric C): Copyedits. (Program Modes): Add xref to Fortran. (Left Margin Paren): Remove what was (oddly enough) the only use of defvar in the entire Emacs manual. (Hungry Delete): Remove footnote about ancient Emacs version. (Other C Commands): Use example rather than smallexample. --- doc/emacs/ChangeLog | 7 +++++++ doc/emacs/programs.texi | 31 ++++++++++++------------------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index c7d2f0b7eda..b654b1c16ca 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,5 +1,12 @@ 2012-05-03 Glenn Morris + * programs.texi (Programs, Electric C): Copyedits. + (Program Modes): Add xref to Fortran. + (Left Margin Paren): Remove what was (oddly enough) the only use + of defvar in the entire Emacs manual. + (Hungry Delete): Remove footnote about ancient Emacs version. + (Other C Commands): Use example rather than smallexample. + * text.texi (Pages, Filling, Foldout, Org Mode, HTML Mode) (Nroff Mode, Enriched Indentation, Table Rows and Columns): Tweak line and page breaks. diff --git a/doc/emacs/programs.texi b/doc/emacs/programs.texi index 23f808b93ea..b7f21e8a93c 100644 --- a/doc/emacs/programs.texi +++ b/doc/emacs/programs.texi @@ -9,7 +9,7 @@ @cindex program editing This chapter describes Emacs features for facilitating editing -programs. Some of these features can: +programs. Some of the things these features can do are: @itemize @bullet @item @@ -128,8 +128,7 @@ IDL/Pike/AWK (@pxref{Top, , CC Mode, ccmode, CC Mode}), and IDLWAVE @ifnotinfo The Emacs distribution contains Info manuals for the major modes for Ada, C/C++/Objective C/Java/Corba IDL/Pike/AWK, and IDLWAVE. For -Fortran mode, see the ``Fortran'' section in the Info version of the -Emacs manual, which is not included in this printed version. +Fortran mode, @pxref{Fortran,,, emacs-xtra, Specialized Emacs Features}. @end ifnotinfo @node Defuns @@ -186,15 +185,13 @@ delimiter from starting a defun. Here's an example: highlights confusing opening delimiters (those that ought to be quoted) in bold red. +@vindex open-paren-in-column-0-is-defun-start If you need to override this convention, you can do so by setting -this user option: - -@defvar open-paren-in-column-0-is-defun-start +the variable @code{open-paren-in-column-0-is-defun-start}. If this user option is set to @code{t} (the default), opening -parentheses or braces at column zero always start defuns. When it's +parentheses or braces at column zero always start defuns. When it is @code{nil}, defuns are found by searching for parens or braces at the outermost level. -@end defvar Usually, you should leave this option at its default value of @code{t}. If your buffer contains parentheses or braces in column @@ -1553,8 +1550,8 @@ after the mode name: @kindex C-c C-l @r{(C mode)} @findex c-toggle-electric-state Toggle electric action (@code{c-toggle-electric-state}). With a -prefix argument, this command enables electric action if the argument -is positive, disables it if it is negative. +positive prefix argument, this command enables electric action, with a +negative one it disables it. @end table Electric characters insert newlines only when, in addition to the @@ -1591,8 +1588,7 @@ preprocessor commands. @findex c-hungry-delete-backwards @kindex C-c C-@key{DEL} (C Mode) @kindex C-c @key{DEL} (C Mode) -@code{c-hungry-delete-backwards}---Delete the entire block of whitespace -preceding point. +Delete the entire block of whitespace preceding point (@code{c-hungry-delete-backwards}). @item C-c C-d @itemx C-c C-@key{DELETE} @@ -1601,8 +1597,7 @@ preceding point. @kindex C-c C-d (C Mode) @kindex C-c C-@key{DELETE} (C Mode) @kindex C-c @key{DELETE} (C Mode) -@code{c-hungry-delete-forward}---Delete the entire block of whitespace -following point. +Delete the entire block of whitespace after point (@code{c-hungry-delete-forward}). @end table As an alternative to the above commands, you can enable @dfn{hungry @@ -1615,9 +1610,7 @@ preceding whitespace, not just one space, and a single @kbd{C-c C-d} @item M-x c-toggle-hungry-state @findex c-toggle-hungry-state Toggle the hungry-delete feature -(@code{c-toggle-hungry-state})@footnote{This command had the binding -@kbd{C-c C-d} in earlier versions of Emacs. @kbd{C-c C-d} is now -bound to @code{c-hungry-delete-forward}.}. With a prefix argument, +(@code{c-toggle-hungry-state}). With a prefix argument, this command turns the hungry-delete feature on if the argument is positive, and off if it is negative. @end table @@ -1656,11 +1649,11 @@ needs a binding to be useful. The following code will bind it to @kbd{C-j}. We use @code{c-initialization-hook} here to make sure the keymap is loaded before we try to change it. -@smallexample +@example (defun my-bind-clb () (define-key c-mode-base-map "\C-j" 'c-context-line-break)) (add-hook 'c-initialization-hook 'my-bind-clb) -@end smallexample +@end example @item C-M-h Put mark at the end of a function definition, and put point at the From 8bfe9babcf39bf735352f88fa5d14f5f6d00030b Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 2 May 2012 23:50:23 -0700 Subject: [PATCH 313/564] Comment --- doc/emacs/arevert-xtra.texi | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/emacs/arevert-xtra.texi b/doc/emacs/arevert-xtra.texi index 55d7646542d..5a957b02843 100644 --- a/doc/emacs/arevert-xtra.texi +++ b/doc/emacs/arevert-xtra.texi @@ -109,6 +109,7 @@ revert-buffer-function,, Reverting, elisp, the Emacs Lisp Reference Manual}. In addition, it @emph{must} have a @code{buffer-stale-function}. +@c FIXME only defvar in all of doc/emacs! @defvar buffer-stale-function The value of this variable is a function to check whether a non-file buffer needs reverting. This should be a function with one optional From 3c8c88a39b6fc8e74a4db5d9f789e8bd6c5e44d4 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 2 May 2012 23:50:59 -0700 Subject: [PATCH 314/564] * maintaining.texi (Registering, Tag Syntax): Tweak line and page breaks. --- doc/emacs/ChangeLog | 3 +++ doc/emacs/maintaining.texi | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index b654b1c16ca..1694d291807 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,5 +1,8 @@ 2012-05-03 Glenn Morris + * maintaining.texi (Registering, Tag Syntax): + Tweak line and page breaks. + * programs.texi (Programs, Electric C): Copyedits. (Program Modes): Add xref to Fortran. (Left Margin Paren): Remove what was (oddly enough) the only use diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi index 72583f25c8b..b0ee5bd5f2f 100644 --- a/doc/emacs/maintaining.texi +++ b/doc/emacs/maintaining.texi @@ -711,7 +711,7 @@ commit can include both file additions and edits to existing files. On a locking-based version control system (@pxref{VCS Merging}), registering a file leaves it unlocked and read-only. Type @kbd{C-x v -v} if you wish to start editing it. +v} to start editing it. @node Old Revisions @subsection Examining And Comparing Old Revisions @@ -1729,7 +1729,7 @@ find-tag @key{RET} bidule @key{RET}} will just search for any tag @code{bidule}. @item -In assembler code, labels appearing at the beginning of a line, +In assembler code, labels appearing at the start of a line, followed by a colon, are tags. @item From 86b8eb8326c0d9954d6432e35f4a1ae6f28935f3 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 2 May 2012 23:56:05 -0700 Subject: [PATCH 315/564] * doc/emacs/abbrevs.texi (Abbrev Concepts): Copyedits. --- doc/emacs/ChangeLog | 2 ++ doc/emacs/abbrevs.texi | 13 ++++++------- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index 1694d291807..f2a72663d3a 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,5 +1,7 @@ 2012-05-03 Glenn Morris + * abbrevs.texi (Abbrev Concepts): Copyedits. + * maintaining.texi (Registering, Tag Syntax): Tweak line and page breaks. diff --git a/doc/emacs/abbrevs.texi b/doc/emacs/abbrevs.texi index a8a34e62c1f..d3c914d92b0 100644 --- a/doc/emacs/abbrevs.texi +++ b/doc/emacs/abbrevs.texi @@ -37,12 +37,12 @@ Automatic Typing}. @node Abbrev Concepts @section Abbrev Concepts - An @dfn{abbrev} is a word which has been defined to @dfn{expand} into + An @dfn{abbrev} is a word that has been defined to @dfn{expand} into a specified @dfn{expansion}. When you insert a word-separator character following the abbrev, that expands the abbrev---replacing the abbrev with its expansion. For example, if @samp{foo} is defined as an abbrev -expanding to @samp{find outer otter}, then you can insert @samp{find -outer otter.} into the buffer by typing @kbd{f o o .}. +expanding to @samp{find outer otter}, then typing @kbd{f o o .} will +insert @samp{find outer otter.}. @findex abbrev-mode @cindex Abbrev mode @@ -61,10 +61,9 @@ mode-specific definitions for different major modes. A mode-specific definition for the current major mode overrides a global definition. You can define abbrevs interactively during the editing session, -irrespective of whether Abbrev mode is enabled. You -can also save lists of abbrev definitions in files for use in later -sessions. Some users keep extensive lists of abbrevs that they load -in every session. +irrespective of whether Abbrev mode is enabled. You can also save +lists of abbrev definitions in files, which you can the reload for use +in later sessions. @node Defining Abbrevs @section Defining Abbrevs From ad8d14e210d526fef19e55c2e47b3b3e52819a6b Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 2 May 2012 23:58:28 -0700 Subject: [PATCH 316/564] * doc/emacs/dired.texi (Dired Enter): Improve page break. --- doc/emacs/ChangeLog | 2 ++ doc/emacs/dired.texi | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index f2a72663d3a..e502e8c8cce 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,5 +1,7 @@ 2012-05-03 Glenn Morris + * dired.texi (Dired Enter): Improve page break. + * abbrevs.texi (Abbrev Concepts): Copyedits. * maintaining.texi (Registering, Tag Syntax): diff --git a/doc/emacs/dired.texi b/doc/emacs/dired.texi index f3a1ae2fc99..0dcded78364 100644 --- a/doc/emacs/dired.texi +++ b/doc/emacs/dired.texi @@ -104,7 +104,7 @@ use the @samp{--dired} option. @findex dired-other-frame @kindex C-x 5 d To display the Dired buffer in another window, use @kbd{C-x 4 d} -(@code{dired-other-window}) instead of @kbd{C-x d}. @kbd{C-x 5 d} +(@code{dired-other-window}). @kbd{C-x 5 d} (@code{dired-other-frame}) displays the Dired buffer in a separate frame. From 7e8cf67d701d4d2362816fde44db9a5b809a7b7b Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 3 May 2012 00:07:21 -0700 Subject: [PATCH 317/564] * doc/emacs/calendar.texi: Convert inforefs to refs. --- doc/emacs/ChangeLog | 2 ++ doc/emacs/calendar.texi | 18 +++++++++--------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index e502e8c8cce..3bf95fee88a 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,5 +1,7 @@ 2012-05-03 Glenn Morris + * calendar.texi: Convert inforefs to refs. + * dired.texi (Dired Enter): Improve page break. * abbrevs.texi (Abbrev Concepts): Copyedits. diff --git a/doc/emacs/calendar.texi b/doc/emacs/calendar.texi index a1e98bfcb92..e55d40767f4 100644 --- a/doc/emacs/calendar.texi +++ b/doc/emacs/calendar.texi @@ -26,8 +26,8 @@ the calendar, type @kbd{q}. @iftex This chapter describes the basic calendar features. -@inforef{Advanced Calendar/Diary Usage,, emacs-xtra}, for information -about more specialized features. +For more advanced topics, +@pxref{Advanced Calendar/Diary Usage,,, emacs-xtra, Specialized Emacs Features}. @end iftex @menu @@ -489,7 +489,7 @@ window. calendar, use the @kbd{x} command. This displays the dates that are holidays in a different face. @iftex -@inforef{Calendar Customizing, calendar-holiday-marker, emacs-xtra}. +@xref{Calendar Customizing,,, emacs-xtra, Specialized Emacs Features}. @end iftex @ifnottex @xref{Calendar Customizing, calendar-holiday-marker}. @@ -1102,7 +1102,7 @@ current date is visible). the @kbd{m} command. This marks the dates that have diary entries in a different face. @iftex -@inforef{Calendar Customizing, diary-entry-marker, emacs-xtra}. +@xref{Calendar Customizing,,, emacs-xtra, Specialized Emacs Features}. @end iftex @ifnottex @xref{Calendar Customizing, diary-entry-marker}. @@ -1126,7 +1126,7 @@ date, independently of the calendar display, and optionally for the next few days as well; the variable @code{diary-number-of-entries} specifies how many days to include. @iftex -@inforef{Diary Customizing,, emacs-xtra}. +@xref{Diary Customizing,,, emacs-xtra, Specialized Emacs Features}. @end iftex @ifnottex @xref{Diary Customizing, diary-number-of-entries}. @@ -1270,7 +1270,7 @@ entries. The basic commands are listed here; more sophisticated commands are in the next section (@pxref{Special Diary Entries}). Entries can also be based on non-Gregorian calendars. @iftex -@inforef{Non-Gregorian Diary,, emacs-xtra}. +@xref{Non-Gregorian Diary,,, emacs-xtra, Specialized Emacs Features}. @end iftex @ifnottex @xref{Non-Gregorian Diary}. @@ -1438,7 +1438,7 @@ specifying the name of a face or a single-character string to use when marking the entry in the calendar. Most generally, sexp diary entries can perform arbitrary computations to determine when they apply. @iftex -@inforef{Sexp Diary Entries,, emacs-xtra}. +@xref{Sexp Diary Entries,,, emacs-xtra, Specialized Emacs Features}. @end iftex @ifnottex @xref{Sexp Diary Entries}. @@ -1512,7 +1512,7 @@ display the day's diary buffer, unless you set @code{appt-display-diary} to @code{nil}. The appointments list is also updated whenever the diary file (or a file it includes; see @iftex -@inforef{Fancy Diary Display,, emacs-xtra}) +@ref{Fancy Diary Display,,, emacs-xtra, Specialized Emacs Features}) @end iftex @ifnottex @ref{Fancy Diary Display}) @@ -1576,7 +1576,7 @@ and adds the results to an Emacs diary file. For example: You can use an @code{#include} directive to add the import file contents to the main diary file, if these are different files. @iftex -@inforef{Fancy Diary Display,, emacs-xtra}. +@xref{Fancy Diary Display,,, emacs-xtra, Specialized Emacs Features}. @end iftex @ifnottex @xref{Fancy Diary Display}. From 2227da65ddd447fe1a4fb80c6624d11accd334ba Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 3 May 2012 00:12:48 -0700 Subject: [PATCH 318/564] * rmail.texi (Rmail Display): Use example rather than smallexample. --- doc/emacs/ChangeLog | 2 ++ doc/emacs/rmail.texi | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index 3bf95fee88a..25bbb1d0be4 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,5 +1,7 @@ 2012-05-03 Glenn Morris + * rmail.texi (Rmail Display): Use example rather than smallexample. + * calendar.texi: Convert inforefs to refs. * dired.texi (Dired Enter): Improve page break. diff --git a/doc/emacs/rmail.texi b/doc/emacs/rmail.texi index 6221bbac1a8..3938712a5e9 100644 --- a/doc/emacs/rmail.texi +++ b/doc/emacs/rmail.texi @@ -1232,9 +1232,9 @@ rmail-epa-decrypt} to decrypt it, using the EasyPG library Address mode: @c FIXME goto-addr.el commentary says to use goto-address instead. -@smallexample +@example (add-hook 'rmail-show-message-hook 'goto-address-mode) -@end smallexample +@end example @noindent Then you can browse these URLs by clicking on them with @kbd{Mouse-2} From d1714b9420f780ba924224ba6252f66bfb9c7d9d Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 3 May 2012 00:23:27 -0700 Subject: [PATCH 319/564] More page break tweaks for the manual * doc/emacs/custom.texi (Customization Groups, Custom Themes, Examining): Improve page breaks. --- doc/emacs/ChangeLog | 3 +++ doc/emacs/custom.texi | 10 +++++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index 25bbb1d0be4..8403ccac9ee 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,5 +1,8 @@ 2012-05-03 Glenn Morris + * custom.texi (Customization Groups, Custom Themes, Examining): + Improve page breaks. + * rmail.texi (Rmail Display): Use example rather than smallexample. * calendar.texi: Convert inforefs to refs. diff --git a/doc/emacs/custom.texi b/doc/emacs/custom.texi index bf2602f8f08..d5a68249ec4 100644 --- a/doc/emacs/custom.texi +++ b/doc/emacs/custom.texi @@ -79,7 +79,7 @@ top-level @code{Emacs} group. It looks like this, in part: @c we want the buffer example to all be on one page, but unfortunately @c that's quite a bit of text, so force all space to the bottom. -@page +@c @page @smallexample @group To apply changes, use the Save or Set buttons. @@ -628,7 +628,7 @@ theme, its @samp{State} display shows @samp{THEMED} instead of @findex disable-theme You can enable a specific Custom theme in the current Emacs session by typing @kbd{M-x load-theme}. This prompts for a theme name, loads -the theme from the theme file, and enables the theme. If a theme file +the theme from the theme file, and enables it. If a theme file has been loaded before, you can enable the theme without loading its file by typing @kbd{M-x enable-theme}. To disable a Custom theme, type @kbd{M-x disable-theme}. @@ -636,7 +636,7 @@ type @kbd{M-x disable-theme}. @findex describe-theme To see a description of a Custom theme, type @kbd{?} on its line in the @file{*Custom Themes*} buffer; or type @kbd{M-x describe-theme} -anywhere in Emacs and enter the theme name in the minibuffer. +anywhere in Emacs and enter the theme name. @node Creating Custom Themes @subsection Creating Custom Themes @@ -762,7 +762,7 @@ C-h v fill-column @key{RET} @noindent displays something like this: -@smallexample +@example fill-column is a variable defined in `C source code'. fill-column's value is 70 Local in buffer custom.texi; global value is 70 @@ -777,7 +777,7 @@ Documentation: Interactively, you can set the buffer local value using C-x f. You can customize this variable. -@end smallexample +@end example @noindent The line that says ``You can customize the variable'' indicates that From a7479549069363c9406cd166636e639815774346 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 3 May 2012 06:17:27 -0400 Subject: [PATCH 320/564] Auto-commit of generated files. --- autogen/configure | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/autogen/configure b/autogen/configure index 5a70efc967f..c207cff105e 100755 --- a/autogen/configure +++ b/autogen/configure @@ -8336,7 +8336,9 @@ case "$opsys" in ## Let `ld' find image libs and similar things in /usr/local/lib. ## The system compiler, GCC, has apparently been modified to not ## look there, contrary to what a stock GCC would do. - LD_SWITCH_SYSTEM=-L/usr/local/lib +### It's not our place to do this. See bug#10313#17. +### LD_SWITCH_SYSTEM=-L/usr/local/lib + : ;; gnu-linux) @@ -8345,7 +8347,9 @@ case "$opsys" in ;; netbsd) - LD_SWITCH_SYSTEM="-Wl,-rpath,/usr/pkg/lib -L/usr/pkg/lib -Wl,-rpath,/usr/local/lib -L/usr/local/lib" +### It's not our place to do this. See bug#10313#17. +### LD_SWITCH_SYSTEM="-Wl,-rpath,/usr/pkg/lib -L/usr/pkg/lib -Wl,-rpath,/usr/local/lib -L/usr/local/lib" + : ;; openbsd) From c7349e19adb9c6431a950ffd466d71c51d282662 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 3 May 2012 06:20:40 -0400 Subject: [PATCH 321/564] Auto-commit of loaddefs files. --- lisp/mail/rmail.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el index 8deb9382982..df2f8be533a 100644 --- a/lisp/mail/rmail.el +++ b/lisp/mail/rmail.el @@ -4575,7 +4575,7 @@ With prefix argument N moves forward N messages with these labels. ;;;*** -;;;### (autoloads (rmail-mime) "rmailmm" "rmailmm.el" "be7f4b94a269f840b8707defd515c4f9") +;;;### (autoloads (rmail-mime) "rmailmm" "rmailmm.el" "cd7656f82944d0b92b0d093a5f3a4c36") ;;; Generated autoloads from rmailmm.el (autoload 'rmail-mime "rmailmm" "\ From 470864957479aac7eaef9958974909fb34c83e24 Mon Sep 17 00:00:00 2001 From: Wilson Snyder Date: Thu, 3 May 2012 15:23:55 -0400 Subject: [PATCH 322/564] Merge verilog-mode.el from upstream. * progmodes/verilog-mode.el (font-lock-keywords): Fix mis-highligting auto. Reported by Craig Barner. (verilog-auto, verilog-auto-undef): Add AUTOUNDEF to remove defines from global name space. Reported by Dan Dever. (verilog-auto-reset, verilog-auto-reset-widths) (verilog-auto-tieoff): Support using unbased numbers for AUTORESET and AUTOTIEOFF. (verilog-submit-bug-report): Update variable list. (verilog-read-auto-params): Fix AUTOINPUT regexps containing parenthesis from not matching. Reported by Michael Rytting. (verilog-auto-template-lint): Fix hash error when linting modules with no used templates. (verilog-warn, verilog-warn-error) (verilog-warn-fatal): When non-interactive report multiple warnings before exiting. Suggested by Brad Dobbie. (verilog-auto-template-lint, verilog-auto-template-warn-unused) (verilog-read-auto-template): Add `verilog-auto-template-warn-unused' to report unused template errors. Reported by Brad Dobbie. (verilog-read-decls): Fix AUTOWIRE etc on supply0, supply1 type nets, bug438. Reported by Vns Blore. (verilog-auto-inout-module, verilog-auto-reg) (verilog-read-decls, verilog-read-sub-decls-sig) (verilog-signals-edit-wire-reg, verilog-signals-with): Fix passing of Verilog data types in ANSI input/output ports such as "output logic" into the AUTOs. Special case "wire" and "reg" for backwards compatibility presuming Verilog 2001. (verilog-auto-ascii-enum): Add "auto enum" as alias. (verilog-preprocess): Fix replication of preprocess output. Reported by Brad Dobbie. (verilog-auto-inst-interfaced-ports): Create verilog-auto-inst-interfaced-ports, bug429. Reported by Julian Gorfajn. (verilog-after-save-font-hook) (verilog-before-save-font-hook): New variable. (verilog-modi-cache-results, verilog-save-font-mod-hooked) (verilog-save-font-mods): Wrap disabling fontification, reported by David Rogoff. (verilog-do-indent, verilog-pretty-declarations-auto) (verilog-sk-def-reg): Fix obeying `verilog-auto-lineup', bug305. Reported by Pierre-David Pfister. (verilog-set-auto-endcomments): Fix endtask auto comments outside of class declarations, bug292. Reported by Kevin Heilman. (verilog-read-decls): Fix 'parameter type' not appearing in AUTOINSTPARAM, bug340. Reported by Jonathan Greenlaw. (verilog-auto-logic): Fix when AUTOLOGIC present to properly do AUTOINPUTs, bug411. Reported by Jonathan Greenlaw. (verilog-read-auto-lisp): Avoid syntax-ppss warning on AUTOLISP. Reported by David Kravitz. * progmodes/verilog-mode.el (verilog-pretty-expr): Don't line up assignment with tests in ifs and for loops. (verilog-extended-complete-re, verilog-complete-reg): Change so that DPI inport functions don't look like fuction declarations. (verilog-pretty-expr): Don't line up assignment operations to the test and increment in if and for loops (verilog-extended-complete-re, verilog-complete-reg): Change so that DPI inport functions don't look like fuction declarations --- lisp/ChangeLog | 62 ++ lisp/progmodes/verilog-mode.el | 1168 ++++++++++++++++++++------------ 2 files changed, 808 insertions(+), 422 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ff2c5a40787..96273f72ece 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,65 @@ +2012-05-03 Wilson Snyder + + * progmodes/verilog-mode.el (font-lock-keywords): + Fix mis-highligting auto. Reported by Craig Barner. + (verilog-auto, verilog-auto-undef): Add AUTOUNDEF to remove + defines from global name space. Reported by Dan Dever. + (verilog-auto-reset, verilog-auto-reset-widths) + (verilog-auto-tieoff): Support using unbased numbers for + AUTORESET and AUTOTIEOFF. + (verilog-submit-bug-report): Update variable list. + (verilog-read-auto-params): Fix AUTOINPUT regexps containing + parenthesis from not matching. Reported by Michael Rytting. + (verilog-auto-template-lint): Fix hash error when linting modules + with no used templates. + (verilog-warn, verilog-warn-error) + (verilog-warn-fatal): When non-interactive report multiple + warnings before exiting. Suggested by Brad Dobbie. + (verilog-auto-template-lint, verilog-auto-template-warn-unused) + (verilog-read-auto-template): Add `verilog-auto-template-warn-unused' + to report unused template errors. Reported by Brad Dobbie. + (verilog-read-decls): Fix AUTOWIRE etc on supply0, supply1 type + nets, bug438. Reported by Vns Blore. + (verilog-auto-inout-module, verilog-auto-reg) + (verilog-read-decls, verilog-read-sub-decls-sig) + (verilog-signals-edit-wire-reg, verilog-signals-with): + Fix passing of Verilog data types in ANSI input/output ports + such as "output logic" into the AUTOs. Special case "wire" and + "reg" for backwards compatibility presuming Verilog 2001. + (verilog-auto-ascii-enum): Add "auto enum" as alias. + (verilog-preprocess): Fix replication of preprocess output. + Reported by Brad Dobbie. + (verilog-auto-inst-interfaced-ports): + Create verilog-auto-inst-interfaced-ports, bug429. + Reported by Julian Gorfajn. + (verilog-after-save-font-hook) + (verilog-before-save-font-hook): New variable. + (verilog-modi-cache-results, verilog-save-font-mod-hooked) + (verilog-save-font-mods): Wrap disabling fontification, reported + by David Rogoff. + (verilog-do-indent, verilog-pretty-declarations-auto) + (verilog-sk-def-reg): Fix obeying `verilog-auto-lineup', bug305. + Reported by Pierre-David Pfister. + (verilog-set-auto-endcomments): Fix endtask auto comments outside + of class declarations, bug292. Reported by Kevin Heilman. + (verilog-read-decls): Fix 'parameter type' not appearing in + AUTOINSTPARAM, bug340. Reported by Jonathan Greenlaw. + (verilog-auto-logic): Fix when AUTOLOGIC present to properly do + AUTOINPUTs, bug411. Reported by Jonathan Greenlaw. + (verilog-read-auto-lisp): Avoid syntax-ppss warning on AUTOLISP. + Reported by David Kravitz. + +2012-05-03 Michael McNamara + + * progmodes/verilog-mode.el (verilog-pretty-expr): Don't line up + assignment with tests in ifs and for loops. + (verilog-extended-complete-re, verilog-complete-reg): Change so + that DPI inport functions don't look like fuction declarations. + (verilog-pretty-expr): Don't line up assignment + operations to the test and increment in if and for loops + (verilog-extended-complete-re, verilog-complete-reg): Change so + that DPI inport functions don't look like fuction declarations + 2012-05-03 Kenichi Handa * mail/rmailmm.el (rmail-show-mime): Catch an error caused by text diff --git a/lisp/progmodes/verilog-mode.el b/lisp/progmodes/verilog-mode.el index ad1dae9acf9..0cd8d01aff1 100644 --- a/lisp/progmodes/verilog-mode.el +++ b/lisp/progmodes/verilog-mode.el @@ -123,9 +123,9 @@ ;;; Code: ;; This variable will always hold the version number of the mode -(defconst verilog-mode-version "725" +(defconst verilog-mode-version "800" "Version of this Verilog mode.") -(defconst verilog-mode-release-date "2011-11-27-GNU" +(defconst verilog-mode-release-date "2012-04-23-GNU" "Release date of this Verilog mode.") (defconst verilog-mode-release-emacs t "If non-nil, this version of Verilog mode was released with Emacs itself.") @@ -415,7 +415,10 @@ Set `verilog-in-hooks' during this time, to assist AUTO caches." :group 'verilog-mode) (defvar verilog-debug nil - "If set, enable debug messages for `verilog-mode' internals.") + "Non-nil means enable debug messages for `verilog-mode' internals.") + +(defvar verilog-warn-fatal nil + "Non-nil means `verilog-warn-error' warnings are fatal `error's.") (defcustom verilog-linter "echo 'No verilog-linter set, see \"M-x describe-variable verilog-linter\"'" @@ -524,6 +527,8 @@ are lineup only when \\[verilog-pretty-declarations] is typed." (const :tag "Line up Declarations" declarations) (function :tag "Other")) :group 'verilog-mode-indent ) +(put 'verilog-auto-lineup 'safe-local-variable + '(lambda (x) (memq x '(nil all assignments declarations)))) (defcustom verilog-indent-level 3 "Indentation of Verilog statements with respect to containing block." @@ -600,40 +605,39 @@ Set to 0 to have all directives start at the left side of the screen." (put 'verilog-case-indent 'safe-local-variable 'integerp) (defcustom verilog-auto-newline t - "True means automatically newline after semicolons." + "Non-nil means automatically newline after semicolons." :group 'verilog-mode-indent :type 'boolean) (put 'verilog-auto-newline 'safe-local-variable 'verilog-booleanp) (defcustom verilog-auto-indent-on-newline t - "True means automatically indent line after newline." + "Non-nil means automatically indent line after newline." :group 'verilog-mode-indent :type 'boolean) (put 'verilog-auto-indent-on-newline 'safe-local-variable 'verilog-booleanp) (defcustom verilog-tab-always-indent t - "True means TAB should always re-indent the current line. + "Non-nil means TAB should always re-indent the current line. A nil value means TAB will only reindent when at the beginning of the line." :group 'verilog-mode-indent :type 'boolean) (put 'verilog-tab-always-indent 'safe-local-variable 'verilog-booleanp) (defcustom verilog-tab-to-comment nil - "True means TAB moves to the right hand column in preparation for a comment." + "Non-nil means TAB moves to the right hand column in preparation for a comment." :group 'verilog-mode-actions :type 'boolean) (put 'verilog-tab-to-comment 'safe-local-variable 'verilog-booleanp) (defcustom verilog-indent-begin-after-if t - "If true, indent begin statements following if, else, while, for and repeat. + "Non-nil means indent begin statements following if, else, while, etc. Otherwise, line them up." :group 'verilog-mode-indent :type 'boolean) (put 'verilog-indent-begin-after-if 'safe-local-variable 'verilog-booleanp) - (defcustom verilog-align-ifelse nil - "If true, align `else' under matching `if'. + "Non-nil means align `else' under matching `if'. Otherwise else is lined up with first character on line holding matching if." :group 'verilog-mode-indent :type 'boolean) @@ -648,7 +652,7 @@ default avoids too many redundant comments in tight quarters." (put 'verilog-minimum-comment-distance 'safe-local-variable 'integerp) (defcustom verilog-highlight-p1800-keywords nil - "True means highlight words newly reserved by IEEE-1800. + "Non-nil means highlight words newly reserved by IEEE-1800. These will appear in `verilog-font-lock-p1800-face' in order to gently suggest changing where these words are used as variables to something else. A nil value means highlight these words as appropriate for the SystemVerilog @@ -659,7 +663,7 @@ to see the effect as font color choices are cached by Emacs." (put 'verilog-highlight-p1800-keywords 'safe-local-variable 'verilog-booleanp) (defcustom verilog-highlight-grouping-keywords nil - "True means highlight grouping keywords 'begin' and 'end' more dramatically. + "Non-nil means highlight grouping keywords 'begin' and 'end' more dramatically. If false, these words are in the `font-lock-type-face'; if True then they are in `verilog-font-lock-ams-face'. Some find that special highlighting on these grouping constructs allow the structure of the code to be understood at a glance." @@ -668,7 +672,7 @@ grouping constructs allow the structure of the code to be understood at a glance (put 'verilog-highlight-grouping-keywords 'safe-local-variable 'verilog-booleanp) (defcustom verilog-highlight-modules nil - "True means highlight module statements for `verilog-load-file-at-point'. + "Non-nil means highlight module statements for `verilog-load-file-at-point'. When true, mousing over module names will allow jumping to the module definition. If false, this is not supported. Setting this is experimental, and may lead to bad performance." @@ -677,7 +681,7 @@ this is experimental, and may lead to bad performance." (put 'verilog-highlight-modules 'safe-local-variable 'verilog-booleanp) (defcustom verilog-highlight-includes t - "True means highlight module statements for `verilog-load-file-at-point'. + "Non-nil means highlight module statements for `verilog-load-file-at-point'. When true, mousing over include file names will allow jumping to the file referenced. If false, this is not supported." :group 'verilog-mode-indent @@ -689,7 +693,7 @@ file referenced. If false, this is not supported." Set this to \"wire\" if the Verilog code uses \"`default_nettype none\". Note using `default_nettype none isn't recommended practice; this mode is experimental." - :version "24.1" + :version "24.1" ;; rev670 :group 'verilog-mode-actions :type 'boolean) (put 'verilog-auto-declare-nettype 'safe-local-variable `stringp) @@ -697,27 +701,27 @@ mode is experimental." (defcustom verilog-auto-wire-type nil "Non-nil specifies the data type to use with `verilog-auto-wire' etc. Set this to \"logic\" for SystemVerilog code, or use `verilog-auto-logic'." - :version "24.1" + :version "24.1" ;; rev673 :group 'verilog-mode-actions :type 'boolean) (put 'verilog-auto-wire-type 'safe-local-variable `stringp) (defcustom verilog-auto-endcomments t - "True means insert a comment /* ... */ after 'end's. + "Non-nil means insert a comment /* ... */ after 'end's. The name of the function or case will be set between the braces." :group 'verilog-mode-actions :type 'boolean) (put 'verilog-auto-endcomments 'safe-local-variable 'verilog-booleanp) (defcustom verilog-auto-delete-trailing-whitespace nil - "True means to `delete-trailing-whitespace' in `verilog-auto'." - :version "24.1" + "Non-nil means to `delete-trailing-whitespace' in `verilog-auto'." + :version "24.1" ;; rev703 :group 'verilog-mode-actions :type 'boolean) (put 'verilog-auto-delete-trailing-whitespace 'safe-local-variable 'verilog-booleanp) (defcustom verilog-auto-ignore-concat nil - "True means ignore signals in {...} concatenations for AUTOWIRE etc. + "Non-nil means ignore signals in {...} concatenations for AUTOWIRE etc. This will exclude signals referenced as pin connections in {...} from AUTOWIRE, AUTOOUTPUT and friends. This flag should be set for backward compatibility only and not set in new designs; it @@ -727,7 +731,7 @@ may be removed in future versions." (put 'verilog-auto-ignore-concat 'safe-local-variable 'verilog-booleanp) (defcustom verilog-auto-read-includes nil - "True means to automatically read includes before AUTOs. + "Non-nil means to automatically read includes before AUTOs. This will do a `verilog-read-defines' and `verilog-read-includes' before each AUTO expansion. This makes it easier to embed defines and includes, but can result in very slow reading times if there are many or large @@ -750,15 +754,15 @@ sub-module's port list has changed." :type '(choice (const nil) (const ask) (const detect) (const force))) (defcustom verilog-auto-star-expand t - "Non-nil indicates to expand a SystemVerilog .* instance ports. -They will be expanded in the same way as if there was a AUTOINST in the + "Non-nil means to expand SystemVerilog .* instance ports. +They will be expanded in the same way as if there was an AUTOINST in the instantiation. See also `verilog-auto-star' and `verilog-auto-star-save'." :group 'verilog-mode-actions :type 'boolean) (put 'verilog-auto-star-expand 'safe-local-variable 'verilog-booleanp) (defcustom verilog-auto-star-save nil - "Non-nil indicates to save to disk SystemVerilog .* instance expansions. + "Non-nil means save to disk SystemVerilog .* instance expansions. A nil value indicates direct connections will be removed before saving. Only meaningful to those created due to `verilog-auto-star-expand' being set. @@ -964,7 +968,7 @@ you will probably also need `verilog-auto-reset-widths' set." (put 'verilog-active-low-regexp 'safe-local-variable 'stringp) (defcustom verilog-auto-sense-include-inputs nil - "If true, AUTOSENSE should include all inputs. + "Non-nil means AUTOSENSE should include all inputs. If nil, only inputs that are NOT output signals in the same block are included." :group 'verilog-mode-auto @@ -972,7 +976,7 @@ included." (put 'verilog-auto-sense-include-inputs 'safe-local-variable 'verilog-booleanp) (defcustom verilog-auto-sense-defines-constant nil - "If true, AUTOSENSE should assume all defines represent constants. + "Non-nil means AUTOSENSE should assume all defines represent constants. When true, the defines will not be included in sensitivity lists. To maintain compatibility with other sites, this should be set at the bottom of each Verilog file that requires it, rather than being set globally." @@ -981,28 +985,36 @@ of each Verilog file that requires it, rather than being set globally." (put 'verilog-auto-sense-defines-constant 'safe-local-variable 'verilog-booleanp) (defcustom verilog-auto-reset-blocking-in-non t - "If true, AUTORESET will reset those signals which were -assigned with blocking assignments (=) even in a block with -non-blocking assignments (<=). + "Non-nil means AUTORESET will reset blocking statements. +When true, AUTORESET will reset in blocking statements those +signals which were assigned with blocking assignments (=) even in +a block with non-blocking assignments (<=). If nil, all blocking assigned signals are ignored when any non-blocking assignment is in the AUTORESET block. This allows blocking assignments to be used for temporary values and not have those temporaries reset. See example in `verilog-auto-reset'." - :version "24.1" + :version "24.1" ;; rev718 :type 'boolean :group 'verilog-mode-auto) (put 'verilog-auto-reset-blocking-in-non 'safe-local-variable 'verilog-booleanp) (defcustom verilog-auto-reset-widths t - "If true, AUTORESET should determine the width of signals. + "True means AUTORESET should determine the width of signals. This is then used to set the width of the zero (32'h0 for example). This is required by some lint tools that aren't smart enough to ignore widths of -the constant zero. This may result in ugly code when parameters determine -the MSB or LSB of a signal inside an AUTORESET." +the constant zero. This may result in ugly code when parameters determine +the MSB or LSB of a signal inside an AUTORESET. + +If nil, AUTORESET uses \"0\" as the constant. + +If 'unbased', AUTORESET used the unbased unsized literal \"'0\" +as the constant. This setting is strongly recommended for +SystemVerilog designs." :type 'boolean :group 'verilog-mode-auto) -(put 'verilog-auto-reset-widths 'safe-local-variable 'verilog-booleanp) +(put 'verilog-auto-reset-widths 'safe-local-variable + '(lambda (x) (memq x '(nil t unbased)))) (defcustom verilog-assignment-delay "" "Text used for delays in delayed assignments. Add a trailing space if set." @@ -1011,7 +1023,7 @@ the MSB or LSB of a signal inside an AUTORESET." (put 'verilog-assignment-delay 'safe-local-variable 'stringp) (defcustom verilog-auto-arg-sort nil - "If set, AUTOARG signal names will be sorted, not in declaration order. + "Non-nil means AUTOARG signal names will be sorted, not in declaration order. Declaration order is advantageous with order based instantiations and is the default for backward compatibility. Sorted order reduces changes when declarations are moved around in a file, and @@ -1023,7 +1035,7 @@ See also `verilog-auto-inst-sort'." (put 'verilog-auto-arg-sort 'safe-local-variable 'verilog-booleanp) (defcustom verilog-auto-inst-dot-name nil - "If true, when creating ports with AUTOINST, use .name syntax. + "Non-nil means when creating ports with AUTOINST, use .name syntax. This will use \".port\" instead of \".port(port)\" when possible. This is only legal in SystemVerilog files, and will confuse older simulators. Setting `verilog-auto-inst-vector' to nil may also @@ -1033,7 +1045,7 @@ be desirable to increase how often .name will be used." (put 'verilog-auto-inst-dot-name 'safe-local-variable 'verilog-booleanp) (defcustom verilog-auto-inst-param-value nil - "If set, AUTOINST will replace parameters with the parameter value. + "Non-nil means AUTOINST will replace parameters with the parameter value. If nil, leave parameters as symbolic names. Parameters must be in Verilog 2001 format #(...), and if a parameter is not @@ -1041,7 +1053,7 @@ listed as such there (as when the default value is acceptable), it will not be replaced, and will remain symbolic. For example, imagine a submodule uses parameters to declare the size of its -inputs. This is then used by a upper module: +inputs. This is then used by an upper module: module InstModule (o,i); parameter WIDTH; @@ -1070,20 +1082,20 @@ instead expand to: (put 'verilog-auto-inst-param-value 'safe-local-variable 'verilog-booleanp) (defcustom verilog-auto-inst-sort nil - "If set, AUTOINST signal names will be sorted, not in declaration order. + "Non-nil means AUTOINST signals will be sorted, not in declaration order. Also affects AUTOINSTPARAM. Declaration order is the default for backward compatibility, and as some teams prefer signals that are declared together to remain together. Sorted order reduces changes when declarations are moved around in a file. See also `verilog-auto-arg-sort'." - :version "24.1" + :version "24.1" ;; rev688 :group 'verilog-mode-auto :type 'boolean) (put 'verilog-auto-inst-sort 'safe-local-variable 'verilog-booleanp) (defcustom verilog-auto-inst-vector t - "If true, when creating default ports with AUTOINST, use bus subscripts. + "Non-nil means when creating default ports with AUTOINST, use bus subscripts. If nil, skip the subscript when it matches the entire bus as declared in the module (AUTOWIRE signals always are subscripted, you must manually declare the wire to have the subscripts removed.) Setting this to nil may @@ -1115,6 +1127,12 @@ won't merge conflict." :type 'integer) (put 'verilog-auto-inst-column 'safe-local-variable 'integerp) +(defcustom verilog-auto-inst-interfaced-ports t + "Non-nil means include interfaced ports in AUTOINST expansions." + :group 'verilog-mode-auto + :type 'boolean) +(put 'verilog-auto-inst-interfaced-ports 'safe-local-variable 'verilog-booleanp) + (defcustom verilog-auto-input-ignore-regexp nil "If set, when creating AUTOINPUT list, ignore signals matching this regexp. See the \\[verilog-faq] for examples on using this." @@ -1136,11 +1154,18 @@ See the \\[verilog-faq] for examples on using this." :type 'string) (put 'verilog-auto-output-ignore-regexp 'safe-local-variable 'stringp) +(defcustom verilog-auto-template-warn-unused nil + "Non-nil means report warning if an AUTO_TEMPLATE line is not used. +This feature is not supported before Emacs 21.1 or XEmacs 21.4." + :group 'verilog-mode-auto + :type 'boolean) +(put 'verilog-auto-template-warn-unused 'safe-local-variable 'verilog-booleanp) + (defcustom verilog-auto-tieoff-declaration "wire" - "Data type used for the declaration for AUTOTIEOFF. If \"wire\" then -create a wire, if \"assign\" create an assignment, else the data type for -variable creation." - :version "24.1" + "Data type used for the declaration for AUTOTIEOFF. +If \"wire\" then create a wire, if \"assign\" create an +assignment, else the data type for variable creation." + :version "24.1" ;; rev713 :group 'verilog-mode-auto :type 'string) (put 'verilog-auto-tieoff-declaration 'safe-local-variable 'stringp) @@ -1201,6 +1226,16 @@ For example, \"_t$\" matches typedefs named with _t, as in the C language." :group 'verilog-mode-auto :type 'hook) +(defcustom verilog-before-save-font-hook nil + "Hook run before `verilog-save-font-mods' removes highlighting." + :group 'verilog-mode-auto + :type 'hook) + +(defcustom verilog-after-save-font-hook nil + "Hook run after `verilog-save-font-mods' restores highlighting." + :group 'verilog-mode-auto + :type 'hook) + (defvar verilog-imenu-generic-expression '((nil "^\\s-*\\(\\(m\\(odule\\|acromodule\\)\\)\\|primitive\\)\\s-+\\([a-zA-Z0-9_.:]+\\)" 4) ("*Vars*" "^\\s-*\\(reg\\|wire\\)\\s-+\\(\\|\\[[^]]+\\]\\s-+\\)\\([A-Za-z0-9_]+\\)" 3)) @@ -1430,6 +1465,8 @@ If set will become buffer local.") :help "Help on AUTOSENSE - sensitivity lists for always blocks"] ["AUTOTIEOFF" (describe-function 'verilog-auto-tieoff) :help "Help on AUTOTIEOFF - tying off unused outputs"] + ["AUTOUNDEF" (describe-function 'verilog-auto-undef) + :help "Help on AUTOUNDEF - undefine all local defines"] ["AUTOUNUSED" (describe-function 'verilog-auto-unused) :help "Help on AUTOUNUSED - terminating unused inputs"] ["AUTOWIRE" (describe-function 'verilog-auto-wire) @@ -1552,7 +1589,7 @@ If set will become buffer local.") FIXEDCASE and LITERAL as in `replace-match`. STRING is what to replace. The case (verilog-string-replace-matches \"o\" \"oo\" nil nil \"foobar\") will break, as the o's continuously replace. xa -> x works ok though." - ;; Hopefully soon to a emacs built-in + ;; Hopefully soon to an Emacs built-in ;; Also note \ in the replacement prevent multiple replacements; IE ;; (verilog-string-replace-matches "@" "\\\\([0-9]+\\\\)" nil nil "wire@_@") ;; Gives "wire\([0-9]+\)_@" not "wire\([0-9]+\)_\([0-9]+\)" @@ -2401,7 +2438,6 @@ find the errors." "\\|\\(\\<`[ou]vm_[a-z_]+_begin\\>\\)" ;28 "\\|\\(\\<`vmm_[a-z_]+_member_begin\\>\\)" ;; - )) (defconst verilog-end-block-ordered-rry @@ -2629,11 +2665,11 @@ find the errors." "endmodule" "endprimitive" "endinterface" "endpackage" "endprogram" "endclass" )))) (defconst verilog-disable-fork-re "\\(disable\\|wait\\)\\s-+fork\\>") -(defconst verilog-extended-case-re "\\(unique\\s-+\\|priority\\s-+\\)?case[xz]?") +(defconst verilog-extended-case-re "\\(\\(unique\\s-+\\|priority\\s-+\\)?case[xz]?\\)") (defconst verilog-extended-complete-re - (concat "\\(\\\\s-+\\)?virtual\\s-+\\|\\\\|\\\\)" - "\\|\\(\\\\s-+\\)*\\(\\\\|\\\\|\\\\)" - "\\|\\(\\\\s-+\\)?\"DPI-C\"\\s-+\\(function\\>\\|task\\>\\)" + (concat "\\(\\(\\\\s-+\\)?virtual\\s-+\\|\\\\|\\\\)\\)" + "\\|\\(\\(\\\\s-+\\)*\\(\\\\|\\\\|\\\\)\\)" + "\\|\\(\\(\\\\s-+\\)?\\(\"DPI-C\"\\s-+\\)?\\(\\\\s-+\\)?\\(function\\>\\|task\\>\\)\\)" "\\|" verilog-extended-case-re )) (defconst verilog-basic-complete-re (eval-when-compile @@ -2645,9 +2681,7 @@ find the errors." )))) (defconst verilog-complete-reg (concat - verilog-extended-complete-re - "\\|" - verilog-basic-complete-re)) + verilog-extended-complete-re "\\|\\(" verilog-basic-complete-re "\\)")) (defconst verilog-end-statement-re (concat "\\(" verilog-beg-block-re "\\)\\|\\(" @@ -2764,7 +2798,8 @@ See also `verilog-font-lock-extra-types'.") (defvar verilog-font-lock-keywords-3 nil "Gaudy level highlighting for Verilog mode. See also `verilog-font-lock-extra-types'.") -(defvar verilog-font-lock-translate-off-face + +(defvar verilog-font-lock-translate-off-face 'verilog-font-lock-translate-off-face "Font to use for translated off regions.") (defface verilog-font-lock-translate-off-face @@ -2842,8 +2877,8 @@ See also `verilog-font-lock-extra-types'.") (verilog-pragma-keywords (eval-when-compile (verilog-regexp-opt - '("surefire" "synopsys" "rtl_synthesis" "verilint" "leda" "0in") nil - ))) + '("surefire" "auto" "synopsys" "rtl_synthesis" "verilint" "leda" "0in" + ) nil ))) (verilog-1800-2005-keywords (eval-when-compile @@ -2968,7 +3003,7 @@ See also `verilog-font-lock-extra-types'.") (append verilog-font-lock-keywords-1 (list ;; Fontify pragmas - (concat "\\(//\\s-*" verilog-pragma-keywords "\\s-.*\\)") + (concat "\\(//\\s-*\\(" verilog-pragma-keywords "\\)\\s-.*\\)") ;; Fontify escaped names '("\\(\\\\\\S-*\\s-\\)" 0 font-lock-function-name-face) ;; Fontify macro definitions/ uses @@ -3030,6 +3065,31 @@ For insignificant changes, see instead `verilog-save-buffer-state'." after-change-functions) (progn ,@body))) +(defvar verilog-save-font-mod-hooked nil + "Local variable when inside a `verilog-save-font-mods' block.") +(make-variable-buffer-local 'verilog-save-font-mod-hooked) + +(defmacro verilog-save-font-mods (&rest body) + "Execute BODY forms, disabling text modifications to allow performing BODY. +Includes temporary disabling of `font-lock' to restore the buffer +to full text form for parsing. Additional actions may be specified with +`verilog-before-save-font-hook' and `verilog-after-save-font-hook'." + ;; Before version 20, match-string with font-lock returns a + ;; vector that is not equal to the string. IE if on "input" + ;; nil==(equal "input" (progn (looking-at "input") (match-string 0))) + `(let* ((hooked (unless verilog-save-font-mod-hooked + (verilog-run-hooks 'verilog-before-save-font-hook) + t)) + (verilog-save-font-mod-hooked t) + (fontlocked (when (and (boundp 'font-lock-mode) font-lock-mode) + (font-lock-mode 0) + t))) + (unwind-protect + (progn ,@body) + ;; Unwind forms + (when fontlocked (font-lock-mode t)) + (when hooked (verilog-run-hooks 'verilog-after-save-font-hook))))) + ;; ;; Comment detection and caching @@ -3161,7 +3221,7 @@ to establish comment properties on all text." (defun verilog-insert (&rest stuff) "Insert STUFF arguments, tracking for `verilog-inside-comment-or-string-p'. -Any insert that includes a comment must have the entire commente +Any insert that includes a comment must have the entire comment inserted using a single call to `verilog-insert'." (let ((pt (point))) (while stuff @@ -3565,9 +3625,10 @@ Key bindings specific to `verilog-mode-map' are: ;; Stuff for GNU Emacs (set (make-local-variable 'font-lock-defaults) - `((verilog-font-lock-keywords verilog-font-lock-keywords-1 - verilog-font-lock-keywords-2 - verilog-font-lock-keywords-3) + `((verilog-font-lock-keywords + verilog-font-lock-keywords-1 + verilog-font-lock-keywords-2 + verilog-font-lock-keywords-3) nil nil nil ,(if (functionp 'syntax-ppss) ;; verilog-beg-of-defun uses syntax-ppss, and syntax-ppss uses @@ -4049,7 +4110,7 @@ With ARG, first kill any existing labels." (if (looking-at verilog-label-re) (setq h (point)))) (goto-char h))) - ;; stop if we see a complete reg, perhaps an extended one + ;; stop if we see an extended complete reg, perhaps a complete one (and (looking-at verilog-complete-reg) (let* ((p (point))) @@ -4186,32 +4247,20 @@ More specifically, point @ in the line foo : @ begin" nil))) (defun verilog-backward-up-list (arg) - "Like `backward-up-list', but deal with comments." + "Call `backward-up-list' ARG, ignoring comments." (let ((parse-sexp-ignore-comments t)) (backward-up-list arg))) (defun verilog-forward-sexp-cmt (arg) - "Call `forward-sexp', inside comments." + "Call `forward-sexp' ARG, inside comments." (let ((parse-sexp-ignore-comments nil)) (forward-sexp arg))) (defun verilog-forward-sexp-ign-cmt (arg) - "Call `forward-sexp', ignoring comments." + "Call `forward-sexp' ARG, ignoring comments." (let ((parse-sexp-ignore-comments t)) (forward-sexp arg))) -(defun verilog-in-struct-region-p () - "Return true if in a struct region. -More specifically, in a list after a struct|union keyword." - (interactive) - (save-excursion - (let* ((state (verilog-syntax-ppss)) - (depth (nth 0 state))) - (if depth - (progn (verilog-backward-up-list depth) - (verilog-beg-of-statement) - (looking-at "\\?\\s-*\\")))))) - (defun verilog-in-generate-region-p () "Return true if in a generate region. More specifically, after a generate and before an endgenerate." @@ -4658,10 +4707,10 @@ primitive or interface named NAME." (cond ((match-end 5) ;; of verilog-end-block-ordered-re (setq reg "\\(\\\\)\\|\\(\\<\\(endfunction\\|task\\|\\(macro\\)?module\\|primitive\\)\\>\\)") - (setq name-re "\\w+\\s-*(") - ) + (setq name-re "\\w+\\s-*(")) ((match-end 6) ;; of verilog-end-block-ordered-re - (setq reg "\\(\\\\)\\|\\(\\<\\(endtask\\|function\\|\\(macro\\)?module\\|primitive\\)\\>\\)")) + (setq reg "\\(\\\\)\\|\\(\\<\\(endtask\\|function\\|\\(macro\\)?module\\|primitive\\)\\>\\)") + (setq name-re "\\w+\\s-*(")) ((match-end 7) ;; of verilog-end-block-ordered-re (setq reg "\\(\\<\\(macro\\)?module\\>\\)\\|\\")) ((match-end 8) ;; of verilog-end-block-ordered-re @@ -4977,25 +5026,24 @@ becomes: (compile compile-command)) (defun verilog-preprocess (&optional command filename) - "Preprocess the buffer, similar to `compile', but leave output in Verilog-Mode. + "Preprocess the buffer, similar to `compile', but put output in Verilog-Mode. Takes optional COMMAND or defaults to `verilog-preprocessor', and -FILENAME or defaults to `buffer-file-name`." +FILENAME to find directory to run in, or defaults to `buffer-file-name`." (interactive (list (let ((default (verilog-expand-command verilog-preprocessor))) (set (make-local-variable `verilog-preprocessor) - (read-from-minibuffer "Run Preprocessor (like this): " - default nil nil - 'verilog-preprocess-history default))))) + (read-from-minibuffer "Run Preprocessor (like this): " + default nil nil + 'verilog-preprocess-history default))))) (unless command (setq command (verilog-expand-command verilog-preprocessor))) (let* ((fontlocked (and (boundp 'font-lock-mode) font-lock-mode)) - (dir (file-name-directory (or filename buffer-file-name))) - (file (file-name-nondirectory (or filename buffer-file-name))) - (cmd (concat "cd " dir "; " command " " file))) + (dir (file-name-directory (or filename buffer-file-name))) + (cmd (concat "cd " dir "; " command))) (with-output-to-temp-buffer "*Verilog-Preprocessed*" (with-current-buffer (get-buffer "*Verilog-Preprocessed*") (insert (concat "// " cmd "\n")) - (shell-command cmd "*Verilog-Preprocessed*") + (call-process shell-file-name nil t nil shell-command-switch cmd) (verilog-mode) ;; Without this force, it takes a few idle seconds ;; to get the color, which is very jarring @@ -5006,17 +5054,30 @@ FILENAME or defaults to `buffer-file-name`." ;; Batch ;; +(defun verilog-warn (string &rest args) + "Print a warning with `format' using STRING and optional ARGS." + (apply 'message (concat "%%Warning: " string) args)) + +(defun verilog-warn-error (string &rest args) + "Call `error' using STRING and optional ARGS. +If `verilog-warn-fatal' is non-nil, call `verilog-warn' instead." + (if verilog-warn-fatal + (apply 'error string args) + (apply 'verilog-warn string args))) + (defmacro verilog-batch-error-wrapper (&rest body) "Execute BODY and add error prefix to any errors found. This lets programs calling batch mode to easily extract error messages." - `(condition-case err - (progn ,@body) - (error - (error "%%Error: %s%s" (error-message-string err) - (if (featurep 'xemacs) "\n" ""))))) ;; XEmacs forgets to add a newline + `(let ((verilog-warn-fatal nil)) + (condition-case err + (progn ,@body) + (error + (error "%%Error: %s%s" (error-message-string err) + (if (featurep 'xemacs) "\n" "")))))) ;; XEmacs forgets to add a newline (defun verilog-batch-execute-func (funref &optional no-save) - "Internal processing of a batch command, running FUNREF on all command arguments. + "Internal processing of a batch command. +Runs FUNREF on all command arguments. Save the result unless optional NO-SAVE is t." (verilog-batch-error-wrapper ;; Setting global variables like that is *VERY NASTY* !!! --Stef @@ -5088,7 +5149,7 @@ line in bottom-up order." (verilog-batch-execute-func `verilog-inject-auto)) (defun verilog-batch-indent () - "For use with --batch, reindent an a entire file as a stand-alone tool. + "For use with --batch, reindent an entire file as a stand-alone tool. This sets up the appropriate Verilog mode environment, calls \\[verilog-indent-buffer] on all command-line files, and saves the buffers." (unless noninteractive @@ -5219,7 +5280,7 @@ Return a list of two elements: (INDENT-TYPE INDENT-LEVEL)." (verilog-beg-of-statement) ;; doesn't get to beginning (if (looking-at verilog-property-re) (throw 'nesting 'statement) ; We don't need an endproperty for these - (throw 'nesting 'block) ;We still need a endproperty + (throw 'nesting 'block) ;We still need an endproperty )) (t ; endblock ; try to leap back to matching outward block by striding across @@ -5312,7 +5373,6 @@ Return a list of two elements: (INDENT-TYPE INDENT-LEVEL)." (t (setq depth (verilog-current-indent-level))))) (message "You are at nesting %s depth %d" type depth)))) - (defun verilog-calc-1 () (catch 'nesting (let ((re (concat "\\({\\|}\\|" verilog-indent-re "\\)"))) @@ -5370,9 +5430,10 @@ Return a list of two elements: (INDENT-TYPE INDENT-LEVEL)." ; endfunction (verilog-beg-of-statement) (if (looking-at verilog-beg-block-re-ordered) - (throw 'nesting 'block) - (throw 'nesting 'defun))) + (throw 'nesting 'block) + (throw 'nesting 'defun))) + ;; ((looking-at "\\") ; *sigh* ; {assert|assume|cover} property (); are complete @@ -5382,7 +5443,7 @@ Return a list of two elements: (INDENT-TYPE INDENT-LEVEL)." (verilog-beg-of-statement) (if (looking-at verilog-property-re) (throw 'continue 'statement) ; We don't need an endproperty for these - (throw 'nesting 'block) ;We still need a endproperty + (throw 'nesting 'block) ;We still need an endproperty )) (t (throw 'nesting 'block)))) @@ -5715,7 +5776,7 @@ Set point to where line starts." (forward-comment (- (buffer-size)))) (defun verilog-backward-syntactic-ws-quick () - "As with `verilog-backward-syntactic-ws' but uses `verilog-scan' cache." + "As with `verilog-backward-syntactic-ws' but use `verilog-scan' cache." (while (cond ((bobp) nil) ; Done ((> (skip-syntax-backward " ") 0) @@ -5864,7 +5925,7 @@ May cache result using `verilog-syntax-ppss'." (defun verilog-in-paren-quick () "Return true if in a parenthetical expression. -Always starts from point-min, to allow inserts with hooks disabled." +Always starts from `point-min', to allow inserts with hooks disabled." ;; The -quick refers to its use alongside the other -quick functions, ;; not that it's likely to be faster than verilog-in-paren. (let ((state (save-excursion (parse-partial-sexp (point-min) (point))))) @@ -6118,7 +6179,7 @@ Only look at a few lines to determine indent level." (indent-line-to val) (if (and (not verilog-indent-lists) (verilog-in-paren)) - (verilog-pretty-declarations)) + (verilog-pretty-declarations-auto)) )) ((= (preceding-char) ?\) ) (goto-char here) @@ -6154,7 +6215,7 @@ Only look at a few lines to determine indent level." (looking-at verilog-declaration-re)))) (indent-line-to val) (if decl - (verilog-pretty-declarations)))) + (verilog-pretty-declarations-auto)))) (;-- Handle the ends (or @@ -6285,6 +6346,12 @@ ARG is ignored, for `comment-indent-function' compatibility." ;; +(defun verilog-pretty-declarations-auto (&optional quiet) + "Call `verilog-pretty-declarations' QUIET based on `verilog-auto-lineup'." + (when (or (eq 'all verilog-auto-lineup) + (eq 'declarations verilog-auto-lineup)) + (verilog-pretty-declarations quiet))) + (defun verilog-pretty-declarations (&optional quiet) "Line up declarations around point. Be verbose about progress unless optional QUIET set." @@ -6431,100 +6498,101 @@ Be verbose about progress unless optional QUIET set." (interactive) (if (not (verilog-in-comment-or-string-p)) (save-excursion - (let ((rexp (concat "^\\s-*" verilog-complete-reg))) - (beginning-of-line) - (if (and (not (looking-at rexp )) - (looking-at verilog-assignment-operation-re) - (save-excursion - (goto-char (match-end 2)) - (and (not (verilog-in-attribute-p)) - (not (verilog-in-parameter-p)) - (not (verilog-in-comment-or-string-p))))) - (let* ((here (point)) - (e) (r) - (start - (progn - (beginning-of-line) - (setq e (point)) - (verilog-backward-syntactic-ws) - (beginning-of-line) - (while (and (not (looking-at rexp )) - (looking-at verilog-assignment-operation-re) - (not (bobp)) - ) - (setq e (point)) - (verilog-backward-syntactic-ws) - (beginning-of-line) - ) ;Ack, need to grok `define - e)) - (end - (progn - (goto-char here) - (end-of-line) - (setq e (point)) ;Might be on last line - (verilog-forward-syntactic-ws) - (beginning-of-line) - (while (and - (not (looking-at rexp )) - (looking-at verilog-assignment-operation-re) - (progn - (end-of-line) - (not (eq e (point))))) - (setq e (point)) - (verilog-forward-syntactic-ws) - (beginning-of-line) - ) - e)) - (endpos (set-marker (make-marker) end)) - (ind) - ) - (goto-char start) - (verilog-do-indent (verilog-calculate-indent)) - (if (and (not quiet) - (> (- end start) 100)) - (message "Lining up expressions..(please stand by)")) + (let ( (rexp (concat "^\\s-*" verilog-complete-reg)) + (rexp1 (concat "^\\s-*" verilog-basic-complete-re))) + (beginning-of-line) + (if (and (not (looking-at rexp )) + (looking-at verilog-assignment-operation-re) + (save-excursion + (goto-char (match-end 2)) + (and (not (verilog-in-attribute-p)) + (not (verilog-in-parameter-p)) + (not (verilog-in-comment-or-string-p))))) + (let* ((here (point)) + (e) (r) + (start + (progn + (beginning-of-line) + (setq e (point)) + (verilog-backward-syntactic-ws) + (beginning-of-line) + (while (and (not (looking-at rexp1)) + (looking-at verilog-assignment-operation-re) + (not (bobp)) + ) + (setq e (point)) + (verilog-backward-syntactic-ws) + (beginning-of-line) + ) ;Ack, need to grok `define + e)) + (end + (progn + (goto-char here) + (end-of-line) + (setq e (point)) ;Might be on last line + (verilog-forward-syntactic-ws) + (beginning-of-line) + (while (and + (not (looking-at rexp1 )) + (looking-at verilog-assignment-operation-re) + (progn + (end-of-line) + (not (eq e (point))))) + (setq e (point)) + (verilog-forward-syntactic-ws) + (beginning-of-line) + ) + e)) + (endpos (set-marker (make-marker) end)) + (ind) + ) + (goto-char start) + (verilog-do-indent (verilog-calculate-indent)) + (if (and (not quiet) + (> (- end start) 100)) + (message "Lining up expressions..(please stand by)")) - ;; Set indent to minimum throughout region - (while (< (point) (marker-position endpos)) - (beginning-of-line) - (verilog-just-one-space verilog-assignment-operation-re) - (beginning-of-line) - (verilog-do-indent (verilog-calculate-indent)) - (end-of-line) - (verilog-forward-syntactic-ws) - ) + ;; Set indent to minimum throughout region + (while (< (point) (marker-position endpos)) + (beginning-of-line) + (verilog-just-one-space verilog-assignment-operation-re) + (beginning-of-line) + (verilog-do-indent (verilog-calculate-indent)) + (end-of-line) + (verilog-forward-syntactic-ws) + ) - ;; Now find biggest prefix - (setq ind (verilog-get-lineup-indent-2 verilog-assignment-operation-re start endpos)) + ;; Now find biggest prefix + (setq ind (verilog-get-lineup-indent-2 verilog-assignment-operation-re start endpos)) - ;; Now indent each line. - (goto-char start) - (while (progn (setq e (marker-position endpos)) - (setq r (- e (point))) - (> r 0)) - (setq e (point)) - (if (not quiet) (message "%d" r)) - (cond - ((looking-at verilog-assignment-operation-re) - (goto-char (match-beginning 2)) - (if (not (or (verilog-in-parenthesis-p) ;; leave attributes and comparisons alone - (verilog-in-coverage-p))) - (if (eq (char-after) ?=) - (indent-to (1+ ind)) ; line up the = of the <= with surrounding = - (indent-to ind) - )) - ) - ((verilog-continued-line-1 start) - (goto-char e) - (indent-line-to ind)) - (t ; Must be comment or white space - (goto-char e) - (verilog-forward-ws&directives) - (forward-line -1)) - ) - (forward-line 1)) - (unless quiet (message "")) - )))))) + ;; Now indent each line. + (goto-char start) + (while (progn (setq e (marker-position endpos)) + (setq r (- e (point))) + (> r 0)) + (setq e (point)) + (if (not quiet) (message "%d" r)) + (cond + ((looking-at verilog-assignment-operation-re) + (goto-char (match-beginning 2)) + (if (not (or (verilog-in-parenthesis-p) ;; leave attributes and comparisons alone + (verilog-in-coverage-p))) + (if (eq (char-after) ?=) + (indent-to (1+ ind)) ; line up the = of the <= with surrounding = + (indent-to ind) + )) + ) + ((verilog-continued-line-1 start) + (goto-char e) + (indent-line-to ind)) + (t ; Must be comment or white space + (goto-char e) + (verilog-forward-ws&directives) + (forward-line -1)) + ) + (forward-line 1)) + (unless quiet (message "")) + )))))) (defun verilog-just-one-space (myre) "Remove extra spaces around regular expression MYRE." @@ -7365,6 +7433,7 @@ See also `verilog-sk-header' for an alternative format." ;; ;; Elements of a signal list +;; Unfortunately we use 'assoc' on this, so can't be a vector (defsubst verilog-sig-new (name bits comment mem enum signed type multidim modport) (list name bits comment mem enum signed type multidim modport)) (defsubst verilog-sig-name (sig) @@ -7381,6 +7450,8 @@ See also `verilog-sk-header' for an alternative format." (nth 5 sig)) (defsubst verilog-sig-type (sig) (nth 6 sig)) +(defsubst verilog-sig-type-set (sig type) + (setcar (nthcdr 6 sig) type)) (defsubst verilog-sig-multidim (sig) (nth 7 sig)) (defsubst verilog-sig-multidim-string (sig) @@ -7396,17 +7467,17 @@ See also `verilog-sk-header' for an alternative format." (verilog-make-width-expression (verilog-sig-bits sig))) (defsubst verilog-alw-new (outputs-del outputs-imm temps inputs) - (list outputs-del outputs-imm temps inputs)) + (vector outputs-del outputs-imm temps inputs)) (defsubst verilog-alw-get-outputs-delayed (sigs) - (nth 0 sigs)) + (aref sigs 0)) (defsubst verilog-alw-get-outputs-immediate (sigs) - (nth 1 sigs)) + (aref sigs 1)) (defsubst verilog-alw-get-temps (sigs) - (nth 2 sigs)) + (aref sigs 2)) (defsubst verilog-alw-get-inputs (sigs) - (nth 3 sigs)) + (aref sigs 3)) (defsubst verilog-alw-get-uses-delayed (sigs) - (nth 0 sigs)) + (aref sigs 0)) (defsubst verilog-modi-new (name fob pt type) (vector name fob pt type)) @@ -7459,6 +7530,11 @@ See also `verilog-sk-header' for an alternative format." (defsubst verilog-subdecls-get-interfaced (subdecls) (aref subdecls 4)) +(defun verilog-signals-from-signame (signame-list) + "Return signals in standard form from SIGNAME-LIST, a simple list of names." + (mapcar (lambda (name) (verilog-sig-new name nil nil nil nil nil nil nil nil)) + signame-list)) + (defun verilog-signals-not-in (in-list not-list) "Return list of signals in IN-LIST that aren't also in NOT-LIST. Also remove any duplicates in IN-LIST. @@ -7471,17 +7547,17 @@ Signals must be in standard (base vector) form." (puthash (car (car not-list)) t ht) (setq not-list (cdr not-list))) (while in-list - (when (not (gethash (car (car in-list)) ht)) + (when (not (gethash (verilog-sig-name (car in-list)) ht)) (setq out-list (cons (car in-list) out-list)) - (puthash (car (car in-list)) t ht)) + (puthash (verilog-sig-name (car in-list)) t ht)) (setq in-list (cdr in-list))) (nreverse out-list))) ;; Slower Fallback if no hash tables (pre Emacs 21.1/XEmacs 21.4) (t (let (out-list) (while in-list - (if (not (or (assoc (car (car in-list)) not-list) - (assoc (car (car in-list)) out-list))) + (if (not (or (assoc (verilog-sig-name (car in-list)) not-list) + (assoc (verilog-sig-name (car in-list)) out-list))) (setq out-list (cons (car in-list) out-list))) (setq in-list (cdr in-list))) (nreverse out-list))))) @@ -7499,13 +7575,22 @@ Signals must be in standard (base vector) form." (defun verilog-signals-sort-compare (a b) "Compare signal A and B for sorting." - (string< (car a) (car b))) + (string< (verilog-sig-name a) (verilog-sig-name b))) (defun verilog-signals-not-params (in-list) "Return list of signals in IN-LIST that aren't parameters or numeric constants." (let (out-list) (while in-list - (unless (boundp (intern (concat "vh-" (car (car in-list))))) + (unless (boundp (intern (concat "vh-" (verilog-sig-name (car in-list))))) + (setq out-list (cons (car in-list) out-list))) + (setq in-list (cdr in-list))) + (nreverse out-list))) + +(defun verilog-signals-with (func in-list) + "Return IN-LIST with only signals where FUNC passed each signal is true." + (let (out-list) + (while in-list + (when (funcall func (car in-list)) (setq out-list (cons (car in-list) out-list))) (setq in-list (cdr in-list))) (nreverse out-list))) @@ -7594,20 +7679,67 @@ Duplicate signals are also removed. For example A[2] and A[1] become A[2:1]." ;; out-list)) -(defun verilog-sig-tieoff (sig &optional no-width) +(defun verilog-sig-tieoff (sig) "Return tieoff expression for given SIG, with appropriate width. -Ignore width if optional NO-WIDTH is set." - (let* ((width (if no-width nil (verilog-sig-width sig)))) - (concat - (if (and verilog-active-low-regexp - (string-match verilog-active-low-regexp (verilog-sig-name sig))) - "~" "") - (cond ((not width) - "0") - ((string-match "^[0-9]+$" width) - (concat width (if (verilog-sig-signed sig) "'sh0" "'h0"))) - (t - (concat "{" width "{1'b0}}")))))) +Tieoff value uses `verilog-active-low-regexp' and +`verilog-auto-reset-widths'." + (concat + (if (and verilog-active-low-regexp + (string-match verilog-active-low-regexp (verilog-sig-name sig))) + "~" "") + (cond ((not verilog-auto-reset-widths) + "0") + ((equal verilog-auto-reset-widths 'unbased) + "'0") + ;; Else presume verilog-auto-reset-widths is true + (t + (let* ((width (verilog-sig-width sig))) + (if (string-match "^[0-9]+$" width) + (concat width (if (verilog-sig-signed sig) "'sh0" "'h0")) + (concat "{" width "{1'b0}}"))))))) + +;; +;; Dumping +;; + +(defun verilog-decls-princ (decls) + "For debug, dump the `verilog-read-decls' structure DECLS." + (verilog-signals-princ (verilog-decls-get-outputs decls) + "Outputs:\n" " ") + (verilog-signals-princ (verilog-decls-get-inouts decls) + "Inout:\n" " ") + (verilog-signals-princ (verilog-decls-get-inputs decls) + "Inputs:\n" " ") + (verilog-signals-princ (verilog-decls-get-vars decls) + "Vars:\n" " ") + (verilog-signals-princ (verilog-decls-get-assigns decls) + "Assigns:\n" " ") + (verilog-signals-princ (verilog-decls-get-consts decls) + "Consts:\n" " ") + (verilog-signals-princ (verilog-decls-get-gparams decls) + "Gparams:\n" " ") + (verilog-signals-princ (verilog-decls-get-interfaces decls) + "Interfaces:\n" " ") + (princ "\n")) + +(defun verilog-signals-princ (signals &optional header prefix) + "For debug, dump internal SIGNALS structures, with HEADER and PREFIX." + (when signals + (princ header) + (while signals + (let ((sig (car signals))) + (setq signals (cdr signals)) + (princ prefix) + (princ "\"") (princ (verilog-sig-name sig)) (princ "\"") + (princ " bits=") (princ (verilog-sig-bits sig)) + (princ " cmt=") (princ (verilog-sig-comment sig)) + (princ " mem=") (princ (verilog-sig-memory sig)) + (princ " enum=") (princ (verilog-sig-enum sig)) + (princ " sign=") (princ (verilog-sig-signed sig)) + (princ " type=") (princ (verilog-sig-type sig)) + (princ " dim=") (princ (verilog-sig-multidim sig)) + (princ " modp=") (princ (verilog-sig-modport sig)) + (princ "\n"))))) ;; ;; Port/Wire/Etc Reading @@ -7701,7 +7833,7 @@ Optional NUM-PARAM and MAX-PARAM check for a specific number of parameters." (let ((olist)) (save-excursion ;; /*AUTOPUNT("parameter", "parameter")*/ - (search-backward "(") + (backward-sexp 1) (while (looking-at "(?\\s *\"\\([^\"]*\\)\"\\s *,?") (setq olist (cons (match-string 1) olist)) (goto-char (match-end 0)))) @@ -7716,10 +7848,10 @@ Optional NUM-PARAM and MAX-PARAM check for a specific number of parameters." (defun verilog-read-decls () "Compute signal declaration information for the current module at point. -Return a array of [outputs inouts inputs wire reg assign const]." +Return an array of [outputs inouts inputs wire reg assign const]." (let ((end-mod-point (or (verilog-get-end-of-defun t) (point-max))) (functask 0) (paren 0) (sig-paren 0) (v2kargs-ok t) - in-modport ign-prop + in-modport ptype ign-prop sigs-in sigs-out sigs-inout sigs-var sigs-assign sigs-const sigs-gparam sigs-intf vec expect-signal keywd newsig rvalue enum io signed typedefed multidim @@ -7731,13 +7863,13 @@ Return a array of [outputs inouts inputs wire reg assign const]." ;;(if dbg (setq dbg (concat dbg (format "Pt %s Vec %s C%c Kwd'%s'\n" (point) vec (following-char) keywd)))) (cond ((looking-at "//") - (if (looking-at "[^\n]*synopsys\\s +enum\\s +\\([a-zA-Z0-9_]+\\)") - (setq enum (match-string 1))) + (if (looking-at "[^\n]*\\(auto\\|synopsys\\)\\s +enum\\s +\\([a-zA-Z0-9_]+\\)") + (setq enum (match-string 2))) (search-forward "\n")) ((looking-at "/\\*") (forward-char 2) - (if (looking-at "[^\n]*synopsys\\s +enum\\s +\\([a-zA-Z0-9_]+\\)") - (setq enum (match-string 1))) + (if (looking-at "[^\n]*\\(auto\\|synopsys\\)\\s +enum\\s +\\([a-zA-Z0-9_]+\\)") + (setq enum (match-string 2))) (or (search-forward "*/") (error "%s: Unmatched /* */, at char %d" (verilog-point-text) (point)))) ((looking-at "(\\*") @@ -7795,33 +7927,49 @@ Return a array of [outputs inouts inputs wire reg assign const]." (when (string-match "^\\\\" (match-string 1)) (setq keywd (concat keywd " ")))) ;; Escaped ID needs space at end (cond ((equal keywd "input") - (setq vec nil enum nil rvalue nil newsig nil signed nil typedefed nil multidim nil sig-paren paren - expect-signal 'sigs-in io t modport nil)) + (setq vec nil enum nil rvalue nil newsig nil signed nil + typedefed nil multidim nil ptype nil modport nil + expect-signal 'sigs-in io t sig-paren paren)) ((equal keywd "output") - (setq vec nil enum nil rvalue nil newsig nil signed nil typedefed nil multidim nil sig-paren paren - expect-signal 'sigs-out io t modport nil)) + (setq vec nil enum nil rvalue nil newsig nil signed nil + typedefed nil multidim nil ptype nil modport nil + expect-signal 'sigs-out io t sig-paren paren)) ((equal keywd "inout") - (setq vec nil enum nil rvalue nil newsig nil signed nil typedefed nil multidim nil sig-paren paren - expect-signal 'sigs-inout io t modport nil)) + (setq vec nil enum nil rvalue nil newsig nil signed nil + typedefed nil multidim nil ptype nil modport nil + expect-signal 'sigs-inout io t sig-paren paren)) ((equal keywd "parameter") - (setq vec nil enum nil rvalue nil signed nil typedefed nil multidim nil sig-paren paren - expect-signal 'sigs-gparam io t modport nil)) - ((member keywd '("wire" - "tri" "tri0" "tri1" "triand" "trior" "wand" "wor" - "reg" "trireg" + (setq vec nil enum nil rvalue nil signed nil + typedefed nil multidim nil ptype nil modport nil + expect-signal 'sigs-gparam io t sig-paren paren)) + ((member keywd '("wire" "reg" ; Fast + ;; net_type + "tri" "tri0" "tri1" "triand" "trior" "trireg" + "uwire" "wand" "wor" + ;; integer_atom_type "byte" "shortint" "int" "longint" "integer" "time" + "supply0" "supply1" + ;; integer_vector_type - "reg" above "bit" "logic" + ;; non_integer_type "shortreal" "real" "realtime" + ;; data_type "string" "event" "chandle")) - (unless io (setq vec nil enum nil rvalue nil signed nil typedefed nil multidim nil sig-paren paren - expect-signal 'sigs-var modport nil))) + (cond (io + (setq typedefed + (if typedefed (concat typedefed " " keywd) keywd))) + (t (setq vec nil enum nil rvalue nil signed nil + typedefed nil multidim nil sig-paren paren + expect-signal 'sigs-var modport nil)))) ((equal keywd "assign") - (setq vec nil enum nil rvalue nil signed nil typedefed nil multidim nil sig-paren paren - expect-signal 'sigs-assign modport nil)) - ((member keywd '("supply0" "supply1" "supply" - "localparam" "genvar")) - (unless io (setq vec nil enum nil rvalue nil signed nil typedefed nil multidim nil sig-paren paren - expect-signal 'sigs-const modport nil))) + (setq vec nil enum nil rvalue nil signed nil + typedefed nil multidim nil ptype nil modport nil + expect-signal 'sigs-assign sig-paren paren)) + ((member keywd '("localparam" "genvar")) + (unless io + (setq vec nil enum nil rvalue nil signed nil + typedefed nil multidim nil ptype nil modport nil + expect-signal 'sigs-const sig-paren paren))) ((member keywd '("signed" "unsigned")) (setq signed keywd)) ((member keywd '("assert" "assume" "cover" "expect" "restrict")) @@ -7835,11 +7983,14 @@ Return a array of [outputs inouts inputs wire reg assign const]." (setq functask (1- functask))) ((equal keywd "modport") (setq in-modport t)) + ((equal keywd "type") + (setq ptype t)) ;; Ifdef? Ignore name of define ((member keywd '("`ifdef" "`ifndef" "`elsif")) (setq rvalue t)) ;; Type? - ((verilog-typedef-name-p keywd) + ((unless ptype + (verilog-typedef-name-p keywd)) (setq typedefed keywd)) ;; Interface with optional modport in v2k arglist? ;; Skip over parsing modport, and take the interface name as the type @@ -7848,8 +7999,10 @@ Return a array of [outputs inouts inputs wire reg assign const]." (not rvalue) (looking-at "\\s-*\\(\\.\\(\\s-*[a-zA-Z`_$][a-zA-Z0-9`_$]*\\)\\|\\)\\s-*[a-zA-Z`_$][a-zA-Z0-9`_$]*")) (when (match-end 2) (goto-char (match-end 2))) - (setq vec nil enum nil rvalue nil newsig nil signed nil typedefed keywd multidim nil sig-paren paren - expect-signal 'sigs-intf io t modport (match-string 2))) + (setq vec nil enum nil rvalue nil signed nil + typedefed keywd multidim nil ptype nil modport (match-string 2) + newsig nil sig-paren paren + expect-signal 'sigs-intf io t )) ;; Ignore dotted LHS assignments: "assign foo.bar = z;" ((looking-at "\\s-*\\.") (goto-char (match-end 0)) @@ -7888,7 +8041,7 @@ Return a array of [outputs inouts inputs wire reg assign const]." (eval-when-compile ;; Prevent compile warnings; these are let's, not globals ;; Do not remove the eval-when-compile - ;; - we want a error when we are debugging this code if they are refed. + ;; - we want an error when we are debugging this code if they are refed. (defvar sigs-in) (defvar sigs-inout) (defvar sigs-out) @@ -7918,7 +8071,8 @@ Return a array of [outputs inouts inputs wire reg assign const]." (verilog-sig-memory portdata) nil (verilog-sig-signed portdata) - (verilog-sig-type portdata) + (unless (member (verilog-sig-type portdata) '("wire" "reg")) + (verilog-sig-type portdata)) multidim nil) sigs-inout))) ((or (setq portdata (assoc port (verilog-decls-get-outputs submoddecls))) @@ -7931,7 +8085,13 @@ Return a array of [outputs inouts inputs wire reg assign const]." (verilog-sig-memory portdata) nil (verilog-sig-signed portdata) - (verilog-sig-type portdata) + ;; Though ok in SV, in V2K code, propagating the + ;; "reg" in "output reg" upwards isn't legal. + ;; Also for backwards compatibility we don't propagate + ;; "input wire" upwards. + ;; See also `verilog-signals-edit-wire-reg'. + (unless (member (verilog-sig-type portdata) '("wire" "reg")) + (verilog-sig-type portdata)) multidim nil) sigs-out))) ((or (setq portdata (assoc port (verilog-decls-get-inputs submoddecls))) @@ -7944,7 +8104,8 @@ Return a array of [outputs inouts inputs wire reg assign const]." (verilog-sig-memory portdata) nil (verilog-sig-signed portdata) - (verilog-sig-type portdata) + (unless (member (verilog-sig-type portdata) '("wire" "reg")) + (verilog-sig-type portdata)) multidim nil) sigs-in))) ((setq portdata (assoc port (verilog-decls-get-interfaces submoddecls))) @@ -8110,9 +8271,9 @@ Inserts the list of signals found." (defun verilog-read-sub-decls () "Internally parse signals going to modules under this module. -Return a array of [ outputs inouts inputs ] signals for modules that are +Return an array of [ outputs inouts inputs ] signals for modules that are instantiated in this module. For example if declare A A (.B(SIG)) and SIG -is a output, then SIG will be included in the list. +is an output, then SIG will be included in the list. This only works on instantiations created with /*AUTOINST*/ converted by \\[verilog-auto-inst]. Otherwise, it would have to read in the whole @@ -8245,7 +8406,7 @@ For example if declare A A (.B(SIG)) then B will be included in the list." (setq verilog-cache-has-lisp (re-search-forward "\\" end-pt t) + (goto-char (point-min))) + (while (verilog-re-search-forward-quick + "`\\(define\\|undef\\)\\s-*\\([a-zA-Z_][a-zA-Z_0-9]*\\)" end-pt t) + (cond ((equal (match-string-no-properties 1) "define") + (setq def (match-string-no-properties 2)) + (when (and (or (not regexp) + (string-match regexp def)) + (not (member def defs))) ;; delete-dups not in 21.1 + (setq defs (cons def defs)))) + (t + (setq defs (delete (match-string-no-properties 2) defs)))))) + ;; Insert + (setq defs (sort defs 'string<)) + (when defs + (forward-line 1) + (verilog-insert-indent "// Beginning of automatic undefs\n") + (while defs + (verilog-insert-indent "`undef " (car defs) "\n") + (setq defs (cdr defs))) + (verilog-insert-indent "// End of automatics\n"))))) + (defun verilog-auto-unused () "Expand AUTOUNUSED statements, as part of \\[verilog-auto]. Replace the /*AUTOUNUSED*/ comment with a comma separated list of all unused @@ -11981,17 +12256,17 @@ Remove user provided prefix ELIM-REGEXP." (defun verilog-auto-ascii-enum () "Expand AUTOASCIIENUM statements, as part of \\[verilog-auto]. -Create a register to contain the ASCII decode of a enumerated signal type. +Create a register to contain the ASCII decode of an enumerated signal type. This will allow trace viewers to show the ASCII name of states. -First, parameters are built into a enumeration using the synopsys enum +First, parameters are built into an enumeration using the synopsys enum comment. The comment must be between the keyword and the symbol. \(Annoying, but that's what Synopsys's dc_shell FSM reader requires.) Next, registers which that enum applies to are also tagged with the same enum. -Finally, a AUTOASCIIENUM command is used. +Finally, an AUTOASCIIENUM command is used. The first parameter is the name of the signal to be decoded. @@ -12001,17 +12276,19 @@ Finally, a AUTOASCIIENUM command is used. tell viewers like Dinotrace to display in ASCII format. The third optional parameter is a string which will be removed - from the state names. It defaults to "" which removes nothing. + from the state names. It defaults to \"\" which removes nothing. The fourth optional parameter is \"onehot\" to force one-hot - decoding. If unspecified, if and only if the first parameter + decoding. If unspecified, if and only if the first parameter width is 2^(number of states in enum) and does NOT match the - width of the enum, the signal is assumed to be a one hot + width of the enum, the signal is assumed to be a one-hot decode. Otherwise, it's a normal encoded state vector. `verilog-auto-wire-type' may be used to change the datatype of the declarations. + \"auto enum\" may be used in place of \"synopsys enum\". + An example: //== State enumeration @@ -12066,7 +12343,7 @@ Typing \\[verilog-auto] will make this into: (undecode-sig (or (assoc undecode-name sig-list-all) (error "%s: Signal %s not found in design" (verilog-point-text) undecode-name))) (undecode-enum (or (verilog-sig-enum undecode-sig) - (error "%s: Signal %s does not have a enum tag" (verilog-point-text) undecode-name))) + (error "%s: Signal %s does not have an enum tag" (verilog-point-text) undecode-name))) ;; (enum-sigs (verilog-signals-not-in (or (verilog-signals-matching-enum sig-list-consts undecode-enum) @@ -12159,12 +12436,39 @@ being different from the final output's line numbering." (string-to-number (match-string 2))))) t t)))) +(defun verilog-auto-template-lint () + "Check AUTO_TEMPLATEs for unused lines. +Enable with `verilog-auto-template-warn-unused'." + (let ((name1 (or (buffer-file-name) (buffer-name)))) + (save-excursion + (goto-char (point-min)) + (while (re-search-forward + "^\\s-*/?\\*?\\s-*[a-zA-Z0-9`_$]+\\s-+AUTO_TEMPLATE" nil t) + (let* ((tpl-info (verilog-read-auto-template-middle)) + (tpl-list (aref tpl-info 1)) + (tlines (append (nth 0 tpl-list) (nth 1 tpl-list))) + tpl-ass) + (while tlines + (setq tpl-ass (car tlines) + tlines (cdr tlines)) + ;;; + (unless (or (not (eval-when-compile (fboundp 'make-hash-table))) ;; Not supported, no warning + (not verilog-auto-template-hits) + (gethash (vector (nth 2 tpl-ass) (nth 3 tpl-ass)) + verilog-auto-template-hits)) + (verilog-warn-error "%s:%d: AUTO_TEMPLATE line unused: \".%s (%s)\"" + name1 + (+ (elt tpl-ass 3) ;; Template line number + (count-lines (point-min) (point))) + (elt tpl-ass 0) (elt tpl-ass 1)) + ))))))) + ;; ;; Auto top level ;; -(defun verilog-auto (&optional inject) ; Use verilog-inject-auto instead of passing a arg +(defun verilog-auto (&optional inject) ; Use verilog-inject-auto instead of passing an arg "Expand AUTO statements. Look for any /*AUTO...*/ commands in the code, as used in instantiations or argument headers. Update the list of signals @@ -12219,6 +12523,7 @@ Using \\[describe-function], see also: `verilog-auto-reset' for AUTORESET flop resets `verilog-auto-sense' for AUTOSENSE always sensitivity lists `verilog-auto-tieoff' for AUTOTIEOFF output tieoffs + `verilog-auto-undef' for AUTOUNDEF `undef of local `defines `verilog-auto-unused' for AUTOUNUSED unused inputs/inouts `verilog-auto-wire' for AUTOWIRE instantiation wires @@ -12232,21 +12537,15 @@ Wilson Snyder (wsnyder@wsnyder.org)." (unless noninteractive (message "Updating AUTOs...")) (if (fboundp 'dinotrace-unannotate-all) (dinotrace-unannotate-all)) - (let ((oldbuf (if (not (buffer-modified-p)) - (buffer-string))) - ;; Before version 20, match-string with font-lock returns a - ;; vector that is not equal to the string. IE if on "input" - ;; nil==(equal "input" (progn (looking-at "input") (match-string 0))) - (fontlocked (when (and (boundp 'font-lock-mode) - font-lock-mode) - (font-lock-mode 0) - t)) - ;; Cache directories; we don't write new files, so can't change - (verilog-dir-cache-preserving t) - ;; Cache current module - (verilog-modi-cache-current-enable t) - (verilog-modi-cache-current-max (point-min)) ; IE it's invalid - verilog-modi-cache-current) + (verilog-save-font-mods + (let ((oldbuf (if (not (buffer-modified-p)) + (buffer-string))) + ;; Cache directories; we don't write new files, so can't change + (verilog-dir-cache-preserving t) + ;; Cache current module + (verilog-modi-cache-current-enable t) + (verilog-modi-cache-current-max (point-min)) ; IE it's invalid + verilog-modi-cache-current) (unwind-protect ;; Disable change hooks for speed ;; This let can't be part of above let; must restore @@ -12257,6 +12556,8 @@ Wilson Snyder (wsnyder@wsnyder.org)." ;; Wipe cache; otherwise if we AUTOed a block above this one, ;; we'll misremember we have generated IOs, confusing AUTOOUTPUT (setq verilog-modi-cache-list nil) + ;; Local state + (setq verilog-auto-template-hits nil) ;; If we're not in verilog-mode, change syntax table so parsing works right (unless (eq major-mode `verilog-mode) (verilog-mode)) ;; Allow user to customize @@ -12272,6 +12573,8 @@ Wilson Snyder (wsnyder@wsnyder.org)." (when verilog-auto-read-includes (verilog-read-includes) (verilog-read-defines nil nil t)) + ;; Setup variables due to SystemVerilog expansion + (verilog-auto-re-search-do "/\\*AUTOLOGIC\\*/" 'verilog-auto-logic-setup) ;; This particular ordering is important ;; INST: Lower modules correct, no internal dependencies, FIRST (verilog-preserve-modi-cache @@ -12284,7 +12587,7 @@ Wilson Snyder (wsnyder@wsnyder.org)." (verilog-inject-arg)) ;; ;; Do user inserts first, so their code can insert AUTOs - ;; We may provide a AUTOINSERTLISPLAST if another cleanup pass is needed + ;; We may provide an AUTOINSERTLISPLAST if another cleanup pass is needed (verilog-auto-re-search-do "/\\*AUTOINSERTLISP(.*?)\\*/" 'verilog-auto-insert-lisp) ;; Expand instances before need the signals the instances input/output @@ -12313,6 +12616,8 @@ Wilson Snyder (wsnyder@wsnyder.org)." (verilog-auto-re-search-do "/\\*AUTOINOUT\\*/" 'verilog-auto-inout) ;; Then tie off those in/outs (verilog-auto-re-search-do "/\\*AUTOTIEOFF\\*/" 'verilog-auto-tieoff) + ;; These can be anywhere after AUTOINSERTLISP + (verilog-auto-re-search-do "/\\*AUTOUNDEF\\((\"[^\"]*\")\\)?\\*/" 'verilog-auto-undef) ;; Wires/regs must be after inputs/outputs (verilog-auto-re-search-do "/\\*AUTOLOGIC\\*/" 'verilog-auto-logic) (verilog-auto-re-search-do "/\\*AUTOWIRE\\*/" 'verilog-auto-wire) @@ -12326,7 +12631,9 @@ Wilson Snyder (wsnyder@wsnyder.org)." (verilog-auto-re-search-do "/\\*AUTOARG\\*/" 'verilog-auto-arg) ;; Fix line numbers (comments only) (when verilog-auto-inst-template-numbers - (verilog-auto-templated-rel)))) + (verilog-auto-templated-rel)) + (when verilog-auto-template-warn-unused + (verilog-auto-template-lint)))) ;; (verilog-run-hooks 'verilog-auto-hook) ;; @@ -12343,9 +12650,8 @@ Wilson Snyder (wsnyder@wsnyder.org)." ;; End of after-change protection ))) ;; Unwind forms - (progn - ;; Restore font-lock - (when fontlocked (font-lock-mode t)))))) + ;; Currently handled in verilog-save-font-mods + )))) ;; @@ -12650,7 +12956,7 @@ and the case items." (define-skeleton verilog-sk-def-reg "Insert a reg definition." () - > "reg [" '(verilog-sk-prompt-width) | -1 verilog-sk-signal ";" \n (verilog-pretty-declarations) ) + > "reg [" '(verilog-sk-prompt-width) | -1 verilog-sk-signal ";" \n (verilog-pretty-declarations-auto) ) (defun verilog-sk-define-signal () "Insert a definition of signal under point at top of module." @@ -12914,9 +13220,12 @@ Files are checked based on `verilog-library-flags'." (concat "verilog-mode v" verilog-mode-version) '( verilog-active-low-regexp + verilog-after-save-font-hook verilog-align-ifelse verilog-assignment-delay verilog-auto-arg-sort + verilog-auto-declare-nettype + verilog-auto-delete-trailing-whitespace verilog-auto-endcomments verilog-auto-hook verilog-auto-ignore-concat @@ -12925,23 +13234,32 @@ Files are checked based on `verilog-library-flags'." verilog-auto-input-ignore-regexp verilog-auto-inst-column verilog-auto-inst-dot-name + verilog-auto-inst-interfaced-ports verilog-auto-inst-param-value + verilog-auto-inst-sort verilog-auto-inst-template-numbers verilog-auto-inst-vector verilog-auto-lineup verilog-auto-newline verilog-auto-output-ignore-regexp verilog-auto-read-includes + verilog-auto-reset-blocking-in-non verilog-auto-reset-widths verilog-auto-save-policy verilog-auto-sense-defines-constant verilog-auto-sense-include-inputs verilog-auto-star-expand verilog-auto-star-save + verilog-auto-template-warn-unused + verilog-auto-tieoff-declaration + verilog-auto-tieoff-ignore-regexp verilog-auto-unused-ignore-regexp + verilog-auto-wire-type verilog-before-auto-hook verilog-before-delete-auto-hook verilog-before-getopt-flags-hook + verilog-before-save-font-hook + verilog-cache-enabled verilog-case-indent verilog-cexp-indent verilog-compiler @@ -12949,6 +13267,8 @@ Files are checked based on `verilog-library-flags'." verilog-delete-auto-hook verilog-getopt-flags-hook verilog-highlight-grouping-keywords + verilog-highlight-includes + verilog-highlight-modules verilog-highlight-p1800-keywords verilog-highlight-translate-off verilog-indent-begin-after-if @@ -12966,11 +13286,15 @@ Files are checked based on `verilog-library-flags'." verilog-linter verilog-minimum-comment-distance verilog-mode-hook + verilog-mode-release-date + verilog-mode-release-emacs + verilog-mode-version verilog-preprocessor verilog-simulator verilog-tab-always-indent verilog-tab-to-comment verilog-typedef-regexp + verilog-warn-fatal ) nil nil (concat "Hi Mac, From f7ae6719123ad5f4f505290621810318d9ee5484 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 3 May 2012 15:54:07 -0400 Subject: [PATCH 323/564] * minibuffer.el (completion--twq-all): Beware completion-ignore-case. --- lisp/ChangeLog | 4 ++++ lisp/minibuffer.el | 9 ++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 96273f72ece..b75a6606779 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-05-03 Stefan Monnier + + * minibuffer.el (completion--twq-all): Beware completion-ignore-case. + 2012-05-03 Wilson Snyder * progmodes/verilog-mode.el (font-lock-keywords): diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index 1d459b0db62..f468db9768a 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -546,16 +546,19 @@ for use at QPOS." ;; which only get quoted when needed by choose-completion. (nconc (mapcar (lambda (completion) - (assert (string-prefix-p prefix completion)) + (assert (string-prefix-p prefix completion 'ignore-case) t) (let* ((new (substring completion (length prefix))) (qnew (funcall qfun new)) (qcompletion (concat qprefix qnew))) (assert - (equal (funcall unquote + (eq t (compare-strings + (funcall unquote (concat (substring string 0 qboundary) qcompletion)) + nil nil (concat (substring ustring 0 boundary) - completion))) + completion) + nil nil 'ignore-case))) qcompletion)) completions) qboundary)))) From ab0fa4e4ba0b2b93a9ef007842523d8d5f9eb758 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Thu, 3 May 2012 13:04:29 -0700 Subject: [PATCH 324/564] Do not limit current-time-string to years 1000..9999. * src/editfns.c (TM_YEAR_IN_ASCTIME_RANGE): Remove. (Fcurrent_time_string): Support any year that is supported by the underlying localtime representation. Don't use asctime, as it has undefined behavior for years outside the range -999..9999. * doc/lispref/os.texi (Time of Day): Do not limit current-time-string to years 1000..9999. * etc/NEWS: Do not limit current-time-string to years 1000..9999. --- doc/lispref/ChangeLog | 5 +++++ doc/lispref/os.texi | 13 ++++++++----- etc/ChangeLog | 4 ++++ etc/NEWS | 6 ++++++ src/ChangeLog | 8 ++++++++ src/editfns.c | 39 ++++++++++++++++++++------------------- 6 files changed, 51 insertions(+), 24 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index c3eadfc8558..3be41afe975 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,8 @@ +2012-05-03 Paul Eggert + + * os.texi (Time of Day): Do not limit current-time-string + to years 1000..9999. + 2012-05-02 Chong Yidong * display.texi (Font Lookup): diff --git a/doc/lispref/os.texi b/doc/lispref/os.texi index d825a3f18c4..0fdb3e20694 100644 --- a/doc/lispref/os.texi +++ b/doc/lispref/os.texi @@ -1196,11 +1196,14 @@ sections. @defun current-time-string &optional time-value This function returns the current time and date as a human-readable -string. The format of the string is unvarying; the number of -characters used for each part is always the same, so you can reliably -use @code{substring} to extract pieces of it. You should count +string. The format does not vary for the initial part of the string, +which contains the day of week, month, day of month, and time of day +in that order: the number of characters used for these fields is +always the same, so you can reliably +use @code{substring} to extract them. You should count characters from the beginning of the string rather than from the end, -as additional information may some day be added at the end. +as the year might not have exactly four digits, and additional +information may some day be added at the end. The argument @var{time-value}, if given, specifies a time to format (represented as a list of integers), instead of the current time. @@ -2301,7 +2304,7 @@ the notification never expires. Default value is -1. @item :urgency @var{urgency} The urgency level. It can be @code{low}, @code{normal}, or @code{critical}. -@item :action-items +@item :action-items When this keyword is given, the @var{title} string of the actions is interpreted as icon name. diff --git a/etc/ChangeLog b/etc/ChangeLog index f34e5d6d688..2a6cd719220 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,3 +1,7 @@ +2012-05-03 Paul Eggert + + * NEWS: Do not limit current-time-string to years 1000..9999. + 2012-04-27 Jambunathan K * org/OrgOdtStyles.xml (OrgDescriptionList): Modify style. With diff --git a/etc/NEWS b/etc/NEWS index cd15273c3db..a9e4a7832ed 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -197,6 +197,12 @@ in the presence of quoting, such as file completion in shell buffers. *** New function `completion-table-subvert' to use an existing completion table, but with a different prefix. + +** Time + +*** `current-time-string' no longer requires that its argument's year +must be in the range 1000..9999. It now works with any year supported +by the underlying C implementation. * Changes in Emacs 24.2 on non-free operating systems diff --git a/src/ChangeLog b/src/ChangeLog index bf297616e82..2c2902e937a 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2012-05-03 Paul Eggert + + Do not limit current-time-string to years 1000..9999. + * editfns.c (TM_YEAR_IN_ASCTIME_RANGE): Remove. + (Fcurrent_time_string): Support any year that is supported by the + underlying localtime representation. Don't use asctime, as it + has undefined behavior for years outside the range -999..9999. + 2012-05-02 Paul Eggert Fix race conditions involving setenv, gmtime, localtime, asctime. diff --git a/src/editfns.c b/src/editfns.c index b52bc0c2a99..d266ca9951d 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -73,13 +73,6 @@ extern char **environ; #define TM_YEAR_BASE 1900 -/* Nonzero if TM_YEAR is a struct tm's tm_year value that causes - asctime to have well-defined behavior. */ -#ifndef TM_YEAR_IN_ASCTIME_RANGE -# define TM_YEAR_IN_ASCTIME_RANGE(tm_year) \ - (1000 - TM_YEAR_BASE <= (tm_year) && (tm_year) <= 9999 - TM_YEAR_BASE) -#endif - #ifdef WINDOWSNT extern Lisp_Object w32_get_internal_run_time (void); #endif @@ -1943,29 +1936,37 @@ but this is considered obsolete. */) { time_t value; struct tm *tm; - char *tem = NULL; - char buf[sizeof "Mon Apr 30 12:49:17 2012" - 1]; + char buf[sizeof "Mon Apr 30 12:49:17 " + INT_STRLEN_BOUND (int) + 1]; + int len IF_LINT (= 0); if (! lisp_time_argument (specified_time, &value, NULL)) error ("Invalid time specification"); - /* Convert to a string, checking for out-of-range time stamps. - Omit the trailing newline. - Don't use 'ctime', as that might dump core if VALUE is out of - range. */ + /* Convert to a string in ctime format, except without the trailing + newline, and without the 4-digit year limit. Don't use asctime + or ctime, as they might dump core if the year is outside the + range -999 .. 9999. */ BLOCK_INPUT; tm = localtime (&value); - if (tm && TM_YEAR_IN_ASCTIME_RANGE (tm->tm_year)) + if (tm) { - tem = asctime (tm); - if (tem) - memcpy (buf, tem, sizeof buf); + static char const wday_name[][4] = + { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; + static char const mon_name[][4] = + { "Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; + printmax_t year_base = TM_YEAR_BASE; + + len = sprintf (buf, "%s %s%3d %02d:%02d:%02d %"pMd, + wday_name[tm->tm_wday], mon_name[tm->tm_mon], tm->tm_mday, + tm->tm_hour, tm->tm_min, tm->tm_sec, + tm->tm_year + year_base); } UNBLOCK_INPUT; - if (! tem) + if (! tm) time_overflow (); - return make_unibyte_string (buf, sizeof buf); + return make_unibyte_string (buf, len); } /* Yield A - B, measured in seconds. From 78f3273aab4817ead42af0db41e703dc7e90260b Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Fri, 4 May 2012 13:14:14 +0800 Subject: [PATCH 325/564] Convert more defvars to defcustoms. * dos-w32.el (file-name-buffer-file-type-alist) (direct-print-region-use-command-dot-com): * ffap.el (ffap-menu-regexp): * follow.el (follow-debug): * forms.el (forms--debug): * iswitchb.el (iswitchb-all-frames): * ido.el (ido-all-frames): * mail/feedmail.el (feedmail-mail-send-hook) (feedmail-mail-send-hook-queued): * mail/footnote.el (footnote-signature-separator): * mail/mailabbrev.el (mail-alias-separator-string) (mail-abbrev-mode-regexp): * mail/rmail.el (rmail-speedbar-match-folder-regexp): * progmodes/idlwave.el (idlwave-libinfo-file) (idlwave-default-completion-case-is-down) (idlwave-library-routines): Convert defvars to defcustoms. * mail/rmail.el (rmail-decode-mime-charset): * progmodes/idlw-shell.el (idlwave-shell-print-expression-function) (idlwave-shell-fix-inserted-breaks) (idlwave-shell-activate-alt-keybindings) (idlwave-shell-use-breakpoint-glyph): * facemenu.el (facemenu-unlisted-faces): Delete obsolete vars. * doc/lispref/os.texi (Timers): Use defopt for timer-max-repeats. --- doc/lispref/ChangeLog | 4 ++++ doc/lispref/os.texi | 4 ++-- etc/NEWS | 5 +++++ lisp/ChangeLog | 28 ++++++++++++++++++++++++++++ lisp/dos-w32.el | 17 +++++++++++------ lisp/emacs-lisp/timer.el | 6 ++++-- lisp/facemenu.el | 9 --------- lisp/ffap.el | 8 +++++--- lisp/find-file.el | 16 ++++++++-------- lisp/follow.el | 7 ++++--- lisp/forms.el | 6 ++++-- lisp/ido.el | 11 ++++++++--- lisp/iswitchb.el | 9 +++++++-- lisp/mail/feedmail.el | 30 ++++++++++++------------------ lisp/mail/footnote.el | 10 ++++++---- lisp/mail/mailabbrev.el | 16 ++++++++++------ lisp/mail/rmail.el | 24 +++++++----------------- lisp/progmodes/idlw-shell.el | 15 --------------- lisp/progmodes/idlwave.el | 9 --------- 19 files changed, 125 insertions(+), 109 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 3be41afe975..8c6165c826f 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,7 @@ +2012-05-04 Chong Yidong + + * os.texi (Timers): Use defopt for timer-max-repeats. + 2012-05-03 Paul Eggert * os.texi (Time of Day): Do not limit current-time-string diff --git a/doc/lispref/os.texi b/doc/lispref/os.texi index 0fdb3e20694..ac6711f4827 100644 --- a/doc/lispref/os.texi +++ b/doc/lispref/os.texi @@ -1735,11 +1735,11 @@ between them). If you want a timer to run again no less than @var{n} seconds after the last invocation, don't use the @var{repeat} argument. Instead, the timer function should explicitly reschedule the timer. -@defvar timer-max-repeats +@defopt timer-max-repeats This variable's value specifies the maximum number of times to repeat calling a timer function in a row, when many previously scheduled calls were unavoidably delayed. -@end defvar +@end defopt @defmac with-timeout (seconds timeout-forms@dots{}) body@dots{} Execute @var{body}, but give up after @var{seconds} seconds. If diff --git a/etc/NEWS b/etc/NEWS index a9e4a7832ed..8764030c736 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -187,6 +187,11 @@ third argument is a frame (that usage was obsolete since Emacs 22.2). but keywords or keyword-string pairs. The old argument list will still be supported for Emacs 24.x. +** The following obsolete variables and varaliases have been removed: + +*** `facemenu-unlisted-faces' +*** `rmail-decode-mime-charset' + * Lisp changes in Emacs 24.2 diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b75a6606779..d57d93a7060 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,31 @@ +2012-05-04 Chong Yidong + + * dos-w32.el (file-name-buffer-file-type-alist) + (direct-print-region-use-command-dot-com): + * ffap.el (ffap-menu-regexp): + * find-file.el (ff-special-constructs): + * follow.el (follow-debug): + * forms.el (forms--debug): + * iswitchb.el (iswitchb-all-frames): + * ido.el (ido-all-frames): + * emacs-lisp/timer.el (timer-max-repeats): + * mail/feedmail.el (feedmail-mail-send-hook) + (feedmail-mail-send-hook-queued): + * mail/footnote.el (footnote-signature-separator): + * mail/mailabbrev.el (mail-alias-separator-string) + (mail-abbrev-mode-regexp): + * mail/rmail.el (rmail-speedbar-match-folder-regexp): + * progmodes/idlwave.el (idlwave-libinfo-file) + (idlwave-default-completion-case-is-down) + (idlwave-library-routines): Convert defvars to defcustoms. + + * mail/rmail.el (rmail-decode-mime-charset): + * progmodes/idlw-shell.el (idlwave-shell-print-expression-function) + (idlwave-shell-fix-inserted-breaks) + (idlwave-shell-activate-alt-keybindings) + (idlwave-shell-use-breakpoint-glyph): + * facemenu.el (facemenu-unlisted-faces): Delete obsolete vars. + 2012-05-03 Stefan Monnier * minibuffer.el (completion--twq-all): Beware completion-ignore-case. diff --git a/lisp/dos-w32.el b/lisp/dos-w32.el index 071c7b71263..f68af7a73be 100644 --- a/lisp/dos-w32.el +++ b/lisp/dos-w32.el @@ -38,9 +38,8 @@ (setq null-device "NUL") ;; For distinguishing file types based upon suffixes. -(defvar file-name-buffer-file-type-alist - '( - ("[:/].*config.sys$" . nil) ; config.sys text +(defcustom file-name-buffer-file-type-alist + '(("[:/].*config.sys$" . nil) ; config.sys text ("\\.\\(obj\\|exe\\|com\\|lib\\|sys\\|bin\\|ico\\|pif\\|class\\)$" . t) ; MS-Dos stuff ("\\.\\(dll\\|drv\\|386\\|vxd\\|fon\\|fnt\\|fot\\|ttf\\|grp\\)$" . t) @@ -57,7 +56,10 @@ ) "Alist for distinguishing text files from binary files. Each element has the form (REGEXP . TYPE), where REGEXP is matched -against the file name, and TYPE is nil for text, t for binary.") +against the file name, and TYPE is nil for text, t for binary." + :type '(repeat (cons regexp boolean)) + :group 'dos-fns + :group 'w32) ;; Return the pair matching filename on file-name-buffer-file-type-alist, ;; or nil otherwise. @@ -282,8 +284,11 @@ filesystem mounted on drive Z:, FILESYSTEM could be \"Z:\"." ;;; Support for printing under DOS/Windows, see lpr.el and ps-print.el. -(defvar direct-print-region-use-command-dot-com t - "Control whether command.com is used to print on Windows 9x.") +(defcustom direct-print-region-use-command-dot-com t + "If non-nil, use command.com to print on Windows 9x." + :type 'boolean + :group 'dos-fns + :group 'w32) ;; Function to actually send data to the printer port. ;; Supports writing directly, and using various programs. diff --git a/lisp/emacs-lisp/timer.el b/lisp/emacs-lisp/timer.el index 87b6cceb24b..11ec0f0614c 100644 --- a/lisp/emacs-lisp/timer.el +++ b/lisp/emacs-lisp/timer.el @@ -240,12 +240,14 @@ and idle timers such as are scheduled by `run-with-idle-timer'." (defvar timer-event-last-2 nil "Third-to-last timer that was run.") -(defvar timer-max-repeats 10 +(defcustom timer-max-repeats 10 "Maximum number of times to repeat a timer, if many repeats are delayed. Timer invocations can be delayed because Emacs is suspended or busy, or because the system's time changes. If such an occurrence makes it appear that many invocations are overdue, this variable controls -how many will really happen.") +how many will really happen." + :type 'integer + :group 'internal) (defun timer-until (timer time) "Calculate number of seconds from when TIMER will run, until TIME. diff --git a/lisp/facemenu.el b/lisp/facemenu.el index e76b61fdacb..bcef25eb893 100644 --- a/lisp/facemenu.el +++ b/lisp/facemenu.el @@ -127,15 +127,6 @@ just before \"Other\" at the end." :type 'boolean :group 'facemenu) -(defvar facemenu-unlisted-faces - `(modeline region secondary-selection highlight scratch-face - ,(purecopy "^font-lock-") ,(purecopy "^gnus-") ,(purecopy "^message-") - ,(purecopy "^ediff-") ,(purecopy "^term-") ,(purecopy "^vc-") - ,(purecopy "^widget-") ,(purecopy "^custom-") ,(purecopy "^vm-")) - "List of faces that are of no interest to the user.") -(make-obsolete-variable 'facemenu-unlisted-faces 'facemenu-listed-faces - "22.1,\n and has no effect on the Face menu") - (defcustom facemenu-listed-faces nil "List of faces to include in the Face menu. Each element should be a symbol, the name of a face. diff --git a/lisp/ffap.el b/lisp/ffap.el index 7ab6a75406d..905d7873dc2 100644 --- a/lisp/ffap.el +++ b/lisp/ffap.el @@ -1457,10 +1457,12 @@ and the functions `ffap-file-at-point' and `ffap-url-at-point'." ;;; Menu support (`ffap-menu'): -(defvar ffap-menu-regexp nil - "If non-nil, overrides `ffap-next-regexp' during `ffap-menu'. +(defcustom ffap-menu-regexp nil + "If non-nil, regexp overriding `ffap-next-regexp' in `ffap-menu'. Make this more restrictive for faster menu building. -For example, try \":/\" for URL (and some ftp) references.") +For example, try \":/\" for URL (and some ftp) references." + :type '(choice (const nil) regexp) + :group 'ffap) (defvar ffap-menu-alist nil "Buffer local cache of menu presented by `ffap-menu'.") diff --git a/lisp/find-file.el b/lisp/find-file.el index fe1ab96add9..1deafc9734c 100644 --- a/lisp/find-file.el +++ b/lisp/find-file.el @@ -181,21 +181,21 @@ To override this, give an argument to `ff-find-other-file'." :group 'ff) ;;;###autoload -(defvar ff-special-constructs - `( - ;; C/C++ include, for NeXTstep too - (,(purecopy "^\#\\s *\\(include\\|import\\)\\s +[<\"]\\(.*\\)[>\"]") . +(defcustom ff-special-constructs + ;; C/C++ include, for NeXTstep too + `((,(purecopy "^\#\\s *\\(include\\|import\\)\\s +[<\"]\\(.*\\)[>\"]") . (lambda () - (buffer-substring (match-beginning 2) (match-end 2)))) - ) + (buffer-substring (match-beginning 2) (match-end 2))))) ;; We include `ff-treat-as-special' documentation here so that autoload ;; can make it available to be read prior to loading this file. - "List of special constructs for `ff-treat-as-special' to recognize. + "List of special constructs recognized by `ff-treat-as-special'. Each element, tried in order, has the form (REGEXP . EXTRACT). If REGEXP matches the current line (from the beginning of the line), `ff-treat-as-special' calls function EXTRACT with no args. If EXTRACT returns nil, keep trying. Otherwise, return the -filename that EXTRACT returned.") +filename that EXTRACT returned." + :type '(repeat (cons regexp function)) + :group 'ff) (defvaralias 'ff-related-file-alist 'ff-other-file-alist) (defcustom ff-other-file-alist 'cc-other-file-alist diff --git a/lisp/follow.el b/lisp/follow.el index 4c76b43da2d..0dea1917f85 100644 --- a/lisp/follow.el +++ b/lisp/follow.el @@ -321,9 +321,10 @@ The commands in this list are checked at load time. To mark other commands as suitable for caching, set the symbol property `follow-mode-use-cache' to non-nil.") -(defvar follow-debug nil - "Non-nil when debugging Follow mode.") - +(defcustom follow-debug nil + "If non-nil, emit Follow mode debugging messages." + :type 'boolean + :group 'follow) ;; Internal variables: diff --git a/lisp/forms.el b/lisp/forms.el index 38670e42bdd..69433de0e14 100644 --- a/lisp/forms.el +++ b/lisp/forms.el @@ -2030,8 +2030,10 @@ Usage: (setq forms-number-of-fields ;;; Debugging -(defvar forms--debug nil - "Enables forms-mode debugging if not nil.") +(defcustom forms--debug nil + "If non-nil, enable Forms mode debugging." + :type 'boolean + :group 'forms) (defun forms--debug (&rest args) "Internal debugging routine." diff --git a/lisp/ido.el b/lisp/ido.el index bbf3fe2a1d0..f3deba7ae8b 100644 --- a/lisp/ido.el +++ b/lisp/ido.el @@ -893,9 +893,14 @@ Otherwise, only the current list of matches is shown." :type 'boolean :group 'ido) -(defvar ido-all-frames 'visible - "Argument to pass to `walk-windows' when finding visible files. -See documentation of `walk-windows' for useful values.") +(defcustom ido-all-frames 'visible + "Argument to pass to `walk-windows' when Ido is finding buffers. +See documentation of `walk-windows' for useful values." + :type '(choice (const :tag "Selected frame only" nil) + (const :tag "All existing frames" t) + (const :tag "All visible frames" visible) + (const :tag "All frames on this terminal" 0)) + :group 'ido) (defcustom ido-minibuffer-setup-hook nil "Ido-specific customization of minibuffer setup. diff --git a/lisp/iswitchb.el b/lisp/iswitchb.el index 9600bd1db2d..a31828514bd 100644 --- a/lisp/iswitchb.el +++ b/lisp/iswitchb.el @@ -373,8 +373,13 @@ See also `iswitchb-newbuffer'." :group 'iswitchb) (defvar iswitchb-all-frames 'visible - "Argument to pass to `walk-windows' when finding visible buffers. -See documentation of `walk-windows' for useful values.") + "Argument to pass to `walk-windows' when iswitchb is finding buffers. +See documentation of `walk-windows' for useful values." + :type '(choice (const :tag "Selected frame only" nil) + (const :tag "All existing frames" t) + (const :tag "All visible frames" visible) + (const :tag "All frames on this terminal" 0)) + :group 'iswitchb) (defcustom iswitchb-minibuffer-setup-hook nil "Iswitchb-specific customization of minibuffer setup. diff --git a/lisp/mail/feedmail.el b/lisp/mail/feedmail.el index f35560841e2..df18abbc532 100644 --- a/lisp/mail/feedmail.el +++ b/lisp/mail/feedmail.el @@ -1366,17 +1366,19 @@ call to `feedmail-run-the-queue'." (feedmail-say-debug ">in-> feedmail-mail-send-hook-splitter %s" feedmail-queue-runner-is-active) (if feedmail-queue-runner-is-active (run-hooks 'feedmail-mail-send-hook-queued) - (run-hooks 'feedmail-mail-send-hook)) - ) + (run-hooks 'feedmail-mail-send-hook))) +(defcustom feedmail-mail-send-hook nil + "Hook run by `feedmail-mail-send-hook-splitter' for immediate mail. +See documentation of `feedmail-mail-send-hook-splitter' for details." + :type 'hook + :group 'feedmail) -(defvar feedmail-mail-send-hook nil - "See documentation for `feedmail-mail-send-hook-splitter'.") - - -(defvar feedmail-mail-send-hook-queued nil - "See documentation for `feedmail-mail-send-hook-splitter'.") - +(defcustom feedmail-mail-send-hook-queued nil + "Hook run by `feedmail-mail-send-hook-splitter' for queued mail. +See documentation of `feedmail-mail-send-hook-splitter' for details." + :type 'hook + :group 'feedmail) (defun feedmail-confirm-addresses-hook-example () "An example of a `feedmail-last-chance-hook'. @@ -1387,9 +1389,7 @@ It shows the simple addresses and gets a confirmation. Use as: (erase-buffer) (insert (mapconcat 'identity feedmail-address-list " ")) (if (not (y-or-n-p "How do you like them apples? ")) - (error "FQM: Sending...gave up in last chance hook") - ))) - + (error "FQM: Sending...gave up in last chance hook")))) (defcustom feedmail-last-chance-hook nil "User's last opportunity to modify the message on its way out. @@ -2027,12 +2027,6 @@ backup file names and the like)." (if (looking-at ".*\r\n.*\r\n") (while (search-forward "\r\n" nil t) (replace-match "\n" nil t))) -;; ;; work around text-vs-binary weirdness -;; ;; if we don't find the normal M-H-S, try reading the file a different way -;; (if (not (feedmail-find-eoh t)) -;; (let ((file-name-buffer-file-type-alist nil) (default-buffer-file-type nil)) -;; (erase-buffer) -;; (insert-file-contents maybe-file))) (funcall feedmail-queue-runner-mode-setter arg) (condition-case signal-stuff ; don't give up the loop if user skips some (let ((feedmail-enable-queue nil) diff --git a/lisp/mail/footnote.el b/lisp/mail/footnote.el index c0a63ef197c..f0c6b21513e 100644 --- a/lisp/mail/footnote.el +++ b/lisp/mail/footnote.el @@ -126,10 +126,12 @@ has no effect on buffers already displaying footnotes." :type 'string :group 'footnote) -(defvar footnote-signature-separator (if (boundp 'message-signature-separator) - message-signature-separator - "^-- $") - "String used to recognize .signatures.") +(defcustom footnote-signature-separator (if (boundp 'message-signature-separator) + message-signature-separator + "^-- $") + "Regexp used by Footnote mode to recognize signatures." + :type 'regexp + :group 'footnote) ;;; Private variables diff --git a/lisp/mail/mailabbrev.el b/lisp/mail/mailabbrev.el index fb8e1502f91..290c57c1c55 100644 --- a/lisp/mail/mailabbrev.el +++ b/lisp/mail/mailabbrev.el @@ -254,10 +254,12 @@ By default this is the file specified by `mail-personal-alias-file'." mail-abbrevs) (message "Parsing %s... done" file)) -(defvar mail-alias-separator-string ", " - "A string inserted between addresses in multi-address mail aliases. +(defcustom mail-alias-separator-string ", " + "String inserted between addresses in multi-address mail aliases. This has to contain a comma, so \", \" is a reasonable value. You might -also want something like \",\\n \" to get each address on its own line.") +also want something like \",\\n \" to get each address on its own line." + :type 'string + :group 'mail-abbrev) ;; define-mail-abbrev sets this flag, which causes mail-resolve-all-aliases ;; to be called before expanding abbrevs if it's necessary. @@ -421,14 +423,16 @@ fill-column, break the line at the previous comma, and indent the next line." ;;; Syntax tables and abbrev-expansion -(defvar mail-abbrev-mode-regexp +(defcustom mail-abbrev-mode-regexp "^\\(Resent-\\)?\\(To\\|From\\|CC\\|BCC\\|Reply-to\\):" - "Regexp to select mail-headers in which mail abbrevs should be expanded. + "Regexp matching mail headers in which mail abbrevs should be expanded. This string will be handed to `looking-at' with point at the beginning of the current line; if it matches, abbrev mode will be turned on, otherwise it will be turned off. (You don't need to worry about continuation lines.) This should be set to match those mail fields in which you want abbreviations -turned on.") +turned on." + :type 'regexp + :group 'mail-abbrev) (defvar mail-abbrev-syntax-table nil "The syntax-table used for abbrev-expansion purposes. diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el index df2f8be533a..14bf9d90a16 100644 --- a/lisp/mail/rmail.el +++ b/lisp/mail/rmail.el @@ -713,19 +713,6 @@ to an appropriate value, and optionally also set `rmail-insert-mime-forwarded-message-function', and `rmail-insert-mime-resent-message-function'.") -;; FIXME this is unused since 23.1. -(defvar rmail-decode-mime-charset t - "Non-nil means a message is decoded by MIME's charset specification. -If this variable is nil, or the message has not MIME specification, -the message is decoded as normal way. - -If the variable `rmail-enable-mime' is non-nil, this variable is -ignored, and all the decoding work is done by a feature specified by -the variable `rmail-mime-feature'.") - -(make-obsolete-variable 'rmail-decode-mime-charset - "it does nothing." "23.1") - (defvar rmail-mime-charset-pattern (concat "^content-type:[ \t]*text/plain;" "\\(?:[ \t\n]*\\(?:format\\|delsp\\)=\"?[-a-z0-9]+\"?;\\)*" @@ -4231,10 +4218,13 @@ This has an effect only if a summary buffer exists." ;;; Speedbar support for RMAIL files. (eval-when-compile (require 'speedbar)) -(defvar rmail-speedbar-match-folder-regexp "^[A-Z0-9]+\\(\\.[A-Z0-9]+\\)?$" - "This regex is used to match folder names to be displayed in speedbar. -Enabling this will permit speedbar to display your folders for easy -browsing, and moving of messages.") +(defcustom rmail-speedbar-match-folder-regexp "^[A-Z0-9]+\\(\\.[A-Z0-9]+\\)?$" + "Regexp matching Rmail folder names to be displayed in Speedbar. +Enabling this permits Speedbar to display your folders for easy +browsing, and moving of messages." + :type 'regexp + :group 'rmail + :group 'speedbar) (defvar rmail-speedbar-last-user nil "The last user to be displayed in the speedbar.") diff --git a/lisp/progmodes/idlw-shell.el b/lisp/progmodes/idlw-shell.el index d843de04913..ca51eef6e8e 100644 --- a/lisp/progmodes/idlw-shell.el +++ b/lisp/progmodes/idlw-shell.el @@ -183,12 +183,6 @@ so that the name will be unique among multiple Emacs processes." :group 'idlwave-shell-general-setup :type 'string) -(defvar idlwave-shell-fix-inserted-breaks nil - "OBSOLETE VARIABLE, is no longer used. - -The documentation of this variable used to be: -If non-nil then run `idlwave-shell-remove-breaks' to clean up IDL messages.") - (defcustom idlwave-shell-prefix-key "\C-c\C-d" "The prefix key for the debugging map `idlwave-shell-mode-prefix-map'. This variable must already be set when idlwave-shell.el is loaded. @@ -223,9 +217,6 @@ window, but is useful for stepping, etc." ;; (defcustom idlwave-shell-debug-modifiers... See idlwave.el -(defvar idlwave-shell-activate-alt-keybindings nil - "Obsolete variable. See `idlwave-shell-debug-modifiers'.") - (defcustom idlwave-shell-use-truename nil "Non-nil means, use `file-truename' when looking for buffers. If this variable is non-nil, Emacs will use the function `file-truename' to @@ -335,9 +326,6 @@ expression being examined." (string :tag "Label ") (string :tag "Command")))) -(defvar idlwave-shell-print-expression-function nil - "OBSOLETE VARIABLE, is no longer used.") - (defcustom idlwave-shell-separate-examine-output t "Non-nil means, put output of examine commands in their own buffer." :group 'idlwave-shell-command-setup @@ -520,9 +508,6 @@ t Glyph when possible, otherwise face (same effect as 'glyph)." (const :tag "Display glyph (red dot)" glyph) (const :tag "Glyph or face." t))) -(defvar idlwave-shell-use-breakpoint-glyph t - "Obsolete variable. See `idlwave-shell-mark-breakpoints'.") - (defcustom idlwave-shell-breakpoint-face 'idlwave-shell-bp "The face for breakpoint lines in the source code. Allows you to choose the font, color and other properties for diff --git a/lisp/progmodes/idlwave.el b/lisp/progmodes/idlwave.el index 74f37df9b2d..015f58df3fb 100644 --- a/lisp/progmodes/idlwave.el +++ b/lisp/progmodes/idlwave.el @@ -456,9 +456,6 @@ value of `!DIR'. See also `idlwave-library-path'." (defvar idlwave-xml-system-rinfo-converted-file "idl_xml_rinfo.el") (defvar idlwave-path-file "idlpath.el") -(defvar idlwave-libinfo-file nil - "Obsolete variable, no longer used.") - (defcustom idlwave-special-lib-alist nil "Alist of regular expressions matching special library directories. When listing routine source locations, IDLWAVE gives a short hint where @@ -555,10 +552,6 @@ completions." :group 'idlwave-completion :type 'boolean) -(defvar idlwave-default-completion-case-is-down nil - "Obsolete variable. See `idlwave-complete-empty-string-as-lower-case' and -`idlwave-completion-case'.") - (defcustom idlwave-buffer-case-takes-precedence nil "Non-nil means, the case of tokens in buffers dominates over system stuff. To make this possible, we need to re-case everything each time we update @@ -4525,8 +4518,6 @@ information updated immediately, leave NO-CONCATENATE nil." nil 'idlwave-load-rinfo-next-step))) (error nil)))) -(defvar idlwave-library-routines nil "Obsolete variable.") - ;;------ XML Help routine info system (defun idlwave-load-system-routine-info () ;; Load the system routine info from the cached routine info file, From 85e8b518113820afff2edd0a35e70d54b1395ff4 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Fri, 4 May 2012 14:02:23 +0800 Subject: [PATCH 326/564] * iswitchb.el (iswitchb-all-frames): Fix last change. --- lisp/iswitchb.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/iswitchb.el b/lisp/iswitchb.el index a31828514bd..6493a8f800c 100644 --- a/lisp/iswitchb.el +++ b/lisp/iswitchb.el @@ -372,7 +372,7 @@ See also `iswitchb-newbuffer'." :type 'string :group 'iswitchb) -(defvar iswitchb-all-frames 'visible +(defcustom iswitchb-all-frames 'visible "Argument to pass to `walk-windows' when iswitchb is finding buffers. See documentation of `walk-windows' for useful values." :type '(choice (const :tag "Selected frame only" nil) From 0bfcf5c598d7c351591827b14482253adf9ab015 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Thu, 3 May 2012 23:13:18 -0700 Subject: [PATCH 327/564] Fix minor Y10k bugs. * lisp/arc-mode.el (archive-unixdate): * lisp/autoinsert.el (auto-insert-alist): * lisp/calc/calc-forms.el (math-this-year): * lisp/gnus/nnweb.el (nnweb-google-parse-1): * lisp/emacs-lisp/copyright.el (copyright-current-year) (copyright-update-year, copyright): * lisp/tar-mode.el (tar-clip-time-string): * lisp/time.el (display-time-update): Don't assume years have 4 digits. --- lisp/ChangeLog | 12 ++++++++++++ lisp/arc-mode.el | 5 +++-- lisp/autoinsert.el | 6 +++--- lisp/calc/calc-forms.el | 2 +- lisp/emacs-lisp/copyright.el | 7 +++---- lisp/gnus/ChangeLog | 5 +++++ lisp/gnus/nnweb.el | 2 +- lisp/tar-mode.el | 2 +- lisp/time.el | 2 +- 9 files changed, 30 insertions(+), 13 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index d57d93a7060..7d7cf56cd77 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,15 @@ +2012-05-04 Paul Eggert + + Fix minor Y10k bugs. + * arc-mode.el (archive-unixdate): + * autoinsert.el (auto-insert-alist): + * calc/calc-forms.el (math-this-year): + * emacs-lisp/copyright.el (copyright-current-year) + (copyright-update-year, copyright): + * tar-mode.el (tar-clip-time-string): + * time.el (display-time-update): + Don't assume years have 4 digits. + 2012-05-04 Chong Yidong * dos-w32.el (file-name-buffer-file-type-alist) diff --git a/lisp/arc-mode.el b/lisp/arc-mode.el index 8b17208983f..c776a3f8b5c 100644 --- a/lisp/arc-mode.el +++ b/lisp/arc-mode.el @@ -622,11 +622,12 @@ the mode is invalid. If ERROR is nil then nil will be returned." (defun archive-unixdate (low high) "Stringify Unix (LOW HIGH) date." - (let ((str (current-time-string (cons high low)))) + (let* ((time (cons high low)) + (str (current-time-string time))) (format "%s-%s-%s" (substring str 8 10) (substring str 4 7) - (substring str 20 24)))) + (format-time-string "%Y" time)))) (defun archive-unixtime (low high) "Stringify Unix (LOW HIGH) time." diff --git a/lisp/autoinsert.el b/lisp/autoinsert.el index de2835580c2..e7639b6f8a3 100644 --- a/lisp/autoinsert.el +++ b/lisp/autoinsert.el @@ -135,7 +135,7 @@ If this contains a %s, that will be replaced by the matching rule." (("\\.[1-9]\\'" . "Man page skeleton") "Short description: " - ".\\\" Copyright (C), " (substring (current-time-string) -4) " " + ".\\\" Copyright (C), " (format-time-string "%Y") " " (getenv "ORGANIZATION") | (progn user-full-name) " .\\\" You may distribute this file under the terms of the GNU Free @@ -166,7 +166,7 @@ If this contains a %s, that will be replaced by the matching rule." "Short description: " ";;; " (file-name-nondirectory (buffer-file-name)) " --- " str " -;; Copyright (C) " (substring (current-time-string) -4) " " +;; Copyright (C) " (format-time-string "%Y") " " (getenv "ORGANIZATION") | (progn user-full-name) " ;; Author: " (user-full-name) @@ -222,7 +222,7 @@ If this contains a %s, that will be replaced by the matching rule." @copying\n" (setq short-description (read-string "Short description: ")) ".\n\n" - "Copyright @copyright{} " (substring (current-time-string) -4) " " + "Copyright @copyright{} " (format-time-string "%Y") " " (getenv "ORGANIZATION") | (progn user-full-name) " @quotation diff --git a/lisp/calc/calc-forms.el b/lisp/calc/calc-forms.el index 96cc74f7ef6..dfc5dfc6588 100644 --- a/lisp/calc/calc-forms.el +++ b/lisp/calc/calc-forms.el @@ -444,7 +444,7 @@ (defun math-this-year () - (string-to-number (substring (current-time-string) -4))) + (nth 5 (decode-time))) (defun math-leap-year-p (year) (if (Math-lessp year 1752) diff --git a/lisp/emacs-lisp/copyright.el b/lisp/emacs-lisp/copyright.el index 09b456b54ba..8e96d95c5dd 100644 --- a/lisp/emacs-lisp/copyright.el +++ b/lisp/emacs-lisp/copyright.el @@ -110,7 +110,7 @@ When this is `function', only ask when called non-interactively." ;; This is a defvar rather than a defconst, because the year can ;; change during the Emacs session. -(defvar copyright-current-year (substring (current-time-string) -4) +(defvar copyright-current-year (format-time-string "%Y") "String representing the current year.") (defsubst copyright-limit () ; re-search-forward BOUND @@ -181,8 +181,7 @@ skips to the end of all the years." ;; This uses the match-data from copyright-find-copyright/end. (goto-char (match-end 1)) (copyright-find-end) - ;; Note that `current-time-string' isn't locale-sensitive. - (setq copyright-current-year (substring (current-time-string) -4)) + (setq copyright-current-year (format-time-string "%Y")) (unless (string= (buffer-substring (- (match-end 3) 2) (match-end 3)) (substring copyright-current-year -2)) (if (or noquery @@ -347,7 +346,7 @@ independently replaces consecutive years with a range." "Insert a copyright by $ORGANIZATION notice at cursor." "Company: " comment-start - "Copyright (C) " `(substring (current-time-string) -4) " by " + "Copyright (C) " `(format-time-string "%Y") " by " (or (getenv "ORGANIZATION") str) '(if (copyright-offset-too-large-p) diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 4938336742a..9000ccb9fef 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,8 @@ +2012-05-04 Paul Eggert + + Fix minor Y10k bug. + * nnweb.el (nnweb-google-parse-1): Don't assume years have 4 digits. + 2012-05-01 Stefan Monnier * nnimap.el (nnimap-open-connection-1): Don't leave an "opening..." diff --git a/lisp/gnus/nnweb.el b/lisp/gnus/nnweb.el index a171cb35ae4..8c9c984ba2e 100644 --- a/lisp/gnus/nnweb.el +++ b/lisp/gnus/nnweb.el @@ -365,7 +365,7 @@ Valid types include `google', `dejanews', and `gmane'.") (match-string 1) (match-string 2) (or (match-string 3) - (substring (current-time-string) -4))) + (format-time-string "%Y"))) (current-time-string))) (setq From (match-string 4))) (widen) diff --git a/lisp/tar-mode.el b/lisp/tar-mode.el index 7c95f47e0fb..82329677643 100644 --- a/lisp/tar-mode.el +++ b/lisp/tar-mode.el @@ -396,7 +396,7 @@ write-date, checksum, link-type, and link-name." (defun tar-clip-time-string (time) (let ((str (current-time-string time))) - (concat " " (substring str 4 16) (substring str 19 24)))) + (concat " " (substring str 4 16) (format-time-string " %Y" time)))) (defun tar-grind-file-mode (mode) "Construct a `-rw--r--r--' string indicating MODE. diff --git a/lisp/time.el b/lisp/time.el index c7fa5927e48..8d43b565416 100644 --- a/lisp/time.el +++ b/lisp/time.el @@ -465,7 +465,7 @@ update which can wait for the next redisplay." (seconds (substring time 17 19)) (time-zone (car (cdr (current-time-zone now)))) (day (substring time 8 10)) - (year (substring time 20 24)) + (year (format-time-string "%Y" now)) (monthname (substring time 4 7)) (month (cdr From 8f4ea8e081e3fa41b99324bb2cc9f676811afc98 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 3 May 2012 23:34:42 -0700 Subject: [PATCH 328/564] Small lispintro edits * emacs-lisp-intro.texi (Making Errors): Don't mention Emacs 20. (Void Function, Wrong Type of Argument, Recursion with list) (Simple Extension): Assume a non-ancient Emacs. (Void Variable, Switching Buffers): Improve page breaks. --- doc/lispintro/ChangeLog | 7 ++++ doc/lispintro/emacs-lisp-intro.texi | 52 ++++++++++++++++------------- 2 files changed, 35 insertions(+), 24 deletions(-) diff --git a/doc/lispintro/ChangeLog b/doc/lispintro/ChangeLog index 46709e2d888..0d6df0d5433 100644 --- a/doc/lispintro/ChangeLog +++ b/doc/lispintro/ChangeLog @@ -1,3 +1,10 @@ +2012-05-04 Glenn Morris + + * emacs-lisp-intro.texi (Making Errors): Don't mention Emacs 20. + (Void Function, Wrong Type of Argument, Recursion with list) + (Simple Extension): Assume a non-ancient Emacs. + (Void Variable, Switching Buffers): Improve page breaks. + 2012-05-03 Glenn Morris * emacs-lisp-intro.texi: Update GNU Press contact details. diff --git a/doc/lispintro/emacs-lisp-intro.texi b/doc/lispintro/emacs-lisp-intro.texi index 81a0edd7aba..9446333db2a 100644 --- a/doc/lispintro/emacs-lisp-intro.texi +++ b/doc/lispintro/emacs-lisp-intro.texi @@ -1426,6 +1426,7 @@ C-e}: (this is an unquoted list) @end smallexample +@ignore @noindent What you see depends on which version of Emacs you are running. GNU Emacs version 22 provides more information than version 20 and before. @@ -1436,6 +1437,10 @@ earlier, version 20 result. @noindent In GNU Emacs version 22, a @file{*Backtrace*} window will open up and you will see the following in it: +@end ignore + +A @file{*Backtrace*} window will open up and you should see the +following in it: @smallexample @group @@ -1514,19 +1519,24 @@ evaluating @code{(+ 2 2)}, we can infer that the symbol @code{+} must have a set of instructions for the computer to obey and those instructions must be to add the numbers that follow the @code{+}. -@need 1250 -In GNU Emacs version 20, and in earlier versions, you will see only -one line of error message; it will appear in the echo area and look -like this: +It is possible to prevent Emacs entering the debugger in cases like +this. We do not explain how to do that here, but we will mention what +the result looks like, because you may encounter a similar situation +if there is a bug in some Emacs code that you are using. In such +cases, you will see only one line of error message; it will appear in +the echo area and look like this: @smallexample Symbol's function definition is void:@: this @end smallexample @noindent +@ignore (Also, your terminal may beep at you---some do, some don't; and others -blink. This is just a device to get your attention.) The message goes -away as soon as you type another key, even just to move the cursor. +blink. This is just a device to get your attention.) +@end ignore +The message goes away as soon as you type a key, even just to +move the cursor. We know the meaning of the word @samp{Symbol}. It refers to the first atom of the list, the word @samp{this}. The word @samp{function} @@ -1862,8 +1872,7 @@ Try evaluating this: @need 1250 @noindent -In GNU Emacs version 22, you will create a @file{*Backtrace*} buffer -that says: +You will create a @file{*Backtrace*} buffer that says: @smallexample @group @@ -1929,7 +1938,7 @@ Debugger entered--Lisp error: (void-variable +) @end smallexample @noindent -(As with the other times we entered the debugger, you can quit by +(Again, you can quit the debugger by typing @kbd{q} in the @file{*Backtrace*} buffer.) This backtrace is different from the very first error message we saw, @@ -1943,7 +1952,7 @@ interpreter to evaluate the @code{+} and look for the value of the variable instead of the function definition. We did this by placing the cursor right after the symbol rather than after the parenthesis of the enclosing list as we did before. As a consequence, the Lisp interpreter -evaluated the preceding s-expression, which in this case was the +evaluated the preceding s-expression, which in this case was @code{+} by itself. Since @code{+} does not have a value bound to it, just the function @@ -2183,8 +2192,7 @@ is that @code{+} has tried to add the 2 to the value returned by could not carry out its addition. @need 1250 -In GNU Emacs version 22, you will create and enter a -@file{*Backtrace*} buffer that says: +You will create and enter a @file{*Backtrace*} buffer that says: @noindent @smallexample @@ -2912,7 +2920,7 @@ rather, to save typing, you probably only typed @kbd{RET} if the default buffer was @file{*scratch*}, or if it was different, then you typed just part of the name, such as @code{*sc}, pressed your @kbd{TAB} key to cause it to expand to the full name, and then typed -your @kbd{RET} key.} when prompted in the minibuffer for the name of +@kbd{RET}.} when prompted in the minibuffer for the name of the buffer to which you wanted to switch. The keystrokes, @kbd{C-x b}, cause the Lisp interpreter to evaluate the interactive function @code{switch-to-buffer}. As we said before, this is how Emacs works: @@ -2922,10 +2930,7 @@ different keystrokes call or run different functions. For example, By writing @code{switch-to-buffer} in an expression, and giving it a buffer to switch to, we can switch buffers just the way @kbd{C-x b} -does. - -@need 1000 -Here is the Lisp expression: +does: @smallexample (switch-to-buffer (other-buffer)) @@ -7722,6 +7727,7 @@ retrieved. @xref{Yanking, , Yanking Text Back}. @section @code{zap-to-char} @findex zap-to-char +@c FIXME remove obsolete stuff The @code{zap-to-char} function changed little between GNU Emacs version 19 and GNU Emacs version 22. However, @code{zap-to-char} calls another function, @code{kill-region}, which enjoyed a major @@ -11508,9 +11514,10 @@ The example of a @code{while} loop that printed the elements of a list of numbers can be written recursively. Here is the code, including an expression to set the value of the variable @code{animals} to a list. -If you are using GNU Emacs 20 or before, this example must be copied -to the @file{*scratch*} buffer and each expression must be evaluated -there. Use @kbd{C-u C-x C-e} to evaluate the +If you are reading this in Info in Emacs, you can evaluate this +expression directly in Info. Otherwise, you must copy the example +to the @file{*scratch*} buffer and evaluate each expression there. +Use @kbd{C-u C-x C-e} to evaluate the @code{(print-elements-recursively animals)} expression so that the results are printed in the buffer; otherwise the Lisp interpreter will try to squeeze the results into the one line of the echo area. @@ -11519,9 +11526,6 @@ Also, place your cursor immediately after the last closing parenthesis of the @code{print-elements-recursively} function, before the comment. Otherwise, the Lisp interpreter will try to evaluate the comment. -If you are using a more recent version of Emacs, you can evaluate this -expression directly in Info. - @findex print-elements-recursively @smallexample @group @@ -17949,7 +17953,7 @@ the following conditional: @end group @end smallexample -For example, in contrast to version 20, more recent versions blink +For example, recent versions blink their cursors by default. I hate such blinking, as well as other features, so I placed the following in my @file{.emacs} file@footnote{When I start instances of Emacs that do not load my From 3c74813afd3a9e596af5ab920e0a75600b132505 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 3 May 2012 23:38:36 -0700 Subject: [PATCH 329/564] * patcomp.el, play/bruce.el: Move to obsolete/. * etc/NEWS: Mention this. --- etc/NEWS | 4 ++++ lisp/ChangeLog | 4 ++++ lisp/{play => obsolete}/bruce.el | 1 + lisp/{ => obsolete}/patcomp.el | 2 ++ 4 files changed, 11 insertions(+) rename lisp/{play => obsolete}/bruce.el (99%) rename lisp/{ => obsolete}/patcomp.el (96%) diff --git a/etc/NEWS b/etc/NEWS index 8764030c736..6b82eaa1f7a 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -164,10 +164,14 @@ In most cases, assoc+member+push+delq work just as well. And in any case it's just a terrible package: ugly semantics, terrible inefficiency, and not namespace-clean. +*** bruce.el + *** mailpost.el *** mouse-sel.el +*** patcomp.el + * New Modes and Packages in Emacs 24.2 diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 7d7cf56cd77..14e96c88b53 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-05-04 Glenn Morris + + * patcomp.el, play/bruce.el: Move to obsolete/. + 2012-05-04 Paul Eggert Fix minor Y10k bugs. diff --git a/lisp/play/bruce.el b/lisp/obsolete/bruce.el similarity index 99% rename from lisp/play/bruce.el rename to lisp/obsolete/bruce.el index b8b2f53097d..1dd69c129a0 100644 --- a/lisp/play/bruce.el +++ b/lisp/obsolete/bruce.el @@ -6,6 +6,7 @@ ;; Maintainer: FSF ;; Keywords: games ;; Created: Jan 1997 +;; Obsolete-since: 24.2 ;; This file is part of GNU Emacs. diff --git a/lisp/patcomp.el b/lisp/obsolete/patcomp.el similarity index 96% rename from lisp/patcomp.el rename to lisp/obsolete/patcomp.el index c1965a763ca..b8304143e9f 100644 --- a/lisp/patcomp.el +++ b/lisp/obsolete/patcomp.el @@ -2,6 +2,8 @@ ;; This file is part of GNU Emacs. +;; Obsolete-since: 24.2 + ;;; Commentary: ;;; Code: From 8045b9065f59ba0da910cd9bb8dd40f344b5d55f Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 3 May 2012 23:45:03 -0700 Subject: [PATCH 330/564] Give info files the .info extension Ref http://lists.gnu.org/archive/html/emacs-devel/2012-04/msg00354.html * configure.in (INFO_EXT, INFO_OPTS): New output variables. * doc/emacs/Makefile.in (INFO_EXT, INFO_OPTS): New, set by configure. (info, infoclean): Use $INFO_EXT. ($(infodir)/emacs$(INFO_EXT)): Use $INFO_EXT and $INFO_OPT. * doc/emacs/makefile.w32-in (INFO_EXT, INFO_OPTS): New. (INFO_TARGETS): Use $INFO_EXT. ($(infodir)/emacs$(INFO_EXT)): Use $INFO_EXT and $INFO_OPT, and -o. * doc/lispintro/Makefile.in (INFO_EXT, INFO_OPTS): New, set by configure. (info, infoclean): Use $INFO_EXT. (${infodir}/eintr$(INFO_EXT)): Use $INFO_EXT and $INFO_OPT. * doc/lispintro/makefile.w32-in (INFO_EXT, INFO_OPTS): New. (INFO_TARGETS, clean): Use $INFO_EXT. ($(infodir)/eintr$(INFO_EXT)): Use $INFO_EXT and $INFO_OPT. * doc/lispref/Makefile.in (INFO_EXT, INFO_OPTS): New, set by configure. (info, infoclean): Use $INFO_EXT. ($(infodir)/elisp$(INFO_EXT)): Use $INFO_EXT and $INFO_OPT. * doc/lispref/makefile.w32-in (INFO_EXT, INFO_OPTS): New. (info, maintainer-clean): Use $INFO_EXT. ($(infodir)/elisp$(INFO_EXT)): Use $INFO_EXT and $INFO_OPT. * doc/misc/Makefile.in (INFO_EXT, INFO_OPTS): New, set by configure. (INFO_TARGETS): Use $INFO_EXT. Make all rules generating info files use $INFO_EXT, $INFO_OPT, and -o. * doc/misc/makefile.w32-in (INFO_EXT, INFO_OPTS): New. (INFO_TARGETS): Use $INFO_EXT. Make all rules generating info files use $INFO_EXT, $INFO_OPT, and -o. --- ChangeLog | 4 + Makefile.in | 4 +- configure.in | 6 + doc/emacs/ChangeLog | 9 + doc/emacs/Makefile.in | 15 +- doc/emacs/makefile.w32-in | 11 +- doc/lispintro/ChangeLog | 9 + doc/lispintro/Makefile.in | 12 +- doc/lispintro/makefile.w32-in | 12 +- doc/lispref/ChangeLog | 9 + doc/lispref/Makefile.in | 12 +- doc/lispref/makefile.w32-in | 11 +- doc/misc/ChangeLog | 9 + doc/misc/Makefile.in | 461 +++++++++++++++++++--------------- doc/misc/makefile.w32-in | 241 +++++++++--------- 15 files changed, 475 insertions(+), 350 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1286f7dcf5a..7ed97f5b29d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2012-05-04 Glenn Morris + + * configure.in (INFO_EXT, INFO_OPTS): New output variables. + 2012-05-02 Glenn Morris * configure.in (LD_SWITCH_SYSTEM): Don't try to defeat diff --git a/Makefile.in b/Makefile.in index ef1f3c90c6f..62e98fd451a 100644 --- a/Makefile.in +++ b/Makefile.in @@ -129,7 +129,8 @@ man1dir=$(mandir)/man1 # Where to install and expect the info files describing Emacs. infodir=@infodir@ # Info files not in the doc/misc directory (we get those via make echo-info). -INFO_NONMISC=emacs eintr elisp +INFO_EXT=@INFO_EXT@ +INFO_NONMISC=emacs$(INFO_EXT) eintr$(INFO_EXT) elisp$(INFO_EXT) # If no makeinfo was found and configured --without-makeinfo, "no"; else "yes". HAVE_MAKEINFO=@HAVE_MAKEINFO@ @@ -904,6 +905,7 @@ check-info-dir: info case $${file} in \ *-[0-9]*|COPYING|dir) continue ;; \ esac ; \ + file=`echo $${file} | sed 's/\.info//'` ; \ grep -q -F ": ($${file})." dir || missing="$${missing} $${file}" ; \ done ; \ if test -n "$${missing}"; then \ diff --git a/configure.in b/configure.in index 2bf78e522ec..81e8765990f 100644 --- a/configure.in +++ b/configure.in @@ -865,6 +865,12 @@ with the `--without-makeinfo' option to build without the manuals.] ) fi AC_SUBST(HAVE_MAKEINFO) +dnl Just so that there is only a single place we need to edit. +INFO_EXT=.info +INFO_OPTS=--no-split +AC_SUBST(INFO_EXT) +AC_SUBST(INFO_OPTS) + dnl Add our options to ac_link now, after it is set up. if test x$GCC = xyes; then diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index 81064afacd7..a2bae546f1c 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,3 +1,12 @@ +2012-05-04 Glenn Morris + + * Makefile.in (INFO_EXT, INFO_OPTS): New, set by configure. + (info, infoclean): Use $INFO_EXT. + ($(infodir)/emacs$(INFO_EXT)): Use $INFO_EXT and $INFO_OPT. + * makefile.w32-in (INFO_EXT, INFO_OPTS): New. + (INFO_TARGETS): Use $INFO_EXT. + ($(infodir)/emacs$(INFO_EXT)): Use $INFO_EXT and $INFO_OPT, and -o. + 2012-05-02 Glenn Morris * emacs.texi (@copying): Only print EDITION in the TeX version. diff --git a/doc/emacs/Makefile.in b/doc/emacs/Makefile.in index b25f6dbe490..0e03efd9877 100644 --- a/doc/emacs/Makefile.in +++ b/doc/emacs/Makefile.in @@ -35,6 +35,13 @@ infodir = $(srcdir)/../../info # Directory with the (customized) texinfo.tex file. texinfodir = $(srcdir)/../misc +INFO_EXT=@INFO_EXT@ +# Options used only when making info output. +# --no-split is only needed because of MS-DOS. +# For a possible alternative, see +# http://lists.gnu.org/archive/html/emacs-devel/2011-01/msg01182.html +INFO_OPTS=@INFO_OPTS@ + # The makeinfo program is part of the Texinfo distribution. # Use --force so that it generates output even if there are errors. MAKEINFO = @MAKEINFO@ @@ -118,7 +125,7 @@ mkinfodir = @test -d ${infodir} || mkdir ${infodir} || test -d ${infodir} .PHONY: info dvi html pdf ps -info: $(infodir)/emacs +info: $(infodir)/emacs$(INFO_EXT) dvi: emacs.dvi html: emacs.html pdf: emacs.pdf @@ -128,9 +135,9 @@ ps: emacs.ps # There is no provision for Info files to exist in the build directory. # In a distribution of Emacs, the Info files should be up to date. # Note: "<" is not portable in ordinary make rules. -$(infodir)/emacs: ${EMACSSOURCES} +$(infodir)/emacs$(INFO_EXT): ${EMACSSOURCES} $(mkinfodir) - $(MAKEINFO) $(MAKEINFO_OPTS) -o $@ ${srcdir}/emacs.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/emacs.texi emacs.dvi: ${EMACSSOURCES} $(ENVADD) $(TEXI2DVI) ${srcdir}/emacs.texi @@ -171,7 +178,7 @@ distclean: clean ## In the standalone tarfile, the clean rule runs this. infoclean: - -cd $(infodir) && rm -f emacs emacs-[1-9] emacs-[1-9][0-9] + -cd $(infodir) && rm -f emacs$(INFO_EXT) emacs$(INFO_EXT)-[1-9] emacs$(INFO_EXT)-[1-9][0-9] maintainer-clean: distclean infoclean diff --git a/doc/emacs/makefile.w32-in b/doc/emacs/makefile.w32-in index 488ccbaaf52..4ccecbb7ddf 100644 --- a/doc/emacs/makefile.w32-in +++ b/doc/emacs/makefile.w32-in @@ -1,6 +1,6 @@ #### -*- Makefile -*- for the Emacs Manual -# Copyright (C) 2003-2012 Free Software Foundation, Inc. +# Copyright (C) 2003-2012 Free Software Foundation, Inc. # This file is part of GNU Emacs. @@ -30,7 +30,9 @@ infodir = $(srcdir)/../../info MAKEINFO = makeinfo MAKEINFO_OPTS = --force --enable-encoding -I$(srcdir) MULTI_INSTALL_INFO = $(srcdir)\..\..\nt\multi-install-info.bat -INFO_TARGETS = $(infodir)/emacs +INFO_EXT=.info +INFO_OPTS=--no-split +INFO_TARGETS = $(infodir)/emacs$(INFO_EXT) DVI_TARGETS = emacs.dvi INFOSOURCES = info.texi @@ -114,8 +116,8 @@ dvi: $(DVI_TARGETS) $(infodir)/dir: $(MULTI_INSTALL_INFO) --info-dir=$(infodir) $(INFO_TARGETS) -$(infodir)/emacs: $(EMACSSOURCES) - $(MAKEINFO) $(MAKEINFO_OPTS) emacs.texi +$(infodir)/emacs$(INFO_EXT): $(EMACSSOURCES) + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ emacs.texi emacs.dvi: $(EMACSSOURCES) $(ENVADD) $(TEXI2DVI) $(srcdir)/emacs.texi @@ -129,6 +131,7 @@ emacs-xtra.dvi: emacs-xtra.texi $(EMACS_XTRA) mostlyclean: - $(DEL) *.log *.cp *.fn *.ky *.pg *.vr core *.tp *.core gnustmp.* +## FIXME $(infodir)/emacs* deletes too much, eg emacs-mime. clean: mostlyclean - $(DEL) *.dvi - $(DEL) $(infodir)/emacs* diff --git a/doc/lispintro/ChangeLog b/doc/lispintro/ChangeLog index 04b2803a4a9..40ec77a5151 100644 --- a/doc/lispintro/ChangeLog +++ b/doc/lispintro/ChangeLog @@ -1,3 +1,12 @@ +2012-05-04 Glenn Morris + + * Makefile.in (INFO_EXT, INFO_OPTS): New, set by configure. + (info, infoclean): Use $INFO_EXT. + (${infodir}/eintr$(INFO_EXT)): Use $INFO_EXT and $INFO_OPT. + * makefile.w32-in (INFO_EXT, INFO_OPTS): New. + (INFO_TARGETS, clean): Use $INFO_EXT. + ($(infodir)/eintr$(INFO_EXT)): Use $INFO_EXT and $INFO_OPT. + 2012-05-02 Glenn Morris * emacs-lisp-intro.texi (Syntax): Reword to avoid underfull hbox. diff --git a/doc/lispintro/Makefile.in b/doc/lispintro/Makefile.in index c638dd6135f..29f5344b8c6 100644 --- a/doc/lispintro/Makefile.in +++ b/doc/lispintro/Makefile.in @@ -26,6 +26,10 @@ infodir = $(srcdir)/../../info # Directory with the (customized) texinfo.tex file. texinfodir = $(srcdir)/../misc +INFO_EXT=@INFO_EXT@ +# Options used only when making info output. +INFO_OPTS=@INFO_OPTS@ + MAKEINFO = @MAKEINFO@ MAKEINFO_OPTS = --force -I $(srcdir) TEXI2DVI = texi2dvi @@ -39,7 +43,7 @@ mkinfodir = @test -d ${infodir} || mkdir ${infodir} || test -d ${infodir} .PHONY: info dvi html pdf ps -info: ${infodir}/eintr +info: ${infodir}/eintr$(INFO_EXT) dvi: emacs-lisp-intro.dvi html: emacs-lisp-intro.html @@ -49,9 +53,9 @@ ps: emacs-lisp-intro.ps # The file name eintr must fit within 5 characters, to allow for # -NN extensions to fit into DOS 8+3 limits without clashing. # Note: "<" is not portable in ordinary make rules. -${infodir}/eintr: ${srcdir}/emacs-lisp-intro.texi +${infodir}/eintr$(INFO_EXT): ${srcdir}/emacs-lisp-intro.texi $(mkinfodir) - $(MAKEINFO) $(MAKEINFO_OPTS) -o $@ ${srcdir}/emacs-lisp-intro.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/emacs-lisp-intro.texi emacs-lisp-intro.dvi: ${srcdir}/emacs-lisp-intro.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/emacs-lisp-intro.texi @@ -79,7 +83,7 @@ clean: mostlyclean distclean: clean infoclean: - -cd $(infodir) && rm -f eintr eintr-[1-9] + -cd $(infodir) && rm -f eintr$(INFO_EXT) eintr$(INFO_EXT)-[1-9] maintainer-clean: distclean infoclean diff --git a/doc/lispintro/makefile.w32-in b/doc/lispintro/makefile.w32-in index a8aaf43096e..ea9b04b87ca 100644 --- a/doc/lispintro/makefile.w32-in +++ b/doc/lispintro/makefile.w32-in @@ -1,6 +1,6 @@ #### -*- Makefile -*- for the Emacs Lisp Introduction manual. -# Copyright (C) 2003-2012 Free Software Foundation, Inc. +# Copyright (C) 2003-2012 Free Software Foundation, Inc. # This file is part of GNU Emacs. @@ -24,10 +24,12 @@ infodir = $(srcdir)/../../info # Directory with the (customized) texinfo.tex file. texinfodir = $(srcdir)/../misc +INFO_EXT=.info +INFO_OPTS=--no-split INFO_SOURCES = $(srcdir)/emacs-lisp-intro.texi $(srcdir)/doclicense.texi # The file name eintr must fit within 5 characters, to allow for # -NN extensions to fit into DOS 8+3 limits without clashing -INFO_TARGETS = $(infodir)/eintr +INFO_TARGETS = $(infodir)/eintr$(INFO_EXT) DVI_TARGETS = emacs-lisp-intro.dvi MAKEINFO = makeinfo @@ -47,8 +49,8 @@ $(infodir)/dir: dvi: $(DVI_TARGETS) -$(infodir)/eintr: $(INFO_SOURCES) - $(MAKEINFO) -o $@ $(srcdir)/emacs-lisp-intro.texi +$(infodir)/eintr$(INFO_EXT): $(INFO_SOURCES) + $(MAKEINFO) $(INFO_OPTS) -o $@ $(srcdir)/emacs-lisp-intro.texi emacs-lisp-intro.dvi: $(INFO_SOURCES) $(ENVADD) $(TEXI2DVI) $(srcdir)/emacs-lisp-intro.texi @@ -66,7 +68,7 @@ mostlyclean: - $(DEL) *.log *.cp *.fn *.ky *.pg *.vr *.tp clean: mostlyclean - - $(DEL) *.dvi $(infodir)/eintr* + - $(DEL) *.dvi $(infodir)/eintr$(INFO_EXT)* distclean: clean - $(DEL) makefile diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 8c6165c826f..77f47cdaae4 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,12 @@ +2012-05-04 Glenn Morris + + * Makefile.in (INFO_EXT, INFO_OPTS): New, set by configure. + (info, infoclean): Use $INFO_EXT. + ($(infodir)/elisp$(INFO_EXT)): Use $INFO_EXT and $INFO_OPT. + * makefile.w32-in (INFO_EXT, INFO_OPTS): New. + (info, maintainer-clean): Use $INFO_EXT. + ($(infodir)/elisp$(INFO_EXT)): Use $INFO_EXT and $INFO_OPT. + 2012-05-04 Chong Yidong * os.texi (Timers): Use defopt for timer-max-repeats. diff --git a/doc/lispref/Makefile.in b/doc/lispref/Makefile.in index a95ba45cfe3..19624693aa7 100644 --- a/doc/lispref/Makefile.in +++ b/doc/lispref/Makefile.in @@ -30,6 +30,10 @@ texinfodir = $(srcdir)/../misc # Directory with emacsver.texi. emacsdir = $(srcdir)/../emacs +INFO_EXT=@INFO_EXT@ +# Options used only when making info output. +INFO_OPTS=@INFO_OPTS@ + MAKEINFO = @MAKEINFO@ MAKEINFO_OPTS = --force --enable-encoding -I $(emacsdir) -I $(srcdir) TEXI2DVI = texi2dvi @@ -99,16 +103,16 @@ mkinfodir = @test -d ${infodir} || mkdir ${infodir} || test -d ${infodir} .PHONY: info dvi pdf ps -info: $(infodir)/elisp +info: $(infodir)/elisp$(INFO_EXT) dvi: elisp.dvi html: elisp.html pdf: elisp.pdf ps: elisp.ps ## Note: "<" is not portable in ordinary make rules. -$(infodir)/elisp: $(srcs) +$(infodir)/elisp$(INFO_EXT): $(srcs) $(mkinfodir) - $(MAKEINFO) $(MAKEINFO_OPTS) -o $@ $(srcdir)/elisp.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ $(srcdir)/elisp.texi elisp.dvi: $(srcs) $(ENVADD) $(TEXI2DVI) $(srcdir)/elisp.texi @@ -138,7 +142,7 @@ clean: mostlyclean distclean: clean infoclean: - -cd $(infodir) && rm -f elisp elisp-[1-9] elisp-[1-9][0-9] + -cd $(infodir) && rm -f elisp$(INFO_EXT) elisp$(INFO_EXT)-[1-9] elisp$(INFO_EXT)-[1-9][0-9] maintainer-clean: distclean infoclean diff --git a/doc/lispref/makefile.w32-in b/doc/lispref/makefile.w32-in index b2c34f3c149..2914852dc8a 100644 --- a/doc/lispref/makefile.w32-in +++ b/doc/lispref/makefile.w32-in @@ -28,6 +28,9 @@ emacsdir = $(srcdir)/../emacs # Directory with the (customized) texinfo.tex file. texinfodir = $(srcdir)/../misc +INFO_EXT=.info +INFO_OPTS=--no-split + # Redefine `TEX' if `tex' does not invoke plain TeX. For example: # TEX=platex TEX=tex @@ -102,13 +105,13 @@ srcs = \ # The info file is named `elisp'. -info: $(infodir)/elisp +info: $(infodir)/elisp$(INFO_EXT) $(infodir)/dir: $(INSTALL_INFO) --info-dir=$(infodir) $(infodir)/elisp -$(infodir)/elisp: $(srcs) - $(MAKEINFO) $(MAKEINFO_OPTS) -o $(infodir)/elisp $(srcdir)/elisp.texi +$(infodir)/elisp$(INFO_EXT): $(srcs) + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ $(srcdir)/elisp.texi elisp.dvi: $(srcs) $(texinputdir) $(TEX) $(srcdir)/elisp.texi @@ -123,4 +126,4 @@ distclean: clean - $(DEL) makefile maintainer-clean: distclean - - $(DEL) elisp elisp-? elisp-?? elisp.dvi elisp.oaux + - $(DEL) elisp$(INFO_EXT) elisp$(INFO_EXT)-? elisp$(INFO_EXT)-?? elisp.dvi elisp.oaux diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index 0d6300a1b82..d92e7585b17 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -1,3 +1,12 @@ +2012-05-04 Glenn Morris + + * Makefile.in (INFO_EXT, INFO_OPTS): New, set by configure. + (INFO_TARGETS): Use $INFO_EXT. + Make all rules generating info files use $INFO_EXT, $INFO_OPT, and -o. + * makefile.w32-in (INFO_EXT, INFO_OPTS): New. + (INFO_TARGETS): Use $INFO_EXT. + Make all rules generating info files use $INFO_EXT, $INFO_OPT, and -o. + 2012-05-02 Glenn Morris * Makefile.in (echo-info): New phony target, used by top-level. diff --git a/doc/misc/Makefile.in b/doc/misc/Makefile.in index 383ec3a9db9..ed1c497c25e 100644 --- a/doc/misc/Makefile.in +++ b/doc/misc/Makefile.in @@ -38,62 +38,66 @@ infodir=../../info ## Currently only used by efaq and calc. emacsdir = $(srcdir)/../emacs +INFO_EXT=@INFO_EXT@ +# Options used only when making info output. +INFO_OPTS=@INFO_OPTS@ + # The makeinfo program is part of the Texinfo distribution. # Use --force so that it generates output even if there are errors. MAKEINFO = @MAKEINFO@ MAKEINFO_OPTS = --force -I$(emacsdir) INFO_TARGETS = \ - $(infodir)/ada-mode \ - $(infodir)/auth \ - $(infodir)/autotype \ - $(infodir)/calc \ - $(infodir)/ccmode \ - $(infodir)/cl \ - $(infodir)/dbus \ - $(infodir)/dired-x \ - $(infodir)/ebrowse \ - $(infodir)/ede \ - $(infodir)/ediff \ - $(infodir)/edt \ - $(infodir)/eieio \ - $(infodir)/emacs-mime \ - $(infodir)/epa \ - $(infodir)/erc \ - $(infodir)/ert \ - $(infodir)/eshell \ - $(infodir)/eudc \ - $(infodir)/efaq \ - $(infodir)/flymake \ - $(infodir)/forms \ - $(infodir)/gnus \ - $(infodir)/emacs-gnutls \ - $(infodir)/idlwave \ - $(infodir)/info \ - $(infodir)/mairix-el \ - $(infodir)/message \ - $(infodir)/mh-e \ - $(infodir)/newsticker \ - $(infodir)/nxml-mode \ - $(infodir)/org \ - $(infodir)/pcl-cvs \ - $(infodir)/pgg \ - $(infodir)/rcirc \ - $(infodir)/remember \ - $(infodir)/reftex \ - $(infodir)/sasl \ - $(infodir)/sc \ - $(infodir)/semantic \ - $(infodir)/ses \ - $(infodir)/sieve \ - $(infodir)/smtpmail \ - $(infodir)/speedbar \ - $(infodir)/tramp \ - $(infodir)/url \ - $(infodir)/vip \ - $(infodir)/viper \ - $(infodir)/widget \ - $(infodir)/woman + $(infodir)/ada-mode$(INFO_EXT) \ + $(infodir)/auth$(INFO_EXT) \ + $(infodir)/autotype$(INFO_EXT) \ + $(infodir)/calc$(INFO_EXT) \ + $(infodir)/ccmode$(INFO_EXT) \ + $(infodir)/cl$(INFO_EXT) \ + $(infodir)/dbus$(INFO_EXT) \ + $(infodir)/dired-x$(INFO_EXT) \ + $(infodir)/ebrowse$(INFO_EXT) \ + $(infodir)/ede$(INFO_EXT) \ + $(infodir)/ediff$(INFO_EXT) \ + $(infodir)/edt$(INFO_EXT) \ + $(infodir)/eieio$(INFO_EXT) \ + $(infodir)/emacs-mime$(INFO_EXT) \ + $(infodir)/epa$(INFO_EXT) \ + $(infodir)/erc$(INFO_EXT) \ + $(infodir)/ert$(INFO_EXT) \ + $(infodir)/eshell$(INFO_EXT) \ + $(infodir)/eudc$(INFO_EXT) \ + $(infodir)/efaq$(INFO_EXT) \ + $(infodir)/flymake$(INFO_EXT) \ + $(infodir)/forms$(INFO_EXT) \ + $(infodir)/gnus$(INFO_EXT) \ + $(infodir)/emacs-gnutls$(INFO_EXT) \ + $(infodir)/idlwave$(INFO_EXT) \ + $(infodir)/info$(INFO_EXT) \ + $(infodir)/mairix-el$(INFO_EXT) \ + $(infodir)/message$(INFO_EXT) \ + $(infodir)/mh-e$(INFO_EXT) \ + $(infodir)/newsticker$(INFO_EXT) \ + $(infodir)/nxml-mode$(INFO_EXT) \ + $(infodir)/org$(INFO_EXT) \ + $(infodir)/pcl-cvs$(INFO_EXT) \ + $(infodir)/pgg$(INFO_EXT) \ + $(infodir)/rcirc$(INFO_EXT) \ + $(infodir)/remember$(INFO_EXT) \ + $(infodir)/reftex$(INFO_EXT) \ + $(infodir)/sasl$(INFO_EXT) \ + $(infodir)/sc$(INFO_EXT) \ + $(infodir)/semantic$(INFO_EXT) \ + $(infodir)/ses$(INFO_EXT) \ + $(infodir)/sieve$(INFO_EXT) \ + $(infodir)/smtpmail$(INFO_EXT) \ + $(infodir)/speedbar$(INFO_EXT) \ + $(infodir)/tramp$(INFO_EXT) \ + $(infodir)/url$(INFO_EXT) \ + $(infodir)/vip$(INFO_EXT) \ + $(infodir)/viper$(INFO_EXT) \ + $(infodir)/widget$(INFO_EXT) \ + $(infodir)/woman$(INFO_EXT) DVI_TARGETS = \ ada-mode.dvi \ @@ -233,190 +237,211 @@ pdf: $(PDF_TARGETS) # Note: "<" is not portable in ordinary make rules. ## "short" target names for convenience, to just rebuild one manual. -ada-mode : $(infodir)/ada-mode -$(infodir)/ada-mode: ada-mode.texi +ada-mode : $(infodir)/ada-mode$(INFO_EXT) +$(infodir)/ada-mode$(INFO_EXT): ada-mode.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) ada-mode.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ada-mode.texi ada-mode.dvi: ${srcdir}/ada-mode.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/ada-mode.texi ada-mode.pdf: ${srcdir}/ada-mode.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/ada-mode.texi -auth : $(infodir)/auth -$(infodir)/auth: auth.texi +auth : $(infodir)/auth$(INFO_EXT) +$(infodir)/auth$(INFO_EXT): auth.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) auth.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ auth.texi auth.dvi: ${srcdir}/auth.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/auth.texi auth.pdf: ${srcdir}/auth.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/auth.texi -autotype : $(infodir)/autotype -$(infodir)/autotype: autotype.texi +autotype : $(infodir)/autotype$(INFO_EXT) +$(infodir)/autotype$(INFO_EXT): autotype.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) autotype.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ autotype.texi autotype.dvi: ${srcdir}/autotype.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/autotype.texi autotype.pdf: ${srcdir}/autotype.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/autotype.texi -calc : $(infodir)/calc -$(infodir)/calc: calc.texi $(emacsdir)/emacsver.texi +calc : $(infodir)/calc$(INFO_EXT) +$(infodir)/calc$(INFO_EXT): calc.texi $(emacsdir)/emacsver.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) calc.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ calc.texi calc.dvi: ${srcdir}/calc.texi $(emacsdir)/emacsver.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/calc.texi calc.pdf: ${srcdir}/calc.texi $(emacsdir)/emacsver.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/calc.texi -ccmode : $(infodir)/ccmode -$(infodir)/ccmode: cc-mode.texi +ccmode : $(infodir)/ccmode$(INFO_EXT) +$(infodir)/ccmode$(INFO_EXT): cc-mode.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) cc-mode.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ cc-mode.texi cc-mode.dvi: ${srcdir}/cc-mode.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/cc-mode.texi cc-mode.pdf: ${srcdir}/cc-mode.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/cc-mode.texi -cl : $(infodir)/cl -$(infodir)/cl: cl.texi +cl : $(infodir)/cl$(INFO_EXT) +$(infodir)/cl$(INFO_EXT): cl.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) cl.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ cl.texi cl.dvi: ${srcdir}/cl.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/cl.texi cl.pdf: ${srcdir}/cl.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/cl.texi -dbus : $(infodir)/dbus -$(infodir)/dbus: dbus.texi +dbus : $(infodir)/dbus$(INFO_EXT) +$(infodir)/dbus$(INFO_EXT): dbus.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) dbus.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ dbus.texi dbus.dvi: ${srcdir}/dbus.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/dbus.texi dbus.pdf: ${srcdir}/dbus.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/dbus.texi -dired-x : $(infodir)/dired-x -$(infodir)/dired-x: dired-x.texi $(emacsdir)/emacsver.texi +dired-x : $(infodir)/dired-x$(INFO_EXT) +$(infodir)/dired-x$(INFO_EXT): dired-x.texi $(emacsdir)/emacsver.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) dired-x.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ dired-x.texi dired-x.dvi: ${srcdir}/dired-x.texi $(emacsdir)/emacsver.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/dired-x.texi dired-x.pdf: ${srcdir}/dired-x.texi $(emacsdir)/emacsver.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/dired-x.texi -ebrowse : $(infodir)/ebrowse -$(infodir)/ebrowse: ebrowse.texi +ebrowse : $(infodir)/ebrowse$(INFO_EXT) +$(infodir)/ebrowse$(INFO_EXT): ebrowse.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) ebrowse.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ebrowse.texi ebrowse.dvi: ${srcdir}/ebrowse.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/ebrowse.texi ebrowse.pdf: ${srcdir}/ebrowse.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/ebrowse.texi -ede : $(infodir)/ede -$(infodir)/ede: ede.texi +ede : $(infodir)/ede$(INFO_EXT) +$(infodir)/ede$(INFO_EXT): ede.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) ede.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ede.texi ede.dvi: ${srcdir}/ede.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/ede.texi ede.pdf: ${srcdir}/ede.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/ede.texi -ediff : $(infodir)/ediff -$(infodir)/ediff: ediff.texi +ediff : $(infodir)/ediff$(INFO_EXT) +$(infodir)/ediff$(INFO_EXT): ediff.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) ediff.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ediff.texi ediff.dvi: ${srcdir}/ediff.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/ediff.texi ediff.pdf: ${srcdir}/ediff.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/ediff.texi -edt : $(infodir)/edt -$(infodir)/edt: edt.texi +edt : $(infodir)/edt$(INFO_EXT) +$(infodir)/edt$(INFO_EXT): edt.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) edt.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ edt.texi edt.dvi: ${srcdir}/edt.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/edt.texi edt.pdf: ${srcdir}/edt.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/edt.texi -eieio : $(infodir)/eieio -$(infodir)/eieio: eieio.texi +eieio : $(infodir)/eieio$(INFO_EXT) +$(infodir)/eieio$(INFO_EXT): eieio.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) eieio.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ eieio.texi eieio.dvi: ${srcdir}/eieio.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/eieio.texi eieio.pdf: ${srcdir}/eieio.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/eieio.texi -emacs-gnutls : $(infodir)/emacs-gnutls -$(infodir)/emacs-gnutls: emacs-gnutls.texi +emacs-gnutls : $(infodir)/emacs-gnutls$(INFO_EXT) +$(infodir)/emacs-gnutls$(INFO_EXT): emacs-gnutls.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) emacs-gnutls.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ emacs-gnutls.texi emacs-gnutls.dvi: ${srcdir}/emacs-gnutls.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/emacs-gnutls.texi emacs-gnutls.pdf: ${srcdir}/emacs-gnutls.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/emacs-gnutls.texi -emacs-mime : $(infodir)/emacs-mime -$(infodir)/emacs-mime: emacs-mime.texi +emacs-mime : $(infodir)/emacs-mime$(INFO_EXT) +$(infodir)/emacs-mime$(INFO_EXT): emacs-mime.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) --enable-encoding emacs-mime.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) --enable-encoding -o $@ emacs-mime.texi emacs-mime.dvi: ${srcdir}/emacs-mime.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/emacs-mime.texi emacs-mime.pdf: ${srcdir}/emacs-mime.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/emacs-mime.texi -epa : $(infodir)/epa -$(infodir)/epa: epa.texi +epa : $(infodir)/epa$(INFO_EXT) +$(infodir)/epa$(INFO_EXT): epa.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) epa.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ epa.texi epa.dvi: ${srcdir}/epa.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/epa.texi epa.pdf: ${srcdir}/epa.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/epa.texi -erc : $(infodir)/erc -$(infodir)/erc: erc.texi +erc : $(infodir)/erc$(INFO_EXT) +$(infodir)/erc$(INFO_EXT): erc.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) erc.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ erc.texi erc.dvi: ${srcdir}/erc.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/erc.texi erc.pdf: ${srcdir}/erc.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/erc.texi -ert : $(infodir)/ert -$(infodir)/ert: ert.texi +ert : $(infodir)/ert$(INFO_EXT) +$(infodir)/ert$(INFO_EXT): ert.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) ert.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ert.texi ert.dvi: ${srcdir}/ert.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/ert.texi ert.pdf: ${srcdir}/ert.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/ert.texi -eshell : $(infodir)/eshell -$(infodir)/eshell: eshell.texi +eshell : $(infodir)/eshell$(INFO_EXT) +$(infodir)/eshell$(INFO_EXT): eshell.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) eshell.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ eshell.texi eshell.dvi: ${srcdir}/eshell.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/eshell.texi eshell.pdf: ${srcdir}/eshell.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/eshell.texi -eudc : $(infodir)/eudc -$(infodir)/eudc: eudc.texi +eudc : $(infodir)/eudc$(INFO_EXT) +$(infodir)/eudc$(INFO_EXT): eudc.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) eudc.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ eudc.texi eudc.dvi: ${srcdir}/eudc.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/eudc.texi eudc.pdf: ${srcdir}/eudc.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/eudc.texi -efaq : $(infodir)/efaq -$(infodir)/efaq: faq.texi $(emacsdir)/emacsver.texi +efaq : $(infodir)/efaq$(INFO_EXT) +$(infodir)/efaq$(INFO_EXT): faq.texi $(emacsdir)/emacsver.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) faq.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ faq.texi faq.dvi: ${srcdir}/faq.texi $(emacsdir)/emacsver.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/faq.texi faq.pdf: ${srcdir}/faq.texi $(emacsdir)/emacsver.texi @@ -431,29 +456,32 @@ emacs-faq.html: ${srcdir}/faq.texi $(emacsdir)/emacsver.texi emacs-faq.text: ${srcdir}/faq.texi $(emacsdir)/emacsver.texi $(MAKEINFO) $(MAKEINFO_OPTS) --plaintext -o $@ ${srcdir}/faq.texi -flymake : $(infodir)/flymake -$(infodir)/flymake: flymake.texi +flymake : $(infodir)/flymake$(INFO_EXT) +$(infodir)/flymake$(INFO_EXT): flymake.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) flymake.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ flymake.texi flymake.dvi: ${srcdir}/flymake.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/flymake.texi flymake.pdf: ${srcdir}/flymake.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/flymake.texi -forms : $(infodir)/forms -$(infodir)/forms: forms.texi +forms : $(infodir)/forms$(INFO_EXT) +$(infodir)/forms$(INFO_EXT): forms.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) forms.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ forms.texi forms.dvi: ${srcdir}/forms.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/forms.texi forms.pdf: ${srcdir}/forms.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/forms.texi # gnus/message/emacs-mime/sieve/pgg are part of Gnus: -gnus : $(infodir)/gnus -$(infodir)/gnus: gnus.texi gnus-faq.texi +gnus : $(infodir)/gnus$(INFO_EXT) +$(infodir)/gnus$(INFO_EXT): gnus.texi gnus-faq.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) gnus.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ gnus.texi gnus.dvi: ${srcdir}/gnus.texi gnus-faq.texi sed -e '/@iflatex/,/@end iflatex/d' ${srcdir}/gnus.texi > gnustmp.texi $(ENVADD) $(TEXI2DVI) gnustmp.texi @@ -465,240 +493,263 @@ gnus.pdf: ${srcdir}/gnus.texi gnus-faq.texi cp gnustmp.pdf $@ rm gnustmp.* -# This is produced with --no-split to avoid making files whose -# names clash on DOS 8+3 filesystems -idlwave : $(infodir)/idlwave -$(infodir)/idlwave: idlwave.texi +# NB this one needs --no-split even without a .info extension. +idlwave : $(infodir)/idlwave$(INFO_EXT) +$(infodir)/idlwave$(INFO_EXT): idlwave.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) --no-split idlwave.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ idlwave.texi idlwave.dvi: ${srcdir}/idlwave.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/idlwave.texi idlwave.pdf: ${srcdir}/idlwave.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/idlwave.texi -# The following target uses an explicit -o switch to work around -# the @setfilename directive in info.texi, which is required for -# the Texinfo distribution. -###info : $(infodir)/info # circular! -$(infodir)/info: info.texi +# NB this one needs --no-split even without a .info extension. +info : $(infodir)/info$(INFO_EXT) +$(infodir)/info$(INFO_EXT): info.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) --no-split -o $@ info.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ info.texi info.dvi: ${srcdir}/info.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/info.texi info.pdf: ${srcdir}/info.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/info.texi -mairix-el : $(infodir)/mairix-el -$(infodir)/mairix-el: mairix-el.texi +mairix-el : $(infodir)/mairix-el$(INFO_EXT) +$(infodir)/mairix-el$(INFO_EXT): mairix-el.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) mairix-el.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ mairix-el.texi mairix-el.dvi: ${srcdir}/mairix-el.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/mairix-el.texi mairix-el.pdf: ${srcdir}/mairix-el.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/mairix-el.texi -message : $(infodir)/message -$(infodir)/message: message.texi +message : $(infodir)/message$(INFO_EXT) +$(infodir)/message$(INFO_EXT): message.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) message.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ message.texi message.dvi: ${srcdir}/message.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/message.texi message.pdf: ${srcdir}/message.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/message.texi -mh-e : $(infodir)/mh-e -$(infodir)/mh-e: mh-e.texi +mh-e : $(infodir)/mh-e$(INFO_EXT) +$(infodir)/mh-e$(INFO_EXT): mh-e.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) mh-e.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ mh-e.texi mh-e.dvi: ${srcdir}/mh-e.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/mh-e.texi mh-e.pdf: ${srcdir}/mh-e.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/mh-e.texi -newsticker : $(infodir)/newsticker -$(infodir)/newsticker: newsticker.texi +newsticker : $(infodir)/newsticker$(INFO_EXT) +$(infodir)/newsticker$(INFO_EXT): newsticker.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) newsticker.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ newsticker.texi newsticker.dvi: ${srcdir}/newsticker.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/newsticker.texi newsticker.pdf: ${srcdir}/newsticker.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/newsticker.texi -nxml-mode : $(infodir)/nxml-mode -$(infodir)/nxml-mode: nxml-mode.texi +nxml-mode : $(infodir)/nxml-mode$(INFO_EXT) +$(infodir)/nxml-mode$(INFO_EXT): nxml-mode.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) nxml-mode.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ nxml-mode.texi nxml-mode.dvi: ${srcdir}/nxml-mode.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/nxml-mode.texi nxml-mode.pdf: ${srcdir}/nxml-mode.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/nxml-mode.texi -org : $(infodir)/org -$(infodir)/org: org.texi +org : $(infodir)/org$(INFO_EXT) +$(infodir)/org$(INFO_EXT): org.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) org.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ org.texi org.dvi: ${srcdir}/org.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/org.texi org.pdf: ${srcdir}/org.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/org.texi -pcl-cvs : $(infodir)/pcl-cvs -$(infodir)/pcl-cvs: pcl-cvs.texi +pcl-cvs : $(infodir)/pcl-cvs$(INFO_EXT) +$(infodir)/pcl-cvs$(INFO_EXT): pcl-cvs.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) pcl-cvs.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ pcl-cvs.texi pcl-cvs.dvi: ${srcdir}/pcl-cvs.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/pcl-cvs.texi pcl-cvs.pdf: ${srcdir}/pcl-cvs.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/pcl-cvs.texi -pgg : $(infodir)/pgg -$(infodir)/pgg: pgg.texi +pgg : $(infodir)/pgg$(INFO_EXT) +$(infodir)/pgg$(INFO_EXT): pgg.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) pgg.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ pgg.texi pgg.dvi: ${srcdir}/pgg.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/pgg.texi pgg.pdf: ${srcdir}/pgg.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/pgg.texi -rcirc : $(infodir)/rcirc -$(infodir)/rcirc: rcirc.texi +rcirc : $(infodir)/rcirc$(INFO_EXT) +$(infodir)/rcirc$(INFO_EXT): rcirc.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) rcirc.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ rcirc.texi rcirc.dvi: ${srcdir}/rcirc.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/rcirc.texi rcirc.pdf: ${srcdir}/rcirc.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/rcirc.texi -reftex : $(infodir)/reftex -$(infodir)/reftex: reftex.texi +reftex : $(infodir)/reftex$(INFO_EXT) +$(infodir)/reftex$(INFO_EXT): reftex.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) reftex.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ reftex.texi reftex.dvi: ${srcdir}/reftex.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/reftex.texi reftex.pdf: ${srcdir}/reftex.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/reftex.texi -remember : $(infodir)/remember -$(infodir)/remember: remember.texi +remember : $(infodir)/remember$(INFO_EXT) +$(infodir)/remember$(INFO_EXT): remember.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) remember.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ remember.texi remember.dvi: ${srcdir}/remember.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/remember.texi remember.pdf: ${srcdir}/remember.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/remember.texi -sasl : $(infodir)/sasl -$(infodir)/sasl: sasl.texi +sasl : $(infodir)/sasl$(INFO_EXT) +$(infodir)/sasl$(INFO_EXT): sasl.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) sasl.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ sasl.texi sasl.dvi: ${srcdir}/sasl.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/sasl.texi sasl.pdf: ${srcdir}/sasl.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/sasl.texi -sc : $(infodir)/sc -$(infodir)/sc: sc.texi +sc : $(infodir)/sc$(INFO_EXT) +$(infodir)/sc$(INFO_EXT): sc.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) sc.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ sc.texi sc.dvi: ${srcdir}/sc.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/sc.texi sc.pdf: ${srcdir}/sc.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/sc.texi -semantic : $(infodir)/semantic -$(infodir)/semantic: semantic.texi sem-user.texi +semantic : $(infodir)/semantic$(INFO_EXT) +$(infodir)/semantic$(INFO_EXT): semantic.texi sem-user.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) semantic.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ semantic.texi semantic.dvi: ${srcdir}/semantic.texi sem-user.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/semantic.texi semantic.pdf: ${srcdir}/semantic.texi sem-user.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/semantic.texi -ses : $(infodir)/ses -$(infodir)/ses: ses.texi +ses : $(infodir)/ses$(INFO_EXT) +$(infodir)/ses$(INFO_EXT): ses.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) ses.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ses.texi ses.dvi: ${srcdir}/ses.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/ses.texi ses.pdf: ${srcdir}/ses.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/ses.texi -sieve : $(infodir)/sieve -$(infodir)/sieve: sieve.texi +sieve : $(infodir)/sieve$(INFO_EXT) +$(infodir)/sieve$(INFO_EXT): sieve.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) sieve.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ sieve.texi sieve.dvi: ${srcdir}/sieve.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/sieve.texi sieve.pdf: ${srcdir}/sieve.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/sieve.texi -smtpmail : $(infodir)/smtpmail -$(infodir)/smtpmail: smtpmail.texi +smtpmail : $(infodir)/smtpmail$(INFO_EXT) +$(infodir)/smtpmail$(INFO_EXT): smtpmail.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) smtpmail.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ smtpmail.texi smtpmail.dvi: ${srcdir}/smtpmail.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/smtpmail.texi smtpmail.pdf: ${srcdir}/smtpmail.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/smtpmail.texi -speedbar : $(infodir)/speedbar -$(infodir)/speedbar: speedbar.texi +speedbar : $(infodir)/speedbar$(INFO_EXT) +$(infodir)/speedbar$(INFO_EXT): speedbar.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) speedbar.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ speedbar.texi speedbar.dvi: ${srcdir}/speedbar.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/speedbar.texi speedbar.pdf: ${srcdir}/speedbar.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/speedbar.texi -tramp : $(infodir)/tramp -$(infodir)/tramp: tramp.texi trampver.texi +tramp : $(infodir)/tramp$(INFO_EXT) +$(infodir)/tramp$(INFO_EXT): tramp.texi trampver.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) -D emacs tramp.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ -D emacs tramp.texi tramp.dvi: ${srcdir}/tramp.texi trampver.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/tramp.texi tramp.pdf: ${srcdir}/tramp.texi trampver.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/tramp.texi -url : $(infodir)/url -$(infodir)/url: url.texi +url : $(infodir)/url$(INFO_EXT) +$(infodir)/url$(INFO_EXT): url.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) url.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ url.texi url.dvi: ${srcdir}/url.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/url.texi url.pdf: ${srcdir}/url.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/url.texi -vip : $(infodir)/vip -$(infodir)/vip: vip.texi +vip : $(infodir)/vip$(INFO_EXT) +$(infodir)/vip$(INFO_EXT): vip.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) vip.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ vip.texi vip.dvi: ${srcdir}/vip.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/vip.texi vip.pdf: ${srcdir}/vip.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/vip.texi -viper : $(infodir)/viper -$(infodir)/viper: viper.texi +viper : $(infodir)/viper$(INFO_EXT) +$(infodir)/viper$(INFO_EXT): viper.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) viper.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ viper.texi viper.dvi: ${srcdir}/viper.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/viper.texi viper.pdf: ${srcdir}/viper.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/viper.texi -widget : $(infodir)/widget -$(infodir)/widget: widget.texi +widget : $(infodir)/widget$(INFO_EXT) +$(infodir)/widget$(INFO_EXT): widget.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) widget.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ widget.texi widget.dvi: ${srcdir}/widget.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/widget.texi widget.pdf: ${srcdir}/widget.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/widget.texi -woman : $(infodir)/woman -$(infodir)/woman: woman.texi +woman : $(infodir)/woman$(INFO_EXT) +$(infodir)/woman$(INFO_EXT): woman.texi $(mkinfodir) - cd $(srcdir); $(MAKEINFO) $(MAKEINFO_OPTS) woman.texi + cd $(srcdir); \ + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ woman.texi woman.dvi: ${srcdir}/woman.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/woman.texi woman.pdf: ${srcdir}/woman.texi diff --git a/doc/misc/makefile.w32-in b/doc/misc/makefile.w32-in index 0f81786cdb5..9e577c351b7 100644 --- a/doc/misc/makefile.w32-in +++ b/doc/misc/makefile.w32-in @@ -1,6 +1,6 @@ #### -*- Makefile -*- for documentation other than the Emacs manual. -# Copyright (C) 2003-2012 Free Software Foundation, Inc. +# Copyright (C) 2003-2012 Free Software Foundation, Inc. # This file is part of GNU Emacs. @@ -30,28 +30,31 @@ infodir = $(srcdir)/../../info ## Currently only used by efaq; could be added to MAKEINFO. emacsdir = $(srcdir)/../emacs +INFO_EXT=.info +INFO_OPTS=--no-split + # The makeinfo program is part of the Texinfo distribution. MAKEINFO = makeinfo MAKEINFO_OPTS = --force -I$(emacsdir) MULTI_INSTALL_INFO = $(srcdir)\..\..\nt\multi-install-info.bat -INFO_TARGETS = $(infodir)/ccmode \ - $(infodir)/cl $(infodir)/dbus $(infodir)/dired-x \ - $(infodir)/ediff $(infodir)/forms $(infodir)/gnus \ - $(infodir)/message $(infodir)/sieve $(infodir)/pgg \ - $(infodir)/emacs-mime $(infodir)/info $(infodir)/mh-e \ - $(infodir)/reftex $(infodir)/sc $(infodir)/vip \ - $(infodir)/viper $(infodir)/widget $(infodir)/efaq \ - $(infodir)/ada-mode $(infodir)/autotype $(infodir)/calc \ - $(infodir)/idlwave $(infodir)/eudc $(infodir)/ebrowse \ - $(infodir)/pcl-cvs $(infodir)/woman $(infodir)/eshell \ - $(infodir)/org $(infodir)/url $(infodir)/speedbar \ - $(infodir)/tramp $(infodir)/ses $(infodir)/smtpmail \ - $(infodir)/flymake $(infodir)/newsticker $(infodir)/rcirc \ - $(infodir)/erc $(infodir)/ert \ - $(infodir)/remember $(infodir)/nxml-mode \ - $(infodir)/epa $(infodir)/mairix-el $(infodir)/sasl \ - $(infodir)/auth $(infodir)/eieio $(infodir)/ede \ - $(infodir)/semantic $(infodir)/edt $(infodir)/emacs-gnutls +INFO_TARGETS = $(infodir)/ccmode$(INFO_EXT) \ + $(infodir)/cl$(INFO_EXT) $(infodir)/dbus$(INFO_EXT) $(infodir)/dired-x$(INFO_EXT) \ + $(infodir)/ediff$(INFO_EXT) $(infodir)/forms$(INFO_EXT) $(infodir)/gnus$(INFO_EXT) \ + $(infodir)/message$(INFO_EXT) $(infodir)/sieve$(INFO_EXT) $(infodir)/pgg$(INFO_EXT) \ + $(infodir)/emacs-mime$(INFO_EXT) $(infodir)/info$(INFO_EXT) $(infodir)/mh-e$(INFO_EXT) \ + $(infodir)/reftex$(INFO_EXT) $(infodir)/sc$(INFO_EXT) $(infodir)/vip$(INFO_EXT) \ + $(infodir)/viper$(INFO_EXT) $(infodir)/widget$(INFO_EXT) $(infodir)/efaq$(INFO_EXT) \ + $(infodir)/ada-mode$(INFO_EXT) $(infodir)/autotype$(INFO_EXT) $(infodir)/calc$(INFO_EXT) \ + $(infodir)/idlwave$(INFO_EXT) $(infodir)/eudc$(INFO_EXT) $(infodir)/ebrowse$(INFO_EXT) \ + $(infodir)/pcl-cvs$(INFO_EXT) $(infodir)/woman$(INFO_EXT) $(infodir)/eshell$(INFO_EXT) \ + $(infodir)/org$(INFO_EXT) $(infodir)/url$(INFO_EXT) $(infodir)/speedbar$(INFO_EXT) \ + $(infodir)/tramp$(INFO_EXT) $(infodir)/ses$(INFO_EXT) $(infodir)/smtpmail$(INFO_EXT) \ + $(infodir)/flymake$(INFO_EXT) $(infodir)/newsticker$(INFO_EXT) $(infodir)/rcirc$(INFO_EXT) \ + $(infodir)/erc$(INFO_EXT) $(infodir)/ert$(INFO_EXT) \ + $(infodir)/remember$(INFO_EXT) $(infodir)/nxml-mode$(INFO_EXT) \ + $(infodir)/epa$(INFO_EXT) $(infodir)/mairix-el$(INFO_EXT) $(infodir)/sasl$(INFO_EXT) \ + $(infodir)/auth$(INFO_EXT) $(infodir)/eieio$(INFO_EXT) $(infodir)/ede$(INFO_EXT) \ + $(infodir)/semantic$(INFO_EXT) $(infodir)/edt$(INFO_EXT) $(infodir)/emacs-gnutls$(INFO_EXT) DVI_TARGETS = calc.dvi cc-mode.dvi cl.dvi dbus.dvi dired-x.dvi \ ediff.dvi forms.dvi gnus.dvi message.dvi emacs-mime.dvi \ sieve.dvi pgg.dvi mh-e.dvi \ @@ -93,68 +96,68 @@ $(infodir)/dir: # Some Windows ports of makeinfo seem to require -o to come before the # texi filename, contrary to GNU standards. -$(infodir)/info: $(INFOSOURCES) - $(MAKEINFO) $(MAKEINFO_OPTS) --no-split -o $@ info.texi +$(infodir)/info$(INFO_EXT): $(INFOSOURCES) + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ info.texi info.dvi: $(INFOSOURCES) $(ENVADD) $(TEXI2DVI) $(srcdir)/info.texi -$(infodir)/ccmode: cc-mode.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) cc-mode.texi +$(infodir)/ccmode$(INFO_EXT): cc-mode.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ cc-mode.texi cc-mode.dvi: cc-mode.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/cc-mode.texi -$(infodir)/ada-mode: ada-mode.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) ada-mode.texi +$(infodir)/ada-mode$(INFO_EXT): ada-mode.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ada-mode.texi ada-mode.dvi: ada-mode.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/ada-mode.texi -$(infodir)/pcl-cvs: pcl-cvs.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) pcl-cvs.texi +$(infodir)/pcl-cvs$(INFO_EXT): pcl-cvs.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ pcl-cvs.texi pcl-cvs.dvi: pcl-cvs.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/pcl-cvs.texi -$(infodir)/eshell: eshell.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) eshell.texi +$(infodir)/eshell$(INFO_EXT): eshell.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ eshell.texi eshell.dvi: eshell.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/eshell.texi -$(infodir)/cl: cl.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) cl.texi +$(infodir)/cl$(INFO_EXT): cl.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ cl.texi cl.dvi: cl.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/cl.texi -$(infodir)/dbus: dbus.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) dbus.texi +$(infodir)/dbus$(INFO_EXT): dbus.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ dbus.texi dbus.dvi: dbus.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/dbus.texi -$(infodir)/dired-x: dired-x.texi $(emacsdir)/emacsver.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) dired-x.texi +$(infodir)/dired-x$(INFO_EXT): dired-x.texi $(emacsdir)/emacsver.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ dired-x.texi dired-x.dvi: dired-x.texi $(emacsdir)/emacsver.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/dired-x.texi -$(infodir)/ediff: ediff.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) ediff.texi +$(infodir)/ediff$(INFO_EXT): ediff.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ediff.texi ediff.dvi: ediff.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/ediff.texi -$(infodir)/flymake: flymake.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) flymake.texi +$(infodir)/flymake$(INFO_EXT): flymake.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ flymake.texi flymake.dvi: flymake.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/flymake.texi -$(infodir)/forms: forms.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) forms.texi +$(infodir)/forms$(INFO_EXT): forms.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ forms.texi forms.dvi: forms.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/forms.texi # gnus/message/emacs-mime/sieve/pgg are part of Gnus: -$(infodir)/gnus: gnus.texi gnus-overrides.texi message.texi emacs-mime.texi \ +$(infodir)/gnus$(INFO_EXT): gnus.texi gnus-overrides.texi message.texi emacs-mime.texi \ sieve.texi pgg.texi sasl.texi gnus-news.texi gnus-faq.texi \ doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) gnus.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ gnus.texi gnus.dvi: gnus.texi gnus-overrides.texi message.texi emacs-mime.texi \ sieve.texi pgg.texi sasl.texi gnus-news.texi gnus-faq.texi \ doclicense.texi @@ -163,195 +166,195 @@ gnus.dvi: gnus.texi gnus-overrides.texi message.texi emacs-mime.texi \ cp gnustmp.dvi $*.dvi rm gnustmp.* # -$(infodir)/message: message.texi gnus-overrides.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) message.texi +$(infodir)/message$(INFO_EXT): message.texi gnus-overrides.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ message.texi message.dvi: message.texi gnus-overrides.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/message.texi # -$(infodir)/emacs-mime: emacs-mime.texi gnus-overrides.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) --enable-encoding emacs-mime.texi +$(infodir)/emacs-mime$(INFO_EXT): emacs-mime.texi gnus-overrides.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ --enable-encoding emacs-mime.texi emacs-mime.dvi: emacs-mime.texi gnus-overrides.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/emacs-mime.texi # -$(infodir)/sieve: sieve.texi gnus-overrides.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) sieve.texi +$(infodir)/sieve$(INFO_EXT): sieve.texi gnus-overrides.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ sieve.texi sieve.dvi: sieve.texi gnus-overrides.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/sieve.texi # -$(infodir)/pgg: pgg.texi gnus-overrides.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) pgg.texi +$(infodir)/pgg$(INFO_EXT): pgg.texi gnus-overrides.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ pgg.texi pgg.dvi: pgg.texi gnus-overrides.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/pgg.texi -$(infodir)/mh-e: mh-e.texi doclicense.texi gpl.texi - $(MAKEINFO) $(MAKEINFO_OPTS) mh-e.texi +$(infodir)/mh-e$(INFO_EXT): mh-e.texi doclicense.texi gpl.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ mh-e.texi mh-e.dvi: mh-e.texi doclicense.texi gpl.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/mh-e.texi -$(infodir)/reftex: reftex.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) reftex.texi +$(infodir)/reftex$(INFO_EXT): reftex.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ reftex.texi reftex.dvi: reftex.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/reftex.texi -$(infodir)/remember: remember.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) remember.texi +$(infodir)/remember$(INFO_EXT): remember.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ remember.texi remember.dvi: remember.texi doclicense.texix $(ENVADD) $(TEXI2DVI) $(srcdir)/remember.texi -$(infodir)/sasl: sasl.texi gnus-overrides.texi - $(MAKEINFO) $(MAKEINFO_OPTS) sasl.texi +$(infodir)/sasl$(INFO_EXT): sasl.texi gnus-overrides.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ sasl.texi sasl.dvi: sasl.texi gnus-overrides.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/sasl.texi -$(infodir)/sc: sc.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) sc.texi +$(infodir)/sc$(INFO_EXT): sc.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ sc.texi sc.dvi: sc.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/sc.texi -$(infodir)/vip: vip.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) vip.texi +$(infodir)/vip$(INFO_EXT): vip.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ vip.texi vip.dvi: vip.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/vip.texi -$(infodir)/viper: viper.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) viper.texi +$(infodir)/viper$(INFO_EXT): viper.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ viper.texi viper.dvi: viper.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/viper.texi -$(infodir)/widget: widget.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) widget.texi +$(infodir)/widget$(INFO_EXT): widget.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ widget.texi widget.dvi: widget.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/widget.texi -$(infodir)/efaq: faq.texi $(emacsdir)/emacsver.texi - $(MAKEINFO) $(MAKEINFO_OPTS) faq.texi +$(infodir)/efaq$(INFO_EXT): faq.texi $(emacsdir)/emacsver.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ faq.texi faq.dvi: faq.texi $(emacsdir)/emacsver.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/faq.texi -$(infodir)/autotype: autotype.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) autotype.texi +$(infodir)/autotype$(INFO_EXT): autotype.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ autotype.texi autotype.dvi: autotype.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/autotype.texi -$(infodir)/calc: calc.texi $(emacsdir)/emacsver.texi gpl.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) calc.texi +$(infodir)/calc$(INFO_EXT): calc.texi $(emacsdir)/emacsver.texi gpl.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ calc.texi calc.dvi: calc.texi $(emacsdir)/emacsver.texi gpl.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/calc.texi # This is produced with --no-split to avoid making files whose # names clash on DOS 8+3 filesystems -$(infodir)/idlwave: idlwave.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) --no-split idlwave.texi +$(infodir)/idlwave$(INFO_EXT): idlwave.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ idlwave.texi idlwave.dvi: idlwave.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/idlwave.texi -$(infodir)/eudc: eudc.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) eudc.texi +$(infodir)/eudc$(INFO_EXT): eudc.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ eudc.texi eudc.dvi: eudc.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/eudc.texi -$(infodir)/ebrowse: ebrowse.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) ebrowse.texi +$(infodir)/ebrowse$(INFO_EXT): ebrowse.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ebrowse.texi ebrowse.dvi: ebrowse.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/ebrowse.texi -$(infodir)/woman: woman.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) woman.texi +$(infodir)/woman$(INFO_EXT): woman.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ woman.texi woman.dvi: woman.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/woman.texi -$(infodir)/speedbar: speedbar.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) speedbar.texi +$(infodir)/speedbar$(INFO_EXT): speedbar.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ speedbar.texi speedbar.dvi: speedbar.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/speedbar.texi -$(infodir)/tramp: tramp.texi trampver.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) tramp.texi +$(infodir)/tramp$(INFO_EXT): tramp.texi trampver.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ tramp.texi tramp.dvi: tramp.texi trampver.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/tramp.texi -$(infodir)/ses: ses.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) ses.texi +$(infodir)/ses$(INFO_EXT): ses.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ses.texi ses.dvi: ses.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/ses.texi -$(infodir)/smtpmail: smtpmail.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) smtpmail.texi +$(infodir)/smtpmail$(INFO_EXT): smtpmail.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ smtpmail.texi smtpmail.dvi: smtpmail.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/smtpmail.texi -$(infodir)/org: org.texi - $(MAKEINFO) $(MAKEINFO_OPTS) org.texi +$(infodir)/org$(INFO_EXT): org.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ org.texi org.dvi: org.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/org.texi -$(infodir)/url: url.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) url.texi +$(infodir)/url$(INFO_EXT): url.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ url.texi url.dvi: url.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/url.texi -$(infodir)/newsticker: newsticker.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) newsticker.texi +$(infodir)/newsticker$(INFO_EXT): newsticker.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ newsticker.texi newsticker.dvi: newsticker.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/newsticker.texi -$(infodir)/nxml-mode: nxml-mode.texi - $(MAKEINFO) $(MAKEINFO_OPTS) nxml-mode.texi +$(infodir)/nxml-mode$(INFO_EXT): nxml-mode.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ nxml-mode.texi nxml-mod.dvi: nxml-mode.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/nxml-mode.texi -$(infodir)/rcirc: rcirc.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) rcirc.texi +$(infodir)/rcirc$(INFO_EXT): rcirc.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ rcirc.texi rcirc.dvi: rcirc.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/rcirc.texi -$(infodir)/erc: erc.texi gpl.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) erc.texi +$(infodir)/erc$(INFO_EXT): erc.texi gpl.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ erc.texi erc.dvi: erc.texi gpl.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/erc.texi -$(infodir)/ert: ert.texi - $(MAKEINFO) $(MAKEINFO_OPTS) ert.texi +$(infodir)/ert$(INFO_EXT): ert.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ert.texi ert.dvi: ert.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/ert.texi -$(infodir)/epa: epa.texi - $(MAKEINFO) $(MAKEINFO_OPTS) epa.texi +$(infodir)/epa$(INFO_EXT): epa.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ epa.texi epa.dvi: epa.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/epa.texi -$(infodir)/mairix-el: mairix-el.texi - $(MAKEINFO) $(MAKEINFO_OPTS) mairix-el.texi +$(infodir)/mairix-el$(INFO_EXT): mairix-el.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ mairix-el.texi mairix-el.dvi: mairix-el.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/mairix-el.texi -$(infodir)/auth: auth.texi gnus-overrides.texi - $(MAKEINFO) $(MAKEINFO_OPTS) auth.texi +$(infodir)/auth$(INFO_EXT): auth.texi gnus-overrides.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ auth.texi auth.dvi: auth.texi gnus-overrides.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/auth.texi -$(infodir)/eieio: eieio.texi - $(MAKEINFO) $(MAKEINFO_OPTS) eieio.texi +$(infodir)/eieio$(INFO_EXT): eieio.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ eieio.texi eieio.dvi: eieio.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/eieio.texi -$(infodir)/ede: ede.texi - $(MAKEINFO) $(MAKEINFO_OPTS) ede.texi +$(infodir)/ede$(INFO_EXT): ede.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ede.texi ede.dvi: ede.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/ede.texi -$(infodir)/semantic: semantic.texi sem-user.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) semantic.texi +$(infodir)/semantic$(INFO_EXT): semantic.texi sem-user.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ semantic.texi semantic.dvi: semantic.texi sem-user.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/semantic.texi -$(infodir)/edt: edt.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) edt.texi +$(infodir)/edt$(INFO_EXT): edt.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ edt.texi edt.dvi: edt.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/edt.texi -$(infodir)/emacs-gnutls: emacs-gnutls.texi doclicense.texi - $(MAKEINFO) $(MAKEINFO_OPTS) emacs-gnutls.texi +$(infodir)/emacs-gnutls$(INFO_EXT): emacs-gnutls.texi doclicense.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ emacs-gnutls.texi emacs-gnutls.dvi: emacs-gnutls.texi doclicense.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/emacs-gnutls.texi From cfed8eeb2f47d9409042d1206243de50f8f10a1f Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 4 May 2012 00:04:40 -0700 Subject: [PATCH 331/564] * elisp.texi (DATE): Forgot to change the month in 2012-04-21 change. --- doc/lispref/ChangeLog | 4 ++++ doc/lispref/elisp.texi | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 58508adb899..f0e63278a77 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,7 @@ +2012-05-04 Glenn Morris + + * elisp.texi (DATE): Forgot to change the month in 2012-04-21 change. + 2012-05-01 Glenn Morris * elisp.texi (@copying): diff --git a/doc/lispref/elisp.texi b/doc/lispref/elisp.texi index cbec93c4f6c..5e0356ff1ff 100644 --- a/doc/lispref/elisp.texi +++ b/doc/lispref/elisp.texi @@ -9,7 +9,7 @@ @c (See comments for EDITION in emacs.texi) @set VERSION 3.1 @include emacsver.texi -@set DATE July 2012 +@set DATE May 2012 @c in general, keep the following line commented out, unless doing a @c copy of this manual that will be published. The manual should go From 2da3a0d23237c86aa3fdfbf8172ee8fcd9ae7555 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 4 May 2012 00:14:51 -0700 Subject: [PATCH 332/564] Small edits for lispref/intro.texi * intro.texi (Caveats): Copyedit. (Lisp History): Convert inforef to xref. (Lisp History, Printing Notation, Version Info): Improve page-breaks. --- doc/lispref/ChangeLog | 4 ++++ doc/lispref/intro.texi | 10 ++++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index f0e63278a77..a0df74bf3bc 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,5 +1,9 @@ 2012-05-04 Glenn Morris + * intro.texi (Caveats): Copyedit. + (Lisp History): Convert inforef to xref. + (Lisp History, Printing Notation, Version Info): Improve page-breaks. + * elisp.texi (DATE): Forgot to change the month in 2012-04-21 change. 2012-05-01 Glenn Morris diff --git a/doc/lispref/intro.texi b/doc/lispref/intro.texi index 2e678e02158..c221286fece 100644 --- a/doc/lispref/intro.texi +++ b/doc/lispref/intro.texi @@ -74,7 +74,7 @@ real-life example for a function or group of functions, please make an effort to write it up and send it in. Please reference any comments to the chapter name, section name, and function name, as appropriate, since page numbers and chapter and section numbers will change and we may have -trouble finding the text you are talking about. Also state the number +trouble finding the text you are talking about. Also state the version of the edition you are criticizing. @end iftex @ifnottex @@ -121,10 +121,10 @@ worry about it; this manual is self-contained. @pindex cl A certain amount of Common Lisp emulation is available via the -@file{cl} library. @inforef{Top, Overview, cl}. +@file{cl} library. @xref{Top,, Overview, cl, Common Lisp Extensions}. Emacs Lisp is not at all influenced by Scheme; but the GNU project has -an implementation of Scheme, called Guile. We use Guile in all new GNU +an implementation of Scheme, called Guile. We use it in all new GNU software that calls for extensibility. @node Conventions @@ -258,7 +258,7 @@ displayed in the echo area. Examples in this manual indicate printed text with @samp{@print{}}, irrespective of where that text goes. The value returned by -evaluating the form (here @code{bar}) follows on a separate line with +evaluating the form follows on a separate line with @samp{@result{}}. @example @@ -511,8 +511,6 @@ numeric components, such as @code{"22.0.91.1"}, indicates an unreleased test version. @end defvar - The following two variables have existed since Emacs version 19.23: - @defvar emacs-major-version The major version number of Emacs, as an integer. For Emacs version 23.1, the value is 23. From 06793fea52fe5fddd86708121b77ff6d81d4fe02 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 4 May 2012 00:24:02 -0700 Subject: [PATCH 333/564] * objects.texi (Process Type, Overlay Type): Tweak page-breaks. --- doc/lispref/ChangeLog | 2 ++ doc/lispref/objects.texi | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index a0df74bf3bc..2e5d2526261 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,5 +1,7 @@ 2012-05-04 Glenn Morris + * objects.texi (Process Type, Overlay Type): Tweak page-breaks. + * intro.texi (Caveats): Copyedit. (Lisp History): Convert inforef to xref. (Lisp History, Printing Notation, Version Info): Improve page-breaks. diff --git a/doc/lispref/objects.texi b/doc/lispref/objects.texi index cc451f82629..64cd4a12392 100644 --- a/doc/lispref/objects.texi +++ b/doc/lispref/objects.texi @@ -1568,7 +1568,6 @@ runs in a process of this sort. However, in Emacs Lisp, a process is a Lisp object that designates a subprocess created by the Emacs process. Programs such as shells, GDB, ftp, and compilers, running in subprocesses of Emacs, extend the capabilities of Emacs. - An Emacs subprocess takes textual input from Emacs and returns textual output to Emacs for further manipulation. Emacs can also send signals to the subprocess. @@ -1632,7 +1631,7 @@ buffer temporarily in a different display style. Overlays have no read syntax, and print in hash notation, giving the buffer name and range of positions. - @xref{Overlays}, for how to create and use overlays. + @xref{Overlays}, for information on how you can create and use overlays. @node Font Type @subsection Font Type From 50f0084172dfb1ec62c5ef6e2c174fad8898a83d Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 4 May 2012 00:27:29 -0700 Subject: [PATCH 334/564] A belated farewell to documenting Emacs 18 features * commands.texi (Event Input Misc): Don't mention unread-command-char. * numbers.texi (Predicates on Numbers): Don't mention Emacs 18. --- doc/lispref/ChangeLog | 3 +++ doc/lispref/commands.texi | 2 ++ doc/lispref/numbers.texi | 2 -- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 2e5d2526261..65452bf6585 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,5 +1,8 @@ 2012-05-04 Glenn Morris + * commands.texi (Event Input Misc): Don't mention unread-command-char. + * numbers.texi (Predicates on Numbers): Don't mention Emacs 18. + * objects.texi (Process Type, Overlay Type): Tweak page-breaks. * intro.texi (Caveats): Copyedit. diff --git a/doc/lispref/commands.texi b/doc/lispref/commands.texi index b96d5878124..ec5a95a3f3b 100644 --- a/doc/lispref/commands.texi +++ b/doc/lispref/commands.texi @@ -2704,6 +2704,7 @@ This function converts the string or vector @var{key} to a list of individual events, which you can put in @code{unread-command-events}. @end defun +@ignore @defvar unread-command-char This variable holds a character to be read as command input. A value of -1 means ``empty''. @@ -2712,6 +2713,7 @@ This variable is mostly obsolete now that you can use @code{unread-command-events} instead; it exists only to support programs written for Emacs versions 18 and earlier. @end defvar +@end ignore @defun input-pending-p @cindex waiting for command key input diff --git a/doc/lispref/numbers.texi b/doc/lispref/numbers.texi index 5973137e587..7019fdde172 100644 --- a/doc/lispref/numbers.texi +++ b/doc/lispref/numbers.texi @@ -268,8 +268,6 @@ its argument. See also @code{integer-or-marker-p} and @defun floatp object This predicate tests whether its argument is a floating point number and returns @code{t} if so, @code{nil} otherwise. - -@code{floatp} does not exist in Emacs versions 18 and earlier. @end defun @defun integerp object From cd8d025346952ffdf316b93e04267946a494e353 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 4 May 2012 00:29:52 -0700 Subject: [PATCH 335/564] * text.texi (Auto Filling): Don't mention Emacs 19. --- doc/lispref/ChangeLog | 2 ++ doc/lispref/text.texi | 6 ------ 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 65452bf6585..9aeefb42157 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,5 +1,7 @@ 2012-05-04 Glenn Morris + * text.texi (Auto Filling): Don't mention Emacs 19. + * commands.texi (Event Input Misc): Don't mention unread-command-char. * numbers.texi (Predicates on Numbers): Don't mention Emacs 18. diff --git a/doc/lispref/text.texi b/doc/lispref/text.texi index bc65e314da0..3e9135a7d81 100644 --- a/doc/lispref/text.texi +++ b/doc/lispref/text.texi @@ -1800,12 +1800,6 @@ special is done in that case. The value of @code{auto-fill-function} is @code{do-auto-fill} when Auto-Fill mode is enabled. That is a function whose sole purpose is to implement the usual strategy for breaking a line. - -@quotation -In older Emacs versions, this variable was named @code{auto-fill-hook}, -but since it is not called with the standard convention for hooks, it -was renamed to @code{auto-fill-function} in version 19. -@end quotation @end defvar @defvar normal-auto-fill-function From 8d8d67aee8c9a21269ff2d5185daead8ce495072 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 4 May 2012 00:38:33 -0700 Subject: [PATCH 336/564] Small edits for doc/lispref/lists.texi * lists.texi (List-related Predicates, List Variables): Tweak page-breaks. (Sets And Lists): Convert inforef to xref. --- doc/lispref/ChangeLog | 4 ++++ doc/lispref/lists.texi | 7 +++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 9aeefb42157..2cb961cab55 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,5 +1,9 @@ 2012-05-04 Glenn Morris + * lists.texi (List-related Predicates, List Variables): + Tweak page-breaks. + (Sets And Lists): Convert inforef to xref. + * text.texi (Auto Filling): Don't mention Emacs 19. * commands.texi (Event Input Misc): Don't mention unread-command-char. diff --git a/doc/lispref/lists.texi b/doc/lispref/lists.texi index 68ec888b7e1..a894d93a4a0 100644 --- a/doc/lispref/lists.texi +++ b/doc/lispref/lists.texi @@ -88,7 +88,7 @@ structure made out of cons cells as a @dfn{list structure}. whether it is a cons cell or is a list, or whether it is the distinguished object @code{nil}. (Many of these predicates can be defined in terms of the others, but they are used so often that it is -worth having all of them.) +worth having them.) @defun consp object This function returns @code{t} if @var{object} is a cons cell, @code{nil} @@ -764,8 +764,7 @@ if it already has one; otherwise, it is equivalent to @code{nil}. The argument @var{symbol} is not implicitly quoted; @code{add-to-ordered-list} is an ordinary function, like @code{set} -and unlike @code{setq}. Quote the argument yourself if that is what -you want. +and unlike @code{setq}. Quote the argument yourself if necessary. The ordering information is stored in a hash table on @var{symbol}'s @code{list-order} property. @@ -1270,7 +1269,7 @@ functions for sets include @code{memq} and @code{delq}, and their @b{Common Lisp note:} Common Lisp has functions @code{union} (which avoids duplicate elements) and @code{intersection} for set operations. Although standard GNU Emacs Lisp does not have them, the @file{cl} -library provides versions. @inforef{Top, Overview, cl}. +library provides versions. @xref{Top,, Overview, cl, Common Lisp Extensions}. @end quotation @defun memq object list From 141d074d9e4543637b42838298a0ac1f28f6a25b Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 4 May 2012 06:17:30 -0400 Subject: [PATCH 337/564] Auto-commit of generated files. --- autogen/Makefile.in | 2 ++ autogen/configure | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/autogen/Makefile.in b/autogen/Makefile.in index 0fa0710d725..b28bf208694 100644 --- a/autogen/Makefile.in +++ b/autogen/Makefile.in @@ -473,6 +473,8 @@ IMAGEMAGICK_CFLAGS = @IMAGEMAGICK_CFLAGS@ IMAGEMAGICK_LIBS = @IMAGEMAGICK_LIBS@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ +INFO_EXT = @INFO_EXT@ +INFO_OPTS = @INFO_OPTS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_INFO = @INSTALL_INFO@ diff --git a/autogen/configure b/autogen/configure index c207cff105e..a8c8e657a44 100755 --- a/autogen/configure +++ b/autogen/configure @@ -1182,6 +1182,8 @@ UNEXEC_OBJ C_SWITCH_MACHINE LD_SWITCH_SYSTEM CANNOT_DUMP +INFO_OPTS +INFO_EXT HAVE_MAKEINFO GZIP_PROG INSTALL_INFO @@ -8238,6 +8240,11 @@ with the \`--without-makeinfo' option to build without the manuals. " "$LINENO" fi +INFO_EXT=.info +INFO_OPTS=--no-split + + + if test x$GCC = xyes; then test "x$GCC_LINK_TEST_OPTIONS" != x && \ From f16e53860f281bc6677c2835d5b0225831a41739 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Fri, 4 May 2012 18:23:00 +0800 Subject: [PATCH 338/564] * select.el (xselect--encode-string): Always use utf-8 for TEXT on Nextstep. --- lisp/ChangeLog | 5 +++++ lisp/select.el | 42 ++++++++++++++++++++++++------------------ 2 files changed, 29 insertions(+), 18 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ae273d9d610..dbbb2fb4c76 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-05-04 Chong Yidong + + * select.el (xselect--encode-string): Always use utf-8 for TEXT on + Nextstep. + 2012-04-30 Eli Zaretskii * mail/rmail.el (rmail-yank-current-message): Use the encoding of diff --git a/lisp/select.el b/lisp/select.el index 3948fcc5456..d3153a0ce0e 100644 --- a/lisp/select.el +++ b/lisp/select.el @@ -228,24 +228,30 @@ two markers or an overlay. Otherwise, it is nil." ;; But avoid modifying the string if it's a buffer name etc. (unless can-modify (setq str (substring str 0))) (remove-text-properties 0 (length str) '(composition nil) str) - ;; TEXT is a polymorphic target. Select the actual type - ;; from `UTF8_STRING', `COMPOUND_TEXT', `STRING', and - ;; `C_STRING'. - (if (eq type 'TEXT) - (if (not (multibyte-string-p str)) - (setq type 'C_STRING) - (let (non-latin-1 non-unicode eight-bit) - (mapc #'(lambda (x) - (if (>= x #x100) - (if (< x #x110000) - (setq non-latin-1 t) - (if (< x #x3FFF80) - (setq non-unicode t) - (setq eight-bit t))))) - str) - (setq type (if non-unicode 'COMPOUND_TEXT - (if non-latin-1 'UTF8_STRING - (if eight-bit 'C_STRING 'STRING))))))) + ;; For X selections, TEXT is a polymorphic target; choose + ;; the actual type from `UTF8_STRING', `COMPOUND_TEXT', + ;; `STRING', and `C_STRING'. On Nextstep, always use UTF-8 + ;; (see ns_string_to_pasteboard_internal in nsselect.m). + (when (eq type 'TEXT) + (cond + ((featurep 'ns) + (setq type 'UTF8_STRING)) + ((not (multibyte-string-p str)) + (setq type 'C_STRING)) + (t + (let (non-latin-1 non-unicode eight-bit) + (mapc #'(lambda (x) + (if (>= x #x100) + (if (< x #x110000) + (setq non-latin-1 t) + (if (< x #x3FFF80) + (setq non-unicode t) + (setq eight-bit t))))) + str) + (setq type (if non-unicode 'COMPOUND_TEXT + (if non-latin-1 'UTF8_STRING + (if eight-bit 'C_STRING + 'STRING)))))))) (cond ((eq type 'UTF8_STRING) (if (or (not coding) From e59fb960ee3bacf937cab11b1b23e6c7389de3ed Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Fri, 4 May 2012 18:26:36 +0800 Subject: [PATCH 339/564] Backport fix for Bug#11282 from trunk --- lisp/ChangeLog | 6 ++++++ lisp/mail/rmailmm.el | 48 ++++++++++++++++++++++++++++---------------- 2 files changed, 37 insertions(+), 17 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index dbbb2fb4c76..ff08f0681aa 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -3,6 +3,12 @@ * select.el (xselect--encode-string): Always use utf-8 for TEXT on Nextstep. +2012-05-03 Kenichi Handa + + * mail/rmailmm.el (rmail-show-mime): Catch an error caused by text + decoding, and show a warning message without signalling an error + (Bug#11282). + 2012-04-30 Eli Zaretskii * mail/rmail.el (rmail-yank-current-message): Use the encoding of diff --git a/lisp/mail/rmailmm.el b/lisp/mail/rmailmm.el index 9adc5eb9a06..67b2e62275f 100644 --- a/lisp/mail/rmailmm.el +++ b/lisp/mail/rmailmm.el @@ -1300,26 +1300,40 @@ The arguments ARG and STATE have no effect in this case." (rmail-mime-mbox-buffer rmail-buffer) (rmail-mime-view-buffer rmail-view-buffer) (rmail-mime-coding-system nil)) + ;; If ENTITY is not a vector, it is a string describing an error. (if (vectorp entity) (with-current-buffer rmail-mime-view-buffer (erase-buffer) - (rmail-mime-insert entity) - (if (consp rmail-mime-coding-system) - ;; Decoding is done by rfc2047-decode-region only for a - ;; header. But, as the used coding system may have been - ;; overridden by mm-charset-override-alist, we can't - ;; trust (car rmail-mime-coding-system). So, here we - ;; try the decoding again with mm-charset-override-alist - ;; bound to nil. - (let ((mm-charset-override-alist nil)) - (setq rmail-mime-coding-system - (rmail-mime-find-header-encoding - (rmail-mime-entity-header entity))))) - (set-buffer-file-coding-system - (if rmail-mime-coding-system - (coding-system-base rmail-mime-coding-system) - 'undecided) - t t)) + ;; This condition-case is for catching an error in the + ;; internal MIME decoding (e.g. incorrect BASE64 form) that + ;; may be signaled by rmail-mime-insert. + ;; FIXME: The current code doesn't set a proper error symbol + ;; in ERR. We must find a way to propagate a correct error + ;; symbol that is caused in the very deep code of text + ;; decoding (e.g. an error by base64-decode-region called by + ;; post-read-conversion function of utf-7). + (condition-case err + (progn + (rmail-mime-insert entity) + (if (consp rmail-mime-coding-system) + ;; Decoding is done by rfc2047-decode-region only for a + ;; header. But, as the used coding system may have been + ;; overridden by mm-charset-override-alist, we can't + ;; trust (car rmail-mime-coding-system). So, here we + ;; try the decoding again with mm-charset-override-alist + ;; bound to nil. + (let ((mm-charset-override-alist nil)) + (setq rmail-mime-coding-system + (rmail-mime-find-header-encoding + (rmail-mime-entity-header entity))))) + (set-buffer-file-coding-system + (if rmail-mime-coding-system + (coding-system-base rmail-mime-coding-system) + 'undecided) + t t)) + (error (setq entity (format "%s" err)))))) + ;; Re-check ENTITY. It may be set to an error string. + (when (stringp entity) ;; Decoding failed. ENTITY is an error message. Insert the ;; original message body as is, and show warning. (let ((region (with-current-buffer rmail-mime-mbox-buffer From 9824f5052394817ac65302d42a7c97841593e19e Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 4 May 2012 07:17:28 -0400 Subject: [PATCH 340/564] Auto-commit of loaddefs files. --- lisp/mail/rmail.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el index d70e578a0fa..f8e7b405b96 100644 --- a/lisp/mail/rmail.el +++ b/lisp/mail/rmail.el @@ -4572,7 +4572,7 @@ With prefix argument N moves forward N messages with these labels. ;;;*** -;;;### (autoloads (rmail-mime) "rmailmm" "rmailmm.el" "be7f4b94a269f840b8707defd515c4f9") +;;;### (autoloads (rmail-mime) "rmailmm" "rmailmm.el" "cd7656f82944d0b92b0d093a5f3a4c36") ;;; Generated autoloads from rmailmm.el (autoload 'rmail-mime "rmailmm" "\ From 8a61ee2295b4bac5a199e011f5d927dc99f09c54 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Fri, 4 May 2012 15:14:42 -0400 Subject: [PATCH 341/564] * lisp/files.el (automount-dir-prefix): Mark as obsolete. --- etc/NEWS | 2 ++ lisp/ChangeLog | 4 ++++ lisp/files.el | 1 + 3 files changed, 7 insertions(+) diff --git a/etc/NEWS b/etc/NEWS index 6b82eaa1f7a..71e6bce9b7a 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -212,6 +212,8 @@ table, but with a different prefix. *** `current-time-string' no longer requires that its argument's year must be in the range 1000..9999. It now works with any year supported by the underlying C implementation. + +** `automount-dir-prefix' is obsolete. * Changes in Emacs 24.2 on non-free operating systems diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 14e96c88b53..a0e3398ebe1 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-05-04 Stefan Monnier + + * files.el (automount-dir-prefix): Mark as obsolete. + 2012-05-04 Glenn Morris * patcomp.el, play/bruce.el: Move to obsolete/. diff --git a/lisp/files.el b/lisp/files.el index 96a5b40e791..ee455f4bf42 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -1627,6 +1627,7 @@ Choose the buffer's name using `generate-new-buffer-name'." "Regexp to match the automounter prefix in a directory name." :group 'files :type 'regexp) +(make-obsolete-variable 'automount-dir-prefix 'directory-abbrev-alist "24.2") (defvar abbreviated-home-dir nil "The user's homedir abbreviated according to `directory-abbrev-alist'.") From 66408d1e522d39df85b597cf086a7a6570b2f424 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Fri, 4 May 2012 15:17:01 -0400 Subject: [PATCH 342/564] * lisp/dabbrev.el (dabbrev--ignore-case-p): New function. (dabbrev-completion, dabbrev-expand, dabbrev--substitute-expansion): Use it. --- lisp/ChangeLog | 4 ++++ lisp/dabbrev.el | 26 ++++++++++---------------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index a0e3398ebe1..0c5c2050754 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,9 @@ 2012-05-04 Stefan Monnier + * dabbrev.el (dabbrev--ignore-case-p): New function. + (dabbrev-completion, dabbrev-expand, dabbrev--substitute-expansion): + Use it. + * files.el (automount-dir-prefix): Mark as obsolete. 2012-05-04 Glenn Morris diff --git a/lisp/dabbrev.el b/lisp/dabbrev.el index c5b370bfa61..c169e07ac30 100644 --- a/lisp/dabbrev.el +++ b/lisp/dabbrev.el @@ -361,6 +361,13 @@ this list." ;;??? Do we want this? ;;;###autoload (define-key esc-map [?\C-/] 'dabbrev-completion) +(defun dabbrev--ignore-case-p (abbrev) + (and (if (eq dabbrev-case-fold-search 'case-fold-search) + case-fold-search + dabbrev-case-fold-search) + (or (not dabbrev-upcase-means-case-search) + (string= abbrev (downcase abbrev))))) + ;;;###autoload (defun dabbrev-completion (&optional arg) "Completion on current word. @@ -381,12 +388,7 @@ then it searches *all* buffers." (abbrev (dabbrev--abbrev-at-point)) (beg (progn (search-backward abbrev) (point))) (end (progn (search-forward abbrev) (point))) - (ignore-case-p - (and (if (eq dabbrev-case-fold-search 'case-fold-search) - case-fold-search - dabbrev-case-fold-search) - (or (not dabbrev-upcase-means-case-search) - (string= abbrev (downcase abbrev))))) + (ignore-case-p (dabbrev--ignore-case-p abbrev)) (list 'uninitialized) (table (lambda (s p a) @@ -514,11 +516,7 @@ See also `dabbrev-abbrev-char-regexp' and \\[dabbrev-completion]." (setq expansion (dabbrev--find-expansion abbrev direction - (and (if (eq dabbrev-case-fold-search 'case-fold-search) - case-fold-search - dabbrev-case-fold-search) - (or (not dabbrev-upcase-means-case-search) - (string= abbrev (downcase abbrev)))))))) + (dabbrev--ignore-case-p abbrev))))) (cond ((not expansion) (dabbrev--reset-global-variables) @@ -820,11 +818,7 @@ RECORD-CASE-PATTERN, if non-nil, means set `dabbrev--last-case-pattern' to record whether we upcased the expansion, downcased it, or did neither." ;;(undo-boundary) (let ((use-case-replace - (and (if (eq dabbrev-case-fold-search 'case-fold-search) - case-fold-search - dabbrev-case-fold-search) - (or (not dabbrev-upcase-means-case-search) - (string= abbrev (downcase abbrev))) + (and (dabbrev--ignore-case-p abbrev) (if (eq dabbrev-case-replace 'case-replace) case-replace dabbrev-case-replace)))) From 956cceb9b1ffb4117fd1ad556e782de281ee68e3 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 4 May 2012 16:53:03 -0400 Subject: [PATCH 343/564] * doc/misc/Makefile.in (info): Make it the first target again. --- doc/misc/Makefile.in | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/misc/Makefile.in b/doc/misc/Makefile.in index ed1c497c25e..83bc2d7bf33 100644 --- a/doc/misc/Makefile.in +++ b/doc/misc/Makefile.in @@ -215,12 +215,13 @@ mkinfodir = @cd ${srcdir}; test -d ${infodir} || mkdir ${infodir} || test -d ${i .PHONY: info dvi pdf echo-info +# Default. +info: $(INFO_TARGETS) + ## Used by top-level Makefile. echo-info: @echo $(INFO_TARGETS) | sed 's|[^ ]*/||g' -info: $(INFO_TARGETS) - # please modify this for all the web manual targets webhack: clean $(MAKE) pdf MAKEINFO_OPTS="-DWEBHACKDEVEL $(MAKEINFO_OPTS)" From 71873e2b335b721e0b3c585e88211c9564f4c743 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Fri, 4 May 2012 19:16:47 -0400 Subject: [PATCH 344/564] Add new error and function `user-error'. * lisp/subr.el (user-error): New function. * lisp/window.el (switch-to-buffer): * lisp/vc/smerge-mode.el (smerge-resolve-function, smerge-resolve) (smerge-match-conflict): * lisp/simple.el (previous-matching-history-element) (next-matching-history-element, goto-history-element, undo-more) (undo-start): * lisp/progmodes/etags.el (visit-tags-table-buffer, find-tag-tag) (find-tag-noselect, find-tag-in-order, etags-goto-tag-location) (next-file, tags-loop-scan, list-tags, complete-tag): * lisp/progmodes/compile.el (compilation-loop): * lisp/mouse.el (mouse-minibuffer-check): * lisp/man.el (Man-bgproc-sentinel, Man-goto-page): * lisp/info.el (Info-find-node-2, Info-extract-pointer, Info-history-back) (Info-history-forward, Info-follow-reference, Info-menu) (Info-extract-menu-item, Info-extract-menu-counting) (Info-forward-node, Info-backward-node, Info-next-menu-item) (Info-last-menu-item, Info-next-preorder, Info-last-preorder) (Info-next-reference, Info-prev-reference, Info-index) (Info-index-next, Info-follow-nearest-node) (Info-copy-current-node-name): * lisp/imenu.el (imenu--make-index-alist) (imenu-default-create-index-function, imenu-add-to-menubar): * lisp/files.el (basic-save-buffer, recover-file): * lisp/emacs-lisp/easy-mmode.el (easy-mmode-define-navigation): * lisp/emacs-lisp/checkdoc.el (checkdoc-continue, checkdoc-comments) (checkdoc-message-text, checkdoc-defun): * lisp/dabbrev.el (dabbrev-completion, dabbrev--abbrev-at-point): * lisp/cus-edit.el (customize-changed-options, customize-rogue) (customize-saved, custom-variable-set, custom-variable-mark-to-save) (custom-variable-mark-to-reset-standard) (custom-variable-reset-backup, custom-face-mark-to-reset-standard) (custom-file): * lisp/completion.el (check-completion-length): * lisp/comint.el (comint-search-arg) (comint-previous-matching-input-string-position) (comint-previous-matching-input) (comint-replace-by-expanded-history-before-point, comint-send-input) (comint-copy-old-input, comint-backward-matching-input) (comint-goto-process-mark, comint-set-process-mark): * lisp/calendar/calendar.el (calendar-cursor-to-date): Use it. * lisp/bindings.el (debug-ignored-errors): Remove regexps, add `user-error'. * src/data.c (PUT_ERROR): New macro. (syms_of_data): Use it. Add new error type `user-error'. * src/undo.c (user_error): New function. (Fprimitive_undo): Use it. * src/print.c (print_error_message): Adjust print style for `user-error'. * src/keyboard.c (user_error): New function. (Fexit_recursive_edit, Fabort_recursive_edit): Use it. --- doc/emacs/ChangeLog | 90 ++++++++++---------- etc/NEWS | 1 + lisp/ChangeLog | 45 ++++++++++ lisp/bindings.el | 19 +---- lisp/calendar/calendar.el | 4 +- lisp/comint.el | 28 +++---- lisp/completion.el | 8 +- lisp/cus-edit.el | 35 +++----- lisp/dabbrev.el | 17 ++-- lisp/emacs-lisp/checkdoc.el | 33 +++----- lisp/emacs-lisp/easy-mmode.el | 6 +- lisp/files.el | 4 +- lisp/imenu.el | 14 +--- lisp/info.el | 74 +++++++---------- lisp/man.el | 9 +- lisp/mouse.el | 2 +- lisp/progmodes/compile.el | 7 +- lisp/progmodes/etags.el | 56 +++++-------- lisp/simple.el | 28 +++---- lisp/subr.el | 11 +++ lisp/vc/smerge-mode.el | 9 +- lisp/window.el | 4 +- src/ChangeLog | 14 +++- src/data.c | 152 +++++++++------------------------- src/fileio.c | 10 +-- src/keyboard.c | 10 ++- src/lisp.h | 2 +- src/print.c | 40 +++++---- src/undo.c | 15 +++- 29 files changed, 329 insertions(+), 418 deletions(-) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index a2bae546f1c..a6d9ea6a8bc 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -438,7 +438,7 @@ 2012-01-09 Chong Yidong - * custom.texi (Custom Themes): Switched custom-safe-themes to use + * custom.texi (Custom Themes): Switch custom-safe-themes to use SHA-256. 2012-01-07 Chong Yidong @@ -455,8 +455,8 @@ (Screen Garbled): Don't refer to terminal "manufacturers". (Total Frustration): Node deleted. Eliza is documented in Amusements now. - (Known Problems): More info about using the bug tracker. Mention - debbugs package. + (Known Problems): More info about using the bug tracker. + Mention debbugs package. (Bug Criteria): Copyedits. (Understanding Bug Reporting): Mention emacs -Q. @@ -519,8 +519,8 @@ Document browse-url-mailto-function. (Goto Address mode): Add index entries. Add xref to Browse-URL. (FFAP): FFAP is not a minor mode. - (Amusements): M-x lm was renamed to M-x landmark. Document - nato-region. + (Amusements): M-x lm was renamed to M-x landmark. + Document nato-region. 2012-01-01 Chong Yidong @@ -558,8 +558,8 @@ 2011-12-26 Chong Yidong - * dired.texi (Dired Enter, Misc Dired Features): Document - dired-use-ls-dired changes. Mention quit-window. + * dired.texi (Dired Enter, Misc Dired Features): + Document dired-use-ls-dired changes. Mention quit-window. (Dired Navigation): Add index entries. (Dired Visiting): Fix View Mode xref. (Marks vs Flags): Prefer C-/ binding for undo. @@ -602,8 +602,8 @@ * vc1-xtra.texi (Version Headers): Note that these are for Subversion, CVS, etc. only. - (General VC Options): De-document vc-keep-workfiles. Fix - RCS-isms. + (General VC Options): De-document vc-keep-workfiles. + Fix RCS-isms. 2011-12-22 Eli Zaretskii @@ -619,8 +619,8 @@ * vc1-xtra.texi (Remote Repositories): Update introduction. (Local Version Control): Node deleted (obsolete with DVCSes). - (Remote Repositories, Version Backups): Node deleted. Move - documentation of vc-cvs-stay-local to CVS Options. + (Remote Repositories, Version Backups): Node deleted. + Move documentation of vc-cvs-stay-local to CVS Options. (CVS Options): Reduce verbosity of description of obscure CVS locking feature. (Making Revision Tags, Revision Tag Caveats): Merge into Revision @@ -673,11 +673,11 @@ less CVS-specific. (VC With A Merging VCS, VC With A Locking VCS): Add xref to Registering node. - (Secondary VC Commands): Deleted. Promote subnodes. + (Secondary VC Commands): Delete. Promote subnodes. (Log Buffer): Add command name for C-c C-c. Fix the name of the log buffer. Add index entries. - (VCS Changesets, Types of Log File, VC With A Merging VCS): Use - "commit" terminology. + (VCS Changesets, Types of Log File, VC With A Merging VCS): + Use "commit" terminology. (Old Revisions): Move it to just before VC Change Log. "Tag" here doesn't refer to tags tables. Note other possible forms of the revision ID. C-x v = does not save. @@ -702,8 +702,8 @@ (Lisp Eval): Note that listed commands are available globally. Explain the meaning of "defun" in the C-M-x context. (Lisp Interaction): Copyedits. - (External Lisp): Fix name of inferior Lisp buffer. Mention - Scheme. + (External Lisp): Fix name of inferior Lisp buffer. + Mention Scheme. (Compilation): Define "inferior process". 2011-12-10 Eli Zaretskii @@ -718,8 +718,8 @@ (Compilation Mode): Add xref for grep, occur, and mouse references. Define "locus". (Grep Searching): Use @command. - (Debuggers, Commands of GUD, GDB Graphical Interface): Clarify - intro. + (Debuggers, Commands of GUD, GDB Graphical Interface): + Clarify intro. (Starting GUD): Clarify how arguments are specified. (Debugger Operation): Index entry for "GUD interaction buffer", and move basic description here from Commands of GUD node. @@ -727,8 +727,8 @@ (Source Buffers): Remove gdb-find-source-frame, which is not in gdb-mi.el. (Other GDB Buffers): Remove gdb-use-separate-io-buffer and - toggle-gdb-all-registers, which are not in gdb-mi.el. Don't - re-document GUD interaction buffers. + toggle-gdb-all-registers, which are not in gdb-mi.el. + Don't re-document GUD interaction buffers. * programs.texi (Symbol Completion): M-TAB can now use Semantic. (Semantic): Add cindex entries for Semantic. @@ -758,8 +758,8 @@ * programs.texi (Program Modes): Mention modes that are not included with Emacs. Fix references to other manuals for tex. - Add index entry for backward-delete-char-untabify. Mention - prog-mode-hook. + Add index entry for backward-delete-char-untabify. + Mention prog-mode-hook. (Which Function): Use "global minor mode" terminology. (Basic Indent, Multi-line Indent): Refer to previous descriptions in Indentation chapter to avoid duplication. @@ -791,12 +791,12 @@ (TeX Editing): Add xref to documentation for Occur. (LaTeX Editing): Add xref to Completion node. (TeX Print): Fix description of tex-directory. - (Enriched Text): Renamed from Formatted Text. Make this node and + (Enriched Text): Rename from Formatted Text. Make this node and its subnodes less verbose, since text/enriched files are practically unused. - (Enriched Mode): Renamed from Requesting Formatted Text. + (Enriched Mode): Rename from Requesting Formatted Text. (Format Colors): Node deleted. - (Enriched Faces): Renamed from Format Faces. Describe commands + (Enriched Faces): Rename from Format Faces. Describe commands for applying colors too. (Forcing Enriched Mode): Node deleted; merged into Enriched Mode. @@ -1031,12 +1031,12 @@ 2011-10-18 Chong Yidong * display.texi (Faces): Simplify discussion. Move documentation - of list-faces-display here, from Standard Faces node. Note - special role of `default' background. - (Standard Faces): Note special role of `default' background. Note - that region face may be taken fom GTK. Add xref to Text Display. - (Text Scale): Rename from "Temporary Face Changes". Callers - changed. Don't bother documenting variable-pitch-mode. + of list-faces-display here, from Standard Faces node. + Note special role of `default' background. + (Standard Faces): Note special role of `default' background. + Note that region face may be taken fom GTK. Add xref to Text Display. + (Text Scale): Rename from "Temporary Face Changes". + Callers changed. Don't bother documenting variable-pitch-mode. (Font Lock): Copyedits. Remove font-lock-maximum-size. (Useless Whitespace): Simplify description of delete-trailing-whitespace. Note active region case. @@ -1058,8 +1058,8 @@ 2011-10-13 Chong Yidong - * killing.texi (Deletion): Add xref to Using Region. Document - delete-forward-char. + * killing.texi (Deletion): Add xref to Using Region. + Document delete-forward-char. (Yanking): Move yank-excluded-properties to Lisp manual. Move C-y description here. Recommend C-u C-SPC for jumping to mark. (Kill Ring): Move kill ring variable documentation here. @@ -1079,10 +1079,10 @@ selection changes. Mention that commands like C-y set the mark. (Marking Objects): Add xref to Words node. Note that mark-word and mark-sexp also have the "extend region" behavior. - (Using Region): Mention M-$ in the table. Document - mark-even-if-inactive here instead of in Mark Ring. - (Mark Ring): Move mark-even-if-inactive to Using Region. Take - note of the "Mark Set" behavior. + (Using Region): Mention M-$ in the table. + Document mark-even-if-inactive here instead of in Mark Ring. + (Mark Ring): Move mark-even-if-inactive to Using Region. + Take note of the "Mark Set" behavior. (Disabled Transient Mark): Rename from "Persistent Mark" (Bug#9688). Callers changed. @@ -1097,8 +1097,8 @@ (Name Help): Remove an over-long joke. (Apropos): Document prefix args. Remove duplicated descriptions. (Help Mode): Add C-c C-b to table. Update TAB binding. - (Package Keywords): Rename from "Library by Keyword". Describe - new package menu interface. + (Package Keywords): Rename from "Library by Keyword". + Describe new package menu interface. (Help Files, Help Echo): Tweak description. * mini.texi (Completion Options): Add completion-cycle-threshold. @@ -1110,8 +1110,8 @@ 2011-10-08 Chong Yidong - * basic.texi (Position Info): Omit page commands. Document - count-words-region and count-words. + * basic.texi (Position Info): Omit page commands. + Document count-words-region and count-words. * text.texi (Pages): Move what-page documentation here. @@ -1134,8 +1134,8 @@ 2011-10-07 Chong Yidong - * basic.texi (Inserting Text): Add xref to Completion. Add - ucs-insert example, and document prefix argument. + * basic.texi (Inserting Text): Add xref to Completion. + Add ucs-insert example, and document prefix argument. (Moving Point): Fix introduction; C-f/C-b are no longer equivalent to left/right. Tweak left-char and right-char descriptions. M-left and M-right are now bound to left-word/right-word. @@ -1539,8 +1539,8 @@ 2011-04-24 Chong Yidong - * maintaining.texi (List Tags): Document next-file. Suggested by - Uday S Reddy. + * maintaining.texi (List Tags): Document next-file. + Suggested by Uday S Reddy. 2011-04-23 Juanma Barranquero diff --git a/etc/NEWS b/etc/NEWS index 71e6bce9b7a..ca9b018a2f7 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -199,6 +199,7 @@ still be supported for Emacs 24.x. * Lisp changes in Emacs 24.2 +** New error type and new function `user-error'. Doesn't trigger the debugger. ** Completion *** New function `completion-table-with-quoting' to handle completion diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 0c5c2050754..5c38eb86fa7 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,48 @@ +2012-05-04 Stefan Monnier + + * subr.el (user-error): New function. + * window.el (switch-to-buffer): + * vc/smerge-mode.el (smerge-resolve-function, smerge-resolve) + (smerge-match-conflict): + * simple.el (previous-matching-history-element) + (next-matching-history-element, goto-history-element, undo-more) + (undo-start): + * progmodes/etags.el (visit-tags-table-buffer, find-tag-tag) + (find-tag-noselect, find-tag-in-order, etags-goto-tag-location) + (next-file, tags-loop-scan, list-tags, complete-tag): + * progmodes/compile.el (compilation-loop): + * mouse.el (mouse-minibuffer-check): + * man.el (Man-bgproc-sentinel, Man-goto-page): + * info.el (Info-find-node-2, Info-extract-pointer, Info-history-back) + (Info-history-forward, Info-follow-reference, Info-menu) + (Info-extract-menu-item, Info-extract-menu-counting) + (Info-forward-node, Info-backward-node, Info-next-menu-item) + (Info-last-menu-item, Info-next-preorder, Info-last-preorder) + (Info-next-reference, Info-prev-reference, Info-index) + (Info-index-next, Info-follow-nearest-node) + (Info-copy-current-node-name): + * imenu.el (imenu--make-index-alist) + (imenu-default-create-index-function, imenu-add-to-menubar): + * files.el (basic-save-buffer, recover-file): + * emacs-lisp/easy-mmode.el (easy-mmode-define-navigation): + * emacs-lisp/checkdoc.el (checkdoc-continue, checkdoc-comments) + (checkdoc-message-text, checkdoc-defun): + * dabbrev.el (dabbrev-completion, dabbrev--abbrev-at-point): + * cus-edit.el (customize-changed-options, customize-rogue) + (customize-saved, custom-variable-set, custom-variable-mark-to-save) + (custom-variable-mark-to-reset-standard) + (custom-variable-reset-backup, custom-face-mark-to-reset-standard) + (custom-file): + * completion.el (check-completion-length): + * comint.el (comint-search-arg) + (comint-previous-matching-input-string-position) + (comint-previous-matching-input) + (comint-replace-by-expanded-history-before-point, comint-send-input) + (comint-copy-old-input, comint-backward-matching-input) + (comint-goto-process-mark, comint-set-process-mark): + * calendar/calendar.el (calendar-cursor-to-date): Use it. + * bindings.el (debug-ignored-errors): Remove regexps, add `user-error'. + 2012-05-04 Stefan Monnier * dabbrev.el (dabbrev--ignore-case-p): New function. diff --git a/lisp/bindings.el b/lisp/bindings.el index 8cfeecf5b40..f04ee723220 100644 --- a/lisp/bindings.el +++ b/lisp/bindings.el @@ -623,24 +623,13 @@ is okay. See `mode-line-format'.") ;; Packages should add to this list appropriately when they are ;; loaded, rather than listing everything here. (setq debug-ignored-errors + ;; FIXME: Maybe beginning-of-line, beginning-of-buffer, end-of-line, + ;; end-of-buffer, end-of-file, buffer-read-only, and + ;; file-supersession should all be user-errors! `(beginning-of-line beginning-of-buffer end-of-line end-of-buffer end-of-file buffer-read-only file-supersession - ,(purecopy "^Previous command was not a yank$") - ,(purecopy "^Minibuffer window is not active$") - ,(purecopy "^No previous history search regexp$") - ,(purecopy "^No later matching history item$") - ,(purecopy "^No earlier matching history item$") - ,(purecopy "^End of history; no default available$") - ,(purecopy "^End of defaults; no next item$") - ,(purecopy "^Beginning of history; no preceding item$") - ,(purecopy "^No recursive edit is in progress$") - ,(purecopy "^Changes to be undone are outside visible portion of buffer$") - ,(purecopy "^No undo information in this buffer$") - ,(purecopy "^No further undo information") - ,(purecopy "^Save not confirmed$") - ,(purecopy "^Recover-file cancelled\\.$") - ,(purecopy "^Cannot switch buffers in a dedicated window$") + user-error ;; That's the main one! )) diff --git a/lisp/calendar/calendar.el b/lisp/calendar/calendar.el index d9ec27b4f88..4d4f7e14187 100644 --- a/lisp/calendar/calendar.el +++ b/lisp/calendar/calendar.el @@ -1888,7 +1888,7 @@ use instead of point." ;; or on or before the digit of a 1-digit date. (if (not (and (looking-at "[ 0-9]?[0-9][^0-9]") (get-text-property (point) 'date))) - (if error (error "Not on a date!")) + (if error (user-error "Not on a date!")) ;; Convert segment to real month and year. (if (zerop month) (setq month 12)) ;; Go back to before the first date digit. @@ -1903,8 +1903,6 @@ use instead of point." ((and (= 1 month) (= segment 2)) (1+ displayed-year)) (t displayed-year)))))))) -(add-to-list 'debug-ignored-errors "Not on a date!") - ;; The following version of calendar-gregorian-from-absolute is preferred for ;; reasons of clarity, BUT it's much slower than the version that follows it. diff --git a/lisp/comint.el b/lisp/comint.el index 8103db0e9bb..43e42c87be7 100644 --- a/lisp/comint.el +++ b/lisp/comint.el @@ -1076,10 +1076,10 @@ See also `comint-read-input-ring'." (defun comint-search-arg (arg) ;; First make sure there is a ring and that we are after the process mark (cond ((not (comint-after-pmark-p)) - (error "Not at command line")) + (user-error "Not at command line")) ((or (null comint-input-ring) (ring-empty-p comint-input-ring)) - (error "Empty input ring")) + (user-error "Empty input ring")) ((zerop arg) ;; arg of zero resets search from beginning, and uses arg of 1 (setq comint-input-ring-index nil) @@ -1146,7 +1146,7 @@ Moves relative to `comint-input-ring-index'." Moves relative to START, or `comint-input-ring-index'." (if (or (not (ring-p comint-input-ring)) (ring-empty-p comint-input-ring)) - (error "No history")) + (user-error "No history")) (let* ((len (ring-length comint-input-ring)) (motion (if (> arg 0) 1 -1)) (n (mod (- (or start (comint-search-start arg)) motion) len)) @@ -1186,7 +1186,7 @@ If N is negative, find the next or Nth next match." (let ((pos (comint-previous-matching-input-string-position regexp n))) ;; Has a match been found? (if (null pos) - (error "Not found") + (user-error "Not found") ;; If leaving the edit line, save partial input (if (null comint-input-ring-index) ;not yet on ring (setq comint-stored-incomplete-input @@ -1372,7 +1372,7 @@ actual side-effect." (goto-char (match-beginning 0)) (if (not (search-forward old pos t)) (or silent - (error "Not found")) + (user-error "Not found")) (replace-match new t t) (message "History item: substituted")))) (t @@ -1777,7 +1777,7 @@ Similarly for Soar, Scheme, etc." (interactive) ;; Note that the input string does not include its terminal newline. (let ((proc (get-buffer-process (current-buffer)))) - (if (not proc) (error "Current buffer has no process") + (if (not proc) (user-error "Current buffer has no process") (widen) (let* ((pmark (process-mark proc)) (intxt (if (>= (point) (marker-position pmark)) @@ -2201,7 +2201,7 @@ Calls `comint-get-old-input' to get old input." (let ((input (funcall comint-get-old-input)) (process (get-buffer-process (current-buffer)))) (if (not process) - (error "Current buffer has no process") + (user-error "Current buffer has no process") (goto-char (process-mark process)) (insert input)))) @@ -2508,7 +2508,7 @@ If N is negative, find the next or Nth next match." (save-excursion (while (/= n 0) (unless (re-search-backward regexp nil t dir) - (error "Not found")) + (user-error "Not found")) (unless (get-char-property (point) 'field) (setq n (- n dir)))) (field-beginning)))) @@ -3364,7 +3364,7 @@ The process mark separates output, and input already sent, from input that has not yet been sent." (interactive) (let ((proc (or (get-buffer-process (current-buffer)) - (error "Current buffer has no process")))) + (user-error "Current buffer has no process")))) (goto-char (process-mark proc)) (when (called-interactively-p 'interactive) (message "Point is now at the process mark")))) @@ -3389,7 +3389,7 @@ the process mark is at the beginning of the accumulated input." "Set the process mark at point." (interactive) (let ((proc (or (get-buffer-process (current-buffer)) - (error "Current buffer has no process")))) + (user-error "Current buffer has no process")))) (set-marker (process-mark proc) (point)) (message "Process mark set"))) @@ -3741,14 +3741,6 @@ REGEXP-GROUP is the regular expression group in REGEXP to use." (match-end regexp-group)) results)) results))) - -(dolist (x '("^Not at command line$" - "^Empty input ring$" - "^No history$" - "^Not found$" ; Too common? - "^Current buffer has no process$")) - (add-to-list 'debug-ignored-errors x)) - ;; Converting process modes to use comint mode ;; =========================================================================== diff --git a/lisp/completion.el b/lisp/completion.el index 9c6cd60c96c..75f8920920c 100644 --- a/lisp/completion.el +++ b/lisp/completion.el @@ -1301,8 +1301,8 @@ String must be longer than `completion-prefix-min-length'." (defun check-completion-length (string) (if (< (length string) completion-min-length) - (error "The string `%s' is too short to be saved as a completion" - string) + (user-error "The string `%s' is too short to be saved as a completion" + string) (list string))) (defun add-completion (string &optional num-uses last-use-time) @@ -2467,10 +2467,6 @@ if ARG is omitted or nil." (defvaralias 'cmpl-syntax-table 'completion-syntax-table) (defalias 'initialize-completions 'completion-initialize) -(dolist (x '("^To complete, the point must be after a symbol at least [0-9]* character long\\.$" - "^The string \".*\" is too short to be saved as a completion\\.$")) - (add-to-list 'debug-ignored-errors x)) - (provide 'completion) ;;; completion.el ends here diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el index 4458bb7b56f..52308319f15 100644 --- a/lisp/cus-edit.el +++ b/lisp/cus-edit.el @@ -1254,8 +1254,8 @@ that were added or redefined since that version." (if found (custom-buffer-create (custom-sort-items found t 'first) "*Customize Changed Options*") - (error "No user option defaults have been changed since Emacs %s" - since-version)))) + (user-error "No user option defaults have been changed since Emacs %s" + since-version)))) (defun customize-package-emacs-version (symbol package-version) "Return the Emacs version in which SYMBOL's meaning last changed. @@ -1386,7 +1386,7 @@ suggest to customize that face, if it's customizable." (default-value symbol)))) (push (list symbol 'custom-variable) found))))) (if (not found) - (error "No rogue user options") + (user-error "No rogue user options") (custom-buffer-create (custom-sort-items found t nil) "*Customize Rogue*")))) ;;;###autoload @@ -1403,8 +1403,8 @@ suggest to customize that face, if it's customizable." (get symbol 'saved-variable-comment)) (boundp symbol) (push (list symbol 'custom-variable) found)))) - (if (not found ) - (error "No saved user options") + (if (not found) + (user-error "No saved user options") (custom-buffer-create (custom-sort-items found t nil) "*Customize Saved*")))) @@ -2879,7 +2879,7 @@ Optional EVENT is the location for the menu." (comment (widget-value comment-widget)) val) (cond ((eq state 'hidden) - (error "Cannot set hidden variable")) + (user-error "Cannot set hidden variable")) ((setq val (widget-apply child :validate)) (goto-char (widget-get val :from)) (error "%s" (widget-get val :error))) @@ -2921,7 +2921,7 @@ Optional EVENT is the location for the menu." (comment (widget-value comment-widget)) val) (cond ((eq state 'hidden) - (error "Cannot set hidden variable")) + (user-error "Cannot set hidden variable")) ((setq val (widget-apply child :validate)) (goto-char (widget-get val :from)) (error "Saving %s: %s" symbol (widget-get val :error))) @@ -2995,7 +2995,7 @@ redraw the widget immediately." (let* ((symbol (widget-value widget))) (if (get symbol 'standard-value) (custom-variable-backup-value widget) - (error "No standard setting known for %S" symbol)) + (user-error "No standard setting known for %S" symbol)) (put symbol 'variable-comment nil) (put symbol 'customized-value nil) (put symbol 'customized-variable-comment nil) @@ -3057,7 +3057,7 @@ to switch between two values." (condition-case nil (funcall set symbol (car value)) (error nil))) - (error "No backup value for %s" symbol)) + (user-error "No backup value for %s" symbol)) (put symbol 'customized-value (list (custom-quote (car value)))) (put symbol 'variable-comment comment) (put symbol 'customized-variable-comment comment) @@ -3795,7 +3795,7 @@ redraw the widget immediately." (value (get symbol 'face-defface-spec)) (comment-widget (widget-get widget :comment-widget))) (unless value - (error "No standard setting for this face")) + (user-error "No standard setting for this face")) (put symbol 'customized-face nil) (put symbol 'customized-face-comment nil) (custom-push-theme 'theme-face symbol 'user 'reset) @@ -4414,7 +4414,7 @@ if only the first line of the docstring is shown.")) ;; sense. (if no-error nil - (error "Saving settings from \"emacs -q\" would overwrite existing customizations")) + (user-error "Saving settings from \"emacs -q\" would overwrite existing customizations")) (file-chase-links (or custom-file user-init-file)))) ;; If recentf-mode is non-nil, this is defined. @@ -4875,18 +4875,7 @@ if that value is non-nil." (put 'custom-mode 'mode-class 'special) (define-obsolete-variable-alias 'custom-mode-hook 'Custom-mode-hook "23.1") -(dolist (regexp - '("^No user option defaults have been changed since Emacs " - "^Invalid face:? " - "^No \\(?:customized\\|rogue\\|saved\\) user options" - "^No customizable items matching " - "^There are unset changes" - "^Cannot set hidden variable" - "^No \\(?:saved\\|backup\\) value for " - "^No standard setting known for " - "^No standard setting for this face" - "^Saving settings from \"emacs -q\" would overwrite existing customizations")) - (add-to-list 'debug-ignored-errors regexp)) +(add-to-list 'debug-ignored-errors "^Invalid face:? ") ;;; The End. diff --git a/lisp/dabbrev.el b/lisp/dabbrev.el index c169e07ac30..87a03fd24da 100644 --- a/lisp/dabbrev.el +++ b/lisp/dabbrev.el @@ -406,10 +406,10 @@ then it searches *all* buffers." (dabbrev--find-all-expansions abbrev ignore-case-p)) (completion-ignore-case ignore-case-p)) (or (consp completion-list) - (error "No dynamic expansion for \"%s\" found%s" - abbrev - (if dabbrev--check-other-buffers - "" " in this-buffer"))) + (user-error "No dynamic expansion for \"%s\" found%s" + abbrev + (if dabbrev--check-other-buffers + "" " in this-buffer"))) (setq list (cond ((not (and ignore-case-p dabbrev-case-replace)) @@ -585,7 +585,7 @@ all skip characters." "Extract the symbol at point to serve as abbreviation." ;; Check for error (if (bobp) - (error "No possible abbreviation preceding point")) + (user-error "No possible abbreviation preceding point")) ;; Return abbrev at point (save-excursion ;; Record the end of the abbreviation. @@ -603,7 +603,7 @@ all skip characters." "\\sw\\|\\s_") nil t) (forward-char 1) - (error "No possible abbreviation preceding point")))) + (user-error "No possible abbreviation preceding point")))) ;; Now find the beginning of that one. (dabbrev--goto-start-of-abbrev) (buffer-substring-no-properties @@ -974,11 +974,6 @@ Leaves point at the location of the start of the expansion." (cons found-string dabbrev--last-table)) result))))) -(dolist (mess '("^No dynamic expansion for .* found" - "^No further dynamic expansion for .* found$" - "^No possible abbreviation preceding point$")) - (add-to-list 'debug-ignored-errors mess)) - (provide 'dabbrev) ;;; dabbrev.el ends here diff --git a/lisp/emacs-lisp/checkdoc.el b/lisp/emacs-lisp/checkdoc.el index 7a9a33fc2cc..ee8cbd2c3bc 100644 --- a/lisp/emacs-lisp/checkdoc.el +++ b/lisp/emacs-lisp/checkdoc.el @@ -916,7 +916,7 @@ is the starting location. If this is nil, `point-min' is used instead." (progn (goto-char wrong) (if (not take-notes) - (error "%s" (checkdoc-error-text msg))))) + (user-error "%s" (checkdoc-error-text msg))))) (checkdoc-show-diagnostics) (if (called-interactively-p 'interactive) (message "No style warnings.")))) @@ -949,7 +949,7 @@ if there is one." (e (checkdoc-file-comments-engine)) (checkdoc-generate-compile-warnings-flag (or take-notes checkdoc-generate-compile-warnings-flag))) - (if e (error "%s" (checkdoc-error-text e))) + (if e (user-error "%s" (checkdoc-error-text e))) (checkdoc-show-diagnostics) e)) @@ -987,7 +987,7 @@ Optional argument TAKE-NOTES causes all errors to be logged." (if (not (called-interactively-p 'interactive)) e (if e - (error "%s" (checkdoc-error-text e)) + (user-error "%s" (checkdoc-error-text e)) (checkdoc-show-diagnostics))) (goto-char p)) (if (called-interactively-p 'interactive) @@ -1027,19 +1027,14 @@ space at the end of each line." (car (memq checkdoc-spellcheck-documentation-flag '(defun t)))) (beg (save-excursion (beginning-of-defun) (point))) - (end (save-excursion (end-of-defun) (point))) - (msg (checkdoc-this-string-valid))) - (if msg (if no-error - (message "%s" (checkdoc-error-text msg)) - (error "%s" (checkdoc-error-text msg))) - (setq msg (checkdoc-message-text-search beg end)) - (if msg (if no-error - (message "%s" (checkdoc-error-text msg)) - (error "%s" (checkdoc-error-text msg))) - (setq msg (checkdoc-rogue-space-check-engine beg end)) - (if msg (if no-error - (message "%s" (checkdoc-error-text msg)) - (error "%s" (checkdoc-error-text msg)))))) + (end (save-excursion (end-of-defun) (point)))) + (dolist (fun (list #'checkdoc-this-string-valid + (lambda () (checkdoc-message-text-search beg end)) + (lambda () (checkdoc-rogue-space-check-engine beg end)))) + (let ((msg (funcall fun))) + (if msg (if no-error + (message "%s" (checkdoc-error-text msg)) + (user-error "%s" (checkdoc-error-text msg)))))) (if (called-interactively-p 'interactive) (message "Checkdoc: done.")))))) @@ -2644,12 +2639,6 @@ function called to create the messages." (custom-add-option 'emacs-lisp-mode-hook 'checkdoc-minor-mode) -(add-to-list 'debug-ignored-errors - "Argument `.*' should appear (as .*) in the doc string") -(add-to-list 'debug-ignored-errors - "Lisp symbol `.*' should appear in quotes") -(add-to-list 'debug-ignored-errors "Disambiguate .* by preceding .*") - (provide 'checkdoc) ;;; checkdoc.el ends here diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el index 0d6716a2e63..301947f0735 100644 --- a/lisp/emacs-lisp/easy-mmode.el +++ b/lisp/emacs-lisp/easy-mmode.el @@ -572,8 +572,6 @@ BODY is executed after moving to the destination location." (when was-narrowed (,narrowfun))))))) (unless name (setq name base-name)) `(progn - (add-to-list 'debug-ignored-errors - ,(concat "^No \\(previous\\|next\\) " (regexp-quote name))) (defun ,next-sym (&optional count) ,(format "Go to the next COUNT'th %s." name) (interactive "p") @@ -584,7 +582,7 @@ BODY is executed after moving to the destination location." `(if (not (re-search-forward ,re nil t count)) (if (looking-at ,re) (goto-char (or ,(if endfun `(,endfun)) (point-max))) - (error "No next %s" ,name)) + (user-error "No next %s" ,name)) (goto-char (match-beginning 0)) (when (and (eq (current-buffer) (window-buffer (selected-window))) (called-interactively-p 'interactive)) @@ -603,7 +601,7 @@ BODY is executed after moving to the destination location." (if (< count 0) (,next-sym (- count)) ,(funcall when-narrowed `(unless (re-search-backward ,re nil t count) - (error "No previous %s" ,name))) + (user-error "No previous %s" ,name))) ,@body)) (put ',prev-sym 'definition-name ',base)))) diff --git a/lisp/files.el b/lisp/files.el index ee455f4bf42..dd80ce69811 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -4497,7 +4497,7 @@ Before and after saving the buffer, this function runs (format "%s has changed since visited or saved. Save anyway? " (file-name-nondirectory buffer-file-name))) - (error "Save not confirmed")) + (user-error "Save not confirmed")) (save-restriction (widen) (save-excursion @@ -5364,7 +5364,7 @@ non-nil, it is called instead of rereading visited file contents." (insert-file-contents file-name nil) (set-buffer-file-coding-system coding-system)) (after-find-file nil nil t)) - (t (error "Recover-file cancelled"))))) + (t (user-error "Recover-file cancelled"))))) (defun recover-session () "Recover auto save files from a previous Emacs session. diff --git a/lisp/imenu.el b/lisp/imenu.el index 12ac3540925..feebb96d379 100644 --- a/lisp/imenu.el +++ b/lisp/imenu.el @@ -579,7 +579,7 @@ See `imenu--index-alist' for the format of the index alist." (funcall imenu-create-index-function)))) (imenu--truncate-items imenu--index-alist))) (or imenu--index-alist noerror - (error "No items suitable for an index found in this buffer")) + (user-error "No items suitable for an index found in this buffer")) (or imenu--index-alist (setq imenu--index-alist (list nil))) ;; Add a rescan option to the index. @@ -695,7 +695,7 @@ The alternate method, which is the one most often used, is to call ((and imenu-generic-expression) (imenu--generic-function imenu-generic-expression)) (t - (error "This buffer cannot use `imenu-default-create-index-function'")))) + (user-error "This buffer cannot use `imenu-default-create-index-function'")))) ;;; ;;; Generic index gathering function. @@ -968,8 +968,8 @@ See the command `imenu' for more information." `(menu-item ,name ,(make-sparse-keymap "Imenu"))) (use-local-map newmap) (add-hook 'menu-bar-update-hook 'imenu-update-menubar))) - (error "The mode `%s' does not support Imenu" - (format-mode-line mode-name)))) + (user-error "The mode `%s' does not support Imenu" + (format-mode-line mode-name)))) ;;;###autoload (defun imenu-add-menubar-index () @@ -1058,12 +1058,6 @@ for more information." (apply function (car index-item) position rest)) (run-hooks 'imenu-after-jump-hook))) -(dolist (mess - '("^No items suitable for an index found in this buffer$" - "^This buffer cannot use `imenu-default-create-index-function'$" - "^The mode `.*' does not support Imenu$")) - (add-to-list 'debug-ignored-errors mess)) - (provide 'imenu) ;;; imenu.el ends here diff --git a/lisp/info.el b/lisp/info.el index 042ff158362..1e3b14632e6 100644 --- a/lisp/info.el +++ b/lisp/info.el @@ -1071,7 +1071,7 @@ a case-insensitive match is tried." (throw 'foo t)) ;; No such anchor in tag table or node in tag table or file - (error "No such node or anchor: %s" nodename)) + (user-error "No such node or anchor: %s" nodename)) (Info-select-node) (goto-char (point-min)) @@ -2012,8 +2012,8 @@ if ERRORNAME is nil, just return nil." (concat name ":" (Info-following-node-name-re)) bound t) (match-string-no-properties 1)) ((not (eq errorname t)) - (error "Node has no %s" - (capitalize (or errorname name))))))))) + (user-error "Node has no %s" + (capitalize (or errorname name))))))))) (defun Info-following-node-name-re (&optional allowedchars) "Return a regexp matching a node name. @@ -2082,7 +2082,7 @@ If SAME-FILE is non-nil, do not move to a different Info file." "Go back in the history to the last node visited." (interactive) (or Info-history - (error "This is the first Info node you looked at")) + (user-error "This is the first Info node you looked at")) (let ((history-forward (cons (list Info-current-file Info-current-node (point)) Info-history-forward)) @@ -2102,7 +2102,7 @@ If SAME-FILE is non-nil, do not move to a different Info file." "Go forward in the history of visited nodes." (interactive) (or Info-history-forward - (error "This is the last Info node you looked at")) + (user-error "This is the last Info node you looked at")) (let ((history-forward (cdr Info-history-forward)) filename nodename opoint) (setq filename (car (car Info-history-forward))) @@ -2388,7 +2388,7 @@ new buffer." completions nil t))) (list (if (equal input "") default input) current-prefix-arg)) - (error "No cross-references in this node")))) + (user-error "No cross-references in this node")))) (unless footnotename (error "No reference was specified")) @@ -2419,7 +2419,8 @@ new buffer." (abs (- prev-ref (point)))) next-ref prev-ref)) ((or next-ref prev-ref)) - ((error "No cross-reference named %s" footnotename)))) + ((user-error "No cross-reference named %s" + footnotename)))) (setq target (Info-extract-menu-node-name t)))) (while (setq i (string-match "[ \t\n]+" target i)) (setq target (concat (substring target 0 i) " " @@ -2564,7 +2565,7 @@ new buffer." (save-excursion (goto-char (point-min)) (if (not (search-forward "\n* menu:" nil t)) - (error "No menu in this node")) + (user-error "No menu in this node")) (setq beg (point)) (and (< (point) p) (save-excursion @@ -2605,10 +2606,10 @@ new buffer." (let ((case-fold-search t)) (goto-char (point-min)) (or (search-forward "\n* menu:" nil t) - (error "No menu in this node")) + (user-error "No menu in this node")) (or (re-search-forward (concat "\n\\* +" menu-item ":") nil t) (re-search-forward (concat "\n\\* +" menu-item) nil t) - (error "No such item in menu")) + (user-error "No such item in menu")) (beginning-of-line) (forward-char 2) (Info-extract-menu-node-name nil (Info-index-node)))))) @@ -2624,7 +2625,7 @@ new buffer." (match-beginning 0)))) (goto-char (point-min)) (or (search-forward "\n* menu:" bound t) - (error "No menu in this node")) + (user-error "No menu in this node")) (if count (or (search-forward "\n* " bound t count) (error "Too few items in menu")) @@ -2696,7 +2697,7 @@ N is the digit argument used to invoke this command." (if Info-history-skip-intermediate-nodes (setq Info-history old-history))))) (no-error nil) - (t (error "No pointer forward from this node"))))) + (t (user-error "No pointer forward from this node"))))) (defun Info-backward-node () "Go backward one node, considering all nodes as forming one sequence." @@ -2705,7 +2706,7 @@ N is the digit argument used to invoke this command." (upnode (Info-extract-pointer "up" t)) (case-fold-search t)) (cond ((and upnode (string-match "(" upnode)) - (error "First node in file")) + (user-error "First node in file")) ((and upnode (or (null prevnode) ;; Use string-equal, not equal, ;; to ignore text properties. @@ -2723,7 +2724,7 @@ N is the digit argument used to invoke this command." (if Info-history-skip-intermediate-nodes (setq Info-history old-history)))) (t - (error "No pointer backward from this node"))))) + (user-error "No pointer backward from this node"))))) (defun Info-exit () "Exit Info by selecting some other buffer." @@ -2744,7 +2745,7 @@ N is the digit argument used to invoke this command." (and (search-forward "\n* " nil t) (Info-extract-menu-node-name))))) (if node (Info-goto-node node) - (error "No more items in menu")))) + (user-error "No more items in menu")))) (defun Info-last-menu-item () "Go to the node of the previous menu item." @@ -2757,7 +2758,7 @@ N is the digit argument used to invoke this command." (and (search-backward "\n* menu:" nil t) (point))))) (or (and beg (search-backward "\n* " beg t)) - (error "No previous items in menu"))) + (user-error "No previous items in menu"))) (Info-goto-node (save-excursion (goto-char (match-end 0)) (Info-extract-menu-node-name))))) @@ -2782,7 +2783,7 @@ N is the digit argument used to invoke this command." (if Info-history-skip-intermediate-nodes (setq Info-history old-history)))) (t - (error "No more nodes")))) + (user-error "No more nodes")))) (defun Info-last-preorder () "Go to the last node, popping up a level if there is none." @@ -2822,7 +2823,7 @@ N is the digit argument used to invoke this command." (let ((case-fold-search t)) (or (search-forward "\n* Menu:" nil t) (goto-char (point-max))))) - (t (error "No previous nodes")))) + (t (user-error "No previous nodes")))) (defun Info-scroll-up () "Scroll one screenful forward in Info, considering all nodes as one sequence. @@ -2911,11 +2912,11 @@ See `Info-scroll-down'." (or (re-search-forward pat nil t) (progn (goto-char old-pt) - (error "No cross references in this node"))))) + (user-error "No cross references in this node"))))) (goto-char (or (match-beginning 1) (match-beginning 0))) (if (looking-at "\\* Menu:") (if recur - (error "No cross references in this node") + (user-error "No cross references in this node") (Info-next-reference t)) (if (looking-at "^\\* ") (forward-char 2))))) @@ -2932,11 +2933,11 @@ See `Info-scroll-down'." (or (re-search-backward pat nil t) (progn (goto-char old-pt) - (error "No cross references in this node"))))) + (user-error "No cross references in this node"))))) (goto-char (or (match-beginning 1) (match-beginning 0))) (if (looking-at "\\* Menu:") (if recur - (error "No cross references in this node") + (user-error "No cross references in this node") (Info-prev-reference t)) (if (looking-at "^\\* ") (forward-char 2))))) @@ -3107,7 +3108,7 @@ Give an empty topic name to go to the Index node itself." (or matches (progn (Info-goto-node orignode) - (error "No `%s' in index" topic))) + (user-error "No `%s' in index" topic))) ;; Here it is a feature that assoc is case-sensitive. (while (setq found (assoc topic matches)) (setq exact (cons found exact) @@ -3120,7 +3121,7 @@ Give an empty topic name to go to the Index node itself." "Go to the next matching index item from the last \\\\[Info-index] command." (interactive "p") (or Info-index-alternatives - (error "No previous `i' command")) + (user-error "No previous `i' command")) (while (< num 0) (setq num (+ num (length Info-index-alternatives)))) (while (> num 0) @@ -3640,7 +3641,7 @@ If FORK is a string, it is the name to use for the new buffer." ;; Don't raise an error when mouse-1 is bound to this - it's ;; often used to simply select the window or frame. (eq 'mouse-1 (event-basic-type last-input-event))) - (error "Point neither on reference nor in menu item description"))) + (user-error "Point neither on reference nor in menu item description"))) ;; Common subroutine. (defun Info-try-follow-nearest-node (&optional fork) @@ -3907,7 +3908,7 @@ The name of the Info file is prepended to the node name in parentheses. With a zero prefix arg, put the name inside a function call to `info'." (interactive "P") (unless Info-current-node - (error "No current Info node")) + (user-error "No current Info node")) (let ((node (if (stringp Info-current-file) (concat "(" (file-name-nondirectory Info-current-file) ") " Info-current-node)))) @@ -4899,25 +4900,8 @@ BUFFER is the buffer speedbar is requesting buttons for." (erase-buffer)) (Info-speedbar-hierarchy-buttons nil 0)) -(dolist (mess '("^First node in file$" - "^No `.*' in index$" - "^No cross-reference named" - "^No cross.references in this node$" - "^No current Info node$" - "^No menu in this node$" - "^No more items in menu$" - "^No more nodes$" - "^No pointer \\(?:forward\\|backward\\) from this node$" - "^No previous `i' command$" - "^No previous items in menu$" - "^No previous nodes$" - "^No such item in menu$" - "^No such node or anchor" - "^Node has no" - "^Point neither on reference nor in menu item description$" - "^This is the \\(?:first\\|last\\) Info node you looked at$" - search-failed)) - (add-to-list 'debug-ignored-errors mess)) +;; FIXME: Really? Why here? +(add-to-list 'debug-ignored-errors 'search-failed) ;;;; Desktop support diff --git a/lisp/man.el b/lisp/man.el index 6912486dffa..dd64613c495 100644 --- a/lisp/man.el +++ b/lisp/man.el @@ -1273,8 +1273,8 @@ manpage command." (if (not Man-page-list) (let ((args Man-arguments)) (kill-buffer (current-buffer)) - (error "Can't find the %s manpage" - (Man-page-from-arguments args))) + (user-error "Can't find the %s manpage" + (Man-page-from-arguments args))) (set-buffer-modified-p nil)))) ;; Restore case-fold-search before calling ;; Man-notify-when-ready because it may switch buffers. @@ -1649,7 +1649,7 @@ Specify which REFERENCE to use; default is based on word at point." (when Man-page-list (if (or (< page 1) (> page (length Man-page-list))) - (error "No manpage %d found" page)) + (user-error "No manpage %d found" page)) (let* ((page-range (nth (1- page) Man-page-list)) (page-start (car page-range)) (page-end (car (cdr page-range)))) @@ -1742,9 +1742,6 @@ Uses `Man-name-local-regexp'." ;; Init the man package variables, if not already done. (Man-init-defvars) -(add-to-list 'debug-ignored-errors "^No manpage [0-9]* found$") -(add-to-list 'debug-ignored-errors "^Can't find the .* manpage$") - (provide 'man) ;;; man.el ends here diff --git a/lisp/mouse.el b/lisp/mouse.el index 46e50ed9508..f40a0199525 100644 --- a/lisp/mouse.el +++ b/lisp/mouse.el @@ -298,7 +298,7 @@ Use the former if the menu bar is showing, otherwise the latter." (let ((w (posn-window (event-start event)))) (and (window-minibuffer-p w) (not (minibuffer-window-active-p w)) - (error "Minibuffer window is not active"))) + (user-error "Minibuffer window is not active"))) ;; Give temporary modes such as isearch a chance to turn off. (run-hooks 'mouse-leave-buffer-hook)) diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el index 2608ba0b0c3..f22ee4f7ea5 100644 --- a/lisp/progmodes/compile.el +++ b/lisp/progmodes/compile.el @@ -2132,14 +2132,14 @@ and runs `compilation-filter-hook'." (if (or (eq (get-text-property ,limit 'compilation-message) (get-text-property opt 'compilation-message)) (eq pt opt)) - (error ,error compilation-error) + (user-error ,error compilation-error) (setq pt ,limit))) ;; prop 'compilation-message usually has 2 changes, on and off, so ;; re-search if off (or (setq msg (get-text-property pt 'compilation-message)) (if (setq pt (,property-change pt 'compilation-message nil ,limit)) (setq msg (get-text-property pt 'compilation-message))) - (error ,error compilation-error)) + (user-error ,error compilation-error)) (or (< (compilation--message->type msg) compilation-skip-threshold) (if different-file (eq (prog1 last @@ -2660,9 +2660,6 @@ The file-structure looks like this: (if (eq v fs) (remhash k compilation-locs))) compilation-locs))) -(add-to-list 'debug-ignored-errors "\\`No more [-a-z ]+s yet\\'") -(add-to-list 'debug-ignored-errors "\\`Moved past last .*") - ;;; Compatibility with the old compile.el. (defvaralias 'compilation-last-buffer 'next-error-last-buffer) diff --git a/lisp/progmodes/etags.el b/lisp/progmodes/etags.el index 638410ae627..2664b51eea9 100644 --- a/lisp/progmodes/etags.el +++ b/lisp/progmodes/etags.el @@ -554,11 +554,10 @@ Returns t if it visits a tags table, or nil if there are no more in the list." (cond ((eq cont 'same) ;; Use the ambient value of tags-file-name. (or tags-file-name - (error "%s" - (substitute-command-keys - (concat "No tags table in use; " - "use \\[visit-tags-table] to select one"))))) - + (user-error "%s" + (substitute-command-keys + (concat "No tags table in use; " + "use \\[visit-tags-table] to select one"))))) ((eq t cont) ;; Find the next table. (if (tags-next-table) @@ -566,7 +565,6 @@ Returns t if it visits a tags table, or nil if there are no more in the list." (while (and (not (or (get-file-buffer tags-file-name) (file-exists-p tags-file-name))) (tags-next-table))))) - (t ;; Pick a table out of our hat. (tags-table-check-computed-list) ;Get it up to date, we might use it. @@ -706,7 +704,8 @@ Returns t if it visits a tags table, or nil if there are no more in the list." (kill-local-variable 'tags-file-name) (if (eq local-tags-file-name tags-file-name) (setq tags-file-name nil)) - (error "File %s is not a valid tags table" local-tags-file-name))))) + (user-error "File %s is not a valid tags table" + local-tags-file-name))))) (defun tags-reset-tags-tables () "Reset tags state to cancel effect of any previous \\[visit-tags-table] or \\[find-tag]." @@ -831,7 +830,7 @@ If no tags table is loaded, do nothing and return nil." (tags-lazy-completion-table) nil nil nil nil default))) (if (equal spec "") - (or default (error "There is no default tag")) + (or default (user-error "There is no default tag")) spec))) (defvar last-tag nil @@ -886,7 +885,7 @@ See documentation of variable `tags-file-name'." (if (eq '- next-p) ;; Pop back to a previous location. (if (ring-empty-p tags-location-ring) - (error "No previous tag locations") + (user-error "No previous tag locations") (let ((marker (ring-remove tags-location-ring 0))) (prog1 ;; Move to the saved location. @@ -1150,8 +1149,8 @@ error message." (set-marker (car tag-lines-already-matched) nil nil) (setq tag-lines-already-matched (cdr tag-lines-already-matched))) (set-marker match-marker nil nil) - (error "No %stags %s %s" (if first-search "" "more ") - matching pattern)) + (user-error "No %stags %s %s" (if first-search "" "more ") + matching pattern)) ;; Found a tag; extract location info. (beginning-of-line) @@ -1391,8 +1390,8 @@ hits the start of file." offset (* 3 offset))) ; expand search window (or found (re-search-forward pat nil t) - (error "Rerun etags: `%s' not found in %s" - pat buffer-file-name))) + (user-error "Rerun etags: `%s' not found in %s" + pat buffer-file-name))) ;; Position point at the right place ;; if the search string matched an extra Ctrl-m at the beginning. (and (eq selective-display t) @@ -1742,7 +1741,7 @@ if the file was newly read in, the value is the filename." (and novisit (get-buffer " *next-file*") (kill-buffer " *next-file*")) - (error "All files processed")) + (user-error "All files processed")) (let* ((next (car next-file-list)) (buffer (get-file-buffer next)) (new (not buffer))) @@ -1775,9 +1774,9 @@ if the file was newly read in, the value is the filename." "Form for `tags-loop-continue' to eval to change one file.") (defvar tags-loop-scan - '(error "%s" - (substitute-command-keys - "No \\[tags-search] or \\[tags-query-replace] in progress")) + '(user-error "%s" + (substitute-command-keys + "No \\[tags-search] or \\[tags-query-replace] in progress")) "Form for `tags-loop-continue' to eval to scan one file. If it returns non-nil, this file needs processing by evalling \`tags-loop-operate'. Otherwise, move on to the next file.") @@ -1937,7 +1936,7 @@ directory specification." (if (funcall list-tags-function file) (setq gotany t))) (or gotany - (error "File %s not in current tags tables" file))))) + (user-error "File %s not in current tags tables" file))))) (with-current-buffer "*Tags List*" (require 'apropos) (with-no-warnings @@ -2067,28 +2066,15 @@ for \\[find-tag] (which see)." (interactive) (or tags-table-list tags-file-name - (error "%s" - (substitute-command-keys - "No tags table loaded; try \\[visit-tags-table]"))) + (user-error "%s" + (substitute-command-keys + "No tags table loaded; try \\[visit-tags-table]"))) (let ((comp-data (tags-completion-at-point-function))) (if (null comp-data) - (error "Nothing to complete") + (user-error "Nothing to complete") (completion-in-region (car comp-data) (cadr comp-data) (nth 2 comp-data) (plist-get (nthcdr 3 comp-data) :predicate))))) - -(dolist (x '("^No tags table in use; use .* to select one$" - "^There is no default tag$" - "^No previous tag locations$" - "^File .* is not a valid tags table$" - "^No \\(more \\|\\)tags \\(matching\\|containing\\) " - "^Rerun etags: `.*' not found in " - "^All files processed$" - "^No .* or .* in progress$" - "^File .* not in current tags tables$" - "^No tags table loaded" - "^Nothing to complete$")) - (add-to-list 'debug-ignored-errors x)) (provide 'etags) diff --git a/lisp/simple.el b/lisp/simple.el index 3d8a3a38dbd..2b7d5580ba2 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -1465,7 +1465,7 @@ See also `minibuffer-history-case-insensitive-variables'." (list (if (string= regexp "") (if minibuffer-history-search-history (car minibuffer-history-search-history) - (error "No previous history search regexp")) + (user-error "No previous history search regexp")) regexp) (prefix-numeric-value current-prefix-arg)))) (unless (zerop n) @@ -1491,9 +1491,9 @@ See also `minibuffer-history-case-insensitive-variables'." (setq prevpos pos) (setq pos (min (max 1 (+ pos (if (< n 0) -1 1))) (length history))) (when (= pos prevpos) - (error (if (= pos 1) - "No later matching history item" - "No earlier matching history item"))) + (user-error (if (= pos 1) + "No later matching history item" + "No earlier matching history item"))) (setq match-string (if (eq minibuffer-history-sexp-flag (minibuffer-depth)) (let ((print-level nil)) @@ -1536,7 +1536,7 @@ makes the search case-sensitive." (list (if (string= regexp "") (if minibuffer-history-search-history (car minibuffer-history-search-history) - (error "No previous history search regexp")) + (user-error "No previous history search regexp")) regexp) (prefix-numeric-value current-prefix-arg)))) (previous-matching-history-element regexp (- n))) @@ -1595,11 +1595,11 @@ The argument NABS specifies the absolute history position." (setq minibuffer-text-before-history (minibuffer-contents-no-properties))) (if (< nabs minimum) - (if minibuffer-default - (error "End of defaults; no next item") - (error "End of history; no default available"))) + (user-error (if minibuffer-default + "End of defaults; no next item" + "End of history; no default available"))) (if (> nabs (length (symbol-value minibuffer-history-variable))) - (error "Beginning of history; no preceding item")) + (user-error "Beginning of history; no preceding item")) (unless (memq last-command '(next-history-element previous-history-element)) (let ((prompt-end (minibuffer-prompt-end))) @@ -1945,8 +1945,8 @@ Some change-hooks test this variable to do something different.") Call `undo-start' to get ready to undo recent changes, then call `undo-more' one or more times to undo them." (or (listp pending-undo-list) - (error (concat "No further undo information" - (and undo-in-region " for region")))) + (user-error (concat "No further undo information" + (and undo-in-region " for region")))) (let ((undo-in-progress t)) ;; Note: The following, while pulling elements off ;; `pending-undo-list' will call primitive change functions which @@ -1972,7 +1972,7 @@ If BEG and END are specified, then only undo elements that apply to text between BEG and END are used; other undo elements are ignored. If BEG and END are nil, all undo elements are used." (if (eq buffer-undo-list t) - (error "No undo information in this buffer")) + (user-error "No undo information in this buffer")) (setq pending-undo-list (if (and beg end (not (= beg end))) (undo-make-selective-list (min beg end) (max beg end)) @@ -3244,10 +3244,6 @@ move the yanking point; just return the Nth kill forward." :type 'boolean :group 'killing) -(put 'text-read-only 'error-conditions - '(text-read-only buffer-read-only error)) -(put 'text-read-only 'error-message (purecopy "Text is read-only")) - (defun kill-region (beg end &optional yank-handler) "Kill (\"cut\") text between point and mark. This deletes the text from the buffer and saves it in the kill ring. diff --git a/lisp/subr.el b/lisp/subr.el index 1f9f3aee9fa..8cfb1eeea16 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -274,6 +274,17 @@ for the sake of consistency." (signal 'error (list (apply 'format args))))) (set-advertised-calling-convention 'error '(string &rest args) "23.1") +(defun user-error (format &rest args) + "Signal a pilot error, making error message by passing all args to `format'. +In Emacs, the convention is that error messages start with a capital +letter but *do not* end with a period. Please follow this convention +for the sake of consistency. +This is just like `error' except that `user-error's are expected to be the +result of an incorrect manipulation on the part of the user, rather than the +result of an actual problem." + (while t + (signal 'user-error (list (apply #'format format args))))) + ;; We put this here instead of in frame.el so that it's defined even on ;; systems where frame.el isn't loaded. (defun frame-configuration-p (object) diff --git a/lisp/vc/smerge-mode.el b/lisp/vc/smerge-mode.el index d2881b40ad0..3db1f669d63 100644 --- a/lisp/vc/smerge-mode.el +++ b/lisp/vc/smerge-mode.el @@ -342,12 +342,11 @@ Can be nil if the style is undecided, or else: )))) (defvar smerge-resolve-function - (lambda () (error "Don't know how to resolve")) + (lambda () (user-error "Don't know how to resolve")) "Mode-specific merge function. The function is called with zero or one argument (non-nil if the resolution function should only apply safe heuristics) and with the match data set according to `smerge-match-conflict'.") -(add-to-list 'debug-ignored-errors "Don't know how to resolve") (defvar smerge-text-properties `(help-echo "merge conflict: mouse-3 shows a menu" @@ -626,7 +625,7 @@ major modes. Uses `smerge-resolve-function' to do the actual work." (set-match-data md) (smerge-keep-n choice)) (t - (error "Don't know how to resolve")))) + (user-error "Don't know how to resolve")))) (if (buffer-name buf) (kill-buffer buf)) (if m (delete-file m)) (if b (delete-file b)) @@ -810,9 +809,7 @@ An error is raised if not inside a conflict." (when base-start (1- base-start)) base-start (1- other-start) other-start)) t) - (search-failed (error "Point not in conflict region"))))) - -(add-to-list 'debug-ignored-errors "Point not in conflict region") + (search-failed (user-error "Point not in conflict region"))))) (defun smerge-conflict-overlay (pos) "Return the conflict overlay at POS if any." diff --git a/lisp/window.el b/lisp/window.el index 9557dbf057e..a650c5602ba 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -5094,11 +5094,11 @@ Return the buffer switched to." ((eq buffer (window-buffer))) ((window-minibuffer-p) (if force-same-window - (error "Cannot switch buffers in minibuffer window") + (user-error "Cannot switch buffers in minibuffer window") (pop-to-buffer buffer norecord))) ((eq (window-dedicated-p) t) (if force-same-window - (error "Cannot switch buffers in a dedicated window") + (user-error "Cannot switch buffers in a dedicated window") (pop-to-buffer buffer norecord))) (t (set-window-buffer nil buffer))) diff --git a/src/ChangeLog b/src/ChangeLog index 2c2902e937a..8063c8d8166 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,13 @@ +2012-05-04 Stefan Monnier + + * data.c (PUT_ERROR): New macro. + (syms_of_data): Use it. Add new error type `user-error'. + * undo.c (user_error): New function. + (Fprimitive_undo): Use it. + * print.c (print_error_message): Adjust print style for `user-error'. + * keyboard.c (user_error): New function. + (Fexit_recursive_edit, Fabort_recursive_edit): Use it. + 2012-05-03 Paul Eggert Do not limit current-time-string to years 1000..9999. @@ -19,8 +29,8 @@ localtime/gmtime, but also accessing these functions' results including their tm_zone values if any, and any related TZ setting. (format_time_string): Last arg is now struct tm *, not struct tm **, - so that the struct tm is saved in the critical section. All - callers changed. Simplify allocation of initial buffer, partly + so that the struct tm is saved in the critical section. + All callers changed. Simplify allocation of initial buffer, partly motivated by the fact that memory allocation needs to be outside the critical section. diff --git a/src/data.c b/src/data.c index bd1d89992cb..feacea2c08b 100644 --- a/src/data.c +++ b/src/data.c @@ -51,7 +51,7 @@ along with GNU Emacs. If not, see . */ Lisp_Object Qnil, Qt, Qquote, Qlambda, Qunbound; static Lisp_Object Qsubr; Lisp_Object Qerror_conditions, Qerror_message, Qtop_level; -Lisp_Object Qerror, Qquit, Qargs_out_of_range; +Lisp_Object Qerror, Quser_error, Qquit, Qargs_out_of_range; static Lisp_Object Qwrong_type_argument; Lisp_Object Qvoid_variable, Qvoid_function; static Lisp_Object Qcyclic_function_indirection; @@ -2937,6 +2937,7 @@ syms_of_data (void) DEFSYM (Qtop_level, "top-level"); DEFSYM (Qerror, "error"); + DEFSYM (Quser_error, "user-error"); DEFSYM (Qquit, "quit"); DEFSYM (Qwrong_type_argument, "wrong-type-argument"); DEFSYM (Qargs_out_of_range, "args-out-of-range"); @@ -3004,102 +3005,42 @@ syms_of_data (void) Fput (Qerror, Qerror_message, make_pure_c_string ("error")); - Fput (Qquit, Qerror_conditions, - pure_cons (Qquit, Qnil)); - Fput (Qquit, Qerror_message, - make_pure_c_string ("Quit")); +#define PUT_ERROR(sym, tail, msg) \ + Fput (sym, Qerror_conditions, pure_cons (sym, tail)); \ + Fput (sym, Qerror_message, make_pure_c_string (msg)) - Fput (Qwrong_type_argument, Qerror_conditions, - pure_cons (Qwrong_type_argument, error_tail)); - Fput (Qwrong_type_argument, Qerror_message, - make_pure_c_string ("Wrong type argument")); - - Fput (Qargs_out_of_range, Qerror_conditions, - pure_cons (Qargs_out_of_range, error_tail)); - Fput (Qargs_out_of_range, Qerror_message, - make_pure_c_string ("Args out of range")); - - Fput (Qvoid_function, Qerror_conditions, - pure_cons (Qvoid_function, error_tail)); - Fput (Qvoid_function, Qerror_message, - make_pure_c_string ("Symbol's function definition is void")); - - Fput (Qcyclic_function_indirection, Qerror_conditions, - pure_cons (Qcyclic_function_indirection, error_tail)); - Fput (Qcyclic_function_indirection, Qerror_message, - make_pure_c_string ("Symbol's chain of function indirections contains a loop")); - - Fput (Qcyclic_variable_indirection, Qerror_conditions, - pure_cons (Qcyclic_variable_indirection, error_tail)); - Fput (Qcyclic_variable_indirection, Qerror_message, - make_pure_c_string ("Symbol's chain of variable indirections contains a loop")); + PUT_ERROR (Qquit, Qnil, "Quit"); + PUT_ERROR (Quser_error, error_tail, ""); + PUT_ERROR (Qwrong_type_argument, error_tail, "Wrong type argument"); + PUT_ERROR (Qargs_out_of_range, error_tail, "Args out of range"); + PUT_ERROR (Qvoid_function, error_tail, + "Symbol's function definition is void"); + PUT_ERROR (Qcyclic_function_indirection, error_tail, + "Symbol's chain of function indirections contains a loop"); + PUT_ERROR (Qcyclic_variable_indirection, error_tail, + "Symbol's chain of variable indirections contains a loop"); DEFSYM (Qcircular_list, "circular-list"); - Fput (Qcircular_list, Qerror_conditions, - pure_cons (Qcircular_list, error_tail)); - Fput (Qcircular_list, Qerror_message, - make_pure_c_string ("List contains a loop")); - - Fput (Qvoid_variable, Qerror_conditions, - pure_cons (Qvoid_variable, error_tail)); - Fput (Qvoid_variable, Qerror_message, - make_pure_c_string ("Symbol's value as variable is void")); - - Fput (Qsetting_constant, Qerror_conditions, - pure_cons (Qsetting_constant, error_tail)); - Fput (Qsetting_constant, Qerror_message, - make_pure_c_string ("Attempt to set a constant symbol")); - - Fput (Qinvalid_read_syntax, Qerror_conditions, - pure_cons (Qinvalid_read_syntax, error_tail)); - Fput (Qinvalid_read_syntax, Qerror_message, - make_pure_c_string ("Invalid read syntax")); - - Fput (Qinvalid_function, Qerror_conditions, - pure_cons (Qinvalid_function, error_tail)); - Fput (Qinvalid_function, Qerror_message, - make_pure_c_string ("Invalid function")); - - Fput (Qwrong_number_of_arguments, Qerror_conditions, - pure_cons (Qwrong_number_of_arguments, error_tail)); - Fput (Qwrong_number_of_arguments, Qerror_message, - make_pure_c_string ("Wrong number of arguments")); - - Fput (Qno_catch, Qerror_conditions, - pure_cons (Qno_catch, error_tail)); - Fput (Qno_catch, Qerror_message, - make_pure_c_string ("No catch for tag")); - - Fput (Qend_of_file, Qerror_conditions, - pure_cons (Qend_of_file, error_tail)); - Fput (Qend_of_file, Qerror_message, - make_pure_c_string ("End of file during parsing")); + PUT_ERROR (Qcircular_list, error_tail, "List contains a loop"); + PUT_ERROR (Qvoid_variable, error_tail, "Symbol's value as variable is void"); + PUT_ERROR (Qsetting_constant, error_tail, + "Attempt to set a constant symbol"); + PUT_ERROR (Qinvalid_read_syntax, error_tail, "Invalid read syntax"); + PUT_ERROR (Qinvalid_function, error_tail, "Invalid function"); + PUT_ERROR (Qwrong_number_of_arguments, error_tail, + "Wrong number of arguments"); + PUT_ERROR (Qno_catch, error_tail, "No catch for tag"); + PUT_ERROR (Qend_of_file, error_tail, "End of file during parsing"); arith_tail = pure_cons (Qarith_error, error_tail); - Fput (Qarith_error, Qerror_conditions, - arith_tail); - Fput (Qarith_error, Qerror_message, - make_pure_c_string ("Arithmetic error")); + Fput (Qarith_error, Qerror_conditions, arith_tail); + Fput (Qarith_error, Qerror_message, make_pure_c_string ("Arithmetic error")); - Fput (Qbeginning_of_buffer, Qerror_conditions, - pure_cons (Qbeginning_of_buffer, error_tail)); - Fput (Qbeginning_of_buffer, Qerror_message, - make_pure_c_string ("Beginning of buffer")); - - Fput (Qend_of_buffer, Qerror_conditions, - pure_cons (Qend_of_buffer, error_tail)); - Fput (Qend_of_buffer, Qerror_message, - make_pure_c_string ("End of buffer")); - - Fput (Qbuffer_read_only, Qerror_conditions, - pure_cons (Qbuffer_read_only, error_tail)); - Fput (Qbuffer_read_only, Qerror_message, - make_pure_c_string ("Buffer is read-only")); - - Fput (Qtext_read_only, Qerror_conditions, - pure_cons (Qtext_read_only, error_tail)); - Fput (Qtext_read_only, Qerror_message, - make_pure_c_string ("Text is read-only")); + PUT_ERROR (Qbeginning_of_buffer, error_tail, "Beginning of buffer"); + PUT_ERROR (Qend_of_buffer, error_tail, "End of buffer"); + PUT_ERROR (Qbuffer_read_only, error_tail, "Buffer is read-only"); + PUT_ERROR (Qtext_read_only, pure_cons (Qbuffer_read_only, error_tail), + "Text is read-only"); DEFSYM (Qrange_error, "range-error"); DEFSYM (Qdomain_error, "domain-error"); @@ -3107,30 +3048,17 @@ syms_of_data (void) DEFSYM (Qoverflow_error, "overflow-error"); DEFSYM (Qunderflow_error, "underflow-error"); - Fput (Qdomain_error, Qerror_conditions, - pure_cons (Qdomain_error, arith_tail)); - Fput (Qdomain_error, Qerror_message, - make_pure_c_string ("Arithmetic domain error")); + PUT_ERROR (Qdomain_error, arith_tail, "Arithmetic domain error"); - Fput (Qrange_error, Qerror_conditions, - pure_cons (Qrange_error, arith_tail)); - Fput (Qrange_error, Qerror_message, - make_pure_c_string ("Arithmetic range error")); + PUT_ERROR (Qrange_error, arith_tail, "Arithmetic range error"); - Fput (Qsingularity_error, Qerror_conditions, - pure_cons (Qsingularity_error, Fcons (Qdomain_error, arith_tail))); - Fput (Qsingularity_error, Qerror_message, - make_pure_c_string ("Arithmetic singularity error")); + PUT_ERROR (Qsingularity_error, Fcons (Qdomain_error, arith_tail), + "Arithmetic singularity error"); - Fput (Qoverflow_error, Qerror_conditions, - pure_cons (Qoverflow_error, Fcons (Qdomain_error, arith_tail))); - Fput (Qoverflow_error, Qerror_message, - make_pure_c_string ("Arithmetic overflow error")); - - Fput (Qunderflow_error, Qerror_conditions, - pure_cons (Qunderflow_error, Fcons (Qdomain_error, arith_tail))); - Fput (Qunderflow_error, Qerror_message, - make_pure_c_string ("Arithmetic underflow error")); + PUT_ERROR (Qoverflow_error, Fcons (Qdomain_error, arith_tail), + "Arithmetic overflow error"); + PUT_ERROR (Qunderflow_error, Fcons (Qdomain_error, arith_tail), + "Arithmetic underflow error"); staticpro (&Qnil); staticpro (&Qt); diff --git a/src/fileio.c b/src/fileio.c index 69b2c9cb0f2..f09ba2c394c 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -87,17 +87,17 @@ along with GNU Emacs. If not, see . */ #define FILE_SYSTEM_CASE(filename) (filename) #endif -/* Nonzero during writing of auto-save files */ +/* Nonzero during writing of auto-save files. */ static int auto_saving; -/* Nonzero umask during creation of auto-save directories */ +/* Nonzero umask during creation of auto-save directories. */ static int auto_saving_dir_umask; /* Set by auto_save_1 to mode of original file so Fwrite_region will create - a new file with the same mode as the original */ + a new file with the same mode as the original. */ static int auto_save_mode_bits; -/* Set by auto_save_1 if an error occurred during the last auto-save. */ +/* Set by auto_save_1 if an error occurred during the last auto-save. */ static int auto_save_error_occurred; /* The symbol bound to coding-system-for-read when @@ -111,7 +111,7 @@ static Lisp_Object Qauto_save_coding; which gives a list of operations it handles.. */ static Lisp_Object Qoperations; -/* Lisp functions for translating file formats */ +/* Lisp functions for translating file formats. */ static Lisp_Object Qformat_decode, Qformat_annotate_function; /* Lisp function for setting buffer-file-coding-system and the diff --git a/src/keyboard.c b/src/keyboard.c index a1ad1fed325..249e5ee9544 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -1200,6 +1200,12 @@ This also exits all active minibuffers. */) Fthrow (Qtop_level, Qnil); } +static void user_error (const char*) NO_RETURN; +static void user_error (const char *msg) +{ + xsignal1 (Quser_error, build_string (msg)); +} + static Lisp_Object Fexit_recursive_edit (void) NO_RETURN; DEFUN ("exit-recursive-edit", Fexit_recursive_edit, Sexit_recursive_edit, 0, 0, "", doc: /* Exit from the innermost recursive edit or minibuffer. */) @@ -1208,7 +1214,7 @@ DEFUN ("exit-recursive-edit", Fexit_recursive_edit, Sexit_recursive_edit, 0, 0, if (command_loop_level > 0 || minibuf_level > 0) Fthrow (Qexit, Qnil); - error ("No recursive edit is in progress"); + user_error ("No recursive edit is in progress"); } static Lisp_Object Fabort_recursive_edit (void) NO_RETURN; @@ -1219,7 +1225,7 @@ DEFUN ("abort-recursive-edit", Fabort_recursive_edit, Sabort_recursive_edit, 0, if (command_loop_level > 0 || minibuf_level > 0) Fthrow (Qexit, Qt); - error ("No recursive edit is in progress"); + user_error ("No recursive edit is in progress"); } #if defined (HAVE_MOUSE) || defined (HAVE_GPM) diff --git a/src/lisp.h b/src/lisp.h index 16c10f2688c..1f839750609 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -2377,7 +2377,7 @@ extern Lisp_Object Qerror, Qquit, Qargs_out_of_range; extern Lisp_Object Qvoid_variable, Qvoid_function; extern Lisp_Object Qinvalid_read_syntax; extern Lisp_Object Qinvalid_function, Qwrong_number_of_arguments, Qno_catch; -extern Lisp_Object Qend_of_file, Qarith_error, Qmark_inactive; +extern Lisp_Object Quser_error, Qend_of_file, Qarith_error, Qmark_inactive; extern Lisp_Object Qbeginning_of_buffer, Qend_of_buffer, Qbuffer_read_only; extern Lisp_Object Qtext_read_only; extern Lisp_Object Qinteractive_form; diff --git a/src/print.c b/src/print.c index b8ee44d0d10..c2edde590fe 100644 --- a/src/print.c +++ b/src/print.c @@ -865,7 +865,6 @@ print_error_message (Lisp_Object data, Lisp_Object stream, const char *context, { Lisp_Object errname, errmsg, file_error, tail; struct gcpro gcpro1; - int i; if (context != 0) write_string_1 (context, -1, stream); @@ -893,9 +892,8 @@ print_error_message (Lisp_Object data, Lisp_Object stream, const char *context, } else { - Lisp_Object error_conditions; + Lisp_Object error_conditions = Fget (errname, Qerror_conditions); errmsg = Fget (errname, Qerror_message); - error_conditions = Fget (errname, Qerror_conditions); file_error = Fmemq (Qfile_error, error_conditions); } @@ -909,22 +907,30 @@ print_error_message (Lisp_Object data, Lisp_Object stream, const char *context, if (!NILP (file_error) && CONSP (tail)) errmsg = XCAR (tail), tail = XCDR (tail); - if (STRINGP (errmsg)) - Fprinc (errmsg, stream); - else - write_string_1 ("peculiar error", -1, stream); + { + const char *sep = ": "; - for (i = 0; CONSP (tail); tail = XCDR (tail), i = 1) - { - Lisp_Object obj; + if (!STRINGP (errmsg)) + write_string_1 ("peculiar error", -1, stream); + else if (SCHARS (errmsg)) + Fprinc (errmsg, stream); + else + sep = NULL; - write_string_1 (i ? ", " : ": ", 2, stream); - obj = XCAR (tail); - if (!NILP (file_error) || EQ (errname, Qend_of_file)) - Fprinc (obj, stream); - else - Fprin1 (obj, stream); - } + for (; CONSP (tail); tail = XCDR (tail), sep = ", ") + { + Lisp_Object obj; + + if (sep) + write_string_1 (sep, 2, stream); + obj = XCAR (tail); + if (!NILP (file_error) + || EQ (errname, Qend_of_file) || EQ (errname, Quser_error)) + Fprinc (obj, stream); + else + Fprin1 (obj, stream); + } + } UNGCPRO; } diff --git a/src/undo.c b/src/undo.c index 4041a2adacc..b0acd0c216f 100644 --- a/src/undo.c +++ b/src/undo.c @@ -436,6 +436,13 @@ truncate_undo_list (struct buffer *b) unbind_to (count, Qnil); } + +static void user_error (const char*) NO_RETURN; +static void user_error (const char *msg) +{ + xsignal1 (Quser_error, build_string (msg)); +} + DEFUN ("primitive-undo", Fprimitive_undo, Sprimitive_undo, 2, 2, 0, doc: /* Undo N records from the front of the list LIST. @@ -528,7 +535,7 @@ Return what remains of the list. */) end = Fcdr (cdr); if (XINT (beg) < BEGV || XINT (end) > ZV) - error ("Changes to be undone are outside visible portion of buffer"); + user_error ("Changes to be undone are outside visible portion of buffer"); Fput_text_property (beg, end, prop, val, Qnil); } else if (INTEGERP (car) && INTEGERP (cdr)) @@ -537,7 +544,7 @@ Return what remains of the list. */) if (XINT (car) < BEGV || XINT (cdr) > ZV) - error ("Changes to be undone are outside visible portion of buffer"); + user_error ("Changes to be undone are outside visible portion of buffer"); /* Set point first thing, so that undoing this undo does not send point back to where it is now. */ Fgoto_char (car); @@ -588,14 +595,14 @@ Return what remains of the list. */) if (pos < 0) { if (-pos < BEGV || -pos > ZV) - error ("Changes to be undone are outside visible portion of buffer"); + user_error ("Changes to be undone are outside visible portion of buffer"); SET_PT (-pos); Finsert (1, &membuf); } else { if (pos < BEGV || pos > ZV) - error ("Changes to be undone are outside visible portion of buffer"); + user_error ("Changes to be undone are outside visible portion of buffer"); SET_PT (pos); /* Now that we record marker adjustments From ddff335186c805b3756cff110033fe118f548f17 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 4 May 2012 20:37:30 -0400 Subject: [PATCH 345/564] More small edits for doc/lispref * control.texi: Where possible, use example rather than smallexample. (Sequencing, Conditionals, Signaling Errors, Handling Errors): Tweak page breaks. * customize.texi: Where possible, use example rather than smallexample. (Common Keywords, Variable Definitions, Applying Customizations) (Custom Themes): Tweak page breaks. * eval.texi, functions.texi, loading.texi, macros.texi: Where possible, use example rather than smallexample. * sequences.texi (Arrays): Tweak page breaks. * symbols.texi: Where possible, use example rather than smallexample. (Symbol Components): Fix typo. (Other Plists): Tweak page break. --- doc/lispref/ChangeLog | 19 ++++++++++++ doc/lispref/control.texi | 60 ++++++++++++++++++------------------ doc/lispref/customize.texi | 62 ++++++++++++++++++-------------------- doc/lispref/eval.texi | 25 +++++++-------- doc/lispref/functions.texi | 28 ++++++++--------- doc/lispref/loading.texi | 52 ++++++++++++++++---------------- doc/lispref/macros.texi | 38 +++++++++++------------ doc/lispref/sequences.texi | 2 +- doc/lispref/symbols.texi | 22 +++++++------- 9 files changed, 161 insertions(+), 147 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 2cb961cab55..beaf0c0476b 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,22 @@ +2012-05-05 Glenn Morris + + * eval.texi, functions.texi, loading.texi, macros.texi: + Where possible, use example rather than smallexample. + + * symbols.texi: Where possible, use example rather than smallexample. + (Symbol Components): Fix typo. + (Other Plists): Tweak page break. + + * sequences.texi (Arrays): Tweak page breaks. + + * customize.texi: Where possible, use example rather than smallexample. + (Common Keywords, Variable Definitions, Applying Customizations) + (Custom Themes): Tweak page breaks. + + * control.texi: Where possible, use example rather than smallexample. + (Sequencing, Conditionals, Signaling Errors, Handling Errors): + Tweak page breaks. + 2012-05-04 Glenn Morris * lists.texi (List-related Predicates, List Variables): diff --git a/doc/lispref/control.texi b/doc/lispref/control.texi index f8f9ddfa2e8..95b70e87c93 100644 --- a/doc/lispref/control.texi +++ b/doc/lispref/control.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990-1995, 1998-1999, 2001-2012 Free Software Foundation, Inc. +@c Copyright (C) 1990-1995, 1998-1999, 2001-2012 Free Software Foundation, Inc. @c See the file elisp.texi for copying conditions. @setfilename ../../info/control @node Control Structures, Variables, Evaluation, Top @@ -94,8 +94,8 @@ order, returning the result of the final form. @end example @end defspec - Two other control constructs likewise evaluate a series of forms but return -a different value: + Two other constructs likewise evaluate a series of forms but return +different values: @defspec prog1 form1 forms@dots{} This special form evaluates @var{form1} and all of the @var{forms}, in @@ -160,8 +160,8 @@ If @var{condition} has the value @code{nil}, and no @var{else-forms} are given, @code{if} returns @code{nil}. @code{if} is a special form because the branch that is not selected is -never evaluated---it is ignored. Thus, in the example below, -@code{true} is not printed because @code{print} is never called. +never evaluated---it is ignored. Thus, in this example, +@code{true} is not printed because @code{print} is never called: @example @group @@ -258,9 +258,7 @@ clauses was successful. To do this, we use @code{t} as the @var{condition} of the last clause, like this: @code{(t @var{body-forms})}. The form @code{t} evaluates to @code{t}, which is never @code{nil}, so this clause never fails, provided the @code{cond} -gets to it at all. - -For example, +gets to it at all. For example: @example @group @@ -812,10 +810,10 @@ handlers that handle the error: @code{condition-case} binds a local variable to a list of the form @code{(@var{error-symbol} .@: @var{data})} (@pxref{Handling Errors}). -The function @code{signal} never returns (though in older Emacs versions -it could sometimes return). +The function @code{signal} never returns. +@c (though in older Emacs versions it sometimes could). -@smallexample +@example @group (signal 'wrong-number-of-arguments '(x y)) @error{} Wrong number of arguments: x, y @@ -825,7 +823,7 @@ it could sometimes return). (signal 'no-such-error '("My unknown error condition")) @error{} peculiar error: "My unknown error condition" @end group -@end smallexample +@end example @end defun @cindex CL note---no continuable errors @@ -991,7 +989,7 @@ to allow the debugger to run before the handler); @var{body} is one or more Lisp expressions to be executed when this handler handles an error. Here are examples of handlers: -@smallexample +@example @group (error nil) @@ -1001,7 +999,7 @@ Here are examples of handlers: (message "Either division by zero or failure to open a file")) @end group -@end smallexample +@end example Each error that occurs has an @dfn{error symbol} that describes what kind of error it is. The @code{error-conditions} property of this @@ -1034,9 +1032,9 @@ Sometimes it is necessary to re-throw a signal caught by @code{condition-case}, for some outer-level handler to catch. Here's how to do that: -@smallexample +@example (signal (car err) (cdr err)) -@end smallexample +@end example @noindent where @code{err} is the error description variable, the first argument @@ -1055,7 +1053,7 @@ Here is an example of using @code{condition-case} to handle the error that results from dividing by zero. The handler displays the error message (but without a beep), then returns a very large number. -@smallexample +@example @group (defun safe-divide (dividend divisor) (condition-case err @@ -1076,22 +1074,24 @@ message (but without a beep), then returns a very large number. @print{} Arithmetic error: (arith-error) @result{} 1000000 @end group -@end smallexample +@end example @noindent -The handler specifies condition name @code{arith-error} so that it will handle only division-by-zero errors. Other kinds of errors will not be handled, at least not by this @code{condition-case}. Thus, +The handler specifies condition name @code{arith-error} so that it +will handle only division-by-zero errors. Other kinds of errors will +not be handled (by this @code{condition-case}). Thus: -@smallexample +@example @group (safe-divide nil 3) @error{} Wrong type argument: number-or-marker-p, nil @end group -@end smallexample +@end example Here is a @code{condition-case} that catches all kinds of errors, -including those signaled with @code{error}: +including those from @code{error}: -@smallexample +@example @group (setq baz 34) @result{} 34 @@ -1109,7 +1109,7 @@ including those signaled with @code{error}: @print{} The error was: (error "Rats! The variable baz was 34, not 35") @result{} 2 @end group -@end smallexample +@end example @defmac ignore-errors body@dots{} This construct executes @var{body}, ignoring any errors that occur @@ -1120,12 +1120,12 @@ otherwise, it returns @code{nil}. Here's the example at the beginning of this subsection rewritten using @code{ignore-errors}: -@smallexample +@example @group (ignore-errors (delete-file filename)) @end group -@end smallexample +@end example @end defmac @defmac with-demoted-errors body@dots{} @@ -1280,7 +1280,7 @@ Variables}). For example, here we make an invisible buffer for temporary use, and make sure to kill it before finishing: -@smallexample +@example @group (let ((buffer (get-buffer-create " *temp*"))) (with-current-buffer buffer @@ -1288,7 +1288,7 @@ make sure to kill it before finishing: @var{body-form} (kill-buffer buffer)))) @end group -@end smallexample +@end example @noindent You might think that we could just as well write @code{(kill-buffer @@ -1313,7 +1313,7 @@ is protected with a form that guarantees deletion of the process in the event of failure. Otherwise, Emacs might fill up with useless subprocesses. -@smallexample +@example @group (let ((win nil)) (unwind-protect @@ -1324,7 +1324,7 @@ subprocesses. (error "Ftp login failed"))) (or win (and process (delete-process process))))) @end group -@end smallexample +@end example This example has a small bug: if the user types @kbd{C-g} to quit, and the quit happens immediately after the function diff --git a/doc/lispref/customize.texi b/doc/lispref/customize.texi index 92bd7a80ac6..be224987d29 100644 --- a/doc/lispref/customize.texi +++ b/doc/lispref/customize.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1997-2012 Free Software Foundation, Inc. +@c Copyright (C) 1997-2012 Free Software Foundation, Inc. @c See the file elisp.texi for copying conditions. @setfilename ../../info/customize @node Customization, Loading, Macros, Top @@ -158,7 +158,7 @@ Packages distributed as part of Emacs that use the @defvar customize-package-emacs-version-alist This alist provides a mapping for the versions of Emacs that are associated with versions of a package listed in the -@code{:package-version} keyword. Its elements look like this: +@code{:package-version} keyword. Its elements are: @example (@var{package} (@var{pversion} . @var{eversion})@dots{}) @@ -169,6 +169,8 @@ elements that contain a package version @var{pversion} with an associated Emacs version @var{eversion}. These versions are strings. For example, the MH-E package updates this alist with the following: +@c Must be small else too wide. +@c FIXME obviously this is out of date (in the code). @smallexample (add-to-list 'customize-package-emacs-version-alist '(MH-E ("6.0" . "22.1") ("6.1" . "22.1") ("7.0" . "22.1") @@ -395,7 +397,7 @@ Set the variable's @code{safe-local-variable} property to @item :set-after @var{variables} @kindex set-after@r{, @code{defcustom} keyword} When setting variables according to saved customizations, make sure to -set the variables @var{variables} before this one; in other words, delay +set the variables @var{variables} before this one; i.e., delay setting this variable until after those others have been handled. Use @code{:set-after} if setting this variable won't work properly unless those other variables already have their intended values. @@ -682,9 +684,9 @@ The argument to the @code{:options} keywords should be a list of specifications for reasonable keys in the alist. Ordinarily, they are simply atoms, which stand for themselves. For example: -@smallexample +@example :options '("foo" "bar" "baz") -@end smallexample +@end example @noindent specifies that there are three ``known'' keys, namely @code{"foo"}, @@ -696,9 +698,9 @@ integer. You can specify this by using a list instead of an atom in the list. The first element will specify the key, like before, while the second element will specify the value type. For example: -@smallexample +@example :options '("foo" ("bar" integer) "baz") -@end smallexample +@end example Finally, you may want to change how the key is presented. By default, the key is simply shown as a @code{const}, since the user cannot change @@ -708,37 +710,37 @@ you may want to use a more specialized type for presenting the key, like This is done by using a customization type specification instead of a symbol for the key. -@smallexample +@example :options '("foo" ((function-item some-function) integer) "baz") -@end smallexample +@end example Many alists use lists with two elements, instead of cons cells. For example, -@smallexample +@example (defcustom list-alist '(("foo" 1) ("bar" 2) ("baz" 3)) "Each element is a list of the form (KEY VALUE).") -@end smallexample +@end example @noindent instead of -@smallexample +@example (defcustom cons-alist '(("foo" . 1) ("bar" . 2) ("baz" . 3)) "Each element is a cons-cell (KEY . VALUE).") -@end smallexample +@end example Because of the way lists are implemented on top of cons cells, you can treat @code{list-alist} in the example above as a cons cell alist, where the value type is a list with a single element containing the real value. -@smallexample +@example (defcustom list-alist '(("foo" 1) ("bar" 2) ("baz" 3)) "Each element is a list of the form (KEY VALUE)." :type '(alist :value-type (group integer))) -@end smallexample +@end example The @code{group} widget is used here instead of @code{list} only because the formatting is better suited for the purpose. @@ -746,14 +748,14 @@ the formatting is better suited for the purpose. Similarly, you can have alists with more values associated with each key, using variations of this trick: -@smallexample +@example (defcustom person-data '(("brian" 50 t) ("dorith" 55 nil) ("ken" 52 t)) "Alist of basic info about people. Each element has the form (NAME AGE MALE-FLAG)." :type '(alist :value-type (group integer boolean))) -@end smallexample +@end example @item (plist :key-type @var{key-type} :value-type @var{value-type}) This customization type is similar to @code{alist} (see above), except @@ -1264,7 +1266,7 @@ customization settings for variables and faces, respectively. When the user invokes @samp{Save for future sessions} in the Customize interface, that takes effect by writing a @code{custom-set-variables} and/or a @code{custom-set-faces} form into the custom file, to be -evaluated the next time Emacs starts up. +evaluated the next time Emacs starts. @defun custom-set-variables &rest args This function installs the variable customizations specified by @@ -1335,11 +1337,10 @@ the theme; this is the description shown when the user invokes the @code{describe-theme} command or types @kbd{?} in the @samp{*Custom Themes*} buffer. -Two special theme names are disallowed: @code{user} is a ``dummy'' -theme which stores the user's direct customization settings, and -@code{changed} is a ``dummy'' theme which stores changes made outside -of the Customize system. If you specify either of these as the -@var{theme} argument, @code{deftheme} signals an error. +Two special theme names are disallowed (using them causes an error): +@code{user} is a ``dummy'' theme that stores the user's direct +customization settings, and @code{changed} is a ``dummy'' theme that +stores changes made outside of the Customize system. @end defmac @defmac provide-theme theme @@ -1387,7 +1388,7 @@ displays the source file and asks for confirmation from the user before loading any non-built-in theme for the first time. The following functions are useful for programmatically enabling and -disabling Custom themes: +disabling themes: @defun custom-theme-p theme This function return a non-@code{nil} value if @var{theme} (a symbol) @@ -1400,14 +1401,11 @@ it returns @code{nil}. This function loads the Custom theme named @var{theme} from its source file, looking for the source file in the directories specified by the variable @code{custom-theme-load-path}. @xref{Custom Themes,,, emacs, -The GNU Emacs Manual}. It also @dfn{enables} the theme, causing its -variable and face settings to take effect. - -If the optional argument @var{no-confirm} is non-@code{nil}, this -skips prompting the user for confirmation before loading the theme. - -If the optional argument @var{no-enable} is non-@code{nil}, the theme -is loaded but not enabled. +The GNU Emacs Manual}. It also @dfn{enables} the theme (unless the +optional argument @var{no-enable} is non-@code{nil}), causing its +variable and face settings to take effect. It prompts the user for +confirmation before loading the theme, unless the optional argument +@var{no-confirm} is non-@code{nil}. @end deffn @deffn Command enable-theme theme diff --git a/doc/lispref/eval.texi b/doc/lispref/eval.texi index 62de337a5e3..342c79e48e8 100644 --- a/doc/lispref/eval.texi +++ b/doc/lispref/eval.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990-1994, 1998, 2001-2012 Free Software Foundation, Inc. +@c Copyright (C) 1990-1994, 1998, 2001-2012 Free Software Foundation, Inc. @c See the file elisp.texi for copying conditions. @setfilename ../../info/eval @node Evaluation, Control Structures, Symbols, Top @@ -261,16 +261,13 @@ use @code{fset} to set the function cell of a symbol and into the function cell of @code{first}, and the symbol @code{first} into the function cell of @code{erste}. -@smallexample +@example @group ;; @r{Build this function cell linkage:} ;; ------------- ----- ------- ------- ;; | # | <-- | car | <-- | first | <-- | erste | ;; ------------- ----- ------- ------- @end group -@end smallexample - -@smallexample @group (symbol-function 'car) @result{} # @@ -287,19 +284,19 @@ the function cell of @code{erste}. (erste '(1 2 3)) ; @r{Call the function referenced by @code{erste}.} @result{} 1 @end group -@end smallexample +@end example By contrast, the following example calls a function without any symbol function indirection, because the first element is an anonymous Lisp function, not a symbol. -@smallexample +@example @group ((lambda (arg) (erste arg)) '(1 2 3)) @result{} 1 @end group -@end smallexample +@end example @noindent Executing the function itself evaluates its body; this does involve @@ -308,18 +305,18 @@ symbol function indirection when calling @code{erste}. This form is rarely used and is now deprecated. Instead, you should write it as: -@smallexample +@example @group (funcall (lambda (arg) (erste arg)) '(1 2 3)) @end group -@end smallexample +@end example or just -@smallexample +@example @group (let ((arg '(1 2 3))) (erste arg)) @end group -@end smallexample +@end example The built-in function @code{indirect-function} provides an easy way to perform symbol function indirection explicitly. @@ -342,12 +339,12 @@ loop in the chain of symbols. Here is how you could define @code{indirect-function} in Lisp: -@smallexample +@example (defun indirect-function (function) (if (symbolp function) (indirect-function (symbol-function function)) function)) -@end smallexample +@end example @end defun @node Function Forms diff --git a/doc/lispref/functions.texi b/doc/lispref/functions.texi index 24fe9ed5e68..21f365efe56 100644 --- a/doc/lispref/functions.texi +++ b/doc/lispref/functions.texi @@ -398,7 +398,7 @@ after a @code{&rest} argument. Here are some examples of argument lists and proper calls: -@smallexample +@example (funcall (lambda (n) (1+ n)) ; @r{One required:} 1) ; @r{requires exactly one argument.} @result{} 2 @@ -410,7 +410,7 @@ after a @code{&rest} argument. (+ n (apply '+ ns))) ; @r{1 or more arguments.} 1 2 3 4 5) @result{} 15 -@end smallexample +@end example @node Function Documentation @subsection Documentation Strings of Functions @@ -821,7 +821,7 @@ char-table; that is, a list, a vector, a bool-vector, or a string. The result is always a list. The length of the result is the same as the length of @var{sequence}. For example: -@smallexample +@example @group (mapcar 'car '((a b) (c d) (e f))) @result{} (a c e) @@ -853,7 +853,7 @@ Return the list of results." (mapcar* 'cons '(a b c) '(1 2 3 4)) @result{} ((a . 1) (b . 2) (c . 3)) @end group -@end smallexample +@end example @end defun @defun mapc function sequence @@ -874,7 +874,7 @@ argument and return a string. The argument @var{sequence} can be any kind of sequence except a char-table; that is, a list, a vector, a bool-vector, or a string. -@smallexample +@example @group (mapconcat 'symbol-name '(The cat in the hat) @@ -888,7 +888,7 @@ bool-vector, or a string. "") @result{} "IBM.9111" @end group -@end smallexample +@end example @end defun @node Anonymous Functions @@ -1189,18 +1189,18 @@ still allow the code to be byte compiled). For instance, in old versions of Emacs the @code{sit-for} function accepted three arguments, like this -@smallexample +@example (sit-for seconds milliseconds nodisp) -@end smallexample +@end example However, calling @code{sit-for} this way is considered obsolete (@pxref{Waiting}). The old calling convention is deprecated like this: -@smallexample +@example (set-advertised-calling-convention 'sit-for '(seconds &optional nodisp)) -@end smallexample +@end example @end defun @node Inline Functions @@ -1260,11 +1260,11 @@ indicates a real problem, but usually the functions in question are defined in other files which would be loaded if that code is run. For example, byte-compiling @file{fortran.el} used to warn: -@smallexample +@example In end of data: fortran.el:2152:1:Warning: the function `gud-find-c-expr' is not known to be defined. -@end smallexample +@end example In fact, @code{gud-find-c-expr} is only used in the function that Fortran mode uses for the local value of @@ -1277,9 +1277,9 @@ visible. You do that with @code{declare-function}. All you need to do is add a @code{declare-function} statement before the first use of the function in question: -@smallexample +@example (declare-function gud-find-c-expr "gud.el" nil) -@end smallexample +@end example This says that @code{gud-find-c-expr} is defined in @file{gud.el} (the @samp{.el} can be omitted). The compiler takes for granted that that file diff --git a/doc/lispref/loading.texi b/doc/lispref/loading.texi index 3806ab15b8b..93cc7a4598c 100644 --- a/doc/lispref/loading.texi +++ b/doc/lispref/loading.texi @@ -251,31 +251,31 @@ for @code{PATH}; directory names are separated by @samp{:} (or current default directory. Here is an example of how to set @env{EMACSLOADPATH} variable from @command{sh}: -@smallexample +@example export EMACSLOADPATH EMACSLOADPATH=/home/foo/.emacs.d/lisp:/opt/emacs/lisp -@end smallexample +@end example @noindent Here is how to set it from @code{csh}: -@smallexample +@example setenv EMACSLOADPATH /home/foo/.emacs.d/lisp:/opt/emacs/lisp -@end smallexample +@end example If @env{EMACSLOADPATH} is not set (which is usually the case), Emacs initializes @code{load-path} with the following two directories: -@smallexample +@example "/usr/local/share/emacs/@var{version}/site-lisp" -@end smallexample +@end example @noindent and -@smallexample +@example "/usr/local/share/emacs/site-lisp" -@end smallexample +@end example @noindent The first one is for locally installed packages for a particular Emacs @@ -304,9 +304,9 @@ packages are installed, if any (@pxref{Packaging Basics}). It is common to add code to one's init file (@pxref{Init File}) to add one or more directories to @code{load-path}. For example: -@smallexample +@example (push "~/.emacs.d/lisp" load-path) -@end smallexample +@end example Dumping Emacs uses a special value of @code{load-path}. If the value of @code{load-path} at the end of dumping is unchanged (that is, @@ -340,9 +340,9 @@ similarly-named file in a directory earlier on @code{load-path}. For instance, suppose @code{load-path} is set to -@smallexample +@example ("/opt/emacs/site-lisp" "/usr/share/emacs/23.3/lisp") -@end smallexample +@end example @noindent and that both these directories contain a file named @file{foo.el}. @@ -535,24 +535,24 @@ it is executed while building Emacs. The following example shows how @code{doctor} is prepared for autoloading with a magic comment: -@smallexample +@example ;;;###autoload (defun doctor () "Switch to *doctor* buffer and start giving psychotherapy." (interactive) (switch-to-buffer "*doctor*") (doctor-mode)) -@end smallexample +@end example @noindent Here's what that produces in @file{loaddefs.el}: -@smallexample +@example (autoload (quote doctor) "doctor" "\ Switch to *doctor* buffer and start giving psychotherapy. \(fn)" t nil) -@end smallexample +@end example @noindent @cindex @code{fn} in function's documentation string @@ -571,11 +571,11 @@ ordinary magic autoload comment would copy the whole definition into @code{loaddefs.el}. That is not desirable. You can put the desired @code{autoload} call into @code{loaddefs.el} instead by writing this: -@smallexample +@example ;;;###autoload (autoload 'foo "myfile") (mydefunmacro foo ...) -@end smallexample +@end example You can use a non-default string as the autoload cookie and have the corresponding autoload calls written into a file whose name is @@ -680,7 +680,7 @@ file should call @code{provide} at the top level to add the feature to For example, in @file{idlwave.el}, the definition for @code{idlwave-complete-filename} includes the following code: -@smallexample +@example (defun idlwave-complete-filename () "Use the comint stuff to complete a file name." (require 'comint) @@ -688,7 +688,7 @@ file should call @code{provide} at the top level to add the feature to (comint-completion-addsuffix nil) ...) (comint-dynamic-complete-filename))) -@end smallexample +@end example @noindent The expression @code{(require 'comint)} loads the file @file{comint.el} @@ -703,9 +703,9 @@ after the let exits.) The @file{comint.el} file contains the following top-level expression: -@smallexample +@example (provide 'comint) -@end smallexample +@end example @noindent This adds @code{comint} to the global @code{features} list, so that @@ -726,13 +726,13 @@ ensure that a file of definitions is loaded before it is byte-compiled by including a @code{provide} followed by a @code{require} for the same feature, as in the following example. -@smallexample +@example @group (provide 'my-feature) ; @r{Ignored by byte compiler,} ; @r{evaluated by @code{load}.} (require 'my-feature) ; @r{Evaluated by byte compiler.} @end group -@end smallexample +@end example @noindent The compiler ignores the @code{provide}, then processes the @@ -762,7 +762,7 @@ package, which might or might not be loaded, or might or might not be present in a given version. @xref{Network Feature Testing}, for an example. -@smallexample +@example features @result{} (bar bish) @@ -770,7 +770,7 @@ features @result{} foo features @result{} (foo bar bish) -@end smallexample +@end example When a file is loaded to satisfy an autoload, and it stops due to an error in the evaluation of its contents, any function definitions or diff --git a/doc/lispref/macros.texi b/doc/lispref/macros.texi index b87e9f228f3..5cdcfae1e50 100644 --- a/doc/lispref/macros.texi +++ b/doc/lispref/macros.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990-1995, 1998, 2001-2012 Free Software Foundation, Inc. +@c Copyright (C) 1990-1995, 1998, 2001-2012 Free Software Foundation, Inc. @c See the file elisp.texi for copying conditions. @setfilename ../../info/macros @node Macros, Customization, Functions, Top @@ -110,7 +110,7 @@ If @var{environment} is provided, it specifies an alist of macro definitions that shadow the currently defined macros. Byte compilation uses this feature. -@smallexample +@example @group (defmacro inc (var) (list 'setq var (list '1+ var))) @@ -132,7 +132,7 @@ uses this feature. (macroexpand '(inc2 r s)) @result{} (progn (inc r) (inc s)) ; @r{@code{inc} not expanded here.} @end group -@end smallexample +@end example @end defun @@ -146,10 +146,10 @@ Repeating the example used for @code{macroexpand} above with @code{macroexpand-all}, we see that @code{macroexpand-all} @emph{does} expand the embedded calls to @code{inc}: -@smallexample +@example (macroexpand-all '(inc2 r s)) @result{} (progn (setq r (1+ r)) (setq s (1+ s))) -@end smallexample +@end example @end defun @@ -333,7 +333,7 @@ following macro (used to facilitate iteration) illustrates the problem. This macro allows us to write a ``for'' loop construct. @findex for -@smallexample +@example @group (defmacro for (var from init to final do &rest body) "Execute a simple \"for\" loop. @@ -364,7 +364,7 @@ For example, (for i from 1 to 10 do (print i))." @print{}3 9 @result{} nil @end group -@end smallexample +@end example @noindent The arguments @code{from}, @code{to}, and @code{do} in this macro are @@ -374,7 +374,7 @@ in those positions in the macro call. Here's an equivalent definition simplified through use of backquote: -@smallexample +@example @group (defmacro for (var from init to final do &rest body) "Execute a simple \"for\" loop. @@ -384,7 +384,7 @@ For example, (for i from 1 to 10 do (print i))." ,@@body (inc ,var)))) @end group -@end smallexample +@end example Both forms of this definition (with backquote and without) suffer from the defect that @var{final} is evaluated on every iteration. If @@ -399,7 +399,7 @@ producing an expansion that evaluates the argument expressions exactly once unless repeated evaluation is part of the intended purpose of the macro. Here is a correct expansion for the @code{for} macro: -@smallexample +@example @group (let ((i 1) (max 3)) @@ -408,11 +408,11 @@ macro. Here is a correct expansion for the @code{for} macro: (princ (format "%d %d" i square)) (inc i))) @end group -@end smallexample +@end example Here is a macro definition that creates this expansion: -@smallexample +@example @group (defmacro for (var from init to final do &rest body) "Execute a simple for loop: (for i from 1 to 10 do (print i))." @@ -422,7 +422,7 @@ Here is a macro definition that creates this expansion: ,@@body (inc ,var)))) @end group -@end smallexample +@end example Unfortunately, this fix introduces another problem, described in the following section. @@ -435,7 +435,7 @@ described in the following section. follows to make the expansion evaluate the macro arguments the proper number of times: -@smallexample +@example @group (defmacro for (var from init to final do &rest body) "Execute a simple for loop: (for i from 1 to 10 do (print i))." @@ -447,14 +447,14 @@ number of times: ,@@body (inc ,var)))) @end group -@end smallexample +@end example @end ifnottex The new definition of @code{for} has a new problem: it introduces a local variable named @code{max} which the user does not expect. This causes trouble in examples such as the following: -@smallexample +@example @group (let ((max 0)) (for x from 0 to 10 do @@ -462,7 +462,7 @@ causes trouble in examples such as the following: (if (< max this) (setq max this))))) @end group -@end smallexample +@end example @noindent The references to @code{max} inside the body of the @code{for}, which @@ -478,7 +478,7 @@ put it into the program later. It will never appear anywhere except where put by @code{for}. Here is a definition of @code{for} that works this way: -@smallexample +@example @group (defmacro for (var from init to final do &rest body) "Execute a simple for loop: (for i from 1 to 10 do (print i))." @@ -489,7 +489,7 @@ this way: ,@@body (inc ,var))))) @end group -@end smallexample +@end example @noindent This creates an uninterned symbol named @code{max} and puts it in the diff --git a/doc/lispref/sequences.texi b/doc/lispref/sequences.texi index 50f75da2de8..1a1160a34d7 100644 --- a/doc/lispref/sequences.texi +++ b/doc/lispref/sequences.texi @@ -248,7 +248,7 @@ The length of the array is fixed once you create it; you cannot change the length of an existing array. @item -For purposes of evaluation, the array is a constant---in other words, +For purposes of evaluation, the array is a constant---i.e., it evaluates to itself. @item diff --git a/doc/lispref/symbols.texi b/doc/lispref/symbols.texi index f2ffc20f588..6148d76ca32 100644 --- a/doc/lispref/symbols.texi +++ b/doc/lispref/symbols.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990-1995, 1998-1999, 2001-2012 Free Software Foundation, Inc. +@c Copyright (C) 1990-1995, 1998-1999, 2001-2012 Free Software Foundation, Inc. @c See the file elisp.texi for copying conditions. @setfilename ../../info/symbols @node Symbols, Evaluation, Hash Tables, Top @@ -91,7 +91,7 @@ the contents of a symbol's function cell, use the function @code{symbol-function} (@pxref{Function Cells}). The property list cell normally should hold a correctly formatted -property list. To get a symbol's function cell, use the function +property list. To get a symbol's property list, use the function @code{symbol-plist}. @xref{Property Lists}. The function cell or the value cell may be @dfn{void}, which means @@ -311,7 +311,7 @@ The argument @var{name} may also be a symbol; in that case, the function returns @var{name} if @var{name} is interned in the specified obarray, and otherwise @code{nil}. -@smallexample +@example (intern-soft "frazzle") ; @r{No such symbol exists.} @result{} nil (make-symbol "frazzle") ; @r{Create an uninterned one.} @@ -332,7 +332,7 @@ in the specified obarray, and otherwise @code{nil}. (eq sym 'frazzle) ; @r{And it is the same one.} @result{} t @end group -@end smallexample +@end example @end defun @defvar obarray @@ -347,7 +347,7 @@ This function calls @var{function} once with each symbol in the obarray omitted, it defaults to the value of @code{obarray}, the standard obarray for ordinary symbols. -@smallexample +@example (setq count 0) @result{} 0 (defun count-syms (s) @@ -357,7 +357,7 @@ obarray for ordinary symbols. @result{} nil count @result{} 1871 -@end smallexample +@end example See @code{documentation} in @ref{Accessing Documentation}, for another example using @code{mapatoms}. @@ -463,12 +463,12 @@ This function sets @var{symbol}'s property list to @var{plist}. Normally, @var{plist} should be a well-formed property list, but this is not enforced. The return value is @var{plist}. -@smallexample +@example (setplist 'foo '(a 1 b (2 3) c nil)) @result{} (a 1 b (2 3) c nil) (symbol-plist 'foo) @result{} (a 1 b (2 3) c nil) -@end smallexample +@end example For symbols in special obarrays, which are not used for ordinary purposes, it may make sense to use the property list cell in a @@ -493,7 +493,7 @@ This function puts @var{value} onto @var{symbol}'s property list under the property name @var{property}, replacing any previous property value. The @code{put} function returns @var{value}. -@smallexample +@example (put 'fly 'verb 'transitive) @result{}'transitive (put 'fly 'noun '(a buzzing little bug)) @@ -502,14 +502,14 @@ The @code{put} function returns @var{value}. @result{} transitive (symbol-plist 'fly) @result{} (verb transitive noun (a buzzing little bug)) -@end smallexample +@end example @end defun @node Other Plists @subsection Property Lists Outside Symbols These functions are useful for manipulating property lists -that are stored in places other than symbols: +not stored in symbols: @defun plist-get plist property This returns the value of the @var{property} property stored in the From 51d58083d19efffd47f494c9dbf95aad32b0c07e Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 4 May 2012 21:05:12 -0400 Subject: [PATCH 346/564] * doc/lispref/compile.texi (Disassembly): Condense the examples. --- doc/lispref/ChangeLog | 2 + doc/lispref/compile.texi | 135 +++++++++++++++++---------------------- 2 files changed, 59 insertions(+), 78 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index beaf0c0476b..64a64dc8230 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,5 +1,7 @@ 2012-05-05 Glenn Morris + * compile.texi (Disassembly): Condense the examples. + * eval.texi, functions.texi, loading.texi, macros.texi: Where possible, use example rather than smallexample. diff --git a/doc/lispref/compile.texi b/doc/lispref/compile.texi index e6931aae016..06767a4a329 100644 --- a/doc/lispref/compile.texi +++ b/doc/lispref/compile.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990-1994, 2001-2012 Free Software Foundation, Inc. +@c Copyright (C) 1990-1994, 2001-2012 Free Software Foundation, Inc. @c See the file elisp.texi for copying conditions. @setfilename ../../info/compile @node Byte Compilation, Advising Functions, Loading, Top @@ -638,41 +638,34 @@ Lisp source; these do not appear in the output of @code{disassemble}. @end group @group -0 varref integer ; @r{Get the value of @code{integer}} - ; @r{and push it onto the stack.} -1 constant 1 ; @r{Push 1 onto stack.} +0 varref integer ; @r{Get the value of @code{integer} and} + ; @r{push it onto the stack.} +1 constant 1 ; @r{Push 1 onto stack.} @end group - @group -2 eqlsign ; @r{Pop top two values off stack, compare} - ; @r{them, and push result onto stack.} +2 eqlsign ; @r{Pop top two values off stack, compare} + ; @r{them, and push result onto stack.} @end group - @group -3 goto-if-nil 1 ; @r{Pop and test top of stack;} - ; @r{if @code{nil}, go to 1,} - ; @r{else continue.} -6 constant 1 ; @r{Push 1 onto top of stack.} -7 return ; @r{Return the top element} - ; @r{of the stack.} +3 goto-if-nil 1 ; @r{Pop and test top of stack;} + ; @r{if @code{nil}, go to 1, else continue.} +6 constant 1 ; @r{Push 1 onto top of stack.} +7 return ; @r{Return the top element of the stack.} @end group - @group -8:1 varref integer ; @r{Push value of @code{integer} onto stack.} -9 constant factorial ; @r{Push @code{factorial} onto stack.} -10 varref integer ; @r{Push value of @code{integer} onto stack.} -11 sub1 ; @r{Pop @code{integer}, decrement value,} - ; @r{push new value onto stack.} -12 call 1 ; @r{Call function @code{factorial} using} - ; @r{the first (i.e., the top) element} - ; @r{of the stack as the argument;} - ; @r{push returned value onto stack.} +8:1 varref integer ; @r{Push value of @code{integer} onto stack.} +9 constant factorial ; @r{Push @code{factorial} onto stack.} +10 varref integer ; @r{Push value of @code{integer} onto stack.} +11 sub1 ; @r{Pop @code{integer}, decrement value,} + ; @r{push new value onto stack.} +12 call 1 ; @r{Call function @code{factorial} using first} + ; @r{(i.e. top) stack element as argument;} + ; @r{push returned value onto stack.} @end group - @group -13 mult ; @r{Pop top two values off stack, multiply} - ; @r{them, and push result onto stack.} -14 return ; @r{Return the top element of stack.} +13 mult ; @r{Pop top two values off stack, multiply} + ; @r{them, and push result onto stack.} +14 return ; @r{Return the top element of the stack.} @end group @end example @@ -694,70 +687,56 @@ The @code{silly-loop} function is somewhat more complex: @print{} byte-code for silly-loop: doc: Return time before and after N iterations of a loop. args: (n) +@end group -0 constant current-time-string ; @r{Push} - ; @r{@code{current-time-string}} +@group +0 constant current-time-string ; @r{Push @code{current-time-string}} ; @r{onto top of stack.} @end group - @group -1 call 0 ; @r{Call @code{current-time-string}} - ; @r{with no argument,} - ; @r{pushing result onto stack.} +1 call 0 ; @r{Call @code{current-time-string} with no} + ; @r{argument, push result onto stack.} +@end group +@group +2 varbind t1 ; @r{Pop stack and bind @code{t1} to popped value.} +@end group +@group +3:1 varref n ; @r{Get value of @code{n} from the environment} + ; @r{and push the value on the stack.} +4 sub1 ; @r{Subtract 1 from top of stack.} +@end group +@group +5 dup ; @r{Duplicate top of stack; i.e. copy the top} + ; @r{of the stack and push copy onto stack.} +6 varset n ; @r{Pop the top of the stack,} + ; @r{and bind @code{n} to the value.} + +;; @r{(In effect, the sequence @code{dup varset} copies the top of the stack} +;; @r{into the value of @code{n} without popping it.)} @end group @group -2 varbind t1 ; @r{Pop stack and bind @code{t1}} - ; @r{to popped value.} +7 constant 0 ; @r{Push 0 onto stack.} +8 gtr ; @r{Pop top two values off stack,} + ; @r{test if @var{n} is greater than 0} + ; @r{and push result onto stack.} @end group - @group -3:1 varref n ; @r{Get value of @code{n} from} - ; @r{the environment and push} - ; @r{the value onto the stack.} -4 sub1 ; @r{Subtract 1 from top of stack.} +9 goto-if-not-nil 1 ; @r{Goto 1 if @code{n} > 0} + ; @r{(this continues the while loop)} + ; @r{else continue.} @end group - @group -5 dup ; @r{Duplicate the top of the stack;} - ; @r{i.e., copy the top of} - ; @r{the stack and push the} - ; @r{copy onto the stack.} -6 varset n ; @r{Pop the top of the stack,} - ; @r{and bind @code{n} to the value.} - - ; @r{In effect, the sequence @code{dup varset}} - ; @r{copies the top of the stack} - ; @r{into the value of @code{n}} - ; @r{without popping it.} -@end group - -@group -7 constant 0 ; @r{Push 0 onto stack.} -8 gtr ; @r{Pop top two values off stack,} - ; @r{test if @var{n} is greater than 0} - ; @r{and push result onto stack.} -@end group - -@group -9 goto-if-not-nil 1 ; @r{Goto 1 if @code{n} > 0} - ; @r{(this continues the while loop)} - ; @r{else continue.} -@end group - -@group -12 varref t1 ; @r{Push value of @code{t1} onto stack.} +12 varref t1 ; @r{Push value of @code{t1} onto stack.} 13 constant current-time-string ; @r{Push @code{current-time-string}} - ; @r{onto top of stack.} -14 call 0 ; @r{Call @code{current-time-string} again.} + ; @r{onto the top of the stack.} +14 call 0 ; @r{Call @code{current-time-string} again.} @end group - @group -15 unbind 1 ; @r{Unbind @code{t1} in local environment.} -16 list2 ; @r{Pop top two elements off stack,} - ; @r{create a list of them,} - ; @r{and push list onto stack.} -17 return ; @r{Return value of the top of stack.} +15 unbind 1 ; @r{Unbind @code{t1} in local environment.} +16 list2 ; @r{Pop top two elements off stack, create a} + ; @r{list of them, and push it onto stack.} +17 return ; @r{Return value of the top of stack.} @end group @end example From 161c2a258a25f66b8d46f3a9d8e984db4bb0cbda Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 4 May 2012 21:16:54 -0400 Subject: [PATCH 347/564] More page break tweaks for doc/lispref * doc/lispref/edebug.texi (Edebug Display Update): Improve page break. * doc/lispref/streams.texi (Output Variables): Improve page break. --- doc/lispref/ChangeLog | 4 ++++ doc/lispref/edebug.texi | 4 ++-- doc/lispref/streams.texi | 7 +++---- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 64a64dc8230..49fda5d5d32 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,5 +1,9 @@ 2012-05-05 Glenn Morris + * streams.texi (Output Variables): Improve page break. + + * edebug.texi (Edebug Display Update): Improve page break. + * compile.texi (Disassembly): Condense the examples. * eval.texi, functions.texi, loading.texi, macros.texi: diff --git a/doc/lispref/edebug.texi b/doc/lispref/edebug.texi index 9d50f5fb31f..e97e90f947b 100644 --- a/doc/lispref/edebug.texi +++ b/doc/lispref/edebug.texi @@ -975,8 +975,8 @@ unless @code{edebug-continue-kbd-macro} is non-@code{nil}. @c needs an xref to be on just one line. When Edebug needs to display something (e.g., in trace mode), it saves the current window configuration from ``outside'' Edebug -(@pxref{Window Configurations}). When you exit Edebug (by continuing -the program), it restores the previous window configuration. +(@pxref{Window Configurations}). When you exit Edebug, it restores +the previous window configuration. Emacs redisplays only when it pauses. Usually, when you continue execution, the program re-enters Edebug at a breakpoint or after diff --git a/doc/lispref/streams.texi b/doc/lispref/streams.texi index 70b11d78b0a..e485d8c4d14 100644 --- a/doc/lispref/streams.texi +++ b/doc/lispref/streams.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990-1994, 1998-1999, 2001-2012 Free Software Foundation, Inc. +@c Copyright (C) 1990-1994, 1998-1999, 2001-2012 Free Software Foundation, Inc. @c See the file elisp.texi for copying conditions. @setfilename ../../info/streams @node Read and Print, Minibuffers, Debugging, Top @@ -813,7 +813,6 @@ reader to produce an uninterned symbol. If non-@code{nil}, that means number continuously across print calls. This affects the numbers printed for @samp{#@var{n}=} labels and @samp{#@var{m}#} references. - Don't set this variable with @code{setq}; you should only bind it temporarily to @code{t} with @code{let}. When you do that, you should also bind @code{print-number-table} to @code{nil}. @@ -826,8 +825,8 @@ to bind it to @code{nil} when you bind @code{print-continuous-numbering}. @end defvar @defvar float-output-format -This variable specifies how to print floating point numbers. Its -default value is @code{nil}, meaning use the shortest output +This variable specifies how to print floating point numbers. The +default is @code{nil}, meaning use the shortest output that represents the number without losing information. To control output format more precisely, you can put a string in this From f95e9344c9a9e0f5d28df1a9e8ac0ebed3c512fb Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Fri, 4 May 2012 21:47:04 -0400 Subject: [PATCH 348/564] New function set-temporary-overlay-map and macros (defvar|setq)-local. * lisp/subr.el (setq-local, defvar-local): New macros. (kbd): Redefine as an alias. (with-selected-window): Leave unrelated frames alone. (set-temporary-overlay-map): New function. --- etc/NEWS | 5 ++++ lisp/ChangeLog | 7 +++++ lisp/subr.el | 72 ++++++++++++++++++++++++++++++++++++++------------ 3 files changed, 67 insertions(+), 17 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index ca9b018a2f7..c47fd166215 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -199,7 +199,12 @@ still be supported for Emacs 24.x. * Lisp changes in Emacs 24.2 +** New function `set-temporary-overlay-map'. + +** New macros `setq-local' and `defvar-local'. + ** New error type and new function `user-error'. Doesn't trigger the debugger. + ** Completion *** New function `completion-table-with-quoting' to handle completion diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 5c38eb86fa7..276cd7fca6f 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2012-05-05 Stefan Monnier + + * subr.el (setq-local, defvar-local): New macros. + (kbd): Redefine as an alias. + (with-selected-window): Leave unrelated frames alone. + (set-temporary-overlay-map): New function. + 2012-05-04 Stefan Monnier * subr.el (user-error): New function. diff --git a/lisp/subr.el b/lisp/subr.el index 8cfb1eeea16..5d28b96cd7e 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -116,6 +116,19 @@ BODY should be a list of Lisp expressions. ;; depend on backquote.el. (list 'function (cons 'lambda cdr))) +(defmacro setq-local (var val) + "Set variable VAR to value VAL in current buffer." + ;; Can't use backquote here, it's too early in the bootstrap. + (list 'set (list 'make-local-variable (list 'quote var)) val)) + +(defmacro defvar-local (var val &optional docstring) + "Define VAR as a buffer-local variable with default value VAL. +Like `defvar' but additionally marks the variable as being automatically +buffer-local wherever it is set." + ;; Can't use backquote here, it's too early in the bootstrap. + (list 'progn (list 'defvar var val docstring) + (list 'make-variable-buffer-local (list 'quote var)))) + (defun apply-partially (fun &rest args) "Return a function that is a partial application of FUN to ARGS. ARGS is a list of the first N arguments to pass to FUN. @@ -506,11 +519,8 @@ side-effects, and the argument LIST is not modified." ;;;; Keymap support. -(defmacro kbd (keys) - "Convert KEYS to the internal Emacs key representation. -KEYS should be a string constant in the format used for -saving keyboard macros (see `edmacro-mode')." - (read-kbd-macro keys)) +(defalias 'kbd 'read-kbd-macro) +(put 'kbd 'pure t) (defun undefined () "Beep to tell the user this binding is undefined." @@ -2986,21 +2996,26 @@ potentially make a different buffer current. It does not alter the buffer list ordering." (declare (indent 1) (debug t)) ;; Most of this code is a copy of save-selected-window. - `(let ((save-selected-window-window (selected-window)) - ;; It is necessary to save all of these, because calling - ;; select-window changes frame-selected-window for whatever - ;; frame that window is in. - (save-selected-window-alist - (mapcar (lambda (frame) (list frame (frame-selected-window frame))) - (frame-list)))) + `(let* ((save-selected-window-destination ,window) + (save-selected-window-window (selected-window)) + ;; Selecting a window on another frame changes not only the + ;; selected-window but also the frame-selected-window of the + ;; destination frame. So we need to save&restore it. + (save-selected-window-other-frame + (unless (eq (selected-frame) + (window-frame save-selected-window-destination)) + (frame-selected-window + (window-frame save-selected-window-destination))))) (save-current-buffer (unwind-protect - (progn (select-window ,window 'norecord) + (progn (select-window save-selected-window-destination 'norecord) ,@body) - (dolist (elt save-selected-window-alist) - (and (frame-live-p (car elt)) - (window-live-p (cadr elt)) - (set-frame-selected-window (car elt) (cadr elt) 'norecord))) + ;; First reset frame-selected-window. + (if (window-live-p save-selected-window-other-frame) + ;; We don't use set-frame-selected-window because it does not + ;; pass the `norecord' argument to Fselect_window. + (select-window save-selected-window-other-frame 'norecord)) + ;; Then reset the actual selected-window. (when (window-live-p save-selected-window-window) (select-window save-selected-window-window 'norecord)))))) @@ -3808,6 +3823,29 @@ The properties used on SYMBOL are `composefunc', `sendfunc', (put symbol 'abortfunc (or abortfunc 'kill-buffer)) (put symbol 'hookvar (or hookvar 'mail-send-hook))) +(defun set-temporary-overlay-map (map &optional keep-pred) + (let* ((clearfunsym (make-symbol "clear-temporary-overlay-map")) + (overlaysym (make-symbol "t")) + (alist (list (cons overlaysym map))) + (clearfun + ;; FIXME: Use lexical-binding. + `(lambda () + (unless ,(cond ((null keep-pred) nil) + ((eq t keep-pred) + `(eq this-command + (lookup-key ',map + (this-command-keys-vector)))) + (t `(funcall ',keep-pred))) + (remove-hook 'pre-command-hook ',clearfunsym) + (setq emulation-mode-map-alists + (delq ',alist emulation-mode-map-alists)))))) + (set overlaysym overlaysym) + (fset clearfunsym clearfun) + (add-hook 'pre-command-hook clearfunsym) + ;; FIXME: That's the keymaps with highest precedence, except for + ;; the `keymap' text-property ;-( + (push alist emulation-mode-map-alists))) + ;;;; Progress reporters. ;; Progress reporter has the following structure: From 5342bb062f39a387e9a770b3edef881ee4a72f17 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Fri, 4 May 2012 22:05:49 -0400 Subject: [PATCH 349/564] * lisp/emacs-lisp/pcase.el (pcase--let*): New function. (pcase--expand, pcase-codegen, pcase--q1): Use it to reduce nesting a bit more. (pcase--split-pred): Be more clever about ruling out overlap between a predicate and some constant pattern. (pcase--q1): Use `null' instead of (eq foo nil). --- lisp/ChangeLog | 7 +++++ lisp/emacs-lisp/pcase.el | 64 ++++++++++++++++++++++++---------------- 2 files changed, 46 insertions(+), 25 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 276cd7fca6f..9780e1265fb 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,12 @@ 2012-05-05 Stefan Monnier + * emacs-lisp/pcase.el (pcase--let*): New function. + (pcase--expand, pcase-codegen, pcase--q1): Use it to reduce nesting + a bit more. + (pcase--split-pred): Be more clever about ruling out overlap between + a predicate and some constant pattern. + (pcase--q1): Use `null' instead of (eq foo nil). + * subr.el (setq-local, defvar-local): New macros. (kbd): Redefine as an alias. (with-selected-window): Leave unrelated frames alone. diff --git a/lisp/emacs-lisp/pcase.el b/lisp/emacs-lisp/pcase.el index afbc5df85ce..0d115cc56f5 100644 --- a/lisp/emacs-lisp/pcase.el +++ b/lisp/emacs-lisp/pcase.el @@ -148,6 +148,7 @@ of the form (UPAT EXP)." `(let ,(nreverse bindings) (pcase-let* ,matches ,@body))))) (defmacro pcase-dolist (spec &rest body) + (declare (indent 1)) (if (pcase--trivial-upat-p (car spec)) `(dolist ,spec ,@body) (let ((tmpvar (make-symbol "x"))) @@ -217,10 +218,10 @@ of the form (UPAT EXP)." (cdr case)))) cases)))) (if (null defs) main - `(let ,defs ,main)))) + (pcase--let* defs main)))) (defun pcase-codegen (code vars) - `(let ,(mapcar (lambda (b) (list (car b) (cdr b))) vars) + `(let* ,(mapcar (lambda (b) (list (car b) (cdr b))) vars) ,@code)) (defun pcase--small-branch-p (code) @@ -255,6 +256,13 @@ of the form (UPAT EXP)." ((memq (car-safe then) '(if cond)) (pcase--if `(not ,test) else then)) (t `(if ,test ,then ,else)))) +;; Again, try and reduce nesting. +(defun pcase--let* (binders body) + (if (eq (car-safe body) 'let*) + `(let* ,(append binders (nth 1 body)) + ,@(nthcdr 2 body)) + `(let* ,binders ,body))) + (defun pcase--upat (qpattern) (cond ((eq (car-safe qpattern) '\,) (cadr qpattern)) @@ -433,26 +441,26 @@ MATCH is the pattern that needs to be matched, of the form: (defun pcase--split-pred (upat pat) ;; FIXME: For predicates like (pred (> a)), two such predicates may ;; actually refer to different variables `a'. - (cond - ((equal upat pat) (cons :pcase--succeed :pcase--fail)) - ((and (eq 'pred (car upat)) - (eq 'pred (car-safe pat)) - (or (member (cons (cadr upat) (cadr pat)) - pcase-mutually-exclusive-predicates) - (member (cons (cadr pat) (cadr upat)) - pcase-mutually-exclusive-predicates))) - (cons :pcase--fail nil)) - ;; ((and (eq 'pred (car upat)) - ;; (eq '\` (car-safe pat)) - ;; (symbolp (cadr upat)) - ;; (or (symbolp (cadr pat)) (stringp (cadr pat)) (numberp (cadr pat))) - ;; (get (cadr upat) 'side-effect-free) - ;; (progn (message "Trying predicate %S" (cadr upat)) - ;; (ignore-errors - ;; (funcall (cadr upat) (cadr pat))))) - ;; (message "Simplify pred %S against %S" upat pat) - ;; (cons nil :pcase--fail)) - )) + (let (test) + (cond + ((equal upat pat) (cons :pcase--succeed :pcase--fail)) + ((and (eq 'pred (car upat)) + (eq 'pred (car-safe pat)) + (or (member (cons (cadr upat) (cadr pat)) + pcase-mutually-exclusive-predicates) + (member (cons (cadr pat) (cadr upat)) + pcase-mutually-exclusive-predicates))) + (cons :pcase--fail nil)) + ((and (eq 'pred (car upat)) + (eq '\` (car-safe pat)) + (symbolp (cadr upat)) + (or (symbolp (cadr pat)) (stringp (cadr pat)) (numberp (cadr pat))) + (get (cadr upat) 'side-effect-free) + (ignore-errors + (setq test (list (funcall (cadr upat) (cadr pat)))))) + (if (car test) + (cons nil :pcase--fail) + (cons :pcase--fail nil)))))) (defun pcase--fgrep (vars sexp) "Check which of the symbols VARS appear in SEXP." @@ -673,16 +681,22 @@ Otherwise, it defers to REST which is a list of branches of the form ;; The byte-compiler could do that for us, but it would have to pay ;; attention to the `consp' test in order to figure out that car/cdr ;; can't signal errors and our byte-compiler is not that clever. - `(let (,@(if (get syma 'pcase-used) `((,syma (car ,sym)))) + ;; FIXME: Some of those let bindings occur too early (they are used in + ;; `then-body', but only within some sub-branch). + (pcase--let* + `(,@(if (get syma 'pcase-used) `((,syma (car ,sym)))) ,@(if (get symd 'pcase-used) `((,symd (cdr ,sym))))) - ,then-body) + then-body) (pcase--u else-rest)))) ((or (integerp qpat) (symbolp qpat) (stringp qpat)) (let* ((splitrest (pcase--split-rest sym (apply-partially 'pcase--split-equal qpat) rest)) (then-rest (car splitrest)) (else-rest (cdr splitrest))) - (pcase--if `(,(if (stringp qpat) #'equal #'eq) ,sym ',qpat) + (pcase--if (cond + ((stringp qpat) `(equal ,sym ,qpat)) + ((null qpat) `(null ,sym)) + (t `(eq ,sym ',qpat))) (pcase--u1 matches code vars then-rest) (pcase--u else-rest)))) (t (error "Unknown QPattern %s" qpat)))) From 9658dc2ada51f4dc8e598fbdd79da84e99824722 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 4 May 2012 19:26:45 -0700 Subject: [PATCH 350/564] More small edits for doc/lispref * internals.texi (Garbage Collection, Memory Usage) (Writing Emacs Primitives): Tweak page breaks. --- doc/lispref/ChangeLog | 3 +++ doc/lispref/internals.texi | 13 ++++++------- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 49fda5d5d32..5bb5d6101e4 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,5 +1,8 @@ 2012-05-05 Glenn Morris + * internals.texi (Garbage Collection, Memory Usage) + (Writing Emacs Primitives): Tweak page breaks. + * streams.texi (Output Variables): Improve page break. * edebug.texi (Edebug Display Update): Improve page break. diff --git a/doc/lispref/internals.texi b/doc/lispref/internals.texi index edf892e751a..301aa0b23be 100644 --- a/doc/lispref/internals.texi +++ b/doc/lispref/internals.texi @@ -355,7 +355,7 @@ itself; the latter is only allocated when the string is created.) If there was overflow in pure space (@pxref{Pure Storage}), @code{garbage-collect} returns @code{nil}, because a real garbage -collection can not be done in this situation. +collection cannot be done. @end deffn @defopt garbage-collection-messages @@ -472,12 +472,12 @@ in this Emacs session. @defvar string-chars-consed The total number of string characters that have been allocated so far -in this Emacs session. +in this session. @end defvar @defvar misc-objects-consed The total number of miscellaneous objects that have been allocated so -far in this Emacs session. These include markers and overlays, plus +far in this session. These include markers and overlays, plus certain objects not visible to users. @end defvar @@ -581,8 +581,8 @@ there is a fixed maximum. Alternatively, it can be @code{UNEVALLED}, indicating a special form that receives unevaluated arguments, or @code{MANY}, indicating an unlimited number of evaluated arguments (the equivalent of @code{&rest}). Both @code{UNEVALLED} and @code{MANY} are -macros. If @var{max} is a number, it may not be less than @var{min} and -it may not be greater than eight. +macros. If @var{max} is a number, it must be more than @var{min} but +less than 8. @item interactive This is an interactive specification, a string such as might be used as @@ -666,8 +666,7 @@ read-only (on certain operating systems) as a result of dumping Emacs. @cindex @code{defsubr}, Lisp symbol for a primitive Defining the C function is not enough to make a Lisp primitive available; you must also create the Lisp symbol for the primitive and -store a suitable subr object in its function cell. The code looks like -this: +store a suitable subr object in its function cell: @example defsubr (&@var{sname}); From 3e1a3a0035ec36f37e59da1d31002dbe9c6f2a1a Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 4 May 2012 19:28:00 -0700 Subject: [PATCH 351/564] Undo part of previous change --- doc/lispref/internals.texi | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/lispref/internals.texi b/doc/lispref/internals.texi index 301aa0b23be..eb9d81f196f 100644 --- a/doc/lispref/internals.texi +++ b/doc/lispref/internals.texi @@ -666,7 +666,8 @@ read-only (on certain operating systems) as a result of dumping Emacs. @cindex @code{defsubr}, Lisp symbol for a primitive Defining the C function is not enough to make a Lisp primitive available; you must also create the Lisp symbol for the primitive and -store a suitable subr object in its function cell: +store a suitable subr object in its function cell. The code looks like +this: @example defsubr (&@var{sname}); From e68b393e6078ffad1e026a8c9de41a472eebc488 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 4 May 2012 19:49:19 -0700 Subject: [PATCH 352/564] * minibuf.texi (Minibuffer History, Basic Completion): Tweak page breaks. --- doc/lispref/ChangeLog | 3 +++ doc/lispref/minibuf.texi | 9 ++++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 5bb5d6101e4..186558be254 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,5 +1,8 @@ 2012-05-05 Glenn Morris + * minibuf.texi (Minibuffer History, Basic Completion): + Tweak page breaks. + * internals.texi (Garbage Collection, Memory Usage) (Writing Emacs Primitives): Tweak page breaks. diff --git a/doc/lispref/minibuf.texi b/doc/lispref/minibuf.texi index 47ecc9e5893..e40cbd14687 100644 --- a/doc/lispref/minibuf.texi +++ b/doc/lispref/minibuf.texi @@ -513,8 +513,7 @@ duplicates, and to add @var{newelt} to the list even if it is empty. If the value of this variable is @code{nil}, standard functions that read from the minibuffer don't add new elements to the history list. This lets Lisp programs explicitly manage input history by using -@code{add-to-history}. By default, @code{history-add-new-input} is -non-@code{nil}. +@code{add-to-history}. The default value is @code{t}. @end defvar @defopt history-length @@ -697,7 +696,7 @@ You can also use a function as @var{collection}. Then the function is solely responsible for performing completion; @code{try-completion} returns whatever this function returns. The function is called with three arguments: @var{string}, @var{predicate} and @code{nil} (the -reason for the third argument is so that the same function can be used +third argument is so that the same function can be used in @code{all-completions} and do the appropriate thing in either case). @xref{Programmed Completion}. @@ -720,8 +719,8 @@ handle @code{completion-regexp-list} itself.) In the first of the following examples, the string @samp{foo} is matched by three of the alist @sc{car}s. All of the matches begin with the characters @samp{fooba}, so that is the result. In the second -example, there is only one possible match, and it is exact, so the value -is @code{t}. +example, there is only one possible match, and it is exact, so the +return value is @code{t}. @smallexample @group From df96ab1e0a29e4d178b1406ceacc70d5f9e5c2d6 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Fri, 4 May 2012 22:50:20 -0400 Subject: [PATCH 353/564] Use set-temporary-overlay-map. * lisp/repeat.el: Use lexical-binding. (repeat-last-self-insert, repeat-num-input-keys-at-self-insert) (repeat-undo-count): Remove. (repeat): * lisp/progmodes/octave-mod.el (octave-abbrev-start): * lisp/progmodes/f90.el (f90-abbrev-start): * lisp/face-remap.el (text-scale-adjust): * lisp/kmacro.el (kmacro-call-macro): Use set-temporary-overlay-map. --- lisp/ChangeLog | 9 +++ lisp/face-remap.el | 39 +++++----- lisp/kmacro.el | 34 ++++----- lisp/progmodes/f90.el | 19 ++--- lisp/progmodes/octave-mod.el | 19 ++--- lisp/repeat.el | 142 ++++++++++------------------------- 6 files changed, 98 insertions(+), 164 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 9780e1265fb..664c7734f1a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,14 @@ 2012-05-05 Stefan Monnier + * repeat.el: Use lexical-binding. + (repeat-last-self-insert, repeat-num-input-keys-at-self-insert) + (repeat-undo-count): Remove. + (repeat): + * progmodes/octave-mod.el (octave-abbrev-start): + * progmodes/f90.el (f90-abbrev-start): + * face-remap.el (text-scale-adjust): + * kmacro.el (kmacro-call-macro): Use set-temporary-overlay-map. + * emacs-lisp/pcase.el (pcase--let*): New function. (pcase--expand, pcase-codegen, pcase--q1): Use it to reduce nesting a bit more. diff --git a/lisp/face-remap.el b/lisp/face-remap.el index ca7a28328f9..46dad0fca3a 100644 --- a/lisp/face-remap.el +++ b/lisp/face-remap.el @@ -303,26 +303,29 @@ a top-level keymap, `text-scale-increase' or `text-scale-decrease' may be more appropriate." (interactive "p") (let ((first t) - (step t) (ev last-command-event) (echo-keystrokes nil)) - (while step - (let ((base (event-basic-type ev))) - (cond ((or (eq base ?+) (eq base ?=)) - (setq step inc)) - ((eq base ?-) - (setq step (- inc))) - ((eq base ?0) - (setq step 0)) - (first - (setq step inc)) - (t - (setq step nil)))) - (when step - (text-scale-increase step) - (setq inc 1 first nil) - (setq ev (read-event "+,-,0 for further adjustment: ")))) - (push ev unread-command-events))) + (let* ((base (event-basic-type ev)) + (step + (pcase base + ((or `?+ `?=) inc) + (`?- (- inc)) + (`?0 0) + (t inc)))) + (text-scale-increase step) + ;; FIXME: do it after everu "iteration of the loop". + (message "+,-,0 for further adjustment: ") + (set-temporary-overlay-map + (let ((map (make-sparse-keymap))) + (dolist (mods '(() (control))) + (define-key map (vector (append mods '(?-))) 'text-scale-decrease) + (define-key map (vector (append mods '(?+))) 'text-scale-increase) + ;; = is unshifted + on most keyboards. + (define-key map (vector (append mods '(?=))) 'text-scale-increase) + (define-key map (vector (append mods '(?0))) + (lambda () (interactive) (text-scale-increase 0)))) + map) + t)))) ;; ---------------------------------------------------------------- diff --git a/lisp/kmacro.el b/lisp/kmacro.el index b715e44387e..ffc97085a69 100644 --- a/lisp/kmacro.el +++ b/lisp/kmacro.el @@ -625,8 +625,10 @@ for details on how to adjust or disable this behavior. To make a macro permanent so you can call it even after defining others, use \\[kmacro-name-last-macro]." (interactive "p") - (let ((repeat-key (and (null no-repeat) - (> (length (this-single-command-keys)) 1) + (let ((repeat-key (and (or (and (null no-repeat) + (> (length (this-single-command-keys)) 1)) + ;; Used when we're in the process of repeating. + (eq no-repeat 'repeating)) last-input-event)) repeat-key-str) (if end-macro @@ -640,24 +642,16 @@ others, use \\[kmacro-name-last-macro]." repeat-key kmacro-call-repeat-key))) (setq repeat-key-str (format-kbd-macro (vector repeat-key) nil)) - (while repeat-key - ;; Issue a hint to the user, if the echo area isn't in use. - (unless (current-message) - (message "(Type %s to repeat macro%s)" - repeat-key-str - (if (and kmacro-call-repeat-with-arg - arg (> arg 1)) - (format " %d times" arg) ""))) - (if (equal repeat-key (read-event)) - (progn - (clear-this-command-keys t) - (call-last-kbd-macro (and kmacro-call-repeat-with-arg arg) - #'kmacro-loop-setup-function) - (setq last-input-event nil)) - (setq repeat-key nil))) - (when last-input-event - (clear-this-command-keys t) - (setq unread-command-events (list last-input-event)))))) + ;; Can't use the `keep-pred' arg because this overlay keymap needs to be + ;; removed during the next run of the kmacro (i.e. we need to add&remove + ;; this overlay-map at each repetition). + (set-temporary-overlay-map + (let ((map (make-sparse-keymap))) + (define-key map (vector repeat-key) + `(lambda () (interactive) + (kmacro-call-macro ,(and kmacro-call-repeat-with-arg arg) + 'repeating))) + map))))) ;;; Combined function key bindings: diff --git a/lisp/progmodes/f90.el b/lisp/progmodes/f90.el index 1d2beedd191..712725ffaf0 100644 --- a/lisp/progmodes/f90.el +++ b/lisp/progmodes/f90.el @@ -2204,18 +2204,13 @@ Leave point at the end of line." "Typing `\\[help-command] or `? lists all the F90 abbrevs. Any other key combination is executed normally." (interactive "*") - (insert last-command-event) - (let (char event) - (if (fboundp 'next-command-event) ; XEmacs - (setq event (next-command-event) - char (and (fboundp 'event-to-character) - (event-to-character event))) - (setq event (read-event) - char event)) - ;; Insert char if not equal to `?', or if abbrev-mode is off. - (if (and abbrev-mode (memq char (list ?? help-char))) - (f90-abbrev-help) - (setq unread-command-events (list event))))) + (self-insert-command 1) + (when abbrev-mode + (set-temporary-overlay-map + (let ((map (make-sparse-keymap))) + (define-key map [??] 'f90-abbrev-help) + (define-key map (vector help-char) 'f90-abbrev-help) + map)))) (defun f90-abbrev-help () "List the currently defined abbrevs in F90 mode." diff --git a/lisp/progmodes/octave-mod.el b/lisp/progmodes/octave-mod.el index 7091a9468c5..79b3fcee720 100644 --- a/lisp/progmodes/octave-mod.el +++ b/lisp/progmodes/octave-mod.el @@ -989,18 +989,13 @@ If Abbrev mode is turned on, typing ` (grave accent) followed by ? or executed normally. Note that all Octave mode abbrevs start with a grave accent." (interactive) - (if (not abbrev-mode) - (self-insert-command 1) - (let (c) - (insert last-command-event) - (if (if (featurep 'xemacs) - (or (eq (event-to-character (setq c (next-event))) ??) - (eq (event-to-character c) help-char)) - (or (eq (setq c (read-event)) ??) - (eq c help-char))) - (let ((abbrev-table-name-list '(octave-abbrev-table))) - (list-abbrevs)) - (setq unread-command-events (list c)))))) + (self-insert-command 1) + (when abbrev-mode + (set-temporary-overlay-map + (let ((map (make-sparse-keymap))) + (define-key map [??] 'list-abbrevs) + (define-key map (vector help-char) 'list-abbrevs) + map)))) (define-skeleton octave-insert-defun "Insert an Octave function skeleton. diff --git a/lisp/repeat.el b/lisp/repeat.el index 94efc717be5..e577c461bc5 100644 --- a/lisp/repeat.el +++ b/lisp/repeat.el @@ -1,4 +1,4 @@ -;;; repeat.el --- convenient way to repeat the previous command +;;; repeat.el --- convenient way to repeat the previous command -*- lexical-binding: t -*- ;; Copyright (C) 1998, 2001-2012 Free Software Foundation, Inc. @@ -156,15 +156,6 @@ member of that sequence. If this variable is nil, no re-execution occurs." ;; `repeat' now repeats that command instead of `real-last-command' to ;; avoid a "... must be bound to an event with parameters" error. -(defvar repeat-last-self-insert nil - "If last repeated command was `self-insert-command', it inserted this.") - -;; That'll require another keystroke count so we know we're in a string of -;; repetitions of self-insert commands: - -(defvar repeat-num-input-keys-at-self-insert -1 - "# key sequences read in Emacs session when `self-insert-command' repeated.") - ;;;;; *************** ANALOGOUS HACKS TO `repeat' ITSELF **************** ;;;;; ;; That mechanism of checking num-input-keys to figure out what's really @@ -199,14 +190,6 @@ this function is always whether the value of `this-command' would've been (defvar repeat-previous-repeated-command nil "The previous repeated command.") -;; The following variable counts repeated self-insertions. The idea is -;; that repeating a self-insertion command and subsequently undoing it -;; should have almost the same effect as if the characters were inserted -;; manually. The basic difference is that we leave in one undo-boundary -;; between the original insertion and its first repetition. -(defvar repeat-undo-count nil - "Number of self-insertions since last `undo-boundary'.") - ;;;###autoload (defun repeat (repeat-arg) "Repeat most recently executed command. @@ -254,7 +237,7 @@ recently executed command not bound to an input event\"." (let ((repeat-repeat-char (if (eq repeat-on-final-keystroke t) last-command-event - ;; allow only specified final keystrokes + ;; Allow only specified final keystrokes. (car (memq last-command-event (listify-key-sequence repeat-on-final-keystroke)))))) @@ -269,90 +252,45 @@ recently executed command not bound to an input event\"." (setq current-prefix-arg repeat-arg) (repeat-message "Repeating command %S %S" repeat-arg last-repeatable-command)) - (if (eq last-repeatable-command 'self-insert-command) - (let ((insertion - (if (<= (- num-input-keys - repeat-num-input-keys-at-self-insert) - 1) - repeat-last-self-insert - (let ((range (nth 1 buffer-undo-list))) - (condition-case nil - (setq repeat-last-self-insert - (buffer-substring (car range) - (cdr range))) - (error (error "%s %s %s" ;Danger, Will Robinson! - "repeat can't intuit what you" - "inserted before auto-fill" - "clobbered it, sorry"))))))) - (setq repeat-num-input-keys-at-self-insert num-input-keys) - ;; If the self-insert had a repeat count, INSERTION - ;; includes that many copies of the same character. - ;; So use just the first character - ;; and repeat it the right number of times. - (setq insertion (substring insertion -1)) - (let ((count (prefix-numeric-value repeat-arg)) - (i 0)) - ;; Run pre- and post-command hooks for self-insertion too. - (run-hooks 'pre-command-hook) - (cond - ((not repeat-undo-count)) - ((< repeat-undo-count 20) - ;; Don't make an undo-boundary here. - (setq repeat-undo-count (1+ repeat-undo-count))) - (t - ;; Make an undo-boundary after 20 repetitions only. - (undo-boundary) - (setq repeat-undo-count 1))) - (while (< i count) - (repeat-self-insert insertion) - (setq i (1+ i))) - (run-hooks 'post-command-hook))) - (let ((indirect (indirect-function last-repeatable-command))) - ;; Make each repetition undo separately. - (undo-boundary) - (if (or (stringp indirect) - (vectorp indirect)) - ;; Bind real-last-command so that executing the macro does - ;; not alter it. Do the same for last-repeatable-command. - (let ((real-last-command real-last-command) - (last-repeatable-command last-repeatable-command)) - (execute-kbd-macro last-repeatable-command)) - (run-hooks 'pre-command-hook) - (call-interactively last-repeatable-command) - (run-hooks 'post-command-hook))))) + (when (eq last-repeatable-command 'self-insert-command) + ;; We used to use a much more complex code to try and figure out + ;; what key was used to run that self-insert-command: + ;; (if (<= (- num-input-keys + ;; repeat-num-input-keys-at-self-insert) + ;; 1) + ;; repeat-last-self-insert + ;; (let ((range (nth 1 buffer-undo-list))) + ;; (condition-case nil + ;; (setq repeat-last-self-insert + ;; (buffer-substring (car range) + ;; (cdr range))) + ;; (error (error "%s %s %s" ;Danger, Will Robinson! + ;; "repeat can't intuit what you" + ;; "inserted before auto-fill" + ;; "clobbered it, sorry"))))) + (setq last-command-event (char-before))) + (let ((indirect (indirect-function last-repeatable-command))) + (if (or (stringp indirect) + (vectorp indirect)) + ;; Bind last-repeatable-command so that executing the macro does + ;; not alter it. + (let ((last-repeatable-command last-repeatable-command)) + (execute-kbd-macro last-repeatable-command)) + (call-interactively last-repeatable-command)))) (when repeat-repeat-char - ;; A simple recursion here gets into trouble with max-lisp-eval-depth - ;; on long sequences of repetitions of a command like `forward-word' - ;; (only 32 repetitions are possible given the default value of 200 for - ;; max-lisp-eval-depth), but if I now locally disable the repeat char I - ;; can iterate indefinitely here around a single level of recursion. - (let (repeat-on-final-keystroke - ;; Bind `undo-inhibit-record-point' to t in order to avoid - ;; recording point in `buffer-undo-list' here. We have to - ;; do this since the command loop does not set the last - ;; position of point thus confusing the point recording - ;; mechanism when inserting or deleting text. - (undo-inhibit-record-point t)) - (setq real-last-command 'repeat) - (setq repeat-undo-count 1) - (unwind-protect - (while (let ((evt (read-key))) - ;; For clicks, we need to strip the meta-data to - ;; check the underlying event name. - (eq (or (car-safe evt) evt) - (or (car-safe repeat-repeat-char) - repeat-repeat-char))) - (repeat repeat-arg)) - ;; Make sure `repeat-undo-count' is reset. - (setq repeat-undo-count nil)) - (setq unread-command-events (list last-input-event)))))) - -(defun repeat-self-insert (string) - (let ((i 0)) - (while (< i (length string)) - (let ((last-command-event (aref string i))) - (self-insert-command 1)) - (setq i (1+ i))))) + (set-temporary-overlay-map + (let ((map (make-sparse-keymap))) + (define-key map (vector repeat-repeat-char) + (if (null repeat-message-function) 'repeat + ;; If repeat-message-function is let-bound, preserve it for the + ;; next "iterations of the loop". + (let ((fun repeat-message-function)) + (lambda () + (interactive) + (let ((repeat-message-function fun)) + (setq this-command 'repeat) + (call-interactively 'repeat)))))) + map))))) (defun repeat-message (format &rest args) "Like `message' but displays with `repeat-message-function' if non-nil." From 248da2f497e8865e8bebb0e3adb9184ab36e95f2 Mon Sep 17 00:00:00 2001 From: Ransom Williams Date: Fri, 4 May 2012 23:21:47 -0400 Subject: [PATCH 354/564] * lisp/files.el (file-auto-mode-skip): New var. (set-auto-mode-1): Use it. --- lisp/ChangeLog | 5 +++++ lisp/files.el | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 664c7734f1a..fcefb166ecb 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-05-05 Ransom Williams (tiny change) + + * files.el (file-auto-mode-skip): New var. + (set-auto-mode-1): Use it. + 2012-05-05 Stefan Monnier * repeat.el: Use lexical-binding. diff --git a/lisp/files.el b/lisp/files.el index dd80ce69811..f2302c2dd48 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -2782,6 +2782,11 @@ same, do nothing and return nil." (funcall mode) mode))) +(defvar file-auto-mode-skip "^\\(#!\\|'\\\\\"\\)" + "Regexp of lines to skip when looking for file-local settings. +If the first line matches this regular expression, then the -*-...-*- file- +local settings will be consulted on the second line instead of the first.") + (defun set-auto-mode-1 () "Find the -*- spec in the buffer. Call with point at the place to start searching from. @@ -2804,7 +2809,7 @@ have no effect." ;; interpreter invocation. The same holds ;; for '\" in man pages (preprocessor ;; magic for the `man' program). - (and (looking-at "^\\(#!\\|'\\\\\"\\)") 2)) t) + (and (looking-at file-auto-mode-skip) 2)) t) (progn (skip-chars-forward " \t") (setq beg (point)) From 3d53ee1b2d06098527f983756fcfdfc2a5ecce16 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sat, 5 May 2012 00:18:49 -0400 Subject: [PATCH 355/564] * lisp/shell.el (shell-completion-vars): Set pcomplete-arg-quote-list like shell-delimiter-argument-list. (shell-parse-pcomplete-arguments): Obey pcomplete-arg-quote-list. Fixes: debbugs:11348 --- lisp/ChangeLog | 6 ++++++ lisp/shell.el | 9 ++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ff08f0681aa..7a83c95ec3a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2012-05-05 Stefan Monnier + + * shell.el (shell-completion-vars): Set pcomplete-arg-quote-list like + shell-delimiter-argument-list (bug#11348). + (shell-parse-pcomplete-arguments): Obey pcomplete-arg-quote-list. + 2012-05-04 Chong Yidong * select.el (xselect--encode-string): Always use utf-8 for TEXT on diff --git a/lisp/shell.el b/lisp/shell.el index 7c5ce49a967..737f69c021d 100644 --- a/lisp/shell.el +++ b/lisp/shell.el @@ -393,8 +393,11 @@ Thus, this does not include the shell's current directory.") (goto-char (match-end 0)) (cond ((match-beginning 3) ;Backslash escape. - (push (if (= (match-beginning 3) (match-end 3)) - "\\" (match-string 3)) + (push (cond + ((null pcomplete-arg-quote-list) + (goto-char (match-beginning 3)) "\\") + ((= (match-beginning 3) (match-end 3)) "\\") + (t (match-string 3))) arg)) ((match-beginning 2) ;Double quote. (push (replace-regexp-in-string @@ -429,7 +432,7 @@ Shell buffers. It implements `shell-completion-execonly' for (set (make-local-variable 'pcomplete-parse-arguments-function) #'shell-parse-pcomplete-arguments) (set (make-local-variable 'pcomplete-arg-quote-list) - (append "\\ \t\n\r\"'`$|&;(){}[]<>#" nil)) + shell-delimiter-argument-list) (set (make-local-variable 'pcomplete-termination-string) (cond ((not comint-completion-addsuffix) "") ((stringp comint-completion-addsuffix) From f677562b6c90b283d338725992d87a2770848560 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Sat, 5 May 2012 13:13:27 +0800 Subject: [PATCH 356/564] Fix package.el handling of local variables on first line. * lisp/emacs-lisp/package.el (package-buffer-info): Avoid putting local variables into description. --- lisp/ChangeLog | 5 +++++ lisp/emacs-lisp/package.el | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 7a83c95ec3a..2442582114d 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-05-05 Chong Yidong + + * emacs-lisp/package.el (package-buffer-info): Avoid putting local + variables into description. + 2012-05-05 Stefan Monnier * shell.el (shell-completion-vars): Set pcomplete-arg-quote-list like diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index 5b158eb994f..73afdb82509 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -943,7 +943,7 @@ If the buffer does not contain a conforming package, signal an error. If there is a package, narrow the buffer to the file's boundaries." (goto-char (point-min)) - (unless (re-search-forward "^;;; \\([^ ]*\\)\\.el --- \\(.*\\)$" nil t) + (unless (re-search-forward "^;;; \\([^ ]*\\)\\.el ---[ \t]*\\(.*?\\)[ \t]*\\(-\\*-.*-\\*-[ \t]*\\)?$" nil t) (error "Packages lacks a file header")) (let ((file-name (match-string-no-properties 1)) (desc (match-string-no-properties 2)) From 0d887c7d51e28455da610a730f20631eaa0533b6 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sat, 5 May 2012 11:40:31 +0300 Subject: [PATCH 357/564] Fix failures in starting subprocesses on Windows 7. src/w32proc.c (new_child): Force Windows to reserve only 64KB of stack for each reader_thread, instead of defaulting to 8MB determined by the linker. This avoids failures in creating subprocesses on Windows 7, see the discussion in this thread: http://lists.gnu.org/archive/html/emacs-devel/2012-03/msg00119.html. --- src/ChangeLog | 8 ++++++++ src/w32proc.c | 20 +++++++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index 8aa1707cd30..1e6af943fb4 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2012-05-05 Eli Zaretskii + + * w32proc.c (new_child): Force Windows to reserve only 64KB of + stack for each reader_thread, instead of defaulting to 8MB + determined by the linker. This avoids failures in creating + subprocesses on Windows 7, see the discussion in this thread: + http://lists.gnu.org/archive/html/emacs-devel/2012-03/msg00119.html. + 2012-05-02 Jim Meyering * w32font.c (fill_in_logfont): NUL-terminate a string (Bug#11372). diff --git a/src/w32proc.c b/src/w32proc.c index 28591f90128..5bdeba25958 100644 --- a/src/w32proc.c +++ b/src/w32proc.c @@ -141,7 +141,25 @@ new_child (void) cp->char_consumed = CreateEvent (NULL, FALSE, FALSE, NULL); if (cp->char_consumed) { - cp->thrd = CreateThread (NULL, 1024, reader_thread, cp, 0, &id); + /* The 0x00010000 flag is STACK_SIZE_PARAM_IS_A_RESERVATION. + It means that the 64K stack we are requesting in the 2nd + argument is how much memory should be reserved for the + stack. If we don't use this flag, the memory requested + by the 2nd argument is the amount actually _committed_, + but Windows reserves 8MB of memory for each thread's + stack. (The 8MB figure comes from the -stack + command-line argument we pass to the linker when building + Emacs, but that's because we need a large stack for + Emacs's main thread.) Since we request 2GB of reserved + memory at startup (see w32heap.c), which is close to the + maximum memory available for a 32-bit process on Windows, + the 8MB reservation for each thread causes failures in + starting subprocesses, because we create a thread running + reader_thread for each subprocess. As 8MB of stack is + way too much for reader_thread, forcing Windows to + reserve less wins the day. */ + cp->thrd = CreateThread (NULL, 64 * 1024, reader_thread, cp, + 0x00010000, &id); if (cp->thrd) return cp; } From 843f790a746b7a0d63dc2509c40910b85f981883 Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Sat, 5 May 2012 11:40:49 +0200 Subject: [PATCH 358/564] Only ignore info/*.info --- info/.gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info/.gitignore b/info/.gitignore index 72e8ffc0db8..bf12a974f48 100644 --- a/info/.gitignore +++ b/info/.gitignore @@ -1 +1 @@ -* +*.info From 34792228da7a6db943ff19b3f35d23881d45cca8 Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Sat, 5 May 2012 12:18:38 +0200 Subject: [PATCH 359/564] * configure.in: Fix last change. --- ChangeLog | 4 ++++ configure.in | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index bf47bf07d74..4bfb0d561c2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2012-05-05 Andreas Schwab + + * configure.in: Fix last change. + 2012-05-02 Glenn Morris * Makefile.in (uninstall): Remove useless-use-of-for; that for diff --git a/configure.in b/configure.in index 68d14716e68..ee533f6eccf 100644 --- a/configure.in +++ b/configure.in @@ -2878,7 +2878,7 @@ fail; ;; netbsd) - if [ "x$LIBS_TERMCAP" = "x-lterminfo" ]; then + if test "x$LIBS_TERMCAP" = "x-lterminfo"; then TERMINFO=yes else LIBS_TERMCAP="-ltermcap" From 01319a4e6779c61d05c2095382f2f6b6b3090a56 Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Sat, 5 May 2012 12:34:06 +0200 Subject: [PATCH 360/564] * configure.in: Fix quoting bugs. --- ChangeLog | 4 ++++ configure.in | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7ed97f5b29d..a30ecc13d46 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2012-05-05 Andreas Schwab + + * configure.in: Fix quoting bugs. + 2012-05-04 Glenn Morris * configure.in (INFO_EXT, INFO_OPTS): New output variables. diff --git a/configure.in b/configure.in index 81e8765990f..5fe14322a95 100644 --- a/configure.in +++ b/configure.in @@ -2919,7 +2919,7 @@ case "$opsys" in ## option to use it. darwin) LIBS_TERMCAP="-lncurses" ;; - gnu*) [ "x$LIBS_TERMCAP" = x ] && LIBS_TERMCAP="-lncurses" ;; + gnu*) test -z "$LIBS_TERMCAP" && LIBS_TERMCAP="-lncurses" ;; freebsd) AC_MSG_CHECKING([whether FreeBSD is new enough to use terminfo]) @@ -2941,7 +2941,7 @@ fail; ;; netbsd) - if [ "x$LIBS_TERMCAP" != "x-lterminfo" ]; then + if test "x$LIBS_TERMCAP" != "x-lterminfo"; then TERMINFO=no LIBS_TERMCAP="-ltermcap" fi From 13a629967daef1979b4496db8471c14a67413aae Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 5 May 2012 07:17:30 -0400 Subject: [PATCH 361/564] Auto-commit of generated files. --- autogen/configure | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autogen/configure b/autogen/configure index 7c954129fca..1c17b77e754 100755 --- a/autogen/configure +++ b/autogen/configure @@ -14415,7 +14415,7 @@ $as_echo "$emacs_cv_freebsd_terminfo" >&6; } ;; netbsd) - if "x$LIBS_TERMCAP" = "x-lterminfo" ; then + if test "x$LIBS_TERMCAP" = "x-lterminfo"; then TERMINFO=yes else LIBS_TERMCAP="-ltermcap" From fef9d1494c136356309722cbb00e7ad367233797 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 5 May 2012 09:38:22 -0700 Subject: [PATCH 362/564] ChangeLog fixes --- doc/lispref/ChangeLog | 2 -- lisp/ChangeLog | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 2d1134c6a89..0dbfb9962e7 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -13,8 +13,6 @@ * elisp.texi (DATE): Forgot to change the month in 2012-04-21 change. -2012-05-04 Glenn Morris - * lists.texi (List-related Predicates, List Variables): Tweak page-breaks. (Sets And Lists): Convert inforef to xref. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 76d3e2482c3..12c1e16d640 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,4 +1,4 @@ -2012-05-04 Chong Yidong +2012-05-05 Chong Yidong * select.el (xselect--encode-string): Always use utf-8 for TEXT on Nextstep. From a43f98b3959cf9435de7ea5a5bb44e3fbd061085 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 5 May 2012 13:58:14 -0700 Subject: [PATCH 363/564] Move function from cal-tex to holidays * calendar/holidays.el (holiday-in-range): Move here from cal-tex-list-holidays. * calendar/cal-tex.el (cal-tex-list-holidays): Make it an obsolete alias for holiday-in-range. Update all callers. --- lisp/ChangeLog | 7 +++++++ lisp/calendar/cal-tex.el | 42 ++++++++++----------------------------- lisp/calendar/holidays.el | 27 +++++++++++++++++++++++++ 3 files changed, 44 insertions(+), 32 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 12c1e16d640..f66cd887adc 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2012-05-05 Glenn Morris + + * calendar/holidays.el (holiday-in-range): + Move here from cal-tex-list-holidays. + * calendar/cal-tex.el (cal-tex-list-holidays): + Make it an obsolete alias for holiday-in-range. Update all callers. + 2012-05-05 Chong Yidong * select.el (xselect--encode-string): Always use utf-8 for TEXT on diff --git a/lisp/calendar/cal-tex.el b/lisp/calendar/cal-tex.el index 0ae2b38eaf6..2452f44448c 100644 --- a/lisp/calendar/cal-tex.el +++ b/lisp/calendar/cal-tex.el @@ -237,31 +237,9 @@ The names are taken from `calendar-day-name-array'.") "LaTeX code to insert one box with date info in calendar. This definition is the heart of the calendar!") -(autoload 'calendar-holiday-list "holidays") +(autoload 'holiday-in-range "holidays") -(defun cal-tex-list-holidays (d1 d2) - "Generate a list of all holidays from absolute date D1 to D2." - (let* ((start (calendar-gregorian-from-absolute d1)) - (displayed-month (calendar-extract-month start)) - (displayed-year (calendar-extract-year start)) - (end (calendar-gregorian-from-absolute d2)) - (end-month (calendar-extract-month end)) - (end-year (calendar-extract-year end)) - (number-of-intervals - (1+ (/ (calendar-interval displayed-month displayed-year - end-month end-year) - 3))) - holidays in-range a) - (calendar-increment-month displayed-month displayed-year 1) - (dotimes (_idummy number-of-intervals) - (setq holidays (append holidays (calendar-holiday-list))) - (calendar-increment-month displayed-month displayed-year 3)) - (dolist (hol holidays) - (and (car hol) - (setq a (calendar-absolute-from-gregorian (car hol))) - (and (<= d1 a) (<= a d2)) - (setq in-range (append (list hol) in-range)))) - in-range)) +(define-obsolete-function-alias 'cal-tex-list-holidays 'holiday-in-range "24.2") (autoload 'diary-list-entries "diary-lib") @@ -446,7 +424,7 @@ Optional EVENT indicates a buffer position to use instead of point." (calendar-last-day-of-month end-month end-year) end-year)))) (diary-list (if cal-tex-diary (cal-tex-list-diary-entries d1 d2))) - (holidays (if cal-tex-holidays (cal-tex-list-holidays d1 d2))) + (holidays (if cal-tex-holidays (holiday-in-range d1 d2))) other-month other-year small-months-at-start) (cal-tex-insert-preamble (cal-tex-number-weeks month year 1) t "12pt") (cal-tex-cmd cal-tex-cal-one-month) @@ -516,7 +494,7 @@ indicates a buffer position to use instead of point." (calendar-last-day-of-month end-month end-year) end-year)))) (diary-list (if cal-tex-diary (cal-tex-list-diary-entries d1 d2))) - (holidays (if cal-tex-holidays (cal-tex-list-holidays d1 d2)))) + (holidays (if cal-tex-holidays (holiday-in-range d1 d2)))) (cal-tex-insert-preamble (cal-tex-number-weeks month year n) nil "12pt") (if (> n 1) (cal-tex-cmd cal-tex-cal-multi-month) @@ -697,7 +675,7 @@ entries are not shown). The calendar shows the hours 8-12am, 1-5pm." (d1 (calendar-absolute-from-gregorian date)) (d2 (+ (* 7 n) d1)) (holidays (if cal-tex-holidays - (cal-tex-list-holidays d1 d2)))) + (holiday-in-range d1 d2)))) (cal-tex-preamble "11pt") (cal-tex-cmd "\\textwidth 6.5in") (cal-tex-cmd "\\textheight 10.5in") @@ -752,7 +730,7 @@ Optional EVENT indicates a buffer position to use instead of point." (d1 (calendar-absolute-from-gregorian date)) (d2 (+ (* 7 n) d1)) (holidays (if cal-tex-holidays - (cal-tex-list-holidays d1 d2)))) + (holiday-in-range d1 d2)))) (cal-tex-preamble "12pt") (cal-tex-cmd "\\textwidth 6.5in") (cal-tex-cmd "\\textheight 10.5in") @@ -836,7 +814,7 @@ position to use instead of point." (d1 (calendar-absolute-from-gregorian date)) (d2 (+ (* 7 n) d1)) (holidays (if cal-tex-holidays - (cal-tex-list-holidays d1 d2))) + (holiday-in-range d1 d2))) (diary-list (if cal-tex-diary (cal-tex-list-diary-entries ;; FIXME d1? @@ -1052,7 +1030,7 @@ Optional EVENT indicates a buffer position to use instead of point." (d1 (calendar-absolute-from-gregorian date)) (d2 (+ (* 7 n) d1)) (holidays (if cal-tex-holidays - (cal-tex-list-holidays d1 d2))) + (holiday-in-range d1 d2))) (diary-list (if cal-tex-diary (cal-tex-list-diary-entries ;; FIXME d1? @@ -1149,7 +1127,7 @@ Optional EVENT indicates a buffer position to use instead of point." (d1 (calendar-absolute-from-gregorian date)) (d2 (+ (* 7 n) d1)) (holidays (if cal-tex-holidays - (cal-tex-list-holidays d1 d2))) + (holiday-in-range d1 d2))) (diary-list (if cal-tex-diary (cal-tex-list-diary-entries ;; FIXME d1? @@ -1292,7 +1270,7 @@ Optional EVENT indicates a buffer position to use instead of point." (d1 (calendar-absolute-from-gregorian date)) (d2 (+ (* 7 n) d1)) (holidays (if cal-tex-holidays - (cal-tex-list-holidays d1 d2))) + (holiday-in-range d1 d2))) (diary-list (if cal-tex-diary (cal-tex-list-diary-entries ;; FIXME d1? diff --git a/lisp/calendar/holidays.el b/lisp/calendar/holidays.el index 9edd353b889..0bb3c231840 100644 --- a/lisp/calendar/holidays.el +++ b/lisp/calendar/holidays.el @@ -645,6 +645,33 @@ strings describing those holidays that apply on DATE, or nil if none do." (define-obsolete-function-alias 'check-calendar-holidays 'calendar-check-holidays "23.1") + +;; Formerly cal-tex-list-holidays. +(defun holiday-in-range (d1 d2) + "Generate a list of all holidays in range from absolute date D1 to D2." + (let* ((start (calendar-gregorian-from-absolute d1)) + (displayed-month (calendar-extract-month start)) + (displayed-year (calendar-extract-year start)) + (end (calendar-gregorian-from-absolute d2)) + (end-month (calendar-extract-month end)) + (end-year (calendar-extract-year end)) + (number-of-intervals + (1+ (/ (calendar-interval displayed-month displayed-year + end-month end-year) + 3))) + holidays in-range a) + (calendar-increment-month displayed-month displayed-year 1) + (dotimes (_idummy number-of-intervals) + (setq holidays (append holidays (calendar-holiday-list))) + (calendar-increment-month displayed-month displayed-year 3)) + (dolist (hol holidays) + (and (car hol) + (setq a (calendar-absolute-from-gregorian (car hol))) + (and (<= d1 a) (<= a d2)) + (setq in-range (append (list hol) in-range)))) + in-range)) + + (declare-function x-popup-menu "menu.c" (position menu)) ;;;###cal-autoload From 48176e8bacea7a462e28c472b6dd7a052355b33e Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 5 May 2012 14:31:41 -0700 Subject: [PATCH 364/564] Optionally include holidays in cal-html output * lisp/calendar/cal-html.el: (cal-html-holidays): New option. (cal-html-css-default): Add holiday entry. (holiday-in-range): Autoload it. (cal-html-htmlify-entry): Add optional class argument. (cal-html-htmlify-list): Add optional holidays argument. (cal-html-insert-agenda-days): Include holidays in the output. (cal-html-one-month): Maybe include holidays. --- etc/NEWS | 4 ++++ lisp/ChangeLog | 10 +++++++++ lisp/calendar/cal-html.el | 43 +++++++++++++++++++++++++++------------ 3 files changed, 44 insertions(+), 13 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index c47fd166215..57c492ffa4c 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -94,6 +94,10 @@ see the `apropos' Custom group for details. **** The old options whose values specified faces to use were removed (i.e. `apropos-symbol-face', `apropos-keybinding-face', etc.). +** Calendar + +*** The calendars produced by cal-html can optionally include holidays. + ** Customize *** `custom-reset-button-menu' now defaults to t. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f66cd887adc..43045fbbbd2 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,15 @@ 2012-05-05 Glenn Morris + * calendar/cal-html.el: Optionally include holidays in the output. + Suggested by Ed Reingold . + (cal-html-holidays): New option. + (cal-html-css-default): Add holiday entry. + (holiday-in-range): Autoload it. + (cal-html-htmlify-entry): Add optional class argument. + (cal-html-htmlify-list): Add optional holidays argument. + (cal-html-insert-agenda-days): Include holidays in the output. + (cal-html-one-month): Maybe include holidays. + * calendar/holidays.el (holiday-in-range): Move here from cal-tex-list-holidays. * calendar/cal-tex.el (cal-tex-list-holidays): diff --git a/lisp/calendar/cal-html.el b/lisp/calendar/cal-html.el index 8073295a412..679fae98bc8 100644 --- a/lisp/calendar/cal-html.el +++ b/lisp/calendar/cal-html.el @@ -66,6 +66,12 @@ (string :tag "Sat")) :group 'calendar-html) +(defcustom cal-html-holidays t + "If non-nil, include holidays as well as diary entries." + :version "24.2" + :type 'boolean + :group 'calendar-html) + (defcustom cal-html-css-default (concat "\n\n") "Default cal-html css style. You can override this with a \"cal.css\" file." :type 'string + :version "24.2" ; added SPAN.HOLIDAY :group 'calendar-html) ;;; End customizable variables. @@ -227,6 +235,8 @@ Contains links to previous and next month and year, and current minical." ;;------------------------------------------------------------ ;; minical: a small month calendar with links ;;------------------------------------------------------------ +(autoload 'holiday-in-range "holidays") + (defun cal-html-insert-minical (month year) "Insert a minical for numeric MONTH of YEAR." (let* ((blank-days ; at start of month @@ -313,10 +323,12 @@ Characters are replaced according to `cal-html-html-subst-list'." "")) -(defun cal-html-htmlify-entry (entry) - "Convert a diary entry ENTRY to html with the appropriate class specifier." +(defun cal-html-htmlify-entry (entry &optional class) + "Convert a diary entry ENTRY to html with the appropriate class specifier. +Optional argument CLASS is the class specifier to use." (let ((start (cond + (class) ((string-match "block" (nth 2 entry)) "BLOCK") ((string-match "anniversary" (nth 2 entry)) "ANN") ((not (string-match @@ -328,10 +340,12 @@ Characters are replaced according to `cal-html-html-subst-list'." (cal-html-htmlify-string (cadr entry))))) -(defun cal-html-htmlify-list (date-list date) +(defun cal-html-htmlify-list (date-list date &optional holidays) "Return a string of concatenated, HTML-ified diary entries. -DATE-LIST is a list of diary entries. Return only those matching DATE." - (mapconcat (lambda (x) (cal-html-htmlify-entry x)) +DATE-LIST is a list of diary entries. Return only those matching DATE. +Optional argument HOLIDAYS non-nil means the input is actually a list +of holidays, rather than diary entries." + (mapconcat (lambda (x) (cal-html-htmlify-entry x (if holidays "HOLIDAY"))) (let (result) (dolist (p date-list (reverse result)) (and (car p) @@ -351,11 +365,11 @@ DATE-LIST is a list of diary entries. Return only those matching DATE." (diary-list-entries (calendar-gregorian-from-absolute d1) (1+ (- d2 d1)) t)) - -(defun cal-html-insert-agenda-days (month year diary-list) +(defun cal-html-insert-agenda-days (month year diary-list holiday-list) "Insert HTML commands for a range of days in monthly calendars. HTML commands are inserted for the days of the numeric MONTH in -four-digit YEAR. Diary entries in DIARY-LIST are included." +four-digit YEAR. Includes diary entries in DIARY-LIST, and +holidays in HOLIDAY-LIST." (let ((blank-days ; at start of month (mod (- (calendar-day-of-week (list month 1 year)) calendar-week-start-day) @@ -381,6 +395,8 @@ four-digit YEAR. Diary entries in DIARY-LIST are included." cal-html-e-tableheader-string ;; Diary entries. cal-html-b-tabledata-string + (cal-html-htmlify-list holiday-list date t) + (and holiday-list diary-list "
\n") (cal-html-htmlify-list diary-list date) cal-html-e-tabledata-string cal-html-e-tablerow-string) @@ -395,16 +411,17 @@ four-digit YEAR. Diary entries in DIARY-LIST are included." (defun cal-html-one-month (month year dir) "Write an HTML calendar file for numeric MONTH of YEAR in directory DIR." - (let ((diary-list (cal-html-list-diary-entries - (calendar-absolute-from-gregorian (list month 1 year)) - (calendar-absolute-from-gregorian + (let* ((d1 (calendar-absolute-from-gregorian (list month 1 year))) + (d2 (calendar-absolute-from-gregorian (list month (calendar-last-day-of-month month year) - year))))) + year))) + (diary-list (cal-html-list-diary-entries d1 d2)) + (holiday-list (if cal-html-holidays (holiday-in-range d1 d2)))) (with-temp-buffer (insert cal-html-b-document-string) (cal-html-insert-month-header month year) - (cal-html-insert-agenda-days month year diary-list) + (cal-html-insert-agenda-days month year diary-list holiday-list) (insert cal-html-e-document-string) (write-file (expand-file-name (cal-html-monthpage-name month year) dir))))) From 25f292cd48febec5f9b133db922b3b0dc32185c3 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Sun, 6 May 2012 12:05:43 +0800 Subject: [PATCH 365/564] * emacs-lisp/package.el (package-built-in-p): Handle `emacs' package. Fixes: debbugs:11410 --- lisp/ChangeLog | 5 +++++ lisp/emacs-lisp/package.el | 7 +++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 2442582114d..ad22a25cfd7 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-05-06 Chong Yidong + + * emacs-lisp/package.el (package-built-in-p): Handle the `emacs' + package (Bug#11410). + 2012-05-05 Chong Yidong * emacs-lisp/package.el (package-buffer-info): Avoid putting local diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index 73afdb82509..4ed8aacf0b6 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -469,8 +469,11 @@ NAME and VERSION are both strings." Optional arg MIN-VERSION, if non-nil, should be a version list specifying the minimum acceptable version." (require 'finder-inf nil t) ; For `package--builtins'. - (let ((elt (assq package package--builtins))) - (and elt (version-list-<= min-version (package-desc-vers (cdr elt)))))) + (if (eq package 'emacs) + (version-list-<= min-version (version-to-list emacs-version)) + (let ((elt (assq package package--builtins))) + (and elt (version-list-<= min-version + (package-desc-vers (cdr elt))))))) ;; This function goes ahead and activates a newer version of a package ;; if an older one was already activated. This is not ideal; we'd at From ebfe2597a886443596e007607dd08a617e60d717 Mon Sep 17 00:00:00 2001 From: Wolfgang Jenkner Date: Sun, 6 May 2012 12:19:11 +0800 Subject: [PATCH 366/564] Cosmetic fix for Man-unindent. * lisp/man.el (Man-unindent): Use text-property-default-nonsticky to prevent untabify from inheriting face properties. Fixes: debbugs:11408 --- lisp/ChangeLog | 5 +++++ lisp/man.el | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 43045fbbbd2..2a33bffca18 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-05-06 Wolfgang Jenkner + + * man.el (Man-unindent): Use text-property-default-nonsticky to + prevent untabify from inheriting face properties (Bug#11408). + 2012-05-05 Glenn Morris * calendar/cal-html.el: Optionally include holidays in the output. diff --git a/lisp/man.el b/lisp/man.el index dd64613c495..ca7df4cd1a4 100644 --- a/lisp/man.el +++ b/lisp/man.el @@ -1475,7 +1475,12 @@ The following key bindings are currently in effect in the buffer: (nindent 0)) (narrow-to-region (car page) (car (cdr page))) (if Man-uses-untabify-flag - (untabify (point-min) (point-max))) + ;; The space characters inserted by `untabify' inherit + ;; sticky text properties, which is unnecessary and looks + ;; ugly with underlining (Bug#11408). + (let ((text-property-default-nonsticky + (cons '(face . t) text-property-default-nonsticky))) + (untabify (point-min) (point-max)))) (if (catch 'unindent (goto-char (point-min)) (if (not (re-search-forward Man-first-heading-regexp nil t)) From ed39e4e24d031db7e994e743c1dc4d055aa8f8de Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Sun, 6 May 2012 12:28:58 +0800 Subject: [PATCH 367/564] * frames.texi (Mouse References, Mouse Commands): Fix index entries. Fixes: debbugs:11362 --- doc/emacs/ChangeLog | 5 +++++ doc/emacs/frames.texi | 6 ++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index 8403ccac9ee..ea618b0b5a6 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,3 +1,8 @@ +2012-05-06 Chong Yidong + + * frames.texi (Mouse References, Mouse Commands): Fix index + entries (Bug#11362). + 2012-05-03 Glenn Morris * custom.texi (Customization Groups, Custom Themes, Examining): diff --git a/doc/emacs/frames.texi b/doc/emacs/frames.texi index 80a12afeb1b..ee468e6f685 100644 --- a/doc/emacs/frames.texi +++ b/doc/emacs/frames.texi @@ -67,6 +67,7 @@ for doing so on MS-DOS). @node Mouse Commands @section Mouse Commands for Editing @cindex mouse buttons (what they do) +@cindex mouse, selecting text using @kindex Mouse-1 @kindex Mouse-2 @@ -106,6 +107,7 @@ setting the variable @code{x-mouse-click-focus-ignore-position} to selects the frame, without doing anything else; clicking again selects the window and sets the cursor position. +@cindex mouse, dragging @findex mouse-set-region Holding down @kbd{Mouse-1} and ``dragging'' the mouse over a stretch of text activates the region around that text @@ -235,8 +237,8 @@ Select the text you drag across, in the form of whole lines. @node Mouse References @section Following References with the Mouse -@kindex Mouse-1 @r{(selection)} -@kindex Mouse-2 @r{(selection)} +@kindex Mouse-1 @r{(on buttons)} +@kindex Mouse-2 @r{(on buttons)} @cindex hyperlinks @cindex links @cindex text buttons From 52b61776c594e1e4f30f8e281e7ead79d56383d5 Mon Sep 17 00:00:00 2001 From: Troels Nielsen Date: Sun, 6 May 2012 12:52:58 +0800 Subject: [PATCH 368/564] Fix match highlighting in compilation buffers. * progmodes/compile.el (compilation-internal-error-properties): Calculate start position correctly when end-col is set but end-line is not. Fixes: debbugs:11382 --- lisp/ChangeLog | 6 ++++++ lisp/progmodes/compile.el | 18 +++++++++--------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 2a33bffca18..134c208e544 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2012-05-06 Troels Nielsen (tiny change) + + * progmodes/compile.el (compilation-internal-error-properties): + Calculate start position correctly when end-col is set but + end-line is not (Bug#11382). + 2012-05-06 Wolfgang Jenkner * man.el (Man-unindent): Use text-property-default-nonsticky to diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el index f22ee4f7ea5..7ffaddb2c49 100644 --- a/lisp/progmodes/compile.el +++ b/lisp/progmodes/compile.el @@ -1068,14 +1068,14 @@ FMTS is a list of format specs for transforming the file name. end-marker loc end-loc) (if (not (and marker (marker-buffer marker))) (setq marker nil) ; no valid marker for this file - (setq loc (or line 1)) ; normalize no linenumber to line 1 + (unless line (setq line 1)) ; normalize no linenumber to line 1 (catch 'marker ; find nearest loc, at least one exists (dolist (x (cddr (compilation--file-struct->loc-tree file-struct))) ; Loop over remaining lines. - (if (> (car x) loc) ; Still bigger. + (if (> (car x) line) ; Still bigger. (setq marker-line x) - (if (> (- (or (car marker-line) 1) loc) - (- loc (car x))) ; Current line is nearer. + (if (> (- (or (car marker-line) 1) line) + (- line (car x))) ; Current line is nearer. (setq marker-line x)) (throw 'marker t)))) (setq marker (compilation--loc->marker (cadr marker-line)) @@ -1093,15 +1093,15 @@ FMTS is a list of format specs for transforming the file name. (save-restriction (widen) (goto-char (marker-position marker)) - (when (or end-col end-line) + ;; Set end-marker if appropriate and go to line. + (if (not (or end-col end-line)) + (beginning-of-line (- line marker-line -1)) (beginning-of-line (- (or end-line line) marker-line -1)) (if (or (null end-col) (< end-col 0)) (end-of-line) (compilation-move-to-column end-col screen-columns)) - (setq end-marker (point-marker))) - (beginning-of-line (if end-line - (- line end-line -1) - (- loc marker-line -1))) + (setq end-marker (point-marker)) + (when end-line (beginning-of-line (- line end-line -1)))) (if col (compilation-move-to-column col screen-columns) (forward-to-indentation 0)) From 6632d361114f2d104b689e2213dce1eb3474de0a Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Sun, 6 May 2012 16:32:37 +0800 Subject: [PATCH 369/564] Improvements for Tabulated List mode. * lisp/emacs-lisp/tabulated-list.el (tabulated-list-format): Accept additional plist in column descriptors. (tabulated-list-init-header): Obey it. (tabulated-list-get-entry): New function. (tabulated-list-put-tag): Use it. Use string-width instead of length. (tabulated-list--column-number): New function. (tabulated-list-print): Use it. (tabulated-list-print-col): New function. Set `tabulated-list-column-name' property on each column's text. (tabulated-list-print-entry): Use it. (tabulated-list-delete-entry, tabulated-list-set-col): New functions. (tabulated-list-sort-column): New command. Fixes: debbugs:11337 --- etc/NEWS | 5 + lisp/ChangeLog | 17 +++ lisp/emacs-lisp/tabulated-list.el | 245 ++++++++++++++++++++++-------- 3 files changed, 200 insertions(+), 67 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 57c492ffa4c..df386fa7e4f 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -161,6 +161,11 @@ details. The function `notifications-get-capabilities' returns the supported server properties. +** Tabulated List and packages derived from it + +*** New command `tabulated-list-sort-column' bound to `S' sorts column +at point, or the Nth column if a numeric prefix argument is given. + ** Obsolete packages: *** assoc.el diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 134c208e544..b925e47880b 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,20 @@ +2012-05-06 Chong Yidong + + * emacs-lisp/tabulated-list.el (tabulated-list-format): Accept + additional plist in column descriptors. + (tabulated-list-init-header): Obey it. + (tabulated-list-get-entry): New function. + (tabulated-list-put-tag): Use it. Use string-width instead of + length. + (tabulated-list--column-number): New function. + (tabulated-list-print): Use it. + (tabulated-list-print-col): New function. Set + `tabulated-list-column-name' property on each column's text. + (tabulated-list-print-entry): Use it. + (tabulated-list-delete-entry, tabulated-list-set-col): New + functions. + (tabulated-list-sort-column): New command (Bug#11337). + 2012-05-06 Troels Nielsen (tiny change) * progmodes/compile.el (compilation-internal-error-properties): diff --git a/lisp/emacs-lisp/tabulated-list.el b/lisp/emacs-lisp/tabulated-list.el index 9439fba2b86..bd734a4fbe0 100644 --- a/lisp/emacs-lisp/tabulated-list.el +++ b/lisp/emacs-lisp/tabulated-list.el @@ -22,22 +22,26 @@ ;;; Commentary: -;; This file defines `tabulated-list-mode', a generic major mode for displaying -;; lists of tabulated data, intended for other major modes to inherit from. It -;; provides several utility routines, e.g. for pretty-printing lines of -;; tabulated data to fit into the appropriate columns. +;; This file defines Tabulated List mode, a generic major mode for +;; displaying lists of tabulated data, intended for other major modes +;; to inherit from. It provides several utility routines, e.g. for +;; pretty-printing lines of tabulated data to fit into the appropriate +;; columns. ;; For usage information, see the documentation of `tabulated-list-mode'. -;; This package originated from Tom Tromey's Package Menu mode, extended and -;; generalized to be used by other modes. +;; This package originated from Tom Tromey's Package Menu mode, +;; extended and generalized to be used by other modes. ;;; Code: (defvar tabulated-list-format nil "The format of the current Tabulated List mode buffer. -This should be a vector of elements (NAME WIDTH SORT), where: +This should be a vector of elements (NAME WIDTH SORT . PROPS), +where: - NAME is a string describing the column. + This is the label for the column in the header line. + Different columns must have non-`equal' names. - WIDTH is the width to reserve for the column. For the final element, its numerical value is ignored. - SORT specifies how to sort entries by this column. @@ -45,7 +49,11 @@ This should be a vector of elements (NAME WIDTH SORT), where: If t, sort by comparing the string value printed in the column. Otherwise, it should be a predicate function suitable for `sort', accepting arguments with the same form as the elements - of `tabulated-list-entries'.") + of `tabulated-list-entries'. + - PROPS is a plist of additional column properties. + Currently supported properties are: + - `:pad-right': Number of additional padding spaces to the + right of the column (defaults to 1 if omitted).") (make-variable-buffer-local 'tabulated-list-format) (defvar tabulated-list-entries nil @@ -95,12 +103,18 @@ NAME is a string matching one of the column names in non-nil, means to invert the resulting sort.") (make-variable-buffer-local 'tabulated-list-sort-key) -(defun tabulated-list-get-id (&optional pos) - "Obtain the entry ID of the Tabulated List mode entry at POS. -This is an ID object from `tabulated-list-entries', or nil. +(defsubst tabulated-list-get-id (&optional pos) + "Return the entry ID of the Tabulated List entry at POS. +The value is an ID object from `tabulated-list-entries', or nil. POS, if omitted or nil, defaults to point." (get-text-property (or pos (point)) 'tabulated-list-id)) +(defsubst tabulated-list-get-entry (&optional pos) + "Return the Tabulated List entry at POS. +The value is a vector of column descriptors, or nil if there is +no entry at POS. POS, if omitted or nil, defaults to point." + (get-text-property (or pos (point)) 'tabulated-list-entry)) + (defun tabulated-list-put-tag (tag &optional advance) "Put TAG in the padding area of the current line. TAG should be a string, with length <= `tabulated-list-padding'. @@ -111,16 +125,16 @@ If ADVANCE is non-nil, move forward by one line afterwards." (error "Unable to tag the current line")) (save-excursion (beginning-of-line) - (when (get-text-property (point) 'tabulated-list-id) + (when (tabulated-list-get-entry) (let ((beg (point)) (inhibit-read-only t)) (forward-char tabulated-list-padding) (insert-and-inherit - (if (<= (length tag) tabulated-list-padding) - (concat tag - (make-string (- tabulated-list-padding (length tag)) - ?\s)) - (substring tag 0 tabulated-list-padding))) + (let ((width (string-width tag))) + (if (<= width tabulated-list-padding) + (concat tag + (make-string (- tabulated-list-padding width) ?\s)) + (truncate-string-to-width tag tabulated-list-padding)))) (delete-region beg (+ beg tabulated-list-padding))))) (if advance (forward-line))) @@ -130,6 +144,7 @@ If ADVANCE is non-nil, move forward by one line afterwards." (set-keymap-parent map button-buffer-map) (define-key map "n" 'next-line) (define-key map "p" 'previous-line) + (define-key map "S" 'tabulated-list-sort-column) (define-key map [follow-link] 'mouse-face) (define-key map [mouse-2] 'mouse-select-window) map) @@ -154,7 +169,7 @@ If ADVANCE is non-nil, move forward by one line afterwards." (defun tabulated-list-init-header () "Set up header line for the Tabulated List buffer." - (let ((x tabulated-list-padding) + (let ((x (max tabulated-list-padding 0)) (button-props `(help-echo "Click to sort by column" mouse-face highlight keymap ,tabulated-list-sort-button-map)) @@ -163,9 +178,11 @@ If ADVANCE is non-nil, move forward by one line afterwards." (push (propertize " " 'display `(space :align-to ,x)) cols)) (dotimes (n (length tabulated-list-format)) (let* ((col (aref tabulated-list-format n)) + (label (nth 0 col)) (width (nth 1 col)) - (label (car col))) - (setq x (+ x 1 width)) + (props (nthcdr 3 col)) + (pad-right (or (plist-get props :pad-right) 1))) + (setq x (+ x pad-right width)) (and (<= tabulated-list-padding 0) (= n 0) (setq label (concat " " label))) @@ -190,11 +207,12 @@ If ADVANCE is non-nil, move forward by one line afterwards." (t (apply 'propertize label 'tabulated-list-column-name (car col) button-props))) - cols)) - (push (propertize " " - 'display (list 'space :align-to x) - 'face 'fixed-pitch) - cols)) + cols) + (if (> pad-right 0) + (push (propertize " " + 'display `(space :align-to ,x) + 'face 'fixed-pitch) + cols)))) (setq header-line-format (mapconcat 'identity (nreverse cols) "")))) (defun tabulated-list-revert (&rest ignored) @@ -206,6 +224,17 @@ It runs `tabulated-list-revert-hook', then calls `tabulated-list-print'." (run-hooks 'tabulated-list-revert-hook) (tabulated-list-print t)) +(defun tabulated-list--column-number (name) + (let ((len (length tabulated-list-format)) + (n 0) + found) + (while (and (< n len) (null found)) + (if (equal (car (aref tabulated-list-format n)) name) + (setq found n)) + (setq n (1+ n))) + (or found + (error "No column named %s" name)))) + (defun tabulated-list-print (&optional remember-pos) "Populate the current Tabulated List mode buffer. This sorts the `tabulated-list-entries' list if sorting is @@ -224,18 +253,13 @@ to the entry with the same ID element as the current line." (setq saved-col (current-column))) (erase-buffer) ;; Sort the buffers, if necessary. - (when tabulated-list-sort-key - (let ((sort-column (car tabulated-list-sort-key)) - (len (length tabulated-list-format)) - (n 0) - sorter) - ;; Which column is to be sorted? - (while (and (< n len) - (not (equal (car (aref tabulated-list-format n)) - sort-column))) - (setq n (1+ n))) - (when (< n len) - (setq sorter (nth 2 (aref tabulated-list-format n))) + (when (and tabulated-list-sort-key + (car tabulated-list-sort-key)) + (let* ((sort-column (car tabulated-list-sort-key)) + (n (tabulated-list--column-number sort-column)) + (sorter (nth 2 (aref tabulated-list-format n)))) + ;; Is the specified column sortable? + (when sorter (when (eq sorter t) (setq sorter ; Default sorter checks column N: (lambda (A B) @@ -267,31 +291,105 @@ to the entry with the same ID element as the current line." This is the default `tabulated-list-printer' function. ID is a Lisp object identifying the entry to print, and COLS is a vector of column descriptors." - (let ((beg (point)) - (x (max tabulated-list-padding 0)) - (len (length tabulated-list-format))) + (let ((beg (point)) + (x (max tabulated-list-padding 0)) + (ncols (length tabulated-list-format)) + (inhibit-read-only t)) (if (> tabulated-list-padding 0) (insert (make-string x ?\s))) - (dotimes (n len) - (let* ((format (aref tabulated-list-format n)) - (desc (aref cols n)) - (width (nth 1 format)) - (label (if (stringp desc) desc (car desc))) - (help-echo (concat (car format) ": " label))) - ;; Truncate labels if necessary (except last column). - (and (< (1+ n) len) - (> (string-width label) width) - (setq label (truncate-string-to-width label width nil nil t))) - (setq label (bidi-string-mark-left-to-right label)) - (if (stringp desc) - (insert (propertize label 'help-echo help-echo)) - (apply 'insert-text-button label (cdr desc))) - (setq x (+ x 1 width))) - ;; No need to append any spaces if this is the last column. - (if (< (1+ n) len) - (indent-to x 1))) + (dotimes (n ncols) + (setq x (tabulated-list-print-col n (aref cols n) x))) (insert ?\n) - (put-text-property beg (point) 'tabulated-list-id id))) + (put-text-property beg (point) 'tabulated-list-id id) + (put-text-property beg (point) 'tabulated-list-entry cols))) + +(defun tabulated-list-print-col (n col-desc x) + "Insert a specified Tabulated List entry at point. +N is the column number, COL-DESC is a column descriptor \(see +`tabulated-list-entries'), and X is the column number at point. +Return the column number after insertion." + (let* ((format (aref tabulated-list-format n)) + (name (nth 0 format)) + (width (nth 1 format)) + (props (nthcdr 3 format)) + (pad-right (or (plist-get props :pad-right) 1)) + (label (if (stringp col-desc) col-desc (car col-desc))) + (help-echo (concat (car format) ": " label)) + (opoint (point)) + (not-last-col (< (1+ n) (length tabulated-list-format)))) + ;; Truncate labels if necessary (except last column). + (and not-last-col + (> (string-width label) width) + (setq label (truncate-string-to-width label width nil nil t))) + (setq label (bidi-string-mark-left-to-right label)) + (if (stringp col-desc) + (insert (propertize label 'help-echo help-echo)) + (apply 'insert-text-button label (cdr col-desc))) + (setq x (+ x pad-right width)) + ;; No need to append any spaces if this is the last column. + (if not-last-col + (indent-to x pad-right)) + (put-text-property opoint (point) 'tabulated-list-column-name name) + x)) + +(defun tabulated-list-delete-entry () + "Delete the Tabulated List entry at point. +Return a list (ID COLS), where ID is the ID of the deleted entry +and COLS is a vector of its column descriptors. Move point to +the beginning of the deleted entry. Return nil if there is no +entry at point. + +This function only changes the buffer contents; it does not alter +`tabulated-list-entries'." + ;; Assume that each entry occupies one line. + (let* ((id (tabulated-list-get-id)) + (cols (tabulated-list-get-entry)) + (inhibit-read-only t)) + (when cols + (delete-region (line-beginning-position) (1+ (line-end-position))) + (list id cols)))) + +(defun tabulated-list-set-col (col desc &optional change-entry-data) + "Change the Tabulated List entry at point, setting COL to DESC. +COL is the column number to change, or the name of the column to change. +DESC is the new column descriptor, which is inserted via +`tabulated-list-print-col'. + +If CHANGE-ENTRY-DATA is non-nil, modify the underlying entry data +by setting the appropriate slot of the vector originally used to +print this entry. If `tabulated-list-entries' has a list value, +this is the vector stored within it." + (let* ((opoint (point)) + (eol (line-end-position)) + (pos (line-beginning-position)) + (id (tabulated-list-get-id pos)) + (entry (tabulated-list-get-entry pos)) + (prop 'tabulated-list-column-name) + (inhibit-read-only t) + name) + (cond ((numberp col) + (setq name (car (aref tabulated-list-format col)))) + ((stringp col) + (setq name col + col (tabulated-list--column-number col))) + (t + (error "Invalid column %s" col))) + (unless entry + (error "No Tabulated List entry at position %s" opoint)) + (unless (equal (get-text-property pos prop) name) + (while (and (setq pos + (next-single-property-change pos prop nil eol)) + (< pos eol) + (not (equal (get-text-property pos prop) name))))) + (when (< pos eol) + (delete-region pos (next-single-property-change pos prop nil eol)) + (goto-char pos) + (tabulated-list-print-col col desc (current-column)) + (if change-entry-data + (aset entry col desc)) + (put-text-property pos (point) 'tabulated-list-id id) + (put-text-property pos (point) 'tabulated-list-entry entry) + (goto-char opoint)))) (defun tabulated-list-col-sort (&optional e) "Sort Tabulated List entries by the column of the mouse click E." @@ -302,14 +400,27 @@ of column descriptors." 'tabulated-list-column-name (car obj)))) (with-current-buffer (window-buffer (posn-window pos)) - (when (derived-mode-p 'tabulated-list-mode) - ;; Flip the sort order on a second click. - (if (equal name (car tabulated-list-sort-key)) - (setcdr tabulated-list-sort-key - (not (cdr tabulated-list-sort-key))) - (setq tabulated-list-sort-key (cons name nil))) - (tabulated-list-init-header) - (tabulated-list-print t))))) + (tabulated-list--sort-by-column-name name)))) + +(defun tabulated-list-sort-column (&optional n) + "Sort Tabulated List entries by the column at point. +With a numeric prefix argument N, sort the Nth column." + (interactive "P") + (let ((name (if n + (car (aref tabulated-list-format n)) + (get-text-property (point) + 'tabulated-list-column-name)))) + (tabulated-list--sort-by-column-name name))) + +(defun tabulated-list--sort-by-column-name (name) + (when (derived-mode-p 'tabulated-list-mode) + ;; Flip the sort order on a second click. + (if (equal name (car tabulated-list-sort-key)) + (setcdr tabulated-list-sort-key + (not (cdr tabulated-list-sort-key))) + (setq tabulated-list-sort-key (cons name nil))) + (tabulated-list-init-header) + (tabulated-list-print t))) ;;; The mode definition: From 3cc99f68ad114947ab5597a4255f5cca25a71d78 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Sun, 6 May 2012 16:43:46 +0800 Subject: [PATCH 370/564] Some cleanups for the buffer menu and electric buffer menu. * lisp/buff-menu.el (list-buffers): Move C-x C-b binding from buff-menu.el to bindings.el. * lisp/ebuff-menu.el (Electric-buffer-menu-undefined): Use the :advertised-binding feature. --- lisp/ChangeLog | 6 ++++++ lisp/bindings.el | 3 ++- lisp/buff-menu.el | 3 --- lisp/ebuff-menu.el | 14 +++++++------- 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b925e47880b..929451a85ed 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -15,6 +15,12 @@ functions. (tabulated-list-sort-column): New command (Bug#11337). + * buff-menu.el (list-buffers): Move C-x C-b binding from + buff-menu.el to bindings.el. + + * ebuff-menu.el (Electric-buffer-menu-undefined): Use the + :advertised-binding feature. + 2012-05-06 Troels Nielsen (tiny change) * progmodes/compile.el (compilation-internal-error-properties): diff --git a/lisp/bindings.el b/lisp/bindings.el index f04ee723220..69d96ab6889 100644 --- a/lisp/bindings.el +++ b/lisp/bindings.el @@ -40,7 +40,7 @@ corresponding to the mode line clicked." (interactive "e") (save-selected-window (select-window (posn-window (event-start event))) - (toggle-read-only) + (with-no-warnings (toggle-read-only)) (force-mode-line-update))) @@ -1190,6 +1190,7 @@ if `inhibit-field-text-motion' is non-nil." ;; (define-key ctl-x-map "\-" 'inverse-add-global-abbrev) (define-key esc-map "'" 'abbrev-prefix-mark) (define-key ctl-x-map "'" 'expand-abbrev) +(define-key ctl-x-map "\C-b" 'list-buffers) (define-key ctl-x-map "z" 'repeat) diff --git a/lisp/buff-menu.el b/lisp/buff-menu.el index e1793711607..105ee50958e 100644 --- a/lisp/buff-menu.el +++ b/lisp/buff-menu.el @@ -640,9 +640,6 @@ The current window remains selected." (view-buffer-other-window (Buffer-menu-buffer t))) -;;;###autoload -(define-key ctl-x-map "\C-b" 'list-buffers) - ;;;###autoload (defun list-buffers (&optional files-only) "Display a list of names of existing buffers. diff --git a/lisp/ebuff-menu.el b/lisp/ebuff-menu.el index dcde6449d22..50a75c1aa57 100644 --- a/lisp/ebuff-menu.el +++ b/lisp/ebuff-menu.el @@ -85,6 +85,11 @@ (define-key map [mouse-2] 'Electric-buffer-menu-mouse-select) map)) +(put 'Electric-buffer-menu-quit :advertised-binding "\C-c\C-c") +(put 'Electric-buffer-menu-select :advertised-binding " ") +(put 'Helper-help :advertised-binding (char-to-string help-char)) +(put 'Helper-describe-bindings :advertised-binding "?") + (defvar electric-buffer-menu-mode-hook nil "Normal hook run by `electric-buffer-list'.") @@ -251,15 +256,10 @@ Skip execution of select, save, and delete commands." (interactive) (ding) (message "%s" - (if (and (eq (key-binding "\C-c\C-c") 'Electric-buffer-menu-quit) - (eq (key-binding " ") 'Electric-buffer-menu-select) - (eq (key-binding (char-to-string help-char)) 'Helper-help) - (eq (key-binding "?") 'Helper-describe-bindings)) - (substitute-command-keys "Type C-c C-c to exit, Space to select, \\[Helper-help] for help, ? for commands") - (substitute-command-keys "\ + (substitute-command-keys "\ Type \\[Electric-buffer-menu-quit] to exit, \ \\[Electric-buffer-menu-select] to select, \ -\\[Helper-help] for help, \\[Helper-describe-bindings] for commands."))) +\\[Helper-help] for help, \\[Helper-describe-bindings] for commands.")) (sit-for 4)) (defun Electric-buffer-menu-mode-view-buffer () From 491503ddd21cae26d3e349e39ee2e139680a220f Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sun, 6 May 2012 06:18:48 -0400 Subject: [PATCH 371/564] Auto-commit of generated files. --- autogen/configure | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/autogen/configure b/autogen/configure index a8c8e657a44..ce3fb436009 100755 --- a/autogen/configure +++ b/autogen/configure @@ -14906,7 +14906,7 @@ case "$opsys" in ## option to use it. darwin) LIBS_TERMCAP="-lncurses" ;; - gnu*) "x$LIBS_TERMCAP" = x && LIBS_TERMCAP="-lncurses" ;; + gnu*) test -z "$LIBS_TERMCAP" && LIBS_TERMCAP="-lncurses" ;; freebsd) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether FreeBSD is new enough to use terminfo" >&5 @@ -14950,7 +14950,7 @@ $as_echo "$emacs_cv_freebsd_terminfo" >&6; } ;; netbsd) - if "x$LIBS_TERMCAP" != "x-lterminfo" ; then + if test "x$LIBS_TERMCAP" != "x-lterminfo"; then TERMINFO=no LIBS_TERMCAP="-ltermcap" fi From e129292c44b6392adadb27bbd4bce94893316ff9 Mon Sep 17 00:00:00 2001 From: Christopher Schmidt Date: Sun, 6 May 2012 11:38:30 -0400 Subject: [PATCH 372/564] * lisp/emacs-lisp/cl-macs.el (cl-expr-contains): Handle cons cells whose cdr is not a cons cell correctly. Fixes: debbugs:11038 --- lisp/ChangeLog | 17 +++++++++++------ lisp/emacs-lisp/cl-macs.el | 7 ++++++- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 929451a85ed..afa4ae803f9 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,18 +1,23 @@ +2012-05-06 Christopher Schmidt + + * emacs-lisp/cl-macs.el (cl-expr-contains): Handle cons cells + whose cdr is not a cons cell correctly (bug#11038). + 2012-05-06 Chong Yidong - * emacs-lisp/tabulated-list.el (tabulated-list-format): Accept - additional plist in column descriptors. + * emacs-lisp/tabulated-list.el (tabulated-list-format): + Accept additional plist in column descriptors. (tabulated-list-init-header): Obey it. (tabulated-list-get-entry): New function. (tabulated-list-put-tag): Use it. Use string-width instead of length. (tabulated-list--column-number): New function. (tabulated-list-print): Use it. - (tabulated-list-print-col): New function. Set - `tabulated-list-column-name' property on each column's text. + (tabulated-list-print-col): New function. + Set `tabulated-list-column-name' property on each column's text. (tabulated-list-print-entry): Use it. - (tabulated-list-delete-entry, tabulated-list-set-col): New - functions. + (tabulated-list-delete-entry, tabulated-list-set-col): + New functions. (tabulated-list-sort-column): New command (Bug#11337). * buff-menu.el (list-buffers): Move C-x C-b binding from diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el index 35cda8cfcf6..8050da400fe 100644 --- a/lisp/emacs-lisp/cl-macs.el +++ b/lisp/emacs-lisp/cl-macs.el @@ -143,11 +143,16 @@ ;;; Count number of times X refers to Y. Return nil for 0 times. (defun cl-expr-contains (x y) + ;; FIXME: This is naive, and it will count Y as referred twice in + ;; (let ((Y 1)) Y) even though it should be 0. Also it is often called on + ;; non-macroexpanded code, so it may also miss some occurrences that would + ;; only appear in the expanded code. (cond ((equal y x) 1) ((and (consp x) (not (memq (car-safe x) '(quote function function*)))) (let ((sum 0)) - (while x + (while (consp x) (setq sum (+ sum (or (cl-expr-contains (pop x) y) 0)))) + (setq sum (+ sum (or (cl-expr-contains x y) 0))) (and (> sum 0) sum))) (t nil))) From e5f9458fe818fd87ec99354420c3633ca928d62c Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Mon, 7 May 2012 00:45:46 +0800 Subject: [PATCH 373/564] * lisp/buff-menu.el: Convert to Tabulated List mode. (Buffer-menu-buffer+size-width): Make obsolete. (Buffer-menu-name-width, Buffer-menu-size-width): New variables. (Buffer-menu-mode-map): Inherit from tabulated-list-mode-map. (Buffer-menu-mode): Derive from tabulated-list-mode. Move command documentation into docstring of buffer-menu. (Buffer-menu-toggle-files-only): Add an informative message. (Buffer-menu-sort): Convert to alias for tabulated-list-sort. (Buffer-menu-buffer, Buffer-menu-beginning, Buffer-menu-mark) (Buffer-menu-unmark, Buffer-menu-backup-unmark) (Buffer-menu-delete, Buffer-menu-save, Buffer-menu-not-modified) (Buffer-menu-execute, Buffer-menu-select) (Buffer-menu-marked-buffers, Buffer-menu-toggle-read-only) (Buffer-menu-bury): Use Tabulated List machinery. (Buffer-menu-mouse-select, Buffer-menu-sort-by-column) (Buffer-menu-sort-button-map, Buffer-menu-make-sort-button): Deleted. (list-buffers--refresh): New function. (list-buffers-noselect): Use it. (tabulated-list-entry-size->, Buffer-menu--pretty-name) (Buffer-menu--pretty-file-name): New helper functions. * lisp/loadup.el: Preload tabulated-list. * lisp/emacs-lisp/tabulated-list.el (tabulated-list-sort): Rename from tabulated-list-sort-column. (tabulated-list-init-header): Add the initial aligning space even if tabulated-list-padding is zero. * src/lisp.mk (lisp): Update. --- etc/NEWS | 2 +- lisp/ChangeLog | 31 + lisp/buff-menu.el | 960 ++++++++++-------------------- lisp/emacs-lisp/cl-loaddefs.el | 2 +- lisp/emacs-lisp/tabulated-list.el | 11 +- lisp/loadup.el | 1 + src/ChangeLog | 4 + src/lisp.mk | 1 + 8 files changed, 370 insertions(+), 642 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index df386fa7e4f..6b59601fd81 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -163,7 +163,7 @@ server properties. ** Tabulated List and packages derived from it -*** New command `tabulated-list-sort-column' bound to `S' sorts column +*** New command `tabulated-list-sort', bound to `S', sorts the column at point, or the Nth column if a numeric prefix argument is given. ** Obsolete packages: diff --git a/lisp/ChangeLog b/lisp/ChangeLog index afa4ae803f9..149c43fc9a7 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,34 @@ +2012-05-06 Chong Yidong + + * buff-menu.el: Convert to Tabulated List mode. + (Buffer-menu-buffer+size-width): Make obsolete. + (Buffer-menu-name-width, Buffer-menu-size-width): New variables. + (Buffer-menu-mode-map): Inherit from tabulated-list-mode-map. + (Buffer-menu-mode): Derive from tabulated-list-mode. Move command + documentation into docstring of buffer-menu. + (Buffer-menu-toggle-files-only): Add an informative message. + (Buffer-menu-sort): Convert to alias for tabulated-list-sort. + (Buffer-menu-buffer, Buffer-menu-beginning, Buffer-menu-mark) + (Buffer-menu-unmark, Buffer-menu-backup-unmark) + (Buffer-menu-delete, Buffer-menu-save, Buffer-menu-not-modified) + (Buffer-menu-execute, Buffer-menu-select) + (Buffer-menu-marked-buffers, Buffer-menu-toggle-read-only) + (Buffer-menu-bury): Use Tabulated List machinery. + (Buffer-menu-mouse-select, Buffer-menu-sort-by-column) + (Buffer-menu-sort-button-map, Buffer-menu-make-sort-button): + Deleted. + (list-buffers--refresh): New function. + (list-buffers-noselect): Use it. + (tabulated-list-entry-size->, Buffer-menu--pretty-name) + (Buffer-menu--pretty-file-name): New helper functions. + + * loadup.el: Preload tabulated-list. + + * emacs-lisp/tabulated-list.el (tabulated-list-sort): Rename from + tabulated-list-sort-column. + (tabulated-list-init-header): Add the initial aligning space even + if tabulated-list-padding is zero. + 2012-05-06 Christopher Schmidt * emacs-lisp/cl-macs.el (cl-expr-contains): Handle cons cells diff --git a/lisp/buff-menu.el b/lisp/buff-menu.el index 105ee50958e..e28c2c0f60b 100644 --- a/lisp/buff-menu.el +++ b/lisp/buff-menu.el @@ -1,4 +1,4 @@ -;;; buff-menu.el --- buffer menu main function and support functions -*- coding:utf-8 -*- +;;; buff-menu.el --- Interface for viewing and manipulating buffers ;; Copyright (C) 1985-1987, 1993-1995, 2000-2012 ;; Free Software Foundation, Inc. @@ -24,44 +24,13 @@ ;;; Commentary: -;; Edit, delete, or change attributes of all currently active Emacs -;; buffers from a list summarizing their state. A good way to browse -;; any special or scratch buffers you have loaded, since you can't find -;; them by filename. The single entry point is `list-buffers', -;; normally bound to C-x C-b. - -;;; Change Log: - -;; Buffer-menu-view: New function -;; Buffer-menu-view-other-window: New function - -;; Merged by esr with recent mods to Emacs 19 buff-menu, 23 Mar 1993 -;; -;; Modified by Bob Weiner, Motorola, Inc., 4/14/89 -;; -;; Added optional backup argument to 'Buffer-menu-unmark' to make it undelete -;; current entry and then move to previous one. -;; -;; Based on FSF code dating back to 1985. +;; The Buffer Menu is used to view, edit, delete, or change attributes +;; of buffers. The entry points are C-x C-b (`list-buffers') and +;; M-x buffer-menu. ;;; Code: -;;Trying to preserve the old window configuration works well in -;;simple scenarios, when you enter the buffer menu, use it, and exit it. -;;But it does strange things when you switch back to the buffer list buffer -;;with C-x b, later on, when the window configuration is different. -;;The choice seems to be, either restore the window configuration -;;in all cases, or in no cases. -;;I decided it was better not to restore the window config at all. -- rms. - -;;But since then, I changed buffer-menu to use the selected window, -;;so q now once again goes back to the previous window configuration. - -;;(defvar Buffer-menu-window-config nil -;; "Window configuration saved from entry to `buffer-menu'.") - -;; Put buffer *Buffer List* into proper mode right away -;; so that from now on even list-buffers is enough to get a buffer menu. +(require 'tabulated-list) (defgroup Buffer-menu nil "Show a menu of all buffers in a buffer." @@ -69,23 +38,41 @@ :group 'convenience) (defcustom Buffer-menu-use-header-line t - "Non-nil means to use an immovable header-line." + "If non-nil, use the header line to display Buffer Menu column titles." :type 'boolean :group 'Buffer-menu) (defface buffer-menu-buffer '((t (:weight bold))) - "Face used to highlight buffer names in the buffer menu." + "Face for buffer names in the Buffer Menu." :group 'Buffer-menu) (put 'Buffer-menu-buffer 'face-alias 'buffer-menu-buffer) -(defcustom Buffer-menu-buffer+size-width 26 - "How wide to jointly make the buffer name and size columns." +(defcustom Buffer-menu-buffer+size-width nil + "Combined width of buffer name and size columns in Buffer Menu. +If nil, use `Buffer-menu-name-width' and `Buffer-menu-size-width'." :type 'number - :group 'Buffer-menu) + :group 'Buffer-menu + :version "24.2") + +(make-obsolete-variable 'Buffer-menu-buffer+size-width + "`Buffer-menu-name-width' and `Buffer-menu-size-width'" + "24.2") + +(defcustom Buffer-menu-name-width 19 + "Width of buffer size column in the Buffer Menu." + :type 'number + :group 'Buffer-menu + :version "24.2") + +(defcustom Buffer-menu-size-width 7 + "Width of buffer name column in the Buffer Menu." + :type 'number + :group 'Buffer-menu + :version "24.2") (defcustom Buffer-menu-mode-width 16 - "How wide to make the mode name column." + "Width of mode name column in the Buffer Menu." :type 'number :group 'Buffer-menu) @@ -99,35 +86,19 @@ as it is by default." :group 'Buffer-menu :version "22.1") -;; This should get updated & resorted when you click on a column heading -(defvar Buffer-menu-sort-column nil - "Which column to sort the menu on. -Use 2 to sort by buffer names, or 5 to sort by file names. -A nil value means sort by visited order (the default).") - -(defconst Buffer-menu-buffer-column 4) - (defvar Buffer-menu-files-only nil - "Non-nil if the current buffer-menu lists only file buffers. -This variable determines whether reverting the buffer lists only -file buffers. It affects both manual reverting and reverting by -Auto Revert Mode.") + "Non-nil if the current Buffer Menu lists only file buffers. +This is set by the prefix argument to `buffer-menu' and related +commands.") (make-variable-buffer-local 'Buffer-menu-files-only) -(defvar Buffer-menu--buffers nil - "If non-nil, list of buffers shown in the current buffer-menu. -This variable determines whether reverting the buffer lists only -these buffers. It affects both manual reverting and reverting by -Auto Revert Mode.") -(make-variable-buffer-local 'Buffer-menu--buffers) - -(defvar Info-current-file) ;; from info.el -(defvar Info-current-node) ;; from info.el +(defvar Info-current-file) ; from info.el +(defvar Info-current-node) ; from info.el (defvar Buffer-menu-mode-map - (let ((map (make-keymap)) + (let ((map (make-sparse-keymap)) (menu-map (make-sparse-keymap))) - (suppress-keymap map t) + (set-keymap-parent map tabulated-list-mode-map) (define-key map "v" 'Buffer-menu-select) (define-key map "2" 'Buffer-menu-2-window) (define-key map "1" 'Buffer-menu-1-window) @@ -139,12 +110,10 @@ Auto Revert Mode.") (define-key map "s" 'Buffer-menu-save) (define-key map "d" 'Buffer-menu-delete) (define-key map "k" 'Buffer-menu-delete) - (define-key map "\C-d" 'Buffer-menu-delete-backwards) (define-key map "\C-k" 'Buffer-menu-delete) + (define-key map "\C-d" 'Buffer-menu-delete-backwards) (define-key map "x" 'Buffer-menu-execute) (define-key map " " 'next-line) - (define-key map "n" 'next-line) - (define-key map "p" 'previous-line) (define-key map "\177" 'Buffer-menu-backup-unmark) (define-key map "~" 'Buffer-menu-not-modified) (define-key map "u" 'Buffer-menu-unmark) @@ -154,10 +123,9 @@ Auto Revert Mode.") (define-key map "b" 'Buffer-menu-bury) (define-key map "V" 'Buffer-menu-view) (define-key map "T" 'Buffer-menu-toggle-files-only) - (define-key map [mouse-2] 'Buffer-menu-mouse-select) - (define-key map [follow-link] 'mouse-face) (define-key map (kbd "M-s a C-s") 'Buffer-menu-isearch-buffers) (define-key map (kbd "M-s a M-C-s") 'Buffer-menu-isearch-buffers-regexp) + (define-key map [menu-bar Buffer-menu-mode] (cons (purecopy "Buffer-Menu") menu-map)) (define-key menu-map [quit] `(menu-item ,(purecopy "Quit") quit-window @@ -224,143 +192,123 @@ Auto Revert Mode.") map) "Local keymap for `Buffer-menu-mode' buffers.") -;; Buffer Menu mode is suitable only for specially formatted data. -(put 'Buffer-menu-mode 'mode-class 'special) - -(define-derived-mode Buffer-menu-mode special-mode "Buffer Menu" - "Major mode for editing a list of buffers. -Each line describes one of the buffers in Emacs. -Letters do not insert themselves; instead, they are commands. -\\ -\\[Buffer-menu-mouse-select] -- select buffer you click on, in place of the buffer menu. -\\[Buffer-menu-this-window] -- select current line's buffer in place of the buffer menu. -\\[Buffer-menu-other-window] -- select that buffer in another window, - so the buffer menu buffer remains visible in its window. -\\[Buffer-menu-view] -- select current line's buffer, but in view-mode. -\\[Buffer-menu-view-other-window] -- select that buffer in - another window, in view-mode. -\\[Buffer-menu-switch-other-window] -- make another window display that buffer. -\\[Buffer-menu-mark] -- mark current line's buffer to be displayed. -\\[Buffer-menu-select] -- select current line's buffer. - Also show buffers marked with m, in other windows. -\\[Buffer-menu-1-window] -- select that buffer in full-frame window. -\\[Buffer-menu-2-window] -- select that buffer in one window, - together with buffer selected before this one in another window. -\\[Buffer-menu-isearch-buffers] -- Do incremental search in the marked buffers. -\\[Buffer-menu-isearch-buffers-regexp] -- Isearch for regexp in the marked buffers. -\\[Buffer-menu-visit-tags-table] -- visit-tags-table this buffer. -\\[Buffer-menu-not-modified] -- clear modified-flag on that buffer. -\\[Buffer-menu-save] -- mark that buffer to be saved, and move down. -\\[Buffer-menu-delete] -- mark that buffer to be deleted, and move down. -\\[Buffer-menu-delete-backwards] -- mark that buffer to be deleted, and move up. -\\[Buffer-menu-execute] -- delete or save marked buffers. -\\[Buffer-menu-unmark] -- remove all kinds of marks from current line. - With prefix argument, also move up one line. -\\[Buffer-menu-backup-unmark] -- back up a line and remove marks. -\\[Buffer-menu-toggle-read-only] -- toggle read-only status of buffer on this line. -\\[revert-buffer] -- update the list of buffers. -\\[Buffer-menu-toggle-files-only] -- toggle whether the menu displays only file buffers. -\\[Buffer-menu-bury] -- bury the buffer listed on this line." - (set (make-local-variable 'revert-buffer-function) - 'Buffer-menu-revert-function) +(define-derived-mode Buffer-menu-mode tabulated-list-mode "Buffer Menu" + "Major mode for Buffer Menu buffers. +The Buffer Menu is invoked by the commands \\[list-buffers], \\[buffer-menu], and +\\[buffer-menu-other-window]. See `buffer-menu' for details." (set (make-local-variable 'buffer-stale-function) (lambda (&optional _noconfirm) 'fast)) - (setq truncate-lines t) - (setq buffer-read-only t) - ;; Force L2R direction, to avoid messing the display if the first - ;; buffer in the list happens to begin with a strong R2L character. - (setq bidi-paragraph-direction 'left-to-right)) + (add-hook 'tabulated-list-revert-hook 'list-buffers--refresh nil t)) (define-obsolete-variable-alias 'buffer-menu-mode-hook 'Buffer-menu-mode-hook "23.1") -(defun Buffer-menu-revert-function (_ignore1 _ignore2) - (or (eq buffer-undo-list t) - (setq buffer-undo-list nil)) - ;; We can not use save-excursion here. The buffer gets erased. - (let ((opoint (point)) - (eobp (eobp)) - (ocol (current-column)) - (oline (progn (move-to-column Buffer-menu-buffer-column) - (get-text-property (point) 'buffer))) - (prop (point-min)) - ;; do not make undo records for the reversion. - (buffer-undo-list t)) - ;; We can be called by Auto Revert Mode with the "*Buffer Menu*" - ;; temporarily the current buffer. Make sure that the - ;; interactively current buffer is correctly identified with a `.' - ;; by `list-buffers-noselect'. - (with-current-buffer (window-buffer) - (list-buffers-noselect Buffer-menu-files-only Buffer-menu--buffers)) - (if oline - (while (setq prop (next-single-property-change prop 'buffer)) - (when (eq (get-text-property prop 'buffer) oline) - (goto-char prop) - (move-to-column ocol))) - (goto-char (if eobp (point-max) opoint))))) - -(defun Buffer-menu-toggle-files-only (arg) - "Toggle whether the current buffer-menu displays only file buffers. -With a positive ARG display only file buffers. With zero or -negative ARG, display other buffers as well." - (interactive "P") - (setq Buffer-menu-files-only - (cond ((not arg) (not Buffer-menu-files-only)) - ((> (prefix-numeric-value arg) 0) t))) - (revert-buffer)) - - -(defun Buffer-menu-buffer (error-if-non-existent-p) - "Return buffer described by this line of buffer menu." - (let* ((where (+ (line-beginning-position) Buffer-menu-buffer-column)) - (name (and (not (eobp)) (get-text-property where 'buffer-name))) - (buf (and (not (eobp)) (get-text-property where 'buffer)))) - (if name - (or (get-buffer name) - (and buf (buffer-name buf) buf) - (if error-if-non-existent-p - (error "No buffer named `%s'" name) - nil)) - (or (and buf (buffer-name buf) buf) - (if error-if-non-existent-p - (error "No buffer on this line") - nil))))) - (defun buffer-menu (&optional arg) - "Make a menu of buffers so you can save, delete or select them. -With argument, show only buffers that are visiting files. -Type ? after invocation to get help on commands available. -Type q to remove the buffer menu from the display. + "Switch to the Buffer Menu. +By default, all buffers are listed except those whose names start +with a space (which are for internal use). With prefix argument +ARG, show only buffers that are visiting files. -The first column shows `>' for a buffer you have -marked to be displayed, `D' for one you have marked for -deletion, and `.' for the current buffer. +The first column (denoted \"C\") shows \".\" for the buffer from +which you came. It shows \">\" for buffers you mark to be +displayed, and \"D\" for those you mark for deletion. -The C column has a `.' for the buffer from which you came. -The R column has a `%' if the buffer is read-only. -The M column has a `*' if it is modified, -or `S' if you have marked it for saving. -After this come the buffer name, its size in characters, -its major mode, and the visited file name (if any)." +The \"R\" column has a \"%\" if the buffer is read-only. +The \"M\" column has a \"*\" if it is modified, or \"S\" if you +have marked it for saving. + +After this come the buffer name, its size in characters, its +major mode, and the visited file name (if any). + + +In the Buffer Menu, the following commands are defined: +\\ +\\[quit-window] Remove the Buffer Menu from the display. +\\[Buffer-menu-this-window] Select current line's buffer in place of the buffer menu. +\\[Buffer-menu-other-window] Select that buffer in another window, + so the Buffer Menu remains visible in its window. +\\[Buffer-menu-view] Select current line's buffer, in View mode. +\\[Buffer-menu-view-other-window] Select that buffer in + another window, in view-mode. +\\[Buffer-menu-switch-other-window] Make another window display that buffer. +\\[Buffer-menu-mark] Mark current line's buffer to be displayed. +\\[Buffer-menu-select] Select current line's buffer. + Also show buffers marked with m, in other windows. +\\[Buffer-menu-1-window] Select that buffer in full-frame window. +\\[Buffer-menu-2-window] Select that buffer in one window, together with the + buffer selected before this one in another window. +\\[Buffer-menu-isearch-buffers] Incremental search in the marked buffers. +\\[Buffer-menu-isearch-buffers-regexp] Isearch for regexp in the marked buffers. +\\[Buffer-menu-visit-tags-table] visit-tags-table this buffer. +\\[Buffer-menu-not-modified] Clear modified-flag on that buffer. +\\[Buffer-menu-save] Mark that buffer to be saved, and move down. +\\[Buffer-menu-delete] Mark that buffer to be deleted, and move down. +\\[Buffer-menu-delete-backwards] Mark that buffer to be deleted, and move up. +\\[Buffer-menu-execute] Delete or save marked buffers. +\\[Buffer-menu-unmark] Remove all marks from current line. + With prefix argument, also move up one line. +\\[Buffer-menu-backup-unmark] Back up a line and remove marks. +\\[Buffer-menu-toggle-read-only] Toggle read-only status of buffer on this line. +\\[revert-buffer] Update the list of buffers. +\\[Buffer-menu-toggle-files-only] Toggle whether the menu displays only file buffers. +\\[Buffer-menu-bury] Bury the buffer listed on this line." (interactive "P") -;;; (setq Buffer-menu-window-config (current-window-configuration)) (switch-to-buffer (list-buffers-noselect arg)) (message "Commands: d, s, x, u; f, o, 1, 2, m, v; ~, %%; q to quit; ? for help.")) (defun buffer-menu-other-window (&optional arg) - "Display a list of buffers in another window. -With the buffer list buffer, you can save, delete or select the buffers. -With argument, show only buffers that are visiting files. -Type ? after invocation to get help on commands available. -Type q to remove the buffer menu from the display. -For more information, see the function `buffer-menu'." + "Display the Buffer Menu in another window. +See `buffer-menu' for a description of the Buffer Menu. + +By default, all buffers are listed except those whose names start +with a space (which are for internal use). With prefix argument +ARG, show only buffers that are visiting files." (interactive "P") -;;; (setq Buffer-menu-window-config (current-window-configuration)) (switch-to-buffer-other-window (list-buffers-noselect arg)) (message "Commands: d, s, x, u; f, o, 1, 2, m, v; ~, %%; q to quit; ? for help.")) +(defun list-buffers (&optional arg) + "Display a list of existing buffers. +The list is displayed in a buffer named \"*Buffer List*\". +See `buffer-menu' for details about the Buffer Menu buffer. + +By default, all buffers are listed except those whose names start +with a space (which are for internal use). With prefix argument +ARG, show only buffers that are visiting files." + (interactive "P") + (display-buffer (list-buffers-noselect arg))) + +(defun Buffer-menu-toggle-files-only (arg) + "Toggle whether the current buffer-menu displays only file buffers. +With a positive ARG, display only file buffers. With zero or +negative ARG, display other buffers as well." + (interactive "P") + (setq Buffer-menu-files-only + (cond ((not arg) (not Buffer-menu-files-only)) + ((> (prefix-numeric-value arg) 0) t))) + (message (if Buffer-menu-files-only + "Showing only file-visiting buffers." + "Showing all non-internal buffers.")) + (revert-buffer)) + +(defalias 'Buffer-menu-sort 'tabulated-list-sort) + + +(defun Buffer-menu-buffer (&optional error-if-non-existent-p) + "Return the buffer described by the current Buffer Menu line. +If there is no buffer here, return nil if ERROR-IF-NON-EXISTENT-P +is nil or omitted, and signal an error otherwise." + (let ((buffer (tabulated-list-get-id))) + (cond ((null buffer) + (if error-if-non-existent-p + (error "No buffer on this line"))) + ((not (buffer-live-p buffer)) + (if error-if-non-existent-p + (error "This buffer has been killed"))) + (t buffer)))) + (defun Buffer-menu-no-header () (beginning-of-line) (if (or Buffer-menu-use-header-line @@ -370,166 +318,140 @@ For more information, see the function `buffer-menu'." (forward-line 1) nil)) +(defun Buffer-menu-beginning () + (goto-char (point-min)) + (unless Buffer-menu-use-header-line + (forward-line))) + + +;;; Commands for modifying Buffer Menu entries. + (defun Buffer-menu-mark () - "Mark buffer on this line for being displayed by \\\\[Buffer-menu-select] command." + "Mark the Buffer menu entry at point for later display. +It will be displayed by the \\\\[Buffer-menu-select] command." (interactive) - (when (Buffer-menu-no-header) - (let ((inhibit-read-only t)) - (delete-char 1) - (insert ?>) - (forward-line 1)))) + (tabulated-list-set-col 0 ">" t) + (forward-line)) (defun Buffer-menu-unmark (&optional backup) "Cancel all requested operations on buffer on this line and move down. Optional prefix arg means move up." (interactive "P") - (when (Buffer-menu-no-header) - (let* ((buf (Buffer-menu-buffer t)) - (mod (buffer-modified-p buf)) - (readonly (with-current-buffer buf buffer-read-only)) - (inhibit-read-only t)) - (delete-char 3) - (insert (if readonly (if mod " %*" " % ") (if mod " *" " "))))) + (tabulated-list-set-col 0 " " t) (forward-line (if backup -1 1))) (defun Buffer-menu-backup-unmark () "Move up and cancel all requested operations on buffer on line above." (interactive) (forward-line -1) - (Buffer-menu-unmark) - (forward-line -1)) + (tabulated-list-set-col 0 " " t)) (defun Buffer-menu-delete (&optional arg) - "Mark buffer on this line to be deleted by \\\\[Buffer-menu-execute] command. -Prefix arg is how many buffers to delete. -Negative arg means delete backwards." + "Mark the buffer on this Buffer Menu buffer line for deletion. +A subsequent \\`\\[Buffer-menu-execute]' command +will delete it. + +If prefix argument ARG is non-nil, it specifies the number of +buffers to delete; a negative ARG means to delete backwards." (interactive "p") - (when (Buffer-menu-no-header) - (let ((inhibit-read-only t)) - (if (or (null arg) (= arg 0)) - (setq arg 1)) - (while (> arg 0) - (delete-char 1) - (insert ?D) - (forward-line 1) - (setq arg (1- arg))) - (while (and (< arg 0) - (Buffer-menu-no-header)) - (delete-char 1) - (insert ?D) - (forward-line -1) - (setq arg (1+ arg)))))) + (if (or (null arg) (= arg 0)) + (setq arg 1)) + (while (> arg 0) + (when (Buffer-menu-buffer) + (tabulated-list-set-col 0 "D" t)) + (forward-line 1) + (setq arg (1- arg))) + (while (< arg 0) + (when (Buffer-menu-buffer) + (tabulated-list-set-col 0 "D" t)) + (forward-line -1) + (setq arg (1+ arg)))) (defun Buffer-menu-delete-backwards (&optional arg) - "Mark buffer on this line to be deleted by \\\\[Buffer-menu-execute] command -and then move up one line. Prefix arg means move that many lines." + "Mark the buffer on this Buffer Menu line for deletion, and move up. +Prefix ARG means move that many lines." (interactive "p") (Buffer-menu-delete (- (or arg 1)))) (defun Buffer-menu-save () - "Mark buffer on this line to be saved by \\\\[Buffer-menu-execute] command." + "Mark the buffer on this Buffer Menu line for saving. +A subsequent \\`\\[Buffer-menu-execute]' command +will save it." (interactive) - (when (Buffer-menu-no-header) - (let ((inhibit-read-only t)) - (forward-char 2) - (delete-char 1) - (insert ?S) - (forward-line 1)))) + (when (Buffer-menu-buffer) + (tabulated-list-set-col 2 "S" t) + (forward-line 1))) (defun Buffer-menu-not-modified (&optional arg) - "Mark buffer on this line as unmodified (no changes to save)." + "Mark the buffer on this line as unmodified (no changes to save). +If ARG is non-nil (interactively, with a prefix argument), mark +it as modified." (interactive "P") (with-current-buffer (Buffer-menu-buffer t) (set-buffer-modified-p arg)) - (save-excursion - (beginning-of-line) - (forward-char 2) - (if (= (char-after) (if arg ?\s ?*)) - (let ((inhibit-read-only t)) - (delete-char 1) - (insert (if arg ?* ?\s)))))) - -(defun Buffer-menu-beginning () - (goto-char (point-min)) - (unless Buffer-menu-use-header-line - (forward-line))) + (tabulated-list-set-col 2 (if arg "*" " ") t)) (defun Buffer-menu-execute () - "Save and/or delete buffers marked with \\\\[Buffer-menu-save] or \\\\[Buffer-menu-delete] commands." + "Save and/or delete marked buffers in the Buffer Menu. +Buffers marked with \\`\\[Buffer-menu-save]' are saved. +Buffers marked with \\`\\[Buffer-menu-delete]' are deleted." (interactive) (save-excursion (Buffer-menu-beginning) - (while (re-search-forward "^..S" nil t) - (let ((modp nil)) - (with-current-buffer (Buffer-menu-buffer t) - (save-buffer) - (setq modp (buffer-modified-p))) - (let ((inhibit-read-only t)) - (delete-char -1) - (insert (if modp ?* ?\s)))))) - (save-excursion - (Buffer-menu-beginning) - (let ((buff-menu-buffer (current-buffer)) - (inhibit-read-only t)) - (while (re-search-forward "^D" nil t) - (forward-char -1) - (let ((buf (Buffer-menu-buffer nil))) - (or (eq buf nil) - (eq buf buff-menu-buffer) - (save-excursion (kill-buffer buf))) - (if (and buf (buffer-name buf)) - (progn (delete-char 1) - (insert ?\s)) - (delete-region (point) (progn (forward-line 1) (point))) - (unless (bobp) - (forward-char -1)))))))) + (while (not (eobp)) + (let ((buffer (tabulated-list-get-id)) + (entry (tabulated-list-get-entry))) + (cond ((null entry) + (forward-line 1)) + ((not (buffer-live-p buffer)) + (tabulated-list-delete-entry)) + (t + (let ((delete (eq (char-after) ?D))) + (when (equal (aref entry 2) "S") + (condition-case nil + (progn + (with-current-buffer buffer + (save-buffer)) + (tabulated-list-set-col 2 " " t)) + (error (warn "Error saving %s" buffer)))) + (if delete + (unless (eq buffer (current-buffer)) + (kill-buffer buffer) + (tabulated-list-delete-entry)) + (forward-line 1))))))))) (defun Buffer-menu-select () - "Select this line's buffer; also display buffers marked with `>'. -You can mark buffers with the \\\\[Buffer-menu-mark] command. + "Select this line's buffer; also, display buffers marked with `>'. +You can mark buffers with the \\`\\[Buffer-menu-mark]' command. This command deletes and replaces all the previously existing windows in the selected frame." (interactive) - (let ((buff (Buffer-menu-buffer t)) - (menu (current-buffer)) - (others ()) - tem) - (Buffer-menu-beginning) - (while (re-search-forward "^>" nil t) - (setq tem (Buffer-menu-buffer t)) - (let ((inhibit-read-only t)) - (delete-char -1) - (insert ?\s)) - (or (eq tem buff) (memq tem others) (setq others (cons tem others)))) - (setq others (nreverse others) - tem (/ (1- (frame-height)) (1+ (length others)))) + (let* ((this-buffer (Buffer-menu-buffer t)) + (menu-buffer (current-buffer)) + (others (delq this-buffer (Buffer-menu-marked-buffers t))) + (height (/ (1- (frame-height)) (1+ (length others))))) (delete-other-windows) - (switch-to-buffer buff) - (or (eq menu buff) - (bury-buffer menu)) - (if (equal (length others) 0) - (progn -;;; ;; Restore previous window configuration before displaying -;;; ;; selected buffers. -;;; (if Buffer-menu-window-config -;;; (progn -;;; (set-window-configuration Buffer-menu-window-config) -;;; (setq Buffer-menu-window-config nil))) - (switch-to-buffer buff)) - (while others - (split-window nil tem) - (other-window 1) - (switch-to-buffer (car others)) - (setq others (cdr others))) - (other-window 1) ;back to the beginning! -))) + (switch-to-buffer this-buffer) + (unless (eq menu-buffer this-buffer) + (bury-buffer menu-buffer)) + (dolist (buffer others) + (split-window nil height) + (other-window 1) + (switch-to-buffer buffer)) + ;; Back to the beginning! + (other-window 1))) -(defun Buffer-menu-marked-buffers () - "Return a list of buffers marked with the \\\\[Buffer-menu-mark] command." +(defun Buffer-menu-marked-buffers (&optional unmark) + "Return the list of buffers marked with `Buffer-menu-mark'. +If UNMARK is non-nil, unmark them." (let (buffers) (Buffer-menu-beginning) (while (re-search-forward "^>" nil t) - (setq buffers (cons (Buffer-menu-buffer t) buffers))) + (let ((buffer (Buffer-menu-buffer))) + (if (and buffer unmark) + (tabulated-list-set-col 0 " " t)) + (if (buffer-live-p buffer) + (push buffer buffers)))) (nreverse buffers))) (defun Buffer-menu-isearch-buffers () @@ -558,20 +480,6 @@ in the selected frame." (bury-buffer (other-buffer)) (delete-other-windows)) -(defun Buffer-menu-mouse-select (event) - "Select the buffer whose line you click on." - (interactive "e") - (let (buffer) - (with-current-buffer (window-buffer (posn-window (event-end event))) - (save-excursion - (goto-char (posn-point (event-end event))) - (setq buffer (Buffer-menu-buffer t)))) - (select-window (posn-window (event-end event))) - (if (and (window-dedicated-p (selected-window)) - (eq (selected-window) (frame-root-window))) - (switch-to-buffer-other-frame buffer) - (switch-to-buffer buffer)))) - (defun Buffer-menu-this-window () "Select this line's buffer in this window." (interactive) @@ -599,340 +507,128 @@ The current window remains selected." (bury-buffer menu))) (defun Buffer-menu-toggle-read-only () - "Toggle read-only status of buffer on this line, perhaps via version control." + "Toggle read-only status of buffer on this line." (interactive) - (let (char) + (let (read-only) (with-current-buffer (Buffer-menu-buffer t) - (toggle-read-only) - (setq char (if buffer-read-only ?% ?\s))) - (save-excursion - (beginning-of-line) - (forward-char 1) - (if (/= (following-char) char) - (let ((inhibit-read-only t)) - (delete-char 1) - (insert char)))))) + (with-no-warnings (toggle-read-only)) + (setq read-only buffer-read-only)) + (tabulated-list-set-col 1 (if read-only "%" " ") t))) (defun Buffer-menu-bury () "Bury the buffer listed on this line." (interactive) - (when (Buffer-menu-no-header) - (save-excursion - (beginning-of-line) - (bury-buffer (Buffer-menu-buffer t)) - (let ((line (buffer-substring (point) (progn (forward-line 1) (point)))) - (inhibit-read-only t)) - (delete-region (point) (progn (forward-line -1) (point))) - (goto-char (point-max)) - (insert line)) - (message "Buried buffer moved to the end")))) - + (let ((buffer (tabulated-list-get-id))) + (cond ((null buffer)) + ((buffer-live-p buffer) + (bury-buffer buffer) + (save-excursion + (let ((elt (tabulated-list-delete-entry))) + (goto-char (point-max)) + (apply 'tabulated-list-print-entry elt))) + (message "Buffer buried.")) + (t + (tabulated-list-delete-entry) + (message "Buffer is dead; removing from list."))))) (defun Buffer-menu-view () "View this line's buffer in View mode." (interactive) (view-buffer (Buffer-menu-buffer t))) - (defun Buffer-menu-view-other-window () "View this line's buffer in View mode in another window." (interactive) (view-buffer-other-window (Buffer-menu-buffer t))) - -;;;###autoload -(defun list-buffers (&optional files-only) - "Display a list of names of existing buffers. -The list is displayed in a buffer named `*Buffer List*'. -Note that buffers with names starting with spaces are omitted. -Non-null optional arg FILES-ONLY means mention only file buffers. - -For more information, see the function `buffer-menu'." - (interactive "P") - (display-buffer (list-buffers-noselect files-only))) - -(defconst Buffer-menu-short-ellipsis - ;; This file is preloaded, so we can't use char-displayable-p here - ;; because we don't know yet what display we're going to connect to. - ":" ;; (if (char-displayable-p ?…) "…" ":") - ) - -(defun Buffer-menu-buffer+size (name size &optional name-props size-props) - (if (> (+ (string-width name) (string-width size) 2) - Buffer-menu-buffer+size-width) - (setq name - (let ((tail - (if (string-match "<[0-9]+>$" name) - (match-string 0 name) - ""))) - (concat (truncate-string-to-width - name - (- Buffer-menu-buffer+size-width - (max (string-width size) 3) - (string-width tail) - 2)) - Buffer-menu-short-ellipsis - tail))) - ;; Don't put properties on (buffer-name). - (setq name (copy-sequence name))) - (add-text-properties 0 (length name) name-props name) - (add-text-properties 0 (length size) size-props size) - (let ((name+space-width (- Buffer-menu-buffer+size-width - (string-width size)))) - (concat name - (propertize (make-string (- name+space-width (string-width name)) - ?\s) - 'display `(space :align-to - ,(+ Buffer-menu-buffer-column - name+space-width))) - size))) - -(defun Buffer-menu-sort (column) - "Sort the buffer menu by COLUMN." - (interactive "P") - (when column - (setq column (prefix-numeric-value column)) - (if (< column 2) (setq column 2)) - (if (> column 5) (setq column 5))) - (setq Buffer-menu-sort-column column) - (let ((inhibit-read-only t) l buf m1 m2) - (save-excursion - (Buffer-menu-beginning) - (while (not (eobp)) - (when (buffer-live-p - (setq buf (get-text-property - (+ (point) - Buffer-menu-buffer-column) - 'buffer))) - (setq m1 (char-after) - m1 (if (memq m1 '(?> ?D)) m1) - m2 (char-after (+ (point) 2)) - m2 (if (eq m2 ?S) m2)) - (if (or m1 m2) - (push (list buf m1 m2) l))) - (forward-line))) - (revert-buffer) - (save-excursion - (Buffer-menu-beginning) - (while (not (eobp)) - (when (setq buf (assq (get-text-property (+ (point) - Buffer-menu-buffer-column) - 'buffer) l)) - (setq m1 (cadr buf) - m2 (cadr (cdr buf))) - (when m1 - (delete-char 1) - (insert m1) - (backward-char 1)) - (when m2 - (forward-char 2) - (delete-char 1) - (insert m2))) - (forward-line))))) - -(defun Buffer-menu-sort-by-column (&optional e) - "Sort the buffer menu by the column clicked on." - (interactive (list last-input-event)) - (if e (mouse-select-window e)) - (let* ((pos (event-start e)) - (obj (posn-object pos)) - (col (if obj - (get-text-property (cdr obj) 'column (car obj)) - (get-text-property (posn-point pos) 'column)))) - (Buffer-menu-sort col))) - -(defvar Buffer-menu-sort-button-map - (let ((map (make-sparse-keymap))) - ;; This keymap handles both nil and non-nil values for - ;; Buffer-menu-use-header-line. - (define-key map [header-line mouse-1] 'Buffer-menu-sort-by-column) - (define-key map [header-line mouse-2] 'Buffer-menu-sort-by-column) - (define-key map [mouse-2] 'Buffer-menu-sort-by-column) - (define-key map [follow-link] 'mouse-face) - (define-key map "\C-m" 'Buffer-menu-sort-by-column) - map) - "Local keymap for Buffer menu sort buttons.") - -(defun Buffer-menu-make-sort-button (name column) - (if (equal column Buffer-menu-sort-column) (setq column nil)) - (propertize name - 'column column - 'help-echo (concat - (if Buffer-menu-use-header-line - "mouse-1, mouse-2: sort by " - "mouse-2, RET: sort by ") - (if column (downcase name) "visited order")) - 'mouse-face 'highlight - 'keymap Buffer-menu-sort-button-map)) +;;; Functions for populating the Buffer Menu. (defun list-buffers-noselect (&optional files-only buffer-list) - "Create and return a buffer with a list of names of existing buffers. -The buffer is named `*Buffer List*'. -Note that buffers with names starting with spaces are omitted. -Non-null optional arg FILES-ONLY means mention only file buffers. + "Create and return a Buffer Menu buffer. +This is called by `buffer-menu' and others as a subroutine. -If BUFFER-LIST is non-nil, it should be a list of buffers; -it means list those buffers and no others. - -For more information, see the function `buffer-menu'." - (let* ((old-buffer (current-buffer)) - (standard-output standard-output) - (mode-end (make-string (- Buffer-menu-mode-width 2) ?\s)) - (header (concat "CRM " - (Buffer-menu-buffer+size - (Buffer-menu-make-sort-button "Buffer" 2) - (Buffer-menu-make-sort-button "Size" 3)) - " " - (Buffer-menu-make-sort-button "Mode" 4) mode-end - (Buffer-menu-make-sort-button "File" 5) "\n")) - list desired-point) - (when Buffer-menu-use-header-line - (let ((pos 0)) - ;; Turn whitespace chars in the header into stretch specs so - ;; they work regardless of the header-line face. - (while (string-match "[ \t\n]+" header pos) - (setq pos (match-end 0)) - (put-text-property (match-beginning 0) pos 'display - ;; Assume fixed-size chars in the buffer. - (list 'space :align-to pos) - header))) - ;; Try to better align the one-char headers. - (put-text-property 0 3 'face 'fixed-pitch header) - ;; Add a "dummy" leading space to align the beginning of the header - ;; line with the beginning of the text (rather than with the left - ;; scrollbar or the left fringe). --Stef - (setq header (concat (propertize " " 'display '(space :align-to 0)) - header))) - (with-current-buffer (get-buffer-create "*Buffer List*") - (setq buffer-read-only nil) - (erase-buffer) - (setq standard-output (current-buffer)) - ;; Force L2R direction, to avoid messing the display if the - ;; first buffer in the list happens to begin with a strong R2L - ;; character. - (setq bidi-paragraph-direction 'left-to-right) - (unless Buffer-menu-use-header-line - ;; Use U+2014 (EM DASH) to underline if possible, else use ASCII - ;; (i.e. U+002D, HYPHEN-MINUS). - (let ((underline (if (char-displayable-p ?\u2014) ?\u2014 ?-))) - (insert header - (apply 'string - (mapcar (lambda (c) - (if (memq c '(?\n ?\s)) c underline)) - header))))) - ;; Collect info for every buffer we're interested in. - (dolist (buffer (or buffer-list - (buffer-list - (when Buffer-menu-use-frame-buffer-list - (selected-frame))))) - (with-current-buffer buffer - (let ((name (buffer-name)) - (file buffer-file-name)) - (unless (and (not buffer-list) - (or - ;; Don't mention internal buffers. - (and (string= (substring name 0 1) " ") (null file)) - ;; Maybe don't mention buffers without files. - (and files-only (not file)) - (string= name "*Buffer List*"))) - ;; Otherwise output info. - (let ((mode (concat (format-mode-line mode-name nil nil buffer) - (if mode-line-process - (format-mode-line mode-line-process - nil nil buffer)))) - (bits (string - (if (eq buffer old-buffer) ?. ?\s) - ;; Handle readonly status. The output buffer - ;; is special cased to appear readonly; it is - ;; actually made so at a later date. - (if (or (eq buffer standard-output) - buffer-read-only) - ?% ?\s) - ;; Identify modified buffers. - (if (buffer-modified-p) ?* ?\s) - ;; Space separator. - ?\s))) - (unless file - ;; No visited file. Check local value of - ;; list-buffers-directory and, for Info buffers, - ;; Info-current-file. - (cond ((and (boundp 'list-buffers-directory) - list-buffers-directory) - (setq file list-buffers-directory)) - ((eq major-mode 'Info-mode) - (setq file Info-current-file) - (cond - ((equal file "dir") - (setq file "*Info Directory*")) - ((eq file 'apropos) - (setq file "*Info Apropos*")) - ((eq file 'history) - (setq file "*Info History*")) - ((eq file 'toc) - (setq file "*Info TOC*")) - ((not (stringp file)) ;; avoid errors - (setq file nil)) - (t - (setq file (concat "(" - (file-name-nondirectory file) - ") " - Info-current-node))))))) - (push (list buffer bits name (buffer-size) mode file) - list)))))) - ;; Preserve the original buffer-list ordering, just in case. - (setq list (nreverse list)) - ;; Place the buffers's info in the output buffer, sorted if necessary. - (dolist (buffer - (if Buffer-menu-sort-column - (sort list - (if (eq Buffer-menu-sort-column 3) - (lambda (a b) - (< (nth Buffer-menu-sort-column a) - (nth Buffer-menu-sort-column b))) - (lambda (a b) - (string< (nth Buffer-menu-sort-column a) - (nth Buffer-menu-sort-column b))))) - list)) - (if (eq (car buffer) old-buffer) - (setq desired-point (point))) - (insert (cadr buffer) - ;; Put the buffer name into a text property - ;; so we don't have to extract it from the text. - ;; This way we avoid problems with unusual buffer names. - (let ((name (nth 2 buffer)) - (size (int-to-string (nth 3 buffer)))) - (Buffer-menu-buffer+size name size - `(buffer-name ,name - buffer ,(car buffer) - font-lock-face buffer-menu-buffer - mouse-face highlight - help-echo - ,(if (>= (length name) - (- Buffer-menu-buffer+size-width - (max (length size) 3) - 2)) - name - "mouse-2: select this buffer")))) - " " - (if (> (string-width (nth 4 buffer)) Buffer-menu-mode-width) - (truncate-string-to-width (nth 4 buffer) - Buffer-menu-mode-width) - (nth 4 buffer))) - (when (nth 5 buffer) - (indent-to (+ Buffer-menu-buffer-column Buffer-menu-buffer+size-width - Buffer-menu-mode-width 4) 1) - (princ (abbreviate-file-name (nth 5 buffer)))) - (princ "\n")) +If FILES-ONLY is non-nil, show only file-visiting buffers. +If BUFFER-LIST is non-nil, it should be a list of buffers; it +means list those buffers and no others." + (let ((old-buffer (current-buffer)) + (buffer (get-buffer-create "*Buffer List*"))) + (with-current-buffer buffer (Buffer-menu-mode) - (when Buffer-menu-use-header-line - (setq header-line-format header)) - ;; DESIRED-POINT doesn't have to be set; it is not when the - ;; current buffer is not displayed for some reason. - (and desired-point - (goto-char desired-point)) - (setq Buffer-menu-files-only files-only) - (setq Buffer-menu--buffers buffer-list) - (set-buffer-modified-p nil) - (current-buffer)))) + (setq Buffer-menu-files-only (and files-only (>= files-only 0))) + (list-buffers--refresh buffer-list old-buffer) + (tabulated-list-print)) + buffer)) + +(defun list-buffers--refresh (&optional buffer-list old-buffer) + ;; Set up `tabulated-list-format'. + (let ((name-width Buffer-menu-name-width) + (size-width Buffer-menu-size-width)) + ;; Handle obsolete variable: + (if Buffer-menu-buffer+size-width + (setq name-width (- Buffer-menu-buffer+size-width size-width))) + (setq tabulated-list-format + (vector '("C" 1 t :pad-right 0) + '("R" 1 t :pad-right 0) + '("M" 1 t) + `("Buffer" ,name-width t) + `("Size" ,size-width tabulated-list-entry-size->) + `("Mode" ,Buffer-menu-mode-width t) + '("File" 1 t)))) + ;; Collect info for each buffer we're interested in. + (let ((buffer-menu-buffer (current-buffer)) + (show-non-file (not Buffer-menu-files-only)) + entries) + (dolist (buffer (or buffer-list + (buffer-list (if Buffer-menu-use-frame-buffer-list + (selected-frame))))) + (with-current-buffer buffer + (let* ((name (buffer-name)) + (file buffer-file-name)) + (when (and (buffer-live-p buffer) + (or buffer-list + (and (not (string= (substring name 0 1) " ")) + (not (eq buffer buffer-menu-buffer)) + (or file show-non-file)))) + (push (list buffer + (vector (if (eq buffer old-buffer) "." " ") + (if buffer-read-only "%" " ") + (if (buffer-modified-p) "*" " ") + (Buffer-menu--pretty-name name) + (number-to-string (buffer-size)) + (concat (format-mode-line mode-name nil nil buffer) + (if mode-line-process + (format-mode-line mode-line-process + nil nil buffer))) + (Buffer-menu--pretty-file-name file))) + entries))))) + (setq tabulated-list-entries (nreverse entries))) + (tabulated-list-init-header)) + +(defun tabulated-list-entry-size-> (entry1 entry2) + (> (string-to-number (aref (cadr entry1) 4)) + (string-to-number (aref (cadr entry2) 4)))) + +(defun Buffer-menu--pretty-name (name) + (propertize name 'font-lock-face 'buffer-menu-buffer)) + +(defun Buffer-menu--pretty-file-name (file) + (cond (file + (abbreviate-file-name file)) + ((and (boundp 'list-buffers-directory) + list-buffers-directory) + list-buffers-directory) + ((eq major-mode 'Info-mode) + (Buffer-menu-info-node-description Info-current-file)) + (t ""))) + +(defun Buffer-menu-info-node-description (file) + (cond + ((equal file "dir") "*Info Directory*") + ((eq file 'apropos) "*Info Apropos*") + ((eq file 'history) "*Info History*") + ((eq file 'toc) "*Info TOC*") + ((not (stringp file)) "") ; Avoid errors + (t + (concat "(" (file-name-nondirectory file) ") " Info-current-node)))) ;;; buff-menu.el ends here diff --git a/lisp/emacs-lisp/cl-loaddefs.el b/lisp/emacs-lisp/cl-loaddefs.el index 48be2f72972..06c8fe8dba7 100644 --- a/lisp/emacs-lisp/cl-loaddefs.el +++ b/lisp/emacs-lisp/cl-loaddefs.el @@ -286,7 +286,7 @@ This also does some trivial optimizations to make the form prettier. ;;;;;; flet progv psetq do-all-symbols do-symbols dotimes dolist ;;;;;; do* do loop return-from return block etypecase typecase ecase ;;;;;; case load-time-value eval-when destructuring-bind function* -;;;;;; defmacro* defun* gentemp gensym) "cl-macs" "cl-macs.el" "abb2e33c6f61539d69ddbe7c4046261b") +;;;;;; defmacro* defun* gentemp gensym) "cl-macs" "cl-macs.el" "e10ebd95224fcfbe6a5edc59f40d695a") ;;; Generated autoloads from cl-macs.el (autoload 'gensym "cl-macs" "\ diff --git a/lisp/emacs-lisp/tabulated-list.el b/lisp/emacs-lisp/tabulated-list.el index bd734a4fbe0..4291f3aacc6 100644 --- a/lisp/emacs-lisp/tabulated-list.el +++ b/lisp/emacs-lisp/tabulated-list.el @@ -144,7 +144,7 @@ If ADVANCE is non-nil, move forward by one line afterwards." (set-keymap-parent map button-buffer-map) (define-key map "n" 'next-line) (define-key map "p" 'previous-line) - (define-key map "S" 'tabulated-list-sort-column) + (define-key map "S" 'tabulated-list-sort) (define-key map [follow-link] 'mouse-face) (define-key map [mouse-2] 'mouse-select-window) map) @@ -174,8 +174,7 @@ If ADVANCE is non-nil, move forward by one line afterwards." mouse-face highlight keymap ,tabulated-list-sort-button-map)) (cols nil)) - (if (> tabulated-list-padding 0) - (push (propertize " " 'display `(space :align-to ,x)) cols)) + (push (propertize " " 'display `(space :align-to ,x)) cols) (dotimes (n (length tabulated-list-format)) (let* ((col (aref tabulated-list-format n)) (label (nth 0 col)) @@ -183,9 +182,6 @@ If ADVANCE is non-nil, move forward by one line afterwards." (props (nthcdr 3 col)) (pad-right (or (plist-get props :pad-right) 1))) (setq x (+ x pad-right width)) - (and (<= tabulated-list-padding 0) - (= n 0) - (setq label (concat " " label))) (push (cond ;; An unsortable column @@ -402,7 +398,7 @@ this is the vector stored within it." (with-current-buffer (window-buffer (posn-window pos)) (tabulated-list--sort-by-column-name name)))) -(defun tabulated-list-sort-column (&optional n) +(defun tabulated-list-sort (&optional n) "Sort Tabulated List entries by the column at point. With a numeric prefix argument N, sort the Nth column." (interactive "P") @@ -424,7 +420,6 @@ With a numeric prefix argument N, sort the Nth column." ;;; The mode definition: -;;;###autoload (define-derived-mode tabulated-list-mode special-mode "Tabulated" "Generic major mode for browsing a list of items. This mode is usually not used directly; instead, other major diff --git a/lisp/loadup.el b/lisp/loadup.el index f7ffa27a9ed..5f005a4e709 100644 --- a/lisp/loadup.el +++ b/lisp/loadup.el @@ -188,6 +188,7 @@ (load "textmodes/fill") (load "replace") +(load "emacs-lisp/tabulated-list") (load "buff-menu") (if (fboundp 'x-create-frame) diff --git a/src/ChangeLog b/src/ChangeLog index a4d7bb64919..f5811569d0d 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2012-05-06 Chong Yidong + + * lisp.mk (lisp): Update. + 2012-05-05 Jim Meyering * w32font.c (fill_in_logfont): NUL-terminate a string (Bug#11372). diff --git a/src/lisp.mk b/src/lisp.mk index 4895ca40959..ead1abcbaae 100644 --- a/src/lisp.mk +++ b/src/lisp.mk @@ -129,6 +129,7 @@ lisp = \ $(lispsource)/textmodes/text-mode.elc \ $(lispsource)/textmodes/fill.elc \ $(lispsource)/replace.elc \ + $(lispsource)/emacs-lisp/tabulated-list.elc \ $(lispsource)/buff-menu.elc \ $(lispsource)/fringe.elc \ $(lispsource)/emacs-lisp/regexp-opt.elc \ From fd075e7b2b248a4357af64e85e2cd3b87949fa23 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sun, 6 May 2012 10:57:28 -0700 Subject: [PATCH 374/564] * files.el (dir-locals-read-from-file): Mention dir-locals in any error message. --- lisp/ChangeLog | 5 +++++ lisp/files.el | 28 +++++++++++++++------------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ad22a25cfd7..f559acb2ecc 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-05-06 Glenn Morris + + * files.el (dir-locals-read-from-file): + Mention dir-locals in any error message. + 2012-05-06 Chong Yidong * emacs-lisp/package.el (package-built-in-p): Handle the `emacs' diff --git a/lisp/files.el b/lisp/files.el index 8df2942195e..6a91129dd1c 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -3623,19 +3623,21 @@ FILE is the name of the file holding the variables to apply. The new class name is the same as the directory in which FILE is found. Returns the new class name." (with-temp-buffer - ;; Errors reading the file are not very informative. - ;; Eg just "Error: (end-of-file)" does not give any clue that the - ;; problem is related to dir-locals. - (with-demoted-errors - (insert-file-contents file) - (let* ((dir-name (file-name-directory file)) - (class-name (intern dir-name)) - (variables (let ((read-circle nil)) - (read (current-buffer))))) - (dir-locals-set-class-variables class-name variables) - (dir-locals-set-directory-class dir-name class-name - (nth 5 (file-attributes file))) - class-name)))) + ;; This is with-demoted-errors, but we want to mention dir-locals + ;; in any error message. + (let ((err (make-symbol "err"))) + (condition-case err + (progn + (insert-file-contents file) + (let* ((dir-name (file-name-directory file)) + (class-name (intern dir-name)) + (variables (let ((read-circle nil)) + (read (current-buffer))))) + (dir-locals-set-class-variables class-name variables) + (dir-locals-set-directory-class dir-name class-name + (nth 5 (file-attributes file))) + class-name)) + (error (message "Error reading dir-locals: %S" err) nil))))) (defun hack-dir-local-variables () "Read per-directory local variables for the current buffer. From 18f00515789afb71a4d57171d989a82a1cbe7615 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Mon, 7 May 2012 11:14:21 +0800 Subject: [PATCH 375/564] Fix a gdb-mi process filtering issue arising in ansi-color.el. * lisp/ansi-color.el (ansi-color-process-output): Check for validity of comint-last-output-start before using it. This avoids a bad interaction with gdb-mi's input/output buffer. --- lisp/ChangeLog | 6 ++++++ lisp/ansi-color.el | 8 ++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f559acb2ecc..c6a430491b3 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2012-05-07 Chong Yidong + + * ansi-color.el (ansi-color-process-output): Check for validity of + comint-last-output-start before using it. This avoids a bad + interaction with gdb-mi's input/output buffer. + 2012-05-06 Glenn Morris * files.el (dir-locals-read-from-file): diff --git a/lisp/ansi-color.el b/lisp/ansi-color.el index 15a543e9591..6a82f176676 100644 --- a/lisp/ansi-color.el +++ b/lisp/ansi-color.el @@ -217,8 +217,12 @@ The comint output is assumed to lie between the marker `comint-last-output-start' and the process-mark. This is a good function to put in `comint-output-filter-functions'." - (let ((start-marker (or comint-last-output-start - (point-min-marker))) + (let ((start-marker (if (and (markerp comint-last-output-start) + (eq (marker-buffer comint-last-output-start) + (current-buffer)) + (marker-position comint-last-output-start)) + comint-last-output-start + (point-min-marker))) (end-marker (process-mark (get-buffer-process (current-buffer))))) (cond ((eq ansi-color-for-comint-mode nil)) ((eq ansi-color-for-comint-mode 'filter) From 188d270185eca5ea83f2a603d7d22e37cbffaefc Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sun, 6 May 2012 21:29:59 -0700 Subject: [PATCH 376/564] Improve previous dir-locals-read-from-file change --- lisp/files.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/files.el b/lisp/files.el index 6a91129dd1c..c46d7c22d92 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -3625,7 +3625,7 @@ is found. Returns the new class name." (with-temp-buffer ;; This is with-demoted-errors, but we want to mention dir-locals ;; in any error message. - (let ((err (make-symbol "err"))) + (let (err) (condition-case err (progn (insert-file-contents file) From 1241b724c80c73731c7e5710a98886b745a211a8 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Mon, 7 May 2012 13:37:38 +0800 Subject: [PATCH 377/564] Restore Buffer-menu-use-header-line functionality. * lisp/emacs-lisp/tabulated-list.el: Add no-header-line alternative. (tabulated-list-use-header-line): New var. (tabulated-list-init-header): Use it. (tabulated-list-print-fake-header): New function. (tabulated-list-print): Use it. (tabulated-list-sort-button-map): Add non-header-line commands. (tabulated-list-init-header): Add column name property to basic labels as well. (tabulated-list-col-sort): Handle non-header-line button case. (tabulated-list--sort-by-column-name): Fix a corner case. * lisp/buff-menu.el (list-buffers--refresh): Handle Buffer-menu-use-header-line. --- lisp/ChangeLog | 16 +++++++++++ lisp/buff-menu.el | 1 + lisp/emacs-lisp/tabulated-list.el | 48 ++++++++++++++++++++++++------- 3 files changed, 55 insertions(+), 10 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 149c43fc9a7..1db2fb1c715 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,19 @@ +2012-05-07 Chong Yidong + + * emacs-lisp/tabulated-list.el: Add no-header-line alternative. + (tabulated-list-use-header-line): New var. + (tabulated-list-init-header): Use it. + (tabulated-list-print-fake-header): New function. + (tabulated-list-print): Use it. + (tabulated-list-sort-button-map): Add non-header-line commands. + (tabulated-list-init-header): Add column name property to basic + labels as well. + (tabulated-list-col-sort): Handle non-header-line button case. + (tabulated-list--sort-by-column-name): Fix a corner case. + + * buff-menu.el (list-buffers--refresh): Handle + Buffer-menu-use-header-line. + 2012-05-06 Chong Yidong * buff-menu.el: Convert to Tabulated List mode. diff --git a/lisp/buff-menu.el b/lisp/buff-menu.el index e28c2c0f60b..4ea9dcea8b4 100644 --- a/lisp/buff-menu.el +++ b/lisp/buff-menu.el @@ -574,6 +574,7 @@ means list those buffers and no others." `("Size" ,size-width tabulated-list-entry-size->) `("Mode" ,Buffer-menu-mode-width t) '("File" 1 t)))) + (setq tabulated-list-use-header-line Buffer-menu-use-header-line) ;; Collect info for each buffer we're interested in. (let ((buffer-menu-buffer (current-buffer)) (show-non-file (not Buffer-menu-files-only)) diff --git a/lisp/emacs-lisp/tabulated-list.el b/lisp/emacs-lisp/tabulated-list.el index 4291f3aacc6..5471640e039 100644 --- a/lisp/emacs-lisp/tabulated-list.el +++ b/lisp/emacs-lisp/tabulated-list.el @@ -56,6 +56,10 @@ where: right of the column (defaults to 1 if omitted).") (make-variable-buffer-local 'tabulated-list-format) +(defvar tabulated-list-use-header-line t + "Whether the Tabulated List buffer should use a header line.") +(make-variable-buffer-local 'tabulated-list-use-header-line) + (defvar tabulated-list-entries nil "Entries displayed in the current Tabulated List buffer. This should be either a function, or a list. @@ -154,6 +158,9 @@ If ADVANCE is non-nil, move forward by one line afterwards." (let ((map (make-sparse-keymap))) (define-key map [header-line mouse-1] 'tabulated-list-col-sort) (define-key map [header-line mouse-2] 'tabulated-list-col-sort) + (define-key map [mouse-1] 'tabulated-list-col-sort) + (define-key map [mouse-2] 'tabulated-list-col-sort) + (define-key map "\C-m" 'tabulated-list-sort) (define-key map [follow-link] 'mouse-face) map) "Local keymap for `tabulated-list-mode' sort buttons.") @@ -167,6 +174,9 @@ If ADVANCE is non-nil, move forward by one line afterwards." table) "The `glyphless-char-display' table in Tabulated List buffers.") +(defvar tabulated-list--header-string nil) +(defvar tabulated-list--header-overlay nil) + (defun tabulated-list-init-header () "Set up header line for the Tabulated List buffer." (let ((x (max tabulated-list-padding 0)) @@ -185,7 +195,8 @@ If ADVANCE is non-nil, move forward by one line afterwards." (push (cond ;; An unsortable column - ((not (nth 2 col)) label) + ((not (nth 2 col)) + (propertize label 'tabulated-list-column-name label)) ;; The selected sort column ((equal (car col) (car tabulated-list-sort-key)) (apply 'propertize @@ -197,11 +208,11 @@ If ADVANCE is non-nil, move forward by one line afterwards." " â–²") (t " â–¼"))) 'face 'bold - 'tabulated-list-column-name (car col) + 'tabulated-list-column-name label button-props)) ;; Unselected sortable column. (t (apply 'propertize label - 'tabulated-list-column-name (car col) + 'tabulated-list-column-name label button-props))) cols) (if (> pad-right 0) @@ -209,7 +220,22 @@ If ADVANCE is non-nil, move forward by one line afterwards." 'display `(space :align-to ,x) 'face 'fixed-pitch) cols)))) - (setq header-line-format (mapconcat 'identity (nreverse cols) "")))) + (setq cols (apply 'concat (nreverse cols))) + (if tabulated-list-use-header-line + (setq header-line-format cols) + (setq header-line-format nil) + (set (make-local-variable 'tabulated-list--header-string) cols)))) + +(defun tabulated-list-print-fake-header () + "Insert a fake Tabulated List \"header line\" at the start of the buffer." + (goto-char (point-min)) + (let ((inhibit-read-only t)) + (insert tabulated-list--header-string "\n") + (if tabulated-list--header-overlay + (move-overlay tabulated-list--header-overlay (point-min) (point)) + (set (make-local-variable 'tabulated-list--header-overlay) + (make-overlay (point-min) (point)))) + (overlay-put tabulated-list--header-overlay 'face 'underline))) (defun tabulated-list-revert (&rest ignored) "The `revert-buffer-function' for `tabulated-list-mode'. @@ -248,6 +274,8 @@ to the entry with the same ID element as the current line." (setq entry-id (tabulated-list-get-id)) (setq saved-col (current-column))) (erase-buffer) + (unless tabulated-list-use-header-line + (tabulated-list-print-fake-header)) ;; Sort the buffers, if necessary. (when (and tabulated-list-sort-key (car tabulated-list-sort-key)) @@ -391,12 +419,12 @@ this is the vector stored within it." "Sort Tabulated List entries by the column of the mouse click E." (interactive "e") (let* ((pos (event-start e)) - (obj (posn-object pos)) - (name (get-text-property (if obj (cdr obj) (posn-point pos)) - 'tabulated-list-column-name - (car obj)))) + (obj (posn-object pos))) (with-current-buffer (window-buffer (posn-window pos)) - (tabulated-list--sort-by-column-name name)))) + (tabulated-list--sort-by-column-name + (get-text-property (if obj (cdr obj) (posn-point pos)) + 'tabulated-list-column-name + (car obj)))))) (defun tabulated-list-sort (&optional n) "Sort Tabulated List entries by the column at point. @@ -409,7 +437,7 @@ With a numeric prefix argument N, sort the Nth column." (tabulated-list--sort-by-column-name name))) (defun tabulated-list--sort-by-column-name (name) - (when (derived-mode-p 'tabulated-list-mode) + (when (and name (derived-mode-p 'tabulated-list-mode)) ;; Flip the sort order on a second click. (if (equal name (car tabulated-list-sort-key)) (setcdr tabulated-list-sort-key From 9a4b36f891acd6e620c1d7e6f3fcedc368003ee7 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Mon, 7 May 2012 16:57:18 +0200 Subject: [PATCH 378/564] * dbusbind.c (XD_DEBUG_MESSAGE): Don't print message twice in batch mode. --- src/ChangeLog | 7 ++++++- src/dbusbind.c | 13 +++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index f5811569d0d..fcf5ef976ff 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2012-05-07 Michael Albinus + + * dbusbind.c (XD_DEBUG_MESSAGE): Don't print message twice in + batch mode. + 2012-05-06 Chong Yidong * lisp.mk (lisp): Update. @@ -245,7 +250,7 @@ (xd_close_bus): Rename from Fdbus_close_bus. Not needed on Lisp level. (Fdbus_init_bus): New optional arg PRIVATE. Cache address. - Return number of recounts. + Return number of refcounts. (Fdbus_get_unique_name): Make stronger parameter check. (Fdbus_message_internal): New defun. (Fdbus_call_method, Fdbus_call_method_asynchronously) diff --git a/src/dbusbind.c b/src/dbusbind.c index 0ea08d7bf0e..446d060c89b 100644 --- a/src/dbusbind.c +++ b/src/dbusbind.c @@ -111,12 +111,13 @@ static int xd_in_read_queued_messages = 0; /* Macros for debugging. In order to enable them, build with "env MYCPPFLAGS='-DDBUS_DEBUG -Wall' make". */ #ifdef DBUS_DEBUG -#define XD_DEBUG_MESSAGE(...) \ - do { \ - char s[1024]; \ - snprintf (s, sizeof s, __VA_ARGS__); \ - printf ("%s: %s\n", __func__, s); \ - message ("%s: %s", __func__, s); \ +#define XD_DEBUG_MESSAGE(...) \ + do { \ + char s[1024]; \ + snprintf (s, sizeof s, __VA_ARGS__); \ + if (!noninteractive) \ + printf ("%s: %s\n", __func__, s); \ + message ("%s: %s", __func__, s); \ } while (0) #define XD_DEBUG_VALID_LISP_OBJECT_P(object) \ do { \ From b120cc17aede4b15b4d6737f03e936a621e72962 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Compostella?= Date: Mon, 7 May 2012 12:09:51 -0400 Subject: [PATCH 379/564] Fix up display of the *Minibuf-0* buffer in the mini window. * src/keyboard.c (read_char): Don't clear the echo area if there's no message to clear. * src/xdisp.c (redisplay_internal): Redisplay the mini window (with the contents of *Minibuf-0*) if there' no message displayed in its stead. --- src/ChangeLog | 8 ++++++++ src/keyboard.c | 6 ++++-- src/xdisp.c | 18 +++++++++++++++--- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index fcf5ef976ff..3a9e9a5f539 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2012-05-07 Jérémy Compostella + + Fix up display of the *Minibuf-0* buffer in the mini window. + * keyboard.c (read_char): Don't clear the echo area if there's no + message to clear. + * xdisp.c (redisplay_internal): Redisplay the mini window (with the + contents of *Minibuf-0*) if there' no message displayed in its stead. + 2012-05-07 Michael Albinus * dbusbind.c (XD_DEBUG_MESSAGE): Don't print message twice in diff --git a/src/keyboard.c b/src/keyboard.c index 249e5ee9544..fcd5c0e6837 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -2996,8 +2996,10 @@ read_char (int commandflag, ptrdiff_t nmaps, Lisp_Object *maps, && !(EQ (Qselect_window, XCAR (c))))) { if (!NILP (echo_area_buffer[0])) - safe_run_hooks (Qecho_area_clear_hook); - clear_message (1, 0); + { + safe_run_hooks (Qecho_area_clear_hook); + clear_message (1, 0); + } } reread_for_input_method: diff --git a/src/xdisp.c b/src/xdisp.c index da44281a55e..eaad5455212 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -12727,6 +12727,9 @@ redisplay_internal (void) frames. Zero means, only selected_window is considered. */ int consider_all_windows_p; + /* Non-zero means redisplay has to redisplay the miniwindow */ + int update_miniwindow_p = 0; + TRACE ((stderr, "redisplay_internal %d\n", redisplaying_p)); /* No redisplay if running in batch mode or frame is not yet fully @@ -12913,6 +12916,10 @@ redisplay_internal (void) && !MINI_WINDOW_P (XWINDOW (selected_window)))) { int window_height_changed_p = echo_area_display (0); + + if (message_cleared_p) + update_miniwindow_p = 1; + must_finish = 1; /* If we don't display the current message, don't clear the @@ -12949,7 +12956,7 @@ redisplay_internal (void) /* FIXME: this causes all frames to be updated, which seems unnecessary since only the current frame needs to be considered. This function needs to be rewritten with two variables, consider_all_windows and - consider_all_frames. */ + consider_all_frames. */ consider_all_windows_p = 1; ++windows_or_buffers_changed; ++update_mode_lines; @@ -13135,7 +13142,8 @@ redisplay_internal (void) then we can't just move the cursor. */ else if (! (!NILP (Vtransient_mark_mode) && !NILP (BVAR (current_buffer, mark_active))) - && (EQ (selected_window, BVAR (current_buffer, last_selected_window)) + && (EQ (selected_window, + BVAR (current_buffer, last_selected_window)) || highlight_nonselected_windows) && NILP (w->region_showing) && NILP (Vshow_trailing_whitespace) @@ -13288,7 +13296,7 @@ redisplay_internal (void) } else if (FRAME_VISIBLE_P (sf) && !FRAME_OBSCURED_P (sf)) { - Lisp_Object mini_window; + Lisp_Object mini_window = FRAME_MINIBUF_WINDOW (sf); struct frame *mini_frame; displayed_buffer = XBUFFER (XWINDOW (selected_window)->buffer); @@ -13297,6 +13305,10 @@ redisplay_internal (void) internal_condition_case_1 (redisplay_window_1, selected_window, list_of_error, redisplay_window_error); + if (update_miniwindow_p) + internal_condition_case_1 (redisplay_window_1, mini_window, + list_of_error, + redisplay_window_error); /* Compare desired and current matrices, perform output. */ From f0809a9d058443cd92f7145a70c25ce10d285971 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Mon, 7 May 2012 12:29:55 -0400 Subject: [PATCH 380/564] * lisp/buff-menu.el (list-buffers--refresh): Mark `size' as right-align. * lisp/emacs-lisp/tabulated-list.el (tabulated-list-init-header): Handle new :right-align column property. (tabulated-list-print-col): Idem, plus use `display' text-property to try and preserve alignment for variable pitch fonts. --- lisp/ChangeLog | 14 ++++++-- lisp/buff-menu.el | 5 ++- lisp/emacs-lisp/tabulated-list.el | 60 ++++++++++++++++++++++--------- 3 files changed, 58 insertions(+), 21 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 1db2fb1c715..33138c34809 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,11 @@ +2012-05-07 Stefan Monnier + + * buff-menu.el (list-buffers--refresh): Mark `size' as right-align. + * emacs-lisp/tabulated-list.el (tabulated-list-init-header): + Handle new :right-align column property. + (tabulated-list-print-col): Idem, plus use `display' text-property to + try and preserve alignment for variable pitch fonts. + 2012-05-07 Chong Yidong * emacs-lisp/tabulated-list.el: Add no-header-line alternative. @@ -11,8 +19,8 @@ (tabulated-list-col-sort): Handle non-header-line button case. (tabulated-list--sort-by-column-name): Fix a corner case. - * buff-menu.el (list-buffers--refresh): Handle - Buffer-menu-use-header-line. + * buff-menu.el (list-buffers--refresh): + Handle Buffer-menu-use-header-line. 2012-05-06 Chong Yidong @@ -32,7 +40,7 @@ (Buffer-menu-bury): Use Tabulated List machinery. (Buffer-menu-mouse-select, Buffer-menu-sort-by-column) (Buffer-menu-sort-button-map, Buffer-menu-make-sort-button): - Deleted. + Delete. (list-buffers--refresh): New function. (list-buffers-noselect): Use it. (tabulated-list-entry-size->, Buffer-menu--pretty-name) diff --git a/lisp/buff-menu.el b/lisp/buff-menu.el index 4ea9dcea8b4..10c097bbf93 100644 --- a/lisp/buff-menu.el +++ b/lisp/buff-menu.el @@ -269,6 +269,7 @@ ARG, show only buffers that are visiting files." (message "Commands: d, s, x, u; f, o, 1, 2, m, v; ~, %%; q to quit; ? for help.")) +;;;###autoload (defun list-buffers (&optional arg) "Display a list of existing buffers. The list is displayed in a buffer named \"*Buffer List*\". @@ -543,6 +544,7 @@ The current window remains selected." ;;; Functions for populating the Buffer Menu. +;;;###autoload (defun list-buffers-noselect (&optional files-only buffer-list) "Create and return a Buffer Menu buffer. This is called by `buffer-menu' and others as a subroutine. @@ -571,7 +573,8 @@ means list those buffers and no others." '("R" 1 t :pad-right 0) '("M" 1 t) `("Buffer" ,name-width t) - `("Size" ,size-width tabulated-list-entry-size->) + `("Size" ,size-width tabulated-list-entry-size-> + :right-align t) `("Mode" ,Buffer-menu-mode-width t) '("File" 1 t)))) (setq tabulated-list-use-header-line Buffer-menu-use-header-line) diff --git a/lisp/emacs-lisp/tabulated-list.el b/lisp/emacs-lisp/tabulated-list.el index 5471640e039..e56fea58553 100644 --- a/lisp/emacs-lisp/tabulated-list.el +++ b/lisp/emacs-lisp/tabulated-list.el @@ -52,6 +52,7 @@ where: of `tabulated-list-entries'. - PROPS is a plist of additional column properties. Currently supported properties are: + - `:right-align': if non-nil, the column should be right-aligned. - `:pad-right': Number of additional padding spaces to the right of the column (defaults to 1 if omitted).") (make-variable-buffer-local 'tabulated-list-format) @@ -179,6 +180,7 @@ If ADVANCE is non-nil, move forward by one line afterwards." (defun tabulated-list-init-header () "Set up header line for the Tabulated List buffer." + ;; FIXME: Should share code with tabulated-list-print-col! (let ((x (max tabulated-list-padding 0)) (button-props `(help-echo "Click to sort by column" mouse-face highlight @@ -190,8 +192,9 @@ If ADVANCE is non-nil, move forward by one line afterwards." (label (nth 0 col)) (width (nth 1 col)) (props (nthcdr 3 col)) - (pad-right (or (plist-get props :pad-right) 1))) - (setq x (+ x pad-right width)) + (pad-right (or (plist-get props :pad-right) 1)) + (right-align (plist-get props :right-align)) + (next-x (+ x pad-right width))) (push (cond ;; An unsortable column @@ -202,10 +205,8 @@ If ADVANCE is non-nil, move forward by one line afterwards." (apply 'propertize (concat label (cond - ((> (+ 2 (length label)) width) - "") - ((cdr tabulated-list-sort-key) - " â–²") + ((> (+ 2 (length label)) width) "") + ((cdr tabulated-list-sort-key) " â–²") (t " â–¼"))) 'face 'bold 'tabulated-list-column-name label @@ -215,11 +216,22 @@ If ADVANCE is non-nil, move forward by one line afterwards." 'tabulated-list-column-name label button-props))) cols) + (when right-align + (let ((shift (- width (string-width (car cols))))) + (when (> shift 0) + (setq cols + (cons (car cols) + (cons (propertize (make-string shift ?\s) + 'display + `(space :align-to ,(+ x shift))) + (cdr cols)))) + (setq x (+ x shift))))) (if (> pad-right 0) (push (propertize " " - 'display `(space :align-to ,x) + 'display `(space :align-to ,next-x) 'face 'fixed-pitch) - cols)))) + cols)) + (setq x next-x))) (setq cols (apply 'concat (nreverse cols))) (if tabulated-list-use-header-line (setq header-line-format cols) @@ -276,7 +288,7 @@ to the entry with the same ID element as the current line." (erase-buffer) (unless tabulated-list-use-header-line (tabulated-list-print-fake-header)) - ;; Sort the buffers, if necessary. + ;; Sort the entries, if necessary. (when (and tabulated-list-sort-key (car tabulated-list-sort-key)) (let* ((sort-column (car tabulated-list-sort-key)) @@ -332,29 +344,43 @@ of column descriptors." N is the column number, COL-DESC is a column descriptor \(see `tabulated-list-entries'), and X is the column number at point. Return the column number after insertion." + ;; TODO: don't truncate to `width' if the next column is align-right + ;; and has some space left. (let* ((format (aref tabulated-list-format n)) (name (nth 0 format)) (width (nth 1 format)) (props (nthcdr 3 format)) (pad-right (or (plist-get props :pad-right) 1)) + (right-align (plist-get props :right-align)) (label (if (stringp col-desc) col-desc (car col-desc))) + (label-width (string-width label)) (help-echo (concat (car format) ": " label)) (opoint (point)) (not-last-col (< (1+ n) (length tabulated-list-format)))) ;; Truncate labels if necessary (except last column). (and not-last-col - (> (string-width label) width) - (setq label (truncate-string-to-width label width nil nil t))) + (> label-width width) + (setq label (truncate-string-to-width label width nil nil t) + label-width width)) (setq label (bidi-string-mark-left-to-right label)) + (when (and right-align (> width label-width)) + (let ((shift (- width label-width))) + (insert (propertize (make-string shift ?\s) + 'display `(space :align-to ,(+ x shift)))) + (setq width (- width shift)) + (setq x (+ x shift)))) (if (stringp col-desc) (insert (propertize label 'help-echo help-echo)) (apply 'insert-text-button label (cdr col-desc))) - (setq x (+ x pad-right width)) - ;; No need to append any spaces if this is the last column. - (if not-last-col - (indent-to x pad-right)) - (put-text-property opoint (point) 'tabulated-list-column-name name) - x)) + (let ((next-x (+ x pad-right width))) + ;; No need to append any spaces if this is the last column. + (when not-last-col + (when (> pad-right 0) (insert (make-string pad-right ?\s))) + (insert (propertize + (make-string (- next-x x label-width pad-right) ?\s) + 'display `(space :align-to ,next-x)))) + (put-text-property opoint (point) 'tabulated-list-column-name name) + next-x))) (defun tabulated-list-delete-entry () "Delete the Tabulated List entry at point. From d13c8be67c41a533dfc5d8ebda8a263274f21b83 Mon Sep 17 00:00:00 2001 From: Stefan Merten Date: Mon, 7 May 2012 21:51:25 +0200 Subject: [PATCH 381/564] 2012-05-05 Stefan Merten * rst.el: Major merge with upstream development up to Docutils SVN r7399 / rst.el V1.2.1. Clarified maintainership and authors. (rst-extract-version, rst-cvs-header, rst-cvs-rev) (rst-cvs-timestamp, rst-svn-rev, rst-svn-timestamp) (rst-official-version, rst-official-cvs-rev, rst-version) (rst-package-emacs-version-alist): New functions and variables for version information. (rst-bullets, rst-uri-schemes, rst-adornment-chars) (rst-max-inline-length, rst-re-alist-def, rst-re-alist) (rst-mode-syntax-table, rst-mode): New and corrected functions and variables representing reStructuredText features. (rst-re): New function for reStructuredText regexes. Used in many places. (rst-deprecated-keys, rst-call-deprecated, rst-define-key) (rst-mode-map): Rebound keys. (rst-mode-lazy, rst-font-lock-keywords) (rst-font-lock-extend-region) (rst-font-lock-extend-region-internal) (rst-font-lock-extend-region-extend) (rst-font-lock-find-unindented-line-limit) (rst-font-lock-find-unindented-line-match) (rst-adornment-level, rst-font-lock-adornment-level) (rst-font-lock-adornment-match) (rst-font-lock-handle-adornment-pre-match-form) (rst-font-lock-handle-adornment-matcher): Major revision of font-locking. Integrated with other code. `jit-lock-mode' is used now. (rst-preferred-adornments, rst-adjust-hook) (rst-new-adornment-down, rst-preferred-bullets) (rst-preferred-bullets, rst-indent, rst-indent-width) (rst-indent-field, rst-indent-literal-normal) (rst-indent-literal-minimized, rst-indent-comment): Changed, extended and improved customization. (rst-line-homogeneous-p, rst-line-homogeneous-nodent-p) (rst-normalize-cursor-position, rst-get-decoration) (rst-straighten-deco-spacing, rst-re-bullets, rst-re-items) (rst-rstrip, rst-toc-insert-find-delete-contents) (rst-shift-fill-region, rst-compute-bullet-tabs) (rst-debug-print-tabs, rst-debug-mark-found) (rst-shift-region-guts, rst-shift-region-right) (rst-shift-region-left, rst-use-char-classes) (rst-font-lock-keywords-function) (rst-font-lock-indentation-point) (rst-font-lock-find-unindented-line-begin) (rst-font-lock-find-unindented-line-end) (rst-font-lock-find-unindented-line) (rst-font-lock-adornment-point, rst-font-lock-level) (rst-adornment-level-alist): Removed functions and variables. (rst-compare-adornments, rst-get-adornment-match) (rst-suggest-new-adornment, rst-get-adornments-around) (rst-adornment-complete-p, rst-get-next-adornment) (rst-adjust-adornment, rst-display-adornments-hierarchy) (rst-straighten-adornments): Standardized function names to use "adornment" instead of "decoration". Corrected callers. Similar standardizing happened in many places. (rst-update-section, rst-adjust, rst-promote-region) (rst-enumerate-region, rst-bullet-list-region) (rst-repeat-last-character): Corrected use of `interactive'. (rst-classify-adornment, rst-find-all-adornments) (rst-get-hierarchy, rst-adjust-adornment, rst-toc-update) (rst-find-leftmost-column, rst-repeat-last-character): Refactored functions. (rst-find-title-line, rst-reset-section-caches) (rst-get-adornments-around, rst-adjust-adornment-work) (rst-arabic-to-roman, rst-roman-to-arabic) (rst-insert-list-pos, rst-insert-list-new-item) (rst-insert-list-continue, rst-insert-list, rst-forward-line): New functions. (rst-all-sections, rst-section-hierarchy) (rst-arabic-to-roman, rst-initial-enums, rst-initial-items): New variables. (rst-toc-return-wincfg, rst-toc-quit-window): Using window configuration instead of only buffer. Changed where necessary. (rst-line-tabs, rst-compute-tabs, rst-indent-line) (rst-shift-region, rst-adaptive-fill): New functions for indentation and filling. (rst-comment-line-break, rst-comment-indent) (rst-comment-insert-comment, rst-comment-region) (rst-uncomment-region): New functions for handling comments. (rst-compile): Shell arguments are quoted. (rst-compile-pdf-preview, rst-compile-slides-preview): Temporary files are deleted after use. --- etc/NEWS | 32 + lisp/textmodes/rst.el | 3779 ++++++++++++++++++++++++----------------- 2 files changed, 2217 insertions(+), 1594 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 6b59601fd81..baa39db0cb6 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -82,6 +82,38 @@ character when doing minibuffer filename prompts. * Changes in Specialized Modes and Packages in Emacs 24.2 +** reStructuredText mode + +*** Major merge with upstream development. + +*** Nearly all keys are rebound making room for more keys and comply +better to usage in other modes. Bindings are described with C-c C-h. + +*** Major revision of indentation. Now works very similar to other +modes. TAB is your friend. + +*** Major revision of filling. Works fine with most of +reStructuredText syntax. Auto-filling is also supported. + +*** Major revision of comment handling. + +*** Major revision of fontification. Now works with `jit-lock-mode'. +Thanks to Stefan Monnier for help. + +*** reStructuredText syntax is covered more closely in many cases. +Among other things this improves the experience for Sphinx users. + +*** `rst-insert-list' inserts new list or continues existing lists. +Based on code by Wei-Wei Guo. + +*** Customization is extended, corrected and improved. + +*** Negative prefix argument always works for `rst-adjust'. + +*** Window configuration is reset after displaying TOC. + +*** There is a package version in `rst-version' + ** New `derived-mode' filter for Ibuffer, bound to `/ M'. `/ m' is now bound to filter by used-mode, which used to be bound to `/ M'. diff --git a/lisp/textmodes/rst.el b/lisp/textmodes/rst.el index 1b1860c833d..a9f280be1db 100644 --- a/lisp/textmodes/rst.el +++ b/lisp/textmodes/rst.el @@ -2,9 +2,10 @@ ;; Copyright (C) 2003-2012 Free Software Foundation, Inc. -;; Authors: Martin Blais , -;; Stefan Merten , -;; David Goodger +;; Maintainer: Stefan Merten +;; Author: Martin Blais , +;; David Goodger , +;; Wei-Wei Guo ;; This file is part of GNU Emacs. @@ -23,19 +24,23 @@ ;;; Commentary: -;; This package provides major mode rst-mode, which supports documents marked up -;; using the reStructuredText format. Support includes font locking as well as -;; some convenience functions for editing. It does this by defining a Emacs -;; major mode: rst-mode (ReST). This mode is derived from text-mode (and -;; inherits much of it). This package also contains: +;; This package provides major mode rst-mode, which supports documents marked +;; up using the reStructuredText format. Support includes font locking as well +;; as a lot of convenience functions for editing. It does this by defining a +;; Emacs major mode: rst-mode (ReST). This mode is derived from text-mode. This +;; package also contains: ;; ;; - Functions to automatically adjust and cycle the section underline -;; decorations; +;; adornments; ;; - A mode that displays the table of contents and allows you to jump anywhere ;; from it; ;; - Functions to insert and automatically update a TOC in your source ;; document; -;; - Font-lock highlighting of notable reStructuredText structures; +;; - Function to insert list, processing item bullets and enumerations +;; automatically; +;; - Font-lock highlighting of most reStructuredText structures; +;; - Indentation and filling according to reStructuredText syntax; +;; - Cursor movement according to reStructuredText syntax; ;; - Some other convenience functions. ;; ;; See the accompanying document in the docutils documentation about @@ -49,17 +54,8 @@ ;; ;; ;; There are a number of convenient keybindings provided by rst-mode. -;; The main one is -;; -;; C-c C-a (also C-=): rst-adjust -;; -;; Updates or rotates the section title around point or promotes/demotes the -;; decorations within the region (see full details below). Note that C-= is a -;; good binding, since it allows you to specify a negative arg easily with C-- -;; C-= (easy to type), as well as ordinary prefix arg with C-u C-=. -;; ;; For more on bindings, see rst-mode-map below. There are also many variables -;; that can be customized, look for defcustom and defvar in this file. +;; that can be customized, look for defcustom in this file. ;; ;; If you use the table-of-contents feature, you may want to add a hook to ;; update the TOC automatically everytime you adjust a section title:: @@ -71,52 +67,16 @@ ;; ;; (setq font-lock-global-modes '(not rst-mode ...)) ;; - - -;; CUSTOMIZATION ;; -;; rst -;; --- -;; This group contains some general customizable features. ;; -;; The group is contained in the wp group. +;; Customization is done by customizable variables contained in customization +;; group "rst" and subgroups. Group "rst" is contained in the "wp" group. ;; -;; rst-faces -;; --------- -;; This group contains all necessary for customizing fonts. The default -;; settings use standard font-lock-*-face's so if you set these to your -;; liking they are probably good in rst-mode also. -;; -;; The group is contained in the faces group as well as in the rst group. -;; -;; rst-faces-defaults -;; ------------------ -;; This group contains all necessary for customizing the default fonts used for -;; section title faces. -;; -;; The general idea for section title faces is to have a non-default background -;; but do not change the background. The section level is shown by the -;; lightness of the background color. If you like this general idea of -;; generating faces for section titles but do not like the details this group -;; is the point where you can customize the details. If you do not like the -;; general idea, however, you should customize the faces used in -;; rst-adornment-faces-alist. -;; -;; Note: If you are using a dark background please make sure the variable -;; frame-background-mode is set to the symbol dark. This triggers -;; some default values which are probably right for you. -;; -;; The group is contained in the rst-faces group. -;; -;; All customizable features have a comment explaining their meaning. -;; Refer to the customization of your Emacs (try ``M-x customize``). - ;;; DOWNLOAD -;; The latest version of this file lies in the docutils source code repository: -;; http://svn.berlios.de/svnroot/repos/docutils/trunk/docutils/tools/editors/emacs/rst.el - +;; The latest release of this file lies in the docutils source code repository: +;; http://docutils.svn.sourceforge.net/svnroot/docutils/trunk/docutils/tools/editors/emacs/rst.el ;;; INSTALLATION @@ -140,165 +100,542 @@ ;; ("\\.rest$" . rst-mode)) auto-mode-alist)) ;; -;;; BUGS - -;; - rst-enumeration-region: Select a single paragraph, with the top at one -;; blank line before the beginning, and it will fail. -;; - The active region goes away when we shift it left or right, and this -;; prevents us from refilling it automatically when shifting many times. -;; - The suggested decorations when adjusting should not have to cycle -;; below one below the last section decoration level preceding the -;; cursor. We need to fix that. - -;;; TODO LIST - -;; rst-toc-insert features -;; ------------------------ -;; - rst-toc-insert: We should parse the contents:: options to figure out how -;; deep to render the inserted TOC. -;; - On load, detect any existing TOCs and set the properties for links. -;; - TOC insertion should have an option to add empty lines. -;; - TOC insertion should deal with multiple lines. -;; - There is a bug on redo after undo of adjust when rst-adjust-hook uses the -;; automatic toc update. The cursor ends up in the TOC and this is -;; annoying. Gotta fix that. -;; - numbering: automatically detect if we have a section-numbering directive in -;; the corresponding section, to render the toc. -;; -;; bulleted and enumerated list items -;; ---------------------------------- -;; - We need to provide way to rebullet bulleted lists, and that would include -;; automatic enumeration as well. -;; -;; Other -;; ----- -;; - It would be nice to differentiate between text files using -;; reStructuredText_ and other general text files. If we had a -;; function to automatically guess whether a .txt file is following the -;; reStructuredText_ conventions, we could trigger rst-mode without -;; having to hard-code this in every text file, nor forcing the user to -;; add a local mode variable at the top of the file. -;; We could perform this guessing by searching for a valid decoration -;; at the top of the document or searching for reStructuredText_ -;; directives further on. -;; -;; - We should support imenu in our major mode, with the menu filled with the -;; section titles (this should be really easy). -;; -;; - We should rename "adornment" to "decoration" or vice-versa in this -;; document (Stefan's code ("adornment") vs Martin ("decoration")), maybe some -;; functions even overlap. -;; -;; - We need to automatically recenter on rst-forward-section movement commands. - - -;;; HISTORY -;; - ;;; Code: +(require 'cl) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Versions + +(defun rst-extract-version (delim-re head-re re tail-re var &optional default) + "Return the version matching RE after regex DELIM-RE and HEAD-RE +and before TAIL-RE and DELIM-RE in VAR or DEFAULT for no match" + (if (string-match + (concat delim-re head-re "\\(" re "\\)" tail-re delim-re) + var) + (match-string 1 var) + default)) + +;; Use CVSHeader to really get information from CVS and not other version +;; control systems +(defconst rst-cvs-header + "$CVSHeader: sm/rst_el/rst.el,v 1.257 2012-04-29 15:01:17 stefan Exp $") +(defconst rst-cvs-rev + (rst-extract-version "\\$" "CVSHeader: \\S + " "[0-9]+\\(?:\\.[0-9]+\\)+" + " .*" rst-cvs-header "0.0") + "The CVS revision of this file. CVS revision is the development revision.") +(defconst rst-cvs-timestamp + (rst-extract-version "\\$" "CVSHeader: \\S + \\S + " + "[0-9]+-[0-9]+-[0-9]+ [0-9]+:[0-9]+:[0-9]+" " .*" + rst-cvs-header "1970-01-01 00:00:00") + "The CVS timestamp of this file.") + +;; Use LastChanged... to really get information from SVN +(defconst rst-svn-rev + (rst-extract-version "\\$" "LastChangedRevision: " "[0-9]+" " " + "$LastChangedRevision: 7399 $") + "The SVN revision of this file. +SVN revision is the upstream (docutils) revision.") +(defconst rst-svn-timestamp + (rst-extract-version "\\$" "LastChangedDate: " ".+?+" " " + "$LastChangedDate: 2012-04-29 17:01:05 +0200 (Sun, 29 Apr 2012) $") + "The SVN timestamp of this file.") + +;; Maintained by the release process +(defconst rst-official-version + (rst-extract-version "%" "OfficialVersion: " "[0-9]+\\(?:\\.[0-9]+\\)+" " " + "%OfficialVersion: 1.2.1 %") + "Official version of the package.") +(defconst rst-official-cvs-rev + (rst-extract-version "[%$]" "Revision: " "[0-9]+\\(?:\\.[0-9]+\\)+" " " + "%Revision: 1.256 %") + "CVS revision of this file in the official version.") + +(defconst rst-version + (if (equal rst-official-cvs-rev rst-cvs-rev) + rst-official-version + (format "%s (development %s [%s])" rst-official-version + rst-cvs-rev rst-cvs-timestamp)) + "The version string. +Starts with the current official version. For developer versions +in parentheses follows the development revision and the timestamp.") + +(defconst rst-package-emacs-version-alist + '(("1.0.0" . "24.0") + ("1.1.0" . "24.0") + ("1.2.0" . "24.0") + ("1.2.1" . "24.0"))) + +(unless (assoc rst-official-version rst-package-emacs-version-alist) + (error "Version %s not listed in `rst-package-emacs-version-alist'" + rst-version)) + +(add-to-list 'customize-package-emacs-version-alist + (cons 'ReST rst-package-emacs-version-alist)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Initialize customization + (defgroup rst nil "Support for reStructuredText documents." :group 'wp :version "23.1" :link '(url-link "http://docutils.sourceforge.net/rst.html")) - - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Define some generic support functions. +;; Facilities for regular expressions used everywhere -(eval-when-compile (require 'cl)) ;; We need this for destructuring-bind below. +;; The trailing numbers in the names give the number of referenceable regex +;; groups contained in the regex +;; Used to be customizable but really is not customizable but fixed by the reST +;; syntax +(defconst rst-bullets + ;; Sorted so they can form a character class when concatenated + '(?- ?* ?+ ?\u2022 ?\u2023 ?\u2043) + "List of all possible bullet characters for bulleted lists.") -;; From Emacs-22 -(unless (fboundp 'line-number-at-pos) - (defun line-number-at-pos (&optional pos) - "Return (narrowed) buffer line number at position POS. - If POS is nil, use current buffer location." - (let ((opoint (or pos (point))) start) - (save-excursion - (goto-char (point-min)) - (setq start (point)) - (goto-char opoint) - (forward-line 0) - (1+ (count-lines start (point)))))) ) +(defconst rst-uri-schemes + '("acap" "cid" "data" "dav" "fax" "file" "ftp" "gopher" "http" "https" "imap" + "ldap" "mailto" "mid" "modem" "news" "nfs" "nntp" "pop" "prospero" "rtsp" + "service" "sip" "tel" "telnet" "tip" "urn" "vemmi" "wais") + "Supported URI schemes.") +(defconst rst-adornment-chars + ;; Sorted so they can form a character class when concatenated + '(?\] + ?! ?\" ?# ?$ ?% ?& ?' ?\( ?\) ?* ?+ ?, ?. ?/ ?: ?\; ?< ?= ?> ?? ?@ ?\[ ?\\ + ?^ ?_ ?` ?{ ?| ?} ?~ + ?-) + "Characters which may be used in adornments for sections and transitions.") + +(defconst rst-max-inline-length + 1000 + "Maximum length of inline markup to recognize.") + +(defconst rst-re-alist-def + ;; `*-beg' matches * at the beginning of a line + ;; `*-end' matches * at the end of a line + ;; `*-prt' matches a part of * + ;; `*-tag' matches * + ;; `*-sta' matches the start of * which may be followed by respective content + ;; `*-pfx' matches the delimiter left of * + ;; `*-sfx' matches the delimiter right of * + ;; `*-hlp' helper for * + ;; + ;; A trailing number says how many referenceable groups are contained. + `( + + ;; Horizontal white space (`hws') + (hws-prt "[\t ]") + (hws-tag hws-prt "*") ; Optional sequence of horizontal white space + (hws-sta hws-prt "+") ; Mandatory sequence of horizontal white space + + ;; Lines (`lin') + (lin-beg "^" hws-tag) ; Beginning of a possibly indented line + (lin-end hws-tag "$") ; End of a line with optional trailing white space + (linemp-tag "^" hws-tag "$") ; Empty line with optional white space + + ;; Various tags and parts + (ell-tag "\\.\\.\\.") ; Ellipsis + (bul-tag ,(concat "[" rst-bullets "]")) ; A bullet + (ltr-tag "[a-zA-Z]") ; A letter enumerator tag + (num-prt "[0-9]") ; A number enumerator part + (num-tag num-prt "+") ; A number enumerator tag + (rom-prt "[IVXLCDMivxlcdm]") ; A roman enumerator part + (rom-tag rom-prt "+") ; A roman enumerator tag + (aut-tag "#") ; An automatic enumerator tag + (dcl-tag "::") ; Double colon + + ;; Block lead in (`bli') + (bli-sfx (:alt hws-sta "$")) ; Suffix of a block lead-in with *optional* + ; immediate content + + ;; Various starts + (bul-sta bul-tag bli-sfx) ; Start of a bulleted item + + ;; Explicit markup tag (`exm') + (exm-tag "\\.\\.") + (exm-sta exm-tag hws-sta) + (exm-beg lin-beg exm-sta) + + ;; Counters in enumerations (`cnt') + (cntany-tag (:alt ltr-tag num-tag rom-tag aut-tag)) ; An arbitrary counter + (cntexp-tag (:alt ltr-tag num-tag rom-tag)) ; An arbitrary explicit counter + + ;; Enumerator (`enm') + (enmany-tag (:alt + (:seq cntany-tag "\\.") + (:seq "(?" cntany-tag ")"))) ; An arbitrary enumerator + (enmexp-tag (:alt + (:seq cntexp-tag "\\.") + (:seq "(?" cntexp-tag ")"))) ; An arbitrary explicit + ; enumerator + (enmaut-tag (:alt + (:seq aut-tag "\\.") + (:seq "(?" aut-tag ")"))) ; An automatic enumerator + (enmany-sta enmany-tag bli-sfx) ; An arbitrary enumerator start + (enmexp-sta enmexp-tag bli-sfx) ; An arbitrary explicit enumerator start + (enmexp-beg lin-beg enmexp-sta) ; An arbitrary explicit enumerator start + ; at the beginning of a line + + ;; Items may be enumerated or bulleted (`itm') + (itmany-tag (:alt enmany-tag bul-tag)) ; An arbitrary item tag + (itmany-sta-1 (:grp itmany-tag) bli-sfx) ; An arbitrary item start, group + ; is the item tag + (itmany-beg-1 lin-beg itmany-sta-1) ; An arbitrary item start at the + ; beginning of a line, group is the + ; item tag + + ;; Inline markup (`ilm') + (ilm-pfx (:alt "^" hws-prt "[-'\"([{<\u2018\u201c\u00ab\u2019/:]")) + (ilm-sfx (:alt "$" hws-prt "[]-'\")}>\u2019\u201d\u00bb/:.,;!?\\]")) + + ;; Inline markup content (`ilc') + (ilcsgl-tag "\\S ") ; A single non-white character + (ilcast-prt (:alt "[^*\\]" "\\\\.")) ; Part of non-asterisk content + (ilcbkq-prt (:alt "[^`\\]" "\\\\.")) ; Part of non-backquote content + (ilcbkqdef-prt (:alt "[^`\\\n]" "\\\\.")) ; Part of non-backquote + ; definition + (ilcbar-prt (:alt "[^|\\]" "\\\\.")) ; Part of non-vertical-bar content + (ilcbardef-prt (:alt "[^|\\\n]" "\\\\.")) ; Part of non-vertical-bar + ; definition + (ilcast-sfx "[^\t *\\]") ; Suffix of non-asterisk content + (ilcbkq-sfx "[^\t `\\]") ; Suffix of non-backquote content + (ilcbar-sfx "[^\t |\\]") ; Suffix of non-vertical-bar content + (ilcrep-hlp ,(format "\\{0,%d\\}" rst-max-inline-length)) ; Repeat count + (ilcast-tag (:alt ilcsgl-tag + (:seq ilcsgl-tag + ilcast-prt ilcrep-hlp + ilcast-sfx))) ; Non-asterisk content + (ilcbkq-tag (:alt ilcsgl-tag + (:seq ilcsgl-tag + ilcbkq-prt ilcrep-hlp + ilcbkq-sfx))) ; Non-backquote content + (ilcbkqdef-tag (:alt ilcsgl-tag + (:seq ilcsgl-tag + ilcbkqdef-prt ilcrep-hlp + ilcbkq-sfx))) ; Non-backquote definition + (ilcbar-tag (:alt ilcsgl-tag + (:seq ilcsgl-tag + ilcbar-prt ilcrep-hlp + ilcbar-sfx))) ; Non-vertical-bar content + (ilcbardef-tag (:alt ilcsgl-tag + (:seq ilcsgl-tag + ilcbardef-prt ilcrep-hlp + ilcbar-sfx))) ; Non-vertical-bar definition + + ;; Fields (`fld') + (fldnam-prt (:alt "[^:\n]" "\\\\:")) ; Part of a field name + (fldnam-tag fldnam-prt "+") ; A field name + (fld-tag ":" fldnam-tag ":") ; A field marker + + ;; Options (`opt') + (optsta-tag (:alt "[-+/]" "--")) ; Start of an option + (optnam-tag "\\sw" (:alt "-" "\\sw") "*") ; Name of an option + (optarg-tag (:shy "[ =]\\S +")) ; Option argument + (optsep-tag (:shy "," hws-prt)) ; Separator between options + (opt-tag (:shy optsta-tag optnam-tag optarg-tag "?")) ; A complete option + + ;; Footnotes and citations (`fnc') + (fncnam-prt "[^\]\n]") ; Part of a footnote or citation name + (fncnam-tag fncnam-prt "+") ; A footnote or citation name + (fnc-tag "\\[" fncnam-tag "]") ; A complete footnote or citation tag + (fncdef-tag-2 (:grp exm-sta) + (:grp fnc-tag)) ; A complete footnote or citation definition + ; tag; first group is the explicit markup + ; start, second group is the footnote / + ; citation tag + (fnc-sta-2 fncdef-tag-2 bli-sfx) ; Start of a footnote or citation + ; definition; first group is the explicit + ; markup start, second group is the + ; footnote / citation tag + + ;; Substitutions (`sub') + (sub-tag "|" ilcbar-tag "|") ; A complete substitution tag + (subdef-tag "|" ilcbardef-tag "|") ; A complete substitution definition + ; tag + + ;; Symbol (`sym') + (sym-tag (:shy "\\sw+" (:shy "\\s_\\sw+") "*")) + + ;; URIs (`uri') + (uri-tag (:alt ,@rst-uri-schemes)) + + ;; Adornment (`ado') + (ado-prt "[" ,(concat rst-adornment-chars) "]") + (adorep3-hlp "\\{3,\\}") ; There must be at least 3 characters because + ; otherwise explicit markup start would be + ; recognized + (adorep2-hlp "\\{2,\\}") ; As `adorep3-hlp' but when the first of three + ; characters is matched differently + (ado-tag-1-1 (:grp ado-prt) + "\\1" adorep2-hlp) ; A complete adornment, group is the first + ; adornment character and MUST be the FIRST + ; group in the whole expression + (ado-tag-1-2 (:grp ado-prt) + "\\2" adorep2-hlp) ; A complete adornment, group is the first + ; adornment character and MUST be the + ; SECOND group in the whole expression + (ado-beg-2-1 "^" (:grp ado-tag-1-2) + lin-end) ; A complete adornment line; first group is the whole + ; adornment and MUST be the FIRST group in the whole + ; expression; second group is the first adornment + ; character + + ;; Titles (`ttl') + (ttl-tag "\\S *\\w\\S *") ; A title text + (ttl-beg lin-beg ttl-tag) ; A title text at the beginning of a line + + ;; Directives and substitution definitions (`dir') + (dir-tag-3 (:grp exm-sta) + (:grp (:shy subdef-tag hws-sta) "?") + (:grp sym-tag dcl-tag)) ; A directive or substitution definition + ; tag; first group is explicit markup + ; start, second group is a possibly + ; empty substitution tag, third group is + ; the directive tag including the double + ; colon + (dir-sta-3 dir-tag-3 bli-sfx) ; Start of a directive or substitution + ; definition; groups are as in dir-tag-3 + + ;; Literal block (`lit') + (lit-sta-2 (:grp (:alt "[^.\n]" "\\.[^.\n]") ".*") "?" + (:grp dcl-tag) "$") ; Start of a literal block; first group is + ; any text before the double colon tag which + ; may not exist, second group is the double + ; colon tag + + ;; Comments (`cmt') + (cmt-sta-1 (:grp exm-sta) "[^\[|_\n]" + (:alt "[^:\n]" (:seq ":" (:alt "[^:\n]" "$"))) + "*$") ; Start of a comment block; first group is explicit markup + ; start + + ;; Paragraphs (`par') + (par-tag- (:alt itmany-tag fld-tag opt-tag fncdef-tag-2 dir-tag-3 exm-tag) + ) ; Tag at the beginning of a paragraph; there may be groups in + ; certain cases + ) + "Definition alist of relevant regexes. +Each entry consists of the symbol naming the regex and an +argument list for `rst-re'.") + +;; FIXME: Use `sregex` or `rx` instead of re-inventing the wheel +(defun rst-re (&rest args) + "Interpret ARGS as regular expressions and return a regex string. +Each element of ARGS may be one of the following: + +A string which is inserted unchanged. + +A character which is resolved to a quoted regex. + +A symbol which is resolved to a string using `rst-re-alist-def'. + +A list with a keyword in the car. Each element of the cdr of such +a list is recursively interpreted as ARGS. The results of this +interpretation are concatenated according to the keyword. + +For the keyword `:seq' the results are simply concatenated. + +For the keyword `:shy' the results are concatenated and +surrounded by a shy-group (\"\\(?:...\\)\"). + +For the keyword `:alt' the results form an alternative (\"\\|\") +which is shy-grouped (\"\\(?:...\\)\"). + +For the keyword `:grp' the results are concatenated and form a +referencable grouped (\"\\(...\\)\"). + +After interpretation of ARGS the results are concatenated as for +`:seq'. +" + (apply 'concat + (mapcar + (lambda (re) + (cond + ((stringp re) + re) + ((symbolp re) + (cadr (assoc re rst-re-alist))) + ((char-valid-p re) + (regexp-quote (char-to-string re))) + ((listp re) + (let ((nested + (mapcar (lambda (elt) + (rst-re elt)) + (cdr re)))) + (cond + ((eq (car re) :seq) + (mapconcat 'identity nested "")) + ((eq (car re) :shy) + (concat "\\(?:" (mapconcat 'identity nested "") "\\)")) + ((eq (car re) :grp) + (concat "\\(" (mapconcat 'identity nested "") "\\)")) + ((eq (car re) :alt) + (concat "\\(?:" (mapconcat 'identity nested "\\|") "\\)")) + (t + (error "Unknown list car: %s" (car re)))))) + (t + (error "Unknown object type for building regex: %s" re)))) + args))) + +(defconst rst-re-alist + ;; Shadow global value we are just defining so we can construct it step by + ;; step + (let (rst-re-alist) + (dolist (re rst-re-alist-def) + (setq rst-re-alist + (nconc rst-re-alist + (list (list (car re) (apply 'rst-re (cdr re))))))) + rst-re-alist) + "Alist mapping symbols from `rst-re-alist-def' to regex strings.") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Mode definition. +(defvar rst-deprecated-keys nil + "Alist mapping deprecated keys to the new key to use and the definition.") + +(require 'edmacro) + +(defun rst-call-deprecated () + (interactive) + (let* ((dep-key (this-command-keys-vector)) + (dep-key-s (format-kbd-macro dep-key)) + (fnd (assoc dep-key rst-deprecated-keys))) + (if (not fnd) + ;; Exact key sequence not found. Maybe a deprecated key sequence has + ;; been followed by another key. + (let* ((dep-key-pfx (butlast (append dep-key nil) 1)) + (dep-key-def (vconcat dep-key-pfx '(t))) + (fnd-def (assoc dep-key-def rst-deprecated-keys))) + (if (not fnd-def) + (error "Unknown deprecated key sequence %s" dep-key-s) + ;; Don't execute the command in this case + (message "[Deprecated use of key %s; use key %s instead]" + (format-kbd-macro dep-key-pfx) + (format-kbd-macro (second fnd-def))))) + (message "[Deprecated use of key %s; use key %s instead]" + dep-key-s (format-kbd-macro (second fnd))) + (call-interactively (third fnd))))) + +(defun rst-define-key (keymap key def &rest deprecated) + "Bind like `define-key' using DEPRECATED as deprecated key definitions. +DEPRECATED key definitions should be in vector notation. These +are defined as well but give an additional message." + (define-key keymap key def) + (dolist (dep-key deprecated) + (push (list dep-key key def) rst-deprecated-keys) + (define-key keymap dep-key 'rst-call-deprecated))) + ;; Key bindings. (defvar rst-mode-map (let ((map (make-sparse-keymap))) + ;; \C-c is the general keymap + (rst-define-key map [?\C-c ?\C-h] 'describe-prefix-bindings) + ;; - ;; Section Decorations. + ;; Section Adornments. ;; - ;; The adjustment function that decorates or rotates a section title. - (define-key map [(control c) (control a)] 'rst-adjust) - (define-key map [(control c) (control ?=)] 'rst-adjust) - (define-key map [(control ?=)] 'rst-adjust) ;; (Does not work on the Mac OSX.) - ;; Display the hierarchy of decorations implied by the current document contents. - (define-key map [(control c) (control h)] 'rst-display-decorations-hierarchy) - ;; Homogenize the decorations in the document. - (define-key map [(control c) (control s)] 'rst-straighten-decorations) -;; (define-key map [(control c) (control s)] 'rst-straighten-deco-spacing) + ;; The adjustment function that adorns or rotates a section title. + (rst-define-key map [?\C-c ?\C-=] 'rst-adjust [?\C-c ?\C-a t]) + (rst-define-key map [?\C-=] 'rst-adjust) ; (Does not work on the Mac OSX.) + + ;; \C-c \C-a is the keymap for adornments + (rst-define-key map [?\C-c ?\C-a ?\C-h] 'describe-prefix-bindings) + ;; Display the hierarchy of adornments implied by the current document contents. + (rst-define-key map [?\C-c ?\C-a ?\C-d] 'rst-display-adornments-hierarchy) + ;; Homogenize the adornments in the document. + (rst-define-key map [?\C-c ?\C-a ?\C-s] 'rst-straighten-adornments + [?\C-c ?\C-s]) ;; ;; Section Movement and Selection. ;; ;; Mark the subsection where the cursor is. - (define-key map [(control c) (control m)] 'rst-mark-section) + (rst-define-key map [?\C-\M-h] 'rst-mark-section + ;; same as mark-defun sgml-mark-current-element + [?\C-c ?\C-m]) ;; Move forward/backward between section titles. - (define-key map [(control c) (control n)] 'rst-forward-section) - (define-key map [(control c) (control p)] 'rst-backward-section) + (rst-define-key map [?\C-\M-a] 'rst-forward-section + ;; same as beginning-of-defun + [?\C-c ?\C-n]) + (rst-define-key map [?\C-\M-e] 'rst-backward-section + ;; same as end-of-defun + [?\C-c ?\C-p]) ;; - ;; Operating on Blocks of Text. + ;; Operating on regions. ;; - ;; Makes paragraphs in region as a bullet list. - (define-key map [(control c) (control b)] 'rst-bullet-list-region) - ;; Makes paragraphs in region as a enumeration. - (define-key map [(control c) (control e)] 'rst-enumerate-region) - ;; Converts bullets to an enumeration. - (define-key map [(control c) (control v)] 'rst-convert-bullets-to-enumeration) + ;; \C-c \C-r is the keymap for regions + (rst-define-key map [?\C-c ?\C-r ?\C-h] 'describe-prefix-bindings) ;; Makes region a line-block. - (define-key map [(control c) (control d)] 'rst-line-block-region) + (rst-define-key map [?\C-c ?\C-r ?\C-l] 'rst-line-block-region + [?\C-c ?\C-d]) + ;; Shift region left or right according to tabs + (rst-define-key map [?\C-c ?\C-r tab] 'rst-shift-region + [?\C-c ?\C-r t] [?\C-c ?\C-l t]) + + ;; + ;; Operating on lists. + ;; + ;; \C-c \C-l is the keymap for lists + (rst-define-key map [?\C-c ?\C-l ?\C-h] 'describe-prefix-bindings) + ;; Makes paragraphs in region as a bullet list. + (rst-define-key map [?\C-c ?\C-l ?\C-b] 'rst-bullet-list-region + [?\C-c ?\C-b]) + ;; Makes paragraphs in region as a enumeration. + (rst-define-key map [?\C-c ?\C-l ?\C-e] 'rst-enumerate-region + [?\C-c ?\C-e]) + ;; Converts bullets to an enumeration. + (rst-define-key map [?\C-c ?\C-l ?\C-c] 'rst-convert-bullets-to-enumeration + [?\C-c ?\C-v]) ;; Make sure that all the bullets in the region are consistent. - (define-key map [(control c) (control w)] 'rst-straighten-bullets-region) - ;; Shift region left or right (taking into account of enumerations/bullets, etc.). - (define-key map [(control c) (control l)] 'rst-shift-region-left) - (define-key map [(control c) (control r)] 'rst-shift-region-right) - ;; Comment/uncomment the active region. - (define-key map [(control c) (control c)] 'comment-region) + (rst-define-key map [?\C-c ?\C-l ?\C-s] 'rst-straighten-bullets-region + [?\C-c ?\C-w]) + ;; Insert a list item + (rst-define-key map [?\C-c ?\C-l ?\C-i] 'rst-insert-list) ;; ;; Table-of-Contents Features. ;; + ;; \C-c \C-t is the keymap for table of contents + (rst-define-key map [?\C-c ?\C-t ?\C-h] 'describe-prefix-bindings) ;; Enter a TOC buffer to view and move to a specific section. - (define-key map [(control c) (control t)] 'rst-toc) + (rst-define-key map [?\C-c ?\C-t ?\C-t] 'rst-toc) ;; Insert a TOC here. - (define-key map [(control c) (control i)] 'rst-toc-insert) + (rst-define-key map [?\C-c ?\C-t ?\C-i] 'rst-toc-insert + [?\C-c ?\C-i]) ;; Update the document's TOC (without changing the cursor position). - (define-key map [(control c) (control u)] 'rst-toc-update) + (rst-define-key map [?\C-c ?\C-t ?\C-u] 'rst-toc-update + [?\C-c ?\C-u]) ;; Got to the section under the cursor (cursor must be in TOC). - (define-key map [(control c) (control f)] 'rst-goto-section) + (rst-define-key map [?\C-c ?\C-t ?\C-j] 'rst-goto-section + [?\C-c ?\C-f]) ;; ;; Converting Documents from Emacs. ;; + ;; \C-c \C-c is the keymap for compilation + (rst-define-key map [?\C-c ?\C-c ?\C-h] 'describe-prefix-bindings) ;; Run one of two pre-configured toolset commands on the document. - (define-key map [(control c) (?1)] 'rst-compile) - (define-key map [(control c) (?2)] 'rst-compile-alt-toolset) + (rst-define-key map [?\C-c ?\C-c ?\C-c] 'rst-compile + [?\C-c ?1]) + (rst-define-key map [?\C-c ?\C-c ?\C-a] 'rst-compile-alt-toolset + [?\C-c ?2]) ;; Convert the active region to pseudo-xml using the docutils tools. - (define-key map [(control c) (?3)] 'rst-compile-pseudo-region) + (rst-define-key map [?\C-c ?\C-c ?\C-x] 'rst-compile-pseudo-region + [?\C-c ?3]) ;; Convert the current document to PDF and launch a viewer on the results. - (define-key map [(control c) (?4)] 'rst-compile-pdf-preview) + (rst-define-key map [?\C-c ?\C-c ?\C-p] 'rst-compile-pdf-preview + [?\C-c ?4]) ;; Convert the current document to S5 slides and view in a web browser. - (define-key map [(control c) (?5)] 'rst-compile-slides-preview) + (rst-define-key map [?\C-c ?\C-c ?\C-s] 'rst-compile-slides-preview + [?\C-c ?5]) map) "Keymap for reStructuredText mode commands. @@ -307,7 +644,7 @@ This inherits from Text mode.") ;; Abbrevs. (defvar rst-mode-abbrev-table nil - "Abbrev table used while in Rst mode.") + "Abbrev table used while in `rst-mode'.") (define-abbrev-table 'rst-mode-abbrev-table (mapcar (lambda (x) (append x '(nil 0 system))) '(("contents" ".. contents::\n..\n ") @@ -328,38 +665,34 @@ This inherits from Text mode.") (modify-syntax-entry ?& "." st) (modify-syntax-entry ?' "." st) (modify-syntax-entry ?* "." st) - (modify-syntax-entry ?+ "." st) + (modify-syntax-entry ?+ "_" st) (modify-syntax-entry ?. "_" st) (modify-syntax-entry ?/ "." st) + (modify-syntax-entry ?: "_" st) (modify-syntax-entry ?< "." st) (modify-syntax-entry ?= "." st) (modify-syntax-entry ?> "." st) (modify-syntax-entry ?\\ "\\" st) (modify-syntax-entry ?| "." st) - (modify-syntax-entry ?_ "." st) + (modify-syntax-entry ?_ "_" st) + (modify-syntax-entry ?\u00ab "." st) + (modify-syntax-entry ?\u00bb "." st) + (modify-syntax-entry ?\u2018 "." st) + (modify-syntax-entry ?\u2019 "." st) + (modify-syntax-entry ?\u201c "." st) + (modify-syntax-entry ?\u201d "." st) st) "Syntax table used while in `rst-mode'.") (defcustom rst-mode-hook nil - "Hook run when Rst mode is turned on. -The hook for Text mode is run before this one." + "Hook run when `rst-mode' is turned on. +The hook for `text-mode' is run before this one." :group 'rst :type '(hook)) -(defcustom rst-mode-lazy t - "If non-nil Rst mode tries to font-lock multi-line elements correctly. -Because this is really slow it should be set to nil if neither `jit-lock-mode' -not `lazy-lock-mode' and activated. - -If nil, comments and literal blocks are font-locked only on the line they start. - -The value of this variable is used when Rst mode is turned on." - :group 'rst - :type '(boolean)) - ;; Use rst-mode for *.rst and *.rest files. Many ReStructured-Text files ;; use *.txt, but this is too generic to be set as a default. ;;;###autoload (add-to-list 'auto-mode-alist (purecopy '("\\.re?st\\'" . rst-mode))) @@ -367,78 +700,74 @@ The value of this variable is used when Rst mode is turned on." (define-derived-mode rst-mode text-mode "ReST" "Major mode for editing reStructuredText documents. \\ -There are a number of convenient keybindings provided by -Rst mode. The main one is \\[rst-adjust], it updates or rotates -the section title around point or promotes/demotes the -decorations within the region (see full details below). -Use negative prefix arg to rotate in the other direction. Turning on `rst-mode' calls the normal hooks `text-mode-hook' and `rst-mode-hook'. This mode also supports font-lock -highlighting. You may customize `rst-mode-lazy' to toggle -font-locking of blocks. +highlighting. \\{rst-mode-map}" :abbrev-table rst-mode-abbrev-table :syntax-table rst-mode-syntax-table :group 'rst - (set (make-local-variable 'paragraph-separate) paragraph-start) - (set (make-local-variable 'indent-line-function) 'indent-relative-maybe) + ;; Paragraph recognition + (set (make-local-variable 'paragraph-separate) + (rst-re '(:alt + "\f" + lin-end))) (set (make-local-variable 'paragraph-start) - "\f\\|>*[ \t]*$\\|>*[ \t]*[-+*] \\|>*[ \t]*[0-9#]+\\. ") + (rst-re '(:alt + "\f" + lin-end + (:seq hws-tag par-tag- bli-sfx)))) + + ;; Indenting and filling + (set (make-local-variable 'indent-line-function) 'rst-indent-line) (set (make-local-variable 'adaptive-fill-mode) t) + (set (make-local-variable 'adaptive-fill-regexp) + (rst-re 'hws-tag 'par-tag- "?" 'hws-tag)) + (set (make-local-variable 'adaptive-fill-function) 'rst-adaptive-fill) + (set (make-local-variable 'fill-paragraph-handle-comment) nil) - ;; FIXME: No need to reset this. - ;; (set (make-local-variable 'indent-line-function) 'indent-relative) - - ;; The details of the following comment setup is important because it affects - ;; auto-fill, and it is pretty common in running text to have an ellipsis - ;; ("...") which trips because of the rest comment syntax (".. "). + ;; Comments (set (make-local-variable 'comment-start) ".. ") - (set (make-local-variable 'comment-start-skip) "^\\.\\. ") - (set (make-local-variable 'comment-multi-line) nil) + (set (make-local-variable 'comment-start-skip) + (rst-re 'lin-beg 'exm-tag 'bli-sfx)) + (set (make-local-variable 'comment-continue) " ") + (set (make-local-variable 'comment-multi-line) t) + (set (make-local-variable 'comment-use-syntax) nil) + ;; reStructuredText has not really a comment ender but nil is not really a + ;; permissible value + (set (make-local-variable 'comment-end) "") + (set (make-local-variable 'comment-end-skip) nil) - ;; Special variables - (make-local-variable 'rst-adornment-level-alist) + (set (make-local-variable 'comment-line-break-function) + 'rst-comment-line-break) + (set (make-local-variable 'comment-indent-function) + 'rst-comment-indent) + (set (make-local-variable 'comment-insert-comment-function) + 'rst-comment-insert-comment) + (set (make-local-variable 'comment-region-function) + 'rst-comment-region) + (set (make-local-variable 'uncomment-region-function) + 'rst-uncomment-region) ;; Font lock - (set (make-local-variable 'font-lock-defaults) - '(rst-font-lock-keywords-function - t nil nil nil - (font-lock-mark-block-function . mark-paragraph))) - ;; `jit-lock-mode' has been the default since Emacs-21.1, so there's no - ;; point messing around with font-lock-support-mode any more. - ;; (when (boundp 'font-lock-support-mode) - ;; ;; rst-mode has its own mind about font-lock-support-mode - ;; (make-local-variable 'font-lock-support-mode) - ;; ;; jit-lock-mode replaced lazy-lock-mode in GNU Emacs 21. - ;; (let ((jit-or-lazy-lock-mode - ;; (cond - ;; ((fboundp 'lazy-lock-mode) 'lazy-lock-mode) - ;; ((fboundp 'jit-lock-mode) 'jit-lock-mode) - ;; ;; if neither lazy-lock nor jit-lock is supported, - ;; ;; tell user and disable rst-mode-lazy - ;; (t (when rst-mode-lazy - ;; (message "Disabled lazy fontification, because no known support mode found.") - ;; (setq rst-mode-lazy nil)))))) - ;; (cond - ;; ((and (not rst-mode-lazy) (not font-lock-support-mode))) - ;; ;; No support mode set and none required - leave it alone - ;; ((or (not font-lock-support-mode) ;; No support mode set (but required) - ;; (symbolp font-lock-support-mode)) ;; or a fixed mode for all - ;; (setq font-lock-support-mode - ;; (list (cons 'rst-mode (and rst-mode-lazy jit-or-lazy-lock-mode)) - ;; (cons t font-lock-support-mode)))) - ;; ((and (listp font-lock-support-mode) - ;; (not (assoc 'rst-mode font-lock-support-mode))) - ;; ;; A list of modes missing rst-mode - ;; (setq font-lock-support-mode - ;; (cons (cons 'rst-mode (and rst-mode-lazy jit-or-lazy-lock-mode)) - ;; font-lock-support-mode)))))) - - ) + (setq font-lock-defaults + '(rst-font-lock-keywords + t nil nil nil + (font-lock-multiline . t) + (font-lock-mark-block-function . mark-paragraph) + ;; rst-mode does not need font-lock-support-mode because it's fast + ;; enough. In fact using `jit-lock-mode` slows things down + ;; considerably even if `rst-font-lock-extend-region` is in place and + ;; compiled. + ;;(font-lock-support-mode . nil) + )) + (add-hook 'font-lock-extend-region-functions 'rst-font-lock-extend-region t) + ;; Text after a changed line may need new fontification + (set (make-local-variable 'jit-lock-contextually) t)) ;;;###autoload (define-minor-mode rst-minor-mode @@ -462,31 +791,19 @@ for modes derived from Text mode, like Mail mode." ;; :abbrev-table rst-mode-abbrev-table ;; :syntax-table rst-mode-syntax-table - - - - -;; Bulleted item lists. -(defcustom rst-bullets - '(?- ?* ?+) - "List of all possible bullet characters for bulleted lists." - :group 'rst) - - - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Section Decoration Adjustment -;; ============================= +;; Section Adornment Adjustment +;; ============================ ;; ;; The following functions implement a smart automatic title sectioning feature. ;; The idea is that with the cursor sitting on a section title, we try to get as ;; much information from context and try to do the best thing automatically. ;; This function can be invoked many times and/or with prefix argument to rotate -;; between the various sectioning decorations. +;; between the various sectioning adornments. ;; ;; Definitions: the two forms of sectioning define semantically separate section -;; levels. A sectioning DECORATION consists in: +;; levels. A sectioning ADORNMENT consists in: ;; ;; - a CHARACTER ;; @@ -496,10 +813,7 @@ for modes derived from Text mode, like Mail mode." ;; how many characters and over-and-under style is hanging outside of the ;; title at the beginning and ending. ;; -;; Important note: an existing decoration must be formed by at least two -;; characters to be recognized. -;; -;; Here are two examples of decorations (| represents the window border, column +;; Here are two examples of adornments (| represents the window border, column ;; 0): ;; ;; | @@ -516,17 +830,15 @@ for modes derived from Text mode, like Mail mode." ;; - The underlining character that is used depends on context. The file is ;; scanned to find other sections and an appropriate character is selected. ;; If the function is invoked on a section that is complete, the character is -;; rotated among the existing section decorations. +;; rotated among the existing section adornments. ;; ;; Note that when rotating the characters, if we come to the end of the -;; hierarchy of decorations, the variable rst-preferred-decorations is -;; consulted to propose a new underline decoration, and if continued, we cycle -;; the decorations all over again. Set this variable to nil if you want to -;; limit the underlining character propositions to the existing decorations in +;; hierarchy of adornments, the variable rst-preferred-adornments is +;; consulted to propose a new underline adornment, and if continued, we cycle +;; the adornments all over again. Set this variable to nil if you want to +;; limit the underlining character propositions to the existing adornments in ;; the file. ;; -;; - A prefix argument can be used to alternate the style. -;; ;; - An underline/overline that is not extended to the column at which it should ;; be hanging is dubbed INCOMPLETE. For example:: ;; @@ -547,128 +859,108 @@ for modes derived from Text mode, like Mail mode." ;; ;; In over-and-under style, when alternating the style, a variable is ;; available to select how much default indent to use (it can be zero). Note -;; that if the current section decoration already has an indent, we don't +;; that if the current section adornment already has an indent, we don't ;; adjust it to the default, we rather use the current indent that is already ;; there for adjustment (unless we cycle, in which case we use the indent ;; that has been found previously). (defgroup rst-adjust nil - "Settings for adjustment and cycling of section title decorations." + "Settings for adjustment and cycling of section title adornments." :group 'rst :version "21.1") -(defcustom rst-preferred-decorations '( (?= over-and-under 1) - (?= simple 0) - (?- simple 0) - (?~ simple 0) - (?+ simple 0) - (?` simple 0) - (?# simple 0) - (?@ simple 0) ) - "Preferred ordering of section title decorations. +(define-obsolete-variable-alias + 'rst-preferred-decorations 'rst-preferred-adornments "r6506") +(defcustom rst-preferred-adornments '((?= over-and-under 1) + (?= simple 0) + (?- simple 0) + (?~ simple 0) + (?+ simple 0) + (?` simple 0) + (?# simple 0) + (?@ simple 0)) + "Preferred hierarchy of section title adornments. -This sequence is consulted to offer a new decoration suggestion +A list consisting of lists of the form (CHARACTER STYLE INDENT). +CHARACTER is the character used. STYLE is one of the symbols +OVER-AND-UNDER or SIMPLE. INDENT is an integer giving the wanted +indentation for STYLE OVER-AND-UNDER. CHARACTER and STYLE are +always used when a section adornment is described. In other +places t instead of a list stands for a transition. + +This sequence is consulted to offer a new adornment suggestion when we rotate the underlines at the end of the existing hierarchy of characters, or when there is no existing section -title in the file." - :group 'rst-adjust) +title in the file. +Set this to an empty list to use only the adornment found in the +file." + :group 'rst-adjust + :type `(repeat + (group :tag "Adornment specification" + (choice :tag "Adornment character" + ,@(mapcar (lambda (char) + (list 'const + :tag (char-to-string char) char)) + rst-adornment-chars)) + (radio :tag "Adornment type" + (const :tag "Overline and underline" over-and-under) + (const :tag "Underline only" simple)) + (integer :tag "Indentation for overline and underline type" + :value 0)))) (defcustom rst-default-indent 1 "Number of characters to indent the section title. -This is used for when toggling decoration styles, when switching -from a simple decoration style to a over-and-under decoration +This is used for when toggling adornment styles, when switching +from a simple adornment style to a over-and-under adornment style." - :group 'rst-adjust) + :group 'rst-adjust + :type '(integer)) -(defvar rst-section-text-regexp "^[ \t]*\\S-*\\w\\S-*" - "Regular expression for valid section title text.") - - -(defun rst-line-homogeneous-p (&optional accept-special) - "Return true if the line is homogeneous. - -Predicate that returns the unique char if the current line is -composed only of a single repeated non-whitespace character. -This returns the char even if there is whitespace at the -beginning of the line. - -If ACCEPT-SPECIAL is specified we do not ignore special sequences -which normally we would ignore when doing a search on many lines. -For example, normally we have cases to ignore commonly occurring -patterns, such as :: or ...; with the flag do not ignore them." - (save-excursion - (back-to-indentation) - (unless (looking-at "\n") - (let ((c (thing-at-point 'char))) - (if (and (looking-at (format "[%s]+[ \t]*$" c)) - (or accept-special - (and - ;; Common patterns. - (not (looking-at "::[ \t]*$")) - (not (looking-at "\\.\\.\\.[ \t]*$")) - ;; Discard one char line - (not (looking-at ".[ \t]*$")) - ))) - (string-to-char c)) - )) - )) - -(defun rst-line-homogeneous-nodent-p (&optional accept-special) - "Return true if the line is homogeneous with no indent. -See `rst-line-homogeneous-p' about ACCEPT-SPECIAL." - (save-excursion - (beginning-of-line) - (if (looking-at "^[ \t]+") - nil - (rst-line-homogeneous-p accept-special) - ))) - - -(defun rst-compare-decorations (deco1 deco2) - "Compare decorations. -Return true if both DECO1 and DECO2 decorations are equal, +(defun rst-compare-adornments (ado1 ado2) + "Compare adornments. +Return true if both ADO1 and ADO2 adornments are equal, according to restructured text semantics (only the character and the style are compared, the indentation does not matter)." - (and (eq (car deco1) (car deco2)) - (eq (cadr deco1) (cadr deco2)))) + (and (eq (car ado1) (car ado2)) + (eq (cadr ado1) (cadr ado2)))) -(defun rst-get-decoration-match (hier deco) - "Return the index (level) in hierarchy HIER of decoration DECO. +(defun rst-get-adornment-match (hier ado) + "Return the index (level) in hierarchy HIER of adornment ADO. This basically just searches for the item using the appropriate comparison and returns the index. Return nil if the item is not found." (let ((cur hier)) - (while (and cur (not (rst-compare-decorations (car cur) deco))) + (while (and cur (not (rst-compare-adornments (car cur) ado))) (setq cur (cdr cur))) cur)) -(defun rst-suggest-new-decoration (alldecos &optional prev) - "Suggest a new, different decoration from all that have been seen. +(defun rst-suggest-new-adornment (allados &optional prev) + "Suggest a new, different adornment from all that have been seen. -ALLDECOS is the set of all decorations, including the line numbers. -PREV is the optional previous decoration, in order to suggest a +ALLADOS is the set of all adornments, including the line numbers. +PREV is the optional previous adornment, in order to suggest a better match." - ;; For all the preferred decorations... + ;; For all the preferred adornments... (let* ( ;; If 'prev' is given, reorder the list to start searching after the ;; match. (fplist - (cdr (rst-get-decoration-match rst-preferred-decorations prev))) + (cdr (rst-get-adornment-match rst-preferred-adornments prev))) ;; List of candidates to search. - (curpotential (append fplist rst-preferred-decorations))) + (curpotential (append fplist rst-preferred-adornments))) (while - ;; For all the decorations... - (let ((cur alldecos) + ;; For all the adornments... + (let ((cur allados) found) (while (and cur (not found)) - (if (rst-compare-decorations (car cur) (car curpotential)) + (if (rst-compare-adornments (car cur) (car curpotential)) ;; Found it! (setq found (car curpotential)) (setq cur (cdr cur)))) @@ -684,7 +976,7 @@ better match." (line-beginning-position 2))) (defun rst-update-section (char style &optional indent) - "Unconditionally update the style of a section decoration. + "Unconditionally update the style of a section adornment. Do this using the given character CHAR, with STYLE 'simple or 'over-and-under, and with indent INDENT. If the STYLE @@ -692,11 +984,9 @@ is 'simple, whitespace before the title is removed (indent is always assumed to be 0). If there are existing overline and/or underline from the -existing decoration, they are removed before adding the -requested decoration." - - (interactive) - (end-of-line) +existing adornment, they are removed before adding the +requested adornment." + (end-of-line) (let ((marker (point-marker)) len) @@ -713,21 +1003,20 @@ requested decoration." ;; Set the current column, we're at the end of the title line (setq len (+ (current-column) indent)) - ;; Remove previous line if it consists only of a single repeated character + ;; Remove previous line if it is an adornment (save-excursion (forward-line -1) - (and (rst-line-homogeneous-p 1) - ;; Avoid removing the underline of a title right above us. - (save-excursion (forward-line -1) - (not (looking-at rst-section-text-regexp))) - (rst-delete-entire-line))) + (if (and (looking-at (rst-re 'ado-beg-2-1)) + ;; Avoid removing the underline of a title right above us. + (save-excursion (forward-line -1) + (not (looking-at (rst-re 'ttl-beg))))) + (rst-delete-entire-line))) - ;; Remove following line if it consists only of a single repeated - ;; character + ;; Remove following line if it is an adornment (save-excursion (forward-line +1) - (and (rst-line-homogeneous-p 1) - (rst-delete-entire-line)) + (if (looking-at (rst-re 'ado-beg-2-1)) + (rst-delete-entire-line)) ;; Add a newline if we're at the end of the buffer, for the subsequence ;; inserting of the underline (if (= (point) (buffer-end 1)) @@ -749,186 +1038,277 @@ requested decoration." (goto-char marker) )) +(defun rst-classify-adornment (adornment end) + "Classify adornment for section titles and transitions. +ADORNMENT is the complete adornment string as found in the buffer +with optional trailing whitespace. END is the point after the +last character of ADORNMENT. -(defun rst-normalize-cursor-position () - "Normalize the cursor position. -If the cursor is on a decoration line or an empty line , place it -on the section title line (at the end). Returns the line offset -by which the cursor was moved. This works both over or under a -line." - (if (save-excursion (beginning-of-line) - (or (rst-line-homogeneous-p 1) - (looking-at "^[ \t]*$"))) - (progn - (beginning-of-line) - (cond - ((save-excursion (forward-line -1) - (beginning-of-line) - (and (looking-at rst-section-text-regexp) - (not (rst-line-homogeneous-p 1)))) - (progn (forward-line -1) -1)) - ((save-excursion (forward-line +1) - (beginning-of-line) - (and (looking-at rst-section-text-regexp) - (not (rst-line-homogeneous-p 1)))) - (progn (forward-line +1) +1)) - (t 0))) - 0 )) +Return a list. The first entry is t for a transition or a +cons (CHARACTER . STYLE). Check `rst-preferred-adornments' for +the meaning of CHARACTER and STYLE. +The remaining list forms four match groups as returned by +`match-data'. Match group 0 matches the whole construct. Match +group 1 matches the overline adornment if present. Match group 2 +matches the section title text or the transition. Match group 3 +matches the underline adornment. -(defun rst-find-all-decorations () - "Find all the decorations in the file. -Return a list of (line, decoration) pairs. Each decoration -consists in a (char, style, indent) triple. +Return nil if no syntactically valid adornment is found." + (save-excursion + (save-match-data + (when (string-match (rst-re 'ado-beg-2-1) adornment) + (goto-char end) + (let* ((ado-ch (string-to-char (match-string 2 adornment))) + (ado-re (rst-re ado-ch 'adorep3-hlp)) + (end-pnt (point)) + (beg-pnt (progn + (forward-line 0) + (point))) + (nxt-emp ; Next line inexistant or empty + (save-excursion + (or (not (zerop (forward-line 1))) + (looking-at (rst-re 'lin-end))))) + (prv-emp ; Previous line inexistant or empty + (save-excursion + (or (not (zerop (forward-line -1))) + (looking-at (rst-re 'lin-end))))) + (ttl-blw ; Title found below starting here + (save-excursion + (and + (zerop (forward-line 1)) + (looking-at (rst-re 'ttl-beg)) + (point)))) + (ttl-abv ; Title found above starting here + (save-excursion + (and + (zerop (forward-line -1)) + (looking-at (rst-re 'ttl-beg)) + (point)))) + (und-fnd ; Matching underline found starting here + (save-excursion + (and ttl-blw + (zerop (forward-line 2)) + (looking-at (rst-re ado-re 'lin-end)) + (point)))) + (ovr-fnd ; Matching overline found starting here + (save-excursion + (and ttl-abv + (zerop (forward-line -2)) + (looking-at (rst-re ado-re 'lin-end)) + (point)))) + key beg-ovr end-ovr beg-txt end-txt beg-und end-und) + (cond + ((and nxt-emp prv-emp) + ;; A transition + (setq key t + beg-txt beg-pnt + end-txt end-pnt)) + ((or und-fnd ovr-fnd) + ;; An overline with an underline + (setq key (cons ado-ch 'over-and-under)) + (let (;; Prefer overline match over underline match + (und-pnt (if ovr-fnd beg-pnt und-fnd)) + (ovr-pnt (if ovr-fnd ovr-fnd beg-pnt)) + (txt-pnt (if ovr-fnd ttl-abv ttl-blw))) + (goto-char ovr-pnt) + (setq beg-ovr (point) + end-ovr (line-end-position)) + (goto-char txt-pnt) + (setq beg-txt (point) + end-txt (line-end-position)) + (goto-char und-pnt) + (setq beg-und (point) + end-und (line-end-position)))) + (ttl-abv + ;; An underline + (setq key (cons ado-ch 'simple) + beg-und beg-pnt + end-und end-pnt) + (goto-char ttl-abv) + (setq beg-txt (point) + end-txt (line-end-position))) + (t + ;; Invalid adornment + (setq key nil))) + (if key + (list key + (or beg-ovr beg-txt beg-und) + (or end-und end-txt end-ovr) + beg-ovr end-ovr beg-txt end-txt beg-und end-und))))))) -This function does not detect the hierarchy of decorations, it -just finds all of them in a file. You can then invoke another -function to remove redundancies and inconsistencies." +(defun rst-find-title-line () + "Find a section title line around point and return its characteristics. +If the point is on an adornment line find the respective title +line. If the point is on an empty line check previous or next +line whether it is a suitable title line and use it if so. If +point is on a suitable title line use it. - (let ((positions ()) - (curline 1)) - ;; Iterate over all the section titles/decorations in the file. - (save-excursion - (goto-char (point-min)) - (while (< (point) (buffer-end 1)) - (if (rst-line-homogeneous-nodent-p) - (progn - (setq curline (+ curline (rst-normalize-cursor-position))) +If no title line is found return nil. - ;; Here we have found a potential site for a decoration, - ;; characterize it. - (let ((deco (rst-get-decoration))) - (if (cadr deco) ;; Style is existing. - ;; Found a real decoration site. - (progn - (push (cons curline deco) positions) - ;; Push beyond the underline. - (forward-line 1) - (setq curline (+ curline 1)) - ))) - )) - (forward-line 1) - (setq curline (+ curline 1)) - )) - (reverse positions))) +Otherwise return as `rst-classify-adornment' does. However, if +the title line has no syntactically valid adornment STYLE is nil +in the first element. If there is no adornment around the title +CHARACTER is also nil and match groups for overline and underline +are nil." + (save-excursion + (forward-line 0) + (let ((orig-pnt (point)) + (orig-end (line-end-position))) + (cond + ((looking-at (rst-re 'ado-beg-2-1)) + (let ((char (string-to-char (match-string-no-properties 2))) + (r (rst-classify-adornment (match-string-no-properties 0) + (match-end 0)))) + (cond + ((not r) + ;; Invalid adornment - check whether this is an incomplete overline + (if (and + (zerop (forward-line 1)) + (looking-at (rst-re 'ttl-beg))) + (list (cons char nil) orig-pnt (line-end-position) + orig-pnt orig-end (point) (line-end-position) nil nil))) + ((consp (car r)) + ;; A section title - not a transition + r)))) + ((looking-at (rst-re 'lin-end)) + (or + (save-excursion + (if (and (zerop (forward-line -1)) + (looking-at (rst-re 'ttl-beg))) + (list (cons nil nil) (point) (line-end-position) + nil nil (point) (line-end-position) nil nil))) + (save-excursion + (if (and (zerop (forward-line 1)) + (looking-at (rst-re 'ttl-beg))) + (list (cons nil nil) (point) (line-end-position) + nil nil (point) (line-end-position) nil nil))))) + ((looking-at (rst-re 'ttl-beg)) + ;; Try to use the underline + (let ((r (rst-classify-adornment + (buffer-substring-no-properties + (line-beginning-position 2) (line-end-position 2)) + (line-end-position 2)))) + (if r + r + ;; No valid adornment found + (list (cons nil nil) (point) (line-end-position) + nil nil (point) (line-end-position) nil nil)))))))) +;; The following function and variables are used to maintain information about +;; current section adornment in a buffer local cache. Thus they can be used for +;; font-locking and manipulation commands. -(defun rst-infer-hierarchy (decorations) - "Build a hierarchy of decorations using the list of given DECORATIONS. +(defun rst-reset-section-caches () + "Reset all section cache variables. +Should be called by interactive functions which deal with sections." + (setq rst-all-sections nil + rst-section-hierarchy nil)) -This function expects a list of (char, style, indent) decoration +(defvar rst-all-sections nil + "All section adornments in the buffer as found by `rst-find-all-adornments'. +t when no section adornments were found.") +(make-variable-buffer-local 'rst-all-sections) + +;; FIXME: If this variable is set to a different value font-locking of section +;; headers is wrong +(defvar rst-section-hierarchy nil + "Section hierarchy in the buffer as determined by `rst-get-hierarchy'. +t when no section adornments were found. Value depends on +`rst-all-sections'.") +(make-variable-buffer-local 'rst-section-hierarchy) + +(defun rst-find-all-adornments () + "Return all the section adornments in the current buffer. +Return a list of (LINE . ADORNMENT) with ascending LINE where +LINE is the line containing the section title. ADORNMENT consists +of a (CHARACTER STYLE INDENT) triple as described for +`rst-preferred-adornments'. + +Uses and sets `rst-all-sections'." + (unless rst-all-sections + (let (positions) + ;; Iterate over all the section titles/adornments in the file. + (save-excursion + (goto-char (point-min)) + (while (re-search-forward (rst-re 'ado-beg-2-1) nil t) + (let ((ado-data (rst-classify-adornment + (match-string-no-properties 0) (point)))) + (when (and ado-data + (consp (car ado-data))) ; Ignore transitions + (set-match-data (cdr ado-data)) + (goto-char (match-beginning 2)) ; Goto the title start + (push (cons (1+ (count-lines (point-min) (point))) + (list (caar ado-data) + (cdar ado-data) + (current-indentation))) + positions) + (goto-char (match-end 0))))) ; Go beyond the whole thing + (setq positions (nreverse positions)) + (setq rst-all-sections (or positions t))))) + (if (eq rst-all-sections t) + nil + rst-all-sections)) + +(defun rst-infer-hierarchy (adornments) + "Build a hierarchy of adornments using the list of given ADORNMENTS. + +ADORNMENTS is a list of (CHARACTER STYLE INDENT) adornment specifications, in order that they appear in a file, and will -infer a hierarchy of section levels by removing decorations that -have already been seen in a forward traversal of the decorations, -comparing just the character and style. +infer a hierarchy of section levels by removing adornments that +have already been seen in a forward traversal of the adornments, +comparing just CHARACTER and STYLE. -Similarly returns a list of (char, style, indent), where each +Similarly returns a list of (CHARACTER STYLE INDENT), where each list element should be unique." - - (let ((hierarchy-alist (list))) - (dolist (x decorations) + (let (hierarchy-alist) + (dolist (x adornments) (let ((char (car x)) (style (cadr x))) (unless (assoc (cons char style) hierarchy-alist) - (push (cons (cons char style) x) hierarchy-alist)) - )) + (push (cons (cons char style) x) hierarchy-alist)))) + (mapcar 'cdr (nreverse hierarchy-alist)))) - (mapcar 'cdr (nreverse hierarchy-alist)) - )) - - -(defun rst-get-hierarchy (&optional alldecos ignore) +(defun rst-get-hierarchy (&optional ignore) "Return the hierarchy of section titles in the file. -Return a list of decorations that represents the hierarchy of -section titles in the file. Reuse the list of decorations -already computed in ALLDECOS if present. If the line number in -IGNORE is specified, the decoration found on that line (if there -is one) is not taken into account when building the hierarchy." - (let ((all (or alldecos (rst-find-all-decorations)))) - (setq all (assq-delete-all ignore all)) - (rst-infer-hierarchy (mapcar 'cdr all)))) +Return a list of adornments that represents the hierarchy of +section titles in the file. Each element consists of (CHARACTER +STYLE INDENT) as described for `rst-find-all-adornments'. If the +line number in IGNORE is specified, a possibly adornment found on +that line is not taken into account when building the hierarchy. +Uses and sets `rst-section-hierarchy' unless IGNORE is given." + (if (and (not ignore) rst-section-hierarchy) + (if (eq rst-section-hierarchy t) + nil + rst-section-hierarchy) + (let ((r (rst-infer-hierarchy + (mapcar 'cdr + (assq-delete-all + ignore + (rst-find-all-adornments)))))) + (setq rst-section-hierarchy + (if ignore + ;; Clear cache reflecting that a possible update is not + ;; reflected + nil + (or r t))) + r))) -(defun rst-get-decoration (&optional point) - "Get the decoration at POINT. - -Looks around point and finds the characteristics of the -decoration that is found there. Assumes that the cursor is -already placed on the title line (and not on the overline or -underline). - -This function returns a (char, style, indent) triple. If the -characters of overline and underline are different, return -the underline character. The indent is always calculated. -A decoration can be said to exist if the style is not nil. - -A point can be specified to go to the given location before -extracting the decoration." - - (let (char style) - (save-excursion - (if point (goto-char point)) - (beginning-of-line) - (if (looking-at rst-section-text-regexp) - (let* ((over (save-excursion - (forward-line -1) - (rst-line-homogeneous-nodent-p))) - - (under (save-excursion - (forward-line +1) - (rst-line-homogeneous-nodent-p))) - ) - - ;; Check that the line above the overline is not part of a title - ;; above it. - (if (and over - (save-excursion - (and (equal (forward-line -2) 0) - (looking-at rst-section-text-regexp)))) - (setq over nil)) - - (cond - ;; No decoration found, leave all return values nil. - ((and (eq over nil) (eq under nil))) - - ;; Overline only, leave all return values nil. - ;; - ;; Note: we don't return the overline character, but it could - ;; perhaps in some cases be used to do something. - ((and over (eq under nil))) - - ;; Underline only. - ((and under (eq over nil)) - (setq char under - style 'simple)) - - ;; Both overline and underline. - (t - (setq char under - style 'over-and-under))))) - ;; Return values. - (list char style - ;; Find indentation. - (save-excursion (back-to-indentation) (current-column)))))) - - -(defun rst-get-decorations-around (&optional alldecos) - "Return the decorations around point. - -Given the list of all decorations ALLDECOS (with positions), -find the decorations before and after the given point. -A list of the previous and next decorations is returned." - (let* ((all (or alldecos (rst-find-all-decorations))) +(defun rst-get-adornments-around () + "Return the adornments around point. +Return a list of the previous and next adornments." + (let* ((all (rst-find-all-adornments)) (curline (line-number-at-pos)) prev next (cur all)) - ;; Search for the decorations around the current line. + ;; Search for the adornments around the current line. (while (and cur (< (caar cur) curline)) (setq prev cur cur (cdr cur))) - ;; 'cur' is the following decoration. + ;; 'cur' is the following adornment. (if (and cur (caar cur)) (setq next (if (= curline (caar cur)) (cdr cur) cur))) @@ -937,23 +1317,21 @@ A list of the previous and next decorations is returned." )) -(defun rst-decoration-complete-p (deco) - "Return true if the decoration DECO around point is complete." +(defun rst-adornment-complete-p (ado) + "Return true if the adornment ADO around point is complete." ;; Note: we assume that the detection of the overline as being the underline ;; of a preceding title has already been detected, and has been eliminated - ;; from the decoration that is given to us. + ;; from the adornment that is given to us. ;; There is some sectioning already present, so check if the current ;; sectioning is complete and correct. - (let* ((char (car deco)) - (style (cadr deco)) - (indent (caddr deco)) + (let* ((char (car ado)) + (style (cadr ado)) + (indent (caddr ado)) (endcol (save-excursion (end-of-line) (current-column))) ) (if char - (let ((exps (concat "^" - (regexp-quote (make-string (+ endcol indent) char)) - "$"))) + (let ((exps (rst-re "^" char (format "\\{%d\\}" (+ endcol indent)) "$"))) (and (save-excursion (forward-line +1) (beginning-of-line) @@ -966,57 +1344,56 @@ A list of the previous and next decorations is returned." )) -(defun rst-get-next-decoration - (curdeco hier &optional suggestion reverse-direction) - "Get the next decoration for CURDECO, in given hierarchy HIER. -If suggesting, suggest for new decoration SUGGESTION. +(defun rst-get-next-adornment + (curado hier &optional suggestion reverse-direction) + "Get the next adornment for CURADO, in given hierarchy HIER. +If suggesting, suggest for new adornment SUGGESTION. REVERSE-DIRECTION is used to reverse the cycling order." (let* ( - (char (car curdeco)) - (style (cadr curdeco)) + (char (car curado)) + (style (cadr curado)) - ;; Build a new list of decorations for the rotation. - (rotdecos + ;; Build a new list of adornments for the rotation. + (rotados (append hier - ;; Suggest a new decoration. + ;; Suggest a new adornment. (list suggestion - ;; If nothing to suggest, use first decoration. + ;; If nothing to suggest, use first adornment. (car hier)))) ) (or - ;; Search for next decoration. + ;; Search for next adornment. (cadr - (let ((cur (if reverse-direction rotdecos - (reverse rotdecos)))) + (let ((cur (if reverse-direction rotados + (reverse rotados)))) (while (and cur (not (and (eq char (caar cur)) (eq style (cadar cur))))) (setq cur (cdr cur))) cur)) - ;; If not found, take the first of all decorations. + ;; If not found, take the first of all adornments. suggestion ))) -(defun rst-adjust () - "Auto-adjust the decoration around point. +;; FIXME: A line "``/`` full" is not accepted as a section title +(defun rst-adjust (pfxarg) + "Auto-adjust the adornment around point. -Adjust/rotate the section decoration for the section title -around point or promote/demote the decorations inside the region, +Adjust/rotate the section adornment for the section title +around point or promote/demote the adornments inside the region, depending on if the region is active. This function is meant to be invoked possibly multiple times, and can vary its behavior with a positive prefix argument (toggle style), or with a negative prefix argument (alternate behavior). -This function is the main focus of this module and is a bit of a -swiss knife. It is meant as the single most essential function -to be bound to invoke to adjust the decorations of a section -title in restructuredtext. It tries to deal with all the -possible cases gracefully and to do `the right thing' in all -cases. +This function is a bit of a swiss knife. It is meant to adjust +the adornments of a section title in reStructuredText. It tries +to deal with all the possible cases gracefully and to do `the +right thing' in all cases. -See the documentations of `rst-adjust-decoration' and +See the documentations of `rst-adjust-adornment-work' and `rst-promote-region' for full details. Prefix Arguments @@ -1025,28 +1402,24 @@ Prefix Arguments The method can take either (but not both) of a. a (non-negative) prefix argument, which means to toggle the - decoration style. Invoke with a prefix arg for example; + adornment style. Invoke with a prefix arg for example; b. a negative numerical argument, which generally inverts the direction of search in the file or hierarchy. Invoke with C-- prefix for example." - (interactive) + (interactive "P") (let* (;; Save our original position on the current line. (origpt (point-marker)) - ;; Parse the positive and negative prefix arguments. - (reverse-direction - (and current-prefix-arg - (< (prefix-numeric-value current-prefix-arg) 0))) - (toggle-style - (and current-prefix-arg (not reverse-direction)))) + (reverse-direction (and pfxarg (< (prefix-numeric-value pfxarg) 0))) + (toggle-style (and pfxarg (not reverse-direction)))) (if (rst-portable-mark-active-p) - ;; Adjust decorations within region. - (rst-promote-region current-prefix-arg) - ;; Adjust decoration around point. - (rst-adjust-decoration toggle-style reverse-direction)) + ;; Adjust adornments within region. + (rst-promote-region (and pfxarg t)) + ;; Adjust adornment around point. + (rst-adjust-adornment-work toggle-style reverse-direction)) ;; Run the hooks to run after adjusting. (run-hooks 'rst-adjust-hook) @@ -1056,18 +1429,32 @@ b. a negative numerical argument, which generally inverts the )) -(defvar rst-adjust-hook nil - "Hooks to be run after running `rst-adjust'.") +(defcustom rst-adjust-hook nil + "Hooks to be run after running `rst-adjust'." + :group 'rst-adjust + :type '(hook) + :package-version '(rst . "1.1.0")) -(defvar rst-new-decoration-down nil - "Non-nil if new decoration is added deeper. -If non-nil, a new decoration being added will be initialized to -be one level down from the previous decoration. If nil, a new -decoration will be equal to the level of the previous -decoration.") +(defcustom rst-new-adornment-down nil + "Controls level of new adornment for section headers." + :group 'rst-adjust + :type '(choice + (const :tag "Same level as previous one" nil) + (const :tag "One level down relative to the previous one" t)) + :package-version '(rst . "1.1.0")) -(defun rst-adjust-decoration (&optional toggle-style reverse-direction) -"Adjust/rotate the section decoration for the section title around point. +(defun rst-adjust-adornment (pfxarg) + "Call `rst-adjust-adornment-work' interactively. + +Keep this for compatibility for older bindings (are there any?)." + (interactive "P") + + (let* ((reverse-direction (and pfxarg (< (prefix-numeric-value pfxarg) 0))) + (toggle-style (and pfxarg (not reverse-direction)))) + (rst-adjust-adornment-work toggle-style reverse-direction))) + +(defun rst-adjust-adornment-work (toggle-style reverse-direction) +"Adjust/rotate the section adornment for the section title around point. This function is meant to be invoked possibly multiple times, and can vary its behavior with a true TOGGLE-STYLE argument, or with @@ -1080,13 +1467,13 @@ The next action it takes depends on context around the point, and it is meant to be invoked possibly more than once to rotate among the various possibilities. Basically, this function deals with: -- adding a decoration if the title does not have one; +- adding a adornment if the title does not have one; - adjusting the length of the underline characters to fit a modified title; -- rotating the decoration in the set of already existing - sectioning decorations used in the file; +- rotating the adornment in the set of already existing + sectioning adornments used in the file; - switching between simple and over-and-under styles. @@ -1095,10 +1482,10 @@ invoke the method and it will do the most obvious thing that you would expect. -Decoration Definitions -====================== +Adornment Definitions +===================== -The decorations consist in +The adornments consist in 1. a CHARACTER @@ -1119,71 +1506,69 @@ Here are the gory details of the algorithm (it seems quite complicated, but really, it does the most obvious thing in all the particular cases): -Before applying the decoration change, the cursor is placed on +Before applying the adornment change, the cursor is placed on the closest line that could contain a section title. -Case 1: No Decoration ---------------------- +Case 1: No Adornment +-------------------- -If the current line has no decoration around it, +If the current line has no adornment around it, -- search backwards for the last previous decoration, and apply - the decoration one level lower to the current line. If there - is no defined level below this previous decoration, we suggest - the most appropriate of the `rst-preferred-decorations'. +- search backwards for the last previous adornment, and apply + the adornment one level lower to the current line. If there + is no defined level below this previous adornment, we suggest + the most appropriate of the `rst-preferred-adornments'. If REVERSE-DIRECTION is true, we simply use the previous - decoration found directly. + adornment found directly. -- if there is no decoration found in the given direction, we use - the first of `rst-preferred-decorations'. +- if there is no adornment found in the given direction, we use + the first of `rst-preferred-adornments'. -The prefix argument forces a toggle of the prescribed decoration -style. +TOGGLE-STYLE forces a toggle of the prescribed adornment style. -Case 2: Incomplete Decoration ------------------------------ +Case 2: Incomplete Adornment +---------------------------- -If the current line does have an existing decoration, but the -decoration is incomplete, that is, the underline/overline does +If the current line does have an existing adornment, but the +adornment is incomplete, that is, the underline/overline does not extend to exactly the end of the title line (it is either too short or too long), we simply extend the length of the underlines/overlines to fit exactly the section title. -If the prefix argument is given, we toggle the style of the -decoration as well. +If TOGGLE-STYLE we toggle the style of the adornment as well. REVERSE-DIRECTION has no effect in this case. -Case 3: Complete Existing Decoration ------------------------------------- +Case 3: Complete Existing Adornment +----------------------------------- -If the decoration is complete (i.e. the underline (overline) +If the adornment is complete (i.e. the underline (overline) length is already adjusted to the end of the title line), we search/parse the file to establish the hierarchy of all the -decorations (making sure not to include the decoration around -point), and we rotate the current title's decoration from within +adornments (making sure not to include the adornment around +point), and we rotate the current title's adornment from within that list (by default, going *down* the hierarchy that is present in the file, i.e. to a lower section level). This is meant to be -used potentially multiple times, until the desired decoration is +used potentially multiple times, until the desired adornment is found around the title. If we hit the boundary of the hierarchy, exactly one choice from -the list of preferred decorations is suggested/chosen, the first -of those decoration that has not been seen in the file yet (and -not including the decoration around point), and the next +the list of preferred adornments is suggested/chosen, the first +of those adornment that has not been seen in the file yet (and +not including the adornment around point), and the next invocation rolls over to the other end of the hierarchy (i.e. it cycles). This allows you to avoid having to set which character to use. If REVERSE-DIRECTION is true, the effect is to change the -direction of rotation in the hierarchy of decorations, thus +direction of rotation in the hierarchy of adornments, thus instead going *up* the hierarchy. -However, if there is a non-negative prefix argument, we do not -rotate the decoration, but instead simply toggle the style of the -current decoration (this should be the most common way to toggle -the style of an existing complete decoration). +However, if TOGGLE-STYLE, we do not rotate the adornment, but +instead simply toggle the style of the current adornment (this +should be the most common way to toggle the style of an existing +complete adornment). Point Location @@ -1203,7 +1588,7 @@ Indented section titles such as :: My Title -------- -are invalid in restructuredtext and thus not recognized by the +are invalid in reStructuredText and thus not recognized by the parser. This code will thus not work in a way that would support indented sections (it would be ambiguous anyway). @@ -1213,166 +1598,103 @@ Joint Sections Section titles that are right next to each other may not be treated well. More work might be needed to support those, and -special conditions on the completeness of existing decorations +special conditions on the completeness of existing adornments might be required to make it non-ambiguous. -For now we assume that the decorations are disjoint, that is, -there is at least a single line between the titles/decoration -lines. - - -Suggested Binding -================= - -We suggest that you bind this function on C-=. It is close to -C-- so a negative argument can be easily specified with a flick -of the right hand fingers and the binding is unused in `text-mode'." - (interactive) - - ;; If we were invoked directly, parse the prefix arguments into the - ;; arguments of the function. - (if current-prefix-arg - (setq reverse-direction - (and current-prefix-arg - (< (prefix-numeric-value current-prefix-arg) 0)) - - toggle-style - (and current-prefix-arg (not reverse-direction)))) - - (let* (;; Check if we're on an underline around a section title, and move the - ;; cursor to the title if this is the case. - (moved (rst-normalize-cursor-position)) - - ;; Find the decoration and completeness around point. - (curdeco (rst-get-decoration)) - (char (car curdeco)) - (style (cadr curdeco)) - (indent (caddr curdeco)) - - ;; New values to be computed. - char-new style-new indent-new - ) - - ;; We've moved the cursor... if we're not looking at some text, we have - ;; nothing to do. - (if (save-excursion (beginning-of-line) - (looking-at rst-section-text-regexp)) - (progn - (cond - ;;------------------------------------------------------------------- - ;; Case 1: No Decoration - ((and (eq char nil) (eq style nil)) - - (let* ((alldecos (rst-find-all-decorations)) - - (around (rst-get-decorations-around alldecos)) - (prev (car around)) - cur - - (hier (rst-get-hierarchy alldecos)) - ) - - ;; Advance one level down. - (setq cur - (if prev - (if (not reverse-direction) - (or (funcall (if rst-new-decoration-down 'cadr 'car) - (rst-get-decoration-match hier prev)) - (rst-suggest-new-decoration hier prev)) - prev) - (copy-sequence (car rst-preferred-decorations)))) - - ;; Invert the style if requested. - (if toggle-style - (setcar (cdr cur) (if (eq (cadr cur) 'simple) - 'over-and-under 'simple)) ) - - (setq char-new (car cur) - style-new (cadr cur) - indent-new (caddr cur)) - )) - - ;;------------------------------------------------------------------- - ;; Case 2: Incomplete Decoration - ((not (rst-decoration-complete-p curdeco)) - - ;; Invert the style if requested. - (if toggle-style - (setq style (if (eq style 'simple) 'over-and-under 'simple))) - - (setq char-new char - style-new style - indent-new indent)) - - ;;------------------------------------------------------------------- - ;; Case 3: Complete Existing Decoration - (t - (if toggle-style - - ;; Simply switch the style of the current decoration. - (setq char-new char - style-new (if (eq style 'simple) 'over-and-under 'simple) - indent-new rst-default-indent) - - ;; Else, we rotate, ignoring the decoration around the current - ;; line... - (let* ((alldecos (rst-find-all-decorations)) - - (hier (rst-get-hierarchy alldecos (line-number-at-pos))) - - ;; Suggestion, in case we need to come up with something - ;; new - (suggestion (rst-suggest-new-decoration - hier - (car (rst-get-decorations-around alldecos)))) - - (nextdeco (rst-get-next-decoration - curdeco hier suggestion reverse-direction)) - - ) - - ;; Indent, if present, always overrides the prescribed indent. - (setq char-new (car nextdeco) - style-new (cadr nextdeco) - indent-new (caddr nextdeco)) - - ))) - ) - - ;; Override indent with present indent! - (setq indent-new (if (> indent 0) indent indent-new)) - - (if (and char-new style-new) - (rst-update-section char-new style-new indent-new)) - )) - - - ;; Correct the position of the cursor to more accurately reflect where it - ;; was located when the function was invoked. - (unless (= moved 0) - (forward-line (- moved)) - (end-of-line)) - - )) +For now we assume that the adornments are disjoint, that is, +there is at least a single line between the titles/adornment +lines." + (rst-reset-section-caches) + (let ((ttl-fnd (rst-find-title-line)) + (orig-pnt (point))) + (when ttl-fnd + (set-match-data (cdr ttl-fnd)) + (goto-char (match-beginning 2)) + (let* ((moved (- (line-number-at-pos) (line-number-at-pos orig-pnt))) + (char (caar ttl-fnd)) + (style (cdar ttl-fnd)) + (indent (current-indentation)) + (curado (list char style indent)) + char-new style-new indent-new) + (cond + ;;------------------------------------------------------------------- + ;; Case 1: No valid adornment + ((not style) + (let ((prev (car (rst-get-adornments-around))) + cur + (hier (rst-get-hierarchy))) + ;; Advance one level down. + (setq cur + (if prev + (if (or (and rst-new-adornment-down reverse-direction) + (and (not rst-new-adornment-down) + (not reverse-direction))) + prev + (or (cadr (rst-get-adornment-match hier prev)) + (rst-suggest-new-adornment hier prev))) + (copy-sequence (car rst-preferred-adornments)))) + ;; Invert the style if requested. + (if toggle-style + (setcar (cdr cur) (if (eq (cadr cur) 'simple) + 'over-and-under 'simple)) ) + (setq char-new (car cur) + style-new (cadr cur) + indent-new (caddr cur)))) + ;;------------------------------------------------------------------- + ;; Case 2: Incomplete Adornment + ((not (rst-adornment-complete-p curado)) + ;; Invert the style if requested. + (if toggle-style + (setq style (if (eq style 'simple) 'over-and-under 'simple))) + (setq char-new char + style-new style + indent-new indent)) + ;;------------------------------------------------------------------- + ;; Case 3: Complete Existing Adornment + (t + (if toggle-style + ;; Simply switch the style of the current adornment. + (setq char-new char + style-new (if (eq style 'simple) 'over-and-under 'simple) + indent-new rst-default-indent) + ;; Else, we rotate, ignoring the adornment around the current + ;; line... + (let* ((hier (rst-get-hierarchy (line-number-at-pos))) + ;; Suggestion, in case we need to come up with something new + (suggestion (rst-suggest-new-adornment + hier + (car (rst-get-adornments-around)))) + (nextado (rst-get-next-adornment + curado hier suggestion reverse-direction))) + ;; Indent, if present, always overrides the prescribed indent. + (setq char-new (car nextado) + style-new (cadr nextado) + indent-new (caddr nextado)))))) + ;; Override indent with present indent! + (setq indent-new (if (> indent 0) indent indent-new)) + (if (and char-new style-new) + (rst-update-section char-new style-new indent-new)) + ;; Correct the position of the cursor to more accurately reflect where + ;; it was located when the function was invoked. + (unless (zerop moved) + (forward-line (- moved)) + (end-of-line)))))) ;; Maintain an alias for compatibility. (defalias 'rst-adjust-section-title 'rst-adjust) -(defun rst-promote-region (&optional demote) +(defun rst-promote-region (demote) "Promote the section titles within the region. With argument DEMOTE or a prefix argument, demote the section titles instead. The algorithm used at the boundaries of the -hierarchy is similar to that used by `rst-adjust-decoration'." - (interactive) - - (let* ((demote (or current-prefix-arg demote)) - (alldecos (rst-find-all-decorations)) - (cur alldecos) - - (hier (rst-get-hierarchy alldecos)) - (suggestion (rst-suggest-new-decoration hier)) +hierarchy is similar to that used by `rst-adjust-adornment-work'." + (interactive "P") + (rst-reset-section-caches) + (let* ((cur (rst-find-all-adornments)) + (hier (rst-get-hierarchy)) + (suggestion (rst-suggest-new-adornment hier)) (region-begin-line (line-number-at-pos (region-beginning))) (region-end-line (line-number-at-pos (region-end))) @@ -1384,7 +1706,7 @@ hierarchy is similar to that used by `rst-adjust-decoration'." (while (and cur (< (caar cur) region-begin-line)) (setq cur (cdr cur))) - ;; Create a list of markers for all the decorations which are found within + ;; Create a list of markers for all the adornments which are found within ;; the region. (save-excursion (let (line) @@ -1396,34 +1718,34 @@ hierarchy is similar to that used by `rst-adjust-decoration'." ;; Apply modifications. (dolist (p marker-list) - ;; Go to the decoration to promote. - (goto-char (car p)) + ;; Go to the adornment to promote. + (goto-char (car p)) - ;; Update the decoration. - (apply 'rst-update-section - ;; Rotate the next decoration. - (rst-get-next-decoration - (cadr p) hier suggestion demote)) + ;; Update the adornment. + (apply 'rst-update-section + ;; Rotate the next adornment. + (rst-get-next-adornment + (cadr p) hier suggestion demote)) - ;; Clear marker to avoid slowing down the editing after we're done. - (set-marker (car p) nil)) + ;; Clear marker to avoid slowing down the editing after we're done. + (set-marker (car p) nil)) (setq deactivate-mark nil) ))) -(defun rst-display-decorations-hierarchy (&optional decorations) - "Display the current file's section title decorations hierarchy. -This function expects a list of (char, style, indent) triples in -DECORATIONS." +(defun rst-display-adornments-hierarchy (&optional adornments) + "Display the current file's section title adornments hierarchy. +This function expects a list of (CHARACTER STYLE INDENT) triples +in ADORNMENTS." (interactive) - - (if (not decorations) - (setq decorations (rst-get-hierarchy))) + (rst-reset-section-caches) + (if (not adornments) + (setq adornments (rst-get-hierarchy))) (with-output-to-temp-buffer "*rest section hierarchy*" (let ((level 1)) (with-current-buffer standard-output - (dolist (x decorations) + (dolist (x adornments) (insert (format "\nSection Level %d" level)) (apply 'rst-update-section x) (goto-char (point-max)) @@ -1437,32 +1759,30 @@ DECORATIONS." (let ((tail (member elem list))) (if tail (- (length list) (length tail))))) -(defun rst-straighten-decorations () - "Redo all the decorations in the current buffer. -This is done using our preferred set of decorations. This can be +(defun rst-straighten-adornments () + "Redo all the adornments in the current buffer. +This is done using our preferred set of adornments. This can be used, for example, when using somebody else's copy of a document, in order to adapt it to our preferred style." (interactive) + (rst-reset-section-caches) (save-excursion - (let* ((alldecos (rst-find-all-decorations)) - (hier (rst-get-hierarchy alldecos)) - - ;; Get a list of pairs of (level . marker) - (levels-and-markers (mapcar - (lambda (deco) - (cons (rst-position (cdr deco) hier) - (progn - (goto-char (point-min)) - (forward-line (1- (car deco))) - (point-marker)))) - alldecos)) - ) + (let (;; Get a list of pairs of (level . marker) + (levels-and-markers (mapcar + (lambda (ado) + (cons (rst-position (cdr ado) + (rst-get-hierarchy)) + (progn + (goto-char (point-min)) + (forward-line (1- (car ado))) + (point-marker)))) + (rst-find-all-adornments)))) (dolist (lm levels-and-markers) ;; Go to the appropriate position (goto-char (cdr lm)) ;; Apply the new styule - (apply 'rst-update-section (nth (car lm) rst-preferred-decorations)) + (apply 'rst-update-section (nth (car lm) rst-preferred-adornments)) ;; Reset the market to avoid slowing down editing until it gets GC'ed (set-marker (cdr lm) nil) @@ -1470,71 +1790,257 @@ in order to adapt it to our preferred style." ))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Insert list items +;; ================= -(defun rst-straighten-deco-spacing () - "Adjust the spacing before and after decorations in the entire document. -The spacing will be set to two blank lines before the first two -section levels, and one blank line before any of the other -section levels." -;; FIXME: we need to take care of subtitle at some point. - (interactive) - (save-excursion - (let* ((alldecos (rst-find-all-decorations))) +;================================================= +; Borrowed from a2r.el (version 1.3), by Lawrence Mitchell +; I needed to make some tiny changes to the functions, so I put it here. +; -- Wei-Wei Guo - ;; Work the list from the end, so that we don't have to use markers to - ;; adjust for the changes in the document. - (dolist (deco (nreverse alldecos)) - ;; Go to the appropriate position. - (goto-char (point-min)) - (forward-line (1- (car deco))) - (insert "@\n") -;; FIXME: todo, we - ) - ))) +(defconst rst-arabic-to-roman + '((1000 . "M") (900 . "CM") (500 . "D") (400 . "CD") + (100 . "C") (90 . "XC") (50 . "L") (40 . "XL") + (10 . "X") (9 . "IX") (5 . "V") (4 . "IV") + (1 . "I")) + "List of maps between Arabic numbers and their Roman numeral equivalents.") +(defun rst-arabic-to-roman (num &optional arg) + "Convert Arabic number NUM to its Roman numeral representation. + +Obviously, NUM must be greater than zero. Don't blame me, blame the +Romans, I mean \"what have the Romans ever _done_ for /us/?\" (with +apologies to Monty Python). +If optional prefix ARG is non-nil, insert in current buffer." + (let ((map rst-arabic-to-roman) + res) + (while (and map (> num 0)) + (if (or (= num (caar map)) + (> num (caar map))) + (setq res (concat res (cdar map)) + num (- num (caar map))) + (setq map (cdr map)))) + res)) + +(defun rst-roman-to-arabic (string &optional arg) + "Convert STRING of Roman numerals to an Arabic number. + +If STRING contains a letter which isn't a valid Roman numeral, the rest +of the string from that point onwards is ignored. + +Hence: +MMD == 2500 +and +MMDFLXXVI == 2500. +If optional ARG is non-nil, insert in current buffer." + (let ((res 0) + (map rst-arabic-to-roman)) + (while map + (if (string-match (concat "^" (cdar map)) string) + (setq res (+ res (caar map)) + string (replace-match "" nil t string)) + (setq map (cdr map)))) + res)) +;================================================= (defun rst-find-pfx-in-region (beg end pfx-re) "Find all the positions of prefixes in region between BEG and END. -This is used to find bullets and enumerated list items. PFX-RE -is a regular expression for matching the lines with items." +This is used to find bullets and enumerated list items. PFX-RE is +a regular expression for matching the lines after indentation +with items. Returns a list of cons cells consisting of the point +and the column of the point." (let ((pfx ())) (save-excursion (goto-char beg) (while (< (point) end) (back-to-indentation) (when (and - (looking-at pfx-re) + (looking-at pfx-re) ; pfx found and... (let ((pfx-col (current-column))) (save-excursion - (forward-line -1) + (forward-line -1) ; ...previous line is... (back-to-indentation) - (or (looking-at "^[ \t]*$") - (> (current-column) pfx-col) + (or (looking-at (rst-re 'lin-end)) ; ...empty, + (> (current-column) pfx-col) ; ...deeper level, or (and (= (current-column) pfx-col) - (looking-at pfx-re)))))) + (looking-at pfx-re)))))) ; ...pfx at same level (push (cons (point) (current-column)) pfx)) (forward-line 1)) ) (nreverse pfx))) -(defvar rst-re-bullets - (format "\\([%s][ \t]\\)[^ \t]" (regexp-quote (concat rst-bullets))) - "Regexp for finding bullets.") +(defun rst-insert-list-pos (newitem) + "Arrange relative position of a newly inserted list item. -;; (defvar rst-re-enumerations -;; "\\(\\(#\\|[0-9]+\\)\\.[ \t]\\)[^ \t]" -;; "Regexp for finding bullets.") +Adding a new list might consider three situations: -(defvar rst-re-items - (format "\\(%s\\|%s\\)[^ \t]" - (format "[%s][ \t]" (regexp-quote (concat rst-bullets))) - "\\(#\\|[0-9]+\\)\\.[ \t]") - "Regexp for finding bullets.") + (a) Current line is a blank line. + (b) Previous line is a blank line. + (c) Following line is a blank line. -(defvar rst-preferred-bullets - '(?- ?* ?+) - "List of favorite bullets to set for straightening bullets.") +When (a) and (b), just add the new list at current line. + +when (a) and not (b), a blank line is added before adding the new list. + +When not (a), first forward point to the end of the line, and add two +blank lines, then add the new list. + +Other situations are just ignored and left to users themselves." + (if (save-excursion + (beginning-of-line) + (looking-at (rst-re 'lin-end))) + (if (save-excursion + (forward-line -1) + (looking-at (rst-re 'lin-end))) + (insert newitem " ") + (insert "\n" newitem " ")) + (end-of-line) + (insert "\n\n" newitem " "))) + +(defvar rst-initial-enums + (let (vals) + (dolist (fmt '("%s." "(%s)" "%s)")) + (dolist (c '("1" "a" "A" "I" "i")) + (push (format fmt c) vals))) + (cons "#." (nreverse vals))) + "List of initial enumerations.") + +(defvar rst-initial-items + (append (mapcar 'char-to-string rst-bullets) rst-initial-enums) + "List of initial items. It's collection of bullets and enumerations.") + +(defun rst-insert-list-new-item () + "Insert a new list item. + +User is asked to select the item style first, for example (a), i), +. Use TAB +for completition and choices. + +If user selects bullets or #, it's just added with position arranged by +`rst-insert-list-pos'. + +If user selects enumerations, a further prompt is given. User need to input a +starting item, for example 'e' for 'A)' style. The position is also arranged by +`rst-insert-list-pos'." + (interactive) + ;; FIXME: Make this comply to `interactive' standards + (let* ((itemstyle (completing-read + "Select preferred item style [#.]: " + rst-initial-items nil t nil nil "#.")) + (cnt (if (string-match (rst-re 'cntexp-tag) itemstyle) + (match-string 0 itemstyle))) + (no + (save-match-data + ;; FIXME: Make this comply to `interactive' standards + (cond + ((equal cnt "a") + (let ((itemno (read-string "Give starting value [a]: " + nil nil "a"))) + (downcase (substring itemno 0 1)))) + ((equal cnt "A") + (let ((itemno (read-string "Give starting value [A]: " + nil nil "A"))) + (upcase (substring itemno 0 1)))) + ((equal cnt "I") + (let ((itemno (read-number "Give starting value [1]: " 1))) + (rst-arabic-to-roman itemno))) + ((equal cnt "i") + (let ((itemno (read-number "Give starting value [1]: " 1))) + (downcase (rst-arabic-to-roman itemno)))) + ((equal cnt "1") + (let ((itemno (read-number "Give starting value [1]: " 1))) + (number-to-string itemno))))))) + (if no + (setq itemstyle (replace-match no t t itemstyle))) + (rst-insert-list-pos itemstyle))) + +(defcustom rst-preferred-bullets + '(?* ?- ?+) + "List of favorite bullets." + :group 'rst + :type `(repeat + (choice ,@(mapcar (lambda (char) + (list 'const + :tag (char-to-string char) char)) + rst-bullets))) + :package-version '(rst . "1.1.0")) + +(defun rst-insert-list-continue (curitem prefer-roman) + "Insert a list item with list start CURITEM including its indentation level." + (end-of-line) + (insert + "\n" ; FIXME: Separating lines must be possible + (cond + ((string-match (rst-re '(:alt enmaut-tag + bul-tag)) curitem) + curitem) + ((string-match (rst-re 'num-tag) curitem) + (replace-match (number-to-string + (1+ (string-to-number (match-string 0 curitem)))) + nil nil curitem)) + ((and (string-match (rst-re 'rom-tag) curitem) + (save-match-data + (if (string-match (rst-re 'ltr-tag) curitem) ; Also a letter tag + (save-excursion + ;; FIXME: Assumes one line list items without separating + ;; empty lines + (if (and (zerop (forward-line -1)) + (looking-at (rst-re 'enmexp-beg))) + (string-match + (rst-re 'rom-tag) + (match-string 0)) ; Previous was a roman tag + prefer-roman)) ; Don't know - use flag + t))) ; Not a letter tag + (replace-match + (let* ((old (match-string 0 curitem)) + (new (save-match-data + (rst-arabic-to-roman + (1+ (rst-roman-to-arabic + (upcase old))))))) + (if (equal old (upcase old)) + (upcase new) + (downcase new))) + t nil curitem)) + ((string-match (rst-re 'ltr-tag) curitem) + (replace-match (char-to-string + (1+ (string-to-char (match-string 0 curitem)))) + nil nil curitem))))) + + +(defun rst-insert-list (&optional prefer-roman) + "Insert a list item at the current point. + +The command can insert a new list or a continuing list. When it is called at a +non-list line, it will promote to insert new list. When it is called at a list +line, it will insert a list with the same list style. + +1. When inserting a new list: + +User is asked to select the item style first, for example (a), i), +. Use TAB +for completition and choices. + + (a) If user selects bullets or #, it's just added. + (b) If user selects enumerations, a further prompt is given. User needs to + input a starting item, for example 'e' for 'A)' style. + +The position of the new list is arranged according to whether or not the +current line and the previous line are blank lines. + +2. When continuing a list, one thing need to be noticed: + +List style alphabetical list, such as 'a.', and roman numerical list, such as +'i.', have some overlapping items, for example 'v.' The function can deal with +the problem elegantly in most situations. But when those overlapped list are +preceded by a blank line, it is hard to determine which type to use +automatically. The function uses alphabetical list by default. If you want +roman numerical list, just use a prefix (\\[universal-argument])." + (interactive "P") + (beginning-of-line) + (if (looking-at (rst-re 'itmany-beg-1)) + (rst-insert-list-continue (match-string 0) prefer-roman) + (rst-insert-list-new-item))) (defun rst-straighten-bullets-region (beg end) "Make all the bulleted list items in the region consistent. @@ -1547,8 +2053,7 @@ adjust. If bullets are found on levels beyond the `rst-preferred-bullets' list, they are not modified." (interactive "r") - (let ((bullets (rst-find-pfx-in-region beg end - rst-re-bullets)) + (let ((bullets (rst-find-pfx-in-region beg end (rst-re 'bul-sta))) (levtable (make-hash-table :size 4))) ;; Create a map of levels to list of positions. @@ -1573,25 +2078,25 @@ adjust. If bullets are found on levels beyond the (insert (string (car bullets)))) (setq bullets (cdr bullets)))))))) -(defun rst-rstrip (str) - "Strips the whitespace at the end of string STR." - (string-match "[ \t\n]*\\'" str) - (substring str 0 (match-beginning 0))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Table of contents +;; ================= (defun rst-get-stripped-line () "Return the line at cursor, stripped from whitespace." - (re-search-forward "\\S-.*\\S-" (line-end-position)) + (re-search-forward (rst-re "\\S .*\\S ") (line-end-position)) (buffer-substring-no-properties (match-beginning 0) (match-end 0)) ) -(defun rst-section-tree (alldecos) +(defun rst-section-tree () "Get the hierarchical tree of section titles. Returns a hierarchical tree of the sections titles in the -document, for decorations ALLDECOS. This can be used to generate -a table of contents for the document. The top node will always -be a nil node, with the top level titles as children (there may -potentially be more than one). +document. This can be used to generate a table of contents for +the document. The top node will always be a nil node, with the +top level titles as children (there may potentially be more than +one). Each section title consists in a cons of the stripped title string and a marker to the section in the original text document. @@ -1603,57 +2108,56 @@ Conceptually, the nil nodes--i.e. those which have no title--are to be considered as being the same line as their first non-nil child. This has advantages later in processing the graph." - (let* ((hier (rst-get-hierarchy alldecos)) - (levels (make-hash-table :test 'equal :size 10)) - lines) + (let ((hier (rst-get-hierarchy)) + (levels (make-hash-table :test 'equal :size 10)) + lines) (let ((lev 0)) - (dolist (deco hier) + (dolist (ado hier) ;; Compare just the character and indent in the hash table. - (puthash (cons (car deco) (cadr deco)) lev levels) + (puthash (cons (car ado) (cadr ado)) lev levels) (incf lev))) ;; Create a list of lines that contains (text, level, marker) for each - ;; decoration. + ;; adornment. (save-excursion (setq lines - (mapcar (lambda (deco) + (mapcar (lambda (ado) (goto-char (point-min)) - (forward-line (1- (car deco))) - (list (gethash (cons (cadr deco) (caddr deco)) levels) + (forward-line (1- (car ado))) + (list (gethash (cons (cadr ado) (caddr ado)) levels) (rst-get-stripped-line) (progn (beginning-of-line 1) (point-marker)))) - alldecos))) - + (rst-find-all-adornments)))) (let ((lcontnr (cons nil lines))) (rst-section-tree-rec lcontnr -1)))) -(defun rst-section-tree-rec (decos lev) +(defun rst-section-tree-rec (ados lev) "Recursive guts of the section tree construction. -DECOS is a cons cell whose cdr is the remaining list of -decorations, and we change it as we consume them. LEV is +ADOS is a cons cell whose cdr is the remaining list of +adornments, and we change it as we consume them. LEV is the current level of that node. This function returns a -pair of the subtree that was built. This treats the DECOS +pair of the subtree that was built. This treats the ADOS list destructively." - (let ((ndeco (cadr decos)) + (let ((nado (cadr ados)) node children) - ;; If the next decoration matches our level - (when (and ndeco (= (car ndeco) lev)) - ;; Pop the next decoration and create the current node with it - (setcdr decos (cddr decos)) - (setq node (cdr ndeco)) ) + ;; If the next adornment matches our level + (when (and nado (= (car nado) lev)) + ;; Pop the next adornment and create the current node with it + (setcdr ados (cddr ados)) + (setq node (cdr nado)) ) ;; Else we let the node title/marker be unset. ;; Build the child nodes - (while (and (cdr decos) (> (caadr decos) lev)) + (while (and (cdr ados) (> (caadr ados) lev)) (setq children - (cons (rst-section-tree-rec decos (1+ lev)) + (cons (rst-section-tree-rec ados (1+ lev)) children))) (setq children (reverse children)) @@ -1749,9 +2253,8 @@ If a numeric prefix argument PFXARG is given, insert the TOC up to the specified level. The TOC is inserted indented at the current column." - (interactive "P") - + (rst-reset-section-caches) (let* (;; Check maximum level override (rst-toc-insert-max-level (if (and (integerp pfxarg) (> (prefix-numeric-value pfxarg) 0)) @@ -1760,7 +2263,7 @@ The TOC is inserted indented at the current column." ;; Get the section tree for the current cursor point. (sectree-pair (rst-section-tree-point - (rst-section-tree (rst-find-all-decorations)))) + (rst-section-tree))) ;; Figure out initial indent. (initial-indent (make-string (current-column) ? )) @@ -1830,8 +2333,9 @@ level to align." (if do-child-numbering (progn ;; Add a separating dot if there is already a prefix - (if (> (length pfx) 0) - (setq pfx (concat (rst-rstrip pfx) "."))) + (when (> (length pfx) 0) + (string-match (rst-re "[ \t\n]*\\'") pfx) + (setq pfx (concat (replace-match "" t t pfx) "."))) ;; Calculate the amount of space that the prefix will require ;; for the numbers. @@ -1852,59 +2356,48 @@ level to align." ))) -(defun rst-toc-insert-find-delete-contents () - "Find and delete an existing comment after the first contents directive. -Delete that region. Return t if found and the cursor is left after the comment." - (goto-char (point-min)) - ;; We look for the following and the following only (in other words, if your - ;; syntax differs, this won't work. If you would like a more flexible thing, - ;; contact the author, I just can't imagine that this requirement is - ;; unreasonable for now). - ;; - ;; .. contents:: [...anything here...] - ;; .. - ;; XXXXXXXX - ;; XXXXXXXX - ;; [more lines] - ;; - (let ((beg - (re-search-forward "^\\.\\. contents[ \t]*::\\(.*\\)\n\\.\\." - nil t)) - last-real) - (when beg - ;; Look for the first line that starts at the first column. - (forward-line 1) - (beginning-of-line) - (while (and - (< (point) (point-max)) - (or (and (looking-at "[ \t]+[^ \t]") (setq last-real (point)) t) - (looking-at "[ \t]*$"))) - (forward-line 1) - ) - (if last-real - (progn - (goto-char last-real) - (end-of-line) - (delete-region beg (point))) - (goto-char beg)) - t - ))) - (defun rst-toc-update () "Automatically find the contents section of a document and update. Updates the inserted TOC if present. You can use this in your file-write hook to always make it up-to-date automatically." (interactive) - (let ((p (point))) - (save-excursion - (when (rst-toc-insert-find-delete-contents) - (insert "\n ") - (rst-toc-insert) - )) - ;; Somehow save-excursion does not really work well. - (goto-char p)) + (save-excursion + ;; Find and delete an existing comment after the first contents directive. + ;; Delete that region. + (goto-char (point-min)) + ;; We look for the following and the following only (in other words, if your + ;; syntax differs, this won't work.). + ;; + ;; .. contents:: [...anything here...] + ;; [:field: value]... + ;; .. + ;; XXXXXXXX + ;; XXXXXXXX + ;; [more lines] + (let ((beg (re-search-forward + (rst-re "^" 'exm-sta "contents" 'dcl-tag ".*\n" + "\\(?:" 'hws-sta 'fld-tag ".*\n\\)*" 'exm-tag) nil t)) + last-real) + (when beg + ;; Look for the first line that starts at the first column. + (forward-line 1) + (while (and + (< (point) (point-max)) + (or (if (looking-at + (rst-re 'hws-sta "\\S ")) ; indented content + (setq last-real (point))) + (looking-at (rst-re 'lin-end)))) ; empty line + (forward-line 1)) + (if last-real + (progn + (goto-char last-real) + (end-of-line) + (delete-region beg (point))) + (goto-char beg)) + (insert "\n ") + (rst-toc-insert)))) ;; Note: always return nil, because this may be used as a hook. - ) + nil) ;; Note: we cannot bind the TOC update on file write because it messes with ;; undo. If we disable undo, since it adds and removes characters, the @@ -1916,7 +2409,7 @@ file-write hook to always make it up-to-date automatically." ;; ;; Disable undo for the write file hook. ;; (let ((buffer-undo-list t)) (rst-toc-update) )) -(defalias 'rst-toc-insert-update 'rst-toc-update) ;; backwards compat. +(defalias 'rst-toc-insert-update 'rst-toc-update) ; backwards compat. ;;------------------------------------------------------------------------------ @@ -1962,13 +2455,13 @@ children, and t if the node has been found." (defvar rst-toc-buffer-name "*Table of Contents*" "Name of the Table of Contents buffer.") -(defvar rst-toc-return-buffer nil - "Buffer to which to return when leaving the TOC.") +(defvar rst-toc-return-wincfg nil + "Window configuration to which to return when leaving the TOC.") (defun rst-toc () "Display a table-of-contents. -Finds all the section titles and their decorations in the +Finds all the section titles and their adornments in the file, and displays a hierarchically-organized list of the titles, which is essentially a table-of-contents of the document. @@ -1976,11 +2469,9 @@ document. The Emacs buffer can be navigated, and selecting a section brings the cursor in that section." (interactive) - (let* ((curbuf (current-buffer)) - - ;; Get the section tree - (alldecos (rst-find-all-decorations)) - (sectree (rst-section-tree alldecos)) + (rst-reset-section-caches) + (let* ((curbuf (list (current-window-configuration) (point-marker))) + (sectree (rst-section-tree)) (our-node (cdr (rst-section-tree-point sectree))) line @@ -2006,7 +2497,7 @@ brings the cursor in that section." (pop-to-buffer buf) ;; Save the buffer to return to. - (set (make-local-variable 'rst-toc-return-buffer) curbuf) + (set (make-local-variable 'rst-toc-return-wincfg) curbuf) ;; Move the cursor near the right section in the TOC. (goto-char (point-min)) @@ -2023,11 +2514,15 @@ brings the cursor in that section." (error "Buffer for this section was killed")) pos)) +;; FIXME: Cursor before or behind the list must be handled properly; before the +;; list should jump to the top and behind the list to the last normal +;; paragraph (defun rst-goto-section (&optional kill) "Go to the section the current line describes." (interactive) (let ((pos (rst-toc-mode-find-section))) (when kill + (set-window-configuration (car rst-toc-return-wincfg)) (kill-buffer (get-buffer rst-toc-buffer-name))) (pop-to-buffer (marker-buffer pos)) (goto-char pos) @@ -2044,9 +2539,9 @@ brings the cursor in that section." EVENT is the input event." (interactive "e") (let ((pos - (with-current-buffer (window-buffer (posn-window (event-end event))) - (save-excursion - (goto-char (posn-point (event-end event))) + (with-current-buffer (window-buffer (posn-window (event-end event))) + (save-excursion + (goto-char (posn-point (event-end event))) (rst-toc-mode-find-section))))) (pop-to-buffer (marker-buffer pos)) (goto-char pos) @@ -2061,8 +2556,9 @@ EVENT is the input event." (defun rst-toc-quit-window () "Leave the current TOC buffer." (interactive) - (quit-window) - (pop-to-buffer rst-toc-return-buffer)) + (let ((retbuf rst-toc-return-wincfg)) + (set-window-configuration (car retbuf)) + (goto-char (cadr retbuf)))) (defvar rst-toc-mode-map (let ((map (make-sparse-keymap))) @@ -2087,40 +2583,40 @@ EVENT is the input event." ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; Section movement commands. -;; +;; Section movement commands +;; ========================= (defun rst-forward-section (&optional offset) - "Skip to the next restructured text section title. + "Skip to the next reStructuredText section title. OFFSET specifies how many titles to skip. Use a negative OFFSET to move backwards in the file (default is to use 1)." (interactive) + (rst-reset-section-caches) (let* (;; Default value for offset. (offset (or offset 1)) - ;; Get all the decorations in the file, with their line numbers. - (alldecos (rst-find-all-decorations)) + ;; Get all the adornments in the file, with their line numbers. + (allados (rst-find-all-adornments)) ;; Get the current line. (curline (line-number-at-pos)) - (cur alldecos) + (cur allados) (idx 0) ) - ;; Find the index of the "next" decoration w.r.t. to the current line. + ;; Find the index of the "next" adornment w.r.t. to the current line. (while (and cur (< (caar cur) curline)) (setq cur (cdr cur)) (incf idx)) - ;; 'cur' is the decoration on or following the current line. + ;; 'cur' is the adornment on or following the current line. (if (and (> offset 0) cur (= (caar cur) curline)) (incf idx)) ;; Find the final index. (setq idx (+ idx (if (> offset 0) (- offset 1) offset))) - (setq cur (nth idx alldecos)) + (setq cur (nth idx allados)) ;; If the index is positive, goto the line, otherwise go to the buffer ;; boundaries. @@ -2156,245 +2652,25 @@ backwards in the file (default is to use 1)." (push-mark nil t t) (rst-forward-section (- arg))))) - - - - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Functions to work on item lists (e.g. indent/dedent, enumerate), which are ;; always 2 or 3 characters apart horizontally with rest. -;; (FIXME: there is currently a bug that makes the region go away when we do that.) -(defvar rst-shift-fill-region nil - "If non-nil, automatically re-fill the region that is being shifted.") - (defun rst-find-leftmost-column (beg end) - "Find the leftmost column in the region." - (let ((mincol 1000)) + "Return the leftmost column in region BEG to END." + (let (mincol) (save-excursion (goto-char beg) (while (< (point) end) (back-to-indentation) - (unless (looking-at "[ \t]*$") - (setq mincol (min mincol (current-column)))) - (forward-line 1) - )) + (unless (looking-at (rst-re 'lin-end)) + (setq mincol (if mincol + (min mincol (current-column)) + (current-column)))) + (forward-line 1))) mincol)) - -;; What we really need to do is compute all the possible alignment possibilities -;; and then select one. -;; -;; .. line-block:: -;; -;; a) sdjsds -;; -;; - sdjsd jsjds -;; -;; sdsdsjdsj -;; -;; 11. sjdss jddjs -;; -;; * * * * * * * -;; -;; Move backwards, accumulate the beginning positions, and also the second -;; positions, in case the line matches the bullet pattern, and then sort. - -(defun rst-compute-bullet-tabs (&optional pt) - "Build the list of possible horizontal alignment points. -Search backwards from point (or point PT if specified) to -build the list of possible horizontal alignment points that -includes the beginning and contents of a restructuredtext -bulleted or enumerated list item. Return a sorted list -of (COLUMN-NUMBER . LINE) pairs." - (save-excursion - (when pt (goto-char pt)) - - ;; We work our way backwards and towards the left. - (let ((leftcol 100000) ;; Current column. - (tablist nil) ;; List of tab positions. - ) - - ;; Start by skipping the current line. - (beginning-of-line 0) - - ;; Search backwards for each line. - (while (and (> (point) (point-min)) - (> leftcol 0)) - - ;; Skip empty lines. - (unless (looking-at "^[ \t]*$") - ;; Inspect the current non-empty line - (back-to-indentation) - - ;; Skip lines that are beyond the current column (we want to move - ;; towards the left). - (let ((col (current-column))) - (when (< col leftcol) - - ;; Add the beginning of the line as a tabbing point. - (unless (memq col (mapcar 'car tablist)) - (push (cons col (point)) tablist)) - - ;; Look at the line to figure out if it is a bulleted or enumerate - ;; list item. - (when (looking-at - (concat - "\\(?:" - "\\(\\(?:[0-9a-zA-Z#]\\{1,3\\}[.):-]\\|[*+-]\\)[ \t]+\\)[^ \t\n]" - "\\|" - (format "\\(%s%s+[ \t]+\\)[^ \t\n]" - (regexp-quote (thing-at-point 'char)) - (regexp-quote (thing-at-point 'char))) - "\\)" - )) - ;; Add the column of the contained item. - (let* ((matchlen (length (or (match-string 1) (match-string 2)))) - (newcol (+ col matchlen))) - (unless (or (>= newcol leftcol) - (memq (+ col matchlen) (mapcar 'car tablist))) - (push (cons (+ col matchlen) (+ (point) matchlen)) - tablist))) - ) - - (setq leftcol col) - ))) - - ;; Move backwards one line. - (beginning-of-line 0)) - - (sort tablist (lambda (x y) (<= (car x) (car y)))) - ))) - -(defun rst-debug-print-tabs (tablist) - "Insert a line and place special characters at the tab points in TABLIST." - (beginning-of-line) - (insert (concat "\n" (make-string 1000 ? ) "\n")) - (beginning-of-line 0) - (dolist (col tablist) - (beginning-of-line) - (forward-char (car col)) - (delete-char 1) - (insert "@") - )) - -(defun rst-debug-mark-found (tablist) - "Insert a line and place special characters at the tab points in TABLIST." - (dolist (col tablist) - (when (cdr col) - (goto-char (cdr col)) - (insert "@")))) - - -(defvar rst-shift-basic-offset 2 - "Basic horizontal shift distance when there is no preceding alignment tabs.") - -(defun rst-shift-region-guts (find-next-fun offset-fun) - "(See `rst-shift-region-right' for a description)." - (let* ((mbeg (copy-marker (region-beginning))) - (mend (copy-marker (region-end))) - (tabs (rst-compute-bullet-tabs mbeg)) - (leftmostcol (rst-find-leftmost-column (region-beginning) (region-end))) - ) - ;; Add basic offset tabs at the end of the list. This is a better - ;; implementation technique than hysteresis and a basic offset because it - ;; insures that movement in both directions is consistently using the same - ;; column positions. This makes it more predictable. - (setq tabs - (append tabs - (mapcar (lambda (x) (cons x nil)) - (let ((maxcol 120) - (max-lisp-eval-depth 2000)) - (flet ((addnum (x) - (if (> x maxcol) - nil - (cons x (addnum - (+ x rst-shift-basic-offset)))))) - (addnum (or (caar (last tabs)) 0)))) - ))) - - ;; (For debugging.) - ;;; (save-excursion (goto-char mbeg) (forward-char -1) (rst-debug-print-tabs tabs)))) - ;;; (print tabs) - ;;; (save-excursion (rst-debug-mark-found tabs)) - - ;; Apply the indent. - (indent-rigidly - mbeg mend - - ;; Find the next tab after the leftmost column. - (let ((tab (funcall find-next-fun tabs leftmostcol))) - - (if tab - (progn - (when (cdar tab) - (message "Aligned on '%s'" - (save-excursion - (goto-char (cdar tab)) - (buffer-substring-no-properties - (line-beginning-position) - (line-end-position)))) - ) - (- (caar tab) leftmostcol)) ;; Num chars. - - ;; Otherwise use the basic offset - (funcall offset-fun rst-shift-basic-offset) - ))) - - ;; Optionally reindent. - (when rst-shift-fill-region - (fill-region mbeg mend)) - )) - -(defun rst-shift-region-right (pfxarg) - "Indent region rigidly, by a few characters to the right. -This function first computes all possible alignment columns by -inspecting the lines preceding the region for bulleted or -enumerated list items. If the leftmost column is beyond the -preceding lines, the region is moved to the right by -`rst-shift-basic-offset'. With a prefix argument, do not -automatically fill the region." - (interactive "P") - (let ((rst-shift-fill-region - (if (not pfxarg) rst-shift-fill-region))) - (rst-shift-region-guts (lambda (tabs leftmostcol) - (let ((cur tabs)) - (while (and cur (<= (caar cur) leftmostcol)) - (setq cur (cdr cur))) - cur)) - 'identity - ))) - -(defun rst-shift-region-left (pfxarg) - "Like `rst-shift-region-right', except we move to the left. -Also, if invoked with a negative prefix arg, the entire -indentation is removed, up to the leftmost character in the -region, and automatic filling is disabled." - (interactive "P") - (let ((mbeg (copy-marker (region-beginning))) - (mend (copy-marker (region-end))) - (leftmostcol (rst-find-leftmost-column - (region-beginning) (region-end))) - (rst-shift-fill-region - (if (not pfxarg) rst-shift-fill-region))) - - (when (> leftmostcol 0) - (if (and pfxarg (< (prefix-numeric-value pfxarg) 0)) - (progn - (indent-rigidly (region-beginning) (region-end) (- leftmostcol)) - (when rst-shift-fill-region - (fill-region mbeg mend)) - ) - (rst-shift-region-guts (lambda (tabs leftmostcol) - (let ((cur (reverse tabs))) - (while (and cur (>= (caar cur) leftmostcol)) - (setq cur (cdr cur))) - cur)) - '- - )) - ))) - (defmacro rst-iterate-leftmost-paragraphs (beg end first-only body-consequent body-alternative) "FIXME This definition is old and deprecated / we need to move @@ -2419,9 +2695,9 @@ of each paragraph only." (current-column)) (valid (and (= curcol leftcol) - (not (looking-at "[ \t]*$"))) + (not (looking-at (rst-re 'lin-end)))) (and (= curcol leftcol) - (not (looking-at "[ \t]*$")))) + (not (looking-at (rst-re 'lin-end))))) ) ((>= (point) endm)) @@ -2433,7 +2709,6 @@ of each paragraph only." )))) - (defmacro rst-iterate-leftmost-paragraphs-2 (spec &rest body) "Evaluate BODY for each line in region defined by BEG END. LEFTMOST is set to true if the line is one of the leftmost of the @@ -2453,8 +2728,8 @@ first of a paragraph." (empty-line-previous nil ,isempty) - (,isempty (looking-at "[ \t]*$") - (looking-at "[ \t]*$")) + (,isempty (looking-at (rst-re 'lin-end)) + (looking-at (rst-re 'lin-end))) (,parabegin (not ,isempty) (and empty-line-previous @@ -2471,6 +2746,307 @@ first of a paragraph." ))))) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Indentation + +;; FIXME: At the moment only block comments with leading empty comment line are +;; supported; comment lines with leading comment markup should be also +;; supported; may be a customizable option could control which style to prefer + +(defgroup rst-indent nil "Settings for indendation in reStructuredText. + +In reStructuredText indendation points are usually determined by +preceding lines. Sometimes the syntax allows arbitrary +indendation points such as where to start the first line +following a directive. These indentation widths can be customized +here." + :group 'rst + :package-version '(rst . "1.1.0")) + +(define-obsolete-variable-alias + 'rst-shift-basic-offset 'rst-indent-width "r6713") +(defcustom rst-indent-width 2 + "Indentation when there is no more indentation point given." + :group 'rst-indent + :type '(integer)) + +(defcustom rst-indent-field 3 + "Default indendation for first line after a field or 0 to always indent for +content." + :group 'rst-indent + :type '(integer)) + +(defcustom rst-indent-literal-normal 3 + "Default indendation for literal block after a markup on an own +line." + :group 'rst-indent + :type '(integer)) + +(defcustom rst-indent-literal-minimized 2 + "Default indendation for literal block after a minimized +markup." + :group 'rst-indent + :type '(integer)) + +(defcustom rst-indent-comment 3 + "Default indendation for first line of a comment." + :group 'rst-indent + :type '(integer)) + +;; FIXME: Must consider other tabs: +;; * Line blocks +;; * Definition lists +;; * Option lists +(defun rst-line-tabs () + "Return tabs of the current line or nil for no tab. +The list is sorted so the tab where writing continues most likely +is the first one. Each tab is of the form (COLUMN . INNER). +COLUMN is the column of the tab. INNER is non-nil if this is an +inner tab. I.e. a tab which does come from the basic indentation +and not from inner alignment points." + (save-excursion + (forward-line 0) + (save-match-data + (unless (looking-at (rst-re 'lin-end)) + (back-to-indentation) + ;; Current indendation is always the least likely tab + (let ((tabs (list (list (point) 0 nil)))) ; (POINT OFFSET INNER) + ;; Push inner tabs more likely to continue writing + (cond + ;; Item + ((looking-at (rst-re '(:grp itmany-tag hws-sta) '(:grp "\\S ") "?")) + (when (match-string 2) + (push (list (match-beginning 2) 0 t) tabs))) + ;; Field + ((looking-at (rst-re '(:grp fld-tag) '(:grp hws-tag) + '(:grp "\\S ") "?")) + (unless (zerop rst-indent-field) + (push (list (match-beginning 1) rst-indent-field t) tabs)) + (if (match-string 3) + (push (list (match-beginning 3) 0 t) tabs) + (if (zerop rst-indent-field) + (push (list (match-end 2) + (if (string= (match-string 2) "") 1 0) + t) tabs)))) + ;; Directive + ((looking-at (rst-re 'dir-sta-3 '(:grp "\\S ") "?")) + (push (list (match-end 1) 0 t) tabs) + (unless (string= (match-string 2) "") + (push (list (match-end 2) 0 t) tabs)) + (when (match-string 4) + (push (list (match-beginning 4) 0 t) tabs))) + ;; Footnote or citation definition + ((looking-at (rst-re 'fnc-sta-2 '(:grp "\\S ") "?")) + (push (list (match-end 1) 0 t) tabs) + (when (match-string 3) + (push (list (match-beginning 3) 0 t) tabs))) + ;; Comment + ((looking-at (rst-re 'cmt-sta-1)) + (push (list (point) rst-indent-comment t) tabs))) + ;; Start of literal block + (when (looking-at (rst-re 'lit-sta-2)) + (let ((tab0 (first tabs))) + (push (list (first tab0) + (+ (second tab0) + (if (match-string 1) + rst-indent-literal-minimized + rst-indent-literal-normal)) + t) tabs))) + (mapcar (lambda (tab) + (goto-char (first tab)) + (cons (+ (current-column) (second tab)) (third tab))) + tabs)))))) + +(defun rst-compute-tabs (pt) + "Build the list of possible tabs for all lines above. +Search backwards from point PT to build the list of possible +tabs. Return a list of tabs sorted by likeliness to continue +writing like `rst-line-tabs'. Nearer lines have generally a +higher likeliness than farer lines. Return nil if no tab is found +in the text above." + (save-excursion + (goto-char pt) + (let (leftmost ; Leftmost column found so far + innermost ; Leftmost column for inner tab + tablist) + (while (and (zerop (forward-line -1)) + (or (not leftmost) + (> leftmost 0))) + (let* ((tabs (rst-line-tabs)) + (leftcol (if tabs (apply 'min (mapcar 'car tabs))))) + (when tabs + ;; Consider only lines indented less or same if not INNERMOST + (when (or (not leftmost) + (< leftcol leftmost) + (and (not innermost) (= leftcol leftmost))) + (dolist (tab tabs) + (let ((inner (cdr tab)) + (newcol (car tab))) + (when (and + (or + (and (not inner) + (or (not leftmost) + (< newcol leftmost))) + (and inner + (or (not innermost) + (< newcol innermost)))) + (not (memq newcol tablist))) + (push newcol tablist)))) + (setq innermost (if (some 'identity + (mapcar 'cdr tabs)) ; Has inner + leftcol + innermost)) + (setq leftmost leftcol))))) + (nreverse tablist)))) + +(defun rst-indent-line (&optional dflt) + "Indent current line to next best reStructuredText tab. +The next best tab is taken from the tab list returned by +`rst-compute-tabs' which is used in a cyclic manner. If the +current indentation does not end on a tab use the first one. If +the current indentation is on a tab use the next tab. This allows +a repeated use of \\[indent-for-tab-command] to cycle through all +possible tabs. If no indentation is possible return `noindent' or +use DFLT. Return the indentation indented to. When point is in +indentation it ends up at its end. Otherwise the point is kept +relative to the content." + (let* ((pt (point-marker)) + (cur (current-indentation)) + (clm (current-column)) + (tabs (rst-compute-tabs (point))) + (fnd (position cur tabs)) + ind) + (if (and (not tabs) (not dflt)) + 'noindent + (if (not tabs) + (setq ind dflt) + (if (not fnd) + (setq fnd 0) + (setq fnd (1+ fnd)) + (if (>= fnd (length tabs)) + (setq fnd 0))) + (setq ind (nth fnd tabs))) + (indent-line-to ind) + (if (> clm cur) + (goto-char pt)) + (set-marker pt nil) + ind))) + +(defun rst-shift-region (beg end cnt) + "Shift region BEG to END by CNT tabs. +Shift by one tab to the right (CNT > 0) or left (CNT < 0) or +remove all indentation (CNT = 0). An tab is taken from the text +above. If no suitable tab is found `rst-indent-width' is used." + (interactive "r\np") + (let ((tabs (sort (rst-compute-tabs beg) (lambda (x y) (<= x y)))) + (leftmostcol (rst-find-leftmost-column beg end))) + (when (or (> leftmostcol 0) (> cnt 0)) + ;; Apply the indent + (indent-rigidly + beg end + (if (zerop cnt) + (- leftmostcol) + ;; Find the next tab after the leftmost column + (let* ((cmp (if (> cnt 0) '> '<)) + (tabs (if (> cnt 0) tabs (reverse tabs))) + (len (length tabs)) + (dir (signum cnt)) ; Direction to take + (abs (abs cnt)) ; Absolute number of steps to take + ;; Get the position of the first tab beyond leftmostcol + (fnd (position-if (lambda (elt) + (funcall cmp elt leftmostcol)) + tabs)) + ;; Virtual position of tab + (pos (+ (or fnd len) (1- abs))) + (tab (if (< pos len) + ;; Tab exists - use it + (nth pos tabs) + ;; Column needs to be computed + (let ((col (+ (or (car (last tabs)) leftmostcol) + ;; Base on last known column + (* (- pos (1- len)) ; Distance left + dir ; Direction to take + rst-indent-width)))) + (if (< col 0) 0 col))))) + (- tab leftmostcol))))))) + +;; FIXME: A paragraph with an (incorrectly) indented second line is not filled +;; correctly:: +;; +;; Some start +;; continued wrong +(defun rst-adaptive-fill () + "Return fill prefix found at point. +Value for `adaptive-fill-function'." + (let ((fnd (if (looking-at adaptive-fill-regexp) + (match-string-no-properties 0)))) + (if (save-match-data + (not (string-match comment-start-skip fnd))) + ;; An non-comment prefix is fine + fnd + ;; Matches a comment - return whitespace instead + (make-string (- + (save-excursion + (goto-char (match-end 0)) + (current-column)) + (save-excursion + (goto-char (match-beginning 0)) + (current-column))) ? )))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Comments + +(defun rst-comment-line-break (&optional soft) + "Break line and indent, continuing reStructuredText comment if within one. +Value for `comment-line-break-function'." + (if soft + (insert-and-inherit ?\n) + (newline 1)) + (save-excursion + (forward-char -1) + (delete-horizontal-space)) + (delete-horizontal-space) + (let ((tabs (rst-compute-tabs (point)))) + (when tabs + (indent-line-to (car tabs))))) + +(defun rst-comment-indent () + "Return indentation for current comment line." + (car (rst-compute-tabs (point)))) + +(defun rst-comment-insert-comment () + "Insert a comment in the current line." + (rst-indent-line 0) + (insert comment-start)) + +(defun rst-comment-region (beg end &optional arg) + "Comment the current region or uncomment it if ARG is \\[universal-argument]." + (save-excursion + (if (consp arg) + (rst-uncomment-region beg end arg) + (goto-char beg) + (let ((ind (current-indentation)) + bol) + (forward-line 0) + (setq bol (point)) + (indent-rigidly bol end rst-indent-comment) + (goto-char bol) + (open-line 1) + (indent-line-to ind) + (insert (comment-string-strip comment-start t t)))))) + +(defun rst-uncomment-region (beg end &optional arg) + "Uncomment the current region. +ARG is ignored" + (save-excursion + (let (bol eol) + (goto-char beg) + (forward-line 0) + (setq bol (point)) + (forward-line 1) + (setq eol (point)) + (indent-rigidly eol end (- rst-indent-comment)) + (delete-region bol eol)))) ;;------------------------------------------------------------------------------ @@ -2478,60 +3054,54 @@ first of a paragraph." ;; bullets in bulleted lists. The enumerate would just be one of the possible ;; outputs. ;; -;; FIXME: TODO we need to do the enumeration removal as well. +;; FIXME: We need to do the enumeration removal as well. -(defun rst-enumerate-region (beg end) +(defun rst-enumerate-region (beg end all) "Add enumeration to all the leftmost paragraphs in the given region. -The region is specified between BEG and END. With prefix argument, +The region is specified between BEG and END. With ALL, do all lines instead of just paragraphs." - (interactive "r") + (interactive "r\nP") (let ((count 0) (last-insert-len nil)) (rst-iterate-leftmost-paragraphs - beg end (not current-prefix-arg) + beg end (not all) (let ((ins-string (format "%d. " (incf count)))) (setq last-insert-len (length ins-string)) (insert ins-string)) (insert (make-string last-insert-len ?\ )) ))) -(defun rst-bullet-list-region (beg end) +(defun rst-bullet-list-region (beg end all) "Add bullets to all the leftmost paragraphs in the given region. -The region is specified between BEG and END. With prefix argument, +The region is specified between BEG and END. With ALL, do all lines instead of just paragraphs." - (interactive "r") + (interactive "r\nP") (rst-iterate-leftmost-paragraphs - beg end (not current-prefix-arg) - (insert "- ") + beg end (not all) + (insert (car rst-preferred-bullets) " ") (insert " ") )) - -;; FIXME: there are some problems left with the following function -;; implementation: -;; -;; * It does not deal with a varying number of digits appropriately -;; * It does not deal with multiple levels independently, and it should. -;; -;; I suppose it does 90% of the job for now. - +;; FIXME: Does not deal with a varying number of digits appropriately +;; FIXME: Does not deal with multiple levels independently +;; FIXME: Does not indent a multiline item correctly (defun rst-convert-bullets-to-enumeration (beg end) - "Convert all the bulleted items and enumerated items in the -region to enumerated lists, renumbering as necessary." + "Convert the bulleted and enumerated items in the region to enumerated lists. +Renumber as necessary." (interactive "r") (let* (;; Find items and convert the positions to markers. (items (mapcar (lambda (x) (cons (copy-marker (car x)) (cdr x))) - (rst-find-pfx-in-region beg end rst-re-items))) + (rst-find-pfx-in-region beg end (rst-re 'itmany-sta-1)))) (count 1) ) (save-excursion (dolist (x items) (goto-char (car x)) - (looking-at rst-re-items) - (replace-match (format "%d. " count) nil nil nil 1) + (looking-at (rst-re 'itmany-beg-1)) + (replace-match (format "%d." count) nil nil nil 1) (incf count) )) )) @@ -2559,9 +3129,13 @@ With prefix argument set the empty lines too." ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Font lock +;; ========= (require 'font-lock) +;; FIXME: The obsolete variables need to disappear + (defgroup rst-faces nil "Faces used in Rst Mode." :group 'rst :group 'faces @@ -2724,8 +3298,7 @@ general but you do not like the details." :type '(integer) :set 'rst-set-level-default) (defcustom rst-level-face-base-color "grey" - "The base name of the color to be used for creating background colors in -section title faces for all levels." + "Base name of the color for creating background colors in section title faces." :group 'rst-faces-defaults :type '(string) :set 'rst-set-level-default) @@ -2788,6 +3361,7 @@ details check the Rst Faces Defaults group." :value-type (face)) :set-after '(rst-level-face-max)) +;; FIXME: It should be possible to give "#RRGGBB" type of color values (defun rst-define-level-faces () "Define the faces for the section title text faces from the values." ;; All variables used here must be checked in `rst-set-level-default' @@ -2804,214 +3378,277 @@ details check the Rst Faces Defaults group." (set-face-doc-string sym doc) (set-face-background sym col) (set sym sym)) - (setq i (1+ i)))))) + (setq i (1+ i)))))) (rst-define-level-faces) - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Font lock -(defvar rst-use-char-classes - (string-match "[[:alpha:]]" "b") - "Non-nil if we can use the character classes in our regexps.") - -(defun rst-font-lock-keywords-function () - "Return keywords to highlight in Rst mode according to current settings." +(defvar rst-font-lock-keywords ;; The reST-links in the comments below all relate to sections in ;; http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html - (let* ( ;; This gets big - so let's define some abbreviations - ;; horizontal white space - (re-hws "[\t ]") - ;; beginning of line with possible indentation - (re-bol (concat "^" re-hws "*")) - ;; Separates block lead-ins from their content - (re-blksep1 (concat "\\(" re-hws "+\\|$\\)")) - ;; explicit markup tag - (re-emt "\\.\\.") - ;; explicit markup start - (re-ems (concat re-emt re-hws "+")) - ;; inline markup prefix - (re-imp1 (concat "\\(^\\|" re-hws "\\|[-'\"([{/:.,;!?\\]\\|$\\)")) - ;; symbol character - (re-sym1 "\\(\\sw\\|\\s_\\)") - ;; inline markup content begin - (re-imbeg2 "\\(\\S \\|\\S \\([^") + `(;; FIXME: Block markup is not recognized in blocks after explicit markup + ;; start - ;; There seems to be a bug leading to error "Stack overflow in regexp - ;; matcher" when "|" or "\\*" are the characters searched for - (re-imendbeg "\\]\\|\\\\.") - ;; inline markup content end - (re-imend (concat re-imendbeg "\\)*[^\t \\\\]\\)")) - ;; inline markup content without asterisk - (re-ima2 (concat re-imbeg2 "*" re-imend)) - ;; inline markup content without backquote - (re-imb2 (concat re-imbeg2 "`" re-imend)) - ;; inline markup content without vertical bar - (re-imv2 (concat re-imbeg2 "|" re-imend)) - ;; Supported URI schemes - (re-uris1 "\\(acap\\|cid\\|data\\|dav\\|fax\\|file\\|ftp\\|gopher\\|http\\|https\\|imap\\|ldap\\|mailto\\|mid\\|modem\\|news\\|nfs\\|nntp\\|pop\\|prospero\\|rtsp\\|service\\|sip\\|tel\\|telnet\\|tip\\|urn\\|vemmi\\|wais\\)") - ;; Line starting with adornment and optional whitespace; complete - ;; adornment is in (match-string 1); there must be at least 3 - ;; characters because otherwise explicit markup start would be - ;; recognized - (re-ado2 (concat "^\\(\\([" - (if rst-use-char-classes - "^[:word:][:space:][:cntrl:]" "^\\w \t\x00-\x1F") - "]\\)\\2\\2+\\)" re-hws "*$")) - ) - (list - ;; FIXME: Block markup is not recognized in blocks after explicit markup - ;; start + ;; Simple `Body Elements`_ + ;; `Bullet Lists`_ + ;; FIXME: A bullet directly after a field name is not recognized + (,(rst-re 'lin-beg '(:grp bul-sta)) + 1 rst-block-face) + ;; `Enumerated Lists`_ + (,(rst-re 'lin-beg '(:grp enmany-sta)) + 1 rst-block-face) + ;; `Definition Lists`_ FIXME: missing + ;; `Field Lists`_ + (,(rst-re 'lin-beg '(:grp fld-tag) 'bli-sfx) + 1 rst-external-face) + ;; `Option Lists`_ + (,(rst-re 'lin-beg '(:grp opt-tag (:shy optsep-tag opt-tag) "*") + '(:alt "$" (:seq hws-prt "\\{2\\}"))) + 1 rst-block-face) + ;; `Line Blocks`_ + ;; Only for lines containing no more bar - to distinguish from tables + (,(rst-re 'lin-beg '(:grp "|" bli-sfx) "[^|\n]*$") + 1 rst-block-face) - ;; Simple `Body Elements`_ - ;; `Bullet Lists`_ - `(,(concat re-bol "\\([-*+]" re-blksep1 "\\)") - 1 rst-block-face) - ;; `Enumerated Lists`_ - `(,(concat re-bol "\\((?\\(#\\|[0-9]+\\|[A-Za-z]\\|[IVXLCMivxlcm]+\\)[.)]" - re-blksep1 "\\)") - 1 rst-block-face) - ;; `Definition Lists`_ FIXME: missing - ;; `Field Lists`_ - `(,(concat re-bol "\\(:[^:\n]+:\\)" re-blksep1) - 1 rst-external-face) - ;; `Option Lists`_ - `(,(concat re-bol "\\(\\(\\(\\([-+/]\\|--\\)\\sw\\(-\\|\\sw\\)*" - "\\([ =]\\S +\\)?\\)\\(,[\t ]\\)?\\)+\\)\\($\\|[\t ]\\{2\\}\\)") - 1 rst-block-face) + ;; `Tables`_ FIXME: missing - ;; `Tables`_ FIXME: missing + ;; All the `Explicit Markup Blocks`_ + ;; `Footnotes`_ / `Citations`_ + (,(rst-re 'lin-beg 'fnc-sta-2) + (1 rst-definition-face) + (2 rst-definition-face)) + ;; `Directives`_ / `Substitution Definitions`_ + (,(rst-re 'lin-beg 'dir-sta-3) + (1 rst-directive-face) + (2 rst-definition-face) + (3 rst-directive-face)) + ;; `Hyperlink Targets`_ + (,(rst-re 'lin-beg + '(:grp exm-sta "_" (:alt + (:seq "`" ilcbkqdef-tag "`") + (:seq (:alt "[^:\\\n]" "\\\\.") "+")) ":") + 'bli-sfx) + 1 rst-definition-face) + (,(rst-re 'lin-beg '(:grp "__") 'bli-sfx) + 1 rst-definition-face) - ;; All the `Explicit Markup Blocks`_ - ;; `Footnotes`_ / `Citations`_ - `(,(concat re-bol "\\(" re-ems "\\[[^[\n]+\\]\\)" re-blksep1) - 1 rst-definition-face) - ;; `Directives`_ / `Substitution Definitions`_ - `(,(concat re-bol "\\(" re-ems "\\)\\(\\(|[^|\n]+|[\t ]+\\)?\\)\\(" - re-sym1 "+::\\)" re-blksep1) - (1 rst-directive-face) - (2 rst-definition-face) - (4 rst-directive-face)) - ;; `Hyperlink Targets`_ - `(,(concat re-bol "\\(" re-ems "_\\([^:\\`\n]\\|\\\\.\\|`[^`\n]+`\\)+:\\)" - re-blksep1) - 1 rst-definition-face) - `(,(concat re-bol "\\(__\\)" re-blksep1) - 1 rst-definition-face) + ;; All `Inline Markup`_ - most of them may be multiline though this is + ;; uninteresting - ;; All `Inline Markup`_ - ;; FIXME: Condition 5 preventing fontification of e.g. "*" not implemented - ;; `Strong Emphasis`_ - `(,(concat re-imp1 "\\(\\*\\*" re-ima2 "\\*\\*\\)" re-ims1) - 2 rst-emphasis2-face) - ;; `Emphasis`_ - `(,(concat re-imp1 "\\(\\*" re-ima2 "\\*\\)" re-ims1) - 2 rst-emphasis1-face) - ;; `Inline Literals`_ - `(,(concat re-imp1 "\\(``" re-imb2 "``\\)" re-ims1) - 2 rst-literal-face) - ;; `Inline Internal Targets`_ - `(,(concat re-imp1 "\\(_`" re-imb2 "`\\)" re-ims1) - 2 rst-definition-face) - ;; `Hyperlink References`_ - ;; FIXME: `Embedded URIs`_ not considered - `(,(concat re-imp1 "\\(\\(`" re-imb2 "`\\|\\(\\sw\\(\\sw\\|-\\)+\\sw\\)\\)__?\\)" re-ims1) - 2 rst-reference-face) - ;; `Interpreted Text`_ - `(,(concat re-imp1 "\\(\\(:" re-sym1 "+:\\)?\\)\\(`" re-imb2 "`\\)\\(\\(:" - re-sym1 "+:\\)?\\)" re-ims1) - (2 rst-directive-face) - (5 rst-external-face) - (8 rst-directive-face)) - ;; `Footnote References`_ / `Citation References`_ - `(,(concat re-imp1 "\\(\\[[^]]+\\]_\\)" re-ims1) - 2 rst-reference-face) - ;; `Substitution References`_ - `(,(concat re-imp1 "\\(|" re-imv2 "|\\)" re-ims1) - 2 rst-reference-face) - ;; `Standalone Hyperlinks`_ - `(;; FIXME: This takes it easy by using a whitespace as delimiter - ,(concat re-imp1 "\\(" re-uris1 ":\\S +\\)" re-ims1) - 2 rst-definition-face) - `(,(concat re-imp1 "\\(" re-sym1 "+@" re-sym1 "+\\)" re-ims1) - 2 rst-definition-face) + ;; FIXME: Condition 5 preventing fontification of e.g. "*" not implemented + ;; `Strong Emphasis`_ + (,(rst-re 'ilm-pfx '(:grp "\\*\\*" ilcast-tag "\\*\\*") 'ilm-sfx) + 1 rst-emphasis2-face) + ;; `Emphasis`_ + (,(rst-re 'ilm-pfx '(:grp "\\*" ilcast-tag "\\*") 'ilm-sfx) + 1 rst-emphasis1-face) + ;; `Inline Literals`_ + (,(rst-re 'ilm-pfx '(:grp "``" ilcbkq-tag "``") 'ilm-sfx) + 1 rst-literal-face) + ;; `Inline Internal Targets`_ + (,(rst-re 'ilm-pfx '(:grp "_`" ilcbkq-tag "`") 'ilm-sfx) + 1 rst-definition-face) + ;; `Hyperlink References`_ + ;; FIXME: `Embedded URIs`_ not considered + ;; FIXME: Directly adjacing marked up words are not fontified correctly + ;; unless they are not separated by two spaces: foo_ bar_ + (,(rst-re 'ilm-pfx '(:grp (:alt (:seq "`" ilcbkq-tag "`") + (:seq "\\sw" (:alt "\\sw" "-") "+\\sw")) + "__?") 'ilm-sfx) + 1 rst-reference-face) + ;; `Interpreted Text`_ + (,(rst-re 'ilm-pfx '(:grp (:shy ":" sym-tag ":") "?") + '(:grp "`" ilcbkq-tag "`") + '(:grp (:shy ":" sym-tag ":") "?") 'ilm-sfx) + (1 rst-directive-face) + (2 rst-external-face) + (3 rst-directive-face)) + ;; `Footnote References`_ / `Citation References`_ + (,(rst-re 'ilm-pfx '(:grp fnc-tag "_") 'ilm-sfx) + 1 rst-reference-face) + ;; `Substitution References`_ + ;; FIXME: References substitutions like |this|_ or |this|__ are not + ;; fontified correctly + (,(rst-re 'ilm-pfx '(:grp sub-tag) 'ilm-sfx) + 1 rst-reference-face) + ;; `Standalone Hyperlinks`_ + ;; FIXME: This takes it easy by using a whitespace as delimiter + (,(rst-re 'ilm-pfx '(:grp uri-tag ":\\S +") 'ilm-sfx) + 1 rst-definition-face) + (,(rst-re 'ilm-pfx '(:grp sym-tag "@" sym-tag ) 'ilm-sfx) + 1 rst-definition-face) - ;; Do all block fontification as late as possible so 'append works + ;; Do all block fontification as late as possible so 'append works - ;; Sections_ / Transitions_ - (append - (list - re-ado2) - (if (not rst-mode-lazy) - '(1 rst-block-face) - (list - (list 'rst-font-lock-handle-adornment - '(progn - (setq rst-font-lock-adornment-point (match-end 1)) - (point-max)) - nil - (list 1 '(cdr (assoc nil rst-adornment-faces-alist)) - 'append t) - (list 2 '(cdr (assoc rst-font-lock-level - rst-adornment-faces-alist)) - 'append t) - (list 3 '(cdr (assoc nil rst-adornment-faces-alist)) - 'append t))))) + ;; Sections_ / Transitions_ - for sections this is multiline + (,(rst-re 'ado-beg-2-1) + (rst-font-lock-handle-adornment-matcher + (rst-font-lock-handle-adornment-pre-match-form + (match-string-no-properties 1) (match-end 1)) + nil + (1 (cdr (assoc nil rst-adornment-faces-alist)) append t) + (2 (cdr (assoc rst-font-lock-adornment-level + rst-adornment-faces-alist)) append t) + (3 (cdr (assoc nil rst-adornment-faces-alist)) append t))) - ;; `Comments`_ - (append - (list - (concat re-bol "\\(" re-ems "\\)\[^[|_]\\([^:\n]\\|:\\([^:\n]\\|$\\)\\)*$") + ;; FIXME: FACESPEC could be used instead of ordinary faces to set + ;; properties on comments and literal blocks so they are *not* + ;; inline fontified; see (elisp)Search-based Fontification - '(1 rst-comment-face)) - (if rst-mode-lazy - (list - (list 'rst-font-lock-find-unindented-line - '(progn - (setq rst-font-lock-indentation-point (match-end 1)) - (point-max)) - nil - '(0 rst-comment-face append))))) - (append - (list - (concat re-bol "\\(" re-emt "\\)\\(\\s *\\)$") - '(1 rst-comment-face) - '(2 rst-comment-face)) - (if rst-mode-lazy - (list - (list 'rst-font-lock-find-unindented-line - '(progn - (setq rst-font-lock-indentation-point 'next) - (point-max)) - nil - '(0 rst-comment-face append))))) + ;; FIXME: And / or use `syntax-propertize` functions as in `octave-mod.el` + ;; and other V24 modes; may make `font-lock-extend-region` + ;; superfluous - ;; `Literal Blocks`_ - (append - (list - (concat re-bol "\\(\\([^.\n]\\|\\.[^.\n]\\).*\\)?\\(::\\)$") - '(3 rst-block-face)) - (if rst-mode-lazy - (list - (list 'rst-font-lock-find-unindented-line - '(progn - (setq rst-font-lock-indentation-point t) - (point-max)) - nil - '(0 rst-literal-face append))))) + ;; `Comments`_ - this is multiline + (,(rst-re 'lin-beg 'cmt-sta-1) + (1 rst-comment-face) + (rst-font-lock-find-unindented-line-match + (rst-font-lock-find-unindented-line-limit (match-end 1)) + nil + (0 rst-comment-face append))) + (,(rst-re 'lin-beg '(:grp exm-tag) '(:grp hws-tag) "$") + (1 rst-comment-face) + (2 rst-comment-face) + (rst-font-lock-find-unindented-line-match + (rst-font-lock-find-unindented-line-limit 'next) + nil + (0 rst-comment-face append))) + + ;; FIXME: This is not rendered as comment:: + ;; .. .. list-table:: + ;; :stub-columns: 1 + ;; :header-rows: 1 + + ;; FIXME: This is rendered wrong:: + ;; + ;; xxx yyy:: + ;; + ;; ----|> KKKKK <|---- + ;; / \ + ;; -|> AAAAAAAAAAPPPPPP <|- -|> AAAAAAAAAABBBBBBB <|- + ;; | | | | + ;; | | | | + ;; PPPPPP PPPPPPDDDDDDD BBBBBBB PPPPPPBBBBBBB + ;; + ;; Indentation needs to be taken from the line with the ``::`` and not from + ;; the first content line. + + ;; `Indented Literal Blocks`_ - this is multiline + (,(rst-re 'lin-beg 'lit-sta-2) + (2 rst-block-face) + (rst-font-lock-find-unindented-line-match + (rst-font-lock-find-unindented-line-limit t) + nil + (0 rst-literal-face append))) + + ;; FIXME: `Quoted Literal Blocks`_ missing - this is multiline ;; `Doctest Blocks`_ - (append - (list - (concat re-bol "\\(>>>\\|\\.\\.\\.\\)\\(.+\\)") - '(1 rst-block-face) - '(2 rst-literal-face))) - ))) + ;; FIXME: This is wrong according to the specification: + ;; + ;; Doctest blocks are text blocks which begin with ">>> ", the Python + ;; interactive interpreter main prompt, and end with a blank line. + ;; Doctest blocks are treated as a special case of literal blocks, + ;; without requiring the literal block syntax. If both are present, the + ;; literal block syntax takes priority over Doctest block syntax: + ;; + ;; This is an ordinary paragraph. + ;; + ;; >>> print 'this is a Doctest block' + ;; this is a Doctest block + ;; + ;; The following is a literal block:: + ;; + ;; >>> This is not recognized as a doctest block by + ;; reStructuredText. It *will* be recognized by the doctest + ;; module, though! + ;; + ;; Indentation is not required for doctest blocks. + (,(rst-re 'lin-beg '(:grp (:alt ">>>" ell-tag)) '(:grp ".+")) + (1 rst-block-face) + (2 rst-literal-face)) + ) + "Keywords to highlight in rst mode.") +(defun rst-font-lock-extend-region () + "Extend the region `font-lock-beg' / `font-lock-end' iff it may +be in the middle of a multiline construct and return non-nil if so." + (let ((r (rst-font-lock-extend-region-internal font-lock-beg font-lock-end))) + (when r + (setq font-lock-beg (car r)) + (setq font-lock-end (cdr r)) + t))) +(defun rst-font-lock-extend-region-internal (beg end) + "Check the region BEG / END for being in the middle of a multiline construct. +Return nil if not or a cons with new values for BEG / END" + (let ((nbeg (rst-font-lock-extend-region-extend beg -1)) + (nend (rst-font-lock-extend-region-extend end 1))) + (if (or nbeg nend) + (cons (or nbeg beg) (or nend end))))) + +(defun rst-forward-line (&optional n) + "Like `forward-line' but always end up in column 0 and return accordingly." + (let ((moved (forward-line n))) + (if (bolp) + moved + (forward-line 0) + (- moved (signum n))))) + +(defun rst-font-lock-extend-region-extend (pt dir) + "Extend the region starting at point PT and extending in direction DIR. +Return extended point or nil if not moved." + ;; There are many potential multiline constructs but there are two groups + ;; which are really relevant. The first group consists of + ;; + ;; * comment lines without leading explicit markup tag and + ;; + ;; * literal blocks following "::" + ;; + ;; which are both indented. Thus indendation is the first thing recognized + ;; here. The second criteria is an explicit markup tag which may be a comment + ;; or a double colon at the end of a line. + ;; + ;; The second group consists of the adornment cases. + (if (not (get-text-property pt 'font-lock-multiline)) + ;; Move only if we don't start inside a multiline construct already + (save-excursion + (let (;; non-empty non-indented line, explicit markup tag or literal + ;; block tag + (stop-re (rst-re '(:alt "[^ \t\n]" + (:seq hws-tag exm-tag) + (:seq ".*" dcl-tag lin-end))))) + ;; The comments below are for dir == -1 / dir == 1 + (goto-char pt) + (forward-line 0) + (setq pt (point)) + (while (and (not (looking-at stop-re)) + (zerop (rst-forward-line dir)))) ; try previous / next + ; line if it exists + (if (looking-at (rst-re 'ado-beg-2-1)) ; may be an underline / + ; overline + (if (zerop (rst-forward-line dir)) + (if (looking-at (rst-re 'ttl-beg)) ; title found, i.e. + ; underline / overline + ; found + (if (zerop (rst-forward-line dir)) + (if (not + (looking-at (rst-re 'ado-beg-2-1))) ; no + ; overline / + ; underline + (rst-forward-line (- dir)))) ; step back to title + ; / adornment + (if (< dir 0) ; keep downward adornment + (rst-forward-line (- dir))))) ; step back to adornment + (if (looking-at (rst-re 'ttl-beg)) ; may be a title + (if (zerop (rst-forward-line dir)) + (if (not + (looking-at (rst-re 'ado-beg-2-1))) ; no overline / + ; underline + (rst-forward-line (- dir)))))) ; step back to line + (if (not (= (point) pt)) + (point)))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Indented blocks @@ -3034,198 +3671,154 @@ point is not moved." (forward-line 1) (when (< (point) limit) (setq beg (point)) - (if (looking-at "\\s *$") + (if (looking-at (rst-re 'lin-end)) (setq cand (or cand beg)) ; An empty line is a candidate (move-to-column clm) ;; FIXME: No indentation [(zerop clm)] must be handled in some ;; useful way - though it is not clear what this should mean at all (if (string-match - "^\\s *$" (buffer-substring-no-properties beg (point))) + (rst-re 'linemp-tag) + (buffer-substring-no-properties beg (point))) (setq cand nil) ; An indented line resets a candidate (setq fnd (or cand beg))))))) (goto-char (or fnd start)) fnd)) -;; Stores the point where the current indentation ends if a number. If `next' -;; indicates `rst-font-lock-find-unindented-line' shall take the indentation -;; from the next line if this is not empty. If non-nil indicates -;; `rst-font-lock-find-unindented-line' shall take the indentation from the -;; next non-empty line. Also used as a trigger for -;; `rst-font-lock-find-unindented-line'. -(defvar rst-font-lock-indentation-point nil) +(defvar rst-font-lock-find-unindented-line-begin nil + "Beginning of the match if `rst-font-lock-find-unindented-line-end'") -(defun rst-font-lock-find-unindented-line (limit) - (let* ((ind-pnt rst-font-lock-indentation-point) - (beg-pnt ind-pnt)) - ;; May run only once - enforce this - (setq rst-font-lock-indentation-point nil) - (when (and ind-pnt (not (numberp ind-pnt))) - ;; Find indentation point in next line if any - (setq ind-pnt - (save-excursion - (save-match-data - (if (eq ind-pnt 'next) - (when (and (zerop (forward-line 1)) (< (point) limit)) - (setq beg-pnt (point)) - (when (not (looking-at "\\s *$")) - (looking-at "\\s *") - (match-end 0))) - (while (and (zerop (forward-line 1)) (< (point) limit) - (looking-at "\\s *$"))) - (when (< (point) limit) - (setq beg-pnt (point)) - (looking-at "\\s *") - (match-end 0))))))) - (when ind-pnt - (goto-char ind-pnt) - ;; Always succeeds because the limit set by PRE-MATCH-FORM is the - ;; ultimate point to find - (goto-char (or (rst-forward-indented-block nil limit) limit)) - (save-excursion - ;; Include subsequent empty lines in the font-lock block, - ;; in case the user subsequently changes the indentation of the next - ;; non-empty line to move it into the indented element. - (skip-chars-forward " \t\n") - (put-text-property beg-pnt (point) 'font-lock-multiline t)) - (set-match-data (list beg-pnt (point))) - t))) +(defvar rst-font-lock-find-unindented-line-end nil + "End of the match as determined by `rst-font-lock-find-unindented-line-limit'. +Also used as a trigger for +`rst-font-lock-find-unindented-line-match'.") + +(defun rst-font-lock-find-unindented-line-limit (ind-pnt) + "Find the next unindented line relative to indenation at IND-PNT. +Return this point, the end of the buffer or nil if nothing found. +If IND-PNT is `next' take the indentation from the next line if +this is not empty and indented more than the current one. If +IND-PNT is non-nil but not a number take the indentation from the +next non-empty line if this is indented more than the current +one." + (setq rst-font-lock-find-unindented-line-begin ind-pnt) + (setq rst-font-lock-find-unindented-line-end + (save-excursion + (when (not (numberp ind-pnt)) + ;; Find indentation point in next line if any + (setq ind-pnt + ;; FIXME: Should be refactored to two different functions + ;; giving their result to this function, may be + ;; integrated in caller + (save-match-data + (let ((cur-ind (current-indentation))) + (if (eq ind-pnt 'next) + (when (and (zerop (forward-line 1)) + (< (point) (point-max))) + ;; Not at EOF + (setq rst-font-lock-find-unindented-line-begin + (point)) + (when (and (not (looking-at (rst-re 'lin-end))) + (> (current-indentation) cur-ind)) + ;; Use end of indentation if non-empty line + (looking-at (rst-re 'hws-tag)) + (match-end 0))) + ;; Skip until non-empty line or EOF + (while (and (zerop (forward-line 1)) + (< (point) (point-max)) + (looking-at (rst-re 'lin-end)))) + (when (< (point) (point-max)) + ;; Not at EOF + (setq rst-font-lock-find-unindented-line-begin + (point)) + (when (> (current-indentation) cur-ind) + ;; Indentation bigger than line of departure + (looking-at (rst-re 'hws-tag)) + (match-end 0)))))))) + (when ind-pnt + (goto-char ind-pnt) + (or (rst-forward-indented-block nil (point-max)) + (point-max)))))) + +(defun rst-font-lock-find-unindented-line-match (limit) + "Set the match found by +`rst-font-lock-find-unindented-line-limit' the first time called +or nil." + (when rst-font-lock-find-unindented-line-end + (set-match-data + (list rst-font-lock-find-unindented-line-begin + rst-font-lock-find-unindented-line-end)) + (put-text-property rst-font-lock-find-unindented-line-begin + rst-font-lock-find-unindented-line-end + 'font-lock-multiline t) + ;; Make sure this is called only once + (setq rst-font-lock-find-unindented-line-end nil) + t)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Adornments -(defvar rst-font-lock-adornment-point nil - "Stores the point where the current adornment ends. -Also used as a trigger for `rst-font-lock-handle-adornment'.") +(defvar rst-font-lock-adornment-level nil + "Storage for `rst-font-lock-handle-adornment-matcher'. +Either section level of the current adornment or t for a transition.") -;; Here `rst-font-lock-handle-adornment' stores the section level of the -;; current adornment or t for a transition. -(defvar rst-font-lock-level nil) +(defun rst-adornment-level (key) + "Return section level for adornment KEY. +KEY is the first element of the return list of +`rst-classify-adornment'. If KEY is not a cons return it. If KEY is found +in the hierarchy return its level. Otherwise return a level one +beyond the existing hierarchy." + (if (not (consp key)) + key + (let* ((hier (rst-get-hierarchy)) + (char (car key)) + (style (cdr key))) + (1+ (or (position-if (lambda (elt) + (and (equal (car elt) char) + (equal (cadr elt) style))) hier) + (length hier)))))) -;; FIXME: It would be good if this could be used to markup section titles of -;; given level with a special key; it would be even better to be able to -;; customize this so it can be used for a generally available personal style -;; -;; FIXME: There should be some way to reset and reload this variable - probably -;; a special key -;; -;; FIXME: Some support for `outline-mode' would be nice which should be based -;; on this information -(defvar rst-adornment-level-alist nil - "Associates adornments with section levels. -The key is a two character string. The first character is the adornment -character. The second character distinguishes underline section titles (`u') -from overline/underline section titles (`o'). The value is the section level. +(defvar rst-font-lock-adornment-match nil + "Storage for match for current adornment. +Set by `rst-font-lock-handle-adornment-pre-match-form'. Also used +as a trigger for `rst-font-lock-handle-adornment-matcher'.") -This is made buffer local on start and adornments found during font lock are -entered.") +(defun rst-font-lock-handle-adornment-pre-match-form (ado ado-end) + "Determine limit for adornments for font-locking section titles and transitions. +In fact determine all things necessary and put the result to +`rst-font-lock-adornment-match' and +`rst-font-lock-adornment-level'. ADO is the complete adornment +matched. ADO-END is the point where ADO ends. Return the point +where the whole adorned construct ends. -;; Returns section level for adornment key KEY. Adds new section level if KEY -;; is not found and ADD. If KEY is not a string it is simply returned. -(defun rst-adornment-level (key &optional add) - (let ((fnd (assoc key rst-adornment-level-alist)) - (new 1)) - (cond - ((not (stringp key)) - key) - (fnd - (cdr fnd)) - (add - (while (rassoc new rst-adornment-level-alist) - (setq new (1+ new))) - (setq rst-adornment-level-alist - (append rst-adornment-level-alist (list (cons key new)))) - new)))) +Called as a PRE-MATCH-FORM in the sense of `font-lock-keywords'." + (let ((ado-data (rst-classify-adornment ado ado-end))) + (if (not ado-data) + (setq rst-font-lock-adornment-level nil + rst-font-lock-adornment-match nil) + (setq rst-font-lock-adornment-level + (rst-adornment-level (car ado-data))) + (setq rst-font-lock-adornment-match (cdr ado-data)) + (goto-char (nth 1 ado-data)) ; Beginning of construct + (nth 2 ado-data)))) ; End of construct -;; Classifies adornment for section titles and transitions. ADORNMENT is the -;; complete adornment string as found in the buffer. END is the point after the -;; last character of ADORNMENT. For overline section adornment LIMIT limits the -;; search for the matching underline. Returns a list. The first entry is t for -;; a transition, or a key string for `rst-adornment-level' for a section title. -;; The following eight values forming four match groups as can be used for -;; `set-match-data'. First match group contains the maximum points of the whole -;; construct. Second and last match group matched pure section title adornment -;; while third match group matched the section title text or the transition. -;; Each group but the first may or may not exist. -(defun rst-classify-adornment (adornment end limit) - (save-excursion - (save-match-data - (goto-char end) - (let ((ado-ch (aref adornment 0)) - (ado-re (regexp-quote adornment)) - (end-pnt (point)) - (beg-pnt (progn - (forward-line 0) - (point))) - (nxt-emp - (save-excursion - (or (not (zerop (forward-line 1))) - (looking-at "\\s *$")))) - (prv-emp - (save-excursion - (or (not (zerop (forward-line -1))) - (looking-at "\\s *$")))) - key beg-ovr end-ovr beg-txt end-txt beg-und end-und) - (cond - ((and nxt-emp prv-emp) - ;; A transition - (setq key t) - (setq beg-txt beg-pnt) - (setq end-txt end-pnt)) - (prv-emp - ;; An overline - (setq key (concat (list ado-ch) "o")) - (setq beg-ovr beg-pnt) - (setq end-ovr end-pnt) - (forward-line 1) - (setq beg-txt (point)) - (while (and (< (point) limit) (not end-txt)) - (if (looking-at "\\s *$") - ;; No underline found - (setq end-txt (1- (point))) - (when (looking-at (concat "\\(" ado-re "\\)\\s *$")) - (setq end-und (match-end 1)) - (setq beg-und (point)) - (setq end-txt (1- beg-und)))) - (forward-line 1))) - (t - ;; An underline - (setq key (concat (list ado-ch) "u")) - (setq beg-und beg-pnt) - (setq end-und end-pnt) - (setq end-txt (1- beg-und)) - (setq beg-txt (progn - (if (re-search-backward "^\\s *$" 1 'move) - (forward-line 1)) - (point))))) - (list key - (or beg-ovr beg-txt beg-und) - (or end-und end-txt end-und) - beg-ovr end-ovr beg-txt end-txt beg-und end-und))))) +(defun rst-font-lock-handle-adornment-matcher (limit) + "Set the match found by `rst-font-lock-handle-adornment-pre-match-form' +the first time called or nil. -;; Handles adornments for font-locking section titles and transitions. Returns -;; three match groups. First and last match group matched pure overline / -;; underline adornment while second group matched section title text. Each -;; group may not exist. -(defun rst-font-lock-handle-adornment (limit) - (let ((ado-pnt rst-font-lock-adornment-point)) +Called as a MATCHER in the sense of `font-lock-keywords'." + (let ((match rst-font-lock-adornment-match)) ;; May run only once - enforce this - (setq rst-font-lock-adornment-point nil) - (if ado-pnt - (let* ((ado (rst-classify-adornment (match-string-no-properties 1) - ado-pnt limit)) - (key (car ado)) - (mtc (cdr ado))) - (setq rst-font-lock-level (rst-adornment-level key t)) - (goto-char (nth 1 mtc)) - (put-text-property (nth 0 mtc) (nth 1 mtc) 'font-lock-multiline t) - (set-match-data mtc) - t)))) - - + (setq rst-font-lock-adornment-match nil) + (when match + (set-match-data match) + (goto-char (match-end 0)) + (put-text-property (match-beginning 0) (match-end 0) + 'font-lock-multiline t) + t))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Support for conversion from within Emacs +;; Compilation (defgroup rst-compile nil "Settings for support of conversion of reStructuredText @@ -3254,6 +3847,8 @@ document with \\[rst-compile]." An association list of the toolset to a list of the (command to use, extension of produced filename, options to the tool (nil or a string)) to be used for converting the document." + ;; FIXME: These are not options but symbols which may be referenced by + ;; `rst-compile-*-toolset` below :type '(alist :options (html latex newlatex pseudoxml xml pdf s5) :key-type symbol :value-type (list :tag "Specification" @@ -3265,15 +3860,11 @@ string)) to be used for converting the document." :group 'rst :version "24.1") -;; Note for Python programmers not familiar with association lists: you can set -;; values in an alists like this, e.g. : -;; (setcdr (assq 'html rst-compile-toolsets) -;; '("rst2html.py" ".htm" "--stylesheet=/docutils.css")) - - +;; FIXME: Must be `defcustom` (defvar rst-compile-primary-toolset 'html "The default toolset for `rst-compile'.") +;; FIXME: Must be `defcustom` (defvar rst-compile-secondary-toolset 'latex "The default toolset for `rst-compile' with a prefix argument.") @@ -3301,15 +3892,15 @@ string)) to be used for converting the document." (require 'compile) -(defun rst-compile (&optional pfxarg) +(defun rst-compile (&optional use-alt) "Compile command to convert reST document into some output file. Attempts to find configuration file, if it can, overrides the -options. There are two commands to choose from, with a prefix -argument, select the alternative toolset." +options. There are two commands to choose from, with USE-ALT, +select the alternative toolset." (interactive "P") ;; Note: maybe we want to check if there is a Makefile too and not do anything ;; if that is the case. I dunno. - (let* ((toolset (cdr (assq (if pfxarg + (let* ((toolset (cdr (assq (if use-alt rst-compile-secondary-toolset rst-compile-primary-toolset) rst-compile-toolsets))) @@ -3326,14 +3917,14 @@ argument, select the alternative toolset." (list command (or options "") (if conffile - (concat "--config=\"" conffile "\"") + (concat "--config=" (shell-quote-argument conffile)) "") - bufname - (concat outname extension)) + (shell-quote-argument bufname) + (shell-quote-argument (concat outname extension))) " ")) ;; Invoke the compile command. - (if (or compilation-read-command current-prefix-arg) + (if (or compilation-read-command use-alt) (call-interactively 'compile) (compile compile-command)) )) @@ -3341,7 +3932,7 @@ argument, select the alternative toolset." (defun rst-compile-alt-toolset () "Compile command with the alternative toolset." (interactive) - (rst-compile 't)) + (rst-compile t)) (defun rst-compile-pseudo-region () "Show the pseudo-XML rendering of the current active region, @@ -3354,45 +3945,45 @@ or of the entire buffer, if the region is not selected." (cadr (assq 'pseudoxml rst-compile-toolsets)) standard-output))) +;; FIXME: Should be `defcustom` (defvar rst-pdf-program "xpdf" "Program used to preview PDF files.") (defun rst-compile-pdf-preview () "Convert the document to a PDF file and launch a preview program." (interactive) - (let* ((tmp-filename (make-temp-file "rst-out" nil ".pdf")) - (command (format "%s %s %s && %s %s" + (let* ((tmp-filename (make-temp-file "rst_el" nil ".pdf")) + (command (format "%s %s %s && %s %s ; rm %s" (cadr (assq 'pdf rst-compile-toolsets)) buffer-file-name tmp-filename - rst-pdf-program tmp-filename))) + rst-pdf-program tmp-filename tmp-filename))) (start-process-shell-command "rst-pdf-preview" nil command) ;; Note: you could also use (compile command) to view the compilation ;; output. )) +;; FIXME: Should be `defcustom` or use something like `browse-url` (defvar rst-slides-program "firefox" "Program used to preview S5 slides.") (defun rst-compile-slides-preview () "Convert the document to an S5 slide presentation and launch a preview program." (interactive) - (let* ((tmp-filename (make-temp-file "rst-slides" nil ".html")) - (command (format "%s %s %s && %s %s" + (let* ((tmp-filename (make-temp-file "rst_el" nil ".html")) + (command (format "%s %s %s && %s %s ; rm %s" (cadr (assq 's5 rst-compile-toolsets)) buffer-file-name tmp-filename - rst-slides-program tmp-filename))) + rst-slides-program tmp-filename tmp-filename))) (start-process-shell-command "rst-slides-preview" nil command) ;; Note: you could also use (compile command) to view the compilation ;; output. )) - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; ;; Generic text functions that are more convenient than the defaults. -;; +;; FIXME: Unbound command - should be bound or removed (defun rst-replace-lines (fromchar tochar) "Replace flush-left lines, consisting of multiple FROMCHAR characters, with equal-length lines of TOCHAR." @@ -3400,7 +3991,7 @@ with equal-length lines of TOCHAR." cSearch for flush-left lines of char: cand replace with char: ") (save-excursion - (let ((searchre (concat "^" (regexp-quote (string fromchar)) "+\\( *\\)$")) + (let ((searchre (rst-re "^" fromchar "+\\( *\\)$")) (found 0)) (while (search-forward-regexp searchre nil t) (setq found (1+ found)) @@ -3410,12 +4001,14 @@ cand replace with char: ") (insert-char tochar width))) (message (format "%d lines replaced." found))))) +;; FIXME: Unbound command - should be bound or removed (defun rst-join-paragraph () "Join lines in current paragraph into one line, removing end-of-lines." (interactive) (let ((fill-column 65000)) ; some big number (call-interactively 'fill-paragraph))) +;; FIXME: Unbound command - should be bound or removed (defun rst-force-fill-paragraph () "Fill paragraph at point, first joining the paragraph's lines into one. This is useful for filling list item paragraphs." @@ -3424,41 +4017,40 @@ This is useful for filling list item paragraphs." (fill-paragraph nil)) +;; FIXME: Unbound command - should be bound or removed ;; Generic character repeater function. ;; For sections, better to use the specialized function above, but this can ;; be useful for creating separators. -(defun rst-repeat-last-character (&optional tofill) +(defun rst-repeat-last-character (use-next) "Fill the current line up to the length of the preceding line (if not empty), using the last character on the current line. If the preceding line is empty, we use the `fill-column'. -If a prefix argument is provided, use the next line rather than the preceding -line. +If USE-NEXT, use the next line rather than the preceding line. If the current line is longer than the desired length, shave the characters off the current line to fit the desired length. As an added convenience, if the command is repeated immediately, the alternative column is used (fill-column vs. end of previous/next line)." - (interactive) + (interactive "P") (let* ((curcol (current-column)) (curline (+ (count-lines (point-min) (point)) - (if (eq curcol 0) 1 0))) + (if (zerop curcol) 1 0))) (lbp (line-beginning-position 0)) - (prevcol (if (and (= curline 1) (not current-prefix-arg)) + (prevcol (if (and (= curline 1) (not use-next)) fill-column (save-excursion - (forward-line (if current-prefix-arg 1 -1)) + (forward-line (if use-next 1 -1)) (end-of-line) (skip-chars-backward " \t" lbp) (let ((cc (current-column))) - (if (= cc 0) fill-column cc))))) + (if (zerop cc) fill-column cc))))) (rightmost-column - (cond (tofill fill-column) - ((equal last-command 'rst-repeat-last-character) + (cond ((equal last-command 'rst-repeat-last-character) (if (= curcol fill-column) prevcol fill-column)) (t (save-excursion - (if (= prevcol 0) fill-column prevcol))) + (if (zerop prevcol) fill-column prevcol))) )) ) (end-of-line) (if (> (current-column) rightmost-column) @@ -3481,5 +4073,4 @@ column is used (fill-column vs. end of previous/next line)." (provide 'rst) - ;;; rst.el ends here From 28be5ce7b02a715ccc7960fa05ca96111c97ced9 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Mon, 7 May 2012 16:48:41 -0400 Subject: [PATCH 382/564] * loadup.el: Preload newcomment.el. * newcomment.el: Move autoload-only code to toplevel. --- lisp/ChangeLog | 3 +++ lisp/loadup.el | 1 + lisp/newcomment.el | 15 ++++++++++----- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 33138c34809..b0a042f0664 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2012-05-07 Stefan Monnier + * loadup.el: Preload newcomment.el. + * newcomment.el: Move autoload-only code to toplevel. + * buff-menu.el (list-buffers--refresh): Mark `size' as right-align. * emacs-lisp/tabulated-list.el (tabulated-list-init-header): Handle new :right-align column property. diff --git a/lisp/loadup.el b/lisp/loadup.el index 5f005a4e709..ab3b107e56c 100644 --- a/lisp/loadup.el +++ b/lisp/loadup.el @@ -186,6 +186,7 @@ (load "emacs-lisp/lisp-mode") (load "textmodes/text-mode") (load "textmodes/fill") +(load "newcomment") (load "replace") (load "emacs-lisp/tabulated-list") diff --git a/lisp/newcomment.el b/lisp/newcomment.el index 0862427c3ba..5c8829ff72e 100644 --- a/lisp/newcomment.el +++ b/lisp/newcomment.el @@ -102,30 +102,35 @@ Comments might be indented to a different value in order not to go beyond :type 'integer :group 'comment) (make-variable-buffer-local 'comment-column) -;;;###autoload(put 'comment-column 'safe-local-variable 'integerp) +;;;###autoload +(put 'comment-column 'safe-local-variable 'integerp) ;;;###autoload (defvar comment-start nil "String to insert to start a new comment, or nil if no comment syntax.") -;;;###autoload(put 'comment-start 'safe-local-variable 'string-or-null-p) +;;;###autoload +(put 'comment-start 'safe-local-variable 'string-or-null-p) ;;;###autoload (defvar comment-start-skip nil "Regexp to match the start of a comment plus everything up to its body. If there are any \\(...\\) pairs, the comment delimiter text is held to begin at the place matched by the close of the first pair.") -;;;###autoload(put 'comment-start-skip 'safe-local-variable 'string-or-null-p) +;;;###autoload +(put 'comment-start-skip 'safe-local-variable 'string-or-null-p) ;;;###autoload (defvar comment-end-skip nil "Regexp to match the end of a comment plus everything back to its body.") -;;;###autoload(put 'comment-end-skip 'safe-local-variable 'string-or-null-p) +;;;###autoload +(put 'comment-end-skip 'safe-local-variable 'string-or-null-p) ;;;###autoload (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) +;;;###autoload +(put 'comment-end 'safe-local-variable 'string-or-null-p) ;;;###autoload (defvar comment-indent-function 'comment-indent-default From 037945709a73158972078ea4f0f8daa1e7181756 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 7 May 2012 17:26:08 -0400 Subject: [PATCH 383/564] * lisp/international/mule.el (find-auto-coding): Make "unibyte: t" obsolete. * etc/NEWS: Edits. Ref: http://lists.gnu.org/archive/html/emacs-devel/2012-04/msg00434.html --- etc/NEWS | 6 +++++- lisp/ChangeLog | 4 ++++ lisp/international/mule.el | 3 +++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/etc/NEWS b/etc/NEWS index baa39db0cb6..768bc229763 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -65,6 +65,9 @@ ImageMagick to view images, set frames, if emacsclient is only told to open a new frame without specifying any file to visit or expression to evaluate. +** Using "unibyte: t" in Lisp source files is obsolete. +Using "coding: raw-text" instead. + * Editing Changes in Emacs 24.2 @@ -128,7 +131,8 @@ see the `apropos' Custom group for details. ** Calendar -*** The calendars produced by cal-html can optionally include holidays. +*** The calendars produced by cal-html include holidays. +Customize cal-html-holidays to change this. ** Customize diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b0a042f0664..db27b30a034 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-05-07 Glenn Morris + + * international/mule.el (find-auto-coding): Make "unibyte: t" obsolete. + 2012-05-07 Stefan Monnier * loadup.el: Preload newcomment.el. diff --git a/lisp/international/mule.el b/lisp/international/mule.el index 1f88df52fd4..3257b069787 100644 --- a/lisp/international/mule.el +++ b/lisp/international/mule.el @@ -30,6 +30,7 @@ ;;; Code: +;; FIXME? Are these still relevant? Nothing uses them AFAICS. (defconst mule-version "6.0 (HANACHIRUSATO)" "\ Version number and name of this version of MULE (multilingual environment).") @@ -1835,6 +1836,8 @@ If nothing is specified, the return value is nil." (re-search-forward "\\(.*;\\)?[ \t]*unibyte:[ \t]*\\([^ ;]+\\)" head-end t)) + (display-warning 'mule "`unibyte: t' is obsolete; \ +use \"coding: 'raw-text\" instead." :warning) (setq coding-system 'raw-text)) (when (and (not coding-system) (re-search-forward From fdcbcff2253638dedb582b3c8dfc26f2b51f9c2e Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 7 May 2012 17:45:34 -0400 Subject: [PATCH 384/564] Also apply previous change to file locals at the end of the file --- lisp/international/mule.el | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lisp/international/mule.el b/lisp/international/mule.el index 3257b069787..4d567a6e9d8 100644 --- a/lisp/international/mule.el +++ b/lisp/international/mule.el @@ -1890,6 +1890,8 @@ use \"coding: 'raw-text\" instead." :warning) (goto-char pos) (when (and set-auto-coding-for-load (re-search-forward re-unibyte tail-end t)) + (display-warning 'mule "`unibyte: t' is obsolete; \ +use \"coding: 'raw-text\" instead." :warning) (setq coding-system 'raw-text)) (when (and (not coding-system) (re-search-forward re-coding tail-end t)) From 57699e3735e756ef8d11eaa77f4246aa251ec6ca Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 7 May 2012 18:40:58 -0400 Subject: [PATCH 385/564] Fix NEWS typo --- etc/NEWS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etc/NEWS b/etc/NEWS index 768bc229763..9d011df6feb 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -66,7 +66,7 @@ frames, if emacsclient is only told to open a new frame without specifying any file to visit or expression to evaluate. ** Using "unibyte: t" in Lisp source files is obsolete. -Using "coding: raw-text" instead. +Use "coding: raw-text" instead. * Editing Changes in Emacs 24.2 From af8630f410df429ceece61d7ceee2110d0c366a2 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 7 May 2012 18:53:17 -0400 Subject: [PATCH 386/564] Move some forms.el example files to etc/forms directory * etc/forms/README: New. * etc/forms/forms-d2.dat: Move to etc/forms/ subdirectory. * etc/forms/forms-d2.el, etc/forms/forms-pass.el: Move here from ../lisp. * lisp/forms.el: Related comment change. --- etc/ChangeLog | 6 ++++++ etc/forms/README | 1 + etc/{ => forms}/forms-d2.dat | 0 {lisp => etc/forms}/forms-d2.el | 4 ++-- {lisp => etc/forms}/forms-pass.el | 2 +- lisp/ChangeLog | 2 ++ lisp/forms.el | 2 +- 7 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 etc/forms/README rename etc/{ => forms}/forms-d2.dat (100%) rename {lisp => etc/forms}/forms-d2.el (95%) rename {lisp => etc/forms}/forms-pass.el (88%) diff --git a/etc/ChangeLog b/etc/ChangeLog index 2a6cd719220..ffd9f7d31f6 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,3 +1,9 @@ +2012-05-07 Glenn Morris + + * forms/forms-d2.el, forms/forms-pass.el: Move here from ../lisp. + * forms/forms-d2.dat: Move to forms/ subdirectory. + * forms/README: New. + 2012-05-03 Paul Eggert * NEWS: Do not limit current-time-string to years 1000..9999. diff --git a/etc/forms/README b/etc/forms/README new file mode 100644 index 00000000000..4d728450ac4 --- /dev/null +++ b/etc/forms/README @@ -0,0 +1 @@ +This directory contains some example files for the forms.el library. diff --git a/etc/forms-d2.dat b/etc/forms/forms-d2.dat similarity index 100% rename from etc/forms-d2.dat rename to etc/forms/forms-d2.dat diff --git a/lisp/forms-d2.el b/etc/forms/forms-d2.el similarity index 95% rename from lisp/forms-d2.el rename to etc/forms/forms-d2.el index 7d7336030db..9fa2145e4d0 100644 --- a/lisp/forms-d2.el +++ b/etc/forms/forms-d2.el @@ -1,4 +1,4 @@ -;;; forms-d2.el --- demo forms-mode -*- no-byte-compile: t -*- +;;; forms-d2.el --- demo forms-mode ;; Copyright (C) 1991, 1994-1997, 2001-2012 Free Software Foundation, Inc. @@ -27,7 +27,7 @@ ;;; Code: ;; Set the name of the data file. -(setq forms-file (expand-file-name "forms-d2.dat" data-directory)) +(setq forms-file (expand-file-name "forms/forms-d2.dat" data-directory)) ;; Use 'forms-enumerate' to set field names and number thereof. (setq forms-number-of-fields diff --git a/lisp/forms-pass.el b/etc/forms/forms-pass.el similarity index 88% rename from lisp/forms-pass.el rename to etc/forms/forms-pass.el index b635c965cf0..34d4548434b 100644 --- a/lisp/forms-pass.el +++ b/etc/forms/forms-pass.el @@ -1,4 +1,4 @@ -;;; forms-pass.el --- passwd file demo for forms-mode -*- no-byte-compile: t -*- +;;; forms-pass.el --- passwd file demo for forms-mode ;; This file is part of GNU Emacs. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index db27b30a034..fe31437f9aa 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2012-05-07 Glenn Morris + * forms-d2.el, forms-pass.el: Move to ../etc/forms directory. + * international/mule.el (find-auto-coding): Make "unibyte: t" obsolete. 2012-05-07 Stefan Monnier diff --git a/lisp/forms.el b/lisp/forms.el index 69433de0e14..3175ef9dfa9 100644 --- a/lisp/forms.el +++ b/lisp/forms.el @@ -21,7 +21,7 @@ ;;; Commentary: -;; Visit a file using a form. See forms-d2.el for examples. +;; Visit a file using a form. See etc/forms for examples. ;; ;; === Naming conventions ;; From 6f0652af038234beb67768937d9a8033fa06444b Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 7 May 2012 19:02:28 -0400 Subject: [PATCH 387/564] * doc/misc/forms.texi (Long Example): Update for changed location of files. --- doc/misc/ChangeLog | 4 ++++ doc/misc/forms.texi | 5 +++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index d92e7585b17..72e784f1f8d 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -1,3 +1,7 @@ +2012-05-07 Glenn Morris + + * forms.texi (Long Example): Update for changed location of files. + 2012-05-04 Glenn Morris * Makefile.in (INFO_EXT, INFO_OPTS): New, set by configure. diff --git a/doc/misc/forms.texi b/doc/misc/forms.texi index 34c418c14fd..bcb8d8974ea 100644 --- a/doc/misc/forms.texi +++ b/doc/misc/forms.texi @@ -861,7 +861,7 @@ you said `no'. @chapter Long Example The following example exploits most of the features of Forms mode. -This example is included in the distribution as file @file{forms-d2.el}. +This example is included in the distribution as file @file{etc/forms/forms-d2.el}. @example ;; demo2 -- demo forms-mode -*- emacs-lisp -*- @@ -869,7 +869,8 @@ This example is included in the distribution as file @file{forms-d2.el}. ;; @r{This sample forms exploit most of the features of forms mode.} ;; @r{Set the name of the data file.} -(setq forms-file "forms-d2.dat") +(setq forms-file + (expand-file-name "forms/forms-d2.dat" data-directory)) ;; @r{Use @code{forms-enumerate} to set field names and number thereof.} (setq forms-number-of-fields From 1cb51c12e4a05919b6678e4fe5fc62d8fe573755 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Mon, 7 May 2012 20:27:13 -0400 Subject: [PATCH 388/564] * shell.el (shell-completion-vars): Fix last change. Fixes: debbugs:11348 --- lisp/ChangeLog | 4 ++++ lisp/shell.el | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c6a430491b3..ec29758fd51 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-05-08 Stefan Monnier + + * shell.el (shell-completion-vars): Fix last change (bug#11348). + 2012-05-07 Chong Yidong * ansi-color.el (ansi-color-process-output): Check for validity of diff --git a/lisp/shell.el b/lisp/shell.el index 737f69c021d..f7a530102ff 100644 --- a/lisp/shell.el +++ b/lisp/shell.el @@ -432,7 +432,7 @@ Shell buffers. It implements `shell-completion-execonly' for (set (make-local-variable 'pcomplete-parse-arguments-function) #'shell-parse-pcomplete-arguments) (set (make-local-variable 'pcomplete-arg-quote-list) - shell-delimiter-argument-list) + comint-file-name-quote-list) (set (make-local-variable 'pcomplete-termination-string) (cond ((not comint-completion-addsuffix) "") ((stringp comint-completion-addsuffix) From 06f679a7941bdb0ca787021a89702fbed668d3a3 Mon Sep 17 00:00:00 2001 From: "Aaron S. Hawley" Date: Mon, 7 May 2012 21:25:52 -0400 Subject: [PATCH 389/564] * progmodes/make-mode.el (makefile-browse): Remove unnecessary interactive. Fixes: debbugs:11324 --- lisp/ChangeLog | 5 +++++ lisp/progmodes/make-mode.el | 1 - 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index fe31437f9aa..318d18a05d9 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-05-08 Aaron S. Hawley + + * progmodes/make-mode.el (makefile-browse): + Remove unnecessary interactive. (Bug#11324) + 2012-05-07 Glenn Morris * forms-d2.el, forms-pass.el: Move to ../etc/forms directory. diff --git a/lisp/progmodes/make-mode.el b/lisp/progmodes/make-mode.el index a173b11500e..2f4419ba2ea 100644 --- a/lisp/progmodes/make-mode.el +++ b/lisp/progmodes/make-mode.el @@ -1493,7 +1493,6 @@ Insertion takes place at point." (setq buffer-read-only t)) (defun makefile-browse (targets macros) - (interactive) (if (zerop (+ (length targets) (length macros))) (progn (beep) From 5075bdb576c96ffba8eee9ae8bbf70c23315f8ed Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 7 May 2012 21:41:05 -0400 Subject: [PATCH 390/564] * lisp/play/zone.el (zone-pgm-stress): Don't pollute kill-ring. (Bug#11388) --- lisp/ChangeLog | 4 ++++ lisp/play/zone.el | 5 ++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 318d18a05d9..78d4bb87c9b 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-05-08 Glenn Morris + + * play/zone.el (zone-pgm-stress): Don't pollute kill-ring. (Bug#11388) + 2012-05-08 Aaron S. Hawley * progmodes/make-mode.el (makefile-browse): diff --git a/lisp/play/zone.el b/lisp/play/zone.el index f47e273d612..b64099844e2 100644 --- a/lisp/play/zone.el +++ b/lisp/play/zone.el @@ -1,6 +1,6 @@ ;;; zone.el --- idle display hacks -;; Copyright (C) 2000-2012 Free Software Foundation, Inc. +;; Copyright (C) 2000-2012 Free Software Foundation, Inc. ;; Author: Victor Zandy ;; Maintainer: Thien-Thi Nguyen @@ -595,8 +595,7 @@ If the element is a function or a list of a function and a number, (when (< 50 (random 100)) (goto-char (point-max)) (forward-line -1) - (let ((kill-whole-line t)) - (kill-line)) + (delete-region (point) (line-beginning-position 2)) (goto-char (point-min)) (insert (nth (random (length lines)) lines))) (message (concat (make-string (random (- (frame-width) 5)) ? ) "grrr")) From c052c904ffb10bba0b8bd1db11225556824eb19f Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 7 May 2012 21:50:17 -0400 Subject: [PATCH 391/564] Remove no-byte-compile setting from some lisp/language files. Same comments as per 2012-05-01T06:59:34Z!rgm@gnu.org, for lisp/term: Not that compiling these will bring any noticeable speed benefit, but there's really no reason not to compile them. The extra disk space and build time is negligible, and it might reveal use of obsolete functions, bugs, etc. --- lisp/ChangeLog | 8 ++++++++ lisp/language/burmese.el | 2 +- lisp/language/cham.el | 2 +- lisp/language/czech.el | 4 ++-- lisp/language/english.el | 4 ++-- lisp/language/georgian.el | 4 ++-- lisp/language/greek.el | 2 +- lisp/language/japanese.el | 4 ++-- lisp/language/khmer.el | 2 +- lisp/language/korean.el | 4 ++-- lisp/language/lao.el | 4 ++-- lisp/language/misc-lang.el | 2 +- lisp/language/romanian.el | 4 ++-- lisp/language/sinhala.el | 2 +- lisp/language/slovak.el | 4 ++-- lisp/language/tai-viet.el | 4 ++-- lisp/language/thai.el | 4 ++-- lisp/language/utf-8-lang.el | 4 ++-- 18 files changed, 36 insertions(+), 28 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 78d4bb87c9b..ce4103c89d6 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,13 @@ 2012-05-08 Glenn Morris + * lisp/language/burmese.el, language/cham.el, language/czech.el: + * language/english.el, language/georgian.el, language/greek.el: + * language/japanese.el, language/khmer.el, language/korean.el: + * language/lao.el, language/misc-lang.el, language/romanian.el: + * language/sinhala.el, language/slovak.el, language/tai-viet.el: + * language/thai.el, language/utf-8-lang.el: + Remove no-byte-compile setting. + * play/zone.el (zone-pgm-stress): Don't pollute kill-ring. (Bug#11388) 2012-05-08 Aaron S. Hawley diff --git a/lisp/language/burmese.el b/lisp/language/burmese.el index 9fce0583161..420e8d74919 100644 --- a/lisp/language/burmese.el +++ b/lisp/language/burmese.el @@ -1,4 +1,4 @@ -;;; burmese.el --- support for Burmese -*- coding: utf-8; no-byte-compile: t -*- +;;; burmese.el --- support for Burmese -*- coding: utf-8 -*- ;; Copyright (C) 2008, 2009, 2010, 2011 ;; National Institute of Advanced Industrial Science and Technology (AIST) diff --git a/lisp/language/cham.el b/lisp/language/cham.el index b2962fb2889..a025ff0d209 100644 --- a/lisp/language/cham.el +++ b/lisp/language/cham.el @@ -1,4 +1,4 @@ -;;; cham.el --- support for Cham -*- coding: utf-8; no-byte-compile: t -*- +;;; cham.el --- support for Cham -*- coding: utf-8 -*- ;; Copyright (C) 2008, 2009, 2010, 2011, 2012 ;; National Institute of Advanced Industrial Science and Technology (AIST) diff --git a/lisp/language/czech.el b/lisp/language/czech.el index 93f75694555..5bda5d1faa1 100644 --- a/lisp/language/czech.el +++ b/lisp/language/czech.el @@ -1,6 +1,6 @@ -;;; czech.el --- support for Czech -*- coding: iso-2022-7bit; no-byte-compile: t -*- +;;; czech.el --- support for Czech -*- coding: iso-2022-7bit -*- -;; Copyright (C) 1998, 2001-2012 Free Software Foundation, Inc. +;; Copyright (C) 1998, 2001-2012 Free Software Foundation, Inc. ;; Author: Milan Zamazal ;; Maintainer: Pavel Jan,Am(Bk diff --git a/lisp/language/english.el b/lisp/language/english.el index 6d106a5e070..4f4c6788cae 100644 --- a/lisp/language/english.el +++ b/lisp/language/english.el @@ -1,6 +1,6 @@ -;;; english.el --- support for English -*- no-byte-compile: t -*- +;;; english.el --- support for English -;; Copyright (C) 1997, 2001-2012 Free Software Foundation, Inc. +;; Copyright (C) 1997, 2001-2012 Free Software Foundation, Inc. ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, ;; 2006, 2007, 2008, 2009, 2010, 2011 ;; National Institute of Advanced Industrial Science and Technology (AIST) diff --git a/lisp/language/georgian.el b/lisp/language/georgian.el index fcbd395e131..a410a722db3 100644 --- a/lisp/language/georgian.el +++ b/lisp/language/georgian.el @@ -1,6 +1,6 @@ -;;; georgian.el --- language support for Georgian -*- no-byte-compile: t -*- +;;; georgian.el --- language support for Georgian -;; Copyright (C) 2001-2012 Free Software Foundation, Inc. +;; Copyright (C) 2001-2012 Free Software Foundation, Inc. ;; Author: Dave Love ;; Keywords: i18n diff --git a/lisp/language/greek.el b/lisp/language/greek.el index e4d239cdf27..1c8330936c9 100644 --- a/lisp/language/greek.el +++ b/lisp/language/greek.el @@ -1,4 +1,4 @@ -;;; greek.el --- support for Greek -*- no-byte-compile: t -*- +;;; greek.el --- support for Greek ;; Copyright (C) 2002 Free Software Foundation, Inc. ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, diff --git a/lisp/language/japanese.el b/lisp/language/japanese.el index 256263edbb3..83c8fcf66c9 100644 --- a/lisp/language/japanese.el +++ b/lisp/language/japanese.el @@ -1,6 +1,6 @@ -;;; japanese.el --- support for Japanese -*- coding: iso-2022-7bit; no-byte-compile: t -*- +;;; japanese.el --- support for Japanese -*- coding: iso-2022-7bit -*- -;; Copyright (C) 1997, 2001-2012 Free Software Foundation, Inc. +;; Copyright (C) 1997, 2001-2012 Free Software Foundation, Inc. ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, ;; 2005, 2006, 2007, 2008, 2009, 2010, 2011 ;; National Institute of Advanced Industrial Science and Technology (AIST) diff --git a/lisp/language/khmer.el b/lisp/language/khmer.el index d01fa3b33bd..8663ff22ca0 100644 --- a/lisp/language/khmer.el +++ b/lisp/language/khmer.el @@ -1,4 +1,4 @@ -;;; khmer.el --- support for Khmer -*- coding: utf-8; no-byte-compile: t -*- +;;; khmer.el --- support for Khmer -*- coding: utf-8 -*- ;; Copyright (C) 2008, 2009, 2010, 2011 ;; National Institute of Advanced Industrial Science and Technology (AIST) diff --git a/lisp/language/korean.el b/lisp/language/korean.el index 9f93f76a74e..711d24a5b00 100644 --- a/lisp/language/korean.el +++ b/lisp/language/korean.el @@ -1,6 +1,6 @@ -;;; korean.el --- support for Korean -*- coding: iso-2022-7bit; no-byte-compile: t -*- +;;; korean.el --- support for Korean -*- coding: iso-2022-7bit -*- -;; Copyright (C) 1998, 2001-2012 Free Software Foundation, Inc. +;; Copyright (C) 1998, 2001-2012 Free Software Foundation, Inc. ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, ;; 2005, 2006, 2007, 2008, 2009, 2010, 2011 ;; National Institute of Advanced Industrial Science and Technology (AIST) diff --git a/lisp/language/lao.el b/lisp/language/lao.el index 28449bad071..6a0d431f3ec 100644 --- a/lisp/language/lao.el +++ b/lisp/language/lao.el @@ -1,6 +1,6 @@ -;;; lao.el --- support for Lao -*- coding: utf-8; no-byte-compile: t -*- +;;; lao.el --- support for Lao -*- coding: utf-8 -*- -;; Copyright (C) 2001-2012 Free Software Foundation, Inc. +;; Copyright (C) 2001-2012 Free Software Foundation, Inc. ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, ;; 2007, 2008, 2009, 2010, 2011 ;; National Institute of Advanced Industrial Science and Technology (AIST) diff --git a/lisp/language/misc-lang.el b/lisp/language/misc-lang.el index 6fa54ff5c80..1286b361892 100644 --- a/lisp/language/misc-lang.el +++ b/lisp/language/misc-lang.el @@ -1,4 +1,4 @@ -;;; misc-lang.el --- support for miscellaneous languages (characters) -*- no-byte-compile: t -*- +;;; misc-lang.el --- support for miscellaneous languages (characters) ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, ;; 2005, 2006, 2007, 2008, 2009, 2010, 2011 diff --git a/lisp/language/romanian.el b/lisp/language/romanian.el index 75483917a3b..ff5db222bd2 100644 --- a/lisp/language/romanian.el +++ b/lisp/language/romanian.el @@ -1,6 +1,6 @@ -;;; romanian.el --- support for Romanian -*- coding: iso-latin-2; no-byte-compile: t -*- +;;; romanian.el --- support for Romanian -*- coding: iso-latin-2 -*- -;; Copyright (C) 1998, 2001-2012 Free Software Foundation, Inc. +;; Copyright (C) 1998, 2001-2012 Free Software Foundation, Inc. ;; Author: Dan Nicolaescu ;; Keywords: multilingual, Romanian, i18n diff --git a/lisp/language/sinhala.el b/lisp/language/sinhala.el index ea8a6a34cd8..037d753f52a 100644 --- a/lisp/language/sinhala.el +++ b/lisp/language/sinhala.el @@ -1,4 +1,4 @@ -;;; sinhala.el --- support for Sinhala -*- coding: utf-8; no-byte-compile: t -*- +;;; sinhala.el --- support for Sinhala -*- coding: utf-8 -*- ;; Copyright (C) 2008, 2009, 2010, 2011 ;; National Institute of Advanced Industrial Science and Technology (AIST) diff --git a/lisp/language/slovak.el b/lisp/language/slovak.el index b17dab8e315..27e43fa22cf 100644 --- a/lisp/language/slovak.el +++ b/lisp/language/slovak.el @@ -1,6 +1,6 @@ -;;; slovak.el --- support for Slovak -*- coding: iso-2022-7bit; no-byte-compile: t -*- +;;; slovak.el --- support for Slovak -*- coding: iso-2022-7bit -*- -;; Copyright (C) 1998, 2001-2012 Free Software Foundation, Inc. +;; Copyright (C) 1998, 2001-2012 Free Software Foundation, Inc. ;; Authors: Tibor ,B)(Bimko , ;; Milan Zamazal diff --git a/lisp/language/tai-viet.el b/lisp/language/tai-viet.el index f8b7a9d6df8..496453f6502 100644 --- a/lisp/language/tai-viet.el +++ b/lisp/language/tai-viet.el @@ -1,6 +1,6 @@ -;;; tai-viet.el --- support for Tai Viet -*- coding: utf-8; no-byte-compile: t -*- +;;; tai-viet.el --- support for Tai Viet -*- coding: utf-8 -*- -;; Copyright (C) 2007-2012 Free Software Foundation, Inc. +;; Copyright (C) 2007-2012 Free Software Foundation, Inc. ;; Copyright (C) 2007, 2008, 2009, 2010, 2011 ;; National Institute of Advanced Industrial Science and Technology (AIST) ;; Registration Number H13PRO009 diff --git a/lisp/language/thai.el b/lisp/language/thai.el index 9bebe6ef185..c7522f94ec8 100644 --- a/lisp/language/thai.el +++ b/lisp/language/thai.el @@ -1,6 +1,6 @@ -;;; thai.el --- support for Thai -*- coding: iso-2022-7bit; no-byte-compile: t -*- +;;; thai.el --- support for Thai -*- coding: iso-2022-7bit -*- -;; Copyright (C) 1997-1998, 2000-2012 Free Software Foundation, Inc. +;; Copyright (C) 1997-1998, 2000-2012 Free Software Foundation, Inc. ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, ;; 2005, 2006, 2007, 2008, 2009, 2010, 2011 ;; National Institute of Advanced Industrial Science and Technology (AIST) diff --git a/lisp/language/utf-8-lang.el b/lisp/language/utf-8-lang.el index eb0828694d4..e0313870323 100644 --- a/lisp/language/utf-8-lang.el +++ b/lisp/language/utf-8-lang.el @@ -1,6 +1,6 @@ -;;; utf-8-lang.el --- generic UTF-8 language environment -*- no-byte-compile: t -*- +;;; utf-8-lang.el --- generic UTF-8 language environment -;; Copyright (C) 2001-2012 Free Software Foundation, Inc. +;; Copyright (C) 2001-2012 Free Software Foundation, Inc. ;; Author: Dave Love ;; Keywords: i18n From 143d9dd80ec717bfd571a94ccf64b0a15d06334a Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 7 May 2012 21:57:08 -0400 Subject: [PATCH 392/564] doc/lispref/two-volume.make small fix * doc/lispref/two-volume.make (emacsdir): New. (tex): Add directory with emacsver.texi to TEXINPUTS. --- doc/lispref/ChangeLog | 5 +++++ doc/lispref/two-volume.make | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 186558be254..843c8dc9439 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,8 @@ +2012-05-08 Glenn Morris + + * two-volume.make (emacsdir): New. + (tex): Add directory with emacsver.texi to TEXINPUTS. + 2012-05-05 Glenn Morris * minibuf.texi (Minibuffer History, Basic Completion): diff --git a/doc/lispref/two-volume.make b/doc/lispref/two-volume.make index 4acbb193f82..07fcaf09b98 100644 --- a/doc/lispref/two-volume.make +++ b/doc/lispref/two-volume.make @@ -1,4 +1,4 @@ -# Copyright (C) 2007-2012 Free Software Foundation, Inc. +# Copyright (C) 2007-2012 Free Software Foundation, Inc. # See end for copying conditions. # although it would be nice to use tex rather than pdftex to avoid @@ -6,8 +6,9 @@ # existing, etc., dvips | ps2pdf doesn't preserve the page size. # Instead of creating a special dvips config file, put up with the warnings. texinfodir=../misc +emacsdir=../emacs -tex = TEXINPUTS=".:$(texinfodir):${TEXINPUTS}" pdftex -interaction=nonstopmode +tex = TEXINPUTS=".:$(texinfodir):${emacsdir}:${TEXINPUTS}" pdftex -interaction=nonstopmode all: vol1.pdf vol2.pdf From e6afe47b278fe561ef8aa864b9cb5cd2894be256 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 7 May 2012 22:01:28 -0400 Subject: [PATCH 393/564] * doc/lispref/Makefile.in (clean): Add some more vol1/2 items. --- doc/lispref/ChangeLog | 2 ++ doc/lispref/Makefile.in | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 843c8dc9439..abb441e5c91 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,5 +1,7 @@ 2012-05-08 Glenn Morris + * Makefile.in (clean): Add some more vol1/2 items. + * two-volume.make (emacsdir): New. (tex): Add directory with emacsver.texi to TEXINPUTS. diff --git a/doc/lispref/Makefile.in b/doc/lispref/Makefile.in index 10ec236eaee..2b79d51695d 100644 --- a/doc/lispref/Makefile.in +++ b/doc/lispref/Makefile.in @@ -132,7 +132,8 @@ mostlyclean: rm -f elisp[12]* clean: mostlyclean - rm -f elisp.dvi elisp.pdf elisp.ps vol[12].pdf + rm -f elisp.dvi elisp.pdf elisp.ps + rm -f vol[12].dvi vol[12].pdf vol[12].ps vol[12].tmp rm -rf elisp.html rm -f emacs-lispref-${version}.tar* From ca4b98faff8bad176de15c29b4e6b4c2b5a7d38a Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 7 May 2012 23:38:27 -0700 Subject: [PATCH 394/564] Stop keeping 3 copies of the lispref menu structure for no reason vol1.texi and vol2.texi are only used to generate TeX output, and this constructs its own table of contents and does not use the @menu stuff. * vol1.texi, vol2.texi: No need to keep menus in these files. * elisp.texi, anti.texi: Comments. --- doc/lispref/ChangeLog | 6 +- doc/lispref/anti.texi | 3 +- doc/lispref/elisp.texi | 6 - doc/lispref/vol1.texi | 1365 +--------------------------------------- doc/lispref/vol2.texi | 1364 +-------------------------------------- 5 files changed, 21 insertions(+), 2723 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 0dbfb9962e7..a3346642342 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,7 @@ +2012-05-08 Glenn Morris + + * vol1.texi, vol2.texi: No need to keep menus in these files. + 2012-05-05 Glenn Morris * objects.texi (Process Type, Overlay Type): Tweak page-breaks. @@ -10994,7 +10998,7 @@ ;; coding: utf-8 ;; End: - Copyright (C) 1998-2012 Free Software Foundation, Inc. + Copyright (C) 1998-2012 Free Software Foundation, Inc. This file is part of GNU Emacs. diff --git a/doc/lispref/anti.texi b/doc/lispref/anti.texi index 59f8f91c855..f70d0235e92 100644 --- a/doc/lispref/anti.texi +++ b/doc/lispref/anti.texi @@ -7,8 +7,7 @@ @node Antinews, GNU Free Documentation License, Packaging, Top @appendix Emacs 23 Antinews -@c Update the elisp.texi, vol1.texi, vol2.texi Antinews menu entries -@c with the above version number. +@c Update the elisp.texi Antinews menu entry with the above version number. For those users who live backwards in time, here is information about downgrading to Emacs version 23.4. We hope you will enjoy the greater diff --git a/doc/lispref/elisp.texi b/doc/lispref/elisp.texi index 5e0356ff1ff..a799b2fe1b4 100644 --- a/doc/lispref/elisp.texi +++ b/doc/lispref/elisp.texi @@ -108,7 +108,6 @@ Cover art by Etienne Suvasa. @insertcopying @end ifnottex -@c Copy any updates to vol1.texi and vol2.texi. @menu * Introduction:: Introduction and conventions used. @@ -189,7 +188,6 @@ Appendices @c be correctly identified by `texinfo-multiple-files-update'. In @c particular, the detailed menu header line MUST be identical to the @c value of `texinfo-master-menu-header'. See texnfo-upd.el. -@c Copy any updates to vol1.texi and vol2.texi. @detailmenu --- The Detailed Node Listing --- @@ -1522,12 +1520,8 @@ Object Internals @include package.texi -@c MOVE to Emacs Manual: include misc-modes.texi - @c appendices -@c REMOVE this: include non-hacker.texi - @include anti.texi @include doclicense.texi @include gpl.texi diff --git a/doc/lispref/vol1.texi b/doc/lispref/vol1.texi index 2687cd57d5a..7712ea1f330 100644 --- a/doc/lispref/vol1.texi +++ b/doc/lispref/vol1.texi @@ -66,7 +66,7 @@ This is edition @value{VERSION} of the GNU Emacs Lisp Reference Manual,@* corresponding to Emacs version @value{EMACSVER}. -Copyright @copyright{} 1990-1996, 1998-2012 Free Software Foundation, Inc. +Copyright @copyright{} 1990-1996, 1998-2012 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document @@ -114,7 +114,7 @@ Cover art by Etienne Suvasa. @ifnottex -@node Top, Introduction, (dir), (dir) +@node Top @top Emacs Lisp This Info file contains edition @value{VERSION} of the GNU Emacs Lisp @@ -122,85 +122,8 @@ Reference Manual, corresponding to GNU Emacs version @value{EMACSVER}. @end ifnottex @menu -* Introduction:: Introduction and conventions used. - -* Lisp Data Types:: Data types of objects in Emacs Lisp. -* Numbers:: Numbers and arithmetic functions. -* Strings and Characters:: Strings, and functions that work on them. -* Lists:: Lists, cons cells, and related functions. -* Sequences Arrays Vectors:: Lists, strings and vectors are called sequences. - Certain functions act on any kind of sequence. - The description of vectors is here as well. -* Hash Tables:: Very fast lookup-tables. -* Symbols:: Symbols represent names, uniquely. - -* Evaluation:: How Lisp expressions are evaluated. -* Control Structures:: Conditionals, loops, nonlocal exits. -* Variables:: Using symbols in programs to stand for values. -* Functions:: A function is a Lisp program - that can be invoked from other functions. -* Macros:: Macros are a way to extend the Lisp language. -* Customization:: Making variables and faces customizable. - -* Loading:: Reading files of Lisp code into Lisp. -* Byte Compilation:: Compilation makes programs run faster. -* Advising Functions:: Adding to the definition of a function. -* Debugging:: Tools and tips for debugging Lisp programs. - -* Read and Print:: Converting Lisp objects to text and back. -* Minibuffers:: Using the minibuffer to read input. -* Command Loop:: How the editor command loop works, - and how you can call its subroutines. -* Keymaps:: Defining the bindings from keys to commands. -* Modes:: Defining major and minor modes. -* Documentation:: Writing and using documentation strings. - -* Files:: Accessing files. -* Backups and Auto-Saving:: Controlling how backups and auto-save - files are made. -* Buffers:: Creating and using buffer objects. -* Windows:: Manipulating windows and displaying buffers. -* Frames:: Making multiple system-level windows. -* Positions:: Buffer positions and motion functions. -* Markers:: Markers represent positions and update - automatically when the text is changed. - -* Text:: Examining and changing text in buffers. -* Non-ASCII Characters:: Non-ASCII text in buffers and strings. -* Searching and Matching:: Searching buffers for strings or regexps. -* Syntax Tables:: The syntax table controls word and list parsing. -* Abbrevs:: How Abbrev mode works, and its data structures. - -* Processes:: Running and communicating with subprocesses. -* Display:: Features for controlling the screen display. -* System Interface:: Getting the user id, system type, environment - variables, and other such things. - -* Packaging:: Preparing Lisp code for distribution. - -Appendices - -* Antinews:: Info for users downgrading to Emacs 23. -* GNU Free Documentation License:: The license for this documentation. -* GPL:: Conditions for copying and changing GNU Emacs. -* Tips:: Advice and coding conventions for Emacs Lisp. -* GNU Emacs Internals:: Building and dumping Emacs; - internal data structures. -* Standard Errors:: List of some standard error symbols. -* Standard Keymaps:: List of some standard keymaps. -* Standard Hooks:: List of some standard hook variables. - -* Index:: Index including concepts, functions, variables, - and other terms. - -@ignore -* New Symbols:: New functions and variables in Emacs @value{EMACSVER}. -@end ignore - -@c Do NOT modify the following 3 lines! They must have this form to -@c be correctly identified by `texinfo-multiple-files-update'. In -@c particular, the detailed menu header line MUST be identical to the -@c value of `texinfo-master-menu-header'. See texnfo-upd.el. +* Not used:: This file is only used with tex, which + generates its own menu. @detailmenu --- The Detailed Node Listing --- @@ -209,1280 +132,10 @@ Appendices Here are other nodes that are subnodes of those already listed, mentioned here so you can get to them in one step: -Introduction +Not used -* Caveats:: Flaws and a request for help. -* Lisp History:: Emacs Lisp is descended from Maclisp. -* Conventions:: How the manual is formatted. -* Version Info:: Which Emacs version is running? -* Acknowledgements:: The authors, editors, and sponsors of this manual. - -Conventions - -* Some Terms:: Explanation of terms we use in this manual. -* nil and t:: How the symbols @code{nil} and @code{t} are used. -* Evaluation Notation:: The format we use for examples of evaluation. -* Printing Notation:: The format we use when examples print text. -* Error Messages:: The format we use for examples of errors. -* Buffer Text Notation:: The format we use for buffer contents in examples. -* Format of Descriptions:: Notation for describing functions, variables, etc. - -Format of Descriptions - -* A Sample Function Description:: A description of an imaginary - function, @code{foo}. -* A Sample Variable Description:: A description of an imaginary - variable, @code{electric-future-map}. - -Lisp Data Types - -* Printed Representation:: How Lisp objects are represented as text. -* Comments:: Comments and their formatting conventions. -* Programming Types:: Types found in all Lisp systems. -* Editing Types:: Types specific to Emacs. -* Circular Objects:: Read syntax for circular structure. -* Type Predicates:: Tests related to types. -* Equality Predicates:: Tests of equality between any two objects. - -Programming Types - -* Integer Type:: Numbers without fractional parts. -* Floating Point Type:: Numbers with fractional parts and with a large range. -* Character Type:: The representation of letters, numbers and - control characters. -* Symbol Type:: A multi-use object that refers to a function, - variable, or property list, and has a unique identity. -* Sequence Type:: Both lists and arrays are classified as sequences. -* Cons Cell Type:: Cons cells, and lists (which are made from cons cells). -* Array Type:: Arrays include strings and vectors. -* String Type:: An (efficient) array of characters. -* Vector Type:: One-dimensional arrays. -* Char-Table Type:: One-dimensional sparse arrays indexed by characters. -* Bool-Vector Type:: One-dimensional arrays of @code{t} or @code{nil}. -* Hash Table Type:: Super-fast lookup tables. -* Function Type:: A piece of executable code you can call from elsewhere. -* Macro Type:: A method of expanding an expression into another - expression, more fundamental but less pretty. -* Primitive Function Type:: A function written in C, callable from Lisp. -* Byte-Code Type:: A function written in Lisp, then compiled. -* Autoload Type:: A type used for automatically loading seldom-used - functions. - -Character Type - -* Basic Char Syntax:: Syntax for regular characters. -* General Escape Syntax:: How to specify characters by their codes. -* Ctl-Char Syntax:: Syntax for control characters. -* Meta-Char Syntax:: Syntax for meta-characters. -* Other Char Bits:: Syntax for hyper-, super-, and alt-characters. - -Cons Cell and List Types - -* Box Diagrams:: Drawing pictures of lists. -* Dotted Pair Notation:: A general syntax for cons cells. -* Association List Type:: A specially constructed list. - -String Type - -* Syntax for Strings:: How to specify Lisp strings. -* Non-ASCII in Strings:: International characters in strings. -* Nonprinting Characters:: Literal unprintable characters in strings. -* Text Props and Strings:: Strings with text properties. - -Editing Types - -* Buffer Type:: The basic object of editing. -* Marker Type:: A position in a buffer. -* Window Type:: Buffers are displayed in windows. -* Frame Type:: Windows subdivide frames. -* Terminal Type:: A terminal device displays frames. -* Window Configuration Type:: Recording the way a frame is subdivided. -* Frame Configuration Type:: Recording the status of all frames. -* Process Type:: A subprocess of Emacs running on the underlying OS. -* Stream Type:: Receive or send characters. -* Keymap Type:: What function a keystroke invokes. -* Overlay Type:: How an overlay is represented. -* Font Type:: Fonts for displaying text. - -Numbers - -* Integer Basics:: Representation and range of integers. -* Float Basics:: Representation and range of floating point. -* Predicates on Numbers:: Testing for numbers. -* Comparison of Numbers:: Equality and inequality predicates. -* Numeric Conversions:: Converting float to integer and vice versa. -* Arithmetic Operations:: How to add, subtract, multiply and divide. -* Rounding Operations:: Explicitly rounding floating point numbers. -* Bitwise Operations:: Logical and, or, not, shifting. -* Math Functions:: Trig, exponential and logarithmic functions. -* Random Numbers:: Obtaining random integers, predictable or not. - -Strings and Characters - -* String Basics:: Basic properties of strings and characters. -* Predicates for Strings:: Testing whether an object is a string or char. -* Creating Strings:: Functions to allocate new strings. -* Modifying Strings:: Altering the contents of an existing string. -* Text Comparison:: Comparing characters or strings. -* String Conversion:: Converting to and from characters and strings. -* Formatting Strings:: @code{format}: Emacs's analogue of @code{printf}. -* Case Conversion:: Case conversion functions. -* Case Tables:: Customizing case conversion. - -Lists - -* Cons Cells:: How lists are made out of cons cells. -* List-related Predicates:: Is this object a list? Comparing two lists. -* List Elements:: Extracting the pieces of a list. -* Building Lists:: Creating list structure. -* List Variables:: Modifying lists stored in variables. -* Modifying Lists:: Storing new pieces into an existing list. -* Sets And Lists:: A list can represent a finite mathematical set. -* Association Lists:: A list can represent a finite relation or mapping. -* Rings:: Managing a fixed-size ring of objects. - -Modifying Existing List Structure - -* Setcar:: Replacing an element in a list. -* Setcdr:: Replacing part of the list backbone. - This can be used to remove or add elements. -* Rearrangement:: Reordering the elements in a list; combining lists. - -Sequences, Arrays, and Vectors - -* Sequence Functions:: Functions that accept any kind of sequence. -* Arrays:: Characteristics of arrays in Emacs Lisp. -* Array Functions:: Functions specifically for arrays. -* Vectors:: Special characteristics of Emacs Lisp vectors. -* Vector Functions:: Functions specifically for vectors. -* Char-Tables:: How to work with char-tables. -* Bool-Vectors:: How to work with bool-vectors. - -Hash Tables - -* Creating Hash:: Functions to create hash tables. -* Hash Access:: Reading and writing the hash table contents. -* Defining Hash:: Defining new comparison methods. -* Other Hash:: Miscellaneous. - -Symbols - -* Symbol Components:: Symbols have names, values, function definitions - and property lists. -* Definitions:: A definition says how a symbol will be used. -* Creating Symbols:: How symbols are kept unique. -* Property Lists:: Each symbol has a property list - for recording miscellaneous information. - -Property Lists - -* Plists and Alists:: Comparison of the advantages of property - lists and association lists. -* Symbol Plists:: Functions to access symbols' property lists. -* Other Plists:: Accessing property lists stored elsewhere. - -Evaluation - -* Intro Eval:: Evaluation in the scheme of things. -* Forms:: How various sorts of objects are evaluated. -* Quoting:: Avoiding evaluation (to put constants in - the program). -* Backquote:: Easier construction of list structure. -* Eval:: How to invoke the Lisp interpreter explicitly. - -Kinds of Forms - -* Self-Evaluating Forms:: Forms that evaluate to themselves. -* Symbol Forms:: Symbols evaluate as variables. -* Classifying Lists:: How to distinguish various sorts of list forms. -* Function Indirection:: When a symbol appears as the car of a list, - we find the real function via the symbol. -* Function Forms:: Forms that call functions. -* Macro Forms:: Forms that call macros. -* Special Forms:: "Special forms" are idiosyncratic primitives, - most of them extremely important. -* Autoloading:: Functions set up to load files - containing their real definitions. - -Control Structures - -* Sequencing:: Evaluation in textual order. -* Conditionals:: @code{if}, @code{cond}, @code{when}, @code{unless}. -* Combining Conditions:: @code{and}, @code{or}, @code{not}. -* Iteration:: @code{while} loops. -* Nonlocal Exits:: Jumping out of a sequence. - -Nonlocal Exits - -* Catch and Throw:: Nonlocal exits for the program's own purposes. -* Examples of Catch:: Showing how such nonlocal exits can be written. -* Errors:: How errors are signaled and handled. -* Cleanups:: Arranging to run a cleanup form if an - error happens. - -Errors - -* Signaling Errors:: How to report an error. -* Processing of Errors:: What Emacs does when you report an error. -* Handling Errors:: How you can trap errors and continue execution. -* Error Symbols:: How errors are classified for trapping them. - -Variables - -* Global Variables:: Variable values that exist permanently, everywhere. -* Constant Variables:: Certain "variables" have values that never change. -* Local Variables:: Variable values that exist only temporarily. -* Void Variables:: Symbols that lack values. -* Defining Variables:: A definition says a symbol is used as a variable. -* Tips for Defining:: Things you should think about when you - define a variable. -* Accessing Variables:: Examining values of variables whose names - are known only at run time. -* Setting Variables:: Storing new values in variables. -* Variable Scoping:: How Lisp chooses among local and global values. -* Buffer-Local Variables:: Variable values in effect only in one buffer. -* File Local Variables:: Handling local variable lists in files. -* Directory Local Variables:: Local variables common to all files in a - directory. -* Frame-Local Variables:: Frame-local bindings for variables. -* Variable Aliases:: Variables that are aliases for other variables. -* Variables with Restricted Values:: Non-constant variables whose value can - @emph{not} be an arbitrary Lisp object. - -Scoping Rules for Variable Bindings - -* Scope:: Scope means where in the program a value - is visible. Comparison with other languages. -* Extent:: Extent means how long in time a value exists. -* Impl of Scope:: Two ways to implement dynamic scoping. -* Using Scoping:: How to use dynamic scoping carefully and - avoid problems. - -Buffer-Local Variables - -* Intro to Buffer-Local:: Introduction and concepts. -* Creating Buffer-Local:: Creating and destroying buffer-local bindings. -* Default Value:: The default value is seen in buffers - that don't have their own buffer-local values. - -Functions - -* What Is a Function:: Lisp functions vs. primitives; terminology. -* Lambda Expressions:: How functions are expressed as Lisp objects. -* Function Names:: A symbol can serve as the name of a function. -* Defining Functions:: Lisp expressions for defining functions. -* Calling Functions:: How to use an existing function. -* Mapping Functions:: Applying a function to each element of a list, etc. -* Anonymous Functions:: Lambda expressions are functions with no names. -* Function Cells:: Accessing or setting the function definition - of a symbol. -* Closures:: Functions that enclose a lexical environment. -* Obsolete Functions:: Declaring functions obsolete. -* Inline Functions:: Defining functions that the compiler - will expand inline. -* Declaring Functions:: Telling the compiler that a function is defined. -* Function Safety:: Determining whether a function is safe to call. -* Related Topics:: Cross-references to specific Lisp primitives - that have a special bearing on how - functions work. - -Lambda Expressions - -* Lambda Components:: The parts of a lambda expression. -* Simple Lambda:: A simple example. -* Argument List:: Details and special features of argument lists. -* Function Documentation:: How to put documentation in a function. - -Macros - -* Simple Macro:: A basic example. -* Expansion:: How, when and why macros are expanded. -* Compiling Macros:: How macros are expanded by the compiler. -* Defining Macros:: How to write a macro definition. -* Problems with Macros:: Don't evaluate the macro arguments too many times. - Don't hide the user's variables. -* Indenting Macros:: Specifying how to indent macro calls. - -Common Problems Using Macros - -* Wrong Time:: Do the work in the expansion, not in the macro. -* Argument Evaluation:: The expansion should evaluate each macro arg once. -* Surprising Local Vars:: Local variable bindings in the expansion - require special care. -* Eval During Expansion:: Don't evaluate them; put them in the expansion. -* Repeated Expansion:: Avoid depending on how many times expansion is done. - -Customization Settings - -* Common Keywords:: Common keyword arguments for all kinds of - customization declarations. -* Group Definitions:: Writing customization group definitions. -* Variable Definitions:: Declaring user options. -* Customization Types:: Specifying the type of a user option. -* Applying Customizations:: Functions to apply customization settings. -* Custom Themes:: Writing Custom themes. - -Customization Types - -* Simple Types:: Simple customization types: sexp, integer, number, - string, file, directory, alist. -* Composite Types:: Build new types from other types or data. -* Splicing into Lists:: Splice elements into list with @code{:inline}. -* Type Keywords:: Keyword-argument pairs in a customization type. -* Defining New Types:: Give your type a name. - -Loading - -* How Programs Do Loading:: The @code{load} function and others. -* Load Suffixes:: Details about the suffixes that @code{load} tries. -* Library Search:: Finding a library to load. -* Loading Non-ASCII:: Non-@acronym{ASCII} characters in Emacs Lisp files. -* Autoload:: Setting up a function to autoload. -* Repeated Loading:: Precautions about loading a file twice. -* Named Features:: Loading a library if it isn't already loaded. -* Where Defined:: Finding which file defined a certain symbol. -* Unloading:: How to "unload" a library that was loaded. -* Hooks for Loading:: Providing code to be run when - particular libraries are loaded. - -Byte Compilation - -* Speed of Byte-Code:: An example of speedup from byte compilation. -* Compilation Functions:: Byte compilation functions. -* Docs and Compilation:: Dynamic loading of documentation strings. -* Dynamic Loading:: Dynamic loading of individual functions. -* Eval During Compile:: Code to be evaluated when you compile. -* Compiler Errors:: Handling compiler error messages. -* Byte-Code Objects:: The data type used for byte-compiled functions. -* Disassembly:: Disassembling byte-code; how to read byte-code. - -Advising Emacs Lisp Functions - -* Simple Advice:: A simple example to explain the basics of advice. -* Defining Advice:: Detailed description of @code{defadvice}. -* Around-Advice:: Wrapping advice around a function's definition. -* Computed Advice:: ...is to @code{defadvice} as @code{fset} is to @code{defun}. -* Activation of Advice:: Advice doesn't do anything until you activate it. -* Enabling Advice:: You can enable or disable each piece of advice. -* Preactivation:: Preactivation is a way of speeding up the - loading of compiled advice. -* Argument Access in Advice:: How advice can access the function's arguments. -* Combined Definition:: How advice is implemented. - -Debugging Lisp Programs - -* Debugger:: A debugger for the Emacs Lisp evaluator. -* Edebug:: A source-level Emacs Lisp debugger. -* Syntax Errors:: How to find syntax errors. -* Test Coverage:: Ensuring you have tested all branches in your code. - -The Lisp Debugger - -* Error Debugging:: Entering the debugger when an error happens. -* Infinite Loops:: Stopping and debugging a program that doesn't exit. -* Function Debugging:: Entering it when a certain function is called. -* Explicit Debug:: Entering it at a certain point in the program. -* Using Debugger:: What the debugger does; what you see while in it. -* Debugger Commands:: Commands used while in the debugger. -* Invoking the Debugger:: How to call the function @code{debug}. -* Internals of Debugger:: Subroutines of the debugger, and global variables. - -Edebug - -* Using Edebug:: Introduction to use of Edebug. -* Instrumenting:: You must instrument your code - in order to debug it with Edebug. -* Edebug Execution Modes:: Execution modes, stopping more or less often. -* Jumping:: Commands to jump to a specified place. -* Edebug Misc:: Miscellaneous commands. -* Breaks:: Setting breakpoints to make the program stop. -* Trapping Errors:: Trapping errors with Edebug. -* Edebug Views:: Views inside and outside of Edebug. -* Edebug Eval:: Evaluating expressions within Edebug. -* Eval List:: Expressions whose values are displayed - each time you enter Edebug. -* Printing in Edebug:: Customization of printing. -* Trace Buffer:: How to produce trace output in a buffer. -* Coverage Testing:: How to test evaluation coverage. -* The Outside Context:: Data that Edebug saves and restores. -* Edebug and Macros:: Specifying how to handle macro calls. -* Edebug Options:: Option variables for customizing Edebug. - -Breaks - -* Breakpoints:: Breakpoints at stop points. -* Global Break Condition:: Breaking on an event. -* Source Breakpoints:: Embedding breakpoints in source code. - -The Outside Context - -* Checking Whether to Stop::When Edebug decides what to do. -* Edebug Display Update:: When Edebug updates the display. -* Edebug Recursive Edit:: When Edebug stops execution. - -Edebug and Macros - -* Instrumenting Macro Calls::The basic problem. -* Specification List:: How to specify complex patterns of evaluation. -* Backtracking:: What Edebug does when matching fails. -* Specification Examples:: To help understand specifications. - -Debugging Invalid Lisp Syntax - -* Excess Open:: How to find a spurious open paren or missing close. -* Excess Close:: How to find a spurious close paren or missing open. - -Reading and Printing Lisp Objects - -* Streams Intro:: Overview of streams, reading and printing. -* Input Streams:: Various data types that can be used as - input streams. -* Input Functions:: Functions to read Lisp objects from text. -* Output Streams:: Various data types that can be used as - output streams. -* Output Functions:: Functions to print Lisp objects as text. -* Output Variables:: Variables that control what the printing - functions do. - -Minibuffers - -* Intro to Minibuffers:: Basic information about minibuffers. -* Text from Minibuffer:: How to read a straight text string. -* Object from Minibuffer:: How to read a Lisp object or expression. -* Minibuffer History:: Recording previous minibuffer inputs - so the user can reuse them. -* Initial Input:: Specifying initial contents for the minibuffer. -* Completion:: How to invoke and customize completion. -* Yes-or-No Queries:: Asking a question with a simple answer. -* Multiple Queries:: Asking a series of similar questions. -* Reading a Password:: Reading a password from the terminal. -* Minibuffer Commands:: Commands used as key bindings in minibuffers. -* Minibuffer Windows:: Operating on the special minibuffer windows. -* Minibuffer Contents:: How such commands access the minibuffer text. -* Recursive Mini:: Whether recursive entry to minibuffer is allowed. -* Minibuffer Misc:: Various customization hooks and variables. - -Completion - -* Basic Completion:: Low-level functions for completing strings. - (These are too low level to use the minibuffer.) -* Minibuffer Completion:: Invoking the minibuffer with completion. -* Completion Commands:: Minibuffer commands that do completion. -* High-Level Completion:: Convenient special cases of completion - (reading buffer names, variable names, etc.). -* Reading File Names:: Using completion to read file names and - shell commands. -* Completion Variables:: Variables controlling completion behavior. -* Programmed Completion:: Writing your own completion function. -* Completion in Buffers:: Completing text in ordinary buffers. - -Command Loop - -* Command Overview:: How the command loop reads commands. -* Defining Commands:: Specifying how a function should read arguments. -* Interactive Call:: Calling a command, so that it will read arguments. -* Distinguish Interactive:: Making a command distinguish interactive calls. -* Command Loop Info:: Variables set by the command loop for you to examine. -* Adjusting Point:: Adjustment of point after a command. -* Input Events:: What input looks like when you read it. -* Reading Input:: How to read input events from the keyboard or mouse. -* Special Events:: Events processed immediately and individually. -* Waiting:: Waiting for user input or elapsed time. -* Quitting:: How @kbd{C-g} works. How to catch or defer quitting. -* Prefix Command Arguments:: How the commands to set prefix args work. -* Recursive Editing:: Entering a recursive edit, - and why you usually shouldn't. -* Disabling Commands:: How the command loop handles disabled commands. -* Command History:: How the command history is set up, and how accessed. -* Keyboard Macros:: How keyboard macros are implemented. - -Defining Commands - -* Using Interactive:: General rules for @code{interactive}. -* Interactive Codes:: The standard letter-codes for reading arguments - in various ways. -* Interactive Examples:: Examples of how to read interactive arguments. - -Input Events - -* Keyboard Events:: Ordinary characters--keys with symbols on them. -* Function Keys:: Function keys--keys with names, not symbols. -* Mouse Events:: Overview of mouse events. -* Click Events:: Pushing and releasing a mouse button. -* Drag Events:: Moving the mouse before releasing the button. -* Button-Down Events:: A button was pushed and not yet released. -* Repeat Events:: Double and triple click (or drag, or down). -* Motion Events:: Just moving the mouse, not pushing a button. -* Focus Events:: Moving the mouse between frames. -* Misc Events:: Other events the system can generate. -* Event Examples:: Examples of the lists for mouse events. -* Classifying Events:: Finding the modifier keys in an event symbol. - Event types. -* Accessing Mouse:: Functions to extract info from mouse events. -* Accessing Scroll:: Functions to get info from scroll bar events. -* Strings of Events:: Special considerations for putting - keyboard character events in a string. - -Reading Input - -* Key Sequence Input:: How to read one key sequence. -* Reading One Event:: How to read just one event. -* Event Mod:: How Emacs modifies events as they are read. -* Invoking the Input Method:: How reading an event uses the input method. -* Quoted Character Input:: Asking the user to specify a character. -* Event Input Misc:: How to reread or throw away input events. - -Keymaps - -* Key Sequences:: Key sequences as Lisp objects. -* Keymap Basics:: Basic concepts of keymaps. -* Format of Keymaps:: What a keymap looks like as a Lisp object. -* Creating Keymaps:: Functions to create and copy keymaps. -* Inheritance and Keymaps:: How one keymap can inherit the bindings - of another keymap. -* Prefix Keys:: Defining a key with a keymap as its definition. -* Active Keymaps:: How Emacs searches the active keymaps - for a key binding. -* Searching Keymaps:: A pseudo-Lisp summary of searching active maps. -* Controlling Active Maps:: Each buffer has a local keymap - to override the standard (global) bindings. - A minor mode can also override them. -* Key Lookup:: Finding a key's binding in one keymap. -* Functions for Key Lookup:: How to request key lookup. -* Changing Key Bindings:: Redefining a key in a keymap. -* Remapping Commands:: A keymap can translate one command to another. -* Translation Keymaps:: Keymaps for translating sequences of events. -* Key Binding Commands:: Interactive interfaces for redefining keys. -* Scanning Keymaps:: Looking through all keymaps, for printing help. -* Menu Keymaps:: Defining a menu as a keymap. - -Menu Keymaps - -* Defining Menus:: How to make a keymap that defines a menu. -* Mouse Menus:: How users actuate the menu with the mouse. -* Keyboard Menus:: How users actuate the menu with the keyboard. -* Menu Example:: Making a simple menu. -* Menu Bar:: How to customize the menu bar. -* Tool Bar:: A tool bar is a row of images. -* Modifying Menus:: How to add new items to a menu. - -Defining Menus - -* Simple Menu Items:: A simple kind of menu key binding, - limited in capabilities. -* Extended Menu Items:: More powerful menu item definitions - let you specify keywords to enable - various features. -* Menu Separators:: Drawing a horizontal line through a menu. -* Alias Menu Items:: Using command aliases in menu items. -* Toolkit Differences:: Not all toolkits provide the same features. - -Major and Minor Modes - -* Hooks:: How to use hooks; how to write code that provides hooks. -* Major Modes:: Defining major modes. -* Minor Modes:: Defining minor modes. -* Mode Line Format:: Customizing the text that appears in the mode line. -* Imenu:: Providing a menu of definitions made in a buffer. -* Font Lock Mode:: How modes can highlight text according to syntax. -* Auto-Indentation:: How to teach Emacs to indent for a major mode. -* Desktop Save Mode:: How modes can have buffer state saved between - Emacs sessions. - -Hooks - -* Running Hooks:: How to run a hook. -* Setting Hooks:: How to put functions on a hook, or remove them. - -Major Modes - -* Major Mode Conventions:: Coding conventions for keymaps, etc. -* Auto Major Mode:: How Emacs chooses the major mode automatically. -* Mode Help:: Finding out how to use a mode. -* Derived Modes:: Defining a new major mode based on another major - mode. -* Basic Major Modes:: Modes that other modes are often derived from. -* Mode Hooks:: Hooks run at the end of major mode functions. -* Tabulated List Mode:: Parent mode for buffers containing tabulated data. -* Generic Modes:: Defining a simple major mode that supports - comment syntax and Font Lock mode. -* Example Major Modes:: Text mode and Lisp modes. - -Minor Modes - -* Minor Mode Conventions:: Tips for writing a minor mode. -* Keymaps and Minor Modes:: How a minor mode can have its own keymap. -* Defining Minor Modes:: A convenient facility for defining minor modes. - -Mode Line Format - -* Mode Line Basics:: Basic ideas of mode line control. -* Mode Line Data:: The data structure that controls the mode line. -* Mode Line Top:: The top level variable, mode-line-format. -* Mode Line Variables:: Variables used in that data structure. -* %-Constructs:: Putting information into a mode line. -* Properties in Mode:: Using text properties in the mode line. -* Header Lines:: Like a mode line, but at the top. -* Emulating Mode Line:: Formatting text as the mode line would. - -Font Lock Mode - -* Font Lock Basics:: Overview of customizing Font Lock. -* Search-based Fontification:: Fontification based on regexps. -* Customizing Keywords:: Customizing search-based fontification. -* Other Font Lock Variables:: Additional customization facilities. -* Levels of Font Lock:: Each mode can define alternative levels - so that the user can select more or less. -* Precalculated Fontification:: How Lisp programs that produce the buffer - contents can also specify how to fontify it. -* Faces for Font Lock:: Special faces specifically for Font Lock. -* Syntactic Font Lock:: Fontification based on syntax tables. -* Multiline Font Lock:: How to coerce Font Lock into properly - highlighting multiline constructs. - -Multiline Font Lock Constructs - -* Font Lock Multiline:: Marking multiline chunks with a text property. -* Region to Refontify:: Controlling which region gets refontified - after a buffer change. - -Automatic Indentation of code - -* SMIE:: A simple minded indentation engine. - -Simple Minded Indentation Engine - -* SMIE setup:: SMIE setup and features. -* Operator Precedence Grammars:: A very simple parsing technique. -* SMIE Grammar:: Defining the grammar of a language. -* SMIE Lexer:: Defining tokens. -* SMIE Tricks:: Working around the parser's limitations. -* SMIE Indentation:: Specifying indentation rules. -* SMIE Indentation Helpers:: Helper functions for indentation rules. -* SMIE Indentation Example:: Sample indentation rules. - -Documentation - -* Documentation Basics:: Where doc strings are defined and stored. -* Accessing Documentation:: How Lisp programs can access doc strings. -* Keys in Documentation:: Substituting current key bindings. -* Describing Characters:: Making printable descriptions of - non-printing characters and key sequences. -* Help Functions:: Subroutines used by Emacs help facilities. - -Files - -* Visiting Files:: Reading files into Emacs buffers for editing. -* Saving Buffers:: Writing changed buffers back into files. -* Reading from Files:: Reading files into buffers without visiting. -* Writing to Files:: Writing new files from parts of buffers. -* File Locks:: Locking and unlocking files, to prevent - simultaneous editing by two people. -* Information about Files:: Testing existence, accessibility, size of files. -* Changing Files:: Renaming files, changing permissions, etc. -* File Names:: Decomposing and expanding file names. -* Contents of Directories:: Getting a list of the files in a directory. -* Create/Delete Dirs:: Creating and Deleting Directories. -* Magic File Names:: Special handling for certain file names. -* Format Conversion:: Conversion to and from various file formats. - -Visiting Files - -* Visiting Functions:: The usual interface functions for visiting. -* Subroutines of Visiting:: Lower-level subroutines that they use. - -Information about Files - -* Testing Accessibility:: Is a given file readable? Writable? -* Kinds of Files:: Is it a directory? A symbolic link? -* Truenames:: Eliminating symbolic links from a file name. -* File Attributes:: How large is it? Any other names? Etc. -* Locating Files:: How to find a file in standard places. - -File Names - -* File Name Components:: The directory part of a file name, and the rest. -* Relative File Names:: Some file names are relative to a current directory. -* Directory Names:: A directory's name as a directory - is different from its name as a file. -* File Name Expansion:: Converting relative file names to absolute ones. -* Unique File Names:: Generating names for temporary files. -* File Name Completion:: Finding the completions for a given file name. -* Standard File Names:: If your package uses a fixed file name, - how to handle various operating systems simply. - -File Format Conversion - -* Format Conversion Overview:: @code{insert-file-contents} and @code{write-region}. -* Format Conversion Round-Trip:: Using @code{format-alist}. -* Format Conversion Piecemeal:: Specifying non-paired conversion. - -Backups and Auto-Saving - -* Backup Files:: How backup files are made; how their names - are chosen. -* Auto-Saving:: How auto-save files are made; how their - names are chosen. -* Reverting:: @code{revert-buffer}, and how to customize - what it does. - -Backup Files - -* Making Backups:: How Emacs makes backup files, and when. -* Rename or Copy:: Two alternatives: renaming the old file - or copying it. -* Numbered Backups:: Keeping multiple backups for each source file. -* Backup Names:: How backup file names are computed; customization. - -Buffers - -* Buffer Basics:: What is a buffer? -* Current Buffer:: Designating a buffer as current - so that primitives will access its contents. -* Buffer Names:: Accessing and changing buffer names. -* Buffer File Name:: The buffer file name indicates which file - is visited. -* Buffer Modification:: A buffer is @dfn{modified} if it needs to be saved. -* Modification Time:: Determining whether the visited file was changed - "behind Emacs's back". -* Read Only Buffers:: Modifying text is not allowed in a - read-only buffer. -* The Buffer List:: How to look at all the existing buffers. -* Creating Buffers:: Functions that create buffers. -* Killing Buffers:: Buffers exist until explicitly killed. -* Indirect Buffers:: An indirect buffer shares text with some - other buffer. -* Swapping Text:: Swapping text between two buffers. -* Buffer Gap:: The gap in the buffer. - -Windows - -* Basic Windows:: Basic information on using windows. -* Splitting Windows:: Splitting one window into two windows. -* Deleting Windows:: Deleting a window gives its space to other windows. -* Selecting Windows:: The selected window is the one that you edit in. -* Cyclic Window Ordering:: Moving around the existing windows. -* Buffers and Windows:: Each window displays the contents of a buffer. -* Switching Buffers:: Higher-level functions for switching to a buffer. -* Choosing Window:: How to choose a window for displaying a buffer. -* Display Action Functions:: Subroutines for @code{display-buffer}. -* Choosing Window Options:: Extra options affecting how buffers are displayed. -* Window History:: Each window remembers the buffers displayed in it. -* Dedicated Windows:: How to avoid displaying another buffer in - a specific window. -* Window Point:: Each window has its own location of point. -* Window Start and End:: Buffer positions indicating which text is - on-screen in a window. -* Textual Scrolling:: Moving text up and down through the window. -* Vertical Scrolling:: Moving the contents up and down on the window. -* Horizontal Scrolling:: Moving the contents sideways on the window. -* Size of Window:: Accessing the size of a window. -* Resizing Windows:: Changing the size of a window. -* Coordinates and Windows:: Converting coordinates to windows. -* Window Tree:: The layout and sizes of all windows in a frame. -* Window Configurations:: Saving and restoring the state of the screen. -* Window Parameters:: Associating additional information with windows. -* Window Hooks:: Hooks for scrolling, window size changes, - redisplay going past a certain point, - or window configuration changes. - -Frames - -* Creating Frames:: Creating additional frames. -* Multiple Terminals:: Displaying on several different devices. -* Frame Parameters:: Controlling frame size, position, font, etc. -* Terminal Parameters:: Parameters common for all frames on terminal. -* Frame Titles:: Automatic updating of frame titles. -* Deleting Frames:: Frames last until explicitly deleted. -* Finding All Frames:: How to examine all existing frames. -* Frames and Windows:: A frame contains windows; - display of text always works through windows. -* Minibuffers and Frames:: How a frame finds the minibuffer to use. -* Input Focus:: Specifying the selected frame. -* Visibility of Frames:: Frames may be visible or invisible, or icons. -* Raising and Lowering:: Raising a frame makes it hide other windows; - lowering it makes the others hide it. -* Frame Configurations:: Saving the state of all frames. -* Mouse Tracking:: Getting events that say when the mouse moves. -* Mouse Position:: Asking where the mouse is, or moving it. -* Pop-Up Menus:: Displaying a menu for the user to select from. -* Dialog Boxes:: Displaying a box to ask yes or no. -* Pointer Shape:: Specifying the shape of the mouse pointer. -* Window System Selections::Transferring text to and from other X clients. -* Drag and Drop:: Internals of Drag-and-Drop implementation. -* Color Names:: Getting the definitions of color names. -* Text Terminal Colors:: Defining colors for text terminals. -* Resources:: Getting resource values from the server. -* Display Feature Testing:: Determining the features of a terminal. - -Frame Parameters - -* Parameter Access:: How to change a frame's parameters. -* Initial Parameters:: Specifying frame parameters when you make a frame. -* Window Frame Parameters:: List of frame parameters for window systems. -* Size and Position:: Changing the size and position of a frame. -* Geometry:: Parsing geometry specifications. - -Window Frame Parameters - -* Basic Parameters:: Parameters that are fundamental. -* Position Parameters:: The position of the frame on the screen. -* Size Parameters:: Frame's size. -* Layout Parameters:: Size of parts of the frame, and - enabling or disabling some parts. -* Buffer Parameters:: Which buffers have been or should be shown. -* Management Parameters:: Communicating with the window manager. -* Cursor Parameters:: Controlling the cursor appearance. -* Font and Color Parameters:: Fonts and colors for the frame text. - -Positions - -* Point:: The special position where editing takes place. -* Motion:: Changing point. -* Excursions:: Temporary motion and buffer changes. -* Narrowing:: Restricting editing to a portion of the buffer. - -Motion - -* Character Motion:: Moving in terms of characters. -* Word Motion:: Moving in terms of words. -* Buffer End Motion:: Moving to the beginning or end of the buffer. -* Text Lines:: Moving in terms of lines of text. -* Screen Lines:: Moving in terms of lines as displayed. -* List Motion:: Moving by parsing lists and sexps. -* Skipping Characters:: Skipping characters belonging to a certain set. - -Markers - -* Overview of Markers:: The components of a marker, and how it relocates. -* Predicates on Markers:: Testing whether an object is a marker. -* Creating Markers:: Making empty markers or markers at certain places. -* Information from Markers::Finding the marker's buffer or character position. -* Marker Insertion Types:: Two ways a marker can relocate when you - insert where it points. -* Moving Markers:: Moving the marker to a new buffer or position. -* The Mark:: How "the mark" is implemented with a marker. -* The Region:: How to access "the region". - -Text - -* Near Point:: Examining text in the vicinity of point. -* Buffer Contents:: Examining text in a general fashion. -* Comparing Text:: Comparing substrings of buffers. -* Insertion:: Adding new text to a buffer. -* Commands for Insertion:: User-level commands to insert text. -* Deletion:: Removing text from a buffer. -* User-Level Deletion:: User-level commands to delete text. -* The Kill Ring:: Where removed text sometimes is saved for - later use. -* Undo:: Undoing changes to the text of a buffer. -* Maintaining Undo:: How to enable and disable undo information. - How to control how much information is kept. -* Filling:: Functions for explicit filling. -* Margins:: How to specify margins for filling commands. -* Adaptive Fill:: Adaptive Fill mode chooses a fill prefix - from context. -* Auto Filling:: How auto-fill mode is implemented to break lines. -* Sorting:: Functions for sorting parts of the buffer. -* Columns:: Computing horizontal positions, and using them. -* Indentation:: Functions to insert or adjust indentation. -* Case Changes:: Case conversion of parts of the buffer. -* Text Properties:: Assigning Lisp property lists to text characters. -* Substitution:: Replacing a given character wherever it appears. -* Transposition:: Swapping two portions of a buffer. -* Registers:: How registers are implemented. Accessing - the text or position stored in a register. -* Base 64:: Conversion to or from base 64 encoding. -* Checksum/Hash:: Computing cryptographic hashes. -* Parsing HTML/XML:: Parsing HTML and XML. -* Atomic Changes:: Installing several buffer changes "atomically". -* Change Hooks:: Supplying functions to be run when text is changed. - -The Kill Ring - -* Kill Ring Concepts:: What text looks like in the kill ring. -* Kill Functions:: Functions that kill text. -* Yanking:: How yanking is done. -* Yank Commands:: Commands that access the kill ring. -* Low-Level Kill Ring:: Functions and variables for kill ring access. -* Internals of Kill Ring:: Variables that hold kill ring data. - -Indentation - -* Primitive Indent:: Functions used to count and insert indentation. -* Mode-Specific Indent:: Customize indentation for different modes. -* Region Indent:: Indent all the lines in a region. -* Relative Indent:: Indent the current line based on previous lines. -* Indent Tabs:: Adjustable, typewriter-like tab stops. -* Motion by Indent:: Move to first non-blank character. - -Text Properties - -* Examining Properties:: Looking at the properties of one character. -* Changing Properties:: Setting the properties of a range of text. -* Property Search:: Searching for where a property changes value. -* Special Properties:: Particular properties with special meanings. -* Format Properties:: Properties for representing formatting of text. -* Sticky Properties:: How inserted text gets properties from - neighboring text. -* Lazy Properties:: Computing text properties in a lazy fashion - only when text is examined. -* Clickable Text:: Using text properties to make regions of text - do something when you click on them. -* Fields:: The @code{field} property defines - fields within the buffer. -* Not Intervals:: Why text properties do not use - Lisp-visible text intervals. - -Non-@acronym{ASCII} Characters - -* Text Representations:: How Emacs represents text. -* Converting Representations:: Converting unibyte to multibyte and vice versa. -* Selecting a Representation:: Treating a byte sequence as unibyte or multi. -* Character Codes:: How unibyte and multibyte relate to - codes of individual characters. -* Character Properties:: Character attributes that define their - behavior and handling. -* Character Sets:: The space of possible character codes - is divided into various character sets. -* Scanning Charsets:: Which character sets are used in a buffer? -* Translation of Characters:: Translation tables are used for conversion. -* Coding Systems:: Coding systems are conversions for saving files. -* Input Methods:: Input methods allow users to enter various - non-ASCII characters without special keyboards. -* Locales:: Interacting with the POSIX locale. - -Coding Systems - -* Coding System Basics:: Basic concepts. -* Encoding and I/O:: How file I/O functions handle coding systems. -* Lisp and Coding Systems:: Functions to operate on coding system names. -* User-Chosen Coding Systems:: Asking the user to choose a coding system. -* Default Coding Systems:: Controlling the default choices. -* Specifying Coding Systems:: Requesting a particular coding system - for a single file operation. -* Explicit Encoding:: Encoding or decoding text without doing I/O. -* Terminal I/O Encoding:: Use of encoding for terminal I/O. -* MS-DOS File Types:: How DOS "text" and "binary" files - relate to coding systems. - -Searching and Matching - -* String Search:: Search for an exact match. -* Searching and Case:: Case-independent or case-significant searching. -* Regular Expressions:: Describing classes of strings. -* Regexp Search:: Searching for a match for a regexp. -* POSIX Regexps:: Searching POSIX-style for the longest match. -* Match Data:: Finding out which part of the text matched, - after a string or regexp search. -* Search and Replace:: Commands that loop, searching and replacing. -* Standard Regexps:: Useful regexps for finding sentences, pages,... - -Regular Expressions - -* Syntax of Regexps:: Rules for writing regular expressions. -* Regexp Example:: Illustrates regular expression syntax. -* Regexp Functions:: Functions for operating on regular expressions. - -Syntax of Regular Expressions - -* Regexp Special:: Special characters in regular expressions. -* Char Classes:: Character classes used in regular expressions. -* Regexp Backslash:: Backslash-sequences in regular expressions. - -The Match Data - -* Replacing Match:: Replacing a substring that was matched. -* Simple Match Data:: Accessing single items of match data, - such as where a particular subexpression started. -* Entire Match Data:: Accessing the entire match data at once, as a list. -* Saving Match Data:: Saving and restoring the match data. - -Syntax Tables - -* Syntax Basics:: Basic concepts of syntax tables. -* Syntax Descriptors:: How characters are classified. -* Syntax Table Functions:: How to create, examine and alter syntax tables. -* Syntax Properties:: Overriding syntax with text properties. -* Motion and Syntax:: Moving over characters with certain syntaxes. -* Parsing Expressions:: Parsing balanced expressions - using the syntax table. -* Standard Syntax Tables:: Syntax tables used by various major modes. -* Syntax Table Internals:: How syntax table information is stored. -* Categories:: Another way of classifying character syntax. - -Syntax Descriptors - -* Syntax Class Table:: Table of syntax classes. -* Syntax Flags:: Additional flags each character can have. - -Parsing Expressions - -* Motion via Parsing:: Motion functions that work by parsing. -* Position Parse:: Determining the syntactic state of a position. -* Parser State:: How Emacs represents a syntactic state. -* Low-Level Parsing:: Parsing across a specified region. -* Control Parsing:: Parameters that affect parsing. - -Abbrevs and Abbrev Expansion - -* Abbrev Tables:: Creating and working with abbrev tables. -* Defining Abbrevs:: Specifying abbreviations and their expansions. -* Abbrev Files:: Saving abbrevs in files. -* Abbrev Expansion:: Controlling expansion; expansion subroutines. -* Standard Abbrev Tables:: Abbrev tables used by various major modes. -* Abbrev Properties:: How to read and set abbrev properties. - Which properties have which effect. -* Abbrev Table Properties:: How to read and set abbrev table properties. - Which properties have which effect. - -Processes - -* Subprocess Creation:: Functions that start subprocesses. -* Shell Arguments:: Quoting an argument to pass it to a shell. -* Synchronous Processes:: Details of using synchronous subprocesses. -* Asynchronous Processes:: Starting up an asynchronous subprocess. -* Deleting Processes:: Eliminating an asynchronous subprocess. -* Process Information:: Accessing run-status and other attributes. -* Input to Processes:: Sending input to an asynchronous subprocess. -* Signals to Processes:: Stopping, continuing or interrupting - an asynchronous subprocess. -* Output from Processes:: Collecting output from an asynchronous subprocess. -* Sentinels:: Sentinels run when process run-status changes. -* Query Before Exit:: Whether to query if exiting will kill a process. -* System Processes:: Accessing other processes running on your system. -* Transaction Queues:: Transaction-based communication with subprocesses. -* Network:: Opening network connections. -* Network Servers:: Network servers let Emacs accept net connections. -* Datagrams:: UDP network connections. -* Low-Level Network:: Lower-level but more general function - to create connections and servers. -* Misc Network:: Additional relevant functions for net connections. -* Serial Ports:: Communicating with serial ports. -* Byte Packing:: Using bindat to pack and unpack binary data. - -Receiving Output from Processes - -* Process Buffers:: If no filter, output is put in a buffer. -* Filter Functions:: Filter functions accept output from the process. -* Decoding Output:: Filters can get unibyte or multibyte strings. -* Accepting Output:: How to wait until process output arrives. - -Low-Level Network Access - -* Network Processes:: Using @code{make-network-process}. -* Network Options:: Further control over network connections. -* Network Feature Testing:: Determining which network features work on - the machine you are using. - -Packing and Unpacking Byte Arrays - -* Bindat Spec:: Describing data layout. -* Bindat Functions:: Doing the unpacking and packing. -* Bindat Examples:: Samples of what bindat.el can do for you! - -Emacs Display - -* Refresh Screen:: Clearing the screen and redrawing everything on it. -* Forcing Redisplay:: Forcing redisplay. -* Truncation:: Folding or wrapping long text lines. -* The Echo Area:: Displaying messages at the bottom of the screen. -* Warnings:: Displaying warning messages for the user. -* Invisible Text:: Hiding part of the buffer text. -* Selective Display:: Hiding part of the buffer text (the old way). -* Temporary Displays:: Displays that go away automatically. -* Overlays:: Use overlays to highlight parts of the buffer. -* Width:: How wide a character or string is on the screen. -* Line Height:: Controlling the height of lines. -* Faces:: A face defines a graphics style - for text characters: font, colors, etc. -* Fringes:: Controlling window fringes. -* Scroll Bars:: Controlling vertical scroll bars. -* Display Property:: Enabling special display features. -* Images:: Displaying images in Emacs buffers. -* Buttons:: Adding clickable buttons to Emacs buffers. -* Abstract Display:: Emacs's Widget for Object Collections. -* Blinking:: How Emacs shows the matching open parenthesis. -* Character Display:: How Emacs displays individual characters. -* Beeping:: Audible signal to the user. -* Window Systems:: Which window system is being used. -* Bidirectional Display:: Display of bidirectional scripts, such as - Arabic and Farsi. - -The Echo Area - -* Displaying Messages:: Explicitly displaying text in the echo area. -* Progress:: Informing user about progress of a long operation. -* Logging Messages:: Echo area messages are logged for the user. -* Echo Area Customization:: Controlling the echo area. - -Reporting Warnings - -* Warning Basics:: Warnings concepts and functions to report them. -* Warning Variables:: Variables programs bind to customize - their warnings. -* Warning Options:: Variables users set to control display of warnings. -* Delayed Warnings:: Deferring warning display until the end of a command. - -Overlays - -* Managing Overlays:: Creating and moving overlays. -* Overlay Properties:: How to read and set properties. - What properties do to the screen display. -* Finding Overlays:: Searching for overlays. - -Faces - -* Defining Faces:: How to define a face. -* Face Attributes:: What is in a face? -* Attribute Functions:: Functions to examine and set face attributes. -* Displaying Faces:: How Emacs combines the faces specified for - a character. -* Face Remapping:: Remapping faces to alternative definitions. -* Face Functions:: How to define and examine faces. -* Auto Faces:: Hook for automatic face assignment. -* Basic Faces:: Faces that are defined by default. -* Font Selection:: Finding the best available font for a face. -* Font Lookup:: Looking up the names of available fonts - and information about them. -* Fontsets:: A fontset is a collection of fonts - that handle a range of character sets. -* Low-Level Font:: Lisp representation for character display fonts. - -Fringes - -* Fringe Size/Pos:: Specifying where to put the window fringes. -* Fringe Indicators:: Displaying indicator icons in the window fringes. -* Fringe Cursors:: Displaying cursors in the right fringe. -* Fringe Bitmaps:: Specifying bitmaps for fringe indicators. -* Customizing Bitmaps:: Specifying your own bitmaps to use in the fringes. -* Overlay Arrow:: Display of an arrow to indicate position. - -The @code{display} Property - -* Replacing Specs:: Display specs that replace the text. -* Specified Space:: Displaying one space with a specified width. -* Pixel Specification:: Specifying space width or height in pixels. -* Other Display Specs:: Displaying an image; adjusting the height, - spacing, and other properties of text. -* Display Margins:: Displaying text or images to the side of - the main text. - -Images - -* Image Formats:: Supported image formats. -* Image Descriptors:: How to specify an image for use in @code{:display}. -* XBM Images:: Special features for XBM format. -* XPM Images:: Special features for XPM format. -* GIF Images:: Special features for GIF format. -* TIFF Images:: Special features for TIFF format. -* PostScript Images:: Special features for PostScript format. -* ImageMagick Images:: Special features available through ImageMagick. -* Other Image Types:: Various other formats are supported. -* Defining Images:: Convenient ways to define an image for later use. -* Showing Images:: Convenient ways to display an image once - it is defined. -* Animated Images:: Some image formats can be animated. -* Image Cache:: Internal mechanisms of image display. - -Buttons - -* Button Properties:: Button properties with special meanings. -* Button Types:: Defining common properties for classes of buttons. -* Making Buttons:: Adding buttons to Emacs buffers. -* Manipulating Buttons:: Getting and setting properties of buttons. -* Button Buffer Commands:: Buffer-wide commands and bindings for buttons. - -Abstract Display - -* Abstract Display Functions:: Functions in the Ewoc package. -* Abstract Display Example:: Example of using Ewoc. - -Character Display - -* Usual Display:: The usual conventions for displaying characters. -* Display Tables:: What a display table consists of. -* Active Display Table:: How Emacs selects a display table to use. -* Glyphs:: How to define a glyph, and what glyphs mean. -* Glyphless Chars:: How glyphless characters are drawn. - -Operating System Interface - -* Starting Up:: Customizing Emacs startup processing. -* Getting Out:: How exiting works (permanent or temporary). -* System Environment:: Distinguish the name and kind of system. -* User Identification:: Finding the name and user id of the user. -* Time of Day:: Getting the current time. -* Time Conversion:: Converting a time from numeric form to - calendrical data and vice versa. -* Time Parsing:: Converting a time from numeric form to text - and vice versa. -* Processor Run Time:: Getting the run time used by Emacs. -* Time Calculations:: Adding, subtracting, comparing times, etc. -* Timers:: Setting a timer to call a function at a - certain time. -* Idle Timers:: Setting a timer to call a function when Emacs has - been idle for a certain length of time. -* Terminal Input:: Accessing and recording terminal input. -* Terminal Output:: Controlling and recording terminal output. -* Sound Output:: Playing sounds on the computer's speaker. -* X11 Keysyms:: Operating on key symbols for X Windows. -* Batch Mode:: Running Emacs without terminal interaction. -* Session Management:: Saving and restoring state with - X Session Management. -* Notifications:: Desktop notifications. -* Dynamic Libraries:: On-demand loading of support libraries. - -Starting Up Emacs - -* Startup Summary:: Sequence of actions Emacs performs at startup. -* Init File:: Details on reading the init file. -* Terminal-Specific:: How the terminal-specific Lisp file is read. -* Command-Line Arguments:: How command-line arguments are processed, - and how you can customize them. - -Getting Out of Emacs - -* Killing Emacs:: Exiting Emacs irreversibly. -* Suspending Emacs:: Exiting Emacs reversibly. - -Terminal Input - -* Input Modes:: Options for how input is processed. -* Recording Input:: Saving histories of recent or all input events. - -Preparing Lisp code for distribution - -* Packaging Basics:: The basic concepts of Emacs Lisp packages. -* Simple Packages:: How to package a single .el file. -* Multi-file Packages:: How to package multiple files. -* Package Archives:: Maintaining package archives. - -Tips and Conventions - -* Coding Conventions:: Conventions for clean and robust programs. -* Key Binding Conventions:: Which keys should be bound by which programs. -* Programming Tips:: Making Emacs code fit smoothly in Emacs. -* Compilation Tips:: Making compiled code run fast. -* Warning Tips:: Turning off compiler warnings. -* Documentation Tips:: Writing readable documentation strings. -* Comment Tips:: Conventions for writing comments. -* Library Headers:: Standard headers for library packages. - -GNU Emacs Internals - -* Building Emacs:: How the dumped Emacs is made. -* Pure Storage:: Kludge to make preloaded Lisp functions shareable. -* Garbage Collection:: Reclaiming space for Lisp objects no longer used. -* Memory Usage:: Info about total size of Lisp objects made so far. -* Writing Emacs Primitives:: Writing C code for Emacs. -* Object Internals:: Data formats of buffers, windows, processes. - -Object Internals - -* Buffer Internals:: Components of a buffer structure. -* Window Internals:: Components of a window structure. -* Process Internals:: Components of a process structure. +* Not used:: This file is only used with TeX, which + generates its own menu. @end detailmenu @end menu @@ -1538,12 +191,8 @@ Object Internals @c include display.texi @c include os.texi -@c MOVE to Emacs Manual: include misc-modes.texi - @c appendices -@c REMOVE this: include non-hacker.texi - @c include anti.texi @c include doclicense.texi @c include gpl.texi diff --git a/doc/lispref/vol2.texi b/doc/lispref/vol2.texi index c74e7c438b4..66e0250bd71 100644 --- a/doc/lispref/vol2.texi +++ b/doc/lispref/vol2.texi @@ -113,7 +113,7 @@ Cover art by Etienne Suvasa. @ifnottex -@node Top, Introduction, (dir), (dir) +@node Top @top Emacs Lisp This Info file contains edition @value{VERSION} of the GNU Emacs Lisp @@ -121,85 +121,8 @@ Reference Manual, corresponding to GNU Emacs version @value{EMACSVER}. @end ifnottex @menu -* Introduction:: Introduction and conventions used. - -* Lisp Data Types:: Data types of objects in Emacs Lisp. -* Numbers:: Numbers and arithmetic functions. -* Strings and Characters:: Strings, and functions that work on them. -* Lists:: Lists, cons cells, and related functions. -* Sequences Arrays Vectors:: Lists, strings and vectors are called sequences. - Certain functions act on any kind of sequence. - The description of vectors is here as well. -* Hash Tables:: Very fast lookup-tables. -* Symbols:: Symbols represent names, uniquely. - -* Evaluation:: How Lisp expressions are evaluated. -* Control Structures:: Conditionals, loops, nonlocal exits. -* Variables:: Using symbols in programs to stand for values. -* Functions:: A function is a Lisp program - that can be invoked from other functions. -* Macros:: Macros are a way to extend the Lisp language. -* Customization:: Making variables and faces customizable. - -* Loading:: Reading files of Lisp code into Lisp. -* Byte Compilation:: Compilation makes programs run faster. -* Advising Functions:: Adding to the definition of a function. -* Debugging:: Tools and tips for debugging Lisp programs. - -* Read and Print:: Converting Lisp objects to text and back. -* Minibuffers:: Using the minibuffer to read input. -* Command Loop:: How the editor command loop works, - and how you can call its subroutines. -* Keymaps:: Defining the bindings from keys to commands. -* Modes:: Defining major and minor modes. -* Documentation:: Writing and using documentation strings. - -* Files:: Accessing files. -* Backups and Auto-Saving:: Controlling how backups and auto-save - files are made. -* Buffers:: Creating and using buffer objects. -* Windows:: Manipulating windows and displaying buffers. -* Frames:: Making multiple system-level windows. -* Positions:: Buffer positions and motion functions. -* Markers:: Markers represent positions and update - automatically when the text is changed. - -* Text:: Examining and changing text in buffers. -* Non-ASCII Characters:: Non-ASCII text in buffers and strings. -* Searching and Matching:: Searching buffers for strings or regexps. -* Syntax Tables:: The syntax table controls word and list parsing. -* Abbrevs:: How Abbrev mode works, and its data structures. - -* Processes:: Running and communicating with subprocesses. -* Display:: Features for controlling the screen display. -* System Interface:: Getting the user id, system type, environment - variables, and other such things. - -* Packaging:: Preparing Lisp code for distribution. - -Appendices - -* Antinews:: Info for users downgrading to Emacs 23. -* GNU Free Documentation License:: The license for this documentation. -* GPL:: Conditions for copying and changing GNU Emacs. -* Tips:: Advice and coding conventions for Emacs Lisp. -* GNU Emacs Internals:: Building and dumping Emacs; - internal data structures. -* Standard Errors:: List of some standard error symbols. -* Standard Keymaps:: List of some standard keymaps. -* Standard Hooks:: List of some standard hook variables. - -* Index:: Index including concepts, functions, variables, - and other terms. - -@ignore -* New Symbols:: New functions and variables in Emacs @value{EMACSVER}. -@end ignore - -@c Do NOT modify the following 3 lines! They must have this form to -@c be correctly identified by `texinfo-multiple-files-update'. In -@c particular, the detailed menu header line MUST be identical to the -@c value of `texinfo-master-menu-header'. See texnfo-upd.el. +* Not used:: This file is only used with tex, which + generates its own menu. @detailmenu --- The Detailed Node Listing --- @@ -208,1280 +131,13 @@ Appendices Here are other nodes that are subnodes of those already listed, mentioned here so you can get to them in one step: -Introduction +Here are other nodes that are subnodes of those already listed, +mentioned here so you can get to them in one step: -* Caveats:: Flaws and a request for help. -* Lisp History:: Emacs Lisp is descended from Maclisp. -* Conventions:: How the manual is formatted. -* Version Info:: Which Emacs version is running? -* Acknowledgements:: The authors, editors, and sponsors of this manual. +Not used -Conventions - -* Some Terms:: Explanation of terms we use in this manual. -* nil and t:: How the symbols @code{nil} and @code{t} are used. -* Evaluation Notation:: The format we use for examples of evaluation. -* Printing Notation:: The format we use when examples print text. -* Error Messages:: The format we use for examples of errors. -* Buffer Text Notation:: The format we use for buffer contents in examples. -* Format of Descriptions:: Notation for describing functions, variables, etc. - -Format of Descriptions - -* A Sample Function Description:: A description of an imaginary - function, @code{foo}. -* A Sample Variable Description:: A description of an imaginary - variable, @code{electric-future-map}. - -Lisp Data Types - -* Printed Representation:: How Lisp objects are represented as text. -* Comments:: Comments and their formatting conventions. -* Programming Types:: Types found in all Lisp systems. -* Editing Types:: Types specific to Emacs. -* Circular Objects:: Read syntax for circular structure. -* Type Predicates:: Tests related to types. -* Equality Predicates:: Tests of equality between any two objects. - -Programming Types - -* Integer Type:: Numbers without fractional parts. -* Floating Point Type:: Numbers with fractional parts and with a large range. -* Character Type:: The representation of letters, numbers and - control characters. -* Symbol Type:: A multi-use object that refers to a function, - variable, or property list, and has a unique identity. -* Sequence Type:: Both lists and arrays are classified as sequences. -* Cons Cell Type:: Cons cells, and lists (which are made from cons cells). -* Array Type:: Arrays include strings and vectors. -* String Type:: An (efficient) array of characters. -* Vector Type:: One-dimensional arrays. -* Char-Table Type:: One-dimensional sparse arrays indexed by characters. -* Bool-Vector Type:: One-dimensional arrays of @code{t} or @code{nil}. -* Hash Table Type:: Super-fast lookup tables. -* Function Type:: A piece of executable code you can call from elsewhere. -* Macro Type:: A method of expanding an expression into another - expression, more fundamental but less pretty. -* Primitive Function Type:: A function written in C, callable from Lisp. -* Byte-Code Type:: A function written in Lisp, then compiled. -* Autoload Type:: A type used for automatically loading seldom-used - functions. - -Character Type - -* Basic Char Syntax:: Syntax for regular characters. -* General Escape Syntax:: How to specify characters by their codes. -* Ctl-Char Syntax:: Syntax for control characters. -* Meta-Char Syntax:: Syntax for meta-characters. -* Other Char Bits:: Syntax for hyper-, super-, and alt-characters. - -Cons Cell and List Types - -* Box Diagrams:: Drawing pictures of lists. -* Dotted Pair Notation:: A general syntax for cons cells. -* Association List Type:: A specially constructed list. - -String Type - -* Syntax for Strings:: How to specify Lisp strings. -* Non-ASCII in Strings:: International characters in strings. -* Nonprinting Characters:: Literal unprintable characters in strings. -* Text Props and Strings:: Strings with text properties. - -Editing Types - -* Buffer Type:: The basic object of editing. -* Marker Type:: A position in a buffer. -* Window Type:: Buffers are displayed in windows. -* Frame Type:: Windows subdivide frames. -* Terminal Type:: A terminal device displays frames. -* Window Configuration Type:: Recording the way a frame is subdivided. -* Frame Configuration Type:: Recording the status of all frames. -* Process Type:: A subprocess of Emacs running on the underlying OS. -* Stream Type:: Receive or send characters. -* Keymap Type:: What function a keystroke invokes. -* Overlay Type:: How an overlay is represented. -* Font Type:: Fonts for displaying text. - -Numbers - -* Integer Basics:: Representation and range of integers. -* Float Basics:: Representation and range of floating point. -* Predicates on Numbers:: Testing for numbers. -* Comparison of Numbers:: Equality and inequality predicates. -* Numeric Conversions:: Converting float to integer and vice versa. -* Arithmetic Operations:: How to add, subtract, multiply and divide. -* Rounding Operations:: Explicitly rounding floating point numbers. -* Bitwise Operations:: Logical and, or, not, shifting. -* Math Functions:: Trig, exponential and logarithmic functions. -* Random Numbers:: Obtaining random integers, predictable or not. - -Strings and Characters - -* String Basics:: Basic properties of strings and characters. -* Predicates for Strings:: Testing whether an object is a string or char. -* Creating Strings:: Functions to allocate new strings. -* Modifying Strings:: Altering the contents of an existing string. -* Text Comparison:: Comparing characters or strings. -* String Conversion:: Converting to and from characters and strings. -* Formatting Strings:: @code{format}: Emacs's analogue of @code{printf}. -* Case Conversion:: Case conversion functions. -* Case Tables:: Customizing case conversion. - -Lists - -* Cons Cells:: How lists are made out of cons cells. -* List-related Predicates:: Is this object a list? Comparing two lists. -* List Elements:: Extracting the pieces of a list. -* Building Lists:: Creating list structure. -* List Variables:: Modifying lists stored in variables. -* Modifying Lists:: Storing new pieces into an existing list. -* Sets And Lists:: A list can represent a finite mathematical set. -* Association Lists:: A list can represent a finite relation or mapping. -* Rings:: Managing a fixed-size ring of objects. - -Modifying Existing List Structure - -* Setcar:: Replacing an element in a list. -* Setcdr:: Replacing part of the list backbone. - This can be used to remove or add elements. -* Rearrangement:: Reordering the elements in a list; combining lists. - -Sequences, Arrays, and Vectors - -* Sequence Functions:: Functions that accept any kind of sequence. -* Arrays:: Characteristics of arrays in Emacs Lisp. -* Array Functions:: Functions specifically for arrays. -* Vectors:: Special characteristics of Emacs Lisp vectors. -* Vector Functions:: Functions specifically for vectors. -* Char-Tables:: How to work with char-tables. -* Bool-Vectors:: How to work with bool-vectors. - -Hash Tables - -* Creating Hash:: Functions to create hash tables. -* Hash Access:: Reading and writing the hash table contents. -* Defining Hash:: Defining new comparison methods. -* Other Hash:: Miscellaneous. - -Symbols - -* Symbol Components:: Symbols have names, values, function definitions - and property lists. -* Definitions:: A definition says how a symbol will be used. -* Creating Symbols:: How symbols are kept unique. -* Property Lists:: Each symbol has a property list - for recording miscellaneous information. - -Property Lists - -* Plists and Alists:: Comparison of the advantages of property - lists and association lists. -* Symbol Plists:: Functions to access symbols' property lists. -* Other Plists:: Accessing property lists stored elsewhere. - -Evaluation - -* Intro Eval:: Evaluation in the scheme of things. -* Forms:: How various sorts of objects are evaluated. -* Quoting:: Avoiding evaluation (to put constants in - the program). -* Backquote:: Easier construction of list structure. -* Eval:: How to invoke the Lisp interpreter explicitly. - -Kinds of Forms - -* Self-Evaluating Forms:: Forms that evaluate to themselves. -* Symbol Forms:: Symbols evaluate as variables. -* Classifying Lists:: How to distinguish various sorts of list forms. -* Function Indirection:: When a symbol appears as the car of a list, - we find the real function via the symbol. -* Function Forms:: Forms that call functions. -* Macro Forms:: Forms that call macros. -* Special Forms:: "Special forms" are idiosyncratic primitives, - most of them extremely important. -* Autoloading:: Functions set up to load files - containing their real definitions. - -Control Structures - -* Sequencing:: Evaluation in textual order. -* Conditionals:: @code{if}, @code{cond}, @code{when}, @code{unless}. -* Combining Conditions:: @code{and}, @code{or}, @code{not}. -* Iteration:: @code{while} loops. -* Nonlocal Exits:: Jumping out of a sequence. - -Nonlocal Exits - -* Catch and Throw:: Nonlocal exits for the program's own purposes. -* Examples of Catch:: Showing how such nonlocal exits can be written. -* Errors:: How errors are signaled and handled. -* Cleanups:: Arranging to run a cleanup form if an - error happens. - -Errors - -* Signaling Errors:: How to report an error. -* Processing of Errors:: What Emacs does when you report an error. -* Handling Errors:: How you can trap errors and continue execution. -* Error Symbols:: How errors are classified for trapping them. - -Variables - -* Global Variables:: Variable values that exist permanently, everywhere. -* Constant Variables:: Certain "variables" have values that never change. -* Local Variables:: Variable values that exist only temporarily. -* Void Variables:: Symbols that lack values. -* Defining Variables:: A definition says a symbol is used as a variable. -* Tips for Defining:: Things you should think about when you - define a variable. -* Accessing Variables:: Examining values of variables whose names - are known only at run time. -* Setting Variables:: Storing new values in variables. -* Variable Scoping:: How Lisp chooses among local and global values. -* Buffer-Local Variables:: Variable values in effect only in one buffer. -* File Local Variables:: Handling local variable lists in files. -* Directory Local Variables:: Local variables common to all files in a - directory. -* Frame-Local Variables:: Frame-local bindings for variables. -* Variable Aliases:: Variables that are aliases for other variables. -* Variables with Restricted Values:: Non-constant variables whose value can - @emph{not} be an arbitrary Lisp object. - -Scoping Rules for Variable Bindings - -* Scope:: Scope means where in the program a value - is visible. Comparison with other languages. -* Extent:: Extent means how long in time a value exists. -* Impl of Scope:: Two ways to implement dynamic scoping. -* Using Scoping:: How to use dynamic scoping carefully and - avoid problems. - -Buffer-Local Variables - -* Intro to Buffer-Local:: Introduction and concepts. -* Creating Buffer-Local:: Creating and destroying buffer-local bindings. -* Default Value:: The default value is seen in buffers - that don't have their own buffer-local values. - -Functions - -* What Is a Function:: Lisp functions vs. primitives; terminology. -* Lambda Expressions:: How functions are expressed as Lisp objects. -* Function Names:: A symbol can serve as the name of a function. -* Defining Functions:: Lisp expressions for defining functions. -* Calling Functions:: How to use an existing function. -* Mapping Functions:: Applying a function to each element of a list, etc. -* Anonymous Functions:: Lambda expressions are functions with no names. -* Function Cells:: Accessing or setting the function definition - of a symbol. -* Closures:: Functions that enclose a lexical environment. -* Obsolete Functions:: Declaring functions obsolete. -* Inline Functions:: Defining functions that the compiler - will expand inline. -* Declaring Functions:: Telling the compiler that a function is defined. -* Function Safety:: Determining whether a function is safe to call. -* Related Topics:: Cross-references to specific Lisp primitives - that have a special bearing on how - functions work. - -Lambda Expressions - -* Lambda Components:: The parts of a lambda expression. -* Simple Lambda:: A simple example. -* Argument List:: Details and special features of argument lists. -* Function Documentation:: How to put documentation in a function. - -Macros - -* Simple Macro:: A basic example. -* Expansion:: How, when and why macros are expanded. -* Compiling Macros:: How macros are expanded by the compiler. -* Defining Macros:: How to write a macro definition. -* Problems with Macros:: Don't evaluate the macro arguments too many times. - Don't hide the user's variables. -* Indenting Macros:: Specifying how to indent macro calls. - -Common Problems Using Macros - -* Wrong Time:: Do the work in the expansion, not in the macro. -* Argument Evaluation:: The expansion should evaluate each macro arg once. -* Surprising Local Vars:: Local variable bindings in the expansion - require special care. -* Eval During Expansion:: Don't evaluate them; put them in the expansion. -* Repeated Expansion:: Avoid depending on how many times expansion is done. - -Customization Settings - -* Common Keywords:: Common keyword arguments for all kinds of - customization declarations. -* Group Definitions:: Writing customization group definitions. -* Variable Definitions:: Declaring user options. -* Customization Types:: Specifying the type of a user option. -* Applying Customizations:: Functions to apply customization settings. -* Custom Themes:: Writing Custom themes. - -Customization Types - -* Simple Types:: Simple customization types: sexp, integer, number, - string, file, directory, alist. -* Composite Types:: Build new types from other types or data. -* Splicing into Lists:: Splice elements into list with @code{:inline}. -* Type Keywords:: Keyword-argument pairs in a customization type. -* Defining New Types:: Give your type a name. - -Loading - -* How Programs Do Loading:: The @code{load} function and others. -* Load Suffixes:: Details about the suffixes that @code{load} tries. -* Library Search:: Finding a library to load. -* Loading Non-ASCII:: Non-@acronym{ASCII} characters in Emacs Lisp files. -* Autoload:: Setting up a function to autoload. -* Repeated Loading:: Precautions about loading a file twice. -* Named Features:: Loading a library if it isn't already loaded. -* Where Defined:: Finding which file defined a certain symbol. -* Unloading:: How to "unload" a library that was loaded. -* Hooks for Loading:: Providing code to be run when - particular libraries are loaded. - -Byte Compilation - -* Speed of Byte-Code:: An example of speedup from byte compilation. -* Compilation Functions:: Byte compilation functions. -* Docs and Compilation:: Dynamic loading of documentation strings. -* Dynamic Loading:: Dynamic loading of individual functions. -* Eval During Compile:: Code to be evaluated when you compile. -* Compiler Errors:: Handling compiler error messages. -* Byte-Code Objects:: The data type used for byte-compiled functions. -* Disassembly:: Disassembling byte-code; how to read byte-code. - -Advising Emacs Lisp Functions - -* Simple Advice:: A simple example to explain the basics of advice. -* Defining Advice:: Detailed description of @code{defadvice}. -* Around-Advice:: Wrapping advice around a function's definition. -* Computed Advice:: ...is to @code{defadvice} as @code{fset} is to @code{defun}. -* Activation of Advice:: Advice doesn't do anything until you activate it. -* Enabling Advice:: You can enable or disable each piece of advice. -* Preactivation:: Preactivation is a way of speeding up the - loading of compiled advice. -* Argument Access in Advice:: How advice can access the function's arguments. -* Combined Definition:: How advice is implemented. - -Debugging Lisp Programs - -* Debugger:: A debugger for the Emacs Lisp evaluator. -* Edebug:: A source-level Emacs Lisp debugger. -* Syntax Errors:: How to find syntax errors. -* Test Coverage:: Ensuring you have tested all branches in your code. - -The Lisp Debugger - -* Error Debugging:: Entering the debugger when an error happens. -* Infinite Loops:: Stopping and debugging a program that doesn't exit. -* Function Debugging:: Entering it when a certain function is called. -* Explicit Debug:: Entering it at a certain point in the program. -* Using Debugger:: What the debugger does; what you see while in it. -* Debugger Commands:: Commands used while in the debugger. -* Invoking the Debugger:: How to call the function @code{debug}. -* Internals of Debugger:: Subroutines of the debugger, and global variables. - -Edebug - -* Using Edebug:: Introduction to use of Edebug. -* Instrumenting:: You must instrument your code - in order to debug it with Edebug. -* Edebug Execution Modes:: Execution modes, stopping more or less often. -* Jumping:: Commands to jump to a specified place. -* Edebug Misc:: Miscellaneous commands. -* Breaks:: Setting breakpoints to make the program stop. -* Trapping Errors:: Trapping errors with Edebug. -* Edebug Views:: Views inside and outside of Edebug. -* Edebug Eval:: Evaluating expressions within Edebug. -* Eval List:: Expressions whose values are displayed - each time you enter Edebug. -* Printing in Edebug:: Customization of printing. -* Trace Buffer:: How to produce trace output in a buffer. -* Coverage Testing:: How to test evaluation coverage. -* The Outside Context:: Data that Edebug saves and restores. -* Edebug and Macros:: Specifying how to handle macro calls. -* Edebug Options:: Option variables for customizing Edebug. - -Breaks - -* Breakpoints:: Breakpoints at stop points. -* Global Break Condition:: Breaking on an event. -* Source Breakpoints:: Embedding breakpoints in source code. - -The Outside Context - -* Checking Whether to Stop::When Edebug decides what to do. -* Edebug Display Update:: When Edebug updates the display. -* Edebug Recursive Edit:: When Edebug stops execution. - -Edebug and Macros - -* Instrumenting Macro Calls::The basic problem. -* Specification List:: How to specify complex patterns of evaluation. -* Backtracking:: What Edebug does when matching fails. -* Specification Examples:: To help understand specifications. - -Debugging Invalid Lisp Syntax - -* Excess Open:: How to find a spurious open paren or missing close. -* Excess Close:: How to find a spurious close paren or missing open. - -Reading and Printing Lisp Objects - -* Streams Intro:: Overview of streams, reading and printing. -* Input Streams:: Various data types that can be used as - input streams. -* Input Functions:: Functions to read Lisp objects from text. -* Output Streams:: Various data types that can be used as - output streams. -* Output Functions:: Functions to print Lisp objects as text. -* Output Variables:: Variables that control what the printing - functions do. - -Minibuffers - -* Intro to Minibuffers:: Basic information about minibuffers. -* Text from Minibuffer:: How to read a straight text string. -* Object from Minibuffer:: How to read a Lisp object or expression. -* Minibuffer History:: Recording previous minibuffer inputs - so the user can reuse them. -* Initial Input:: Specifying initial contents for the minibuffer. -* Completion:: How to invoke and customize completion. -* Yes-or-No Queries:: Asking a question with a simple answer. -* Multiple Queries:: Asking a series of similar questions. -* Reading a Password:: Reading a password from the terminal. -* Minibuffer Commands:: Commands used as key bindings in minibuffers. -* Minibuffer Windows:: Operating on the special minibuffer windows. -* Minibuffer Contents:: How such commands access the minibuffer text. -* Recursive Mini:: Whether recursive entry to minibuffer is allowed. -* Minibuffer Misc:: Various customization hooks and variables. - -Completion - -* Basic Completion:: Low-level functions for completing strings. - (These are too low level to use the minibuffer.) -* Minibuffer Completion:: Invoking the minibuffer with completion. -* Completion Commands:: Minibuffer commands that do completion. -* High-Level Completion:: Convenient special cases of completion - (reading buffer names, variable names, etc.). -* Reading File Names:: Using completion to read file names and - shell commands. -* Completion Variables:: Variables controlling completion behavior. -* Programmed Completion:: Writing your own completion function. -* Completion in Buffers:: Completing text in ordinary buffers. - -Command Loop - -* Command Overview:: How the command loop reads commands. -* Defining Commands:: Specifying how a function should read arguments. -* Interactive Call:: Calling a command, so that it will read arguments. -* Distinguish Interactive:: Making a command distinguish interactive calls. -* Command Loop Info:: Variables set by the command loop for you to examine. -* Adjusting Point:: Adjustment of point after a command. -* Input Events:: What input looks like when you read it. -* Reading Input:: How to read input events from the keyboard or mouse. -* Special Events:: Events processed immediately and individually. -* Waiting:: Waiting for user input or elapsed time. -* Quitting:: How @kbd{C-g} works. How to catch or defer quitting. -* Prefix Command Arguments:: How the commands to set prefix args work. -* Recursive Editing:: Entering a recursive edit, - and why you usually shouldn't. -* Disabling Commands:: How the command loop handles disabled commands. -* Command History:: How the command history is set up, and how accessed. -* Keyboard Macros:: How keyboard macros are implemented. - -Defining Commands - -* Using Interactive:: General rules for @code{interactive}. -* Interactive Codes:: The standard letter-codes for reading arguments - in various ways. -* Interactive Examples:: Examples of how to read interactive arguments. - -Input Events - -* Keyboard Events:: Ordinary characters--keys with symbols on them. -* Function Keys:: Function keys--keys with names, not symbols. -* Mouse Events:: Overview of mouse events. -* Click Events:: Pushing and releasing a mouse button. -* Drag Events:: Moving the mouse before releasing the button. -* Button-Down Events:: A button was pushed and not yet released. -* Repeat Events:: Double and triple click (or drag, or down). -* Motion Events:: Just moving the mouse, not pushing a button. -* Focus Events:: Moving the mouse between frames. -* Misc Events:: Other events the system can generate. -* Event Examples:: Examples of the lists for mouse events. -* Classifying Events:: Finding the modifier keys in an event symbol. - Event types. -* Accessing Mouse:: Functions to extract info from mouse events. -* Accessing Scroll:: Functions to get info from scroll bar events. -* Strings of Events:: Special considerations for putting - keyboard character events in a string. - -Reading Input - -* Key Sequence Input:: How to read one key sequence. -* Reading One Event:: How to read just one event. -* Event Mod:: How Emacs modifies events as they are read. -* Invoking the Input Method:: How reading an event uses the input method. -* Quoted Character Input:: Asking the user to specify a character. -* Event Input Misc:: How to reread or throw away input events. - -Keymaps - -* Key Sequences:: Key sequences as Lisp objects. -* Keymap Basics:: Basic concepts of keymaps. -* Format of Keymaps:: What a keymap looks like as a Lisp object. -* Creating Keymaps:: Functions to create and copy keymaps. -* Inheritance and Keymaps:: How one keymap can inherit the bindings - of another keymap. -* Prefix Keys:: Defining a key with a keymap as its definition. -* Active Keymaps:: How Emacs searches the active keymaps - for a key binding. -* Searching Keymaps:: A pseudo-Lisp summary of searching active maps. -* Controlling Active Maps:: Each buffer has a local keymap - to override the standard (global) bindings. - A minor mode can also override them. -* Key Lookup:: Finding a key's binding in one keymap. -* Functions for Key Lookup:: How to request key lookup. -* Changing Key Bindings:: Redefining a key in a keymap. -* Remapping Commands:: A keymap can translate one command to another. -* Translation Keymaps:: Keymaps for translating sequences of events. -* Key Binding Commands:: Interactive interfaces for redefining keys. -* Scanning Keymaps:: Looking through all keymaps, for printing help. -* Menu Keymaps:: Defining a menu as a keymap. - -Menu Keymaps - -* Defining Menus:: How to make a keymap that defines a menu. -* Mouse Menus:: How users actuate the menu with the mouse. -* Keyboard Menus:: How users actuate the menu with the keyboard. -* Menu Example:: Making a simple menu. -* Menu Bar:: How to customize the menu bar. -* Tool Bar:: A tool bar is a row of images. -* Modifying Menus:: How to add new items to a menu. - -Defining Menus - -* Simple Menu Items:: A simple kind of menu key binding, - limited in capabilities. -* Extended Menu Items:: More powerful menu item definitions - let you specify keywords to enable - various features. -* Menu Separators:: Drawing a horizontal line through a menu. -* Alias Menu Items:: Using command aliases in menu items. -* Toolkit Differences:: Not all toolkits provide the same features. - -Major and Minor Modes - -* Hooks:: How to use hooks; how to write code that provides hooks. -* Major Modes:: Defining major modes. -* Minor Modes:: Defining minor modes. -* Mode Line Format:: Customizing the text that appears in the mode line. -* Imenu:: Providing a menu of definitions made in a buffer. -* Font Lock Mode:: How modes can highlight text according to syntax. -* Auto-Indentation:: How to teach Emacs to indent for a major mode. -* Desktop Save Mode:: How modes can have buffer state saved between - Emacs sessions. - -Hooks - -* Running Hooks:: How to run a hook. -* Setting Hooks:: How to put functions on a hook, or remove them. - -Major Modes - -* Major Mode Conventions:: Coding conventions for keymaps, etc. -* Auto Major Mode:: How Emacs chooses the major mode automatically. -* Mode Help:: Finding out how to use a mode. -* Derived Modes:: Defining a new major mode based on another major - mode. -* Basic Major Modes:: Modes that other modes are often derived from. -* Mode Hooks:: Hooks run at the end of major mode functions. -* Tabulated List Mode:: Parent mode for buffers containing tabulated data. -* Generic Modes:: Defining a simple major mode that supports - comment syntax and Font Lock mode. -* Example Major Modes:: Text mode and Lisp modes. - -Minor Modes - -* Minor Mode Conventions:: Tips for writing a minor mode. -* Keymaps and Minor Modes:: How a minor mode can have its own keymap. -* Defining Minor Modes:: A convenient facility for defining minor modes. - -Mode Line Format - -* Mode Line Basics:: Basic ideas of mode line control. -* Mode Line Data:: The data structure that controls the mode line. -* Mode Line Top:: The top level variable, mode-line-format. -* Mode Line Variables:: Variables used in that data structure. -* %-Constructs:: Putting information into a mode line. -* Properties in Mode:: Using text properties in the mode line. -* Header Lines:: Like a mode line, but at the top. -* Emulating Mode Line:: Formatting text as the mode line would. - -Font Lock Mode - -* Font Lock Basics:: Overview of customizing Font Lock. -* Search-based Fontification:: Fontification based on regexps. -* Customizing Keywords:: Customizing search-based fontification. -* Other Font Lock Variables:: Additional customization facilities. -* Levels of Font Lock:: Each mode can define alternative levels - so that the user can select more or less. -* Precalculated Fontification:: How Lisp programs that produce the buffer - contents can also specify how to fontify it. -* Faces for Font Lock:: Special faces specifically for Font Lock. -* Syntactic Font Lock:: Fontification based on syntax tables. -* Multiline Font Lock:: How to coerce Font Lock into properly - highlighting multiline constructs. - -Multiline Font Lock Constructs - -* Font Lock Multiline:: Marking multiline chunks with a text property. -* Region to Refontify:: Controlling which region gets refontified - after a buffer change. - -Automatic Indentation of code - -* SMIE:: A simple minded indentation engine. - -Simple Minded Indentation Engine - -* SMIE setup:: SMIE setup and features. -* Operator Precedence Grammars:: A very simple parsing technique. -* SMIE Grammar:: Defining the grammar of a language. -* SMIE Lexer:: Defining tokens. -* SMIE Tricks:: Working around the parser's limitations. -* SMIE Indentation:: Specifying indentation rules. -* SMIE Indentation Helpers:: Helper functions for indentation rules. -* SMIE Indentation Example:: Sample indentation rules. - -Documentation - -* Documentation Basics:: Where doc strings are defined and stored. -* Accessing Documentation:: How Lisp programs can access doc strings. -* Keys in Documentation:: Substituting current key bindings. -* Describing Characters:: Making printable descriptions of - non-printing characters and key sequences. -* Help Functions:: Subroutines used by Emacs help facilities. - -Files - -* Visiting Files:: Reading files into Emacs buffers for editing. -* Saving Buffers:: Writing changed buffers back into files. -* Reading from Files:: Reading files into buffers without visiting. -* Writing to Files:: Writing new files from parts of buffers. -* File Locks:: Locking and unlocking files, to prevent - simultaneous editing by two people. -* Information about Files:: Testing existence, accessibility, size of files. -* Changing Files:: Renaming files, changing permissions, etc. -* File Names:: Decomposing and expanding file names. -* Contents of Directories:: Getting a list of the files in a directory. -* Create/Delete Dirs:: Creating and Deleting Directories. -* Magic File Names:: Special handling for certain file names. -* Format Conversion:: Conversion to and from various file formats. - -Visiting Files - -* Visiting Functions:: The usual interface functions for visiting. -* Subroutines of Visiting:: Lower-level subroutines that they use. - -Information about Files - -* Testing Accessibility:: Is a given file readable? Writable? -* Kinds of Files:: Is it a directory? A symbolic link? -* Truenames:: Eliminating symbolic links from a file name. -* File Attributes:: How large is it? Any other names? Etc. -* Locating Files:: How to find a file in standard places. - -File Names - -* File Name Components:: The directory part of a file name, and the rest. -* Relative File Names:: Some file names are relative to a current directory. -* Directory Names:: A directory's name as a directory - is different from its name as a file. -* File Name Expansion:: Converting relative file names to absolute ones. -* Unique File Names:: Generating names for temporary files. -* File Name Completion:: Finding the completions for a given file name. -* Standard File Names:: If your package uses a fixed file name, - how to handle various operating systems simply. - -File Format Conversion - -* Format Conversion Overview:: @code{insert-file-contents} and @code{write-region}. -* Format Conversion Round-Trip:: Using @code{format-alist}. -* Format Conversion Piecemeal:: Specifying non-paired conversion. - -Backups and Auto-Saving - -* Backup Files:: How backup files are made; how their names - are chosen. -* Auto-Saving:: How auto-save files are made; how their - names are chosen. -* Reverting:: @code{revert-buffer}, and how to customize - what it does. - -Backup Files - -* Making Backups:: How Emacs makes backup files, and when. -* Rename or Copy:: Two alternatives: renaming the old file - or copying it. -* Numbered Backups:: Keeping multiple backups for each source file. -* Backup Names:: How backup file names are computed; customization. - -Buffers - -* Buffer Basics:: What is a buffer? -* Current Buffer:: Designating a buffer as current - so that primitives will access its contents. -* Buffer Names:: Accessing and changing buffer names. -* Buffer File Name:: The buffer file name indicates which file - is visited. -* Buffer Modification:: A buffer is @dfn{modified} if it needs to be saved. -* Modification Time:: Determining whether the visited file was changed - "behind Emacs's back". -* Read Only Buffers:: Modifying text is not allowed in a - read-only buffer. -* The Buffer List:: How to look at all the existing buffers. -* Creating Buffers:: Functions that create buffers. -* Killing Buffers:: Buffers exist until explicitly killed. -* Indirect Buffers:: An indirect buffer shares text with some - other buffer. -* Swapping Text:: Swapping text between two buffers. -* Buffer Gap:: The gap in the buffer. - -Windows - -* Basic Windows:: Basic information on using windows. -* Splitting Windows:: Splitting one window into two windows. -* Deleting Windows:: Deleting a window gives its space to other windows. -* Selecting Windows:: The selected window is the one that you edit in. -* Cyclic Window Ordering:: Moving around the existing windows. -* Buffers and Windows:: Each window displays the contents of a buffer. -* Switching Buffers:: Higher-level functions for switching to a buffer. -* Choosing Window:: How to choose a window for displaying a buffer. -* Display Action Functions:: Subroutines for @code{display-buffer}. -* Choosing Window Options:: Extra options affecting how buffers are displayed. -* Window History:: Each window remembers the buffers displayed in it. -* Dedicated Windows:: How to avoid displaying another buffer in - a specific window. -* Window Point:: Each window has its own location of point. -* Window Start and End:: Buffer positions indicating which text is - on-screen in a window. -* Textual Scrolling:: Moving text up and down through the window. -* Vertical Scrolling:: Moving the contents up and down on the window. -* Horizontal Scrolling:: Moving the contents sideways on the window. -* Size of Window:: Accessing the size of a window. -* Resizing Windows:: Changing the size of a window. -* Coordinates and Windows:: Converting coordinates to windows. -* Window Tree:: The layout and sizes of all windows in a frame. -* Window Configurations:: Saving and restoring the state of the screen. -* Window Parameters:: Associating additional information with windows. -* Window Hooks:: Hooks for scrolling, window size changes, - redisplay going past a certain point, - or window configuration changes. - -Frames - -* Creating Frames:: Creating additional frames. -* Multiple Terminals:: Displaying on several different devices. -* Frame Parameters:: Controlling frame size, position, font, etc. -* Terminal Parameters:: Parameters common for all frames on terminal. -* Frame Titles:: Automatic updating of frame titles. -* Deleting Frames:: Frames last until explicitly deleted. -* Finding All Frames:: How to examine all existing frames. -* Frames and Windows:: A frame contains windows; - display of text always works through windows. -* Minibuffers and Frames:: How a frame finds the minibuffer to use. -* Input Focus:: Specifying the selected frame. -* Visibility of Frames:: Frames may be visible or invisible, or icons. -* Raising and Lowering:: Raising a frame makes it hide other windows; - lowering it makes the others hide it. -* Frame Configurations:: Saving the state of all frames. -* Mouse Tracking:: Getting events that say when the mouse moves. -* Mouse Position:: Asking where the mouse is, or moving it. -* Pop-Up Menus:: Displaying a menu for the user to select from. -* Dialog Boxes:: Displaying a box to ask yes or no. -* Pointer Shape:: Specifying the shape of the mouse pointer. -* Window System Selections::Transferring text to and from other X clients. -* Drag and Drop:: Internals of Drag-and-Drop implementation. -* Color Names:: Getting the definitions of color names. -* Text Terminal Colors:: Defining colors for text terminals. -* Resources:: Getting resource values from the server. -* Display Feature Testing:: Determining the features of a terminal. - -Frame Parameters - -* Parameter Access:: How to change a frame's parameters. -* Initial Parameters:: Specifying frame parameters when you make a frame. -* Window Frame Parameters:: List of frame parameters for window systems. -* Size and Position:: Changing the size and position of a frame. -* Geometry:: Parsing geometry specifications. - -Window Frame Parameters - -* Basic Parameters:: Parameters that are fundamental. -* Position Parameters:: The position of the frame on the screen. -* Size Parameters:: Frame's size. -* Layout Parameters:: Size of parts of the frame, and - enabling or disabling some parts. -* Buffer Parameters:: Which buffers have been or should be shown. -* Management Parameters:: Communicating with the window manager. -* Cursor Parameters:: Controlling the cursor appearance. -* Font and Color Parameters:: Fonts and colors for the frame text. - -Positions - -* Point:: The special position where editing takes place. -* Motion:: Changing point. -* Excursions:: Temporary motion and buffer changes. -* Narrowing:: Restricting editing to a portion of the buffer. - -Motion - -* Character Motion:: Moving in terms of characters. -* Word Motion:: Moving in terms of words. -* Buffer End Motion:: Moving to the beginning or end of the buffer. -* Text Lines:: Moving in terms of lines of text. -* Screen Lines:: Moving in terms of lines as displayed. -* List Motion:: Moving by parsing lists and sexps. -* Skipping Characters:: Skipping characters belonging to a certain set. - -Markers - -* Overview of Markers:: The components of a marker, and how it relocates. -* Predicates on Markers:: Testing whether an object is a marker. -* Creating Markers:: Making empty markers or markers at certain places. -* Information from Markers::Finding the marker's buffer or character position. -* Marker Insertion Types:: Two ways a marker can relocate when you - insert where it points. -* Moving Markers:: Moving the marker to a new buffer or position. -* The Mark:: How "the mark" is implemented with a marker. -* The Region:: How to access "the region". - -Text - -* Near Point:: Examining text in the vicinity of point. -* Buffer Contents:: Examining text in a general fashion. -* Comparing Text:: Comparing substrings of buffers. -* Insertion:: Adding new text to a buffer. -* Commands for Insertion:: User-level commands to insert text. -* Deletion:: Removing text from a buffer. -* User-Level Deletion:: User-level commands to delete text. -* The Kill Ring:: Where removed text sometimes is saved for - later use. -* Undo:: Undoing changes to the text of a buffer. -* Maintaining Undo:: How to enable and disable undo information. - How to control how much information is kept. -* Filling:: Functions for explicit filling. -* Margins:: How to specify margins for filling commands. -* Adaptive Fill:: Adaptive Fill mode chooses a fill prefix - from context. -* Auto Filling:: How auto-fill mode is implemented to break lines. -* Sorting:: Functions for sorting parts of the buffer. -* Columns:: Computing horizontal positions, and using them. -* Indentation:: Functions to insert or adjust indentation. -* Case Changes:: Case conversion of parts of the buffer. -* Text Properties:: Assigning Lisp property lists to text characters. -* Substitution:: Replacing a given character wherever it appears. -* Transposition:: Swapping two portions of a buffer. -* Registers:: How registers are implemented. Accessing - the text or position stored in a register. -* Base 64:: Conversion to or from base 64 encoding. -* Checksum/Hash:: Computing cryptographic hashes. -* Parsing HTML/XML:: Parsing HTML and XML. -* Atomic Changes:: Installing several buffer changes "atomically". -* Change Hooks:: Supplying functions to be run when text is changed. - -The Kill Ring - -* Kill Ring Concepts:: What text looks like in the kill ring. -* Kill Functions:: Functions that kill text. -* Yanking:: How yanking is done. -* Yank Commands:: Commands that access the kill ring. -* Low-Level Kill Ring:: Functions and variables for kill ring access. -* Internals of Kill Ring:: Variables that hold kill ring data. - -Indentation - -* Primitive Indent:: Functions used to count and insert indentation. -* Mode-Specific Indent:: Customize indentation for different modes. -* Region Indent:: Indent all the lines in a region. -* Relative Indent:: Indent the current line based on previous lines. -* Indent Tabs:: Adjustable, typewriter-like tab stops. -* Motion by Indent:: Move to first non-blank character. - -Text Properties - -* Examining Properties:: Looking at the properties of one character. -* Changing Properties:: Setting the properties of a range of text. -* Property Search:: Searching for where a property changes value. -* Special Properties:: Particular properties with special meanings. -* Format Properties:: Properties for representing formatting of text. -* Sticky Properties:: How inserted text gets properties from - neighboring text. -* Lazy Properties:: Computing text properties in a lazy fashion - only when text is examined. -* Clickable Text:: Using text properties to make regions of text - do something when you click on them. -* Fields:: The @code{field} property defines - fields within the buffer. -* Not Intervals:: Why text properties do not use - Lisp-visible text intervals. - -Non-@acronym{ASCII} Characters - -* Text Representations:: How Emacs represents text. -* Converting Representations:: Converting unibyte to multibyte and vice versa. -* Selecting a Representation:: Treating a byte sequence as unibyte or multi. -* Character Codes:: How unibyte and multibyte relate to - codes of individual characters. -* Character Properties:: Character attributes that define their - behavior and handling. -* Character Sets:: The space of possible character codes - is divided into various character sets. -* Scanning Charsets:: Which character sets are used in a buffer? -* Translation of Characters:: Translation tables are used for conversion. -* Coding Systems:: Coding systems are conversions for saving files. -* Input Methods:: Input methods allow users to enter various - non-ASCII characters without special keyboards. -* Locales:: Interacting with the POSIX locale. - -Coding Systems - -* Coding System Basics:: Basic concepts. -* Encoding and I/O:: How file I/O functions handle coding systems. -* Lisp and Coding Systems:: Functions to operate on coding system names. -* User-Chosen Coding Systems:: Asking the user to choose a coding system. -* Default Coding Systems:: Controlling the default choices. -* Specifying Coding Systems:: Requesting a particular coding system - for a single file operation. -* Explicit Encoding:: Encoding or decoding text without doing I/O. -* Terminal I/O Encoding:: Use of encoding for terminal I/O. -* MS-DOS File Types:: How DOS "text" and "binary" files - relate to coding systems. - -Searching and Matching - -* String Search:: Search for an exact match. -* Searching and Case:: Case-independent or case-significant searching. -* Regular Expressions:: Describing classes of strings. -* Regexp Search:: Searching for a match for a regexp. -* POSIX Regexps:: Searching POSIX-style for the longest match. -* Match Data:: Finding out which part of the text matched, - after a string or regexp search. -* Search and Replace:: Commands that loop, searching and replacing. -* Standard Regexps:: Useful regexps for finding sentences, pages,... - -Regular Expressions - -* Syntax of Regexps:: Rules for writing regular expressions. -* Regexp Example:: Illustrates regular expression syntax. -* Regexp Functions:: Functions for operating on regular expressions. - -Syntax of Regular Expressions - -* Regexp Special:: Special characters in regular expressions. -* Char Classes:: Character classes used in regular expressions. -* Regexp Backslash:: Backslash-sequences in regular expressions. - -The Match Data - -* Replacing Match:: Replacing a substring that was matched. -* Simple Match Data:: Accessing single items of match data, - such as where a particular subexpression started. -* Entire Match Data:: Accessing the entire match data at once, as a list. -* Saving Match Data:: Saving and restoring the match data. - -Syntax Tables - -* Syntax Basics:: Basic concepts of syntax tables. -* Syntax Descriptors:: How characters are classified. -* Syntax Table Functions:: How to create, examine and alter syntax tables. -* Syntax Properties:: Overriding syntax with text properties. -* Motion and Syntax:: Moving over characters with certain syntaxes. -* Parsing Expressions:: Parsing balanced expressions - using the syntax table. -* Standard Syntax Tables:: Syntax tables used by various major modes. -* Syntax Table Internals:: How syntax table information is stored. -* Categories:: Another way of classifying character syntax. - -Syntax Descriptors - -* Syntax Class Table:: Table of syntax classes. -* Syntax Flags:: Additional flags each character can have. - -Parsing Expressions - -* Motion via Parsing:: Motion functions that work by parsing. -* Position Parse:: Determining the syntactic state of a position. -* Parser State:: How Emacs represents a syntactic state. -* Low-Level Parsing:: Parsing across a specified region. -* Control Parsing:: Parameters that affect parsing. - -Abbrevs and Abbrev Expansion - -* Abbrev Tables:: Creating and working with abbrev tables. -* Defining Abbrevs:: Specifying abbreviations and their expansions. -* Abbrev Files:: Saving abbrevs in files. -* Abbrev Expansion:: Controlling expansion; expansion subroutines. -* Standard Abbrev Tables:: Abbrev tables used by various major modes. -* Abbrev Properties:: How to read and set abbrev properties. - Which properties have which effect. -* Abbrev Table Properties:: How to read and set abbrev table properties. - Which properties have which effect. - -Processes - -* Subprocess Creation:: Functions that start subprocesses. -* Shell Arguments:: Quoting an argument to pass it to a shell. -* Synchronous Processes:: Details of using synchronous subprocesses. -* Asynchronous Processes:: Starting up an asynchronous subprocess. -* Deleting Processes:: Eliminating an asynchronous subprocess. -* Process Information:: Accessing run-status and other attributes. -* Input to Processes:: Sending input to an asynchronous subprocess. -* Signals to Processes:: Stopping, continuing or interrupting - an asynchronous subprocess. -* Output from Processes:: Collecting output from an asynchronous subprocess. -* Sentinels:: Sentinels run when process run-status changes. -* Query Before Exit:: Whether to query if exiting will kill a process. -* System Processes:: Accessing other processes running on your system. -* Transaction Queues:: Transaction-based communication with subprocesses. -* Network:: Opening network connections. -* Network Servers:: Network servers let Emacs accept net connections. -* Datagrams:: UDP network connections. -* Low-Level Network:: Lower-level but more general function - to create connections and servers. -* Misc Network:: Additional relevant functions for - network connections. -* Serial Ports:: Communicating with serial ports. -* Byte Packing:: Using bindat to pack and unpack binary data. - -Receiving Output from Processes - -* Process Buffers:: If no filter, output is put in a buffer. -* Filter Functions:: Filter functions accept output from the process. -* Decoding Output:: Filters can get unibyte or multibyte strings. -* Accepting Output:: How to wait until process output arrives. - -Low-Level Network Access - -* Network Processes:: Using @code{make-network-process}. -* Network Options:: Further control over network connections. -* Network Feature Testing:: Determining which network features work on - the machine you are using. - -Packing and Unpacking Byte Arrays - -* Bindat Spec:: Describing data layout. -* Bindat Functions:: Doing the unpacking and packing. -* Bindat Examples:: Samples of what bindat.el can do for you! - -Emacs Display - -* Refresh Screen:: Clearing the screen and redrawing everything on it. -* Forcing Redisplay:: Forcing redisplay. -* Truncation:: Folding or wrapping long text lines. -* The Echo Area:: Displaying messages at the bottom of the screen. -* Warnings:: Displaying warning messages for the user. -* Invisible Text:: Hiding part of the buffer text. -* Selective Display:: Hiding part of the buffer text (the old way). -* Temporary Displays:: Displays that go away automatically. -* Overlays:: Use overlays to highlight parts of the buffer. -* Width:: How wide a character or string is on the screen. -* Line Height:: Controlling the height of lines. -* Faces:: A face defines a graphics style - for text characters: font, colors, etc. -* Fringes:: Controlling window fringes. -* Scroll Bars:: Controlling vertical scroll bars. -* Display Property:: Enabling special display features. -* Images:: Displaying images in Emacs buffers. -* Buttons:: Adding clickable buttons to Emacs buffers. -* Abstract Display:: Emacs's Widget for Object Collections. -* Blinking:: How Emacs shows the matching open parenthesis. -* Character Display:: How Emacs displays individual characters. -* Beeping:: Audible signal to the user. -* Window Systems:: Which window system is being used. -* Bidirectional Display:: Display of bidirectional scripts, such as - Arabic and Farsi. - -The Echo Area - -* Displaying Messages:: Explicitly displaying text in the echo area. -* Progress:: Informing user about progress of a long operation. -* Logging Messages:: Echo area messages are logged for the user. -* Echo Area Customization:: Controlling the echo area. - -Reporting Warnings - -* Warning Basics:: Warnings concepts and functions to report them. -* Warning Variables:: Variables programs bind to customize - their warnings. -* Warning Options:: Variables users set to control display of warnings. -* Delayed Warnings:: Deferring a warning until the end of a command. - -Overlays - -* Managing Overlays:: Creating and moving overlays. -* Overlay Properties:: How to read and set properties. - What properties do to the screen display. -* Finding Overlays:: Searching for overlays. - -Faces - -* Defining Faces:: How to define a face. -* Face Attributes:: What is in a face? -* Attribute Functions:: Functions to examine and set face attributes. -* Displaying Faces:: How Emacs combines the faces specified for - a character. -* Face Remapping:: Remapping faces to alternative definitions. -* Face Functions:: How to define and examine faces. -* Auto Faces:: Hook for automatic face assignment. -* Basic Faces:: Faces that are defined by default. -* Font Selection:: Finding the best available font for a face. -* Font Lookup:: Looking up the names of available fonts - and information about them. -* Fontsets:: A fontset is a collection of fonts - that handle a range of character sets. -* Low-Level Font:: Lisp representation for character display fonts. - -Fringes - -* Fringe Size/Pos:: Specifying where to put the window fringes. -* Fringe Indicators:: Displaying indicator icons in the window fringes. -* Fringe Cursors:: Displaying cursors in the right fringe. -* Fringe Bitmaps:: Specifying bitmaps for fringe indicators. -* Customizing Bitmaps:: Specifying your own bitmaps to use in the fringes. -* Overlay Arrow:: Display of an arrow to indicate position. - -The @code{display} Property - -* Replacing Specs:: Display specs that replace the text. -* Specified Space:: Displaying one space with a specified width. -* Pixel Specification:: Specifying space width or height in pixels. -* Other Display Specs:: Displaying an image; adjusting the height, - spacing, and other properties of text. -* Display Margins:: Displaying text or images to the side of - the main text. - -Images - -* Image Formats:: Supported image formats. -* Image Descriptors:: How to specify an image for use in @code{:display}. -* XBM Images:: Special features for XBM format. -* XPM Images:: Special features for XPM format. -* GIF Images:: Special features for GIF format. -* TIFF Images:: Special features for TIFF format. -* PostScript Images:: Special features for PostScript format. -* ImageMagick Images:: Special features available through ImageMagick. -* Other Image Types:: Various other formats are supported. -* Defining Images:: Convenient ways to define an image for later use. -* Showing Images:: Convenient ways to display an image once - it is defined. -* Animated Images:: Some image formats can be animated. -* Image Cache:: Internal mechanisms of image display. - -Buttons - -* Button Properties:: Button properties with special meanings. -* Button Types:: Defining common properties for classes of buttons. -* Making Buttons:: Adding buttons to Emacs buffers. -* Manipulating Buttons:: Getting and setting properties of buttons. -* Button Buffer Commands:: Buffer-wide commands and bindings for buttons. - -Abstract Display - -* Abstract Display Functions:: Functions in the Ewoc package. -* Abstract Display Example:: Example of using Ewoc. - -Character Display - -* Usual Display:: The usual conventions for displaying characters. -* Display Tables:: What a display table consists of. -* Active Display Table:: How Emacs selects a display table to use. -* Glyphs:: How to define a glyph, and what glyphs mean. -* Glyphless Chars:: How glyphless characters are drawn. - -Operating System Interface - -* Starting Up:: Customizing Emacs startup processing. -* Getting Out:: How exiting works (permanent or temporary). -* System Environment:: Distinguish the name and kind of system. -* User Identification:: Finding the name and user id of the user. -* Time of Day:: Getting the current time. -* Time Conversion:: Converting a time from numeric form to - calendrical data and vice versa. -* Time Parsing:: Converting a time from numeric form to text - and vice versa. -* Processor Run Time:: Getting the run time used by Emacs. -* Time Calculations:: Adding, subtracting, comparing times, etc. -* Timers:: Setting a timer to call a function at a - certain time. -* Idle Timers:: Setting a timer to call a function when Emacs has - been idle for a certain length of time. -* Terminal Input:: Accessing and recording terminal input. -* Terminal Output:: Controlling and recording terminal output. -* Sound Output:: Playing sounds on the computer's speaker. -* X11 Keysyms:: Operating on key symbols for X Windows. -* Batch Mode:: Running Emacs without terminal interaction. -* Session Management:: Saving and restoring state with - X Session Management. -* Notifications:: Desktop notifications. -* Dynamic Libraries:: On-demand loading of support libraries. - -Starting Up Emacs - -* Startup Summary:: Sequence of actions Emacs performs at startup. -* Init File:: Details on reading the init file. -* Terminal-Specific:: How the terminal-specific Lisp file is read. -* Command-Line Arguments:: How command-line arguments are processed, - and how you can customize them. - -Getting Out of Emacs - -* Killing Emacs:: Exiting Emacs irreversibly. -* Suspending Emacs:: Exiting Emacs reversibly. - -Terminal Input - -* Input Modes:: Options for how input is processed. -* Recording Input:: Saving histories of recent or all input events. - -Preparing Lisp code for distribution - -* Packaging Basics:: The basic concepts of Emacs Lisp packages. -* Simple Packages:: How to package a single .el file. -* Multi-file Packages:: How to package multiple files. - -Tips and Conventions - -* Coding Conventions:: Conventions for clean and robust programs. -* Key Binding Conventions:: Which keys should be bound by which programs. -* Programming Tips:: Making Emacs code fit smoothly in Emacs. -* Compilation Tips:: Making compiled code run fast. -* Warning Tips:: Turning off compiler warnings. -* Documentation Tips:: Writing readable documentation strings. -* Comment Tips:: Conventions for writing comments. -* Library Headers:: Standard headers for library packages. - -GNU Emacs Internals - -* Building Emacs:: How the dumped Emacs is made. -* Pure Storage:: Kludge to make preloaded Lisp functions shareable. -* Garbage Collection:: Reclaiming space for Lisp objects no longer used. -* Memory Usage:: Info about total size of Lisp objects made so far. -* Writing Emacs Primitives:: Writing C code for Emacs. -* Object Internals:: Data formats of buffers, windows, processes. - -Object Internals - -* Buffer Internals:: Components of a buffer structure. -* Window Internals:: Components of a window structure. -* Process Internals:: Components of a process structure. +* Not used:: This file is only used with TeX, which + generates its own menu. @end detailmenu @end menu @@ -1537,12 +193,8 @@ Object Internals @include display.texi @include os.texi -@c MOVE to Emacs Manual: include misc-modes.texi - @c appendices -@c REMOVE this: include non-hacker.texi - @include anti.texi @include doclicense.texi @include gpl.texi From e2866686744c6ffee9e0824dd6e75d9f33d280ae Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 7 May 2012 23:44:18 -0700 Subject: [PATCH 395/564] FOR-RELEASE comment --- admin/FOR-RELEASE | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/admin/FOR-RELEASE b/admin/FOR-RELEASE index e03e1ad98b1..1e4f9f3b48d 100644 --- a/admin/FOR-RELEASE +++ b/admin/FOR-RELEASE @@ -31,6 +31,15 @@ its own at the start of a line. It looks better if you reword/respace things to avoid these. (AFAIK, there is no way to find these except paging through the whole manual.) This should be the very last thing you do, since any change can alter the layout. +(Actually, there is probably little point in trying to do this. +It's only really relevant if printed versions of the manuals are going +to be published. End-users are not likely to print out all 1000+ +pages of the manuals, and even if they do, the resulting page breaks +depend on what paper and font size they use. This also means that if +you _are_ going to do this, it should be done with the paper and font +size that the GNU Press are going to use when they print the manuals. +I think this is different to what you get if you just use eg `make +emacs.pdf' (e.g., enable "smallbook"). ** Check the keybindings in the refcards are correct, and add any new ones. Regenerate the pdf versions in etc/refcards/. From 5122804afcfe39d656b4252369a290b319d0cc78 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 8 May 2012 00:18:18 -0700 Subject: [PATCH 396/564] Remove doc/lispref/two.el * doc/lispref/two.el: Remove; unused since creation of two-volume.make. * make-dist: No more doc/lispref/*.el. --- ChangeLog | 4 +++ doc/lispref/ChangeLog | 2 ++ doc/lispref/two.el | 78 ------------------------------------------- make-dist | 6 ++-- 4 files changed, 9 insertions(+), 81 deletions(-) delete mode 100644 doc/lispref/two.el diff --git a/ChangeLog b/ChangeLog index a30ecc13d46..c456f8d1736 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2012-05-08 Glenn Morris + + * make-dist: No more doc/lispref/*.el. + 2012-05-05 Andreas Schwab * configure.in: Fix quoting bugs. diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index a3346642342..89f91e91498 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,5 +1,7 @@ 2012-05-08 Glenn Morris + * two.el: Remove; unused since creation of two-volume.make. + * vol1.texi, vol2.texi: No need to keep menus in these files. 2012-05-05 Glenn Morris diff --git a/doc/lispref/two.el b/doc/lispref/two.el deleted file mode 100644 index 39dee62d45d..00000000000 --- a/doc/lispref/two.el +++ /dev/null @@ -1,78 +0,0 @@ -;; Auxiliary functions for preparing a two volume manual. - -;; Copyright (C) 2001-2012 Free Software Foundation, Inc. - -;; --rjc 30mar92 - -;; This file 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 of the License, or -;; (at your option) any later version. - -;; This file is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with this file. If not, see . - - -(defun volume-aux-markup (arg) - "Append `vol. NUMBER' to page number. -Apply to aux file that you save. -Then insert marked file into other volume's .aux file." - (interactive "sType volume number, 1 or 2: " ) - (goto-char (point-min)) - (while (search-forward "-pg" nil t) - (end-of-line 1) - (delete-backward-char 1 nil) - (insert ", vol.'tie" arg "}"))) - -(defun volume-index-markup (arg) - "Prepend `NUMBER:' to page number. Use Roman Numeral. -Apply only to unsorted index file, -Then insert marked file into other volume's unsorted index file. -Then run texindex on that file and save." - (interactive - "sType volume number, roman number I or II: " ) - (goto-char (point-min)) - (while (search-forward "\\entry" nil t) - (search-forward "}{" (save-excursion (end-of-line) (point)) nil) - (insert arg ":"))) - -(defun volume-numbers-toc-markup (arg) - (interactive - "sType volume number, roman number I or II: " ) - (goto-char (point-min)) - (while (search-forward "chapentry" nil t) - (end-of-line) - (search-backward "{" nil t) - (forward-char 1) - (insert arg ":"))) - -(defun volume-header-toc-markup () - "Insert Volume I and Volume II text into .toc file. -NOTE: this auxiliary function is file specific. -This is for the *Elisp Ref Manual*." - (interactive) - (goto-char (point-min)) - (insert "\\unnumbchapentry {Volume 1}{}\n\\unnumbchapentry {}{}\n") - (search-forward "\\unnumbchapentry {Index}") - (forward-line 1) - (insert - "\\unnumbchapentry {}{}\n\\unnumbchapentry {}{}\n\\unnumbchapentry {}{}\n\\unnumbchapentry {}{}\n\\unnumbchapentry {Volume 2}{}\n\\unnumbchapentry {}{}\n")) - - -;;; In batch mode, you cannot call functions with args; hence this kludge: - -(defun volume-aux-markup-1 () (volume-aux-markup "1")) -(defun volume-aux-markup-2 () (volume-aux-markup "2")) - -(defun volume-index-markup-I () (volume-index-markup "I")) -(defun volume-index-markup-II () (volume-index-markup "II")) - -(defun volume-numbers-toc-markup-I () (volume-numbers-toc-markup "I")) -(defun volume-numbers-toc-markup-II () (volume-numbers-toc-markup "II")) - -;;; two.el ends here diff --git a/make-dist b/make-dist index 44a123c658a..9cf6af09e41 100755 --- a/make-dist +++ b/make-dist @@ -1,7 +1,7 @@ #!/bin/sh ### make-dist: create an Emacs distribution tar file from current srcdir -## Copyright (C) 1995, 1997-1998, 2000-2012 Free Software Foundation, Inc. +## Copyright (C) 1995, 1997-1998, 2000-2012 Free Software Foundation, Inc. ## This file is part of GNU Emacs. @@ -478,8 +478,8 @@ echo "Making links to \`doc/misc'" echo "Making links to \`doc/lispref'" (cd doc/lispref ln *.texi *.in makefile.w32-in README ChangeLog* ../../${tempdir}/doc/lispref - ln *.txt *.el spellfile ../../${tempdir}/doc/lispref - ln two-volume.make ../../${tempdir}/doc/lispref) + ln spellfile ../../${tempdir}/doc/lispref + ln two-volume.make two-volume-cross-refs.txt ../../${tempdir}/doc/lispref) echo "Making links to \`doc/lispintro'" (cd doc/lispintro From 8bba5a75f04a8b34da57ed705334bd22088a0563 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 8 May 2012 10:11:47 -0400 Subject: [PATCH 397/564] * lisp/subr.el (defvar-local): Add debug spec and doc-string position. --- lisp/ChangeLog | 4 ++++ lisp/subr.el | 1 + 2 files changed, 5 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ce4103c89d6..a46a08b9a1c 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-05-08 Stefan Monnier + + * subr.el (defvar-local): Add debug spec and doc-string position. + 2012-05-08 Glenn Morris * lisp/language/burmese.el, language/cham.el, language/czech.el: diff --git a/lisp/subr.el b/lisp/subr.el index 5d28b96cd7e..0166a3276a8 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -125,6 +125,7 @@ BODY should be a list of Lisp expressions. "Define VAR as a buffer-local variable with default value VAL. Like `defvar' but additionally marks the variable as being automatically buffer-local wherever it is set." + (declare (debug defvar) (doc-string 3)) ;; Can't use backquote here, it's too early in the bootstrap. (list 'progn (list 'defvar var val docstring) (list 'make-variable-buffer-local (list 'quote var)))) From 07d00b56112b5c9772ba6b73fd5b88474a5e1b22 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 8 May 2012 10:19:08 -0400 Subject: [PATCH 398/564] * lisp/imenu.el: Misc cleanup. Make docstrings out of comments. Use lexical-binding. (imenu--index-alist, imenu--last-menubar-index-alist) (imenu-menubar-modified-tick): Use defvar-local. (imenu--split-menu): Remove unused var. (imenu--cleanup-seen): Declare as global. (imenu--cleanup): Use dolist. --- lisp/ChangeLog | 8 +++ lisp/imenu.el | 137 +++++++++++++++++++++---------------------------- 2 files changed, 66 insertions(+), 79 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index a46a08b9a1c..fae2f08b804 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,13 @@ 2012-05-08 Stefan Monnier + * imenu.el: Misc cleanup. Make docstrings out of comments. + Use lexical-binding. + (imenu--index-alist, imenu--last-menubar-index-alist) + (imenu-menubar-modified-tick): Use defvar-local. + (imenu--split-menu): Remove unused var. + (imenu--cleanup-seen): Declare as global. + (imenu--cleanup): Use dolist. + * subr.el (defvar-local): Add debug spec and doc-string position. 2012-05-08 Glenn Morris diff --git a/lisp/imenu.el b/lisp/imenu.el index feebb96d379..24beb9c89c1 100644 --- a/lisp/imenu.el +++ b/lisp/imenu.el @@ -1,4 +1,4 @@ -;;; imenu.el --- framework for mode-specific buffer indexes +;;; imenu.el --- framework for mode-specific buffer indexes -*- lexical-binding: t -*- ;; Copyright (C) 1994-1998, 2001-2012 Free Software Foundation, Inc. @@ -266,12 +266,12 @@ The function in this variable is called when selecting a normal index-item.") (and (consp (cdr item)) (listp (cadr item)) (not (eq (car (cadr item)) 'lambda)))) -;; Macro to display a progress message. -;; RELPOS is the relative position to display. -;; If RELPOS is nil, then the relative position in the buffer -;; is calculated. -;; PREVPOS is the variable in which we store the last position displayed. -(defmacro imenu-progress-message (prevpos &optional relpos reverse) +(defmacro imenu-progress-message (_prevpos &optional _relpos _reverse) + "Macro to display a progress message. +RELPOS is the relative position to display. +If RELPOS is nil, then the relative position in the buffer +is calculated. +PREVPOS is the variable in which we store the last position displayed." ;; Made obsolete/empty, as computers are now faster than the eye, and ;; it had problems updating the messages correctly, and could shadow @@ -419,8 +419,7 @@ Don't move point." (defconst imenu--rescan-item '("*Rescan*" . -99)) ;; The latest buffer index. -;; Buffer local. -(defvar imenu--index-alist nil +(defvar-local imenu--index-alist nil "The buffer index alist computed for this buffer in Imenu. Simple elements in the alist look like (INDEX-NAME . POSITION). @@ -439,16 +438,12 @@ There is one simple element with negative POSITION; selecting that element recalculates the buffer's index alist.") ;;;###autoload(put 'imenu--index-alist 'risky-local-variable t) -(make-variable-buffer-local 'imenu--index-alist) - -(defvar imenu--last-menubar-index-alist nil +(defvar-local imenu--last-menubar-index-alist nil "The latest buffer index alist used to update the menu bar menu.") -(make-variable-buffer-local 'imenu--last-menubar-index-alist) - -;; History list for 'jump-to-function-in-buffer'. -;; Making this buffer local caused it not to work! -(defvar imenu--history-list nil) +(defvar imenu--history-list nil + ;; Making this buffer local caused it not to work! + "History list for 'jump-to-function-in-buffer'.") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; @@ -456,21 +451,18 @@ element recalculates the buffer's index alist.") ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;; -;;; Sort function -;;; Sorts the items depending on their index name. -;;; An item looks like (NAME . POSITION). -;;; (defun imenu--sort-by-name (item1 item2) + "Comparison function to sort items depending on their index name. +An item looks like (NAME . POSITION)." (string-lessp (car item1) (car item2))) (defun imenu--sort-by-position (item1 item2) (< (cdr item1) (cdr item2))) (defun imenu--relative-position (&optional reverse) - ;; Support function to calculate relative position in buffer - ;; Beginning of buffer is 0 and end of buffer is 100 - ;; If REVERSE is non-nil then the beginning is 100 and the end is 0. + "Support function to calculate relative position in buffer. +Beginning of buffer is 0 and end of buffer is 100 +If REVERSE is non-nil then the beginning is 100 and the end is 0." (let ((pos (point)) (total (buffer-size))) (and reverse (setq pos (- total pos))) @@ -479,11 +471,10 @@ element recalculates the buffer's index alist.") (/ (1- pos) (max (/ total 100) 1)) (/ (* 100 (1- pos)) (max total 1))))) -;; Split LIST into sublists of max length N. -;; Example (imenu--split '(1 2 3 4 5 6 7 8) 3)-> '((1 2 3) (4 5 6) (7 8)) -;; -;; The returned list DOES NOT share structure with LIST. (defun imenu--split (list n) + "Split LIST into sublists of max length N. +Example (imenu--split '(1 2 3 4 5 6 7 8) 3)-> '((1 2 3) (4 5 6) (7 8)) +The returned list DOES NOT share structure with LIST." (let ((remain list) (result '()) (sublist '()) @@ -502,20 +493,18 @@ element recalculates the buffer's index alist.") (push (nreverse sublist) result)) (nreverse result))) -;;; Split the alist MENULIST into a nested alist, if it is long enough. -;;; In any case, add TITLE to the front of the alist. -;;; If IMENU--RESCAN-ITEM is present in MENULIST, it is moved to the -;;; beginning of the returned alist. -;;; -;;; The returned alist DOES NOT share structure with MENULIST. (defun imenu--split-menu (menulist title) + "Split the alist MENULIST into a nested alist, if it is long enough. +In any case, add TITLE to the front of the alist. +If IMENU--RESCAN-ITEM is present in MENULIST, it is moved to the +beginning of the returned alist. +The returned alist DOES NOT share structure with MENULIST." (let ((menulist (copy-sequence menulist)) - keep-at-top tail) + keep-at-top) (if (memq imenu--rescan-item menulist) (setq keep-at-top (list imenu--rescan-item) menulist (delq imenu--rescan-item menulist))) - (setq tail menulist) - (dolist (item tail) + (dolist (item menulist) (when (imenu--subalist-p item) (push item keep-at-top) (setq menulist (delq item menulist)))) @@ -530,32 +519,28 @@ element recalculates the buffer's index alist.") (cons title (nconc (nreverse keep-at-top) menulist)))) -;;; Split up each long alist that are nested within ALIST -;;; into nested alists. -;;; -;;; Return a split and sorted copy of ALIST. The returned alist DOES -;;; NOT share structure with ALIST. (defun imenu--split-submenus (alist) - (mapcar (function - (lambda (elt) - (if (and (consp elt) - (stringp (car elt)) - (listp (cdr elt))) - (imenu--split-menu (cdr elt) (car elt)) - elt))) + "Split up each long alist that are nested within ALIST into nested alists. +Return a split and sorted copy of ALIST. The returned alist DOES +NOT share structure with ALIST." + (mapcar (lambda (elt) + (if (and (consp elt) + (stringp (car elt)) + (listp (cdr elt))) + (imenu--split-menu (cdr elt) (car elt)) + elt)) alist)) -;;; Truncate all strings in MENULIST to imenu-max-item-length (defun imenu--truncate-items (menulist) - (mapcar (function - (lambda (item) - (cond - ((consp (cdr item)) - (imenu--truncate-items (cdr item))) - ;; truncate if necessary - ((and (numberp imenu-max-item-length) - (> (length (car item)) imenu-max-item-length)) - (setcar item (substring (car item) 0 imenu-max-item-length)))))) + "Truncate all strings in MENULIST to `imenu-max-item-length'." + (mapcar (lambda (item) + (cond + ((consp (cdr item)) + (imenu--truncate-items (cdr item))) + ;; truncate if necessary + ((and (numberp imenu-max-item-length) + (> (length (car item)) imenu-max-item-length)) + (setcar item (substring (car item) 0 imenu-max-item-length))))) menulist)) @@ -585,13 +570,12 @@ See `imenu--index-alist' for the format of the index alist." ;; Add a rescan option to the index. (cons imenu--rescan-item imenu--index-alist)) -;;; Find all markers in alist and makes -;;; them point nowhere. -;;; The top-level call uses nil as the argument; -;;; non-nil arguments are in recursive calls. -(defvar imenu--cleanup-seen) +(defvar imenu--cleanup-seen nil) (defun imenu--cleanup (&optional alist) + "Find all markers in ALIST and make them point nowhere. +If ALIST is nil (the normal case), use `imenu--index-alist'. +Non-nil arguments are in recursive calls." ;; If alist is provided use that list. ;; If not, empty the table of lists already seen ;; and use imenu--index-alist. @@ -599,18 +583,14 @@ See `imenu--index-alist' for the format of the index alist." (setq imenu--cleanup-seen (cons alist imenu--cleanup-seen)) (setq alist imenu--index-alist imenu--cleanup-seen (list alist))) - (and alist - (mapc - (lambda (item) - (cond - ((markerp (cdr item)) - (set-marker (cdr item) nil)) - ;; Don't process one alist twice. - ((memq (cdr item) imenu--cleanup-seen)) - ((imenu--subalist-p item) - (imenu--cleanup (cdr item))))) - alist) - t)) + (when alist + (dolist (item alist) + (cond + ((markerp (cdr item)) (set-marker (cdr item) nil)) + ;; Don't process one alist twice. + ((memq (cdr item) imenu--cleanup-seen)) + ((imenu--subalist-p item) (imenu--cleanup (cdr item))))) + t)) (defun imenu--create-keymap (title alist &optional cmd) (list* 'keymap title @@ -981,10 +961,9 @@ A trivial interface to `imenu-add-to-menubar' suitable for use in a hook." (defvar imenu-buffer-menubar nil) -(defvar imenu-menubar-modified-tick 0 +(defvar-local imenu-menubar-modified-tick 0 "The value of (buffer-chars-modified-tick) as of the last call to `imenu-update-menubar'.") -(make-variable-buffer-local 'imenu-menubar-modified-tick) (defun imenu-update-menubar () (when (and (current-local-map) From 49ed9c8e75a0b869f06606fc05fc38f5f207083e Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 8 May 2012 11:19:18 -0400 Subject: [PATCH 399/564] * lisp/vc/log-edit.el: Add GNU coding standards highlighting. (log-edit-font-lock-gnu-style) (log-edit-font-lock-gnu-keywords): New vars. (log-edit-font-lock-keywords): New fun. (log-edit-mode): Don't fold case in font-lock. (log-edit-font-lock-keywords): Do not assume case-folding. * .dir-locals.el (log-edit-mode): Enable gnu-style checks. --- .dir-locals.el | 3 ++- ChangeLog | 4 ++++ lisp/ChangeLog | 7 +++++++ lisp/vc/log-edit.el | 46 +++++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 57 insertions(+), 3 deletions(-) diff --git a/.dir-locals.el b/.dir-locals.el index 4da890f92ab..471f74da12a 100644 --- a/.dir-locals.el +++ b/.dir-locals.el @@ -5,7 +5,8 @@ ;; You must set bugtracker_debbugs_url in your bazaar.conf for this to work. ;; See admin/notes/bugtracker. (log-edit-mode . ((log-edit-rewrite-fixes - "[ \n](bug#\\([0-9]+\\))" . "debbugs:\\1"))) + "[ \n](bug#\\([0-9]+\\))" . "debbugs:\\1") + (log-edit-font-lock-gnu-style . t))) (change-log-mode . ((add-log-time-zone-rule . t) (fill-column . 74) (bug-reference-url-format . "http://debbugs.gnu.org/%s") diff --git a/ChangeLog b/ChangeLog index c456f8d1736..96ad5c2d189 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2012-05-08 Stefan Monnier + + * .dir-locals.el (log-edit-mode): Enable gnu-style checks. + 2012-05-08 Glenn Morris * make-dist: No more doc/lispref/*.el. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index fae2f08b804..3d275acd46c 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,12 @@ 2012-05-08 Stefan Monnier + * vc/log-edit.el: Add GNU coding standards highlighting. + (log-edit-font-lock-gnu-style) + (log-edit-font-lock-gnu-keywords): New vars. + (log-edit-font-lock-keywords): New fun. + (log-edit-mode): Don't fold case in font-lock. + (log-edit-font-lock-keywords): Do not assume case-folding. + * imenu.el: Misc cleanup. Make docstrings out of comments. Use lexical-binding. (imenu--index-alist, imenu--last-menubar-index-alist) diff --git a/lisp/vc/log-edit.el b/lisp/vc/log-edit.el index db70f417393..2abb1ec9c0a 100644 --- a/lisp/vc/log-edit.el +++ b/lisp/vc/log-edit.el @@ -349,7 +349,7 @@ automatically." (defvar log-edit-font-lock-keywords ;; Copied/inspired by message-font-lock-keywords. `((log-edit-match-to-eoh - (,(concat "^\\(\\([a-z]+\\):\\)" log-edit-header-contents-regexp) + (,(concat "^\\(\\([[:alpha:]]+\\):\\)" log-edit-header-contents-regexp) (progn (goto-char (match-beginning 0)) (match-end 0)) nil (1 (if (assoc (match-string 2) log-edit-headers-alist) 'log-edit-header @@ -360,6 +360,48 @@ automatically." 'log-edit-header) nil lax))))) +(defvar log-edit-font-lock-gnu-style nil + "If non-nil, highlight common failures to follow the GNU coding standards.") +(put 'log-edit-font-lock-gnu-style 'safe-local-variable 'booleanp) + +(defconst log-edit-font-lock-gnu-keywords + ;; Use + ;; * foo.el (bla, bli) + ;; (blo, blu): Toto. + ;; Rather than + ;; * foo.el (bla, bli, + ;; blo, blu): Toto. + '(("^[ \t]*\\(?:\\* .*\\)?\\(([^\n)]*,\\s-*\\)$" + (1 '(face font-lock-warning-face + help-echo "Continue function lists with \")\\n(\".") t)) + ;; Don't leave a lone word on a single line. + ;;("^\\s-*\\(\\S-*[^\n:)]\\)\\s-*$" (1 font-lock-warning-face t)) + ;; Don't cut a sentence right after the first word (better to move + ;; the sentence on the next line, then). + ;;("[.:]\\s-+\\(\\sw+\\)\\s-*$" (1 font-lock-warning-face t)) + ;; Change Log entries should use present tense. + ("):[ \t\n]*[[:alpha:]]+\\(ed\\)\\>" + (1 '(face font-lock-warning-face help-echo "Use present tense.") t)) + ;; Change log entries start with a capital letter. + ("): [a-z]" (0 '(face font-lock-warning-face help-echo "Capitalize.") t)) + ("[^[:upper:]]\\(\\. [[:upper:]]\\)" + (1 '(face font-lock-warning-face + help-echo "Use two spaces to end a sentence") t)) + ("^(" + (0 (let ((beg (max (point-min) (- (match-beginning 0) 2)))) + (put-text-property beg (match-end 0) 'font-lock-multiline t) + (if (eq (char-syntax (char-after beg)) ?w) + '(face font-lock-warning-face + help-echo "Punctuate previous line."))) + t)) + )) + +(defun log-edit-font-lock-keywords () + (if log-edit-font-lock-gnu-style + (append log-edit-font-lock-keywords + log-edit-font-lock-gnu-keywords) + log-edit-font-lock-keywords)) + ;;;###autoload (defun log-edit (callback &optional setup params buffer mode &rest _ignore) "Setup a buffer to enter a log message. @@ -416,7 +458,7 @@ commands (under C-x v for VC, for example). \\{log-edit-mode-map}" (set (make-local-variable 'font-lock-defaults) - '(log-edit-font-lock-keywords t t)) + '(log-edit-font-lock-keywords t)) (make-local-variable 'log-edit-comment-ring-index) (hack-dir-local-variables-non-file-buffer)) From ad89bb83f7cb57b77cc30f5f8805013b0bd4ab10 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 8 May 2012 13:23:09 -0400 Subject: [PATCH 400/564] * lisp/files.el (auto-mode-alist): Treat ".make" like ".mk". --- lisp/ChangeLog | 4 ++++ lisp/files.el | 2 ++ 2 files changed, 6 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 3d275acd46c..3988ed707c3 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-05-08 Glenn Morris + + * files.el (auto-mode-alist): Treat ".make" like ".mk". + 2012-05-08 Stefan Monnier * vc/log-edit.el: Add GNU coding standards highlighting. diff --git a/lisp/files.el b/lisp/files.el index f2302c2dd48..7ee0707d7b7 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -2262,9 +2262,11 @@ since only a single case-insensitive search through the alist is made." ("\\.makepp\\'" . makefile-makepp-mode) ,@(if (memq system-type '(berkeley-unix darwin)) '(("\\.mk\\'" . makefile-bsdmake-mode) + ("\\.make\\'" . makefile-bsdmake-mode) ("GNUmakefile\\'" . makefile-gmake-mode) ("[Mm]akefile\\'" . makefile-bsdmake-mode)) '(("\\.mk\\'" . makefile-gmake-mode) ; Might be any make, give Gnu the host advantage + ("\\.make\\'" . makefile-gmake-mode) ("[Mm]akefile\\'" . makefile-gmake-mode))) ("\\.am\\'" . makefile-automake-mode) ;; Less common extensions come here From 2fed2689194b260e608c5ef8a12e36d57c8dd199 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Tue, 8 May 2012 22:09:38 +0300 Subject: [PATCH 401/564] Fix a typo in last commit of src/ChangeLog. --- src/ChangeLog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index 3a9e9a5f539..4bf848d953a 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -4,7 +4,7 @@ * keyboard.c (read_char): Don't clear the echo area if there's no message to clear. * xdisp.c (redisplay_internal): Redisplay the mini window (with the - contents of *Minibuf-0*) if there' no message displayed in its stead. + contents of *Minibuf-0*) if there's no message displayed in its stead. 2012-05-07 Michael Albinus From 0a454caf059b4cc050984a41decc2344cd9a083f Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 8 May 2012 15:39:29 -0400 Subject: [PATCH 402/564] Move part of previous clean rule change to mostlyclean * doc/lispref/Makefile.in (mostlyclean): Add some more vol1/2 items. --- doc/lispref/ChangeLog | 2 +- doc/lispref/Makefile.in | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index abb441e5c91..273396e57c3 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,6 +1,6 @@ 2012-05-08 Glenn Morris - * Makefile.in (clean): Add some more vol1/2 items. + * Makefile.in (clean, mostlyclean): Add some more vol1/2 items. * two-volume.make (emacsdir): New. (tex): Add directory with emacsver.texi to TEXINPUTS. diff --git a/doc/lispref/Makefile.in b/doc/lispref/Makefile.in index 2b79d51695d..efd5e39a0eb 100644 --- a/doc/lispref/Makefile.in +++ b/doc/lispref/Makefile.in @@ -129,11 +129,11 @@ elisp.pdf: $(srcs) mostlyclean: rm -f *.aux *.log *.toc *.cp *.cps *.fn *.fns *.ky *.kys \ *.op *.ops *.pg *.pgs *.tp *.tps *.vr *.vrs - rm -f elisp[12]* + rm -f elisp[12]* vol[12].tmp clean: mostlyclean rm -f elisp.dvi elisp.pdf elisp.ps - rm -f vol[12].dvi vol[12].pdf vol[12].ps vol[12].tmp + rm -f vol[12].dvi vol[12].pdf vol[12].ps rm -rf elisp.html rm -f emacs-lispref-${version}.tar* From b499d8d02c271d50efdabe6dd6c598da45ef5cc6 Mon Sep 17 00:00:00 2001 From: Juanma Barranquero Date: Wed, 9 May 2012 02:29:00 +0200 Subject: [PATCH 403/564] lisp/eshell/esh-cmd.el (eshell-debug-command): Fix typo in previous change. --- lisp/ChangeLog | 4 ++++ lisp/eshell/esh-cmd.el | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 3988ed707c3..ed74bd452fd 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-05-09 Juanma Barranquero + + * eshell/esh-cmd.el (eshell-debug-command): Fix typo in previous change. + 2012-05-08 Glenn Morris * files.el (auto-mode-alist): Treat ".make" like ".mk". diff --git a/lisp/eshell/esh-cmd.el b/lisp/eshell/esh-cmd.el index b1f8fd037a4..850cecbc0a5 100644 --- a/lisp/eshell/esh-cmd.el +++ b/lisp/eshell/esh-cmd.el @@ -242,7 +242,7 @@ If you change this without using customize after Eshell has loaded, you must re-load 'esh-cmd.el'." :initialize 'custom-initialize-default :set (lambda (symbol value) - (set sym val) + (set symbol value) (load-library "esh-cmd")) :type 'boolean :group 'eshell-cmd) From 4824146aa85b7e0cdfe9cab024d2137c98b85174 Mon Sep 17 00:00:00 2001 From: Juanma Barranquero Date: Wed, 9 May 2012 02:45:34 +0200 Subject: [PATCH 404/564] lisp/progmodes/idlw-shell.el: Cleanup after 2012-05-04T05:14:14Z!cyd@gnu.org. (specs): Remove reference to deleted variable `idlwave-shell-activate-alt-keybindings' and simplify. --- lisp/ChangeLog | 3 +++ lisp/progmodes/idlw-shell.el | 8 ++------ 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ed74bd452fd..30e5ac3c7eb 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2012-05-09 Juanma Barranquero + * progmodes/idlw-shell.el (specs): Remove reference to deleted + variable `idlwave-shell-activate-alt-keybindings' and simplify. + * eshell/esh-cmd.el (eshell-debug-command): Fix typo in previous change. 2012-05-08 Glenn Morris diff --git a/lisp/progmodes/idlw-shell.el b/lisp/progmodes/idlw-shell.el index ca51eef6e8e..da8f30bab43 100644 --- a/lisp/progmodes/idlw-shell.el +++ b/lisp/progmodes/idlw-shell.el @@ -4183,12 +4183,8 @@ Otherwise, just expand the file name." ([( ?[)] ?[ idlwave-shell-goto-previous-bp t t) ([( ?])] ?] idlwave-shell-goto-next-bp t t) ([(control ?f)] ?f idlwave-shell-window))) - (mod (cond ((and idlwave-shell-debug-modifiers - (listp idlwave-shell-debug-modifiers) - (not (equal '() idlwave-shell-debug-modifiers))) - idlwave-shell-debug-modifiers) - (idlwave-shell-activate-alt-keybindings - '(alt)))) + (mod (and (listp idlwave-shell-debug-modifiers) + idlwave-shell-debug-modifiers)) (shift (memq 'shift mod)) (mod-noshift (delete 'shift (copy-sequence mod))) s k1 c2 k2 cmd electric only-buffer cannotshift) From 8f6b6da8ecdcd37ecbb83778d35baa02d68621a3 Mon Sep 17 00:00:00 2001 From: Juanma Barranquero Date: Wed, 9 May 2012 02:57:18 +0200 Subject: [PATCH 405/564] lisp/textmodes/rst.el: Silence byte-compiler warnings. (rst-re-alist, rst-reset-section-caches): Move around. (rst-re): Use `characterp', not `char-valid-p'. (font-lock-beg, font-lock-end): Declare. --- lisp/ChangeLog | 5 +++++ lisp/textmodes/rst.el | 41 ++++++++++++++++++++++------------------- 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 30e5ac3c7eb..e2bc5619419 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,10 @@ 2012-05-09 Juanma Barranquero + * textmodes/rst.el: Silence byte-compiler warnings. + (rst-re-alist, rst-reset-section-caches): Move around. + (rst-re): Use `characterp', not `char-valid-p'. + (font-lock-beg, font-lock-end): Declare. + * progmodes/idlw-shell.el (specs): Remove reference to deleted variable `idlwave-shell-activate-alt-keybindings' and simplify. diff --git a/lisp/textmodes/rst.el b/lisp/textmodes/rst.el index a9f280be1db..1fefe6e2e28 100644 --- a/lisp/textmodes/rst.el +++ b/lisp/textmodes/rst.el @@ -422,6 +422,17 @@ in parentheses follows the development revision and the timestamp.") Each entry consists of the symbol naming the regex and an argument list for `rst-re'.") +(defconst rst-re-alist + ;; Shadow global value we are just defining so we can construct it step by + ;; step + (let (rst-re-alist) + (dolist (re rst-re-alist-def) + (setq rst-re-alist + (nconc rst-re-alist + (list (list (car re) (apply 'rst-re (cdr re))))))) + rst-re-alist) + "Alist mapping symbols from `rst-re-alist-def' to regex strings.") + ;; FIXME: Use `sregex` or `rx` instead of re-inventing the wheel (defun rst-re (&rest args) "Interpret ARGS as regular expressions and return a regex string. @@ -459,7 +470,7 @@ After interpretation of ARGS the results are concatenated as for re) ((symbolp re) (cadr (assoc re rst-re-alist))) - ((char-valid-p re) + ((characterp re) (regexp-quote (char-to-string re))) ((listp re) (let ((nested @@ -481,17 +492,6 @@ After interpretation of ARGS the results are concatenated as for (error "Unknown object type for building regex: %s" re)))) args))) -(defconst rst-re-alist - ;; Shadow global value we are just defining so we can construct it step by - ;; step - (let (rst-re-alist) - (dolist (re rst-re-alist-def) - (setq rst-re-alist - (nconc rst-re-alist - (list (list (car re) (apply 'rst-re (cdr re))))))) - rst-re-alist) - "Alist mapping symbols from `rst-re-alist-def' to regex strings.") - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Mode definition. @@ -1186,7 +1186,7 @@ are nil." ((looking-at (rst-re 'ttl-beg)) ;; Try to use the underline (let ((r (rst-classify-adornment - (buffer-substring-no-properties + (buffer-substring-no-properties (line-beginning-position 2) (line-end-position 2)) (line-end-position 2)))) (if r @@ -1199,12 +1199,6 @@ are nil." ;; current section adornment in a buffer local cache. Thus they can be used for ;; font-locking and manipulation commands. -(defun rst-reset-section-caches () - "Reset all section cache variables. -Should be called by interactive functions which deal with sections." - (setq rst-all-sections nil - rst-section-hierarchy nil)) - (defvar rst-all-sections nil "All section adornments in the buffer as found by `rst-find-all-adornments'. t when no section adornments were found.") @@ -1218,6 +1212,12 @@ t when no section adornments were found. Value depends on `rst-all-sections'.") (make-variable-buffer-local 'rst-section-hierarchy) +(defun rst-reset-section-caches () + "Reset all section cache variables. +Should be called by interactive functions which deal with sections." + (setq rst-all-sections nil + rst-section-hierarchy nil)) + (defun rst-find-all-adornments () "Return all the section adornments in the current buffer. Return a list of (LINE . ADORNMENT) with ascending LINE where @@ -3571,6 +3571,9 @@ details check the Rst Faces Defaults group." ) "Keywords to highlight in rst mode.") +(defvar font-lock-beg) +(defvar font-lock-end) + (defun rst-font-lock-extend-region () "Extend the region `font-lock-beg' / `font-lock-end' iff it may be in the middle of a multiline construct and return non-nil if so." From 5b6eebcf2b1a1fc779f018be0d9b648746c8cad6 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 8 May 2012 20:11:41 -0700 Subject: [PATCH 406/564] Remove the need for lispref vol1.texi and vol2.texi * vol1.texi, vol2.texi: Remove files. * elisp.texi: Add VOL1,2 conditionals equivalent to vol1,2.texi * two-volume.make: Use elisp.texi as input rather than vol1,2.texi. --- doc/lispref/ChangeLog | 4 + doc/lispref/elisp.texi | 65 ++++++++++- doc/lispref/two-volume.make | 32 ++++-- doc/lispref/vol1.texi | 217 ----------------------------------- doc/lispref/vol2.texi | 219 ------------------------------------ 5 files changed, 90 insertions(+), 447 deletions(-) delete mode 100644 doc/lispref/vol1.texi delete mode 100644 doc/lispref/vol2.texi diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index fb6d8fcada3..7c2f61d1298 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,5 +1,9 @@ 2012-05-09 Glenn Morris + * vol1.texi, vol2.texi: Remove files. + * elisp.texi: Add VOL1,2 conditionals equivalent to vol1,2.texi + * two-volume.make: Use elisp.texi as input rather than vol1,2.texi. + * Makefile.in (clean, mostlyclean): Add some more vol1/2 items. * two-volume.make (emacsdir): New. diff --git a/doc/lispref/elisp.texi b/doc/lispref/elisp.texi index a799b2fe1b4..6e10ad635be 100644 --- a/doc/lispref/elisp.texi +++ b/doc/lispref/elisp.texi @@ -1,11 +1,58 @@ \input texinfo @c -*-texinfo-*- @c %**start of header @setfilename elisp + +@ifset VOL1 +@set volflag +@set voltitle Volume 1 +@end ifset + +@ifset VOL2 +@set volflag +@set voltitle Volume 2 +@end ifset + +@ifset volflag +@settitle GNU Emacs Lisp Reference Manual: @value{voltitle} +@end ifset +@ifclear volflag @settitle GNU Emacs Lisp Reference Manual +@end ifclear + @c %**end of header +@c See two-volume-cross-refs.txt. +@tex +@ifset VOL1 +\message{Formatting for two volume edition...Volume 1...} +% +% Read special toc file, set up in two-volume.make. +\gdef\tocreadfilename{elisp1-toc-ready.toc} +% +% Don't make outlines, they're not needed and \readdatafile can't pay +% attention to the special definition above. +\global\let\pdfmakeoutlines=\relax +% +% Start volume 1 chapter numbering at 1; this must be listed as chapno0. +\global\chapno=0 +@end ifset +@ifset VOL2 +\message{Formatting for two volume edition...Volume 2...} +% +% Read special toc file, set up in two-volume.make. +\gdef\tocreadfilename{elisp2-toc-ready.toc} +% +% Don't make outlines, they're not needed and \readdatafile can't pay +% attention to the special definition above. +\global\let\pdfmakeoutlines=\relax +% +% Start volume 2 chapter numbering at 27; this must be listed as chapno26 +\global\chapno=26 +@end ifset +@end tex + + @c Version of the manual and of Emacs. -@c Please remember to update these in vol1.texi and vol2.texi as well. @c (See comments for EDITION in emacs.texi) @set VERSION 3.1 @include emacsver.texi @@ -16,6 +63,10 @@ @c onto the distribution in the full, 8.5 x 11" size. @c @smallbook +@ifset volflag +@smallbook +@end ifset + @ifset smallbook @smallbook @end ifset @@ -75,6 +126,9 @@ developing GNU and promoting software freedom.'' @titlepage @title GNU Emacs Lisp Reference Manual +@ifset volflag +@subtitle @value{voltitle} +@end ifset @subtitle For Emacs Version @value{EMACSVER} @subtitle Revision @value{VERSION}, @value{DATE} @@ -1468,6 +1522,7 @@ Object Internals @end detailmenu @end menu +@ifclear VOL2 @include intro.texi @include objects.texi @include numbers.texi @@ -1501,6 +1556,12 @@ Object Internals @include files.texi @include backups.texi + +@end ifclear + +@c ================ Beginning of Volume 2 ================ +@ifclear VOL1 + @include buffers.texi @include windows.texi @include frames.texi @@ -1533,6 +1594,8 @@ Object Internals @include index.texi +@end ifclear + @ignore @node New Symbols, , Index, Top @unnumbered New Symbols Since the Previous Edition diff --git a/doc/lispref/two-volume.make b/doc/lispref/two-volume.make index 07fcaf09b98..eb5c0e0193d 100644 --- a/doc/lispref/two-volume.make +++ b/doc/lispref/two-volume.make @@ -5,6 +5,8 @@ # colors, spurious warnings about names being referenced but not # existing, etc., dvips | ps2pdf doesn't preserve the page size. # Instead of creating a special dvips config file, put up with the warnings. +# (Note added 2012/05: for me, using texlive-2007-57, pdftex +# doesn't work for reason, but tex does.) texinfodir=../misc emacsdir=../emacs @@ -12,22 +14,32 @@ tex = TEXINPUTS=".:$(texinfodir):${emacsdir}:${TEXINPUTS}" pdftex -interaction=n all: vol1.pdf vol2.pdf -# vol1.texi and vol2.texi specially define \tocreadfilename so we can -# use our premade .toc's. +# There's probably a better way to do this, without using a temp file. +# Something like: +# tex -jobname=vol1 '\def\SETVOL1 \input{elisp.texi}' +# but I don't know what to use for "\def\SETVOL1". +tex1 = sed '/^@setfilename/a\ +@set VOL1' elisp.texi > elisp1tmp.tex && $(tex) -jobname=vol1 elisp1tmp.tex + +tex2 = sed '/^@setfilename/a\ +@set VOL2' elisp.texi > elisp2tmp.tex && $(tex) -jobname=vol2 elisp2tmp.tex + +# elisp.texi specially defines \tocreadfilename when VOL1 or VOL2 is +# set, so we can use our premade .toc's. # vol1.pdf: elisp1med-fns-ready elisp1med-aux-ready elisp1med-toc-ready @echo -e "\f Final TeX run for volume 1..." cp elisp1med-toc-ready elisp1-toc-ready.toc cp elisp1med-fns-ready vol1.fns cp elisp1med-aux-ready vol1.aux - $(tex) vol1.texi + $(tex1) # vol2.pdf: elisp2med-fns-ready elisp2med-aux-ready elisp2med-toc-ready @echo "Final TeX run for volume 2..." cp elisp2med-toc-ready elisp2-toc-ready.toc cp elisp2med-fns-ready vol2.fns cp elisp2med-aux-ready vol2.aux - $(tex) vol2.texi + $(tex2) # intermediate toc files. # @@ -105,7 +117,7 @@ elisp1med-init: elisp1-fns-ready elisp1-aux-ready elisp1init-toc-ready $(texinfo cp elisp1init-toc-ready elisp1-toc-ready.toc cp elisp1-fns-ready vol1.fns cp elisp1-aux-ready vol1.aux - $(tex) vol1.texi + $(tex1) texindex vol1.?? mv vol1.aux elisp1med-aux mv vol1.toc elisp1med-toc @@ -115,7 +127,7 @@ elisp2med-init: elisp2-fns-ready elisp2-aux-ready elisp2init-toc-ready $(texinfo cp elisp2init-toc-ready elisp2-toc-ready.toc cp elisp2-fns-ready vol2.fns cp elisp2-aux-ready vol2.aux - $(tex) vol2.texi + $(tex2) texindex vol2.?? mv vol2.aux elisp2med-aux mv vol2.toc elisp2med-toc @@ -189,19 +201,19 @@ elisp2-fn-vol-added: elisp2-init # but we run texindex and TeX a second time just to get them closer. # Otherwise it might take even longer for them to converge. # -elisp1-init: vol1.texi +elisp1-init: elisp.texi @echo -e "\f Initial TeX run for volume 1..." rm -f vol1.aux vol1.toc - $(tex) $< + $(tex1) texindex vol1.?? mv vol1.aux elisp1-aux mv vol1.toc elisp1-toc touch $@ # -elisp2-init: vol2.texi +elisp2-init: elisp.texi @echo "Initial TeX run for volume 2..." rm -f vol2.aux vol2.toc - $(tex) $< + $(tex2) texindex vol2.?? mv vol2.aux elisp2-aux mv vol2.toc elisp2-toc diff --git a/doc/lispref/vol1.texi b/doc/lispref/vol1.texi deleted file mode 100644 index 7712ea1f330..00000000000 --- a/doc/lispref/vol1.texi +++ /dev/null @@ -1,217 +0,0 @@ -\input texinfo @c -*-texinfo-*- -@c This file is used for printing the GNU Emacs Lisp Reference Manual -@c in two volumes. It is a modified version of elisp.texi. -@c Copyright (C) 1990-1995, 1998-1999, 2001-2012 -@c Free Software Foundation, Inc. -@c %**start of header -@setfilename elisp -@settitle GNU Emacs Lisp Reference Manual: Volume 1 -@c %**end of header - -@c See two-volume-cross-refs.txt. -@tex -\message{Formatting for two volume edition...Volume 1...} -% -% Read special toc file, set up in two-volume.make. -\gdef\tocreadfilename{elisp1-toc-ready.toc} -% -% Don't make outlines, they're not needed and \readdatafile can't pay -% attention to the special definition above. -\global\let\pdfmakeoutlines=\relax -% -% Start volume 1 chapter numbering at 1; this must be listed as chapno0. -\global\chapno=0 -@end tex - -@c Version of the manual and of Emacs. -@set VERSION 3.1 -@include emacsver.texi -@set DATE May 2012 - -@dircategory Emacs -@direntry -* Elisp: (elisp). The Emacs Lisp Reference Manual. -@end direntry - -@c in general, keep the following line commented out, unless doing a -@c copy of this manual that will be published. the manual should go -@c onto the distribution in the full, 8.5 x 11" size. -@set smallbook - -@ifset smallbook -@smallbook -@end ifset - -@c per rms and peterb, use 10pt fonts for the main text, mostly to -@c save on paper cost. -@c Do this inside @tex for now, so current makeinfo does not complain. -@tex -@ifset smallbook -@fonttextsize 10 -\global\let\urlcolor=\Black % don't print links in grayscale -\global\let\linkcolor=\Black -@end ifset -\global\hbadness=6666 % don't worry about not-too-underfull boxes -@end tex - -@c Combine indices. -@synindex cp fn -@syncodeindex vr fn -@syncodeindex ky fn -@syncodeindex pg fn -@c We use the "type index" to index new functions and variables. -@c @syncodeindex tp fn - -@copying -This is edition @value{VERSION} of the GNU Emacs Lisp Reference Manual,@* -corresponding to Emacs version @value{EMACSVER}. - -Copyright @copyright{} 1990-1996, 1998-2012 Free Software Foundation, Inc. - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.3 or -any later version published by the Free Software Foundation; with the -Invariant Sections being ``GNU General Public License,'' with the -Front-Cover texts being ``A GNU Manual,'' and with the Back-Cover -Texts as in (a) below. A copy of the license is included in the -section entitled ``GNU Free Documentation License.'' - -(a) The FSF's Back-Cover Text is: ``You have the freedom to copy and -modify this GNU manual. Buying copies from the FSF supports it in -developing GNU and promoting software freedom.'' -@end quotation -@end copying - -@titlepage -@title GNU Emacs Lisp Reference Manual -@subtitle Volume 1 -@subtitle For Emacs Version @value{EMACSVER} -@subtitle Revision @value{VERSION}, @value{DATE} - -@author by Bil Lewis, Dan LaLiberte, Richard Stallman, -@author the GNU Manual Group, et al. -@page -@vskip 0pt plus 1filll -@insertcopying - -@sp 2 - -Published by the Free Software Foundation @* -51 Franklin St, Fifth Floor @* -Boston, MA 02110-1301 @* -USA @* -ISBN 1-882114-74-4 - -@sp 2 -Cover art by Etienne Suvasa. -@end titlepage - - -@c Print the tables of contents -@summarycontents -@contents - - -@ifnottex -@node Top -@top Emacs Lisp - -This Info file contains edition @value{VERSION} of the GNU Emacs Lisp -Reference Manual, corresponding to GNU Emacs version @value{EMACSVER}. -@end ifnottex - -@menu -* Not used:: This file is only used with tex, which - generates its own menu. - -@detailmenu - --- The Detailed Node Listing --- - --------------------------------- - -Here are other nodes that are subnodes of those already listed, -mentioned here so you can get to them in one step: - -Not used - -* Not used:: This file is only used with TeX, which - generates its own menu. -@end detailmenu -@end menu - -@include intro.texi -@include objects.texi -@include numbers.texi -@include strings.texi - -@include lists.texi -@include sequences.texi -@include hash.texi -@include symbols.texi -@include eval.texi - -@include control.texi -@include variables.texi -@include functions.texi -@include macros.texi - -@include customize.texi -@include loading.texi -@include compile.texi -@include advice.texi - -@c This includes edebug.texi. -@include debugging.texi -@include streams.texi -@include minibuf.texi -@include commands.texi - -@include keymaps.texi -@include modes.texi -@include help.texi -@include files.texi - -@include backups.texi - -@c ================ Beginning of Volume 2 ================ -@c include buffers.texi -@c include windows.texi -@c include frames.texi - -@c include positions.texi -@c include markers.texi -@c include text.texi -@c include nonascii.texi - -@c include searching.texi -@c include syntax.texi -@c include abbrevs.texi -@c include processes.texi - -@c include display.texi -@c include os.texi - -@c appendices - -@c include anti.texi -@c include doclicense.texi -@c include gpl.texi -@c include tips.texi -@c include internals.texi -@c include errors.texi -@c include maps.texi -@c include hooks.texi - -@include index.texi - -@ignore -@node New Symbols, , Index, Top -@unnumbered New Symbols Since the Previous Edition - -@printindex tp -@end ignore - -@bye - - -These words prevent "local variables" above from confusing Emacs. diff --git a/doc/lispref/vol2.texi b/doc/lispref/vol2.texi deleted file mode 100644 index 66e0250bd71..00000000000 --- a/doc/lispref/vol2.texi +++ /dev/null @@ -1,219 +0,0 @@ -\input texinfo @c -*-texinfo-*- -@c This file is used for printing the GNU Emacs Lisp Reference Manual -@c in two volumes. It is a modified version of elisp.texi. -@c Copyright (C) 1990-1995, 1998-1999, 2001-2012 -@c Free Software Foundation, Inc. -@c %**start of header -@setfilename elisp -@settitle GNU Emacs Lisp Reference Manual: Volume 2 -@c %**end of header - -@c See two-volume-cross-refs.txt. -@tex -\message{Formatting for two volume edition...Volume 2...} -% -% Read special toc file, set up in two-volume.make. -\gdef\tocreadfilename{elisp2-toc-ready.toc} -% -% Don't make outlines, they're not needed and \readdatafile can't pay -% attention to the special definition above. -\global\let\pdfmakeoutlines=\relax -% -% Start volume 2 chapter numbering at 27; this must be listed as chapno26 -\global\chapno=26 -@end tex - -@c Version of the manual and of Emacs. -@set VERSION 3.1 -@include emacsver.texi -@set DATE May 2012 - -@dircategory Emacs -@direntry -* Elisp: (elisp). The Emacs Lisp Reference Manual. -@end direntry - -@c in general, keep the following line commented out, unless doing a -@c copy of this manual that will be published. the manual should go -@c onto the distribution in the full, 8.5 x 11" size. -@set smallbook - -@ifset smallbook -@smallbook -@end ifset - -@c per rms and peterb, use 10pt fonts for the main text, mostly to -@c save on paper cost. -@c Do this inside @tex for now, so current makeinfo does not complain. -@tex -@ifset smallbook -@fonttextsize 10 -\global\let\urlcolor=\Black % don't print links in grayscale -\global\let\linkcolor=\Black -@end ifset -\global\hbadness=6666 % don't worry about not-too-underfull boxes -@end tex - -@c Combine indices. -@synindex cp fn -@syncodeindex vr fn -@syncodeindex ky fn -@syncodeindex pg fn -@c We use the "type index" to index new functions and variables. -@c @syncodeindex tp fn - -@copying -This is edition @value{VERSION} of the GNU Emacs Lisp Reference Manual,@* -corresponding to Emacs version @value{EMACSVER}. - -Copyright @copyright{} 1990-1996, 1998-2012 Free Software Foundation, Inc. - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.3 or -any later version published by the Free Software Foundation; with the -Invariant Sections being ``GNU General Public License,'' with the -Front-Cover texts being ``A GNU Manual,'' and with the Back-Cover -Texts as in (a) below. A copy of the license is included in the -section entitled ``GNU Free Documentation License.'' - -(a) The FSF's Back-Cover Text is: ``You have the freedom to copy and -modify this GNU manual. Buying copies from the FSF supports it in -developing GNU and promoting software freedom.'' -@end quotation -@end copying - -@titlepage -@title GNU Emacs Lisp Reference Manual -@subtitle Volume 2 -@subtitle For Emacs Version @value{EMACSVER} -@subtitle Revision @value{VERSION}, @value{DATE} - -@author by Bil Lewis, Dan LaLiberte, Richard Stallman, -@author the GNU Manual Group, et al. -@page -@vskip 0pt plus 1filll -@insertcopying - -@sp 2 -Published by the Free Software Foundation @* -51 Franklin St, Fifth Floor @* -Boston, MA 02110-1301 @* -USA @* -ISBN 1-882114-74-4 - -@sp 2 -Cover art by Etienne Suvasa. -@end titlepage - - -@c Print the tables of contents -@summarycontents -@contents - - -@ifnottex -@node Top -@top Emacs Lisp - -This Info file contains edition @value{VERSION} of the GNU Emacs Lisp -Reference Manual, corresponding to GNU Emacs version @value{EMACSVER}. -@end ifnottex - -@menu -* Not used:: This file is only used with tex, which - generates its own menu. - -@detailmenu - --- The Detailed Node Listing --- - --------------------------------- - -Here are other nodes that are subnodes of those already listed, -mentioned here so you can get to them in one step: - -Here are other nodes that are subnodes of those already listed, -mentioned here so you can get to them in one step: - -Not used - -* Not used:: This file is only used with TeX, which - generates its own menu. -@end detailmenu -@end menu - -@c include intro.texi -@c include objects.texi -@c include numbers.texi -@c include strings.texi - -@c include lists.texi -@c include sequences.texi -@c include hash.texi -@c include symbols.texi -@c include eval.texi - -@c include control.texi -@c include variables.texi -@c include functions.texi -@c include macros.texi - -@c include customize.texi -@c include loading.texi -@c include compile.texi -@c include advice.texi - -@c This includes edebug.texi. -@c include debugging.texi -@c include streams.texi -@c include minibuf.texi -@c include commands.texi - -@c include keymaps.texi -@c include modes.texi -@c include help.texi -@c include files.texi - -@c include backups.texi - -@c ================ Beginning of Volume 2 ================ -@include buffers.texi -@include windows.texi -@include frames.texi - -@include positions.texi -@include markers.texi -@include text.texi -@include nonascii.texi - -@include searching.texi -@include syntax.texi -@include abbrevs.texi -@include processes.texi - -@include display.texi -@include os.texi - -@c appendices - -@include anti.texi -@include doclicense.texi -@include gpl.texi -@include tips.texi -@include internals.texi -@include errors.texi -@include maps.texi -@include hooks.texi - -@include index.texi - -@ignore -@node New Symbols, , Index, Top -@unnumbered New Symbols Since the Previous Edition - -@printindex tp -@end ignore - -@bye - - -These words prevent "local variables" above from confusing Emacs. From 482276b8ceb2e3211c3c81310e387ce446fc976f Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 8 May 2012 20:23:20 -0700 Subject: [PATCH 407/564] ChangeLog merge fix --- doc/lispintro/ChangeLog | 9 --------- 1 file changed, 9 deletions(-) diff --git a/doc/lispintro/ChangeLog b/doc/lispintro/ChangeLog index e556fa7e998..1191b0de919 100644 --- a/doc/lispintro/ChangeLog +++ b/doc/lispintro/ChangeLog @@ -1,12 +1,3 @@ -2012-05-09 Glenn Morris - - * emacs-lisp-intro.texi (Making Errors): Don't mention Emacs 20. - (Void Function, Wrong Type of Argument, Recursion with list) - (Simple Extension): Assume a non-ancient Emacs. - (Void Variable, Switching Buffers): Improve page breaks. - - * emacs-lisp-intro.texi: Update GNU Press contact details. - 2012-05-05 Glenn Morris * emacs-lisp-intro.texi (Making Errors): Don't mention Emacs 20. From 66b03a53a3218479b93d64857a08b6d4cb5a0f7f Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 8 May 2012 20:30:51 -0700 Subject: [PATCH 408/564] Yet more ChangeLog merge fixes --- doc/emacs/ChangeLog | 41 ----------------------------------------- doc/lispref/ChangeLog | 17 ----------------- lisp/ChangeLog | 5 ----- 3 files changed, 63 deletions(-) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index 60fba317232..80d9381ec42 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -3,47 +3,6 @@ * frames.texi (Mouse References, Mouse Commands): Fix index entries (Bug#11362). -2012-05-09 Glenn Morris - - * custom.texi (Customization Groups, Custom Themes, Examining): - Improve page breaks. - - * rmail.texi (Rmail Display): Use example rather than smallexample. - - * calendar.texi: Convert inforefs to refs. - - * dired.texi (Dired Enter): Improve page break. - - * abbrevs.texi (Abbrev Concepts): Copyedits. - - * maintaining.texi (Registering, Tag Syntax): - Tweak line and page breaks. - - * programs.texi (Programs, Electric C): Copyedits. - (Program Modes): Add xref to Fortran. - (Left Margin Paren): Remove what was (oddly enough) the only use - of defvar in the entire Emacs manual. - (Hungry Delete): Remove footnote about ancient Emacs version. - (Other C Commands): Use example rather than smallexample. - - * text.texi (Pages, Filling, Foldout, Org Mode, HTML Mode) - (Nroff Mode, Enriched Indentation, Table Rows and Columns): - Tweak line and page breaks. - - * modes.texi (Major Modes, Minor Modes): Reword to improve page-breaks. - (Major Modes): Use example rather than smallexample. - - * mule.texi (Output Coding): Reword to improve page-breaks. - - * frames.texi (Fonts): Tweak line and page breaks. - Use example rather than smallexample. Change cross-reference. - (Text-Only Mouse): Fix xref. - - * buffers.texi (Buffers, Kill Buffer, Several Buffers) - (Indirect Buffers): Tweak line- and page-breaks. - - * fixit.texi (Fixit, Undo): Reword to improve page-breaks. - 2012-05-05 Glenn Morris * custom.texi (Customization Groups, Custom Themes, Examining): diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 7c2f61d1298..1b9fa0991e4 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -38,23 +38,6 @@ (Sequencing, Conditionals, Signaling Errors, Handling Errors): Tweak page breaks. - * lists.texi (List-related Predicates, List Variables): - Tweak page-breaks. - (Sets And Lists): Convert inforef to xref. - - * text.texi (Auto Filling): Don't mention Emacs 19. - - * commands.texi (Event Input Misc): Don't mention unread-command-char. - * numbers.texi (Predicates on Numbers): Don't mention Emacs 18. - - * objects.texi (Process Type, Overlay Type): Tweak page-breaks. - - * intro.texi (Caveats): Copyedit. - (Lisp History): Convert inforef to xref. - (Lisp History, Printing Notation, Version Info): Improve page-breaks. - - * elisp.texi (DATE): Forgot to change the month in 2012-04-21 change. - 2012-05-08 Glenn Morris * two.el: Remove; unused since creation of two-volume.make. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e9d849691fd..635a24deead 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -27,11 +27,6 @@ shell-delimiter-argument-list (bug#11348). (shell-parse-pcomplete-arguments): Obey pcomplete-arg-quote-list. -2012-05-09 Chong Yidong - - * select.el (xselect--encode-string): Always use utf-8 for TEXT on - Nextstep. - 2012-05-09 Juanma Barranquero * textmodes/rst.el: Silence byte-compiler warnings. From ce7b18ec41c5102f4af27ec22cf873a75f510630 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Wed, 9 May 2012 16:33:48 +0800 Subject: [PATCH 409/564] Improve RFC 3986 conformance of url package. Fix 2012-04-10 change to url.el. * url-http.el (url-http-create-request): Ignore obsolete attributes slot of url-object. * url-parse.el: Improve RFC 3986 conformance. (url-generic-parse-url): Do not populate the ATTRIBUTES slot, since this is not reliable for general RFC 3986 URIs. Keep the whole path and query inside the FILENAME slot. Improve docstring. (url-recreate-url-attributes): Mark as obsolete. (url-recreate-url): Handle missing scheme and userinfo. * url-util.el (url-encode-url): New function for URL quoting. (url-encoding-table, url-host-allowed-chars) (url-path-allowed-chars): New constants. (url--allowed-chars): New helper function. (url-hexify-string): Use them. * url-vars.el (url-nonrelative-link): Make the regexp stricter. * url.el (url-retrieve-internal): Use url-encode-url. Fixes: debbugs:7017 --- etc/NEWS | 12 +++ lisp/url/ChangeLog | 22 +++++ lisp/url/url-http.el | 3 +- lisp/url/url-parse.el | 204 ++++++++++++++++++++++++------------------ lisp/url/url-util.el | 135 ++++++++++++++++++++++------ lisp/url/url-vars.el | 6 +- lisp/url/url.el | 10 +-- 7 files changed, 269 insertions(+), 123 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 9d011df6feb..921f44bbcce 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -202,6 +202,18 @@ server properties. *** New command `tabulated-list-sort', bound to `S', sorts the column at point, or the Nth column if a numeric prefix argument is given. +** URL + +*** Structs made by `url-generic-parse-url' have nil `attributes' slot. +Previously, this slot stored semicolon-separated attribute-value pairs +appended to some imap URLs, but this is not compatible with RFC 3986. +So now the `filename' slot stores the entire path and query components +and the `attributes' slot is always nil. + +*** New function `url-encode-url' for encoding a URI string. +The `url-retrieve' function now uses this to encode its URL argument, +in case that is not properly encoded. + ** Obsolete packages: *** assoc.el diff --git a/lisp/url/ChangeLog b/lisp/url/ChangeLog index 7ce3489cfcc..3980b22d4c1 100644 --- a/lisp/url/ChangeLog +++ b/lisp/url/ChangeLog @@ -1,3 +1,25 @@ +2012-05-09 Chong Yidong + + * url-util.el (url-encode-url): New function for URL quoting. + (url-encoding-table, url-host-allowed-chars) + (url-path-allowed-chars): New constants. + (url--allowed-chars): New helper function. + (url-hexify-string): Use them. + + * url-parse.el: Improve RFC 3986 conformance. + (url-generic-parse-url): Do not populate the ATTRIBUTES slot, + since this is not reliable for general RFC 3986 URIs. Keep the + whole path and query inside the FILENAME slot. Improve docstring. + (url-recreate-url-attributes): Mark as obsolete. + (url-recreate-url): Handle missing scheme and userinfo. + + * url-http.el (url-http-create-request): Ignore obsolete + attributes slot of url-object. + + * url-vars.el (url-nonrelative-link): Make the regexp stricter. + + * url.el (url-retrieve-internal): Use url-encode-url (Bug#7017). + 2012-04-26 Stefan Monnier * url.el (url-retrieve-synchronously): Replace lexical-let by diff --git a/lisp/url/url-http.el b/lisp/url/url-http.el index a4726489814..ff026da2d21 100644 --- a/lisp/url/url-http.el +++ b/lisp/url/url-http.el @@ -223,8 +223,7 @@ request.") (let ((url-basic-auth-storage 'url-http-proxy-basic-auth-storage)) (url-get-authentication url-http-target-url nil 'any nil)))) - (real-fname (concat (url-filename url-http-target-url) - (url-recreate-url-attributes url-http-target-url))) + (real-fname (url-filename url-http-target-url)) (host (url-host url-http-target-url)) (auth (if (cdr-safe (assoc "Authorization" url-http-extra-headers)) nil diff --git a/lisp/url/url-parse.el b/lisp/url/url-parse.el index b91c85c0c3d..40183a4f533 100644 --- a/lisp/url/url-parse.el +++ b/lisp/url/url-parse.el @@ -48,21 +48,31 @@ ;;;###autoload (defun url-recreate-url (urlobj) "Recreate a URL string from the parsed URLOBJ." - (concat (url-type urlobj) ":" (if (url-host urlobj) "//" "") - (if (url-user urlobj) - (concat (url-user urlobj) - (if (url-password urlobj) - (concat ":" (url-password urlobj))) - "@")) - (url-host urlobj) - (if (and (url-port urlobj) - (not (equal (url-port urlobj) - (url-scheme-get-property (url-type urlobj) 'default-port)))) - (format ":%d" (url-port urlobj))) - (or (url-filename urlobj) "/") - (url-recreate-url-attributes urlobj) - (if (url-target urlobj) - (concat "#" (url-target urlobj))))) + (let ((type (url-type urlobj)) + (user (url-user urlobj)) + (pass (url-password urlobj)) + (host (url-host urlobj)) + (port (url-portspec urlobj)) + (file (url-filename urlobj)) + (frag (url-target urlobj))) + (concat (if type (concat type ":")) + (if (url-fullness urlobj) "//") + (if (or user pass) + (concat user + (if pass (concat ":" pass)) + "@")) + host + ;; RFC 3986: "omit the port component and its : delimiter + ;; if port is empty or if its value would be the same as + ;; that of the scheme's default." + (and port + (or (null type) + (not (equal port + (url-scheme-get-property type + 'default-port)))) + (format ":%d" (url-port urlobj))) + (or file "/") + (if frag (concat "#" frag))))) (defun url-recreate-url-attributes (urlobj) "Recreate the attributes of an URL string from the parsed URLOBJ." @@ -73,107 +83,129 @@ (concat (car x) "=" (cdr x)) (car x))) (url-attributes urlobj) ";")))) +(make-obsolete 'url-recreate-url-attributes nil "24.2") ;;;###autoload (defun url-generic-parse-url (url) "Return an URL-struct of the parts of URL. The CL-style struct contains the following fields: -TYPE USER PASSWORD HOST PORTSPEC FILENAME TARGET ATTRIBUTES FULLNESS." - ;; See RFC 3986. - (cond - ((null url) - (url-parse-make-urlobj)) - ((or (not (string-match url-nonrelative-link url)) - (= ?/ (string-to-char url))) - ;; This isn't correct, as a relative URL can be a fragment link - ;; (e.g. "#foo") and many other things (see section 4.2). - ;; However, let's not fix something that isn't broken, especially - ;; when close to a release. - (url-parse-make-urlobj nil nil nil nil nil url)) - (t + +TYPE is the URI scheme (string or nil). +USER is the user name (string or nil). +PASSWORD is the password (string [deprecated] or nil). +HOST is the host (a registered name, IP literal in square + brackets, or IPv4 address in dotted-decimal form). +PORTSPEC is the specified port (a number), or nil. +FILENAME is the path AND the query component of the URI. +TARGET is the fragment identifier component (used to refer to a + subordinate resource, e.g. a part of a webpage). +ATTRIBUTES is nil; this slot originally stored the attribute and + value alists for IMAP URIs, but this feature was removed + since it conflicts with RFC 3986. +FULLNESS is non-nil iff the authority component of the URI is + present. + +The parser follows RFC 3986, except that it also tries to handle +URIs that are not fully specified (e.g. lacking TYPE), and it +does not check for or perform %-encoding. + +Here is an example. The URL + + foo://bob:pass@example.com:42/a/b/c.dtb?type=animal&name=narwhal#nose + +parses to + + TYPE = \"foo\" + USER = \"bob\" + PASSWORD = \"pass\" + HOST = \"example.com\" + PORTSPEC = 42 + FILENAME = \"/a/b/c.dtb?type=animal&name=narwhal\" + TARGET = \"nose\" + ATTRIBUTES = nil + FULLNESS = t" + (if (null url) + (url-parse-make-urlobj) (with-temp-buffer ;; Don't let those temp-buffer modifications accidentally ;; deactivate the mark of the current-buffer. (let ((deactivate-mark nil)) (set-syntax-table url-parse-syntax-table) - (let ((save-pos nil) - (prot nil) - (user nil) - (pass nil) - (host nil) - (port nil) - (file nil) - (refs nil) - (attr nil) - (full nil) + (erase-buffer) + (insert url) + (goto-char (point-min)) + (let ((save-pos (point)) + scheme user pass host port file fragment full (inhibit-read-only t)) - (erase-buffer) - (insert url) - (goto-char (point-min)) - (setq save-pos (point)) ;; 3.1. Scheme - (unless (looking-at "//") - (skip-chars-forward "a-zA-Z+.\\-") - (downcase-region save-pos (point)) - (setq prot (buffer-substring save-pos (point))) - (skip-chars-forward ":") - (setq save-pos (point))) + ;; This is nil for a URI that is not fully specified. + (when (looking-at "\\([a-zA-Z][-a-zA-Z0-9+.]*\\):") + (goto-char (match-end 0)) + (setq save-pos (point)) + (setq scheme (downcase (match-string 1)))) ;; 3.2. Authority (when (looking-at "//") (setq full t) (forward-char 2) (setq save-pos (point)) - (skip-chars-forward "^/") + (skip-chars-forward "^/?#") (setq host (buffer-substring save-pos (point))) + ;; 3.2.1 User Information (if (string-match "^\\([^@]+\\)@" host) (setq user (match-string 1 host) - host (substring host (match-end 0) nil))) - (if (and user (string-match "\\([^:]+\\):\\(.*\\)" user)) + host (substring host (match-end 0)))) + (if (and user (string-match "\\`\\([^:]*\\):\\(.*\\)" user)) (setq pass (match-string 2 user) user (match-string 1 user))) - ;; This gives wrong results for IPv6 literal addresses. - (if (string-match ":\\([0-9+]+\\)" host) - (setq port (string-to-number (match-string 1 host)) - host (substring host 0 (match-beginning 0)))) - (if (string-match ":$" host) - (setq host (substring host 0 (match-beginning 0)))) - (setq host (downcase host) - save-pos (point))) + (cond + ;; IPv6 literal address. + ((string-match "^\\(\\[[^]]+\\]\\)\\(?::\\([0-9]*\\)\\)?$" host) + (setq port (match-string 2 host) + host (match-string 1 host))) + ;; Registered name or IPv4 address. + ((string-match ":\\([0-9]*\\)$" host) + (setq port (match-string 1 host) + host (substring host 0 (match-beginning 0))))) + (cond ((equal port "") + (setq port nil)) + (port + (setq port (string-to-number port)))) + (setq host (downcase host))) - (if (not port) - (setq port (url-scheme-get-property prot 'default-port))) + (and (null port) + scheme + (setq port (url-scheme-get-property scheme 'default-port))) + + ;; Now point is on the / ? or # which terminates the + ;; authority, or at the end of the URI, or (if there is no + ;; authority) at the beginning of the absolute path. - ;; 3.3. Path - ;; Gross hack to preserve ';' in data URLs (setq save-pos (point)) + (if (string= "data" scheme) + ;; For the "data" URI scheme, all the rest is the FILE. + (setq file (buffer-substring save-pos (point-max))) + ;; For hysterical raisins, our data structure returns the + ;; path and query components together in one slot. + ;; 3.3. Path + (skip-chars-forward "^?#") + ;; 3.4. Query + (when (looking-at "?") + (skip-chars-forward "^#")) + (setq file (buffer-substring save-pos (point))) + ;; 3.5 Fragment + (when (looking-at "#") + (let ((opoint (point))) + (forward-char 1) + (unless (eobp) + (setq fragment (buffer-substring (point) (point-max)))) + (delete-region opoint (point-max))))) - ;; 3.4. Query - (if (string= "data" prot) - (goto-char (point-max)) - ;; Now check for references - (skip-chars-forward "^#") - (if (eobp) - nil - (delete-region - (point) - (progn - (skip-chars-forward "#") - (setq refs (buffer-substring (point) (point-max))) - (point-max)))) - (goto-char save-pos) - (skip-chars-forward "^;") - (unless (eobp) - (setq attr (url-parse-args (buffer-substring (point) (point-max)) - t) - attr (nreverse attr)))) - - (setq file (buffer-substring save-pos (point))) (if (and host (string-match "%[0-9][0-9]" host)) (setq host (url-unhex-string host))) - (url-parse-make-urlobj - prot user pass host port file refs attr full))))))) + (url-parse-make-urlobj scheme user pass host port file + fragment nil full)))))) (defmacro url-bit-for-url (method lookfor url) `(let* ((urlobj (url-generic-parse-url url)) diff --git a/lisp/url/url-util.el b/lisp/url/url-util.el index d12bd5447fa..c8016ef6cdb 100644 --- a/lisp/url/url-util.el +++ b/lisp/url/url-util.el @@ -333,40 +333,117 @@ forbidden in URL encoding." (concat tmp str))) (defconst url-unreserved-chars - '( - ?a ?b ?c ?d ?e ?f ?g ?h ?i ?j ?k ?l ?m ?n ?o ?p ?q ?r ?s ?t ?u ?v ?w ?x ?y ?z + '(?a ?b ?c ?d ?e ?f ?g ?h ?i ?j ?k ?l ?m ?n ?o ?p ?q ?r ?s ?t ?u ?v ?w ?x ?y ?z ?A ?B ?C ?D ?E ?F ?G ?H ?I ?J ?K ?L ?M ?N ?O ?P ?Q ?R ?S ?T ?U ?V ?W ?X ?Y ?Z ?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 - ?- ?_ ?. ?! ?~ ?* ?' ?\( ?\)) - "A list of characters that are _NOT_ reserved in the URL spec. -This is taken from RFC 2396.") + ?- ?_ ?. ?~) + "List of characters that are unreserved in the URL spec. +This is taken from RFC 3986 (section 2.3).") + +(defconst url-encoding-table + (let ((vec (make-vector 256 nil))) + (dotimes (byte 256) + (aset vec byte (format "%%%02x" byte))) + vec) + "Vector translating bytes to URI-encoded %-sequences.") + +(defun url--allowed-chars (char-list) + "Return an \"allowed character\" mask (a 256-slot vector). +The Nth element is non-nil if character N is in CHAR-LIST. The +result can be passed as the second arg to `url-hexify-string'." + (let ((vec (make-vector 256 nil))) + (dolist (byte char-list) + (ignore-errors (aset vec byte t))) + vec)) ;;;###autoload -(defun url-hexify-string (string) - "Return a new string that is STRING URI-encoded. -First, STRING is converted to utf-8, if necessary. Then, for each -character in the utf-8 string, those found in `url-unreserved-chars' -are left as-is, all others are represented as a three-character -string: \"%\" followed by two lowercase hex digits." - ;; To go faster and avoid a lot of consing, we could do: - ;; - ;; (defconst url-hexify-table - ;; (let ((map (make-vector 256 nil))) - ;; (dotimes (byte 256) (aset map byte - ;; (if (memq byte url-unreserved-chars) - ;; (char-to-string byte) - ;; (format "%%%02x" byte)))) - ;; map)) - ;; - ;; (mapconcat (curry 'aref url-hexify-table) ...) +(defun url-hexify-string (string &optional allowed-chars) + "URI-encode STRING and return the result. +If STRING is multibyte, it is first converted to a utf-8 byte +string. Each byte corresponding to an allowed character is left +as-is, while all other bytes are converted to a three-character +string: \"%\" followed by two lowercase hex digits. + +The allowed characters are specified by ALLOWED-CHARS. If this +argument is nil, the list `url-unreserved-chars' determines the +allowed characters. Otherwise, ALLOWED-CHARS should be a vector +whose Nth element is non-nil if character N is allowed." + (unless allowed-chars + (setq allowed-chars (url--allowed-chars url-unreserved-chars))) (mapconcat (lambda (byte) - (if (memq byte url-unreserved-chars) - (char-to-string byte) - (format "%%%02x" byte))) - (if (multibyte-string-p string) - (encode-coding-string string 'utf-8) - string) - "")) + (if (aref allowed-chars byte) + (char-to-string byte) + (aref url-encoding-table byte))) + (if (multibyte-string-p string) + (encode-coding-string string 'utf-8) + string) + "")) + +(defconst url-host-allowed-chars + ;; Allow % to avoid re-encoding %-encoded sequences. + (url--allowed-chars (append '(?% ?! ?$ ?& ?' ?\( ?\) ?* ?+ ?, ?\; ?=) + url-unreserved-chars)) + "Allowed-character byte mask for the host segment of a URI. +These characters are specified in RFC 3986, Appendix A.") + +(defconst url-path-allowed-chars + (let ((vec (copy-sequence url-host-allowed-chars))) + (aset vec ?/ t) + (aset vec ?: t) + (aset vec ?@ t) + vec) + "Allowed-character byte mask for the path segment of a URI. +These characters are specified in RFC 3986, Appendix A.") + +(defconst url-query-allowed-chars + (let ((vec (copy-sequence url-path-allowed-chars))) + (aset vec ?? t) + vec) + "Allowed-character byte mask for the query segment of a URI. +These characters are specified in RFC 3986, Appendix A.") + +;;;###autoload +(defun url-encode-url (url) + "Return a properly URI-encoded version of URL. +This function also performs URI normalization, e.g. converting +the scheme to lowercase if it is uppercase. Apart from +normalization, if URL is already URI-encoded, this function +should return it unchanged." + (if (multibyte-string-p url) + (setq url (encode-coding-string url 'utf-8))) + (let* ((obj (url-generic-parse-url url)) + (user (url-user obj)) + (pass (url-password obj)) + (host (url-host obj)) + (file (url-filename obj)) + (frag (url-target obj)) + path query) + (if user + (setf (url-user obj) (url-hexify-string user))) + (if pass + (setf (url-password obj) (url-hexify-string pass))) + (when host + ;; No special encoding for IPv6 literals. + (unless (string-match "\\`\\[.*\\]\\'" host) + (setf (url-host obj) + (url-hexify-string host url-host-allowed-chars)))) + ;; Split FILENAME slot into its PATH and QUERY components, and + ;; encode them separately. The PATH component can contain + ;; unreserved characters, %-encodings, and /:@!$&'()*+,;= + (when file + (if (string-match "\\?" file) + (setq path (substring file 0 (match-beginning 0)) + query (substring file (match-end 0))) + (setq path file)) + (setq path (url-hexify-string path url-path-allowed-chars)) + (if query + (setq query (url-hexify-string query url-query-allowed-chars))) + (setf (url-filename obj) + (if query (concat path "?" query) path))) + (if frag + (setf (url-target obj) + (url-hexify-string frag url-query-allowed-chars))) + (url-recreate-url obj))) ;;;###autoload (defun url-file-extension (fname &optional x) diff --git a/lisp/url/url-vars.el b/lisp/url/url-vars.el index ff18049e97b..0d71910849f 100644 --- a/lisp/url/url-vars.el +++ b/lisp/url/url-vars.el @@ -304,8 +304,12 @@ undefined." :type '(choice (const :tag "None" :value nil) string) :group 'url) +;; From RFC3986: Scheme names consist of a sequence of characters +;; beginning with a letter and followed by any combination of letters, +;; digits, plus ("+"), period ("."), or hyphen ("-"). + (defvar url-nonrelative-link - "\\`\\([-a-zA-Z0-9+.]+:\\)" + "\\`\\([a-zA-Z][-a-zA-Z0-9+.]*:\\)" "A regular expression that will match an absolute URL.") (defcustom url-max-redirections 30 diff --git a/lisp/url/url.el b/lisp/url/url.el index 7884882c6e7..6d276273c2d 100644 --- a/lisp/url/url.el +++ b/lisp/url/url.el @@ -125,7 +125,9 @@ variable in the original buffer as a forwarding pointer.") ;;;###autoload (defun url-retrieve (url callback &optional cbargs silent inhibit-cookies) "Retrieve URL asynchronously and call CALLBACK with CBARGS when finished. -URL is either a string or a parsed URL. +URL is either a string or a parsed URL. If it is a string +containing characters that are not valid in a URI, those +characters are percent-encoded; see `url-encode-url'. CALLBACK is called when the object has been completely retrieved, with the current buffer containing the object, and any MIME headers associated @@ -179,10 +181,8 @@ URL-encoded before it's used." (url-do-setup) (url-gc-dead-buffers) (if (stringp url) - (set-text-properties 0 (length url) nil url)) - (when (multibyte-string-p url) - (let ((url-unreserved-chars (append '(?: ?/) url-unreserved-chars))) - (setq url (url-hexify-string url)))) + (set-text-properties 0 (length url) nil url)) + (setq url (url-encode-url url)) (if (not (vectorp url)) (setq url (url-generic-parse-url url))) (if (not (functionp callback)) From bdac2d37fa5f83ec57d794523147dc5d5a179992 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Wed, 9 May 2012 20:20:26 +0800 Subject: [PATCH 410/564] * url-util.el (url--allowed-chars): Use upper-case for percent-encoding. --- lisp/url/ChangeLog | 2 +- lisp/url/url-util.el | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lisp/url/ChangeLog b/lisp/url/ChangeLog index 3980b22d4c1..b3669a72ac3 100644 --- a/lisp/url/ChangeLog +++ b/lisp/url/ChangeLog @@ -3,7 +3,7 @@ * url-util.el (url-encode-url): New function for URL quoting. (url-encoding-table, url-host-allowed-chars) (url-path-allowed-chars): New constants. - (url--allowed-chars): New helper function. + (url--allowed-chars): New helper function. Use upper-case. (url-hexify-string): Use them. * url-parse.el: Improve RFC 3986 conformance. diff --git a/lisp/url/url-util.el b/lisp/url/url-util.el index c8016ef6cdb..4185c87918e 100644 --- a/lisp/url/url-util.el +++ b/lisp/url/url-util.el @@ -343,7 +343,10 @@ This is taken from RFC 3986 (section 2.3).") (defconst url-encoding-table (let ((vec (make-vector 256 nil))) (dotimes (byte 256) - (aset vec byte (format "%%%02x" byte))) + ;; RFC 3986 (Section 2.1): For consistency, URI producers and + ;; normalizers should use uppercase hexadecimal digits for all + ;; percent-encodings. + (aset vec byte (format "%%%02X" byte))) vec) "Vector translating bytes to URI-encoded %-sequences.") @@ -362,7 +365,7 @@ result can be passed as the second arg to `url-hexify-string'." If STRING is multibyte, it is first converted to a utf-8 byte string. Each byte corresponding to an allowed character is left as-is, while all other bytes are converted to a three-character -string: \"%\" followed by two lowercase hex digits. +string: \"%\" followed by two upper-case hex digits. The allowed characters are specified by ALLOWED-CHARS. If this argument is nil, the list `url-unreserved-chars' determines the From 00fd78ed4f34548d1e7bca6fe28b74decd4bef39 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Wed, 9 May 2012 20:39:40 +0800 Subject: [PATCH 411/564] Encoding fix for browse-url-encode-url. * lisp/net/browse-url.el (browse-url-url-encode-chars): Use upper-case. (browse-url-encode-url): Encode spaces and quotes. Fixes: debbugs:6300 --- lisp/ChangeLog | 5 +++++ lisp/net/browse-url.el | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 635a24deead..bf15cd2f9aa 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-05-09 Chong Yidong + + * net/browse-url.el (browse-url-url-encode-chars): Use upper-case. + (browse-url-encode-url): Encode spaces and quotes (Bug#6300). + 2012-05-09 Stefan Monnier * shell.el (shell-completion-vars): Fix last change (bug#11348). diff --git a/lisp/net/browse-url.el b/lisp/net/browse-url.el index 62c0e317a81..f4e7e942931 100644 --- a/lisp/net/browse-url.el +++ b/lisp/net/browse-url.el @@ -642,7 +642,7 @@ CHARS is a regexp-like character alternative (e.g., \"[)$]\")." (s 0)) (while (setq s (string-match chars encoded-text s)) (setq encoded-text - (replace-match (format "%%%x" + (replace-match (format "%%%X" (string-to-char (match-string 0 encoded-text))) t t encoded-text) s (1+ s))) @@ -655,7 +655,7 @@ regarding its parameter treatment." ;; FIXME: Is there an actual example of a web browser getting ;; confused? (This used to encode commas, but at least Firefox ;; handles commas correctly and doesn't accept encoded commas.) - (browse-url-url-encode-chars url "[)$]")) + (browse-url-url-encode-chars url "[\")$] ")) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; URL input From 3478ec4554757213e8d2344826110cc0f4ae4f3c Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 9 May 2012 08:07:46 -0700 Subject: [PATCH 412/564] Port recent dbusbind.c changes to 32-bit --with-wide-int. * dbusbind.c (xd_append_arg, xd_retrieve_arg, Fdbus_message_internal): Remove unportable assumptions about print widths of types like dbus_uint32_t. (xd_get_connection_address, Fdbus_init_bus): Cast Emacs integer to intptr_t when converting between pointer and integer, to avoid GCC warnings about wrong width. --- src/ChangeLog | 10 ++++++++++ src/dbusbind.c | 54 ++++++++++++++++++++++++++++++++++---------------- 2 files changed, 47 insertions(+), 17 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 596133002ea..b6415724b5e 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,13 @@ +2012-05-09 Paul Eggert + + Port recent dbusbind.c changes to 32-bit --with-wide-int. + * dbusbind.c (xd_append_arg, xd_retrieve_arg, Fdbus_message_internal): + Remove unportable assumptions about print widths of types like + dbus_uint32_t. + (xd_get_connection_address, Fdbus_init_bus): Cast Emacs integer to + intptr_t when converting between pointer and integer, to avoid GCC + warnings about wrong width. + 2012-05-09 Eli Zaretskii * w32proc.c (new_child): Force Windows to reserve only 64KB of diff --git a/src/dbusbind.c b/src/dbusbind.c index 446d060c89b..87a3b935094 100644 --- a/src/dbusbind.c +++ b/src/dbusbind.c @@ -551,7 +551,7 @@ xd_append_arg (unsigned int dtype, Lisp_Object object, DBusMessageIter *iter) CHECK_NATNUM (object); { unsigned char val = XFASTINT (object) & 0xFF; - XD_DEBUG_MESSAGE ("%c %d", dtype, val); + XD_DEBUG_MESSAGE ("%c %u", dtype, val); if (!dbus_message_iter_append_basic (iter, dtype, &val)) XD_SIGNAL2 (build_string ("Unable to append argument"), object); return; @@ -570,7 +570,8 @@ xd_append_arg (unsigned int dtype, Lisp_Object object, DBusMessageIter *iter) CHECK_NUMBER (object); { dbus_int16_t val = XINT (object); - XD_DEBUG_MESSAGE ("%c %d", dtype, (int) val); + int pval = val; + XD_DEBUG_MESSAGE ("%c %d", dtype, pval); if (!dbus_message_iter_append_basic (iter, dtype, &val)) XD_SIGNAL2 (build_string ("Unable to append argument"), object); return; @@ -580,7 +581,8 @@ xd_append_arg (unsigned int dtype, Lisp_Object object, DBusMessageIter *iter) CHECK_NATNUM (object); { dbus_uint16_t val = XFASTINT (object); - XD_DEBUG_MESSAGE ("%c %u", dtype, (unsigned int) val); + unsigned int pval = val; + XD_DEBUG_MESSAGE ("%c %u", dtype, pval); if (!dbus_message_iter_append_basic (iter, dtype, &val)) XD_SIGNAL2 (build_string ("Unable to append argument"), object); return; @@ -589,7 +591,8 @@ xd_append_arg (unsigned int dtype, Lisp_Object object, DBusMessageIter *iter) case DBUS_TYPE_INT32: { dbus_int32_t val = extract_float (object); - XD_DEBUG_MESSAGE ("%c %d", dtype, val); + int pval = val; + XD_DEBUG_MESSAGE ("%c %d", dtype, pval); if (!dbus_message_iter_append_basic (iter, dtype, &val)) XD_SIGNAL2 (build_string ("Unable to append argument"), object); return; @@ -601,7 +604,8 @@ xd_append_arg (unsigned int dtype, Lisp_Object object, DBusMessageIter *iter) #endif { dbus_uint32_t val = extract_float (object); - XD_DEBUG_MESSAGE ("%c %u", dtype, val); + unsigned int pval = val; + XD_DEBUG_MESSAGE ("%c %u", dtype, pval); if (!dbus_message_iter_append_basic (iter, dtype, &val)) XD_SIGNAL2 (build_string ("Unable to append argument"), object); return; @@ -610,7 +614,8 @@ xd_append_arg (unsigned int dtype, Lisp_Object object, DBusMessageIter *iter) case DBUS_TYPE_INT64: { dbus_int64_t val = extract_float (object); - XD_DEBUG_MESSAGE ("%c %d", dtype, (int) val); + printmax_t pval = val; + XD_DEBUG_MESSAGE ("%c %"pMd, dtype, pval); if (!dbus_message_iter_append_basic (iter, dtype, &val)) XD_SIGNAL2 (build_string ("Unable to append argument"), object); return; @@ -619,7 +624,8 @@ xd_append_arg (unsigned int dtype, Lisp_Object object, DBusMessageIter *iter) case DBUS_TYPE_UINT64: { dbus_uint64_t val = extract_float (object); - XD_DEBUG_MESSAGE ("%c %"pI"d", dtype, val); + uprintmax_t pval = val; + XD_DEBUG_MESSAGE ("%c %"pMu, dtype, pval); if (!dbus_message_iter_append_basic (iter, dtype, &val)) XD_SIGNAL2 (build_string ("Unable to append argument"), object); return; @@ -754,7 +760,7 @@ xd_retrieve_arg (unsigned int dtype, DBusMessageIter *iter) unsigned int val; dbus_message_iter_get_basic (iter, &val); val = val & 0xFF; - XD_DEBUG_MESSAGE ("%c %d", dtype, val); + XD_DEBUG_MESSAGE ("%c %u", dtype, val); return make_number (val); } @@ -769,24 +775,30 @@ xd_retrieve_arg (unsigned int dtype, DBusMessageIter *iter) case DBUS_TYPE_INT16: { dbus_int16_t val; + int pval; dbus_message_iter_get_basic (iter, &val); - XD_DEBUG_MESSAGE ("%c %d", dtype, val); + pval = val; + XD_DEBUG_MESSAGE ("%c %d", dtype, pval); return make_number (val); } case DBUS_TYPE_UINT16: { dbus_uint16_t val; + int pval; dbus_message_iter_get_basic (iter, &val); - XD_DEBUG_MESSAGE ("%c %d", dtype, val); + pval = val; + XD_DEBUG_MESSAGE ("%c %d", dtype, pval); return make_number (val); } case DBUS_TYPE_INT32: { dbus_int32_t val; + int pval; dbus_message_iter_get_basic (iter, &val); - XD_DEBUG_MESSAGE ("%c %d", dtype, val); + pval = val; + XD_DEBUG_MESSAGE ("%c %d", dtype, pval); return make_fixnum_or_float (val); } @@ -796,24 +808,30 @@ xd_retrieve_arg (unsigned int dtype, DBusMessageIter *iter) #endif { dbus_uint32_t val; + unsigned int pval = val; dbus_message_iter_get_basic (iter, &val); - XD_DEBUG_MESSAGE ("%c %d", dtype, val); + pval = val; + XD_DEBUG_MESSAGE ("%c %u", dtype, pval); return make_fixnum_or_float (val); } case DBUS_TYPE_INT64: { dbus_int64_t val; + printmax_t pval; dbus_message_iter_get_basic (iter, &val); - XD_DEBUG_MESSAGE ("%c %d", dtype, (int) val); + pval = val; + XD_DEBUG_MESSAGE ("%c %"pMd, dtype, pval); return make_fixnum_or_float (val); } case DBUS_TYPE_UINT64: { dbus_uint64_t val; + uprintmax_t pval; dbus_message_iter_get_basic (iter, &val); - XD_DEBUG_MESSAGE ("%c %d", dtype, (int) val); + pval = val; + XD_DEBUG_MESSAGE ("%c %"pMd, dtype, pval); return make_fixnum_or_float (val); } @@ -889,7 +907,7 @@ xd_get_connection_address (Lisp_Object bus) if (NILP (val)) XD_SIGNAL2 (build_string ("No connection to bus"), bus); else - connection = (DBusConnection *) XFASTINT (val); + connection = (DBusConnection *) (intptr_t) XFASTINT (val); if (!dbus_connection_get_is_connected (connection)) XD_SIGNAL2 (build_string ("No connection to bus"), bus); @@ -1096,7 +1114,7 @@ this connection to those buses. */) XD_SIGNAL1 (build_string ("Cannot add watch functions")); /* Add bus to list of registered buses. */ - XSETFASTINT (val, connection); + XSETFASTINT (val, (intptr_t) connection); Vdbus_registered_buses = Fcons (Fcons (bus, val), Vdbus_registered_buses); /* We do not want to abort. */ @@ -1174,6 +1192,7 @@ usage: (dbus-message-internal &rest REST) */) unsigned int dtype; unsigned int mtype; dbus_uint32_t serial = 0; + unsigned int ui_serial; int timeout = -1; ptrdiff_t count; char signature[DBUS_MAXIMUM_SIGNATURE_LENGTH]; @@ -1249,11 +1268,12 @@ usage: (dbus-message-internal &rest REST) */) XD_OBJECT_TO_STRING (member)); break; default: /* DBUS_MESSAGE_TYPE_METHOD_RETURN, DBUS_MESSAGE_TYPE_ERROR */ + ui_serial = serial; XD_DEBUG_MESSAGE ("%s %s %s %u", XD_MESSAGE_TYPE_TO_STRING (mtype), XD_OBJECT_TO_STRING (bus), XD_OBJECT_TO_STRING (service), - serial); + ui_serial); } /* Retrieve bus address. */ From fe263b8f57f4f55e17a4a39f36e52f585e0cba70 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Wed, 9 May 2012 13:20:24 -0400 Subject: [PATCH 413/564] * lisp/shell.el (shell-parse-pcomplete-arguments): Obey pcomplete-arg-quote-list inside double-quoted args as well. Fixes: debbugs:11348 --- lisp/ChangeLog | 17 +++++++++++------ lisp/shell.el | 5 +++-- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ec29758fd51..d72e098579c 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-05-09 Stefan Monnier + + * shell.el (shell-parse-pcomplete-arguments): Obey + pcomplete-arg-quote-list inside double-quoted args as well (bug#11348). + 2012-05-08 Stefan Monnier * shell.el (shell-completion-vars): Fix last change (bug#11348). @@ -48,8 +53,8 @@ 2012-04-30 Martin Rudalics - * window.el (display-buffer--action-function-custom-type): Fix - entry. + * window.el (display-buffer--action-function-custom-type): + Fix entry. 2012-04-27 Alan Mackenzie @@ -152,8 +157,8 @@ 2012-04-19 Chong Yidong - * progmodes/gdb-mi.el (gdb-inferior-io--maybe-delete-pty): New - function to call delete-process on the gdb-inferior buffer's pty. + * progmodes/gdb-mi.el (gdb-inferior-io--maybe-delete-pty): + New function to call delete-process on the gdb-inferior buffer's pty. (gdb-reset): Use it, instead of relying on kill-buffer to kill the pty process (Bug#11273). (gdb-update): New arg to suppress talking to the gdb process. @@ -186,8 +191,8 @@ (c-comment-indent, c-scan-conditionals, c-indent-defun) (c-context-line-break): bind case-fold-search to nil. - * progmodes/cc-mode.el (c-font-lock-fontify-region): bind - case-fold-search to nil. + * progmodes/cc-mode.el (c-font-lock-fontify-region): + bind case-fold-search to nil. 2012-04-16 Chong Yidong diff --git a/lisp/shell.el b/lisp/shell.el index f7a530102ff..1784188f6ad 100644 --- a/lisp/shell.el +++ b/lisp/shell.el @@ -400,8 +400,9 @@ Thus, this does not include the shell's current directory.") (t (match-string 3))) arg)) ((match-beginning 2) ;Double quote. - (push (replace-regexp-in-string - "\\\\\\(.\\)" "\\1" (match-string 2)) + (push (if (null pcomplete-arg-quote-list) (match-string 2) + (replace-regexp-in-string + "\\\\\\(.\\)" "\\1" (match-string 2))) arg)) ((match-beginning 1) ;Single quote. (push (match-string 1) arg)) From b263a6b03bd58b811ac4f99aae7f37a0279528a9 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 9 May 2012 10:51:30 -0700 Subject: [PATCH 414/564] Untag more efficiently if USE_LSB_TAG. This is based on a proposal by YAMAMOTO Mitsuharu in . For an admittedly artificial (nth 8000 longlist) benchmark on Fedora 15 x86-64, this yields a 25% CPU speedup. Also, it shrinks Emacs's overall text size by 1%. * lisp.h (XUNTAG): New macro. (XCONS, XVECTOR, XSTRING, XSYMBOL, XFLOAT, XMISC, XPROCESS, XWINDOW) (XTERMINAL, XSUBR, XBUFFER, XCHAR_TABLE, XSUB_CHAR_TABLE, XBOOL_VECTOR) (XSETTYPED_PSEUDOVECTOR, XHASH_TABLE, TYPED_PSEUDOVECTORP): Use it. * eval.c (Fautoload): * font.h (XFONT_SPEC, XFONT_ENTITY, XFONT_OBJECT): * frame.h (XFRAME): Use XUNTAG. --- src/ChangeLog | 14 ++++++++++++ src/eval.c | 2 +- src/font.h | 7 +++--- src/frame.h | 3 ++- src/lisp.h | 59 ++++++++++++++++++++++++++++++++++++--------------- 5 files changed, 63 insertions(+), 22 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index b6415724b5e..e51d23435d1 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,19 @@ 2012-05-09 Paul Eggert + Untag more efficiently if USE_LSB_TAG. + This is based on a proposal by YAMAMOTO Mitsuharu in + . + For an admittedly artificial (nth 8000 longlist) benchmark on + Fedora 15 x86-64, this yields a 25% CPU speedup. Also, it shrinks + Emacs's overall text size by 1%. + * lisp.h (XUNTAG): New macro. + (XCONS, XVECTOR, XSTRING, XSYMBOL, XFLOAT, XMISC, XPROCESS, XWINDOW) + (XTERMINAL, XSUBR, XBUFFER, XCHAR_TABLE, XSUB_CHAR_TABLE, XBOOL_VECTOR) + (XSETTYPED_PSEUDOVECTOR, XHASH_TABLE, TYPED_PSEUDOVECTORP): Use it. + * eval.c (Fautoload): + * font.h (XFONT_SPEC, XFONT_ENTITY, XFONT_OBJECT): + * frame.h (XFRAME): Use XUNTAG. + Port recent dbusbind.c changes to 32-bit --with-wide-int. * dbusbind.c (xd_append_arg, xd_retrieve_arg, Fdbus_message_internal): Remove unportable assumptions about print widths of types like diff --git a/src/eval.c b/src/eval.c index cb0518f34ec..3d0e82c2d9f 100644 --- a/src/eval.c +++ b/src/eval.c @@ -2048,7 +2048,7 @@ this does nothing and returns nil. */) We used to use 0 here, but that leads to accidental sharing in purecopy's hash-consing, so we use a (hopefully) unique integer instead. */ - docstring = make_number (XPNTR (function)); + docstring = make_number (XUNTAG (function, Lisp_Symbol)); return Ffset (function, Fpurecopy (list5 (Qautoload, file, docstring, interactive, type))); diff --git a/src/font.h b/src/font.h index 663cc675c05..ea392d2e3fa 100644 --- a/src/font.h +++ b/src/font.h @@ -469,11 +469,12 @@ struct font_bitmap } while (0) #define XFONT_SPEC(p) \ - (eassert (FONT_SPEC_P(p)), (struct font_spec *) XPNTR (p)) + (eassert (FONT_SPEC_P (p)), (struct font_spec *) XUNTAG (p, Lisp_Vectorlike)) #define XFONT_ENTITY(p) \ - (eassert (FONT_ENTITY_P(p)), (struct font_entity *) XPNTR (p)) + (eassert (FONT_ENTITY_P (p)), \ + (struct font_entity *) XUNTAG (p, Lisp_Vectorlike)) #define XFONT_OBJECT(p) \ - (eassert (FONT_OBJECT_P(p)), (struct font *) XPNTR (p)) + (eassert (FONT_OBJECT_P (p)), (struct font *) XUNTAG (p, Lisp_Vectorlike)) #define XSETFONT(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_FONT)) /* Number of pt per inch (from the TeXbook). */ diff --git a/src/frame.h b/src/frame.h index 5c89fc69628..9779f4a0926 100644 --- a/src/frame.h +++ b/src/frame.h @@ -501,7 +501,8 @@ struct frame typedef struct frame *FRAME_PTR; -#define XFRAME(p) (eassert (FRAMEP(p)),(struct frame *) XPNTR (p)) +#define XFRAME(p) \ + (eassert (FRAMEP (p)), (struct frame *) XUNTAG (p, Lisp_Vectorlike)) #define XSETFRAME(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_FRAME)) /* Given a window, return its frame as a Lisp_Object. */ diff --git a/src/lisp.h b/src/lisp.h index 1f839750609..6376862949a 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -475,6 +475,7 @@ enum pvec_type (var) = (type) | (intptr_t) (ptr)) #define XPNTR(a) ((intptr_t) ((a) & ~TYPEMASK)) +#define XUNTAG(a, type) ((intptr_t) ((a) - (type))) #else /* not USE_LSB_TAG */ @@ -581,6 +582,13 @@ extern Lisp_Object make_number (EMACS_INT); # define XSETFASTINT(a, b) (XSETINT (a, b)) #endif +/* Extract the pointer value of the Lisp object A, under the + assumption that A's type is TYPE. This is a fallback + implementation if nothing faster is available. */ +#ifndef XUNTAG +# define XUNTAG(a, type) XPNTR (a) +#endif + #define EQ(x, y) (XHASH (x) == XHASH (y)) /* Number of bits in a fixnum, including the sign bit. */ @@ -607,15 +615,20 @@ extern Lisp_Object make_number (EMACS_INT); /* Extract a value or address from a Lisp_Object. */ -#define XCONS(a) (eassert (CONSP (a)), (struct Lisp_Cons *) XPNTR (a)) -#define XVECTOR(a) (eassert (VECTORLIKEP (a)), (struct Lisp_Vector *) XPNTR (a)) -#define XSTRING(a) (eassert (STRINGP (a)), (struct Lisp_String *) XPNTR (a)) -#define XSYMBOL(a) (eassert (SYMBOLP (a)), (struct Lisp_Symbol *) XPNTR (a)) -#define XFLOAT(a) (eassert (FLOATP (a)), (struct Lisp_Float *) XPNTR (a)) +#define XCONS(a) (eassert (CONSP (a)), \ + (struct Lisp_Cons *) XUNTAG (a, Lisp_Cons)) +#define XVECTOR(a) (eassert (VECTORLIKEP (a)), \ + (struct Lisp_Vector *) XUNTAG (a, Lisp_Vectorlike)) +#define XSTRING(a) (eassert (STRINGP (a)), \ + (struct Lisp_String *) XUNTAG (a, Lisp_String)) +#define XSYMBOL(a) (eassert (SYMBOLP (a)), \ + (struct Lisp_Symbol *) XUNTAG (a, Lisp_Symbol)) +#define XFLOAT(a) (eassert (FLOATP (a)), \ + (struct Lisp_Float *) XUNTAG (a, Lisp_Float)) /* Misc types. */ -#define XMISC(a) ((union Lisp_Misc *) XPNTR (a)) +#define XMISC(a) ((union Lisp_Misc *) XUNTAG (a, Lisp_Misc)) #define XMISCANY(a) (eassert (MISCP (a)), &(XMISC (a)->u_any)) #define XMISCTYPE(a) (XMISCANY (a)->type) #define XMARKER(a) (eassert (MARKERP (a)), &(XMISC (a)->u_marker)) @@ -635,14 +648,24 @@ extern Lisp_Object make_number (EMACS_INT); /* Pseudovector types. */ -#define XPROCESS(a) (eassert (PROCESSP (a)), (struct Lisp_Process *) XPNTR (a)) -#define XWINDOW(a) (eassert (WINDOWP (a)), (struct window *) XPNTR (a)) -#define XTERMINAL(a) (eassert (TERMINALP (a)), (struct terminal *) XPNTR (a)) -#define XSUBR(a) (eassert (SUBRP (a)), (struct Lisp_Subr *) XPNTR (a)) -#define XBUFFER(a) (eassert (BUFFERP (a)), (struct buffer *) XPNTR (a)) -#define XCHAR_TABLE(a) (eassert (CHAR_TABLE_P (a)), (struct Lisp_Char_Table *) XPNTR (a)) -#define XSUB_CHAR_TABLE(a) (eassert (SUB_CHAR_TABLE_P (a)), (struct Lisp_Sub_Char_Table *) XPNTR (a)) -#define XBOOL_VECTOR(a) (eassert (BOOL_VECTOR_P (a)), (struct Lisp_Bool_Vector *) XPNTR (a)) +#define XPROCESS(a) (eassert (PROCESSP (a)), \ + (struct Lisp_Process *) XUNTAG (a, Lisp_Vectorlike)) +#define XWINDOW(a) (eassert (WINDOWP (a)), \ + (struct window *) XUNTAG (a, Lisp_Vectorlike)) +#define XTERMINAL(a) (eassert (TERMINALP (a)), \ + (struct terminal *) XUNTAG (a, Lisp_Vectorlike)) +#define XSUBR(a) (eassert (SUBRP (a)), \ + (struct Lisp_Subr *) XUNTAG (a, Lisp_Vectorlike)) +#define XBUFFER(a) (eassert (BUFFERP (a)), \ + (struct buffer *) XUNTAG (a, Lisp_Vectorlike)) +#define XCHAR_TABLE(a) (eassert (CHAR_TABLE_P (a)), \ + (struct Lisp_Char_Table *) XUNTAG (a, Lisp_Vectorlike)) +#define XSUB_CHAR_TABLE(a) (eassert (SUB_CHAR_TABLE_P (a)), \ + ((struct Lisp_Sub_Char_Table *) \ + XUNTAG (a, Lisp_Vectorlike))) +#define XBOOL_VECTOR(a) (eassert (BOOL_VECTOR_P (a)), \ + ((struct Lisp_Bool_Vector *) \ + XUNTAG (a, Lisp_Vectorlike))) /* Construct a Lisp_Object from a value or address. */ @@ -669,7 +692,9 @@ extern Lisp_Object make_number (EMACS_INT); /* The cast to struct vectorlike_header * avoids aliasing issues. */ #define XSETPSEUDOVECTOR(a, b, code) \ XSETTYPED_PSEUDOVECTOR(a, b, \ - ((struct vectorlike_header *) XPNTR (a))->size, \ + (((struct vectorlike_header *) \ + XUNTAG (a, Lisp_Vectorlike)) \ + ->size), \ code) #define XSETTYPED_PSEUDOVECTOR(a, b, size, code) \ (XSETVECTOR (a, b), \ @@ -1277,7 +1302,7 @@ struct Lisp_Hash_Table #define XHASH_TABLE(OBJ) \ - ((struct Lisp_Hash_Table *) XPNTR (OBJ)) + ((struct Lisp_Hash_Table *) XUNTAG (OBJ, Lisp_Vectorlike)) #define XSET_HASH_TABLE(VAR, PTR) \ (XSETPSEUDOVECTOR (VAR, PTR, PVEC_HASH_TABLE)) @@ -1735,7 +1760,7 @@ typedef struct { code is CODE. */ #define TYPED_PSEUDOVECTORP(x, t, code) \ (VECTORLIKEP (x) \ - && (((((struct t *) XPNTR (x))->size \ + && (((((struct t *) XUNTAG (x, Lisp_Vectorlike))->size \ & (PSEUDOVECTOR_FLAG | (code)))) \ == (PSEUDOVECTOR_FLAG | (code)))) From 8633b1f4566f01eae2d596436cd97fa687f09051 Mon Sep 17 00:00:00 2001 From: "Jason L. Wright" Date: Wed, 9 May 2012 21:12:20 +0200 Subject: [PATCH 415/564] * mail/smtpmail.el (smtpmail-send-command): Send the command and the following \r\n using a single `process-send-string', since the Lotus SMTP server refuses to accept any commands if they are sent with two `process-send-string's. Fixes: debbugs:11444 --- lisp/ChangeLog | 7 +++++++ lisp/mail/smtpmail.el | 3 +-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index d72e098579c..8e6a3c0f106 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2012-05-09 Jason L. Wright (tiny change) + + * mail/smtpmail.el (smtpmail-send-command): Send the command and + the following \r\n using a single `process-send-string', since the + Lotus SMTP server refuses to accept any commands if they are sent + with two `process-send-string's (bug#11444). + 2012-05-09 Stefan Monnier * shell.el (shell-parse-pcomplete-arguments): Obey diff --git a/lisp/mail/smtpmail.el b/lisp/mail/smtpmail.el index 8e96e2c9438..804fe7a8798 100644 --- a/lisp/mail/smtpmail.el +++ b/lisp/mail/smtpmail.el @@ -932,8 +932,7 @@ Returns an error if the server cannot be contacted." (insert (match-string 0 command) "\r\n") (insert command "\r\n")) (setq smtpmail-read-point (point)) - (process-send-string process command) - (process-send-string process "\r\n")) + (process-send-string process (concat command "\r\n"))) (defun smtpmail-send-data-1 (process data) (goto-char (point-max)) From 297834cdf39433f7bf8e63d6c784a3a2a9889b08 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 9 May 2012 12:44:19 -0700 Subject: [PATCH 416/564] * unexaix.c (make_hdr): Fix typo in prototype. This bug broke the build on AIX. Problem reported by Gilles Pion. --- src/ChangeLog | 5 +++++ src/unexaix.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index 1e6af943fb4..0d44f31fb04 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2012-05-09 Paul Eggert + + * unexaix.c (make_hdr): Fix typo in prototype. + This bug broke the build on AIX. Problem reported by Gilles Pion. + 2012-05-05 Eli Zaretskii * w32proc.c (new_child): Force Windows to reserve only 64KB of diff --git a/src/unexaix.c b/src/unexaix.c index 1bf65b68518..e27fb1d136d 100644 --- a/src/unexaix.c +++ b/src/unexaix.c @@ -110,7 +110,7 @@ report_error_1 (int fd, char *msg, int a1, int a2) error (msg, a1, a2); } -static int make_hdr (int, int, unsigned, unsigned, unsigned, char *, char *); +static int make_hdr (int, int, char *, char *); static void mark_x (char *); static int copy_text_and_data (int); static int copy_sym (int, int, char *, char *); From 5cb6795418c32b8077e3818680a65cba00ea66b6 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Wed, 9 May 2012 23:13:43 +0200 Subject: [PATCH 417/564] * dbusbind.c (xd_registered_buses): New internal Lisp object. Rename all occurences of Vdbus_registered_buses to xd_registered_buses. (syms_of_dbusbind): Remove declaration of Vdbus_registered_buses. Initialize xd_registered_buses. --- src/ChangeLog | 7 +++++++ src/dbusbind.c | 27 ++++++++++++++------------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index e51d23435d1..07d85cbf5c8 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2012-05-09 Michael Albinus + + * dbusbind.c (xd_registered_buses): New internal Lisp object. + Rename all occurences of Vdbus_registered_buses to xd_registered_buses. + (syms_of_dbusbind): Remove declaration of Vdbus_registered_buses. + Initialize xd_registered_buses. + 2012-05-09 Paul Eggert Untag more efficiently if USE_LSB_TAG. diff --git a/src/dbusbind.c b/src/dbusbind.c index 87a3b935094..62923b462b5 100644 --- a/src/dbusbind.c +++ b/src/dbusbind.c @@ -64,6 +64,11 @@ static Lisp_Object QCdbus_type_struct, QCdbus_type_dict_entry; static Lisp_Object QCdbus_registered_serial, QCdbus_registered_method; static Lisp_Object QCdbus_registered_signal; +/* Alist of D-Bus buses we are polling for messages. + The key is the symbol or string of the bus, and the value is the + connection address. */ +static Lisp_Object xd_registered_buses; + /* Whether we are reading a D-Bus event. */ static int xd_in_read_queued_messages = 0; @@ -903,7 +908,7 @@ xd_get_connection_address (Lisp_Object bus) DBusConnection *connection; Lisp_Object val; - val = CDR_SAFE (Fassoc (bus, Vdbus_registered_buses)); + val = CDR_SAFE (Fassoc (bus, xd_registered_buses)); if (NILP (val)) XD_SIGNAL2 (build_string ("No connection to bus"), bus); else @@ -1003,7 +1008,7 @@ xd_close_bus (Lisp_Object bus) Lisp_Object val; /* Check whether we are connected. */ - val = Fassoc (bus, Vdbus_registered_buses); + val = Fassoc (bus, xd_registered_buses); if (NILP (val)) return; @@ -1022,7 +1027,7 @@ xd_close_bus (Lisp_Object bus) dbus_connection_unref (connection); /* Remove bus from list of registered buses. */ - Vdbus_registered_buses = Fdelete (val, Vdbus_registered_buses); + xd_registered_buses = Fdelete (val, xd_registered_buses); /* Return. */ return; @@ -1115,7 +1120,7 @@ this connection to those buses. */) /* Add bus to list of registered buses. */ XSETFASTINT (val, (intptr_t) connection); - Vdbus_registered_buses = Fcons (Fcons (bus, val), Vdbus_registered_buses); + xd_registered_buses = Fcons (Fcons (bus, val), xd_registered_buses); /* We do not want to abort. */ putenv ((char *) "DBUS_FATAL_WARNINGS=0"); @@ -1608,7 +1613,7 @@ xd_read_message (Lisp_Object bus) static void xd_read_queued_messages (int fd, void *data, int for_read) { - Lisp_Object busp = Vdbus_registered_buses; + Lisp_Object busp = xd_registered_buses; Lisp_Object bus = Qnil; Lisp_Object key; @@ -1728,14 +1733,6 @@ syms_of_dbusbind (void) doc: /* Message type of a signal message. */); Vdbus_message_type_signal = make_number (DBUS_MESSAGE_TYPE_SIGNAL); - DEFVAR_LISP ("dbus-registered-buses", - Vdbus_registered_buses, - doc: /* Alist of D-Bus buses we are polling for messages. - -The key is the symbol or string of the bus, and the value is the -connection address. */); - Vdbus_registered_buses = Qnil; - DEFVAR_LISP ("dbus-registered-objects-table", Vdbus_registered_objects_table, doc: /* Hash table of registered functions for D-Bus. @@ -1789,6 +1786,10 @@ be called when the D-Bus reply message arrives. */); Vdbus_debug = Qnil; #endif + /* Initialize internal objects. */ + xd_registered_buses = Qnil; + staticpro (&xd_registered_buses); + Fprovide (intern_c_string ("dbusbind"), Qnil); } From db5a3003037a018f47151bb6daaf249d422be2ba Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 9 May 2012 17:27:32 -0700 Subject: [PATCH 418/564] etags: pacify gcc -Wstack-protector on Ubuntu 12.04 x86 * etags.c: Include . (error): Declare as printf-style, as that's what it really is. All uses changed. (add_regex): Use single char rather than array-of-one char. --- lib-src/ChangeLog | 8 ++++++++ lib-src/etags.c | 39 +++++++++++++++++++-------------------- 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index cf7494cb5d5..fe00c29cff7 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog @@ -1,3 +1,11 @@ +2012-05-10 Paul Eggert + + etags: pacify gcc -Wstack-protector on Ubuntu 12.04 x86 + * etags.c: Include . + (error): Declare as printf-style, as that's what it really is. + All uses changed. + (add_regex): Use single char rather than array-of-one char. + 2012-05-05 Jim Meyering * lib-src/pop.c (pop_stat, pop_list, pop_multi_first, pop_last): diff --git a/lib-src/etags.c b/lib-src/etags.c index c88473ad525..ccf97a8357f 100644 --- a/lib-src/etags.c +++ b/lib-src/etags.c @@ -158,6 +158,7 @@ char pot_etags_version[] = "@(#) pot revision number is 17.38.1.4"; # endif #endif /* HAVE_UNISTD_H */ +#include #include #include #include @@ -380,7 +381,7 @@ static void get_tag (char *, char **); static void analyse_regex (char *); static void free_regexps (void); static void regex_tag_multiline (void); -static void error (const char *, const char *); +static void error (const char *, ...) ATTRIBUTE_FORMAT_PRINTF (1, 2); static void suggest_asking_for_help (void) NO_RETURN; void fatal (const char *, const char *) NO_RETURN; static void pfatal (const char *) NO_RETURN; @@ -1140,7 +1141,7 @@ main (int argc, char **argv) case 'o': if (tagfile) { - error ("-o option may only be given once.", (char *)NULL); + error ("-o option may only be given once."); suggest_asking_for_help (); /* NOTREACHED */ } @@ -1224,7 +1225,7 @@ main (int argc, char **argv) if (nincluded_files == 0 && file_count == 0) { - error ("no input files specified.", (char *)NULL); + error ("no input files specified."); suggest_asking_for_help (); /* NOTREACHED */ } @@ -1447,7 +1448,7 @@ get_language_from_langname (const char *name) language *lang; if (name == NULL) - error ("empty language name", (char *)NULL); + error ("empty language name"); else { for (lang = lang_names; lang->name != NULL; lang++) @@ -2233,7 +2234,7 @@ put_entries (register node *np) { /* Ctags mode */ if (np->name == NULL) - error ("internal error: NULL name in ctags mode.", (char *)NULL); + error ("internal error: NULL name in ctags mode."); if (cxref_style) { @@ -2773,7 +2774,7 @@ consider_token (register char *str, register int len, register int c, int *c_ext case dignorerest: return FALSE; default: - error ("internal error: definedef value.", (char *)NULL); + error ("internal error: definedef value."); } /* @@ -3061,7 +3062,7 @@ make_C_tag (int isfun) make_tag (concat ("INVALID TOKEN:-->", token_name.buffer, ""), token_name.len + 17, isfun, token.line, token.offset+token.length+1, token.lineno, token.linepos); - error ("INVALID TOKEN", NULL); + error ("INVALID TOKEN"); } token.valid = FALSE; @@ -5706,7 +5707,7 @@ add_regex (char *regexp_pattern, language *lang) { static struct re_pattern_buffer zeropattern; char sep, *pat, *name, *modifiers; - char empty[] = ""; + char empty = '\0'; const char *err; struct re_pattern_buffer *patbuf; regexp *rp; @@ -5719,7 +5720,7 @@ add_regex (char *regexp_pattern, language *lang) if (strlen (regexp_pattern) < 3) { - error ("null regexp", (char *)NULL); + error ("null regexp"); return; } sep = regexp_pattern[0]; @@ -5738,7 +5739,7 @@ add_regex (char *regexp_pattern, language *lang) if (modifiers == NULL) /* no terminating separator --> no name */ { modifiers = name; - name = empty; + name = ∅ } else modifiers += 1; /* skip separator */ @@ -5749,7 +5750,7 @@ add_regex (char *regexp_pattern, language *lang) { case 'N': if (modifiers == name) - error ("forcing explicit tag name but no name, ignoring", NULL); + error ("forcing explicit tag name but no name, ignoring"); force_explicit_name = TRUE; break; case 'i': @@ -5763,12 +5764,7 @@ add_regex (char *regexp_pattern, language *lang) need_filebuf = TRUE; break; default: - { - char wrongmod [2]; - wrongmod[0] = modifiers[0]; - wrongmod[1] = '\0'; - error ("invalid regexp modifier `%s', ignoring", wrongmod); - } + error ("invalid regexp modifier `%c', ignoring", modifiers[0]); break; } @@ -6423,13 +6419,16 @@ suggest_asking_for_help (void) exit (EXIT_FAILURE); } -/* Print error message. `s1' is printf control string, `s2' is arg for it. */ +/* Output a diagnostic with printf-style FORMAT and args. */ static void -error (const char *s1, const char *s2) +error (const char *format, ...) { + va_list ap; + va_start (ap, format); fprintf (stderr, "%s: ", progname); - fprintf (stderr, s1, s2); + vfprintf (stderr, format, ap); fprintf (stderr, "\n"); + va_end (ap); } /* Return a newly-allocated string whose contents From 836d29b3704d0dc40411715fc0a9f3a708a8f8ad Mon Sep 17 00:00:00 2001 From: Dave Abrahams Date: Wed, 9 May 2012 20:55:57 -0400 Subject: [PATCH 419/564] Add the option to not create lockfiles * src/filelock.c (syms_of_filelock): New boolean create-lockfiles. (lock_file): If create_lockfiles is 0, do nothing. * lisp/cus-start.el (create-lockfiles): Add it. Fixes: debbugs:11227 --- lisp/ChangeLog | 4 ++++ lisp/cus-start.el | 1 + src/ChangeLog | 5 +++++ src/filelock.c | 8 ++++++++ 4 files changed, 18 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index bf15cd2f9aa..f1429f9f875 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-05-10 Dave Abrahams + + * cus-start.el (create-lockfiles): Add it. + 2012-05-09 Chong Yidong * net/browse-url.el (browse-url-url-encode-chars): Use upper-case. diff --git a/lisp/cus-start.el b/lisp/cus-start.el index 3863e718f58..fc3c6561a1e 100644 --- a/lisp/cus-start.el +++ b/lisp/cus-start.el @@ -204,6 +204,7 @@ Leaving \"Default\" unchecked is equivalent with specifying a default of (delete-by-moving-to-trash auto-save boolean "23.1") (auto-save-visited-file-name auto-save boolean) ;; filelock.c + (create-lockfiles files boolean "24.2") (temporary-file-directory ;; Darwin section added 24.1, does not seem worth :version bump. files directory nil diff --git a/src/ChangeLog b/src/ChangeLog index 07d85cbf5c8..d4e38f5271c 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2012-05-10 Dave Abrahams + + * filelock.c (syms_of_filelock): New boolean create-lockfiles. + (lock_file): If create_lockfiles is 0, do nothing. (Bug#11227) + 2012-05-09 Michael Albinus * dbusbind.c (xd_registered_buses): New internal Lisp object. diff --git a/src/filelock.c b/src/filelock.c index 2613eec4aca..d8914c73328 100644 --- a/src/filelock.c +++ b/src/filelock.c @@ -550,6 +550,10 @@ lock_file (Lisp_Object fn) struct gcpro gcpro1; USE_SAFE_ALLOCA; + /* Don't do locking if the user has opted out. */ + if (! create_lockfiles) + return; + /* Don't do locking while dumping Emacs. Uncompressing wtmp files uses call-process, which does not work in an uninitialized Emacs. */ @@ -722,6 +726,10 @@ syms_of_filelock (void) doc: /* The directory for writing temporary files. */); Vtemporary_file_directory = Qnil; + DEFVAR_BOOL ("create-lockfiles", create_lockfiles, + doc: /* Non-nil means use lockfiles to avoid editing collisions. */); + create_lockfiles = 1; + #ifdef CLASH_DETECTION defsubr (&Sunlock_buffer); defsubr (&Slock_buffer); From dc0f75c82c55b14e29878c622fc9d2f18cf7a3dd Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 9 May 2012 20:58:16 -0400 Subject: [PATCH 420/564] Document new create-lockfiles option --- doc/emacs/ChangeLog | 4 ++++ doc/emacs/files.texi | 5 +++++ doc/lispref/ChangeLog | 4 ++++ doc/lispref/files.texi | 7 ++++++- etc/NEWS | 4 ++++ 5 files changed, 23 insertions(+), 1 deletion(-) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index 80d9381ec42..95db7194053 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,3 +1,7 @@ +2012-05-10 Glenn Morris + + * files.texi (Interlocking): Mention create-lockfiles option. + 2012-05-09 Chong Yidong * frames.texi (Mouse References, Mouse Commands): Fix index diff --git a/doc/emacs/files.texi b/doc/emacs/files.texi index 31883a1f5cc..088c3ce29a7 100644 --- a/doc/emacs/files.texi +++ b/doc/emacs/files.texi @@ -739,6 +739,11 @@ directory.) Emacs removes the lock when you save the changes. The idea is that the file is locked whenever an Emacs buffer visiting it has unsaved changes. +@vindex create-lockfiles + You can prevent the creation of lock files by setting the variable +@code{create-lockfiles} to @code{nil}. @strong{Caution:} by +doing so you will lose the benefits that this feature provides. + @cindex collision If you begin to modify the buffer while the visited file is locked by someone else, this constitutes a @dfn{collision}. When Emacs detects a diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 1b9fa0991e4..2967e644558 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,7 @@ +2012-05-10 Glenn Morris + + * files.texi (File Locks): Mention create-lockfiles option. + 2012-05-09 Glenn Morris * vol1.texi, vol2.texi: Remove files. diff --git a/doc/lispref/files.texi b/doc/lispref/files.texi index 1756e56bd2a..2ee80504b60 100644 --- a/doc/lispref/files.texi +++ b/doc/lispref/files.texi @@ -726,7 +726,12 @@ system does not support locking. File locking is not supported on some systems. On systems that do not support it, the functions @code{lock-buffer}, @code{unlock-buffer} and -@code{file-locked-p} do nothing and return @code{nil}. +@code{file-locked-p} do nothing and return @code{nil}. It is also +possible to disable locking, by setting the variable @code{create-lockfiles}. + +@defopt create-lockfiles +If this variable is @code{nil}, Emacs does not lock files. +@end defopt @defun ask-user-about-lock file other-user This function is called when the user tries to modify @var{file}, but it diff --git a/etc/NEWS b/etc/NEWS index 921f44bbcce..0726b091989 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -65,6 +65,10 @@ ImageMagick to view images, set frames, if emacsclient is only told to open a new frame without specifying any file to visit or expression to evaluate. ++++ +** You can prevent the creation of lock files by setting `create-lockfiles' +to nil. Use with caution, and only if you really need to. + ** Using "unibyte: t" in Lisp source files is obsolete. Use "coding: raw-text" instead. From ec8145a2d90c2c59af0b33a8f295aea620e4fd7f Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 9 May 2012 19:40:38 -0700 Subject: [PATCH 421/564] State that --prefix has no effect for a default --with-ns build. --- nextstep/INSTALL | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nextstep/INSTALL b/nextstep/INSTALL index 1e7109a3910..634ff012782 100644 --- a/nextstep/INSTALL +++ b/nextstep/INSTALL @@ -16,7 +16,8 @@ In order to run Emacs.app, you must run: make install -This will assemble the app in nextstep/Emacs.app. +This will assemble the app in nextstep/Emacs.app (i.e., the --prefix +argument has no effect in this case). If you pass the --disable-ns-self-contained option to configure, the lisp files will be installed under whatever 'prefix' is set to (defaults to From 234d8d6682c1903a2180a7ad4ae17bb5e45468e2 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 9 May 2012 19:46:58 -0700 Subject: [PATCH 422/564] Simply leim install rule for ns case * leim/Makefile.in (MV_DIRS): Remove. (install): Simplify the --with-ns case. --- leim/ChangeLog | 7 ++++++- leim/Makefile.in | 9 ++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/leim/ChangeLog b/leim/ChangeLog index 07e26cf766b..49d5b8c0b9a 100644 --- a/leim/ChangeLog +++ b/leim/ChangeLog @@ -1,3 +1,8 @@ +2012-05-10 Glenn Morris + + * Makefile.in (MV_DIRS): Remove. + (install): Simplify the --with-ns case. + 2012-04-09 Glenn Morris * Makefile.in (EMACS): Rename from BUILT_EMACS. @@ -2289,7 +2294,7 @@ ;; coding: utf-8 ;; End: - Copyright (C) 1997-1999, 2001-2012 Free Software Foundation, Inc. + Copyright (C) 1997-1999, 2001-2012 Free Software Foundation, Inc. This file is part of GNU Emacs. diff --git a/leim/Makefile.in b/leim/Makefile.in index 21561a357d1..1b1cd3fbcfd 100644 --- a/leim/Makefile.in +++ b/leim/Makefile.in @@ -35,6 +35,7 @@ srcdir=@srcdir@ ns_appresdir=@ns_appresdir@ # Where to install LEIM files. +# Should be $ns_appresdir/leim if $ns_appresdir is set. INSTALLDIR=$(DESTDIR)${datadir}/emacs/${version}/leim GZIP_PROG = @GZIP_PROG@ @@ -174,8 +175,6 @@ compile-main: ${TIT_MISC} $(MAKE) $(MFLAGS) compile-targets EMACS="$(EMACS)" TARGETS="$$chunk"; \ done -MV_DIRS = for i in $$dir; do rm -fr `basename "$$i"` ; mv "$$i" . ; done - install: all if [ ! -d ${INSTALLDIR} ] ; then \ umask 022; ${srcdir}/../build-aux/install-sh -d ${INSTALLDIR}; \ @@ -216,9 +215,9 @@ install: all done ; \ find ${INSTALLDIR} -exec chown $${installuser} '{}' ';' if [ "${ns_appresdir}" != "" ]; then \ - ( cd ${ns_appresdir} ; \ - if test -d share/emacs ; then dir=share/emacs/*/*; $(MV_DIRS); fi;\ - rm -fr share ) ; \ + rm -rf ${ns_appresdir}/leim; \ + mv ${INSTALLDIR} ${ns_appresdir} || exit 1; \ + rmdir -p ${ns_appresdir}/share/emacs/${version} 2>/dev/null || true; \ else true ; fi clean mostlyclean: From b8a82b6930b669a8a434d685a351e52194e6f7d9 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 9 May 2012 19:54:07 -0700 Subject: [PATCH 423/564] Update doc for obsolescence of "unibyte: t" * doc/emacs/mule.texi (Disabling Multibyte): * doc/lispref/loading.texi (Loading Non-ASCII): Replace the obsolete "unibyte: t" with "coding: raw-text". * etc/NEWS: Related markup. --- doc/emacs/ChangeLog | 3 +++ doc/emacs/mule.texi | 15 ++++++--------- doc/lispref/ChangeLog | 3 +++ doc/lispref/loading.texi | 2 +- etc/NEWS | 1 + 5 files changed, 14 insertions(+), 10 deletions(-) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index 95db7194053..b166262a7ca 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,5 +1,8 @@ 2012-05-10 Glenn Morris + * mule.texi (Disabling Multibyte): Replace the obsolete "unibyte: t" + with "coding: raw-text". + * files.texi (Interlocking): Mention create-lockfiles option. 2012-05-09 Chong Yidong diff --git a/doc/emacs/mule.texi b/doc/emacs/mule.texi index b0b35bf14b5..35aee6b94a2 100644 --- a/doc/emacs/mule.texi +++ b/doc/emacs/mule.texi @@ -287,20 +287,17 @@ auto mode selection. This includes the Emacs initialization file, @file{.emacs}, and the initialization files of packages such as Gnus. However, you can specify unibyte loading for a -particular Lisp file, by adding an entry @samp{unibyte: t} in a file -local variables section (@pxref{File Variables}). Then that file is -always loaded as unibyte text. Note that this does not represent a -real @code{unibyte} variable, rather it just acts as an indicator -to Emacs in the same way as @code{coding} does (@pxref{Specify Coding}). +particular Lisp file, by adding an entry @samp{coding: raw-text} in a file +local variables section. @xref{Specify Coding}. +Then that file is always loaded as unibyte text. @ignore @c I don't see the point of this statement: The motivation for these conventions is that it is more reliable to always load any particular Lisp file in the same way. @end ignore -Note also that this feature only applies to @emph{loading} Lisp files -for evaluation, not to visiting them for editing. You can also load a -Lisp file as unibyte, on any one occasion, by typing @kbd{C-x -@key{RET} c raw-text @key{RET}} immediately before loading it. +You can also load a Lisp file as unibyte, on any one occasion, by +typing @kbd{C-x @key{RET} c raw-text @key{RET}} immediately before +loading it. @c See http://debbugs.gnu.org/11226 for lack of unibyte tooltip. @vindex enable-multibyte-characters diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 2967e644558..a64c4386e33 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,5 +1,8 @@ 2012-05-10 Glenn Morris + * loading.texi (Loading Non-ASCII): Replace the obsolete "unibyte: t" + with "coding: raw-text". + * files.texi (File Locks): Mention create-lockfiles option. 2012-05-09 Glenn Morris diff --git a/doc/lispref/loading.texi b/doc/lispref/loading.texi index c9f438f6e47..b012091d4a8 100644 --- a/doc/lispref/loading.texi +++ b/doc/lispref/loading.texi @@ -374,7 +374,7 @@ strings are multibyte strings should not be noticeable, since inserting them in unibyte buffers converts them to unibyte automatically. However, if this does make a difference, you can force a particular Lisp file to be interpreted as unibyte by writing -@samp{unibyte: t} in a local variables section. With +@samp{coding: raw-text} in a local variables section. With that designator, the file will unconditionally be interpreted as unibyte, even in an ordinary multibyte Emacs session. This can matter when making keybindings to non-@acronym{ASCII} characters written as diff --git a/etc/NEWS b/etc/NEWS index 0726b091989..10247eb1520 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -69,6 +69,7 @@ specifying any file to visit or expression to evaluate. ** You can prevent the creation of lock files by setting `create-lockfiles' to nil. Use with caution, and only if you really need to. ++++ ** Using "unibyte: t" in Lisp source files is obsolete. Use "coding: raw-text" instead. From 51b1e0596d4445e1f5c3fd2fa66fe597ac31d78a Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 9 May 2012 19:57:10 -0700 Subject: [PATCH 424/564] * loading.texi (Loading Non-ASCII): Multibyte sessions no longer exist. --- doc/lispref/ChangeLog | 1 + doc/lispref/loading.texi | 5 ++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index a64c4386e33..b56164669f8 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -2,6 +2,7 @@ * loading.texi (Loading Non-ASCII): Replace the obsolete "unibyte: t" with "coding: raw-text". + Concept of multibyte sessions no longer exists. * files.texi (File Locks): Mention create-lockfiles option. diff --git a/doc/lispref/loading.texi b/doc/lispref/loading.texi index b012091d4a8..c585bafbdeb 100644 --- a/doc/lispref/loading.texi +++ b/doc/lispref/loading.texi @@ -376,9 +376,8 @@ automatically. However, if this does make a difference, you can force a particular Lisp file to be interpreted as unibyte by writing @samp{coding: raw-text} in a local variables section. With that designator, the file will unconditionally be interpreted as -unibyte, even in an ordinary multibyte Emacs session. This can matter -when making keybindings to non-@acronym{ASCII} characters written as -@code{?v@var{literal}}. +unibyte. This can matter when making keybindings to +non-@acronym{ASCII} characters written as @code{?v@var{literal}}. @node Autoload @section Autoload From ff57c2ec02157a5fa209a5626d2b79405d1f40d7 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 9 May 2012 20:40:20 -0700 Subject: [PATCH 425/564] Install self-contained ns leim files directly to their final destination This is instead of installing them first in one place, then moving them. It also fixes the previous change, which was incorrect for the -disable-ns-self-contained case. * configure.in (LEIM_INSTALLDIR): New output variable. * leim/Makefile.in: (install_prefix): New. (LEIM_INSTALLDIR): New, set by configure. (install): Use LEIM_INSTALLDIR. --- ChangeLog | 4 ++++ configure.in | 3 +++ leim/ChangeLog | 6 ++++++ leim/Makefile.in | 48 +++++++++++++++++++++++------------------------- 4 files changed, 36 insertions(+), 25 deletions(-) diff --git a/ChangeLog b/ChangeLog index 96ad5c2d189..ae355df0c8b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2012-05-10 Glenn Morris + + * configure.in (LEIM_INSTALLDIR): New output variable. + 2012-05-08 Stefan Monnier * .dir-locals.el (log-edit-mode): Enable gnu-style checks. diff --git a/configure.in b/configure.in index 5fe14322a95..1554d8e2aee 100644 --- a/configure.in +++ b/configure.in @@ -1636,6 +1636,7 @@ fail; fi AC_SUBST(TEMACS_LDFLAGS2) +LEIM_INSTALLDIR="\${install_prefix}/leim" ns_frag=/dev/null NS_OBJ= NS_OBJC_OBJ= @@ -1651,6 +1652,7 @@ if test "${HAVE_NS}" = yes; then prefix=${ns_appresdir} exec_prefix=${ns_appbindir} libexecdir=${ns_appbindir}/libexec + LEIM_INSTALLDIR="\${ns_appresdir}/leim" fi ns_frag=$srcdir/src/ns.mk NS_OBJ="fontset.o fringe.o image.o" @@ -1658,6 +1660,7 @@ if test "${HAVE_NS}" = yes; then fi CFLAGS="$tmp_CFLAGS" CPPFLAGS="$tmp_CPPFLAGS" +AC_SUBST(LEIM_INSTALLDIR) AC_SUBST(NS_OBJ) AC_SUBST(NS_OBJC_OBJ) AC_SUBST(LIB_STANDARD) diff --git a/leim/ChangeLog b/leim/ChangeLog index 49d5b8c0b9a..85878f65734 100644 --- a/leim/ChangeLog +++ b/leim/ChangeLog @@ -1,5 +1,11 @@ 2012-05-10 Glenn Morris + * Makefile.in: Install self-contained ns files directly to + their final destination. + (install_prefix): New. + (LEIM_INSTALLDIR): New, set by configure. + (install): Use LEIM_INSTALLDIR. + * Makefile.in (MV_DIRS): Remove. (install): Simplify the --with-ns case. diff --git a/leim/Makefile.in b/leim/Makefile.in index 1b1cd3fbcfd..2bf16c0be7e 100644 --- a/leim/Makefile.in +++ b/leim/Makefile.in @@ -34,9 +34,12 @@ datadir=@datadir@ srcdir=@srcdir@ ns_appresdir=@ns_appresdir@ +install_prefix=$(DESTDIR)${datadir}/emacs/${version} + # Where to install LEIM files. -# Should be $ns_appresdir/leim if $ns_appresdir is set. -INSTALLDIR=$(DESTDIR)${datadir}/emacs/${version}/leim +# For most builds, this is ${install_prefix}/leim. +# For self-contained ns builds, it is ${ns_appresdir}/leim. +LEIM_INSTALLDIR=@LEIM_INSTALLDIR@ GZIP_PROG = @GZIP_PROG@ @@ -176,49 +179,44 @@ compile-main: ${TIT_MISC} done install: all - if [ ! -d ${INSTALLDIR} ] ; then \ - umask 022; ${srcdir}/../build-aux/install-sh -d ${INSTALLDIR}; \ + if [ ! -d ${LEIM_INSTALLDIR} ] ; then \ + umask 022; ${srcdir}/../build-aux/install-sh -d ${LEIM_INSTALLDIR}; \ else true; fi - if [ x`(cd ${INSTALLDIR} && /bin/pwd)` != x`(/bin/pwd)` ] ; then \ - rm -f ${INSTALLDIR}/leim-list.el; \ - rm -rf ${INSTALLDIR}/quail ${INSTALLDIR}/ja-dic ; \ - echo "Copying leim files to ${INSTALLDIR} ..." ; \ + if [ x`(cd ${LEIM_INSTALLDIR} && /bin/pwd)` != x`(/bin/pwd)` ] ; then \ + rm -f ${LEIM_INSTALLDIR}/leim-list.el; \ + rm -rf ${LEIM_INSTALLDIR}/quail ${LEIM_INSTALLDIR}/ja-dic ; \ + echo "Copying leim files to ${LEIM_INSTALLDIR} ..." ; \ if [ x`(cd ${srcdir} && /bin/pwd)` = x`(/bin/pwd)` ] ; then \ tar -chf - leim-list.el quail ja-dic \ - | (cd ${INSTALLDIR}; umask 0; tar -xvf - && cat > /dev/null) ;\ + | (cd ${LEIM_INSTALLDIR}; umask 0; tar -xvf - && cat > /dev/null) ;\ else \ tar -chf - leim-list.el quail \ - | (cd ${INSTALLDIR}; umask 0; tar -xvf - && cat > /dev/null) ;\ + | (cd ${LEIM_INSTALLDIR}; umask 0; tar -xvf - && cat > /dev/null) ;\ cd ${srcdir}; \ tar -chf - quail/* ja-dic \ - | (cd ${INSTALLDIR}; umask 0; tar -xvf - && cat > /dev/null) ;\ + | (cd ${LEIM_INSTALLDIR}; umask 0; tar -xvf - && cat > /dev/null) ;\ fi; \ - rm -f ${INSTALLDIR}/.gitignore ${INSTALLDIR}/*/.gitignore; \ - rm -f ${INSTALLDIR}/.arch-inventory ${INSTALLDIR}/*/.arch-inventory; \ - rm -f ${INSTALLDIR}/\#* ${INSTALLDIR}/*/\#* ; \ - rm -f ${INSTALLDIR}/.\#* ${INSTALLDIR}/*/.\#* ; \ - rm -f ${INSTALLDIR}/*~ ${INSTALLDIR}/*/*~ ; \ - rm -f ${INSTALLDIR}/*.orig ${INSTALLDIR}/*/*.orig ; \ + rm -f ${LEIM_INSTALLDIR}/.gitignore ${LEIM_INSTALLDIR}/*/.gitignore; \ + rm -f ${LEIM_INSTALLDIR}/.arch-inventory ${LEIM_INSTALLDIR}/*/.arch-inventory; \ + rm -f ${LEIM_INSTALLDIR}/\#* ${LEIM_INSTALLDIR}/*/\#* ; \ + rm -f ${LEIM_INSTALLDIR}/.\#* ${LEIM_INSTALLDIR}/*/.\#* ; \ + rm -f ${LEIM_INSTALLDIR}/*~ ${LEIM_INSTALLDIR}/*/*~ ; \ + rm -f ${LEIM_INSTALLDIR}/*.orig ${LEIM_INSTALLDIR}/*/*.orig ; \ else true; fi -unset CDPATH; \ if [ -n "${GZIP_PROG}" ]; \ then \ echo "Compressing *.el ..." ; \ - (cd ${INSTALLDIR}; for f in `find . -name "*.elc" -print`; do \ + (cd ${LEIM_INSTALLDIR}; for f in `find . -name "*.elc" -print`; do \ ${GZIP_PROG} -9n `echo $$f|sed 's/.elc$$/.el/'` ; \ done) \ else true; fi - -chmod -R a+r ${INSTALLDIR} + -chmod -R a+r ${LEIM_INSTALLDIR} for installuser in $${LOGNAME} $${USERNAME} $${USER} \ `id -un 2> /dev/null`; do \ [ -n "$${installuser}" ] && break ; \ done ; \ - find ${INSTALLDIR} -exec chown $${installuser} '{}' ';' - if [ "${ns_appresdir}" != "" ]; then \ - rm -rf ${ns_appresdir}/leim; \ - mv ${INSTALLDIR} ${ns_appresdir} || exit 1; \ - rmdir -p ${ns_appresdir}/share/emacs/${version} 2>/dev/null || true; \ - else true ; fi + find ${LEIM_INSTALLDIR} -exec chown $${installuser} '{}' ';' clean mostlyclean: rm -f ${TIT_MISC} ${TIT_MISC:.el=.elc} \ From 12959e8ec2d9a3d075f1e752be96d45817a9289d Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 9 May 2012 22:00:53 -0700 Subject: [PATCH 426/564] * sound.c (DEFAULT_ALSA_SOUND_DEVICE): Define only if HAVE_ALSA. --- src/ChangeLog | 4 ++++ src/sound.c | 7 ++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index d4e38f5271c..f5b18b8d13a 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2012-05-10 Paul Eggert + + * sound.c (DEFAULT_ALSA_SOUND_DEVICE): Define only if HAVE_ALSA. + 2012-05-10 Dave Abrahams * filelock.c (syms_of_filelock): New boolean create-lockfiles. diff --git a/src/sound.c b/src/sound.c index 5fd5bd5c0de..9b58c01453a 100644 --- a/src/sound.c +++ b/src/sound.c @@ -124,9 +124,6 @@ static int parse_sound (Lisp_Object, Lisp_Object *); #ifndef DEFAULT_SOUND_DEVICE #define DEFAULT_SOUND_DEVICE "/dev/dsp" #endif -#ifndef DEFAULT_ALSA_SOUND_DEVICE -#define DEFAULT_ALSA_SOUND_DEVICE "default" -#endif /* Structure forward declarations. */ @@ -908,6 +905,10 @@ vox_write (struct sound_device *sd, const char *buffer, EMACS_INT nbytes) /* This driver is available on GNU/Linux. */ +#ifndef DEFAULT_ALSA_SOUND_DEVICE +#define DEFAULT_ALSA_SOUND_DEVICE "default" +#endif + static void alsa_sound_perror (const char *msg, int err) { From 97107e2e531ee355f517990eed735fa657b7105b Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 9 May 2012 22:27:24 -0700 Subject: [PATCH 427/564] * xgselect.c (xg_select): Put maxfds+1 into a var. This is slightly clearer, and pacifies Ubuntu 12.04 gcc. --- src/ChangeLog | 3 +++ src/xgselect.c | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index f5b18b8d13a..84764cfc5fc 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,8 @@ 2012-05-10 Paul Eggert + * xgselect.c (xg_select): Put maxfds+1 into a var. + This is slightly clearer, and pacifies Ubuntu 12.04 gcc. + * sound.c (DEFAULT_ALSA_SOUND_DEVICE): Define only if HAVE_ALSA. 2012-05-10 Dave Abrahams diff --git a/src/xgselect.c b/src/xgselect.c index 80dbfc32aee..7a09c37c50d 100644 --- a/src/xgselect.c +++ b/src/xgselect.c @@ -41,7 +41,7 @@ xg_select (int max_fds, SELECT_TYPE *rfds, SELECT_TYPE *wfds, SELECT_TYPE *efds, GMainContext *context = g_main_context_default (); int have_wfds = wfds != NULL; int n_gfds = 0, our_tmo = 0, retval = 0, our_fds = 0; - int i, nfds, tmo_in_millisec; + int i, nfds, fds_lim, tmo_in_millisec; if (rfds) memcpy (&all_rfds, rfds, sizeof (all_rfds)); else FD_ZERO (&all_rfds); @@ -97,14 +97,14 @@ xg_select (int max_fds, SELECT_TYPE *rfds, SELECT_TYPE *wfds, SELECT_TYPE *efds, if (our_tmo) tmop = &tmo; } - nfds = select (max_fds+1, &all_rfds, have_wfds ? &all_wfds : NULL, - efds, tmop); + fds_lim = max_fds + 1; + nfds = select (fds_lim, &all_rfds, have_wfds ? &all_wfds : NULL, efds, tmop); if (nfds < 0) retval = nfds; else if (nfds > 0) { - for (i = 0; i < max_fds+1; ++i) + for (i = 0; i < fds_lim; ++i) { if (FD_ISSET (i, &all_rfds)) { From 9f9aa0448aa1b5317d8903e33db1e3bb27e98ece Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Thu, 10 May 2012 14:27:12 +0800 Subject: [PATCH 428/564] Cleanups and improvements for FFAP and URL. * ffap.el (ffap-url-unwrap-local): Make it work right. Use url-generic-parse-url, and handle host names and Windows filenames properly. (ffap-url-unwrap-remote): Use url-generic-parse-url. (ffap-url-unwrap-remote): Accept list values, specifying a list of URL schemes to work on. (ffap--toggle-read-only): New function. (ffap-read-only, ffap-read-only-other-window) (ffap-read-only-other-frame): Use it. (ffap-fixup-url): Don't check ffap-ftp-regexp, since it is not necessary for ffap-url-unwrap-remote. * url-parse.el (url-path-and-query, url-port-if-non-default): New functions. (url-generic-parse-url): Don't set the portspec slot if it is not specified; that is what `url-port' is for. (url-port): Only require the scheme to be specified to call url-scheme-get-property. * url-util.el (url-encode-url): Use url-path-and-query. * url-vars.el (url-mime-charset-string): Load mm-util lazily. Fixes: debbugs:9131 --- etc/NEWS | 6 ++ lisp/ChangeLog | 14 +++ lisp/ffap.el | 210 +++++++++++++++++++++++------------------- lisp/url/ChangeLog | 14 +++ lisp/url/url-parse.el | 64 ++++++++----- lisp/url/url-util.el | 37 ++++---- lisp/url/url-vars.el | 3 +- 7 files changed, 205 insertions(+), 143 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 10247eb1520..9c7cb834b8d 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -150,6 +150,12 @@ these commands now). ** erc will look up server/channel names via auth-source and use the channel keys found, if any. +** FFAP + +*** The option `ffap-url-unwrap-remote' can now be a list of strings, +specifying URL types which should be converted to remote file names at +the FFAP prompt. The default is now '("ftp"). + ** Follow mode *** The obsolete variable `follow-mode-off-hook' has been removed. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f1429f9f875..e983957e285 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,17 @@ +2012-05-10 Chong Yidong + + * ffap.el (ffap-url-unwrap-local): Make it work right (Bug#9131). + Use url-generic-parse-url, and handle host names and Windows + filenames properly. + (ffap-url-unwrap-remote): Use url-generic-parse-url. + (ffap-url-unwrap-remote): Accept list values, specifying a list of + URL schemes to work on. + (ffap--toggle-read-only): New function. + (ffap-read-only, ffap-read-only-other-window) + (ffap-read-only-other-frame): Use it. + (ffap-fixup-url): Don't check ffap-ftp-regexp, since it is not + necessary for ffap-url-unwrap-remote. + 2012-05-10 Dave Abrahams * cus-start.el (create-lockfiles): Add it. diff --git a/lisp/ffap.el b/lisp/ffap.el index 905d7873dc2..a8455189cb9 100644 --- a/lisp/ffap.el +++ b/lisp/ffap.el @@ -105,6 +105,8 @@ ;;; Code: +(require 'url-parse) + (define-obsolete-variable-alias 'ffap-version 'emacs-version "23.2") (defgroup ffap nil @@ -136,10 +138,7 @@ If nil, ffap doesn't do shell prompt stripping." regexp) :group 'ffap) -(defcustom ffap-ftp-regexp - ;; This used to test for ange-ftp or efs being present, but it should be - ;; harmless (and simpler) to give it this value unconditionally. - "\\`/[^/:]+:" +(defcustom ffap-ftp-regexp "\\`/[^/:]+:" "File names matching this regexp are treated as remote ffap. If nil, ffap neither recognizes nor generates such names." :type '(choice (const :tag "Disable" nil) @@ -148,15 +147,20 @@ If nil, ffap neither recognizes nor generates such names." :group 'ffap) (defcustom ffap-url-unwrap-local t - "If non-nil, convert `file:' URL to local file name before prompting." + "If non-nil, convert some URLs to local file names before prompting. +Only \"file:\" and \"ftp:\" URLs are converted, and only if they +do not specify a host, or the host is either \"localhost\" or +equal to `system-name'." :type 'boolean :group 'ffap) -(defcustom ffap-url-unwrap-remote t - "If non-nil, convert `ftp:' URL to remote file name before prompting. -This is ignored if `ffap-ftp-regexp' is nil." - :type 'boolean - :group 'ffap) +(defcustom ffap-url-unwrap-remote '("ftp") + "If non-nil, convert URLs to remote file names before prompting. +If the value is a list of strings, that specifies a list of URL +schemes (e.g. \"ftp\"); in that case, only convert those URLs." + :type '(choice (repeat string) boolean) + :group 'ffap + :version "24.2") (defcustom ffap-ftp-default-user "anonymous" "User name in ftp file names generated by `ffap-host-to-path'. @@ -247,14 +251,14 @@ ffap most of the time." (defcustom ffap-file-finder 'find-file "The command called by `find-file-at-point' to find a file." :type 'function - :group 'ffap) -(put 'ffap-file-finder 'risky-local-variable t) + :group 'ffap + :risky t) (defcustom ffap-directory-finder 'dired "The command called by `dired-at-point' to find a directory." :type 'function - :group 'ffap) -(put 'ffap-directory-finder 'risky-local-variable t) + :group 'ffap + :risky t) (defcustom ffap-url-fetcher (if (fboundp 'browse-url) @@ -271,8 +275,28 @@ For a fancy alternative, get `ffap-url.el'." (const browse-url-netscape) (const browse-url-mosaic) function) + :group 'ffap + :risky t) + +(defcustom ffap-next-regexp + ;; If you want ffap-next to find URL's only, try this: + ;; (and ffap-url-regexp (string-match "\\\\`" ffap-url-regexp) + ;; (concat "\\<" (substring ffap-url-regexp 2)))) + ;; + ;; It pays to put a big fancy regexp here, since ffap-guesser is + ;; much more time-consuming than regexp searching: + "[/:.~[:alpha:]]/\\|@[[:alpha:]][-[:alnum:]]*\\." + "Regular expression governing movements of `ffap-next'." + :type 'regexp :group 'ffap) -(put 'ffap-url-fetcher 'risky-local-variable t) + +(defcustom dired-at-point-require-prefix nil + "If non-nil, reverse the prefix argument to `dired-at-point'. +This is nil so neophytes notice FFAP. Experts may prefer to +disable FFAP most of the time." + :type 'boolean + :group 'ffap + :version "20.3") ;;; Compatibility: @@ -293,18 +317,6 @@ For a fancy alternative, get `ffap-url.el'." ;; then, broke it up into ffap-next-guess (noninteractive) and ;; ffap-next (a command). It now work on files as well as url's. -(defcustom ffap-next-regexp - ;; If you want ffap-next to find URL's only, try this: - ;; (and ffap-url-regexp (string-match "\\\\`" ffap-url-regexp) - ;; (concat "\\<" (substring ffap-url-regexp 2)))) - ;; - ;; It pays to put a big fancy regexp here, since ffap-guesser is - ;; much more time-consuming than regexp searching: - "[/:.~[:alpha:]]/\\|@[[:alpha:]][-[:alnum:]]*\\." - "Regular expression governing movements of `ffap-next'." - :type 'regexp - :group 'ffap) - (defvar ffap-next-guess nil "Last value returned by `ffap-next-guess'.") @@ -606,28 +618,45 @@ Looks at `ffap-ftp-default-user', returns \"\" for \"localhost\"." string))) ;; Broke these out of ffap-fixup-url, for use of ffap-url package. -(defsubst ffap-url-unwrap-local (url) - "Return URL as a local file, or nil. Ignores `ffap-url-regexp'." - (and (string-match "\\`\\(file\\|ftp\\):/?\\([^/]\\|\\'\\)" url) - (substring url (1+ (match-end 1))))) -(defsubst ffap-url-unwrap-remote (url) - "Return URL as a remote file, or nil. Ignores `ffap-url-regexp'." - (and (string-match "\\`\\(ftp\\|file\\)://\\([^:/]+\\):?\\(/.*\\)" url) - (concat - (ffap-host-to-filename (substring url (match-beginning 2) (match-end 2))) - (substring url (match-beginning 3) (match-end 3))))) -;; Test: (ffap-url-unwrap-remote "ftp://foo.com/bar.boz") +(defun ffap-url-unwrap-local (url) + "Return URL as a local file name, or nil." + (let* ((obj (url-generic-parse-url url)) + (host (url-host obj)) + (filename (car (url-path-and-query obj)))) + (when (and (member (url-type obj) '("ftp" "file")) + (member host `("" "localhost" ,(system-name)))) + ;; On Windows, "file:///C:/foo" should unwrap to "C:/foo" + (if (and (memq system-type '(ms-dos windows-nt cygwin)) + (string-match "\\`/[a-zA-Z]:" filename)) + (substring filename 1) + filename)))) + +(defun ffap-url-unwrap-remote (url) + "Return URL as a remote file name, or nil." + (let* ((obj (url-generic-parse-url url)) + (scheme (url-type obj)) + (valid-schemes (if (listp ffap-url-unwrap-remote) + ffap-url-unwrap-remote + '("ftp"))) + (host (url-host obj)) + (port (url-port-if-non-default obj)) + (user (url-user obj)) + (filename (car (url-path-and-query obj)))) + (when (and (member scheme valid-schemes) + (string-match "\\`[a-zA-Z][-a-zA-Z0-9+.]*\\'" scheme) + (not (equal host ""))) + (concat "/" scheme ":" + (if user (concat user "@")) + host + (if port (concat "#" (number-to-string port))) + ":" filename)))) (defun ffap-fixup-url (url) "Clean up URL and return it, maybe as a file name." (cond ((not (stringp url)) nil) - ((and ffap-url-unwrap-local (ffap-url-unwrap-local url))) - ((and ffap-url-unwrap-remote ffap-ftp-regexp - (ffap-url-unwrap-remote url))) - ;; All this seems to do is remove any trailing "#anchor" part (Bug#898). -;;; ((fboundp 'url-normalize-url) ; may autoload url (part of w3) -;;; (url-normalize-url url)) + ((and ffap-url-unwrap-local (ffap-url-unwrap-local url))) + ((and ffap-url-unwrap-remote (ffap-url-unwrap-remote url))) (url))) @@ -1076,38 +1105,33 @@ Assumes the buffer has not changed." ;; ignore non-relative links, trim punctuation. The other will ;; actually look back if point is in whitespace, but I would rather ;; ffap be less aggressive in such situations. - (and - ffap-url-regexp - (or - ;; In a w3 buffer button? - (and (eq major-mode 'w3-mode) - ;; interface recommended by wmperry: - (w3-view-this-url t)) - ;; Is there a reason not to strip trailing colon? - (let ((name (ffap-string-at-point 'url))) - (cond - ((string-match "^url:" name) (setq name (substring name 4))) - ((and (string-match "\\`[^:@]+@[^:@]+[[:alnum:]]\\'" name) - ;; "foo@bar": could be "mailto" or "news" (a Message-ID). - ;; Without "<>" it must be "mailto". Otherwise could be - ;; either, so consult `ffap-foo-at-bar-prefix'. - (let ((prefix (if (and (equal (ffap-string-around) "<>") - ;; Expect some odd characters: - (string-match "[$.0-9].*[$.0-9].*@" name)) - ;; Could be news: - ffap-foo-at-bar-prefix - "mailto"))) - (and prefix (setq name (concat prefix ":" name)))))) - ((ffap-newsgroup-p name) (setq name (concat "news:" name))) - ((and (string-match "\\`[[:alnum:]]+\\'" name) ; - (equal (ffap-string-around) "<>") - ;; (ffap-user-p name): - (not (string-match "~" (expand-file-name (concat "~" name)))) - ) - (setq name (concat "mailto:" name))) - ) - (and (ffap-url-p name) name) - )))) + (when ffap-url-regexp + (or (and (eq major-mode 'w3-mode) ; In a w3 buffer button? + (w3-view-this-url t)) + ;; Is there a reason not to strip trailing colon? + (let ((name (ffap-string-at-point 'url))) + (cond + ((string-match "^url:" name) (setq name (substring name 4))) + ((and (string-match "\\`[^:@]+@[^:@]+[[:alnum:]]\\'" name) + ;; "foo@bar": could be "mailto" or "news" (a Message-ID). + ;; Without "<>" it must be "mailto". Otherwise could be + ;; either, so consult `ffap-foo-at-bar-prefix'. + (let ((prefix (if (and (equal (ffap-string-around) "<>") + ;; Expect some odd characters: + (string-match "[$.0-9].*[$.0-9].*@" name)) + ;; Could be news: + ffap-foo-at-bar-prefix + "mailto"))) + (and prefix (setq name (concat prefix ":" name)))))) + ((ffap-newsgroup-p name) (setq name (concat "news:" name))) + ((and (string-match "\\`[[:alnum:]]+\\'" name) ; + (equal (ffap-string-around) "<>") + ;; (ffap-user-p name): + (not (string-match "~" (expand-file-name (concat "~" name))))) + (setq name (concat "mailto:" name)))) + + (if (ffap-url-p name) + name))))) (defvar ffap-gopher-regexp "^.*\\<\\(Type\\|Name\\|Path\\|Host\\|Port\\) *= *\\(.*\\) *$" @@ -1342,8 +1366,6 @@ which may actually result in an URL rather than a filename." ;;; Highlighting (`ffap-highlight'): -;; -;; Based on overlay highlighting in Emacs 19.28 isearch.el. (defvar ffap-highlight t "If non-nil, ffap highlights the current buffer substring.") @@ -1676,6 +1698,11 @@ Only intended for interactive use." (set-window-dedicated-p win wdp)) value)) +(defun ffap--toggle-read-only (buffer) + (with-current-buffer buffer + (with-no-warnings + (toggle-read-only 1)))) + (defun ffap-read-only () "Like `ffap', but mark buffer as read-only. Only intended for interactive use." @@ -1683,7 +1710,7 @@ Only intended for interactive use." (let ((value (call-interactively 'ffap))) (unless (or (bufferp value) (bufferp (car-safe value))) (setq value (current-buffer))) - (mapc (lambda (b) (with-current-buffer b (toggle-read-only 1))) + (mapc #'ffap--toggle-read-only (if (listp value) value (list value))) value)) @@ -1692,7 +1719,7 @@ Only intended for interactive use." Only intended for interactive use." (interactive) (let ((value (ffap-other-window))) - (mapc (lambda (b) (with-current-buffer b (toggle-read-only 1))) + (mapc #'ffap--toggle-read-only (if (listp value) value (list value))) value)) @@ -1701,7 +1728,7 @@ Only intended for interactive use." Only intended for interactive use." (interactive) (let ((value (ffap-other-frame))) - (mapc (lambda (b) (with-current-buffer b (toggle-read-only 1))) + (mapc #'ffap--toggle-read-only (if (listp value) value (list value))) value)) @@ -1743,8 +1770,7 @@ Only intended for interactive use." (defun ffap-ro-mode-hook () "Bind `ffap-next' and `ffap-menu' to M-l and M-m, resp." (local-set-key "\M-l" 'ffap-next) - (local-set-key "\M-m" 'ffap-menu) - ) + (local-set-key "\M-m" 'ffap-menu)) (defun ffap-gnus-hook () "Bind `ffap-gnus-next' and `ffap-gnus-menu' to M-l and M-m, resp." @@ -1788,13 +1814,6 @@ Only intended for interactive use." (interactive) (ffap-gnus-wrapper '(ffap-menu))) -(defcustom dired-at-point-require-prefix nil - "If set, reverses the prefix argument to `dired-at-point'. -This is nil so neophytes notice ffap. Experts may prefer to disable -ffap most of the time." - :type 'boolean - :group 'ffap - :version "20.3") ;;;###autoload (defun dired-at-point (&optional filename) @@ -1901,7 +1920,7 @@ Only intended for interactive use." ;;; Hooks to put in `file-name-at-point-functions': ;;;###autoload -(progn (defun ffap-guess-file-name-at-point () +(defun ffap-guess-file-name-at-point () "Try to get a file name at point. This hook is intended to be put in `file-name-at-point-functions'." (when (fboundp 'ffap-guesser) @@ -1918,14 +1937,13 @@ This hook is intended to be put in `file-name-at-point-functions'." (when guess (if (file-directory-p guess) (file-name-as-directory guess) - guess)))))) + guess))))) ;;; Offer default global bindings (`ffap-bindings'): (defvar ffap-bindings - '( - (global-set-key [S-mouse-3] 'ffap-at-mouse) + '((global-set-key [S-mouse-3] 'ffap-at-mouse) (global-set-key [C-S-mouse-3] 'ffap-menu) (global-set-key "\C-x\C-f" 'find-file-at-point) @@ -1945,9 +1963,7 @@ This hook is intended to be put in `file-name-at-point-functions'." (add-hook 'gnus-summary-mode-hook 'ffap-gnus-hook) (add-hook 'gnus-article-mode-hook 'ffap-gnus-hook) (add-hook 'vm-mode-hook 'ffap-ro-mode-hook) - (add-hook 'rmail-mode-hook 'ffap-ro-mode-hook) - ;; (setq dired-x-hands-off-my-keys t) ; the default - ) + (add-hook 'rmail-mode-hook 'ffap-ro-mode-hook)) "List of binding forms evaluated by function `ffap-bindings'. A reasonable ffap installation needs just this one line: (ffap-bindings) diff --git a/lisp/url/ChangeLog b/lisp/url/ChangeLog index b3669a72ac3..c41df0e832b 100644 --- a/lisp/url/ChangeLog +++ b/lisp/url/ChangeLog @@ -1,3 +1,16 @@ +2012-05-10 Chong Yidong + + * url-parse.el (url-path-and-query, url-port-if-non-default): New + functions. + (url-generic-parse-url): Don't set the portspec slot if it is not + specified; that is what `url-port' is for. + (url-port): Only require the scheme to be specified to call + url-scheme-get-property. + + * url-util.el (url-encode-url): Use url-path-and-query. + + * url-vars.el (url-mime-charset-string): Load mm-util lazily. + 2012-05-09 Chong Yidong * url-util.el (url-encode-url): New function for URL quoting. @@ -12,6 +25,7 @@ whole path and query inside the FILENAME slot. Improve docstring. (url-recreate-url-attributes): Mark as obsolete. (url-recreate-url): Handle missing scheme and userinfo. + (url-path-and-query): New function. * url-http.el (url-http-create-request): Ignore obsolete attributes slot of url-object. diff --git a/lisp/url/url-parse.el b/lisp/url/url-parse.el index 40183a4f533..18c5790313e 100644 --- a/lisp/url/url-parse.el +++ b/lisp/url/url-parse.el @@ -39,22 +39,52 @@ silent (use-cookies t)) (defsubst url-port (urlobj) + "Return the port number for the URL specified by URLOBJ." (or (url-portspec urlobj) - (if (url-fullness urlobj) + (if (url-type urlobj) (url-scheme-get-property (url-type urlobj) 'default-port)))) (defsetf url-port (urlobj) (port) `(setf (url-portspec ,urlobj) ,port)) +(defun url-path-and-query (urlobj) + "Return the path and query components of URLOBJ. +These two components are store together in the FILENAME slot of +the object. The return value of this function is (PATH . QUERY), +where each of PATH and QUERY are strings or nil." + (let ((name (url-filename urlobj)) + path query) + (when name + (if (string-match "\\?" name) + (setq path (substring name 0 (match-beginning 0)) + query (substring name (match-end 0))) + (setq path name))) + (if (equal path "") (setq path nil)) + (if (equal query "") (setq query nil)) + (cons path query))) + +(defun url-port-if-non-default (urlobj) + "Return the port number specified by URLOBJ, if it is not the default. +If the specified port number is the default, return nil." + (let ((port (url-portspec urlobj)) + type) + (and port + (or (null (setq type (url-type urlobj))) + (not (equal port (url-scheme-get-property type 'default-port)))) + port))) + ;;;###autoload (defun url-recreate-url (urlobj) "Recreate a URL string from the parsed URLOBJ." - (let ((type (url-type urlobj)) - (user (url-user urlobj)) - (pass (url-password urlobj)) - (host (url-host urlobj)) - (port (url-portspec urlobj)) - (file (url-filename urlobj)) - (frag (url-target urlobj))) + (let* ((type (url-type urlobj)) + (user (url-user urlobj)) + (pass (url-password urlobj)) + (host (url-host urlobj)) + ;; RFC 3986: "omit the port component and its : delimiter if + ;; port is empty or if its value would be the same as that of + ;; the scheme's default." + (port (url-port-if-non-default urlobj)) + (file (url-filename urlobj)) + (frag (url-target urlobj))) (concat (if type (concat type ":")) (if (url-fullness urlobj) "//") (if (or user pass) @@ -62,15 +92,7 @@ (if pass (concat ":" pass)) "@")) host - ;; RFC 3986: "omit the port component and its : delimiter - ;; if port is empty or if its value would be the same as - ;; that of the scheme's default." - (and port - (or (null type) - (not (equal port - (url-scheme-get-property type - 'default-port)))) - (format ":%d" (url-port urlobj))) + (if port (format ":%d" (url-port urlobj))) (or file "/") (if frag (concat "#" frag))))) @@ -102,8 +124,8 @@ TARGET is the fragment identifier component (used to refer to a ATTRIBUTES is nil; this slot originally stored the attribute and value alists for IMAP URIs, but this feature was removed since it conflicts with RFC 3986. -FULLNESS is non-nil iff the authority component of the URI is - present. +FULLNESS is non-nil iff the hierarchical sequence component of + the URL starts with two slashes, \"//\". The parser follows RFC 3986, except that it also tries to handle URIs that are not fully specified (e.g. lacking TYPE), and it @@ -174,10 +196,6 @@ parses to (setq port (string-to-number port)))) (setq host (downcase host))) - (and (null port) - scheme - (setq port (url-scheme-get-property scheme 'default-port))) - ;; Now point is on the / ? or # which terminates the ;; authority, or at the end of the URI, or (if there is no ;; authority) at the beginning of the absolute path. diff --git a/lisp/url/url-util.el b/lisp/url/url-util.el index 4185c87918e..71bc84cab09 100644 --- a/lisp/url/url-util.el +++ b/lisp/url/url-util.el @@ -418,31 +418,26 @@ should return it unchanged." (user (url-user obj)) (pass (url-password obj)) (host (url-host obj)) - (file (url-filename obj)) - (frag (url-target obj)) - path query) + (path-and-query (url-path-and-query obj)) + (path (car path-and-query)) + (query (cdr path-and-query)) + (frag (url-target obj))) (if user (setf (url-user obj) (url-hexify-string user))) (if pass (setf (url-password obj) (url-hexify-string pass))) - (when host - ;; No special encoding for IPv6 literals. - (unless (string-match "\\`\\[.*\\]\\'" host) - (setf (url-host obj) - (url-hexify-string host url-host-allowed-chars)))) - ;; Split FILENAME slot into its PATH and QUERY components, and - ;; encode them separately. The PATH component can contain - ;; unreserved characters, %-encodings, and /:@!$&'()*+,;= - (when file - (if (string-match "\\?" file) - (setq path (substring file 0 (match-beginning 0)) - query (substring file (match-end 0))) - (setq path file)) - (setq path (url-hexify-string path url-path-allowed-chars)) - (if query - (setq query (url-hexify-string query url-query-allowed-chars))) - (setf (url-filename obj) - (if query (concat path "?" query) path))) + ;; No special encoding for IPv6 literals. + (and host + (not (string-match "\\`\\[.*\\]\\'" host)) + (setf (url-host obj) + (url-hexify-string host url-host-allowed-chars))) + + (if path + (setq path (url-hexify-string path url-path-allowed-chars))) + (if query + (setq query (url-hexify-string query url-query-allowed-chars))) + (setf (url-filename obj) (if query (concat path "?" query) path)) + (if frag (setf (url-target obj) (url-hexify-string frag url-query-allowed-chars))) diff --git a/lisp/url/url-vars.el b/lisp/url/url-vars.el index 0d71910849f..6aa14b8bae1 100644 --- a/lisp/url/url-vars.el +++ b/lisp/url/url-vars.el @@ -21,8 +21,6 @@ ;;; Code: -(require 'mm-util) - (defconst url-version "Emacs" "Version number of URL package.") @@ -221,6 +219,7 @@ Should be an assoc list of headers/contents.") (defun url-mime-charset-string () "Generate a list of preferred MIME charsets for HTTP requests. Generated according to current coding system priorities." + (require 'mm-util) (if (fboundp 'sort-coding-systems) (let ((ordered (sort-coding-systems (let (accum) From ff4a64740df15b9e31121064b46d739b76a74e0d Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 10 May 2012 06:17:25 -0400 Subject: [PATCH 429/564] Auto-commit of generated files. --- autogen/Makefile.in | 1 + autogen/configure | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/autogen/Makefile.in b/autogen/Makefile.in index b28bf208694..ccf0b6ebd41 100644 --- a/autogen/Makefile.in +++ b/autogen/Makefile.in @@ -491,6 +491,7 @@ LD_SWITCH_SYSTEM = @LD_SWITCH_SYSTEM@ LD_SWITCH_SYSTEM_TEMACS = @LD_SWITCH_SYSTEM_TEMACS@ LD_SWITCH_X_SITE = @LD_SWITCH_X_SITE@ LD_SWITCH_X_SITE_RPATH = @LD_SWITCH_X_SITE_RPATH@ +LEIM_INSTALLDIR = @LEIM_INSTALLDIR@ LIBGIF = @LIBGIF@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ diff --git a/autogen/configure b/autogen/configure index ce3fb436009..b3b808e1f37 100755 --- a/autogen/configure +++ b/autogen/configure @@ -1163,6 +1163,7 @@ HAVE_XSERVER LIB_STANDARD NS_OBJC_OBJ NS_OBJ +LEIM_INSTALLDIR TEMACS_LDFLAGS2 LD_SWITCH_X_SITE_RPATH XMKMF @@ -10422,6 +10423,7 @@ $as_echo "#define NS_HAVE_NSINTEGER 1" >>confdefs.h fi +LEIM_INSTALLDIR="\${install_prefix}/leim" ns_frag=/dev/null NS_OBJ= NS_OBJC_OBJ= @@ -10437,6 +10439,7 @@ if test "${HAVE_NS}" = yes; then prefix=${ns_appresdir} exec_prefix=${ns_appbindir} libexecdir=${ns_appbindir}/libexec + LEIM_INSTALLDIR="\${ns_appresdir}/leim" fi ns_frag=$srcdir/src/ns.mk NS_OBJ="fontset.o fringe.o image.o" @@ -10449,6 +10452,7 @@ CPPFLAGS="$tmp_CPPFLAGS" + case "${window_system}" in x11 ) HAVE_X_WINDOWS=yes From 75aafb17a6569408f2fcf9076ebf62f38bef1b09 Mon Sep 17 00:00:00 2001 From: Juanma Barranquero Date: Thu, 10 May 2012 16:34:43 +0200 Subject: [PATCH 430/564] src/makefile.w32-in: Update dependencies. --- src/ChangeLog | 5 +++++ src/makefile.w32-in | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index 84764cfc5fc..d86d55816f4 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2012-05-10 Juanma Barranquero + + * makefile.w32-in ($(BLD)/gmalloc.$(O), $(BLD)/w32menu.$(O)): + Update dependencies. + 2012-05-10 Paul Eggert * xgselect.c (xg_select): Put maxfds+1 into a var. diff --git a/src/makefile.w32-in b/src/makefile.w32-in index 303445bc2d6..f62c501e1fa 100644 --- a/src/makefile.w32-in +++ b/src/makefile.w32-in @@ -930,7 +930,7 @@ $(BLD)/fringe.$(O) : \ $(BLD)/gmalloc.$(O) : \ $(SRC)/gmalloc.c \ - $(SRC)/getpagesize.h \ + $(NT_INC)/stdint.h \ $(NT_INC)/unistd.h \ $(CONFIG_H) @@ -1514,6 +1514,7 @@ $(BLD)/w32menu.$(O) : \ $(SRC)/w32menu.c \ $(SRC)/buffer.h \ $(SRC)/keymap.h \ + $(SRC)/w32heap.h \ $(BLOCKINPUT_H) \ $(CHARSET_H) \ $(CODING_H) \ From 53f7d2c04e3e5f2c340942b545e423a0717d34cb Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Thu, 10 May 2012 23:39:26 -0700 Subject: [PATCH 431/564] Remove unused function hourglass_started. * dispextern.h (hourglass_started): * w32fns.c (hourglass_started): * xdisp.c (hourglass_started): Remove. --- src/ChangeLog | 7 +++++++ src/dispextern.h | 1 - src/w32fns.c | 10 ---------- src/xdisp.c | 8 -------- 4 files changed, 7 insertions(+), 19 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index d86d55816f4..805fa7ee097 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2012-05-11 Paul Eggert + + Remove unused function hourglass_started. + * dispextern.h (hourglass_started): + * w32fns.c (hourglass_started): + * xdisp.c (hourglass_started): Remove. + 2012-05-10 Juanma Barranquero * makefile.w32-in ($(BLD)/gmalloc.$(O), $(BLD)/w32menu.$(O)): diff --git a/src/dispextern.h b/src/dispextern.h index 4804a9e61c6..c7652504de2 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -3243,7 +3243,6 @@ extern Window tip_window; EXFUN (Fx_hide_tip, 0); extern void start_hourglass (void); extern void cancel_hourglass (void); -extern int hourglass_started (void); extern int hourglass_shown_p; struct atimer; /* Defined in atimer.h. */ /* If non-null, an asynchronous timer that, when it expires, displays diff --git a/src/w32fns.c b/src/w32fns.c index 510d1e94f16..a3ccb4ea3e5 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -5016,16 +5016,6 @@ no value of TYPE (always string in the MS Windows case). */) cursor. Duplicated from xdisp.c, but cannot use the version there due to lack of atimers on w32. */ #define DEFAULT_HOURGLASS_DELAY 1 -/* Return non-zero if hourglass timer has been started or hourglass is - shown. */ -/* PENDING: if W32 can use atimers (atimer.[hc]) then the common impl in - xdisp.c could be used. */ - -int -hourglass_started (void) -{ - return hourglass_shown_p || hourglass_timer; -} /* Cancel a currently active hourglass timer, and start a new one. */ diff --git a/src/xdisp.c b/src/xdisp.c index eaad5455212..36ca69956d4 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -28882,14 +28882,6 @@ init_xdisp (void) /* Platform-independent portion of hourglass implementation. */ -/* Return non-zero if hourglass timer has been started or hourglass is - shown. */ -int -hourglass_started (void) -{ - return hourglass_shown_p || hourglass_atimer != NULL; -} - /* Cancel a currently active hourglass timer, and start a new one. */ void start_hourglass (void) From a873f274ba20ab4f54feac40f8b9fe6298fb315a Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 11 May 2012 00:51:31 -0700 Subject: [PATCH 432/564] * Makefile.in (install-arch-indep): There are no more Makefile.c files. --- ChangeLog | 4 ++++ Makefile.in | 11 +++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index ae355df0c8b..61f29a9ee78 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2012-05-11 Glenn Morris + + * Makefile.in (install-arch-indep): There are no more Makefile.c files. + 2012-05-10 Glenn Morris * configure.in (LEIM_INSTALLDIR): New output variable. diff --git a/Makefile.in b/Makefile.in index 62e98fd451a..a8271f0ec9d 100644 --- a/Makefile.in +++ b/Makefile.in @@ -495,9 +495,17 @@ set_installuser=for installuser in $${LOGNAME} $${USERNAME} $${USER} \ ## Note that we copy DOC* and then delete DOC ## as a workaround for a bug in tar on Ultrix 4.2. +## Ultrix is no longer supported since 23.1, but the relevant line +## has another effect. We copy the entire etc/ directory from the +## source tree first. For an in-tree build, this will include +## any DOC* files there may be. So rm DOC does have an effect. +## FIXME When we copy etc we should exclude DOC*, then copy only +## the relevant one. We cannot delete DOC* from the destination directory, +## because that may include pre-existing files from another emacs. ## We install only the relevant DOC file if possible ## (ie DOC-${version}.buildnumber), otherwise DOC-${version}*. +## (Note "otherwise" is inaccurate since 2009-08-23.) ## If people complain about the h flag in tar command, take that out. ## That flag is also used in leim/Makefile.in @@ -538,8 +546,7 @@ install-arch-indep: mkdir info install-etc rm -f $${subdir}/*~ ; \ rm -f $${subdir}/*.orig ; \ [ "$${dir}" != "${srcdir}/etc" ] && \ - rm -f $${subdir}/[mM]akefile*.c $${subdir}/[mM]akefile*[.-]in \ - $${subdir}/[mM]akefile ; \ + rm -f $${subdir}/[mM]akefile*[.-]in $${subdir}/[mM]akefile ; \ rm -f $${subdir}/ChangeLog* ; \ done) ; \ done From e61249277b61b6601adfed28a96febdb549edc6c Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 11 May 2012 01:10:52 -0700 Subject: [PATCH 433/564] * Makefile.in (install-arch-indep): Use INSTALL_DATA for the DOC file. --- ChangeLog | 1 + Makefile.in | 7 ++++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 61f29a9ee78..c6679465211 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,7 @@ 2012-05-11 Glenn Morris * Makefile.in (install-arch-indep): There are no more Makefile.c files. + Use INSTALL_DATA for the DOC file. 2012-05-10 Glenn Morris diff --git a/Makefile.in b/Makefile.in index a8271f0ec9d..ac6ad2b5ac5 100644 --- a/Makefile.in +++ b/Makefile.in @@ -455,6 +455,8 @@ MV_DIRS = for i in $$dir; do rm -fr `basename "$$i"` ; mv "$$i" . ; done ### Install the executables that were compiled specifically for this machine. ### It would be nice to do something for a parallel make ### to ensure that install-arch-indep finishes before this starts. +### (TODO Why would it be nice? Why not just make this depend on +### install-arch-indep then?) install-arch-dep: mkdir (cd lib-src; \ $(MAKE) install $(MFLAGS) prefix=${prefix} \ @@ -579,11 +581,10 @@ install-arch-indep: mkdir info install-etc docfile="DOC"; \ fi; \ echo "Copying etc/$${docfile} to $(DESTDIR)${docdir} ..." ; \ - (cd ./etc; tar -chf - $${docfile}) \ - |(cd $(DESTDIR)${docdir}; umask 022; tar -xvf - && cat > /dev/null) || exit 1; \ + ${INSTALL_DATA} etc/$${docfile} $(DESTDIR)${docdir}/$${docfile}; \ (cd $(DESTDIR)$(docdir); \ $(set_installuser); \ - chown $${installuser} DOC*; chmod a+r DOC*; \ + chown $${installuser} DOC*; \ if test "`echo DOC-*`" != "DOC-*"; then rm -f DOC; fi); \ else true; fi -unset CDPATH; \ From d9d1dfefe13b0f0a5f5402ab57bf8d22cd040486 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Fri, 11 May 2012 08:40:43 -0400 Subject: [PATCH 434/564] * net/rlogin.el (rlogin-mode-map): Fix last change. --- lisp/ChangeLog | 4 ++++ lisp/net/rlogin.el | 12 ++++++------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 8e6a3c0f106..e6183d92705 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-05-11 Stefan Monnier + + * net/rlogin.el (rlogin-mode-map): Fix last change. + 2012-05-09 Jason L. Wright (tiny change) * mail/smtpmail.el (smtpmail-send-command): Send the command and diff --git a/lisp/net/rlogin.el b/lisp/net/rlogin.el index ac936ee1429..cef615dc320 100644 --- a/lisp/net/rlogin.el +++ b/lisp/net/rlogin.el @@ -114,12 +114,12 @@ this variable is set from that." (let ((map (if (consp shell-mode-map) (cons 'keymap shell-mode-map) (copy-keymap shell-mode-map)))) - (define-key rlogin-mode-map "\C-c\C-c" 'rlogin-send-Ctrl-C) - (define-key rlogin-mode-map "\C-c\C-d" 'rlogin-send-Ctrl-D) - (define-key rlogin-mode-map "\C-c\C-z" 'rlogin-send-Ctrl-Z) - (define-key rlogin-mode-map "\C-c\C-\\" 'rlogin-send-Ctrl-backslash) - (define-key rlogin-mode-map "\C-d" 'rlogin-delchar-or-send-Ctrl-D) - (define-key rlogin-mode-map "\C-i" 'rlogin-tab-or-complete) + (define-key map "\C-c\C-c" 'rlogin-send-Ctrl-C) + (define-key map "\C-c\C-d" 'rlogin-send-Ctrl-D) + (define-key map "\C-c\C-z" 'rlogin-send-Ctrl-Z) + (define-key map "\C-c\C-\\" 'rlogin-send-Ctrl-backslash) + (define-key map "\C-d" 'rlogin-delchar-or-send-Ctrl-D) + (define-key map "\C-i" 'rlogin-tab-or-complete) map) "Keymap for `rlogin-mode'.") From dee6c9a34ff9f8ca764465937b6d2621cbb36318 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Fri, 11 May 2012 09:13:09 -0400 Subject: [PATCH 435/564] * lisp/term.el (term-set-escape-char): Properly set term-escape-char. --- lisp/ChangeLog | 5 +++++ lisp/term.el | 11 +++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e983957e285..17d0fcb6427 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-05-11 Stefan Monnier + + * term.el (term-set-escape-char): Properly set term-escape-char. + See http://stackoverflow.com/questions/10524656. + 2012-05-10 Chong Yidong * ffap.el (ffap-url-unwrap-local): Make it work right (Bug#9131). diff --git a/lisp/term.el b/lisp/term.el index f44f34226f2..841641a9709 100644 --- a/lisp/term.el +++ b/lisp/term.el @@ -876,18 +876,21 @@ is buffer-local." ;; Set up term-raw-map, etc. -(defun term-set-escape-char (c) +(defun term-set-escape-char (key) "Change `term-escape-char' and keymaps that depend on it." (when term-escape-char + ;; Undo previous term-set-escape-char. (define-key term-raw-map term-escape-char 'term-send-raw)) - (setq c (make-string 1 c)) - (define-key term-raw-map c term-raw-escape-map) + (setq term-escape-char (vector key)) + (define-key term-raw-map term-escape-char term-raw-escape-map) ;; Define standard bindings in term-raw-escape-map (define-key term-raw-escape-map "\C-v" (lookup-key (current-global-map) "\C-v")) (define-key term-raw-escape-map "\C-u" (lookup-key (current-global-map) "\C-u")) - (define-key term-raw-escape-map c 'term-send-raw) + ;; FIXME: If we later call term-set-escape-char again with another key, + ;; we should undo this binding. + (define-key term-raw-escape-map term-escape-char 'term-send-raw) (define-key term-raw-escape-map "\C-q" 'term-pager-toggle) ;; The keybinding for term-char-mode is needed by the menubar code. (define-key term-raw-escape-map "\C-k" 'term-char-mode) From 82f9b393c551853b1bea9d32ab834e1999070ab2 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Fri, 11 May 2012 17:05:06 +0300 Subject: [PATCH 436/564] Fix display when left-fringe/right-fringe display spec is invalid. src/xdisp.c (handle_single_display_spec): Return 1 for left-margin and right-margin display specs even if the spec is invalid or we are on a TTY, and thus unable to display on the fringes. That's because the text with the property will not be displayed anyway, so we need to signal to the caller that this is a "replacing" display spec. This fixes display when the spec is invalid or we are on a TTY. --- src/ChangeLog | 10 ++++++++++ src/xdisp.c | 6 +++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 0d44f31fb04..9245e81a536 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,13 @@ +2012-05-11 Eli Zaretskii + + * xdisp.c (handle_single_display_spec): Return 1 for left-margin + and right-margin display specs even if the spec is invalid or we + are on a TTY, and thus unable to display on the fringes. That's + because the text with the property will not be displayed anyway, + so we need to signal to the caller that this is a "replacing" + display spec. This fixes display when the spec is invalid or we + are on a TTY. + 2012-05-09 Paul Eggert * unexaix.c (make_hdr): Fix typo in prototype. diff --git a/src/xdisp.c b/src/xdisp.c index cc75d386f0d..fd26853e09b 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -4681,10 +4681,10 @@ handle_single_display_spec (struct it *it, Lisp_Object spec, Lisp_Object object, if (!FRAME_WINDOW_P (it->f)) /* If we return here, POSITION has been advanced across the text with this property. */ - return 0; + return 1; } else if (!frame_window_p) - return 0; + return 1; #ifdef HAVE_WINDOW_SYSTEM value = XCAR (XCDR (spec)); @@ -4692,7 +4692,7 @@ handle_single_display_spec (struct it *it, Lisp_Object spec, Lisp_Object object, || !(fringe_bitmap = lookup_fringe_bitmap (value))) /* If we return here, POSITION has been advanced across the text with this property. */ - return 0; + return 1; if (it) { From ff46c759ddf01935f111660d982ec03d83406d24 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Fri, 11 May 2012 10:24:50 -0400 Subject: [PATCH 437/564] * lisp/progmodes/sh-script.el: Use post-self-insert-hook&electric-pair-mode. Provide SMIE-based indentation (not enabled by default yet). (sh-mode-map): Don't bind electric keys. Use electric-pair-mode instead of skeleton-pair. (sh-assignment-regexp): Fit within 80 columns. (sh-indent-supported): Specify actual shell name instead of boolean. (sh--maybe-here-document): New fun, from sh-maybe-here-document. (sh-maybe-here-document): Use it. Make obsolete. (sh-electric-here-document-mode) New minor mode. (sh-mode): Use it. Don't set sh-indent-supported-here here. (sh-smie-sh-grammar, sh-smie--sh-operators, sh-smie--sh-operators-re) (sh-smie--sh-operators-back-re, sh-indent-after-continuation) (sh-smie-rc-grammar, sh-use-smie): New vars. (sh-smie--keyword-p, sh-smie--newline-semi-p, sh-smie--sh-keyword-p) (sh-smie-sh-forward-token, sh-smie--looking-back-at-continuation-p) (sh-smie-sh-backward-token, sh-smie--continuation-start-indent) (sh-smie-sh-rules, sh-smie-rc-rules, sh-smie--sh-keyword-in-p) (sh-smie--rc-after-special-arg-p, sh-smie-rc-backward-token) (sh-smie-sh-rules, sh-smie--rc-newline-semi-p): New functions. (sh-set-shell): Use smie-setup if requested. --- etc/NEWS | 5 + lisp/ChangeLog | 21 ++ lisp/progmodes/sh-script.el | 548 ++++++++++++++++++++++++++++++++---- 3 files changed, 512 insertions(+), 62 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 9c7cb834b8d..a584d5943ea 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -90,6 +90,11 @@ character when doing minibuffer filename prompts. * Changes in Specialized Modes and Packages in Emacs 24.2 +** `sh-script' +*** Pairing of parens/quotes uses electric-pair-mode instead of skeleton-pair. +*** `sh-electric-here-document-mode' now controls auto-insertion of here-docs. +*** `sh-use-smie' lets you choose a new indentation and navigation code. + ** reStructuredText mode *** Major merge with upstream development. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 17d0fcb6427..a70257b2a83 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,26 @@ 2012-05-11 Stefan Monnier + * progmodes/sh-script.el: Use post-self-insert-hook&electric-pair-mode. + Provide SMIE-based indentation (not enabled by default yet). + (sh-mode-map): Don't bind electric keys. + Use electric-pair-mode instead of skeleton-pair. + (sh-assignment-regexp): Fit within 80 columns. + (sh-indent-supported): Specify actual shell name instead of boolean. + (sh--maybe-here-document): New fun, from sh-maybe-here-document. + (sh-maybe-here-document): Use it. Make obsolete. + (sh-electric-here-document-mode) New minor mode. + (sh-mode): Use it. Don't set sh-indent-supported-here here. + (sh-smie-sh-grammar, sh-smie--sh-operators, sh-smie--sh-operators-re) + (sh-smie--sh-operators-back-re, sh-indent-after-continuation) + (sh-smie-rc-grammar, sh-use-smie): New vars. + (sh-smie--keyword-p, sh-smie--newline-semi-p, sh-smie--sh-keyword-p) + (sh-smie-sh-forward-token, sh-smie--looking-back-at-continuation-p) + (sh-smie-sh-backward-token, sh-smie--continuation-start-indent) + (sh-smie-sh-rules, sh-smie-rc-rules, sh-smie--sh-keyword-in-p) + (sh-smie--rc-after-special-arg-p, sh-smie-rc-backward-token) + (sh-smie-sh-rules, sh-smie--rc-newline-semi-p): New functions. + (sh-set-shell): Use smie-setup if requested. + * term.el (term-set-escape-char): Properly set term-escape-char. See http://stackoverflow.com/questions/10524656. diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el index f60ce185bc7..a07ecfcb3a4 100644 --- a/lisp/progmodes/sh-script.el +++ b/lisp/progmodes/sh-script.el @@ -326,7 +326,9 @@ shell it really is." (defcustom sh-imenu-generic-expression `((sh - . ((nil "^\\s-*\\(function\\s-+\\)?\\([[:alpha:]_][[:alnum:]_]+\\)\\s-*()" 2)))) + . ((nil + "^\\s-*\\(function\\s-+\\)?\\([[:alpha:]_][[:alnum:]_]+\\)\\s-*()" + 2)))) "Alist of regular expressions for recognizing shell function definitions. See `sh-feature' and `imenu-generic-expression'." :type '(alist :key-type (symbol :tag "Shell") @@ -460,14 +462,6 @@ This is buffer-local in every such buffer.") (define-key map "\C-c+" 'sh-add) (define-key map "\C-\M-x" 'sh-execute-region) (define-key map "\C-c\C-x" 'executable-interpret) - ;; FIXME: Use post-self-insert-hook. - (define-key map "<" 'sh-maybe-here-document) - (define-key map "(" 'skeleton-pair-insert-maybe) - (define-key map "{" 'skeleton-pair-insert-maybe) - (define-key map "[" 'skeleton-pair-insert-maybe) - (define-key map "'" 'skeleton-pair-insert-maybe) - (define-key map "`" 'skeleton-pair-insert-maybe) - (define-key map "\"" 'skeleton-pair-insert-maybe) (define-key map [remap complete-tag] 'comint-dynamic-complete) (define-key map [remap delete-backward-char] @@ -478,10 +472,10 @@ This is buffer-local in every such buffer.") (define-key map [menu-bar sh-script] (cons "Sh-Script" menu-map)) (define-key menu-map [sh-learn-buffer-indent] '(menu-item "Learn buffer indentation" sh-learn-buffer-indent - :help "Learn how to indent the buffer the way it currently is.")) + :help "Learn how to indent the buffer the way it currently is.")) (define-key menu-map [sh-learn-line-indent] '(menu-item "Learn line indentation" sh-learn-line-indent - :help "Learn how to indent a line as it currently is indented")) + :help "Learn how to indent a line as it currently is indented")) (define-key menu-map [sh-show-indent] '(menu-item "Show indentation" sh-show-indent :help "Show the how the current line would be indented")) @@ -491,13 +485,9 @@ This is buffer-local in every such buffer.") (define-key menu-map [sh-pair] '(menu-item "Insert braces and quotes in pairs" - (lambda () - (interactive) - (require 'skeleton) - (setq skeleton-pair (not skeleton-pair))) - :button (:toggle . (and (boundp 'skeleton-pair) - skeleton-pair)) - :help "Inserting a brace or quote automatically inserts the matching pair")) + electric-pair-mode + :button (:toggle . (bound-and-true-p electric-pair-mode)) + :help "Inserting a brace or quote automatically inserts the matching pair")) (define-key menu-map [sh-s0] '("--")) ;; Insert @@ -506,7 +496,7 @@ This is buffer-local in every such buffer.") :help "Insert a function definition")) (define-key menu-map [sh-add] '(menu-item "Addition..." sh-add - :help "Insert an addition of VAR and prefix DELTA for Bourne (type) shell")) + :help "Insert an addition of VAR and prefix DELTA for Bourne (type) shell")) (define-key menu-map [sh-until] '(menu-item "Until Loop" sh-until :help "Insert an until loop")) @@ -537,16 +527,16 @@ This is buffer-local in every such buffer.") (define-key menu-map [sh-s1] '("--")) (define-key menu-map [sh-exec] '(menu-item "Execute region" sh-execute-region - :help "Pass optional header and region to a subshell for noninteractive execution")) + :help "Pass optional header and region to a subshell for noninteractive execution")) (define-key menu-map [sh-exec-interpret] '(menu-item "Execute script..." executable-interpret - :help "Run script with user-specified args, and collect output in a buffer")) + :help "Run script with user-specified args, and collect output in a buffer")) (define-key menu-map [sh-set-shell] '(menu-item "Set shell type..." sh-set-shell :help "Set this buffer's shell to SHELL (a string)")) (define-key menu-map [sh-backslash-region] '(menu-item "Backslash region" sh-backslash-region - :help "Insert, align, or delete end-of-line backslashes on the lines in the region.")) + :help "Insert, align, or delete end-of-line backslashes on the lines in the region.")) map) "Keymap used in Shell-Script mode.") @@ -564,9 +554,10 @@ This is buffer-local in every such buffer.") :group 'sh-script) (defcustom sh-assignment-regexp - '((csh . "\\<\\([[:alnum:]_]+\\)\\(\\[.+\\]\\)?[ \t]*[-+*/%^]?=") + `((csh . "\\<\\([[:alnum:]_]+\\)\\(\\[.+\\]\\)?[ \t]*[-+*/%^]?=") ;; actually spaces are only supported in let/(( ... )) - (ksh88 . "\\<\\([[:alnum:]_]+\\)\\(\\[.+\\]\\)?[ \t]*\\([-+*/%&|~^]\\|<<\\|>>\\)?=") + (ksh88 . ,(concat "\\<\\([[:alnum:]_]+\\)\\(\\[.+\\]\\)?" + "[ \t]*\\(?:[-+*/%&|~^]\\|<<\\|>>\\)?=")) (bash . "\\<\\([[:alnum:]_]+\\)\\(\\[.+\\]\\)?\\+?=") (rc . "\\<\\([[:alnum:]_*]+\\)[ \t]*=") (sh . "\\<\\([[:alnum:]_]+\\)=")) @@ -1379,10 +1370,10 @@ punctuation characters like '-'." (defconst sh-indent-supported - '((sh . t) + '((sh . sh) (csh . nil) - (rc . t)) - "Shell types that shell indenting can do something with.") + (rc . rc)) + "Indentation rule set to use for each shell type.") (defvar sh-indent-supported-here nil "Non-nil if we support indentation for the current buffer's shell type.") @@ -1464,9 +1455,8 @@ buffer indents as it currently is indented. \\[sh-set-shell] Set this buffer's shell, and maybe its magic number. \\[sh-execute-region] Have optional header and region be executed in a subshell. -\\[sh-maybe-here-document] Without prefix, following an unquoted < inserts here document. -\{, (, [, ', \", ` - Unless quoted with \\, insert the pairs {}, (), [], or '', \"\", ``. +`sh-electric-here-document-mode' controls whether insertion of two +unquoted < insert a here document. If you generally program a shell different from your login shell you can set `sh-shell-file' accordingly. If your shell's file name doesn't correctly @@ -1503,13 +1493,13 @@ with your script for an edit-interpret-debug cycle." #'sh-syntax-propertize-function) (add-hook 'syntax-propertize-extend-region-functions #'syntax-propertize-multiline 'append 'local) + (sh-electric-here-document-mode 1) (set (make-local-variable 'skeleton-pair-alist) '((?` _ ?`))) (set (make-local-variable 'skeleton-pair-filter-function) 'sh-quoted-p) (set (make-local-variable 'skeleton-further-elements) '((< '(- (min sh-indentation (current-column)))))) (set (make-local-variable 'skeleton-filter-function) 'sh-feature) (set (make-local-variable 'skeleton-newline-indent-rigidly) t) - (set (make-local-variable 'sh-indent-supported-here) nil) (set (make-local-variable 'defun-prompt-regexp) (concat "^\\(function[ \t]\\|[[:alnum:]]+[ \t]+()[ \t]+\\)")) ;; Parse or insert magic number for exec, and set all variables depending @@ -1519,23 +1509,15 @@ with your script for an edit-interpret-debug cycle." (goto-char (point-min)) (looking-at "#![ \t]?\\([^ \t\n]*/bin/env[ \t]\\)?\\([^ \t\n]+\\)")) (match-string 2)) - ((not buffer-file-name) - sh-shell-file) + ((not buffer-file-name) sh-shell-file) ;; Checks that use `buffer-file-name' follow. - ((string-match "\\.m?spec\\'" buffer-file-name) - "rpm") - ((string-match "[.]sh\\>" buffer-file-name) - "sh") - ((string-match "[.]bash\\>" buffer-file-name) - "bash") - ((string-match "[.]ksh\\>" buffer-file-name) - "ksh") - ((string-match "[.]csh\\>" buffer-file-name) - "csh") - ((equal (file-name-nondirectory buffer-file-name) ".profile") - "sh") - (t - sh-shell-file)) + ((string-match "\\.m?spec\\'" buffer-file-name) "rpm") + ((string-match "[.]sh\\>" buffer-file-name) "sh") + ((string-match "[.]bash\\>" buffer-file-name) "bash") + ((string-match "[.]ksh\\>" buffer-file-name) "ksh") + ((string-match "[.]csh\\>" buffer-file-name) "csh") + ((equal (file-name-nondirectory buffer-file-name) ".profile") "sh") + (t sh-shell-file)) nil nil)) ;;;###autoload @@ -1578,6 +1560,426 @@ This adds rules for comments and assignments." "Function to get better fontification including keywords and builtins." (sh-font-lock-keywords-1 t)) +;;; Indentation and navigation with SMIE. + +(require 'smie) + +;; The SMIE code should generally be preferred, but it currently does not obey +;; the various indentation custom-vars, and it misses some important features +;; of the old code, mostly: sh-learn-line/buffer-indent, sh-show-indent, +;; sh-name/save/load-style. +(defvar sh-use-smie nil + "Whether to use the SMIE code for navigation and indentation.") + +(defun sh-smie--keyword-p (tok) + "Non-nil if TOK (at which we're looking) really is a keyword." + (let ((prev (funcall smie-backward-token-function))) + (if (zerop (length prev)) + (looking-back "\\s(" (1- (point))) + (assoc prev smie-grammar)))) + +(defun sh-smie--newline-semi-p (&optional tok) + "Return non-nil if a newline should be treated as a semi-colon. +Here we assume that a newline should be treated as a semi-colon unless it +comes right after a special keyword. +This function does not pay attention to line-continuations. +If TOK is nil, point should be before the newline; otherwise, TOK is the token +before the newline and in that case point should be just before the token." + (save-excursion + (unless tok + (setq tok (funcall smie-backward-token-function))) + (if (and (zerop (length tok)) + (looking-back "\\s(" (1- (point)))) + nil + (not (numberp (nth 2 (assoc tok smie-grammar))))))) + +;;;; SMIE support for `sh'. + +(defconst sh-smie-sh-grammar + (smie-prec2->grammar + (smie-bnf->prec2 + '((exp) ;A constant, or a $var, or a sequence of them... + (cmd ("case" exp "in" branches "esac") + ("if" cmd "then" cmd "fi") + ("if" cmd "then" cmd "else" cmd "fi") + ("if" cmd "then" cmd "elif" cmd "then" cmd "fi") + ("if" cmd "then" cmd "elif" cmd "then" cmd "else" cmd "fi") + ("if" cmd "then" cmd "elif" cmd "then" cmd + "elif" cmd "then" cmd "else" cmd "fi") + ("while" cmd "do" cmd "done") + ("until" cmd "do" cmd "done") + ("for" exp "in" cmd "do" cmd "done") + ("for" exp "do" cmd "done") + ("select" exp "in" cmd "do" cmd "done") ;bash&zsh&ksh88. + ("repeat" exp "do" cmd "done") ;zsh. + (exp "always" exp) ;zsh. + (cmd "|" cmd) (cmd "|&" cmd) + (cmd "&&" cmd) (cmd "||" cmd) + (cmd ";" cmd) (cmd "&" cmd)) + (pattern (pattern "|" pattern)) + (branches (branches ";;" branches) + (branches ";&" branches) (branches ";;&" branches) ;bash. + (pattern "case-)" cmd))) + '((assoc ";;" ";&" ";;&")) + '((assoc ";" "&") (assoc "&&" "||") (assoc "|" "|&"))))) + +(defconst sh-smie--sh-operators + (delq nil (mapcar (lambda (x) + (setq x (car x)) + (and (stringp x) + (not (string-match "\\`[a-z]" x)) + x)) + sh-smie-sh-grammar))) + +(defconst sh-smie--sh-operators-re (regexp-opt sh-smie--sh-operators)) +(defconst sh-smie--sh-operators-back-re + (concat "\\(?:^\\|[^\\]\\)\\(?:\\\\\\\\\\)*" + "\\(" sh-smie--sh-operators-re "\\)")) + +(defun sh-smie--sh-keyword-in-p () + "Assuming we're looking at \"in\", return non-nil if it's a keyword. +Does not preserve point." + (let ((forward-sexp-function nil) + (words nil) ;We've seen words. + (newline nil) ;We've seen newlines after the words. + (res nil) + prev) + (while (not res) + (setq prev (funcall smie-backward-token-function)) + (cond + ((zerop (length prev)) + (if newline + (progn (assert words) (setq res 'word)) + (setq words t) + (condition-case nil + (forward-sexp -1) + (scan-error (setq res 'unknown))))) + ((equal prev ";") + (if words (setq newline t) + (setq res 'keyword))) + ((member prev '("case" "for" "select")) (setq res 'keyword)) + ((assoc prev smie-grammar) (setq res 'word)) + (t + (if newline + (progn (assert words) (setq res 'word)) + (setq words t))))) + (eq res 'keyword))) + +(defun sh-smie--sh-keyword-p (tok) + "Non-nil if TOK (at which we're looking) really is a keyword." + (if (equal tok "in") + (sh-smie--sh-keyword-in-p) + (sh-smie--keyword-p tok))) + +(defun sh-smie-sh-forward-token () + (if (and (looking-at "[ \t]*\\(?:#\\|\\(\\s|\\)\\|$\\)") + (save-excursion + (skip-chars-backward " \t") + (not (bolp)))) + (if (and (match-end 1) (not (nth 3 (syntax-ppss)))) + ;; Right before a here-doc. + (let ((forward-sexp-function nil)) + (forward-sexp 1) + ;; Pretend the here-document is a "newline representing a + ;; semi-colon", since the here-doc otherwise covers the newline(s). + ";") + (let ((semi (sh-smie--newline-semi-p))) + (forward-line 1) + (if semi ";" + (sh-smie-sh-forward-token)))) + (forward-comment (point-max)) + (cond + ((looking-at "\\\\\n") (forward-line 1) (sh-smie-sh-forward-token)) + ((looking-at sh-smie--sh-operators-re) + (goto-char (match-end 0)) + (let ((tok (match-string-no-properties 0))) + (if (and (memq (aref tok (1- (length tok))) '(?\; ?\& ?\|)) + (looking-at "[ \t]*\\(?:#\\|$\\)")) + (forward-line 1)) + tok)) + (t + (let* ((pos (point)) + (tok (smie-default-forward-token))) + (cond + ((equal tok ")") "case-)") + ((and tok (string-match "\\`[a-z]" tok) + (assoc tok smie-grammar) + (not + (save-excursion + (goto-char pos) + (sh-smie--sh-keyword-p tok)))) + " word ") + (t tok))))))) + +(defun sh-smie--looking-back-at-continuation-p () + (save-excursion + (and (if (eq (char-before) ?\n) (progn (forward-char -1) t) (eolp)) + (looking-back "\\(?:^\\|[^\\]\\)\\(?:\\\\\\\\\\)*\\\\" + (line-beginning-position))))) + +(defun sh-smie-sh-backward-token () + (let ((bol (line-beginning-position)) + pos tok) + (forward-comment (- (point))) + (cond + ((and (bolp) (not (bobp)) + (equal (syntax-after (1- (point))) (string-to-syntax "|")) + (not (nth 3 (syntax-ppss)))) + ;; Right after a here-document. + (let ((forward-sexp-function nil)) + (forward-sexp -1) + ;; Pretend the here-document is a "newline representing a + ;; semi-colon", since the here-doc otherwise covers the newline(s). + ";")) + ((< (point) bol) + (cond + ((sh-smie--looking-back-at-continuation-p) + (forward-char -1) + (funcall smie-backward-token-function)) + ((sh-smie--newline-semi-p) ";") + (t (funcall smie-backward-token-function)))) + ((looking-back sh-smie--sh-operators-back-re + (line-beginning-position) 'greedy) + (goto-char (match-beginning 1)) + (match-string-no-properties 1)) + (t + (let ((tok (smie-default-backward-token))) + (cond + ((equal tok ")") "case-)") + ((and tok (string-match "\\`[a-z]" tok) + (assoc tok smie-grammar) + (not (save-excursion (sh-smie--sh-keyword-p tok)))) + " word ") + (t tok))))))) + +(defcustom sh-indent-after-continuation t + "If non-nil, try to make sure text is indented after a line continuation." + :type 'boolean) + +(defun sh-smie--continuation-start-indent () + "Return the initial indentation of a continued line. +May return nil if the line should not be treated as continued." + (save-excursion + (forward-line -1) + (unless (sh-smie--looking-back-at-continuation-p) + (current-indentation)))) + +(defun sh-smie-sh-rules (kind token) + (pcase (cons kind token) + (`(:elem . basic) sh-indentation) + (`(:after . "case-)") (or sh-indentation smie-indent-basic)) + ((and `(:before . ,_) + (guard (when sh-indent-after-continuation + (save-excursion + (ignore-errors + (skip-chars-backward " \t") + (sh-smie--looking-back-at-continuation-p)))))) + ;; After a line-continuation, make sure the rest is indented. + (let* ((sh-indent-after-continuation nil) + (indent (smie-indent-calculate)) + (initial (sh-smie--continuation-start-indent))) + (when (and (numberp indent) (numberp initial) + (<= indent initial)) + `(column . ,(+ initial sh-indentation))))) + (`(:before . ,(or `"(" `"{" `"[")) + (if (smie-rule-hanging-p) (smie-rule-parent))) + ;; FIXME: Maybe this handling of ;; should be made into + ;; a smie-rule-terminator function that takes the substitute ";" as arg. + (`(:before . ,(or `";;" `";&" `";;&")) + (if (and (smie-rule-bolp) (looking-at ";;?&?[ \t]*\\(#\\|$\\)")) + (cons 'column (smie-indent-keyword ";")) + (smie-rule-separator kind))) + (`(:after . ,(or `";;" `";&" `";;&")) + (with-demoted-errors + (smie-backward-sexp token) + (cons 'column + (if (or (smie-rule-bolp) + (save-excursion + (and (member (funcall smie-backward-token-function) + '("in" ";;")) + (smie-rule-bolp)))) + (current-column) + (smie-indent-calculate))))) + (`(:after . "|") (if (smie-rule-parent-p "|") nil 4)) + )) + +;; (defconst sh-smie-csh-grammar +;; (smie-prec2->grammar +;; (smie-bnf->prec2 +;; '((exp) ;A constant, or a $var, or a sequence of them… +;; (elseifcmd (cmd) +;; (cmd "else" "else-if" exp "then" elseifcmd)) +;; (cmd ("switch" branches "endsw") +;; ("if" exp) +;; ("if" exp "then" cmd "endif") +;; ("if" exp "then" cmd "else" cmd "endif") +;; ("if" exp "then" elseifcmd "endif") +;; ;; ("if" exp "then" cmd "else" cmd "endif") +;; ;; ("if" exp "then" cmd "else" "if" exp "then" cmd "endif") +;; ;; ("if" exp "then" cmd "else" "if" exp "then" cmd +;; ;; "else" cmd "endif") +;; ;; ("if" exp "then" cmd "else" "if" exp "then" cmd +;; ;; "else" "if" exp "then" cmd "endif") +;; ("while" cmd "end") +;; ("foreach" cmd "end") +;; (cmd "|" cmd) (cmd "|&" cmd) +;; (cmd "&&" cmd) (cmd "||" cmd) +;; (cmd ";" cmd) (cmd "&" cmd)) +;; ;; This is a lie, but (combined with the corresponding disambiguation +;; ;; rule) it makes it more clear that `case' and `default' are the key +;; ;; separators and the `:' is a secondary tokens. +;; (branches (branches "case" branches) +;; (branches "default" branches) +;; (exp ":" branches))) +;; '((assoc "else" "then" "endif")) +;; '((assoc "case" "default") (nonassoc ":")) +;; '((assoc ";;" ";&" ";;&")) +;; '((assoc ";" "&") (assoc "&&" "||") (assoc "|" "|&"))))) + +;;;; SMIE support for `rc'. + +(defconst sh-smie-rc-grammar + (smie-prec2->grammar + (smie-bnf->prec2 + '((exp) ;A constant, or a $var, or a sequence of them... + (cmd (cmd "case" cmd) + ("if" exp) + ("switch" exp) + ("for" exp) ("while" exp) + (cmd "|" cmd) (cmd "|&" cmd) + (cmd "&&" cmd) (cmd "||" cmd) + (cmd ";" cmd) (cmd "&" cmd)) + (pattern (pattern "|" pattern)) + (branches (branches ";;" branches) + (branches ";&" branches) (branches ";;&" branches) ;bash. + (pattern "case-)" cmd))) + '((assoc ";;" ";&" ";;&")) + '((assoc "case") (assoc ";" "&") (assoc "&&" "||") (assoc "|" "|&"))))) + +(defun sh-smie--rc-after-special-arg-p () + "Check if we're after the first arg of an if/while/for/... construct. +Returns the construct's token and moves point before it, if so." + (forward-comment (- (point))) + (when (looking-back ")\\|\\_ Date: Fri, 11 May 2012 11:05:03 -0400 Subject: [PATCH 438/564] * lisp/term.el: Move keymap initialization code to be more idiomatic. (term-signals-menu, term-mode-map, term-raw-map, term-raw-escape-map) (term-terminal-menu): Move initialization into declaration. (term-escape-char): Let the user set it in her .emacs. --- lisp/ChangeLog | 5 + lisp/term.el | 325 +++++++++++++++++++++++-------------------------- 2 files changed, 157 insertions(+), 173 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index a70257b2a83..246906df9f9 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,10 @@ 2012-05-11 Stefan Monnier + * term.el: Move keymap initialization code to be more idiomatic. + (term-signals-menu, term-mode-map, term-raw-map, term-raw-escape-map) + (term-terminal-menu): Move initialization into declaration. + (term-escape-char): Let the user set it in her .emacs. + * progmodes/sh-script.el: Use post-self-insert-hook&electric-pair-mode. Provide SMIE-based indentation (not enabled by default yet). (sh-mode-map): Don't bind electric keys. diff --git a/lisp/term.el b/lisp/term.el index 841641a9709..e6a4bc15dd6 100644 --- a/lisp/term.el +++ b/lisp/term.el @@ -622,6 +622,28 @@ executed once when the buffer is created." :type 'hook :group 'term) +(defvar term-signals-menu + (let ((map (make-sparse-keymap "Signals"))) + (define-key map [eof] + '(menu-item "EOF" term-send-eof + :help "Send an EOF to the current buffer's process")) + (define-key map [kill] + '(menu-item "KILL" term-kill-subjob + :help "Send kill signal to the current subjob")) + (define-key map [quit] + '(menu-item "QUIT" term-quit-subjob + :help "Send quit signal to the current subjob.")) + (define-key map [cont] + '(menu-item "CONT" term-continue-subjob + :help "Send CONT signal to process buffer's process group")) + (define-key map [stop] + '(menu-item "STOP" term-stop-subjob + :help "Stop the current subjob")) + (define-key map [brk] + '(menu-item "BREAK" term-interrupt-subjob + :help "Interrupt the current subjob")) + (cons "Signals" map))) + (defvar term-mode-map (let ((map (make-sparse-keymap))) (define-key map "\ep" 'term-previous-input) @@ -653,28 +675,66 @@ executed once when the buffer is created." (define-key map "\C-c\C-j" 'term-line-mode) (define-key map "\C-c\C-q" 'term-pager-toggle) - ;; ;; completion: - ;; (define-key map [menu-bar completion] - ;; (cons "Complete" (make-sparse-keymap "Complete"))) - ;; (define-key map [menu-bar completion complete-expand] - ;; '("Expand File Name" . term-replace-by-expanded-filename)) - ;; (define-key map [menu-bar completion complete-listing] - ;; '("File Completion Listing" . term-dynamic-list-filename-completions)) - ;; (define-key map [menu-bar completion complete-file] - ;; '("Complete File Name" . term-dynamic-complete-filename)) - ;; (define-key map [menu-bar completion complete] - ;; '("Complete Before Point" . term-dynamic-complete)) - ;; ;; Put them in the menu bar: - ;; (setq menu-bar-final-items (append '(terminal completion inout signals) - ;; menu-bar-final-items)) + ;; completion: (line mode only) + (let ((completion-menu (make-sparse-keymap "Complete"))) + (define-key map [menu-bar completion] + (cons "Complete" completion-menu)) + (define-key completion-menu [complete-expand] + '("Expand File Name" . term-replace-by-expanded-filename)) + (define-key completion-menu [complete-listing] + '("File Completion Listing" . term-dynamic-list-filename-completions)) + (define-key completion-menu [complete-file] + '("Complete File Name" . term-dynamic-complete-filename)) + (define-key completion-menu [complete] + '("Complete Before Point" . term-dynamic-complete))) + + ;; Input history: (line mode only) + (let ((inout-menu (make-sparse-keymap "In/Out"))) + (define-key map [menu-bar inout] + (cons "In/Out" inout-menu)) + (define-key inout-menu [kill-output] + '("Kill Current Output Group" . term-kill-output)) + (define-key inout-menu [next-prompt] + '("Forward Output Group" . term-next-prompt)) + (define-key inout-menu [previous-prompt] + '("Backward Output Group" . term-previous-prompt)) + (define-key inout-menu [show-maximum-output] + '("Show Maximum Output" . term-show-maximum-output)) + (define-key inout-menu [show-output] + '("Show Current Output Group" . term-show-output)) + (define-key inout-menu [kill-input] + '("Kill Current Input" . term-kill-input)) + (define-key inout-menu [copy-input] + '("Copy Old Input" . term-copy-old-input)) + (define-key inout-menu [forward-matching-history] + '("Forward Matching Input..." . term-forward-matching-input)) + (define-key inout-menu [backward-matching-history] + '("Backward Matching Input..." . term-backward-matching-input)) + (define-key inout-menu [next-matching-history] + '("Next Matching Input..." . term-next-matching-input)) + (define-key inout-menu [previous-matching-history] + '("Previous Matching Input..." . term-previous-matching-input)) + (define-key inout-menu [next-matching-history-from-input] + '("Next Matching Current Input" . term-next-matching-input-from-input)) + (define-key inout-menu [previous-matching-history-from-input] + '("Previous Matching Current Input" . + term-previous-matching-input-from-input)) + (define-key inout-menu [next-history] + '("Next Input" . term-next-input)) + (define-key inout-menu [previous-history] + '("Previous Input" . term-previous-input)) + (define-key inout-menu [list-history] + '("List Input History" . term-dynamic-list-input-ring)) + (define-key inout-menu [expand-history] + '("Expand History Before Point" . term-replace-by-expanded-history))) + + (define-key map [menu-bar signals] term-signals-menu) + map)) -(defvar term-raw-map nil - "Keyboard map for sending characters directly to the inferior process.") (defvar term-escape-char nil "Escape character for char sub-mode of term mode. Do not change it directly; use `term-set-escape-char' instead.") -(defvar term-raw-escape-map nil) (defvar term-pager-break-map nil) @@ -713,9 +773,6 @@ Buffer local variable.") (defmacro term-handling-pager () 'term-pager-old-local-map) (defmacro term-using-alternate-sub-buffer () 'term-saved-home-marker) -(defvar term-signals-menu) -(defvar term-terminal-menu) - ;; Let's silence the byte-compiler -mm (defvar term-ansi-at-host nil) (defvar term-ansi-at-dir nil) @@ -770,112 +827,82 @@ is buffer-local." :group 'term :type 'integer) -(when (featurep 'xemacs) - (defvar term-terminal-menu - '("Terminal" - [ "Character mode" term-char-mode (term-in-line-mode)] - [ "Line mode" term-line-mode (term-in-char-mode)] - [ "Enable paging" term-pager-toggle (not term-pager-count)] - [ "Disable paging" term-pager-toggle term-pager-count]))) - -;; Menu bars: -(unless (featurep 'xemacs) - ;; terminal: - (let (newmap) - (setq newmap (make-sparse-keymap "Terminal")) - (define-key newmap [terminal-pager-enable] - '(menu-item "Enable paging" term-fake-pager-enable - :help "Enable paging feature")) - (define-key newmap [terminal-pager-disable] - '(menu-item "Disable paging" term-fake-pager-disable - :help "Disable paging feature")) - (define-key newmap [terminal-char-mode] - '(menu-item "Character mode" term-char-mode - :help "Switch to char (raw) sub-mode of term mode")) - (define-key newmap [terminal-line-mode] - '(menu-item "Line mode" term-line-mode - :help "Switch to line (cooked) sub-mode of term mode")) - (setq term-terminal-menu (cons "Terminal" newmap)) - - ;; completion: (line mode only) - (defvar term-completion-menu (make-sparse-keymap "Complete")) - (define-key term-mode-map [menu-bar completion] - (cons "Complete" term-completion-menu)) - (define-key term-completion-menu [complete-expand] - '("Expand File Name" . term-replace-by-expanded-filename)) - (define-key term-completion-menu [complete-listing] - '("File Completion Listing" . term-dynamic-list-filename-completions)) - (define-key term-completion-menu [menu-bar completion complete-file] - '("Complete File Name" . term-dynamic-complete-filename)) - (define-key term-completion-menu [menu-bar completion complete] - '("Complete Before Point" . term-dynamic-complete)) - - ;; Input history: (line mode only) - (defvar term-inout-menu (make-sparse-keymap "In/Out")) - (define-key term-mode-map [menu-bar inout] - (cons "In/Out" term-inout-menu)) - (define-key term-inout-menu [kill-output] - '("Kill Current Output Group" . term-kill-output)) - (define-key term-inout-menu [next-prompt] - '("Forward Output Group" . term-next-prompt)) - (define-key term-inout-menu [previous-prompt] - '("Backward Output Group" . term-previous-prompt)) - (define-key term-inout-menu [show-maximum-output] - '("Show Maximum Output" . term-show-maximum-output)) - (define-key term-inout-menu [show-output] - '("Show Current Output Group" . term-show-output)) - (define-key term-inout-menu [kill-input] - '("Kill Current Input" . term-kill-input)) - (define-key term-inout-menu [copy-input] - '("Copy Old Input" . term-copy-old-input)) - (define-key term-inout-menu [forward-matching-history] - '("Forward Matching Input..." . term-forward-matching-input)) - (define-key term-inout-menu [backward-matching-history] - '("Backward Matching Input..." . term-backward-matching-input)) - (define-key term-inout-menu [next-matching-history] - '("Next Matching Input..." . term-next-matching-input)) - (define-key term-inout-menu [previous-matching-history] - '("Previous Matching Input..." . term-previous-matching-input)) - (define-key term-inout-menu [next-matching-history-from-input] - '("Next Matching Current Input" . term-next-matching-input-from-input)) - (define-key term-inout-menu [previous-matching-history-from-input] - '("Previous Matching Current Input" . - term-previous-matching-input-from-input)) - (define-key term-inout-menu [next-history] - '("Next Input" . term-next-input)) - (define-key term-inout-menu [previous-history] - '("Previous Input" . term-previous-input)) - (define-key term-inout-menu [list-history] - '("List Input History" . term-dynamic-list-input-ring)) - (define-key term-inout-menu [expand-history] - '("Expand History Before Point" . term-replace-by-expanded-history)) - - ;; Signals - (setq newmap (make-sparse-keymap "Signals")) - (define-key term-mode-map [menu-bar signals] - (setq term-signals-menu (cons "Signals" newmap))) - (define-key newmap [eof] - '(menu-item "EOF" term-send-eof - :help "Send an EOF to the current buffer's process")) - (define-key newmap [kill] - '(menu-item "KILL" term-kill-subjob - :help "Send kill signal to the current subjob")) - (define-key newmap [quit] - '(menu-item "QUIT" term-quit-subjob - :help "Send quit signal to the current subjob.")) - (define-key newmap [cont] - '(menu-item "CONT" term-continue-subjob - :help "Send CONT signal to process buffer's process group")) - (define-key newmap [stop] - '(menu-item "STOP" term-stop-subjob - :help "Stop the current subjob")) - (define-key newmap [brk] - '(menu-item "BREAK" term-interrupt-subjob - :help "Interrupt the current subjob")) - )) +(defvar term-terminal-menu + (if (featurep 'xemacs) + '("Terminal" + [ "Character mode" term-char-mode (term-in-line-mode)] + [ "Line mode" term-line-mode (term-in-char-mode)] + [ "Enable paging" term-pager-toggle (not term-pager-count)] + [ "Disable paging" term-pager-toggle term-pager-count]) + (let ((map (make-sparse-keymap "Terminal"))) + (define-key map [terminal-pager-enable] + '(menu-item "Enable paging" term-fake-pager-enable + :help "Enable paging feature")) + (define-key map [terminal-pager-disable] + '(menu-item "Disable paging" term-fake-pager-disable + :help "Disable paging feature")) + (define-key map [terminal-char-mode] + '(menu-item "Character mode" term-char-mode + :help "Switch to char (raw) sub-mode of term mode")) + (define-key map [terminal-line-mode] + '(menu-item "Line mode" term-line-mode + :help "Switch to line (cooked) sub-mode of term mode")) + (cons "Terminal" map)))) ;; Set up term-raw-map, etc. +(defvar term-raw-map + (let* ((map (make-keymap)) + (esc-map (make-keymap)) + (i 0)) + (while (< i 128) + (define-key map (make-string 1 i) 'term-send-raw) + ;; Avoid O and [. They are used in escape sequences for various keys. + (unless (or (eq i ?O) (eq i 91)) + (define-key esc-map (make-string 1 i) 'term-send-raw-meta)) + (setq i (1+ i))) + (define-key map [remap self-insert-command] 'term-send-raw) + (define-key map "\e" esc-map) + + ;; Added nearly all the 'gray keys' -mm + + (if (featurep 'xemacs) + (define-key map [button2] 'term-mouse-paste) + (define-key map [mouse-2] 'term-mouse-paste) + (define-key map [menu-bar terminal] term-terminal-menu) + (define-key map [menu-bar signals] term-signals-menu)) + (define-key map [up] 'term-send-up) + (define-key map [down] 'term-send-down) + (define-key map [right] 'term-send-right) + (define-key map [left] 'term-send-left) + (define-key map [delete] 'term-send-del) + (define-key map [deletechar] 'term-send-del) + (define-key map [backspace] 'term-send-backspace) + (define-key map [home] 'term-send-home) + (define-key map [end] 'term-send-end) + (define-key map [insert] 'term-send-insert) + (define-key map [S-prior] 'scroll-down) + (define-key map [S-next] 'scroll-up) + (define-key map [S-insert] 'term-paste) + (define-key map [prior] 'term-send-prior) + (define-key map [next] 'term-send-next) + map) + "Keyboard map for sending characters directly to the inferior process.") + +(defvar term-raw-escape-map + (let ((map (make-sparse-keymap))) + (set-keymap-parent map 'Control-X-prefix) + ;; Define standard bindings in term-raw-escape-map. + (define-key map "\C-v" (lookup-key (current-global-map) "\C-v")) + (define-key map "\C-u" (lookup-key (current-global-map) "\C-u")) + (define-key map "\C-q" 'term-pager-toggle) + ;; The keybinding for term-char-mode is needed by the menubar code. + (define-key map "\C-k" 'term-char-mode) + (define-key map "\C-j" 'term-line-mode) + ;; It's convenient to have execute-extended-command here. + (define-key map [?\M-x] 'execute-extended-command) + map)) + (defun term-set-escape-char (key) "Change `term-escape-char' and keymaps that depend on it." (when term-escape-char @@ -883,59 +910,11 @@ is buffer-local." (define-key term-raw-map term-escape-char 'term-send-raw)) (setq term-escape-char (vector key)) (define-key term-raw-map term-escape-char term-raw-escape-map) - ;; Define standard bindings in term-raw-escape-map - (define-key term-raw-escape-map "\C-v" - (lookup-key (current-global-map) "\C-v")) - (define-key term-raw-escape-map "\C-u" - (lookup-key (current-global-map) "\C-u")) ;; FIXME: If we later call term-set-escape-char again with another key, ;; we should undo this binding. - (define-key term-raw-escape-map term-escape-char 'term-send-raw) - (define-key term-raw-escape-map "\C-q" 'term-pager-toggle) - ;; The keybinding for term-char-mode is needed by the menubar code. - (define-key term-raw-escape-map "\C-k" 'term-char-mode) - (define-key term-raw-escape-map "\C-j" 'term-line-mode) - ;; It's convenient to have execute-extended-command here. - (define-key term-raw-escape-map [?\M-x] 'execute-extended-command)) + (define-key term-raw-escape-map term-escape-char 'term-send-raw)) -(let* ((map (make-keymap)) - (esc-map (make-keymap)) - (i 0)) - (while (< i 128) - (define-key map (make-string 1 i) 'term-send-raw) - ;; Avoid O and [. They are used in escape sequences for various keys. - (unless (or (eq i ?O) (eq i 91)) - (define-key esc-map (make-string 1 i) 'term-send-raw-meta)) - (setq i (1+ i))) - (define-key map [remap self-insert-command] 'term-send-raw) - (define-key map "\e" esc-map) - (setq term-raw-map map) - (setq term-raw-escape-map (copy-keymap 'Control-X-prefix)) - - ;; Added nearly all the 'gray keys' -mm - - (if (featurep 'xemacs) - (define-key term-raw-map [button2] 'term-mouse-paste) - (define-key term-raw-map [mouse-2] 'term-mouse-paste) - (define-key term-raw-map [menu-bar terminal] term-terminal-menu) - (define-key term-raw-map [menu-bar signals] term-signals-menu)) - (define-key term-raw-map [up] 'term-send-up) - (define-key term-raw-map [down] 'term-send-down) - (define-key term-raw-map [right] 'term-send-right) - (define-key term-raw-map [left] 'term-send-left) - (define-key term-raw-map [delete] 'term-send-del) - (define-key term-raw-map [deletechar] 'term-send-del) - (define-key term-raw-map [backspace] 'term-send-backspace) - (define-key term-raw-map [home] 'term-send-home) - (define-key term-raw-map [end] 'term-send-end) - (define-key term-raw-map [insert] 'term-send-insert) - (define-key term-raw-map [S-prior] 'scroll-down) - (define-key term-raw-map [S-next] 'scroll-up) - (define-key term-raw-map [S-insert] 'term-paste) - (define-key term-raw-map [prior] 'term-send-prior) - (define-key term-raw-map [next] 'term-send-next)) - -(term-set-escape-char ?\C-c) +(term-set-escape-char (or term-escape-char ?\C-c)) (defvar overflow-newline-into-fringe) From dbacb4bd91bc53a168dea2c4d0bf2c90a301e4dd Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Fri, 11 May 2012 13:11:03 -0400 Subject: [PATCH 439/564] * lisp/minibuffer.el (completion--twq-all): Again, allow case differences. --- lisp/ChangeLog | 2 ++ lisp/minibuffer.el | 7 ++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 246906df9f9..f54e2da78f1 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2012-05-11 Stefan Monnier + * minibuffer.el (completion--twq-all): Again, allow case differences. + * term.el: Move keymap initialization code to be more idiomatic. (term-signals-menu, term-mode-map, term-raw-map, term-raw-escape-map) (term-terminal-menu): Move initialization into declaration. diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index f468db9768a..60a70fbcce7 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -519,9 +519,10 @@ for use at QPOS." (`(,qfullpos . ,qfun) (funcall requote (+ boundary (length prefix)) string)) (qfullprefix (substring string 0 qfullpos)) - (_ (assert (let ((uboundarystr (substring ustring 0 boundary))) - (equal (funcall unquote qfullprefix) - (concat uboundarystr prefix))))) + (_ (assert (eq t (compare-strings + (funcall unquote qfullprefix) nil nil + (concat (substring ustring 0 boundary) prefix) + nil nil 'ignore-case)))) (qboundary (car (funcall requote boundary string))) (_ (assert (<= qboundary qfullpos))) ;; FIXME: this split/quote/concat business messes up the carefully From c8e321795a3c7028204a05c81c3a4869103a004e Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 11 May 2012 13:13:18 -0400 Subject: [PATCH 440/564] * Makefile.in (install-arch-indep): Remove dead code. ./lisp/simpl.ele never exists in the _build_ directory, the Lisp files are always in the _source_ directory. Even if they were not, it would be wrong to install just *.el and *.elc, since there are subdirectories in lisp/. --- ChangeLog | 1 + Makefile.in | 13 ------------- 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index c6679465211..9d8a3eadec6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,7 @@ * Makefile.in (install-arch-indep): There are no more Makefile.c files. Use INSTALL_DATA for the DOC file. + Remove dead code for ./lisp that never executes. 2012-05-10 Glenn Morris diff --git a/Makefile.in b/Makefile.in index ac6ad2b5ac5..844d92d228c 100644 --- a/Makefile.in +++ b/Makefile.in @@ -588,19 +588,6 @@ install-arch-indep: mkdir info install-etc if test "`echo DOC-*`" != "DOC-*"; then rm -f DOC; fi); \ else true; fi -unset CDPATH; \ - if [ -r ./lisp ] \ - && [ -r ./lisp/simple.el ] \ - && [ x`(cd ./lisp; /bin/pwd)` != x`(cd $(DESTDIR)${lispdir}; /bin/pwd)` ] \ - && [ x`(cd ${srcdir}/lisp; /bin/pwd)` != x`(cd ./lisp; /bin/pwd)` ]; \ - then \ - echo "Copying lisp/*.el and lisp/*.elc to $(DESTDIR)${lispdir} ..." ; \ - (cd lisp; tar -chf - *.el *.elc) \ - |(cd $(DESTDIR)${lispdir}; umask 022; tar -xvf - && cat > /dev/null) || exit 1; \ - (cd $(DESTDIR)${lispdir}; \ - $(set_installuser); \ - find . -exec chown $${installuser} {} ';') ; \ - else true; fi - -unset CDPATH; \ if [ -n "${GZIP_PROG}" ]; \ then \ echo "Compressing *.el ..." ; \ From aa0382bd67c77578fc2e589ba802f5f1330a4a0a Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Fri, 11 May 2012 13:31:30 -0400 Subject: [PATCH 441/564] * lisp/dabbrev.el (dabbrev-expand): Make "no expansion found" a user-error. --- lisp/ChangeLog | 2 ++ lisp/dabbrev.el | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f54e2da78f1..467e7f06457 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2012-05-11 Stefan Monnier + * dabbrev.el (dabbrev-expand): Make "no expansion found" a user-error. + * minibuffer.el (completion--twq-all): Again, allow case differences. * term.el: Move keymap initialization code to be more idiomatic. diff --git a/lisp/dabbrev.el b/lisp/dabbrev.el index 87a03fd24da..ab886edac25 100644 --- a/lisp/dabbrev.el +++ b/lisp/dabbrev.el @@ -527,8 +527,8 @@ See also `dabbrev-abbrev-char-regexp' and \\[dabbrev-completion]." (search-backward old) (insert abbrev) (delete-region (point) (+ (point) (length old))))) - (error "No%s dynamic expansion for `%s' found" - (if old " further" "") abbrev)) + (user-error "No%s dynamic expansion for `%s' found" + (if old " further" "") abbrev)) (t (if (not (or (eq dabbrev--last-buffer dabbrev--last-buffer-found) (minibuffer-window-active-p (selected-window)))) From 2171cea5fcc5537bf6179284bdce554d80982594 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Fri, 11 May 2012 16:05:19 -0400 Subject: [PATCH 442/564] * lisp/progmodes/prolog.el: Use SMIE. Cleanup regexp setup. (prolog-upper-case-string, prolog-lower-case-string) (prolog-atom-char-regexp, prolog-atom-regexp): Initialize in defconst. (prolog-use-smie, prolog-smie-grammar): New vars. (prolog-smie-forward-token, prolog-smie-backward-token) (prolog-smie-rules): New funs. (prolog-comment-indent): Remove. (prolog-mode-variables): Use default comment indentation instead. Setup SMIE. (prolog-build-case-strings, prolog-set-atom-regexps): Remove. (prolog-mode): Don't call them any more. (prolog-electric-colon, prolog-electric-dash) (prolog-edit-menu-insert-move): Use indent-according-to-mode. --- lisp/ChangeLog | 14 ++ lisp/progmodes/prolog.el | 429 +++++++++++++++++++++++---------------- 2 files changed, 269 insertions(+), 174 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 467e7f06457..9fe7106c93c 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,19 @@ 2012-05-11 Stefan Monnier + * progmodes/prolog.el: Use SMIE. Cleanup regexp setup. + (prolog-upper-case-string, prolog-lower-case-string) + (prolog-atom-char-regexp, prolog-atom-regexp): Initialize in defconst. + (prolog-use-smie, prolog-smie-grammar): New vars. + (prolog-smie-forward-token, prolog-smie-backward-token) + (prolog-smie-rules): New funs. + (prolog-comment-indent): Remove. + (prolog-mode-variables): Use default comment indentation instead. + Setup SMIE. + (prolog-build-case-strings, prolog-set-atom-regexps): Remove. + (prolog-mode): Don't call them any more. + (prolog-electric-colon, prolog-electric-dash) + (prolog-edit-menu-insert-move): Use indent-according-to-mode. + * dabbrev.el (dabbrev-expand): Make "no expansion found" a user-error. * minibuffer.el (completion--twq-all): Again, allow case differences. diff --git a/lisp/progmodes/prolog.el b/lisp/progmodes/prolog.el index 4ef6c31442d..16d85cb2d79 100644 --- a/lisp/progmodes/prolog.el +++ b/lisp/progmodes/prolog.el @@ -833,18 +833,116 @@ This is really kludgy, and unneeded (i.e. obsolete) in Emacs>=24." ) table)) (defvar prolog-mode-abbrev-table nil) -(defvar prolog-upper-case-string "" - "A string containing all upper case characters. -Set by prolog-build-case-strings.") -(defvar prolog-lower-case-string "" - "A string containing all lower case characters. -Set by prolog-build-case-strings.") -(defvar prolog-atom-char-regexp "" - "Set by prolog-set-atom-regexps.") -;; "Regexp specifying characters which constitute atoms without quoting.") -(defvar prolog-atom-regexp "" - "Set by prolog-set-atom-regexps.") +(if (eval-when-compile + (and (string-match "[[:upper:]]" "A") + (with-temp-buffer + (insert "A") (skip-chars-backward "[:upper:]") (bolp)))) + (progn + (defconst prolog-upper-case-string "[:upper:]" + "A string containing a char-range matching all upper case characters.") + (defconst prolog-lower-case-string "[:lower:]" + "A string containing a char-range matching all lower case characters.")) + + ;; GNU Emacs compatibility: GNU Emacs does not differentiate between + ;; ints and chars, or at least these two are interchangeable. + (defalias 'prolog-int-to-char + (if (fboundp 'int-to-char) #'int-to-char #'identity)) + + (defalias 'prolog-char-to-int + (if (fboundp 'char-to-int) #'char-to-int #'identity)) + + (defun prolog-ints-intervals (ints) + "Return a list of intervals (from . to) covering INTS." + (when ints + (setq ints (sort ints '<)) + (let ((prev (car ints)) + (interval-start (car ints)) + intervals) + (while ints + (let ((next (car ints))) + (when (> next (1+ prev)) ; start of new interval + (setq intervals (cons (cons interval-start prev) intervals)) + (setq interval-start next)) + (setq prev next) + (setq ints (cdr ints)))) + (setq intervals (cons (cons interval-start prev) intervals)) + (reverse intervals)))) + + (defun prolog-dash-letters (string) + "Return a condensed regexp covering all letters in STRING." + (let ((intervals (prolog-ints-intervals (mapcar #'prolog-char-to-int + (string-to-list string)))) + codes) + (while intervals + (let* ((i (car intervals)) + (from (car i)) + (to (cdr i)) + (c (cond ((= from to) `(,from)) + ((= (1+ from) to) `(,from ,to)) + (t `(,from ?- ,to))))) + (setq codes (cons c codes))) + (setq intervals (cdr intervals))) + (apply 'concat (reverse codes)))) + + (let ((up_string "") + (low_string "")) + ;; Use `map-char-table' if it is defined. Otherwise enumerate all + ;; numbers between 0 and 255. `map-char-table' is probably safer. + ;; + ;; `map-char-table' causes problems under Emacs 23.0.0.1, the + ;; while loop seems to do its job well (Ryszard Szopa) + ;; + ;;(if (and (not (featurep 'xemacs)) + ;; (fboundp 'map-char-table)) + ;; (map-char-table + ;; (lambda (key value) + ;; (cond + ;; ((and + ;; (eq (prolog-int-to-char key) (downcase key)) + ;; (eq (prolog-int-to-char key) (upcase key))) + ;; ;; Do nothing if upper and lower case are the same + ;; ) + ;; ((eq (prolog-int-to-char key) (downcase key)) + ;; ;; The char is lower case + ;; (setq low_string (format "%s%c" low_string key))) + ;; ((eq (prolog-int-to-char key) (upcase key)) + ;; ;; The char is upper case + ;; (setq up_string (format "%s%c" up_string key))) + ;; )) + ;; (current-case-table)) + ;; `map-char-table' was undefined. + (let ((key 0)) + (while (< key 256) + (cond + ((and + (eq (prolog-int-to-char key) (downcase key)) + (eq (prolog-int-to-char key) (upcase key))) + ;; Do nothing if upper and lower case are the same + ) + ((eq (prolog-int-to-char key) (downcase key)) + ;; The char is lower case + (setq low_string (format "%s%c" low_string key))) + ((eq (prolog-int-to-char key) (upcase key)) + ;; The char is upper case + (setq up_string (format "%s%c" up_string key))) + ) + (setq key (1+ key)))) + ;; ) + ;; The strings are single-byte strings. + (defconst prolog-upper-case-string (prolog-dash-letters up_string) + "A string containing a char-range matching all upper case characters.") + (defconst prolog-lower-case-string (prolog-dash-letters low_string) + "A string containing a char-range matching all lower case characters.") + )) + +(defconst prolog-atom-char-regexp + (if (string-match "[[:alnum:]]" "0") + "[[:alnum:]_$]" + (format "[%s%s0-9_$]" prolog-lower-case-string prolog-upper-case-string)) + "Regexp specifying characters which constitute atoms without quoting.") +(defconst prolog-atom-regexp + (format "[%s$]%s*" prolog-lower-case-string prolog-atom-char-regexp)) (defconst prolog-left-paren "[[({]" ;FIXME: Why not \\s(? "The characters used as left parentheses for the indentation code.") @@ -887,6 +985,96 @@ Set by prolog-build-case-strings.") '(("dcg" . "-->") ("rule" . ":-") ("simplification" . "<=>") ("propagation" . "==>"))))) +;; SMIE support + +(require 'smie) + +(defvar prolog-use-smie t) + +(defun prolog-smie-forward-token () + ;; FIXME: Add support for 0', if needed after adding it to + ;; syntax-propertize-functions. + (forward-comment (point-max)) + (buffer-substring-no-properties + (point) + (progn (cond + ((looking-at "[!;]") (forward-char 1)) + ((not (zerop (skip-chars-forward "#&*+-./:<=>?@\\^`~")))) + ((not (zerop (skip-syntax-forward "w_'")))) + ;; In case of non-ASCII punctuation. + ((not (zerop (skip-syntax-forward "."))))) + (point)))) + +(defun prolog-smie-backward-token () + ;; FIXME: Add support for 0', if needed after adding it to + ;; syntax-propertize-functions. + (forward-comment (- (point-max))) + (buffer-substring-no-properties + (point) + (progn (cond + ((memq (char-before) '(?! ?\;)) (forward-char -1)) + ((not (zerop (skip-chars-backward "#&*+-./:<=>?@\\^`~")))) + ((not (zerop (skip-syntax-backward "w_'")))) + ;; In case of non-ASCII punctuation. + ((not (zerop (skip-syntax-backward "."))))) + (point)))) + +(defconst prolog-smie-grammar + ;; Rather than construct the operator levels table from the BNF, + ;; we directly provide the operator precedences from GNU Prolog's + ;; manual (7.14.10 op/3). The only problem is that GNU Prolog's + ;; manual uses precedence levels in the opposite sense (higher + ;; numbers bind less tightly) than SMIE, so we use negative numbers. + '(("." -10000 -10000) + (":-" -1200 -1200) + ("-->" -1200 -1200) + (";" -1100 -1100) + ("->" -1050 -1050) + ("," -1000 -1000) + ("\\+" -900 -900) + ("=" -700 -700) + ("\\=" -700 -700) + ("=.." -700 -700) + ("==" -700 -700) + ("\\==" -700 -700) + ("@<" -700 -700) + ("@=<" -700 -700) + ("@>" -700 -700) + ("@>=" -700 -700) + ("is" -700 -700) + ("=:=" -700 -700) + ("=\\=" -700 -700) + ("<" -700 -700) + ("=<" -700 -700) + (">" -700 -700) + (">=" -700 -700) + (":" -600 -600) + ("+" -500 -500) + ("-" -500 -500) + ("/\\" -500 -500) + ("\\/" -500 -500) + ("*" -400 -400) + ("/" -400 -400) + ("//" -400 -400) + ("rem" -400 -400) + ("mod" -400 -400) + ("<<" -400 -400) + (">>" -400 -400) + ("**" -200 -200) + ("^" -200 -200) + ;; Prefix + ;; ("+" 200 200) + ;; ("-" 200 200) + ;; ("\\" 200 200) + (:smie-closer-alist (t . ".")) + ) + "Precedence levels of infix operators.") + +(defun prolog-smie-rules (kind token) + (pcase (cons kind token) + (`(:elem . basic) prolog-indent-width) + (`(:after . ".") '(column . 0)) ;; To work around smie-closer-alist. + (`(:after . ,(or `":-" `"->" `"-->")) prolog-indent-width))) ;;------------------------------------------------------------------- @@ -959,7 +1147,6 @@ VERSION is of the format (Major . Minor)" (set (make-local-variable 'paragraph-separate) paragraph-start) (set (make-local-variable 'paragraph-ignore-fill-prefix) t) (set (make-local-variable 'normal-auto-fill-function) 'prolog-do-auto-fill) - (set (make-local-variable 'indent-line-function) 'prolog-indent-line) (set (make-local-variable 'comment-start) "%") (set (make-local-variable 'comment-end) "") (set (make-local-variable 'comment-add) 1) @@ -968,7 +1155,6 @@ VERSION is of the format (Major . Minor)" ;; inside quoted atoms or strings (format "^\\(\\(%s\\|%s\\|[^\n\'\"%%]\\)*\\)\\(/\\*+ *\\|%%+ *\\)" prolog-quoted-atom-regexp prolog-string-regexp)) - (set (make-local-variable 'comment-indent-function) 'prolog-comment-indent) (set (make-local-variable 'parens-require-spaces) nil) ;; Initialize Prolog system specific variables (dolist (var '(prolog-keywords prolog-types prolog-mode-specificators @@ -984,6 +1170,13 @@ VERSION is of the format (Major . Minor)" '(prolog-font-lock-keywords nil nil ((?_ . "w")))) (set (make-local-variable 'syntax-propertize-function) prolog-syntax-propertize-function) + + (if prolog-use-smie + ;; Setup SMIE. + (smie-setup prolog-smie-grammar #'prolog-smie-rules + :forward-token #'prolog-smie-forward-token + :backward-token #'prolog-smie-backward-token) + (set (make-local-variable 'indent-line-function) 'prolog-indent-line)) ) (defun prolog-mode-keybindings-common (map) @@ -1096,11 +1289,9 @@ if that value is non-nil." ((eq prolog-system 'gnu) "[GNU]") (t "")))) (prolog-mode-variables) - (prolog-build-case-strings) - (prolog-set-atom-regexps) (dolist (ar prolog-align-rules) (add-to-list 'align-rules-list ar)) - ;; imenu entry moved to the appropriate hook for consistency + ;; `imenu' entry moved to the appropriate hook for consistency. ;; Load SICStus debugger if suitable (if (and (eq prolog-system 'sicstus) @@ -1614,7 +1805,8 @@ For use with the `compilation-parse-errors-function' variable." limit t) (setq filepath (match-string 2))) - ;; ###### Does this work with SICStus under Windows (i.e. backslashes and stuff?) + ;; ###### Does this work with SICStus under Windows + ;; (i.e. backslashes and stuff?) (if (string-match "\\(.*/\\)\\([^/]*\\)$" filepath) (progn (setq dir (match-string 1 filepath)) @@ -1838,7 +2030,8 @@ Argument BOUND is a buffer position limiting searching." (defface prolog-builtin-face '((((class color) (background light)) (:foreground "Purple")) (((class color) (background dark)) (:foreground "Cyan")) - (((class grayscale) (background light)) (:foreground "LightGray" :bold t)) + (((class grayscale) (background light)) + :foreground "LightGray" :bold t) (((class grayscale) (background dark)) (:foreground "DimGray" :bold t)) (t (:bold t))) "Face name to use for compiler warnings." @@ -2093,20 +2286,6 @@ rigidly along with this one (not yet)." (prolog-insert-spaces-after-paren)) )) -(defun prolog-comment-indent () - "Compute prolog comment indentation." - ;; FIXME: Only difference with default behavior is that %%% is not - ;; flushed to column 0 but just left where the user put it. - (cond ((looking-at "%%%") (prolog-indentation-level-of-line)) - ((looking-at "%%") (prolog-indent-level)) - (t - (save-excursion - (skip-chars-backward " \t") - ;; Insert one space at least, except at left margin. - (max (+ (current-column) (if (bolp) 0 1)) - comment-column))) - )) - (defun prolog-indent-level () "Compute prolog indentation level." (save-excursion @@ -3200,7 +3379,8 @@ When called with prefix argument ARG, disable zipping instead." (save-excursion (let ((state (prolog-clause-info)) (object (prolog-in-object))) - (if (or (equal (nth 0 state) "") (equal (prolog-in-string-or-comment) 'cmt)) + (if (or (equal (nth 0 state) "") + (equal (prolog-in-string-or-comment) 'cmt)) nil (if (and (eq prolog-system 'sicstus) object) @@ -3229,6 +3409,7 @@ STRING should be given if the last search was by `string-match' on STRING." (defun prolog-pred-start () "Return the starting point of the first clause of the current predicate." + ;; FIXME: Use SMIE. (save-excursion (goto-char (prolog-clause-start)) ;; Find first clause, unless it was a directive @@ -3261,8 +3442,9 @@ STRING should be given if the last search was by `string-match' on STRING." (defun prolog-pred-end () "Return the position at the end of the last clause of the current predicate." + ;; FIXME: Use SMIE. (save-excursion - (goto-char (prolog-clause-end)) ; if we are before the first predicate + (goto-char (prolog-clause-end)) ; If we are before the first predicate. (goto-char (prolog-clause-start)) (let* ((pinfo (prolog-clause-info)) (predname (nth 0 pinfo)) @@ -3517,6 +3699,7 @@ If already at the end of clause, move to next clause." (defun prolog-beginning-of-predicate () "Go to the nearest beginning of predicate before current point. Return the final point or nil if no such a beginning was found." + ;; FIXME: Hook into beginning-of-defun. (interactive) (let ((op (point)) (pos (prolog-pred-start))) @@ -3536,6 +3719,7 @@ Return the final point or nil if no such a beginning was found." (defun prolog-end-of-predicate () "Go to the end of the current predicate." + ;; FIXME: Hook into end-of-defun. (interactive) (let ((op (point))) (goto-char (prolog-pred-end)) @@ -3657,7 +3841,7 @@ a new comment is created." "Delete preceding character or whitespace. If `prolog-hungry-delete-key-flag' is non-nil, then all preceding whitespace is consumed. If however an ARG is supplied, or `prolog-hungry-delete-key-flag' is -nil, or point is inside a literal then the function in the variable +nil, or point is inside a literal then the function `backward-delete-char' is called." (interactive "P") (if (or (not prolog-hungry-delete-key-flag) @@ -3677,6 +3861,7 @@ nil, or point is inside a literal then the function in the variable (defun prolog-electric-if-then-else (arg) "If `prolog-electric-if-then-else-flag' is non-nil, indent if-then-else constructs. Bound to the >, ; and ( keys." + ;; FIXME: Use post-self-insert-hook or electric-indent-mode. (interactive "P") (self-insert-command (prefix-numeric-value arg)) (if prolog-electric-if-then-else-flag (prolog-insert-spaces-after-paren))) @@ -3686,6 +3871,7 @@ Bound to the >, ; and ( keys." That is, insert space (if appropriate), `:-' and newline if colon is pressed at the end of a line that starts in the first column (i.e., clause heads)." + ;; FIXME: Use post-self-insert-hook. (interactive "P") (if (and prolog-electric-colon-flag (null arg) @@ -3696,7 +3882,7 @@ heads)." (unless (save-excursion (backward-char 1) (looking-at "\\s ")) (insert " ")) (insert ":-\n") - (prolog-indent-line)) + (indent-according-to-mode)) (self-insert-command (prefix-numeric-value arg)))) (defun prolog-electric-dash (arg) @@ -3704,6 +3890,7 @@ heads)." that is, insert space (if appropriate), `-->' and newline if dash is pressed at the end of a line that starts in the first column (i.e., DCG heads)." + ;; FIXME: Use post-self-insert-hook. (interactive "P") (if (and prolog-electric-dash-flag (null arg) @@ -3714,7 +3901,7 @@ heads)." (unless (save-excursion (backward-char 1) (looking-at "\\s ")) (insert " ")) (insert "-->\n") - (prolog-indent-line)) + (indent-according-to-mode)) (self-insert-command (prefix-numeric-value arg)))) (defun prolog-electric-dot (arg) @@ -3729,6 +3916,7 @@ When invoked at the beginning of line, insert a head of a new clause of the current predicate. When called with prefix argument ARG, insert just dot." + ;; FIXME: Use post-self-insert-hook. (interactive "P") ;; Check for situations when the electricity should not be active (if (or (not prolog-electric-dot-flag) @@ -3788,6 +3976,7 @@ If `prolog-electric-underscore-flag' is non-nil and the point is on a variable then replace the variable with underscore and skip the following comma and whitespace, if any. If the point is not on a variable then insert underscore." + ;; FIXME: Use post-self-insert-hook. (interactive) (if prolog-electric-underscore-flag (let (;start @@ -3862,144 +4051,36 @@ PREFIX is the prefix of the search regexp." (backward-char))) ))) +;;(defun prolog-regexp-dash-continuous-chars (chars) +;; (let ((ints (mapcar #'prolog-char-to-int (string-to-list chars))) +;; (beg 0) +;; (end 0)) +;; (if (null ints) +;; chars +;; (while (and (< (+ beg 1) (length chars)) +;; (not (or (= (+ (nth beg ints) 1) (nth (+ beg 1) ints)) +;; (= (nth beg ints) (nth (+ beg 1) ints))))) +;; (setq beg (+ beg 1))) +;; (setq beg (+ beg 1) +;; end beg) +;; (while (and (< (+ end 1) (length chars)) +;; (or (= (+ (nth end ints) 1) (nth (+ end 1) ints)) +;; (= (nth end ints) (nth (+ end 1) ints)))) +;; (setq end (+ end 1))) +;; (if (equal (substring chars end) "") +;; (substring chars 0 beg) +;; (concat (substring chars 0 beg) "-" +;; (prolog-regexp-dash-continuous-chars (substring chars end)))) +;; ))) -(defun prolog-set-atom-regexps () - "Set the `prolog-atom-char-regexp' and `prolog-atom-regexp' variables. -Must be called after `prolog-build-case-strings'." - (setq prolog-atom-char-regexp - (format "[%s%s0-9_$]" - ;; FIXME: why not a-zA-Z? - prolog-lower-case-string - prolog-upper-case-string)) - (setq prolog-atom-regexp - (format "[%s$]%s*" - prolog-lower-case-string - prolog-atom-char-regexp)) - ) +;;(defun prolog-condense-character-sets (regexp) +;; "Condense adjacent characters in character sets of REGEXP." +;; (let ((next -1)) +;; (while (setq next (string-match "\\[\\(.*?\\)\\]" regexp (1+ next))) +;; (setq regexp (replace-match (prolog-dash-letters (match-string 1 regexp)) +;; t t regexp 1)))) +;; regexp) -(defun prolog-build-case-strings () - "Set `prolog-upper-case-string' and `prolog-lower-case-string'. -Uses the current case-table for extracting the relevant information." - (let ((up_string "") - (low_string "")) - ;; Use `map-char-table' if it is defined. Otherwise enumerate all - ;; numbers between 0 and 255. `map-char-table' is probably safer. - ;; - ;; `map-char-table' causes problems under Emacs 23.0.0.1, the - ;; while loop seems to do its job well (Ryszard Szopa) - ;; - ;;(if (and (not (featurep 'xemacs)) - ;; (fboundp 'map-char-table)) - ;; (map-char-table - ;; (lambda (key value) - ;; (cond - ;; ((and - ;; (eq (prolog-int-to-char key) (downcase key)) - ;; (eq (prolog-int-to-char key) (upcase key))) - ;; ;; Do nothing if upper and lower case are the same - ;; ) - ;; ((eq (prolog-int-to-char key) (downcase key)) - ;; ;; The char is lower case - ;; (setq low_string (format "%s%c" low_string key))) - ;; ((eq (prolog-int-to-char key) (upcase key)) - ;; ;; The char is upper case - ;; (setq up_string (format "%s%c" up_string key))) - ;; )) - ;; (current-case-table)) - ;; `map-char-table' was undefined. - (let ((key 0)) - (while (< key 256) - (cond - ((and - (eq (prolog-int-to-char key) (downcase key)) - (eq (prolog-int-to-char key) (upcase key))) - ;; Do nothing if upper and lower case are the same - ) - ((eq (prolog-int-to-char key) (downcase key)) - ;; The char is lower case - (setq low_string (format "%s%c" low_string key))) - ((eq (prolog-int-to-char key) (upcase key)) - ;; The char is upper case - (setq up_string (format "%s%c" up_string key))) - ) - (setq key (1+ key)))) - ;; ) - ;; The strings are single-byte strings - (setq prolog-upper-case-string (prolog-dash-letters up_string)) - (setq prolog-lower-case-string (prolog-dash-letters low_string)) - )) - -;(defun prolog-regexp-dash-continuous-chars (chars) -; (let ((ints (mapcar #'prolog-char-to-int (string-to-list chars))) -; (beg 0) -; (end 0)) -; (if (null ints) -; chars -; (while (and (< (+ beg 1) (length chars)) -; (not (or (= (+ (nth beg ints) 1) (nth (+ beg 1) ints)) -; (= (nth beg ints) (nth (+ beg 1) ints))))) -; (setq beg (+ beg 1))) -; (setq beg (+ beg 1) -; end beg) -; (while (and (< (+ end 1) (length chars)) -; (or (= (+ (nth end ints) 1) (nth (+ end 1) ints)) -; (= (nth end ints) (nth (+ end 1) ints)))) -; (setq end (+ end 1))) -; (if (equal (substring chars end) "") -; (substring chars 0 beg) -; (concat (substring chars 0 beg) "-" -; (prolog-regexp-dash-continuous-chars (substring chars end)))) -; ))) - -(defun prolog-ints-intervals (ints) - "Return a list of intervals (from . to) covering INTS." - (when ints - (setq ints (sort ints '<)) - (let ((prev (car ints)) - (interval-start (car ints)) - intervals) - (while ints - (let ((next (car ints))) - (when (> next (1+ prev)) ; start of new interval - (setq intervals (cons (cons interval-start prev) intervals)) - (setq interval-start next)) - (setq prev next) - (setq ints (cdr ints)))) - (setq intervals (cons (cons interval-start prev) intervals)) - (reverse intervals)))) - -(defun prolog-dash-letters (string) - "Return a condensed regexp covering all letters in STRING." - (let ((intervals (prolog-ints-intervals (mapcar #'prolog-char-to-int - (string-to-list string)))) - codes) - (while intervals - (let* ((i (car intervals)) - (from (car i)) - (to (cdr i)) - (c (cond ((= from to) `(,from)) - ((= (1+ from) to) `(,from ,to)) - (t `(,from ?- ,to))))) - (setq codes (cons c codes))) - (setq intervals (cdr intervals))) - (apply 'concat (reverse codes)))) - -;(defun prolog-condense-character-sets (regexp) -; "Condense adjacent characters in character sets of REGEXP." -; (let ((next -1)) -; (while (setq next (string-match "\\[\\(.*?\\)\\]" regexp (1+ next))) -; (setq regexp (replace-match (prolog-dash-letters (match-string 1 regexp)) -; t t regexp 1)))) -; regexp) - -;; GNU Emacs compatibility: GNU Emacs does not differentiate between -;; ints and chars, or at least these two are interchangeable. -(defalias 'prolog-int-to-char - (if (fboundp 'int-to-char) #'int-to-char #'identity)) - -(defalias 'prolog-char-to-int - (if (fboundp 'char-to-int) #'char-to-int #'identity)) - ;;------------------------------------------------------------------- ;; Menu stuff (both for the editing buffer and for the inferior ;; prolog buffer) @@ -4110,7 +4191,7 @@ Uses the current case-table for extracting the relevant information." ["Beginning of predicate" prolog-beginning-of-predicate t] ["End of predicate" prolog-end-of-predicate t] "---" - ["Indent line" prolog-indent-line t] + ["Indent line" indent-according-to-mode t] ["Indent region" indent-region (region-exists-p)] ["Indent predicate" prolog-indent-predicate t] ["Indent buffer" prolog-indent-buffer t] From 3fe7cdc86d67dd5dcf1ce9d779b20dfec9eafb8d Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 11 May 2012 20:57:48 -0400 Subject: [PATCH 443/564] Let configure test for a suitable mkdir -p * configure.in (AC_PROG_MKDIR_P): Call it, to set MKDIR_P. (MKDEPDIR): Use $MKDIR_P. * Makefile.in (MKDIR_P): New, set by configure. (mkdir): Use $MKDIR_P. * doc/emacs/Makefile.in (MKDIR_P): New, set by configure. (mkinfodir): Use $MKDIR_P. * doc/lispintro/Makefile.in (MKDIR_P): New, set by configure. (mkinfodir): Use $MKDIR_P. * doc/lispref/Makefile.in (MKDIR_P): New, set by configure. (mkinfodir): Use $MKDIR_P. * doc/misc/Makefile.in (MKDIR_P): New, set by configure. (mkinfodir): Use $MKDIR_P. * src/Makefile.in (MKDIR_P): New, set by configure. * src/ns.mk (${ns_appdir}, ${ns_appbindir}Emacs): Use $MKDIR_P. --- ChangeLog | 7 +++++++ Makefile.in | 10 ++++------ configure.in | 7 +++---- doc/emacs/ChangeLog | 5 +++++ doc/emacs/Makefile.in | 8 ++++---- doc/lispintro/ChangeLog | 5 +++++ doc/lispintro/Makefile.in | 4 +++- doc/lispref/ChangeLog | 5 +++++ doc/lispref/Makefile.in | 4 +++- doc/misc/ChangeLog | 7 ++++++- doc/misc/Makefile.in | 4 +++- src/ChangeLog | 5 +++++ src/Makefile.in | 3 ++- src/ns.mk | 6 +++--- 14 files changed, 58 insertions(+), 22 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9d8a3eadec6..7599d2b38be 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2012-05-12 Glenn Morris + + * configure.in (AC_PROG_MKDIR_P): Call it, to set MKDIR_P. + (MKDEPDIR): Use $MKDIR_P. + * Makefile.in (MKDIR_P): New, set by configure. + (mkdir): Use $MKDIR_P. + 2012-05-11 Glenn Morris * Makefile.in (install-arch-indep): There are no more Makefile.c files. diff --git a/Makefile.in b/Makefile.in index 844d92d228c..0a62875c977 100644 --- a/Makefile.in +++ b/Makefile.in @@ -229,7 +229,7 @@ gamedir=@gamedir@ # Note that if the system does not provide a suitable install, # configure will use build-aux/install-sh. Annoyingly, it does # not use an absolute path. So we must take care to always run -# INSTALL-type commands from the top-level directory. +# INSTALL-type commands from the directory containing the Makefile. # This explains (I think) the cd thisdir seen in several install rules. INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -237,6 +237,7 @@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_INFO = @INSTALL_INFO@ # By default, we uphold the dignity of our programs. INSTALL_STRIP = +MKDIR_P = @MKDIR_P@ # We use gzip to compress installed .el files. GZIP_PROG = @GZIP_PROG@ @@ -659,10 +660,7 @@ install-leim: leim/Makefile mkdir install-strip: $(MAKE) $(MFLAGS) INSTALL_STRIP=-s install -### Build all the directories we're going to install Emacs in. Since -### we may be creating several layers of directories (for example, -### /usr/local/lib/emacs/19.0/mips-dec-ultrix4.2), we use install-sh -d -### instead of mkdir. Not all systems' mkdir programs have the `-p' flag. +### Build all the directories we're going to install Emacs in. ### We set the umask so that any created directories are world-readable. ### FIXME it would be good to warn about non-standard permissions of ### pre-existing directories, but that does not seem easy. @@ -675,7 +673,7 @@ mkdir: FRC done ; \ icondirs=`echo "$${icondirs}" | sed 's,$(srcdir)/etc/images/icons,$(DESTDIR)${icondir},g'` ; \ umask 022 ; \ - $(srcdir)/build-aux/install-sh -d $(DESTDIR)${datadir} ${COPYDESTS} \ + $(MKDIR_P) $(DESTDIR)${datadir} ${COPYDESTS} \ $(DESTDIR)${infodir} $(DESTDIR)${man1dir} \ $(DESTDIR)${bindir} $(DESTDIR)${docdir} $(DESTDIR)${libexecdir} \ $(DESTDIR)${datadir}/emacs/site-lisp \ diff --git a/configure.in b/configure.in index 1554d8e2aee..0ee180633e6 100644 --- a/configure.in +++ b/configure.in @@ -808,6 +808,7 @@ fi dnl checks for programs AC_PROG_CPP AC_PROG_INSTALL +AC_PROG_MKDIR_P if test "x$RANLIB" = x; then AC_PROG_RANLIB fi @@ -1480,10 +1481,8 @@ if test "$GCC" = yes && test "$ac_enable_autodepend" = yes; then fi if test $ac_enable_autodepend = yes; then DEPFLAGS='-MMD -MF ${DEPDIR}/$*.d -MP' - ## In parallel builds, another make might create depdir between - ## the first test and mkdir, so stick another test on the end. - ## Or use install-sh -d? mkdir -p is not portable. - MKDEPDIR='test -d ${DEPDIR} || mkdir ${DEPDIR} || test -d ${DEPDIR}' + ## MKDIR_P is documented (see AC_PROG_MKDIR_P) to be parallel-safe. + MKDEPDIR='${MKDIR_P} ${DEPDIR}' deps_frag=autodeps.mk fi fi diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index b166262a7ca..a9d45ef2a4c 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,3 +1,8 @@ +2012-05-12 Glenn Morris + + * Makefile.in (MKDIR_P): New, set by configure. + (mkinfodir): Use $MKDIR_P. + 2012-05-10 Glenn Morris * mule.texi (Disabling Multibyte): Replace the obsolete "unibyte: t" diff --git a/doc/emacs/Makefile.in b/doc/emacs/Makefile.in index 0e03efd9877..7ffbf52e94f 100644 --- a/doc/emacs/Makefile.in +++ b/doc/emacs/Makefile.in @@ -35,6 +35,8 @@ infodir = $(srcdir)/../../info # Directory with the (customized) texinfo.tex file. texinfodir = $(srcdir)/../misc +MKDIR_P = @MKDIR_P@ + INFO_EXT=@INFO_EXT@ # Options used only when making info output. # --no-split is only needed because of MS-DOS. @@ -118,10 +120,8 @@ EMACSSOURCES= \ $(EMACS_XTRA) ## This seems pointless. The info/ directory exists in both the -## repository and the release tarfiles. We do not use any -## equivalent of mkdir -p/install-sh -d, so this is not a general -## solution anyway. The second test -d is for parallel builds. -mkinfodir = @test -d ${infodir} || mkdir ${infodir} || test -d ${infodir} +## repository and the release tarfiles. +mkinfodir = @${MKDIR_P} ${infodir} .PHONY: info dvi html pdf ps diff --git a/doc/lispintro/ChangeLog b/doc/lispintro/ChangeLog index 1191b0de919..126c10c4342 100644 --- a/doc/lispintro/ChangeLog +++ b/doc/lispintro/ChangeLog @@ -1,3 +1,8 @@ +2012-05-12 Glenn Morris + + * Makefile.in (MKDIR_P): New, set by configure. + (mkinfodir): Use $MKDIR_P. + 2012-05-05 Glenn Morris * emacs-lisp-intro.texi (Making Errors): Don't mention Emacs 20. diff --git a/doc/lispintro/Makefile.in b/doc/lispintro/Makefile.in index 29f5344b8c6..bf10e5c73b7 100644 --- a/doc/lispintro/Makefile.in +++ b/doc/lispintro/Makefile.in @@ -26,6 +26,8 @@ infodir = $(srcdir)/../../info # Directory with the (customized) texinfo.tex file. texinfodir = $(srcdir)/../misc +MKDIR_P = @MKDIR_P@ + INFO_EXT=@INFO_EXT@ # Options used only when making info output. INFO_OPTS=@INFO_OPTS@ @@ -39,7 +41,7 @@ DVIPS = dvips ENVADD = TEXINPUTS="$(srcdir):$(texinfodir):$(TEXINPUTS)" \ MAKEINFO="$(MAKEINFO) $(MAKEINFO_OPTS)" -mkinfodir = @test -d ${infodir} || mkdir ${infodir} || test -d ${infodir} +mkinfodir = @${MKDIR_P} ${infodir} .PHONY: info dvi html pdf ps diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index b56164669f8..c3b50dbdcd5 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,8 @@ +2012-05-12 Glenn Morris + + * Makefile.in (MKDIR_P): New, set by configure. + (mkinfodir): Use $MKDIR_P. + 2012-05-10 Glenn Morris * loading.texi (Loading Non-ASCII): Replace the obsolete "unibyte: t" diff --git a/doc/lispref/Makefile.in b/doc/lispref/Makefile.in index f1e3fba3691..dd820d85133 100644 --- a/doc/lispref/Makefile.in +++ b/doc/lispref/Makefile.in @@ -30,6 +30,8 @@ texinfodir = $(srcdir)/../misc # Directory with emacsver.texi. emacsdir = $(srcdir)/../emacs +MKDIR_P = @MKDIR_P@ + INFO_EXT=@INFO_EXT@ # Options used only when making info output. INFO_OPTS=@INFO_OPTS@ @@ -99,7 +101,7 @@ srcs = \ $(srcdir)/gpl.texi \ $(srcdir)/doclicense.texi -mkinfodir = @test -d ${infodir} || mkdir ${infodir} || test -d ${infodir} +mkinfodir = @${MKDIR_P} ${infodir} .PHONY: info dvi pdf ps diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index 72e784f1f8d..1765c22d790 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -1,3 +1,8 @@ +2012-05-12 Glenn Morris + + * Makefile.in (MKDIR_P): New, set by configure. + (mkinfodir): Use $MKDIR_P. + 2012-05-07 Glenn Morris * forms.texi (Long Example): Update for changed location of files. @@ -8995,7 +9000,7 @@ ;; coding: utf-8 ;; End: - Copyright (C) 1993-1999, 2001-2012 Free Software Foundation, Inc. + Copyright (C) 1993-1999, 2001-2012 Free Software Foundation, Inc. This file is part of GNU Emacs. diff --git a/doc/misc/Makefile.in b/doc/misc/Makefile.in index 83bc2d7bf33..30fdbccee75 100644 --- a/doc/misc/Makefile.in +++ b/doc/misc/Makefile.in @@ -38,6 +38,8 @@ infodir=../../info ## Currently only used by efaq and calc. emacsdir = $(srcdir)/../emacs +MKDIR_P = @MKDIR_P@ + INFO_EXT=@INFO_EXT@ # Options used only when making info output. INFO_OPTS=@INFO_OPTS@ @@ -211,7 +213,7 @@ TEXI2PDF = texi2pdf ENVADD = TEXINPUTS="$(srcdir):$(emacsdir):$(TEXINPUTS)" \ MAKEINFO="$(MAKEINFO) $(MAKEINFO_OPTS)" -mkinfodir = @cd ${srcdir}; test -d ${infodir} || mkdir ${infodir} || test -d ${infodir} +mkinfodir = @${MKDIR_P} ${srcdir}/${infodir} .PHONY: info dvi pdf echo-info diff --git a/src/ChangeLog b/src/ChangeLog index 805fa7ee097..3c3f04b9238 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2012-05-12 Glenn Morris + + * Makefile.in (MKDIR_P): New, set by configure. + * ns.mk (${ns_appdir}, ${ns_appbindir}Emacs): Use $MKDIR_P. + 2012-05-11 Paul Eggert Remove unused function hourglass_started. diff --git a/src/Makefile.in b/src/Makefile.in index 32276084b3f..dd667ea60a3 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -40,6 +40,7 @@ version = @version@ # Substitute an assignment for the MAKE variable, because # BSD doesn't have it as a default. @SET_MAKE@ +MKDIR_P = @MKDIR_P@ # Don't use LIBS. configure puts stuff in it that either shouldn't be # linked with Emacs or is duplicated by the other stuff below. # LIBS = @LIBS@ @@ -284,7 +285,7 @@ CANNOT_DUMP=@CANNOT_DUMP@ DEPDIR=deps ## -MMD -MF $(DEPDIR)/$*.d if AUTO_DEPEND; else empty. DEPFLAGS=@DEPFLAGS@ -## test -d $(DEPDIR) || mkdir $(DEPDIR) (if AUTO_DEPEND); else ':'. +## ${MKDIR_P} ${DEPDIR} (if AUTO_DEPEND); else ':'. MKDEPDIR=@MKDEPDIR@ ## DO NOT use -R. There is a special hack described in lastfile.c diff --git a/src/ns.mk b/src/ns.mk index d3b5afeb99e..bdfee61bd0a 100644 --- a/src/ns.mk +++ b/src/ns.mk @@ -1,6 +1,6 @@ ### autodeps.mk --- src/Makefile fragment for GNU Emacs -## Copyright (C) 2008-2012 Free Software Foundation, Inc. +## Copyright (C) 2008-2012 Free Software Foundation, Inc. ## This file is part of GNU Emacs. @@ -27,11 +27,11 @@ ${ns_appdir}: ${ns_appsrc} rm -fr ${ns_appdir} - mkdir -p ${ns_appdir} + ${MKDIR_P} ${ns_appdir} ( cd ${ns_appsrc} ; tar cfh - . ) | ( cd ${ns_appdir} ; umask 022; tar xf - ) ${ns_appbindir}Emacs: emacs${EXEEXT} - mkdir -p ${ns_appbindir} + ${MKDIR_P} ${ns_appbindir} cp -f emacs${EXEEXT} ${ns_appbindir}Emacs ns-app: ${ns_appdir} ${ns_appbindir}Emacs From 005ad204984f9cc908338e6ce273a5b6c7522183 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 11 May 2012 21:19:47 -0400 Subject: [PATCH 444/564] Don't use build-aux/install-sh -d directly * leim/Makefile.in (MKDIR_P): New, set by configure. (install): Use $MKDIR_P. * lib-src/Makefile.in (MKDIR_P): New, set by configure. ($(DESTDIR)${archlibdir}): Use $MKDIR_P. --- leim/ChangeLog | 5 +++++ leim/Makefile.in | 6 +++--- lib-src/ChangeLog | 5 +++++ lib-src/Makefile.in | 5 +++-- 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/leim/ChangeLog b/leim/ChangeLog index 85878f65734..560e1d53da6 100644 --- a/leim/ChangeLog +++ b/leim/ChangeLog @@ -1,3 +1,8 @@ +2012-05-12 Glenn Morris + + * Makefile.in (MKDIR_P): New, set by configure. + (install): Use $MKDIR_P. + 2012-05-10 Glenn Morris * Makefile.in: Install self-contained ns files directly to diff --git a/leim/Makefile.in b/leim/Makefile.in index 2bf16c0be7e..2d9c9b59481 100644 --- a/leim/Makefile.in +++ b/leim/Makefile.in @@ -41,6 +41,8 @@ install_prefix=$(DESTDIR)${datadir}/emacs/${version} # For self-contained ns builds, it is ${ns_appresdir}/leim. LEIM_INSTALLDIR=@LEIM_INSTALLDIR@ +MKDIR_P = @MKDIR_P@ + GZIP_PROG = @GZIP_PROG@ # Which Emacs to use to convert TIT files to Emacs Lisp files, @@ -179,9 +181,7 @@ compile-main: ${TIT_MISC} done install: all - if [ ! -d ${LEIM_INSTALLDIR} ] ; then \ - umask 022; ${srcdir}/../build-aux/install-sh -d ${LEIM_INSTALLDIR}; \ - else true; fi + umask 022; ${MKDIR_P} ${LEIM_INSTALLDIR} if [ x`(cd ${LEIM_INSTALLDIR} && /bin/pwd)` != x`(/bin/pwd)` ] ; then \ rm -f ${LEIM_INSTALLDIR}/leim-list.el; \ rm -rf ${LEIM_INSTALLDIR}/quail ${LEIM_INSTALLDIR}/ja-dic ; \ diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index fe00c29cff7..aa78c25d1e1 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog @@ -1,3 +1,8 @@ +2012-05-12 Glenn Morris + + * Makefile.in (MKDIR_P): New, set by configure. + ($(DESTDIR)${archlibdir}): Use $MKDIR_P. + 2012-05-10 Paul Eggert etags: pacify gcc -Wstack-protector on Ubuntu 12.04 x86 diff --git a/lib-src/Makefile.in b/lib-src/Makefile.in index 6732030a648..be19b6dc15c 100644 --- a/lib-src/Makefile.in +++ b/lib-src/Makefile.in @@ -106,6 +106,7 @@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ # By default, we uphold the dignity of our programs. INSTALL_STRIP = +MKDIR_P = @MKDIR_P@ # ========================== Lists of Files =========================== @@ -231,13 +232,13 @@ maybe-blessmail: $(BLESSMAIL_TARGET) $(DESTDIR)${archlibdir}: all @echo @echo "Installing utilities run internally by Emacs." - umask 022; $(top_srcdir)/build-aux/install-sh -d $(DESTDIR)${archlibdir} + umask 022; ${MKDIR_P} $(DESTDIR)${archlibdir} if [ `(cd $(DESTDIR)${archlibdir} && /bin/pwd)` != `/bin/pwd` ]; then \ for file in ${UTILITIES}; do \ $(INSTALL_PROGRAM) $(INSTALL_STRIP) $$file $(DESTDIR)${archlibdir}/$$file ; \ done ; \ fi - umask 022; $(top_srcdir)/build-aux/install-sh -d $(DESTDIR)${gamedir}; \ + umask 022; ${MKDIR_P} $(DESTDIR)${gamedir}; \ touch $(DESTDIR)${gamedir}/snake-scores; \ touch $(DESTDIR)${gamedir}/tetris-scores -if chown ${gameuser} $(DESTDIR)${archlibdir}/update-game-score && chmod u+s $(DESTDIR)${archlibdir}/update-game-score; then \ From c7f95930c7051e70f0eff132dd94d9db8f98861e Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 11 May 2012 21:32:19 -0400 Subject: [PATCH 445/564] * doc/misc/Makefile.in (info.info): Rename from info, to avoid duplication. --- doc/misc/ChangeLog | 2 ++ doc/misc/Makefile.in | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index 1765c22d790..6a74bce197d 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -1,5 +1,7 @@ 2012-05-12 Glenn Morris + * Makefile.in (info.info): Rename from info, to avoid duplication. + * Makefile.in (MKDIR_P): New, set by configure. (mkinfodir): Use $MKDIR_P. diff --git a/doc/misc/Makefile.in b/doc/misc/Makefile.in index 30fdbccee75..02115a4b474 100644 --- a/doc/misc/Makefile.in +++ b/doc/misc/Makefile.in @@ -508,7 +508,8 @@ idlwave.pdf: ${srcdir}/idlwave.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/idlwave.texi # NB this one needs --no-split even without a .info extension. -info : $(infodir)/info$(INFO_EXT) +# Avoid name clash with overall "info" target. +info.info : $(infodir)/info$(INFO_EXT) $(infodir)/info$(INFO_EXT): info.texi $(mkinfodir) cd $(srcdir); \ From 9583393ff6922f3abe0e59942c3864e8d68e68a3 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 11 May 2012 22:05:05 -0400 Subject: [PATCH 446/564] * doc/misc/Makefile.in (.SUFFIXES): Disable implicit rules. Fixes previous change. --- doc/misc/ChangeLog | 1 + doc/misc/Makefile.in | 2 ++ 2 files changed, 3 insertions(+) diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index 6a74bce197d..312b2d1d42e 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -1,6 +1,7 @@ 2012-05-12 Glenn Morris * Makefile.in (info.info): Rename from info, to avoid duplication. + (.SUFFIXES): Disable implicit rules. * Makefile.in (MKDIR_P): New, set by configure. (mkinfodir): Use $MKDIR_P. diff --git a/doc/misc/Makefile.in b/doc/misc/Makefile.in index 02115a4b474..fd62afe5adc 100644 --- a/doc/misc/Makefile.in +++ b/doc/misc/Makefile.in @@ -216,6 +216,8 @@ ENVADD = TEXINPUTS="$(srcdir):$(emacsdir):$(TEXINPUTS)" \ mkinfodir = @${MKDIR_P} ${srcdir}/${infodir} .PHONY: info dvi pdf echo-info +## Prevent implicit rule triggering for foo.info. +.SUFFIXES: # Default. info: $(INFO_TARGETS) From 70d9b051a4aef24cff73db312cbe7dfac6a53d0c Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 12 May 2012 06:17:24 -0400 Subject: [PATCH 447/564] Auto-commit of generated files. --- autogen/configure | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/autogen/configure b/autogen/configure index b3b808e1f37..dc7fb2943b3 100755 --- a/autogen/configure +++ b/autogen/configure @@ -7895,6 +7895,7 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ ac_compiler_gnu=$ac_cv_c_compiler_gnu + if test "x$RANLIB" = x; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. @@ -10004,10 +10005,8 @@ $as_echo "$ac_enable_autodepend" >&6; } fi if test $ac_enable_autodepend = yes; then DEPFLAGS='-MMD -MF ${DEPDIR}/$*.d -MP' - ## In parallel builds, another make might create depdir between - ## the first test and mkdir, so stick another test on the end. - ## Or use install-sh -d? mkdir -p is not portable. - MKDEPDIR='test -d ${DEPDIR} || mkdir ${DEPDIR} || test -d ${DEPDIR}' + ## MKDIR_P is documented (see AC_PROG_MKDIR_P) to be parallel-safe. + MKDEPDIR='${MKDIR_P} ${DEPDIR}' deps_frag=autodeps.mk fi fi From c1a1d7a36a6e8208dc51c6bce69535aa131178c0 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sat, 12 May 2012 16:05:12 +0300 Subject: [PATCH 448/564] Update src/lisp.mk as required by 2012-05-07T20:48:41Z!monnier@iro.umontreal.ca. src/lisp.mk (lisp): Add newcomment.elc. --- src/ChangeLog | 4 ++++ src/lisp.mk | 1 + 2 files changed, 5 insertions(+) diff --git a/src/ChangeLog b/src/ChangeLog index 3c3f04b9238..63eae11cd45 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2012-05-12 Eli Zaretskii + + * lisp.mk (lisp): Add newcomment.elc. + 2012-05-12 Glenn Morris * Makefile.in (MKDIR_P): New, set by configure. diff --git a/src/lisp.mk b/src/lisp.mk index ead1abcbaae..4608cc3f687 100644 --- a/src/lisp.mk +++ b/src/lisp.mk @@ -128,6 +128,7 @@ lisp = \ $(lispsource)/emacs-lisp/lisp-mode.elc \ $(lispsource)/textmodes/text-mode.elc \ $(lispsource)/textmodes/fill.elc \ + $(lispsource)/newcomment.elc \ $(lispsource)/replace.elc \ $(lispsource)/emacs-lisp/tabulated-list.elc \ $(lispsource)/buff-menu.elc \ From ac59c2f6d19570a52481b168238749bab9038d77 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Sat, 12 May 2012 22:28:04 +0800 Subject: [PATCH 449/564] * buff-menu.el (Buffer-menu-buffer+size-width): Doc fix. Fixes: debbugs:11454 --- lisp/ChangeLog | 4 ++++ lisp/buff-menu.el | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 9fe7106c93c..b0122c9c064 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-05-12 Chong Yidong + + * buff-menu.el (Buffer-menu-buffer+size-width): Doc fix (Bug#11454). + 2012-05-11 Stefan Monnier * progmodes/prolog.el: Use SMIE. Cleanup regexp setup. diff --git a/lisp/buff-menu.el b/lisp/buff-menu.el index 10c097bbf93..cbd786bda61 100644 --- a/lisp/buff-menu.el +++ b/lisp/buff-menu.el @@ -50,7 +50,11 @@ (defcustom Buffer-menu-buffer+size-width nil "Combined width of buffer name and size columns in Buffer Menu. -If nil, use `Buffer-menu-name-width' and `Buffer-menu-size-width'." +If nil, use `Buffer-menu-name-width' and `Buffer-menu-size-width'. + +If non-nil, the value of `Buffer-menu-name-width' is overridden; +the name column is assigned width `Buffer-menu-buffer+size-width' +minus `Buffer-menu-size-width'. This use is deprecated." :type 'number :group 'Buffer-menu :version "24.2") From 0d90978655eb1fec42c817394a1da3ebd1903e1d Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Sat, 12 May 2012 23:04:11 +0800 Subject: [PATCH 450/564] Fix mouse links in new Buffer Menu. * buff-menu.el (Buffer-menu-mouse-select): Restore function. (Buffer-menu-mode-map): Bind it. (Buffer-menu--pretty-name): Add a mouse-face property. Fixes: debbugs:11459 --- lisp/ChangeLog | 3 +++ lisp/buff-menu.el | 18 +++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b0122c9c064..26c4a492fb6 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,6 +1,9 @@ 2012-05-12 Chong Yidong * buff-menu.el (Buffer-menu-buffer+size-width): Doc fix (Bug#11454). + (Buffer-menu-mouse-select): Restore function (Bug#11459). + (Buffer-menu-mode-map): Bind it. + (Buffer-menu--pretty-name): Add a mouse-face property. 2012-05-11 Stefan Monnier diff --git a/lisp/buff-menu.el b/lisp/buff-menu.el index cbd786bda61..0ecbba09254 100644 --- a/lisp/buff-menu.el +++ b/lisp/buff-menu.el @@ -130,6 +130,9 @@ commands.") (define-key map (kbd "M-s a C-s") 'Buffer-menu-isearch-buffers) (define-key map (kbd "M-s a M-C-s") 'Buffer-menu-isearch-buffers-regexp) + (define-key map [mouse-2] 'Buffer-menu-mouse-select) + (define-key map [follow-link] 'mouse-face) + (define-key map [menu-bar Buffer-menu-mode] (cons (purecopy "Buffer-Menu") menu-map)) (define-key menu-map [quit] `(menu-item ,(purecopy "Quit") quit-window @@ -565,6 +568,17 @@ means list those buffers and no others." (tabulated-list-print)) buffer)) +(defun Buffer-menu-mouse-select (event) + "Select the buffer whose line you click on." + (interactive "e") + (select-window (posn-window (event-end event))) + (let ((buffer (tabulated-list-get-id (posn-point (event-end event))))) + (when (buffer-live-p buffer) + (if (and (window-dedicated-p (selected-window)) + (eq (selected-window) (frame-root-window))) + (switch-to-buffer-other-frame buffer) + (switch-to-buffer buffer))))) + (defun list-buffers--refresh (&optional buffer-list old-buffer) ;; Set up `tabulated-list-format'. (let ((name-width Buffer-menu-name-width) @@ -617,7 +631,9 @@ means list those buffers and no others." (string-to-number (aref (cadr entry2) 4)))) (defun Buffer-menu--pretty-name (name) - (propertize name 'font-lock-face 'buffer-menu-buffer)) + (propertize name + 'font-lock-face 'buffer-menu-buffer + 'mouse-face 'highlight)) (defun Buffer-menu--pretty-file-name (file) (cond (file From 7d326a290060af62b8d1fede723a96ab0590354c Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 12 May 2012 09:44:01 -0700 Subject: [PATCH 451/564] Make doc/misc/Makefile.in look more like the other doc Makefiles * doc/misc/Makefile.in: Use explicit $srcdir in all dependencies. Remove cd $srcdir from rules. (VPATH): Remove. (infodir): Set to an absolute path. (INFO_TARGETS): Use short names. (mkinfodir): infodir is now absolute. (echo-info, maintainer-clean): Update for new format of INFO_TARGETS. --- doc/misc/ChangeLog | 9 ++ doc/misc/Makefile.in | 346 +++++++++++++++---------------------------- 2 files changed, 132 insertions(+), 223 deletions(-) diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index 312b2d1d42e..a03ad34b63e 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -1,5 +1,14 @@ 2012-05-12 Glenn Morris + * Makefile.in: Make it look more like the other doc Makefiles. + Use explicit $srcdir in all dependencies. + Remove cd $srcdir from rules. + (VPATH): Remove. + (infodir): Set to an absolute path. + (INFO_TARGETS): Use short names. + (mkinfodir): infodir is now absolute. + (echo-info, maintainer-clean): Update for new format of INFO_TARGETS. + * Makefile.in (info.info): Rename from info, to avoid duplication. (.SUFFIXES): Disable implicit rules. diff --git a/doc/misc/Makefile.in b/doc/misc/Makefile.in index fd62afe5adc..c864030e4af 100644 --- a/doc/misc/Makefile.in +++ b/doc/misc/Makefile.in @@ -24,16 +24,8 @@ SHELL = /bin/sh # set by the configure script's `--srcdir' option. srcdir=@srcdir@ -# Tell make where to find source files; this is needed for the makefiles. -# Note the other doc Makefiles do not use VPATH anymore, instead -# they set infodir to an absolute path. Not doing that here in -# case INFO_TARGETS gets too long for some feeble shells. -# (cf src/Makefile.in's passing of $lisp to make-docfile) -VPATH=@srcdir@ - ## Where the output files go. -## Note that the setfilename command in the .texi files assumes this. -infodir=../../info +infodir = $(srcdir)/../../info ## Directory with emacsver.texi. ## Currently only used by efaq and calc. emacsdir = $(srcdir)/../emacs @@ -49,57 +41,14 @@ INFO_OPTS=@INFO_OPTS@ MAKEINFO = @MAKEINFO@ MAKEINFO_OPTS = --force -I$(emacsdir) -INFO_TARGETS = \ - $(infodir)/ada-mode$(INFO_EXT) \ - $(infodir)/auth$(INFO_EXT) \ - $(infodir)/autotype$(INFO_EXT) \ - $(infodir)/calc$(INFO_EXT) \ - $(infodir)/ccmode$(INFO_EXT) \ - $(infodir)/cl$(INFO_EXT) \ - $(infodir)/dbus$(INFO_EXT) \ - $(infodir)/dired-x$(INFO_EXT) \ - $(infodir)/ebrowse$(INFO_EXT) \ - $(infodir)/ede$(INFO_EXT) \ - $(infodir)/ediff$(INFO_EXT) \ - $(infodir)/edt$(INFO_EXT) \ - $(infodir)/eieio$(INFO_EXT) \ - $(infodir)/emacs-mime$(INFO_EXT) \ - $(infodir)/epa$(INFO_EXT) \ - $(infodir)/erc$(INFO_EXT) \ - $(infodir)/ert$(INFO_EXT) \ - $(infodir)/eshell$(INFO_EXT) \ - $(infodir)/eudc$(INFO_EXT) \ - $(infodir)/efaq$(INFO_EXT) \ - $(infodir)/flymake$(INFO_EXT) \ - $(infodir)/forms$(INFO_EXT) \ - $(infodir)/gnus$(INFO_EXT) \ - $(infodir)/emacs-gnutls$(INFO_EXT) \ - $(infodir)/idlwave$(INFO_EXT) \ - $(infodir)/info$(INFO_EXT) \ - $(infodir)/mairix-el$(INFO_EXT) \ - $(infodir)/message$(INFO_EXT) \ - $(infodir)/mh-e$(INFO_EXT) \ - $(infodir)/newsticker$(INFO_EXT) \ - $(infodir)/nxml-mode$(INFO_EXT) \ - $(infodir)/org$(INFO_EXT) \ - $(infodir)/pcl-cvs$(INFO_EXT) \ - $(infodir)/pgg$(INFO_EXT) \ - $(infodir)/rcirc$(INFO_EXT) \ - $(infodir)/remember$(INFO_EXT) \ - $(infodir)/reftex$(INFO_EXT) \ - $(infodir)/sasl$(INFO_EXT) \ - $(infodir)/sc$(INFO_EXT) \ - $(infodir)/semantic$(INFO_EXT) \ - $(infodir)/ses$(INFO_EXT) \ - $(infodir)/sieve$(INFO_EXT) \ - $(infodir)/smtpmail$(INFO_EXT) \ - $(infodir)/speedbar$(INFO_EXT) \ - $(infodir)/tramp$(INFO_EXT) \ - $(infodir)/url$(INFO_EXT) \ - $(infodir)/vip$(INFO_EXT) \ - $(infodir)/viper$(INFO_EXT) \ - $(infodir)/widget$(INFO_EXT) \ - $(infodir)/woman$(INFO_EXT) +INFO_TARGETS = ada-mode auth autotype calc ccmode cl \ + dbus dired-x ebrowse ede ediff edt eieio \ + emacs-mime epa erc ert eshell eudc efaq \ + flymake forms gnus emacs-gnutls idlwave info.info \ + mairix-el message mh-e newsticker nxml-mode \ + org pcl-cvs pgg rcirc remember reftex sasl \ + sc semantic ses sieve smtpmail speedbar tramp \ + url vip viper widget woman DVI_TARGETS = \ ada-mode.dvi \ @@ -213,7 +162,7 @@ TEXI2PDF = texi2pdf ENVADD = TEXINPUTS="$(srcdir):$(emacsdir):$(TEXINPUTS)" \ MAKEINFO="$(MAKEINFO) $(MAKEINFO_OPTS)" -mkinfodir = @${MKDIR_P} ${srcdir}/${infodir} +mkinfodir = @${MKDIR_P} ${infodir} .PHONY: info dvi pdf echo-info ## Prevent implicit rule triggering for foo.info. @@ -223,8 +172,10 @@ mkinfodir = @${MKDIR_P} ${srcdir}/${infodir} info: $(INFO_TARGETS) ## Used by top-level Makefile. +## Base file names of output info files. echo-info: - @echo $(INFO_TARGETS) | sed 's|[^ ]*/||g' + @echo "$(INFO_TARGETS) " | \ + sed -e 's|[^ ]*/||g' -e 's/\.info//g' -e "s/ /$(INFO_EXT) /g" # please modify this for all the web manual targets webhack: clean @@ -234,219 +185,196 @@ dvi: $(DVI_TARGETS) pdf: $(PDF_TARGETS) -# Note that all the Info targets build the Info files -# in srcdir. There is no provision for Info files -# to exist in the build directory. +# Note that all the Info targets build the Info files in srcdir. +# There is no provision for Info files to exist in the build directory. # In a distribution of Emacs, the Info files should be up to date. # Note: "<" is not portable in ordinary make rules. -## "short" target names for convenience, to just rebuild one manual. ada-mode : $(infodir)/ada-mode$(INFO_EXT) -$(infodir)/ada-mode$(INFO_EXT): ada-mode.texi +$(infodir)/ada-mode$(INFO_EXT): ${srcdir}/ada-mode.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ada-mode.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/ada-mode.texi ada-mode.dvi: ${srcdir}/ada-mode.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/ada-mode.texi ada-mode.pdf: ${srcdir}/ada-mode.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/ada-mode.texi auth : $(infodir)/auth$(INFO_EXT) -$(infodir)/auth$(INFO_EXT): auth.texi +$(infodir)/auth$(INFO_EXT): ${srcdir}/auth.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ auth.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/auth.texi auth.dvi: ${srcdir}/auth.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/auth.texi auth.pdf: ${srcdir}/auth.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/auth.texi autotype : $(infodir)/autotype$(INFO_EXT) -$(infodir)/autotype$(INFO_EXT): autotype.texi +$(infodir)/autotype$(INFO_EXT): ${srcdir}/autotype.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ autotype.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/autotype.texi autotype.dvi: ${srcdir}/autotype.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/autotype.texi autotype.pdf: ${srcdir}/autotype.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/autotype.texi calc : $(infodir)/calc$(INFO_EXT) -$(infodir)/calc$(INFO_EXT): calc.texi $(emacsdir)/emacsver.texi +$(infodir)/calc$(INFO_EXT): ${srcdir}/calc.texi $(emacsdir)/emacsver.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ calc.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/calc.texi calc.dvi: ${srcdir}/calc.texi $(emacsdir)/emacsver.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/calc.texi calc.pdf: ${srcdir}/calc.texi $(emacsdir)/emacsver.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/calc.texi ccmode : $(infodir)/ccmode$(INFO_EXT) -$(infodir)/ccmode$(INFO_EXT): cc-mode.texi +$(infodir)/ccmode$(INFO_EXT): ${srcdir}/cc-mode.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ cc-mode.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/cc-mode.texi cc-mode.dvi: ${srcdir}/cc-mode.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/cc-mode.texi cc-mode.pdf: ${srcdir}/cc-mode.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/cc-mode.texi cl : $(infodir)/cl$(INFO_EXT) -$(infodir)/cl$(INFO_EXT): cl.texi +$(infodir)/cl$(INFO_EXT): ${srcdir}/cl.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ cl.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/cl.texi cl.dvi: ${srcdir}/cl.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/cl.texi cl.pdf: ${srcdir}/cl.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/cl.texi dbus : $(infodir)/dbus$(INFO_EXT) -$(infodir)/dbus$(INFO_EXT): dbus.texi +$(infodir)/dbus$(INFO_EXT): ${srcdir}/dbus.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ dbus.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/dbus.texi dbus.dvi: ${srcdir}/dbus.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/dbus.texi dbus.pdf: ${srcdir}/dbus.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/dbus.texi dired-x : $(infodir)/dired-x$(INFO_EXT) -$(infodir)/dired-x$(INFO_EXT): dired-x.texi $(emacsdir)/emacsver.texi +$(infodir)/dired-x$(INFO_EXT): ${srcdir}/dired-x.texi $(emacsdir)/emacsver.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ dired-x.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/dired-x.texi dired-x.dvi: ${srcdir}/dired-x.texi $(emacsdir)/emacsver.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/dired-x.texi dired-x.pdf: ${srcdir}/dired-x.texi $(emacsdir)/emacsver.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/dired-x.texi ebrowse : $(infodir)/ebrowse$(INFO_EXT) -$(infodir)/ebrowse$(INFO_EXT): ebrowse.texi +$(infodir)/ebrowse$(INFO_EXT): ${srcdir}/ebrowse.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ebrowse.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/ebrowse.texi ebrowse.dvi: ${srcdir}/ebrowse.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/ebrowse.texi ebrowse.pdf: ${srcdir}/ebrowse.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/ebrowse.texi ede : $(infodir)/ede$(INFO_EXT) -$(infodir)/ede$(INFO_EXT): ede.texi +$(infodir)/ede$(INFO_EXT): ${srcdir}/ede.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ede.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/ede.texi ede.dvi: ${srcdir}/ede.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/ede.texi ede.pdf: ${srcdir}/ede.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/ede.texi ediff : $(infodir)/ediff$(INFO_EXT) -$(infodir)/ediff$(INFO_EXT): ediff.texi +$(infodir)/ediff$(INFO_EXT): ${srcdir}/ediff.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ediff.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/ediff.texi ediff.dvi: ${srcdir}/ediff.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/ediff.texi ediff.pdf: ${srcdir}/ediff.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/ediff.texi edt : $(infodir)/edt$(INFO_EXT) -$(infodir)/edt$(INFO_EXT): edt.texi +$(infodir)/edt$(INFO_EXT): ${srcdir}/edt.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ edt.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/edt.texi edt.dvi: ${srcdir}/edt.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/edt.texi edt.pdf: ${srcdir}/edt.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/edt.texi eieio : $(infodir)/eieio$(INFO_EXT) -$(infodir)/eieio$(INFO_EXT): eieio.texi +$(infodir)/eieio$(INFO_EXT): ${srcdir}/eieio.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ eieio.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/eieio.texi eieio.dvi: ${srcdir}/eieio.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/eieio.texi eieio.pdf: ${srcdir}/eieio.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/eieio.texi emacs-gnutls : $(infodir)/emacs-gnutls$(INFO_EXT) -$(infodir)/emacs-gnutls$(INFO_EXT): emacs-gnutls.texi +$(infodir)/emacs-gnutls$(INFO_EXT): ${srcdir}/emacs-gnutls.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ emacs-gnutls.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/emacs-gnutls.texi emacs-gnutls.dvi: ${srcdir}/emacs-gnutls.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/emacs-gnutls.texi emacs-gnutls.pdf: ${srcdir}/emacs-gnutls.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/emacs-gnutls.texi emacs-mime : $(infodir)/emacs-mime$(INFO_EXT) -$(infodir)/emacs-mime$(INFO_EXT): emacs-mime.texi +$(infodir)/emacs-mime$(INFO_EXT): ${srcdir}/emacs-mime.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) --enable-encoding -o $@ emacs-mime.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) --enable-encoding -o $@ ${srcdir}/emacs-mime.texi emacs-mime.dvi: ${srcdir}/emacs-mime.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/emacs-mime.texi emacs-mime.pdf: ${srcdir}/emacs-mime.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/emacs-mime.texi epa : $(infodir)/epa$(INFO_EXT) -$(infodir)/epa$(INFO_EXT): epa.texi +$(infodir)/epa$(INFO_EXT): ${srcdir}/epa.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ epa.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/epa.texi epa.dvi: ${srcdir}/epa.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/epa.texi epa.pdf: ${srcdir}/epa.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/epa.texi erc : $(infodir)/erc$(INFO_EXT) -$(infodir)/erc$(INFO_EXT): erc.texi +$(infodir)/erc$(INFO_EXT): ${srcdir}/erc.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ erc.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/erc.texi erc.dvi: ${srcdir}/erc.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/erc.texi erc.pdf: ${srcdir}/erc.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/erc.texi ert : $(infodir)/ert$(INFO_EXT) -$(infodir)/ert$(INFO_EXT): ert.texi +$(infodir)/ert$(INFO_EXT): ${srcdir}/ert.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ert.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/ert.texi ert.dvi: ${srcdir}/ert.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/ert.texi ert.pdf: ${srcdir}/ert.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/ert.texi eshell : $(infodir)/eshell$(INFO_EXT) -$(infodir)/eshell$(INFO_EXT): eshell.texi +$(infodir)/eshell$(INFO_EXT): ${srcdir}/eshell.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ eshell.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/eshell.texi eshell.dvi: ${srcdir}/eshell.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/eshell.texi eshell.pdf: ${srcdir}/eshell.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/eshell.texi eudc : $(infodir)/eudc$(INFO_EXT) -$(infodir)/eudc$(INFO_EXT): eudc.texi +$(infodir)/eudc$(INFO_EXT): ${srcdir}/eudc.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ eudc.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/eudc.texi eudc.dvi: ${srcdir}/eudc.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/eudc.texi eudc.pdf: ${srcdir}/eudc.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/eudc.texi efaq : $(infodir)/efaq$(INFO_EXT) -$(infodir)/efaq$(INFO_EXT): faq.texi $(emacsdir)/emacsver.texi +$(infodir)/efaq$(INFO_EXT): ${srcdir}/faq.texi $(emacsdir)/emacsver.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ faq.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/faq.texi faq.dvi: ${srcdir}/faq.texi $(emacsdir)/emacsver.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/faq.texi faq.pdf: ${srcdir}/faq.texi $(emacsdir)/emacsver.texi @@ -462,20 +390,18 @@ emacs-faq.text: ${srcdir}/faq.texi $(emacsdir)/emacsver.texi $(MAKEINFO) $(MAKEINFO_OPTS) --plaintext -o $@ ${srcdir}/faq.texi flymake : $(infodir)/flymake$(INFO_EXT) -$(infodir)/flymake$(INFO_EXT): flymake.texi +$(infodir)/flymake$(INFO_EXT): ${srcdir}/flymake.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ flymake.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/flymake.texi flymake.dvi: ${srcdir}/flymake.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/flymake.texi flymake.pdf: ${srcdir}/flymake.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/flymake.texi forms : $(infodir)/forms$(INFO_EXT) -$(infodir)/forms$(INFO_EXT): forms.texi +$(infodir)/forms$(INFO_EXT): ${srcdir}/forms.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ forms.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/forms.texi forms.dvi: ${srcdir}/forms.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/forms.texi forms.pdf: ${srcdir}/forms.texi @@ -483,16 +409,15 @@ forms.pdf: ${srcdir}/forms.texi # gnus/message/emacs-mime/sieve/pgg are part of Gnus: gnus : $(infodir)/gnus$(INFO_EXT) -$(infodir)/gnus$(INFO_EXT): gnus.texi gnus-faq.texi +$(infodir)/gnus$(INFO_EXT): ${srcdir}/gnus.texi ${srcdir}/gnus-faq.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ gnus.texi -gnus.dvi: ${srcdir}/gnus.texi gnus-faq.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/gnus.texi +gnus.dvi: ${srcdir}/gnus.texi ${srcdir}/gnus-faq.texi sed -e '/@iflatex/,/@end iflatex/d' ${srcdir}/gnus.texi > gnustmp.texi $(ENVADD) $(TEXI2DVI) gnustmp.texi cp gnustmp.dvi $*.dvi rm gnustmp.* -gnus.pdf: ${srcdir}/gnus.texi gnus-faq.texi +gnus.pdf: ${srcdir}/gnus.texi ${srcdir}/gnus-faq.texi sed -e '/@iflatex/,/@end iflatex/d' ${srcdir}/gnus.texi > gnustmp.texi $(ENVADD) $(TEXI2PDF) gnustmp.texi cp gnustmp.pdf $@ @@ -500,10 +425,9 @@ gnus.pdf: ${srcdir}/gnus.texi gnus-faq.texi # NB this one needs --no-split even without a .info extension. idlwave : $(infodir)/idlwave$(INFO_EXT) -$(infodir)/idlwave$(INFO_EXT): idlwave.texi +$(infodir)/idlwave$(INFO_EXT): ${srcdir}/idlwave.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ idlwave.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/idlwave.texi idlwave.dvi: ${srcdir}/idlwave.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/idlwave.texi idlwave.pdf: ${srcdir}/idlwave.texi @@ -512,250 +436,225 @@ idlwave.pdf: ${srcdir}/idlwave.texi # NB this one needs --no-split even without a .info extension. # Avoid name clash with overall "info" target. info.info : $(infodir)/info$(INFO_EXT) -$(infodir)/info$(INFO_EXT): info.texi +$(infodir)/info$(INFO_EXT): ${srcdir}/info.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ info.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/info.texi info.dvi: ${srcdir}/info.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/info.texi info.pdf: ${srcdir}/info.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/info.texi mairix-el : $(infodir)/mairix-el$(INFO_EXT) -$(infodir)/mairix-el$(INFO_EXT): mairix-el.texi +$(infodir)/mairix-el$(INFO_EXT): ${srcdir}/mairix-el.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ mairix-el.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/mairix-el.texi mairix-el.dvi: ${srcdir}/mairix-el.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/mairix-el.texi mairix-el.pdf: ${srcdir}/mairix-el.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/mairix-el.texi message : $(infodir)/message$(INFO_EXT) -$(infodir)/message$(INFO_EXT): message.texi +$(infodir)/message$(INFO_EXT): ${srcdir}/message.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ message.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/message.texi message.dvi: ${srcdir}/message.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/message.texi message.pdf: ${srcdir}/message.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/message.texi mh-e : $(infodir)/mh-e$(INFO_EXT) -$(infodir)/mh-e$(INFO_EXT): mh-e.texi +$(infodir)/mh-e$(INFO_EXT): ${srcdir}/mh-e.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ mh-e.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/mh-e.texi mh-e.dvi: ${srcdir}/mh-e.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/mh-e.texi mh-e.pdf: ${srcdir}/mh-e.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/mh-e.texi newsticker : $(infodir)/newsticker$(INFO_EXT) -$(infodir)/newsticker$(INFO_EXT): newsticker.texi +$(infodir)/newsticker$(INFO_EXT): ${srcdir}/newsticker.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ newsticker.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/newsticker.texi newsticker.dvi: ${srcdir}/newsticker.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/newsticker.texi newsticker.pdf: ${srcdir}/newsticker.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/newsticker.texi nxml-mode : $(infodir)/nxml-mode$(INFO_EXT) -$(infodir)/nxml-mode$(INFO_EXT): nxml-mode.texi +$(infodir)/nxml-mode$(INFO_EXT): ${srcdir}/nxml-mode.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ nxml-mode.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/nxml-mode.texi nxml-mode.dvi: ${srcdir}/nxml-mode.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/nxml-mode.texi nxml-mode.pdf: ${srcdir}/nxml-mode.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/nxml-mode.texi org : $(infodir)/org$(INFO_EXT) -$(infodir)/org$(INFO_EXT): org.texi +$(infodir)/org$(INFO_EXT): ${srcdir}/org.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ org.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/org.texi org.dvi: ${srcdir}/org.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/org.texi org.pdf: ${srcdir}/org.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/org.texi pcl-cvs : $(infodir)/pcl-cvs$(INFO_EXT) -$(infodir)/pcl-cvs$(INFO_EXT): pcl-cvs.texi +$(infodir)/pcl-cvs$(INFO_EXT): ${srcdir}/pcl-cvs.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ pcl-cvs.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/pcl-cvs.texi pcl-cvs.dvi: ${srcdir}/pcl-cvs.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/pcl-cvs.texi pcl-cvs.pdf: ${srcdir}/pcl-cvs.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/pcl-cvs.texi pgg : $(infodir)/pgg$(INFO_EXT) -$(infodir)/pgg$(INFO_EXT): pgg.texi +$(infodir)/pgg$(INFO_EXT): ${srcdir}/pgg.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ pgg.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/pgg.texi pgg.dvi: ${srcdir}/pgg.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/pgg.texi pgg.pdf: ${srcdir}/pgg.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/pgg.texi rcirc : $(infodir)/rcirc$(INFO_EXT) -$(infodir)/rcirc$(INFO_EXT): rcirc.texi +$(infodir)/rcirc$(INFO_EXT): ${srcdir}/rcirc.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ rcirc.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/rcirc.texi rcirc.dvi: ${srcdir}/rcirc.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/rcirc.texi rcirc.pdf: ${srcdir}/rcirc.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/rcirc.texi reftex : $(infodir)/reftex$(INFO_EXT) -$(infodir)/reftex$(INFO_EXT): reftex.texi +$(infodir)/reftex$(INFO_EXT): ${srcdir}/reftex.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ reftex.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/reftex.texi reftex.dvi: ${srcdir}/reftex.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/reftex.texi reftex.pdf: ${srcdir}/reftex.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/reftex.texi remember : $(infodir)/remember$(INFO_EXT) -$(infodir)/remember$(INFO_EXT): remember.texi +$(infodir)/remember$(INFO_EXT): ${srcdir}/remember.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ remember.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/remember.texi remember.dvi: ${srcdir}/remember.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/remember.texi remember.pdf: ${srcdir}/remember.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/remember.texi sasl : $(infodir)/sasl$(INFO_EXT) -$(infodir)/sasl$(INFO_EXT): sasl.texi +$(infodir)/sasl$(INFO_EXT): ${srcdir}/sasl.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ sasl.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/sasl.texi sasl.dvi: ${srcdir}/sasl.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/sasl.texi sasl.pdf: ${srcdir}/sasl.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/sasl.texi sc : $(infodir)/sc$(INFO_EXT) -$(infodir)/sc$(INFO_EXT): sc.texi +$(infodir)/sc$(INFO_EXT): ${srcdir}/sc.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ sc.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/sc.texi sc.dvi: ${srcdir}/sc.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/sc.texi sc.pdf: ${srcdir}/sc.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/sc.texi semantic : $(infodir)/semantic$(INFO_EXT) -$(infodir)/semantic$(INFO_EXT): semantic.texi sem-user.texi +$(infodir)/semantic$(INFO_EXT): ${srcdir}/semantic.texi ${srcdir}/sem-user.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ semantic.texi -semantic.dvi: ${srcdir}/semantic.texi sem-user.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/semantic.texi +semantic.dvi: ${srcdir}/semantic.texi ${srcdir}/sem-user.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/semantic.texi -semantic.pdf: ${srcdir}/semantic.texi sem-user.texi +semantic.pdf: ${srcdir}/semantic.texi ${srcdir}/sem-user.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/semantic.texi ses : $(infodir)/ses$(INFO_EXT) -$(infodir)/ses$(INFO_EXT): ses.texi +$(infodir)/ses$(INFO_EXT): ${srcdir}/ses.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ses.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/ses.texi ses.dvi: ${srcdir}/ses.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/ses.texi ses.pdf: ${srcdir}/ses.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/ses.texi sieve : $(infodir)/sieve$(INFO_EXT) -$(infodir)/sieve$(INFO_EXT): sieve.texi +$(infodir)/sieve$(INFO_EXT): ${srcdir}/sieve.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ sieve.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/sieve.texi sieve.dvi: ${srcdir}/sieve.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/sieve.texi sieve.pdf: ${srcdir}/sieve.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/sieve.texi smtpmail : $(infodir)/smtpmail$(INFO_EXT) -$(infodir)/smtpmail$(INFO_EXT): smtpmail.texi +$(infodir)/smtpmail$(INFO_EXT): ${srcdir}/smtpmail.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ smtpmail.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/smtpmail.texi smtpmail.dvi: ${srcdir}/smtpmail.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/smtpmail.texi smtpmail.pdf: ${srcdir}/smtpmail.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/smtpmail.texi speedbar : $(infodir)/speedbar$(INFO_EXT) -$(infodir)/speedbar$(INFO_EXT): speedbar.texi +$(infodir)/speedbar$(INFO_EXT): ${srcdir}/speedbar.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ speedbar.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/speedbar.texi speedbar.dvi: ${srcdir}/speedbar.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/speedbar.texi speedbar.pdf: ${srcdir}/speedbar.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/speedbar.texi tramp : $(infodir)/tramp$(INFO_EXT) -$(infodir)/tramp$(INFO_EXT): tramp.texi trampver.texi +$(infodir)/tramp$(INFO_EXT): ${srcdir}/tramp.texi ${srcdir}/trampver.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ -D emacs tramp.texi -tramp.dvi: ${srcdir}/tramp.texi trampver.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ -D emacs ${srcdir}/tramp.texi +tramp.dvi: ${srcdir}/tramp.texi ${srcdir}/trampver.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/tramp.texi -tramp.pdf: ${srcdir}/tramp.texi trampver.texi +tramp.pdf: ${srcdir}/tramp.texi ${srcdir}/trampver.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/tramp.texi url : $(infodir)/url$(INFO_EXT) -$(infodir)/url$(INFO_EXT): url.texi +$(infodir)/url$(INFO_EXT): ${srcdir}/url.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ url.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/url.texi url.dvi: ${srcdir}/url.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/url.texi url.pdf: ${srcdir}/url.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/url.texi vip : $(infodir)/vip$(INFO_EXT) -$(infodir)/vip$(INFO_EXT): vip.texi +$(infodir)/vip$(INFO_EXT): ${srcdir}/vip.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ vip.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/vip.texi vip.dvi: ${srcdir}/vip.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/vip.texi vip.pdf: ${srcdir}/vip.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/vip.texi viper : $(infodir)/viper$(INFO_EXT) -$(infodir)/viper$(INFO_EXT): viper.texi +$(infodir)/viper$(INFO_EXT): ${srcdir}/viper.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ viper.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/viper.texi viper.dvi: ${srcdir}/viper.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/viper.texi viper.pdf: ${srcdir}/viper.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/viper.texi widget : $(infodir)/widget$(INFO_EXT) -$(infodir)/widget$(INFO_EXT): widget.texi +$(infodir)/widget$(INFO_EXT): ${srcdir}/widget.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ widget.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/widget.texi widget.dvi: ${srcdir}/widget.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/widget.texi widget.pdf: ${srcdir}/widget.texi $(ENVADD) $(TEXI2PDF) ${srcdir}/widget.texi woman : $(infodir)/woman$(INFO_EXT) -$(infodir)/woman$(INFO_EXT): woman.texi +$(infodir)/woman$(INFO_EXT): ${srcdir}/woman.texi $(mkinfodir) - cd $(srcdir); \ - $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ woman.texi + $(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/woman.texi woman.dvi: ${srcdir}/woman.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/woman.texi woman.pdf: ${srcdir}/woman.texi @@ -777,7 +676,8 @@ distclean: clean ## infodir is relative to srcdir. maintainer-clean: distclean - cd $(srcdir); for file in $(INFO_TARGETS); do \ + cd $(infodir); for file in $(INFO_TARGETS); do \ + file=`echo $${file} | sed 's/\.info$$//'`${INFO_EXT}; \ rm -f $${file} $${file}-[1-9] $${file}-[1-9][0-9]; \ done From 78e91d0834aba27b2e823da09376b9c1bb6a8c5d Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Sat, 12 May 2012 19:23:16 +0200 Subject: [PATCH 452/564] * Makefile.in (gnus.dvi): Use $@ instead of $*.dvi. --- doc/misc/ChangeLog | 4 ++++ doc/misc/Makefile.in | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index fb40c033216..047a9b52e0b 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -1,3 +1,7 @@ +2012-05-12 Andreas Schwab + + * Makefile.in (gnus.dvi): Use $@ instead of $*.dvi. + 2012-05-02 Glenn Morris * viper.texi: Make direntry shorter (also it is no longer "newest"). diff --git a/doc/misc/Makefile.in b/doc/misc/Makefile.in index 390b077bbb0..e387631ba76 100644 --- a/doc/misc/Makefile.in +++ b/doc/misc/Makefile.in @@ -454,7 +454,7 @@ $(infodir)/gnus: gnus.texi gnus-faq.texi gnus.dvi: ${srcdir}/gnus.texi gnus-faq.texi sed -e '/@iflatex/,/@end iflatex/d' ${srcdir}/gnus.texi > gnustmp.texi $(ENVADD) $(TEXI2DVI) gnustmp.texi - cp gnustmp.dvi $*.dvi + cp gnustmp.dvi $@ rm gnustmp.* gnus.pdf: ${srcdir}/gnus.texi gnus-faq.texi sed -e '/@iflatex/,/@end iflatex/d' ${srcdir}/gnus.texi > gnustmp.texi From 9598ef0bda39628d02e0dac5807619da371b6ca8 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 12 May 2012 11:03:18 -0700 Subject: [PATCH 453/564] * .bzrignore, doc/misc/Makefile.in (mostlyclean): Add more TeX intermediates. --- doc/misc/ChangeLog | 2 ++ doc/misc/Makefile.in | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index a03ad34b63e..915e85a3e68 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -1,5 +1,7 @@ 2012-05-12 Glenn Morris + * Makefile.in (mostlyclean): Add more TeX intermediates. + * Makefile.in: Make it look more like the other doc Makefiles. Use explicit $srcdir in all dependencies. Remove cd $srcdir from rules. diff --git a/doc/misc/Makefile.in b/doc/misc/Makefile.in index c864030e4af..5ed4c45e9d1 100644 --- a/doc/misc/Makefile.in +++ b/doc/misc/Makefile.in @@ -664,8 +664,9 @@ woman.pdf: ${srcdir}/woman.texi .PHONY: mostlyclean clean distclean maintainer-clean mostlyclean: - rm -f *.aux *.log *.toc *.cp *.cps *.fn *.fns *.ky *.kys \ - *.op *.ops *.pg *.pgs *.tp *.tps *.vr *.vrs + rm -f *.aux *.log *.toc *.c[mp] *.c[mp]s *.fn *.fns \ + *.ky *.kys *.op *.ops *.p[gj] *.p[gj]s *.sc *.scs \ + *.t[gp] *.t[gp]s *.vr *.vrs rm -f gnustmp.* clean: mostlyclean From beb57c77e42b645fc198d764cf7729d008d863eb Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 12 May 2012 11:04:06 -0700 Subject: [PATCH 454/564] * doc/misc/Makefile.in (mostlyclean): Add still more TeX intermediates. --- doc/misc/Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/misc/Makefile.in b/doc/misc/Makefile.in index 5ed4c45e9d1..0c0a4e07b68 100644 --- a/doc/misc/Makefile.in +++ b/doc/misc/Makefile.in @@ -665,7 +665,7 @@ woman.pdf: ${srcdir}/woman.texi mostlyclean: rm -f *.aux *.log *.toc *.c[mp] *.c[mp]s *.fn *.fns \ - *.ky *.kys *.op *.ops *.p[gj] *.p[gj]s *.sc *.scs \ + *.ky *.kys *.op *.ops *.p[gj] *.p[gj]s *.sc *.scs *.ss \ *.t[gp] *.t[gp]s *.vr *.vrs rm -f gnustmp.* From 9e6b06ed73b88a89ba1e31aaf8f3f7afe20f6cdd Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 12 May 2012 11:10:37 -0700 Subject: [PATCH 455/564] Remove trailing / from $ns_appbindir * configure.in (ns_appbindir): Remove trailing "/". * src/ns.mk: Update for ns_appbindir no longer having trailing "/". --- ChangeLog | 2 ++ configure.in | 7 ++----- src/ChangeLog | 4 ++++ src/ns.mk | 6 +++--- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7599d2b38be..b4b7bdb9f10 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 2012-05-12 Glenn Morris + * configure.in (ns_appbindir): Remove trailing "/". + * configure.in (AC_PROG_MKDIR_P): Call it, to set MKDIR_P. (MKDEPDIR): Use $MKDIR_P. * Makefile.in (MKDIR_P): New, set by configure. diff --git a/configure.in b/configure.in index 0ee180633e6..46909d75f9e 100644 --- a/configure.in +++ b/configure.in @@ -1568,20 +1568,17 @@ CPPFLAGS="$CPPFLAGS -x objective-c" CFLAGS="$CFLAGS -x objective-c" TEMACS_LDFLAGS2="\${LDFLAGS}" GNU_OBJC_CFLAGS= -dnl I don't think it's especially important, but src/Makefile.in -dnl (now the only user of ns_appdir) used to go to the trouble of adding a -dnl trailing "/" to it, so now we do it here. if test "${with_ns}" != no; then if test "${opsys}" = darwin; then NS_IMPL_COCOA=yes ns_appdir=`pwd`/nextstep/Emacs.app - ns_appbindir=${ns_appdir}/Contents/MacOS/ + ns_appbindir=${ns_appdir}/Contents/MacOS ns_appresdir=${ns_appdir}/Contents/Resources ns_appsrc=${srcdir}/nextstep/Cocoa/Emacs.base elif test -f $GNUSTEP_CONFIG_FILE; then NS_IMPL_GNUSTEP=yes ns_appdir=`pwd`/nextstep/Emacs.app - ns_appbindir=${ns_appdir}/ + ns_appbindir=${ns_appdir} ns_appresdir=${ns_appdir}/Resources ns_appsrc=${srcdir}/nextstep/GNUstep/Emacs.base dnl FIXME sourcing this several times in subshells seems inefficient. diff --git a/src/ChangeLog b/src/ChangeLog index 63eae11cd45..c5083cd6e46 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2012-05-12 Glenn Morris + + * ns.mk: Update for ns_appbindir no longer having trailing "/". + 2012-05-12 Eli Zaretskii * lisp.mk (lisp): Add newcomment.elc. diff --git a/src/ns.mk b/src/ns.mk index bdfee61bd0a..77fbf5845d9 100644 --- a/src/ns.mk +++ b/src/ns.mk @@ -30,10 +30,10 @@ ${ns_appdir}: ${ns_appsrc} ${MKDIR_P} ${ns_appdir} ( cd ${ns_appsrc} ; tar cfh - . ) | ( cd ${ns_appdir} ; umask 022; tar xf - ) -${ns_appbindir}Emacs: emacs${EXEEXT} +${ns_appbindir}/Emacs: emacs${EXEEXT} ${MKDIR_P} ${ns_appbindir} - cp -f emacs${EXEEXT} ${ns_appbindir}Emacs + cp -f emacs${EXEEXT} ${ns_appbindir}/Emacs -ns-app: ${ns_appdir} ${ns_appbindir}Emacs +ns-app: ${ns_appdir} ${ns_appbindir}/Emacs ### ns.mk ends here From 9879e263b19070518b6e45f71daaaf7e7021cdbd Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Sat, 12 May 2012 21:00:30 +0200 Subject: [PATCH 456/564] * cc-mode.texi: Avoid space before macro in 4th argument of cross reference commands. --- doc/misc/ChangeLog | 3 +++ doc/misc/cc-mode.texi | 23 ++++++++++++----------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index 047a9b52e0b..99c14897db0 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -1,5 +1,8 @@ 2012-05-12 Andreas Schwab + * cc-mode.texi: Avoid space before macro in 4th argument of cross + reference commands. (Bug#11461) + * Makefile.in (gnus.dvi): Use $@ instead of $*.dvi. 2012-05-02 Glenn Morris diff --git a/doc/misc/cc-mode.texi b/doc/misc/cc-mode.texi index 58420bbd99c..8c574be8f2a 100644 --- a/doc/misc/cc-mode.texi +++ b/doc/misc/cc-mode.texi @@ -701,7 +701,7 @@ in some circumstances---@code{c-insert-tab-function} then defines precisely what sort of ``whitespace'' this will be. Set the standard Emacs variable @code{indent-tabs-mode} to @code{t} if you want real @samp{tab} characters to be used in the indentation, to @code{nil} if -you want only spaces. @xref{Just Spaces,,, @emacsman{}, +you want only spaces. @xref{Just Spaces,,,@emacsman{}, @emacsmantitle{}}. @defopt c-tab-always-indent @@ -1058,8 +1058,8 @@ set this up for you, so you probably won't have to bother. @cindex Auto Fill mode @cindex paragraph filling Line breaks are by default handled (almost) the same regardless of -whether they are made by auto fill mode (@pxref{Auto Fill,,, -@emacsman{}, @emacsmantitle{}}), by paragraph filling (e.g. with +whether they are made by auto fill mode (@pxref{Auto +Fill,,,@emacsman{}, @emacsmantitle{}}), by paragraph filling (e.g. with @kbd{M-q}), or explicitly with @kbd{M-j} or similar methods. In string literals, the new line gets the same indentation as the previous nonempty line.@footnote{You can change this default by @@ -1402,7 +1402,7 @@ continuation of the preceding @code{if}. @vindex abbrev-mode @findex abbrev-mode @cindex Abbrev mode -@ccmode{} uses Abbrev mode (@pxref{Abbrevs,,, @emacsman{}, @emacsmantitle{}}) +@ccmode{} uses Abbrev mode (@pxref{Abbrevs,,,@emacsman{}, @emacsmantitle{}}) to accomplish this. It's therefore turned on by default in all language modes except IDL mode, since CORBA IDL doesn't have any statements. @end deffn @@ -2295,14 +2295,14 @@ to create them. A @dfn{file local variable setting} is a setting which applies to an individual source file. You put this in a @dfn{local variables list}, a special block at the end of the source file (@pxref{Specifying File -Variables,,, @emacsman{}}). +Variables,,,@emacsman{}}). @item File Styles A @dfn{file style} is a rarely used variant of the ``style'' mechanism described above, which applies to an individual source file. @xref{File Styles}. You use this by setting certain special variables -in a local variables list (@pxref{Specifying File Variables,,, -@emacsman{}}). +in a local variables list (@pxref{Specifying File +Variables,,,@emacsman{}}). @item Hooks with Styles For ultimate flexibility, you can use hooks and styles together. For @@ -2897,7 +2897,7 @@ these offsets or the parent style name. The Emacs manual describes how you can customize certain variables on a per-file basis by including a @dfn{file local variable} block at the end -of the file (@pxref{File Variables,, Local Variables in Files, @emacsman{}, +of the file (@pxref{File Variables,, Local Variables in Files,@emacsman{}, @emacsmantitle{}}). So far, you've only seen a functional interface for setting styles in @@ -3139,8 +3139,9 @@ results in the current implementation. @end defopt @vindex comment-multi-line -If inside a comment and @code{comment-multi-line} (@pxref{Auto Fill,,, -@emacsman{}, @emacsmantitle{}} is non-@code{nil}, the indentation and +If inside a comment and @code{comment-multi-line} (@pxref{Auto +Fill,,,@emacsman{}, @emacsmantitle{}} is non-@code{nil}, the +indentation and line prefix are preserved. If inside a comment and @code{comment-multi-line} is @code{nil}, a new comment of the same type is started on the next line and indented as appropriate for @@ -6771,7 +6772,7 @@ The stuff that didn't fit in anywhere else is documented here. Controls whether a final newline is enforced when the file is saved. The value is an association list that for each language mode specifies the value to give to @code{require-final-newline} (@pxref{Saving -Buffers,,, @lispref{}, @lispreftitle{}}) at mode initialization. If a +Buffers,,,@lispref{}, @lispreftitle{}}) at mode initialization. If a language isn't present on the association list, CC Mode won't touch @code{require-final-newline} in buffers for that language. From e5bd0a28953dcf6c3b811a7d17e7664c8d664a7c Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sat, 12 May 2012 23:05:06 -0400 Subject: [PATCH 457/564] Move define-obsolete-variable-alias before the var's definition. * lisp/vc/log-edit.el (vc-comment-ring, vc-comment-ring-index): * lisp/tooltip.el (tooltip-hook): * lisp/textmodes/reftex-toc.el (reftex-toc-map): * lisp/textmodes/reftex-sel.el (reftex-select-label-map) (reftex-select-bib-map): * lisp/textmodes/reftex-index.el (reftex-index-map) (reftex-index-phrases-map): * lisp/speedbar.el (speedbar-syntax-table, speedbar-key-map): * lisp/progmodes/meta-mode.el (meta-mode-map): * lisp/novice.el (disabled-command-hook): * lisp/loadhist.el (unload-hook-features-list): * lisp/frame.el (blink-cursor): * lisp/files.el (find-file-not-found-hooks, write-file-hooks) (write-contents-hooks): * lisp/emulation/tpu-edt.el (GOLD-map): * lisp/emacs-lock.el (emacs-lock-from-exiting): * lisp/emacs-lisp/generic.el (generic-font-lock-defaults): * lisp/emacs-lisp/chart.el (chart-map): * lisp/dos-fns.el (register-name-alist): * lisp/dired-x.el (dired-omit-files-p): * lisp/desktop.el (desktop-enable): * lisp/cus-edit.el (custom-mode-hook): * lisp/buff-menu.el (buffer-menu-mode-hook): * lisp/bookmark.el (bookmark-read-annotation-text-func) (bookmark-exit-hooks): * lisp/allout.el (allout-mode-deactivate-hook) (allout-exposure-change-hook, allout-structure-added-hook) (allout-structure-deleted-hook, allout-structure-shifted-hook): * lisp/dirtrack.el (dirtrack-toggle, dirtrackp, dirtrack-debug-toggle) (dirtrack-debug): Move call to define-obsolete-variable-alias so it comes before the corresponding variable's definition. --- lisp/ChangeLog | 35 ++++++++++++++++++++++++++++++++++ lisp/allout.el | 24 ++++++++++------------- lisp/bookmark.el | 8 ++++---- lisp/buff-menu.el | 6 +++--- lisp/cus-edit.el | 2 +- lisp/desktop.el | 6 ++---- lisp/dired-x.el | 5 ++--- lisp/dirtrack.el | 13 +++++-------- lisp/dos-fns.el | 6 +++--- lisp/emacs-lisp/chart.el | 2 +- lisp/emacs-lisp/generic.el | 3 ++- lisp/emacs-lock.el | 4 ++-- lisp/emulation/tpu-edt.el | 2 +- lisp/files.el | 10 +++++----- lisp/frame.el | 7 ++++--- lisp/loadhist.el | 4 ++-- lisp/novice.el | 6 +++--- lisp/progmodes/meta-mode.el | 2 +- lisp/speedbar.el | 6 +++--- lisp/textmodes/reftex-index.el | 8 ++++---- lisp/textmodes/reftex-sel.el | 8 ++++---- lisp/textmodes/reftex-toc.el | 2 +- lisp/tooltip.el | 4 ++-- lisp/vc/log-edit.el | 5 +++-- 24 files changed, 103 insertions(+), 75 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 26c4a492fb6..c12bf638243 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,38 @@ +2012-05-13 Stefan Monnier + + Move define-obsolete-variable-alias before the var's definition. + * vc/log-edit.el (vc-comment-ring, vc-comment-ring-index): + * tooltip.el (tooltip-hook): + * textmodes/reftex-toc.el (reftex-toc-map): + * textmodes/reftex-sel.el (reftex-select-label-map) + (reftex-select-bib-map): + * textmodes/reftex-index.el (reftex-index-map) + (reftex-index-phrases-map): + * speedbar.el (speedbar-syntax-table, speedbar-key-map): + * progmodes/meta-mode.el (meta-mode-map): + * novice.el (disabled-command-hook): + * loadhist.el (unload-hook-features-list): + * frame.el (blink-cursor): + * files.el (find-file-not-found-hooks, write-file-hooks) + (write-contents-hooks): + * emulation/tpu-edt.el (GOLD-map): + * emacs-lock.el (emacs-lock-from-exiting): + * emacs-lisp/generic.el (generic-font-lock-defaults): + * emacs-lisp/chart.el (chart-map): + * dos-fns.el (register-name-alist): + * dired-x.el (dired-omit-files-p): + * desktop.el (desktop-enable): + * cus-edit.el (custom-mode-hook): + * buff-menu.el (buffer-menu-mode-hook): + * bookmark.el (bookmark-read-annotation-text-func) + (bookmark-exit-hooks): + * allout.el (allout-mode-deactivate-hook) + (allout-exposure-change-hook, allout-structure-added-hook) + (allout-structure-deleted-hook, allout-structure-shifted-hook): + * dirtrack.el (dirtrack-toggle, dirtrackp, dirtrack-debug-toggle) + (dirtrack-debug): Move call to define-obsolete-variable-alias so it + comes before the corresponding variable's definition. + 2012-05-12 Chong Yidong * buff-menu.el (Buffer-menu-buffer+size-width): Doc fix (Bug#11454). diff --git a/lisp/allout.el b/lisp/allout.el index 6e544716247..7077af55e60 100644 --- a/lisp/allout.el +++ b/lisp/allout.el @@ -1405,15 +1405,17 @@ their settings before allout-mode was started." (defvar allout-mode-hook nil "Hook run when allout mode starts.") ;;;_ = allout-mode-deactivate-hook -(defvar allout-mode-deactivate-hook nil - "Hook run when allout mode ends.") (define-obsolete-variable-alias 'allout-mode-deactivate-hook 'allout-mode-off-hook "24.1") +(defvar allout-mode-deactivate-hook nil + "Hook run when allout mode ends.") ;;;_ = allout-exposure-category (defvar allout-exposure-category nil "Symbol for use as allout invisible-text overlay category.") ;;;_ = allout-exposure-change-functions +(define-obsolete-variable-alias 'allout-exposure-change-hook + 'allout-exposure-change-functions "24.2") (defcustom allout-exposure-change-functions nil "Abnormal hook run after allout outline subtree exposure changes. It is run at the conclusion of `allout-flag-region'. @@ -1429,10 +1431,9 @@ This hook might be invoked multiple times by a single command." :group 'allout :version "24.2") -(define-obsolete-variable-alias 'allout-exposure-change-hook - 'allout-exposure-change-functions "24.2") - ;;;_ = allout-structure-added-functions +(define-obsolete-variable-alias 'allout-structure-added-hook + 'allout-structure-added-functions "24.2") (defcustom allout-structure-added-functions nil "Abnormal hook run after adding items to an Allout outline. Functions on the hook should take two arguments: @@ -1445,10 +1446,9 @@ This hook might be invoked multiple times by a single command." :group 'allout :version "24.2") -(define-obsolete-variable-alias 'allout-structure-added-hook - 'allout-structure-added-functions "24.2") - ;;;_ = allout-structure-deleted-functions +(define-obsolete-variable-alias 'allout-structure-deleted-hook + 'allout-structure-deleted-functions "24.2") (defcustom allout-structure-deleted-functions nil "Abnormal hook run after deleting subtrees from an Allout outline. Functions on the hook must take two arguments: @@ -1464,10 +1464,9 @@ This hook might be invoked multiple times by a single command." :group 'allout :version "24.2") -(define-obsolete-variable-alias 'allout-structure-deleted-hook - 'allout-structure-deleted-functions "24.2") - ;;;_ = allout-structure-shifted-functions +(define-obsolete-variable-alias 'allout-structure-shifted-hook + 'allout-structure-shifted-functions "24.2") (defcustom allout-structure-shifted-functions nil "Abnormal hook run after shifting items in an Allout outline. Functions on the hook should take two arguments: @@ -1483,9 +1482,6 @@ This hook might be invoked multiple times by a single command." :group 'allout :version "24.2") -(define-obsolete-variable-alias 'allout-structure-shifted-hook - 'allout-structure-shifted-functions "24.2") - ;;;_ = allout-after-copy-or-kill-hook (defcustom allout-after-copy-or-kill-hook nil "Normal hook run after copying outline text.." diff --git a/lisp/bookmark.el b/lisp/bookmark.el index 33b91fd7db2..f7266dc2250 100644 --- a/lisp/bookmark.el +++ b/lisp/bookmark.el @@ -828,11 +828,11 @@ annotations." "# Date: " (current-time-string) "\n")) +(define-obsolete-variable-alias 'bookmark-read-annotation-text-func + 'bookmark-edit-annotation-text-func "23.1") (defvar bookmark-edit-annotation-text-func 'bookmark-default-annotation-text "Function to return default text to use for a bookmark annotation. It takes one argument, the name of the bookmark, as a string.") -(define-obsolete-variable-alias 'bookmark-read-annotation-text-func - 'bookmark-edit-annotation-text-func "23.1") (defvar bookmark-edit-annotation-mode-map (let ((map (make-sparse-keymap))) @@ -2164,11 +2164,11 @@ strings returned are not." "Hook run at the end of loading library `bookmark.el'.") ;; Exit Hook, called from kill-emacs-hook +(define-obsolete-variable-alias 'bookmark-exit-hooks + 'bookmark-exit-hook "22.1") (defvar bookmark-exit-hook nil "Hook run when Emacs exits.") -(define-obsolete-variable-alias 'bookmark-exit-hooks 'bookmark-exit-hook "22.1") - (defun bookmark-exit-hook-internal () "Save bookmark state, if necessary, at Emacs exit time. This also runs `bookmark-exit-hook'." diff --git a/lisp/buff-menu.el b/lisp/buff-menu.el index 0ecbba09254..f501583b9ba 100644 --- a/lisp/buff-menu.el +++ b/lisp/buff-menu.el @@ -199,6 +199,9 @@ commands.") map) "Local keymap for `Buffer-menu-mode' buffers.") +(define-obsolete-variable-alias 'buffer-menu-mode-hook + 'Buffer-menu-mode-hook "23.1") + (define-derived-mode Buffer-menu-mode tabulated-list-mode "Buffer Menu" "Major mode for Buffer Menu buffers. The Buffer Menu is invoked by the commands \\[list-buffers], \\[buffer-menu], and @@ -207,9 +210,6 @@ The Buffer Menu is invoked by the commands \\[list-buffers], \\[buffer-menu], an (lambda (&optional _noconfirm) 'fast)) (add-hook 'tabulated-list-revert-hook 'list-buffers--refresh nil t)) -(define-obsolete-variable-alias 'buffer-menu-mode-hook - 'Buffer-menu-mode-hook "23.1") - (defun buffer-menu (&optional arg) "Switch to the Buffer Menu. By default, all buffers are listed except those whose names start diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el index 52308319f15..e946279ee57 100644 --- a/lisp/cus-edit.el +++ b/lisp/cus-edit.el @@ -4825,6 +4825,7 @@ If several parents are listed, go to the first of them." (set (make-local-variable 'widget-link-suffix) "")) (setq show-trailing-whitespace nil)) +(define-obsolete-variable-alias 'custom-mode-hook 'Custom-mode-hook "23.1") (define-derived-mode Custom-mode nil "Custom" "Major mode for editing customization buffers. @@ -4873,7 +4874,6 @@ if that value is non-nil." (Custom-mode)) (make-obsolete 'custom-mode 'Custom-mode "23.1") (put 'custom-mode 'mode-class 'special) -(define-obsolete-variable-alias 'custom-mode-hook 'Custom-mode-hook "23.1") (add-to-list 'debug-ignored-errors "^Invalid face:? ") diff --git a/lisp/desktop.el b/lisp/desktop.el index 674ce72dba3..f7a33f2b05d 100644 --- a/lisp/desktop.el +++ b/lisp/desktop.el @@ -145,6 +145,8 @@ backward compatibility.") "Save status of Emacs when you exit." :group 'frames) +;; Maintained for backward compatibility +(define-obsolete-variable-alias 'desktop-enable 'desktop-save-mode "22.1") ;;;###autoload (define-minor-mode desktop-save-mode "Toggle desktop saving (Desktop Save mode). @@ -158,10 +160,6 @@ one session to another. See variable `desktop-save' and function :global t :group 'desktop) -;; Maintained for backward compatibility -(define-obsolete-variable-alias 'desktop-enable - 'desktop-save-mode "22.1") - (defun desktop-save-mode-off () "Disable `desktop-save-mode'. Provided for use in hooks." (desktop-save-mode 0)) diff --git a/lisp/dired-x.el b/lisp/dired-x.el index b45a340706f..1012deccd3c 100644 --- a/lisp/dired-x.el +++ b/lisp/dired-x.el @@ -132,6 +132,8 @@ If nil, there is no maximum size." :type '(choice (const :tag "no maximum" nil) integer) :group 'dired-x) +;; For backward compatibility +(define-obsolete-variable-alias 'dired-omit-files-p 'dired-omit-mode "22.1") (define-minor-mode dired-omit-mode "Toggle omission of uninteresting files in Dired (Dired-Omit mode). With a prefix argument ARG, enable Dired-Omit mode if ARG is @@ -157,9 +159,6 @@ See Info node `(dired-x) Omitting Variables' for more information." (put 'dired-omit-mode 'safe-local-variable 'booleanp) -;; For backward compatibility -(define-obsolete-variable-alias 'dired-omit-files-p 'dired-omit-mode "22.1") - (defcustom dired-omit-files "^\\.?#\\|^\\.$\\|^\\.\\.$" "Filenames matching this regexp will not be displayed. This only has effect when `dired-omit-mode' is t. See interactive function diff --git a/lisp/dirtrack.el b/lisp/dirtrack.el index 4f6236b240e..5e825032741 100644 --- a/lisp/dirtrack.el +++ b/lisp/dirtrack.el @@ -179,6 +179,8 @@ and ends with a forward slash." dir)) +(define-obsolete-function-alias 'dirtrack-toggle 'dirtrack-mode "23.1") +(define-obsolete-variable-alias 'dirtrackp 'dirtrack-mode "23.1") ;;;###autoload (define-minor-mode dirtrack-mode "Toggle directory tracking in shell buffers (Dirtrack mode). @@ -198,10 +200,10 @@ directory." (add-hook 'comint-preoutput-filter-functions 'dirtrack nil t) (remove-hook 'comint-preoutput-filter-functions 'dirtrack t))) -(define-obsolete-function-alias 'dirtrack-toggle 'dirtrack-mode "23.1") -(define-obsolete-variable-alias 'dirtrackp 'dirtrack-mode "23.1") - +(define-obsolete-function-alias 'dirtrack-debug-toggle 'dirtrack-debug-mode + "23.1") +(define-obsolete-variable-alias 'dirtrack-debug 'dirtrack-debug-mode "23.1") (define-minor-mode dirtrack-debug-mode "Toggle Dirtrack debugging. With a prefix argument ARG, enable Dirtrack debugging if ARG is @@ -211,11 +213,6 @@ the mode if ARG is omitted or nil." (if dirtrack-debug-mode (display-buffer (get-buffer-create dirtrack-debug-buffer)))) -(define-obsolete-function-alias 'dirtrack-debug-toggle 'dirtrack-debug-mode - "23.1") -(define-obsolete-variable-alias 'dirtrack-debug 'dirtrack-debug-mode "23.1") - - (defun dirtrack-debug-message (msg1 msg2) "Insert strings at the end of `dirtrack-debug-buffer'." (when dirtrack-debug-mode diff --git a/lisp/dos-fns.el b/lisp/dos-fns.el index 074fd642d67..c317bf84db6 100644 --- a/lisp/dos-fns.el +++ b/lisp/dos-fns.el @@ -233,15 +233,15 @@ returned unaltered." (add-hook 'before-init-hook 'dos-reevaluate-defcustoms) +(define-obsolete-variable-alias + 'register-name-alist 'dos-register-name-alist "24.1") + (defvar dos-register-name-alist '((ax . 0) (bx . 1) (cx . 2) (dx . 3) (si . 4) (di . 5) (cflag . 6) (flags . 7) (al . (0 . 0)) (bl . (1 . 0)) (cl . (2 . 0)) (dl . (3 . 0)) (ah . (0 . 1)) (bh . (1 . 1)) (ch . (2 . 1)) (dh . (3 . 1)))) -(define-obsolete-variable-alias - 'register-name-alist 'dos-register-name-alist "24.1") - (defun dos-make-register () (make-vector 8 0)) diff --git a/lisp/emacs-lisp/chart.el b/lisp/emacs-lisp/chart.el index 2e3abb2e9d3..74087014d69 100644 --- a/lisp/emacs-lisp/chart.el +++ b/lisp/emacs-lisp/chart.el @@ -62,8 +62,8 @@ (require 'eieio) ;;; Code: -(defvar chart-mode-map (make-sparse-keymap) "Keymap used in chart mode.") (define-obsolete-variable-alias 'chart-map 'chart-mode-map "24.1") +(defvar chart-mode-map (make-sparse-keymap) "Keymap used in chart mode.") (defvar chart-local-object nil "Local variable containing the locally displayed chart object.") diff --git a/lisp/emacs-lisp/generic.el b/lisp/emacs-lisp/generic.el index 6667a101865..b9db092fafc 100644 --- a/lisp/emacs-lisp/generic.el +++ b/lisp/emacs-lisp/generic.el @@ -97,10 +97,11 @@ ;; Internal Variables ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(define-obsolete-variable-alias 'generic-font-lock-defaults + 'generic-font-lock-keywords "22.1") (defvar generic-font-lock-keywords nil "Keywords for `font-lock-defaults' in a generic mode.") (make-variable-buffer-local 'generic-font-lock-keywords) -(define-obsolete-variable-alias 'generic-font-lock-defaults 'generic-font-lock-keywords "22.1") ;;;###autoload (defvar generic-mode-list nil diff --git a/lisp/emacs-lock.el b/lisp/emacs-lock.el index f5954564a2f..6d91238f2b1 100644 --- a/lisp/emacs-lock.el +++ b/lisp/emacs-lock.el @@ -186,6 +186,8 @@ Return a value appropriate for `kill-buffer-query-functions' (which see)." ;; anything else (turn off) mode)))) +(define-obsolete-variable-alias 'emacs-lock-from-exiting + 'emacs-lock-mode "24.1") ;;;###autoload (define-minor-mode emacs-lock-mode "Toggle Emacs Lock mode in the current buffer. @@ -245,8 +247,6 @@ Other values are interpreted as usual." ;;; Compatibility -(define-obsolete-variable-alias 'emacs-lock-from-exiting 'emacs-lock-mode "24.1") - (defun toggle-emacs-lock () "Toggle `emacs-lock-from-exiting' for the current buffer." (interactive) diff --git a/lisp/emulation/tpu-edt.el b/lisp/emulation/tpu-edt.el index eaf88ccdf85..b8d07e8b744 100644 --- a/lisp/emulation/tpu-edt.el +++ b/lisp/emulation/tpu-edt.el @@ -315,6 +315,7 @@ Otherwise, use `spell-region'." ;;; Global Keymaps ;;; +(define-obsolete-variable-alias 'GOLD-map 'tpu-gold-map "23.1") (defvar tpu-gold-map (let ((map (make-keymap))) ;; Previously we used escape sequences here. We now instead presume @@ -494,7 +495,6 @@ Otherwise, use `spell-region'." map) "Maps the function keys on the VT100 keyboard preceded by PF1. GOLD is the ASCII 7-bit escape sequence OP.") -(define-obsolete-variable-alias 'GOLD-map 'tpu-gold-map "23.1") (defvar tpu-global-map (let ((map (make-sparse-keymap))) diff --git a/lisp/files.el b/lisp/files.el index 2870fedf967..6691b362292 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -415,13 +415,13 @@ location of point in the current buffer." ;;;It is not useful to make this a local variable. ;;;(put 'find-file-not-found-hooks 'permanent-local t) +(define-obsolete-variable-alias 'find-file-not-found-hooks + 'find-file-not-found-functions "22.1") (defvar find-file-not-found-functions nil "List of functions to be called for `find-file' on nonexistent file. These functions are called as soon as the error is detected. Variable `buffer-file-name' is already set up. The functions are called in the order given until one of them returns non-nil.") -(define-obsolete-variable-alias 'find-file-not-found-hooks - 'find-file-not-found-functions "22.1") ;;;It is not useful to make this a local variable. ;;;(put 'find-file-hooks 'permanent-local t) @@ -435,6 +435,7 @@ functions are called." :options '(auto-insert) :version "22.1") +(define-obsolete-variable-alias 'write-file-hooks 'write-file-functions "22.1") (defvar write-file-functions nil "List of functions to be called before writing out a buffer to a file. If one of them returns non-nil, the file is considered already written @@ -451,13 +452,14 @@ coding system and setting mode bits. (See Info node `(elisp)Saving Buffers'.) To perform various checks or updates before the buffer is saved, use `before-save-hook'.") (put 'write-file-functions 'permanent-local t) -(define-obsolete-variable-alias 'write-file-hooks 'write-file-functions "22.1") (defvar local-write-file-hooks nil) (make-variable-buffer-local 'local-write-file-hooks) (put 'local-write-file-hooks 'permanent-local t) (make-obsolete-variable 'local-write-file-hooks 'write-file-functions "22.1") +(define-obsolete-variable-alias 'write-contents-hooks + 'write-contents-functions "22.1") (defvar write-contents-functions nil "List of functions to be called before writing out a buffer to a file. If one of them returns non-nil, the file is considered already written @@ -475,8 +477,6 @@ For hooks that _do_ pertain to the particular visited file, use To perform various checks or updates before the buffer is saved, use `before-save-hook'.") (make-variable-buffer-local 'write-contents-functions) -(define-obsolete-variable-alias 'write-contents-hooks - 'write-contents-functions "22.1") (defcustom enable-local-variables t "Control use of local variables in files you visit. diff --git a/lisp/frame.el b/lisp/frame.el index 1ee9d966ef1..5e380cd8fc6 100644 --- a/lisp/frame.el +++ b/lisp/frame.el @@ -1612,6 +1612,8 @@ itself as a pre-command hook." (cancel-timer blink-cursor-timer) (setq blink-cursor-timer nil))) +(define-obsolete-variable-alias 'blink-cursor 'blink-cursor-mode "22.1") + (define-minor-mode blink-cursor-mode "Toggle cursor blinking (Blink Cursor mode). With a prefix argument ARG, enable Blink Cursor mode if ARG is @@ -1638,8 +1640,6 @@ terminals, cursor blinking is controlled by the terminal." blink-cursor-delay 'blink-cursor-start)))) -(define-obsolete-variable-alias 'blink-cursor 'blink-cursor-mode "22.1") - ;;;; Key bindings @@ -1652,7 +1652,8 @@ terminals, cursor blinking is controlled by the terminal." ;; Misc. ;; Only marked as obsolete in 24.2. -(define-obsolete-variable-alias 'automatic-hscrolling 'auto-hscroll-mode "22.1") +(define-obsolete-variable-alias 'automatic-hscrolling + 'auto-hscroll-mode "22.1") (make-variable-buffer-local 'show-trailing-whitespace) diff --git a/lisp/loadhist.el b/lisp/loadhist.el index d747eb13b79..d5099340a17 100644 --- a/lisp/loadhist.el +++ b/lisp/loadhist.el @@ -143,13 +143,13 @@ These are symbols with hooklike values whose names don't end in `-hook' or `-hooks', from which `unload-feature' should try to remove pertinent symbols.") +(define-obsolete-variable-alias 'unload-hook-features-list + 'unload-function-defs-list "22.2") (defvar unload-function-defs-list nil "List of definitions in the Lisp library being unloaded. This is meant to be used by `FEATURE-unload-function'; see the documentation of `unload-feature' for details.") -(define-obsolete-variable-alias 'unload-hook-features-list - 'unload-function-defs-list "22.2") (defun unload--set-major-mode () (save-current-buffer diff --git a/lisp/novice.el b/lisp/novice.el index a5d38a3a57f..fa41b2bbc1e 100644 --- a/lisp/novice.el +++ b/lisp/novice.el @@ -35,14 +35,14 @@ (eval-when-compile (require 'cl)) +;;;###autoload +(define-obsolete-variable-alias 'disabled-command-hook + 'disabled-command-function "22.1") ;;;###autoload (defvar disabled-command-function 'disabled-command-function "Function to call to handle disabled commands. If nil, the feature is disabled, i.e., all commands work normally.") -;;;###autoload -(define-obsolete-variable-alias 'disabled-command-hook 'disabled-command-function "22.1") - ;; It is ok here to assume that this-command is a symbol ;; because we won't get called otherwise. ;;;###autoload diff --git a/lisp/progmodes/meta-mode.el b/lisp/progmodes/meta-mode.el index d0432f58d60..9978ee62687 100644 --- a/lisp/progmodes/meta-mode.el +++ b/lisp/progmodes/meta-mode.el @@ -829,6 +829,7 @@ The environment marked is the one that contains point or follows point." st) "Syntax table used in Metafont or MetaPost mode.") +(define-obsolete-variable-alias 'meta-mode-map 'meta-common-mode-map "24.1") (defvar meta-common-mode-map (let ((map (make-sparse-keymap))) ;; Comment Paragraphs: @@ -858,7 +859,6 @@ The environment marked is the one that contains point or follows point." ;; (define-key map "\C-c\C-l" 'meta-recenter-output) map) "Keymap used in Metafont or MetaPost mode.") -(define-obsolete-variable-alias 'meta-mode-map 'meta-common-mode-map "24.1") (easy-menu-define meta-mode-menu meta-common-mode-map diff --git a/lisp/speedbar.el b/lisp/speedbar.el index c1e86e17e37..28879fed30b 100644 --- a/lisp/speedbar.el +++ b/lisp/speedbar.el @@ -774,6 +774,8 @@ If you want to change this while speedbar is active, either use (defvar speedbar-update-flag-disable nil "Permanently disable changing of the update flag.") +(define-obsolete-variable-alias + 'speedbar-syntax-table 'speedbar-mode-syntax-table "24.1") (defvar speedbar-mode-syntax-table (let ((st (make-syntax-table))) ;; Turn off paren matching around here. @@ -787,10 +789,9 @@ If you want to change this while speedbar is active, either use (modify-syntax-entry ?\] " " st) st) "Syntax-table used on the speedbar.") -(define-obsolete-variable-alias - 'speedbar-syntax-table 'speedbar-mode-syntax-table "24.1") +(define-obsolete-variable-alias 'speedbar-key-map 'speedbar-mode-map "24.1") (defvar speedbar-mode-map (let ((map (make-keymap))) (suppress-keymap map t) @@ -825,7 +826,6 @@ If you want to change this while speedbar is active, either use (dframe-update-keymap map) map) "Keymap used in speedbar buffer.") -(define-obsolete-variable-alias 'speedbar-key-map 'speedbar-mode-map "24.1") (defun speedbar-make-specialized-keymap () "Create a keymap for use with a speedbar major or minor display mode. diff --git a/lisp/textmodes/reftex-index.el b/lisp/textmodes/reftex-index.el index fdcbf8b0b43..2d395fe3df2 100644 --- a/lisp/textmodes/reftex-index.el +++ b/lisp/textmodes/reftex-index.el @@ -274,6 +274,8 @@ will prompt for other arguments." (and newtag (cdr cell) (not (member newtag (cdr cell))) (push newtag (cdr cell))))) +(define-obsolete-variable-alias + 'reftex-index-map 'reftex-index-mode-map "24.1") (defvar reftex-index-mode-map (let ((map (make-sparse-keymap))) ;; Index map @@ -377,8 +379,6 @@ will prompt for other arguments." map) "Keymap used for *Index* buffers.") -(define-obsolete-variable-alias - 'reftex-index-map 'reftex-index-mode-map "24.1") (defvar reftex-index-menu) @@ -1179,6 +1179,8 @@ This gets refreshed in every phrases command.") "Font lock keywords for reftex-index-phrases-mode.") (defvar reftex-index-phrases-font-lock-defaults nil "Font lock defaults for reftex-index-phrases-mode.") +(define-obsolete-variable-alias + 'reftex-index-phrases-map 'reftex-index-phrases-mode-map "24.1") (defvar reftex-index-phrases-mode-map (let ((map (make-sparse-keymap))) ;; Keybindings and Menu for phrases buffer @@ -1244,8 +1246,6 @@ This gets refreshed in every phrases command.") map) "Keymap used for *toc* buffer.") -(define-obsolete-variable-alias - 'reftex-index-phrases-map 'reftex-index-phrases-mode-map "24.1") (defun reftex-index-phrase-selection-or-word (arg) diff --git a/lisp/textmodes/reftex-sel.el b/lisp/textmodes/reftex-sel.el index c583b67f13a..627dfba0071 100644 --- a/lisp/textmodes/reftex-sel.el +++ b/lisp/textmodes/reftex-sel.el @@ -71,6 +71,8 @@ (define-key map "-" 'negative-argument) map)) +(define-obsolete-variable-alias + 'reftex-select-label-map 'reftex-select-label-mode-map "24.1") (defvar reftex-select-label-mode-map (let ((map (make-sparse-keymap))) (set-keymap-parent map reftex-select-shared-map) @@ -102,8 +104,6 @@ "Keymap used for *RefTeX Select* buffer, when selecting a label. This keymap can be used to configure the label selection process which is started with the command \\[reftex-reference].") -(define-obsolete-variable-alias - 'reftex-select-label-map 'reftex-select-label-mode-map "24.1") (define-derived-mode reftex-select-label-mode fundamental-mode "LSelect" "Major mode for selecting a label in a LaTeX document. @@ -126,6 +126,8 @@ During a selection process, these are the local bindings. ;; We do not set a local map - reftex-select-item does this. ) +(define-obsolete-variable-alias + 'reftex-select-bib-map 'reftex-select-bib-mode-map "24.1") (defvar reftex-select-bib-mode-map (let ((map (make-sparse-keymap))) (set-keymap-parent map reftex-select-shared-map) @@ -147,8 +149,6 @@ During a selection process, these are the local bindings. "Keymap used for *RefTeX Select* buffer, when selecting a BibTeX entry. This keymap can be used to configure the BibTeX selection process which is started with the command \\[reftex-citation].") -(define-obsolete-variable-alias - 'reftex-select-bib-map 'reftex-select-bib-mode-map "24.1") (define-derived-mode reftex-select-bib-mode fundamental-mode "BSelect" "Major mode for selecting a citation key in a LaTeX document. diff --git a/lisp/textmodes/reftex-toc.el b/lisp/textmodes/reftex-toc.el index 5d293d404e6..519236a3621 100644 --- a/lisp/textmodes/reftex-toc.el +++ b/lisp/textmodes/reftex-toc.el @@ -31,6 +31,7 @@ (require 'reftex) ;;; +(define-obsolete-variable-alias 'reftex-toc-map 'reftex-toc-mode-map "24.1") (defvar reftex-toc-mode-map (let ((map (make-sparse-keymap))) @@ -122,7 +123,6 @@ map) "Keymap used for *toc* buffer.") -(define-obsolete-variable-alias 'reftex-toc-map 'reftex-toc-mode-map "24.1") (defvar reftex-toc-menu) (defvar reftex-last-window-height nil) diff --git a/lisp/tooltip.el b/lisp/tooltip.el index 1fab25fe5cd..9d0fbaae9d8 100644 --- a/lisp/tooltip.el +++ b/lisp/tooltip.el @@ -154,6 +154,8 @@ This variable is obsolete; instead of setting it to t, disable ;;; Variables that are not customizable. +(define-obsolete-variable-alias 'tooltip-hook 'tooltip-functions "23.1") + (defvar tooltip-functions nil "Functions to call to display tooltips. Each function is called with one argument EVENT which is a copy @@ -161,8 +163,6 @@ of the last mouse movement event that occurred. If one of these functions displays the tooltip, it should return non-nil and the rest are not called.") -(define-obsolete-variable-alias 'tooltip-hook 'tooltip-functions "23.1") - (defvar tooltip-timeout-id nil "The id of the timeout started when Emacs becomes idle.") diff --git a/lisp/vc/log-edit.el b/lisp/vc/log-edit.el index 2abb1ec9c0a..5ecd5c44b2e 100644 --- a/lisp/vc/log-edit.el +++ b/lisp/vc/log-edit.el @@ -195,7 +195,10 @@ when this variable is set to nil.") (defconst log-edit-maximum-comment-ring-size 32 "Maximum number of saved comments in the comment ring.") +(define-obsolete-variable-alias 'vc-comment-ring 'log-edit-comment-ring "22.1") (defvar log-edit-comment-ring (make-ring log-edit-maximum-comment-ring-size)) +(define-obsolete-variable-alias 'vc-comment-ring-index + 'log-edit-comment-ring-index "22.1") (defvar log-edit-comment-ring-index nil) (defvar log-edit-last-comment-match "") @@ -301,8 +304,6 @@ automatically." (insert "\n")))) ;; Compatibility with old names. -(define-obsolete-variable-alias 'vc-comment-ring 'log-edit-comment-ring "22.1") -(define-obsolete-variable-alias 'vc-comment-ring-index 'log-edit-comment-ring-index "22.1") (define-obsolete-function-alias 'vc-previous-comment 'log-edit-previous-comment "22.1") (define-obsolete-function-alias 'vc-next-comment 'log-edit-next-comment "22.1") (define-obsolete-function-alias 'vc-comment-search-reverse 'log-edit-comment-search-backward "22.1") From 205a7391f7d6b5ffb4d366a142f69cfa0b8b3ac3 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Sun, 13 May 2012 11:05:04 +0200 Subject: [PATCH 458/564] * net/dbus.el (dbus-call-method): Restore events not from D-Bus. (Bug#11447) --- lisp/ChangeLog | 5 +++++ lisp/net/dbus.el | 14 ++++++++------ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c12bf638243..1bde354a551 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-05-13 Michael Albinus + + * net/dbus.el (dbus-call-method): Restore events not from D-Bus. + (Bug#11447) + 2012-05-13 Stefan Monnier Move define-obsolete-variable-alias before the var's definition. diff --git a/lisp/net/dbus.el b/lisp/net/dbus.el index d845a4932e2..c83651b41b5 100644 --- a/lisp/net/dbus.el +++ b/lisp/net/dbus.el @@ -263,12 +263,16 @@ object is returned instead of a list containing this single Lisp object. (apply 'dbus-message-internal dbus-message-type-method-call bus service path interface method 'dbus-call-method-handler args))) + ;; Wait until `dbus-call-method-handler' has put the result into ;; `dbus-return-values-table'. If no timeout is given, use the - ;; default 25". + ;; default 25". Events which are not from D-Bus must be restored. (with-timeout ((if timeout (/ timeout 1000.0) 25)) (while (eq (gethash key dbus-return-values-table :ignore) :ignore) - (read-event nil nil 0.1))) + (let ((event (let (unread-command-events) (read-event)))) + (when (and event (not (ignore-errors (dbus-check-event event)))) + (setq unread-command-events + (append unread-command-events (list event))))))) ;; Cleanup `dbus-return-values-table'. Return the result. (prog1 @@ -1089,9 +1093,7 @@ denoting the bus address. SERVICE must be a known service name, and PATH must be a valid object path. The last two parameters are strings. The result, the introspection data, is a string in XML format." - ;; We don't want to raise errors. `dbus-call-method-non-blocking' - ;; is used, because the handler can be registered in our Emacs - ;; instance; caller and callee would block each other. + ;; We don't want to raise errors. (dbus-ignore-errors (dbus-call-method bus service path dbus-interface-introspectable "Introspect" @@ -1534,7 +1536,7 @@ The result is a list of objects. Every object is a cons of an existing path name, and the list of available interface objects. An interface object is another cons, which car is the interface name, and the cdr is the list of properties as returned by -`dbus-get-all-properties' for that path and interface. Example: +`dbus-get-all-properties' for that path and interface. Example: \(dbus-get-all-managed-objects :session \"org.gnome.SettingsDaemon\" \"/\") From 6cb820bab5c5ed552baa4deebee870ceda3738db Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Sun, 13 May 2012 17:16:46 +0800 Subject: [PATCH 459/564] Backport fix for Bug#11382 from trunk --- lisp/ChangeLog | 6 ++++++ lisp/progmodes/compile.el | 18 +++++++++--------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e6183d92705..93127c43783 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2012-05-06 Troels Nielsen (tiny change) + + * progmodes/compile.el (compilation-internal-error-properties): + Calculate start position correctly when end-col is set but + end-line is not (Bug#11382). + 2012-05-11 Stefan Monnier * net/rlogin.el (rlogin-mode-map): Fix last change. diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el index c1d8f9db23f..cdaff413444 100644 --- a/lisp/progmodes/compile.el +++ b/lisp/progmodes/compile.el @@ -1068,14 +1068,14 @@ FMTS is a list of format specs for transforming the file name. end-marker loc end-loc) (if (not (and marker (marker-buffer marker))) (setq marker nil) ; no valid marker for this file - (setq loc (or line 1)) ; normalize no linenumber to line 1 + (unless line (setq line 1)) ; normalize no linenumber to line 1 (catch 'marker ; find nearest loc, at least one exists (dolist (x (cddr (compilation--file-struct->loc-tree file-struct))) ; Loop over remaining lines. - (if (> (car x) loc) ; Still bigger. + (if (> (car x) line) ; Still bigger. (setq marker-line x) - (if (> (- (or (car marker-line) 1) loc) - (- loc (car x))) ; Current line is nearer. + (if (> (- (or (car marker-line) 1) line) + (- line (car x))) ; Current line is nearer. (setq marker-line x)) (throw 'marker t)))) (setq marker (compilation--loc->marker (cadr marker-line)) @@ -1093,15 +1093,15 @@ FMTS is a list of format specs for transforming the file name. (save-restriction (widen) (goto-char (marker-position marker)) - (when (or end-col end-line) + ;; Set end-marker if appropriate and go to line. + (if (not (or end-col end-line)) + (beginning-of-line (- line marker-line -1)) (beginning-of-line (- (or end-line line) marker-line -1)) (if (or (null end-col) (< end-col 0)) (end-of-line) (compilation-move-to-column end-col screen-columns)) - (setq end-marker (point-marker))) - (beginning-of-line (if end-line - (- line end-line -1) - (- loc marker-line -1))) + (setq end-marker (point-marker)) + (when end-line (beginning-of-line (- line end-line -1)))) (if col (compilation-move-to-column col screen-columns) (forward-to-indentation 0)) From 64eee0dacdb58d39dfb17546521b9146eea44359 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sun, 13 May 2012 06:18:50 -0400 Subject: [PATCH 460/564] Auto-commit of generated files. --- autogen/configure | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/autogen/configure b/autogen/configure index dc7fb2943b3..23314605039 100755 --- a/autogen/configure +++ b/autogen/configure @@ -10326,13 +10326,13 @@ if test "${with_ns}" != no; then if test "${opsys}" = darwin; then NS_IMPL_COCOA=yes ns_appdir=`pwd`/nextstep/Emacs.app - ns_appbindir=${ns_appdir}/Contents/MacOS/ + ns_appbindir=${ns_appdir}/Contents/MacOS ns_appresdir=${ns_appdir}/Contents/Resources ns_appsrc=${srcdir}/nextstep/Cocoa/Emacs.base elif test -f $GNUSTEP_CONFIG_FILE; then NS_IMPL_GNUSTEP=yes ns_appdir=`pwd`/nextstep/Emacs.app - ns_appbindir=${ns_appdir}/ + ns_appbindir=${ns_appdir} ns_appresdir=${ns_appdir}/Resources ns_appsrc=${srcdir}/nextstep/GNUstep/Emacs.base GNUSTEP_SYSTEM_HEADERS="$(. $GNUSTEP_CONFIG_FILE; echo $GNUSTEP_SYSTEM_HEADERS)" From c3b16428ea14151a64b1155ef304df15f23c8125 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sun, 13 May 2012 06:23:39 -0400 Subject: [PATCH 461/564] Auto-commit of loaddefs files. --- lisp/dired.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/dired.el b/lisp/dired.el index f6f7d71c636..465e485a996 100644 --- a/lisp/dired.el +++ b/lisp/dired.el @@ -4200,7 +4200,7 @@ instead. ;;;*** ;;;### (autoloads (dired-do-relsymlink dired-jump-other-window dired-jump) -;;;;;; "dired-x" "dired-x.el" "2a39a8306a5541c304bc4ab602876f92") +;;;;;; "dired-x" "dired-x.el" "d09d49d54080e60ad6ecee5573b4e517") ;;; Generated autoloads from dired-x.el (autoload 'dired-jump "dired-x" "\ From 0ae03b6aae534c1a47f7246e791138b41203b036 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Sun, 13 May 2012 22:23:45 +0800 Subject: [PATCH 462/564] Adapt Electric Buffer Menu to recent Buffer Menu changes. * lisp/ebuff-menu.el (electric-buffer-list): Put electric buffer menu command descriptions in this docstring, instead of the docstring of electric-buffer-menu-mode. Code cleanups. (electric-buffer-menu-mode): Use define-derived-mode. Rename from Electric-buffer-menu-mode. (electric-buffer-update-highlight): Minor code cleanup. * lisp/emacs-lisp/tabulated-list.el (tabulated-list-format) (tabulated-list-entries, tabulated-list-padding) (tabulated-list-sort-key): Make permanent-local. Fixes: debbugs:11455 --- lisp/ChangeLog | 14 ++++ lisp/ebuff-menu.el | 127 +++++++++++++----------------- lisp/emacs-lisp/tabulated-list.el | 9 +++ 3 files changed, 78 insertions(+), 72 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 1bde354a551..557e8eb2e48 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,17 @@ +2012-05-13 Chong Yidong + + * emacs-lisp/tabulated-list.el (tabulated-list-format) + (tabulated-list-entries, tabulated-list-padding) + (tabulated-list-sort-key): Make permanent-local. + + * ebuff-menu.el: Adapt to Buffer Menu changes (Bug#11455). + (electric-buffer-list): Put electric buffer menu + command descriptions in this docstring, instead of the docstring + of electric-buffer-menu-mode. Code cleanups. + (electric-buffer-menu-mode): Use define-derived-mode. Rename from + Electric-buffer-menu-mode. + (electric-buffer-update-highlight): Minor code cleanup. + 2012-05-13 Michael Albinus * net/dbus.el (dbus-call-method): Restore events not from D-Bus. diff --git a/lisp/ebuff-menu.el b/lisp/ebuff-menu.el index 50a75c1aa57..e973f45bc44 100644 --- a/lisp/ebuff-menu.el +++ b/lisp/ebuff-menu.el @@ -31,9 +31,6 @@ (require 'electric) -;; this depends on the format of list-buffers (from src/buffer.c) and -;; on stuff in lisp/buff-menu.el - (defvar electric-buffer-menu-mode-map (let ((map (make-keymap))) (fillarray (car (cdr map)) 'Electric-buffer-menu-undefined) @@ -91,25 +88,33 @@ (put 'Helper-describe-bindings :advertised-binding "?") (defvar electric-buffer-menu-mode-hook nil - "Normal hook run by `electric-buffer-list'.") + "Normal hook run by `electric-buffer-menu-mode'.") ;;;###autoload (defun electric-buffer-list (arg) - "Pop up a buffer describing the set of Emacs buffers. -Vaguely like ITS lunar select buffer; combining typeoutoid buffer -listing with menuoid buffer selection. - -If the very next character typed is a space then the buffer list -window disappears. Otherwise, one may move around in the buffer list -window, marking buffers to be selected, saved or deleted. - -To exit and select a new buffer, type a space when the cursor is on -the appropriate line of the buffer-list window. Other commands are -much like those of `Buffer-menu-mode'. + "Pop up the Buffer Menu in an \"electric\" window. +If you type SPC or RET (`Electric-buffer-menu-select'), that +selects the buffer at point and quits the \"electric\" window. +Otherwise, you can move around in the Buffer Menu, marking +buffers to be selected, saved or deleted; these other commands +are much like those of `Buffer-menu-mode'. Run hooks in `electric-buffer-menu-mode-hook' on entry. -\\{electric-buffer-menu-mode-map}" +\\ +\\[keyboard-quit] or \\[Electric-buffer-menu-quit] -- exit buffer menu, returning to previous window and buffer + configuration. If the very first character typed is a space, it + also has this effect. +\\[Electric-buffer-menu-select] -- select buffer of line point is on. + Also show buffers marked with m in other windows, + deletes buffers marked with \"D\", and saves those marked with \"S\". +\\[Buffer-menu-mark] -- mark buffer to be displayed. +\\[Buffer-menu-not-modified] -- clear modified-flag on that buffer. +\\[Buffer-menu-save] -- mark that buffer to be saved. +\\[Buffer-menu-delete] or \\[Buffer-menu-delete-backwards] -- mark that buffer to be deleted. +\\[Buffer-menu-unmark] -- remove all kinds of marks from current line. +\\[Electric-buffer-menu-mode-view-buffer] -- view buffer, returning when done. +\\[Buffer-menu-backup-unmark] -- back up a line and remove marks." (interactive "P") (let (select buffer) (save-window-excursion @@ -118,15 +123,15 @@ Run hooks in `electric-buffer-menu-mode-hook' on entry. (unwind-protect (progn (set-buffer buffer) - (Electric-buffer-menu-mode) + (electric-buffer-menu-mode) + (goto-char (point-min)) + (if (search-forward "\n." nil t) + (forward-char -1)) (electric-buffer-update-highlight) (setq select (catch 'electric-buffer-menu-select - (message "<<< Press Return to bury the buffer list >>>") - (if (eq (setq unread-command-events (list (read-event))) - ?\s) - (progn (setq unread-command-events nil) - (throw 'electric-buffer-menu-select nil))) + (message "<<< Type SPC or RET to bury the buffer list >>>") + (setq unread-command-events (list (read-event))) (let ((start-point (point)) (first (progn (goto-char (point-min)) (unless Buffer-menu-use-header-line @@ -150,15 +155,16 @@ Run hooks in `electric-buffer-menu-mode-hook' on entry. (Buffer-menu-mode) (bury-buffer) ;Get rid of window, if dedicated. (message ""))) - (if select - (progn (set-buffer buffer) - (let ((opoint (point-marker))) - (Buffer-menu-execute) - (goto-char (point-min)) - (if (prog1 (search-forward "\n>" nil t) - (goto-char opoint) (set-marker opoint nil)) - (Buffer-menu-select) - (switch-to-buffer (Buffer-menu-buffer t)))))))) + (when select + (set-buffer buffer) + (let ((opoint (point-marker))) + (Buffer-menu-execute) + (goto-char (point-min)) + (if (prog1 (search-forward "\n>" nil t) + (goto-char opoint) + (set-marker opoint nil)) + (Buffer-menu-select) + (switch-to-buffer (Buffer-menu-buffer t))))))) (defun electric-buffer-menu-looper (state condition) (cond ((and condition @@ -179,50 +185,27 @@ Run hooks in `electric-buffer-menu-mode-hook' on entry. (defvar Helper-return-blurb) -(put 'Electric-buffer-menu-mode 'mode-class 'special) -(defun Electric-buffer-menu-mode () - "Major mode for editing a list of buffers. -Each line describes one of the buffers in Emacs. -Letters do not insert themselves; instead, they are commands. -\\ -\\[keyboard-quit] or \\[Electric-buffer-menu-quit] -- exit buffer menu, returning to previous window and buffer - configuration. If the very first character typed is a space, it - also has this effect. -\\[Electric-buffer-menu-select] -- select buffer of line point is on. - Also show buffers marked with m in other windows, - deletes buffers marked with \"D\", and saves those marked with \"S\". -\\[Buffer-menu-mark] -- mark buffer to be displayed. -\\[Buffer-menu-not-modified] -- clear modified-flag on that buffer. -\\[Buffer-menu-save] -- mark that buffer to be saved. -\\[Buffer-menu-delete] or \\[Buffer-menu-delete-backwards] -- mark that buffer to be deleted. -\\[Buffer-menu-unmark] -- remove all kinds of marks from current line. -\\[Electric-buffer-menu-mode-view-buffer] -- view buffer, returning when done. -\\[Buffer-menu-backup-unmark] -- back up a line and remove marks. +(define-derived-mode electric-buffer-menu-mode Buffer-menu-mode + "Electric Buffer Menu" + "Toggle Electric Buffer Menu mode in this buffer. +With a prefix argument ARG, enable Long Lines mode if ARG is +positive, and disable it otherwise. If called from Lisp, enable +the mode if ARG is omitted or nil. -\\{electric-buffer-menu-mode-map} - -Entry to this mode via command `electric-buffer-list' calls the value of -`electric-buffer-menu-mode-hook'." - (let ((saved header-line-format)) - (kill-all-local-variables) - (setq header-line-format saved)) - (use-local-map electric-buffer-menu-mode-map) - (setq mode-name "Electric Buffer Menu") +Electric Buffer Menu mode is a minor mode which is automatically +enabled and disabled by the \\[electric-buffer-list] command. +See the documentation of `electric-buffer-list' for details." (setq mode-line-buffer-identification "Electric Buffer List") - (make-local-variable 'Helper-return-blurb) - (setq Helper-return-blurb "return to buffer editing") - (setq truncate-lines t) - (setq buffer-read-only t) - (setq major-mode 'Electric-buffer-menu-mode) - (goto-char (point-min)) - (if (search-forward "\n." nil t) (forward-char -1)) - (run-mode-hooks 'electric-buffer-menu-mode-hook)) + (set (make-local-variable 'Helper-return-blurb) + "return to buffer editing")) + +(define-obsolete-function-alias 'Electric-buffer-menu-mode + 'electric-buffer-menu-mode "24.2") ;; generally the same as Buffer-menu-mode-map ;; (except we don't indirect to global-map) (put 'Electric-buffer-menu-undefined 'suppress-keymap t) - (defun Electric-buffer-menu-exit () (interactive) (setq unread-command-events (listify-key-sequence (this-command-keys))) @@ -274,13 +257,13 @@ Return to Electric Buffer Menu when done." (sit-for 4)))) (defvar electric-buffer-overlay nil) + (defun electric-buffer-update-highlight () - (when (eq major-mode 'Electric-buffer-menu-mode) + (when (derived-mode-p 'electric-buffer-menu-mode) ;; Make sure we have an overlay to use. (or electric-buffer-overlay - (progn - (make-local-variable 'electric-buffer-overlay) - (setq electric-buffer-overlay (make-overlay (point) (point))))) + (set (make-local-variable 'electric-buffer-overlay) + (make-overlay (point) (point)))) (move-overlay electric-buffer-overlay (line-beginning-position) (line-end-position)) diff --git a/lisp/emacs-lisp/tabulated-list.el b/lisp/emacs-lisp/tabulated-list.el index e56fea58553..a56a7619ea9 100644 --- a/lisp/emacs-lisp/tabulated-list.el +++ b/lisp/emacs-lisp/tabulated-list.el @@ -35,6 +35,11 @@ ;;; Code: +;; The reason `tabulated-list-format' and other variables are +;; permanent-local is to make it convenient to switch to a different +;; major mode, switch back, and have the original Tabulated List data +;; still valid. See, for example, ebuff-menu.el. + (defvar tabulated-list-format nil "The format of the current Tabulated List mode buffer. This should be a vector of elements (NAME WIDTH SORT . PROPS), @@ -56,6 +61,7 @@ where: - `:pad-right': Number of additional padding spaces to the right of the column (defaults to 1 if omitted).") (make-variable-buffer-local 'tabulated-list-format) +(put 'tabulated-list-format 'permanent-local t) (defvar tabulated-list-use-header-line t "Whether the Tabulated List buffer should use a header line.") @@ -80,12 +86,14 @@ where: If `tabulated-list-entries' is a function, it is called with no arguments and must return a list of the above form.") (make-variable-buffer-local 'tabulated-list-entries) +(put 'tabulated-list-entries 'permanent-local t) (defvar tabulated-list-padding 0 "Number of characters preceding each Tabulated List mode entry. By default, lines are padded with spaces, but you can use the function `tabulated-list-put-tag' to change this.") (make-variable-buffer-local 'tabulated-list-padding) +(put 'tabulated-list-padding 'permanent-local t) (defvar tabulated-list-revert-hook nil "Hook run before reverting a Tabulated List buffer. @@ -107,6 +115,7 @@ NAME is a string matching one of the column names in `tabulated-list-format' then specifies how to sort). FLIP, if non-nil, means to invert the resulting sort.") (make-variable-buffer-local 'tabulated-list-sort-key) +(put 'tabulated-list-sort-key 'permanent-local t) (defsubst tabulated-list-get-id (&optional pos) "Return the entry ID of the Tabulated List entry at POS. From ac268e6786fbbb4eeb5b069b462bfb9c29272c67 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sun, 13 May 2012 18:35:13 +0300 Subject: [PATCH 463/564] Fix bug #11417 with infloop when left-fringe/right-fringe spec is used on TTY. src/xdisp.c (handle_stop): Don't call get_overlay_strings_1 if we already have overlays loaded. (handle_single_display_spec): Before returning without displaying fringe bitmap, synchronize the bidi iterator with the main display iterator, by calling iterate_out_of_display_property. (iterate_out_of_display_property): Detect buffer iteration by testing that it->string is a Lisp string. (get_next_display_element): When the current object is exhausted, and there's something on it->stack, call set_iterator_to_next to proceed with what's on the stack, instead of returning zero. (set_iterator_to_next): If called at the end of a Lisp string, proceed to consider_string_end without incrementing string position. Don't increment display vector index past the end of the display vector. --- src/ChangeLog | 17 +++++++++++++ src/xdisp.c | 69 +++++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 81 insertions(+), 5 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 9245e81a536..7352d8e0081 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,20 @@ +2012-05-13 Eli Zaretskii + + * xdisp.c (handle_stop): Don't call get_overlay_strings_1 if we + already have overlays loaded. + (handle_single_display_spec): Before returning without displaying + fringe bitmap, synchronize the bidi iterator with the main display + iterator, by calling iterate_out_of_display_property. + (iterate_out_of_display_property): Detect buffer iteration by + testing that it->string is a Lisp string. + (get_next_display_element): When the current object is exhausted, + and there's something on it->stack, call set_iterator_to_next to + proceed with what's on the stack, instead of returning zero. + (set_iterator_to_next): If called at the end of a Lisp string, + proceed to consider_string_end without incrementing string + position. Don't increment display vector index past the end of + the display vector. (Bug#11417) + 2012-05-11 Eli Zaretskii * xdisp.c (handle_single_display_spec): Return 1 for left-margin diff --git a/src/xdisp.c b/src/xdisp.c index fd26853e09b..b1e2a925bce 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -839,6 +839,7 @@ static int try_cursor_movement (Lisp_Object, struct text_pos, int *); static int trailing_whitespace_p (EMACS_INT); static intmax_t message_log_check_duplicate (EMACS_INT, EMACS_INT); static void push_it (struct it *, struct text_pos *); +static void iterate_out_of_display_property (struct it *); static void pop_it (struct it *); static void sync_frame_with_window_matrix_rows (struct window *); static void select_frame_for_redisplay (Lisp_Object); @@ -3125,7 +3126,15 @@ handle_stop (struct it *it) overlays even if the actual buffer text is replaced. */ if (!handle_overlay_change_p || it->sp > 1 - || !get_overlay_strings_1 (it, 0, 0)) + /* Don't call get_overlay_strings_1 if we already + have overlay strings loaded, because doing so + will load them again and push the iterator state + onto the stack one more time, which is not + expected by the rest of the code that processes + overlay strings. */ + || (it->n_overlay_strings <= 0 + ? !get_overlay_strings_1 (it, 0, 0) + : 0)) { if (it->ellipsis_p) setup_for_ellipsis (it, 0); @@ -4681,7 +4690,19 @@ handle_single_display_spec (struct it *it, Lisp_Object spec, Lisp_Object object, if (!FRAME_WINDOW_P (it->f)) /* If we return here, POSITION has been advanced across the text with this property. */ - return 1; + { + /* Synchronize the bidi iterator with POSITION. This is + needed because we are not going to push the iterator + on behalf of this display property, so there will be + no pop_it call to do this synchronization for us. */ + if (it->bidi_p) + { + it->position = *position; + iterate_out_of_display_property (it); + *position = it->position; + } + return 1; + } } else if (!frame_window_p) return 1; @@ -4692,7 +4713,15 @@ handle_single_display_spec (struct it *it, Lisp_Object spec, Lisp_Object object, || !(fringe_bitmap = lookup_fringe_bitmap (value))) /* If we return here, POSITION has been advanced across the text with this property. */ - return 1; + { + if (it && it->bidi_p) + { + it->position = *position; + iterate_out_of_display_property (it); + *position = it->position; + } + return 1; + } if (it) { @@ -5611,7 +5640,7 @@ push_it (struct it *it, struct text_pos *position) static void iterate_out_of_display_property (struct it *it) { - int buffer_p = BUFFERP (it->object); + int buffer_p = !STRINGP (it->string); EMACS_INT eob = (buffer_p ? ZV : it->end_charpos); EMACS_INT bob = (buffer_p ? BEGV : 0); @@ -6780,6 +6809,16 @@ get_next_display_element (struct it *it) && FACE_FROM_ID (it->f, face_id)->box == FACE_NO_BOX); } } + /* If we reached the end of the object we've been iterating (e.g., a + display string or an overlay string), and there's something on + IT->stack, proceed with what's on the stack. It doesn't make + sense to return zero if there's unprocessed stuff on the stack, + because otherwise that stuff will never be displayed. */ + if (!success_p && it->sp > 0) + { + set_iterator_to_next (it, 0); + success_p = get_next_display_element (it); + } /* Value is 0 if end of buffer or string reached. */ return success_p; @@ -6961,7 +7000,7 @@ set_iterator_to_next (struct it *it, int reseat_p) display vector entry (these entries may contain faces). */ it->face_id = it->saved_face_id; - if (it->dpvec + it->current.dpvec_index == it->dpend) + if (it->dpvec + it->current.dpvec_index >= it->dpend) { int recheck_faces = it->ellipsis_p; @@ -6999,6 +7038,26 @@ set_iterator_to_next (struct it *it, int reseat_p) case GET_FROM_STRING: /* Current display element is a character from a Lisp string. */ xassert (it->s == NULL && STRINGP (it->string)); + /* Don't advance past string end. These conditions are true + when set_iterator_to_next is called at the end of + get_next_display_element, in which case the Lisp string is + already exhausted, and all we want is pop the iterator + stack. */ + if (it->current.overlay_string_index >= 0) + { + /* This is an overlay string, so there's no padding with + spaces, and the number of characters in the string is + where the string ends. */ + if (IT_STRING_CHARPOS (*it) >= SCHARS (it->string)) + goto consider_string_end; + } + else + { + /* Not an overlay string. There could be padding, so test + against it->end_charpos . */ + if (IT_STRING_CHARPOS (*it) >= it->end_charpos) + goto consider_string_end; + } if (it->cmp_it.id >= 0) { int i; From 06bc5e6ea6d36a1166c95b81c29bc3e748d8f652 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sun, 13 May 2012 12:04:37 -0400 Subject: [PATCH 464/564] *** empty log message *** --- lisp/ChangeLog | 5 +++++ lisp/emacs-lisp/smie.el | 6 ++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 557e8eb2e48..03b9a3ba15b 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-05-13 Johan BockgÃ¥rd + + * emacs-lisp/smie.el (smie-next-sexp): Use accessor `op-forw' rather + than hard-coding `car', to fix misbehavior when moving forward. + 2012-05-13 Chong Yidong * emacs-lisp/tabulated-list.el (tabulated-list-format) diff --git a/lisp/emacs-lisp/smie.el b/lisp/emacs-lisp/smie.el index cafa1942a09..ae3e060034f 100644 --- a/lisp/emacs-lisp/smie.el +++ b/lisp/emacs-lisp/smie.el @@ -728,7 +728,8 @@ Possible return values: (if (and halfsexp (numberp (funcall op-forw toklevels))) (push toklevels levels) (throw 'return - (prog1 (list (or (car toklevels) t) (point) token) + (prog1 (list (or (funcall op-forw toklevels) t) + (point) token) (goto-char pos))))) (t (let ((lastlevels levels)) @@ -773,7 +774,8 @@ Possible return values: ((and lastlevels (smie--associative-p (car lastlevels))) (throw 'return - (prog1 (list (or (car toklevels) t) (point) token) + (prog1 (list (or (funcall op-forw toklevels) t) + (point) token) (goto-char pos)))) ;; - it's an associative operator within a larger construct ;; (e.g. an "elsif"), so we should just ignore it and keep From c8fb9dc689cdd9facc56d7220bdf3bb5864231f0 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sun, 13 May 2012 21:22:35 +0300 Subject: [PATCH 465/564] Fix bug #11464 with pos-visible-in-window-p and R2L text in L2R paragraph. src/xdisp.c (pos_visible_p): Don't report a position visible when move_it_to stopped at the last line of window, which happens to be scanned backwards by the bidi iteration. --- src/ChangeLog | 3 +++ src/xdisp.c | 27 ++++++++++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index 7352d8e0081..2f3643f4f80 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -14,6 +14,9 @@ proceed to consider_string_end without incrementing string position. Don't increment display vector index past the end of the display vector. (Bug#11417) + (pos_visible_p): Don't report a position visible when move_it_to + stopped at the last line of window, which happens to be scanned + backwards by the bidi iteration. (Bug#11464) 2012-05-11 Eli Zaretskii diff --git a/src/xdisp.c b/src/xdisp.c index b1e2a925bce..a2c4589766d 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -1304,8 +1304,8 @@ pos_visible_p (struct window *w, EMACS_INT charpos, int *x, int *y, glyph. */ int top_x = it.current_x; int top_y = it.current_y; - enum it_method it_method = it.method; /* Calling line_bottom_y may change it.method, it.position, etc. */ + enum it_method it_method = it.method; int bottom_y = (last_height = 0, line_bottom_y (&it)); int window_top_y = WINDOW_HEADER_LINE_HEIGHT (w); @@ -1313,6 +1313,31 @@ pos_visible_p (struct window *w, EMACS_INT charpos, int *x, int *y, visible_p = bottom_y > window_top_y; else if (top_y < it.last_visible_y) visible_p = 1; + if (bottom_y >= it.last_visible_y + && it.bidi_p && it.bidi_it.scan_dir == -1 + && IT_CHARPOS (it) < charpos) + { + /* When the last line of the window is scanned backwards + under bidi iteration, we could be duped into thinking + that we have passed CHARPOS, when in fact move_it_to + simply stopped short of CHARPOS because it reached + last_visible_y. To see if that's what happened, we call + move_it_to again with a slightly larger vertical limit, + and see if it actually moved vertically; if it did, we + didn't really reach CHARPOS, which is beyond window end. */ + struct it save_it = it; + /* Why 10? because we don't know how many canonical lines + will the height of the next line(s) be. So we guess. */ + int ten_more_lines = + 10 * FRAME_LINE_HEIGHT (XFRAME (WINDOW_FRAME (w))); + + move_it_to (&it, charpos, -1, bottom_y + ten_more_lines, -1, + MOVE_TO_POS | MOVE_TO_Y); + if (it.current_y > top_y) + visible_p = 0; + + it = save_it; + } if (visible_p) { if (it_method == GET_FROM_DISPLAY_VECTOR) From 56551c43270df088cd06cec6bc59620f0cc6a2cc Mon Sep 17 00:00:00 2001 From: Teemu Likonen Date: Sun, 13 May 2012 20:51:14 +0200 Subject: [PATCH 466/564] Allow specifying the erc timestamp format * erc-backend.el (erc-server-timestamp-format): New variable to allow specifying the timestamp format. Fixes: debbugs:10779 --- lisp/erc/ChangeLog | 5 +++++ lisp/erc/erc-backend.el | 16 ++++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/lisp/erc/ChangeLog b/lisp/erc/ChangeLog index 06c6d42ed39..134938af78e 100644 --- a/lisp/erc/ChangeLog +++ b/lisp/erc/ChangeLog @@ -1,3 +1,8 @@ +2012-05-13 Teemu Likonen + + * erc-backend.el (erc-server-timestamp-format): New variable to + allow specifying the timestamp format (bug#10779). + 2012-04-11 Vivek Dasmohapatra * erc-services.el (erc-nickserv-passwords): Don't display the diff --git a/lisp/erc/erc-backend.el b/lisp/erc/erc-backend.el index 62f524ed001..84f3ce9bc00 100644 --- a/lisp/erc/erc-backend.el +++ b/lisp/erc/erc-backend.el @@ -393,6 +393,12 @@ isn't displayed." :type 'integer :group 'erc-server) +(defcustom erc-server-timestamp-format "%Y-%m-%d %T" + "*Timestamp format used with server response messages. +This string is processed using `format-time-string'." + :type 'string + :group 'erc-server) + ;;; Flood-related ;; Most of this is courtesy of Jorgen Schaefer and Circe @@ -1454,7 +1460,8 @@ add things to `%s' instead." "The channel topic has changed." nil (let* ((ch (first (erc-response.command-args parsed))) (topic (erc-trim-string (erc-response.contents parsed))) - (time (format-time-string "%T %m/%d/%y" (current-time)))) + (time (format-time-string erc-server-timestamp-format + (current-time)))) (multiple-value-bind (nick login host) (values-list (erc-parse-user (erc-response.sender parsed))) (erc-update-channel-member ch nick nick nil nil nil host login) @@ -1647,7 +1654,7 @@ See `erc-display-server-message'." nil (multiple-value-bind (nick seconds-idle on-since time) (values-list (cdr (erc-response.command-args parsed))) (setq time (when on-since - (format-time-string "%T %Y/%m/%d" + (format-time-string erc-server-timestamp-format (erc-string-to-emacs-time on-since)))) (erc-update-user-nick nick nick nil nil nil (and time (format "on since %s" time))) @@ -1724,7 +1731,8 @@ See `erc-display-server-message'." nil (third (erc-response.command-args parsed))))) (erc-display-message parsed 'notice (erc-get-buffer channel proc) - 's329 ?c channel ?t (format-time-string "%A %Y/%m/%d %X" time)))) + 's329 ?c channel ?t (format-time-string erc-server-timestamp-format + time)))) (define-erc-response-handler (330) "Nick is authed as (on Quakenet network)." nil @@ -1761,7 +1769,7 @@ See `erc-display-server-message'." nil "Who set the topic, and when." nil (multiple-value-bind (channel nick time) (values-list (cdr (erc-response.command-args parsed))) - (setq time (format-time-string "%T %Y/%m/%d" + (setq time (format-time-string erc-server-timestamp-format (erc-string-to-emacs-time time))) (erc-update-channel-topic channel (format "\C-o (%s, %s)" nick time) From 16245de59c74b3219fc4822ae9e2ad10da3c16d2 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sun, 13 May 2012 17:27:21 -0700 Subject: [PATCH 467/564] New defcustoms need :version tags. They don't need "*" in the doc. --- lisp/erc/erc-backend.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lisp/erc/erc-backend.el b/lisp/erc/erc-backend.el index 84f3ce9bc00..cce24e67cf4 100644 --- a/lisp/erc/erc-backend.el +++ b/lisp/erc/erc-backend.el @@ -394,8 +394,9 @@ isn't displayed." :group 'erc-server) (defcustom erc-server-timestamp-format "%Y-%m-%d %T" - "*Timestamp format used with server response messages. + "Timestamp format used with server response messages. This string is processed using `format-time-string'." + :version "24.2" :type 'string :group 'erc-server) From 7102e6d0a782c2bc4e74ced93daa27aa0d821bb8 Mon Sep 17 00:00:00 2001 From: Wolfgang Jenkner Date: Mon, 14 May 2012 01:15:59 -0400 Subject: [PATCH 468/564] * lisp/image-mode.el: Fix scaling. (image-transform-resize): Doc fix. (image-transform-properties): Default scale is 1 and height should be an integer. Fixes: debbugs:11399 --- lisp/ChangeLog | 7 +++++++ lisp/image-mode.el | 41 ++++++++++++++++++++--------------------- 2 files changed, 27 insertions(+), 21 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 03b9a3ba15b..d0811170b4e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2012-05-14 Wolfgang Jenkner + + * image-mode.el: Fix scaling (bug#11399). + (image-transform-resize): Doc fix. + (image-transform-properties): Default scale is 1 and height should + be an integer. + 2012-05-13 Johan BockgÃ¥rd * emacs-lisp/smie.el (smie-next-sexp): Use accessor `op-forw' rather diff --git a/lisp/image-mode.el b/lisp/image-mode.el index 900cd725b92..80321d6c94d 100644 --- a/lisp/image-mode.el +++ b/lisp/image-mode.el @@ -608,23 +608,23 @@ Otherwise it plays once, then stops." ;; Not yet implemented. -;;; (defvar image-transform-minor-mode-map -;;; (let ((map (make-sparse-keymap))) -;;; ;; (define-key map [(control ?+)] 'image-scale-in) -;;; ;; (define-key map [(control ?-)] 'image-scale-out) -;;; ;; (define-key map [(control ?=)] 'image-scale-none) -;;; ;; (define-key map "c f h" 'image-scale-fit-height) -;;; ;; (define-key map "c ]" 'image-rotate-right) -;;; map) -;;; "Minor mode keymap `image-transform-mode'.") -;;; -;;; (define-minor-mode image-transform-mode -;;; "Minor mode for scaling and rotating images. -;;; With a prefix argument ARG, enable the mode if ARG is positive, -;;; and disable it otherwise. If called from Lisp, enable the mode -;;; if ARG is omitted or nil. This minor mode requires Emacs to have -;;; been compiled with ImageMagick support." -;;; nil "image-transform" image-transform-minor-mode-map) +;; (defvar image-transform-minor-mode-map +;; (let ((map (make-sparse-keymap))) +;; ;; (define-key map [(control ?+)] 'image-scale-in) +;; ;; (define-key map [(control ?-)] 'image-scale-out) +;; ;; (define-key map [(control ?=)] 'image-scale-none) +;; ;; (define-key map "c f h" 'image-scale-fit-height) +;; ;; (define-key map "c ]" 'image-rotate-right) +;; map) +;; "Minor mode keymap `image-transform-mode'.") +;; +;; (define-minor-mode image-transform-mode +;; "Minor mode for scaling and rotating images. +;; With a prefix argument ARG, enable the mode if ARG is positive, +;; and disable it otherwise. If called from Lisp, enable the mode +;; if ARG is omitted or nil. This minor mode requires Emacs to have +;; been compiled with ImageMagick support." +;; nil "image-transform" image-transform-minor-mode-map) ;; FIXME this doesn't seem mature yet. Document in manual when it is. @@ -634,7 +634,7 @@ Its value should be one of the following: - nil, meaning no resizing. - `fit-height', meaning to fit the image to the window height. - `fit-width', meaning to fit the image to the window width. - - A number, which is a scale factor (the default size is 100).") + - A number, which is a scale factor (the default size is 1).") (defvar image-transform-rotation 0.0 "Rotation angle for the image in the current Image mode buffer.") @@ -655,8 +655,8 @@ compiled with ImageMagick support." (height (cond ((numberp image-transform-resize) - (unless (= image-transform-resize 100) - (* image-transform-resize (cdr size)))) + (unless (= image-transform-resize 1) + (floor (* image-transform-resize (cdr size))))) ((eq image-transform-resize 'fit-height) (- (nth 3 (window-inside-pixel-edges)) (nth 1 (window-inside-pixel-edges)))))) @@ -669,7 +669,6 @@ compiled with ImageMagick support." ,@(if (not (equal 0.0 image-transform-rotation)) (list :rotation image-transform-rotation)))))) -;; FIXME 2 works, but eg 1.9 or 0.5 don't? (defun image-transform-set-scale (scale) "Prompt for a number, and resize the current image by that amount. This command has no effect unless Emacs is compiled with From 2d21d7f6764a7885aac8ac91a4b64a8fa0e0a084 Mon Sep 17 00:00:00 2001 From: Wolfgang Jenkner Date: Mon, 14 May 2012 01:19:46 -0400 Subject: [PATCH 469/564] * lisp/image-mode.el: Fit to width/height for rotated images. (image-transform-scale, image-transform-right-angle-fudge): New vars. (image-transform-width, image-transform-fit-width): New functions. (image-transform-properties): Use them. (image-transform-check-size): New function. (image-toggle-display-image): Use it (for testing). (image-transform-set-rotation): Reduce angle mod 360. Delete obsolete comment. Fixes: debbugs:11431 --- lisp/ChangeLog | 11 ++++ lisp/image-mode.el | 152 ++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 147 insertions(+), 16 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index d0811170b4e..75fc7f5884d 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,14 @@ +2012-05-14 Wolfgang Jenkner + + * image-mode.el: Fit to width/height for rotated images (bug#11431). + (image-transform-scale, image-transform-right-angle-fudge): New vars. + (image-transform-width, image-transform-fit-width): New functions. + (image-transform-properties): Use them. + (image-transform-check-size): New function. + (image-toggle-display-image): Use it (for testing). + (image-transform-set-rotation): Reduce angle mod 360. + Delete obsolete comment. + 2012-05-14 Wolfgang Jenkner * image-mode.el: Fix scaling (bug#11399). diff --git a/lisp/image-mode.el b/lisp/image-mode.el index 80321d6c94d..8329c02fb0d 100644 --- a/lisp/image-mode.el +++ b/lisp/image-mode.el @@ -532,6 +532,7 @@ was inserted." (setq image-type type) (if (eq major-mode 'image-mode) (setq mode-name (format "Image[%s]" type))) + (image-transform-check-size) (if (called-interactively-p 'any) (message "Repeat this command to go back to displaying the file as text")))) @@ -636,9 +637,122 @@ Its value should be one of the following: - `fit-width', meaning to fit the image to the window width. - A number, which is a scale factor (the default size is 1).") +(defvar image-transform-scale 1.0 + "The scale factor of the image being displayed.") + (defvar image-transform-rotation 0.0 "Rotation angle for the image in the current Image mode buffer.") +(defvar image-transform-right-angle-fudge 0.0001 + "Snap distance to a multiple of a right angle. +There's no deep theory behind the default value, it should just +be somewhat larger than ImageMagick's MagickEpsilon.") + +(defsubst image-transform-width (width height) + "Return the bounding box width of a rotated WIDTH x HEIGHT rectangle. +The rotation angle is the value of `image-transform-rotation' in degrees." + (let ((angle (degrees-to-radians image-transform-rotation))) + ;; Assume, w.l.o.g., that the vertices of the rectangle have the + ;; coordinates (+-w/2, +-h/2) and that (0, 0) is the center of the + ;; rotation by the angle A. The projections onto the first axis + ;; of the vertices of the rotated rectangle are +- (w/2) cos A +- + ;; (h/2) sin A, and the difference between the largest and the + ;; smallest of the four values is the expression below. + (+ (* width (abs (cos angle))) (* height (abs (sin angle)))))) + +;; The following comment and code snippet are from +;; ImageMagick-6.7.4-4/magick/distort.c + +;; /* Set the output image geometry to calculated 'bestfit'. +;; Yes this tends to 'over do' the file image size, ON PURPOSE! +;; Do not do this for DePolar which needs to be exact for virtual tiling. +;; */ +;; if ( fix_bounds ) { +;; geometry.x = (ssize_t) floor(min.x-0.5); +;; geometry.y = (ssize_t) floor(min.y-0.5); +;; geometry.width=(size_t) ceil(max.x-geometry.x+0.5); +;; geometry.height=(size_t) ceil(max.y-geometry.y+0.5); +;; } + +;; Other parts of the same file show that here the origin is in the +;; left lower corner of the image rectangle, the center of the +;; rotation is the center of the rectangle and min.x and max.x +;; (resp. min.y and max.y) are the smallest and the largest of the +;; projections of the vertices onto the first (resp. second) axis. + +(defun image-transform-fit-width (width height length) + "Return (w . h) so that a rotated w x h image has exactly width LENGTH. +The rotation angle is the value of `image-transform-rotation'. +Write W for WIDTH and H for HEIGHT. Then the w x h rectangle is +an \"approximately uniformly\" scaled W x H rectangle, which +currently means that w is one of floor(s W) + {0, 1, -1} and h is +floor(s H), where s can be recovered as the value of `image-transform-scale'. +The value of `image-transform-rotation' may be replaced by +a slightly different angle. Currently this is done for values +close to a multiple of 90, see `image-transform-right-angle-fudge'." + (cond ((< (abs (- (mod (+ image-transform-rotation 90) 180) 90)) + image-transform-right-angle-fudge) + (assert (not (zerop width)) t) + (setq image-transform-rotation + (float (round image-transform-rotation)) + image-transform-scale (/ (float length) width)) + (cons length nil)) + ((< (abs (- (mod (+ image-transform-rotation 45) 90) 45)) + image-transform-right-angle-fudge) + (assert (not (zerop height)) t) + (setq image-transform-rotation + (float (round image-transform-rotation)) + image-transform-scale (/ (float length) height)) + (cons nil length)) + (t + (assert (not (and (zerop width) (zerop height))) t) + (setq image-transform-scale + (/ (float (1- length)) (image-transform-width width height))) + ;; Assume we have a w x h image and an angle A, and let l = + ;; l(w, h) = w |cos A| + h |sin A|, which is the actual width + ;; of the bounding box of the rotated image, as calculated by + ;; `image-transform-width'. The code snippet quoted above + ;; means that ImageMagick puts the rotated image in + ;; a bounding box of width L = 2 ceil((w+l+1)/2) - w. + ;; Elementary considerations show that this is equivalent to + ;; L - w being even and L-3 < l(w, h) <= L-1. In our case, L is + ;; the given `length' parameter and our job is to determine + ;; reasonable values for w and h which satisfy these + ;; conditions. + (let ((w (floor (* image-transform-scale width))) + (h (floor (* image-transform-scale height)))) + ;; Let w and h as bound above. Then l(w, h) <= l(s W, s H) + ;; = L-1 < l(w+1, h+1) = l(w, h) + l(1, 1) <= l(w, h) + 2, + ;; hence l(w, h) > (L-1) - 2 = L-3. + (cons + (cond ((= (mod w 2) (mod length 2)) + w) + ;; l(w+1, h) >= l(w, h) > L-3, but does l(w+1, h) <= + ;; L-1 hold? + ((<= (image-transform-width (1+ w) h) (1- length)) + (1+ w)) + ;; No, it doesn't, but this implies that l(w-1, h) = + ;; l(w+1, h) - l(2, 0) >= l(w+1, h) - 2 > (L-1) - + ;; 2 = L-3. Clearly, l(w-1, h) <= l(w, h) <= L-1. + (t + (1- w))) + h))))) + +(defun image-transform-check-size () + "Check that the image exactly fits the width/height of the window." + (unless (numberp image-transform-resize) + (let ((size (image-display-size (image-get-display-property) t))) + (cond ((eq image-transform-resize 'fit-width) + (assert (= (car size) + (- (nth 2 (window-inside-pixel-edges)) + (nth 0 (window-inside-pixel-edges)))) + t)) + ((eq image-transform-resize 'fit-height) + (assert (= (cdr size) + (- (nth 3 (window-inside-pixel-edges)) + (nth 1 (window-inside-pixel-edges)))) + t)))))) + (defun image-transform-properties (spec) "Return rescaling/rotation properties for image SPEC. These properties are determined by the Image mode variables @@ -647,27 +761,35 @@ return value is suitable for appending to an image spec. Rescaling and rotation properties only take effect if Emacs is compiled with ImageMagick support." + (setq image-transform-scale 1.0) (when (or image-transform-resize - (not (equal image-transform-rotation 0.0))) + (/= image-transform-rotation 0.0)) ;; Note: `image-size' looks up and thus caches the untransformed ;; image. There's no easy way to prevent that. (let* ((size (image-size spec t)) - (height + (resized (cond ((numberp image-transform-resize) (unless (= image-transform-resize 1) - (floor (* image-transform-resize (cdr size))))) + (setq image-transform-scale image-transform-resize) + (cons nil (floor (* image-transform-resize (cdr size)))))) + ((eq image-transform-resize 'fit-width) + (image-transform-fit-width + (car size) (cdr size) + (- (nth 2 (window-inside-pixel-edges)) + (nth 0 (window-inside-pixel-edges))))) ((eq image-transform-resize 'fit-height) - (- (nth 3 (window-inside-pixel-edges)) - (nth 1 (window-inside-pixel-edges)))))) - (width (if (eq image-transform-resize 'fit-width) - (- (nth 2 (window-inside-pixel-edges)) - (nth 0 (window-inside-pixel-edges)))))) - ;;TODO fit-to-* should consider the rotation angle - `(,@(if height (list :height height)) - ,@(if width (list :width width)) - ,@(if (not (equal 0.0 image-transform-rotation)) - (list :rotation image-transform-rotation)))))) + (let ((res (image-transform-fit-width + (cdr size) (car size) + (- (nth 3 (window-inside-pixel-edges)) + (nth 1 (window-inside-pixel-edges)))))) + (cons (cdr res) (car res))))))) + `(,@(when (car resized) + (list :width (car resized))) + ,@(when (cdr resized) + (list :height (cdr resized))) + ,@(unless (= 0.0 image-transform-rotation) + (list :rotation image-transform-rotation)))))) (defun image-transform-set-scale (scale) "Prompt for a number, and resize the current image by that amount. @@ -698,9 +820,7 @@ ImageMagick support." ROTATION should be in degrees. This command has no effect unless Emacs is compiled with ImageMagick support." (interactive "nRotation angle (in degrees): ") - ;;TODO 0 90 180 270 degrees are the only reasonable angles here - ;;otherwise combining with rescaling will get very awkward - (setq image-transform-rotation (float rotation)) + (setq image-transform-rotation (float (mod rotation 360))) (image-toggle-display-image)) (provide 'image-mode) From 9d0a235ab25062a5a0c66a292cfc54366bb75f74 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Mon, 14 May 2012 09:05:03 +0200 Subject: [PATCH 470/564] * keyboard.c (kbd_buffer_get_event): Read special events also in batch mode. (Bug#11415) --- src/ChangeLog | 5 +++++ src/keyboard.c | 2 ++ 2 files changed, 7 insertions(+) diff --git a/src/ChangeLog b/src/ChangeLog index c5083cd6e46..8b29c10c38d 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2012-05-14 Michael Albinus + + * keyboard.c (kbd_buffer_get_event): Read special events also in + batch mode. (Bug#11415) + 2012-05-12 Glenn Morris * ns.mk: Update for ns_appbindir no longer having trailing "/". diff --git a/src/keyboard.c b/src/keyboard.c index fcd5c0e6837..289dc300835 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -3803,6 +3803,7 @@ kbd_buffer_get_event (KBOARD **kbp, } #endif /* subprocesses */ +#ifndef HAVE_DBUS /* We want to read D-Bus events in batch mode. */ if (noninteractive /* In case we are running as a daemon, only do this before detaching from the terminal. */ @@ -3813,6 +3814,7 @@ kbd_buffer_get_event (KBOARD **kbp, *kbp = current_kboard; return obj; } +#endif /* ! HAVE_DBUS */ /* Wait until there is input available. */ for (;;) From ac9f0b75eb3a7fb50226cda2cfa1980c2df2b429 Mon Sep 17 00:00:00 2001 From: Lars Magne Ingebrigtsen Date: Mon, 14 May 2012 09:56:04 +0200 Subject: [PATCH 471/564] Make URL redirection work again. The previous changes would make redirection fail, since the expansion would end up with URLs that looked like "http:www.bing.com/hello". * url-expand.el (url-default-expander): Copy over the fullness of the new URL object based on the definition URL object. --- lisp/url/ChangeLog | 5 +++++ lisp/url/url-expand.el | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lisp/url/ChangeLog b/lisp/url/ChangeLog index c41df0e832b..87f2cfe5019 100644 --- a/lisp/url/ChangeLog +++ b/lisp/url/ChangeLog @@ -1,3 +1,8 @@ +2012-05-14 Lars Magne Ingebrigtsen + + * url-expand.el (url-default-expander): Copy over the fullness of + the new URL object based on the definition URL object. + 2012-05-10 Chong Yidong * url-parse.el (url-path-and-query, url-port-if-non-default): New diff --git a/lisp/url/url-expand.el b/lisp/url/url-expand.el index 156b06c895b..e5c795969aa 100644 --- a/lisp/url/url-expand.el +++ b/lisp/url/url-expand.el @@ -116,13 +116,17 @@ path components followed by `..' are removed, along with the `..' itself." (setf (url-port urlobj) (or (url-port urlobj) (and (string= (url-type urlobj) (url-type defobj)) - (url-port defobj)))) + (url-port defobj)))) (if (not (string= "file" (url-type urlobj))) (setf (url-host urlobj) (or (url-host urlobj) (url-host defobj)))) (if (string= "ftp" (url-type urlobj)) (setf (url-user urlobj) (or (url-user urlobj) (url-user defobj)))) (if (string= (url-filename urlobj) "") (setf (url-filename urlobj) "/")) + ;; If the object we're expanding from is full, then we are now + ;; full. + (unless (url-fullness urlobj) + (setf (url-fullness urlobj) (url-fullness defobj))) (if (string-match "^/" (url-filename urlobj)) nil (let ((query nil) From 51fa99f1e6af73a1118b832e16fdb6f196480db8 Mon Sep 17 00:00:00 2001 From: Stefan Merten Date: Mon, 14 May 2012 11:31:08 +0200 Subject: [PATCH 472/564] (rst-re-alist): Fix loading (bug#11462). --- lisp/ChangeLog | 4 ++++ lisp/textmodes/rst.el | 23 ++++++++++++----------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 75fc7f5884d..3d5485b39b9 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-05-14 Stefan Merten + + * textmodes/rst.el (rst-re-alist): Fix loading (bug#11462). + 2012-05-14 Wolfgang Jenkner * image-mode.el: Fit to width/height for rotated images (bug#11431). diff --git a/lisp/textmodes/rst.el b/lisp/textmodes/rst.el index 1fefe6e2e28..262a49e2668 100644 --- a/lisp/textmodes/rst.el +++ b/lisp/textmodes/rst.el @@ -422,17 +422,6 @@ in parentheses follows the development revision and the timestamp.") Each entry consists of the symbol naming the regex and an argument list for `rst-re'.") -(defconst rst-re-alist - ;; Shadow global value we are just defining so we can construct it step by - ;; step - (let (rst-re-alist) - (dolist (re rst-re-alist-def) - (setq rst-re-alist - (nconc rst-re-alist - (list (list (car re) (apply 'rst-re (cdr re))))))) - rst-re-alist) - "Alist mapping symbols from `rst-re-alist-def' to regex strings.") - ;; FIXME: Use `sregex` or `rx` instead of re-inventing the wheel (defun rst-re (&rest args) "Interpret ARGS as regular expressions and return a regex string. @@ -492,6 +481,18 @@ After interpretation of ARGS the results are concatenated as for (error "Unknown object type for building regex: %s" re)))) args))) +;; FIXME: Remove circular dependency between `rst-re' and `rst-re-alist'. +(defconst rst-re-alist + ;; Shadow global value we are just defining so we can construct it step by + ;; step + (let (rst-re-alist) + (dolist (re rst-re-alist-def) + (setq rst-re-alist + (nconc rst-re-alist + (list (list (car re) (apply 'rst-re (cdr re))))))) + rst-re-alist) + "Alist mapping symbols from `rst-re-alist-def' to regex strings.") + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Mode definition. From dc44c39ad51012e645016408c7eec5adfbdeb5f4 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Mon, 14 May 2012 08:11:10 -0700 Subject: [PATCH 473/564] * unexaix.c: Port to more-recent AIX compilers. (report_error, report_error_1, make_hdr, copy_sym) (mark_x, adjust_lnnoptrs, unrelocate_symbols): Make arguments const char *, not char *, to avoid violations of C standard and to fix some AIX warnings reported by Gilles Pion. --- src/ChangeLog | 8 ++++++++ src/unexaix.c | 25 +++++++++++++------------ 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 3f9d575dce2..33e5e27dc39 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2012-05-14 Paul Eggert + + * unexaix.c: Port to more-recent AIX compilers. + (report_error, report_error_1, make_hdr, copy_sym) + (mark_x, adjust_lnnoptrs, unrelocate_symbols): + Make arguments const char *, not char *, to avoid violations of C + standard and to fix some AIX warnings reported by Gilles Pion. + 2012-05-14 Eli Zaretskii * xdisp.c (handle_stop): Don't call get_overlay_strings_1 if we diff --git a/src/unexaix.c b/src/unexaix.c index e27fb1d136d..29fa0fd6287 100644 --- a/src/unexaix.c +++ b/src/unexaix.c @@ -78,13 +78,13 @@ static long data_scnptr; static long load_scnptr; static long orig_load_scnptr; static long orig_data_scnptr; -static int unrelocate_symbols (int, int, char *, char *); +static int unrelocate_symbols (int, int, const char *, const char *); #ifndef MAX_SECTIONS #define MAX_SECTIONS 10 #endif -static int adjust_lnnoptrs (int, int, char *); +static int adjust_lnnoptrs (int, int, const char *); static int pagemask; @@ -92,7 +92,7 @@ static int pagemask; #include "lisp.h" static void -report_error (char *file, int fd) +report_error (const char *file, int fd) { if (fd) close (fd); @@ -104,16 +104,16 @@ report_error (char *file, int fd) #define ERROR2(msg,x,y) report_error_1 (new, msg, x, y); return -1 static void -report_error_1 (int fd, char *msg, int a1, int a2) +report_error_1 (int fd, const char *msg, int a1, int a2) { close (fd); error (msg, a1, a2); } -static int make_hdr (int, int, char *, char *); -static void mark_x (char *); +static int make_hdr (int, int, const char *, const char *); +static void mark_x (const char *); static int copy_text_and_data (int); -static int copy_sym (int, int, char *, char *); +static int copy_sym (int, int, const char *, const char *); static void write_segment (int, char *, char *); /* **************************************************************** @@ -159,7 +159,7 @@ unexec (const char *new_name, const char *a_name) */ static int make_hdr (int new, int a_out, - char *a_name, char *new_name) + const char *a_name, const char *new_name) { int scns; unsigned int bss_start; @@ -429,7 +429,7 @@ write_segment (int new, char *ptr, char *end) * Copy the relocation information and symbol table from the a.out to the new */ static int -copy_sym (int new, int a_out, char *a_name, char *new_name) +copy_sym (int new, int a_out, const char *a_name, const char *new_name) { char page[UnexBlockSz]; int n; @@ -465,7 +465,7 @@ copy_sym (int new, int a_out, char *a_name, char *new_name) * After successfully building the new a.out, mark it executable */ static void -mark_x (char *name) +mark_x (const char *name) { struct stat sbuf; int um; @@ -483,7 +483,7 @@ mark_x (char *name) } static int -adjust_lnnoptrs (int writedesc, int readdesc, char *new_name) +adjust_lnnoptrs (int writedesc, int readdesc, const char *new_name) { int nsyms; int naux; @@ -530,7 +530,8 @@ adjust_lnnoptrs (int writedesc, int readdesc, char *new_name) } static int -unrelocate_symbols (int new, int a_out, char *a_name, char *new_name) +unrelocate_symbols (int new, int a_out, + const char *a_name, const char *new_name) { int i; LDHDR ldhdr; From 078c97cbfff4348646b4158fb9a160d88150daa9 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Mon, 14 May 2012 08:22:29 -0700 Subject: [PATCH 474/564] * keyboard.c (kbd_buffer_get_event) [!HAVE_DBUS]: Omit unused local. --- src/ChangeLog | 2 ++ src/keyboard.c | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 33e5e27dc39..0f4f0fcc08e 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,7 @@ 2012-05-14 Paul Eggert + * keyboard.c (kbd_buffer_get_event) [!HAVE_DBUS]: Omit unused local. + * unexaix.c: Port to more-recent AIX compilers. (report_error, report_error_1, make_hdr, copy_sym) (mark_x, adjust_lnnoptrs, unrelocate_symbols): diff --git a/src/keyboard.c b/src/keyboard.c index 289dc300835..56858acd6aa 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -3786,7 +3786,6 @@ kbd_buffer_get_event (KBOARD **kbp, int *used_mouse_menu, struct timeval *end_time) { - register int c; Lisp_Object obj; #ifdef subprocesses @@ -3809,7 +3808,7 @@ kbd_buffer_get_event (KBOARD **kbp, detaching from the terminal. */ || (IS_DAEMON && daemon_pipe[1] >= 0)) { - c = getchar (); + int c = getchar (); XSETINT (obj, c); *kbp = current_kboard; return obj; From d372248073cecc1d8ae1d6bed826692eab16274d Mon Sep 17 00:00:00 2001 From: Julien Danjou Date: Mon, 14 May 2012 17:42:23 +0200 Subject: [PATCH 475/564] Fix a regression in erc-dcc * erc-dcc.el (erc-dcc-handle-ctcp-send): Fix a regression introduced on 2011-11-28 when fixing quoted filenames matching, the regex group was not corrected. --- lisp/erc/ChangeLog | 6 ++++++ lisp/erc/erc-dcc.el | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lisp/erc/ChangeLog b/lisp/erc/ChangeLog index 134938af78e..9585c249cb2 100644 --- a/lisp/erc/ChangeLog +++ b/lisp/erc/ChangeLog @@ -1,3 +1,9 @@ +2012-05-14 Mike Kazantsev (tiny change) + + * erc-dcc.el (erc-dcc-handle-ctcp-send): Fix a regression + introduced on 2011-11-28 when fixing quoted filenames matching, + the regex group was not corrected. + 2012-05-13 Teemu Likonen * erc-backend.el (erc-server-timestamp-format): New variable to diff --git a/lisp/erc/erc-dcc.el b/lisp/erc/erc-dcc.el index ba87cf63993..d1ef1a99548 100644 --- a/lisp/erc/erc-dcc.el +++ b/lisp/erc/erc-dcc.el @@ -674,7 +674,7 @@ It extracts the information about the dcc request and adds it to ?r "SEND" ?n nick ?u login ?h host)) ((string-match erc-dcc-ctcp-query-send-regexp query) (let ((filename - (or (match-string 3 query) + (or (match-string 5 query) (erc-dcc-unquote-filename (match-string 2 query)))) (ip (erc-decimal-to-ip (match-string 6 query))) (port (match-string 7 query)) From 2f4cadd1da7b681171c60fab8499f23f37ce4cb2 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 14 May 2012 09:11:24 -0700 Subject: [PATCH 476/564] ChangeLog merge fixes --- doc/misc/ChangeLog | 2 +- lisp/ChangeLog | 6 ------ 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index 812ec0214b0..c7dd1d3fa82 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -1,4 +1,4 @@ -2012-05-12 Andreas Schwab +2012-05-14 Andreas Schwab * cc-mode.texi: Avoid space before macro in 4th argument of cross reference commands. (Bug#11461) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b833e61bfa2..0d1c3529a14 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,9 +1,3 @@ -2012-05-14 Troels Nielsen (tiny change) - - * progmodes/compile.el (compilation-internal-error-properties): - Calculate start position correctly when end-col is set but - end-line is not (Bug#11382). - 2012-05-14 Stefan Monnier * net/rlogin.el (rlogin-mode-map): Fix last change. From 4374de8319c5666ac1fa295000e9753ea67f7673 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 14 May 2012 09:23:11 -0700 Subject: [PATCH 477/564] * src/nsterm.m (ns_init_paths): Fix typo ("libexec" not "lib-exec"). --- src/ChangeLog | 4 ++++ src/nsterm.m | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index 0f4f0fcc08e..d6df87c27e5 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2012-05-14 Glenn Morris + + * nsterm.m (ns_init_paths): Fix typo ("libexec" not "lib-exec"). + 2012-05-14 Paul Eggert * keyboard.c (kbd_buffer_get_event) [!HAVE_DBUS]: Omit unused local. diff --git a/src/nsterm.m b/src/nsterm.m index 7cbaf991311..9a5122e5e80 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -342,7 +342,7 @@ ns_init_paths (void) { NSArray *paths = [binDir stringsByAppendingPaths: [NSArray arrayWithObjects: @"bin", - @"lib-exec", nil]]; + @"libexec", nil]]; NSEnumerator *pathEnum = [paths objectEnumerator]; resourcePaths = @""; while (resourcePath = [pathEnum nextObject]) From 985584aed1505c40f97b0cfc983f4a5e05b127d8 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 14 May 2012 09:33:11 -0700 Subject: [PATCH 478/564] Make a self-contained ns build able to find its own libexec directory Ref: http://lists.gnu.org/archive/html/emacs-devel/2012-05/msg00298.html * src/nsterm.m (ns_init_paths): Put "libexec" before "bin", for the sake of init_callproc_1. --- src/ChangeLog | 1 + src/nsterm.m | 11 +++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index d6df87c27e5..2d20f13dced 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,6 +1,7 @@ 2012-05-14 Glenn Morris * nsterm.m (ns_init_paths): Fix typo ("libexec" not "lib-exec"). + Put "libexec" before "bin", for the sake of init_callproc_1. 2012-05-14 Paul Eggert diff --git a/src/nsterm.m b/src/nsterm.m index 9a5122e5e80..4b8b2bb4820 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -338,11 +338,18 @@ ns_init_paths (void) /*NSLog (@"loadPath: '%@'\n", resourcePaths); */ } + /* Normally, Emacs does not add its own bin/ directory to the PATH. + However, a self-contained NS build has a different layout, with + bin/ and libexec/ subdirectories in the directory that contains + Emacs.app itself. + We put libexec first, because init_callproc_1 uses the first + element to initialize exec-directory. An alternative would be + for init_callproc to check for invocation-directory/libexec. */ if (!getenv ("EMACSPATH")) { NSArray *paths = [binDir stringsByAppendingPaths: - [NSArray arrayWithObjects: @"bin", - @"libexec", nil]]; + [NSArray arrayWithObjects: @"libexec", + @"bin", nil]]; NSEnumerator *pathEnum = [paths objectEnumerator]; resourcePaths = @""; while (resourcePath = [pathEnum nextObject]) From 530e968e58a69071207897600ca2a019ea878600 Mon Sep 17 00:00:00 2001 From: Ted Zlatanov Date: Tue, 15 May 2012 04:47:38 -0400 Subject: [PATCH 479/564] add url-build-query-string and improve url-parse-query-string as per bug#8706 * url/url-util.el (url-build-query-string): New function. (url-parse-query-string): Allow that '=' is not required and split URL parameters on ';', not just '&'. --- lisp/url/ChangeLog | 6 ++++ lisp/url/url-util.el | 67 +++++++++++++++++++++++++++++++++++--------- 2 files changed, 60 insertions(+), 13 deletions(-) diff --git a/lisp/url/ChangeLog b/lisp/url/ChangeLog index 87f2cfe5019..0e5c2787578 100644 --- a/lisp/url/ChangeLog +++ b/lisp/url/ChangeLog @@ -1,3 +1,9 @@ +2012-05-15 Ian Eure + + * url-util.el (url-build-query-string): New function. + (url-parse-query-string): Allow that '=' is not required and split + URL parameters on ';', not just '&'. + 2012-05-14 Lars Magne Ingebrigtsen * url-expand.el (url-default-expander): Copy over the fullness of diff --git a/lisp/url/url-util.el b/lisp/url/url-util.el index 71bc84cab09..18fc51f0d10 100644 --- a/lisp/url/url-util.el +++ b/lisp/url/url-util.el @@ -263,24 +263,65 @@ Will not do anything if `url-show-status' is nil." ;;;###autoload (defun url-parse-query-string (query &optional downcase allow-newlines) (let (retval pairs cur key val) - (setq pairs (split-string query "&")) + (setq pairs (split-string query "[;&]")) (while pairs (setq cur (car pairs) pairs (cdr pairs)) - (if (not (string-match "=" cur)) - nil ; Grace - (setq key (url-unhex-string (substring cur 0 (match-beginning 0)) - allow-newlines)) - (setq val (url-unhex-string (substring cur (match-end 0) nil) - allow-newlines)) - (if downcase - (setq key (downcase key))) - (setq cur (assoc key retval)) - (if cur - (setcdr cur (cons val (cdr cur))) - (setq retval (cons (list key val) retval))))) + (unless (string-match "=" cur) + (setq cur (concat cur "="))) + + (when (string-match "=" cur) + (setq key (url-unhex-string (substring cur 0 (match-beginning 0)) + allow-newlines)) + (setq val (url-unhex-string (substring cur (match-end 0) nil) + allow-newlines)) + (if downcase + (setq key (downcase key))) + (setq cur (assoc key retval)) + (if cur + (setcdr cur (cons val (cdr cur))) + (setq retval (cons (list key val) retval))))) retval)) +;;;###autoload +(defun url-build-query-string (query &optional semicolons keep-empty) + "Build a query-string. + +Given a QUERY in the form: +'((key1 val1) + (key2 val2) + (key3 val1 val2) + (key4) + (key5 "")) + +\(This is the same format as produced by `url-parse-query-string') + +This will return a string +\"key1=val1&key2=val2&key3=val1&key3=val2&key4&key5\". Keys may +be strings or symbols; if they are symbols, the symbol name will +be used. + +When SEMICOLONS is given, the separator will be \";\". + +When KEEP-EMPTY is given, empty values will show as \"key=\" +instead of just \"key\" as in the example above." + (mapconcat + (lambda (key-vals) + (let ((escaped + (mapcar (lambda (sym) + (url-hexify-string (format "%s" sym))) key-vals))) + (mapconcat (lambda (val) + (let ((vprint (format "%s" val)) + (eprint (format "%s" (car escaped)))) + (concat eprint + (if (or keep-empty + (and val (not (zerop (length vprint))))) + "=" + "") + vprint))) + (or (cdr escaped) '("")) (if semicolons ";" "&")))) + query (if semicolons ";" "&"))) + (defun url-unhex (x) (if (> x ?9) (if (>= x ?a) From 5e561bc76d053d2b8bbf94a1143d214e668017eb Mon Sep 17 00:00:00 2001 From: Ted Zlatanov Date: Tue, 15 May 2012 04:52:15 -0400 Subject: [PATCH 480/564] add url-util.el test file * automated/url-util-tests.el: New file to test lisp/url/url-util.el. Only `url-build-query-string' and `url-parse-query-string' are tested right now. --- test/ChangeLog | 6 ++++ test/automated/url-util-tests.el | 51 ++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 test/automated/url-util-tests.el diff --git a/test/ChangeLog b/test/ChangeLog index 0f3db27f188..f05c94152a3 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,9 @@ +2012-05-15 Teodor Zlatanov + + * automated/url-util-tests.el: New file to test + lisp/url/url-util.el. Only `url-build-query-string' and + `url-parse-query-string' are tested right now (Bug#8706). + 2012-04-28 Stefan Monnier * indent/shell.sh: diff --git a/test/automated/url-util-tests.el b/test/automated/url-util-tests.el new file mode 100644 index 00000000000..65eb37ce926 --- /dev/null +++ b/test/automated/url-util-tests.el @@ -0,0 +1,51 @@ +;;; url-util-tests.el --- Test suite for url-util. + +;; Copyright (C) 2012 Free Software Foundation, Inc. + +;; Author: Teodor Zlatanov +;; Keywords: data + +;; This file is part of GNU Emacs. + +;; 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 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 +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs. If not, see . + +;;; Code: + +(require 'ert) +(require 'url-util) + +(ert-deftest url-util-tests () + (let ((tests + '(("key1=val1&key2=val2&key3=val1&key3=val2&key4&key5" + ((key1 val1) (key2 "val2") (key3 val1 val2) (key4) (key5 ""))) + ("key1=val1;key2=val2;key3=val1;key3=val2;key4;key5" + ((key1 "val1") (key2 val2) (key3 val1 val2) ("key4") (key5 "")) t) + ("key1=val1;key2=val2;key3=val1;key3=val2;key4=;key5=" + ((key1 val1) (key2 val2) ("key3" val1 val2) (key4) (key5 "")) t t))) + test) + (while tests + (setq test (car tests) + tests (cdr tests)) + (should (equal (apply 'url-build-query-string (cdr test)) (car test))))) + (should (equal (url-parse-query-string + "key1=val1&key2=val2&key3=val1&key3=val2&key4=&key5") + '(("key5" "") + ("key4" "") + ("key3" "val2" "val1") + ("key2" "val2") + ("key1" "val1"))))) + +(provide 'url-util-tests) + +;;; url-util-tests.el ends here From 4f0f72be5614dcb411483aef62d7c9777a5ccb02 Mon Sep 17 00:00:00 2001 From: Ted Zlatanov Date: Tue, 15 May 2012 04:53:49 -0400 Subject: [PATCH 481/564] mention bug#8706 in the last url-util.el ChangeLog entry --- lisp/url/ChangeLog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/url/ChangeLog b/lisp/url/ChangeLog index 0e5c2787578..53950bcbea7 100644 --- a/lisp/url/ChangeLog +++ b/lisp/url/ChangeLog @@ -1,6 +1,6 @@ 2012-05-15 Ian Eure - * url-util.el (url-build-query-string): New function. + * url-util.el (url-build-query-string): New function (Bug#8706). (url-parse-query-string): Allow that '=' is not required and split URL parameters on ';', not just '&'. From fdb058c22800a2cce782c74ee3e3918b432b271c Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 15 May 2012 09:25:03 -0400 Subject: [PATCH 482/564] * lisp/emacs-lisp/smie.el (smie-indent--bolp-1): New function. (smie-indent-keyword): Use it. --- lisp/ChangeLog | 9 +++++++-- lisp/emacs-lisp/smie.el | 26 ++++++++++++++++++++++++-- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index d91fc5d0b22..865bdd7c6a3 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-05-15 Stefan Monnier + + * emacs-lisp/smie.el (smie-indent--bolp-1): New function. + (smie-indent-keyword): Use it. + 2012-05-14 Stefan Merten * textmodes/rst.el (rst-re-alist): Fix loading (bug#11462). @@ -15,8 +20,8 @@ 2012-05-14 Stefan Monnier - * shell.el (shell-parse-pcomplete-arguments): Obey - pcomplete-arg-quote-list inside double-quoted args (Bug#11348). + * shell.el (shell-parse-pcomplete-arguments): + Obey pcomplete-arg-quote-list inside double-quoted args (Bug#11348). 2012-05-14 Wolfgang Jenkner diff --git a/lisp/emacs-lisp/smie.el b/lisp/emacs-lisp/smie.el index ae3e060034f..01274b7ba20 100644 --- a/lisp/emacs-lisp/smie.el +++ b/lisp/emacs-lisp/smie.el @@ -688,6 +688,7 @@ Possible return values: is too high. FORW-LEVEL is the forw-level of TOKEN, POS is its start position in the buffer. (t POS TOKEN): same thing when we bump on the wrong side of a paren. + Instead of t, the `car' can also be some other non-nil non-number value. (nil POS TOKEN): we skipped over a paren-like pair. nil: we skipped over an identifier, matched parentheses, ..." (catch 'return @@ -795,6 +796,7 @@ Possible return values: is too high. LEFT-LEVEL is the left-level of TOKEN, POS is its start position in the buffer. (t POS TOKEN): same thing but for an open-paren or the beginning of buffer. + Instead of t, the `car' can also be some other non-nil non-number value. (nil POS TOKEN): we skipped over a paren-like pair. nil: we skipped over an identifier, matched parentheses, ..." (smie-next-sexp @@ -814,7 +816,8 @@ Possible return values: (RIGHT-LEVEL POS TOKEN): we couldn't skip TOKEN because its left-level is too high. RIGHT-LEVEL is the right-level of TOKEN, POS is its end position in the buffer. - (t POS TOKEN): same thing but for an open-paren or the beginning of buffer. + (t POS TOKEN): same thing but for a close-paren or the end of buffer. + Instead of t, the `car' can also be some other non-nil non-number value. (nil POS TOKEN): we skipped over a paren-like pair. nil: we skipped over an identifier, matched parentheses, ..." (smie-next-sexp @@ -1076,6 +1079,16 @@ the beginning of a line." "Return non-nil if the current token is the first on the line." (save-excursion (skip-chars-backward " \t") (bolp))) +(defun smie-indent--bolp-1 () + ;; Like smie-indent--bolp but also returns non-nil if it's the first + ;; non-comment token. Maybe we should simply always use this? + "Return non-nil if the current token is the first on the line. +Comments are treated as spaces." + (let ((bol (line-beginning-position))) + (save-excursion + (forward-comment (- (point))) + (<= (point) bol)))) + ;; Dynamically scoped. (defvar smie--parent) (defvar smie--after) (defvar smie--token) @@ -1352,9 +1365,12 @@ should not be computed on the basis of the following token." ;; - middle-of-line: "trust current position". (cond ((smie-indent--rule :before token)) - ((smie-indent--bolp) ;I.e. non-virtual indent. + ((smie-indent--bolp-1) ;I.e. non-virtual indent. ;; For an open-paren-like thingy at BOL, always indent only ;; based on other rules (typically smie-indent-after-keyword). + ;; FIXME: we do the same if after a comment, since we may be trying + ;; to compute the indentation of this comment and we shouldn't indent + ;; based on the indentation of subsequent code. nil) (t ;; By default use point unless we're hanging. @@ -1455,6 +1471,12 @@ should not be computed on the basis of the following token." (save-excursion (forward-comment (point-max)) (skip-chars-forward " \t\r\n") + ;; FIXME: We assume here that smie-indent-calculate will compute the + ;; indentation of the next token based on text before the comment, but + ;; this is not guaranteed, so maybe we should let + ;; smie-indent-calculate return some info about which buffer position + ;; was used as the "indentation base" and check that this base is + ;; before `pos'. (smie-indent-calculate)))) (defun smie-indent-comment-continue () From 2473256d7b660edc5c1525163b2e9917d6ebf18d Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 15 May 2012 12:58:35 -0400 Subject: [PATCH 483/564] Only handle ".." and '..' quoting in shell-mode. * lisp/shell.el (shell--unquote&requote-argument, shell--unquote-argument) (shell--requote-argument): New functions. (shell-completion-vars): Use them. (shell--parse-pcomplete-arguments): Rename from shell-parse-pcomplete-arguments. * lisp/comint.el (comint-word): Obey comint-file-name-quote-list. Simplify. (comint--unquote&requote-argument): Don't handle ".." and '..' quoting. Obey comint-file-name-quote-list. Fixes: debbugs:11466 --- lisp/ChangeLog | 10 +++++++++ lisp/comint.el | 38 +++++++++++++------------------ lisp/shell.el | 61 +++++++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 80 insertions(+), 29 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 865bdd7c6a3..de2cfc6f0ac 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,15 @@ 2012-05-15 Stefan Monnier + Only handle ".." and '..' quoting in shell-mode (bug#11466). + * shell.el (shell--unquote&requote-argument, shell--unquote-argument) + (shell--requote-argument): New functions. + (shell-completion-vars): Use them. + (shell--parse-pcomplete-arguments): Rename from + shell-parse-pcomplete-arguments. + * comint.el (comint-word): Obey comint-file-name-quote-list. Simplify. + (comint--unquote&requote-argument): Don't handle ".." and '..' quoting. + Obey comint-file-name-quote-list. + * emacs-lisp/smie.el (smie-indent--bolp-1): New function. (smie-indent-keyword): Use it. diff --git a/lisp/comint.el b/lisp/comint.el index 43e42c87be7..db0f5b8b460 100644 --- a/lisp/comint.el +++ b/lisp/comint.el @@ -2968,19 +2968,20 @@ This is a good thing to set in mode hooks.") "Return the word of WORD-CHARS at point, or nil if none is found. Word constituents are considered to be those in WORD-CHARS, which is like the inside of a \"[...]\" (see `skip-chars-forward'), plus all non-ASCII characters." + ;; FIXME: Need to handle "..." and '...' quoting in shell.el! + ;; This should be combined with pomplete-parsing somehow. (save-excursion (let ((here (point)) giveup) (while (not giveup) (let ((startpoint (point))) (skip-chars-backward (concat "\\\\" word-chars)) - ;; Fixme: This isn't consistent with Bash, at least -- not - ;; all non-ASCII chars should be word constituents. - (if (and (> (- (point) 2) (point-min)) - (= (char-after (- (point) 2)) ?\\)) + (if (and comint-file-name-quote-list + (eq (char-before (1- (point))) ?\\)) (forward-char -2)) - (if (and (> (- (point) 1) (point-min)) - (>= (char-after (- (point) 1)) 128)) + ;; FIXME: This isn't consistent with Bash, at least -- not + ;; all non-ASCII chars should be word constituents. + (if (and (not (bobp)) (>= (char-before) 128)) (forward-char -1)) (if (= (point) startpoint) (setq giveup t)))) @@ -3012,14 +3013,14 @@ See `comint-word'." (defun comint--unquote&requote-argument (qstr &optional upos) (unless upos (setq upos 0)) (let* ((qpos 0) - (dquotes nil) (ustrs '()) (re (concat - "[\"']\\|\\\\\\(.\\)" - "\\|\\$\\(?:\\([[:alpha:]][[:alnum:]]*\\)" - "\\|{\\(?2:[^{}]+\\)}\\)" + "\\$\\(?:\\([[:alpha:]][[:alnum:]]*\\)" + "\\|{\\(?1:[^{}]+\\)}\\)" (when (memq system-type '(ms-dos windows-nt)) - "\\|%\\(?2:[^\\\\/]*\\)%"))) + "\\|%\\(?1:[^\\\\/]*\\)%") + (when comint-file-name-quote-list + "\\|\\\\\\(.\\)"))) (qupos nil) (push (lambda (str end) (push str ustrs) @@ -3030,18 +3031,9 @@ See `comint-word'." (while (setq match (string-match re qstr qpos)) (funcall push (substring qstr qpos match) match) (cond - ((match-beginning 1) (funcall push (match-string 1 qstr) (match-end 0))) - ((match-beginning 2) (funcall push (getenv (match-string 2 qstr)) + ((match-beginning 2) (funcall push (match-string 2 qstr) (match-end 0))) + ((match-beginning 1) (funcall push (getenv (match-string 1 qstr)) (- (match-end 0)))) - ((eq (aref qstr match) ?\") (setq dquotes (not dquotes))) - ((eq (aref qstr match) ?\') - (cond - (dquotes (funcall push "'" (match-end 0))) - ((< match (1+ (length qstr))) - (let ((end (string-match "'" qstr (1+ match)))) - (funcall push (substring qstr (1+ match) end) - (or end (length qstr))))) - (t nil))) (t (error "Unexpected case in comint--unquote&requote-argument!"))) (setq qpos (match-end 0))) (funcall push (substring qstr qpos) (length qstr)) @@ -3140,7 +3132,7 @@ Returns t if successful." See `completion-table-with-quoting' and `comint-requote-function'.") (defvar comint-requote-function #'comint--requote-argument "Function to use for completion of quoted data. -See `completion-table-with-quoting' and `comint-requote-function'.") +See `completion-table-with-quoting' and `comint-unquote-function'.") (defun comint--complete-file-name-data () "Return the completion data for file name at point." diff --git a/lisp/shell.el b/lisp/shell.el index 1784188f6ad..ca238a443f3 100644 --- a/lisp/shell.el +++ b/lisp/shell.el @@ -372,8 +372,57 @@ Thus, this does not include the shell's current directory.") ;;; Basic Procedures -(defun shell-parse-pcomplete-arguments () +(defun shell--unquote&requote-argument (qstr &optional upos) + (unless upos (setq upos 0)) + (let* ((qpos 0) + (dquotes nil) + (ustrs '()) + (re (concat + "[\"']" + "\\|\\$\\(?:\\([[:alpha:]][[:alnum:]]*\\)" + "\\|{\\(?1:[^{}]+\\)}\\)" + (when (memq system-type '(ms-dos windows-nt)) + "\\|%\\(?1:[^\\\\/]*\\)%") + (when comint-file-name-quote-list + "\\|\\\\\\(.\\)"))) + (qupos nil) + (push (lambda (str end) + (push str ustrs) + (setq upos (- upos (length str))) + (unless (or qupos (> upos 0)) + (setq qupos (if (< end 0) (- end) (+ upos end)))))) + match) + (while (setq match (string-match re qstr qpos)) + (funcall push (substring qstr qpos match) match) + (cond + ((match-beginning 2) (funcall push (match-string 2 qstr) (match-end 0))) + ((match-beginning 1) (funcall push (getenv (match-string 1 qstr)) + (- (match-end 0)))) + ((eq (aref qstr match) ?\") (setq dquotes (not dquotes))) + ((eq (aref qstr match) ?\') + (cond + (dquotes (funcall push "'" (match-end 0))) + ((< match (1+ (length qstr))) + (let ((end (string-match "'" qstr (1+ match)))) + (funcall push (substring qstr (1+ match) end) + (or end (length qstr))))) + (t nil))) + (t (error "Unexpected case in shell--unquote&requote-argument!"))) + (setq qpos (match-end 0))) + (funcall push (substring qstr qpos) (length qstr)) + (list (mapconcat #'identity (nreverse ustrs) "") + qupos #'comint-quote-filename))) + +(defun shell--unquote-argument (str) + (car (shell--unquote&requote-argument str))) +(defun shell--requote-argument (upos qstr) + ;; See `completion-table-with-quoting'. + (let ((res (shell--unquote&requote-argument qstr upos))) + (cons (nth 1 res) (nth 2 res)))) + +(defun shell--parse-pcomplete-arguments () "Parse whitespace separated arguments in the current region." + ;; FIXME: share code with shell--unquote&requote-argument. (let ((begin (save-excursion (shell-backward-command 1) (point))) (end (point)) begins args) @@ -394,13 +443,13 @@ Thus, this does not include the shell's current directory.") (cond ((match-beginning 3) ;Backslash escape. (push (cond - ((null pcomplete-arg-quote-list) + ((null comint-file-name-quote-list) (goto-char (match-beginning 3)) "\\") ((= (match-beginning 3) (match-end 3)) "\\") (t (match-string 3))) arg)) ((match-beginning 2) ;Double quote. - (push (if (null pcomplete-arg-quote-list) (match-string 2) + (push (if (null comint-file-name-quote-list) (match-string 2) (replace-regexp-in-string "\\\\\\(.\\)" "\\1" (match-string 2))) arg)) @@ -430,10 +479,10 @@ Shell buffers. It implements `shell-completion-execonly' for shell-file-name-quote-list) (set (make-local-variable 'comint-dynamic-complete-functions) shell-dynamic-complete-functions) + (setq-local comint-unquote-function #'shell--unquote-argument) + (setq-local comint-requote-function #'shell--requote-argument) (set (make-local-variable 'pcomplete-parse-arguments-function) - #'shell-parse-pcomplete-arguments) - (set (make-local-variable 'pcomplete-arg-quote-list) - comint-file-name-quote-list) + #'shell--parse-pcomplete-arguments) (set (make-local-variable 'pcomplete-termination-string) (cond ((not comint-completion-addsuffix) "") ((stringp comint-completion-addsuffix) From ec3ca9ec47f677fb04ba28fe7adb7f126f02fc08 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 15 May 2012 13:09:00 -0400 Subject: [PATCH 484/564] Stop NS install symlinking libexec/* into bin/ * Makefile.in (install-arch-dep): NS install no longer needs to symlink libexec/* into bin/, since 2012-05-14 ns_init_paths change. --- ChangeLog | 5 +++++ Makefile.in | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index b4b7bdb9f10..412d4aa5324 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2012-05-15 Glenn Morris + + * Makefile.in (install-arch-dep): NS install no longer needs to + symlink libexec/* into bin/, since 2012-05-14 ns_init_paths change. + 2012-05-12 Glenn Morris * configure.in (ns_appbindir): Remove trailing "/". diff --git a/Makefile.in b/Makefile.in index 0a62875c977..41a91462edb 100644 --- a/Makefile.in +++ b/Makefile.in @@ -476,7 +476,7 @@ install-arch-dep: mkdir ( cd ${ns_appbindir} ; \ if cd libexec ; then dir=emacs/*/*/* ; $(MV_DIRS); \ rm -fr emacs; if cd ../bin; then rm -f emacs emacs-24*; \ - ln -sf ../libexec/* . ; fi ; fi ) ; \ + fi ; fi ) ; \ else true ; fi ## FIXME is the emacs-24* bit above really necessary and correct? From 75a9f5f5b690f12e71217af6c18fa931534269ae Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 15 May 2012 13:32:42 -0400 Subject: [PATCH 485/564] * Makefile.in (install-arch-dep): Do not hard-code version number. --- ChangeLog | 2 ++ Makefile.in | 11 +++++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 412d4aa5324..f86baa960fc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 2012-05-15 Glenn Morris + * Makefile.in (install-arch-dep): Do not hard-code version number. + * Makefile.in (install-arch-dep): NS install no longer needs to symlink libexec/* into bin/, since 2012-05-14 ns_init_paths change. diff --git a/Makefile.in b/Makefile.in index 41a91462edb..7e54ab13e41 100644 --- a/Makefile.in +++ b/Makefile.in @@ -475,14 +475,13 @@ install-arch-dep: mkdir rm -fr share ) ; \ ( cd ${ns_appbindir} ; \ if cd libexec ; then dir=emacs/*/*/* ; $(MV_DIRS); \ - rm -fr emacs; if cd ../bin; then rm -f emacs emacs-24*; \ - fi ; fi ) ; \ + rm -fr emacs; rm -f ../bin/emacs ../bin/$(EMACSFULL) ; \ + fi ) ; \ else true ; fi -## FIXME is the emacs-24* bit above really necessary and correct? -## What if I have 24.1 and 24.2 installed at the same time? -## In any case, it should use something like echo $version | sed 's/\..*//' -## instead of hard-coding a version. +## FIXME NS self-contained: rather than installing emacs and +## EMACSFULL, then deleting them, obviously it would be better to not +## install them in the first place. ## http://lists.gnu.org/archive/html/emacs-devel/2007-10/msg01672.html ## Needs to be the user running install, so configure can't set it. From f9e7d610b50bf9b02591a5005ef741543c6c3138 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 15 May 2012 13:38:41 -0400 Subject: [PATCH 486/564] NEWS fixes --- etc/NEWS | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index a584d5943ea..d27b27cb138 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -97,27 +97,23 @@ character when doing minibuffer filename prompts. ** reStructuredText mode -*** Major merge with upstream development. - *** Nearly all keys are rebound making room for more keys and comply -better to usage in other modes. Bindings are described with C-c C-h. +better to usage in other modes. Bindings are described with C-c C-h. -*** Major revision of indentation. Now works very similar to other -modes. TAB is your friend. +*** Major revision of indentation. Now works very similarly to other modes. +TAB is your friend. -*** Major revision of filling. Works fine with most of -reStructuredText syntax. Auto-filling is also supported. +*** Major revision of filling. Works fine with most of +reStructuredText syntax. Auto-filling is also supported. *** Major revision of comment handling. -*** Major revision of fontification. Now works with `jit-lock-mode'. -Thanks to Stefan Monnier for help. +*** Major revision of fontification. Now works with `jit-lock-mode'. *** reStructuredText syntax is covered more closely in many cases. Among other things this improves the experience for Sphinx users. -*** `rst-insert-list' inserts new list or continues existing lists. -Based on code by Wei-Wei Guo. +*** `rst-insert-list' inserts a new list or continues existing lists. *** Customization is extended, corrected and improved. @@ -125,7 +121,7 @@ Based on code by Wei-Wei Guo. *** Window configuration is reset after displaying TOC. -*** There is a package version in `rst-version' +*** There is a package version in `rst-version'. ** New `derived-mode' filter for Ibuffer, bound to `/ M'. `/ m' is now bound to filter by used-mode, which used to be bound to `/ M'. From a3f7efb87d7285bae793c549ee657622fd7ac47c Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 15 May 2012 13:49:59 -0400 Subject: [PATCH 487/564] * Makefile.in (install-arch-dep): Replace use of MV_DIRS with info. This make it easier to see what is going on. --- ChangeLog | 2 ++ Makefile.in | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index f86baa960fc..b1aed06bbbc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 2012-05-15 Glenn Morris + * Makefile.in (install-arch-dep): Replace use of MV_DIRS with info. + * Makefile.in (install-arch-dep): Do not hard-code version number. * Makefile.in (install-arch-dep): NS install no longer needs to diff --git a/Makefile.in b/Makefile.in index 7e54ab13e41..5237076b776 100644 --- a/Makefile.in +++ b/Makefile.in @@ -471,7 +471,7 @@ install-arch-dep: mkdir if test "${ns_appresdir}" != ""; then \ ( cd ${ns_appresdir} ; \ if test -d share/emacs ; then dir=share/emacs/*/*; $(MV_DIRS); fi;\ - if test -d share/info ; then dir=share/info; $(MV_DIRS) ; fi ; \ + if test -d share/info ; then rm -fr info; mv share/info . ; fi ; \ rm -fr share ) ; \ ( cd ${ns_appbindir} ; \ if cd libexec ; then dir=emacs/*/*/* ; $(MV_DIRS); \ From c184265d03d96294322572159414d95cc416b790 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 15 May 2012 13:55:39 -0400 Subject: [PATCH 488/564] * Makefile.in (install-arch-dep): Replace use of MV_DIRS with libexec. --- ChangeLog | 3 ++- Makefile.in | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index b1aed06bbbc..0c921934881 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,7 @@ 2012-05-15 Glenn Morris - * Makefile.in (install-arch-dep): Replace use of MV_DIRS with info. + * Makefile.in (install-arch-dep): Replace use of MV_DIRS with info, + and with libexec. * Makefile.in (install-arch-dep): Do not hard-code version number. diff --git a/Makefile.in b/Makefile.in index 5237076b776..0b1fb77e6db 100644 --- a/Makefile.in +++ b/Makefile.in @@ -473,9 +473,9 @@ install-arch-dep: mkdir if test -d share/emacs ; then dir=share/emacs/*/*; $(MV_DIRS); fi;\ if test -d share/info ; then rm -fr info; mv share/info . ; fi ; \ rm -fr share ) ; \ - ( cd ${ns_appbindir} ; \ - if cd libexec ; then dir=emacs/*/*/* ; $(MV_DIRS); \ - rm -fr emacs; rm -f ../bin/emacs ../bin/$(EMACSFULL) ; \ + ( if cd ${ns_appbindir}/libexec ; then \ + mv -f emacs/${version}/${configuration}/* . ; rm -fr emacs ; \ + rm -f ../bin/emacs ../bin/$(EMACSFULL) ; \ fi ) ; \ else true ; fi From 036dfb8b567cf4b382c7333de25ed3fd85dfed8a Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 15 May 2012 14:07:36 -0400 Subject: [PATCH 489/564] * lisp/minibuffer.el (completion--sifn-requote): Handle sifn's truncation behavior. (completion--string-equal-p): New function. (completion--twq-all): Use it to get better assertion failure data. --- lisp/ChangeLog | 5 +++++ lisp/minibuffer.el | 44 ++++++++++++++++++++++++++++++++------------ 2 files changed, 37 insertions(+), 12 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index de2cfc6f0ac..ac2aff0d9c7 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,10 @@ 2012-05-15 Stefan Monnier + * minibuffer.el (completion--sifn-requote): Handle sifn's truncation + behavior. + (completion--string-equal-p): New function. + (completion--twq-all): Use it to get better assertion failure data. + Only handle ".." and '..' quoting in shell-mode (bug#11466). * shell.el (shell--unquote&requote-argument, shell--unquote-argument) (shell--requote-argument): New functions. diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index 60a70fbcce7..9fb7627fe64 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -508,6 +508,9 @@ for use at QPOS." (assert (equal (funcall unquote qstring) completion)) (cons qstring qpoint))) +(defun completion--string-equal-p (s1 s2) + (eq t (compare-strings s1 nil nil s2 nil nil 'ignore-case))) + (defun completion--twq-all (string ustring completions boundary unquote requote) (when completions @@ -519,10 +522,10 @@ for use at QPOS." (`(,qfullpos . ,qfun) (funcall requote (+ boundary (length prefix)) string)) (qfullprefix (substring string 0 qfullpos)) - (_ (assert (eq t (compare-strings - (funcall unquote qfullprefix) nil nil - (concat (substring ustring 0 boundary) prefix) - nil nil 'ignore-case)))) + (_ (assert (completion--string-equal-p + (funcall unquote qfullprefix) + (concat (substring ustring 0 boundary) prefix)) + t)) (qboundary (car (funcall requote boundary string))) (_ (assert (<= qboundary qfullpos))) ;; FIXME: this split/quote/concat business messes up the carefully @@ -552,14 +555,13 @@ for use at QPOS." (qnew (funcall qfun new)) (qcompletion (concat qprefix qnew))) (assert - (eq t (compare-strings - (funcall unquote - (concat (substring string 0 qboundary) - qcompletion)) - nil nil - (concat (substring ustring 0 boundary) - completion) - nil nil 'ignore-case))) + (completion--string-equal-p + (funcall unquote + (concat (substring string 0 qboundary) + qcompletion)) + (concat (substring ustring 0 boundary) + completion)) + t) qcompletion)) completions) qboundary)))) @@ -2121,7 +2123,25 @@ same as `substitute-in-file-name'." "use the regular PRED argument" "23.2") (defun completion--sifn-requote (upos qstr) + ;; We're looking for `qupos' such that: + ;; (equal (substring (substitute-in-file-name qstr) 0 upos) + ;; (substitute-in-file-name (substring qstr 0 qupos))) + ;; Big problem here: we have to reverse engineer substitute-in-file-name to + ;; find the position corresponding to UPOS in QSTR, but + ;; substitute-in-file-name can do anything, depending on file-name-handlers. + ;; Kind of like in rfn-eshadow-update-overlay, only worse. (let ((qpos 0)) + ;; Handle substitute-in-file-name's truncation behavior. + (while (and (string-match "[\\/][~/\\]" qstr qpos) + ;; Hopefully our regexp covers all truncation cases. + ;; Also let's make sure sifn indeed truncates here. + (let ((tpos (1+ (match-beginning 0)))) + (equal (substitute-in-file-name qstr) + (substitute-in-file-name (substring qstr tpos))))) + (setq qpos tpos)) + ;; `upos' is relative to the position corresponding to `qpos' in + ;; (substitute-in-file-name qstr), so as qpos moves forward, upos + ;; gets smaller. (while (and (> upos 0) (string-match "\\$\\(\\$\\|\\([[:alnum:]_]+\\|{[^}]*}\\)\\)?" qstr qpos)) From c41045e6f2b9e9aa5ab8c7c679a2ea04b130fca3 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 15 May 2012 14:45:27 -0400 Subject: [PATCH 490/564] * lisp/emacs-lisp/pcase.el (pcase-let*, pcase-let): Fix edebug spec. --- lisp/ChangeLog | 2 ++ lisp/emacs-lisp/pcase.el | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ac2aff0d9c7..717582a6f8f 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2012-05-15 Stefan Monnier + * emacs-lisp/pcase.el (pcase-let*, pcase-let): Fix edebug spec. + * minibuffer.el (completion--sifn-requote): Handle sifn's truncation behavior. (completion--string-equal-p): New function. diff --git a/lisp/emacs-lisp/pcase.el b/lisp/emacs-lisp/pcase.el index 0d115cc56f5..28eaa3d3455 100644 --- a/lisp/emacs-lisp/pcase.el +++ b/lisp/emacs-lisp/pcase.el @@ -113,7 +113,8 @@ like `(,a . ,(pred (< a))) or, with more checks: "Like `let*' but where you can use `pcase' patterns for bindings. BODY should be an expression, and BINDINGS should be a list of bindings of the form (UPAT EXP)." - (declare (indent 1) (debug let)) + (declare (indent 1) + (debug ((&rest &or (sexp &optional form) symbolp) body))) (cond ((null bindings) (if (> (length body) 1) `(progn ,@body) (car body))) ((pcase--trivial-upat-p (caar bindings)) @@ -132,7 +133,7 @@ of the form (UPAT EXP)." "Like `let' but where you can use `pcase' patterns for bindings. BODY should be a list of expressions, and BINDINGS should be a list of bindings of the form (UPAT EXP)." - (declare (indent 1) (debug let)) + (declare (indent 1) (debug pcase-let*)) (if (null (cdr bindings)) `(pcase-let* ,bindings ,@body) (let ((matches '())) From 4e7d487c440666d5178e78d66ef4c3c232c01a19 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 15 May 2012 15:13:17 -0400 Subject: [PATCH 491/564] * Makefile.in (install-arch-dep): Replace last user of MV_DIRS. --- ChangeLog | 3 +-- Makefile.in | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0c921934881..9bf19a1ee57 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,7 +1,6 @@ 2012-05-15 Glenn Morris - * Makefile.in (install-arch-dep): Replace use of MV_DIRS with info, - and with libexec. + * Makefile.in (install-arch-dep): Replace use of MV_DIRS. * Makefile.in (install-arch-dep): Do not hard-code version number. diff --git a/Makefile.in b/Makefile.in index 0b1fb77e6db..b0ea80e8b9f 100644 --- a/Makefile.in +++ b/Makefile.in @@ -451,8 +451,6 @@ $(srcdir)/src/stamp-h.in: $(AUTOCONF_INPUTS) install: all install-arch-indep install-arch-dep install-leim blessmail @true -MV_DIRS = for i in $$dir; do rm -fr `basename "$$i"` ; mv "$$i" . ; done - ### Install the executables that were compiled specifically for this machine. ### It would be nice to do something for a parallel make ### to ensure that install-arch-indep finishes before this starts. @@ -470,7 +468,9 @@ install-arch-dep: mkdir -ln $(DESTDIR)${bindir}/$(EMACSFULL) $(DESTDIR)${bindir}/$(EMACS) if test "${ns_appresdir}" != ""; then \ ( cd ${ns_appresdir} ; \ - if test -d share/emacs ; then dir=share/emacs/*/*; $(MV_DIRS); fi;\ + if test -d share/emacs ; then \ + for dir in share/emacs/${version}/*; do \ + rm -fr `basename "$$dir"`; mv "$$dir" . ; done; fi ; \ if test -d share/info ; then rm -fr info; mv share/info . ; fi ; \ rm -fr share ) ; \ ( if cd ${ns_appbindir}/libexec ; then \ From 033cdda60a729ab105dc98923348e70066af7d30 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 15 May 2012 15:17:24 -0400 Subject: [PATCH 492/564] Tweak line-breaks in previous change --- Makefile.in | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Makefile.in b/Makefile.in index b0ea80e8b9f..171b13aa368 100644 --- a/Makefile.in +++ b/Makefile.in @@ -470,7 +470,9 @@ install-arch-dep: mkdir ( cd ${ns_appresdir} ; \ if test -d share/emacs ; then \ for dir in share/emacs/${version}/*; do \ - rm -fr `basename "$$dir"`; mv "$$dir" . ; done; fi ; \ + rm -fr `basename "$$dir"`; mv "$$dir" . ; \ + done ; \ + fi ; \ if test -d share/info ; then rm -fr info; mv share/info . ; fi ; \ rm -fr share ) ; \ ( if cd ${ns_appbindir}/libexec ; then \ From 9660f5fc84e148f54f704a86710c0e9287a1769c Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 15 May 2012 16:20:18 -0400 Subject: [PATCH 493/564] * src/lread.c (init_obarray): Declare Qt and Qnil as special. --- src/ChangeLog | 4 ++++ src/lread.c | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index 2d20f13dced..484df557e6e 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2012-05-15 Stefan Monnier + + * lread.c (init_obarray): Declare Qt and Qnil as special. + 2012-05-14 Glenn Morris * nsterm.m (ns_init_paths): Fix typo ("libexec" not "lib-exec"). diff --git a/src/lread.c b/src/lread.c index 50465fd01e8..6b657f61ed0 100644 --- a/src/lread.c +++ b/src/lread.c @@ -24,7 +24,7 @@ along with GNU Emacs. If not, see . */ #include #include #include -#include /* for CHAR_BIT */ +#include /* For CHAR_BIT. */ #include #include "lisp.h" #include "intervals.h" @@ -3990,10 +3990,12 @@ init_obarray (void) /* XSYMBOL (Qnil)->function = Qunbound; */ SET_SYMBOL_VAL (XSYMBOL (Qnil), Qnil); XSYMBOL (Qnil)->constant = 1; + XSYMBOL (Qnil)->declared_special = 1; XSYMBOL (Qnil)->plist = Qnil; Qt = intern_c_string ("t"); SET_SYMBOL_VAL (XSYMBOL (Qt), Qt); + XSYMBOL (Qnil)->declared_special = 1; XSYMBOL (Qt)->constant = 1; /* Qt is correct even if CANNOT_DUMP. loadup.el will set to nil at end. */ From 1a72a195d0625353a406a7a88e750d034e6d231a Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 15 May 2012 21:57:20 -0400 Subject: [PATCH 494/564] * lisp/minibuffer.el (completion--sifn-requote): Fix last change. (minibuffer-local-must-match-filename-map): Move define-obsolete-variable-alias before its var. --- lisp/ChangeLog | 6 ++++++ lisp/minibuffer.el | 20 +++++++++++--------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 717582a6f8f..cec6cdc26b4 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2012-05-16 Stefan Monnier + + * minibuffer.el (completion--sifn-requote): Fix last change. + (minibuffer-local-must-match-filename-map): + Move define-obsolete-variable-alias before its var. + 2012-05-15 Stefan Monnier * emacs-lisp/pcase.el (pcase-let*, pcase-let): Fix edebug spec. diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index 9fb7627fe64..6cd7af7fd01 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -1952,10 +1952,10 @@ The completion method is determined by `completion-at-point-functions'." Gets combined either with `minibuffer-local-completion-map' or with `minibuffer-local-must-match-map'.") -(defvar minibuffer-local-filename-must-match-map (make-sparse-keymap)) -(make-obsolete-variable 'minibuffer-local-filename-must-match-map nil "24.1") (define-obsolete-variable-alias 'minibuffer-local-must-match-filename-map 'minibuffer-local-filename-must-match-map "23.1") +(defvar minibuffer-local-filename-must-match-map (make-sparse-keymap)) +(make-obsolete-variable 'minibuffer-local-filename-must-match-map nil "24.1") (let ((map minibuffer-local-ns-map)) (define-key map " " 'exit-minibuffer) @@ -2132,13 +2132,15 @@ same as `substitute-in-file-name'." ;; Kind of like in rfn-eshadow-update-overlay, only worse. (let ((qpos 0)) ;; Handle substitute-in-file-name's truncation behavior. - (while (and (string-match "[\\/][~/\\]" qstr qpos) - ;; Hopefully our regexp covers all truncation cases. - ;; Also let's make sure sifn indeed truncates here. - (let ((tpos (1+ (match-beginning 0)))) - (equal (substitute-in-file-name qstr) - (substitute-in-file-name (substring qstr tpos))))) - (setq qpos tpos)) + (let (tpos) + (while (and (string-match "[\\/][~/\\]" qstr qpos) + ;; Hopefully our regexp covers all truncation cases. + ;; Also let's make sure sifn indeed truncates here. + (progn + (setq tpos (1+ (match-beginning 0))) + (equal (substitute-in-file-name qstr) + (substitute-in-file-name (substring qstr tpos))))) + (setq qpos tpos))) ;; `upos' is relative to the position corresponding to `qpos' in ;; (substitute-in-file-name qstr), so as qpos moves forward, upos ;; gets smaller. From b05725233bee74ae0bd58aebbcb90302abe2cb00 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Tue, 15 May 2012 19:22:53 -0700 Subject: [PATCH 495/564] * xgselect.c (xg_select): Just invoke 'select' if -nw. Suggested by Ken Brown. Fixes: debbugs:9754 --- src/ChangeLog | 4 ++++ src/xgselect.c | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index 484df557e6e..63661f5d27a 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2012-05-16 Paul Eggert + + * xgselect.c (xg_select): Just invoke 'select' if -nw (Bug#9754). + 2012-05-15 Stefan Monnier * lread.c (init_obarray): Declare Qt and Qnil as special. diff --git a/src/xgselect.c b/src/xgselect.c index 7a09c37c50d..8b5ee68e55b 100644 --- a/src/xgselect.c +++ b/src/xgselect.c @@ -38,17 +38,21 @@ xg_select (int max_fds, SELECT_TYPE *rfds, SELECT_TYPE *wfds, SELECT_TYPE *efds, SELECT_TYPE all_rfds, all_wfds; EMACS_TIME tmo, *tmop = timeout; - GMainContext *context = g_main_context_default (); + GMainContext *context; int have_wfds = wfds != NULL; int n_gfds = 0, our_tmo = 0, retval = 0, our_fds = 0; int i, nfds, fds_lim, tmo_in_millisec; + if (inhibit_window_system || !display_arg) + return select (max_fds, rfds, wfds, efds, timeout); + if (rfds) memcpy (&all_rfds, rfds, sizeof (all_rfds)); else FD_ZERO (&all_rfds); if (wfds) memcpy (&all_wfds, wfds, sizeof (all_rfds)); else FD_ZERO (&all_wfds); /* Update event sources in GLib. */ + context = g_main_context_default (); g_main_context_pending (context); do { From 27cb7be27d1ee87665bd497af42e142e41a00765 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 15 May 2012 23:15:52 -0700 Subject: [PATCH 496/564] Try to fix building with gcc >= 4.6 on Darwin. Eg, hydra builds have been failing for some time because (?) of this. In gcc < 4.6, unrecognized -no-fo options just cause a warning. In 4.6 and later, they cause an error. * configure.in: (CPP): Do not unconditionally set it on Darwin. Instead, try to test if -no-cpp-precomp is accepted. (CPP_TEST_OPTIONS, SPECIFIED_CPP): New. Fixes: debbugs:9755 --- ChangeLog | 7 ++++++ configure.in | 64 +++++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 63 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9bf19a1ee57..0495e917f21 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2012-05-16 Glenn Morris + + * configure.in: Try to fix building with gcc >= 4.6 on Darwin. + (CPP): Do not unconditionally set it on Darwin. + Instead, try to test if -no-cpp-precomp is accepted. + (CPP_TEST_OPTIONS, SPECIFIED_CPP): New. (Bug#9755) + 2012-05-15 Glenn Morris * Makefile.in (install-arch-dep): Replace use of MV_DIRS. diff --git a/configure.in b/configure.in index 46909d75f9e..5dfcc921e4f 100644 --- a/configure.in +++ b/configure.in @@ -492,12 +492,11 @@ case "${canonical}" in * ) unported=yes ;; esac opsys=darwin - # Define CPP as follows to make autoconf work correctly. - CPP="${CC-cc} -E -no-cpp-precomp" # Use fink packages if available. + # FIXME? Is it really our business to decide this for the user? if test -d /sw/include && test -d /sw/lib; then GCC_TEST_OPTIONS="-I/sw/include -L/sw/lib" - CPP="${CPP} ${GCC_TEST_OPTIONS}" + CPP_TEST_OPTIONS=${GCC_TEST_OPTIONS} NON_GCC_TEST_OPTIONS=${GCC_TEST_OPTIONS} fi ;; @@ -581,9 +580,7 @@ case "${canonical}" in machine=intel386 case "${canonical}" in *-cygwin ) opsys=cygwin ;; - *-darwin* ) opsys=darwin - CPP="${CC-cc} -E -no-cpp-precomp" - ;; + *-darwin* ) opsys=darwin ;; *-sysv4.2uw* ) opsys=unixware; NON_GNU_CPP=/lib/cpp ;; *-sysv5uw* ) opsys=unixware; NON_GNU_CPP=/lib/cpp ;; *-sysv5OpenUNIX* ) opsys=unixware; NON_GNU_CPP=/lib/cpp ;; @@ -633,13 +630,18 @@ test -n "$CC" && cc_specified=yes # Save the value of CFLAGS that the user specified. SPECIFIED_CFLAGS="$CFLAGS" +# Save specified CPP (if any), before AC_PROG_CPP runs. +SPECIFIED_CPP="$CPP" + dnl Sets GCC=yes if using gcc. AC_PROG_CC AM_PROG_CC_C_O # Initialize gnulib right after verifying that the C compiler works. +# Note: this ends up setting CPP. gl_EARLY +dnl Note: looks like gl_EARLY has already done this (via AC_PROG_CPP). # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -663,6 +665,46 @@ fail; fi fi +## If using gcc, and on darwin, see if using Apple's gcc, where old +## (pre gcc 3.3?) versions need -no-cpp-precomp to workaround some +## (unrecorded) issue. +## Frankly, I suspect this option is no longer needed on any system +## still in use today. It is at best a no-op since Apple's version +## of gcc 3.3 (?), which corresponds (?) to Xcode 1.5 from 2004. +## This was for OS X 10.3, and the nextstep port (for example) +## only supports 10.4 or later (although you could be building a +## non-ns version on some older OS X I guess). +if test x"$opsys" = xdarwin && test x"$GCC" = xyes; then + AC_MSG_CHECKING([whether we are using an Apple version of GCC]) + AC_CACHE_VAL(emacs_cv_apple_gcc, + [AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], +[[#ifndef __APPLE_CC__ +fail; +#endif +]])], emacs_cv_apple_gcc=yes, emacs_cv_apple_gcc=no)]) + AC_MSG_RESULT($emacs_cv_apple_gcc) + + ## This only tests that adding the option does not cause an error. + ## FIXME It may still cause "unrecognized option" + ## (in gcc < 4.6 --no-foo does that; newer versions throw an error). + ## The message appears on stderr, so AC_EGREP_CPP is no use. + ## It would be better to test if it is actually needed. + ## For that, someone would have actually had to document what the + ## issues it worked around were, so we could test for them. + if test $emacs_cv_apple_gcc = yes; then + AC_MSG_CHECKING([whether preprocessor accepts -no-cpp-precomp]) + save_CPP="$CPP" + test x$SPECIFIED_CPP = x && CPP="${CC-cc} -E" + CPP="$CPP -no-cpp-precomp" + dnl NB this will run AC_PROG_CPP first if it has not already happened. + AC_CACHE_VAL(emacs_cv_precomp, + [AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[]],[[]])], emacs_cv_precomp=yes, emacs_cv_precomp=no)]) + AC_MSG_RESULT($emacs_cv_precomp) + + test $emacs_cv_precomp = no && CPP="$save_CPP" + fi +fi + #### Some systems specify a CPP to use unless we are using GCC. #### Now that we know whether we are using GCC, we can decide whether #### to use that one. @@ -671,6 +713,8 @@ then CPP="$NON_GNU_CPP" fi +test "x$CPP_TEST_OPTIONS" != x && CPP="$CPP $CPP_TEST_OPTIONS" + #### Some systems specify a CC to use unless we are using GCC. #### Now that we know whether we are using GCC, we can decide whether #### to use that one. @@ -805,12 +849,16 @@ fi #### Some other nice autoconf tests. -dnl checks for programs +dnl Note: looks like gl_EARLY has already done this. AC_PROG_CPP AC_PROG_INSTALL + +dnl Note: looks like configure does this very early on anyway. AC_PROG_MKDIR_P + +dnl Note: looks like gl_EARLY has already done this. if test "x$RANLIB" = x; then - AC_PROG_RANLIB + AC_PROG_RANLIB fi ## Although we're running on an amd64 kernel, we're actually compiling for From 65034a51d64ca14de163a4f774bbcb12a6f501c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agust=C3=ADn=20Mart=C3=ADn?= Date: Wed, 16 May 2012 10:35:11 +0200 Subject: [PATCH 497/564] textmodes/flyspell.el: Delay for otherchars as for normal word components. (flyspell-check-pre-word-p, flyspell-check-word-p, flyspell-debug-signal-word-checked): Use for otherchars the same delay used for other word components, so word is not inmediately checked unless we are in a char that is neither a normal word component nor an otherchar. --- lisp/ChangeLog | 6 ++++++ lisp/textmodes/flyspell.el | 13 +++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index cec6cdc26b4..60b238e79d1 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2012-05-16 Agustín Martín Domingo + + * flyspell.el (flyspell-check-pre-word-p, flyspell-check-word-p) + (flyspell-debug-signal-word-checked): Delay for otherchars as for + normal word components. + 2012-05-16 Stefan Monnier * minibuffer.el (completion--sifn-requote): Fix last change. diff --git a/lisp/textmodes/flyspell.el b/lisp/textmodes/flyspell.el index 33fa551c8a4..156a7e532e8 100644 --- a/lisp/textmodes/flyspell.el +++ b/lisp/textmodes/flyspell.el @@ -739,7 +739,10 @@ before the current command." (eq flyspell-pre-pre-buffer flyspell-pre-buffer)) nil) ((or (and (= flyspell-pre-point (- (point) 1)) - (eq (char-syntax (char-after flyspell-pre-point)) ?w)) + (or (eq (char-syntax (char-after flyspell-pre-point)) ?w) + (string-match-p (ispell-get-otherchars) + (buffer-substring-no-properties + flyspell-pre-point (1+ flyspell-pre-point))))) (= flyspell-pre-point (point)) (= flyspell-pre-point (+ (point) 1))) nil) @@ -753,7 +756,10 @@ before the current command." ;; If other post-command-hooks change the buffer, ;; flyspell-pre-point can lie past eob (bug#468). (null (char-after flyspell-pre-point)) - (eq (char-syntax (char-after flyspell-pre-point)) ?w))) + (or (eq (char-syntax (char-after flyspell-pre-point)) ?w) + (string-match-p (ispell-get-otherchars) + (buffer-substring-no-properties + flyspell-pre-point (1+ flyspell-pre-point)))))) nil) ((not (eq (current-buffer) flyspell-pre-buffer)) t) @@ -815,6 +821,7 @@ Mostly we check word delimiters." (save-excursion (backward-char 1) (and (looking-at (flyspell-get-not-casechars)) + (not (looking-at (ispell-get-otherchars))) (or flyspell-consider-dash-as-word-delimiter-flag (not (looking-at "-")))))) ;; yes because we have reached or typed a word delimiter. @@ -880,6 +887,7 @@ Mostly we check word delimiters." (save-excursion (backward-char 1) (and (and (looking-at (flyspell-get-not-casechars)) 1) + (not (looking-at (ispell-get-otherchars))) (and (or flyspell-consider-dash-as-word-delimiter-flag (not (looking-at "\\-"))) 2)))))) c)))) @@ -895,6 +903,7 @@ Mostly we check word delimiters." (save-excursion (backward-char 1) (and (looking-at (flyspell-get-not-casechars)) + (not (looking-at (ispell-get-otherchars))) (or flyspell-consider-dash-as-word-delimiter-flag (not (looking-at "\\-")))))))) c)) From f04940ae9da3e1938b824cb96480be03257f1a5e Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 16 May 2012 02:01:55 -0700 Subject: [PATCH 498/564] * configure.in: Simplify by removing CPP etc. (CPP_TEST_OPTIONS, NON_GNU_CPP, cc_specified, SPECIFIED_CFLAGS) (SPECIFED_CPP, CPP, NON_GNU_CC, AC_PROG_CPP): Remove; not needed. In particular we no longer need to fiddle with CPP, since we don't use CPP specially any more. (gl_EARLY): Invoke this after adjusting CC, so that it uses the adjusted compiler. (AC_PROG_INSTALL, AC_PROG_MKDIR_P, AC_PROG_RANLIB): Comment out, since gl_EARLY and/or Autoconf already does these. --- ChangeLog | 12 +++++ configure.in | 135 ++++++--------------------------------------------- 2 files changed, 26 insertions(+), 121 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0495e917f21..0b7a79cc3d6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2012-05-16 Paul Eggert + + * configure.in: Simplify by removing CPP etc. + (CPP_TEST_OPTIONS, NON_GNU_CPP, cc_specified, SPECIFIED_CFLAGS) + (SPECIFED_CPP, CPP, NON_GNU_CC, AC_PROG_CPP): Remove; not needed. + In particular we no longer need to fiddle with CPP, since we don't + use CPP specially any more. + (gl_EARLY): Invoke this after adjusting CC, so that it uses the + adjusted compiler. + (AC_PROG_INSTALL, AC_PROG_MKDIR_P, AC_PROG_RANLIB): Comment out, + since gl_EARLY and/or Autoconf already does these. + 2012-05-16 Glenn Morris * configure.in: Try to fix building with gcc >= 4.6 on Darwin. diff --git a/configure.in b/configure.in index 5dfcc921e4f..e35f712c3b8 100644 --- a/configure.in +++ b/configure.in @@ -496,7 +496,6 @@ case "${canonical}" in # FIXME? Is it really our business to decide this for the user? if test -d /sw/include && test -d /sw/lib; then GCC_TEST_OPTIONS="-I/sw/include -L/sw/lib" - CPP_TEST_OPTIONS=${GCC_TEST_OPTIONS} NON_GCC_TEST_OPTIONS=${GCC_TEST_OPTIONS} fi ;; @@ -531,7 +530,6 @@ case "${canonical}" in # Without defining _LANGUAGE_C, things get masked out in the headers # so that, for instance, grepping for `free' in stdlib.h fails and # AC_HEADER_STD_C fails. (MIPSPro 7.2.1.2m compilers, Irix 6.5.3m). - NON_GNU_CPP="/lib/cpp -D_LANGUAGE_C" NON_GCC_TEST_OPTIONS="-D_LANGUAGE_C" ;; @@ -548,18 +546,15 @@ case "${canonical}" in case "${canonical}" in *-sunos5.6* | *-solaris2.6* ) opsys=sol2-6 - NON_GNU_CPP=/usr/ccs/lib/cpp RANLIB="ar -ts" ;; *-sunos5.[7-9]* | *-solaris2.[7-9]* ) opsys=sol2-6 emacs_check_sunpro_c=yes - NON_GNU_CPP=/usr/ccs/lib/cpp ;; *-sunos5* | *-solaris* ) opsys=sol2-10 emacs_check_sunpro_c=yes - NON_GNU_CPP=/usr/ccs/lib/cpp ;; esac ## Watch out for a compiler that we know will not work. @@ -581,9 +576,9 @@ case "${canonical}" in case "${canonical}" in *-cygwin ) opsys=cygwin ;; *-darwin* ) opsys=darwin ;; - *-sysv4.2uw* ) opsys=unixware; NON_GNU_CPP=/lib/cpp ;; - *-sysv5uw* ) opsys=unixware; NON_GNU_CPP=/lib/cpp ;; - *-sysv5OpenUNIX* ) opsys=unixware; NON_GNU_CPP=/lib/cpp ;; + *-sysv4.2uw* ) opsys=unixware ;; + *-sysv5uw* ) opsys=unixware ;; + *-sysv5OpenUNIX* ) opsys=unixware ;; ## Otherwise, we'll fall through to the generic opsys code at the bottom. esac ;; @@ -625,111 +620,20 @@ opsysfile="s/${opsys}.h" #### Choose a compiler. -test -n "$CC" && cc_specified=yes - -# Save the value of CFLAGS that the user specified. -SPECIFIED_CFLAGS="$CFLAGS" - -# Save specified CPP (if any), before AC_PROG_CPP runs. -SPECIFIED_CPP="$CPP" dnl Sets GCC=yes if using gcc. AC_PROG_CC AM_PROG_CC_C_O -# Initialize gnulib right after verifying that the C compiler works. -# Note: this ends up setting CPP. -gl_EARLY - -dnl Note: looks like gl_EARLY has already done this (via AC_PROG_CPP). -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi - -## If not using gcc, and on Solaris, and no CPP specified, see if -## using a Sun compiler, which needs -Xs to prevent whitespace. -if test x"$GCC" != xyes && test x"$emacs_check_sunpro_c" = xyes && \ - test x"$CPP" = x; then - AC_MSG_CHECKING([whether we are using a Sun C compiler]) - AC_CACHE_VAL(emacs_cv_sunpro_c, - [AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], -[[#ifndef __SUNPRO_C -fail; -#endif -]])], emacs_cv_sunpro_c=yes, emacs_cv_sunpro_c=no)]) - AC_MSG_RESULT($emacs_cv_sunpro_c) - - if test x"$emacs_cv_sunpro_c" = xyes; then - NON_GNU_CPP="$CC -E -Xs" - fi -fi - -## If using gcc, and on darwin, see if using Apple's gcc, where old -## (pre gcc 3.3?) versions need -no-cpp-precomp to workaround some -## (unrecorded) issue. -## Frankly, I suspect this option is no longer needed on any system -## still in use today. It is at best a no-op since Apple's version -## of gcc 3.3 (?), which corresponds (?) to Xcode 1.5 from 2004. -## This was for OS X 10.3, and the nextstep port (for example) -## only supports 10.4 or later (although you could be building a -## non-ns version on some older OS X I guess). -if test x"$opsys" = xdarwin && test x"$GCC" = xyes; then - AC_MSG_CHECKING([whether we are using an Apple version of GCC]) - AC_CACHE_VAL(emacs_cv_apple_gcc, - [AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], -[[#ifndef __APPLE_CC__ -fail; -#endif -]])], emacs_cv_apple_gcc=yes, emacs_cv_apple_gcc=no)]) - AC_MSG_RESULT($emacs_cv_apple_gcc) - - ## This only tests that adding the option does not cause an error. - ## FIXME It may still cause "unrecognized option" - ## (in gcc < 4.6 --no-foo does that; newer versions throw an error). - ## The message appears on stderr, so AC_EGREP_CPP is no use. - ## It would be better to test if it is actually needed. - ## For that, someone would have actually had to document what the - ## issues it worked around were, so we could test for them. - if test $emacs_cv_apple_gcc = yes; then - AC_MSG_CHECKING([whether preprocessor accepts -no-cpp-precomp]) - save_CPP="$CPP" - test x$SPECIFIED_CPP = x && CPP="${CC-cc} -E" - CPP="$CPP -no-cpp-precomp" - dnl NB this will run AC_PROG_CPP first if it has not already happened. - AC_CACHE_VAL(emacs_cv_precomp, - [AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[]],[[]])], emacs_cv_precomp=yes, emacs_cv_precomp=no)]) - AC_MSG_RESULT($emacs_cv_precomp) - - test $emacs_cv_precomp = no && CPP="$save_CPP" - fi -fi - -#### Some systems specify a CPP to use unless we are using GCC. -#### Now that we know whether we are using GCC, we can decide whether -#### to use that one. -if test "x$NON_GNU_CPP" != x && test x$GCC != xyes && test "x$CPP" = x -then - CPP="$NON_GNU_CPP" -fi - -test "x$CPP_TEST_OPTIONS" != x && CPP="$CPP $CPP_TEST_OPTIONS" - -#### Some systems specify a CC to use unless we are using GCC. -#### Now that we know whether we are using GCC, we can decide whether -#### to use that one. -if test "x$NON_GNU_CC" != x && test x$GCC != xyes && - test x$cc_specified != xyes -then - CC="$NON_GNU_CC" -fi - if test x$GCC = xyes; then test "x$GCC_TEST_OPTIONS" != x && CC="$CC $GCC_TEST_OPTIONS" else test "x$NON_GCC_TEST_OPTIONS" != x && CC="$CC $NON_GCC_TEST_OPTIONS" fi +# Initialize gnulib right after choosing the compiler. +gl_EARLY + AC_ARG_ENABLE([gcc-warnings], [AS_HELP_STRING([--enable-gcc-warnings], [turn on lots of GCC warnings (for developers)])], @@ -847,19 +751,13 @@ fi -#### Some other nice autoconf tests. - -dnl Note: looks like gl_EARLY has already done this. -AC_PROG_CPP -AC_PROG_INSTALL - -dnl Note: looks like configure does this very early on anyway. -AC_PROG_MKDIR_P - -dnl Note: looks like gl_EARLY has already done this. -if test "x$RANLIB" = x; then - AC_PROG_RANLIB -fi +dnl Some other nice autoconf tests. +dnl These are commented out, since gl_EARLY and/or Autoconf already does them. +dnl AC_PROG_INSTALL +dnl AC_PROG_MKDIR_P +dnl if test "x$RANLIB" = x; then +dnl AC_PROG_RANLIB +dnl fi ## Although we're running on an amd64 kernel, we're actually compiling for ## the x86 architecture. The user should probably have provided an @@ -950,11 +848,6 @@ AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], [AC_MSG_RESULT(no)]) -# The value of CPP is a quoted variable reference, so we need to do this -# to get its actual value... -CPP=`eval "echo $CPP"` - - dnl The function dump-emacs will not be defined and temacs will do dnl (load "loadup") automatically unless told otherwise. test "x$CANNOT_DUMP" = "x" && CANNOT_DUMP=no @@ -3982,7 +3875,7 @@ dnl the use of force in the `epaths-force' rule in Makefile.in. AC_CONFIG_COMMANDS([epaths], [ echo creating src/epaths.h ${MAKE-make} epaths-force -], [GCC="$GCC" NON_GNU_CPP="$NON_GNU_CPP" CPP="$CPP" CPPFLAGS="$CPPFLAGS"]) +], [GCC="$GCC" CPPFLAGS="$CPPFLAGS"]) AC_CONFIG_COMMANDS([gdbinit], [ if test ! -f src/.gdbinit && test -f $srcdir/src/.gdbinit; then From 5ec546086a3f0ea5ad6ba2501dc4d84188e8b880 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 16 May 2012 06:17:25 -0400 Subject: [PATCH 499/564] Auto-commit of generated files. --- autogen/configure | 418 ++++++---------------------------------------- 1 file changed, 52 insertions(+), 366 deletions(-) diff --git a/autogen/configure b/autogen/configure index 23314605039..e5f994a2540 100755 --- a/autogen/configure +++ b/autogen/configure @@ -2379,6 +2379,45 @@ $as_echo "$ac_res" >&6; } } # ac_fn_c_check_header_compile +# ac_fn_c_check_decl LINENO SYMBOL VAR +# ------------------------------------ +# Tests whether SYMBOL is declared, setting cache variable VAR accordingly. +ac_fn_c_check_decl () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $2 is declared" >&5 +$as_echo_n "checking whether $2 is declared... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +#ifndef $2 + (void) $2; +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_decl + # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. @@ -2425,45 +2464,6 @@ fi } # ac_fn_c_try_link -# ac_fn_c_check_decl LINENO SYMBOL VAR -# ------------------------------------ -# Tests whether SYMBOL is declared, setting cache variable VAR accordingly. -ac_fn_c_check_decl () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $2 is declared" >&5 -$as_echo_n "checking whether $2 is declared... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -#ifndef $2 - (void) $2; -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_decl - # ac_fn_c_check_header_preproc LINENO HEADER VAR # ---------------------------------------------- # Tests whether HEADER is present, setting the cache variable VAR accordingly. @@ -4481,12 +4481,10 @@ case "${canonical}" in * ) unported=yes ;; esac opsys=darwin - # Define CPP as follows to make autoconf work correctly. - CPP="${CC-cc} -E -no-cpp-precomp" # Use fink packages if available. + # FIXME? Is it really our business to decide this for the user? if test -d /sw/include && test -d /sw/lib; then GCC_TEST_OPTIONS="-I/sw/include -L/sw/lib" - CPP="${CPP} ${GCC_TEST_OPTIONS}" NON_GCC_TEST_OPTIONS=${GCC_TEST_OPTIONS} fi ;; @@ -4521,7 +4519,6 @@ case "${canonical}" in # Without defining _LANGUAGE_C, things get masked out in the headers # so that, for instance, grepping for `free' in stdlib.h fails and # AC_HEADER_STD_C fails. (MIPSPro 7.2.1.2m compilers, Irix 6.5.3m). - NON_GNU_CPP="/lib/cpp -D_LANGUAGE_C" NON_GCC_TEST_OPTIONS="-D_LANGUAGE_C" ;; @@ -4538,18 +4535,15 @@ case "${canonical}" in case "${canonical}" in *-sunos5.6* | *-solaris2.6* ) opsys=sol2-6 - NON_GNU_CPP=/usr/ccs/lib/cpp RANLIB="ar -ts" ;; *-sunos5.[7-9]* | *-solaris2.[7-9]* ) opsys=sol2-6 emacs_check_sunpro_c=yes - NON_GNU_CPP=/usr/ccs/lib/cpp ;; *-sunos5* | *-solaris* ) opsys=sol2-10 emacs_check_sunpro_c=yes - NON_GNU_CPP=/usr/ccs/lib/cpp ;; esac ## Watch out for a compiler that we know will not work. @@ -4570,12 +4564,10 @@ case "${canonical}" in machine=intel386 case "${canonical}" in *-cygwin ) opsys=cygwin ;; - *-darwin* ) opsys=darwin - CPP="${CC-cc} -E -no-cpp-precomp" - ;; - *-sysv4.2uw* ) opsys=unixware; NON_GNU_CPP=/lib/cpp ;; - *-sysv5uw* ) opsys=unixware; NON_GNU_CPP=/lib/cpp ;; - *-sysv5OpenUNIX* ) opsys=unixware; NON_GNU_CPP=/lib/cpp ;; + *-darwin* ) opsys=darwin ;; + *-sysv4.2uw* ) opsys=unixware ;; + *-sysv5uw* ) opsys=unixware ;; + *-sysv5OpenUNIX* ) opsys=unixware ;; ## Otherwise, we'll fall through to the generic opsys code at the bottom. esac ;; @@ -4616,10 +4608,6 @@ opsysfile="s/${opsys}.h" #### Choose a compiler. -test -n "$CC" && cc_specified=yes - -# Save the value of CFLAGS that the user specified. -SPECIFIED_CFLAGS="$CFLAGS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -5728,7 +5716,13 @@ fi -# Initialize gnulib right after verifying that the C compiler works. +if test x$GCC = xyes; then + test "x$GCC_TEST_OPTIONS" != x && CC="$CC $GCC_TEST_OPTIONS" +else + test "x$NON_GCC_TEST_OPTIONS" != x && CC="$CC $NON_GCC_TEST_OPTIONS" +fi + +# Initialize gnulib right after choosing the compiler. ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -7004,74 +6998,6 @@ esac # Code from module warnings: -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi - -## If not using gcc, and on Solaris, and no CPP specified, see if -## using a Sun compiler, which needs -Xs to prevent whitespace. -if test x"$GCC" != xyes && test x"$emacs_check_sunpro_c" = xyes && \ - test x"$CPP" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using a Sun C compiler" >&5 -$as_echo_n "checking whether we are using a Sun C compiler... " >&6; } - if test "${emacs_cv_sunpro_c+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __SUNPRO_C -fail; -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - emacs_cv_sunpro_c=yes -else - emacs_cv_sunpro_c=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $emacs_cv_sunpro_c" >&5 -$as_echo "$emacs_cv_sunpro_c" >&6; } - - if test x"$emacs_cv_sunpro_c" = xyes; then - NON_GNU_CPP="$CC -E -Xs" - fi -fi - -#### Some systems specify a CPP to use unless we are using GCC. -#### Now that we know whether we are using GCC, we can decide whether -#### to use that one. -if test "x$NON_GNU_CPP" != x && test x$GCC != xyes && test "x$CPP" = x -then - CPP="$NON_GNU_CPP" -fi - -#### Some systems specify a CC to use unless we are using GCC. -#### Now that we know whether we are using GCC, we can decide whether -#### to use that one. -if test "x$NON_GNU_CC" != x && test x$GCC != xyes && - test x$cc_specified != xyes -then - CC="$NON_GNU_CC" -fi - -if test x$GCC = xyes; then - test "x$GCC_TEST_OPTIONS" != x && CC="$CC $GCC_TEST_OPTIONS" -else - test "x$NON_GCC_TEST_OPTIONS" != x && CC="$CC $NON_GCC_TEST_OPTIONS" -fi - # Check whether --enable-gcc-warnings was given. if test "${enable_gcc_warnings+set}" = set; then : enableval=$enable_gcc_warnings; case $enableval in @@ -7755,241 +7681,6 @@ fi -#### Some other nice autoconf tests. - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -if test "x$RANLIB" = x; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_RANLIB+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - -fi ## Although we're running on an amd64 kernel, we're actually compiling for ## the x86 architecture. The user should probably have provided an @@ -8289,11 +7980,6 @@ rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext -# The value of CPP is a quoted variable reference, so we need to do this -# to get its actual value... -CPP=`eval "echo $CPP"` - - test "x$CANNOT_DUMP" = "x" && CANNOT_DUMP=no case "$opsys" in your-opsys-here) CANNOT_DUMP=yes ;; @@ -23892,7 +23578,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" -GCC="$GCC" NON_GNU_CPP="$NON_GNU_CPP" CPP="$CPP" CPPFLAGS="$CPPFLAGS" +GCC="$GCC" CPPFLAGS="$CPPFLAGS" _ACEOF From a0a79cde7c978cf457c4a817b9a67bb4557f8a5c Mon Sep 17 00:00:00 2001 From: Juri Linkov Date: Thu, 17 May 2012 03:03:49 +0300 Subject: [PATCH 500/564] Move word search functions from search.c to isearch.el (bug#10145, bug#11381). * lisp/isearch.el (word-search-regexp, word-search-backward) (word-search-forward, word-search-backward-lax) (word-search-forward-lax): Move functions from search.c. * src/search.c (Fword_search_regexp, Fword_search_backward) (Fword_search_forward, Fword_search_backward_lax) (Fword_search_forward_lax): Move functions to isearch.el. --- lisp/ChangeLog | 7 ++ lisp/isearch.el | 88 +++++++++++++++++++++++ src/ChangeLog | 7 ++ src/search.c | 181 ------------------------------------------------ 4 files changed, 102 insertions(+), 181 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 60b238e79d1..b1d9323e481 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2012-05-17 Juri Linkov + + * isearch.el (word-search-regexp, word-search-backward) + (word-search-forward, word-search-backward-lax) + (word-search-forward-lax): Move functions from search.c + (bug#10145, bug#11381). + 2012-05-16 Agustín Martín Domingo * flyspell.el (flyspell-check-pre-word-p, flyspell-check-word-p) diff --git a/lisp/isearch.el b/lisp/isearch.el index 9d69443b6a4..7f68fb4ad32 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el @@ -1381,6 +1381,94 @@ Use `isearch-exit' to quit without signaling." (sit-for 1) (isearch-update)) + +;; Word search + +(defun word-search-regexp (string &optional lax) + "Return a regexp which matches words, ignoring punctuation. +Given STRING, a string of words separated by word delimiters, +compute a regexp that matches those exact words separated by +arbitrary punctuation. If LAX is non-nil, the end of the string +need not match a word boundary unless it ends in whitespace. + +Used in `word-search-forward', `word-search-backward', +`word-search-forward-lax', `word-search-backward-lax'." + (if (string-match-p "^\\W*$" string) + "" + (concat + "\\b" + (mapconcat 'identity (split-string string "\\W+" t) "\\W+") + (if (or (not lax) (string-match-p "\\W$" string)) "\\b")))) + +(defun word-search-backward (string &optional bound noerror count) + "Search backward from point for STRING, ignoring differences in punctuation. +Set point to the beginning of the occurrence found, and return point. +An optional second argument bounds the search; it is a buffer position. +The match found must not extend before that position. +Optional third argument, if t, means if fail just return nil (no error). + If not nil and not t, move to limit of search and return nil. +Optional fourth argument is repeat count--search for successive occurrences. + +Relies on the function `word-search-regexp' to convert a sequence +of words in STRING to a regexp used to search words without regard +to punctuation." + (interactive "sWord search backward: ") + (re-search-backward (word-search-regexp string nil) bound noerror count)) + +(defun word-search-forward (string &optional bound noerror count) + "Search forward from point for STRING, ignoring differences in punctuation. +Set point to the end of the occurrence found, and return point. +An optional second argument bounds the search; it is a buffer position. +The match found must not extend after that position. +Optional third argument, if t, means if fail just return nil (no error). + If not nil and not t, move to limit of search and return nil. +Optional fourth argument is repeat count--search for successive occurrences. + +Relies on the function `word-search-regexp' to convert a sequence +of words in STRING to a regexp used to search words without regard +to punctuation." + (interactive "sWord search: ") + (re-search-forward (word-search-regexp string nil) bound noerror count)) + +(defun word-search-backward-lax (string &optional bound noerror count) + "Search backward from point for STRING, ignoring differences in punctuation. +Set point to the beginning of the occurrence found, and return point. + +Unlike `word-search-backward', the end of STRING need not match a word +boundary, unless STRING ends in whitespace. + +An optional second argument bounds the search; it is a buffer position. +The match found must not extend before that position. +Optional third argument, if t, means if fail just return nil (no error). + If not nil and not t, move to limit of search and return nil. +Optional fourth argument is repeat count--search for successive occurrences. + +Relies on the function `word-search-regexp' to convert a sequence +of words in STRING to a regexp used to search words without regard +to punctuation." + (interactive "sWord search backward: ") + (re-search-backward (word-search-regexp string t) bound noerror count)) + +(defun word-search-forward-lax (string &optional bound noerror count) + "Search forward from point for STRING, ignoring differences in punctuation. +Set point to the end of the occurrence found, and return point. + +Unlike `word-search-forward', the end of STRING need not match a word +boundary, unless STRING ends in whitespace. + +An optional second argument bounds the search; it is a buffer position. +The match found must not extend after that position. +Optional third argument, if t, means if fail just return nil (no error). + If not nil and not t, move to limit of search and return nil. +Optional fourth argument is repeat count--search for successive occurrences. + +Relies on the function `word-search-regexp' to convert a sequence +of words in STRING to a regexp used to search words without regard +to punctuation." + (interactive "sWord search: ") + (re-search-forward (word-search-regexp string t) bound noerror count)) + + (defun isearch-query-replace (&optional delimited regexp-flag) "Start `query-replace' with string to replace from last search string. The arg DELIMITED (prefix arg if interactive), if non-nil, means replace diff --git a/src/ChangeLog b/src/ChangeLog index 63661f5d27a..c72c8ae4d65 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2012-05-17 Juri Linkov + + * search.c (Fword_search_regexp, Fword_search_backward) + (Fword_search_forward, Fword_search_backward_lax) + (Fword_search_forward_lax): Move functions to isearch.el + (bug#10145, bug#11381). + 2012-05-16 Paul Eggert * xgselect.c (xg_select): Just invoke 'select' if -nw (Bug#9754). diff --git a/src/search.c b/src/search.c index 1f3ccc25dc8..2bf5f78d93b 100644 --- a/src/search.c +++ b/src/search.c @@ -2078,102 +2078,6 @@ set_search_regs (EMACS_INT beg_byte, EMACS_INT nbytes) XSETBUFFER (last_thing_searched, current_buffer); } -DEFUN ("word-search-regexp", Fword_search_regexp, Sword_search_regexp, 1, 2, 0, - doc: /* Return a regexp which matches words, ignoring punctuation. -Given STRING, a string of words separated by word delimiters, -compute a regexp that matches those exact words separated by -arbitrary punctuation. If LAX is non-nil, the end of the string -need not match a word boundary unless it ends in whitespace. - -Used in `word-search-forward', `word-search-backward', -`word-search-forward-lax', `word-search-backward-lax'. */) - (Lisp_Object string, Lisp_Object lax) -{ - register unsigned char *o; - register EMACS_INT i, i_byte, len, punct_count = 0, word_count = 0; - Lisp_Object val; - int prev_c = 0; - EMACS_INT adjust; - int whitespace_at_end; - - CHECK_STRING (string); - len = SCHARS (string); - - for (i = 0, i_byte = 0; i < len; ) - { - int c; - - FETCH_STRING_CHAR_AS_MULTIBYTE_ADVANCE (c, string, i, i_byte); - - if (SYNTAX (c) != Sword) - { - punct_count++; - if (SYNTAX (prev_c) == Sword) - word_count++; - } - - prev_c = c; - } - - if (SYNTAX (prev_c) == Sword) - { - word_count++; - whitespace_at_end = 0; - } - else - { - whitespace_at_end = 1; - if (!word_count) - return empty_unibyte_string; - } - - adjust = - punct_count + 5 * (word_count - 1) - + ((!NILP (lax) && !whitespace_at_end) ? 2 : 4); - if (STRING_MULTIBYTE (string)) - val = make_uninit_multibyte_string (len + adjust, - SBYTES (string) - + adjust); - else - val = make_uninit_string (len + adjust); - - o = SDATA (val); - *o++ = '\\'; - *o++ = 'b'; - prev_c = 0; - - for (i = 0, i_byte = 0; i < len; ) - { - int c; - EMACS_INT i_byte_orig = i_byte; - - FETCH_STRING_CHAR_AS_MULTIBYTE_ADVANCE (c, string, i, i_byte); - - if (SYNTAX (c) == Sword) - { - memcpy (o, SDATA (string) + i_byte_orig, i_byte - i_byte_orig); - o += i_byte - i_byte_orig; - } - else if (SYNTAX (prev_c) == Sword && --word_count) - { - *o++ = '\\'; - *o++ = 'W'; - *o++ = '\\'; - *o++ = 'W'; - *o++ = '*'; - } - - prev_c = c; - } - - if (NILP (lax) || whitespace_at_end) - { - *o++ = '\\'; - *o++ = 'b'; - } - - return val; -} - DEFUN ("search-backward", Fsearch_backward, Ssearch_backward, 1, 4, "MSearch backward: ", doc: /* Search backward from point for STRING. @@ -2216,86 +2120,6 @@ See also the functions `match-beginning', `match-end' and `replace-match'. */) return search_command (string, bound, noerror, count, 1, 0, 0); } -DEFUN ("word-search-backward", Fword_search_backward, Sword_search_backward, 1, 4, - "sWord search backward: ", - doc: /* Search backward from point for STRING, ignoring differences in punctuation. -Set point to the beginning of the occurrence found, and return point. -An optional second argument bounds the search; it is a buffer position. -The match found must not extend before that position. -Optional third argument, if t, means if fail just return nil (no error). - If not nil and not t, move to limit of search and return nil. -Optional fourth argument is repeat count--search for successive occurrences. - -Relies on the function `word-search-regexp' to convert a sequence -of words in STRING to a regexp used to search words without regard -to punctuation. */) - (Lisp_Object string, Lisp_Object bound, Lisp_Object noerror, Lisp_Object count) -{ - return search_command (Fword_search_regexp (string, Qnil), bound, noerror, count, -1, 1, 0); -} - -DEFUN ("word-search-forward", Fword_search_forward, Sword_search_forward, 1, 4, - "sWord search: ", - doc: /* Search forward from point for STRING, ignoring differences in punctuation. -Set point to the end of the occurrence found, and return point. -An optional second argument bounds the search; it is a buffer position. -The match found must not extend after that position. -Optional third argument, if t, means if fail just return nil (no error). - If not nil and not t, move to limit of search and return nil. -Optional fourth argument is repeat count--search for successive occurrences. - -Relies on the function `word-search-regexp' to convert a sequence -of words in STRING to a regexp used to search words without regard -to punctuation. */) - (Lisp_Object string, Lisp_Object bound, Lisp_Object noerror, Lisp_Object count) -{ - return search_command (Fword_search_regexp (string, Qnil), bound, noerror, count, 1, 1, 0); -} - -DEFUN ("word-search-backward-lax", Fword_search_backward_lax, Sword_search_backward_lax, 1, 4, - "sWord search backward: ", - doc: /* Search backward from point for STRING, ignoring differences in punctuation. -Set point to the beginning of the occurrence found, and return point. - -Unlike `word-search-backward', the end of STRING need not match a word -boundary, unless STRING ends in whitespace. - -An optional second argument bounds the search; it is a buffer position. -The match found must not extend before that position. -Optional third argument, if t, means if fail just return nil (no error). - If not nil and not t, move to limit of search and return nil. -Optional fourth argument is repeat count--search for successive occurrences. - -Relies on the function `word-search-regexp' to convert a sequence -of words in STRING to a regexp used to search words without regard -to punctuation. */) - (Lisp_Object string, Lisp_Object bound, Lisp_Object noerror, Lisp_Object count) -{ - return search_command (Fword_search_regexp (string, Qt), bound, noerror, count, -1, 1, 0); -} - -DEFUN ("word-search-forward-lax", Fword_search_forward_lax, Sword_search_forward_lax, 1, 4, - "sWord search: ", - doc: /* Search forward from point for STRING, ignoring differences in punctuation. -Set point to the end of the occurrence found, and return point. - -Unlike `word-search-forward', the end of STRING need not match a word -boundary, unless STRING ends in whitespace. - -An optional second argument bounds the search; it is a buffer position. -The match found must not extend after that position. -Optional third argument, if t, means if fail just return nil (no error). - If not nil and not t, move to limit of search and return nil. -Optional fourth argument is repeat count--search for successive occurrences. - -Relies on the function `word-search-regexp' to convert a sequence -of words in STRING to a regexp used to search words without regard -to punctuation. */) - (Lisp_Object string, Lisp_Object bound, Lisp_Object noerror, Lisp_Object count) -{ - return search_command (Fword_search_regexp (string, Qt), bound, noerror, count, 1, 1, 0); -} - DEFUN ("re-search-backward", Fre_search_backward, Sre_search_backward, 1, 4, "sRE search backward: ", doc: /* Search backward from point for match for regular expression REGEXP. @@ -3252,11 +3076,6 @@ is to bind it with `let' around a small expression. */); defsubr (&Sposix_string_match); defsubr (&Ssearch_forward); defsubr (&Ssearch_backward); - defsubr (&Sword_search_regexp); - defsubr (&Sword_search_forward); - defsubr (&Sword_search_backward); - defsubr (&Sword_search_forward_lax); - defsubr (&Sword_search_backward_lax); defsubr (&Sre_search_forward); defsubr (&Sre_search_backward); defsubr (&Sposix_search_forward); From 3a4155de6637f737ff8b12ec3ceb2633f8e8fa26 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 16 May 2012 21:23:03 -0400 Subject: [PATCH 501/564] Install a self-contained NS build's libexec directly into the right place This is rather than installing it in one place then moving it. * configure.in (archlibdir): Set it for self-contained ns builds. (libexecdir): Don't expand it now (this is mainly cosmetic). * Makefile.in (ns_appbindir, ns_appresdir): Move them before things that may refer to them. (install-arch-dep): No need to relocate self-contained ns libexec. * lib-src/Makefile.in (ns_appbindir): New, set by configure. --- ChangeLog | 9 +++++++++ Makefile.in | 20 ++++++++++---------- configure.in | 4 +++- lib-src/ChangeLog | 4 ++++ lib-src/Makefile.in | 4 ++++ 5 files changed, 30 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0b7a79cc3d6..04ce3736d5b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2012-05-17 Glenn Morris + + * Makefile.in (ns_appbindir, ns_appresdir): + Move them before things that may refer to them. + (install-arch-dep): No need to relocate self-contained ns libexec. + + * configure.in (archlibdir): Set it for self-contained ns builds. + (libexecdir): Don't expand it now (this is mainly cosmetic). + 2012-05-16 Paul Eggert * configure.in: Simplify by removing CPP etc. diff --git a/Makefile.in b/Makefile.in index 171b13aa368..389bbf95f90 100644 --- a/Makefile.in +++ b/Makefile.in @@ -90,6 +90,11 @@ configuration=@configuration@ # ==================== Where To Install Things ==================== +# Location to install Emacs.app under GNUstep / Mac OS X. +# Later values may use these. +ns_appbindir=@ns_appbindir@ +ns_appresdir=@ns_appresdir@ + # The default location for installation. Everything is placed in # subdirectories of this directory. The default values for many of # the variables below are expressed in terms of this one, so you may @@ -117,8 +122,10 @@ datadir=@datadir@ sharedstatedir=@sharedstatedir@ # Where to install and expect executable files to be run by Emacs -# rather than directly by users, and other architecture-dependent -# data. ${archlibdir} is a subdirectory of this. +# rather than directly by users (and other architecture-dependent +# data, although Emacs does not have any). The executables +# are actually installed in ${archlibdir}, which is (normally) +# a subdirectory of this. libexecdir=@libexecdir@ # Where to install Emacs's man pages. @@ -158,10 +165,6 @@ VPATH=@srcdir@ # Where to find the application default. x_default_search_path=@x_default_search_path@ -# Location to install Emacs.app under NeXT/Open/GNUstep / Cocoa -ns_appbindir=@ns_appbindir@ -ns_appresdir=@ns_appresdir@ - # Where the etc/emacs.desktop file is to be installed. desktopdir=$(datarootdir)/applications @@ -475,10 +478,7 @@ install-arch-dep: mkdir fi ; \ if test -d share/info ; then rm -fr info; mv share/info . ; fi ; \ rm -fr share ) ; \ - ( if cd ${ns_appbindir}/libexec ; then \ - mv -f emacs/${version}/${configuration}/* . ; rm -fr emacs ; \ - rm -f ../bin/emacs ../bin/$(EMACSFULL) ; \ - fi ) ; \ + rm -f ${ns_appbindir}/bin/emacs ${ns_appbindir}/bin/$(EMACSFULL); \ else true ; fi ## FIXME NS self-contained: rather than installing emacs and diff --git a/configure.in b/configure.in index e35f712c3b8..8c3b3228241 100644 --- a/configure.in +++ b/configure.in @@ -1588,7 +1588,9 @@ if test "${HAVE_NS}" = yes; then if test "${EN_NS_SELF_CONTAINED}" = yes; then prefix=${ns_appresdir} exec_prefix=${ns_appbindir} - libexecdir=${ns_appbindir}/libexec + dnl This one isn't really used, only archlibdir is. + libexecdir="\${ns_appbindir}/libexec" + archlibdir="\${ns_appbindir}/libexec" LEIM_INSTALLDIR="\${ns_appresdir}/leim" fi ns_frag=$srcdir/src/ns.mk diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index aa78c25d1e1..a4a1cffaa96 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog @@ -1,3 +1,7 @@ +2012-05-17 Glenn Morris + + * Makefile.in (ns_appbindir): New, set by configure. + 2012-05-12 Glenn Morris * Makefile.in (MKDIR_P): New, set by configure. diff --git a/lib-src/Makefile.in b/lib-src/Makefile.in index be19b6dc15c..1306e660630 100644 --- a/lib-src/Makefile.in +++ b/lib-src/Makefile.in @@ -45,6 +45,10 @@ TRANSFORM = @program_transform_name@ # ==================== Where To Install Things ==================== +# Location to install Emacs.app under GNUstep / Mac OS X. +# Later values may use this. +ns_appbindir=@ns_appbindir@ + # The default location for installation. Everything is placed in # subdirectories of this directory. The default values for many of # the variables below are expressed in terms of this one, so you may From 96182ae6973a088e7c3fffd489acf626d0b3a6cb Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 16 May 2012 22:14:50 -0700 Subject: [PATCH 502/564] Minor optimization for install-arch-dep with self-contained ns build * Makefile.in (install-arch-dep): For a self-contained ns build, don't bother installing binaries then immediately deleting them. --- ChangeLog | 3 +++ Makefile.in | 18 +++++++----------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index 04ce3736d5b..e30635140ef 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2012-05-17 Glenn Morris + * Makefile.in (install-arch-dep): For a self-contained ns build, + don't bother installing binaries then immediately deleting them. + * Makefile.in (ns_appbindir, ns_appresdir): Move them before things that may refer to them. (install-arch-dep): No need to relocate self-contained ns libexec. diff --git a/Makefile.in b/Makefile.in index 389bbf95f90..e9ab4e6733d 100644 --- a/Makefile.in +++ b/Makefile.in @@ -465,11 +465,12 @@ install-arch-dep: mkdir exec_prefix=${exec_prefix} bindir=${bindir} \ libexecdir=${libexecdir} archlibdir=${archlibdir} \ INSTALL_STRIP=${INSTALL_STRIP}) - ${INSTALL_PROGRAM} $(INSTALL_STRIP) src/emacs${EXEEXT} $(DESTDIR)${bindir}/$(EMACSFULL) - -chmod 1755 $(DESTDIR)${bindir}/$(EMACSFULL) - rm -f $(DESTDIR)${bindir}/$(EMACS) - -ln $(DESTDIR)${bindir}/$(EMACSFULL) $(DESTDIR)${bindir}/$(EMACS) - if test "${ns_appresdir}" != ""; then \ + if test "${ns_appresdir}" = ""; then \ + ${INSTALL_PROGRAM} $(INSTALL_STRIP) src/emacs${EXEEXT} $(DESTDIR)${bindir}/$(EMACSFULL) || exit 1 ; \ + chmod 1755 $(DESTDIR)${bindir}/$(EMACSFULL) ; \ + rm -f $(DESTDIR)${bindir}/$(EMACS) ; \ + ln $(DESTDIR)${bindir}/$(EMACSFULL) $(DESTDIR)${bindir}/$(EMACS) || true ; \ + else \ ( cd ${ns_appresdir} ; \ if test -d share/emacs ; then \ for dir in share/emacs/${version}/*; do \ @@ -478,12 +479,7 @@ install-arch-dep: mkdir fi ; \ if test -d share/info ; then rm -fr info; mv share/info . ; fi ; \ rm -fr share ) ; \ - rm -f ${ns_appbindir}/bin/emacs ${ns_appbindir}/bin/$(EMACSFULL); \ - else true ; fi - -## FIXME NS self-contained: rather than installing emacs and -## EMACSFULL, then deleting them, obviously it would be better to not -## install them in the first place. + fi ## http://lists.gnu.org/archive/html/emacs-devel/2007-10/msg01672.html ## Needs to be the user running install, so configure can't set it. From b4a3620021f85b50a24a739a55f85fc8cc876be7 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 16 May 2012 22:32:37 -0700 Subject: [PATCH 503/564] Fix previous change, for NS builds that are not self-contained * configure.in (ns_self_contained): New output variable. * Makefile.in (ns_self_contained): New, set by configure. (install-arch-dep): Use $ns_self_contained. --- ChangeLog | 4 +++- Makefile.in | 6 ++++-- configure.in | 3 +++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index e30635140ef..7f12e3ea69d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,8 @@ 2012-05-17 Glenn Morris - * Makefile.in (install-arch-dep): For a self-contained ns build, + * configure.in (ns_self_contained): New output variable. + * Makefile.in (ns_self_contained): New, set by configure. + (install-arch-dep): For a self-contained ns build, don't bother installing binaries then immediately deleting them. * Makefile.in (ns_appbindir, ns_appresdir): diff --git a/Makefile.in b/Makefile.in index e9ab4e6733d..53e73370b74 100644 --- a/Makefile.in +++ b/Makefile.in @@ -94,6 +94,8 @@ configuration=@configuration@ # Later values may use these. ns_appbindir=@ns_appbindir@ ns_appresdir=@ns_appresdir@ +# Either yes or no depending on whether this is a relocatable Emacs.app. +ns_self_contained=@ns_self_contained@ # The default location for installation. Everything is placed in # subdirectories of this directory. The default values for many of @@ -465,13 +467,13 @@ install-arch-dep: mkdir exec_prefix=${exec_prefix} bindir=${bindir} \ libexecdir=${libexecdir} archlibdir=${archlibdir} \ INSTALL_STRIP=${INSTALL_STRIP}) - if test "${ns_appresdir}" = ""; then \ + if test "${ns_self_contained}" = "no"; then \ ${INSTALL_PROGRAM} $(INSTALL_STRIP) src/emacs${EXEEXT} $(DESTDIR)${bindir}/$(EMACSFULL) || exit 1 ; \ chmod 1755 $(DESTDIR)${bindir}/$(EMACSFULL) ; \ rm -f $(DESTDIR)${bindir}/$(EMACS) ; \ ln $(DESTDIR)${bindir}/$(EMACSFULL) $(DESTDIR)${bindir}/$(EMACS) || true ; \ else \ - ( cd ${ns_appresdir} ; \ + ( cd ${ns_appresdir} || exit 1 ; \ if test -d share/emacs ; then \ for dir in share/emacs/${version}/*; do \ rm -fr `basename "$$dir"`; mv "$$dir" . ; \ diff --git a/configure.in b/configure.in index 8c3b3228241..048a8d7dec4 100644 --- a/configure.in +++ b/configure.in @@ -1574,6 +1574,7 @@ fi AC_SUBST(TEMACS_LDFLAGS2) LEIM_INSTALLDIR="\${install_prefix}/leim" +ns_self_contained=no ns_frag=/dev/null NS_OBJ= NS_OBJC_OBJ= @@ -1586,6 +1587,7 @@ if test "${HAVE_NS}" = yes; then with_xft=no # set up packaging dirs if test "${EN_NS_SELF_CONTAINED}" = yes; then + ns_self_contained=yes prefix=${ns_appresdir} exec_prefix=${ns_appbindir} dnl This one isn't really used, only archlibdir is. @@ -1600,6 +1602,7 @@ fi CFLAGS="$tmp_CFLAGS" CPPFLAGS="$tmp_CPPFLAGS" AC_SUBST(LEIM_INSTALLDIR) +AC_SUBST(ns_self_contained) AC_SUBST(NS_OBJ) AC_SUBST(NS_OBJC_OBJ) AC_SUBST(LIB_STANDARD) From b42c720d56003e200d059f90f0b5bc1dc79c2318 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 16 May 2012 22:55:29 -0700 Subject: [PATCH 504/564] Set more installation directories for self-contained ns builds * configure.in (docdir, etcdir, lispdir): For a self-contained ns build, set these to the appropriate values. --- ChangeLog | 3 +++ configure.in | 3 +++ 2 files changed, 6 insertions(+) diff --git a/ChangeLog b/ChangeLog index 7f12e3ea69d..e95a064218e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2012-05-17 Glenn Morris + * configure.in (docdir, etcdir, lispdir): + For a self-contained ns build, set these to the appropriate values. + * configure.in (ns_self_contained): New output variable. * Makefile.in (ns_self_contained): New, set by configure. (install-arch-dep): For a self-contained ns build, diff --git a/configure.in b/configure.in index 048a8d7dec4..7cc41aa5897 100644 --- a/configure.in +++ b/configure.in @@ -1593,6 +1593,9 @@ if test "${HAVE_NS}" = yes; then dnl This one isn't really used, only archlibdir is. libexecdir="\${ns_appbindir}/libexec" archlibdir="\${ns_appbindir}/libexec" + docdir="\${ns_appresdir}/etc" + etcdir="\${ns_appresdir}/etc" + lispdir="\${ns_appresdir}/lisp" LEIM_INSTALLDIR="\${ns_appresdir}/leim" fi ns_frag=$srcdir/src/ns.mk From 40c117e7adf2bc35afef024d476e657a30ea35dd Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 16 May 2012 23:07:26 -0700 Subject: [PATCH 505/564] Minor optimization for install of self-contained NS info files * configure.in (etcdir): For a self-contained ns build, set it to the appropriate values. * Makefile.in (install-arch-dep): No need to move info/ any more. --- ChangeLog | 3 ++- Makefile.in | 1 - configure.in | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index e95a064218e..013734a8651 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,7 +1,8 @@ 2012-05-17 Glenn Morris - * configure.in (docdir, etcdir, lispdir): + * configure.in (docdir, etcdir, infodir, lispdir): For a self-contained ns build, set these to the appropriate values. + * Makefile.in (install-arch-dep): No need to move info/ any more. * configure.in (ns_self_contained): New output variable. * Makefile.in (ns_self_contained): New, set by configure. diff --git a/Makefile.in b/Makefile.in index 53e73370b74..2f1a2345552 100644 --- a/Makefile.in +++ b/Makefile.in @@ -479,7 +479,6 @@ install-arch-dep: mkdir rm -fr `basename "$$dir"`; mv "$$dir" . ; \ done ; \ fi ; \ - if test -d share/info ; then rm -fr info; mv share/info . ; fi ; \ rm -fr share ) ; \ fi diff --git a/configure.in b/configure.in index 7cc41aa5897..0844cc2ecb6 100644 --- a/configure.in +++ b/configure.in @@ -1595,6 +1595,9 @@ if test "${HAVE_NS}" = yes; then archlibdir="\${ns_appbindir}/libexec" docdir="\${ns_appresdir}/etc" etcdir="\${ns_appresdir}/etc" + dnl FIXME maybe set datarootdir instead. + dnl That would also get applications, icons, man. + infodir="\${ns_appresdir}/info" lispdir="\${ns_appresdir}/lisp" LEIM_INSTALLDIR="\${ns_appresdir}/leim" fi From ab414ba198cb4ad35506ae35886dfc0164f880f0 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 17 May 2012 06:17:26 -0400 Subject: [PATCH 506/564] Auto-commit of generated files. --- autogen/Makefile.in | 1 + autogen/configure | 11 ++++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/autogen/Makefile.in b/autogen/Makefile.in index ccf0b6ebd41..7029746b9bd 100644 --- a/autogen/Makefile.in +++ b/autogen/Makefile.in @@ -768,6 +768,7 @@ ns_appbindir = @ns_appbindir@ ns_appdir = @ns_appdir@ ns_appresdir = @ns_appresdir@ ns_appsrc = @ns_appsrc@ +ns_self_contained = @ns_self_contained@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ diff --git a/autogen/configure b/autogen/configure index e5f994a2540..1c699212665 100755 --- a/autogen/configure +++ b/autogen/configure @@ -1163,6 +1163,7 @@ HAVE_XSERVER LIB_STANDARD NS_OBJC_OBJ NS_OBJ +ns_self_contained LEIM_INSTALLDIR TEMACS_LDFLAGS2 LD_SWITCH_X_SITE_RPATH @@ -10109,6 +10110,7 @@ fi LEIM_INSTALLDIR="\${install_prefix}/leim" +ns_self_contained=no ns_frag=/dev/null NS_OBJ= NS_OBJC_OBJ= @@ -10121,9 +10123,15 @@ if test "${HAVE_NS}" = yes; then with_xft=no # set up packaging dirs if test "${EN_NS_SELF_CONTAINED}" = yes; then + ns_self_contained=yes prefix=${ns_appresdir} exec_prefix=${ns_appbindir} - libexecdir=${ns_appbindir}/libexec + libexecdir="\${ns_appbindir}/libexec" + archlibdir="\${ns_appbindir}/libexec" + docdir="\${ns_appresdir}/etc" + etcdir="\${ns_appresdir}/etc" + infodir="\${ns_appresdir}/info" + lispdir="\${ns_appresdir}/lisp" LEIM_INSTALLDIR="\${ns_appresdir}/leim" fi ns_frag=$srcdir/src/ns.mk @@ -10138,6 +10146,7 @@ CPPFLAGS="$tmp_CPPFLAGS" + case "${window_system}" in x11 ) HAVE_X_WINDOWS=yes From ac348012f4f956fa7e64535a3875a32cff91503c Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 17 May 2012 11:15:51 -0400 Subject: [PATCH 507/564] * lisp/emacs-lisp/cl-macs.el (cl-transform-lambda): Don't add spurious parens around the arg list. Fixes: debbugs:11499 --- lisp/ChangeLog | 5 +++++ lisp/emacs-lisp/cl-macs.el | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b1d9323e481..fca6543072c 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-05-17 Stefan Monnier + + * emacs-lisp/cl-macs.el (cl-transform-lambda): Don't add spurious + parens around the arg list (bug#11499). + 2012-05-17 Juri Linkov * isearch.el (word-search-regexp, word-search-backward) diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el index 8050da400fe..66fafb9ba41 100644 --- a/lisp/emacs-lisp/cl-macs.el +++ b/lisp/emacs-lisp/cl-macs.el @@ -318,8 +318,9 @@ It is a list of elements of the form either: (require 'help-fns) (cons (help-add-fundoc-usage (if (stringp (car hdr)) (pop hdr)) - (format "(fn %S)" - (cl--make-usage-args orig-args))) + (format "%S" + (cons 'fn + (cl--make-usage-args orig-args)))) hdr))) (list (nconc (list 'let* bind-lets) (nreverse bind-forms) body))))))) From 9f1ea7dcd994c63d754ba74fc3522fa725fd0f0d Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 17 May 2012 14:26:51 -0400 Subject: [PATCH 508/564] Reduce some code duplication in Makefile.in * Makefile.in (write_subdir): New. (install-arch-indep): Use $write_subdir. --- ChangeLog | 3 +++ Makefile.in | 30 ++++++++++++++---------------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/ChangeLog b/ChangeLog index 013734a8651..8e5d69dc68f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2012-05-17 Glenn Morris + * Makefile.in (write_subdir): New. + (install-arch-indep): Use $write_subdir. + * configure.in (docdir, etcdir, infodir, lispdir): For a self-contained ns build, set these to the appropriate values. * Makefile.in (install-arch-dep): No need to move info/ any more. diff --git a/Makefile.in b/Makefile.in index 2f1a2345552..630ca2ff3ac 100644 --- a/Makefile.in +++ b/Makefile.in @@ -514,6 +514,16 @@ set_installuser=for installuser in $${LOGNAME} $${USERNAME} $${USER} \ ## Note that the Makefiles in the etc directory are potentially useful ## in an installed Emacs, so should not be excluded. +## Ensure that $subdir contains a subdirs.el file. +write_subdir=if [ -f $${subdir}/subdirs.el ]; \ + then true; \ + else \ + (echo "(if (fboundp 'normal-top-level-add-subdirs-to-load-path)"; \ + echo " (normal-top-level-add-subdirs-to-load-path))") \ + > $${subdir}/subdirs.el; \ + fi; \ + chmod a+r $${subdir}/subdirs.el + install-arch-indep: mkdir info install-etc -set ${COPYDESTS} ; \ unset CDPATH; \ @@ -553,22 +563,10 @@ install-arch-indep: mkdir info install-etc done -rm -f $(DESTDIR)${lispdir}/subdirs.el $(srcdir)/update-subdirs $(DESTDIR)${lispdir} - if [ -f $(DESTDIR)${datadir}/emacs/${version}/site-lisp/subdirs.el ]; \ - then true; \ - else \ - (echo "(if (fboundp 'normal-top-level-add-subdirs-to-load-path)"; \ - echo " (normal-top-level-add-subdirs-to-load-path))") \ - > $(DESTDIR)${datadir}/emacs/${version}/site-lisp/subdirs.el; \ - fi - chmod a+r $(DESTDIR)${datadir}/emacs/${version}/site-lisp/subdirs.el - -if [ -f $(DESTDIR)${datadir}/emacs/site-lisp/subdirs.el ]; \ - then true; \ - else \ - (echo "(if (fboundp 'normal-top-level-add-subdirs-to-load-path)"; \ - echo " (normal-top-level-add-subdirs-to-load-path))") \ - > $(DESTDIR)${datadir}/emacs/site-lisp/subdirs.el; \ - fi - -chmod a+r $(DESTDIR)${datadir}/emacs/site-lisp/subdirs.el + subdir=$(DESTDIR)${datadir}/emacs/${version}/site-lisp ; \ + ${write_subdir} + subdir=$(DESTDIR)${datadir}/emacs/site-lisp ; \ + ${write_subdir} || true -unset CDPATH; \ if [ `(cd ./etc; /bin/pwd)` != `(cd $(DESTDIR)${docdir}; /bin/pwd)` ]; \ then \ From 05f3d308da1b93a1fffbb6653c84da02334ff0b8 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 17 May 2012 14:28:24 -0400 Subject: [PATCH 509/564] Further simplify install-arch-dep for self-contained NS builds * Makefile.in (install-arch-dep): Use $write_subdir. --- ChangeLog | 2 +- Makefile.in | 17 ++++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8e5d69dc68f..d218ac4197f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,7 +1,7 @@ 2012-05-17 Glenn Morris * Makefile.in (write_subdir): New. - (install-arch-indep): Use $write_subdir. + (install-arch-indep, install-arch-dep): Use $write_subdir. * configure.in (docdir, etcdir, infodir, lispdir): For a self-contained ns build, set these to the appropriate values. diff --git a/Makefile.in b/Makefile.in index 630ca2ff3ac..0f5ec8a0c7c 100644 --- a/Makefile.in +++ b/Makefile.in @@ -473,15 +473,18 @@ install-arch-dep: mkdir rm -f $(DESTDIR)${bindir}/$(EMACS) ; \ ln $(DESTDIR)${bindir}/$(EMACSFULL) $(DESTDIR)${bindir}/$(EMACS) || true ; \ else \ - ( cd ${ns_appresdir} || exit 1 ; \ - if test -d share/emacs ; then \ - for dir in share/emacs/${version}/*; do \ - rm -fr `basename "$$dir"`; mv "$$dir" . ; \ - done ; \ - fi ; \ - rm -fr share ) ; \ + subdir=${ns_appresdir}/site-lisp; \ + ${MKDIR_P} $${subdir}; \ + ${write_subdir} || exit 1; \ + rm -rf ${ns_appresdir}/share; \ fi +## In the share directory, we are deleting: +## applications (with emacs.desktop) +## emacs (basically empty) +## icons (duplicates etc/images/icons/hicolor) +## man (maybe we should be installing this one, like info) + ## http://lists.gnu.org/archive/html/emacs-devel/2007-10/msg01672.html ## Needs to be the user running install, so configure can't set it. set_installuser=for installuser in $${LOGNAME} $${USERNAME} $${USER} \ From 53a84f3c9e044e03b40a9d5dfb21cb65b3bbe5f5 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 17 May 2012 14:38:20 -0400 Subject: [PATCH 510/564] * Makefile.in (write_subdir): Move definition before use. --- Makefile.in | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Makefile.in b/Makefile.in index 0f5ec8a0c7c..d409bce88a7 100644 --- a/Makefile.in +++ b/Makefile.in @@ -456,6 +456,16 @@ $(srcdir)/src/stamp-h.in: $(AUTOCONF_INPUTS) install: all install-arch-indep install-arch-dep install-leim blessmail @true +## Ensure that $subdir contains a subdirs.el file. +write_subdir=if [ -f $${subdir}/subdirs.el ]; \ + then true; \ + else \ + (echo "(if (fboundp 'normal-top-level-add-subdirs-to-load-path)"; \ + echo " (normal-top-level-add-subdirs-to-load-path))") \ + > $${subdir}/subdirs.el; \ + fi; \ + chmod a+r $${subdir}/subdirs.el + ### Install the executables that were compiled specifically for this machine. ### It would be nice to do something for a parallel make ### to ensure that install-arch-indep finishes before this starts. @@ -517,16 +527,6 @@ set_installuser=for installuser in $${LOGNAME} $${USERNAME} $${USER} \ ## Note that the Makefiles in the etc directory are potentially useful ## in an installed Emacs, so should not be excluded. -## Ensure that $subdir contains a subdirs.el file. -write_subdir=if [ -f $${subdir}/subdirs.el ]; \ - then true; \ - else \ - (echo "(if (fboundp 'normal-top-level-add-subdirs-to-load-path)"; \ - echo " (normal-top-level-add-subdirs-to-load-path))") \ - > $${subdir}/subdirs.el; \ - fi; \ - chmod a+r $${subdir}/subdirs.el - install-arch-indep: mkdir info install-etc -set ${COPYDESTS} ; \ unset CDPATH; \ From 4c54abe198bf9f412a8add28b9caf68e9f1f40d7 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 17 May 2012 14:47:52 -0400 Subject: [PATCH 511/564] More simplification for installation of site-lisp directories * Makefile.in (write_subdir): Create the directory if needed. (install-arch-dep, mkdir): No need to make site-lisp directories. --- ChangeLog | 3 +++ Makefile.in | 10 ++++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index d218ac4197f..a16c7fe2041 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2012-05-17 Glenn Morris + * Makefile.in (write_subdir): Create the directory if needed. + (install-arch-dep, mkdir): No need to make site-lisp directories. + * Makefile.in (write_subdir): New. (install-arch-indep, install-arch-dep): Use $write_subdir. diff --git a/Makefile.in b/Makefile.in index d409bce88a7..5c76cbb500e 100644 --- a/Makefile.in +++ b/Makefile.in @@ -460,11 +460,12 @@ install: all install-arch-indep install-arch-dep install-leim blessmail write_subdir=if [ -f $${subdir}/subdirs.el ]; \ then true; \ else \ + umask 022; \ + ${MKDIR_P} $${subdir}; \ (echo "(if (fboundp 'normal-top-level-add-subdirs-to-load-path)"; \ echo " (normal-top-level-add-subdirs-to-load-path))") \ > $${subdir}/subdirs.el; \ - fi; \ - chmod a+r $${subdir}/subdirs.el + fi ### Install the executables that were compiled specifically for this machine. ### It would be nice to do something for a parallel make @@ -484,7 +485,6 @@ install-arch-dep: mkdir ln $(DESTDIR)${bindir}/$(EMACSFULL) $(DESTDIR)${bindir}/$(EMACS) || true ; \ else \ subdir=${ns_appresdir}/site-lisp; \ - ${MKDIR_P} $${subdir}; \ ${write_subdir} || exit 1; \ rm -rf ${ns_appresdir}/share; \ fi @@ -659,7 +659,7 @@ install-leim: leim/Makefile mkdir install-strip: $(MAKE) $(MFLAGS) INSTALL_STRIP=-s install -### Build all the directories we're going to install Emacs in. +### Build some of the directories we're going to install Emacs in. ### We set the umask so that any created directories are world-readable. ### FIXME it would be good to warn about non-standard permissions of ### pre-existing directories, but that does not seem easy. @@ -675,8 +675,6 @@ mkdir: FRC $(MKDIR_P) $(DESTDIR)${datadir} ${COPYDESTS} \ $(DESTDIR)${infodir} $(DESTDIR)${man1dir} \ $(DESTDIR)${bindir} $(DESTDIR)${docdir} $(DESTDIR)${libexecdir} \ - $(DESTDIR)${datadir}/emacs/site-lisp \ - $(DESTDIR)${datadir}/emacs/${version}/site-lisp \ $(DESTDIR)`echo ${locallisppath} | sed 's,:, $(DESTDIR),g'` \ $(DESTDIR)${desktopdir} $${icondirs} From d9a1e2c25f0508de7a83ef8879d2779c274a6afa Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 17 May 2012 15:13:02 -0400 Subject: [PATCH 512/564] Simplify install-etc rule * Makefile.in (install-etc, mkdir): Make relevant directories in install-etc rather than mkdir. --- ChangeLog | 3 +++ Makefile.in | 27 +++++++++++---------------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/ChangeLog b/ChangeLog index a16c7fe2041..b129b6695fb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2012-05-17 Glenn Morris + * Makefile.in (install-etc, mkdir): + Make relevant directories in install-etc rather than mkdir. + * Makefile.in (write_subdir): Create the directory if needed. (install-arch-dep, mkdir): No need to make site-lisp directories. diff --git a/Makefile.in b/Makefile.in index 5c76cbb500e..0649d2fee45 100644 --- a/Makefile.in +++ b/Makefile.in @@ -637,15 +637,18 @@ install-arch-indep: mkdir info install-etc done ## Install those items from etc/ that need to end up elsewhere. -install-etc: mkdir +install-etc: + umask 022; ${MKDIR_P} $(DESTDIR)${desktopdir} ${INSTALL_DATA} ${srcdir}/etc/emacs.desktop \ $(DESTDIR)${desktopdir}/emacs.desktop - for icon in $(iconsrcdir)/*/*/apps/*.* \ - $(iconsrcdir)/*/*/mimetypes/*.*; do \ - if [ -r $${icon} ]; then \ - iicon=`echo "$${icon}" | sed 's,$(srcdir)/etc/images/icons,$(DESTDIR)${icondir},'` ; \ - ${INSTALL_DATA} $${icon} $${iicon} ; \ - fi ; \ + cd ${iconsrcdir} || exit 1; umask 022 ; \ + for dir in */*/apps */*/mimetypes; do \ + [ -d $${dir} ] || continue ; \ + ${MKDIR_P} ${icondir}/$${dir} ; \ + for icon in $${dir}/*.*; do \ + [ -r $${icon} ] || continue ; \ + ${INSTALL_DATA} $${icon} ${icondir}/$${icon} || exit 1 ; \ + done ; \ done ### Install LEIM files. Although they are machine-independent, we @@ -664,19 +667,11 @@ install-strip: ### FIXME it would be good to warn about non-standard permissions of ### pre-existing directories, but that does not seem easy. mkdir: FRC - icondirs= ; \ - for dir in $(iconsrcdir)/*/*/apps $(iconsrcdir)/*/*/mimetypes; do \ - if [ -d $${dir} ]; then \ - icondirs="$${icondirs} $${dir}" ; \ - fi ; \ - done ; \ - icondirs=`echo "$${icondirs}" | sed 's,$(srcdir)/etc/images/icons,$(DESTDIR)${icondir},g'` ; \ umask 022 ; \ $(MKDIR_P) $(DESTDIR)${datadir} ${COPYDESTS} \ $(DESTDIR)${infodir} $(DESTDIR)${man1dir} \ $(DESTDIR)${bindir} $(DESTDIR)${docdir} $(DESTDIR)${libexecdir} \ - $(DESTDIR)`echo ${locallisppath} | sed 's,:, $(DESTDIR),g'` \ - $(DESTDIR)${desktopdir} $${icondirs} + $(DESTDIR)`echo ${locallisppath} | sed 's,:, $(DESTDIR),g'` ### Delete all the installed files that the `install' target would ### create (but not the noninstalled files such as `make all' would create). From 904769baa934f6d2febd59195633ce6bc12710ff Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 17 May 2012 15:30:42 -0400 Subject: [PATCH 513/564] * Makefile.in (install-etc): Fix previous change. Remember to always call MKDIR_P and INSTALL_DATA from the top-level directory, for the case in which we are falling back to build-aux/install-sh. It would make life much easier if autoconf would use an absolute path in this case. --- Makefile.in | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Makefile.in b/Makefile.in index 0649d2fee45..d2a8db90854 100644 --- a/Makefile.in +++ b/Makefile.in @@ -641,13 +641,16 @@ install-etc: umask 022; ${MKDIR_P} $(DESTDIR)${desktopdir} ${INSTALL_DATA} ${srcdir}/etc/emacs.desktop \ $(DESTDIR)${desktopdir}/emacs.desktop + thisdir=`/bin/pwd` ; \ cd ${iconsrcdir} || exit 1; umask 022 ; \ for dir in */*/apps */*/mimetypes; do \ [ -d $${dir} ] || continue ; \ - ${MKDIR_P} ${icondir}/$${dir} ; \ + ( cd $${thisdir}; ${MKDIR_P} ${icondir}/$${dir} ) ; \ for icon in $${dir}/*.*; do \ [ -r $${icon} ] || continue ; \ - ${INSTALL_DATA} $${icon} ${icondir}/$${icon} || exit 1 ; \ + ( cd $${thisdir} ; \ + ${INSTALL_DATA} ${iconsrcdir}/$${icon} ${icondir}/$${icon} ) \ + || exit 1 ; \ done ; \ done From 4735906a0363f9a5a77f939afe9bfec07765845e Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 17 May 2012 16:04:56 -0400 Subject: [PATCH 514/564] Minor renaming of internal CL functions and variables. * lisp/emacs-lisp/cl-seq.el (cl--adjoin): Rename from cl-adjoin. (cl--position): Rename from cl-position. (cl--delete-duplicates): Rename from cl-delete-duplicates. * lisp/emacs-lisp/cl.el (cl--gensym-counter): Rename from *gensym-counter*. (cl--random-state): Rename from *random-state*. --- lisp/ChangeLog | 9 ++++++++ lisp/emacs-lisp/cl-extra.el | 6 ++--- lisp/emacs-lisp/cl-loaddefs.el | 12 +++++----- lisp/emacs-lisp/cl-macs.el | 10 ++++----- lisp/emacs-lisp/cl-seq.el | 40 +++++++++++++++++----------------- lisp/emacs-lisp/cl.el | 6 ++--- 6 files changed, 46 insertions(+), 37 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index fca6543072c..3981911d99b 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,12 @@ +2012-05-17 Stefan Monnier + + Minor renaming of internal CL functions and variables. + * emacs-lisp/cl-seq.el (cl--adjoin): Rename from cl-adjoin. + (cl--position): Rename from cl-position. + (cl--delete-duplicates): Rename from cl-delete-duplicates. + * emacs-lisp/cl.el (cl--gensym-counter): Rename from *gensym-counter*. + (cl--random-state): Rename from *random-state*. + 2012-05-17 Stefan Monnier * emacs-lisp/cl-macs.el (cl-transform-lambda): Don't add spurious diff --git a/lisp/emacs-lisp/cl-extra.el b/lisp/emacs-lisp/cl-extra.el index 9a3d8cf705b..420480d16ea 100644 --- a/lisp/emacs-lisp/cl-extra.el +++ b/lisp/emacs-lisp/cl-extra.el @@ -434,7 +434,7 @@ With two arguments, return rounding and remainder of their quotient." (defun random* (lim &optional state) "Return a random nonnegative number less than LIM, an integer or float. Optional second arg STATE is a random-state object." - (or state (setq state *random-state*)) + (or state (setq state cl--random-state)) ;; Inspired by "ran3" from Numerical Recipes. Additive congruential method. (let ((vec (aref state 3))) (if (integerp vec) @@ -457,9 +457,9 @@ Optional second arg STATE is a random-state object." ;;;###autoload (defun make-random-state (&optional state) - "Return a copy of random-state STATE, or of `*random-state*' if omitted. + "Return a copy of random-state STATE, or of the internal state if omitted. If STATE is t, return a new state object seeded from the time of day." - (cond ((null state) (make-random-state *random-state*)) + (cond ((null state) (make-random-state cl--random-state)) ((vectorp state) (cl-copy-tree state t)) ((integerp state) (vector 'cl-random-state-tag -1 30 state)) (t (make-random-state (cl-random-time))))) diff --git a/lisp/emacs-lisp/cl-loaddefs.el b/lisp/emacs-lisp/cl-loaddefs.el index 06c8fe8dba7..a00b4550b31 100644 --- a/lisp/emacs-lisp/cl-loaddefs.el +++ b/lisp/emacs-lisp/cl-loaddefs.el @@ -10,7 +10,7 @@ ;;;;;; ceiling* floor* isqrt lcm gcd cl-progv-before cl-set-frame-visible-p ;;;;;; cl-map-overlays cl-map-intervals cl-map-keymap-recursively ;;;;;; notevery notany every some mapcon mapcan mapl maplist map -;;;;;; cl-mapcar-many equalp coerce) "cl-extra" "cl-extra.el" "5a8a7f7ec2dc453113b8cbda577f2acb") +;;;;;; cl-mapcar-many equalp coerce) "cl-extra" "cl-extra.el" "1a3a04c6a0286373093bea4b9bcf2e91") ;;; Generated autoloads from cl-extra.el (autoload 'coerce "cl-extra" "\ @@ -169,7 +169,7 @@ Optional second arg STATE is a random-state object. \(fn LIM &optional STATE)" nil nil) (autoload 'make-random-state "cl-extra" "\ -Return a copy of random-state STATE, or of `*random-state*' if omitted. +Return a copy of random-state STATE, or of the internal state if omitted. If STATE is t, return a new state object seeded from the time of day. \(fn &optional STATE)" nil nil) @@ -286,7 +286,7 @@ This also does some trivial optimizations to make the form prettier. ;;;;;; flet progv psetq do-all-symbols do-symbols dotimes dolist ;;;;;; do* do loop return-from return block etypecase typecase ecase ;;;;;; case load-time-value eval-when destructuring-bind function* -;;;;;; defmacro* defun* gentemp gensym) "cl-macs" "cl-macs.el" "e10ebd95224fcfbe6a5edc59f40d695a") +;;;;;; defmacro* defun* gentemp gensym) "cl-macs" "cl-macs.el" "69ccd3344cea28acc44dd28eca07292f") ;;; Generated autoloads from cl-macs.el (autoload 'gensym "cl-macs" "\ @@ -764,13 +764,13 @@ surrounded by (block NAME ...). ;;;;;; nsubst subst-if-not subst-if subsetp nset-exclusive-or set-exclusive-or ;;;;;; nset-difference set-difference nintersection intersection ;;;;;; nunion union rassoc-if-not rassoc-if rassoc* assoc-if-not -;;;;;; assoc-if assoc* cl-adjoin member-if-not member-if member* +;;;;;; assoc-if assoc* cl--adjoin member-if-not member-if member* ;;;;;; merge stable-sort sort* search mismatch count-if-not count-if ;;;;;; count position-if-not position-if position find-if-not find-if ;;;;;; find nsubstitute-if-not nsubstitute-if nsubstitute substitute-if-not ;;;;;; substitute-if substitute delete-duplicates remove-duplicates ;;;;;; delete-if-not delete-if delete* remove-if-not remove-if remove* -;;;;;; replace fill reduce) "cl-seq" "cl-seq.el" "99095e49c83af1c8bec0fdcf517b3f95") +;;;;;; replace fill reduce) "cl-seq" "cl-seq.el" "2d8563fcbdf4bc77e569d0aeb0a35cfc") ;;; Generated autoloads from cl-seq.el (autoload 'reduce "cl-seq" "\ @@ -1047,7 +1047,7 @@ Keywords supported: :key \(fn PREDICATE LIST [KEYWORD VALUE]...)" nil nil) -(autoload 'cl-adjoin "cl-seq" "\ +(autoload 'cl--adjoin "cl-seq" "\ \(fn CL-ITEM CL-LIST &rest CL-KEYS)" nil nil) diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el index 66fafb9ba41..6ca5e6294d6 100644 --- a/lisp/emacs-lisp/cl-macs.el +++ b/lisp/emacs-lisp/cl-macs.el @@ -167,15 +167,15 @@ ;;; Symbols. -(defvar *gensym-counter*) +(defvar cl--gensym-counter) ;;;###autoload (defun gensym (&optional prefix) "Generate a new uninterned symbol. The name is made by appending a number to PREFIX, default \"G\"." (let ((pfix (if (stringp prefix) prefix "G")) (num (if (integerp prefix) prefix - (prog1 *gensym-counter* - (setq *gensym-counter* (1+ *gensym-counter*)))))) + (prog1 cl--gensym-counter + (setq cl--gensym-counter (1+ cl--gensym-counter)))))) (make-symbol (format "%s%d" pfix num)))) ;;;###autoload @@ -184,8 +184,8 @@ The name is made by appending a number to PREFIX, default \"G\"." The name is made by appending a number to PREFIX, default \"G\"." (let ((pfix (if (stringp prefix) prefix "G")) name) - (while (intern-soft (setq name (format "%s%d" pfix *gensym-counter*))) - (setq *gensym-counter* (1+ *gensym-counter*))) + (while (intern-soft (setq name (format "%s%d" pfix cl--gensym-counter))) + (setq cl--gensym-counter (1+ cl--gensym-counter))) (intern name))) diff --git a/lisp/emacs-lisp/cl-seq.el b/lisp/emacs-lisp/cl-seq.el index f1890fbccf6..233f0c83a6e 100644 --- a/lisp/emacs-lisp/cl-seq.el +++ b/lisp/emacs-lisp/cl-seq.el @@ -213,8 +213,8 @@ to avoid corrupting the original SEQ. (if (<= (or cl-count (setq cl-count 8000000)) 0) cl-seq (if (or (nlistp cl-seq) (and cl-from-end (< cl-count 4000000))) - (let ((cl-i (cl-position cl-item cl-seq cl-start cl-end - cl-from-end))) + (let ((cl-i (cl--position cl-item cl-seq cl-start cl-end + cl-from-end))) (if cl-i (let ((cl-res (apply 'delete* cl-item (append cl-seq nil) (append (if cl-from-end @@ -279,8 +279,8 @@ This is a destructive function; it reuses the storage of SEQ whenever possible. (if (and cl-from-end (< cl-count 4000000)) (let (cl-i) (while (and (>= (setq cl-count (1- cl-count)) 0) - (setq cl-i (cl-position cl-item cl-seq cl-start - cl-end cl-from-end))) + (setq cl-i (cl--position cl-item cl-seq cl-start + cl-end cl-from-end))) (if (= cl-i 0) (setq cl-seq (cdr cl-seq)) (let ((cl-tail (nthcdr (1- cl-i) cl-seq))) (setcdr cl-tail (cdr (cdr cl-tail))))) @@ -330,16 +330,16 @@ This is a destructive function; it reuses the storage of SEQ whenever possible. "Return a copy of SEQ with all duplicate elements removed. \nKeywords supported: :test :test-not :key :start :end :from-end \n(fn SEQ [KEYWORD VALUE]...)" - (cl-delete-duplicates cl-seq cl-keys t)) + (cl--delete-duplicates cl-seq cl-keys t)) ;;;###autoload (defun delete-duplicates (cl-seq &rest cl-keys) "Remove all duplicate elements from SEQ (destructively). \nKeywords supported: :test :test-not :key :start :end :from-end \n(fn SEQ [KEYWORD VALUE]...)" - (cl-delete-duplicates cl-seq cl-keys nil)) + (cl--delete-duplicates cl-seq cl-keys nil)) -(defun cl-delete-duplicates (cl-seq cl-keys cl-copy) +(defun cl--delete-duplicates (cl-seq cl-keys cl-copy) (if (listp cl-seq) (cl-parsing-keywords (:test :test-not :key (:start 0) :end :from-end :if) () @@ -348,8 +348,8 @@ This is a destructive function; it reuses the storage of SEQ whenever possible. (setq cl-end (- (or cl-end (length cl-seq)) cl-start)) (while (> cl-end 1) (setq cl-i 0) - (while (setq cl-i (cl-position (cl-check-key (car cl-p)) - (cdr cl-p) cl-i (1- cl-end))) + (while (setq cl-i (cl--position (cl-check-key (car cl-p)) + (cdr cl-p) cl-i (1- cl-end))) (if cl-copy (setq cl-seq (copy-sequence cl-seq) cl-p (nthcdr cl-start cl-seq) cl-copy nil)) (let ((cl-tail (nthcdr cl-i cl-p))) @@ -360,14 +360,14 @@ This is a destructive function; it reuses the storage of SEQ whenever possible. cl-seq) (setq cl-end (- (or cl-end (length cl-seq)) cl-start)) (while (and (cdr cl-seq) (= cl-start 0) (> cl-end 1) - (cl-position (cl-check-key (car cl-seq)) - (cdr cl-seq) 0 (1- cl-end))) + (cl--position (cl-check-key (car cl-seq)) + (cdr cl-seq) 0 (1- cl-end))) (setq cl-seq (cdr cl-seq) cl-end (1- cl-end))) (let ((cl-p (if (> cl-start 0) (nthcdr (1- cl-start) cl-seq) (setq cl-end (1- cl-end) cl-start 1) cl-seq))) (while (and (cdr (cdr cl-p)) (> cl-end 1)) - (if (cl-position (cl-check-key (car (cdr cl-p))) - (cdr (cdr cl-p)) 0 (1- cl-end)) + (if (cl--position (cl-check-key (car (cdr cl-p))) + (cdr (cdr cl-p)) 0 (1- cl-end)) (progn (if cl-copy (setq cl-seq (copy-sequence cl-seq) cl-p (nthcdr (1- cl-start) cl-seq) @@ -376,7 +376,7 @@ This is a destructive function; it reuses the storage of SEQ whenever possible. (setq cl-p (cdr cl-p))) (setq cl-end (1- cl-end) cl-start (1+ cl-start))) cl-seq))) - (let ((cl-res (cl-delete-duplicates (append cl-seq nil) cl-keys nil))) + (let ((cl-res (cl--delete-duplicates (append cl-seq nil) cl-keys nil))) (if (stringp cl-seq) (concat cl-res) (vconcat cl-res))))) ;;;###autoload @@ -391,7 +391,7 @@ to avoid corrupting the original SEQ. (if (or (eq cl-old cl-new) (<= (or cl-count (setq cl-from-end nil cl-count 8000000)) 0)) cl-seq - (let ((cl-i (cl-position cl-old cl-seq cl-start cl-end))) + (let ((cl-i (cl--position cl-old cl-seq cl-start cl-end))) (if (not cl-i) cl-seq (setq cl-seq (copy-sequence cl-seq)) @@ -502,9 +502,9 @@ Return the index of the matching item, or nil if not found. \n(fn ITEM SEQ [KEYWORD VALUE]...)" (cl-parsing-keywords (:test :test-not :key :if :if-not (:start 0) :end :from-end) () - (cl-position cl-item cl-seq cl-start cl-end cl-from-end))) + (cl--position cl-item cl-seq cl-start cl-end cl-from-end))) -(defun cl-position (cl-item cl-seq cl-start &optional cl-end cl-from-end) +(defun cl--position (cl-item cl-seq cl-start &optional cl-end cl-from-end) (if (listp cl-seq) (let ((cl-p (nthcdr cl-start cl-seq))) (or cl-end (setq cl-end 8000000)) @@ -619,8 +619,8 @@ return nil if there are no matches. (cl-if nil) cl-pos) (setq cl-end2 (- cl-end2 (1- cl-len))) (while (and (< cl-start2 cl-end2) - (setq cl-pos (cl-position cl-first cl-seq2 - cl-start2 cl-end2 cl-from-end)) + (setq cl-pos (cl--position cl-first cl-seq2 + cl-start2 cl-end2 cl-from-end)) (apply 'mismatch cl-seq1 cl-seq2 :start1 (1+ cl-start1) :end1 cl-end1 :start2 (1+ cl-pos) :end2 (+ cl-pos cl-len) @@ -702,7 +702,7 @@ Return the sublist of LIST whose car matches. (apply 'member* nil cl-list :if-not cl-pred cl-keys)) ;;;###autoload -(defun cl-adjoin (cl-item cl-list &rest cl-keys) +(defun cl--adjoin (cl-item cl-list &rest cl-keys) (if (cl-parsing-keywords (:key) t (apply 'member* (cl-check-key cl-item) cl-list cl-keys)) cl-list diff --git a/lisp/emacs-lisp/cl.el b/lisp/emacs-lisp/cl.el index 971024fcbba..2b56e8a9e4b 100644 --- a/lisp/emacs-lisp/cl.el +++ b/lisp/emacs-lisp/cl.el @@ -304,7 +304,7 @@ definitions to shadow the loaded ones for use in file byte-compilation. (while (>= (decf i) 0) (setq v (+ (* v 3) (aref time i)))) v)) -(defvar *gensym-counter* (* (logand (cl-random-time) 1023) 100)) +(defvar cl--gensym-counter (* (logand (cl-random-time) 1023) 100)) ;;; Numbers. @@ -331,7 +331,7 @@ always returns nil." "Return t if INTEGER is even." (eq (logand integer 1) 0)) -(defvar *random-state* (vector 'cl-random-state-tag -1 30 (cl-random-time))) +(defvar cl--random-state (vector 'cl-random-state-tag -1 30 (cl-random-time))) (defconst most-positive-float nil "The largest value that a Lisp float can hold. @@ -608,7 +608,7 @@ Otherwise, return LIST unmodified. (if (memq cl-item cl-list) cl-list (cons cl-item cl-list))) ((or (equal cl-keys '(:test equal)) (null cl-keys)) (if (member cl-item cl-list) cl-list (cons cl-item cl-list))) - (t (apply 'cl-adjoin cl-item cl-list cl-keys)))) + (t (apply 'cl--adjoin cl-item cl-list cl-keys)))) (defun subst (cl-new cl-old cl-tree &rest cl-keys) "Substitute NEW for OLD everywhere in TREE (non-destructively). From b1198e177ffc930aaf60c66f1a0b3d54db8ba3b1 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 17 May 2012 17:39:36 -0400 Subject: [PATCH 515/564] * lisp/emacs-lisp/cl.el: Add edebug specs from cl-specs.el. * lisp/emacs-lisp/cl-macs.el: Idem. * lisp/emacs-lisp/cl-specs.el: Remove. --- lisp/ChangeLog | 6 + lisp/emacs-lisp/cl-loaddefs.el | 2 +- lisp/emacs-lisp/cl-macs.el | 320 +++++++++++++++++++++- lisp/emacs-lisp/cl-specs.el | 471 --------------------------------- lisp/emacs-lisp/cl.el | 8 + 5 files changed, 333 insertions(+), 474 deletions(-) delete mode 100644 lisp/emacs-lisp/cl-specs.el diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 3981911d99b..cdb8217ed2c 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2012-05-17 Stefan Monnier + + * emacs-lisp/cl.el: Add edebug specs from cl-specs.el. + * emacs-lisp/cl-macs.el: Idem. + * emacs-lisp/cl-specs.el: Remove. + 2012-05-17 Stefan Monnier Minor renaming of internal CL functions and variables. diff --git a/lisp/emacs-lisp/cl-loaddefs.el b/lisp/emacs-lisp/cl-loaddefs.el index a00b4550b31..d16b98630c8 100644 --- a/lisp/emacs-lisp/cl-loaddefs.el +++ b/lisp/emacs-lisp/cl-loaddefs.el @@ -286,7 +286,7 @@ This also does some trivial optimizations to make the form prettier. ;;;;;; flet progv psetq do-all-symbols do-symbols dotimes dolist ;;;;;; do* do loop return-from return block etypecase typecase ecase ;;;;;; case load-time-value eval-when destructuring-bind function* -;;;;;; defmacro* defun* gentemp gensym) "cl-macs" "cl-macs.el" "69ccd3344cea28acc44dd28eca07292f") +;;;;;; defmacro* defun* gentemp gensym) "cl-macs" "cl-macs.el" "ed94b3ba46080516e6ada69bdf617be5") ;;; Generated autoloads from cl-macs.el (autoload 'gensym "cl-macs" "\ diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el index 6ca5e6294d6..9fd53d78d92 100644 --- a/lisp/emacs-lisp/cl-macs.el +++ b/lisp/emacs-lisp/cl-macs.el @@ -191,6 +191,28 @@ The name is made by appending a number to PREFIX, default \"G\"." ;;; Program structure. +(def-edebug-spec cl-declarations + (&rest ("declare" &rest sexp))) + +(def-edebug-spec cl-declarations-or-string + (&or stringp cl-declarations)) + +(def-edebug-spec cl-lambda-list + (([&rest arg] + [&optional ["&optional" cl-&optional-arg &rest cl-&optional-arg]] + [&optional ["&rest" arg]] + [&optional ["&key" [cl-&key-arg &rest cl-&key-arg] + &optional "&allow-other-keys"]] + [&optional ["&aux" &rest + &or (symbolp &optional def-form) symbolp]] + ))) + +(def-edebug-spec cl-&optional-arg + (&or (arg &optional def-form arg) arg)) + +(def-edebug-spec cl-&key-arg + (&or ([&or (symbolp arg) arg] &optional def-form arg) arg)) + ;;;###autoload (defmacro defun* (name args &rest body) "Define NAME as a function. @@ -198,10 +220,55 @@ Like normal `defun', except ARGLIST allows full Common Lisp conventions, and BODY is implicitly surrounded by (block NAME ...). \(fn NAME ARGLIST [DOCSTRING] BODY...)" + (declare (debug + ;; Same as defun but use cl-lambda-list. + (&define [&or name ("setf" :name setf name)] + cl-lambda-list + cl-declarations-or-string + [&optional ("interactive" interactive)] + def-body))) (let* ((res (cl-transform-lambda (cons args body) name)) (form (list* 'defun name (cdr res)))) (if (car res) (list 'progn (car res) form) form))) +;; The lambda list for macros is different from that of normal lambdas. +;; Note that &environment is only allowed as first or last items in the +;; top level list. + +(def-edebug-spec cl-macro-list + (([&optional "&environment" arg] + [&rest cl-macro-arg] + [&optional ["&optional" &rest + &or (cl-macro-arg &optional def-form cl-macro-arg) arg]] + [&optional [[&or "&rest" "&body"] cl-macro-arg]] + [&optional ["&key" [&rest + [&or ([&or (symbolp cl-macro-arg) arg] + &optional def-form cl-macro-arg) + arg]] + &optional "&allow-other-keys"]] + [&optional ["&aux" &rest + &or (symbolp &optional def-form) symbolp]] + [&optional "&environment" arg] + ))) + +(def-edebug-spec cl-macro-arg + (&or arg cl-macro-list1)) + +(def-edebug-spec cl-macro-list1 + (([&optional "&whole" arg] ;; only allowed at lower levels + [&rest cl-macro-arg] + [&optional ["&optional" &rest + &or (cl-macro-arg &optional def-form cl-macro-arg) arg]] + [&optional [[&or "&rest" "&body"] cl-macro-arg]] + [&optional ["&key" [&rest + [&or ([&or (symbolp cl-macro-arg) arg] + &optional def-form cl-macro-arg) + arg]] + &optional "&allow-other-keys"]] + [&optional ["&aux" &rest + &or (symbolp &optional def-form) symbolp]] + . [&or arg nil]))) + ;;;###autoload (defmacro defmacro* (name args &rest body) "Define NAME as a macro. @@ -209,15 +276,32 @@ Like normal `defmacro', except ARGLIST allows full Common Lisp conventions, and BODY is implicitly surrounded by (block NAME ...). \(fn NAME ARGLIST [DOCSTRING] BODY...)" + (declare (debug + (&define name cl-macro-list cl-declarations-or-string def-body))) (let* ((res (cl-transform-lambda (cons args body) name)) (form (list* 'defmacro name (cdr res)))) (if (car res) (list 'progn (car res) form) form))) +(def-edebug-spec cl-lambda-expr + (&define ("lambda" cl-lambda-list + ;;cl-declarations-or-string + ;;[&optional ("interactive" interactive)] + def-body))) + +;; Redefine function-form to also match function* +(def-edebug-spec function-form + ;; form at the end could also handle "function", + ;; but recognize it specially to avoid wrapping function forms. + (&or ([&or "quote" "function"] &or symbolp lambda-expr) + ("function*" function*) + form)) + ;;;###autoload (defmacro function* (func) "Introduce a function. Like normal `function', except that if argument is a lambda form, its argument list allows full Common Lisp conventions." + (declare (debug (&or symbolp cl-lambda-expr))) (if (eq (car-safe func) 'lambda) (let* ((res (cl-transform-lambda (cdr func) 'cl-none)) (form (list 'function (cons 'lambda (cdr res))))) @@ -471,6 +555,7 @@ It is a list of elements of the form either: ;;;###autoload (defmacro destructuring-bind (args expr &rest body) + (declare (debug (&define cl-macro-list def-form cl-declarations def-body))) (let* ((bind-lets nil) (bind-forms nil) (bind-inits nil) (bind-defs nil) (bind-block 'cl-none) (bind-enquote nil)) (cl-do-arglist (or args '(&aux)) expr) @@ -491,6 +576,7 @@ If `load' is in WHEN, BODY is evaluated when loaded after top-level compile. If `eval' is in WHEN, BODY is evaluated when interpreted or at non-top-level. \(fn (WHEN...) BODY...)" + (declare (debug ((&rest &or "compile" "load" "eval") body))) (if (and (fboundp 'cl-compiling-file) (cl-compiling-file) (not cl-not-toplevel) (not (boundp 'for-effect))) ; horrible kludge (let ((comp (or (memq 'compile when) (memq :compile-toplevel when))) @@ -519,6 +605,7 @@ If `eval' is in WHEN, BODY is evaluated when interpreted or at non-top-level. (defmacro load-time-value (form &optional read-only) "Like `progn', but evaluates the body at load time. The result of the body appears to the compiler as a quoted constant." + (declare (debug (form &optional sexp))) (if (cl-compiling-file) (let* ((temp (gentemp "--cl-load-time--")) (set (list 'set (list 'quote temp) form))) @@ -548,6 +635,7 @@ place of a KEYLIST of one atom. A KEYLIST of t or `otherwise' is allowed only in the final clause, and matches if no other keys match. Key values are compared by `eql'. \n(fn EXPR (KEYLIST BODY...)...)" + (declare (debug (form &rest (sexp body)))) (let* ((temp (if (cl-simple-expr-p expr 3) expr (make-symbol "--cl-var--"))) (head-list nil) (body (cons @@ -578,6 +666,7 @@ Key values are compared by `eql'. "Like `case', but error if no case fits. `otherwise'-clauses are not allowed. \n(fn EXPR (KEYLIST BODY...)...)" + (declare (debug case)) (list* 'case expr (append clauses '((ecase-error-flag))))) ;;;###autoload @@ -588,6 +677,7 @@ satisfies TYPE, the corresponding BODY is evaluated. If no clause succeeds, typecase returns nil. A TYPE of t or `otherwise' is allowed only in the final clause, and matches if no other keys match. \n(fn EXPR (TYPE BODY...)...)" + (declare (debug (form &rest ([&or cl-type-spec "otherwise"] body)))) (let* ((temp (if (cl-simple-expr-p expr 3) expr (make-symbol "--cl-var--"))) (type-list nil) (body (cons @@ -612,6 +702,7 @@ final clause, and matches if no other keys match. "Like `typecase', but error if no case fits. `otherwise'-clauses are not allowed. \n(fn EXPR (TYPE BODY...)...)" + (declare (debug typecase)) (list* 'typecase expr (append clauses '((ecase-error-flag))))) @@ -627,6 +718,7 @@ quoted symbol or other form; and second, NAME is lexically rather than dynamically scoped: Only references to it within BODY will work. These references may appear inside macro expansions, but not inside functions called from BODY." + (declare (debug (symbolp body))) (if (cl-safe-expr-p (cons 'progn body)) (cons 'progn body) (list 'cl-block-wrapper (list* 'catch (list 'quote (intern (format "--cl-block-%s--" name))) @@ -636,6 +728,7 @@ called from BODY." (defmacro return (&optional result) "Return from the block named nil. This is equivalent to `(return-from nil RESULT)'." + (declare (debug (&optional form))) (list 'return-from nil result)) ;;;###autoload @@ -645,6 +738,7 @@ This jumps out to the innermost enclosing `(block NAME ...)' form, returning RESULT from that form (or nil if RESULT is omitted). This is compatible with Common Lisp, but note that `defun' and `defmacro' do not create implicit blocks as they do in Common Lisp." + (declare (debug (symbolp &optional form))) (let ((name2 (intern (format "--cl-block-%s--" name)))) (list 'cl-block-throw (list 'quote name2) result))) @@ -674,6 +768,7 @@ Valid clauses are: finally return EXPR, named NAME. \(fn CLAUSE...)" + (declare (debug (&rest &or symbolp form))) (if (not (memq t (mapcar 'symbolp (delq nil (delq t (copy-list loop-args)))))) (list 'block nil (list* 'while t loop-args)) (let ((loop-name nil) (loop-bindings nil) @@ -725,6 +820,158 @@ Valid clauses are: (setq body (list (list* 'symbol-macrolet loop-symbol-macs body)))) (list* 'block loop-name body))))) +;; Below is a complete spec for loop, in several parts that correspond +;; to the syntax given in CLtL2. The specs do more than specify where +;; the forms are; it also specifies, as much as Edebug allows, all the +;; syntactically valid loop clauses. The disadvantage of this +;; completeness is rigidity, but the "for ... being" clause allows +;; arbitrary extensions of the form: [symbolp &rest &or symbolp form]. + +;; (def-edebug-spec loop +;; ([&optional ["named" symbolp]] +;; [&rest +;; &or +;; ["repeat" form] +;; loop-for-as +;; loop-with +;; loop-initial-final] +;; [&rest loop-clause] +;; )) + +;; (def-edebug-spec loop-with +;; ("with" loop-var +;; loop-type-spec +;; [&optional ["=" form]] +;; &rest ["and" loop-var +;; loop-type-spec +;; [&optional ["=" form]]])) + +;; (def-edebug-spec loop-for-as +;; ([&or "for" "as"] loop-for-as-subclause +;; &rest ["and" loop-for-as-subclause])) + +;; (def-edebug-spec loop-for-as-subclause +;; (loop-var +;; loop-type-spec +;; &or +;; [[&or "in" "on" "in-ref" "across-ref"] +;; form &optional ["by" function-form]] + +;; ["=" form &optional ["then" form]] +;; ["across" form] +;; ["being" +;; [&or "the" "each"] +;; &or +;; [[&or "element" "elements"] +;; [&or "of" "in" "of-ref"] form +;; &optional "using" ["index" symbolp]];; is this right? +;; [[&or "hash-key" "hash-keys" +;; "hash-value" "hash-values"] +;; [&or "of" "in"] +;; hash-table-p &optional ["using" ([&or "hash-value" "hash-values" +;; "hash-key" "hash-keys"] sexp)]] + +;; [[&or "symbol" "present-symbol" "external-symbol" +;; "symbols" "present-symbols" "external-symbols"] +;; [&or "in" "of"] package-p] + +;; ;; Extensions for Emacs Lisp, including Lucid Emacs. +;; [[&or "frame" "frames" +;; "screen" "screens" +;; "buffer" "buffers"]] + +;; [[&or "window" "windows"] +;; [&or "of" "in"] form] + +;; [[&or "overlay" "overlays" +;; "extent" "extents"] +;; [&or "of" "in"] form +;; &optional [[&or "from" "to"] form]] + +;; [[&or "interval" "intervals"] +;; [&or "in" "of"] form +;; &optional [[&or "from" "to"] form] +;; ["property" form]] + +;; [[&or "key-code" "key-codes" +;; "key-seq" "key-seqs" +;; "key-binding" "key-bindings"] +;; [&or "in" "of"] form +;; &optional ["using" ([&or "key-code" "key-codes" +;; "key-seq" "key-seqs" +;; "key-binding" "key-bindings"] +;; sexp)]] +;; ;; For arbitrary extensions, recognize anything else. +;; [symbolp &rest &or symbolp form] +;; ] + +;; ;; arithmetic - must be last since all parts are optional. +;; [[&optional [[&or "from" "downfrom" "upfrom"] form]] +;; [&optional [[&or "to" "downto" "upto" "below" "above"] form]] +;; [&optional ["by" form]] +;; ])) + +;; (def-edebug-spec loop-initial-final +;; (&or ["initially" +;; ;; [&optional &or "do" "doing"] ;; CLtL2 doesn't allow this. +;; &rest loop-non-atomic-expr] +;; ["finally" &or +;; [[&optional &or "do" "doing"] &rest loop-non-atomic-expr] +;; ["return" form]])) + +;; (def-edebug-spec loop-and-clause +;; (loop-clause &rest ["and" loop-clause])) + +;; (def-edebug-spec loop-clause +;; (&or +;; [[&or "while" "until" "always" "never" "thereis"] form] + +;; [[&or "collect" "collecting" +;; "append" "appending" +;; "nconc" "nconcing" +;; "concat" "vconcat"] form +;; [&optional ["into" loop-var]]] + +;; [[&or "count" "counting" +;; "sum" "summing" +;; "maximize" "maximizing" +;; "minimize" "minimizing"] form +;; [&optional ["into" loop-var]] +;; loop-type-spec] + +;; [[&or "if" "when" "unless"] +;; form loop-and-clause +;; [&optional ["else" loop-and-clause]] +;; [&optional "end"]] + +;; [[&or "do" "doing"] &rest loop-non-atomic-expr] + +;; ["return" form] +;; loop-initial-final +;; )) + +;; (def-edebug-spec loop-non-atomic-expr +;; ([¬ atom] form)) + +;; (def-edebug-spec loop-var +;; ;; The symbolp must be last alternative to recognize e.g. (a b . c) +;; ;; loop-var => +;; ;; (loop-var . [&or nil loop-var]) +;; ;; (symbolp . [&or nil loop-var]) +;; ;; (symbolp . loop-var) +;; ;; (symbolp . (symbolp . [&or nil loop-var])) +;; ;; (symbolp . (symbolp . loop-var)) +;; ;; (symbolp . (symbolp . symbolp)) == (symbolp symbolp . symbolp) +;; (&or (loop-var . [&or nil loop-var]) [gate symbolp])) + +;; (def-edebug-spec loop-type-spec +;; (&optional ["of-type" loop-d-type-spec])) + +;; (def-edebug-spec loop-d-type-spec +;; (&or (loop-d-type-spec . [&or nil loop-d-type-spec]) cl-type-spec)) + + + (defun cl-parse-loop-clause () ; uses loop-* (let ((word (pop loop-args)) (hash-types '(hash-key hash-keys hash-value hash-values)) @@ -1232,6 +1479,10 @@ Valid clauses are: "The Common Lisp `do' loop. \(fn ((VAR INIT [STEP])...) (END-TEST [RESULT...]) BODY...)" + (declare (debug + ((&rest &or symbolp (symbolp &optional form form)) + (form body) + cl-declarations body))) (cl-expand-do-loop steps endtest body nil)) ;;;###autoload @@ -1239,6 +1490,7 @@ Valid clauses are: "The Common Lisp `do*' loop. \(fn ((VAR INIT [STEP])...) (END-TEST [RESULT...]) BODY...)" + (declare (debug do)) (cl-expand-do-loop steps endtest body t)) (defun cl-expand-do-loop (steps endtest body star) @@ -1270,6 +1522,7 @@ Then evaluate RESULT to get return value, default nil. An implicit nil block is established around the loop. \(fn (VAR LIST [RESULT]) BODY...)" + (declare (debug ((symbolp form &optional form) cl-declarations body))) (let ((temp (make-symbol "--cl-dolist-temp--"))) ;; FIXME: Copy&pasted from subr.el. `(block nil @@ -1303,6 +1556,7 @@ to COUNT, exclusive. Then evaluate RESULT to get return value, default nil. \(fn (VAR COUNT [RESULT]) BODY...)" + (declare (debug dolist)) (let ((temp (make-symbol "--cl-dotimes-temp--")) (end (nth 1 spec))) ;; FIXME: Copy&pasted from subr.el. @@ -1335,6 +1589,7 @@ Evaluate BODY with VAR bound to each interned symbol, or to each symbol from OBARRAY. \(fn (VAR [OBARRAY [RESULT]]) BODY...)" + (declare (debug ((symbolp &optional form form) cl-declarations body))) ;; Apparently this doesn't have an implicit block. (list 'block nil (list 'let (list (car spec)) @@ -1345,6 +1600,7 @@ from OBARRAY. ;;;###autoload (defmacro do-all-symbols (spec &rest body) + (declare (debug ((symbolp &optional form) cl-declarations body))) (list* 'do-symbols (list (car spec) nil (cadr spec)) body)) @@ -1357,6 +1613,7 @@ This is like `setq', except that all VAL forms are evaluated (in order) before assigning any symbols SYM to the corresponding values. \(fn SYM VAL SYM VAL ...)" + (declare (debug setq)) (cons 'psetf args)) @@ -1370,6 +1627,7 @@ Each symbol in the first list is bound to the corresponding value in the second list (or made unbound if VALUES is shorter than SYMBOLS); then the BODY forms are executed and their result is returned. This is much like a `let' form, except that the list of symbols can be computed at run-time." + (declare (debug (form form body))) (list 'let '((cl-progv-save nil)) (list 'unwind-protect (list* 'progn (list 'cl-progv-before symbols values) body) @@ -1385,6 +1643,7 @@ function definitions in place, then the definitions are undone (the FUNCs go back to their previous definitions, or lack thereof). \(fn ((FUNC ARGLIST BODY...) ...) FORM...)" + (declare (debug ((&rest (defun*)) cl-declarations body))) (list* 'letf* (mapcar (function @@ -1417,6 +1676,7 @@ This is like `flet', except the bindings are lexical instead of dynamic. Unlike `flet', this macro is fully compliant with the Common Lisp standard. \(fn ((FUNC ARGLIST BODY...) ...) FORM...)" + (declare (debug flet)) (let ((vars nil) (sets nil) (cl-macro-environment cl-macro-environment)) (while bindings ;; Use `gensym' rather than `make-symbol'. It's important that @@ -1441,6 +1701,10 @@ Unlike `flet', this macro is fully compliant with the Common Lisp standard. This is like `flet', but for macros instead of functions. \(fn ((NAME ARGLIST BODY...) ...) FORM...)" + (declare (debug + ((&rest (&define name (&rest arg) cl-declarations-or-string + def-body)) + cl-declarations body))) (if (cdr bindings) (list 'macrolet (list (car bindings)) (list* 'macrolet (cdr bindings) body)) @@ -1459,6 +1723,7 @@ Within the body FORMs, references to the variable NAME will be replaced by EXPANSION, and (setq NAME ...) will act like (setf EXPANSION ...). \(fn ((NAME EXPANSION) ...) FORM...)" + (declare (debug ((&rest (symbol sexp)) cl-declarations body))) (if (cdr bindings) (list 'symbol-macrolet (list (car bindings)) (list* 'symbol-macrolet (cdr bindings) body)) @@ -1475,6 +1740,7 @@ by EXPANSION, and (setq NAME ...) will act like (setf EXPANSION ...). The main visible difference is that lambdas inside BODY will create lexical closures as in Common Lisp. \n(fn BINDINGS BODY)" + (declare (debug let)) (let* ((cl-closure-vars cl-closure-vars) (vars (mapcar (function (lambda (x) @@ -1527,6 +1793,7 @@ successive bindings within BINDINGS, will create lexical closures as in Common Lisp. This is similar to the behavior of `let*' in Common Lisp. \n(fn BINDINGS BODY)" + (declare (debug let)) (if (null bindings) (cons 'progn body) (setq bindings (reverse bindings)) (while bindings @@ -1552,6 +1819,7 @@ simulate true multiple return values. For compatibility, (values A B C) is a synonym for (list A B C). \(fn (SYM...) FORM BODY)" + (declare (debug ((&rest symbolp) form body))) (let ((temp (make-symbol "--cl-var--")) (n -1)) (list* 'let* (cons (list temp form) (mapcar (function @@ -1569,6 +1837,7 @@ each of the symbols SYM in turn. This is analogous to the Common Lisp values. For compatibility, (values A B C) is a synonym for (list A B C). \(fn (SYM...) FORM)" + (declare (debug ((&rest symbolp) form))) (cond ((null vars) (list 'progn form nil)) ((null (cdr vars)) (list 'setq (car vars) (list 'car form))) (t @@ -1588,9 +1857,13 @@ values. For compatibility, (values A B C) is a synonym for (list A B C). ;;; Declarations. ;;;###autoload -(defmacro locally (&rest body) (cons 'progn body)) +(defmacro locally (&rest body) + (declare (debug t)) + (cons 'progn body)) ;;;###autoload -(defmacro the (type form) form) +(defmacro the (type form) + (declare (debug (cl-type-spec form))) + form) (defvar cl-proclaim-history t) ; for future compilers (defvar cl-declare-stack t) ; for future compilers @@ -1670,6 +1943,8 @@ list, a store-variables list (of length one), a store-form, and an access- form. See `defsetf' for a simpler way to define most setf-methods. \(fn NAME ARGLIST BODY...)" + (declare (debug + (&define name cl-lambda-list cl-declarations-or-string def-body))) (append '(eval-when (compile load eval)) (if (stringp (car body)) (list (list 'put (list 'quote func) '(quote setf-documentation) @@ -1699,6 +1974,11 @@ Example: (defsetf nth (n x) (v) (list 'setcar (list 'nthcdr n x) v)) \(fn NAME [FUNC | ARGLIST (STORE) BODY...])" + (declare (debug + (&define name + [&or [symbolp &optional stringp] + [cl-lambda-list (symbolp)]] + cl-declarations-or-string def-body))) (if (and (listp arg1) (consp args)) (let* ((largs nil) (largsr nil) (temps nil) (tempsr nil) @@ -2037,6 +2317,7 @@ For example, (setf (cadar x) y) is equivalent to (setcar (cdar x) y). The return value is the last VAL in the list. \(fn PLACE VAL PLACE VAL ...)" + (declare (debug (&rest [place form]))) (if (cdr (cdr args)) (let ((sets nil)) (while args (push (list 'setf (pop args) (pop args)) sets)) @@ -2054,6 +2335,7 @@ This is like `setf', except that all VAL forms are evaluated (in order) before assigning any PLACEs to the corresponding values. \(fn PLACE VAL PLACE VAL ...)" + (declare (debug setf)) (let ((p args) (simple t) (vars nil)) (while p (if (or (not (symbolp (car p))) (cl-expr-depends-p (nth 1 p) vars)) @@ -2089,6 +2371,7 @@ before assigning any PLACEs to the corresponding values. "Remove TAG from property list PLACE. PLACE may be a symbol, or any generalized variable allowed by `setf'. The form returns true if TAG was found and removed, nil otherwise." + (declare (debug (place form))) (let* ((method (cl-setf-do-modify place t)) (tag-temp (and (not (cl-const-expr-p tag)) (make-symbol "--cl-remf-tag--"))) (val-temp (and (not (cl-simple-expr-p place)) @@ -2112,6 +2395,7 @@ Example: (shiftf A B C) sets A to B, B to C, and returns the old A. Each PLACE may be a symbol, or any generalized variable allowed by `setf'. \(fn PLACE... VAL)" + (declare (debug (&rest place))) (cond ((null args) place) ((symbolp place) `(prog1 ,place (setq ,place (shiftf ,@args)))) @@ -2128,6 +2412,7 @@ Example: (rotatef A B C) sets A to B, B to C, and C to A. It returns nil. Each PLACE may be a symbol, or any generalized variable allowed by `setf'. \(fn PLACE...)" + (declare (debug (&rest place))) (if (not (memq nil (mapcar 'symbolp args))) (and (cdr args) (let ((sets nil) @@ -2159,6 +2444,7 @@ As a special case, if `(PLACE)' is used instead of `(PLACE VALUE)', the PLACE is not modified before executing BODY. \(fn ((PLACE VALUE) ...) BODY...)" + (declare (debug ((&rest (gate place &optional form)) body))) (if (and (not (cdr bindings)) (cdar bindings) (symbolp (caar bindings))) (list* 'let bindings body) (let ((lets nil) (sets nil) @@ -2216,6 +2502,7 @@ As a special case, if `(PLACE)' is used instead of `(PLACE VALUE)', the PLACE is not modified before executing BODY. \(fn ((PLACE VALUE) ...) BODY...)" + (declare (debug letf)) (if (null bindings) (cons 'progn body) (setq bindings (reverse bindings)) @@ -2230,6 +2517,7 @@ FUNC should be an unquoted function name. PLACE may be a symbol, or any generalized variable allowed by `setf'. \(fn FUNC PLACE ARGS...)" + (declare (debug (function* place &rest form))) (let* ((method (cl-setf-do-modify place (cons 'list args))) (rargs (cons (nth 2 method) args))) (list 'let* (car method) @@ -2244,6 +2532,7 @@ or any generalized variable allowed by `setf'. Like `callf', but PLACE is the second argument of FUNC, not the first. \(fn FUNC ARG1 PLACE ARGS...)" + (declare (debug (function* form place &rest form))) (if (and (cl-safe-expr-p arg1) (cl-simple-expr-p place) (symbolp func)) (list 'setf place (list* func arg1 place args)) (let* ((method (cl-setf-do-modify place (cons 'list args))) @@ -2260,6 +2549,9 @@ Like `callf', but PLACE is the second argument of FUNC, not the first. "Define a `setf'-like modify macro. If NAME is called, it combines its PLACE argument with the other arguments from ARGLIST using FUNC: (define-modify-macro incf (&optional (n 1)) +)" + (declare (debug + (&define name cl-lambda-list ;; should exclude &key + symbolp &optional stringp))) (if (memq '&key arglist) (error "&key not allowed in define-modify-macro")) (let ((place (make-symbol "--cl-place--"))) (list 'defmacro* name (cons place arglist) doc @@ -2288,6 +2580,25 @@ one keyword is supported, `:read-only'. If this has a non-nil value, that slot cannot be set via `setf'. \(fn NAME SLOTS...)" + (declare (debug + (&define ;Makes top-level form not be wrapped. + [&or symbolp + (gate + symbolp &rest + (&or [":conc-name" symbolp] + [":constructor" symbolp &optional cl-lambda-list] + [":copier" symbolp] + [":predicate" symbolp] + [":include" symbolp &rest sexp] ;; Not finished. + ;; The following are not supported. + ;; [":print-function" ...] + ;; [":type" ...] + ;; [":initial-offset" ...] + ))] + [&optional stringp] + ;; All the above is for the following def-form. + &rest &or symbolp (symbolp def-form + &optional ":read-only" sexp)))) (let* ((name (if (consp struct) (car struct) struct)) (opts (cdr-safe struct)) (slots nil) @@ -2536,6 +2847,7 @@ value, that slot cannot be set via `setf'. (defmacro deftype (name arglist &rest body) "Define NAME as a new data type. The type name can then be used in `typecase', `check-type', etc." + (declare (debug defmacro*)) (list 'eval-when '(compile load eval) (cl-transform-function-property name 'cl-deftype-handler (cons (list* '&cl-defs ''('*) arglist) body)))) @@ -2587,6 +2899,7 @@ TYPE is a Common Lisp-style type specifier." (defmacro check-type (form type &optional string) "Verify that FORM is of type TYPE; signal an error if not. STRING is an optional description of the desired type." + (declare (debug (place cl-type-spec &optional stringp))) (and (or (not (cl-compiling-file)) (< cl-optimize-speed 3) (= cl-optimize-safety 3)) (let* ((temp (if (cl-simple-expr-p form 3) @@ -2605,6 +2918,7 @@ Second arg SHOW-ARGS means to include arguments of FORM in message. Other args STRING and ARGS... are arguments to be passed to `error'. They are not evaluated unless the assertion fails. If STRING is omitted, a default message listing FORM itself is used." + (declare (debug (form &rest form))) (and (or (not (cl-compiling-file)) (< cl-optimize-speed 3) (= cl-optimize-safety 3)) (let ((sargs (and show-args @@ -2635,6 +2949,7 @@ compiler macros are expanded repeatedly until no further expansions are possible. Unlike regular macros, BODY can decide to \"punt\" and leave the original function call alone by declaring an initial `&whole foo' parameter and then returning foo." + (declare (debug defmacro*)) (let ((p args) (res nil)) (while (consp p) (push (pop p) res)) (setq args (nconc (nreverse res) (and p (list '&rest p))))) @@ -2709,6 +3024,7 @@ ARGLIST allows full Common Lisp conventions, and BODY is implicitly surrounded by (block NAME ...). \(fn NAME ARGLIST [DOCSTRING] BODY...)" + (declare (debug defun*)) (let* ((argns (cl-arglist-args args)) (p argns) (pbody (cons 'progn body)) (unsafe (not (cl-safe-expr-p pbody)))) diff --git a/lisp/emacs-lisp/cl-specs.el b/lisp/emacs-lisp/cl-specs.el deleted file mode 100644 index dbadf06944f..00000000000 --- a/lisp/emacs-lisp/cl-specs.el +++ /dev/null @@ -1,471 +0,0 @@ -;;; cl-specs.el --- Edebug specs for cl.el -*- no-byte-compile: t -*- - -;; Copyright (C) 1993, 2001-2012 Free Software Foundation, Inc. -;; Author: Daniel LaLiberte -;; Keywords: lisp, tools, maint -;; Package: emacs - -;; LCD Archive Entry: -;; cl-specs.el|Daniel LaLiberte|liberte@holonexus.org -;; |Edebug specs for cl.el - -;; This file is part of GNU Emacs. - -;; 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 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 -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs. If not, see . - -;;; Commentary: - -;; These specs are to be used with edebug.el version 3.3 or later and -;; cl.el version 2.03 or later, by Dave Gillespie . - -;; This file need not be byte-compiled, but it shouldn't hurt. - -;;; Code: - -(provide 'cl-specs) -;; Do the above provide before the following require. -;; Otherwise if you load this before edebug if cl is already loaded -;; an infinite loading loop would occur. -(require 'edebug) - -;; Blocks - -(def-edebug-spec block (symbolp body)) -(def-edebug-spec return (&optional form)) -(def-edebug-spec return-from (symbolp &optional form)) - -;; Loops - -(def-edebug-spec case (form &rest (sexp body))) -(def-edebug-spec ecase case) -(def-edebug-spec do - ((&rest &or symbolp (symbolp &optional form form)) - (form body) - cl-declarations body)) -(def-edebug-spec do* do) -(def-edebug-spec dolist - ((symbolp form &optional form) cl-declarations body)) -(def-edebug-spec dotimes dolist) -(def-edebug-spec do-symbols - ((symbolp &optional form form) cl-declarations body)) -(def-edebug-spec do-all-symbols - ((symbolp &optional form) cl-declarations body)) - -;; Multiple values - -(def-edebug-spec multiple-value-list (form)) -(def-edebug-spec multiple-value-call (function-form body)) -(def-edebug-spec multiple-value-bind - ((&rest symbolp) form body)) -(def-edebug-spec multiple-value-setq ((&rest symbolp) form)) -(def-edebug-spec multiple-value-prog1 (form body)) - -;; Bindings - -(def-edebug-spec lexical-let let) -(def-edebug-spec lexical-let* let) - -(def-edebug-spec psetq setq) -(def-edebug-spec progv (form form body)) - -(def-edebug-spec flet ((&rest (defun*)) cl-declarations body)) -(def-edebug-spec labels flet) - -(def-edebug-spec macrolet - ((&rest (&define name (&rest arg) cl-declarations-or-string def-body)) - cl-declarations body)) - -(def-edebug-spec symbol-macrolet - ((&rest (symbol sexp)) cl-declarations body)) - -(def-edebug-spec destructuring-bind - (&define cl-macro-list def-form cl-declarations def-body)) - -;; Setf - -(def-edebug-spec setf (&rest [place form])) ;; sexp is not specific enough -(def-edebug-spec psetf setf) - -(def-edebug-spec letf ;; *not* available in Common Lisp - ((&rest (gate place &optional form)) - body)) -(def-edebug-spec letf* letf) - - -(def-edebug-spec defsetf - (&define name - [&or [symbolp &optional stringp] - [cl-lambda-list (symbolp)]] - cl-declarations-or-string def-body)) - -(def-edebug-spec define-setf-method - (&define name cl-lambda-list cl-declarations-or-string def-body)) - -(def-edebug-spec define-modify-macro - (&define name cl-lambda-list ;; should exclude &key - symbolp &optional stringp)) - -(def-edebug-spec callf (function* place &rest form)) -(def-edebug-spec callf2 (function* form place &rest form)) - -;; Other operations on places - -(def-edebug-spec remf (place form)) - -(def-edebug-spec incf (place &optional form)) -(def-edebug-spec decf incf) -(def-edebug-spec push (form place)) ; different for CL -(def-edebug-spec pushnew - (form place &rest - &or [[&or ":test" ":test-not" ":key"] function-form] - [keywordp form])) -(def-edebug-spec pop (place)) ; different for CL - -(def-edebug-spec shiftf (&rest place)) ;; really [&rest place] form -(def-edebug-spec rotatef (&rest place)) - - -;; Functions with function args. These are only useful if the -;; function arg is quoted with ' instead of function. - -(def-edebug-spec some (function-form form &rest form)) -(def-edebug-spec every some) -(def-edebug-spec notany some) -(def-edebug-spec notevery some) - -;; Mapping - -(def-edebug-spec map (form function-form form &rest form)) -(def-edebug-spec maplist (function-form form &rest form)) -(def-edebug-spec mapc maplist) -(def-edebug-spec mapl maplist) -(def-edebug-spec mapcan maplist) -(def-edebug-spec mapcon maplist) - -;; Sequences - -(def-edebug-spec reduce (function-form form &rest form)) - -;; Types and assertions - -(def-edebug-spec cl-type-spec (sexp)) ;; not worth the trouble to specify, yet. - -(def-edebug-spec deftype defmacro*) -(def-edebug-spec check-type (place cl-type-spec &optional stringp)) -;; (def-edebug-spec assert (form &optional form stringp &rest form)) -(def-edebug-spec assert (form &rest form)) -(def-edebug-spec typecase (form &rest ([&or cl-type-spec "otherwise"] body))) -(def-edebug-spec etypecase typecase) - -(def-edebug-spec ignore-errors t) - -;; Time of Evaluation - -(def-edebug-spec eval-when - ((&rest &or "compile" "load" "eval") body)) -(def-edebug-spec load-time-value (form &optional &or "t" "nil")) - -;; Declarations - -(def-edebug-spec cl-decl-spec - ((symbolp &rest sexp))) - -(def-edebug-spec cl-declarations - (&rest ("declare" &rest cl-decl-spec))) - -(def-edebug-spec cl-declarations-or-string - (&or stringp cl-declarations)) - -(def-edebug-spec declaim (&rest cl-decl-spec)) -(def-edebug-spec declare (&rest cl-decl-spec)) ;; probably not needed. -(def-edebug-spec locally (cl-declarations &rest form)) -(def-edebug-spec the (cl-type-spec form)) - -;;====================================================== -;; Lambda things - -(def-edebug-spec cl-lambda-list - (([&rest arg] - [&optional ["&optional" cl-&optional-arg &rest cl-&optional-arg]] - [&optional ["&rest" arg]] - [&optional ["&key" [cl-&key-arg &rest cl-&key-arg] - &optional "&allow-other-keys"]] - [&optional ["&aux" &rest - &or (symbolp &optional def-form) symbolp]] - ))) - -(def-edebug-spec cl-&optional-arg - (&or (arg &optional def-form arg) arg)) - -(def-edebug-spec cl-&key-arg - (&or ([&or (symbolp arg) arg] &optional def-form arg) arg)) - -;; The lambda list for macros is different from that of normal lambdas. -;; Note that &environment is only allowed as first or last items in the -;; top level list. - -(def-edebug-spec cl-macro-list - (([&optional "&environment" arg] - [&rest cl-macro-arg] - [&optional ["&optional" &rest - &or (cl-macro-arg &optional def-form cl-macro-arg) arg]] - [&optional [[&or "&rest" "&body"] cl-macro-arg]] - [&optional ["&key" [&rest - [&or ([&or (symbolp cl-macro-arg) arg] - &optional def-form cl-macro-arg) - arg]] - &optional "&allow-other-keys"]] - [&optional ["&aux" &rest - &or (symbolp &optional def-form) symbolp]] - [&optional "&environment" arg] - ))) - -(def-edebug-spec cl-macro-arg - (&or arg cl-macro-list1)) - -(def-edebug-spec cl-macro-list1 - (([&optional "&whole" arg] ;; only allowed at lower levels - [&rest cl-macro-arg] - [&optional ["&optional" &rest - &or (cl-macro-arg &optional def-form cl-macro-arg) arg]] - [&optional [[&or "&rest" "&body"] cl-macro-arg]] - [&optional ["&key" [&rest - [&or ([&or (symbolp cl-macro-arg) arg] - &optional def-form cl-macro-arg) - arg]] - &optional "&allow-other-keys"]] - [&optional ["&aux" &rest - &or (symbolp &optional def-form) symbolp]] - . [&or arg nil]))) - - -(def-edebug-spec defun* - ;; Same as defun but use cl-lambda-list. - (&define [&or name - ("setf" :name setf name)] - cl-lambda-list - cl-declarations-or-string - [&optional ("interactive" interactive)] - def-body)) -(def-edebug-spec defsubst* defun*) - -(def-edebug-spec defmacro* - (&define name cl-macro-list cl-declarations-or-string def-body)) -(def-edebug-spec define-compiler-macro defmacro*) - - -(def-edebug-spec function* - (&or symbolp cl-lambda-expr)) - -(def-edebug-spec cl-lambda-expr - (&define ("lambda" cl-lambda-list - ;;cl-declarations-or-string - ;;[&optional ("interactive" interactive)] - def-body))) - -;; Redefine function-form to also match function* -(def-edebug-spec function-form - ;; form at the end could also handle "function", - ;; but recognize it specially to avoid wrapping function forms. - (&or ([&or "quote" "function"] &or symbolp lambda-expr) - ("function*" function*) - form)) - -;;====================================================== -;; Structures -;; (def-edebug-spec defstruct (&rest sexp)) would be sufficient, but... - -;; defstruct may contain forms that are evaluated when a structure is created. -(def-edebug-spec defstruct - (&define ; makes top-level form not be wrapped - [&or symbolp - (gate - symbolp &rest - (&or [":conc-name" symbolp] - [":constructor" symbolp &optional cl-lambda-list] - [":copier" symbolp] - [":predicate" symbolp] - [":include" symbolp &rest sexp];; not finished - ;; The following are not supported. - ;; [":print-function" ...] - ;; [":type" ...] - ;; [":initial-offset" ...] - ))] - [&optional stringp] - ;; All the above is for the following def-form. - &rest &or symbolp (symbolp def-form &optional ":read-only" sexp))) - -;;====================================================== -;; Loop - -;; The loop macro is very complex, and a full spec is found below. -;; The following spec only minimally specifies that -;; parenthesized forms are executable, but single variables used as -;; expressions will be missed. You may want to use this if the full -;; spec causes problems for you. - -(def-edebug-spec loop - (&rest &or symbolp form)) - -;; Below is a complete spec for loop, in several parts that correspond -;; to the syntax given in CLtL2. The specs do more than specify where -;; the forms are; it also specifies, as much as Edebug allows, all the -;; syntactically valid loop clauses. The disadvantage of this -;; completeness is rigidity, but the "for ... being" clause allows -;; arbitrary extensions of the form: [symbolp &rest &or symbolp form]. - -(def-edebug-spec loop - ([&optional ["named" symbolp]] - [&rest - &or - ["repeat" form] - loop-for-as - loop-with - loop-initial-final] - [&rest loop-clause] - )) - -(def-edebug-spec loop-with - ("with" loop-var - loop-type-spec - [&optional ["=" form]] - &rest ["and" loop-var - loop-type-spec - [&optional ["=" form]]])) - -(def-edebug-spec loop-for-as - ([&or "for" "as"] loop-for-as-subclause - &rest ["and" loop-for-as-subclause])) - -(def-edebug-spec loop-for-as-subclause - (loop-var - loop-type-spec - &or - [[&or "in" "on" "in-ref" "across-ref"] - form &optional ["by" function-form]] - - ["=" form &optional ["then" form]] - ["across" form] - ["being" - [&or "the" "each"] - &or - [[&or "element" "elements"] - [&or "of" "in" "of-ref"] form - &optional "using" ["index" symbolp]];; is this right? - [[&or "hash-key" "hash-keys" - "hash-value" "hash-values"] - [&or "of" "in"] - hash-table-p &optional ["using" ([&or "hash-value" "hash-values" - "hash-key" "hash-keys"] sexp)]] - - [[&or "symbol" "present-symbol" "external-symbol" - "symbols" "present-symbols" "external-symbols"] - [&or "in" "of"] package-p] - - ;; Extensions for Emacs Lisp, including Lucid Emacs. - [[&or "frame" "frames" - "screen" "screens" - "buffer" "buffers"]] - - [[&or "window" "windows"] - [&or "of" "in"] form] - - [[&or "overlay" "overlays" - "extent" "extents"] - [&or "of" "in"] form - &optional [[&or "from" "to"] form]] - - [[&or "interval" "intervals"] - [&or "in" "of"] form - &optional [[&or "from" "to"] form] - ["property" form]] - - [[&or "key-code" "key-codes" - "key-seq" "key-seqs" - "key-binding" "key-bindings"] - [&or "in" "of"] form - &optional ["using" ([&or "key-code" "key-codes" - "key-seq" "key-seqs" - "key-binding" "key-bindings"] - sexp)]] - ;; For arbitrary extensions, recognize anything else. - [symbolp &rest &or symbolp form] - ] - - ;; arithmetic - must be last since all parts are optional. - [[&optional [[&or "from" "downfrom" "upfrom"] form]] - [&optional [[&or "to" "downto" "upto" "below" "above"] form]] - [&optional ["by" form]] - ])) - -(def-edebug-spec loop-initial-final - (&or ["initially" - ;; [&optional &or "do" "doing"] ;; CLtL2 doesn't allow this. - &rest loop-non-atomic-expr] - ["finally" &or - [[&optional &or "do" "doing"] &rest loop-non-atomic-expr] - ["return" form]])) - -(def-edebug-spec loop-and-clause - (loop-clause &rest ["and" loop-clause])) - -(def-edebug-spec loop-clause - (&or - [[&or "while" "until" "always" "never" "thereis"] form] - - [[&or "collect" "collecting" - "append" "appending" - "nconc" "nconcing" - "concat" "vconcat"] form - [&optional ["into" loop-var]]] - - [[&or "count" "counting" - "sum" "summing" - "maximize" "maximizing" - "minimize" "minimizing"] form - [&optional ["into" loop-var]] - loop-type-spec] - - [[&or "if" "when" "unless"] - form loop-and-clause - [&optional ["else" loop-and-clause]] - [&optional "end"]] - - [[&or "do" "doing"] &rest loop-non-atomic-expr] - - ["return" form] - loop-initial-final - )) - -(def-edebug-spec loop-non-atomic-expr - ([¬ atom] form)) - -(def-edebug-spec loop-var - ;; The symbolp must be last alternative to recognize e.g. (a b . c) - ;; loop-var => - ;; (loop-var . [&or nil loop-var]) - ;; (symbolp . [&or nil loop-var]) - ;; (symbolp . loop-var) - ;; (symbolp . (symbolp . [&or nil loop-var])) - ;; (symbolp . (symbolp . loop-var)) - ;; (symbolp . (symbolp . symbolp)) == (symbolp symbolp . symbolp) - (&or (loop-var . [&or nil loop-var]) [gate symbolp])) - -(def-edebug-spec loop-type-spec - (&optional ["of-type" loop-d-type-spec])) - -(def-edebug-spec loop-d-type-spec - (&or (loop-d-type-spec . [&or nil loop-d-type-spec]) cl-type-spec)) - -;;; cl-specs.el ends here diff --git a/lisp/emacs-lisp/cl.el b/lisp/emacs-lisp/cl.el index 2b56e8a9e4b..c5af1d8a4f1 100644 --- a/lisp/emacs-lisp/cl.el +++ b/lisp/emacs-lisp/cl.el @@ -120,6 +120,7 @@ a future Emacs interpreter will be able to use it.") "Increment PLACE by X (1 by default). PLACE may be a symbol, or any generalized variable allowed by `setf'. The return value is the incremented value of PLACE." + (declare (debug (place &optional form))) (if (symbolp place) (list 'setq place (if x (list '+ place x) (list '1+ place))) (list 'callf '+ place (or x 1)))) @@ -128,6 +129,7 @@ The return value is the incremented value of PLACE." "Decrement PLACE by X (1 by default). PLACE may be a symbol, or any generalized variable allowed by `setf'. The return value is the decremented value of PLACE." + (declare (debug incf)) (if (symbolp place) (list 'setq place (if x (list '- place x) (list '1- place))) (list 'callf '- place (or x 1)))) @@ -140,6 +142,7 @@ The return value is the decremented value of PLACE." Analogous to (prog1 (car PLACE) (setf PLACE (cdr PLACE))), though more careful about evaluating each argument only once and in the right order. PLACE may be a symbol, or any generalized variable allowed by `setf'." + (declare (debug (place))) (if (symbolp place) (list 'car (list 'prog1 place (list 'setq place (list 'cdr place)))) (cl-do-pop place))) @@ -149,6 +152,7 @@ PLACE may be a symbol, or any generalized variable allowed by `setf'." Analogous to (setf PLACE (cons X PLACE)), though more careful about evaluating each argument only once and in the right order. PLACE may be a symbol, or any generalized variable allowed by `setf'." + (declare (debug (form place))) (if (symbolp place) (list 'setq place (list 'cons x place)) (list 'callf2 'cons x place))) @@ -158,6 +162,10 @@ Like (push X PLACE), except that the list is unmodified if X is `eql' to an element already on the list. \nKeywords supported: :test :test-not :key \n(fn X PLACE [KEYWORD VALUE]...)" + (declare (debug + (form place &rest + &or [[&or ":test" ":test-not" ":key"] function-form] + [keywordp form]))) (if (symbolp place) (if (null keys) `(let ((x ,x)) From 9abdc45d8af50112c9afe3c8ee62ad4b9cce47ed Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 17 May 2012 17:40:47 -0400 Subject: [PATCH 516/564] * lisp/emacs-lisp/pcase.el (pcase--u1): Avoid ((lambda ...) ...). --- lisp/ChangeLog | 2 ++ lisp/emacs-lisp/pcase.el | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index cdb8217ed2c..043797ba7ee 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2012-05-17 Stefan Monnier + * emacs-lisp/pcase.el (pcase--u1): Avoid ((lambda ...) ...). + * emacs-lisp/cl.el: Add edebug specs from cl-specs.el. * emacs-lisp/cl-macs.el: Idem. * emacs-lisp/cl-specs.el: Remove. diff --git a/lisp/emacs-lisp/pcase.el b/lisp/emacs-lisp/pcase.el index 28eaa3d3455..67b19443967 100644 --- a/lisp/emacs-lisp/pcase.el +++ b/lisp/emacs-lisp/pcase.el @@ -557,7 +557,8 @@ Otherwise, it defers to REST which is a list of branches of the form (let ((newsym (make-symbol "x"))) (push (list newsym sym) env) (setq sym newsym))) - (if (functionp exp) `(,exp ,sym) + (if (functionp exp) + `(funcall #',exp ,sym) `(,@exp ,sym))))) (if (null vs) call From 70b8ef8f7855b9983d17731acad2fdfb4fb2a5be Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 17 May 2012 17:51:15 -0400 Subject: [PATCH 517/564] * lisp/emacs-lisp/cl-macs.el, lisp/emacs-lisp/cl.el: Move indent info. --- lisp/ChangeLog | 4 +++ lisp/emacs-lisp/cl-macs.el | 63 +++++++++++++++++++++----------------- lisp/emacs-lisp/cl.el | 36 ---------------------- 3 files changed, 39 insertions(+), 64 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 043797ba7ee..fcdb2ce65b7 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-05-17 Stefan Monnier + + * emacs-lisp/cl-macs.el, emacs-lisp/cl.el: Move indent info. + 2012-05-17 Stefan Monnier * emacs-lisp/pcase.el (pcase--u1): Avoid ((lambda ...) ...). diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el index 9fd53d78d92..441ae55758c 100644 --- a/lisp/emacs-lisp/cl-macs.el +++ b/lisp/emacs-lisp/cl-macs.el @@ -226,7 +226,8 @@ and BODY is implicitly surrounded by (block NAME ...). cl-lambda-list cl-declarations-or-string [&optional ("interactive" interactive)] - def-body))) + def-body)) + (indent 2)) (let* ((res (cl-transform-lambda (cons args body) name)) (form (list* 'defun name (cdr res)))) (if (car res) (list 'progn (car res) form) form))) @@ -277,7 +278,8 @@ and BODY is implicitly surrounded by (block NAME ...). \(fn NAME ARGLIST [DOCSTRING] BODY...)" (declare (debug - (&define name cl-macro-list cl-declarations-or-string def-body))) + (&define name cl-macro-list cl-declarations-or-string def-body)) + (indent 2)) (let* ((res (cl-transform-lambda (cons args body) name)) (form (list* 'defmacro name (cdr res)))) (if (car res) (list 'progn (car res) form) form))) @@ -555,7 +557,8 @@ It is a list of elements of the form either: ;;;###autoload (defmacro destructuring-bind (args expr &rest body) - (declare (debug (&define cl-macro-list def-form cl-declarations def-body))) + (declare (indent 2) + (debug (&define cl-macro-list def-form cl-declarations def-body))) (let* ((bind-lets nil) (bind-forms nil) (bind-inits nil) (bind-defs nil) (bind-block 'cl-none) (bind-enquote nil)) (cl-do-arglist (or args '(&aux)) expr) @@ -576,7 +579,7 @@ If `load' is in WHEN, BODY is evaluated when loaded after top-level compile. If `eval' is in WHEN, BODY is evaluated when interpreted or at non-top-level. \(fn (WHEN...) BODY...)" - (declare (debug ((&rest &or "compile" "load" "eval") body))) + (declare (indent 1) (debug ((&rest &or "compile" "load" "eval") body))) (if (and (fboundp 'cl-compiling-file) (cl-compiling-file) (not cl-not-toplevel) (not (boundp 'for-effect))) ; horrible kludge (let ((comp (or (memq 'compile when) (memq :compile-toplevel when))) @@ -635,7 +638,7 @@ place of a KEYLIST of one atom. A KEYLIST of t or `otherwise' is allowed only in the final clause, and matches if no other keys match. Key values are compared by `eql'. \n(fn EXPR (KEYLIST BODY...)...)" - (declare (debug (form &rest (sexp body)))) + (declare (indent 1) (debug (form &rest (sexp body)))) (let* ((temp (if (cl-simple-expr-p expr 3) expr (make-symbol "--cl-var--"))) (head-list nil) (body (cons @@ -666,7 +669,7 @@ Key values are compared by `eql'. "Like `case', but error if no case fits. `otherwise'-clauses are not allowed. \n(fn EXPR (KEYLIST BODY...)...)" - (declare (debug case)) + (declare (indent 1) (debug case)) (list* 'case expr (append clauses '((ecase-error-flag))))) ;;;###autoload @@ -677,7 +680,8 @@ satisfies TYPE, the corresponding BODY is evaluated. If no clause succeeds, typecase returns nil. A TYPE of t or `otherwise' is allowed only in the final clause, and matches if no other keys match. \n(fn EXPR (TYPE BODY...)...)" - (declare (debug (form &rest ([&or cl-type-spec "otherwise"] body)))) + (declare (indent 1) + (debug (form &rest ([&or cl-type-spec "otherwise"] body)))) (let* ((temp (if (cl-simple-expr-p expr 3) expr (make-symbol "--cl-var--"))) (type-list nil) (body (cons @@ -702,7 +706,7 @@ final clause, and matches if no other keys match. "Like `typecase', but error if no case fits. `otherwise'-clauses are not allowed. \n(fn EXPR (TYPE BODY...)...)" - (declare (debug typecase)) + (declare (indent 1) (debug typecase)) (list* 'typecase expr (append clauses '((ecase-error-flag))))) @@ -718,7 +722,7 @@ quoted symbol or other form; and second, NAME is lexically rather than dynamically scoped: Only references to it within BODY will work. These references may appear inside macro expansions, but not inside functions called from BODY." - (declare (debug (symbolp body))) + (declare (indent 1) (debug (symbolp body))) (if (cl-safe-expr-p (cons 'progn body)) (cons 'progn body) (list 'cl-block-wrapper (list* 'catch (list 'quote (intern (format "--cl-block-%s--" name))) @@ -738,7 +742,7 @@ This jumps out to the innermost enclosing `(block NAME ...)' form, returning RESULT from that form (or nil if RESULT is omitted). This is compatible with Common Lisp, but note that `defun' and `defmacro' do not create implicit blocks as they do in Common Lisp." - (declare (debug (symbolp &optional form))) + (declare (indent 1) (debug (symbolp &optional form))) (let ((name2 (intern (format "--cl-block-%s--" name)))) (list 'cl-block-throw (list 'quote name2) result))) @@ -1479,7 +1483,8 @@ Valid clauses are: "The Common Lisp `do' loop. \(fn ((VAR INIT [STEP])...) (END-TEST [RESULT...]) BODY...)" - (declare (debug + (declare (indent 2) + (debug ((&rest &or symbolp (symbolp &optional form form)) (form body) cl-declarations body))) @@ -1490,7 +1495,7 @@ Valid clauses are: "The Common Lisp `do*' loop. \(fn ((VAR INIT [STEP])...) (END-TEST [RESULT...]) BODY...)" - (declare (debug do)) + (declare (indent 2) (debug do)) (cl-expand-do-loop steps endtest body t)) (defun cl-expand-do-loop (steps endtest body star) @@ -1589,7 +1594,8 @@ Evaluate BODY with VAR bound to each interned symbol, or to each symbol from OBARRAY. \(fn (VAR [OBARRAY [RESULT]]) BODY...)" - (declare (debug ((symbolp &optional form form) cl-declarations body))) + (declare (indent 1) + (debug ((symbolp &optional form form) cl-declarations body))) ;; Apparently this doesn't have an implicit block. (list 'block nil (list 'let (list (car spec)) @@ -1600,7 +1606,7 @@ from OBARRAY. ;;;###autoload (defmacro do-all-symbols (spec &rest body) - (declare (debug ((symbolp &optional form) cl-declarations body))) + (declare (indent 1) (debug ((symbolp &optional form) cl-declarations body))) (list* 'do-symbols (list (car spec) nil (cadr spec)) body)) @@ -1627,7 +1633,7 @@ Each symbol in the first list is bound to the corresponding value in the second list (or made unbound if VALUES is shorter than SYMBOLS); then the BODY forms are executed and their result is returned. This is much like a `let' form, except that the list of symbols can be computed at run-time." - (declare (debug (form form body))) + (declare (indent 2) (debug (form form body))) (list 'let '((cl-progv-save nil)) (list 'unwind-protect (list* 'progn (list 'cl-progv-before symbols values) body) @@ -1643,7 +1649,7 @@ function definitions in place, then the definitions are undone (the FUNCs go back to their previous definitions, or lack thereof). \(fn ((FUNC ARGLIST BODY...) ...) FORM...)" - (declare (debug ((&rest (defun*)) cl-declarations body))) + (declare (indent 1) (debug ((&rest (defun*)) cl-declarations body))) (list* 'letf* (mapcar (function @@ -1676,7 +1682,7 @@ This is like `flet', except the bindings are lexical instead of dynamic. Unlike `flet', this macro is fully compliant with the Common Lisp standard. \(fn ((FUNC ARGLIST BODY...) ...) FORM...)" - (declare (debug flet)) + (declare (indent 1) (debug flet)) (let ((vars nil) (sets nil) (cl-macro-environment cl-macro-environment)) (while bindings ;; Use `gensym' rather than `make-symbol'. It's important that @@ -1701,7 +1707,8 @@ Unlike `flet', this macro is fully compliant with the Common Lisp standard. This is like `flet', but for macros instead of functions. \(fn ((NAME ARGLIST BODY...) ...) FORM...)" - (declare (debug + (declare (indent 1) + (debug ((&rest (&define name (&rest arg) cl-declarations-or-string def-body)) cl-declarations body))) @@ -1723,7 +1730,7 @@ Within the body FORMs, references to the variable NAME will be replaced by EXPANSION, and (setq NAME ...) will act like (setf EXPANSION ...). \(fn ((NAME EXPANSION) ...) FORM...)" - (declare (debug ((&rest (symbol sexp)) cl-declarations body))) + (declare (indent 1) (debug ((&rest (symbol sexp)) cl-declarations body))) (if (cdr bindings) (list 'symbol-macrolet (list (car bindings)) (list* 'symbol-macrolet (cdr bindings) body)) @@ -1740,7 +1747,7 @@ by EXPANSION, and (setq NAME ...) will act like (setf EXPANSION ...). The main visible difference is that lambdas inside BODY will create lexical closures as in Common Lisp. \n(fn BINDINGS BODY)" - (declare (debug let)) + (declare (indent 1) (debug let)) (let* ((cl-closure-vars cl-closure-vars) (vars (mapcar (function (lambda (x) @@ -1793,7 +1800,7 @@ successive bindings within BINDINGS, will create lexical closures as in Common Lisp. This is similar to the behavior of `let*' in Common Lisp. \n(fn BINDINGS BODY)" - (declare (debug let)) + (declare (indent 1) (debug let)) (if (null bindings) (cons 'progn body) (setq bindings (reverse bindings)) (while bindings @@ -1819,7 +1826,7 @@ simulate true multiple return values. For compatibility, (values A B C) is a synonym for (list A B C). \(fn (SYM...) FORM BODY)" - (declare (debug ((&rest symbolp) form body))) + (declare (indent 2) (debug ((&rest symbolp) form body))) (let ((temp (make-symbol "--cl-var--")) (n -1)) (list* 'let* (cons (list temp form) (mapcar (function @@ -1837,7 +1844,7 @@ each of the symbols SYM in turn. This is analogous to the Common Lisp values. For compatibility, (values A B C) is a synonym for (list A B C). \(fn (SYM...) FORM)" - (declare (debug ((&rest symbolp) form))) + (declare (indent 1) (debug ((&rest symbolp) form))) (cond ((null vars) (list 'progn form nil)) ((null (cdr vars)) (list 'setq (car vars) (list 'car form))) (t @@ -1862,7 +1869,7 @@ values. For compatibility, (values A B C) is a synonym for (list A B C). (cons 'progn body)) ;;;###autoload (defmacro the (type form) - (declare (debug (cl-type-spec form))) + (declare (indent 1) (debug (cl-type-spec form))) form) (defvar cl-proclaim-history t) ; for future compilers @@ -2444,7 +2451,7 @@ As a special case, if `(PLACE)' is used instead of `(PLACE VALUE)', the PLACE is not modified before executing BODY. \(fn ((PLACE VALUE) ...) BODY...)" - (declare (debug ((&rest (gate place &optional form)) body))) + (declare (indent 1) (debug ((&rest (gate place &optional form)) body))) (if (and (not (cdr bindings)) (cdar bindings) (symbolp (caar bindings))) (list* 'let bindings body) (let ((lets nil) (sets nil) @@ -2502,7 +2509,7 @@ As a special case, if `(PLACE)' is used instead of `(PLACE VALUE)', the PLACE is not modified before executing BODY. \(fn ((PLACE VALUE) ...) BODY...)" - (declare (debug letf)) + (declare (indent 1) (debug letf)) (if (null bindings) (cons 'progn body) (setq bindings (reverse bindings)) @@ -2517,7 +2524,7 @@ FUNC should be an unquoted function name. PLACE may be a symbol, or any generalized variable allowed by `setf'. \(fn FUNC PLACE ARGS...)" - (declare (debug (function* place &rest form))) + (declare (indent 2) (debug (function* place &rest form))) (let* ((method (cl-setf-do-modify place (cons 'list args))) (rargs (cons (nth 2 method) args))) (list 'let* (car method) @@ -2532,7 +2539,7 @@ or any generalized variable allowed by `setf'. Like `callf', but PLACE is the second argument of FUNC, not the first. \(fn FUNC ARG1 PLACE ARGS...)" - (declare (debug (function* form place &rest form))) + (declare (indent 3) (debug (function* form place &rest form))) (if (and (cl-safe-expr-p arg1) (cl-simple-expr-p place) (symbolp func)) (list 'setf place (list* func arg1 place args)) (let* ((method (cl-setf-do-modify place (cons 'list args))) diff --git a/lisp/emacs-lisp/cl.el b/lisp/emacs-lisp/cl.el index c5af1d8a4f1..7c486e17dcf 100644 --- a/lisp/emacs-lisp/cl.el +++ b/lisp/emacs-lisp/cl.el @@ -651,42 +651,6 @@ If ALIST is non-nil, the new pairs are prepended to it." ;;; Miscellaneous. -;; Define data for indentation and edebug. -(dolist (entry - '(((defun* defmacro*) 2) - ((function*) nil - (&or symbolp ([&optional 'macro] 'lambda (&rest sexp) &rest form))) - ((eval-when) 1 (sexp &rest form)) - ((declare) nil (&rest sexp)) - ((the) 1 (sexp &rest form)) - ((case ecase typecase etypecase) 1 (form &rest (sexp &rest form))) - ((block return-from) 1 (sexp &rest form)) - ((return) nil (&optional form)) - ((do do*) 2 ((&rest &or symbolp (symbolp &optional form form)) - (form &rest form) - &rest form)) - ((do-symbols) 1 ((symbolp form &optional form form) &rest form)) - ((do-all-symbols) 1 ((symbolp form &optional form) &rest form)) - ((psetq setf psetf) nil edebug-setq-form) - ((progv) 2 (&rest form)) - ((flet labels macrolet) 1 - ((&rest (sexp sexp &rest form)) &rest form)) - ((symbol-macrolet lexical-let lexical-let*) 1 - ((&rest &or symbolp (symbolp form)) &rest form)) - ((multiple-value-bind) 2 ((&rest symbolp) &rest form)) - ((multiple-value-setq) 1 ((&rest symbolp) &rest form)) - ((incf decf remf pushnew shiftf rotatef) nil (&rest form)) - ((letf letf*) 1 ((&rest (&rest form)) &rest form)) - ((callf destructuring-bind) 2 (sexp form &rest form)) - ((callf2) 3 (sexp form form &rest form)) - ((loop) nil (&rest &or symbolp form)) - ((ignore-errors) 0 (&rest form)))) - (dolist (func (car entry)) - (put func 'lisp-indent-function (nth 1 entry)) - (put func 'lisp-indent-hook (nth 1 entry)) - (or (get func 'edebug-form-spec) - (put func 'edebug-form-spec (nth 2 entry))))) - ;; Autoload the other portions of the package. ;; We want to replace the basic versions of dolist, dotimes, declare below. (fmakunbound 'dolist) From b581bb5c8ac2aed4a610097aaaca4a8d354fe9b4 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 17 May 2012 21:46:20 -0400 Subject: [PATCH 518/564] * lisp/emacs-lisp/lisp-mode.el (doc-string-elt): Move those properties to their respective macro declarations. * lisp/skeleton.el (define-skeleton): * lisp/progmodes/compile.el (define-compilation-mode): * lisp/ibuf-macs.el (define-ibuffer-sorter, define-ibuffer-op) (define-ibuffer-filter): * lisp/emacs-lisp/generic.el (define-generic-mode): * lisp/emacs-lisp/easy-mmode.el (define-minor-mode) (define-globalized-minor-mode): * lisp/emacs-lisp/cl-macs.el (defun*, defmacro*, defstruct, deftype): * lisp/emacs-lisp/byte-run.el (defsubst): * lisp/custom.el (deftheme): Add doc-string metadata. --- lisp/ChangeLog | 15 ++++++++ lisp/cedet/mode-local.el | 4 +++ lisp/custom.el | 1 + lisp/emacs-lisp/byte-run.el | 2 +- lisp/emacs-lisp/cl-loaddefs.el | 66 +++++++++++++++++++++++++++++++++- lisp/emacs-lisp/cl-macs.el | 7 ++-- lisp/emacs-lisp/cl.el | 9 +++++ lisp/emacs-lisp/easy-mmode.el | 5 +-- lisp/emacs-lisp/generic.el | 3 +- lisp/emacs-lisp/lisp-mode.el | 20 ----------- lisp/ibuf-macs.el | 6 ++-- lisp/progmodes/compile.el | 3 ++ lisp/skeleton.el | 2 +- 13 files changed, 112 insertions(+), 31 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index fcdb2ce65b7..e22b3d07985 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,18 @@ +2012-05-18 Stefan Monnier + + * emacs-lisp/lisp-mode.el (doc-string-elt): Move those properties to + their respective macro declarations. + * skeleton.el (define-skeleton): + * progmodes/compile.el (define-compilation-mode): + * ibuf-macs.el (define-ibuffer-sorter, define-ibuffer-op) + (define-ibuffer-filter): + * emacs-lisp/generic.el (define-generic-mode): + * emacs-lisp/easy-mmode.el (define-minor-mode) + (define-globalized-minor-mode): + * emacs-lisp/cl-macs.el (defun*, defmacro*, defstruct, deftype): + * emacs-lisp/byte-run.el (defsubst): + * custom.el (deftheme): Add doc-string metadata. + 2012-05-17 Stefan Monnier * emacs-lisp/cl-macs.el, emacs-lisp/cl.el: Move indent info. diff --git a/lisp/cedet/mode-local.el b/lisp/cedet/mode-local.el index 7346e88797d..11968f3fa35 100644 --- a/lisp/cedet/mode-local.el +++ b/lisp/cedet/mode-local.el @@ -522,6 +522,9 @@ See also the function `define-overload'." (list (mode-local--override name args body)) result))) +;;;###autoload +(put 'define-overloadable-function 'doc-string-elt 3) + (defmacro define-overloadable-function (name args docstring &rest body) "Define a new function, as with `defun', which can be overloaded. NAME is the name of the function to create. @@ -546,6 +549,7 @@ defined. The default is to call the function `NAME-default' with the appropriate arguments deduced from ARGS. OVERARGS is a list of arguments passed to the override and `NAME-default' function, in place of those deduced from ARGS." + (declare (doc-string 3)) `(eval-and-compile (defun ,name ,args ,docstring diff --git a/lisp/custom.el b/lisp/custom.el index d0eadcc23ff..50481f2aa7f 100644 --- a/lisp/custom.el +++ b/lisp/custom.el @@ -1048,6 +1048,7 @@ The optional argument DOC is a doc string describing the theme. Any theme `foo' should be defined in a file called `foo-theme.el'; see `custom-make-theme-feature' for more information." + (declare (doc-string 2)) (let ((feature (custom-make-theme-feature theme))) ;; It is better not to use backquote in this file, ;; because that makes a bootstrapping problem diff --git a/lisp/emacs-lisp/byte-run.el b/lisp/emacs-lisp/byte-run.el index dc7166bc2ea..7de3396f8ed 100644 --- a/lisp/emacs-lisp/byte-run.el +++ b/lisp/emacs-lisp/byte-run.el @@ -96,7 +96,7 @@ The return value of this function is not used." ;; This has a special byte-hunk-handler in bytecomp.el. (defmacro defsubst (name arglist &rest body) "Define an inline function. The syntax is just like that of `defun'." - (declare (debug defun)) + (declare (debug defun) (doc-string 3)) (or (memq (get name 'byte-optimizer) '(nil byte-compile-inline-expand)) (error "`%s' is a primitive" name)) diff --git a/lisp/emacs-lisp/cl-loaddefs.el b/lisp/emacs-lisp/cl-loaddefs.el index d16b98630c8..a9380619e6a 100644 --- a/lisp/emacs-lisp/cl-loaddefs.el +++ b/lisp/emacs-lisp/cl-loaddefs.el @@ -286,7 +286,7 @@ This also does some trivial optimizations to make the form prettier. ;;;;;; flet progv psetq do-all-symbols do-symbols dotimes dolist ;;;;;; do* do loop return-from return block etypecase typecase ecase ;;;;;; case load-time-value eval-when destructuring-bind function* -;;;;;; defmacro* defun* gentemp gensym) "cl-macs" "cl-macs.el" "ed94b3ba46080516e6ada69bdf617be5") +;;;;;; defmacro* defun* gentemp gensym) "cl-macs" "cl-macs.el" "c383ef0fa5f6d28796cd8e9cf65e1c5d") ;;; Generated autoloads from cl-macs.el (autoload 'gensym "cl-macs" "\ @@ -308,6 +308,10 @@ and BODY is implicitly surrounded by (block NAME ...). \(fn NAME ARGLIST [DOCSTRING] BODY...)" nil (quote macro)) +(put 'defun* 'lisp-indent-function '2) + +(put 'defun* 'doc-string-elt '3) + (autoload 'defmacro* "cl-macs" "\ Define NAME as a macro. Like normal `defmacro', except ARGLIST allows full Common Lisp conventions, @@ -315,6 +319,10 @@ and BODY is implicitly surrounded by (block NAME ...). \(fn NAME ARGLIST [DOCSTRING] BODY...)" nil (quote macro)) +(put 'defmacro* 'lisp-indent-function '2) + +(put 'defmacro* 'doc-string-elt '3) + (autoload 'function* "cl-macs" "\ Introduce a function. Like normal `function', except that if argument is a lambda form, @@ -327,6 +335,8 @@ its argument list allows full Common Lisp conventions. \(fn ARGS EXPR &rest BODY)" nil (quote macro)) +(put 'destructuring-bind 'lisp-indent-function '2) + (autoload 'eval-when "cl-macs" "\ Control when BODY is evaluated. If `compile' is in WHEN, BODY is evaluated when compiled at top-level. @@ -335,6 +345,8 @@ If `eval' is in WHEN, BODY is evaluated when interpreted or at non-top-level. \(fn (WHEN...) BODY...)" nil (quote macro)) +(put 'eval-when 'lisp-indent-function '1) + (autoload 'load-time-value "cl-macs" "\ Like `progn', but evaluates the body at load time. The result of the body appears to the compiler as a quoted constant. @@ -352,12 +364,16 @@ Key values are compared by `eql'. \(fn EXPR (KEYLIST BODY...)...)" nil (quote macro)) +(put 'case 'lisp-indent-function '1) + (autoload 'ecase "cl-macs" "\ Like `case', but error if no case fits. `otherwise'-clauses are not allowed. \(fn EXPR (KEYLIST BODY...)...)" nil (quote macro)) +(put 'ecase 'lisp-indent-function '1) + (autoload 'typecase "cl-macs" "\ Evals EXPR, chooses among clauses on that value. Each clause looks like (TYPE BODY...). EXPR is evaluated and, if it @@ -367,12 +383,16 @@ final clause, and matches if no other keys match. \(fn EXPR (TYPE BODY...)...)" nil (quote macro)) +(put 'typecase 'lisp-indent-function '1) + (autoload 'etypecase "cl-macs" "\ Like `typecase', but error if no case fits. `otherwise'-clauses are not allowed. \(fn EXPR (TYPE BODY...)...)" nil (quote macro)) +(put 'etypecase 'lisp-indent-function '1) + (autoload 'block "cl-macs" "\ Define a lexically-scoped block named NAME. NAME may be any symbol. Code inside the BODY forms can call `return-from' @@ -385,6 +405,8 @@ called from BODY. \(fn NAME &rest BODY)" nil (quote macro)) +(put 'block 'lisp-indent-function '1) + (autoload 'return "cl-macs" "\ Return from the block named nil. This is equivalent to `(return-from nil RESULT)'. @@ -400,6 +422,8 @@ This is compatible with Common Lisp, but note that `defun' and \(fn NAME &optional RESULT)" nil (quote macro)) +(put 'return-from 'lisp-indent-function '1) + (autoload 'loop "cl-macs" "\ The Common Lisp `loop' macro. Valid clauses are: @@ -421,11 +445,15 @@ The Common Lisp `do' loop. \(fn ((VAR INIT [STEP])...) (END-TEST [RESULT...]) BODY...)" nil (quote macro)) +(put 'do 'lisp-indent-function '2) + (autoload 'do* "cl-macs" "\ The Common Lisp `do*' loop. \(fn ((VAR INIT [STEP])...) (END-TEST [RESULT...]) BODY...)" nil (quote macro)) +(put 'do* 'lisp-indent-function '2) + (autoload 'dolist "cl-macs" "\ Loop over a list. Evaluate BODY with VAR bound to each `car' from LIST, in turn. @@ -449,11 +477,15 @@ from OBARRAY. \(fn (VAR [OBARRAY [RESULT]]) BODY...)" nil (quote macro)) +(put 'do-symbols 'lisp-indent-function '1) + (autoload 'do-all-symbols "cl-macs" "\ \(fn SPEC &rest BODY)" nil (quote macro)) +(put 'do-all-symbols 'lisp-indent-function '1) + (autoload 'psetq "cl-macs" "\ Set SYMs to the values VALs in parallel. This is like `setq', except that all VAL forms are evaluated (in order) @@ -471,6 +503,8 @@ a `let' form, except that the list of symbols can be computed at run-time. \(fn SYMBOLS VALUES &rest BODY)" nil (quote macro)) +(put 'progv 'lisp-indent-function '2) + (autoload 'flet "cl-macs" "\ Make temporary function definitions. This is an analogue of `let' that operates on the function cell of FUNC @@ -480,6 +514,8 @@ go back to their previous definitions, or lack thereof). \(fn ((FUNC ARGLIST BODY...) ...) FORM...)" nil (quote macro)) +(put 'flet 'lisp-indent-function '1) + (autoload 'labels "cl-macs" "\ Make temporary function bindings. This is like `flet', except the bindings are lexical instead of dynamic. @@ -487,12 +523,16 @@ Unlike `flet', this macro is fully compliant with the Common Lisp standard. \(fn ((FUNC ARGLIST BODY...) ...) FORM...)" nil (quote macro)) +(put 'labels 'lisp-indent-function '1) + (autoload 'macrolet "cl-macs" "\ Make temporary macro definitions. This is like `flet', but for macros instead of functions. \(fn ((NAME ARGLIST BODY...) ...) FORM...)" nil (quote macro)) +(put 'macrolet 'lisp-indent-function '1) + (autoload 'symbol-macrolet "cl-macs" "\ Make symbol macro definitions. Within the body FORMs, references to the variable NAME will be replaced @@ -500,6 +540,8 @@ by EXPANSION, and (setq NAME ...) will act like (setf EXPANSION ...). \(fn ((NAME EXPANSION) ...) FORM...)" nil (quote macro)) +(put 'symbol-macrolet 'lisp-indent-function '1) + (autoload 'lexical-let "cl-macs" "\ Like `let', but lexically scoped. The main visible difference is that lambdas inside BODY will create @@ -507,6 +549,8 @@ lexical closures as in Common Lisp. \(fn BINDINGS BODY)" nil (quote macro)) +(put 'lexical-let 'lisp-indent-function '1) + (autoload 'lexical-let* "cl-macs" "\ Like `let*', but lexically scoped. The main visible difference is that lambdas inside BODY, and in @@ -516,6 +560,8 @@ Common Lisp. \(fn BINDINGS BODY)" nil (quote macro)) +(put 'lexical-let* 'lisp-indent-function '1) + (autoload 'multiple-value-bind "cl-macs" "\ Collect multiple return values. FORM must return a list; the BODY is then executed with the first N elements @@ -526,6 +572,8 @@ a synonym for (list A B C). \(fn (SYM...) FORM BODY)" nil (quote macro)) +(put 'multiple-value-bind 'lisp-indent-function '2) + (autoload 'multiple-value-setq "cl-macs" "\ Collect multiple return values. FORM must return a list; the first N elements of this list are stored in @@ -535,6 +583,8 @@ values. For compatibility, (values A B C) is a synonym for (list A B C). \(fn (SYM...) FORM)" nil (quote macro)) +(put 'multiple-value-setq 'lisp-indent-function '1) + (autoload 'locally "cl-macs" "\ @@ -545,6 +595,8 @@ values. For compatibility, (values A B C) is a synonym for (list A B C). \(fn TYPE FORM)" nil (quote macro)) +(put 'the 'lisp-indent-function '1) + (autoload 'declare "cl-macs" "\ Declare SPECS about the current function while compiling. For instance @@ -649,6 +701,8 @@ the PLACE is not modified before executing BODY. \(fn ((PLACE VALUE) ...) BODY...)" nil (quote macro)) +(put 'letf 'lisp-indent-function '1) + (autoload 'letf* "cl-macs" "\ Temporarily bind to PLACEs. This is the analogue of `let*', but with generalized variables (in the @@ -661,6 +715,8 @@ the PLACE is not modified before executing BODY. \(fn ((PLACE VALUE) ...) BODY...)" nil (quote macro)) +(put 'letf* 'lisp-indent-function '1) + (autoload 'callf "cl-macs" "\ Set PLACE to (FUNC PLACE ARGS...). FUNC should be an unquoted function name. PLACE may be a symbol, @@ -668,12 +724,16 @@ or any generalized variable allowed by `setf'. \(fn FUNC PLACE ARGS...)" nil (quote macro)) +(put 'callf 'lisp-indent-function '2) + (autoload 'callf2 "cl-macs" "\ Set PLACE to (FUNC ARG1 PLACE ARGS...). Like `callf', but PLACE is the second argument of FUNC, not the first. \(fn FUNC ARG1 PLACE ARGS...)" nil (quote macro)) +(put 'callf2 'lisp-indent-function '3) + (autoload 'define-modify-macro "cl-macs" "\ Define a `setf'-like modify macro. If NAME is called, it combines its PLACE argument with the other arguments @@ -699,6 +759,8 @@ value, that slot cannot be set via `setf'. \(fn NAME SLOTS...)" nil (quote macro)) +(put 'defstruct 'doc-string-elt '2) + (autoload 'cl-struct-setf-expander "cl-macs" "\ @@ -710,6 +772,8 @@ The type name can then be used in `typecase', `check-type', etc. \(fn NAME ARGLIST &rest BODY)" nil (quote macro)) +(put 'deftype 'doc-string-elt '3) + (autoload 'typep "cl-macs" "\ Check that OBJECT is of type TYPE. TYPE is a Common Lisp-style type specifier. diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el index 441ae55758c..c547a4f6460 100644 --- a/lisp/emacs-lisp/cl-macs.el +++ b/lisp/emacs-lisp/cl-macs.el @@ -227,6 +227,7 @@ and BODY is implicitly surrounded by (block NAME ...). cl-declarations-or-string [&optional ("interactive" interactive)] def-body)) + (doc-string 3) (indent 2)) (let* ((res (cl-transform-lambda (cons args body) name)) (form (list* 'defun name (cdr res)))) @@ -279,6 +280,7 @@ and BODY is implicitly surrounded by (block NAME ...). \(fn NAME ARGLIST [DOCSTRING] BODY...)" (declare (debug (&define name cl-macro-list cl-declarations-or-string def-body)) + (doc-string 3) (indent 2)) (let* ((res (cl-transform-lambda (cons args body) name)) (form (list* 'defmacro name (cdr res)))) @@ -2587,7 +2589,8 @@ one keyword is supported, `:read-only'. If this has a non-nil value, that slot cannot be set via `setf'. \(fn NAME SLOTS...)" - (declare (debug + (declare (doc-string 2) + (debug (&define ;Makes top-level form not be wrapped. [&or symbolp (gate @@ -2854,7 +2857,7 @@ value, that slot cannot be set via `setf'. (defmacro deftype (name arglist &rest body) "Define NAME as a new data type. The type name can then be used in `typecase', `check-type', etc." - (declare (debug defmacro*)) + (declare (debug defmacro*) (doc-string 3)) (list 'eval-when '(compile load eval) (cl-transform-function-property name 'cl-deftype-handler (cons (list* '&cl-defs ''('*) arglist) body)))) diff --git a/lisp/emacs-lisp/cl.el b/lisp/emacs-lisp/cl.el index 7c486e17dcf..137dd1bfb84 100644 --- a/lisp/emacs-lisp/cl.el +++ b/lisp/emacs-lisp/cl.el @@ -656,6 +656,15 @@ If ALIST is non-nil, the new pairs are prepended to it." (fmakunbound 'dolist) (fmakunbound 'dotimes) (fmakunbound 'declare) +;;;###autoload +(progn + ;; Autoload, so autoload.el and font-lock can use it even when CL + ;; is not loaded. + (put 'defun* 'doc-string-elt 3) + (put 'defmacro* 'doc-string-elt 3) + (put 'defsubst 'doc-string-elt 3) + (put 'defstruct 'doc-string-elt 2)) + (load "cl-loaddefs" nil 'quiet) ;; This goes here so that cl-macs can find it if it loads right now. diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el index 301947f0735..a11f213e646 100644 --- a/lisp/emacs-lisp/easy-mmode.el +++ b/lisp/emacs-lisp/easy-mmode.el @@ -142,7 +142,8 @@ For example, you could write (define-minor-mode foo-mode \"If enabled, foo on you!\" :lighter \" Foo\" :require 'foo :global t :group 'hassle :version \"27.5\" ...BODY CODE...)" - (declare (debug (&define name stringp + (declare (doc-string 2) + (debug (&define name stringp [&optional [¬ keywordp] sexp &optional [¬ keywordp] sexp &optional [¬ keywordp] sexp] @@ -335,7 +336,7 @@ enabled, then disabling and reenabling MODE should make MODE work correctly with the current major mode. This is important to prevent problems with derived modes, that is, major modes that call another major mode in their body." - + (declare (doc-string 2)) (let* ((global-mode-name (symbol-name global-mode)) (pretty-name (easy-mmode-pretty-mode-name mode)) (pretty-global-name (easy-mmode-pretty-mode-name global-mode)) diff --git a/lisp/emacs-lisp/generic.el b/lisp/emacs-lisp/generic.el index b9db092fafc..80b6122822e 100644 --- a/lisp/emacs-lisp/generic.el +++ b/lisp/emacs-lisp/generic.el @@ -151,7 +151,8 @@ mode hook `MODE-hook'. See the file generic-x.el for some examples of `define-generic-mode'." (declare (debug (sexp def-form def-form def-form form def-form [&optional stringp] &rest [keywordp form])) - (indent 1)) + (indent 1) + (doc-string 7)) ;; Backward compatibility. (when (eq (car-safe mode) 'quote) diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el index 95eb8c963be..dfdac92ae32 100644 --- a/lisp/emacs-lisp/lisp-mode.el +++ b/lisp/emacs-lisp/lisp-mode.el @@ -136,34 +136,14 @@ It has `lisp-mode-abbrev-table' as its parent." ;; This was originally in autoload.el and is still used there. (put 'autoload 'doc-string-elt 3) (put 'defun 'doc-string-elt 3) -(put 'defun* 'doc-string-elt 3) (put 'defmethod 'doc-string-elt 3) (put 'defvar 'doc-string-elt 3) -(put 'defcustom 'doc-string-elt 3) -(put 'deftheme 'doc-string-elt 2) -(put 'deftype 'doc-string-elt 3) (put 'defconst 'doc-string-elt 3) (put 'defmacro 'doc-string-elt 3) -(put 'defmacro* 'doc-string-elt 3) -(put 'defsubst 'doc-string-elt 3) -(put 'defstruct 'doc-string-elt 2) -(put 'define-skeleton 'doc-string-elt 2) -(put 'define-derived-mode 'doc-string-elt 4) -(put 'define-compilation-mode 'doc-string-elt 3) -(put 'easy-mmode-define-minor-mode 'doc-string-elt 2) -(put 'define-minor-mode 'doc-string-elt 2) -(put 'easy-mmode-define-global-mode 'doc-string-elt 2) -(put 'define-global-minor-mode 'doc-string-elt 2) -(put 'define-globalized-minor-mode 'doc-string-elt 2) -(put 'define-generic-mode 'doc-string-elt 7) -(put 'define-ibuffer-filter 'doc-string-elt 2) -(put 'define-ibuffer-op 'doc-string-elt 3) -(put 'define-ibuffer-sorter 'doc-string-elt 2) (put 'lambda 'doc-string-elt 2) (put 'defalias 'doc-string-elt 3) (put 'defvaralias 'doc-string-elt 3) (put 'define-category 'doc-string-elt 2) -(put 'define-overloadable-function 'doc-string-elt 3) (defvar lisp-doc-string-elt-property 'doc-string-elt "The symbol property that holds the docstring position info.") diff --git a/lisp/ibuf-macs.el b/lisp/ibuf-macs.el index f47592e82bb..659b8e7d78c 100644 --- a/lisp/ibuf-macs.el +++ b/lisp/ibuf-macs.el @@ -143,7 +143,7 @@ buffer object, and `b' bound to another. BODY should return a non-nil value if and only if `a' is \"less than\" `b'. \(fn NAME DOCUMENTATION (&key DESCRIPTION) &rest BODY)" - (declare (indent 1)) + (declare (indent 1) (doc-string 2)) `(progn (defun ,(intern (concat "ibuffer-do-sort-by-" (symbol-name name))) () ,(or documentation "No :documentation specified for this sorting method.") @@ -202,7 +202,7 @@ COMPLEX means this function is special; see the source code of this macro for exactly what it does. \(fn OP ARGS DOCUMENTATION (&key INTERACTIVE MARK MODIFIER-P DANGEROUS OPSTRING ACTIVE-OPSTRING COMPLEX) &rest BODY)" - (declare (indent 2)) + (declare (indent 2) (doc-string 3)) `(progn (defun ,(intern (concat (if (string-match "^ibuffer-do" (symbol-name op)) "" "ibuffer-do-") (symbol-name op))) @@ -280,7 +280,7 @@ will be evaluated with BUF bound to the buffer object, and QUALIFIER bound to the current value of the filter. \(fn NAME DOCUMENTATION (&key READER DESCRIPTION) &rest BODY)" - (declare (indent 2)) + (declare (indent 2) (doc-string 2)) (let ((fn-name (intern (concat "ibuffer-filter-by-" (symbol-name name))))) `(progn (defun ,fn-name (qualifier) diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el index 7ffaddb2c49..fe1b63f3048 100644 --- a/lisp/progmodes/compile.el +++ b/lisp/progmodes/compile.el @@ -1884,6 +1884,9 @@ Runs `compilation-mode-hook' with `run-mode-hooks' (which see). (setq buffer-read-only t) (run-mode-hooks 'compilation-mode-hook)) +;;;###autoload +(put 'define-compilation-mode 'doc-string-elt 3) + (defmacro define-compilation-mode (mode name doc &rest body) "This is like `define-derived-mode' without the PARENT argument. The parent is always `compilation-mode' and the customizable `compilation-...' diff --git a/lisp/skeleton.el b/lisp/skeleton.el index 328f795ecd2..34d69a74369 100644 --- a/lisp/skeleton.el +++ b/lisp/skeleton.el @@ -121,7 +121,7 @@ are integer buffer positions in the reverse order of the insertion order.") "Define a user-configurable COMMAND that enters a statement skeleton. DOCUMENTATION is that of the command. SKELETON is as defined under `skeleton-insert'." - (declare (debug (&define name stringp skeleton-edebug-spec))) + (declare (doc-string 2) (debug (&define name stringp skeleton-edebug-spec))) (if skeleton-debug (set command skeleton)) `(progn From 5a1ae34e60a2d2b467c82662ff3808500bdfbfe5 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 17 May 2012 21:48:05 -0400 Subject: [PATCH 519/564] Refresh ldefs-boot. --- lisp/ldefs-boot.el | 2117 +++++++++++++++++++------------------------- 1 file changed, 914 insertions(+), 1203 deletions(-) diff --git a/lisp/ldefs-boot.el b/lisp/ldefs-boot.el index 487587bdbac..7d2372a0ff6 100644 --- a/lisp/ldefs-boot.el +++ b/lisp/ldefs-boot.el @@ -5,7 +5,7 @@ ;;;### (autoloads (5x5-crack 5x5-crack-xor-mutate 5x5-crack-mutating-best ;;;;;; 5x5-crack-mutating-current 5x5-crack-randomly 5x5) "5x5" -;;;;;; "play/5x5.el" (20355 10021)) +;;;;;; "play/5x5.el" (20229 56251)) ;;; Generated autoloads from play/5x5.el (autoload '5x5 "5x5" "\ @@ -68,7 +68,7 @@ should return a grid vector array that is the new solution. ;;;*** ;;;### (autoloads (ada-mode ada-add-extensions) "ada-mode" "progmodes/ada-mode.el" -;;;;;; (20355 10021)) +;;;;;; (20355 835)) ;;; Generated autoloads from progmodes/ada-mode.el (autoload 'ada-add-extensions "ada-mode" "\ @@ -88,7 +88,7 @@ Ada mode is the major mode for editing Ada code. ;;;*** ;;;### (autoloads (ada-header) "ada-stmt" "progmodes/ada-stmt.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from progmodes/ada-stmt.el (autoload 'ada-header "ada-stmt" "\ @@ -99,7 +99,7 @@ Insert a descriptive header at the top of the file. ;;;*** ;;;### (autoloads (ada-find-file) "ada-xref" "progmodes/ada-xref.el" -;;;;;; (20355 10021)) +;;;;;; (20355 835)) ;;; Generated autoloads from progmodes/ada-xref.el (autoload 'ada-find-file "ada-xref" "\ @@ -114,7 +114,7 @@ Completion is available. ;;;;;; add-change-log-entry-other-window add-change-log-entry find-change-log ;;;;;; prompt-for-change-log-name add-log-mailing-address add-log-full-name ;;;;;; add-log-current-defun-function) "add-log" "vc/add-log.el" -;;;;;; (20355 10021)) +;;;;;; (20355 835)) ;;; Generated autoloads from vc/add-log.el (put 'change-log-default-name 'safe-local-variable 'string-or-null-p) @@ -253,7 +253,7 @@ old-style time formats for entries are supported. ;;;### (autoloads (defadvice ad-activate ad-add-advice ad-disable-advice ;;;;;; ad-enable-advice ad-default-compilation-action ad-redefinition-action) -;;;;;; "advice" "emacs-lisp/advice.el" (20355 10021)) +;;;;;; "advice" "emacs-lisp/advice.el" (20280 8018)) ;;; Generated autoloads from emacs-lisp/advice.el (defvar ad-redefinition-action 'warn "\ @@ -398,7 +398,7 @@ usage: (defadvice FUNCTION (CLASS NAME [POSITION] [ARGLIST] FLAG...) ;;;### (autoloads (align-newline-and-indent align-unhighlight-rule ;;;;;; align-highlight-rule align-current align-entire align-regexp -;;;;;; align) "align" "align.el" (20355 10021)) +;;;;;; align) "align" "align.el" (20229 56251)) ;;; Generated autoloads from align.el (autoload 'align "align" "\ @@ -489,7 +489,7 @@ A replacement function for `newline-and-indent', aligning as it goes. ;;;### (autoloads (outlineify-sticky allout-mode allout-mode-p allout-auto-activation ;;;;;; allout-setup allout-auto-activation-helper) "allout" "allout.el" -;;;;;; (20355 10021)) +;;;;;; (20400 16870)) ;;; Generated autoloads from allout.el (autoload 'allout-auto-activation-helper "allout" "\ @@ -746,10 +746,10 @@ without changes to the allout core. Here are key ones: `allout-mode-hook' `allout-mode-deactivate-hook' (deprecated) `allout-mode-off-hook' -`allout-exposure-change-hook' -`allout-structure-added-hook' -`allout-structure-deleted-hook' -`allout-structure-shifted-hook' +`allout-exposure-change-functions' +`allout-structure-added-functions' +`allout-structure-deleted-functions' +`allout-structure-shifted-functions' `allout-after-copy-or-kill-hook' `allout-post-undo-hook' @@ -850,7 +850,7 @@ for details on preparing Emacs for automatic allout activation. ;;;### (autoloads (allout-widgets-mode allout-widgets-auto-activation ;;;;;; allout-widgets-setup allout-widgets) "allout-widgets" "allout-widgets.el" -;;;;;; (20355 10021)) +;;;;;; (20387 12783)) ;;; Generated autoloads from allout-widgets.el (let ((loads (get 'allout-widgets 'custom-loads))) (if (member '"allout-widgets" loads) nil (put 'allout-widgets 'custom-loads (cons '"allout-widgets" loads)))) @@ -910,7 +910,7 @@ outline hot-spot navigation (see `allout-mode'). ;;;*** ;;;### (autoloads (ange-ftp-hook-function ange-ftp-reread-dir) "ange-ftp" -;;;;;; "net/ange-ftp.el" (20373 11301)) +;;;;;; "net/ange-ftp.el" (20373 62846)) ;;; Generated autoloads from net/ange-ftp.el (defalias 'ange-ftp-re-read-dir 'ange-ftp-reread-dir) @@ -932,7 +932,7 @@ directory, so that Emacs will know its current contents. ;;;*** ;;;### (autoloads (animate-birthday-present animate-sequence animate-string) -;;;;;; "animate" "play/animate.el" (20355 10021)) +;;;;;; "animate" "play/animate.el" (20355 835)) ;;; Generated autoloads from play/animate.el (autoload 'animate-string "animate" "\ @@ -965,7 +965,7 @@ the buffer *Birthday-Present-for-Name*. ;;;*** ;;;### (autoloads (ansi-color-process-output ansi-color-for-comint-mode-on) -;;;;;; "ansi-color" "ansi-color.el" (20355 10021)) +;;;;;; "ansi-color" "ansi-color.el" (20395 5351)) ;;; Generated autoloads from ansi-color.el (autoload 'ansi-color-for-comint-mode-on "ansi-color" "\ @@ -991,7 +991,7 @@ This is a good function to put in `comint-output-filter-functions'. ;;;*** ;;;### (autoloads (antlr-set-tabs antlr-mode antlr-show-makefile-rules) -;;;;;; "antlr-mode" "progmodes/antlr-mode.el" (20355 10021)) +;;;;;; "antlr-mode" "progmodes/antlr-mode.el" (20355 835)) ;;; Generated autoloads from progmodes/antlr-mode.el (autoload 'antlr-show-makefile-rules "antlr-mode" "\ @@ -1027,7 +1027,7 @@ Used in `antlr-mode'. Also a useful function in `java-mode-hook'. ;;;*** ;;;### (autoloads (appt-activate appt-add) "appt" "calendar/appt.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from calendar/appt.el (autoload 'appt-add "appt" "\ @@ -1050,7 +1050,7 @@ ARG is positive, otherwise off. ;;;### (autoloads (apropos-documentation apropos-value apropos-library ;;;;;; apropos apropos-documentation-property apropos-command apropos-variable -;;;;;; apropos-read-pattern) "apropos" "apropos.el" (20374 32165)) +;;;;;; apropos-read-pattern) "apropos" "apropos.el" (20373 62846)) ;;; Generated autoloads from apropos.el (autoload 'apropos-read-pattern "apropos" "\ @@ -1158,8 +1158,8 @@ Returns list of symbols and documentation found. ;;;*** -;;;### (autoloads (archive-mode) "arc-mode" "arc-mode.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (archive-mode) "arc-mode" "arc-mode.el" (20389 +;;;;;; 6410)) ;;; Generated autoloads from arc-mode.el (autoload 'archive-mode "arc-mode" "\ @@ -1179,7 +1179,7 @@ archive. ;;;*** -;;;### (autoloads (array-mode) "array" "array.el" (20355 10021)) +;;;### (autoloads (array-mode) "array" "array.el" (20229 56251)) ;;; Generated autoloads from array.el (autoload 'array-mode "array" "\ @@ -1251,7 +1251,7 @@ Entering array mode calls the function `array-mode-hook'. ;;;*** ;;;### (autoloads (artist-mode) "artist" "textmodes/artist.el" (20357 -;;;;;; 58785)) +;;;;;; 51632)) ;;; Generated autoloads from textmodes/artist.el (autoload 'artist-mode "artist" "\ @@ -1457,7 +1457,7 @@ Keymap summary ;;;*** ;;;### (autoloads (asm-mode) "asm-mode" "progmodes/asm-mode.el" (20355 -;;;;;; 10021)) +;;;;;; 835)) ;;; Generated autoloads from progmodes/asm-mode.el (autoload 'asm-mode "asm-mode" "\ @@ -1485,7 +1485,7 @@ Special commands: ;;;*** ;;;### (autoloads (auth-source-cache-expiry) "auth-source" "gnus/auth-source.el" -;;;;;; (20381 5411)) +;;;;;; (20382 62774)) ;;; Generated autoloads from gnus/auth-source.el (defvar auth-source-cache-expiry 7200 "\ @@ -1498,7 +1498,7 @@ let-binding.") ;;;*** ;;;### (autoloads (autoarg-kp-mode autoarg-mode) "autoarg" "autoarg.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from autoarg.el (defvar autoarg-mode nil "\ @@ -1559,7 +1559,7 @@ This is similar to `autoarg-mode' but rebinds the keypad keys ;;;*** ;;;### (autoloads (autoconf-mode) "autoconf" "progmodes/autoconf.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from progmodes/autoconf.el (autoload 'autoconf-mode "autoconf" "\ @@ -1570,7 +1570,7 @@ Major mode for editing Autoconf configure.in files. ;;;*** ;;;### (autoloads (auto-insert-mode define-auto-insert auto-insert) -;;;;;; "autoinsert" "autoinsert.el" (20355 10021)) +;;;;;; "autoinsert" "autoinsert.el" (20389 6410)) ;;; Generated autoloads from autoinsert.el (autoload 'auto-insert "autoinsert" "\ @@ -1610,7 +1610,7 @@ insert a template for the file depending on the mode of the buffer. ;;;### (autoloads (batch-update-autoloads update-directory-autoloads ;;;;;; update-file-autoloads) "autoload" "emacs-lisp/autoload.el" -;;;;;; (20356 55829)) +;;;;;; (20405 42495)) ;;; Generated autoloads from emacs-lisp/autoload.el (put 'generated-autoload-file 'safe-local-variable 'stringp) @@ -1661,7 +1661,7 @@ should be non-nil). ;;;### (autoloads (global-auto-revert-mode turn-on-auto-revert-tail-mode ;;;;;; auto-revert-tail-mode turn-on-auto-revert-mode auto-revert-mode) -;;;;;; "autorevert" "autorevert.el" (20373 11301)) +;;;;;; "autorevert" "autorevert.el" (20373 62846)) ;;; Generated autoloads from autorevert.el (autoload 'auto-revert-mode "autorevert" "\ @@ -1750,7 +1750,7 @@ specifies in the mode line. ;;;*** ;;;### (autoloads (mouse-avoidance-mode mouse-avoidance-mode) "avoid" -;;;;;; "avoid.el" (20369 14251)) +;;;;;; "avoid.el" (20370 4296)) ;;; Generated autoloads from avoid.el (defvar mouse-avoidance-mode nil "\ @@ -1791,7 +1791,7 @@ definition of \"random distance\".) ;;;*** ;;;### (autoloads (display-battery-mode battery) "battery" "battery.el" -;;;;;; (20369 14251)) +;;;;;; (20370 4296)) ;;; Generated autoloads from battery.el (put 'battery-mode-line-string 'risky-local-variable t) @@ -1827,7 +1827,7 @@ seconds. ;;;*** ;;;### (autoloads (benchmark benchmark-run-compiled benchmark-run) -;;;;;; "benchmark" "emacs-lisp/benchmark.el" (20355 10021)) +;;;;;; "benchmark" "emacs-lisp/benchmark.el" (20229 56251)) ;;; Generated autoloads from emacs-lisp/benchmark.el (autoload 'benchmark-run "benchmark" "\ @@ -1860,7 +1860,7 @@ For non-interactive use see also `benchmark-run' and ;;;*** ;;;### (autoloads (bibtex-search-entry bibtex-mode bibtex-initialize) -;;;;;; "bibtex" "textmodes/bibtex.el" (20355 10021)) +;;;;;; "bibtex" "textmodes/bibtex.el" (20355 835)) ;;; Generated autoloads from textmodes/bibtex.el (autoload 'bibtex-initialize "bibtex" "\ @@ -1949,7 +1949,7 @@ A prefix arg negates the value of `bibtex-search-entry-globally'. ;;;*** ;;;### (autoloads (bibtex-style-mode) "bibtex-style" "textmodes/bibtex-style.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from textmodes/bibtex-style.el (autoload 'bibtex-style-mode "bibtex-style" "\ @@ -1961,7 +1961,7 @@ Major mode for editing BibTeX style files. ;;;### (autoloads (binhex-decode-region binhex-decode-region-external ;;;;;; binhex-decode-region-internal) "binhex" "mail/binhex.el" -;;;;;; (20355 10021)) +;;;;;; (20355 835)) ;;; Generated autoloads from mail/binhex.el (defconst binhex-begin-line "^:...............................................................$" "\ @@ -1985,8 +1985,8 @@ Binhex decode region between START and END. ;;;*** -;;;### (autoloads (blackbox) "blackbox" "play/blackbox.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (blackbox) "blackbox" "play/blackbox.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from play/blackbox.el (autoload 'blackbox "blackbox" "\ @@ -2109,7 +2109,7 @@ a reflection. ;;;;;; bookmark-save bookmark-write bookmark-delete bookmark-insert ;;;;;; bookmark-rename bookmark-insert-location bookmark-relocate ;;;;;; bookmark-jump-other-window bookmark-jump bookmark-set) "bookmark" -;;;;;; "bookmark.el" (20355 10021)) +;;;;;; "bookmark.el" (20400 16870)) ;;; Generated autoloads from bookmark.el (define-key ctl-x-r-map "b" 'bookmark-jump) (define-key ctl-x-r-map "m" 'bookmark-set) @@ -2310,7 +2310,7 @@ Incremental search of bookmarks, hiding the non-matches as we go. ;;;;;; browse-url-xdg-open browse-url-at-mouse browse-url-at-point ;;;;;; browse-url browse-url-of-region browse-url-of-dired-file ;;;;;; browse-url-of-buffer browse-url-of-file browse-url-browser-function) -;;;;;; "browse-url" "net/browse-url.el" (20361 20134)) +;;;;;; "browse-url" "net/browse-url.el" (20395 5351)) ;;; Generated autoloads from net/browse-url.el (defvar browse-url-browser-function 'browse-url-default-browser "\ @@ -2623,26 +2623,10 @@ from `browse-url-elinks-wrapper'. \(fn URL &optional NEW-WINDOW)" t nil) -;;;*** - -;;;### (autoloads (snarf-bruces bruce) "bruce" "play/bruce.el" (20355 -;;;;;; 10021)) -;;; Generated autoloads from play/bruce.el - -(autoload 'bruce "bruce" "\ -Adds that special touch of class to your outgoing mail. - -\(fn)" t nil) - -(autoload 'snarf-bruces "bruce" "\ -Return a vector containing the lines from `bruce-phrases-file'. - -\(fn)" nil nil) - ;;;*** ;;;### (autoloads (bs-show bs-customize bs-cycle-previous bs-cycle-next) -;;;;;; "bs" "bs.el" (20369 14251)) +;;;;;; "bs" "bs.el" (20370 4296)) ;;; Generated autoloads from bs.el (autoload 'bs-cycle-next "bs" "\ @@ -2682,7 +2666,7 @@ name of buffer configuration. ;;;*** -;;;### (autoloads (bubbles) "bubbles" "play/bubbles.el" (20355 10021)) +;;;### (autoloads (bubbles) "bubbles" "play/bubbles.el" (20229 56251)) ;;; Generated autoloads from play/bubbles.el (autoload 'bubbles "bubbles" "\ @@ -2704,7 +2688,7 @@ columns on its right towards the left. ;;;*** ;;;### (autoloads (bug-reference-prog-mode bug-reference-mode) "bug-reference" -;;;;;; "progmodes/bug-reference.el" (20355 10021)) +;;;;;; "progmodes/bug-reference.el" (20229 56251)) ;;; Generated autoloads from progmodes/bug-reference.el (put 'bug-reference-url-format 'safe-local-variable (lambda (s) (or (stringp s) (and (symbolp s) (get s 'bug-reference-url-format))))) @@ -2728,7 +2712,7 @@ Like `bug-reference-mode', but only buttonize in comments and strings. ;;;;;; batch-byte-compile-if-not-done display-call-tree byte-compile ;;;;;; compile-defun byte-compile-file byte-recompile-directory ;;;;;; byte-force-recompile byte-compile-enable-warning byte-compile-disable-warning) -;;;;;; "bytecomp" "emacs-lisp/bytecomp.el" (20355 10021)) +;;;;;; "bytecomp" "emacs-lisp/bytecomp.el" (20387 12783)) ;;; Generated autoloads from emacs-lisp/bytecomp.el (put 'byte-compile-dynamic 'safe-local-variable 'booleanp) (put 'byte-compile-disable-print-circle 'safe-local-variable 'booleanp) @@ -2848,8 +2832,8 @@ and corresponding effects. ;;;*** -;;;### (autoloads nil "cal-china" "calendar/cal-china.el" (20355 -;;;;;; 10021)) +;;;### (autoloads nil "cal-china" "calendar/cal-china.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from calendar/cal-china.el (put 'calendar-chinese-time-zone 'risky-local-variable t) @@ -2858,7 +2842,7 @@ and corresponding effects. ;;;*** -;;;### (autoloads nil "cal-dst" "calendar/cal-dst.el" (20355 10021)) +;;;### (autoloads nil "cal-dst" "calendar/cal-dst.el" (20229 56251)) ;;; Generated autoloads from calendar/cal-dst.el (put 'calendar-daylight-savings-starts 'risky-local-variable t) @@ -2870,7 +2854,7 @@ and corresponding effects. ;;;*** ;;;### (autoloads (calendar-hebrew-list-yahrzeits) "cal-hebrew" "calendar/cal-hebrew.el" -;;;;;; (20355 10021)) +;;;;;; (20286 28414)) ;;; Generated autoloads from calendar/cal-hebrew.el (autoload 'calendar-hebrew-list-yahrzeits "cal-hebrew" "\ @@ -2887,7 +2871,7 @@ from the cursor position. ;;;### (autoloads (defmath calc-embedded-activate calc-embedded calc-grab-rectangle ;;;;;; calc-grab-region full-calc-keypad calc-keypad calc-eval quick-calc ;;;;;; full-calc calc calc-dispatch) "calc" "calc/calc.el" (20373 -;;;;;; 11301)) +;;;;;; 62846)) ;;; Generated autoloads from calc/calc.el (define-key ctl-x-map "*" 'calc-dispatch) @@ -2971,8 +2955,8 @@ See Info node `(calc)Defining Functions'. ;;;*** -;;;### (autoloads (calc-undo) "calc-undo" "calc/calc-undo.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (calc-undo) "calc-undo" "calc/calc-undo.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from calc/calc-undo.el (autoload 'calc-undo "calc-undo" "\ @@ -2982,8 +2966,8 @@ See Info node `(calc)Defining Functions'. ;;;*** -;;;### (autoloads (calculator) "calculator" "calculator.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (calculator) "calculator" "calculator.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from calculator.el (autoload 'calculator "calculator" "\ @@ -2994,8 +2978,8 @@ See the documentation for `calculator-mode' for more information. ;;;*** -;;;### (autoloads (calendar) "calendar" "calendar/calendar.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (calendar) "calendar" "calendar/calendar.el" (20389 +;;;;;; 6410)) ;;; Generated autoloads from calendar/calendar.el (autoload 'calendar "calendar" "\ @@ -3039,7 +3023,7 @@ This function is suitable for execution in a .emacs file. ;;;*** ;;;### (autoloads (canlock-verify canlock-insert-header) "canlock" -;;;;;; "gnus/canlock.el" (20355 10021)) +;;;;;; "gnus/canlock.el" (20229 56251)) ;;; Generated autoloads from gnus/canlock.el (autoload 'canlock-insert-header "canlock" "\ @@ -3057,7 +3041,7 @@ it fails. ;;;*** ;;;### (autoloads (capitalized-words-mode) "cap-words" "progmodes/cap-words.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from progmodes/cap-words.el (autoload 'capitalized-words-mode "cap-words" "\ @@ -3096,15 +3080,15 @@ Obsoletes `c-forward-into-nomenclature'. ;;;*** -;;;### (autoloads nil "cc-compat" "progmodes/cc-compat.el" (20355 -;;;;;; 10021)) +;;;### (autoloads nil "cc-compat" "progmodes/cc-compat.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from progmodes/cc-compat.el (put 'c-indent-level 'safe-local-variable 'integerp) ;;;*** ;;;### (autoloads (c-guess-basic-syntax) "cc-engine" "progmodes/cc-engine.el" -;;;;;; (20373 11301)) +;;;;;; (20373 62846)) ;;; Generated autoloads from progmodes/cc-engine.el (autoload 'c-guess-basic-syntax "cc-engine" "\ @@ -3116,7 +3100,7 @@ Return the syntactic context of the current line. ;;;### (autoloads (c-guess-install c-guess-region-no-install c-guess-region ;;;;;; c-guess-buffer-no-install c-guess-buffer c-guess-no-install -;;;;;; c-guess) "cc-guess" "progmodes/cc-guess.el" (20355 10021)) +;;;;;; c-guess) "cc-guess" "progmodes/cc-guess.el" (20280 8018)) ;;; Generated autoloads from progmodes/cc-guess.el (defvar c-guess-guessed-offsets-alist nil "\ @@ -3216,7 +3200,7 @@ the absolute file name of the file if STYLE-NAME is nil. ;;;### (autoloads (awk-mode pike-mode idl-mode java-mode objc-mode ;;;;;; c++-mode c-mode c-initialize-cc-mode) "cc-mode" "progmodes/cc-mode.el" -;;;;;; (20369 14251)) +;;;;;; (20370 4296)) ;;; Generated autoloads from progmodes/cc-mode.el (autoload 'c-initialize-cc-mode "cc-mode" "\ @@ -3393,7 +3377,7 @@ Key bindings: ;;;*** ;;;### (autoloads (c-set-offset c-add-style c-set-style) "cc-styles" -;;;;;; "progmodes/cc-styles.el" (20355 10021)) +;;;;;; "progmodes/cc-styles.el" (20229 56251)) ;;; Generated autoloads from progmodes/cc-styles.el (autoload 'c-set-style "cc-styles" "\ @@ -3444,7 +3428,7 @@ and exists only for compatibility reasons. ;;;*** -;;;### (autoloads nil "cc-vars" "progmodes/cc-vars.el" (20355 10021)) +;;;### (autoloads nil "cc-vars" "progmodes/cc-vars.el" (20280 8018)) ;;; Generated autoloads from progmodes/cc-vars.el (put 'c-basic-offset 'safe-local-variable 'integerp) (put 'c-backslash-column 'safe-local-variable 'integerp) @@ -3454,7 +3438,7 @@ and exists only for compatibility reasons. ;;;### (autoloads (ccl-execute-with-args check-ccl-program define-ccl-program ;;;;;; declare-ccl-program ccl-dump ccl-compile) "ccl" "international/ccl.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from international/ccl.el (autoload 'ccl-compile "ccl" "\ @@ -3715,7 +3699,7 @@ See the documentation of `define-ccl-program' for the detail of CCL program. ;;;*** ;;;### (autoloads (cconv-closure-convert) "cconv" "emacs-lisp/cconv.el" -;;;;;; (20377 8374)) +;;;;;; (20376 44718)) ;;; Generated autoloads from emacs-lisp/cconv.el (autoload 'cconv-closure-convert "cconv" "\ @@ -3730,7 +3714,7 @@ Returns a form where all lambdas don't have any free variables. ;;;*** ;;;### (autoloads (cfengine-auto-mode cfengine2-mode cfengine3-mode) -;;;;;; "cfengine" "progmodes/cfengine.el" (20355 10021)) +;;;;;; "cfengine" "progmodes/cfengine.el" (20355 835)) ;;; Generated autoloads from progmodes/cfengine.el (autoload 'cfengine3-mode "cfengine" "\ @@ -3760,7 +3744,7 @@ on the buffer contents ;;;*** ;;;### (autoloads (check-declare-directory check-declare-file) "check-declare" -;;;;;; "emacs-lisp/check-declare.el" (20378 29222)) +;;;;;; "emacs-lisp/check-declare.el" (20379 60745)) ;;; Generated autoloads from emacs-lisp/check-declare.el (autoload 'check-declare-file "check-declare" "\ @@ -3785,7 +3769,7 @@ Returns non-nil if any false statements are found. ;;;;;; checkdoc-comments checkdoc-continue checkdoc-start checkdoc-current-buffer ;;;;;; checkdoc-eval-current-buffer checkdoc-message-interactive ;;;;;; checkdoc-interactive checkdoc checkdoc-list-of-strings-p) -;;;;;; "checkdoc" "emacs-lisp/checkdoc.el" (20355 10021)) +;;;;;; "checkdoc" "emacs-lisp/checkdoc.el" (20389 6410)) ;;; Generated autoloads from emacs-lisp/checkdoc.el (put 'checkdoc-force-docstrings-flag 'safe-local-variable 'booleanp) (put 'checkdoc-force-history-flag 'safe-local-variable 'booleanp) @@ -3981,7 +3965,7 @@ checking of documentation strings. ;;;### (autoloads (pre-write-encode-hz post-read-decode-hz encode-hz-buffer ;;;;;; encode-hz-region decode-hz-buffer decode-hz-region) "china-util" -;;;;;; "language/china-util.el" (20355 10021)) +;;;;;; "language/china-util.el" (20229 56251)) ;;; Generated autoloads from language/china-util.el (autoload 'decode-hz-region "china-util" "\ @@ -4019,7 +4003,7 @@ Encode the text in the current buffer to HZ. ;;;*** ;;;### (autoloads (command-history list-command-history repeat-matching-complex-command) -;;;;;; "chistory" "chistory.el" (20355 10021)) +;;;;;; "chistory" "chistory.el" (20229 56251)) ;;; Generated autoloads from chistory.el (autoload 'repeat-matching-complex-command "chistory" "\ @@ -4058,7 +4042,7 @@ and runs the normal hook `command-history-hook'. ;;;*** -;;;### (autoloads nil "cl" "emacs-lisp/cl.el" (20355 10021)) +;;;### (autoloads nil "cl" "emacs-lisp/cl.el" (20405 42971)) ;;; Generated autoloads from emacs-lisp/cl.el (defvar custom-print-functions nil "\ @@ -4071,10 +4055,18 @@ printer proceeds to the next function on the list. This variable is not used at present, but it is defined in hopes that a future Emacs interpreter will be able to use it.") +(put 'defun* 'doc-string-elt 3) + +(put 'defmacro* 'doc-string-elt 3) + +(put 'defsubst 'doc-string-elt 3) + +(put 'defstruct 'doc-string-elt 2) + ;;;*** ;;;### (autoloads (common-lisp-indent-function) "cl-indent" "emacs-lisp/cl-indent.el" -;;;;;; (20355 10021)) +;;;;;; (20280 8018)) ;;; Generated autoloads from emacs-lisp/cl-indent.el (autoload 'common-lisp-indent-function "cl-indent" "\ @@ -4153,7 +4145,7 @@ For example, the function `case' has an indent property ;;;*** ;;;### (autoloads (c-macro-expand) "cmacexp" "progmodes/cmacexp.el" -;;;;;; (20355 10021)) +;;;;;; (20355 835)) ;;; Generated autoloads from progmodes/cmacexp.el (autoload 'c-macro-expand "cmacexp" "\ @@ -4173,8 +4165,8 @@ For use inside Lisp programs, see also `c-macro-expansion'. ;;;*** -;;;### (autoloads (run-scheme) "cmuscheme" "cmuscheme.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (run-scheme) "cmuscheme" "cmuscheme.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from cmuscheme.el (autoload 'run-scheme "cmuscheme" "\ @@ -4194,7 +4186,7 @@ is run). ;;;*** -;;;### (autoloads (color-name-to-rgb) "color" "color.el" (20355 10021)) +;;;### (autoloads (color-name-to-rgb) "color" "color.el" (20350 14460)) ;;; Generated autoloads from color.el (autoload 'color-name-to-rgb "color" "\ @@ -4216,7 +4208,7 @@ If FRAME cannot display COLOR, return nil. ;;;### (autoloads (comint-redirect-results-list-from-process comint-redirect-results-list ;;;;;; comint-redirect-send-command-to-process comint-redirect-send-command ;;;;;; comint-run make-comint make-comint-in-buffer) "comint" "comint.el" -;;;;;; (20376 40834)) +;;;;;; (20405 16851)) ;;; Generated autoloads from comint.el (defvar comint-output-filter-functions '(ansi-color-process-output comint-postoutput-scroll-to-bottom comint-watch-for-password-prompt) "\ @@ -4316,7 +4308,7 @@ REGEXP-GROUP is the regular expression group in REGEXP to use. ;;;*** ;;;### (autoloads (compare-windows) "compare-w" "vc/compare-w.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from vc/compare-w.el (autoload 'compare-windows "compare-w" "\ @@ -4353,8 +4345,8 @@ on third call it again advances points to the next difference and so on. ;;;;;; compilation-shell-minor-mode compilation-mode compilation-start ;;;;;; compile compilation-disable-input compile-command compilation-search-path ;;;;;; compilation-ask-about-save compilation-window-height compilation-start-hook -;;;;;; compilation-mode-hook) "compile" "progmodes/compile.el" (20355 -;;;;;; 10021)) +;;;;;; compilation-mode-hook) "compile" "progmodes/compile.el" (20405 +;;;;;; 42899)) ;;; Generated autoloads from progmodes/compile.el (defvar compilation-mode-hook nil "\ @@ -4500,6 +4492,8 @@ Runs `compilation-mode-hook' with `run-mode-hooks' (which see). \(fn &optional NAME-OF-MODE)" t nil) +(put 'define-compilation-mode 'doc-string-elt 3) + (autoload 'compilation-shell-minor-mode "compile" "\ Toggle Compilation Shell minor mode. With a prefix argument ARG, enable Compilation Shell minor mode @@ -4534,7 +4528,7 @@ This is the value of `next-error-function' in Compilation buffers. ;;;*** ;;;### (autoloads (dynamic-completion-mode) "completion" "completion.el" -;;;;;; (20355 10021)) +;;;;;; (20389 6410)) ;;; Generated autoloads from completion.el (defvar dynamic-completion-mode nil "\ @@ -4559,7 +4553,7 @@ if ARG is omitted or nil. ;;;### (autoloads (conf-xdefaults-mode conf-ppd-mode conf-colon-mode ;;;;;; conf-space-keywords conf-space-mode conf-javaprop-mode conf-windows-mode ;;;;;; conf-unix-mode conf-mode) "conf-mode" "textmodes/conf-mode.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from textmodes/conf-mode.el (autoload 'conf-mode "conf-mode" "\ @@ -4715,7 +4709,7 @@ For details see `conf-mode'. Example: ;;;*** ;;;### (autoloads (shuffle-vector cookie-snarf cookie-insert cookie) -;;;;;; "cookie1" "play/cookie1.el" (20364 27900)) +;;;;;; "cookie1" "play/cookie1.el" (20370 4296)) ;;; Generated autoloads from play/cookie1.el (autoload 'cookie "cookie1" "\ @@ -4747,8 +4741,8 @@ Randomly permute the elements of VECTOR (all permutations equally likely). ;;;*** ;;;### (autoloads (copyright-update-directory copyright copyright-fix-years -;;;;;; copyright-update) "copyright" "emacs-lisp/copyright.el" (20355 -;;;;;; 10021)) +;;;;;; copyright-update) "copyright" "emacs-lisp/copyright.el" (20389 +;;;;;; 6410)) ;;; Generated autoloads from emacs-lisp/copyright.el (put 'copyright-at-end-flag 'safe-local-variable 'booleanp) (put 'copyright-names-regexp 'safe-local-variable 'stringp) @@ -4787,7 +4781,7 @@ If FIX is non-nil, run `copyright-fix-years' instead. ;;;*** ;;;### (autoloads (cperl-perldoc-at-point cperl-perldoc cperl-mode) -;;;;;; "cperl-mode" "progmodes/cperl-mode.el" (20355 10021)) +;;;;;; "cperl-mode" "progmodes/cperl-mode.el" (20229 56251)) ;;; Generated autoloads from progmodes/cperl-mode.el (put 'cperl-indent-level 'safe-local-variable 'integerp) (put 'cperl-brace-offset 'safe-local-variable 'integerp) @@ -4986,7 +4980,7 @@ Run a `perldoc' on the word around point. ;;;*** ;;;### (autoloads (cpp-parse-edit cpp-highlight-buffer) "cpp" "progmodes/cpp.el" -;;;;;; (20355 10021)) +;;;;;; (20355 835)) ;;; Generated autoloads from progmodes/cpp.el (autoload 'cpp-highlight-buffer "cpp" "\ @@ -5005,7 +4999,7 @@ Edit display information for cpp conditionals. ;;;*** ;;;### (autoloads (crisp-mode crisp-mode) "crisp" "emulation/crisp.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from emulation/crisp.el (defvar crisp-mode nil "\ @@ -5031,7 +5025,7 @@ if ARG is omitted or nil. ;;;*** ;;;### (autoloads (completing-read-multiple) "crm" "emacs-lisp/crm.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from emacs-lisp/crm.el (autoload 'completing-read-multiple "crm" "\ @@ -5066,8 +5060,8 @@ INHERIT-INPUT-METHOD. ;;;*** -;;;### (autoloads (css-mode) "css-mode" "textmodes/css-mode.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (css-mode) "css-mode" "textmodes/css-mode.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from textmodes/css-mode.el (autoload 'css-mode "css-mode" "\ @@ -5078,7 +5072,7 @@ Major mode to edit Cascading Style Sheets. ;;;*** ;;;### (autoloads (cua-selection-mode cua-mode) "cua-base" "emulation/cua-base.el" -;;;;;; (20361 20134)) +;;;;;; (20360 57703)) ;;; Generated autoloads from emulation/cua-base.el (defvar cua-mode nil "\ @@ -5138,7 +5132,7 @@ Enable CUA selection mode without the C-z/C-x/C-c/C-v bindings. ;;;;;; customize-mode customize customize-push-and-save customize-save-variable ;;;;;; customize-set-variable customize-set-value custom-menu-sort-alphabetically ;;;;;; custom-buffer-sort-alphabetically custom-browse-sort-alphabetically) -;;;;;; "cus-edit" "cus-edit.el" (20375 53029)) +;;;;;; "cus-edit" "cus-edit.el" (20400 16870)) ;;; Generated autoloads from cus-edit.el (defvar custom-browse-sort-alphabetically nil "\ @@ -5450,8 +5444,8 @@ The format is suitable for use with `easy-menu-define'. ;;;*** ;;;### (autoloads (customize-themes describe-theme custom-theme-visit-theme -;;;;;; customize-create-theme) "cus-theme" "cus-theme.el" (20355 -;;;;;; 10021)) +;;;;;; customize-create-theme) "cus-theme" "cus-theme.el" (20339 +;;;;;; 13356)) ;;; Generated autoloads from cus-theme.el (autoload 'customize-create-theme "cus-theme" "\ @@ -5485,7 +5479,7 @@ omitted, a buffer named *Custom Themes* is used. ;;;*** ;;;### (autoloads (cvs-status-mode) "cvs-status" "vc/cvs-status.el" -;;;;;; (20355 10021)) +;;;;;; (20355 835)) ;;; Generated autoloads from vc/cvs-status.el (autoload 'cvs-status-mode "cvs-status" "\ @@ -5496,7 +5490,7 @@ Mode used for cvs status output. ;;;*** ;;;### (autoloads (global-cwarn-mode turn-on-cwarn-mode cwarn-mode) -;;;;;; "cwarn" "progmodes/cwarn.el" (20355 10021)) +;;;;;; "cwarn" "progmodes/cwarn.el" (20355 835)) ;;; Generated autoloads from progmodes/cwarn.el (autoload 'cwarn-mode "cwarn" "\ @@ -5547,7 +5541,7 @@ See `cwarn-mode' for more information on Cwarn mode. ;;;### (autoloads (standard-display-cyrillic-translit cyrillic-encode-alternativnyj-char ;;;;;; cyrillic-encode-koi8-r-char) "cyril-util" "language/cyril-util.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from language/cyril-util.el (autoload 'cyrillic-encode-koi8-r-char "cyril-util" "\ @@ -5576,7 +5570,7 @@ If the argument is nil, we return the display table to its standard state. ;;;*** ;;;### (autoloads (dabbrev-expand dabbrev-completion) "dabbrev" "dabbrev.el" -;;;;;; (20355 10021)) +;;;;;; (20397 19651)) ;;; Generated autoloads from dabbrev.el (put 'dabbrev-case-fold-search 'risky-local-variable t) (put 'dabbrev-case-replace 'risky-local-variable t) @@ -5623,7 +5617,7 @@ See also `dabbrev-abbrev-char-regexp' and \\[dabbrev-completion]. ;;;*** ;;;### (autoloads (data-debug-new-buffer) "data-debug" "cedet/data-debug.el" -;;;;;; (20355 10021)) +;;;;;; (20355 835)) ;;; Generated autoloads from cedet/data-debug.el (autoload 'data-debug-new-buffer "data-debug" "\ @@ -5633,8 +5627,8 @@ Create a new data-debug buffer with NAME. ;;;*** -;;;### (autoloads (dbus-handle-event) "dbus" "net/dbus.el" (20373 -;;;;;; 11301)) +;;;### (autoloads (dbus-handle-event) "dbus" "net/dbus.el" (20400 +;;;;;; 16870)) ;;; Generated autoloads from net/dbus.el (autoload 'dbus-handle-event "dbus" "\ @@ -5648,7 +5642,7 @@ If the HANDLER returns a `dbus-error', it is propagated as return message. ;;;*** ;;;### (autoloads (dcl-mode) "dcl-mode" "progmodes/dcl-mode.el" (20355 -;;;;;; 10021)) +;;;;;; 835)) ;;; Generated autoloads from progmodes/dcl-mode.el (autoload 'dcl-mode "dcl-mode" "\ @@ -5775,7 +5769,7 @@ There is some minimal font-lock support (see vars ;;;*** ;;;### (autoloads (cancel-debug-on-entry debug-on-entry debug) "debug" -;;;;;; "emacs-lisp/debug.el" (20355 10021)) +;;;;;; "emacs-lisp/debug.el" (20229 56251)) ;;; Generated autoloads from emacs-lisp/debug.el (setq debugger 'debug) @@ -5819,7 +5813,7 @@ To specify a nil argument interactively, exit with an empty minibuffer. ;;;*** ;;;### (autoloads (decipher-mode decipher) "decipher" "play/decipher.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from play/decipher.el (autoload 'decipher "decipher" "\ @@ -5848,8 +5842,8 @@ The most useful commands are: ;;;*** ;;;### (autoloads (delimit-columns-rectangle delimit-columns-region -;;;;;; delimit-columns-customize) "delim-col" "delim-col.el" (20355 -;;;;;; 10021)) +;;;;;; delimit-columns-customize) "delim-col" "delim-col.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from delim-col.el (autoload 'delimit-columns-customize "delim-col" "\ @@ -5874,7 +5868,7 @@ START and END delimits the corners of text rectangle. ;;;*** ;;;### (autoloads (delphi-mode) "delphi" "progmodes/delphi.el" (20355 -;;;;;; 10021)) +;;;;;; 835)) ;;; Generated autoloads from progmodes/delphi.el (autoload 'delphi-mode "delphi" "\ @@ -5925,8 +5919,8 @@ with no args, if that value is non-nil. ;;;*** -;;;### (autoloads (delete-selection-mode) "delsel" "delsel.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (delete-selection-mode) "delsel" "delsel.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from delsel.el (defalias 'pending-delete-mode 'delete-selection-mode) @@ -5956,7 +5950,7 @@ any selection. ;;;*** ;;;### (autoloads (derived-mode-init-mode-variables define-derived-mode) -;;;;;; "derived" "emacs-lisp/derived.el" (20355 10021)) +;;;;;; "derived" "emacs-lisp/derived.el" (20229 56251)) ;;; Generated autoloads from emacs-lisp/derived.el (autoload 'define-derived-mode "derived" "\ @@ -6023,7 +6017,7 @@ the first time the mode is used. ;;;*** ;;;### (autoloads (describe-char describe-text-properties) "descr-text" -;;;;;; "descr-text.el" (20369 14251)) +;;;;;; "descr-text.el" (20370 4296)) ;;; Generated autoloads from descr-text.el (autoload 'describe-text-properties "descr-text" "\ @@ -6060,7 +6054,7 @@ relevant to POS. ;;;### (autoloads (desktop-revert desktop-save-in-desktop-dir desktop-change-dir ;;;;;; desktop-load-default desktop-read desktop-remove desktop-save ;;;;;; desktop-clear desktop-locals-to-save desktop-save-mode) "desktop" -;;;;;; "desktop.el" (20355 10021)) +;;;;;; "desktop.el" (20400 16870)) ;;; Generated autoloads from desktop.el (defvar desktop-save-mode nil "\ @@ -6247,7 +6241,7 @@ Revert to the last loaded desktop. ;;;### (autoloads (gnus-article-outlook-deuglify-article gnus-outlook-deuglify-article ;;;;;; gnus-article-outlook-repair-attribution gnus-article-outlook-unwrap-lines) -;;;;;; "deuglify" "gnus/deuglify.el" (20355 10021)) +;;;;;; "deuglify" "gnus/deuglify.el" (20229 56251)) ;;; Generated autoloads from gnus/deuglify.el (autoload 'gnus-article-outlook-unwrap-lines "deuglify" "\ @@ -6280,7 +6274,7 @@ Deuglify broken Outlook (Express) articles and redisplay. ;;;*** ;;;### (autoloads (diary-mode diary-mail-entries diary) "diary-lib" -;;;;;; "calendar/diary-lib.el" (20355 10021)) +;;;;;; "calendar/diary-lib.el" (20288 9499)) ;;; Generated autoloads from calendar/diary-lib.el (autoload 'diary "diary-lib" "\ @@ -6323,7 +6317,7 @@ Major mode for editing the diary file. ;;;*** ;;;### (autoloads (diff-buffer-with-file diff-backup diff diff-command -;;;;;; diff-switches) "diff" "vc/diff.el" (20379 50083)) +;;;;;; diff-switches) "diff" "vc/diff.el" (20379 60745)) ;;; Generated autoloads from vc/diff.el (defvar diff-switches (purecopy "-c") "\ @@ -6367,7 +6361,7 @@ This requires the external program `diff' to be in your `exec-path'. ;;;*** ;;;### (autoloads (diff-minor-mode diff-mode) "diff-mode" "vc/diff-mode.el" -;;;;;; (20377 8374)) +;;;;;; (20377 16772)) ;;; Generated autoloads from vc/diff-mode.el (autoload 'diff-mode "diff-mode" "\ @@ -6399,7 +6393,7 @@ the mode if ARG is omitted or nil. ;;;*** -;;;### (autoloads (dig) "dig" "net/dig.el" (20355 10021)) +;;;### (autoloads (dig) "dig" "net/dig.el" (20229 56251)) ;;; Generated autoloads from net/dig.el (autoload 'dig "dig" "\ @@ -6411,7 +6405,7 @@ Optional arguments are passed to `dig-invoke'. ;;;*** ;;;### (autoloads (dired-mode dired-noselect dired-other-frame dired-other-window -;;;;;; dired dired-listing-switches) "dired" "dired.el" (20378 29222)) +;;;;;; dired dired-listing-switches) "dired" "dired.el" (20400 16870)) ;;; Generated autoloads from dired.el (defvar dired-listing-switches (purecopy "-al") "\ @@ -6533,7 +6527,7 @@ Keybindings: ;;;*** ;;;### (autoloads (dirtrack dirtrack-mode) "dirtrack" "dirtrack.el" -;;;;;; (20355 10021)) +;;;;;; (20400 16870)) ;;; Generated autoloads from dirtrack.el (autoload 'dirtrack-mode "dirtrack" "\ @@ -6563,8 +6557,8 @@ from `default-directory'. ;;;*** -;;;### (autoloads (disassemble) "disass" "emacs-lisp/disass.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (disassemble) "disass" "emacs-lisp/disass.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from emacs-lisp/disass.el (autoload 'disassemble "disass" "\ @@ -6583,7 +6577,7 @@ redefine OBJECT if it is a symbol. ;;;;;; standard-display-g1 standard-display-ascii standard-display-default ;;;;;; standard-display-8bit describe-current-display-table describe-display-table ;;;;;; set-display-table-slot display-table-slot make-display-table) -;;;;;; "disp-table" "disp-table.el" (20355 10021)) +;;;;;; "disp-table" "disp-table.el" (20229 56251)) ;;; Generated autoloads from disp-table.el (autoload 'make-display-table "disp-table" "\ @@ -6705,7 +6699,7 @@ in `.emacs'. ;;;*** ;;;### (autoloads (dissociated-press) "dissociate" "play/dissociate.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from play/dissociate.el (autoload 'dissociated-press "dissociate" "\ @@ -6721,7 +6715,7 @@ Default is 2. ;;;*** -;;;### (autoloads (dnd-protocol-alist) "dnd" "dnd.el" (20355 10021)) +;;;### (autoloads (dnd-protocol-alist) "dnd" "dnd.el" (20229 56251)) ;;; Generated autoloads from dnd.el (defvar dnd-protocol-alist `((,(purecopy "^file:///") . dnd-open-local-file) (,(purecopy "^file://") . dnd-open-file) (,(purecopy "^file:") . dnd-open-local-file) (,(purecopy "^\\(https?\\|ftp\\|file\\|nfs\\)://") . dnd-open-file)) "\ @@ -6742,7 +6736,7 @@ if some action was made, or nil if the URL is ignored.") ;;;*** ;;;### (autoloads (dns-mode-soa-increment-serial dns-mode) "dns-mode" -;;;;;; "textmodes/dns-mode.el" (20355 10021)) +;;;;;; "textmodes/dns-mode.el" (20229 56251)) ;;; Generated autoloads from textmodes/dns-mode.el (autoload 'dns-mode "dns-mode" "\ @@ -6766,8 +6760,8 @@ Locate SOA record and increment the serial field. ;;;*** ;;;### (autoloads (doc-view-bookmark-jump doc-view-minor-mode doc-view-mode-maybe -;;;;;; doc-view-mode doc-view-mode-p) "doc-view" "doc-view.el" (20378 -;;;;;; 29222)) +;;;;;; doc-view-mode doc-view-mode-p) "doc-view" "doc-view.el" (20376 +;;;;;; 50510)) ;;; Generated autoloads from doc-view.el (autoload 'doc-view-mode-p "doc-view" "\ @@ -6813,7 +6807,7 @@ See the command `doc-view-mode' for more information on this mode. ;;;*** -;;;### (autoloads (doctor) "doctor" "play/doctor.el" (20355 10021)) +;;;### (autoloads (doctor) "doctor" "play/doctor.el" (20235 37244)) ;;; Generated autoloads from play/doctor.el (autoload 'doctor "doctor" "\ @@ -6823,7 +6817,7 @@ Switch to *doctor* buffer and start giving psychotherapy. ;;;*** -;;;### (autoloads (double-mode) "double" "double.el" (20355 10021)) +;;;### (autoloads (double-mode) "double" "double.el" (20229 56251)) ;;; Generated autoloads from double.el (autoload 'double-mode "double" "\ @@ -6839,7 +6833,7 @@ strings when pressed twice. See `double-map' for details. ;;;*** -;;;### (autoloads (dunnet) "dunnet" "play/dunnet.el" (20355 10021)) +;;;### (autoloads (dunnet) "dunnet" "play/dunnet.el" (20229 56251)) ;;; Generated autoloads from play/dunnet.el (autoload 'dunnet "dunnet" "\ @@ -6851,7 +6845,7 @@ Switch to *dungeon* buffer and start game. ;;;### (autoloads (easy-mmode-defsyntax easy-mmode-defmap easy-mmode-define-keymap ;;;;;; define-globalized-minor-mode define-minor-mode) "easy-mmode" -;;;;;; "emacs-lisp/easy-mmode.el" (20362 40996)) +;;;;;; "emacs-lisp/easy-mmode.el" (20405 42390)) ;;; Generated autoloads from emacs-lisp/easy-mmode.el (defalias 'easy-mmode-define-minor-mode 'define-minor-mode) @@ -6917,6 +6911,8 @@ For example, you could write \(fn MODE DOC &optional INIT-VALUE LIGHTER KEYMAP &rest BODY)" nil (quote macro)) +(put 'define-minor-mode 'doc-string-elt '2) + (defalias 'easy-mmode-define-global-mode 'define-globalized-minor-mode) (defalias 'define-global-minor-mode 'define-globalized-minor-mode) @@ -6942,6 +6938,8 @@ call another major mode in their body. \(fn GLOBAL-MODE MODE TURN-ON &rest KEYS)" nil (quote macro)) +(put 'define-globalized-minor-mode 'doc-string-elt '2) + (autoload 'easy-mmode-define-keymap "easy-mmode" "\ Return a keymap built from bindings BS. BS must be a list of (KEY . BINDING) where @@ -6977,8 +6975,8 @@ CSS contains a list of syntax specifications of the form (CHAR . SYNTAX). ;;;*** ;;;### (autoloads (easy-menu-change easy-menu-create-menu easy-menu-do-define -;;;;;; easy-menu-define) "easymenu" "emacs-lisp/easymenu.el" (20355 -;;;;;; 10021)) +;;;;;; easy-menu-define) "easymenu" "emacs-lisp/easymenu.el" (20304 +;;;;;; 58723)) ;;; Generated autoloads from emacs-lisp/easymenu.el (autoload 'easy-menu-define "easymenu" "\ @@ -7132,7 +7130,7 @@ To implement dynamic menus, either call this from ;;;;;; ebnf-eps-file ebnf-eps-directory ebnf-spool-region ebnf-spool-buffer ;;;;;; ebnf-spool-file ebnf-spool-directory ebnf-print-region ebnf-print-buffer ;;;;;; ebnf-print-file ebnf-print-directory ebnf-customize) "ebnf2ps" -;;;;;; "progmodes/ebnf2ps.el" (20373 11301)) +;;;;;; "progmodes/ebnf2ps.el" (20373 62846)) ;;; Generated autoloads from progmodes/ebnf2ps.el (autoload 'ebnf-customize "ebnf2ps" "\ @@ -7400,14 +7398,13 @@ See `ebnf-style-database' documentation. ;;;;;; ebrowse-electric-position-menu ebrowse-forward-in-position-stack ;;;;;; ebrowse-back-in-position-stack ebrowse-tags-search-member-use ;;;;;; ebrowse-tags-query-replace ebrowse-tags-search ebrowse-tags-loop-continue -;;;;;; ebrowse-tags-complete-symbol ebrowse-tags-find-definition-other-frame -;;;;;; ebrowse-tags-view-definition-other-frame ebrowse-tags-find-declaration-other-frame -;;;;;; ebrowse-tags-find-definition-other-window ebrowse-tags-view-definition-other-window -;;;;;; ebrowse-tags-find-declaration-other-window ebrowse-tags-find-definition -;;;;;; ebrowse-tags-view-definition ebrowse-tags-find-declaration -;;;;;; ebrowse-tags-view-declaration ebrowse-member-mode ebrowse-electric-choose-tree -;;;;;; ebrowse-tree-mode) "ebrowse" "progmodes/ebrowse.el" (20355 -;;;;;; 10021)) +;;;;;; ebrowse-tags-find-definition-other-frame ebrowse-tags-view-definition-other-frame +;;;;;; ebrowse-tags-find-declaration-other-frame ebrowse-tags-find-definition-other-window +;;;;;; ebrowse-tags-view-definition-other-window ebrowse-tags-find-declaration-other-window +;;;;;; ebrowse-tags-find-definition ebrowse-tags-view-definition +;;;;;; ebrowse-tags-find-declaration ebrowse-tags-view-declaration +;;;;;; ebrowse-member-mode ebrowse-electric-choose-tree ebrowse-tree-mode) +;;;;;; "ebrowse" "progmodes/ebrowse.el" (20355 835)) ;;; Generated autoloads from progmodes/ebrowse.el (autoload 'ebrowse-tree-mode "ebrowse" "\ @@ -7482,14 +7479,6 @@ Find definition of member at point in other frame. \(fn)" t nil) -(autoload 'ebrowse-tags-complete-symbol "ebrowse" "\ -Perform completion on the C++ symbol preceding point. -A second call of this function without changing point inserts the next match. -A call with prefix PREFIX reads the symbol to insert from the minibuffer with -completion. - -\(fn PREFIX)" t nil) - (autoload 'ebrowse-tags-loop-continue "ebrowse" "\ Repeat last operation on files in tree. FIRST-TIME non-nil means this is not a repetition, but the first time. @@ -7556,32 +7545,40 @@ Display statistics for a class tree. ;;;*** ;;;### (autoloads (electric-buffer-list) "ebuff-menu" "ebuff-menu.el" -;;;;;; (20355 10021)) +;;;;;; (20400 16870)) ;;; Generated autoloads from ebuff-menu.el (autoload 'electric-buffer-list "ebuff-menu" "\ -Pop up a buffer describing the set of Emacs buffers. -Vaguely like ITS lunar select buffer; combining typeoutoid buffer -listing with menuoid buffer selection. - -If the very next character typed is a space then the buffer list -window disappears. Otherwise, one may move around in the buffer list -window, marking buffers to be selected, saved or deleted. - -To exit and select a new buffer, type a space when the cursor is on -the appropriate line of the buffer-list window. Other commands are -much like those of `Buffer-menu-mode'. +Pop up the Buffer Menu in an \"electric\" window. +If you type SPC or RET (`Electric-buffer-menu-select'), that +selects the buffer at point and quits the \"electric\" window. +Otherwise, you can move around in the Buffer Menu, marking +buffers to be selected, saved or deleted; these other commands +are much like those of `Buffer-menu-mode'. Run hooks in `electric-buffer-menu-mode-hook' on entry. -\\{electric-buffer-menu-mode-map} +\\ +\\[keyboard-quit] or \\[Electric-buffer-menu-quit] -- exit buffer menu, returning to previous window and buffer + configuration. If the very first character typed is a space, it + also has this effect. +\\[Electric-buffer-menu-select] -- select buffer of line point is on. + Also show buffers marked with m in other windows, + deletes buffers marked with \"D\", and saves those marked with \"S\". +\\[Buffer-menu-mark] -- mark buffer to be displayed. +\\[Buffer-menu-not-modified] -- clear modified-flag on that buffer. +\\[Buffer-menu-save] -- mark that buffer to be saved. +\\[Buffer-menu-delete] or \\[Buffer-menu-delete-backwards] -- mark that buffer to be deleted. +\\[Buffer-menu-unmark] -- remove all kinds of marks from current line. +\\[Electric-buffer-menu-mode-view-buffer] -- view buffer, returning when done. +\\[Buffer-menu-backup-unmark] -- back up a line and remove marks. \(fn ARG)" t nil) ;;;*** ;;;### (autoloads (Electric-command-history-redo-expression) "echistory" -;;;;;; "echistory.el" (20355 10021)) +;;;;;; "echistory.el" (20229 56251)) ;;; Generated autoloads from echistory.el (autoload 'Electric-command-history-redo-expression "echistory" "\ @@ -7593,7 +7590,7 @@ With prefix arg NOCONFIRM, execute current line as-is without editing. ;;;*** ;;;### (autoloads (ecomplete-setup) "ecomplete" "gnus/ecomplete.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from gnus/ecomplete.el (autoload 'ecomplete-setup "ecomplete" "\ @@ -7603,7 +7600,7 @@ With prefix arg NOCONFIRM, execute current line as-is without editing. ;;;*** -;;;### (autoloads (global-ede-mode) "ede" "cedet/ede.el" (20355 10021)) +;;;### (autoloads (global-ede-mode) "ede" "cedet/ede.el" (20255 22932)) ;;; Generated autoloads from cedet/ede.el (defvar global-ede-mode nil "\ @@ -7630,7 +7627,7 @@ an EDE controlled project. ;;;### (autoloads (edebug-all-forms edebug-all-defs edebug-eval-top-level-form ;;;;;; edebug-basic-spec edebug-all-forms edebug-all-defs) "edebug" -;;;;;; "emacs-lisp/edebug.el" (20355 10021)) +;;;;;; "emacs-lisp/edebug.el" (20355 835)) ;;; Generated autoloads from emacs-lisp/edebug.el (defvar edebug-all-defs nil "\ @@ -7703,7 +7700,7 @@ Toggle edebugging of all forms. ;;;;;; ediff-merge-directories-with-ancestor ediff-merge-directories ;;;;;; ediff-directories3 ediff-directory-revisions ediff-directories ;;;;;; ediff-buffers3 ediff-buffers ediff-backup ediff-current-file -;;;;;; ediff-files3 ediff-files) "ediff" "vc/ediff.el" (20373 11301)) +;;;;;; ediff-files3 ediff-files) "ediff" "vc/ediff.el" (20373 62846)) ;;; Generated autoloads from vc/ediff.el (autoload 'ediff-files "ediff" "\ @@ -7935,7 +7932,7 @@ With optional NODE, goes to that node. ;;;*** ;;;### (autoloads (ediff-customize) "ediff-help" "vc/ediff-help.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from vc/ediff-help.el (autoload 'ediff-customize "ediff-help" "\ @@ -7946,7 +7943,7 @@ With optional NODE, goes to that node. ;;;*** ;;;### (autoloads (ediff-show-registry) "ediff-mult" "vc/ediff-mult.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from vc/ediff-mult.el (autoload 'ediff-show-registry "ediff-mult" "\ @@ -7959,7 +7956,7 @@ Display Ediff's registry. ;;;*** ;;;### (autoloads (ediff-toggle-use-toolbar ediff-toggle-multiframe) -;;;;;; "ediff-util" "vc/ediff-util.el" (20355 10021)) +;;;;;; "ediff-util" "vc/ediff-util.el" (20304 58723)) ;;; Generated autoloads from vc/ediff-util.el (autoload 'ediff-toggle-multiframe "ediff-util" "\ @@ -7980,7 +7977,7 @@ To change the default, set the variable `ediff-use-toolbar-p', which see. ;;;### (autoloads (format-kbd-macro read-kbd-macro edit-named-kbd-macro ;;;;;; edit-last-kbd-macro edit-kbd-macro) "edmacro" "edmacro.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from edmacro.el (autoload 'edit-kbd-macro "edmacro" "\ @@ -8029,7 +8026,7 @@ or nil, use a compact 80-column format. ;;;*** ;;;### (autoloads (edt-emulation-on edt-set-scroll-margins) "edt" -;;;;;; "emulation/edt.el" (20355 10021)) +;;;;;; "emulation/edt.el" (20229 56251)) ;;; Generated autoloads from emulation/edt.el (autoload 'edt-set-scroll-margins "edt" "\ @@ -8047,7 +8044,7 @@ Turn on EDT Emulation. ;;;*** ;;;### (autoloads (electric-helpify with-electric-help) "ehelp" "ehelp.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from ehelp.el (autoload 'with-electric-help "ehelp" "\ @@ -8084,7 +8081,7 @@ BUFFER is put back into its original major mode. ;;;*** ;;;### (autoloads (turn-on-eldoc-mode eldoc-mode eldoc-minor-mode-string) -;;;;;; "eldoc" "emacs-lisp/eldoc.el" (20355 10021)) +;;;;;; "eldoc" "emacs-lisp/eldoc.el" (20229 56251)) ;;; Generated autoloads from emacs-lisp/eldoc.el (defvar eldoc-minor-mode-string (purecopy " ElDoc") "\ @@ -8131,7 +8128,7 @@ Emacs Lisp mode) that support ElDoc.") ;;;*** ;;;### (autoloads (electric-layout-mode electric-pair-mode electric-indent-mode) -;;;;;; "electric" "electric.el" (20369 14251)) +;;;;;; "electric" "electric.el" (20370 4296)) ;;; Generated autoloads from electric.el (defvar electric-indent-chars '(10) "\ @@ -8201,8 +8198,8 @@ The variable `electric-layout-rules' says when and how to insert newlines. ;;;*** -;;;### (autoloads (elide-head) "elide-head" "elide-head.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (elide-head) "elide-head" "elide-head.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from elide-head.el (autoload 'elide-head "elide-head" "\ @@ -8219,7 +8216,7 @@ This is suitable as an entry on `find-file-hook' or appropriate mode hooks. ;;;### (autoloads (elint-initialize elint-defun elint-current-buffer ;;;;;; elint-directory elint-file) "elint" "emacs-lisp/elint.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from emacs-lisp/elint.el (autoload 'elint-file "elint" "\ @@ -8255,8 +8252,8 @@ optional prefix argument REINIT is non-nil. ;;;*** ;;;### (autoloads (elp-results elp-instrument-package elp-instrument-list -;;;;;; elp-instrument-function) "elp" "emacs-lisp/elp.el" (20355 -;;;;;; 10021)) +;;;;;; elp-instrument-function) "elp" "emacs-lisp/elp.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from emacs-lisp/elp.el (autoload 'elp-instrument-function "elp" "\ @@ -8291,7 +8288,7 @@ displayed. ;;;*** ;;;### (autoloads (emacs-lock-mode) "emacs-lock" "emacs-lock.el" -;;;;;; (20361 20134)) +;;;;;; (20400 16870)) ;;; Generated autoloads from emacs-lock.el (autoload 'emacs-lock-mode "emacs-lock" "\ @@ -8319,7 +8316,7 @@ Other values are interpreted as usual. ;;;*** ;;;### (autoloads (report-emacs-bug-query-existing-bugs report-emacs-bug) -;;;;;; "emacsbug" "mail/emacsbug.el" (20355 10021)) +;;;;;; "emacsbug" "mail/emacsbug.el" (20355 835)) ;;; Generated autoloads from mail/emacsbug.el (autoload 'report-emacs-bug "emacsbug" "\ @@ -8340,7 +8337,7 @@ The result is an alist with items of the form (URL SUBJECT NO). ;;;;;; emerge-revisions emerge-files-with-ancestor-remote emerge-files-remote ;;;;;; emerge-files-with-ancestor-command emerge-files-command emerge-buffers-with-ancestor ;;;;;; emerge-buffers emerge-files-with-ancestor emerge-files) "emerge" -;;;;;; "vc/emerge.el" (20355 10021)) +;;;;;; "vc/emerge.el" (20355 835)) ;;; Generated autoloads from vc/emerge.el (autoload 'emerge-files "emerge" "\ @@ -8401,7 +8398,7 @@ Emerge two RCS revisions of a file, with another revision as ancestor. ;;;*** ;;;### (autoloads (enriched-decode enriched-encode enriched-mode) -;;;;;; "enriched" "textmodes/enriched.el" (20355 10021)) +;;;;;; "enriched" "textmodes/enriched.el" (20273 59945)) ;;; Generated autoloads from textmodes/enriched.el (autoload 'enriched-mode "enriched" "\ @@ -8442,7 +8439,7 @@ Commands: ;;;;;; epa-decrypt-armor-in-region epa-decrypt-region epa-encrypt-file ;;;;;; epa-sign-file epa-verify-file epa-decrypt-file epa-select-keys ;;;;;; epa-list-secret-keys epa-list-keys) "epa" "epa.el" (20355 -;;;;;; 10021)) +;;;;;; 835)) ;;; Generated autoloads from epa.el (autoload 'epa-list-keys "epa" "\ @@ -8620,7 +8617,7 @@ Insert selected KEYS after the point. ;;;*** ;;;### (autoloads (epa-dired-do-encrypt epa-dired-do-sign epa-dired-do-verify -;;;;;; epa-dired-do-decrypt) "epa-dired" "epa-dired.el" (20355 10021)) +;;;;;; epa-dired-do-decrypt) "epa-dired" "epa-dired.el" (20229 56251)) ;;; Generated autoloads from epa-dired.el (autoload 'epa-dired-do-decrypt "epa-dired" "\ @@ -8646,7 +8643,7 @@ Encrypt marked files. ;;;*** ;;;### (autoloads (epa-file-disable epa-file-enable epa-file-handler) -;;;;;; "epa-file" "epa-file.el" (20355 10021)) +;;;;;; "epa-file" "epa-file.el" (20229 56251)) ;;; Generated autoloads from epa-file.el (autoload 'epa-file-handler "epa-file" "\ @@ -8668,7 +8665,7 @@ Encrypt marked files. ;;;### (autoloads (epa-global-mail-mode epa-mail-import-keys epa-mail-encrypt ;;;;;; epa-mail-sign epa-mail-verify epa-mail-decrypt epa-mail-mode) -;;;;;; "epa-mail" "epa-mail.el" (20355 10021)) +;;;;;; "epa-mail" "epa-mail.el" (20325 60273)) ;;; Generated autoloads from epa-mail.el (autoload 'epa-mail-mode "epa-mail" "\ @@ -8738,7 +8735,7 @@ if ARG is omitted or nil. ;;;*** -;;;### (autoloads (epg-make-context) "epg" "epg.el" (20355 10021)) +;;;### (autoloads (epg-make-context) "epg" "epg.el" (20255 22932)) ;;; Generated autoloads from epg.el (autoload 'epg-make-context "epg" "\ @@ -8749,7 +8746,7 @@ Return a context object. ;;;*** ;;;### (autoloads (epg-expand-group epg-check-configuration epg-configuration) -;;;;;; "epg-config" "epg-config.el" (20373 11301)) +;;;;;; "epg-config" "epg-config.el" (20373 62846)) ;;; Generated autoloads from epg-config.el (autoload 'epg-configuration "epg-config" "\ @@ -8769,8 +8766,8 @@ Look at CONFIG and try to expand GROUP. ;;;*** -;;;### (autoloads (erc-handle-irc-url erc-tls erc erc-select-read-args) -;;;;;; "erc" "erc/erc.el" (20356 2211)) +;;;### (autoloads (erc-handle-irc-url erc-tls erc-select-read-args) +;;;;;; "erc" "erc/erc.el" (20356 48455)) ;;; Generated autoloads from erc/erc.el (autoload 'erc-select-read-args "erc" "\ @@ -8778,29 +8775,6 @@ Prompt the user for values of nick, server, port, and password. \(fn)" nil nil) -(autoload 'erc "erc" "\ -ERC is a powerful, modular, and extensible IRC client. -This function is the main entry point for ERC. - -It permits you to select connection parameters, and then starts ERC. - -Non-interactively, it takes the keyword arguments - (server (erc-compute-server)) - (port (erc-compute-port)) - (nick (erc-compute-nick)) - password - (full-name (erc-compute-full-name))) - -That is, if called with - - (erc :server \"irc.freenode.net\" :full-name \"Harry S Truman\") - -then the server and full-name will be set to those values, whereas -`erc-compute-port', `erc-compute-nick' and `erc-compute-full-name' will -be invoked for the values of the other parameters. - -\(fn &key (server (erc-compute-server)) (port (erc-compute-port)) (nick (erc-compute-nick)) PASSWORD (full-name (erc-compute-full-name)))" t nil) - (defalias 'erc-select 'erc) (autoload 'erc-tls "erc" "\ @@ -8819,32 +8793,32 @@ Otherwise, connect to HOST:PORT as USER and /join CHANNEL. ;;;*** ;;;### (autoloads nil "erc-autoaway" "erc/erc-autoaway.el" (20355 -;;;;;; 10021)) +;;;;;; 835)) ;;; Generated autoloads from erc/erc-autoaway.el (autoload 'erc-autoaway-mode "erc-autoaway") ;;;*** -;;;### (autoloads nil "erc-button" "erc/erc-button.el" (20355 10021)) +;;;### (autoloads nil "erc-button" "erc/erc-button.el" (20355 835)) ;;; Generated autoloads from erc/erc-button.el (autoload 'erc-button-mode "erc-button" nil t) ;;;*** -;;;### (autoloads nil "erc-capab" "erc/erc-capab.el" (20355 10021)) +;;;### (autoloads nil "erc-capab" "erc/erc-capab.el" (20229 56251)) ;;; Generated autoloads from erc/erc-capab.el (autoload 'erc-capab-identify-mode "erc-capab" nil t) ;;;*** -;;;### (autoloads nil "erc-compat" "erc/erc-compat.el" (20355 10021)) +;;;### (autoloads nil "erc-compat" "erc/erc-compat.el" (20304 58723)) ;;; Generated autoloads from erc/erc-compat.el (autoload 'erc-define-minor-mode "erc-compat") ;;;*** ;;;### (autoloads (erc-ctcp-query-DCC pcomplete/erc-mode/DCC erc-cmd-DCC) -;;;;;; "erc-dcc" "erc/erc-dcc.el" (20355 10021)) +;;;;;; "erc-dcc" "erc/erc-dcc.el" (20405 16851)) ;;; Generated autoloads from erc/erc-dcc.el (autoload 'erc-dcc-mode "erc-dcc") @@ -8877,7 +8851,7 @@ that subcommand. ;;;;;; erc-ezb-add-session erc-ezb-end-of-session-list erc-ezb-init-session-list ;;;;;; erc-ezb-identify erc-ezb-notice-autodetect erc-ezb-lookup-action ;;;;;; erc-ezb-get-login erc-cmd-ezb) "erc-ezbounce" "erc/erc-ezbounce.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from erc/erc-ezbounce.el (autoload 'erc-cmd-ezb "erc-ezbounce" "\ @@ -8939,8 +8913,8 @@ Add EZBouncer convenience functions to ERC. ;;;*** -;;;### (autoloads (erc-fill) "erc-fill" "erc/erc-fill.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (erc-fill) "erc-fill" "erc/erc-fill.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from erc/erc-fill.el (autoload 'erc-fill-mode "erc-fill" nil t) @@ -8953,7 +8927,7 @@ You can put this on `erc-insert-modify-hook' and/or `erc-send-modify-hook'. ;;;*** ;;;### (autoloads (erc-identd-stop erc-identd-start) "erc-identd" -;;;;;; "erc/erc-identd.el" (20355 10021)) +;;;;;; "erc/erc-identd.el" (20229 56251)) ;;; Generated autoloads from erc/erc-identd.el (autoload 'erc-identd-mode "erc-identd") @@ -8975,7 +8949,7 @@ system. ;;;*** ;;;### (autoloads (erc-create-imenu-index) "erc-imenu" "erc/erc-imenu.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from erc/erc-imenu.el (autoload 'erc-create-imenu-index "erc-imenu" "\ @@ -8985,20 +8959,20 @@ system. ;;;*** -;;;### (autoloads nil "erc-join" "erc/erc-join.el" (20356 2211)) +;;;### (autoloads nil "erc-join" "erc/erc-join.el" (20356 48455)) ;;; Generated autoloads from erc/erc-join.el (autoload 'erc-autojoin-mode "erc-join" nil t) ;;;*** -;;;### (autoloads nil "erc-list" "erc/erc-list.el" (20355 10021)) +;;;### (autoloads nil "erc-list" "erc/erc-list.el" (20229 56251)) ;;; Generated autoloads from erc/erc-list.el (autoload 'erc-list-mode "erc-list") ;;;*** ;;;### (autoloads (erc-save-buffer-in-logs erc-logging-enabled) "erc-log" -;;;;;; "erc/erc-log.el" (20355 10021)) +;;;;;; "erc/erc-log.el" (20355 835)) ;;; Generated autoloads from erc/erc-log.el (autoload 'erc-log-mode "erc-log" nil t) @@ -9030,7 +9004,7 @@ You can save every individual message by putting this function on ;;;### (autoloads (erc-delete-dangerous-host erc-add-dangerous-host ;;;;;; erc-delete-keyword erc-add-keyword erc-delete-fool erc-add-fool ;;;;;; erc-delete-pal erc-add-pal) "erc-match" "erc/erc-match.el" -;;;;;; (20355 10021)) +;;;;;; (20355 835)) ;;; Generated autoloads from erc/erc-match.el (autoload 'erc-match-mode "erc-match") @@ -9076,14 +9050,14 @@ Delete dangerous-host interactively to `erc-dangerous-hosts'. ;;;*** -;;;### (autoloads nil "erc-menu" "erc/erc-menu.el" (20355 10021)) +;;;### (autoloads nil "erc-menu" "erc/erc-menu.el" (20229 56251)) ;;; Generated autoloads from erc/erc-menu.el (autoload 'erc-menu-mode "erc-menu" nil t) ;;;*** ;;;### (autoloads (erc-cmd-WHOLEFT) "erc-netsplit" "erc/erc-netsplit.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from erc/erc-netsplit.el (autoload 'erc-netsplit-mode "erc-netsplit") @@ -9095,7 +9069,7 @@ Show who's gone. ;;;*** ;;;### (autoloads (erc-server-select erc-determine-network) "erc-networks" -;;;;;; "erc/erc-networks.el" (20355 10021)) +;;;;;; "erc/erc-networks.el" (20229 56251)) ;;; Generated autoloads from erc/erc-networks.el (autoload 'erc-determine-network "erc-networks" "\ @@ -9113,7 +9087,7 @@ Interactively select a server to connect to using `erc-server-alist'. ;;;*** ;;;### (autoloads (pcomplete/erc-mode/NOTIFY erc-cmd-NOTIFY) "erc-notify" -;;;;;; "erc/erc-notify.el" (20355 10021)) +;;;;;; "erc/erc-notify.el" (20355 835)) ;;; Generated autoloads from erc/erc-notify.el (autoload 'erc-notify-mode "erc-notify" nil t) @@ -9131,33 +9105,33 @@ with args, toggle notify status of people. ;;;*** -;;;### (autoloads nil "erc-page" "erc/erc-page.el" (20355 10021)) +;;;### (autoloads nil "erc-page" "erc/erc-page.el" (20239 35035)) ;;; Generated autoloads from erc/erc-page.el (autoload 'erc-page-mode "erc-page") ;;;*** ;;;### (autoloads nil "erc-pcomplete" "erc/erc-pcomplete.el" (20355 -;;;;;; 10021)) +;;;;;; 835)) ;;; Generated autoloads from erc/erc-pcomplete.el (autoload 'erc-completion-mode "erc-pcomplete" nil t) ;;;*** -;;;### (autoloads nil "erc-replace" "erc/erc-replace.el" (20355 10021)) +;;;### (autoloads nil "erc-replace" "erc/erc-replace.el" (20229 56251)) ;;; Generated autoloads from erc/erc-replace.el (autoload 'erc-replace-mode "erc-replace") ;;;*** -;;;### (autoloads nil "erc-ring" "erc/erc-ring.el" (20355 10021)) +;;;### (autoloads nil "erc-ring" "erc/erc-ring.el" (20229 56251)) ;;; Generated autoloads from erc/erc-ring.el (autoload 'erc-ring-mode "erc-ring" nil t) ;;;*** ;;;### (autoloads (erc-nickserv-identify erc-nickserv-identify-mode) -;;;;;; "erc-services" "erc/erc-services.el" (20357 58785)) +;;;;;; "erc-services" "erc/erc-services.el" (20357 51632)) ;;; Generated autoloads from erc/erc-services.el (autoload 'erc-services-mode "erc-services" nil t) @@ -9174,14 +9148,14 @@ When called interactively, read the password using `read-passwd'. ;;;*** -;;;### (autoloads nil "erc-sound" "erc/erc-sound.el" (20355 10021)) +;;;### (autoloads nil "erc-sound" "erc/erc-sound.el" (20355 835)) ;;; Generated autoloads from erc/erc-sound.el (autoload 'erc-sound-mode "erc-sound") ;;;*** ;;;### (autoloads (erc-speedbar-browser) "erc-speedbar" "erc/erc-speedbar.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from erc/erc-speedbar.el (autoload 'erc-speedbar-browser "erc-speedbar" "\ @@ -9192,21 +9166,21 @@ This will add a speedbar major display mode. ;;;*** -;;;### (autoloads nil "erc-spelling" "erc/erc-spelling.el" (20355 -;;;;;; 10021)) +;;;### (autoloads nil "erc-spelling" "erc/erc-spelling.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from erc/erc-spelling.el (autoload 'erc-spelling-mode "erc-spelling" nil t) ;;;*** -;;;### (autoloads nil "erc-stamp" "erc/erc-stamp.el" (20355 10021)) +;;;### (autoloads nil "erc-stamp" "erc/erc-stamp.el" (20355 835)) ;;; Generated autoloads from erc/erc-stamp.el (autoload 'erc-timestamp-mode "erc-stamp" nil t) ;;;*** ;;;### (autoloads (erc-track-minor-mode) "erc-track" "erc/erc-track.el" -;;;;;; (20355 10021)) +;;;;;; (20355 835)) ;;; Generated autoloads from erc/erc-track.el (defvar erc-track-minor-mode nil "\ @@ -9232,7 +9206,7 @@ keybindings will not do anything useful. ;;;*** ;;;### (autoloads (erc-truncate-buffer erc-truncate-buffer-to-size) -;;;;;; "erc-truncate" "erc/erc-truncate.el" (20355 10021)) +;;;;;; "erc-truncate" "erc/erc-truncate.el" (20355 835)) ;;; Generated autoloads from erc/erc-truncate.el (autoload 'erc-truncate-mode "erc-truncate" nil t) @@ -9252,7 +9226,7 @@ Meant to be used in hooks, like `erc-insert-post-hook'. ;;;*** ;;;### (autoloads (erc-xdcc-add-file) "erc-xdcc" "erc/erc-xdcc.el" -;;;;;; (20355 10021)) +;;;;;; (20355 835)) ;;; Generated autoloads from erc/erc-xdcc.el (autoload 'erc-xdcc-mode "erc-xdcc") @@ -9264,31 +9238,10 @@ Add a file to `erc-xdcc-files'. ;;;*** ;;;### (autoloads (ert-describe-test ert-run-tests-interactively -;;;;;; ert-run-tests-batch-and-exit ert-run-tests-batch ert-deftest) -;;;;;; "ert" "emacs-lisp/ert.el" (20355 10021)) +;;;;;; ert-run-tests-batch-and-exit ert-run-tests-batch) "ert" "emacs-lisp/ert.el" +;;;;;; (20355 835)) ;;; Generated autoloads from emacs-lisp/ert.el -(autoload 'ert-deftest "ert" "\ -Define NAME (a symbol) as a test. - -BODY is evaluated as a `progn' when the test is run. It should -signal a condition on failure or just return if the test passes. - -`should', `should-not' and `should-error' are useful for -assertions in BODY. - -Use `ert' to run tests interactively. - -Tests that are expected to fail can be marked as such -using :expected-result. See `ert-test-result-type-p' for a -description of valid values for RESULT-TYPE. - -\(fn NAME () [DOCSTRING] [:expected-result RESULT-TYPE] [:tags '(TAG...)] BODY...)" nil (quote macro)) - -(put 'ert-deftest 'lisp-indent-function '2) - -(put 'ert-deftest 'doc-string-elt '3) - (put 'ert-deftest 'lisp-indent-function 2) (put 'ert-info 'lisp-indent-function 1) @@ -9335,7 +9288,7 @@ Display the documentation for TEST-OR-TEST-NAME (a symbol or ert-test). ;;;*** ;;;### (autoloads (ert-kill-all-test-buffers) "ert-x" "emacs-lisp/ert-x.el" -;;;;;; (20364 28960)) +;;;;;; (20370 4296)) ;;; Generated autoloads from emacs-lisp/ert-x.el (put 'ert-with-test-buffer 'lisp-indent-function 1) @@ -9347,8 +9300,8 @@ Kill all test buffers that are still live. ;;;*** -;;;### (autoloads (eshell-mode) "esh-mode" "eshell/esh-mode.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (eshell-mode) "esh-mode" "eshell/esh-mode.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from eshell/esh-mode.el (autoload 'eshell-mode "esh-mode" "\ @@ -9361,7 +9314,7 @@ Emacs shell interactive mode. ;;;*** ;;;### (autoloads (eshell-command-result eshell-command eshell) "eshell" -;;;;;; "eshell/eshell.el" (20373 11301)) +;;;;;; "eshell/eshell.el" (20373 62846)) ;;; Generated autoloads from eshell/eshell.el (autoload 'eshell "eshell" "\ @@ -9402,7 +9355,7 @@ corresponding to a successful execution. ;;;;;; visit-tags-table tags-table-mode find-tag-default-function ;;;;;; find-tag-hook tags-add-tables tags-compression-info-list ;;;;;; tags-table-list tags-case-fold-search) "etags" "progmodes/etags.el" -;;;;;; (20378 29222)) +;;;;;; (20389 6410)) ;;; Generated autoloads from progmodes/etags.el (defvar tags-file-name nil "\ @@ -9720,7 +9673,7 @@ for \\[find-tag] (which see). ;;;;;; ethio-fidel-to-sera-marker ethio-fidel-to-sera-region ethio-fidel-to-sera-buffer ;;;;;; ethio-sera-to-fidel-marker ethio-sera-to-fidel-region ethio-sera-to-fidel-buffer ;;;;;; setup-ethiopic-environment-internal) "ethio-util" "language/ethio-util.el" -;;;;;; (20355 10021)) +;;;;;; (20355 835)) ;;; Generated autoloads from language/ethio-util.el (autoload 'setup-ethiopic-environment-internal "ethio-util" "\ @@ -9890,7 +9843,7 @@ With ARG, insert that many delimiters. ;;;### (autoloads (eudc-load-eudc eudc-query-form eudc-expand-inline ;;;;;; eudc-get-phone eudc-get-email eudc-set-server) "eudc" "net/eudc.el" -;;;;;; (20355 10021)) +;;;;;; (20304 58723)) ;;; Generated autoloads from net/eudc.el (autoload 'eudc-set-server "eudc" "\ @@ -9946,7 +9899,7 @@ This does nothing except loading eudc by autoload side-effect. ;;;### (autoloads (eudc-display-jpeg-as-button eudc-display-jpeg-inline ;;;;;; eudc-display-sound eudc-display-mail eudc-display-url eudc-display-generic-binary) -;;;;;; "eudc-bob" "net/eudc-bob.el" (20355 10021)) +;;;;;; "eudc-bob" "net/eudc-bob.el" (20229 56251)) ;;; Generated autoloads from net/eudc-bob.el (autoload 'eudc-display-generic-binary "eudc-bob" "\ @@ -9982,7 +9935,7 @@ Display a button for the JPEG DATA. ;;;*** ;;;### (autoloads (eudc-try-bbdb-insert eudc-insert-record-at-point-into-bbdb) -;;;;;; "eudc-export" "net/eudc-export.el" (20355 10021)) +;;;;;; "eudc-export" "net/eudc-export.el" (20229 56251)) ;;; Generated autoloads from net/eudc-export.el (autoload 'eudc-insert-record-at-point-into-bbdb "eudc-export" "\ @@ -9999,7 +9952,7 @@ Call `eudc-insert-record-at-point-into-bbdb' if on a record. ;;;*** ;;;### (autoloads (eudc-edit-hotlist) "eudc-hotlist" "net/eudc-hotlist.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from net/eudc-hotlist.el (autoload 'eudc-edit-hotlist "eudc-hotlist" "\ @@ -10009,8 +9962,8 @@ Edit the hotlist of directory servers in a specialized buffer. ;;;*** -;;;### (autoloads (ewoc-create) "ewoc" "emacs-lisp/ewoc.el" (20378 -;;;;;; 29222)) +;;;### (autoloads (ewoc-create) "ewoc" "emacs-lisp/ewoc.el" (20376 +;;;;;; 50401)) ;;; Generated autoloads from emacs-lisp/ewoc.el (autoload 'ewoc-create "ewoc" "\ @@ -10039,7 +9992,7 @@ fourth arg NOSEP non-nil inhibits this. ;;;### (autoloads (executable-make-buffer-file-executable-if-script-p ;;;;;; executable-self-display executable-set-magic executable-interpret ;;;;;; executable-command-find-posix-p) "executable" "progmodes/executable.el" -;;;;;; (20355 10021)) +;;;;;; (20355 835)) ;;; Generated autoloads from progmodes/executable.el (autoload 'executable-command-find-posix-p "executable" "\ @@ -10082,7 +10035,7 @@ file modes. ;;;### (autoloads (expand-jump-to-next-slot expand-jump-to-previous-slot ;;;;;; expand-abbrev-hook expand-add-abbrevs) "expand" "expand.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from expand.el (autoload 'expand-add-abbrevs "expand" "\ @@ -10131,7 +10084,7 @@ This is used only in conjunction with `expand-add-abbrevs'. ;;;*** -;;;### (autoloads (f90-mode) "f90" "progmodes/f90.el" (20355 10021)) +;;;### (autoloads (f90-mode) "f90" "progmodes/f90.el" (20389 6410)) ;;; Generated autoloads from progmodes/f90.el (autoload 'f90-mode "f90" "\ @@ -10201,8 +10154,8 @@ with no args, if that value is non-nil. ;;;### (autoloads (variable-pitch-mode buffer-face-toggle buffer-face-set ;;;;;; buffer-face-mode text-scale-adjust text-scale-decrease text-scale-increase ;;;;;; text-scale-set face-remap-set-base face-remap-reset-base -;;;;;; face-remap-add-relative) "face-remap" "face-remap.el" (20355 -;;;;;; 10021)) +;;;;;; face-remap-add-relative) "face-remap" "face-remap.el" (20389 +;;;;;; 6410)) ;;; Generated autoloads from face-remap.el (autoload 'face-remap-add-relative "face-remap" "\ @@ -10350,7 +10303,7 @@ Besides the choice of face, it is the same as `buffer-face-mode'. ;;;### (autoloads (feedmail-queue-reminder feedmail-run-the-queue ;;;;;; feedmail-run-the-queue-global-prompt feedmail-run-the-queue-no-prompts -;;;;;; feedmail-send-it) "feedmail" "mail/feedmail.el" (20364 28028)) +;;;;;; feedmail-send-it) "feedmail" "mail/feedmail.el" (20389 6410)) ;;; Generated autoloads from mail/feedmail.el (autoload 'feedmail-send-it "feedmail" "\ @@ -10403,8 +10356,9 @@ you can set `feedmail-queue-reminder-alist' to nil. ;;;*** -;;;### (autoloads (ffap-bindings dired-at-point ffap-at-mouse ffap-menu -;;;;;; find-file-at-point ffap-next) "ffap" "ffap.el" (20376 40834)) +;;;### (autoloads (ffap-bindings ffap-guess-file-name-at-point dired-at-point +;;;;;; ffap-at-mouse ffap-menu find-file-at-point ffap-next) "ffap" +;;;;;; "ffap.el" (20395 46900)) ;;; Generated autoloads from ffap.el (autoload 'ffap-next "ffap" "\ @@ -10454,9 +10408,11 @@ If `dired-at-point-require-prefix' is set, the prefix meaning is reversed. \(fn &optional FILENAME)" t nil) -(defun ffap-guess-file-name-at-point nil "\ +(autoload 'ffap-guess-file-name-at-point "ffap" "\ Try to get a file name at point. -This hook is intended to be put in `file-name-at-point-functions'." (when (fboundp (quote ffap-guesser)) (let ((guess (ffap-guesser))) (setq guess (if (or (not guess) (and (fboundp (quote ffap-url-p)) (ffap-url-p guess)) (and (fboundp (quote ffap-file-remote-p)) (ffap-file-remote-p guess))) guess (abbreviate-file-name (expand-file-name guess)))) (when guess (if (file-directory-p guess) (file-name-as-directory guess) guess))))) +This hook is intended to be put in `file-name-at-point-functions'. + +\(fn)" nil nil) (autoload 'ffap-bindings "ffap" "\ Evaluate the forms in variable `ffap-bindings'. @@ -10468,7 +10424,7 @@ Evaluate the forms in variable `ffap-bindings'. ;;;### (autoloads (file-cache-minibuffer-complete file-cache-add-directory-recursively ;;;;;; file-cache-add-directory-using-locate file-cache-add-directory-using-find ;;;;;; file-cache-add-file file-cache-add-directory-list file-cache-add-directory) -;;;;;; "filecache" "filecache.el" (20355 10021)) +;;;;;; "filecache" "filecache.el" (20229 56251)) ;;; Generated autoloads from filecache.el (autoload 'file-cache-add-directory "filecache" "\ @@ -10528,7 +10484,7 @@ the name is considered already unique; only the second substitution ;;;;;; copy-file-locals-to-dir-locals delete-dir-local-variable ;;;;;; add-dir-local-variable delete-file-local-variable-prop-line ;;;;;; add-file-local-variable-prop-line delete-file-local-variable -;;;;;; add-file-local-variable) "files-x" "files-x.el" (20355 10021)) +;;;;;; add-file-local-variable) "files-x" "files-x.el" (20355 835)) ;;; Generated autoloads from files-x.el (autoload 'add-file-local-variable "files-x" "\ @@ -10593,8 +10549,8 @@ Copy directory-local variables to the -*- line. ;;;*** -;;;### (autoloads (filesets-init) "filesets" "filesets.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (filesets-init) "filesets" "filesets.el" (20304 +;;;;;; 58723)) ;;; Generated autoloads from filesets.el (autoload 'filesets-init "filesets" "\ @@ -10605,7 +10561,7 @@ Set up hooks, load the cache file -- if existing -- and build the menu. ;;;*** -;;;### (autoloads (find-cmd) "find-cmd" "find-cmd.el" (20355 10021)) +;;;### (autoloads (find-cmd) "find-cmd" "find-cmd.el" (20229 56251)) ;;; Generated autoloads from find-cmd.el (autoload 'find-cmd "find-cmd" "\ @@ -10625,7 +10581,7 @@ result is a string that should be ready for the command line. ;;;*** ;;;### (autoloads (find-grep-dired find-name-dired find-dired) "find-dired" -;;;;;; "find-dired.el" (20355 10021)) +;;;;;; "find-dired.el" (20255 22932)) ;;; Generated autoloads from find-dired.el (autoload 'find-dired "find-dired" "\ @@ -10664,18 +10620,20 @@ use in place of \"-ls\" as the final argument. ;;;*** ;;;### (autoloads (ff-mouse-find-other-file-other-window ff-mouse-find-other-file -;;;;;; ff-find-other-file ff-get-other-file) "find-file" "find-file.el" -;;;;;; (20355 10021)) +;;;;;; ff-find-other-file ff-get-other-file ff-special-constructs) +;;;;;; "find-file" "find-file.el" (20389 6410)) ;;; Generated autoloads from find-file.el (defvar ff-special-constructs `((,(purecopy "^#\\s *\\(include\\|import\\)\\s +[<\"]\\(.*\\)[>\"]") lambda nil (buffer-substring (match-beginning 2) (match-end 2)))) "\ -List of special constructs for `ff-treat-as-special' to recognize. +List of special constructs recognized by `ff-treat-as-special'. Each element, tried in order, has the form (REGEXP . EXTRACT). If REGEXP matches the current line (from the beginning of the line), `ff-treat-as-special' calls function EXTRACT with no args. If EXTRACT returns nil, keep trying. Otherwise, return the filename that EXTRACT returned.") +(custom-autoload 'ff-special-constructs "find-file" t) + (autoload 'ff-get-other-file "find-file" "\ Find the header or source file corresponding to this file. See also the documentation for `ff-find-other-file'. @@ -10759,7 +10717,7 @@ Visit the file you click on in another window. ;;;;;; find-variable find-variable-noselect find-function-other-frame ;;;;;; find-function-other-window find-function find-function-noselect ;;;;;; find-function-search-for-symbol find-library) "find-func" -;;;;;; "emacs-lisp/find-func.el" (20355 10021)) +;;;;;; "emacs-lisp/find-func.el" (20229 56251)) ;;; Generated autoloads from emacs-lisp/find-func.el (autoload 'find-library "find-func" "\ @@ -10918,7 +10876,7 @@ Define some key bindings for the find-function family of functions. ;;;*** ;;;### (autoloads (find-lisp-find-dired-filter find-lisp-find-dired-subdirectories -;;;;;; find-lisp-find-dired) "find-lisp" "find-lisp.el" (20355 10021)) +;;;;;; find-lisp-find-dired) "find-lisp" "find-lisp.el" (20229 56251)) ;;; Generated autoloads from find-lisp.el (autoload 'find-lisp-find-dired "find-lisp" "\ @@ -10939,7 +10897,7 @@ Change the filter on a find-lisp-find-dired buffer to REGEXP. ;;;*** ;;;### (autoloads (finder-by-keyword finder-commentary finder-list-keywords) -;;;;;; "finder" "finder.el" (20355 10021)) +;;;;;; "finder" "finder.el" (20229 56251)) ;;; Generated autoloads from finder.el (autoload 'finder-list-keywords "finder" "\ @@ -10961,7 +10919,7 @@ Find packages matching a given keyword. ;;;*** ;;;### (autoloads (enable-flow-control-on enable-flow-control) "flow-ctrl" -;;;;;; "flow-ctrl.el" (20355 10021)) +;;;;;; "flow-ctrl.el" (20229 56251)) ;;; Generated autoloads from flow-ctrl.el (autoload 'enable-flow-control "flow-ctrl" "\ @@ -10983,7 +10941,7 @@ to get the effect of a C-q. ;;;*** ;;;### (autoloads (fill-flowed fill-flowed-encode) "flow-fill" "gnus/flow-fill.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from gnus/flow-fill.el (autoload 'fill-flowed-encode "flow-fill" "\ @@ -10999,7 +10957,7 @@ to get the effect of a C-q. ;;;*** ;;;### (autoloads (flymake-find-file-hook flymake-mode-off flymake-mode-on -;;;;;; flymake-mode) "flymake" "progmodes/flymake.el" (20373 11301)) +;;;;;; flymake-mode) "flymake" "progmodes/flymake.el" (20373 62846)) ;;; Generated autoloads from progmodes/flymake.el (autoload 'flymake-mode "flymake" "\ @@ -11029,7 +10987,7 @@ Turn flymake mode off. ;;;### (autoloads (flyspell-buffer flyspell-region flyspell-mode-off ;;;;;; turn-off-flyspell turn-on-flyspell flyspell-mode flyspell-prog-mode) -;;;;;; "flyspell" "textmodes/flyspell.el" (20374 32165)) +;;;;;; "flyspell" "textmodes/flyspell.el" (20405 16851)) ;;; Generated autoloads from textmodes/flyspell.el (autoload 'flyspell-prog-mode "flyspell" "\ @@ -11101,7 +11059,7 @@ Flyspell whole buffer. ;;;### (autoloads (follow-delete-other-windows-and-split follow-mode ;;;;;; turn-off-follow-mode turn-on-follow-mode) "follow" "follow.el" -;;;;;; (20381 5411)) +;;;;;; (20389 6410)) ;;; Generated autoloads from follow.el (autoload 'turn-on-follow-mode "follow" "\ @@ -11144,10 +11102,6 @@ To split one large window into two side-by-side windows, the commands Only windows displayed in the same frame follow each other. -If the variable `follow-intercept-processes' is non-nil, Follow mode -will listen to the output of processes and redisplay accordingly. -\(This is the default.) - This command runs the normal hook `follow-mode-hook'. Keys specific to Follow mode: @@ -11169,16 +11123,12 @@ If ARG is positive, the leftmost window is selected. If negative, the rightmost is selected. If ARG is nil, the leftmost window is selected if the original window is the first one in the frame. -To bind this command to a hotkey, place the following line -in your `~/.emacs' file, replacing [f7] by your favorite key: - (global-set-key [f7] 'follow-delete-other-windows-and-split) - \(fn &optional ARG)" t nil) ;;;*** -;;;### (autoloads (footnote-mode) "footnote" "mail/footnote.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (footnote-mode) "footnote" "mail/footnote.el" (20389 +;;;;;; 6410)) ;;; Generated autoloads from mail/footnote.el (autoload 'footnote-mode "footnote" "\ @@ -11197,7 +11147,7 @@ play around with the following keys: ;;;*** ;;;### (autoloads (forms-find-file-other-window forms-find-file forms-mode) -;;;;;; "forms" "forms.el" (20355 10021)) +;;;;;; "forms" "forms.el" (20392 26928)) ;;; Generated autoloads from forms.el (autoload 'forms-mode "forms" "\ @@ -11234,7 +11184,7 @@ Visit a file in Forms mode in other window. ;;;*** ;;;### (autoloads (fortran-mode) "fortran" "progmodes/fortran.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from progmodes/fortran.el (autoload 'fortran-mode "fortran" "\ @@ -11312,7 +11262,7 @@ with no args, if that value is non-nil. ;;;*** ;;;### (autoloads (fortune fortune-to-signature fortune-compile fortune-from-region -;;;;;; fortune-add-fortune) "fortune" "play/fortune.el" (20355 10021)) +;;;;;; fortune-add-fortune) "fortune" "play/fortune.el" (20229 56251)) ;;; Generated autoloads from play/fortune.el (autoload 'fortune-add-fortune "fortune" "\ @@ -11361,7 +11311,7 @@ and choose the directory as the fortune-file. ;;;*** ;;;### (autoloads (gdb gdb-enable-debug) "gdb-mi" "progmodes/gdb-mi.el" -;;;;;; (20378 29222)) +;;;;;; (20405 42390)) ;;; Generated autoloads from progmodes/gdb-mi.el (defvar gdb-enable-debug nil "\ @@ -11428,8 +11378,8 @@ detailed description of this mode. ;;;*** ;;;### (autoloads (generic-make-keywords-list generic-mode generic-mode-internal -;;;;;; define-generic-mode) "generic" "emacs-lisp/generic.el" (20355 -;;;;;; 10021)) +;;;;;; define-generic-mode) "generic" "emacs-lisp/generic.el" (20405 +;;;;;; 42390)) ;;; Generated autoloads from emacs-lisp/generic.el (defvar generic-mode-list nil "\ @@ -11473,6 +11423,8 @@ See the file generic-x.el for some examples of `define-generic-mode'. \(fn MODE COMMENT-LIST KEYWORD-LIST FONT-LOCK-LIST AUTO-MODE-LIST FUNCTION-LIST &optional DOCSTRING)" nil (quote macro)) +(put 'define-generic-mode 'doc-string-elt '7) + (put 'define-generic-mode 'lisp-indent-function '1) (autoload 'generic-mode-internal "generic" "\ @@ -11506,7 +11458,7 @@ regular expression that can be used as an element of ;;;*** ;;;### (autoloads (glasses-mode) "glasses" "progmodes/glasses.el" -;;;;;; (20355 10021)) +;;;;;; (20355 835)) ;;; Generated autoloads from progmodes/glasses.el (autoload 'glasses-mode "glasses" "\ @@ -11522,7 +11474,7 @@ add virtual separators (like underscores) at places they belong to. ;;;### (autoloads (gmm-tool-bar-from-list gmm-widget-p gmm-error ;;;;;; gmm-message gmm-regexp-concat) "gmm-utils" "gnus/gmm-utils.el" -;;;;;; (20355 10021)) +;;;;;; (20304 58723)) ;;; Generated autoloads from gnus/gmm-utils.el (autoload 'gmm-regexp-concat "gmm-utils" "\ @@ -11577,7 +11529,7 @@ DEFAULT-MAP specifies the default key map for ICON-LIST. ;;;*** ;;;### (autoloads (gnus gnus-other-frame gnus-slave gnus-no-server -;;;;;; gnus-slave-no-server) "gnus" "gnus/gnus.el" (20378 29222)) +;;;;;; gnus-slave-no-server) "gnus" "gnus/gnus.el" (20379 60745)) ;;; Generated autoloads from gnus/gnus.el (when (fboundp 'custom-autoload) (custom-autoload 'gnus-select-method "gnus")) @@ -11630,7 +11582,7 @@ prompt the user for the name of an NNTP server to use. ;;;;;; gnus-agent-get-undownloaded-list gnus-agent-delete-group ;;;;;; gnus-agent-rename-group gnus-agent-possibly-save-gcc gnus-agentize ;;;;;; gnus-slave-unplugged gnus-plugged gnus-unplugged) "gnus-agent" -;;;;;; "gnus/gnus-agent.el" (20355 10021)) +;;;;;; "gnus/gnus-agent.el" (20304 58723)) ;;; Generated autoloads from gnus/gnus-agent.el (autoload 'gnus-unplugged "gnus-agent" "\ @@ -11721,7 +11673,7 @@ If CLEAN, obsolete (ignore). ;;;*** ;;;### (autoloads (gnus-article-prepare-display) "gnus-art" "gnus/gnus-art.el" -;;;;;; (20361 20134)) +;;;;;; (20360 57703)) ;;; Generated autoloads from gnus/gnus-art.el (autoload 'gnus-article-prepare-display "gnus-art" "\ @@ -11732,7 +11684,7 @@ Make the current buffer look like a nice article. ;;;*** ;;;### (autoloads (gnus-bookmark-bmenu-list gnus-bookmark-jump gnus-bookmark-set) -;;;;;; "gnus-bookmark" "gnus/gnus-bookmark.el" (20355 10021)) +;;;;;; "gnus-bookmark" "gnus/gnus-bookmark.el" (20229 56251)) ;;; Generated autoloads from gnus/gnus-bookmark.el (autoload 'gnus-bookmark-set "gnus-bookmark" "\ @@ -11757,8 +11709,8 @@ deletion, or > if it is flagged for displaying. ;;;### (autoloads (gnus-cache-delete-group gnus-cache-rename-group ;;;;;; gnus-cache-generate-nov-databases gnus-cache-generate-active -;;;;;; gnus-jog-cache) "gnus-cache" "gnus/gnus-cache.el" (20355 -;;;;;; 10021)) +;;;;;; gnus-jog-cache) "gnus-cache" "gnus/gnus-cache.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from gnus/gnus-cache.el (autoload 'gnus-jog-cache "gnus-cache" "\ @@ -11800,7 +11752,7 @@ supported. ;;;*** ;;;### (autoloads (gnus-delay-initialize gnus-delay-send-queue gnus-delay-article) -;;;;;; "gnus-delay" "gnus/gnus-delay.el" (20355 10021)) +;;;;;; "gnus-delay" "gnus/gnus-delay.el" (20229 56251)) ;;; Generated autoloads from gnus/gnus-delay.el (autoload 'gnus-delay-article "gnus-delay" "\ @@ -11836,7 +11788,7 @@ Checking delayed messages is skipped if optional arg NO-CHECK is non-nil. ;;;*** ;;;### (autoloads (gnus-user-format-function-D gnus-user-format-function-d) -;;;;;; "gnus-diary" "gnus/gnus-diary.el" (20355 10021)) +;;;;;; "gnus-diary" "gnus/gnus-diary.el" (20229 56251)) ;;; Generated autoloads from gnus/gnus-diary.el (autoload 'gnus-user-format-function-d "gnus-diary" "\ @@ -11852,7 +11804,7 @@ Checking delayed messages is skipped if optional arg NO-CHECK is non-nil. ;;;*** ;;;### (autoloads (turn-on-gnus-dired-mode) "gnus-dired" "gnus/gnus-dired.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from gnus/gnus-dired.el (autoload 'turn-on-gnus-dired-mode "gnus-dired" "\ @@ -11863,7 +11815,7 @@ Convenience method to turn on gnus-dired-mode. ;;;*** ;;;### (autoloads (gnus-draft-reminder) "gnus-draft" "gnus/gnus-draft.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from gnus/gnus-draft.el (autoload 'gnus-draft-reminder "gnus-draft" "\ @@ -11875,8 +11827,8 @@ Reminder user if there are unsent drafts. ;;;### (autoloads (gnus-convert-png-to-face gnus-convert-face-to-png ;;;;;; gnus-face-from-file gnus-x-face-from-file gnus-insert-random-x-face-header -;;;;;; gnus-random-x-face) "gnus-fun" "gnus/gnus-fun.el" (20355 -;;;;;; 10021)) +;;;;;; gnus-random-x-face) "gnus-fun" "gnus/gnus-fun.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from gnus/gnus-fun.el (autoload 'gnus-random-x-face "gnus-fun" "\ @@ -11921,7 +11873,7 @@ FILE should be a PNG file that's 48x48 and smaller than or equal to ;;;*** ;;;### (autoloads (gnus-treat-mail-gravatar gnus-treat-from-gravatar) -;;;;;; "gnus-gravatar" "gnus/gnus-gravatar.el" (20355 10021)) +;;;;;; "gnus-gravatar" "gnus/gnus-gravatar.el" (20229 56251)) ;;; Generated autoloads from gnus/gnus-gravatar.el (autoload 'gnus-treat-from-gravatar "gnus-gravatar" "\ @@ -11939,7 +11891,7 @@ If gravatars are already displayed, remove them. ;;;*** ;;;### (autoloads (gnus-fetch-group-other-frame gnus-fetch-group) -;;;;;; "gnus-group" "gnus/gnus-group.el" (20355 10021)) +;;;;;; "gnus-group" "gnus/gnus-group.el" (20268 11628)) ;;; Generated autoloads from gnus/gnus-group.el (autoload 'gnus-fetch-group "gnus-group" "\ @@ -11957,7 +11909,7 @@ Pop up a frame and enter GROUP. ;;;*** ;;;### (autoloads (gnus-html-prefetch-images gnus-article-html) "gnus-html" -;;;;;; "gnus/gnus-html.el" (20355 10021)) +;;;;;; "gnus/gnus-html.el" (20273 59945)) ;;; Generated autoloads from gnus/gnus-html.el (autoload 'gnus-article-html "gnus-html" "\ @@ -11973,7 +11925,7 @@ Pop up a frame and enter GROUP. ;;;*** ;;;### (autoloads (gnus-batch-score) "gnus-kill" "gnus/gnus-kill.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from gnus/gnus-kill.el (defalias 'gnus-batch-kill 'gnus-batch-score) @@ -11988,7 +11940,7 @@ Usage: emacs -batch -l ~/.emacs -l gnus -f gnus-batch-score ;;;### (autoloads (gnus-mailing-list-mode gnus-mailing-list-insinuate ;;;;;; turn-on-gnus-mailing-list-mode) "gnus-ml" "gnus/gnus-ml.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from gnus/gnus-ml.el (autoload 'turn-on-gnus-mailing-list-mode "gnus-ml" "\ @@ -12013,7 +11965,7 @@ Minor mode for providing mailing-list commands. ;;;### (autoloads (gnus-group-split-fancy gnus-group-split gnus-group-split-update ;;;;;; gnus-group-split-setup) "gnus-mlspl" "gnus/gnus-mlspl.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from gnus/gnus-mlspl.el (autoload 'gnus-group-split-setup "gnus-mlspl" "\ @@ -12114,7 +12066,7 @@ Calling (gnus-group-split-fancy nil nil \"mail.others\") returns: ;;;*** ;;;### (autoloads (gnus-button-reply gnus-button-mailto gnus-msg-mail) -;;;;;; "gnus-msg" "gnus/gnus-msg.el" (20361 20134)) +;;;;;; "gnus-msg" "gnus/gnus-msg.el" (20360 57703)) ;;; Generated autoloads from gnus/gnus-msg.el (autoload 'gnus-msg-mail "gnus-msg" "\ @@ -12142,7 +12094,7 @@ Like `message-reply'. ;;;### (autoloads (gnus-treat-newsgroups-picon gnus-treat-mail-picon ;;;;;; gnus-treat-from-picon) "gnus-picon" "gnus/gnus-picon.el" -;;;;;; (20355 10021)) +;;;;;; (20280 8018)) ;;; Generated autoloads from gnus/gnus-picon.el (autoload 'gnus-treat-from-picon "gnus-picon" "\ @@ -12169,7 +12121,7 @@ If picons are already displayed, remove them. ;;;;;; gnus-sorted-nintersection gnus-sorted-range-intersection ;;;;;; gnus-sorted-intersection gnus-intersection gnus-sorted-complement ;;;;;; gnus-sorted-ndifference gnus-sorted-difference) "gnus-range" -;;;;;; "gnus/gnus-range.el" (20355 10021)) +;;;;;; "gnus/gnus-range.el" (20229 56251)) ;;; Generated autoloads from gnus/gnus-range.el (autoload 'gnus-sorted-difference "gnus-range" "\ @@ -12237,7 +12189,7 @@ Add NUM into sorted LIST by side effect. ;;;*** ;;;### (autoloads (gnus-registry-install-hooks gnus-registry-initialize) -;;;;;; "gnus-registry" "gnus/gnus-registry.el" (20355 10021)) +;;;;;; "gnus-registry" "gnus/gnus-registry.el" (20376 41972)) ;;; Generated autoloads from gnus/gnus-registry.el (autoload 'gnus-registry-initialize "gnus-registry" "\ @@ -12253,8 +12205,8 @@ Install the registry hooks. ;;;*** ;;;### (autoloads (gnus-sieve-article-add-rule gnus-sieve-generate -;;;;;; gnus-sieve-update) "gnus-sieve" "gnus/gnus-sieve.el" (20355 -;;;;;; 10021)) +;;;;;; gnus-sieve-update) "gnus-sieve" "gnus/gnus-sieve.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from gnus/gnus-sieve.el (autoload 'gnus-sieve-update "gnus-sieve" "\ @@ -12282,7 +12234,7 @@ See the documentation for these variables and functions for details. ;;;*** ;;;### (autoloads (gnus-update-format) "gnus-spec" "gnus/gnus-spec.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from gnus/gnus-spec.el (autoload 'gnus-update-format "gnus-spec" "\ @@ -12293,7 +12245,7 @@ Update the format specification near point. ;;;*** ;;;### (autoloads (gnus-declare-backend) "gnus-start" "gnus/gnus-start.el" -;;;;;; (20361 20134)) +;;;;;; (20360 57703)) ;;; Generated autoloads from gnus/gnus-start.el (autoload 'gnus-declare-backend "gnus-start" "\ @@ -12304,7 +12256,7 @@ Declare back end NAME with ABILITIES as a Gnus back end. ;;;*** ;;;### (autoloads (gnus-summary-bookmark-jump) "gnus-sum" "gnus/gnus-sum.el" -;;;;;; (20355 10021)) +;;;;;; (20325 60273)) ;;; Generated autoloads from gnus/gnus-sum.el (autoload 'gnus-summary-bookmark-jump "gnus-sum" "\ @@ -12316,7 +12268,7 @@ BOOKMARK is a bookmark name or a bookmark record. ;;;*** ;;;### (autoloads (gnus-sync-install-hooks gnus-sync-initialize) -;;;;;; "gnus-sync" "gnus/gnus-sync.el" (20355 10021)) +;;;;;; "gnus-sync" "gnus/gnus-sync.el" (20229 56251)) ;;; Generated autoloads from gnus/gnus-sync.el (autoload 'gnus-sync-initialize "gnus-sync" "\ @@ -12332,7 +12284,7 @@ Install the sync hooks. ;;;*** ;;;### (autoloads (gnus-add-configuration) "gnus-win" "gnus/gnus-win.el" -;;;;;; (20355 10021)) +;;;;;; (20376 41972)) ;;; Generated autoloads from gnus/gnus-win.el (autoload 'gnus-add-configuration "gnus-win" "\ @@ -12343,7 +12295,7 @@ Add the window configuration CONF to `gnus-buffer-configuration'. ;;;*** ;;;### (autoloads (gnutls-min-prime-bits) "gnutls" "net/gnutls.el" -;;;;;; (20355 10021)) +;;;;;; (20286 28414)) ;;; Generated autoloads from net/gnutls.el (defvar gnutls-min-prime-bits nil "\ @@ -12359,7 +12311,7 @@ A value of nil says to use the default gnutls value.") ;;;*** -;;;### (autoloads (gomoku) "gomoku" "play/gomoku.el" (20355 10021)) +;;;### (autoloads (gomoku) "gomoku" "play/gomoku.el" (20355 835)) ;;; Generated autoloads from play/gomoku.el (autoload 'gomoku "gomoku" "\ @@ -12387,7 +12339,7 @@ Use \\[describe-mode] for more info. ;;;### (autoloads (goto-address-prog-mode goto-address-mode goto-address ;;;;;; goto-address-at-point) "goto-addr" "net/goto-addr.el" (20355 -;;;;;; 10021)) +;;;;;; 835)) ;;; Generated autoloads from net/goto-addr.el (define-obsolete-function-alias 'goto-address-at-mouse 'goto-address-at-point "22.1") @@ -12429,7 +12381,7 @@ Like `goto-address-mode', but only for comments and strings. ;;;*** ;;;### (autoloads (gravatar-retrieve-synchronously gravatar-retrieve) -;;;;;; "gravatar" "gnus/gravatar.el" (20355 10021)) +;;;;;; "gravatar" "gnus/gravatar.el" (20280 8018)) ;;; Generated autoloads from gnus/gravatar.el (autoload 'gravatar-retrieve "gravatar" "\ @@ -12445,9 +12397,9 @@ Retrieve MAIL-ADDRESS gravatar and returns it. ;;;*** -;;;### (autoloads (zrgrep rgrep lgrep grep-find grep grep-mode grep-compute-defaults +;;;### (autoloads (zrgrep rgrep lgrep grep-find grep grep-compute-defaults ;;;;;; grep-process-setup grep-setup-hook grep-find-command grep-command -;;;;;; grep-window-height) "grep" "progmodes/grep.el" (20369 14251)) +;;;;;; grep-window-height) "grep" "progmodes/grep.el" (20370 4296)) ;;; Generated autoloads from progmodes/grep.el (defvar grep-window-height nil "\ @@ -12520,11 +12472,6 @@ Set up `compilation-exit-message-function' and run `grep-setup-hook'. (autoload 'grep-compute-defaults "grep" "\ -\(fn)" nil nil) - -(autoload 'grep-mode "grep" "\ -Sets `grep-last-buffer' and `compilation-window-height'. - \(fn)" nil nil) (autoload 'grep "grep" "\ @@ -12610,7 +12557,7 @@ file name to `*.gz', and sets `grep-highlight-matches' to `always'. ;;;*** -;;;### (autoloads (gs-load-image) "gs" "gs.el" (20355 10021)) +;;;### (autoloads (gs-load-image) "gs" "gs.el" (20229 56251)) ;;; Generated autoloads from gs.el (autoload 'gs-load-image "gs" "\ @@ -12624,7 +12571,7 @@ the form \"WINDOW-ID PIXMAP-ID\". Value is non-nil if successful. ;;;*** ;;;### (autoloads (gud-tooltip-mode gdb-script-mode jdb pdb perldb -;;;;;; xdb dbx sdb gud-gdb) "gud" "progmodes/gud.el" (20373 11301)) +;;;;;; xdb dbx sdb gud-gdb) "gud" "progmodes/gud.el" (20373 62846)) ;;; Generated autoloads from progmodes/gud.el (autoload 'gud-gdb "gud" "\ @@ -12712,8 +12659,8 @@ it if ARG is omitted or nil. ;;;*** -;;;### (autoloads (handwrite) "handwrite" "play/handwrite.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (handwrite) "handwrite" "play/handwrite.el" (20304 +;;;;;; 58723)) ;;; Generated autoloads from play/handwrite.el (autoload 'handwrite "handwrite" "\ @@ -12731,7 +12678,7 @@ Variables: `handwrite-linespace' (default 12) ;;;*** ;;;### (autoloads (hanoi-unix-64 hanoi-unix hanoi) "hanoi" "play/hanoi.el" -;;;;;; (20355 10021)) +;;;;;; (19981 63558)) ;;; Generated autoloads from play/hanoi.el (autoload 'hanoi "hanoi" "\ @@ -12760,7 +12707,7 @@ to be updated. ;;;### (autoloads (mail-check-payment mail-add-payment-async mail-add-payment ;;;;;; hashcash-verify-payment hashcash-insert-payment-async hashcash-insert-payment) -;;;;;; "hashcash" "mail/hashcash.el" (20355 10021)) +;;;;;; "hashcash" "mail/hashcash.el" (20355 835)) ;;; Generated autoloads from mail/hashcash.el (autoload 'hashcash-insert-payment "hashcash" "\ @@ -12805,7 +12752,7 @@ Prefix arg sets default accept amount temporarily. ;;;### (autoloads (scan-buf-previous-region scan-buf-next-region ;;;;;; scan-buf-move-to-region help-at-pt-display-when-idle help-at-pt-set-timer ;;;;;; help-at-pt-cancel-timer display-local-help help-at-pt-kbd-string -;;;;;; help-at-pt-string) "help-at-pt" "help-at-pt.el" (20355 10021)) +;;;;;; help-at-pt-string) "help-at-pt" "help-at-pt.el" (20229 56251)) ;;; Generated autoloads from help-at-pt.el (autoload 'help-at-pt-string "help-at-pt" "\ @@ -12935,7 +12882,7 @@ different regions. With numeric argument ARG, behaves like ;;;### (autoloads (doc-file-to-info doc-file-to-man describe-categories ;;;;;; describe-syntax describe-variable variable-at-point describe-function-1 ;;;;;; find-lisp-object-file-name help-C-file-name describe-function) -;;;;;; "help-fns" "help-fns.el" (20355 10021)) +;;;;;; "help-fns" "help-fns.el" (20298 64606)) ;;; Generated autoloads from help-fns.el (autoload 'describe-function "help-fns" "\ @@ -13015,7 +12962,7 @@ Produce a texinfo buffer with sorted doc-strings from the DOC file. ;;;*** ;;;### (autoloads (three-step-help) "help-macro" "help-macro.el" -;;;;;; (20355 10021)) +;;;;;; (20255 22932)) ;;; Generated autoloads from help-macro.el (defvar three-step-help nil "\ @@ -13031,8 +12978,8 @@ gives the window that lists the options.") ;;;### (autoloads (help-xref-on-pp help-insert-xref-button help-xref-button ;;;;;; help-make-xrefs help-buffer help-setup-xref help-mode-finish -;;;;;; help-mode-setup help-mode) "help-mode" "help-mode.el" (20355 -;;;;;; 10021)) +;;;;;; help-mode-setup help-mode) "help-mode" "help-mode.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from help-mode.el (autoload 'help-mode "help-mode" "\ @@ -13125,7 +13072,7 @@ Add xrefs for symbols in `pp's output between FROM and TO. ;;;*** ;;;### (autoloads (Helper-help Helper-describe-bindings) "helper" -;;;;;; "emacs-lisp/helper.el" (20355 10021)) +;;;;;; "emacs-lisp/helper.el" (20229 56251)) ;;; Generated autoloads from emacs-lisp/helper.el (autoload 'Helper-describe-bindings "helper" "\ @@ -13141,7 +13088,7 @@ Provide help for current mode. ;;;*** ;;;### (autoloads (hexlify-buffer hexl-find-file hexl-mode) "hexl" -;;;;;; "hexl.el" (20361 20134)) +;;;;;; "hexl.el" (20364 20442)) ;;; Generated autoloads from hexl.el (autoload 'hexl-mode "hexl" "\ @@ -13238,7 +13185,7 @@ This discards the buffer's undo information. ;;;### (autoloads (hi-lock-write-interactive-patterns hi-lock-unface-buffer ;;;;;; hi-lock-face-phrase-buffer hi-lock-face-buffer hi-lock-line-face-buffer ;;;;;; global-hi-lock-mode hi-lock-mode) "hi-lock" "hi-lock.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from hi-lock.el (autoload 'hi-lock-mode "hi-lock" "\ @@ -13377,7 +13324,7 @@ be found in variable `hi-lock-interactive-patterns'. ;;;*** ;;;### (autoloads (hide-ifdef-mode) "hideif" "progmodes/hideif.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from progmodes/hideif.el (autoload 'hide-ifdef-mode "hideif" "\ @@ -13421,7 +13368,7 @@ Several variables affect how the hiding is done: ;;;*** ;;;### (autoloads (turn-off-hideshow hs-minor-mode) "hideshow" "progmodes/hideshow.el" -;;;;;; (20356 55829)) +;;;;;; (20356 52797)) ;;; Generated autoloads from progmodes/hideshow.el (defvar hs-special-modes-alist (mapcar 'purecopy '((c-mode "{" "}" "/[*/]" nil nil) (c++-mode "{" "}" "/[*/]" nil nil) (bibtex-mode ("@\\S(*\\(\\s(\\)" 1)) (java-mode "{" "}" "/[*/]" nil nil) (js-mode "{" "}" "/[*/]" nil))) "\ @@ -13487,8 +13434,8 @@ Unconditionally turn off `hs-minor-mode'. ;;;;;; highlight-compare-buffers highlight-changes-rotate-faces ;;;;;; highlight-changes-previous-change highlight-changes-next-change ;;;;;; highlight-changes-remove-highlight highlight-changes-visible-mode -;;;;;; highlight-changes-mode) "hilit-chg" "hilit-chg.el" (20355 -;;;;;; 10021)) +;;;;;; highlight-changes-mode) "hilit-chg" "hilit-chg.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from hilit-chg.el (autoload 'highlight-changes-mode "hilit-chg" "\ @@ -13623,7 +13570,7 @@ See `highlight-changes-mode' for more information on Highlight-Changes mode. ;;;;;; hippie-expand-ignore-buffers hippie-expand-max-buffers hippie-expand-no-restriction ;;;;;; hippie-expand-dabbrev-as-symbol hippie-expand-dabbrev-skip-space ;;;;;; hippie-expand-verbose hippie-expand-try-functions-list) "hippie-exp" -;;;;;; "hippie-exp.el" (20355 10021)) +;;;;;; "hippie-exp.el" (20229 56251)) ;;; Generated autoloads from hippie-exp.el (defvar hippie-expand-try-functions-list '(try-complete-file-name-partially try-complete-file-name try-expand-all-abbrevs try-expand-list try-expand-line try-expand-dabbrev try-expand-dabbrev-all-buffers try-expand-dabbrev-from-kill try-complete-lisp-symbol-partially try-complete-lisp-symbol) "\ @@ -13696,7 +13643,7 @@ argument VERBOSE non-nil makes the function verbose. ;;;*** ;;;### (autoloads (global-hl-line-mode hl-line-mode) "hl-line" "hl-line.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from hl-line.el (autoload 'hl-line-mode "hl-line" "\ @@ -13749,7 +13696,7 @@ Global-Hl-Line mode uses the functions `global-hl-line-unhighlight' and ;;;;;; holiday-bahai-holidays holiday-islamic-holidays holiday-christian-holidays ;;;;;; holiday-hebrew-holidays holiday-other-holidays holiday-local-holidays ;;;;;; holiday-oriental-holidays holiday-general-holidays) "holidays" -;;;;;; "calendar/holidays.el" (20361 20134)) +;;;;;; "calendar/holidays.el" (20390 32086)) ;;; Generated autoloads from calendar/holidays.el (define-obsolete-variable-alias 'general-holidays 'holiday-general-holidays "23.1") @@ -13897,8 +13844,8 @@ The optional LABEL is used to label the buffer created. ;;;*** -;;;### (autoloads (html2text) "html2text" "gnus/html2text.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (html2text) "html2text" "gnus/html2text.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from gnus/html2text.el (autoload 'html2text "html2text" "\ @@ -13909,7 +13856,7 @@ Convert HTML to plain text in the current buffer. ;;;*** ;;;### (autoloads (htmlfontify-copy-and-link-dir htmlfontify-buffer) -;;;;;; "htmlfontify" "htmlfontify.el" (20355 10021)) +;;;;;; "htmlfontify" "htmlfontify.el" (20325 60273)) ;;; Generated autoloads from htmlfontify.el (autoload 'htmlfontify-buffer "htmlfontify" "\ @@ -13939,11 +13886,15 @@ You may also want to set `hfy-page-header' and `hfy-page-footer'. \(fn SRCDIR DSTDIR &optional F-EXT L-EXT)" t nil) +;;;*** + +;;;*** + ;;;*** ;;;### (autoloads (define-ibuffer-filter define-ibuffer-op define-ibuffer-sorter -;;;;;; define-ibuffer-column) "ibuf-macs" "ibuf-macs.el" (20355 -;;;;;; 10021)) +;;;;;; define-ibuffer-column) "ibuf-macs" "ibuf-macs.el" (20405 +;;;;;; 42390)) ;;; Generated autoloads from ibuf-macs.el (autoload 'define-ibuffer-column "ibuf-macs" "\ @@ -13985,6 +13936,8 @@ value if and only if `a' is \"less than\" `b'. \(fn NAME DOCUMENTATION (&key DESCRIPTION) &rest BODY)" nil (quote macro)) +(put 'define-ibuffer-sorter 'doc-string-elt '2) + (put 'define-ibuffer-sorter 'lisp-indent-function '1) (autoload 'define-ibuffer-op "ibuf-macs" "\ @@ -14020,6 +13973,8 @@ macro for exactly what it does. \(fn OP ARGS DOCUMENTATION (&key INTERACTIVE MARK MODIFIER-P DANGEROUS OPSTRING ACTIVE-OPSTRING COMPLEX) &rest BODY)" nil (quote macro)) +(put 'define-ibuffer-op 'doc-string-elt '3) + (put 'define-ibuffer-op 'lisp-indent-function '2) (autoload 'define-ibuffer-filter "ibuf-macs" "\ @@ -14035,12 +13990,14 @@ bound to the current value of the filter. \(fn NAME DOCUMENTATION (&key READER DESCRIPTION) &rest BODY)" nil (quote macro)) +(put 'define-ibuffer-filter 'doc-string-elt '2) + (put 'define-ibuffer-filter 'lisp-indent-function '2) ;;;*** ;;;### (autoloads (ibuffer ibuffer-other-window ibuffer-list-buffers) -;;;;;; "ibuffer" "ibuffer.el" (20374 32165)) +;;;;;; "ibuffer" "ibuffer.el" (20382 62719)) ;;; Generated autoloads from ibuffer.el (autoload 'ibuffer-list-buffers "ibuffer" "\ @@ -14081,7 +14038,7 @@ FORMATS is the value to use for `ibuffer-formats'. ;;;### (autoloads (icalendar-import-buffer icalendar-import-file ;;;;;; icalendar-export-region icalendar-export-file) "icalendar" -;;;;;; "calendar/icalendar.el" (20355 10021)) +;;;;;; "calendar/icalendar.el" (20325 60273)) ;;; Generated autoloads from calendar/icalendar.el (autoload 'icalendar-export-file "icalendar" "\ @@ -14133,8 +14090,8 @@ buffer `*icalendar-errors*'. ;;;*** -;;;### (autoloads (icomplete-mode) "icomplete" "icomplete.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (icomplete-mode) "icomplete" "icomplete.el" (20294 +;;;;;; 23710)) ;;; Generated autoloads from icomplete.el (defvar icomplete-mode nil "\ @@ -14156,7 +14113,7 @@ the mode if ARG is omitted or nil. ;;;*** -;;;### (autoloads (icon-mode) "icon" "progmodes/icon.el" (20355 10021)) +;;;### (autoloads (icon-mode) "icon" "progmodes/icon.el" (20355 835)) ;;; Generated autoloads from progmodes/icon.el (autoload 'icon-mode "icon" "\ @@ -14197,7 +14154,7 @@ with no args, if that value is non-nil. ;;;*** ;;;### (autoloads (idlwave-shell) "idlw-shell" "progmodes/idlw-shell.el" -;;;;;; (20355 10021)) +;;;;;; (20395 5351)) ;;; Generated autoloads from progmodes/idlw-shell.el (autoload 'idlwave-shell "idlw-shell" "\ @@ -14223,7 +14180,7 @@ See also the variable `idlwave-shell-prompt-pattern'. ;;;*** ;;;### (autoloads (idlwave-mode) "idlwave" "progmodes/idlwave.el" -;;;;;; (20355 10021)) +;;;;;; (20389 6410)) ;;; Generated autoloads from progmodes/idlwave.el (autoload 'idlwave-mode "idlwave" "\ @@ -14357,8 +14314,8 @@ The main features of this mode are ;;;;;; ido-find-alternate-file ido-find-file-other-window ido-find-file ;;;;;; ido-find-file-in-dir ido-switch-buffer-other-frame ido-insert-buffer ;;;;;; ido-kill-buffer ido-display-buffer ido-switch-buffer-other-window -;;;;;; ido-switch-buffer ido-mode ido-mode) "ido" "ido.el" (20355 -;;;;;; 10021)) +;;;;;; ido-switch-buffer ido-mode ido-mode) "ido" "ido.el" (20389 +;;;;;; 6410)) ;;; Generated autoloads from ido.el (defvar ido-mode nil "\ @@ -14618,7 +14575,7 @@ DEF, if non-nil, is the default value. ;;;*** -;;;### (autoloads (ielm) "ielm" "ielm.el" (20355 10021)) +;;;### (autoloads (ielm) "ielm" "ielm.el" (20229 56251)) ;;; Generated autoloads from ielm.el (autoload 'ielm "ielm" "\ @@ -14629,7 +14586,7 @@ Switches to the buffer `*ielm*', or creates it if it does not exist. ;;;*** -;;;### (autoloads (iimage-mode) "iimage" "iimage.el" (20355 10021)) +;;;### (autoloads (iimage-mode) "iimage" "iimage.el" (20273 59945)) ;;; Generated autoloads from iimage.el (define-obsolete-function-alias 'turn-on-iimage-mode 'iimage-mode "24.1") @@ -14650,7 +14607,7 @@ the mode if ARG is omitted or nil, and toggle it if ARG is `toggle'. ;;;;;; create-image image-type-auto-detected-p image-type-available-p ;;;;;; image-type image-type-from-file-name image-type-from-file-header ;;;;;; image-type-from-buffer image-type-from-data) "image" "image.el" -;;;;;; (20377 8374)) +;;;;;; (20377 16772)) ;;; Generated autoloads from image.el (autoload 'image-type-from-data "image" "\ @@ -14851,7 +14808,7 @@ If Emacs is compiled without ImageMagick support, do nothing. ;;;;;; image-dired-jump-thumbnail-buffer image-dired-delete-tag ;;;;;; image-dired-tag-files image-dired-show-all-from-dir image-dired-display-thumbs ;;;;;; image-dired-dired-with-window-configuration image-dired-dired-toggle-marked-thumbs) -;;;;;; "image-dired" "image-dired.el" (20355 10021)) +;;;;;; "image-dired" "image-dired.el" (20229 56251)) ;;; Generated autoloads from image-dired.el (autoload 'image-dired-dired-toggle-marked-thumbs "image-dired" "\ @@ -14989,7 +14946,7 @@ easy-to-use form. ;;;### (autoloads (auto-image-file-mode insert-image-file image-file-name-regexp ;;;;;; image-file-name-regexps image-file-name-extensions) "image-file" -;;;;;; "image-file.el" (20355 10021)) +;;;;;; "image-file.el" (20229 56251)) ;;; Generated autoloads from image-file.el (defvar image-file-name-extensions (purecopy '("png" "jpeg" "jpg" "gif" "tiff" "tif" "xbm" "xpm" "pbm" "pgm" "ppm" "pnm" "svg")) "\ @@ -15052,7 +15009,7 @@ An image file is one whose name has an extension in ;;;*** ;;;### (autoloads (image-bookmark-jump image-mode-as-text image-minor-mode -;;;;;; image-mode) "image-mode" "image-mode.el" (20355 10021)) +;;;;;; image-mode) "image-mode" "image-mode.el" (20400 38248)) ;;; Generated autoloads from image-mode.el (autoload 'image-mode "image-mode" "\ @@ -15097,7 +15054,7 @@ on these modes. ;;;*** ;;;### (autoloads (imenu imenu-add-menubar-index imenu-add-to-menubar -;;;;;; imenu-sort-function) "imenu" "imenu.el" (20369 14251)) +;;;;;; imenu-sort-function) "imenu" "imenu.el" (20395 5351)) ;;; Generated autoloads from imenu.el (defvar imenu-sort-function nil "\ @@ -15214,7 +15171,7 @@ for more information. ;;;### (autoloads (indian-2-column-to-ucs-region in-is13194-pre-write-conversion ;;;;;; in-is13194-post-read-conversion indian-compose-string indian-compose-region) -;;;;;; "ind-util" "language/ind-util.el" (20355 10021)) +;;;;;; "ind-util" "language/ind-util.el" (20229 56251)) ;;; Generated autoloads from language/ind-util.el (autoload 'indian-compose-region "ind-util" "\ @@ -15246,7 +15203,7 @@ Convert old Emacs Devanagari characters to UCS. ;;;### (autoloads (inferior-lisp inferior-lisp-prompt inferior-lisp-load-command ;;;;;; inferior-lisp-program inferior-lisp-filter-regexp) "inf-lisp" -;;;;;; "progmodes/inf-lisp.el" (20355 10021)) +;;;;;; "progmodes/inf-lisp.el" (20355 835)) ;;; Generated autoloads from progmodes/inf-lisp.el (defvar inferior-lisp-filter-regexp (purecopy "\\`\\s *\\(:\\(\\w\\|\\s_\\)\\)?\\s *\\'") "\ @@ -15313,7 +15270,7 @@ of `inferior-lisp-program'). Runs the hooks from ;;;;;; Info-goto-emacs-key-command-node Info-goto-emacs-command-node ;;;;;; Info-mode info-finder info-apropos Info-index Info-directory ;;;;;; Info-on-current-buffer info-standalone info-emacs-manual -;;;;;; info info-other-window) "info" "info.el" (20355 10021)) +;;;;;; info info-other-window) "info" "info.el" (20389 6410)) ;;; Generated autoloads from info.el (autoload 'info-other-window "info" "\ @@ -15499,7 +15456,7 @@ Go to Info buffer that displays MANUAL, creating it if none already exists. ;;;### (autoloads (info-complete-file info-complete-symbol info-lookup-file ;;;;;; info-lookup-symbol info-lookup-reset) "info-look" "info-look.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from info-look.el (autoload 'info-lookup-reset "info-look" "\ @@ -15548,7 +15505,7 @@ Perform completion on file preceding point. ;;;### (autoloads (info-xref-docstrings info-xref-check-all-custom ;;;;;; info-xref-check-all info-xref-check) "info-xref" "info-xref.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from info-xref.el (autoload 'info-xref-check "info-xref" "\ @@ -15631,7 +15588,7 @@ the sources handy. ;;;*** ;;;### (autoloads (batch-info-validate Info-validate Info-split Info-split-threshold -;;;;;; Info-tagify) "informat" "informat.el" (20355 10021)) +;;;;;; Info-tagify) "informat" "informat.el" (20229 56251)) ;;; Generated autoloads from informat.el (autoload 'Info-tagify "informat" "\ @@ -15678,7 +15635,7 @@ For example, invoke \"emacs -batch -f batch-info-validate $info/ ~/*.info\" ;;;### (autoloads (isearch-process-search-multibyte-characters isearch-toggle-input-method ;;;;;; isearch-toggle-specified-input-method) "isearch-x" "international/isearch-x.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from international/isearch-x.el (autoload 'isearch-toggle-specified-input-method "isearch-x" "\ @@ -15698,8 +15655,8 @@ Toggle input method in interactive search. ;;;*** -;;;### (autoloads (isearchb-activate) "isearchb" "isearchb.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (isearchb-activate) "isearchb" "isearchb.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from isearchb.el (autoload 'isearchb-activate "isearchb" "\ @@ -15715,7 +15672,7 @@ accessed via isearchb. ;;;### (autoloads (iso-cvt-define-menu iso-cvt-write-only iso-cvt-read-only ;;;;;; iso-sgml2iso iso-iso2sgml iso-iso2duden iso-iso2gtex iso-gtex2iso ;;;;;; iso-tex2iso iso-iso2tex iso-german iso-spanish) "iso-cvt" -;;;;;; "international/iso-cvt.el" (20355 10021)) +;;;;;; "international/iso-cvt.el" (20229 56251)) ;;; Generated autoloads from international/iso-cvt.el (autoload 'iso-spanish "iso-cvt" "\ @@ -15806,7 +15763,7 @@ Add submenus to the File menu, to convert to and from various formats. ;;;*** ;;;### (autoloads nil "iso-transl" "international/iso-transl.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from international/iso-transl.el (or key-translation-map (setq key-translation-map (make-sparse-keymap))) (define-key key-translation-map "\C-x8" 'iso-transl-ctl-x-8-map) @@ -15818,7 +15775,7 @@ Add submenus to the File menu, to convert to and from various formats. ;;;;;; ispell-complete-word ispell-continue ispell-buffer ispell-comments-and-strings ;;;;;; ispell-region ispell-change-dictionary ispell-kill-ispell ;;;;;; ispell-help ispell-pdict-save ispell-word ispell-personal-dictionary) -;;;;;; "ispell" "textmodes/ispell.el" (20374 32165)) +;;;;;; "ispell" "textmodes/ispell.el" (20373 62846)) ;;; Generated autoloads from textmodes/ispell.el (put 'ispell-check-comments 'safe-local-variable (lambda (a) (memq a '(nil t exclusive)))) @@ -16045,8 +16002,8 @@ You can bind this to the key C-c i in GNUS or mail by adding to ;;;*** -;;;### (autoloads (iswitchb-mode) "iswitchb" "iswitchb.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (iswitchb-mode) "iswitchb" "iswitchb.el" (20389 +;;;;;; 6410)) ;;; Generated autoloads from iswitchb.el (defvar iswitchb-mode nil "\ @@ -16074,7 +16031,7 @@ between buffers using substrings. See `iswitchb' for details. ;;;### (autoloads (read-hiragana-string japanese-zenkaku-region japanese-hankaku-region ;;;;;; japanese-hiragana-region japanese-katakana-region japanese-zenkaku ;;;;;; japanese-hankaku japanese-hiragana japanese-katakana setup-japanese-environment-internal) -;;;;;; "japan-util" "language/japan-util.el" (20355 10021)) +;;;;;; "japan-util" "language/japan-util.el" (20229 56251)) ;;; Generated autoloads from language/japan-util.el (autoload 'setup-japanese-environment-internal "japan-util" "\ @@ -16152,7 +16109,7 @@ If non-nil, second arg INITIAL-INPUT is a string to insert before reading. ;;;*** ;;;### (autoloads (jka-compr-uninstall jka-compr-handler) "jka-compr" -;;;;;; "jka-compr.el" (20355 10021)) +;;;;;; "jka-compr.el" (20304 59396)) ;;; Generated autoloads from jka-compr.el (defvar jka-compr-inhibit nil "\ @@ -16175,7 +16132,7 @@ by `jka-compr-installed'. ;;;*** -;;;### (autoloads (js-mode) "js" "progmodes/js.el" (20378 29222)) +;;;### (autoloads (js-mode) "js" "progmodes/js.el" (20376 50278)) ;;; Generated autoloads from progmodes/js.el (autoload 'js-mode "js" "\ @@ -16189,7 +16146,7 @@ Major mode for editing JavaScript. ;;;### (autoloads (keypad-setup keypad-numlock-shifted-setup keypad-shifted-setup ;;;;;; keypad-numlock-setup keypad-setup) "keypad" "emulation/keypad.el" -;;;;;; (20355 10021)) +;;;;;; (20239 35035)) ;;; Generated autoloads from emulation/keypad.el (defvar keypad-setup nil "\ @@ -16245,7 +16202,7 @@ the decimal key on the keypad is mapped to DECIMAL instead of `.' ;;;*** ;;;### (autoloads (kinsoku) "kinsoku" "international/kinsoku.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from international/kinsoku.el (autoload 'kinsoku "kinsoku" "\ @@ -16266,8 +16223,8 @@ the context of text formatting. ;;;*** -;;;### (autoloads (kkc-region) "kkc" "international/kkc.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (kkc-region) "kkc" "international/kkc.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from international/kkc.el (defvar kkc-after-update-conversion-functions nil "\ @@ -16292,7 +16249,7 @@ and the return value is the length of the conversion. ;;;### (autoloads (kmacro-end-call-mouse kmacro-end-and-call-macro ;;;;;; kmacro-end-or-call-macro kmacro-start-macro-or-insert-counter ;;;;;; kmacro-call-macro kmacro-end-macro kmacro-start-macro kmacro-exec-ring-item) -;;;;;; "kmacro" "kmacro.el" (20355 10021)) +;;;;;; "kmacro" "kmacro.el" (20389 6410)) ;;; Generated autoloads from kmacro.el (global-set-key "\C-x(" 'kmacro-start-macro) (global-set-key "\C-x)" 'kmacro-end-macro) @@ -16403,7 +16360,7 @@ If kbd macro currently being defined end it before activating it. ;;;*** ;;;### (autoloads (setup-korean-environment-internal) "korea-util" -;;;;;; "language/korea-util.el" (20355 10021)) +;;;;;; "language/korea-util.el" (20355 835)) ;;; Generated autoloads from language/korea-util.el (defvar default-korean-keyboard (purecopy (if (string-match "3" (or (getenv "HANGUL_KEYBOARD_TYPE") "")) "3" "")) "\ @@ -16418,7 +16375,7 @@ The kind of Korean keyboard for Korean input method. ;;;*** ;;;### (autoloads (landmark landmark-test-run) "landmark" "play/landmark.el" -;;;;;; (20355 10021)) +;;;;;; (20355 835)) ;;; Generated autoloads from play/landmark.el (defalias 'landmark-repeat 'landmark-test-run) @@ -16450,7 +16407,7 @@ Use \\[describe-mode] for more info. ;;;### (autoloads (lao-compose-region lao-composition-function lao-transcribe-roman-to-lao-string ;;;;;; lao-transcribe-single-roman-syllable-to-lao lao-compose-string) -;;;;;; "lao-util" "language/lao-util.el" (20355 10021)) +;;;;;; "lao-util" "language/lao-util.el" (20229 56251)) ;;; Generated autoloads from language/lao-util.el (autoload 'lao-compose-string "lao-util" "\ @@ -16489,7 +16446,7 @@ Transcribe Romanized Lao string STR to Lao character string. ;;;### (autoloads (latexenc-find-file-coding-system latexenc-coding-system-to-inputenc ;;;;;; latexenc-inputenc-to-coding-system latex-inputenc-coding-alist) -;;;;;; "latexenc" "international/latexenc.el" (20355 10021)) +;;;;;; "latexenc" "international/latexenc.el" (20229 56251)) ;;; Generated autoloads from international/latexenc.el (defvar latex-inputenc-coding-alist (purecopy '(("ansinew" . windows-1252) ("applemac" . mac-roman) ("ascii" . us-ascii) ("cp1250" . windows-1250) ("cp1252" . windows-1252) ("cp1257" . cp1257) ("cp437de" . cp437) ("cp437" . cp437) ("cp850" . cp850) ("cp852" . cp852) ("cp858" . cp858) ("cp865" . cp865) ("latin1" . iso-8859-1) ("latin2" . iso-8859-2) ("latin3" . iso-8859-3) ("latin4" . iso-8859-4) ("latin5" . iso-8859-5) ("latin9" . iso-8859-15) ("next" . next) ("utf8" . utf-8) ("utf8x" . utf-8))) "\ @@ -16521,7 +16478,7 @@ coding system names is determined from `latex-inputenc-coding-alist'. ;;;*** ;;;### (autoloads (latin1-display-ucs-per-lynx latin1-display latin1-display) -;;;;;; "latin1-disp" "international/latin1-disp.el" (20355 10021)) +;;;;;; "latin1-disp" "international/latin1-disp.el" (20229 56251)) ;;; Generated autoloads from international/latin1-disp.el (defvar latin1-display nil "\ @@ -16563,7 +16520,7 @@ use either \\[customize] or the function `latin1-display'.") ;;;*** ;;;### (autoloads (ld-script-mode) "ld-script" "progmodes/ld-script.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from progmodes/ld-script.el (autoload 'ld-script-mode "ld-script" "\ @@ -16574,7 +16531,7 @@ A major mode to edit GNU ld script files ;;;*** ;;;### (autoloads (ledit-from-lisp-mode ledit-mode) "ledit" "ledit.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from ledit.el (defconst ledit-save-files t "\ @@ -16609,7 +16566,7 @@ do (setq lisp-mode-hook 'ledit-from-lisp-mode) ;;;*** -;;;### (autoloads (life) "life" "play/life.el" (20355 10021)) +;;;### (autoloads (life) "life" "play/life.el" (20229 56251)) ;;; Generated autoloads from play/life.el (autoload 'life "life" "\ @@ -16623,7 +16580,7 @@ generations (this defaults to 1). ;;;*** ;;;### (autoloads (global-linum-mode linum-mode linum-format) "linum" -;;;;;; "linum.el" (20355 10021)) +;;;;;; "linum.el" (20229 56251)) ;;; Generated autoloads from linum.el (defvar linum-format 'dynamic "\ @@ -16668,8 +16625,8 @@ See `linum-mode' for more information on Linum mode. ;;;*** -;;;### (autoloads (unload-feature) "loadhist" "loadhist.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (unload-feature) "loadhist" "loadhist.el" (20400 +;;;;;; 16870)) ;;; Generated autoloads from loadhist.el (autoload 'unload-feature "loadhist" "\ @@ -16701,7 +16658,7 @@ something strange, such as redefining an Emacs function. ;;;*** ;;;### (autoloads (locate-with-filter locate locate-ls-subdir-switches) -;;;;;; "locate" "locate.el" (20355 10021)) +;;;;;; "locate" "locate.el" (20229 56251)) ;;; Generated autoloads from locate.el (defvar locate-ls-subdir-switches (purecopy "-al") "\ @@ -16753,7 +16710,7 @@ except that FILTER is not optional. ;;;*** -;;;### (autoloads (log-edit) "log-edit" "vc/log-edit.el" (20355 10021)) +;;;### (autoloads (log-edit) "log-edit" "vc/log-edit.el" (20400 16870)) ;;; Generated autoloads from vc/log-edit.el (autoload 'log-edit "log-edit" "\ @@ -16780,8 +16737,8 @@ uses the current buffer. ;;;*** -;;;### (autoloads (log-view-mode) "log-view" "vc/log-view.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (log-view-mode) "log-view" "vc/log-view.el" (20280 +;;;;;; 8018)) ;;; Generated autoloads from vc/log-view.el (autoload 'log-view-mode "log-view" "\ @@ -16791,8 +16748,8 @@ Major mode for browsing CVS log output. ;;;*** -;;;### (autoloads (longlines-mode) "longlines" "longlines.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (longlines-mode) "longlines" "longlines.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from longlines.el (autoload 'longlines-mode "longlines" "\ @@ -16818,8 +16775,8 @@ newlines are indicated with a symbol. ;;;*** ;;;### (autoloads (print-region lpr-region print-buffer lpr-buffer -;;;;;; lpr-command lpr-switches printer-name) "lpr" "lpr.el" (20355 -;;;;;; 10021)) +;;;;;; lpr-command lpr-switches printer-name) "lpr" "lpr.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from lpr.el (defvar lpr-windows-system (memq system-type '(ms-dos windows-nt)) "\ @@ -16915,7 +16872,7 @@ for further customization of the printer command. ;;;*** ;;;### (autoloads (ls-lisp-support-shell-wildcards) "ls-lisp" "ls-lisp.el" -;;;;;; (20355 10021)) +;;;;;; (20273 59945)) ;;; Generated autoloads from ls-lisp.el (defvar ls-lisp-support-shell-wildcards t "\ @@ -16926,8 +16883,8 @@ Otherwise they are treated as Emacs regexps (for backward compatibility).") ;;;*** -;;;### (autoloads (lunar-phases) "lunar" "calendar/lunar.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (lunar-phases) "lunar" "calendar/lunar.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from calendar/lunar.el (autoload 'lunar-phases "lunar" "\ @@ -16942,7 +16899,7 @@ This function is suitable for execution in a .emacs file. ;;;*** ;;;### (autoloads (m4-mode) "m4-mode" "progmodes/m4-mode.el" (20355 -;;;;;; 10021)) +;;;;;; 835)) ;;; Generated autoloads from progmodes/m4-mode.el (autoload 'm4-mode "m4-mode" "\ @@ -16953,7 +16910,7 @@ A major mode to edit m4 macro files. ;;;*** ;;;### (autoloads (macroexpand-all) "macroexp" "emacs-lisp/macroexp.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from emacs-lisp/macroexp.el (autoload 'macroexpand-all "macroexp" "\ @@ -16967,7 +16924,7 @@ definitions to shadow the loaded ones for use in file byte-compilation. ;;;*** ;;;### (autoloads (apply-macro-to-region-lines kbd-macro-query insert-kbd-macro -;;;;;; name-last-kbd-macro) "macros" "macros.el" (20355 10021)) +;;;;;; name-last-kbd-macro) "macros" "macros.el" (20229 56251)) ;;; Generated autoloads from macros.el (autoload 'name-last-kbd-macro "macros" "\ @@ -17056,7 +17013,7 @@ and then select the region of un-tablified names and use ;;;*** ;;;### (autoloads (what-domain mail-extract-address-components) "mail-extr" -;;;;;; "mail/mail-extr.el" (20355 10021)) +;;;;;; "mail/mail-extr.el" (20355 835)) ;;; Generated autoloads from mail/mail-extr.el (autoload 'mail-extract-address-components "mail-extr" "\ @@ -17088,7 +17045,7 @@ Convert mail domain DOMAIN to the country it corresponds to. ;;;### (autoloads (mail-hist-put-headers-into-history mail-hist-keep-history ;;;;;; mail-hist-enable mail-hist-define-keys) "mail-hist" "mail/mail-hist.el" -;;;;;; (20355 10021)) +;;;;;; (20355 835)) ;;; Generated autoloads from mail/mail-hist.el (autoload 'mail-hist-define-keys "mail-hist" "\ @@ -17120,7 +17077,7 @@ This function normally would be called when the message is sent. ;;;### (autoloads (mail-fetch-field mail-unquote-printable-region ;;;;;; mail-unquote-printable mail-quote-printable-region mail-quote-printable ;;;;;; mail-file-babyl-p mail-dont-reply-to-names mail-use-rfc822) -;;;;;; "mail-utils" "mail/mail-utils.el" (20355 10021)) +;;;;;; "mail-utils" "mail/mail-utils.el" (20325 60273)) ;;; Generated autoloads from mail/mail-utils.el (defvar mail-use-rfc822 nil "\ @@ -17195,8 +17152,8 @@ matches may be returned from the message body. ;;;*** ;;;### (autoloads (define-mail-abbrev build-mail-abbrevs mail-abbrevs-setup -;;;;;; mail-abbrevs-mode) "mailabbrev" "mail/mailabbrev.el" (20355 -;;;;;; 10021)) +;;;;;; mail-abbrevs-mode) "mailabbrev" "mail/mailabbrev.el" (20389 +;;;;;; 6410)) ;;; Generated autoloads from mail/mailabbrev.el (defvar mail-abbrevs-mode nil "\ @@ -17247,7 +17204,7 @@ double-quotes. ;;;### (autoloads (mail-complete mail-completion-at-point-function ;;;;;; define-mail-alias expand-mail-aliases mail-complete-style) -;;;;;; "mailalias" "mail/mailalias.el" (20355 10021)) +;;;;;; "mailalias" "mail/mailalias.el" (20229 56251)) ;;; Generated autoloads from mail/mailalias.el (defvar mail-complete-style 'angles "\ @@ -17299,7 +17256,7 @@ current header, calls `mail-complete-function' and passes prefix ARG if any. ;;;*** ;;;### (autoloads (mailclient-send-it) "mailclient" "mail/mailclient.el" -;;;;;; (20355 10021)) +;;;;;; (20239 35035)) ;;; Generated autoloads from mail/mailclient.el (autoload 'mailclient-send-it "mailclient" "\ @@ -17313,7 +17270,7 @@ The mail client is taken to be the handler of mailto URLs. ;;;### (autoloads (makefile-imake-mode makefile-bsdmake-mode makefile-makepp-mode ;;;;;; makefile-gmake-mode makefile-automake-mode makefile-mode) -;;;;;; "make-mode" "progmodes/make-mode.el" (20355 10021)) +;;;;;; "make-mode" "progmodes/make-mode.el" (20395 5351)) ;;; Generated autoloads from progmodes/make-mode.el (autoload 'makefile-mode "make-mode" "\ @@ -17430,8 +17387,8 @@ An adapted `makefile-mode' that knows about imake. ;;;*** -;;;### (autoloads (make-command-summary) "makesum" "makesum.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (make-command-summary) "makesum" "makesum.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from makesum.el (autoload 'make-command-summary "makesum" "\ @@ -17443,7 +17400,7 @@ Previous contents of that buffer are killed first. ;;;*** ;;;### (autoloads (Man-bookmark-jump man-follow man) "man" "man.el" -;;;;;; (20381 5411)) +;;;;;; (20390 32086)) ;;; Generated autoloads from man.el (defalias 'manual-entry 'man) @@ -17497,7 +17454,7 @@ Default bookmark handler for Man buffers. ;;;*** -;;;### (autoloads (master-mode) "master" "master.el" (20355 10021)) +;;;### (autoloads (master-mode) "master" "master.el" (20229 56251)) ;;; Generated autoloads from master.el (autoload 'master-mode "master" "\ @@ -17520,7 +17477,7 @@ yourself the value of `master-of' by calling `master-show-slave'. ;;;*** ;;;### (autoloads (minibuffer-depth-indicate-mode) "mb-depth" "mb-depth.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from mb-depth.el (defvar minibuffer-depth-indicate-mode nil "\ @@ -17553,7 +17510,7 @@ recursion depth in the minibuffer prompt. This is only useful if ;;;;;; message-forward-make-body message-forward message-recover ;;;;;; message-supersede message-cancel-news message-followup message-wide-reply ;;;;;; message-reply message-news message-mail message-mode) "message" -;;;;;; "gnus/message.el" (20355 10021)) +;;;;;; "gnus/message.el" (20280 8018)) ;;; Generated autoloads from gnus/message.el (define-mail-user-agent 'message-user-agent 'message-mail 'message-send-and-exit 'message-kill-buffer 'message-send-hook) @@ -17719,7 +17676,7 @@ which specify the range to operate on. ;;;*** ;;;### (autoloads (metapost-mode metafont-mode) "meta-mode" "progmodes/meta-mode.el" -;;;;;; (20355 10021)) +;;;;;; (20400 16870)) ;;; Generated autoloads from progmodes/meta-mode.el (autoload 'metafont-mode "meta-mode" "\ @@ -17736,7 +17693,7 @@ Major mode for editing MetaPost sources. ;;;### (autoloads (metamail-region metamail-buffer metamail-interpret-body ;;;;;; metamail-interpret-header) "metamail" "mail/metamail.el" -;;;;;; (20355 10021)) +;;;;;; (20355 835)) ;;; Generated autoloads from mail/metamail.el (autoload 'metamail-interpret-header "metamail" "\ @@ -17781,7 +17738,7 @@ redisplayed as output is inserted. ;;;### (autoloads (mh-fully-kill-draft mh-send-letter mh-user-agent-compose ;;;;;; mh-smail-batch mh-smail-other-window mh-smail) "mh-comp" -;;;;;; "mh-e/mh-comp.el" (20355 10021)) +;;;;;; "mh-e/mh-comp.el" (20229 56251)) ;;; Generated autoloads from mh-e/mh-comp.el (autoload 'mh-smail "mh-comp" "\ @@ -17871,7 +17828,7 @@ delete the draft message. ;;;*** -;;;### (autoloads (mh-version) "mh-e" "mh-e/mh-e.el" (20355 10021)) +;;;### (autoloads (mh-version) "mh-e" "mh-e/mh-e.el" (20229 56251)) ;;; Generated autoloads from mh-e/mh-e.el (put 'mh-progs 'risky-local-variable t) @@ -17888,7 +17845,7 @@ Display version information about MH-E and the MH mail handling system. ;;;*** ;;;### (autoloads (mh-folder-mode mh-nmail mh-rmail) "mh-folder" -;;;;;; "mh-e/mh-folder.el" (20371 55972)) +;;;;;; "mh-e/mh-folder.el" (20373 62846)) ;;; Generated autoloads from mh-e/mh-folder.el (autoload 'mh-rmail "mh-folder" "\ @@ -17970,7 +17927,7 @@ perform the operation on all messages in that region. ;;;*** ;;;### (autoloads (midnight-delay-set clean-buffer-list) "midnight" -;;;;;; "midnight.el" (20355 10021)) +;;;;;; "midnight.el" (20229 56251)) ;;; Generated autoloads from midnight.el (autoload 'clean-buffer-list "midnight" "\ @@ -17997,7 +17954,7 @@ to its second argument TM. ;;;*** ;;;### (autoloads (minibuffer-electric-default-mode) "minibuf-eldef" -;;;;;; "minibuf-eldef.el" (20355 10021)) +;;;;;; "minibuf-eldef.el" (20355 835)) ;;; Generated autoloads from minibuf-eldef.el (defvar minibuffer-electric-default-mode nil "\ @@ -18027,7 +17984,7 @@ is modified to remove the default indication. ;;;*** ;;;### (autoloads (list-dynamic-libraries butterfly) "misc" "misc.el" -;;;;;; (20356 27828)) +;;;;;; (20356 48455)) ;;; Generated autoloads from misc.el (autoload 'butterfly "misc" "\ @@ -18057,7 +18014,7 @@ The return value is always nil. ;;;### (autoloads (multi-isearch-files-regexp multi-isearch-files ;;;;;; multi-isearch-buffers-regexp multi-isearch-buffers multi-isearch-setup) -;;;;;; "misearch" "misearch.el" (20355 10021)) +;;;;;; "misearch" "misearch.el" (20229 56251)) ;;; Generated autoloads from misearch.el (add-hook 'isearch-mode-hook 'multi-isearch-setup) @@ -18139,7 +18096,7 @@ whose file names match the specified wildcard. ;;;*** ;;;### (autoloads (mixal-mode) "mixal-mode" "progmodes/mixal-mode.el" -;;;;;; (20355 10021)) +;;;;;; (20239 35035)) ;;; Generated autoloads from progmodes/mixal-mode.el (autoload 'mixal-mode "mixal-mode" "\ @@ -18150,7 +18107,7 @@ Major mode for the mixal asm language. ;;;*** ;;;### (autoloads (mm-default-file-encoding) "mm-encode" "gnus/mm-encode.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from gnus/mm-encode.el (autoload 'mm-default-file-encoding "mm-encode" "\ @@ -18161,7 +18118,7 @@ Return a default encoding for FILE. ;;;*** ;;;### (autoloads (mm-inline-external-body mm-extern-cache-contents) -;;;;;; "mm-extern" "gnus/mm-extern.el" (20355 10021)) +;;;;;; "mm-extern" "gnus/mm-extern.el" (20229 56251)) ;;; Generated autoloads from gnus/mm-extern.el (autoload 'mm-extern-cache-contents "mm-extern" "\ @@ -18180,7 +18137,7 @@ If NO-DISPLAY is nil, display it. Otherwise, do nothing after replacing. ;;;*** ;;;### (autoloads (mm-inline-partial) "mm-partial" "gnus/mm-partial.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from gnus/mm-partial.el (autoload 'mm-inline-partial "mm-partial" "\ @@ -18194,7 +18151,7 @@ If NO-DISPLAY is nil, display it. Otherwise, do nothing after replacing. ;;;*** ;;;### (autoloads (mm-url-insert-file-contents-external mm-url-insert-file-contents) -;;;;;; "mm-url" "gnus/mm-url.el" (20355 10021)) +;;;;;; "mm-url" "gnus/mm-url.el" (20229 56251)) ;;; Generated autoloads from gnus/mm-url.el (autoload 'mm-url-insert-file-contents "mm-url" "\ @@ -18211,7 +18168,7 @@ Insert file contents of URL using `mm-url-program'. ;;;*** ;;;### (autoloads (mm-uu-dissect-text-parts mm-uu-dissect) "mm-uu" -;;;;;; "gnus/mm-uu.el" (20355 10021)) +;;;;;; "gnus/mm-uu.el" (20325 60273)) ;;; Generated autoloads from gnus/mm-uu.el (autoload 'mm-uu-dissect "mm-uu" "\ @@ -18231,7 +18188,7 @@ Assume text has been decoded if DECODED is non-nil. ;;;*** ;;;### (autoloads (mml-attach-file mml-to-mime) "mml" "gnus/mml.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from gnus/mml.el (autoload 'mml-to-mime "mml" "\ @@ -18256,7 +18213,7 @@ body) or \"attachment\" (separate from the body). ;;;*** ;;;### (autoloads (mml1991-sign mml1991-encrypt) "mml1991" "gnus/mml1991.el" -;;;;;; (20355 10021)) +;;;;;; (20291 40061)) ;;; Generated autoloads from gnus/mml1991.el (autoload 'mml1991-encrypt "mml1991" "\ @@ -18273,7 +18230,7 @@ body) or \"attachment\" (separate from the body). ;;;### (autoloads (mml2015-self-encrypt mml2015-sign mml2015-encrypt ;;;;;; mml2015-verify-test mml2015-verify mml2015-decrypt-test mml2015-decrypt) -;;;;;; "mml2015" "gnus/mml2015.el" (20355 10021)) +;;;;;; "mml2015" "gnus/mml2015.el" (20229 56251)) ;;; Generated autoloads from gnus/mml2015.el (autoload 'mml2015-decrypt "mml2015" "\ @@ -18311,10 +18268,17 @@ body) or \"attachment\" (separate from the body). \(fn)" nil nil) +;;;*** + +;;;### (autoloads nil "mode-local" "cedet/mode-local.el" (20405 42940)) +;;; Generated autoloads from cedet/mode-local.el + +(put 'define-overloadable-function 'doc-string-elt 3) + ;;;*** ;;;### (autoloads (m2-mode) "modula2" "progmodes/modula2.el" (20355 -;;;;;; 10021)) +;;;;;; 835)) ;;; Generated autoloads from progmodes/modula2.el (defalias 'modula-2-mode 'm2-mode) @@ -18348,7 +18312,7 @@ followed by the first character of the construct. ;;;*** ;;;### (autoloads (denato-region nato-region unmorse-region morse-region) -;;;;;; "morse" "play/morse.el" (20355 10021)) +;;;;;; "morse" "play/morse.el" (20229 56251)) ;;; Generated autoloads from play/morse.el (autoload 'morse-region "morse" "\ @@ -18374,7 +18338,7 @@ Convert NATO phonetic alphabet in region to ordinary ASCII text. ;;;*** ;;;### (autoloads (mouse-drag-drag mouse-drag-throw) "mouse-drag" -;;;;;; "mouse-drag.el" (20355 10021)) +;;;;;; "mouse-drag.el" (20355 835)) ;;; Generated autoloads from mouse-drag.el (autoload 'mouse-drag-throw "mouse-drag" "\ @@ -18421,7 +18385,7 @@ To test this function, evaluate: ;;;*** -;;;### (autoloads (mpc) "mpc" "mpc.el" (20378 29222)) +;;;### (autoloads (mpc) "mpc" "mpc.el" (20376 50653)) ;;; Generated autoloads from mpc.el (autoload 'mpc "mpc" "\ @@ -18431,7 +18395,7 @@ Main entry point for MPC. ;;;*** -;;;### (autoloads (mpuz) "mpuz" "play/mpuz.el" (20355 10021)) +;;;### (autoloads (mpuz) "mpuz" "play/mpuz.el" (20229 56251)) ;;; Generated autoloads from play/mpuz.el (autoload 'mpuz "mpuz" "\ @@ -18441,7 +18405,7 @@ Multiplication puzzle with GNU Emacs. ;;;*** -;;;### (autoloads (msb-mode) "msb" "msb.el" (20355 10021)) +;;;### (autoloads (msb-mode) "msb" "msb.el" (20355 835)) ;;; Generated autoloads from msb.el (defvar msb-mode nil "\ @@ -18471,7 +18435,7 @@ different buffer menu using the function `msb'. ;;;;;; describe-current-coding-system describe-current-coding-system-briefly ;;;;;; describe-coding-system describe-character-set list-charset-chars ;;;;;; read-charset list-character-sets) "mule-diag" "international/mule-diag.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from international/mule-diag.el (autoload 'list-character-sets "mule-diag" "\ @@ -18608,7 +18572,7 @@ The default is 20. If LIMIT is negative, do not limit the listing. ;;;;;; coding-system-translation-table-for-decode coding-system-pre-write-conversion ;;;;;; coding-system-post-read-conversion lookup-nested-alist set-nested-alist ;;;;;; truncate-string-to-width store-substring string-to-sequence) -;;;;;; "mule-util" "international/mule-util.el" (20355 10021)) +;;;;;; "mule-util" "international/mule-util.el" (20229 56251)) ;;; Generated autoloads from international/mule-util.el (autoload 'string-to-sequence "mule-util" "\ @@ -18619,11 +18583,9 @@ TYPE should be `list' or `vector'. (make-obsolete 'string-to-sequence "use `string-to-list' or `string-to-vector'." "22.1") -(defsubst string-to-list (string) "\ -Return a list of characters in STRING." (append string nil)) +(defsubst string-to-list (string) "Return a list of characters in STRING." (append string nil)) -(defsubst string-to-vector (string) "\ -Return a vector of characters in STRING." (vconcat string)) +(defsubst string-to-vector (string) "Return a vector of characters in STRING." (vconcat string)) (autoload 'store-substring "mule-util" "\ Embed OBJ (string or character) at index IDX of STRING. @@ -18656,16 +18618,7 @@ defaults to \"...\". \(fn STR END-COLUMN &optional START-COLUMN PADDING ELLIPSIS)" nil nil) -(defsubst nested-alist-p (obj) "\ -Return t if OBJ is a nested alist. - -Nested alist is a list of the form (ENTRY . BRANCHES), where ENTRY is -any Lisp object, and BRANCHES is a list of cons cells of the form -\(KEY-ELEMENT . NESTED-ALIST). - -You can use a nested alist to store any Lisp object (ENTRY) for a key -sequence KEYSEQ, where KEYSEQ is a sequence of KEY-ELEMENT. KEYSEQ -can be a string, a vector, or a list." (and obj (listp obj) (listp (cdr obj)))) +(defsubst nested-alist-p (obj) "Return t if OBJ is a nested alist.\n\nNested alist is a list of the form (ENTRY . BRANCHES), where ENTRY is\nany Lisp object, and BRANCHES is a list of cons cells of the form\n(KEY-ELEMENT . NESTED-ALIST).\n\nYou can use a nested alist to store any Lisp object (ENTRY) for a key\nsequence KEYSEQ, where KEYSEQ is a sequence of KEY-ELEMENT. KEYSEQ\ncan be a string, a vector, or a list." (and obj (listp obj) (listp (cdr obj)))) (autoload 'set-nested-alist "mule-util" "\ Set ENTRY for KEYSEQ in a nested alist ALIST. @@ -18748,8 +18701,8 @@ per-character basis, this may not be accurate. ;;;### (autoloads (network-connection network-connection-to-service ;;;;;; whois-reverse-lookup whois finger ftp run-dig dns-lookup-host ;;;;;; nslookup nslookup-host ping traceroute route arp netstat -;;;;;; iwconfig ifconfig) "net-utils" "net/net-utils.el" (20355 -;;;;;; 10021)) +;;;;;; iwconfig ifconfig) "net-utils" "net/net-utils.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from net/net-utils.el (autoload 'ifconfig "net-utils" "\ @@ -18843,8 +18796,8 @@ Open a network connection to HOST on PORT. ;;;*** -;;;### (autoloads (netrc-credentials) "netrc" "net/netrc.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (netrc-credentials) "netrc" "net/netrc.el" (20280 +;;;;;; 8018)) ;;; Generated autoloads from net/netrc.el (autoload 'netrc-credentials "netrc" "\ @@ -18857,7 +18810,7 @@ listed in the PORTS list. ;;;*** ;;;### (autoloads (open-network-stream) "network-stream" "net/network-stream.el" -;;;;;; (20369 14251)) +;;;;;; (20370 4296)) ;;; Generated autoloads from net/network-stream.el (autoload 'open-network-stream "network-stream" "\ @@ -18945,256 +18898,10 @@ STARTTLS upgrades even if Emacs doesn't have built-in TLS functionality. (defalias 'open-protocol-stream 'open-network-stream) -;;;*** - -;;;### (autoloads (comment-indent-new-line comment-auto-fill-only-comments -;;;;;; comment-dwim comment-or-uncomment-region comment-box comment-region -;;;;;; uncomment-region comment-kill comment-set-column comment-indent -;;;;;; comment-indent-default comment-normalize-vars comment-multi-line -;;;;;; comment-padding comment-style comment-column) "newcomment" -;;;;;; "newcomment.el" (20365 17199)) -;;; Generated autoloads from newcomment.el - -(defalias 'indent-for-comment 'comment-indent) - -(defalias 'set-comment-column 'comment-set-column) - -(defalias 'kill-comment 'comment-kill) - -(defalias 'indent-new-comment-line 'comment-indent-new-line) - -(defvar comment-use-syntax 'undecided "\ -Non-nil if syntax-tables can be used instead of regexps. -Can also be `undecided' which means that a somewhat expensive test will -be used to try to determine whether syntax-tables should be trusted -to understand comments or not in the given buffer. -Major modes should set this variable.") - -(defvar comment-column 32 "\ -Column to indent right-margin comments to. -Each mode may establish a different default value for this variable; you -can set the value for a particular mode using that mode's hook. -Comments might be indented to a different value in order not to go beyond -`comment-fill-column' or in order to align them with surrounding comments.") - -(custom-autoload 'comment-column "newcomment" t) -(put 'comment-column 'safe-local-variable 'integerp) - -(defvar comment-start nil "\ -String to insert to start a new comment, or nil if no comment syntax.") -(put 'comment-start 'safe-local-variable 'string-or-null-p) - -(defvar comment-start-skip nil "\ -Regexp to match the start of a comment plus everything up to its body. -If there are any \\(...\\) pairs, the comment delimiter text is held to begin -at the place matched by the close of the first pair.") -(put 'comment-start-skip 'safe-local-variable 'string-or-null-p) - -(defvar comment-end-skip nil "\ -Regexp to match the end of a comment plus everything back to its body.") -(put 'comment-end-skip 'safe-local-variable 'string-or-null-p) - -(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.") -(put 'comment-end 'safe-local-variable 'string-or-null-p) - -(defvar comment-indent-function 'comment-indent-default "\ -Function to compute desired indentation for a comment. -This function is called with no args with point at the beginning of -the comment's starting delimiter and should return either the desired -column indentation or nil. -If nil is returned, indentation is delegated to `indent-according-to-mode'.") - -(defvar comment-insert-comment-function nil "\ -Function to insert a comment when a line doesn't contain one. -The function has no args. - -Applicable at least in modes for languages like fixed-format Fortran where -comments always start in column zero.") - -(defconst comment-styles '((plain nil nil nil nil "Start in column 0 (do not indent), as in Emacs-20") (indent-or-triple nil nil nil multi-char "Start in column 0, but only for single-char starters") (indent nil nil nil t "Full comment per line, ends not aligned") (aligned nil t nil t "Full comment per line, ends aligned") (box nil t t t "Full comment per line, ends aligned, + top and bottom") (extra-line t nil t t "One comment for all lines, end on a line by itself") (multi-line t nil nil t "One comment for all lines, end on last commented line") (box-multi t t t t "One comment for all lines, + top and bottom")) "\ -Comment region style definitions. -Each style is defined with a form (STYLE . (MULTI ALIGN EXTRA INDENT DOC)). -DOC should succinctly describe the style. -STYLE should be a mnemonic symbol. -MULTI specifies that comments are allowed to span multiple lines. - e.g. in C it comments regions as - /* blabla - * bli */ - rather than - /* blabla */ - /* bli */ - if `comment-end' is empty, this has no effect. - -ALIGN specifies that the `comment-end' markers should be aligned. - e.g. in C it comments regions as - /* blabla */ - /* bli */ - rather than - /* blabla */ - /* bli */ - if `comment-end' is empty, this has no effect, unless EXTRA is also set, - in which case the comment gets wrapped in a box. - -EXTRA specifies that an extra line should be used before and after the - region to comment (to put the `comment-end' and `comment-start'). - e.g. in C it comments regions as - /* - * blabla - * bli - */ - rather than - /* blabla - * bli */ - if the comment style is not multi line, this has no effect, unless ALIGN - is also set, in which case the comment gets wrapped in a box. - -INDENT specifies that the `comment-start' markers should not be put at the - left margin but at the current indentation of the region to comment. -If INDENT is `multi-char', that means indent multi-character - comment starters, but not one-character comment starters.") - -(defvar comment-style 'indent "\ -Style to be used for `comment-region'. -See `comment-styles' for a list of available styles.") - -(custom-autoload 'comment-style "newcomment" t) - -(defvar 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. - -Extra spacing between the comment characters and the comment text -makes the comment easier to read. Default is 1. nil means 0.") - -(custom-autoload 'comment-padding "newcomment" t) - -(defvar comment-multi-line nil "\ -Non-nil means `comment-indent-new-line' continues comments. -That is, it inserts no new terminator or starter. -This affects `auto-fill-mode', which is the main reason to -customize this variable. - -It also affects \\[indent-new-comment-line]. However, if you want this -behavior for explicit filling, you might as well use \\[newline-and-indent].") - -(custom-autoload 'comment-multi-line "newcomment" t) - -(autoload 'comment-normalize-vars "newcomment" "\ -Check and setup the variables needed by other commenting functions. -Functions autoloaded from newcomment.el, being entry points, should call -this function before any other, so the rest of the code can assume that -the variables are properly set. - -\(fn &optional NOERROR)" nil nil) - -(autoload 'comment-indent-default "newcomment" "\ -Default for `comment-indent-function'. - -\(fn)" nil nil) - -(autoload 'comment-indent "newcomment" "\ -Indent this line's comment to `comment-column', or insert an empty comment. -If CONTINUE is non-nil, use the `comment-continue' markers if any. - -\(fn &optional CONTINUE)" t nil) - -(autoload 'comment-set-column "newcomment" "\ -Set the comment column based on point. -With no ARG, set the comment column to the current column. -With just minus as arg, kill any comment on this line. -With any other arg, set comment column to indentation of the previous comment - and then align or create a comment on this line at that column. - -\(fn ARG)" t nil) - -(autoload 'comment-kill "newcomment" "\ -Kill the first comment on this line, if any. -With prefix ARG, kill comments on that many lines starting with this one. - -\(fn ARG)" t nil) - -(autoload 'uncomment-region "newcomment" "\ -Uncomment each line in the BEG .. END region. -The numeric prefix ARG can specify a number of chars to remove from the -comment markers. - -\(fn BEG END &optional ARG)" t nil) - -(autoload 'comment-region "newcomment" "\ -Comment or uncomment each line in the region. -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. - -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'. - -\(fn BEG END &optional ARG)" t nil) - -(autoload 'comment-box "newcomment" "\ -Comment out the BEG .. END region, putting it inside a box. -The numeric prefix ARG specifies how many characters to add to begin- and -end- comment markers additionally to what `comment-add' already specifies. - -\(fn BEG END &optional ARG)" t nil) - -(autoload 'comment-or-uncomment-region "newcomment" "\ -Call `comment-region', unless the region only consists of comments, -in which case call `uncomment-region'. If a prefix arg is given, it -is passed on to the respective function. - -\(fn BEG END &optional ARG)" t nil) - -(autoload 'comment-dwim "newcomment" "\ -Call the comment command you want (Do What I Mean). -If the region is active and `transient-mark-mode' is on, call -`comment-region' (unless it only consists of comments, in which -case it calls `uncomment-region'). -Else, if the current line is empty, call `comment-insert-comment-function' -if it is defined, otherwise insert a comment and indent it. -Else if a prefix ARG is specified, call `comment-kill'. -Else, call `comment-indent'. -You can configure `comment-style' to change the way regions are commented. - -\(fn ARG)" t nil) - -(defvar comment-auto-fill-only-comments nil "\ -Non-nil means to only auto-fill inside comments. -This has no effect in modes that do not define a comment syntax.") - -(custom-autoload 'comment-auto-fill-only-comments "newcomment" t) - -(autoload 'comment-indent-new-line "newcomment" "\ -Break line at point and indent, continuing comment if within one. -This indents the body of the continued comment -under the previous comment line. - -This command is intended for styles where you write a comment per line, -starting a new comment (and terminating it if necessary) on each line. -If you want to continue one comment across several lines, use \\[newline-and-indent]. - -If a fill column is specified, it overrides the use of the comment column -or comment indentation. - -The inserted newline is marked hard if variable `use-hard-newlines' is true, -unless optional argument SOFT is non-nil. - -\(fn &optional SOFT)" t nil) - ;;;*** ;;;### (autoloads (newsticker-start newsticker-running-p) "newst-backend" -;;;;;; "net/newst-backend.el" (20355 10021)) +;;;;;; "net/newst-backend.el" (20229 56251)) ;;; Generated autoloads from net/newst-backend.el (autoload 'newsticker-running-p "newst-backend" "\ @@ -19216,7 +18923,7 @@ Run `newsticker-start-hook' if newsticker was not running already. ;;;*** ;;;### (autoloads (newsticker-plainview) "newst-plainview" "net/newst-plainview.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from net/newst-plainview.el (autoload 'newsticker-plainview "newst-plainview" "\ @@ -19227,7 +18934,7 @@ Start newsticker plainview. ;;;*** ;;;### (autoloads (newsticker-show-news) "newst-reader" "net/newst-reader.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from net/newst-reader.el (autoload 'newsticker-show-news "newst-reader" "\ @@ -19238,7 +18945,7 @@ Start reading news. You may want to bind this to a key. ;;;*** ;;;### (autoloads (newsticker-start-ticker newsticker-ticker-running-p) -;;;;;; "newst-ticker" "net/newst-ticker.el" (20355 10021)) +;;;;;; "newst-ticker" "net/newst-ticker.el" (20229 56251)) ;;; Generated autoloads from net/newst-ticker.el (autoload 'newsticker-ticker-running-p "newst-ticker" "\ @@ -19259,7 +18966,7 @@ running already. ;;;*** ;;;### (autoloads (newsticker-treeview) "newst-treeview" "net/newst-treeview.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from net/newst-treeview.el (autoload 'newsticker-treeview "newst-treeview" "\ @@ -19270,7 +18977,7 @@ Start newsticker treeview. ;;;*** ;;;### (autoloads (nndiary-generate-nov-databases) "nndiary" "gnus/nndiary.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from gnus/nndiary.el (autoload 'nndiary-generate-nov-databases "nndiary" "\ @@ -19280,8 +18987,8 @@ Generate NOV databases in all nndiary directories. ;;;*** -;;;### (autoloads (nndoc-add-type) "nndoc" "gnus/nndoc.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (nndoc-add-type) "nndoc" "gnus/nndoc.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from gnus/nndoc.el (autoload 'nndoc-add-type "nndoc" "\ @@ -19296,7 +19003,7 @@ symbol in the alist. ;;;*** ;;;### (autoloads (nnfolder-generate-active-file) "nnfolder" "gnus/nnfolder.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from gnus/nnfolder.el (autoload 'nnfolder-generate-active-file "nnfolder" "\ @@ -19308,7 +19015,7 @@ This command does not work if you use short group names. ;;;*** ;;;### (autoloads (nnml-generate-nov-databases) "nnml" "gnus/nnml.el" -;;;;;; (20355 10021)) +;;;;;; (20281 6865)) ;;; Generated autoloads from gnus/nnml.el (autoload 'nnml-generate-nov-databases "nnml" "\ @@ -19319,15 +19026,15 @@ Generate NOV databases in all nnml directories. ;;;*** ;;;### (autoloads (disable-command enable-command disabled-command-function) -;;;;;; "novice" "novice.el" (20355 10021)) +;;;;;; "novice" "novice.el" (20400 16870)) ;;; Generated autoloads from novice.el +(define-obsolete-variable-alias 'disabled-command-hook 'disabled-command-function "22.1") + (defvar disabled-command-function 'disabled-command-function "\ Function to call to handle disabled commands. If nil, the feature is disabled, i.e., all commands work normally.") -(define-obsolete-variable-alias 'disabled-command-hook 'disabled-command-function "22.1") - (autoload 'disabled-command-function "novice" "\ @@ -19352,7 +19059,7 @@ to future sessions. ;;;*** ;;;### (autoloads (nroff-mode) "nroff-mode" "textmodes/nroff-mode.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from textmodes/nroff-mode.el (autoload 'nroff-mode "nroff-mode" "\ @@ -19367,7 +19074,7 @@ closing requests for requests that are used in matched pairs. ;;;*** ;;;### (autoloads (nxml-glyph-display-string) "nxml-glyph" "nxml/nxml-glyph.el" -;;;;;; (20355 10021)) +;;;;;; (20355 835)) ;;; Generated autoloads from nxml/nxml-glyph.el (autoload 'nxml-glyph-display-string "nxml-glyph" "\ @@ -19379,8 +19086,8 @@ Return nil if the face cannot display a glyph for N. ;;;*** -;;;### (autoloads (nxml-mode) "nxml-mode" "nxml/nxml-mode.el" (20369 -;;;;;; 14251)) +;;;### (autoloads (nxml-mode) "nxml-mode" "nxml/nxml-mode.el" (20370 +;;;;;; 4296)) ;;; Generated autoloads from nxml/nxml-mode.el (autoload 'nxml-mode "nxml-mode" "\ @@ -19442,7 +19149,7 @@ Many aspects this mode can be customized using ;;;*** ;;;### (autoloads (nxml-enable-unicode-char-name-sets) "nxml-uchnm" -;;;;;; "nxml/nxml-uchnm.el" (20355 10021)) +;;;;;; "nxml/nxml-uchnm.el" (20229 56251)) ;;; Generated autoloads from nxml/nxml-uchnm.el (autoload 'nxml-enable-unicode-char-name-sets "nxml-uchnm" "\ @@ -19466,7 +19173,7 @@ the variable `nxml-enabled-unicode-blocks'. ;;;;;; org-babel-pop-to-session-maybe org-babel-load-in-session-maybe ;;;;;; org-babel-expand-src-block-maybe org-babel-view-src-block-info ;;;;;; org-babel-execute-maybe org-babel-execute-safely-maybe) "ob" -;;;;;; "org/ob.el" (20355 10021)) +;;;;;; "org/ob.el" (20347 39495)) ;;; Generated autoloads from org/ob.el (autoload 'org-babel-execute-safely-maybe "ob" "\ @@ -19689,7 +19396,7 @@ Mark current src block ;;;*** ;;;### (autoloads (org-babel-describe-bindings) "ob-keys" "org/ob-keys.el" -;;;;;; (20355 10021)) +;;;;;; (20228 61824)) ;;; Generated autoloads from org/ob-keys.el (autoload 'org-babel-describe-bindings "ob-keys" "\ @@ -19700,7 +19407,7 @@ Describe all keybindings behind `org-babel-key-prefix'. ;;;*** ;;;### (autoloads (org-babel-lob-get-info org-babel-lob-execute-maybe -;;;;;; org-babel-lob-ingest) "ob-lob" "org/ob-lob.el" (20355 10021)) +;;;;;; org-babel-lob-ingest) "ob-lob" "org/ob-lob.el" (20347 39495)) ;;; Generated autoloads from org/ob-lob.el (autoload 'org-babel-lob-ingest "ob-lob" "\ @@ -19725,7 +19432,7 @@ Return a Library of Babel function call as a string. ;;;### (autoloads (org-babel-tangle org-babel-tangle-file org-babel-load-file ;;;;;; org-babel-tangle-lang-exts) "ob-tangle" "org/ob-tangle.el" -;;;;;; (20355 10021)) +;;;;;; (20347 39495)) ;;; Generated autoloads from org/ob-tangle.el (defvar org-babel-tangle-lang-exts '(("emacs-lisp" . "el")) "\ @@ -19767,7 +19474,7 @@ exported source code blocks by language. ;;;*** ;;;### (autoloads (inferior-octave) "octave-inf" "progmodes/octave-inf.el" -;;;;;; (20355 10021)) +;;;;;; (20355 835)) ;;; Generated autoloads from progmodes/octave-inf.el (autoload 'inferior-octave "octave-inf" "\ @@ -19790,7 +19497,7 @@ startup file, `~/.emacs-octave'. ;;;*** ;;;### (autoloads (octave-mode) "octave-mod" "progmodes/octave-mod.el" -;;;;;; (20355 10021)) +;;;;;; (20389 6410)) ;;; Generated autoloads from progmodes/octave-mod.el (autoload 'octave-mode "octave-mod" "\ @@ -19878,7 +19585,7 @@ including a reproducible test case and send the message. ;;;;;; org-insert-link-global org-store-link org-run-like-in-org-mode ;;;;;; turn-on-orgstruct++ turn-on-orgstruct orgstruct-mode org-global-cycle ;;;;;; org-mode org-version org-babel-do-load-languages) "org" "org/org.el" -;;;;;; (20378 29222)) +;;;;;; (20379 60745)) ;;; Generated autoloads from org/org.el (autoload 'org-babel-do-load-languages "org" "\ @@ -20111,7 +19818,7 @@ Call the customize function with org as argument. ;;;;;; org-diary org-agenda-list-stuck-projects org-tags-view org-todo-list ;;;;;; org-search-view org-agenda-list org-batch-store-agenda-views ;;;;;; org-store-agenda-views org-batch-agenda-csv org-batch-agenda -;;;;;; org-agenda) "org-agenda" "org/org-agenda.el" (20378 29222)) +;;;;;; org-agenda) "org-agenda" "org/org-agenda.el" (20379 60745)) ;;; Generated autoloads from org/org-agenda.el (autoload 'org-agenda "org-agenda" "\ @@ -20365,7 +20072,7 @@ details and examples. ;;;### (autoloads (org-archive-subtree-default-with-confirmation ;;;;;; org-archive-subtree-default) "org-archive" "org/org-archive.el" -;;;;;; (20355 10021)) +;;;;;; (20347 39495)) ;;; Generated autoloads from org/org-archive.el (autoload 'org-archive-subtree-default "org-archive" "\ @@ -20385,8 +20092,8 @@ This command is set with the variable `org-archive-default-command'. ;;;### (autoloads (org-export-as-ascii org-export-region-as-ascii ;;;;;; org-replace-region-by-ascii org-export-as-ascii-to-buffer ;;;;;; org-export-as-utf8-to-buffer org-export-as-utf8 org-export-as-latin1-to-buffer -;;;;;; org-export-as-latin1) "org-ascii" "org/org-ascii.el" (20355 -;;;;;; 10021)) +;;;;;; org-export-as-latin1) "org-ascii" "org/org-ascii.el" (20344 +;;;;;; 56211)) ;;; Generated autoloads from org/org-ascii.el (autoload 'org-export-as-latin1 "org-ascii" "\ @@ -20459,8 +20166,8 @@ publishing directory. ;;;*** -;;;### (autoloads (org-attach) "org-attach" "org/org-attach.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (org-attach) "org-attach" "org/org-attach.el" (20347 +;;;;;; 39495)) ;;; Generated autoloads from org/org-attach.el (autoload 'org-attach "org-attach" "\ @@ -20472,7 +20179,7 @@ Shows a list of commands and prompts for another key to execute a command. ;;;*** ;;;### (autoloads (org-bbdb-anniversaries) "org-bbdb" "org/org-bbdb.el" -;;;;;; (20355 10021)) +;;;;;; (20344 56211)) ;;; Generated autoloads from org/org-bbdb.el (autoload 'org-bbdb-anniversaries "org-bbdb" "\ @@ -20483,7 +20190,7 @@ Extract anniversaries from BBDB for display in the agenda. ;;;*** ;;;### (autoloads (org-capture-import-remember-templates org-capture-insert-template-here -;;;;;; org-capture) "org-capture" "org/org-capture.el" (20355 10021)) +;;;;;; org-capture) "org-capture" "org/org-capture.el" (20347 39495)) ;;; Generated autoloads from org/org-capture.el (autoload 'org-capture "org-capture" "\ @@ -20521,7 +20228,7 @@ Set org-capture-templates to be similar to `org-remember-templates'. ;;;*** ;;;### (autoloads (org-clock-persistence-insinuate org-get-clocktable) -;;;;;; "org-clock" "org/org-clock.el" (20378 29222)) +;;;;;; "org-clock" "org/org-clock.el" (20379 60745)) ;;; Generated autoloads from org/org-clock.el (autoload 'org-get-clocktable "org-clock" "\ @@ -20539,7 +20246,7 @@ Set up hooks for clock persistence. ;;;*** ;;;### (autoloads (org-datetree-find-date-create) "org-datetree" -;;;;;; "org/org-datetree.el" (20355 10021)) +;;;;;; "org/org-datetree.el" (20344 56211)) ;;; Generated autoloads from org/org-datetree.el (autoload 'org-datetree-find-date-create "org-datetree" "\ @@ -20555,7 +20262,7 @@ tree can be found. ;;;### (autoloads (org-export-as-docbook org-export-as-docbook-pdf-and-open ;;;;;; org-export-as-docbook-pdf org-export-region-as-docbook org-replace-region-by-docbook ;;;;;; org-export-as-docbook-to-buffer org-export-as-docbook-batch) -;;;;;; "org-docbook" "org/org-docbook.el" (20355 10021)) +;;;;;; "org-docbook" "org/org-docbook.el" (20347 39495)) ;;; Generated autoloads from org/org-docbook.el (autoload 'org-export-as-docbook-batch "org-docbook" "\ @@ -20632,7 +20339,7 @@ publishing directory. ;;;### (autoloads (org-insert-export-options-template org-export-as-org ;;;;;; org-export-visible org-export) "org-exp" "org/org-exp.el" -;;;;;; (20355 10021)) +;;;;;; (20347 39495)) ;;; Generated autoloads from org/org-exp.el (autoload 'org-export "org-exp" "\ @@ -20693,8 +20400,8 @@ Insert into the buffer a template with information for exporting. ;;;*** ;;;### (autoloads (org-feed-show-raw-feed org-feed-goto-inbox org-feed-update -;;;;;; org-feed-update-all) "org-feed" "org/org-feed.el" (20355 -;;;;;; 10021)) +;;;;;; org-feed-update-all) "org-feed" "org/org-feed.el" (20228 +;;;;;; 61824)) ;;; Generated autoloads from org/org-feed.el (autoload 'org-feed-update-all "org-feed" "\ @@ -20722,7 +20429,7 @@ Show the raw feed buffer of a feed. ;;;*** ;;;### (autoloads (org-footnote-normalize org-footnote-action) "org-footnote" -;;;;;; "org/org-footnote.el" (20378 29222)) +;;;;;; "org/org-footnote.el" (20379 60745)) ;;; Generated autoloads from org/org-footnote.el (autoload 'org-footnote-action "org-footnote" "\ @@ -20773,7 +20480,7 @@ Additional note on `org-footnote-insert-pos-for-preprocessor': ;;;### (autoloads (org-freemind-to-org-mode org-freemind-from-org-sparse-tree ;;;;;; org-freemind-from-org-mode org-freemind-from-org-mode-node ;;;;;; org-freemind-show org-export-as-freemind) "org-freemind" -;;;;;; "org/org-freemind.el" (20355 10021)) +;;;;;; "org/org-freemind.el" (20347 39495)) ;;; Generated autoloads from org/org-freemind.el (autoload 'org-export-as-freemind "org-freemind" "\ @@ -20834,7 +20541,7 @@ Convert FreeMind file MM-FILE to `org-mode' file ORG-FILE. ;;;### (autoloads (org-export-htmlize-generate-css org-export-as-html ;;;;;; org-export-region-as-html org-replace-region-by-html org-export-as-html-to-buffer ;;;;;; org-export-as-html-batch org-export-as-html-and-open) "org-html" -;;;;;; "org/org-html.el" (20355 10021)) +;;;;;; "org/org-html.el" (20347 39495)) ;;; Generated autoloads from org/org-html.el (put 'org-export-html-style-include-default 'safe-local-variable 'booleanp) @@ -20928,7 +20635,7 @@ that uses these same face definitions. ;;;### (autoloads (org-export-icalendar-combine-agenda-files org-export-icalendar-all-agenda-files ;;;;;; org-export-icalendar-this-file) "org-icalendar" "org/org-icalendar.el" -;;;;;; (20355 10021)) +;;;;;; (20347 39495)) ;;; Generated autoloads from org/org-icalendar.el (autoload 'org-export-icalendar-this-file "org-icalendar" "\ @@ -20956,7 +20663,7 @@ The file is stored under the name `org-combined-agenda-icalendar-file'. ;;;### (autoloads (org-id-store-link org-id-find-id-file org-id-find ;;;;;; org-id-goto org-id-get-with-outline-drilling org-id-get-with-outline-path-completion ;;;;;; org-id-get org-id-copy org-id-get-create) "org-id" "org/org-id.el" -;;;;;; (20355 10021)) +;;;;;; (20228 61824)) ;;; Generated autoloads from org/org-id.el (autoload 'org-id-get-create "org-id" "\ @@ -21025,7 +20732,7 @@ Store a link to the current entry, using its ID. ;;;*** ;;;### (autoloads (org-indent-mode) "org-indent" "org/org-indent.el" -;;;;;; (20355 10021)) +;;;;;; (20344 56211)) ;;; Generated autoloads from org/org-indent.el (autoload 'org-indent-mode "org-indent" "\ @@ -21043,7 +20750,7 @@ during idle time. ;;;*** ;;;### (autoloads (org-irc-store-link) "org-irc" "org/org-irc.el" -;;;;;; (20355 10021)) +;;;;;; (20228 61824)) ;;; Generated autoloads from org/org-irc.el (autoload 'org-irc-store-link "org-irc" "\ @@ -21056,7 +20763,7 @@ Dispatch to the appropriate function to store a link to an IRC session. ;;;### (autoloads (org-export-as-pdf-and-open org-export-as-pdf org-export-as-latex ;;;;;; org-export-region-as-latex org-replace-region-by-latex org-export-as-latex-to-buffer ;;;;;; org-export-as-latex-batch) "org-latex" "org/org-latex.el" -;;;;;; (20355 10021)) +;;;;;; (20344 56211)) ;;; Generated autoloads from org/org-latex.el (autoload 'org-export-as-latex-batch "org-latex" "\ @@ -21137,7 +20844,7 @@ Export as LaTeX, then process through to PDF, and open. ;;;### (autoloads (org-lparse-region org-replace-region-by org-lparse-to-buffer ;;;;;; org-lparse-batch org-lparse-and-open) "org-lparse" "org/org-lparse.el" -;;;;;; (20355 10021)) +;;;;;; (20344 56211)) ;;; Generated autoloads from org/org-lparse.el (autoload 'org-lparse-and-open "org-lparse" "\ @@ -21194,8 +20901,8 @@ in a window. A non-interactive call will only return the buffer. ;;;*** ;;;### (autoloads (org-mobile-create-sumo-agenda org-mobile-pull -;;;;;; org-mobile-push) "org-mobile" "org/org-mobile.el" (20355 -;;;;;; 10021)) +;;;;;; org-mobile-push) "org-mobile" "org/org-mobile.el" (20347 +;;;;;; 39495)) ;;; Generated autoloads from org/org-mobile.el (autoload 'org-mobile-push "org-mobile" "\ @@ -21221,7 +20928,7 @@ Create a file that contains all custom agenda views. ;;;### (autoloads (org-export-as-odf-and-open org-export-as-odf org-export-odt-convert ;;;;;; org-export-as-odt org-export-as-odt-batch org-export-as-odt-and-open) -;;;;;; "org-odt" "org/org-odt.el" (20378 29222)) +;;;;;; "org-odt" "org/org-odt.el" (20379 60745)) ;;; Generated autoloads from org/org-odt.el (autoload 'org-export-as-odt-and-open "org-odt" "\ @@ -21291,7 +20998,7 @@ formula file. ;;;*** ;;;### (autoloads (org-plot/gnuplot) "org-plot" "org/org-plot.el" -;;;;;; (20355 10021)) +;;;;;; (20228 61824)) ;;; Generated autoloads from org/org-plot.el (autoload 'org-plot/gnuplot "org-plot" "\ @@ -21305,7 +21012,7 @@ line directly before or after the table. ;;;### (autoloads (org-publish-current-project org-publish-current-file ;;;;;; org-publish-all org-publish) "org-publish" "org/org-publish.el" -;;;;;; (20355 10021)) +;;;;;; (20347 39495)) ;;; Generated autoloads from org/org-publish.el (defalias 'org-publish-project 'org-publish) @@ -21339,7 +21046,7 @@ the project. ;;;### (autoloads (org-remember-handler org-remember org-remember-apply-template ;;;;;; org-remember-annotation org-remember-insinuate) "org-remember" -;;;;;; "org/org-remember.el" (20355 10021)) +;;;;;; "org/org-remember.el" (20228 61824)) ;;; Generated autoloads from org/org-remember.el (autoload 'org-remember-insinuate "org-remember" "\ @@ -21415,7 +21122,7 @@ See also the variable `org-reverse-note-order'. ;;;*** ;;;### (autoloads (org-table-to-lisp orgtbl-mode turn-on-orgtbl) -;;;;;; "org-table" "org/org-table.el" (20378 29222)) +;;;;;; "org-table" "org/org-table.el" (20379 60745)) ;;; Generated autoloads from org/org-table.el (autoload 'turn-on-orgtbl "org-table" "\ @@ -21439,7 +21146,7 @@ The table is taken from the parameter TXT, or from the buffer at point. ;;;*** ;;;### (autoloads (org-export-as-taskjuggler-and-open org-export-as-taskjuggler) -;;;;;; "org-taskjuggler" "org/org-taskjuggler.el" (20355 10021)) +;;;;;; "org-taskjuggler" "org/org-taskjuggler.el" (20347 39495)) ;;; Generated autoloads from org/org-taskjuggler.el (autoload 'org-export-as-taskjuggler "org-taskjuggler" "\ @@ -21467,7 +21174,7 @@ with the TaskJuggler GUI. ;;;### (autoloads (org-timer-set-timer org-timer-item org-timer-change-times-in-region ;;;;;; org-timer org-timer-start) "org-timer" "org/org-timer.el" -;;;;;; (20355 10021)) +;;;;;; (20347 39495)) ;;; Generated autoloads from org/org-timer.el (autoload 'org-timer-start "org-timer" "\ @@ -21528,7 +21235,7 @@ replace any running timer. ;;;*** ;;;### (autoloads (org-export-as-xoxo) "org-xoxo" "org/org-xoxo.el" -;;;;;; (20355 10021)) +;;;;;; (20344 56211)) ;;; Generated autoloads from org/org-xoxo.el (autoload 'org-export-as-xoxo "org-xoxo" "\ @@ -21540,7 +21247,7 @@ The XOXO buffer is named *xoxo-* ;;;*** ;;;### (autoloads (outline-minor-mode outline-mode) "outline" "outline.el" -;;;;;; (20355 10021)) +;;;;;; (20355 835)) ;;; Generated autoloads from outline.el (put 'outline-regexp 'safe-local-variable 'stringp) (put 'outline-heading-end-regexp 'safe-local-variable 'stringp) @@ -21604,7 +21311,7 @@ See the command `outline-mode' for more information on this mode. ;;;### (autoloads (list-packages describe-package package-initialize ;;;;;; package-refresh-contents package-install-file package-install-from-buffer ;;;;;; package-install package-enable-at-startup) "package" "emacs-lisp/package.el" -;;;;;; (20369 14251)) +;;;;;; (20395 5351)) ;;; Generated autoloads from emacs-lisp/package.el (defvar package-enable-at-startup t "\ @@ -21674,7 +21381,7 @@ The list is displayed in a buffer named `*Packages*'. ;;;*** -;;;### (autoloads (show-paren-mode) "paren" "paren.el" (20355 10021)) +;;;### (autoloads (show-paren-mode) "paren" "paren.el" (20355 835)) ;;; Generated autoloads from paren.el (defvar show-paren-mode nil "\ @@ -21701,7 +21408,7 @@ matching parenthesis is highlighted in `show-paren-style' after ;;;*** ;;;### (autoloads (parse-time-string) "parse-time" "calendar/parse-time.el" -;;;;;; (20355 10021)) +;;;;;; (20298 64606)) ;;; Generated autoloads from calendar/parse-time.el (put 'parse-time-rules 'risky-local-variable t) @@ -21714,8 +21421,8 @@ unknown are returned as nil. ;;;*** -;;;### (autoloads (pascal-mode) "pascal" "progmodes/pascal.el" (20378 -;;;;;; 29222)) +;;;### (autoloads (pascal-mode) "pascal" "progmodes/pascal.el" (20379 +;;;;;; 60745)) ;;; Generated autoloads from progmodes/pascal.el (autoload 'pascal-mode "pascal" "\ @@ -21768,7 +21475,7 @@ no args, if that value is non-nil. ;;;*** ;;;### (autoloads (password-in-cache-p password-cache-expiry password-cache) -;;;;;; "password-cache" "password-cache.el" (20355 10021)) +;;;;;; "password-cache" "password-cache.el" (20229 56251)) ;;; Generated autoloads from password-cache.el (defvar password-cache t "\ @@ -21790,7 +21497,7 @@ Check if KEY is in the cache. ;;;*** ;;;### (autoloads (pcase-let pcase-let* pcase) "pcase" "emacs-lisp/pcase.el" -;;;;;; (20355 10021)) +;;;;;; (20405 28429)) ;;; Generated autoloads from emacs-lisp/pcase.el (autoload 'pcase "pcase" "\ @@ -21849,8 +21556,8 @@ of the form (UPAT EXP). ;;;*** -;;;### (autoloads (pcomplete/cvs) "pcmpl-cvs" "pcmpl-cvs.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (pcomplete/cvs) "pcmpl-cvs" "pcmpl-cvs.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from pcmpl-cvs.el (autoload 'pcomplete/cvs "pcmpl-cvs" "\ @@ -21861,7 +21568,7 @@ Completion rules for the `cvs' command. ;;;*** ;;;### (autoloads (pcomplete/tar pcomplete/make pcomplete/bzip2 pcomplete/gzip) -;;;;;; "pcmpl-gnu" "pcmpl-gnu.el" (20355 10021)) +;;;;;; "pcmpl-gnu" "pcmpl-gnu.el" (20255 22932)) ;;; Generated autoloads from pcmpl-gnu.el (autoload 'pcomplete/gzip "pcmpl-gnu" "\ @@ -21889,7 +21596,7 @@ Completion for the GNU tar utility. ;;;*** ;;;### (autoloads (pcomplete/mount pcomplete/umount pcomplete/kill) -;;;;;; "pcmpl-linux" "pcmpl-linux.el" (20355 10021)) +;;;;;; "pcmpl-linux" "pcmpl-linux.el" (20229 56251)) ;;; Generated autoloads from pcmpl-linux.el (autoload 'pcomplete/kill "pcmpl-linux" "\ @@ -21909,8 +21616,8 @@ Completion for GNU/Linux `mount'. ;;;*** -;;;### (autoloads (pcomplete/rpm) "pcmpl-rpm" "pcmpl-rpm.el" (20361 -;;;;;; 20134)) +;;;### (autoloads (pcomplete/rpm) "pcmpl-rpm" "pcmpl-rpm.el" (20360 +;;;;;; 57703)) ;;; Generated autoloads from pcmpl-rpm.el (autoload 'pcomplete/rpm "pcmpl-rpm" "\ @@ -21922,7 +21629,7 @@ Completion for the `rpm' command. ;;;### (autoloads (pcomplete/scp pcomplete/ssh pcomplete/chgrp pcomplete/chown ;;;;;; pcomplete/which pcomplete/xargs pcomplete/rm pcomplete/rmdir -;;;;;; pcomplete/cd) "pcmpl-unix" "pcmpl-unix.el" (20376 40834)) +;;;;;; pcomplete/cd) "pcmpl-unix" "pcmpl-unix.el" (20376 18781)) ;;; Generated autoloads from pcmpl-unix.el (autoload 'pcomplete/cd "pcmpl-unix" "\ @@ -21980,7 +21687,7 @@ Includes files as well as host names followed by a colon. ;;;### (autoloads (pcomplete-shell-setup pcomplete-comint-setup pcomplete-list ;;;;;; pcomplete-help pcomplete-expand pcomplete-continue pcomplete-expand-and-complete ;;;;;; pcomplete-reverse pcomplete) "pcomplete" "pcomplete.el" (20376 -;;;;;; 40834)) +;;;;;; 18781)) ;;; Generated autoloads from pcomplete.el (autoload 'pcomplete "pcomplete" "\ @@ -22039,7 +21746,7 @@ Setup `shell-mode' to use pcomplete. ;;;### (autoloads (cvs-dired-use-hook cvs-dired-action cvs-status ;;;;;; cvs-update cvs-examine cvs-quickdir cvs-checkout) "pcvs" -;;;;;; "vc/pcvs.el" (20364 45187)) +;;;;;; "vc/pcvs.el" (20370 4296)) ;;; Generated autoloads from vc/pcvs.el (autoload 'cvs-checkout "pcvs" "\ @@ -22114,7 +21821,7 @@ The exact behavior is determined also by `cvs-dired-use-hook'." (when (stringp d ;;;*** -;;;### (autoloads nil "pcvs-defs" "vc/pcvs-defs.el" (20355 10021)) +;;;### (autoloads nil "pcvs-defs" "vc/pcvs-defs.el" (20355 835)) ;;; Generated autoloads from vc/pcvs-defs.el (defvar cvs-global-menu (let ((m (make-sparse-keymap "PCL-CVS"))) (define-key m [status] `(menu-item ,(purecopy "Directory Status") cvs-status :help ,(purecopy "A more verbose status of a workarea"))) (define-key m [checkout] `(menu-item ,(purecopy "Checkout Module") cvs-checkout :help ,(purecopy "Check out a module from the repository"))) (define-key m [update] `(menu-item ,(purecopy "Update Directory") cvs-update :help ,(purecopy "Fetch updates from the repository"))) (define-key m [examine] `(menu-item ,(purecopy "Examine Directory") cvs-examine :help ,(purecopy "Examine the current state of a workarea"))) (fset 'cvs-global-menu m)) "\ @@ -22123,7 +21830,7 @@ Global menu used by PCL-CVS.") ;;;*** ;;;### (autoloads (perl-mode) "perl-mode" "progmodes/perl-mode.el" -;;;;;; (20365 17199)) +;;;;;; (20370 4296)) ;;; Generated autoloads from progmodes/perl-mode.el (put 'perl-indent-level 'safe-local-variable 'integerp) (put 'perl-continued-statement-offset 'safe-local-variable 'integerp) @@ -22185,7 +21892,7 @@ Turning on Perl mode runs the normal hook `perl-mode-hook'. ;;;*** ;;;### (autoloads (picture-mode) "picture" "textmodes/picture.el" -;;;;;; (20373 11301)) +;;;;;; (20373 62846)) ;;; Generated autoloads from textmodes/picture.el (autoload 'picture-mode "picture" "\ @@ -22266,7 +21973,7 @@ they are not by default assigned to keys. ;;;*** ;;;### (autoloads (plstore-mode plstore-open) "plstore" "gnus/plstore.el" -;;;;;; (20378 29222)) +;;;;;; (20377 59525)) ;;; Generated autoloads from gnus/plstore.el (autoload 'plstore-open "plstore" "\ @@ -22282,7 +21989,7 @@ Major mode for editing PLSTORE files. ;;;*** ;;;### (autoloads (po-find-file-coding-system) "po" "textmodes/po.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from textmodes/po.el (autoload 'po-find-file-coding-system "po" "\ @@ -22293,7 +22000,7 @@ Called through `file-coding-system-alist', before the file is visited for real. ;;;*** -;;;### (autoloads (pong) "pong" "play/pong.el" (20355 10021)) +;;;### (autoloads (pong) "pong" "play/pong.el" (20229 56251)) ;;; Generated autoloads from play/pong.el (autoload 'pong "pong" "\ @@ -22309,7 +22016,7 @@ pong-mode keybindings:\\ ;;;*** -;;;### (autoloads (pop3-movemail) "pop3" "gnus/pop3.el" (20355 10021)) +;;;### (autoloads (pop3-movemail) "pop3" "gnus/pop3.el" (20229 56251)) ;;; Generated autoloads from gnus/pop3.el (autoload 'pop3-movemail "pop3" "\ @@ -22322,7 +22029,7 @@ Use streaming commands. ;;;### (autoloads (pp-macroexpand-last-sexp pp-eval-last-sexp pp-macroexpand-expression ;;;;;; pp-eval-expression pp pp-buffer pp-to-string) "pp" "emacs-lisp/pp.el" -;;;;;; (20355 10021)) +;;;;;; (20271 10599)) ;;; Generated autoloads from emacs-lisp/pp.el (autoload 'pp-to-string "pp" "\ @@ -22390,7 +22097,7 @@ Ignores leading comment characters. ;;;;;; pr-ps-buffer-print pr-ps-buffer-using-ghostscript pr-ps-buffer-preview ;;;;;; pr-ps-directory-ps-print pr-ps-directory-print pr-ps-directory-using-ghostscript ;;;;;; pr-ps-directory-preview pr-interface) "printing" "printing.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from printing.el (autoload 'pr-interface "printing" "\ @@ -22977,7 +22684,7 @@ are both set to t. ;;;*** -;;;### (autoloads (proced) "proced" "proced.el" (20355 10021)) +;;;### (autoloads (proced) "proced" "proced.el" (20229 56251)) ;;; Generated autoloads from proced.el (autoload 'proced "proced" "\ @@ -22993,7 +22700,7 @@ See `proced-mode' for a description of features available in Proced buffers. ;;;*** ;;;### (autoloads (run-prolog mercury-mode prolog-mode) "prolog" -;;;;;; "progmodes/prolog.el" (20373 11301)) +;;;;;; "progmodes/prolog.el" (20397 28824)) ;;; Generated autoloads from progmodes/prolog.el (autoload 'prolog-mode "prolog" "\ @@ -23028,8 +22735,8 @@ With prefix argument ARG, restart the Prolog process if running before. ;;;*** -;;;### (autoloads (bdf-directory-list) "ps-bdf" "ps-bdf.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (bdf-directory-list) "ps-bdf" "ps-bdf.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from ps-bdf.el (defvar bdf-directory-list (if (memq system-type '(ms-dos windows-nt)) (list (expand-file-name "fonts/bdf" installation-directory)) '("/usr/local/share/emacs/fonts/bdf")) "\ @@ -23041,7 +22748,7 @@ The default value is '(\"/usr/local/share/emacs/fonts/bdf\").") ;;;*** ;;;### (autoloads (ps-mode) "ps-mode" "progmodes/ps-mode.el" (20355 -;;;;;; 10021)) +;;;;;; 835)) ;;; Generated autoloads from progmodes/ps-mode.el (autoload 'ps-mode "ps-mode" "\ @@ -23092,8 +22799,8 @@ Typing \\\\[ps-run-goto-error] when the cursor is at the number ;;;;;; ps-spool-region ps-spool-buffer-with-faces ps-spool-buffer ;;;;;; ps-print-region-with-faces ps-print-region ps-print-buffer-with-faces ;;;;;; ps-print-buffer ps-print-customize ps-print-color-p ps-paper-type -;;;;;; ps-page-dimensions-database) "ps-print" "ps-print.el" (20355 -;;;;;; 10021)) +;;;;;; ps-page-dimensions-database) "ps-print" "ps-print.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from ps-print.el (defvar ps-page-dimensions-database (purecopy (list (list 'a4 (/ (* 72 21.0) 2.54) (/ (* 72 29.7) 2.54) "A4") (list 'a3 (/ (* 72 29.7) 2.54) (/ (* 72 42.0) 2.54) "A3") (list 'letter (* 72 8.5) (* 72 11.0) "Letter") (list 'legal (* 72 8.5) (* 72 14.0) "Legal") (list 'letter-small (* 72 7.68) (* 72 10.16) "LetterSmall") (list 'tabloid (* 72 11.0) (* 72 17.0) "Tabloid") (list 'ledger (* 72 17.0) (* 72 11.0) "Ledger") (list 'statement (* 72 5.5) (* 72 8.5) "Statement") (list 'executive (* 72 7.5) (* 72 10.0) "Executive") (list 'a4small (* 72 7.47) (* 72 10.85) "A4Small") (list 'b4 (* 72 10.125) (* 72 14.33) "B4") (list 'b5 (* 72 7.16) (* 72 10.125) "B5") '(addresslarge 236.0 99.0 "AddressLarge") '(addresssmall 236.0 68.0 "AddressSmall") '(cuthanging13 90.0 222.0 "CutHanging13") '(cuthanging15 90.0 114.0 "CutHanging15") '(diskette 181.0 136.0 "Diskette") '(eurofilefolder 139.0 112.0 "EuropeanFilefolder") '(eurofoldernarrow 526.0 107.0 "EuroFolderNarrow") '(eurofolderwide 526.0 136.0 "EuroFolderWide") '(euronamebadge 189.0 108.0 "EuroNameBadge") '(euronamebadgelarge 223.0 136.0 "EuroNameBadgeLarge") '(filefolder 230.0 37.0 "FileFolder") '(jewelry 76.0 136.0 "Jewelry") '(mediabadge 180.0 136.0 "MediaBadge") '(multipurpose 126.0 68.0 "MultiPurpose") '(retaillabel 90.0 104.0 "RetailLabel") '(shipping 271.0 136.0 "Shipping") '(slide35mm 26.0 104.0 "Slide35mm") '(spine8mm 187.0 26.0 "Spine8mm") '(topcoated 425.19685 136.0 "TopCoatedPaper") '(topcoatedpaper 396.0 136.0 "TopcoatedPaper150") '(vhsface 205.0 127.0 "VHSFace") '(vhsspine 400.0 50.0 "VHSSpine") '(zipdisk 156.0 136.0 "ZipDisk"))) "\ @@ -23290,7 +22997,7 @@ If EXTENSION is any other symbol, it is ignored. ;;;*** ;;;### (autoloads (jython-mode python-mode python-after-info-look -;;;;;; run-python) "python" "progmodes/python.el" (20376 40834)) +;;;;;; run-python) "python" "progmodes/python.el" (20376 18761)) ;;; Generated autoloads from progmodes/python.el (add-to-list 'interpreter-mode-alist (cons (purecopy "jython") 'jython-mode)) @@ -23376,7 +23083,7 @@ Runs `jython-mode-hook' after `python-mode-hook'. ;;;*** ;;;### (autoloads (quoted-printable-decode-region) "qp" "gnus/qp.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from gnus/qp.el (autoload 'quoted-printable-decode-region "qp" "\ @@ -23399,7 +23106,7 @@ them into characters should be done separately. ;;;;;; quail-defrule quail-install-decode-map quail-install-map ;;;;;; quail-define-rules quail-show-keyboard-layout quail-set-keyboard-layout ;;;;;; quail-define-package quail-use-package quail-title) "quail" -;;;;;; "international/quail.el" (20356 55829)) +;;;;;; "international/quail.el" (20356 48455)) ;;; Generated autoloads from international/quail.el (autoload 'quail-title "quail" "\ @@ -23630,8 +23337,7 @@ of each directory. ;;;### (autoloads (quickurl-list quickurl-list-mode quickurl-edit-urls ;;;;;; quickurl-browse-url-ask quickurl-browse-url quickurl-add-url -;;;;;; quickurl-ask quickurl) "quickurl" "net/quickurl.el" (20355 -;;;;;; 10021)) +;;;;;; quickurl-ask) "quickurl" "net/quickurl.el" (20355 835)) ;;; Generated autoloads from net/quickurl.el (defconst quickurl-reread-hook-postfix "\n;; Local Variables:\n;; eval: (progn (require 'quickurl) (add-hook 'local-write-file-hooks (lambda () (quickurl-read) nil)))\n;; End:\n" "\ @@ -23645,15 +23351,6 @@ To make use of this do something like: in your ~/.emacs (after loading/requiring quickurl).") -(autoload 'quickurl "quickurl" "\ -Insert a URL based on LOOKUP. - -If not supplied LOOKUP is taken to be the word at point in the current -buffer, this default action can be modified via -`quickurl-grab-lookup-function'. - -\(fn &optional LOOKUP)" t nil) - (autoload 'quickurl-ask "quickurl" "\ Insert a URL, with `completing-read' prompt, based on LOOKUP. @@ -23703,7 +23400,7 @@ Display `quickurl-list' as a formatted list using `quickurl-list-mode'. ;;;*** ;;;### (autoloads (rcirc-track-minor-mode rcirc-connect rcirc) "rcirc" -;;;;;; "net/rcirc.el" (20371 55972)) +;;;;;; "net/rcirc.el" (20373 62846)) ;;; Generated autoloads from net/rcirc.el (autoload 'rcirc "rcirc" "\ @@ -23741,8 +23438,8 @@ if ARG is omitted or nil. ;;;*** -;;;### (autoloads (remote-compile) "rcompile" "net/rcompile.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (remote-compile) "rcompile" "net/rcompile.el" (20291 +;;;;;; 40061)) ;;; Generated autoloads from net/rcompile.el (autoload 'remote-compile "rcompile" "\ @@ -23754,7 +23451,7 @@ See \\[compile]. ;;;*** ;;;### (autoloads (re-builder) "re-builder" "emacs-lisp/re-builder.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from emacs-lisp/re-builder.el (defalias 'regexp-builder 're-builder) @@ -23772,7 +23469,7 @@ matching parts of the target buffer will be highlighted. ;;;*** -;;;### (autoloads (recentf-mode) "recentf" "recentf.el" (20356 2211)) +;;;### (autoloads (recentf-mode) "recentf" "recentf.el" (20356 48455)) ;;; Generated autoloads from recentf.el (defvar recentf-mode nil "\ @@ -23802,7 +23499,7 @@ were operated on recently. ;;;;;; string-rectangle delete-whitespace-rectangle open-rectangle ;;;;;; insert-rectangle yank-rectangle kill-rectangle extract-rectangle ;;;;;; delete-extract-rectangle delete-rectangle) "rect" "rect.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from rect.el (define-key ctl-x-r-map "c" 'clear-rectangle) (define-key ctl-x-r-map "k" 'kill-rectangle) @@ -23938,8 +23635,8 @@ with a prefix argument, prompt for START-AT and FORMAT. ;;;*** -;;;### (autoloads (refill-mode) "refill" "textmodes/refill.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (refill-mode) "refill" "textmodes/refill.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from textmodes/refill.el (autoload 'refill-mode "refill" "\ @@ -23960,7 +23657,7 @@ For true \"word wrap\" behavior, use `visual-line-mode' instead. ;;;*** ;;;### (autoloads (reftex-reset-scanning-information reftex-mode -;;;;;; turn-on-reftex) "reftex" "textmodes/reftex.el" (20355 10021)) +;;;;;; turn-on-reftex) "reftex" "textmodes/reftex.el" (20229 56251)) ;;; Generated autoloads from textmodes/reftex.el (autoload 'turn-on-reftex "reftex" "\ @@ -24016,7 +23713,7 @@ This enforces rescanning the buffer on next use. ;;;*** ;;;### (autoloads (reftex-citation) "reftex-cite" "textmodes/reftex-cite.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from textmodes/reftex-cite.el (autoload 'reftex-citation "reftex-cite" "\ @@ -24046,7 +23743,7 @@ While entering the regexp, completion on knows citation keys is possible. ;;;*** ;;;### (autoloads (reftex-isearch-minor-mode) "reftex-global" "textmodes/reftex-global.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from textmodes/reftex-global.el (autoload 'reftex-isearch-minor-mode "reftex-global" "\ @@ -24063,7 +23760,7 @@ With no argument, this command toggles ;;;*** ;;;### (autoloads (reftex-index-phrases-mode) "reftex-index" "textmodes/reftex-index.el" -;;;;;; (20355 10021)) +;;;;;; (20400 16870)) ;;; Generated autoloads from textmodes/reftex-index.el (autoload 'reftex-index-phrases-mode "reftex-index" "\ @@ -24096,7 +23793,7 @@ Here are all local bindings. ;;;*** ;;;### (autoloads (reftex-all-document-files) "reftex-parse" "textmodes/reftex-parse.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from textmodes/reftex-parse.el (autoload 'reftex-all-document-files "reftex-parse" "\ @@ -24109,7 +23806,7 @@ of master file. ;;;*** ;;;### (autoloads nil "reftex-vars" "textmodes/reftex-vars.el" (20355 -;;;;;; 10021)) +;;;;;; 835)) ;;; Generated autoloads from textmodes/reftex-vars.el (put 'reftex-vref-is-default 'safe-local-variable (lambda (x) (or (stringp x) (symbolp x)))) (put 'reftex-fref-is-default 'safe-local-variable (lambda (x) (or (stringp x) (symbolp x)))) @@ -24119,7 +23816,7 @@ of master file. ;;;*** ;;;### (autoloads (regexp-opt-depth regexp-opt) "regexp-opt" "emacs-lisp/regexp-opt.el" -;;;;;; (20363 61861)) +;;;;;; (20364 20442)) ;;; Generated autoloads from emacs-lisp/regexp-opt.el (autoload 'regexp-opt "regexp-opt" "\ @@ -24150,7 +23847,7 @@ This means the number of non-shy regexp grouping constructs ;;;### (autoloads (remember-diary-extract-entries remember-clipboard ;;;;;; remember-other-frame remember) "remember" "textmodes/remember.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from textmodes/remember.el (autoload 'remember "remember" "\ @@ -24181,7 +23878,7 @@ Extract diary entries from the region. ;;;*** -;;;### (autoloads (repeat) "repeat" "repeat.el" (20355 10021)) +;;;### (autoloads (repeat) "repeat" "repeat.el" (20389 6410)) ;;; Generated autoloads from repeat.el (autoload 'repeat "repeat" "\ @@ -24204,7 +23901,7 @@ recently executed command not bound to an input event\". ;;;*** ;;;### (autoloads (reporter-submit-bug-report) "reporter" "mail/reporter.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from mail/reporter.el (autoload 'reporter-submit-bug-report "reporter" "\ @@ -24236,7 +23933,7 @@ mail-sending package is used for editing and sending the message. ;;;*** ;;;### (autoloads (reposition-window) "reposition" "reposition.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from reposition.el (autoload 'reposition-window "reposition" "\ @@ -24263,7 +23960,7 @@ first comment line visible (if point is in a comment). ;;;*** ;;;### (autoloads (global-reveal-mode reveal-mode) "reveal" "reveal.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from reveal.el (autoload 'reveal-mode "reveal" "\ @@ -24299,7 +23996,7 @@ the mode if ARG is omitted or nil. ;;;*** ;;;### (autoloads (make-ring ring-p) "ring" "emacs-lisp/ring.el" -;;;;;; (20355 10021)) +;;;;;; (20325 60273)) ;;; Generated autoloads from emacs-lisp/ring.el (autoload 'ring-p "ring" "\ @@ -24314,7 +24011,7 @@ Make a ring that can contain SIZE elements. ;;;*** -;;;### (autoloads (rlogin) "rlogin" "net/rlogin.el" (20355 10021)) +;;;### (autoloads (rlogin) "rlogin" "net/rlogin.el" (20405 16851)) ;;; Generated autoloads from net/rlogin.el (autoload 'rlogin "rlogin" "\ @@ -24363,7 +24060,7 @@ variable. ;;;;;; rmail-secondary-file-directory rmail-primary-inbox-list rmail-highlighted-headers ;;;;;; rmail-retry-ignored-headers rmail-displayed-headers rmail-ignored-headers ;;;;;; rmail-user-mail-address-regexp rmail-movemail-variant-p) -;;;;;; "rmail" "mail/rmail.el" (20369 14251)) +;;;;;; "rmail" "mail/rmail.el" (20389 6410)) ;;; Generated autoloads from mail/rmail.el (autoload 'rmail-movemail-variant-p "rmail" "\ @@ -24547,7 +24244,7 @@ Set PASSWORD to be used for retrieving mail from a POP or IMAP server. ;;;*** ;;;### (autoloads (rmail-output-body-to-file rmail-output-as-seen -;;;;;; rmail-output) "rmailout" "mail/rmailout.el" (20355 10021)) +;;;;;; rmail-output) "rmailout" "mail/rmailout.el" (20229 56251)) ;;; Generated autoloads from mail/rmailout.el (put 'rmail-output-file-alist 'risky-local-variable t) @@ -24612,7 +24309,7 @@ than appending to it. Deletes the message after writing if ;;;*** ;;;### (autoloads (rng-c-load-schema) "rng-cmpct" "nxml/rng-cmpct.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from nxml/rng-cmpct.el (autoload 'rng-c-load-schema "rng-cmpct" "\ @@ -24624,7 +24321,7 @@ Return a pattern. ;;;*** ;;;### (autoloads (rng-nxml-mode-init) "rng-nxml" "nxml/rng-nxml.el" -;;;;;; (20355 10021)) +;;;;;; (20355 835)) ;;; Generated autoloads from nxml/rng-nxml.el (autoload 'rng-nxml-mode-init "rng-nxml" "\ @@ -24637,7 +24334,7 @@ Validation will be enabled if `rng-nxml-auto-validate-flag' is non-nil. ;;;*** ;;;### (autoloads (rng-validate-mode) "rng-valid" "nxml/rng-valid.el" -;;;;;; (20355 10021)) +;;;;;; (20280 8018)) ;;; Generated autoloads from nxml/rng-valid.el (autoload 'rng-validate-mode "rng-valid" "\ @@ -24667,8 +24364,8 @@ to use for finding the schema. ;;;*** -;;;### (autoloads (rng-xsd-compile) "rng-xsd" "nxml/rng-xsd.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (rng-xsd-compile) "rng-xsd" "nxml/rng-xsd.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from nxml/rng-xsd.el (put 'http://www\.w3\.org/2001/XMLSchema-datatypes 'rng-dt-compile 'rng-xsd-compile) @@ -24696,7 +24393,7 @@ must be equal. ;;;*** ;;;### (autoloads (robin-use-package robin-modify-package robin-define-package) -;;;;;; "robin" "international/robin.el" (20355 10021)) +;;;;;; "robin" "international/robin.el" (20228 61824)) ;;; Generated autoloads from international/robin.el (autoload 'robin-define-package "robin" "\ @@ -24729,7 +24426,7 @@ Start using robin package NAME, which is a string. ;;;*** ;;;### (autoloads (toggle-rot13-mode rot13-other-window rot13-region -;;;;;; rot13-string rot13) "rot13" "rot13.el" (20355 10021)) +;;;;;; rot13-string rot13) "rot13" "rot13.el" (20229 56251)) ;;; Generated autoloads from rot13.el (autoload 'rot13 "rot13" "\ @@ -24767,23 +24464,17 @@ Toggle the use of ROT13 encoding for the current window. ;;;*** ;;;### (autoloads (rst-minor-mode rst-mode) "rst" "textmodes/rst.el" -;;;;;; (20355 10021)) +;;;;;; (20405 18712)) ;;; Generated autoloads from textmodes/rst.el (add-to-list 'auto-mode-alist (purecopy '("\\.re?st\\'" . rst-mode))) (autoload 'rst-mode "rst" "\ Major mode for editing reStructuredText documents. \\ -There are a number of convenient keybindings provided by -Rst mode. The main one is \\[rst-adjust], it updates or rotates -the section title around point or promotes/demotes the -decorations within the region (see full details below). -Use negative prefix arg to rotate in the other direction. Turning on `rst-mode' calls the normal hooks `text-mode-hook' and `rst-mode-hook'. This mode also supports font-lock -highlighting. You may customize `rst-mode-lazy' to toggle -font-locking of blocks. +highlighting. \\{rst-mode-map} @@ -24804,7 +24495,7 @@ for modes derived from Text mode, like Mail mode. ;;;*** ;;;### (autoloads (ruby-mode) "ruby-mode" "progmodes/ruby-mode.el" -;;;;;; (20375 53029)) +;;;;;; (20376 18761)) ;;; Generated autoloads from progmodes/ruby-mode.el (autoload 'ruby-mode "ruby-mode" "\ @@ -24825,8 +24516,8 @@ The variable `ruby-indent-level' controls the amount of indentation. ;;;*** -;;;### (autoloads (ruler-mode) "ruler-mode" "ruler-mode.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (ruler-mode) "ruler-mode" "ruler-mode.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from ruler-mode.el (defvar ruler-mode nil "\ @@ -24843,8 +24534,8 @@ if ARG is omitted or nil. ;;;*** -;;;### (autoloads (rx rx-to-string) "rx" "emacs-lisp/rx.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (rx rx-to-string) "rx" "emacs-lisp/rx.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from emacs-lisp/rx.el (autoload 'rx-to-string "rx" "\ @@ -25155,8 +24846,8 @@ enclosed in `(and ...)'. ;;;*** -;;;### (autoloads (savehist-mode) "savehist" "savehist.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (savehist-mode) "savehist" "savehist.el" (20325 +;;;;;; 60273)) ;;; Generated autoloads from savehist.el (defvar savehist-mode nil "\ @@ -25188,7 +24879,7 @@ histories, which is probably undesirable. ;;;*** ;;;### (autoloads (dsssl-mode scheme-mode) "scheme" "progmodes/scheme.el" -;;;;;; (20355 10021)) +;;;;;; (20355 835)) ;;; Generated autoloads from progmodes/scheme.el (autoload 'scheme-mode "scheme" "\ @@ -25230,7 +24921,7 @@ that variable's value is a string. ;;;*** ;;;### (autoloads (gnus-score-mode) "score-mode" "gnus/score-mode.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from gnus/score-mode.el (autoload 'gnus-score-mode "score-mode" "\ @@ -25244,7 +24935,7 @@ This mode is an extended emacs-lisp mode. ;;;*** ;;;### (autoloads (scroll-all-mode) "scroll-all" "scroll-all.el" -;;;;;; (20363 61861)) +;;;;;; (20364 20442)) ;;; Generated autoloads from scroll-all.el (defvar scroll-all-mode nil "\ @@ -25270,7 +24961,7 @@ one window apply to all visible windows in the same frame. ;;;*** ;;;### (autoloads (scroll-lock-mode) "scroll-lock" "scroll-lock.el" -;;;;;; (20355 10021)) +;;;;;; (20273 59945)) ;;; Generated autoloads from scroll-lock.el (autoload 'scroll-lock-mode "scroll-lock" "\ @@ -25286,7 +24977,7 @@ vertically fixed relative to window boundaries during scrolling. ;;;*** -;;;### (autoloads nil "secrets" "net/secrets.el" (20355 10021)) +;;;### (autoloads nil "secrets" "net/secrets.el" (20304 58723)) ;;; Generated autoloads from net/secrets.el (when (featurep 'dbusbind) (autoload 'secrets-show-secrets "secrets" nil t)) @@ -25294,7 +24985,7 @@ vertically fixed relative to window boundaries during scrolling. ;;;*** ;;;### (autoloads (semantic-mode semantic-default-submodes) "semantic" -;;;;;; "cedet/semantic.el" (20355 10021)) +;;;;;; "cedet/semantic.el" (20355 835)) ;;; Generated autoloads from cedet/semantic.el (defvar semantic-default-submodes '(global-semantic-idle-scheduler-mode global-semanticdb-minor-mode) "\ @@ -25348,7 +25039,7 @@ Semantic mode. ;;;;;; mail-personal-alias-file mail-default-reply-to mail-archive-file-name ;;;;;; mail-header-separator send-mail-function mail-interactive ;;;;;; mail-self-blind mail-specify-envelope-from mail-from-style) -;;;;;; "sendmail" "mail/sendmail.el" (20369 14251)) +;;;;;; "sendmail" "mail/sendmail.el" (20370 4296)) ;;; Generated autoloads from mail/sendmail.el (defvar mail-from-style 'default "\ @@ -25631,7 +25322,7 @@ Like `mail' command, but display mail buffer in another frame. ;;;### (autoloads (server-save-buffers-kill-terminal server-mode ;;;;;; server-force-delete server-start) "server" "server.el" (20370 -;;;;;; 35109)) +;;;;;; 4296)) ;;; Generated autoloads from server.el (put 'server-host 'risky-local-variable t) @@ -25698,7 +25389,7 @@ only these files will be asked to be saved. ;;;*** -;;;### (autoloads (ses-mode) "ses" "ses.el" (20373 11301)) +;;;### (autoloads (ses-mode) "ses" "ses.el" (20373 62846)) ;;; Generated autoloads from ses.el (autoload 'ses-mode "ses" "\ @@ -25717,7 +25408,7 @@ These are active only in the minibuffer, when entering or editing a formula: ;;;*** ;;;### (autoloads (html-mode sgml-mode) "sgml-mode" "textmodes/sgml-mode.el" -;;;;;; (20355 10021)) +;;;;;; (20355 835)) ;;; Generated autoloads from textmodes/sgml-mode.el (autoload 'sgml-mode "sgml-mode" "\ @@ -25783,7 +25474,7 @@ To work around that, do: ;;;*** ;;;### (autoloads (sh-mode) "sh-script" "progmodes/sh-script.el" -;;;;;; (20355 10021)) +;;;;;; (20397 7606)) ;;; Generated autoloads from progmodes/sh-script.el (put 'sh-shell 'safe-local-variable 'symbolp) @@ -25830,9 +25521,8 @@ buffer indents as it currently is indented. \\[sh-set-shell] Set this buffer's shell, and maybe its magic number. \\[sh-execute-region] Have optional header and region be executed in a subshell. -\\[sh-maybe-here-document] Without prefix, following an unquoted < inserts here document. -{, (, [, ', \", ` - Unless quoted with \\, insert the pairs {}, (), [], or '', \"\", ``. +`sh-electric-here-document-mode' controls whether insertion of two +unquoted < insert a here document. If you generally program a shell different from your login shell you can set `sh-shell-file' accordingly. If your shell's file name doesn't correctly @@ -25848,7 +25538,7 @@ with your script for an edit-interpret-debug cycle. ;;;*** ;;;### (autoloads (list-load-path-shadows) "shadow" "emacs-lisp/shadow.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from emacs-lisp/shadow.el (autoload 'list-load-path-shadows "shadow" "\ @@ -25898,8 +25588,8 @@ function, `load-path-shadows-find'. ;;;*** ;;;### (autoloads (shadow-initialize shadow-define-regexp-group shadow-define-literal-group -;;;;;; shadow-define-cluster) "shadowfile" "shadowfile.el" (20355 -;;;;;; 10021)) +;;;;;; shadow-define-cluster) "shadowfile" "shadowfile.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from shadowfile.el (autoload 'shadow-define-cluster "shadowfile" "\ @@ -25938,7 +25628,7 @@ Set up file shadowing. ;;;*** ;;;### (autoloads (shell shell-dumb-shell-regexp) "shell" "shell.el" -;;;;;; (20355 10021)) +;;;;;; (20405 16851)) ;;; Generated autoloads from shell.el (defvar shell-dumb-shell-regexp (purecopy "cmd\\(proxy\\)?\\.exe") "\ @@ -25986,8 +25676,8 @@ Otherwise, one argument `-i' is passed to the shell. ;;;*** -;;;### (autoloads (shr-insert-document) "shr" "gnus/shr.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (shr-insert-document) "shr" "gnus/shr.el" (20330 +;;;;;; 4833)) ;;; Generated autoloads from gnus/shr.el (autoload 'shr-insert-document "shr" "\ @@ -26000,7 +25690,7 @@ DOM should be a parse tree as generated by ;;;*** ;;;### (autoloads (sieve-upload-and-bury sieve-upload sieve-manage) -;;;;;; "sieve" "gnus/sieve.el" (20355 10021)) +;;;;;; "sieve" "gnus/sieve.el" (20229 56251)) ;;; Generated autoloads from gnus/sieve.el (autoload 'sieve-manage "sieve" "\ @@ -26021,7 +25711,7 @@ DOM should be a parse tree as generated by ;;;*** ;;;### (autoloads (sieve-mode) "sieve-mode" "gnus/sieve-mode.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from gnus/sieve-mode.el (autoload 'sieve-mode "sieve-mode" "\ @@ -26037,7 +25727,7 @@ Turning on Sieve mode runs `sieve-mode-hook'. ;;;*** ;;;### (autoloads (simula-mode) "simula" "progmodes/simula.el" (20355 -;;;;;; 10021)) +;;;;;; 835)) ;;; Generated autoloads from progmodes/simula.el (autoload 'simula-mode "simula" "\ @@ -26086,7 +25776,7 @@ with no arguments, if that value is non-nil. ;;;*** ;;;### (autoloads (skeleton-pair-insert-maybe skeleton-insert skeleton-proxy-new -;;;;;; define-skeleton) "skeleton" "skeleton.el" (20355 10021)) +;;;;;; define-skeleton) "skeleton" "skeleton.el" (20405 42390)) ;;; Generated autoloads from skeleton.el (defvar skeleton-filter-function 'identity "\ @@ -26099,6 +25789,8 @@ SKELETON is as defined under `skeleton-insert'. \(fn COMMAND DOCUMENTATION &rest SKELETON)" nil (quote macro)) +(put 'define-skeleton 'doc-string-elt '2) + (autoload 'skeleton-proxy-new "skeleton" "\ Insert SKELETON. Prefix ARG allows wrapping around words or regions (see `skeleton-insert'). @@ -26196,7 +25888,7 @@ symmetrical ones, and the same character twice for the others. ;;;*** ;;;### (autoloads (smerge-start-session smerge-mode smerge-ediff) -;;;;;; "smerge-mode" "vc/smerge-mode.el" (20355 10021)) +;;;;;; "smerge-mode" "vc/smerge-mode.el" (20389 6410)) ;;; Generated autoloads from vc/smerge-mode.el (autoload 'smerge-ediff "smerge-mode" "\ @@ -26224,7 +25916,7 @@ If no conflict maker is found, turn off `smerge-mode'. ;;;*** ;;;### (autoloads (smiley-buffer smiley-region) "smiley" "gnus/smiley.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from gnus/smiley.el (autoload 'smiley-region "smiley" "\ @@ -26242,7 +25934,7 @@ interactively. If there's no argument, do it at the current buffer. ;;;*** ;;;### (autoloads (smtpmail-send-queued-mail smtpmail-send-it) "smtpmail" -;;;;;; "mail/smtpmail.el" (20355 10021)) +;;;;;; "mail/smtpmail.el" (20405 16851)) ;;; Generated autoloads from mail/smtpmail.el (autoload 'smtpmail-send-it "smtpmail" "\ @@ -26257,7 +25949,7 @@ Send mail that was queued as a result of setting `smtpmail-queue-mail'. ;;;*** -;;;### (autoloads (snake) "snake" "play/snake.el" (20355 10021)) +;;;### (autoloads (snake) "snake" "play/snake.el" (20229 56251)) ;;; Generated autoloads from play/snake.el (autoload 'snake "snake" "\ @@ -26281,7 +25973,7 @@ Snake mode keybindings: ;;;*** ;;;### (autoloads (snmpv2-mode snmp-mode) "snmp-mode" "net/snmp-mode.el" -;;;;;; (20355 10021)) +;;;;;; (20355 835)) ;;; Generated autoloads from net/snmp-mode.el (autoload 'snmp-mode "snmp-mode" "\ @@ -26310,8 +26002,8 @@ then `snmpv2-mode-hook'. ;;;*** -;;;### (autoloads (sunrise-sunset) "solar" "calendar/solar.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (sunrise-sunset) "solar" "calendar/solar.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from calendar/solar.el (autoload 'sunrise-sunset "solar" "\ @@ -26326,8 +26018,8 @@ This function is suitable for execution in a .emacs file. ;;;*** -;;;### (autoloads (solitaire) "solitaire" "play/solitaire.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (solitaire) "solitaire" "play/solitaire.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from play/solitaire.el (autoload 'solitaire "solitaire" "\ @@ -26404,7 +26096,7 @@ Pick your favorite shortcuts: ;;;### (autoloads (reverse-region sort-columns sort-regexp-fields ;;;;;; sort-fields sort-numeric-fields sort-pages sort-paragraphs -;;;;;; sort-lines sort-subr) "sort" "sort.el" (20355 10021)) +;;;;;; sort-lines sort-subr) "sort" "sort.el" (20325 60273)) ;;; Generated autoloads from sort.el (put 'sort-fold-case 'safe-local-variable 'booleanp) @@ -26548,8 +26240,8 @@ From a program takes two point or marker arguments, BEG and END. ;;;*** -;;;### (autoloads (spam-initialize) "spam" "gnus/spam.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (spam-initialize) "spam" "gnus/spam.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from gnus/spam.el (autoload 'spam-initialize "spam" "\ @@ -26565,7 +26257,7 @@ installed through `spam-necessary-extra-headers'. ;;;### (autoloads (spam-report-deagentize spam-report-agentize spam-report-url-to-file ;;;;;; spam-report-url-ping-mm-url spam-report-process-queue) "spam-report" -;;;;;; "gnus/spam-report.el" (20355 10021)) +;;;;;; "gnus/spam-report.el" (20229 56251)) ;;; Generated autoloads from gnus/spam-report.el (autoload 'spam-report-process-queue "spam-report" "\ @@ -26608,7 +26300,7 @@ Spam reports will be queued with the method used when ;;;*** ;;;### (autoloads (speedbar-get-focus speedbar-frame-mode) "speedbar" -;;;;;; "speedbar.el" (20381 5411)) +;;;;;; "speedbar.el" (20400 16870)) ;;; Generated autoloads from speedbar.el (defalias 'speedbar 'speedbar-frame-mode) @@ -26632,8 +26324,8 @@ selected. If the speedbar frame is active, then select the attached frame. ;;;*** -;;;### (autoloads (snarf-spooks spook) "spook" "play/spook.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (snarf-spooks spook) "spook" "play/spook.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from play/spook.el (autoload 'spook "spook" "\ @@ -26652,7 +26344,7 @@ Return a vector containing the lines from `spook-phrases-file'. ;;;;;; sql-ms sql-ingres sql-solid sql-mysql sql-sqlite sql-informix ;;;;;; sql-sybase sql-oracle sql-product-interactive sql-connect ;;;;;; sql-mode sql-help sql-add-product-keywords) "sql" "progmodes/sql.el" -;;;;;; (20355 10021)) +;;;;;; (20304 58723)) ;;; Generated autoloads from progmodes/sql.el (autoload 'sql-add-product-keywords "sql" "\ @@ -27148,7 +26840,7 @@ buffer. ;;;*** ;;;### (autoloads (srecode-template-mode) "srecode/srt-mode" "cedet/srecode/srt-mode.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from cedet/srecode/srt-mode.el (autoload 'srecode-template-mode "srecode/srt-mode" "\ @@ -27161,7 +26853,7 @@ Major-mode for writing SRecode macros. ;;;*** ;;;### (autoloads (starttls-open-stream) "starttls" "gnus/starttls.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from gnus/starttls.el (autoload 'starttls-open-stream "starttls" "\ @@ -27188,8 +26880,8 @@ GnuTLS requires a port number. ;;;;;; strokes-mode strokes-list-strokes strokes-load-user-strokes ;;;;;; strokes-help strokes-describe-stroke strokes-do-complex-stroke ;;;;;; strokes-do-stroke strokes-read-complex-stroke strokes-read-stroke -;;;;;; strokes-global-set-stroke) "strokes" "strokes.el" (20355 -;;;;;; 10021)) +;;;;;; strokes-global-set-stroke) "strokes" "strokes.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from strokes.el (autoload 'strokes-global-set-stroke "strokes" "\ @@ -27303,7 +26995,7 @@ Read a complex stroke and insert its glyph into the current buffer. ;;;*** ;;;### (autoloads (studlify-buffer studlify-word studlify-region) -;;;;;; "studly" "play/studly.el" (20355 10021)) +;;;;;; "studly" "play/studly.el" (19764 44456)) ;;; Generated autoloads from play/studly.el (autoload 'studlify-region "studly" "\ @@ -27324,7 +27016,7 @@ Studlify-case the current buffer. ;;;*** ;;;### (autoloads (global-subword-mode subword-mode) "subword" "progmodes/subword.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from progmodes/subword.el (autoload 'subword-mode "subword" "\ @@ -27380,7 +27072,7 @@ See `subword-mode' for more information on Subword mode. ;;;*** ;;;### (autoloads (sc-cite-original) "supercite" "mail/supercite.el" -;;;;;; (20355 10021)) +;;;;;; (20273 59945)) ;;; Generated autoloads from mail/supercite.el (autoload 'sc-cite-original "supercite" "\ @@ -27412,8 +27104,8 @@ and `sc-post-hook' is run after the guts of this function. ;;;*** -;;;### (autoloads (gpm-mouse-mode) "t-mouse" "t-mouse.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (gpm-mouse-mode) "t-mouse" "t-mouse.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from t-mouse.el (define-obsolete-function-alias 't-mouse-mode 'gpm-mouse-mode "23.1") @@ -27441,7 +27133,7 @@ It relies on the `gpm' daemon being activated. ;;;*** -;;;### (autoloads (tabify untabify) "tabify" "tabify.el" (20355 10021)) +;;;### (autoloads (tabify untabify) "tabify" "tabify.el" (20229 56251)) ;;; Generated autoloads from tabify.el (autoload 'untabify "tabify" "\ @@ -27476,7 +27168,7 @@ The variable `tab-width' controls the spacing of tab stops. ;;;;;; table-recognize table-insert-row-column table-insert-column ;;;;;; table-insert-row table-insert table-point-left-cell-hook ;;;;;; table-point-entered-cell-hook table-load-hook table-cell-map-hook) -;;;;;; "table" "textmodes/table.el" (20355 10021)) +;;;;;; "table" "textmodes/table.el" (20355 835)) ;;; Generated autoloads from textmodes/table.el (defvar table-cell-map-hook nil "\ @@ -28064,50 +27756,7 @@ converts a table into plain text without frames. It is a companion to ;;;*** -;;;### (autoloads (tabulated-list-mode) "tabulated-list" "emacs-lisp/tabulated-list.el" -;;;;;; (20369 14251)) -;;; Generated autoloads from emacs-lisp/tabulated-list.el - -(autoload 'tabulated-list-mode "tabulated-list" "\ -Generic major mode for browsing a list of items. -This mode is usually not used directly; instead, other major -modes are derived from it, using `define-derived-mode'. - -In this major mode, the buffer is divided into multiple columns, -which are labeled using the header line. Each non-empty line -belongs to one \"entry\", and the entries can be sorted according -to their column values. - -An inheriting mode should usually do the following in their body: - - - Set `tabulated-list-format', specifying the column format. - - Set `tabulated-list-revert-hook', if the buffer contents need - to be specially recomputed prior to `revert-buffer'. - - Maybe set a `tabulated-list-entries' function (see below). - - Maybe set `tabulated-list-printer' (see below). - - Maybe set `tabulated-list-padding'. - - Call `tabulated-list-init-header' to initialize `header-line-format' - according to `tabulated-list-format'. - -An inheriting mode is usually accompanied by a \"list-FOO\" -command (e.g. `list-packages', `list-processes'). This command -creates or switches to a buffer and enables the major mode in -that buffer. If `tabulated-list-entries' is not a function, the -command should initialize it to a list of entries for displaying. -Finally, it should call `tabulated-list-print'. - -`tabulated-list-print' calls the printer function specified by -`tabulated-list-printer', once for each entry. The default -printer is `tabulated-list-print-entry', but a mode that keeps -data in an ewoc may instead specify a printer function (e.g., one -that calls `ewoc-enter-last'), with `tabulated-list-print-entry' -as the ewoc pretty-printer. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads (talk talk-connect) "talk" "talk.el" (20355 10021)) +;;;### (autoloads (talk talk-connect) "talk" "talk.el" (20229 56251)) ;;; Generated autoloads from talk.el (autoload 'talk-connect "talk" "\ @@ -28122,7 +27771,7 @@ Connect to the Emacs talk group from the current X display or tty frame. ;;;*** -;;;### (autoloads (tar-mode) "tar-mode" "tar-mode.el" (20364 26741)) +;;;### (autoloads (tar-mode) "tar-mode" "tar-mode.el" (20389 6410)) ;;; Generated autoloads from tar-mode.el (autoload 'tar-mode "tar-mode" "\ @@ -28146,7 +27795,7 @@ See also: variables `tar-update-datestamp' and `tar-anal-blocksize'. ;;;*** ;;;### (autoloads (tcl-help-on-word inferior-tcl tcl-mode) "tcl" -;;;;;; "progmodes/tcl.el" (20355 10021)) +;;;;;; "progmodes/tcl.el" (20355 835)) ;;; Generated autoloads from progmodes/tcl.el (autoload 'tcl-mode "tcl" "\ @@ -28194,7 +27843,7 @@ Prefix argument means invert sense of `tcl-use-smart-word-finder'. ;;;*** -;;;### (autoloads (rsh telnet) "telnet" "net/telnet.el" (20355 10021)) +;;;### (autoloads (rsh telnet) "telnet" "net/telnet.el" (20229 56251)) ;;; Generated autoloads from net/telnet.el (autoload 'telnet "telnet" "\ @@ -28220,7 +27869,7 @@ Normally input is edited in Emacs and sent a line at a time. ;;;*** ;;;### (autoloads (serial-term ansi-term term make-term) "term" "term.el" -;;;;;; (20355 10021)) +;;;;;; (20397 10470)) ;;; Generated autoloads from term.el (autoload 'make-term "term" "\ @@ -28262,8 +27911,8 @@ use in that buffer. ;;;*** -;;;### (autoloads (terminal-emulator) "terminal" "terminal.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (terminal-emulator) "terminal" "terminal.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from terminal.el (autoload 'terminal-emulator "terminal" "\ @@ -28300,7 +27949,7 @@ subprocess started. ;;;*** ;;;### (autoloads (testcover-this-defun) "testcover" "emacs-lisp/testcover.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from emacs-lisp/testcover.el (autoload 'testcover-this-defun "testcover" "\ @@ -28310,7 +27959,7 @@ Start coverage on function under point. ;;;*** -;;;### (autoloads (tetris) "tetris" "play/tetris.el" (20355 10021)) +;;;### (autoloads (tetris) "tetris" "play/tetris.el" (20229 56251)) ;;; Generated autoloads from play/tetris.el (autoload 'tetris "tetris" "\ @@ -28341,7 +27990,7 @@ tetris-mode keybindings: ;;;;;; tex-start-commands tex-start-options slitex-run-command latex-run-command ;;;;;; tex-run-command tex-offer-save tex-main-file tex-first-line-header-regexp ;;;;;; tex-directory tex-shell-file-name) "tex-mode" "textmodes/tex-mode.el" -;;;;;; (20364 45187)) +;;;;;; (20370 4296)) ;;; Generated autoloads from textmodes/tex-mode.el (defvar tex-shell-file-name nil "\ @@ -28643,7 +28292,7 @@ Major mode to edit DocTeX files. ;;;*** ;;;### (autoloads (texi2info texinfo-format-region texinfo-format-buffer) -;;;;;; "texinfmt" "textmodes/texinfmt.el" (20355 10021)) +;;;;;; "texinfmt" "textmodes/texinfmt.el" (20355 835)) ;;; Generated autoloads from textmodes/texinfmt.el (autoload 'texinfo-format-buffer "texinfmt" "\ @@ -28683,7 +28332,7 @@ if large. You can use `Info-split' to do this manually. ;;;*** ;;;### (autoloads (texinfo-mode texinfo-close-quote texinfo-open-quote) -;;;;;; "texinfo" "textmodes/texinfo.el" (20355 10021)) +;;;;;; "texinfo" "textmodes/texinfo.el" (20229 56251)) ;;; Generated autoloads from textmodes/texinfo.el (defvar texinfo-open-quote (purecopy "``") "\ @@ -28769,7 +28418,7 @@ value of `texinfo-mode-hook'. ;;;### (autoloads (thai-composition-function thai-compose-buffer ;;;;;; thai-compose-string thai-compose-region) "thai-util" "language/thai-util.el" -;;;;;; (20355 10021)) +;;;;;; (20273 59945)) ;;; Generated autoloads from language/thai-util.el (autoload 'thai-compose-region "thai-util" "\ @@ -28798,7 +28447,7 @@ Compose Thai characters in the current buffer. ;;;### (autoloads (list-at-point number-at-point symbol-at-point ;;;;;; sexp-at-point thing-at-point bounds-of-thing-at-point forward-thing) -;;;;;; "thingatpt" "thingatpt.el" (20355 10021)) +;;;;;; "thingatpt" "thingatpt.el" (20229 56251)) ;;; Generated autoloads from thingatpt.el (autoload 'forward-thing "thingatpt" "\ @@ -28861,7 +28510,7 @@ Return the Lisp list at point, or nil if none is found. ;;;### (autoloads (thumbs-dired-setroot thumbs-dired-show thumbs-dired-show-marked ;;;;;; thumbs-show-from-dir thumbs-find-thumb) "thumbs" "thumbs.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from thumbs.el (autoload 'thumbs-find-thumb "thumbs" "\ @@ -28900,7 +28549,7 @@ In dired, call the setroot program on the image at point. ;;;;;; tibetan-decompose-string tibetan-decompose-region tibetan-compose-region ;;;;;; tibetan-compose-string tibetan-transcription-to-tibetan tibetan-tibetan-to-transcription ;;;;;; tibetan-char-p) "tibet-util" "language/tibet-util.el" (20355 -;;;;;; 10021)) +;;;;;; 835)) ;;; Generated autoloads from language/tibet-util.el (autoload 'tibetan-char-p "tibet-util" "\ @@ -28974,7 +28623,7 @@ See also docstring of the function tibetan-compose-region. ;;;*** ;;;### (autoloads (tildify-buffer tildify-region) "tildify" "textmodes/tildify.el" -;;;;;; (20373 11301)) +;;;;;; (20373 62846)) ;;; Generated autoloads from textmodes/tildify.el (autoload 'tildify-region "tildify" "\ @@ -28999,7 +28648,7 @@ This function performs no refilling of the changed text. ;;;### (autoloads (emacs-init-time emacs-uptime display-time-world ;;;;;; display-time-mode display-time display-time-day-and-date) -;;;;;; "time" "time.el" (20355 10021)) +;;;;;; "time" "time.el" (20389 6410)) ;;; Generated autoloads from time.el (defvar display-time-day-and-date nil "\ @@ -29065,7 +28714,7 @@ Return a string giving the duration of the Emacs initialization. ;;;;;; time-to-day-in-year date-leap-year-p days-between date-to-day ;;;;;; time-add time-subtract time-since days-to-time time-less-p ;;;;;; seconds-to-time date-to-time) "time-date" "calendar/time-date.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from calendar/time-date.el (autoload 'date-to-time "time-date" "\ @@ -29179,7 +28828,7 @@ This function does not work for SECONDS greater than `most-positive-fixnum'. ;;;*** ;;;### (autoloads (time-stamp-toggle-active time-stamp) "time-stamp" -;;;;;; "time-stamp.el" (20355 10021)) +;;;;;; "time-stamp.el" (20229 56251)) ;;; Generated autoloads from time-stamp.el (put 'time-stamp-format 'safe-local-variable 'stringp) (put 'time-stamp-time-zone 'safe-local-variable 'string-or-null-p) @@ -29223,7 +28872,7 @@ With ARG, turn time stamping on if and only if arg is positive. ;;;;;; timeclock-workday-remaining-string timeclock-reread-log timeclock-query-out ;;;;;; timeclock-change timeclock-status-string timeclock-out timeclock-in ;;;;;; timeclock-modeline-display) "timeclock" "calendar/timeclock.el" -;;;;;; (20355 10021)) +;;;;;; (20304 58723)) ;;; Generated autoloads from calendar/timeclock.el (autoload 'timeclock-modeline-display "timeclock" "\ @@ -29323,7 +28972,7 @@ relative only to the time worked today, and not to past time. ;;;*** ;;;### (autoloads (batch-titdic-convert titdic-convert) "titdic-cnv" -;;;;;; "international/titdic-cnv.el" (20355 10021)) +;;;;;; "international/titdic-cnv.el" (20288 9499)) ;;; Generated autoloads from international/titdic-cnv.el (autoload 'titdic-convert "titdic-cnv" "\ @@ -29346,7 +28995,7 @@ To get complete usage, invoke \"emacs -batch -f batch-titdic-convert -h\". ;;;*** ;;;### (autoloads (tmm-prompt tmm-menubar-mouse tmm-menubar) "tmm" -;;;;;; "tmm.el" (20356 55829)) +;;;;;; "tmm.el" (20356 48455)) ;;; Generated autoloads from tmm.el (define-key global-map "\M-`" 'tmm-menubar) (define-key global-map [menu-bar mouse-1] 'tmm-menubar-mouse) @@ -29386,7 +29035,7 @@ Its value should be an event that has a binding in MENU. ;;;### (autoloads (todo-show todo-cp todo-mode todo-print todo-top-priorities ;;;;;; todo-insert-item todo-add-item-non-interactively todo-add-category) -;;;;;; "todo-mode" "calendar/todo-mode.el" (20355 10021)) +;;;;;; "todo-mode" "calendar/todo-mode.el" (20229 56251)) ;;; Generated autoloads from calendar/todo-mode.el (autoload 'todo-add-category "todo-mode" "\ @@ -29446,7 +29095,7 @@ Show TODO list. ;;;### (autoloads (tool-bar-local-item-from-menu tool-bar-add-item-from-menu ;;;;;; tool-bar-local-item tool-bar-add-item toggle-tool-bar-mode-from-frame) -;;;;;; "tool-bar" "tool-bar.el" (20355 10021)) +;;;;;; "tool-bar" "tool-bar.el" (20280 8018)) ;;; Generated autoloads from tool-bar.el (autoload 'toggle-tool-bar-mode-from-frame "tool-bar" "\ @@ -29517,7 +29166,7 @@ holds a keymap. ;;;*** ;;;### (autoloads (tpu-edt-on tpu-edt-mode) "tpu-edt" "emulation/tpu-edt.el" -;;;;;; (20355 10021)) +;;;;;; (20400 16870)) ;;; Generated autoloads from emulation/tpu-edt.el (defvar tpu-edt-mode nil "\ @@ -29547,7 +29196,7 @@ Turn on TPU/edt emulation. ;;;*** ;;;### (autoloads (tpu-mapper) "tpu-mapper" "emulation/tpu-mapper.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from emulation/tpu-mapper.el (autoload 'tpu-mapper "tpu-mapper" "\ @@ -29581,7 +29230,7 @@ your local X guru can try to figure out why the key is being ignored. ;;;*** -;;;### (autoloads (tq-create) "tq" "emacs-lisp/tq.el" (20355 10021)) +;;;### (autoloads (tq-create) "tq" "emacs-lisp/tq.el" (20229 56251)) ;;; Generated autoloads from emacs-lisp/tq.el (autoload 'tq-create "tq" "\ @@ -29595,7 +29244,7 @@ to a tcp server on another machine. ;;;*** ;;;### (autoloads (trace-function-background trace-function trace-buffer) -;;;;;; "trace" "emacs-lisp/trace.el" (20355 10021)) +;;;;;; "trace" "emacs-lisp/trace.el" (20229 56251)) ;;; Generated autoloads from emacs-lisp/trace.el (defvar trace-buffer (purecopy "*trace-output*") "\ @@ -29632,7 +29281,7 @@ BUFFER defaults to `trace-buffer'. ;;;### (autoloads (tramp-unload-tramp tramp-completion-handle-file-name-completion ;;;;;; tramp-completion-handle-file-name-all-completions tramp-unload-file-name-handlers ;;;;;; tramp-file-name-handler tramp-syntax tramp-mode) "tramp" -;;;;;; "net/tramp.el" (20373 11301)) +;;;;;; "net/tramp.el" (20373 62846)) ;;; Generated autoloads from net/tramp.el (defvar tramp-mode t "\ @@ -29765,7 +29414,7 @@ Discard Tramp from loading remote files. ;;;*** ;;;### (autoloads (tramp-ftp-enable-ange-ftp) "tramp-ftp" "net/tramp-ftp.el" -;;;;;; (20355 10021)) +;;;;;; (20355 835)) ;;; Generated autoloads from net/tramp-ftp.el (autoload 'tramp-ftp-enable-ange-ftp "tramp-ftp" "\ @@ -29775,8 +29424,8 @@ Discard Tramp from loading remote files. ;;;*** -;;;### (autoloads (help-with-tutorial) "tutorial" "tutorial.el" (20369 -;;;;;; 14251)) +;;;### (autoloads (help-with-tutorial) "tutorial" "tutorial.el" (20370 +;;;;;; 4296)) ;;; Generated autoloads from tutorial.el (autoload 'help-with-tutorial "tutorial" "\ @@ -29801,7 +29450,7 @@ resumed later. ;;;*** ;;;### (autoloads (tai-viet-composition-function) "tv-util" "language/tv-util.el" -;;;;;; (20355 10021)) +;;;;;; (19764 44456)) ;;; Generated autoloads from language/tv-util.el (autoload 'tai-viet-composition-function "tv-util" "\ @@ -29812,7 +29461,7 @@ resumed later. ;;;*** ;;;### (autoloads (2C-split 2C-associate-buffer 2C-two-columns) "two-column" -;;;;;; "textmodes/two-column.el" (20364 31990)) +;;;;;; "textmodes/two-column.el" (20370 4296)) ;;; Generated autoloads from textmodes/two-column.el (autoload '2C-command "two-column" () t 'keymap) (global-set-key "\C-x6" '2C-command) @@ -29863,7 +29512,7 @@ First column's text sSs Second column's text ;;;;;; type-break type-break-mode type-break-keystroke-threshold ;;;;;; type-break-good-break-interval type-break-good-rest-interval ;;;;;; type-break-interval type-break-mode) "type-break" "type-break.el" -;;;;;; (20355 10021)) +;;;;;; (20355 835)) ;;; Generated autoloads from type-break.el (defvar type-break-mode nil "\ @@ -30045,7 +29694,7 @@ FRAC should be the inverse of the fractional value; for example, a value of ;;;*** -;;;### (autoloads (uce-reply-to-uce) "uce" "mail/uce.el" (20355 10021)) +;;;### (autoloads (uce-reply-to-uce) "uce" "mail/uce.el" (20229 56251)) ;;; Generated autoloads from mail/uce.el (autoload 'uce-reply-to-uce "uce" "\ @@ -30063,7 +29712,7 @@ You might need to set `uce-mail-reader' before using this. ;;;;;; ucs-normalize-NFKC-string ucs-normalize-NFKC-region ucs-normalize-NFKD-string ;;;;;; ucs-normalize-NFKD-region ucs-normalize-NFC-string ucs-normalize-NFC-region ;;;;;; ucs-normalize-NFD-string ucs-normalize-NFD-region) "ucs-normalize" -;;;;;; "international/ucs-normalize.el" (20355 10021)) +;;;;;; "international/ucs-normalize.el" (20229 56251)) ;;; Generated autoloads from international/ucs-normalize.el (autoload 'ucs-normalize-NFD-region "ucs-normalize" "\ @@ -30129,7 +29778,7 @@ Normalize the string STR by the Unicode NFC and Mac OS's HFS Plus. ;;;*** ;;;### (autoloads (ununderline-region underline-region) "underline" -;;;;;; "textmodes/underline.el" (20355 10021)) +;;;;;; "textmodes/underline.el" (20229 56251)) ;;; Generated autoloads from textmodes/underline.el (autoload 'underline-region "underline" "\ @@ -30150,7 +29799,7 @@ which specify the range to operate on. ;;;*** ;;;### (autoloads (unrmail batch-unrmail) "unrmail" "mail/unrmail.el" -;;;;;; (20369 14251)) +;;;;;; (20370 4296)) ;;; Generated autoloads from mail/unrmail.el (autoload 'batch-unrmail "unrmail" "\ @@ -30169,8 +29818,8 @@ Convert old-style Rmail Babyl file FILE to system inbox format file TO-FILE. ;;;*** -;;;### (autoloads (unsafep) "unsafep" "emacs-lisp/unsafep.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (unsafep) "unsafep" "emacs-lisp/unsafep.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from emacs-lisp/unsafep.el (autoload 'unsafep "unsafep" "\ @@ -30183,12 +29832,14 @@ UNSAFEP-VARS is a list of symbols with local bindings. ;;;*** ;;;### (autoloads (url-retrieve-synchronously url-retrieve) "url" -;;;;;; "url/url.el" (20378 29222)) +;;;;;; "url/url.el" (20395 5351)) ;;; Generated autoloads from url/url.el (autoload 'url-retrieve "url" "\ Retrieve URL asynchronously and call CALLBACK with CBARGS when finished. -URL is either a string or a parsed URL. +URL is either a string or a parsed URL. If it is a string +containing characters that are not valid in a URI, those +characters are percent-encoded; see `url-encode-url'. CALLBACK is called when the object has been completely retrieved, with the current buffer containing the object, and any MIME headers associated @@ -30229,7 +29880,7 @@ no further processing). URL is either a string or a parsed URL. ;;;*** ;;;### (autoloads (url-register-auth-scheme url-get-authentication) -;;;;;; "url-auth" "url/url-auth.el" (20355 10021)) +;;;;;; "url-auth" "url/url-auth.el" (20239 35035)) ;;; Generated autoloads from url/url-auth.el (autoload 'url-get-authentication "url-auth" "\ @@ -30271,7 +29922,7 @@ RATING a rating between 1 and 10 of the strength of the authentication. ;;;*** ;;;### (autoloads (url-cache-extract url-is-cached url-store-in-cache) -;;;;;; "url-cache" "url/url-cache.el" (20355 10021)) +;;;;;; "url-cache" "url/url-cache.el" (20272 35721)) ;;; Generated autoloads from url/url-cache.el (autoload 'url-store-in-cache "url-cache" "\ @@ -30292,7 +29943,7 @@ Extract FNAM from the local disk cache. ;;;*** -;;;### (autoloads (url-cid) "url-cid" "url/url-cid.el" (20355 10021)) +;;;### (autoloads (url-cid) "url-cid" "url/url-cid.el" (20229 56251)) ;;; Generated autoloads from url/url-cid.el (autoload 'url-cid "url-cid" "\ @@ -30303,7 +29954,7 @@ Extract FNAM from the local disk cache. ;;;*** ;;;### (autoloads (url-dav-vc-registered url-dav-supported-p) "url-dav" -;;;;;; "url/url-dav.el" (20355 10021)) +;;;;;; "url/url-dav.el" (20355 835)) ;;; Generated autoloads from url/url-dav.el (autoload 'url-dav-supported-p "url-dav" "\ @@ -30318,8 +29969,8 @@ Extract FNAM from the local disk cache. ;;;*** -;;;### (autoloads (url-file) "url-file" "url/url-file.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (url-file) "url-file" "url/url-file.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from url/url-file.el (autoload 'url-file "url-file" "\ @@ -30330,7 +29981,7 @@ Handle file: and ftp: URLs. ;;;*** ;;;### (autoloads (url-open-stream url-gateway-nslookup-host) "url-gw" -;;;;;; "url/url-gw.el" (20355 10021)) +;;;;;; "url/url-gw.el" (20229 56251)) ;;; Generated autoloads from url/url-gw.el (autoload 'url-gateway-nslookup-host "url-gw" "\ @@ -30350,7 +30001,7 @@ Might do a non-blocking connection; use `process-status' to check. ;;;### (autoloads (url-insert-file-contents url-file-local-copy url-copy-file ;;;;;; url-file-handler url-handler-mode) "url-handlers" "url/url-handlers.el" -;;;;;; (20355 10021)) +;;;;;; (20355 835)) ;;; Generated autoloads from url/url-handlers.el (defvar url-handler-mode nil "\ @@ -30405,7 +30056,7 @@ accessible. ;;;*** ;;;### (autoloads (url-http-options url-http-file-attributes url-http-file-exists-p -;;;;;; url-http) "url-http" "url/url-http.el" (20355 10021)) +;;;;;; url-http) "url-http" "url/url-http.el" (20395 5351)) ;;; Generated autoloads from url/url-http.el (autoload 'url-http "url-http" "\ @@ -30474,7 +30125,7 @@ HTTPS retrievals are asynchronous.") ;;;*** -;;;### (autoloads (url-irc) "url-irc" "url/url-irc.el" (20355 10021)) +;;;### (autoloads (url-irc) "url-irc" "url/url-irc.el" (20229 56251)) ;;; Generated autoloads from url/url-irc.el (autoload 'url-irc "url-irc" "\ @@ -30485,7 +30136,7 @@ HTTPS retrievals are asynchronous.") ;;;*** ;;;### (autoloads (url-ldap) "url-ldap" "url/url-ldap.el" (20355 -;;;;;; 10021)) +;;;;;; 835)) ;;; Generated autoloads from url/url-ldap.el (autoload 'url-ldap "url-ldap" "\ @@ -30499,7 +30150,7 @@ URL can be a URL string, or a URL vector of the type returned by ;;;*** ;;;### (autoloads (url-mailto url-mail) "url-mailto" "url/url-mailto.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from url/url-mailto.el (autoload 'url-mail "url-mailto" "\ @@ -30515,7 +30166,7 @@ Handle the mailto: URL syntax. ;;;*** ;;;### (autoloads (url-data url-generic-emulator-loader url-info -;;;;;; url-man) "url-misc" "url/url-misc.el" (20355 10021)) +;;;;;; url-man) "url-misc" "url/url-misc.el" (20229 56251)) ;;; Generated autoloads from url/url-misc.el (autoload 'url-man "url-misc" "\ @@ -30547,7 +30198,7 @@ Fetch a data URL (RFC 2397). ;;;*** ;;;### (autoloads (url-snews url-news) "url-news" "url/url-news.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from url/url-news.el (autoload 'url-news "url-news" "\ @@ -30564,7 +30215,7 @@ Fetch a data URL (RFC 2397). ;;;### (autoloads (url-ns-user-pref url-ns-prefs isInNet isResolvable ;;;;;; dnsResolve dnsDomainIs isPlainHostName) "url-ns" "url/url-ns.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from url/url-ns.el (autoload 'isPlainHostName "url-ns" "\ @@ -30605,7 +30256,7 @@ Fetch a data URL (RFC 2397). ;;;*** ;;;### (autoloads (url-generic-parse-url url-recreate-url) "url-parse" -;;;;;; "url/url-parse.el" (20355 10021)) +;;;;;; "url/url-parse.el" (20395 46900)) ;;; Generated autoloads from url/url-parse.el (autoload 'url-recreate-url "url-parse" "\ @@ -30616,14 +30267,48 @@ Recreate a URL string from the parsed URLOBJ. (autoload 'url-generic-parse-url "url-parse" "\ Return an URL-struct of the parts of URL. The CL-style struct contains the following fields: -TYPE USER PASSWORD HOST PORTSPEC FILENAME TARGET ATTRIBUTES FULLNESS. + +TYPE is the URI scheme (string or nil). +USER is the user name (string or nil). +PASSWORD is the password (string [deprecated] or nil). +HOST is the host (a registered name, IP literal in square + brackets, or IPv4 address in dotted-decimal form). +PORTSPEC is the specified port (a number), or nil. +FILENAME is the path AND the query component of the URI. +TARGET is the fragment identifier component (used to refer to a + subordinate resource, e.g. a part of a webpage). +ATTRIBUTES is nil; this slot originally stored the attribute and + value alists for IMAP URIs, but this feature was removed + since it conflicts with RFC 3986. +FULLNESS is non-nil iff the hierarchical sequence component of + the URL starts with two slashes, \"//\". + +The parser follows RFC 3986, except that it also tries to handle +URIs that are not fully specified (e.g. lacking TYPE), and it +does not check for or perform %-encoding. + +Here is an example. The URL + + foo://bob:pass@example.com:42/a/b/c.dtb?type=animal&name=narwhal#nose + +parses to + + TYPE = \"foo\" + USER = \"bob\" + PASSWORD = \"pass\" + HOST = \"example.com\" + PORTSPEC = 42 + FILENAME = \"/a/b/c.dtb?type=animal&name=narwhal\" + TARGET = \"nose\" + ATTRIBUTES = nil + FULLNESS = t \(fn URL)" nil nil) ;;;*** ;;;### (autoloads (url-setup-privacy-info) "url-privacy" "url/url-privacy.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from url/url-privacy.el (autoload 'url-setup-privacy-info "url-privacy" "\ @@ -30634,7 +30319,7 @@ Setup variables that expose info about you and your system. ;;;*** ;;;### (autoloads (url-queue-retrieve) "url-queue" "url/url-queue.el" -;;;;;; (20355 10021)) +;;;;;; (20339 13356)) ;;; Generated autoloads from url/url-queue.el (autoload 'url-queue-retrieve "url-queue" "\ @@ -30649,12 +30334,13 @@ The variable `url-queue-timeout' sets a timeout. ;;;*** ;;;### (autoloads (url-view-url url-truncate-url-for-viewing url-file-extension -;;;;;; url-hexify-string url-unhex-string url-parse-query-string -;;;;;; url-file-nondirectory url-file-directory url-percentage url-display-percentage -;;;;;; url-pretty-length url-strip-leading-spaces url-eat-trailing-space -;;;;;; url-get-normalized-date url-lazy-message url-normalize-url -;;;;;; url-insert-entities-in-string url-parse-args url-debug url-debug) -;;;;;; "url-util" "url/url-util.el" (20356 27828)) +;;;;;; url-encode-url url-hexify-string url-unhex-string url-build-query-string +;;;;;; url-parse-query-string url-file-nondirectory url-file-directory +;;;;;; url-percentage url-display-percentage url-pretty-length url-strip-leading-spaces +;;;;;; url-eat-trailing-space url-get-normalized-date url-lazy-message +;;;;;; url-normalize-url url-insert-entities-in-string url-parse-args +;;;;;; url-debug url-debug) "url-util" "url/url-util.el" (20405 +;;;;;; 16851)) ;;; Generated autoloads from url/url-util.el (defvar url-debug nil "\ @@ -30748,6 +30434,18 @@ Return the nondirectory part of FILE, for a URL. \(fn QUERY &optional DOWNCASE ALLOW-NEWLINES)" nil nil) +(autoload 'url-build-query-string "url-util" "\ +Build a query-string. + +Given a QUERY in the form: +'((key1 val1) + (key2 val2) + (key3 val1 val2) + (key4) + (key5 + +\(fn QUERY &optional SEMICOLONS KEEP-EMPTY)" nil nil) + (autoload 'url-unhex-string "url-util" "\ Remove %XX embedded spaces, etc in a URL. If optional second argument ALLOW-NEWLINES is non-nil, then allow the @@ -30757,13 +30455,27 @@ forbidden in URL encoding. \(fn STR &optional ALLOW-NEWLINES)" nil nil) (autoload 'url-hexify-string "url-util" "\ -Return a new string that is STRING URI-encoded. -First, STRING is converted to utf-8, if necessary. Then, for each -character in the utf-8 string, those found in `url-unreserved-chars' -are left as-is, all others are represented as a three-character -string: \"%\" followed by two lowercase hex digits. +URI-encode STRING and return the result. +If STRING is multibyte, it is first converted to a utf-8 byte +string. Each byte corresponding to an allowed character is left +as-is, while all other bytes are converted to a three-character +string: \"%\" followed by two upper-case hex digits. -\(fn STRING)" nil nil) +The allowed characters are specified by ALLOWED-CHARS. If this +argument is nil, the list `url-unreserved-chars' determines the +allowed characters. Otherwise, ALLOWED-CHARS should be a vector +whose Nth element is non-nil if character N is allowed. + +\(fn STRING &optional ALLOWED-CHARS)" nil nil) + +(autoload 'url-encode-url "url-util" "\ +Return a properly URI-encoded version of URL. +This function also performs URI normalization, e.g. converting +the scheme to lowercase if it is uppercase. Apart from +normalization, if URL is already URI-encoded, this function +should return it unchanged. + +\(fn URL)" nil nil) (autoload 'url-file-extension "url-util" "\ Return the filename extension of FNAME. @@ -30790,7 +30502,7 @@ This uses `url-current-object', set locally to the buffer. ;;;*** ;;;### (autoloads (ask-user-about-supersession-threat ask-user-about-lock) -;;;;;; "userlock" "userlock.el" (20355 10021)) +;;;;;; "userlock" "userlock.el" (20229 56251)) ;;; Generated autoloads from userlock.el (autoload 'ask-user-about-lock "userlock" "\ @@ -30820,7 +30532,7 @@ The buffer in question is current when this function is called. ;;;### (autoloads (utf-7-imap-pre-write-conversion utf-7-pre-write-conversion ;;;;;; utf-7-imap-post-read-conversion utf-7-post-read-conversion) -;;;;;; "utf-7" "international/utf-7.el" (20355 10021)) +;;;;;; "utf-7" "international/utf-7.el" (20229 56251)) ;;; Generated autoloads from international/utf-7.el (autoload 'utf-7-post-read-conversion "utf-7" "\ @@ -30845,7 +30557,7 @@ The buffer in question is current when this function is called. ;;;*** -;;;### (autoloads (utf7-encode) "utf7" "gnus/utf7.el" (20355 10021)) +;;;### (autoloads (utf7-encode) "utf7" "gnus/utf7.el" (20229 56251)) ;;; Generated autoloads from gnus/utf7.el (autoload 'utf7-encode "utf7" "\ @@ -30857,7 +30569,7 @@ Encode UTF-7 STRING. Use IMAP modification if FOR-IMAP is non-nil. ;;;### (autoloads (uudecode-decode-region uudecode-decode-region-internal ;;;;;; uudecode-decode-region-external) "uudecode" "mail/uudecode.el" -;;;;;; (20355 10021)) +;;;;;; (20355 835)) ;;; Generated autoloads from mail/uudecode.el (autoload 'uudecode-decode-region-external "uudecode" "\ @@ -30887,8 +30599,8 @@ If FILE-NAME is non-nil, save the result to FILE-NAME. ;;;;;; vc-print-log vc-retrieve-tag vc-create-tag vc-merge vc-insert-headers ;;;;;; vc-revision-other-window vc-root-diff vc-ediff vc-version-ediff ;;;;;; vc-diff vc-version-diff vc-register vc-next-action vc-before-checkin-hook -;;;;;; vc-checkin-hook vc-checkout-hook) "vc" "vc/vc.el" (20377 -;;;;;; 8374)) +;;;;;; vc-checkin-hook vc-checkout-hook) "vc" "vc/vc.el" (20376 +;;;;;; 45624)) ;;; Generated autoloads from vc/vc.el (defvar vc-checkout-hook nil "\ @@ -31166,7 +30878,7 @@ Return the branch part of a revision number REV. ;;;*** ;;;### (autoloads (vc-annotate) "vc-annotate" "vc/vc-annotate.el" -;;;;;; (20356 55829)) +;;;;;; (20356 48455)) ;;; Generated autoloads from vc/vc-annotate.el (autoload 'vc-annotate "vc-annotate" "\ @@ -31203,7 +30915,7 @@ mode-specific menu. `vc-annotate-color-map' and ;;;*** -;;;### (autoloads nil "vc-arch" "vc/vc-arch.el" (20377 8374)) +;;;### (autoloads nil "vc-arch" "vc/vc-arch.el" (20376 46117)) ;;; Generated autoloads from vc/vc-arch.el (defun vc-arch-registered (file) (if (vc-find-root file "{arch}/=tagging-method") @@ -31213,7 +30925,7 @@ mode-specific menu. `vc-annotate-color-map' and ;;;*** -;;;### (autoloads nil "vc-bzr" "vc/vc-bzr.el" (20377 8374)) +;;;### (autoloads nil "vc-bzr" "vc/vc-bzr.el" (20405 42046)) ;;; Generated autoloads from vc/vc-bzr.el (defconst vc-bzr-admin-dirname ".bzr" "\ @@ -31229,7 +30941,7 @@ Name of the format file in a .bzr directory.") ;;;*** -;;;### (autoloads nil "vc-cvs" "vc/vc-cvs.el" (20377 8374)) +;;;### (autoloads nil "vc-cvs" "vc/vc-cvs.el" (20376 45957)) ;;; Generated autoloads from vc/vc-cvs.el (defun vc-cvs-registered (f) "Return non-nil if file F is registered with CVS." @@ -31240,7 +30952,7 @@ Name of the format file in a .bzr directory.") ;;;*** -;;;### (autoloads (vc-dir) "vc-dir" "vc/vc-dir.el" (20377 8374)) +;;;### (autoloads (vc-dir) "vc-dir" "vc/vc-dir.el" (20376 45841)) ;;; Generated autoloads from vc/vc-dir.el (autoload 'vc-dir "vc-dir" "\ @@ -31265,7 +30977,7 @@ These are the commands available for use in the file status buffer: ;;;*** ;;;### (autoloads (vc-do-command) "vc-dispatcher" "vc/vc-dispatcher.el" -;;;;;; (20364 45187)) +;;;;;; (20370 4296)) ;;; Generated autoloads from vc/vc-dispatcher.el (autoload 'vc-do-command "vc-dispatcher" "\ @@ -31288,7 +31000,7 @@ case, and the process object in the asynchronous case. ;;;*** -;;;### (autoloads nil "vc-git" "vc/vc-git.el" (20378 29222)) +;;;### (autoloads nil "vc-git" "vc/vc-git.el" (20379 60745)) ;;; Generated autoloads from vc/vc-git.el (defun vc-git-registered (file) "Return non-nil if FILE is registered with git." @@ -31299,7 +31011,7 @@ case, and the process object in the asynchronous case. ;;;*** -;;;### (autoloads nil "vc-hg" "vc/vc-hg.el" (20377 8374)) +;;;### (autoloads nil "vc-hg" "vc/vc-hg.el" (20376 44541)) ;;; Generated autoloads from vc/vc-hg.el (defun vc-hg-registered (file) "Return non-nil if FILE is registered with hg." @@ -31310,7 +31022,7 @@ case, and the process object in the asynchronous case. ;;;*** -;;;### (autoloads nil "vc-mtn" "vc/vc-mtn.el" (20377 8374)) +;;;### (autoloads nil "vc-mtn" "vc/vc-mtn.el" (20376 41989)) ;;; Generated autoloads from vc/vc-mtn.el (defconst vc-mtn-admin-dir "_MTN" "\ @@ -31327,7 +31039,7 @@ Name of the monotone directory's format file.") ;;;*** ;;;### (autoloads (vc-rcs-master-templates) "vc-rcs" "vc/vc-rcs.el" -;;;;;; (20355 10021)) +;;;;;; (20296 30097)) ;;; Generated autoloads from vc/vc-rcs.el (defvar vc-rcs-master-templates (purecopy '("%sRCS/%s,v" "%s%s,v" "%sRCS/%s")) "\ @@ -31341,7 +31053,7 @@ For a description of possible values, see `vc-check-master-templates'.") ;;;*** ;;;### (autoloads (vc-sccs-master-templates) "vc-sccs" "vc/vc-sccs.el" -;;;;;; (20355 10021)) +;;;;;; (20296 30097)) ;;; Generated autoloads from vc/vc-sccs.el (defvar vc-sccs-master-templates (purecopy '("%sSCCS/s.%s" "%ss.%s" vc-sccs-search-project-dir)) "\ @@ -31358,7 +31070,7 @@ find any project directory." (let ((project-dir (getenv "PROJECTDIR")) dirs dir) ;;;*** -;;;### (autoloads nil "vc-svn" "vc/vc-svn.el" (20355 10021)) +;;;### (autoloads nil "vc-svn" "vc/vc-svn.el" (20296 30097)) ;;; Generated autoloads from vc/vc-svn.el (defun vc-svn-registered (f) (let ((admin-dir (cond ((and (eq system-type 'windows-nt) @@ -31372,7 +31084,7 @@ find any project directory." (let ((project-dir (getenv "PROJECTDIR")) dirs dir) ;;;*** ;;;### (autoloads (vera-mode) "vera-mode" "progmodes/vera-mode.el" -;;;;;; (20355 10021)) +;;;;;; (20355 835)) ;;; Generated autoloads from progmodes/vera-mode.el (add-to-list 'auto-mode-alist (cons (purecopy "\\.vr[hi]?\\'") 'vera-mode)) @@ -31430,7 +31142,7 @@ Key bindings: ;;;*** ;;;### (autoloads (verilog-mode) "verilog-mode" "progmodes/verilog-mode.el" -;;;;;; (20373 11301)) +;;;;;; (20387 12783)) ;;; Generated autoloads from progmodes/verilog-mode.el (autoload 'verilog-mode "verilog-mode" "\ @@ -31569,7 +31281,7 @@ Key bindings specific to `verilog-mode-map' are: ;;;*** ;;;### (autoloads (vhdl-mode) "vhdl-mode" "progmodes/vhdl-mode.el" -;;;;;; (20355 10021)) +;;;;;; (20355 835)) ;;; Generated autoloads from progmodes/vhdl-mode.el (autoload 'vhdl-mode "vhdl-mode" "\ @@ -32110,7 +31822,7 @@ Key bindings: ;;;*** -;;;### (autoloads (vi-mode) "vi" "emulation/vi.el" (20355 10021)) +;;;### (autoloads (vi-mode) "vi" "emulation/vi.el" (20103 44376)) ;;; Generated autoloads from emulation/vi.el (autoload 'vi-mode "vi" "\ @@ -32165,7 +31877,7 @@ Syntax table and abbrevs while in vi mode remain as they were in Emacs. ;;;### (autoloads (viqr-pre-write-conversion viqr-post-read-conversion ;;;;;; viet-encode-viqr-buffer viet-encode-viqr-region viet-decode-viqr-buffer ;;;;;; viet-decode-viqr-region viet-encode-viscii-char) "viet-util" -;;;;;; "language/viet-util.el" (20355 10021)) +;;;;;; "language/viet-util.el" (20229 56251)) ;;; Generated autoloads from language/viet-util.el (autoload 'viet-encode-viscii-char "viet-util" "\ @@ -32213,7 +31925,7 @@ Convert Vietnamese characters of the current buffer to `VIQR' mnemonics. ;;;;;; view-mode view-buffer-other-frame view-buffer-other-window ;;;;;; view-buffer view-file-other-frame view-file-other-window ;;;;;; view-file kill-buffer-if-not-modified view-remove-frame-by-deleting) -;;;;;; "view" "view.el" (20355 10021)) +;;;;;; "view" "view.el" (20325 60273)) ;;; Generated autoloads from view.el (defvar view-remove-frame-by-deleting t "\ @@ -32467,8 +32179,8 @@ Exit View mode and make the current buffer editable. ;;;*** -;;;### (autoloads (vip-mode vip-setup) "vip" "emulation/vip.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (vip-mode vip-setup) "vip" "emulation/vip.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from emulation/vip.el (autoload 'vip-setup "vip" "\ @@ -32484,7 +32196,7 @@ Turn on VIP emulation of VI. ;;;*** ;;;### (autoloads (viper-mode toggle-viper-mode) "viper" "emulation/viper.el" -;;;;;; (20355 10021)) +;;;;;; (20355 835)) ;;; Generated autoloads from emulation/viper.el (autoload 'toggle-viper-mode "viper" "\ @@ -32501,7 +32213,7 @@ Turn on Viper emulation of Vi in Emacs. See Info node `(viper)Top'. ;;;*** ;;;### (autoloads (warn lwarn display-warning) "warnings" "emacs-lisp/warnings.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from emacs-lisp/warnings.el (defvar warning-prefix-function nil "\ @@ -32591,7 +32303,7 @@ this is equivalent to `display-warning', using ;;;*** ;;;### (autoloads (wdired-change-to-wdired-mode) "wdired" "wdired.el" -;;;;;; (20355 10021)) +;;;;;; (20229 56251)) ;;; Generated autoloads from wdired.el (autoload 'wdired-change-to-wdired-mode "wdired" "\ @@ -32607,7 +32319,7 @@ See `wdired-mode'. ;;;*** -;;;### (autoloads (webjump) "webjump" "net/webjump.el" (20355 10021)) +;;;### (autoloads (webjump) "webjump" "net/webjump.el" (20355 835)) ;;; Generated autoloads from net/webjump.el (autoload 'webjump "webjump" "\ @@ -32624,7 +32336,7 @@ Please submit bug reports and other feedback to the author, Neil W. Van Dyke ;;;*** ;;;### (autoloads (which-function-mode which-func-mode) "which-func" -;;;;;; "progmodes/which-func.el" (20378 29222)) +;;;;;; "progmodes/which-func.el" (20379 60745)) ;;; Generated autoloads from progmodes/which-func.el (put 'which-func-format 'risky-local-variable t) (put 'which-func-current 'risky-local-variable t) @@ -32660,7 +32372,7 @@ in certain major modes. ;;;### (autoloads (whitespace-report-region whitespace-report whitespace-cleanup-region ;;;;;; whitespace-cleanup global-whitespace-toggle-options whitespace-toggle-options ;;;;;; global-whitespace-newline-mode global-whitespace-mode whitespace-newline-mode -;;;;;; whitespace-mode) "whitespace" "whitespace.el" (20355 10021)) +;;;;;; whitespace-mode) "whitespace" "whitespace.el" (20229 56251)) ;;; Generated autoloads from whitespace.el (autoload 'whitespace-mode "whitespace" "\ @@ -33059,7 +32771,7 @@ cleaning up these problems. ;;;*** ;;;### (autoloads (widget-minor-mode widget-browse-other-window widget-browse -;;;;;; widget-browse-at) "wid-browse" "wid-browse.el" (20355 10021)) +;;;;;; widget-browse-at) "wid-browse" "wid-browse.el" (20273 59945)) ;;; Generated autoloads from wid-browse.el (autoload 'widget-browse-at "wid-browse" "\ @@ -33089,7 +32801,7 @@ if ARG is omitted or nil. ;;;### (autoloads (widget-setup widget-insert widget-delete widget-create ;;;;;; widget-prompt-value widgetp) "wid-edit" "wid-edit.el" (20373 -;;;;;; 11301)) +;;;;;; 62846)) ;;; Generated autoloads from wid-edit.el (autoload 'widgetp "wid-edit" "\ @@ -33132,8 +32844,8 @@ Setup current buffer so editing string widgets works. ;;;*** ;;;### (autoloads (windmove-default-keybindings windmove-down windmove-right -;;;;;; windmove-up windmove-left) "windmove" "windmove.el" (20355 -;;;;;; 10021)) +;;;;;; windmove-up windmove-left) "windmove" "windmove.el" (20255 +;;;;;; 22932)) ;;; Generated autoloads from windmove.el (autoload 'windmove-left "windmove" "\ @@ -33186,7 +32898,7 @@ Default MODIFIER is 'shift. ;;;*** ;;;### (autoloads (winner-mode winner-mode) "winner" "winner.el" -;;;;;; (20355 10021)) +;;;;;; (20239 35035)) ;;; Generated autoloads from winner.el (defvar winner-mode nil "\ @@ -33205,7 +32917,7 @@ With arg, turn Winner mode on if and only if arg is positive. ;;;*** ;;;### (autoloads (woman-bookmark-jump woman-find-file woman-dired-find-file -;;;;;; woman woman-locale) "woman" "woman.el" (20370 35109)) +;;;;;; woman woman-locale) "woman" "woman.el" (20373 62846)) ;;; Generated autoloads from woman.el (defvar woman-locale nil "\ @@ -33254,7 +32966,7 @@ Default bookmark handler for Woman buffers. ;;;*** ;;;### (autoloads (wordstar-mode) "ws-mode" "emulation/ws-mode.el" -;;;;;; (20355 10021)) +;;;;;; (20325 60273)) ;;; Generated autoloads from emulation/ws-mode.el (autoload 'wordstar-mode "ws-mode" "\ @@ -33366,7 +33078,7 @@ The key bindings are: ;;;*** -;;;### (autoloads (xesam-search) "xesam" "net/xesam.el" (20374 32165)) +;;;### (autoloads (xesam-search) "xesam" "net/xesam.el" (20373 62846)) ;;; Generated autoloads from net/xesam.el (autoload 'xesam-search "xesam" "\ @@ -33386,7 +33098,7 @@ Example: ;;;*** ;;;### (autoloads (xml-parse-region xml-parse-file) "xml" "xml.el" -;;;;;; (20378 29222)) +;;;;;; (20379 60745)) ;;; Generated autoloads from xml.el (autoload 'xml-parse-file "xml" "\ @@ -33412,7 +33124,7 @@ If PARSE-NS is non-nil, then QNAMES are expanded. ;;;*** ;;;### (autoloads (xmltok-get-declared-encoding-position) "xmltok" -;;;;;; "nxml/xmltok.el" (20355 10021)) +;;;;;; "nxml/xmltok.el" (20229 56251)) ;;; Generated autoloads from nxml/xmltok.el (autoload 'xmltok-get-declared-encoding-position "xmltok" "\ @@ -33430,8 +33142,8 @@ If LIMIT is non-nil, then do not consider characters beyond LIMIT. ;;;*** -;;;### (autoloads (xterm-mouse-mode) "xt-mouse" "xt-mouse.el" (20355 -;;;;;; 10021)) +;;;### (autoloads (xterm-mouse-mode) "xt-mouse" "xt-mouse.el" (20229 +;;;;;; 56251)) ;;; Generated autoloads from xt-mouse.el (defvar xterm-mouse-mode nil "\ @@ -33461,7 +33173,7 @@ down the SHIFT key while pressing the mouse button. ;;;*** ;;;### (autoloads (yenc-extract-filename yenc-decode-region) "yenc" -;;;;;; "gnus/yenc.el" (20355 10021)) +;;;;;; "gnus/yenc.el" (20229 56251)) ;;; Generated autoloads from gnus/yenc.el (autoload 'yenc-decode-region "yenc" "\ @@ -33477,7 +33189,7 @@ Extract file name from an yenc header. ;;;*** ;;;### (autoloads (psychoanalyze-pinhead apropos-zippy insert-zippyism -;;;;;; yow) "yow" "play/yow.el" (20364 42504)) +;;;;;; yow) "yow" "play/yow.el" (20370 4296)) ;;; Generated autoloads from play/yow.el (autoload 'yow "yow" "\ @@ -33503,7 +33215,7 @@ Zippy goes to the analyst. ;;;*** -;;;### (autoloads (zone) "zone" "play/zone.el" (20355 10021)) +;;;### (autoloads (zone) "zone" "play/zone.el" (20395 5351)) ;;; Generated autoloads from play/zone.el (autoload 'zone "zone" "\ @@ -33546,8 +33258,8 @@ Zone out, completely. ;;;;;; "cedet/ede/proj-shared.el" "cedet/ede/proj.el" "cedet/ede/project-am.el" ;;;;;; "cedet/ede/shell.el" "cedet/ede/simple.el" "cedet/ede/source.el" ;;;;;; "cedet/ede/speedbar.el" "cedet/ede/srecode.el" "cedet/ede/system.el" -;;;;;; "cedet/ede/util.el" "cedet/inversion.el" "cedet/mode-local.el" -;;;;;; "cedet/pulse.el" "cedet/semantic/analyze.el" "cedet/semantic/analyze/complete.el" +;;;;;; "cedet/ede/util.el" "cedet/inversion.el" "cedet/pulse.el" +;;;;;; "cedet/semantic/analyze.el" "cedet/semantic/analyze/complete.el" ;;;;;; "cedet/semantic/analyze/debug.el" "cedet/semantic/analyze/fcn.el" ;;;;;; "cedet/semantic/analyze/refs.el" "cedet/semantic/bovine.el" ;;;;;; "cedet/semantic/bovine/c-by.el" "cedet/semantic/bovine/c.el" @@ -33588,11 +33300,11 @@ Zone out, completely. ;;;;;; "cedet/srecode/loaddefs.el" "cedet/srecode/map.el" "cedet/srecode/mode.el" ;;;;;; "cedet/srecode/semantic.el" "cedet/srecode/srt-wy.el" "cedet/srecode/srt.el" ;;;;;; "cedet/srecode/table.el" "cedet/srecode/template.el" "cedet/srecode/texi.el" -;;;;;; "cus-dep.el" "dframe.el" "dired-aux.el" "dired-x.el" "dos-fns.el" -;;;;;; "dos-vars.el" "dos-w32.el" "dynamic-setting.el" "emacs-lisp/authors.el" -;;;;;; "emacs-lisp/avl-tree.el" "emacs-lisp/bindat.el" "emacs-lisp/byte-opt.el" -;;;;;; "emacs-lisp/chart.el" "emacs-lisp/cl-extra.el" "emacs-lisp/cl-loaddefs.el" -;;;;;; "emacs-lisp/cl-macs.el" "emacs-lisp/cl-seq.el" "emacs-lisp/cl-specs.el" +;;;;;; "cus-dep.el" "cus-load.el" "dframe.el" "dired-aux.el" "dired-x.el" +;;;;;; "dos-fns.el" "dos-vars.el" "dos-w32.el" "dynamic-setting.el" +;;;;;; "emacs-lisp/authors.el" "emacs-lisp/avl-tree.el" "emacs-lisp/bindat.el" +;;;;;; "emacs-lisp/byte-opt.el" "emacs-lisp/chart.el" "emacs-lisp/cl-extra.el" +;;;;;; "emacs-lisp/cl-loaddefs.el" "emacs-lisp/cl-macs.el" "emacs-lisp/cl-seq.el" ;;;;;; "emacs-lisp/cust-print.el" "emacs-lisp/eieio-base.el" "emacs-lisp/eieio-custom.el" ;;;;;; "emacs-lisp/eieio-datadebug.el" "emacs-lisp/eieio-opt.el" ;;;;;; "emacs-lisp/eieio-speedbar.el" "emacs-lisp/eieio.el" "emacs-lisp/find-gc.el" @@ -33613,30 +33325,30 @@ Zone out, completely. ;;;;;; "eshell/esh-cmd.el" "eshell/esh-ext.el" "eshell/esh-groups.el" ;;;;;; "eshell/esh-io.el" "eshell/esh-module.el" "eshell/esh-opt.el" ;;;;;; "eshell/esh-proc.el" "eshell/esh-util.el" "eshell/esh-var.el" -;;;;;; "ezimage.el" "foldout.el" "format-spec.el" "forms-d2.el" -;;;;;; "forms-pass.el" "fringe.el" "generic-x.el" "gnus/compface.el" -;;;;;; "gnus/gnus-async.el" "gnus/gnus-bcklg.el" "gnus/gnus-cite.el" -;;;;;; "gnus/gnus-cus.el" "gnus/gnus-demon.el" "gnus/gnus-dup.el" -;;;;;; "gnus/gnus-eform.el" "gnus/gnus-ems.el" "gnus/gnus-int.el" -;;;;;; "gnus/gnus-logic.el" "gnus/gnus-mh.el" "gnus/gnus-salt.el" -;;;;;; "gnus/gnus-score.el" "gnus/gnus-setup.el" "gnus/gnus-srvr.el" -;;;;;; "gnus/gnus-topic.el" "gnus/gnus-undo.el" "gnus/gnus-util.el" -;;;;;; "gnus/gnus-uu.el" "gnus/gnus-vm.el" "gnus/gssapi.el" "gnus/ietf-drums.el" -;;;;;; "gnus/legacy-gnus-agent.el" "gnus/mail-parse.el" "gnus/mail-prsvr.el" -;;;;;; "gnus/mail-source.el" "gnus/mailcap.el" "gnus/messcompat.el" -;;;;;; "gnus/mm-bodies.el" "gnus/mm-decode.el" "gnus/mm-util.el" -;;;;;; "gnus/mm-view.el" "gnus/mml-sec.el" "gnus/mml-smime.el" "gnus/nnagent.el" -;;;;;; "gnus/nnbabyl.el" "gnus/nndir.el" "gnus/nndraft.el" "gnus/nneething.el" -;;;;;; "gnus/nngateway.el" "gnus/nnheader.el" "gnus/nnimap.el" "gnus/nnir.el" -;;;;;; "gnus/nnmail.el" "gnus/nnmaildir.el" "gnus/nnmairix.el" "gnus/nnmbox.el" -;;;;;; "gnus/nnmh.el" "gnus/nnnil.el" "gnus/nnoo.el" "gnus/nnregistry.el" -;;;;;; "gnus/nnrss.el" "gnus/nnspool.el" "gnus/nntp.el" "gnus/nnvirtual.el" -;;;;;; "gnus/nnweb.el" "gnus/registry.el" "gnus/rfc1843.el" "gnus/rfc2045.el" -;;;;;; "gnus/rfc2047.el" "gnus/rfc2104.el" "gnus/rfc2231.el" "gnus/rtree.el" -;;;;;; "gnus/shr-color.el" "gnus/sieve-manage.el" "gnus/smime.el" -;;;;;; "gnus/spam-stat.el" "gnus/spam-wash.el" "hex-util.el" "hfy-cmap.el" -;;;;;; "ibuf-ext.el" "international/cp51932.el" "international/eucjp-ms.el" -;;;;;; "international/fontset.el" "international/iso-ascii.el" "international/ja-dic-cnv.el" +;;;;;; "ezimage.el" "finder-inf.el" "foldout.el" "format-spec.el" +;;;;;; "fringe.el" "generic-x.el" "gnus/compface.el" "gnus/gnus-async.el" +;;;;;; "gnus/gnus-bcklg.el" "gnus/gnus-cite.el" "gnus/gnus-cus.el" +;;;;;; "gnus/gnus-demon.el" "gnus/gnus-dup.el" "gnus/gnus-eform.el" +;;;;;; "gnus/gnus-ems.el" "gnus/gnus-int.el" "gnus/gnus-logic.el" +;;;;;; "gnus/gnus-mh.el" "gnus/gnus-salt.el" "gnus/gnus-score.el" +;;;;;; "gnus/gnus-setup.el" "gnus/gnus-srvr.el" "gnus/gnus-topic.el" +;;;;;; "gnus/gnus-undo.el" "gnus/gnus-util.el" "gnus/gnus-uu.el" +;;;;;; "gnus/gnus-vm.el" "gnus/gssapi.el" "gnus/ietf-drums.el" "gnus/legacy-gnus-agent.el" +;;;;;; "gnus/mail-parse.el" "gnus/mail-prsvr.el" "gnus/mail-source.el" +;;;;;; "gnus/mailcap.el" "gnus/messcompat.el" "gnus/mm-bodies.el" +;;;;;; "gnus/mm-decode.el" "gnus/mm-util.el" "gnus/mm-view.el" "gnus/mml-sec.el" +;;;;;; "gnus/mml-smime.el" "gnus/nnagent.el" "gnus/nnbabyl.el" "gnus/nndir.el" +;;;;;; "gnus/nndraft.el" "gnus/nneething.el" "gnus/nngateway.el" +;;;;;; "gnus/nnheader.el" "gnus/nnimap.el" "gnus/nnir.el" "gnus/nnmail.el" +;;;;;; "gnus/nnmaildir.el" "gnus/nnmairix.el" "gnus/nnmbox.el" "gnus/nnmh.el" +;;;;;; "gnus/nnnil.el" "gnus/nnoo.el" "gnus/nnregistry.el" "gnus/nnrss.el" +;;;;;; "gnus/nnspool.el" "gnus/nntp.el" "gnus/nnvirtual.el" "gnus/nnweb.el" +;;;;;; "gnus/registry.el" "gnus/rfc1843.el" "gnus/rfc2045.el" "gnus/rfc2047.el" +;;;;;; "gnus/rfc2104.el" "gnus/rfc2231.el" "gnus/rtree.el" "gnus/shr-color.el" +;;;;;; "gnus/sieve-manage.el" "gnus/smime.el" "gnus/spam-stat.el" +;;;;;; "gnus/spam-wash.el" "hex-util.el" "hfy-cmap.el" "ibuf-ext.el" +;;;;;; "international/cp51932.el" "international/eucjp-ms.el" "international/fontset.el" +;;;;;; "international/iso-ascii.el" "international/ja-dic-cnv.el" ;;;;;; "international/ja-dic-utl.el" "international/ogonek.el" "international/uni-bidi.el" ;;;;;; "international/uni-category.el" "international/uni-combining.el" ;;;;;; "international/uni-comment.el" "international/uni-decimal.el" @@ -33692,31 +33404,30 @@ Zone out, completely. ;;;;;; "org/org-mew.el" "org/org-mhe.el" "org/org-mks.el" "org/org-mouse.el" ;;;;;; "org/org-pcomplete.el" "org/org-protocol.el" "org/org-rmail.el" ;;;;;; "org/org-special-blocks.el" "org/org-src.el" "org/org-vm.el" -;;;;;; "org/org-w3m.el" "org/org-wl.el" "patcomp.el" "play/gamegrid.el" -;;;;;; "play/gametree.el" "play/meese.el" "progmodes/ada-prj.el" -;;;;;; "progmodes/cc-align.el" "progmodes/cc-awk.el" "progmodes/cc-bytecomp.el" -;;;;;; "progmodes/cc-cmds.el" "progmodes/cc-defs.el" "progmodes/cc-fonts.el" -;;;;;; "progmodes/cc-langs.el" "progmodes/cc-menus.el" "progmodes/ebnf-abn.el" -;;;;;; "progmodes/ebnf-bnf.el" "progmodes/ebnf-dtd.el" "progmodes/ebnf-ebx.el" -;;;;;; "progmodes/ebnf-iso.el" "progmodes/ebnf-otz.el" "progmodes/ebnf-yac.el" -;;;;;; "progmodes/idlw-complete-structtag.el" "progmodes/idlw-help.el" -;;;;;; "progmodes/idlw-toolbar.el" "progmodes/mantemp.el" "progmodes/xscheme.el" -;;;;;; "ps-def.el" "ps-mule.el" "ps-samp.el" "saveplace.el" "sb-image.el" -;;;;;; "scroll-bar.el" "select.el" "soundex.el" "subdirs.el" "tempo.el" -;;;;;; "textmodes/bib-mode.el" "textmodes/makeinfo.el" "textmodes/page-ext.el" -;;;;;; "textmodes/refbib.el" "textmodes/refer.el" "textmodes/reftex-auc.el" -;;;;;; "textmodes/reftex-dcr.el" "textmodes/reftex-ref.el" "textmodes/reftex-sel.el" -;;;;;; "textmodes/reftex-toc.el" "textmodes/texnfo-upd.el" "timezone.el" -;;;;;; "tooltip.el" "tree-widget.el" "uniquify.el" "url/url-about.el" -;;;;;; "url/url-cookie.el" "url/url-dired.el" "url/url-domsuf.el" -;;;;;; "url/url-expand.el" "url/url-ftp.el" "url/url-future.el" -;;;;;; "url/url-history.el" "url/url-imap.el" "url/url-methods.el" -;;;;;; "url/url-nfs.el" "url/url-proxy.el" "url/url-vars.el" "vc/ediff-diff.el" -;;;;;; "vc/ediff-init.el" "vc/ediff-merg.el" "vc/ediff-ptch.el" -;;;;;; "vc/ediff-vers.el" "vc/ediff-wind.el" "vc/pcvs-info.el" "vc/pcvs-parse.el" -;;;;;; "vc/pcvs-util.el" "vc/vc-dav.el" "vcursor.el" "vt-control.el" -;;;;;; "vt100-led.el" "w32-fns.el" "w32-vars.el" "x-dnd.el") (20383 -;;;;;; 47348 883221)) +;;;;;; "org/org-w3m.el" "org/org-wl.el" "play/gamegrid.el" "play/gametree.el" +;;;;;; "play/meese.el" "progmodes/ada-prj.el" "progmodes/cc-align.el" +;;;;;; "progmodes/cc-awk.el" "progmodes/cc-bytecomp.el" "progmodes/cc-cmds.el" +;;;;;; "progmodes/cc-defs.el" "progmodes/cc-fonts.el" "progmodes/cc-langs.el" +;;;;;; "progmodes/cc-menus.el" "progmodes/ebnf-abn.el" "progmodes/ebnf-bnf.el" +;;;;;; "progmodes/ebnf-dtd.el" "progmodes/ebnf-ebx.el" "progmodes/ebnf-iso.el" +;;;;;; "progmodes/ebnf-otz.el" "progmodes/ebnf-yac.el" "progmodes/idlw-complete-structtag.el" +;;;;;; "progmodes/idlw-help.el" "progmodes/idlw-toolbar.el" "progmodes/mantemp.el" +;;;;;; "progmodes/xscheme.el" "ps-def.el" "ps-mule.el" "ps-samp.el" +;;;;;; "saveplace.el" "sb-image.el" "scroll-bar.el" "select.el" +;;;;;; "soundex.el" "subdirs.el" "tempo.el" "textmodes/bib-mode.el" +;;;;;; "textmodes/makeinfo.el" "textmodes/page-ext.el" "textmodes/refbib.el" +;;;;;; "textmodes/refer.el" "textmodes/reftex-auc.el" "textmodes/reftex-dcr.el" +;;;;;; "textmodes/reftex-ref.el" "textmodes/reftex-sel.el" "textmodes/reftex-toc.el" +;;;;;; "textmodes/texnfo-upd.el" "timezone.el" "tooltip.el" "tree-widget.el" +;;;;;; "uniquify.el" "url/url-about.el" "url/url-cookie.el" "url/url-dired.el" +;;;;;; "url/url-domsuf.el" "url/url-expand.el" "url/url-ftp.el" +;;;;;; "url/url-future.el" "url/url-history.el" "url/url-imap.el" +;;;;;; "url/url-methods.el" "url/url-nfs.el" "url/url-proxy.el" +;;;;;; "url/url-vars.el" "vc/ediff-diff.el" "vc/ediff-init.el" "vc/ediff-merg.el" +;;;;;; "vc/ediff-ptch.el" "vc/ediff-vers.el" "vc/ediff-wind.el" +;;;;;; "vc/pcvs-info.el" "vc/pcvs-parse.el" "vc/pcvs-util.el" "vc/vc-dav.el" +;;;;;; "vcursor.el" "vt-control.el" "vt100-led.el" "w32-fns.el" +;;;;;; "w32-vars.el" "x-dnd.el") (20405 43528 205053)) ;;;*** From a317ac28fecafee3f36082e11dcc591d0fb137c4 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 17 May 2012 23:31:25 -0700 Subject: [PATCH 520/564] Replace obsolete form for minor-mode in file local variables --- etc/MORE.STUFF | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/etc/MORE.STUFF b/etc/MORE.STUFF index 06e0870e4ce..7186047dfb6 100644 --- a/etc/MORE.STUFF +++ b/etc/MORE.STUFF @@ -210,8 +210,8 @@ packages that you can install. Local Variables: mode: text -mode: view -mode: goto-address +eval: (view-mode 1) +eval: (goto-address-mode 1) End: This file is part of GNU Emacs. From ed4affe121c26ea1a1bf9fadc44a85b9e81e4a58 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 17 May 2012 23:33:04 -0700 Subject: [PATCH 521/564] * lib-src/Makefile.in (install): Ensure $bindir exists. --- lib-src/ChangeLog | 4 ++++ lib-src/Makefile.in | 1 + 2 files changed, 5 insertions(+) diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index a4a1cffaa96..d0e9e5c525a 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog @@ -1,3 +1,7 @@ +2012-05-18 Glenn Morris + + * Makefile.in (install): Ensure $bindir exists. + 2012-05-17 Glenn Morris * Makefile.in (ns_appbindir): New, set by configure. diff --git a/lib-src/Makefile.in b/lib-src/Makefile.in index 1306e660630..fd423212c9f 100644 --- a/lib-src/Makefile.in +++ b/lib-src/Makefile.in @@ -259,6 +259,7 @@ $(DESTDIR)${archlibdir}: all install: $(DESTDIR)${archlibdir} @echo @echo "Installing utilities for users to run." + umask 022; ${MKDIR_P} $(DESTDIR)${bindir} for file in ${INSTALLABLES} ; do \ $(INSTALL_PROGRAM) $(INSTALL_STRIP) $${file} $(DESTDIR)${bindir}/`echo $${file} | sed '$(TRANSFORM)'` ; \ chmod a+rx $(DESTDIR)${bindir}/`echo $${file} | sed '$(TRANSFORM)'`; \ From 7606c36016cffd5d7a09fb440c4c9fd91c099596 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 17 May 2012 23:39:52 -0700 Subject: [PATCH 522/564] * Makefile.in (install-arch-indep): Combine adjacent loops. --- ChangeLog | 4 +++ Makefile.in | 76 ++++++++++++++++++++++++----------------------------- 2 files changed, 39 insertions(+), 41 deletions(-) diff --git a/ChangeLog b/ChangeLog index b129b6695fb..3d68a4bbc5f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2012-05-18 Glenn Morris + + * Makefile.in (install-arch-indep): Combine adjacent loops. + 2012-05-17 Glenn Morris * Makefile.in (install-etc, mkdir): diff --git a/Makefile.in b/Makefile.in index d2a8db90854..4398fe55cba 100644 --- a/Makefile.in +++ b/Makefile.in @@ -446,17 +446,16 @@ $(srcdir)/src/stamp-h.in: $(AUTOCONF_INPUTS) .PHONY: install mkdir -## We delete each directory in ${COPYDESTS} before we copy into it; -## that way, we can reinstall over directories that have been put in -## place with their files read-only (perhaps because they are checked -## into RCS). In order to make this safe, we make sure that the -## source exists and is distinct from the destination. ### We do install-arch-indep first because ### the executable needs the Lisp files and DOC file to work properly. install: all install-arch-indep install-arch-dep install-leim blessmail @true ## Ensure that $subdir contains a subdirs.el file. +## Here and elsewhere, we set the umask so that any created files are +## world-readable. +## TODO it might be good to warn about non-standard permissions of +## pre-existing directories, but that does not seem easy. write_subdir=if [ -f $${subdir}/subdirs.el ]; \ then true; \ else \ @@ -527,42 +526,40 @@ set_installuser=for installuser in $${LOGNAME} $${USERNAME} $${USER} \ ## Note that the Makefiles in the etc directory are potentially useful ## in an installed Emacs, so should not be excluded. +## We delete each directory in ${COPYDESTS} before we copy into it; +## that way, we can reinstall over directories that have been put in +## place with their files read-only (perhaps because they are checked +## into RCS). In order to make this safe, we make sure that the +## source exists and is distinct from the destination. install-arch-indep: mkdir info install-etc -set ${COPYDESTS} ; \ unset CDPATH; \ - for dir in ${COPYDIR} ; do \ - if [ `(cd $$1 && /bin/pwd)` != `(cd $${dir} && /bin/pwd)` ] ; then \ - rm -rf $$1 ; \ - fi ; \ - shift ; \ - done - -set ${COPYDESTS} ; \ - mkdir ${COPYDESTS} ; \ - chmod ugo+rx ${COPYDESTS} ; \ - unset CDPATH; \ $(set_installuser); \ for dir in ${COPYDIR} ; do \ + [ -d $${dir} ] || exit 1 ; \ dest=$$1 ; shift ; \ - [ -d $${dir} ] \ - && [ `(cd $${dir} && /bin/pwd)` != `(cd $${dest} && /bin/pwd)` ] \ - && (echo "Copying $${dir} to $${dest}..." ; \ - (cd $${dir}; tar -chf - . ) \ - | (cd $${dest}; umask 022; \ - tar -xvf - && cat > /dev/null) || exit 1; \ - find $${dest} -exec chown $${installuser} {} ';' ;\ - for subdir in `find $${dest} -type d -print` ; do \ - chmod a+rx $${subdir} ; \ - rm -f $${subdir}/.gitignore ; \ - rm -f $${subdir}/.arch-inventory ; \ - rm -f $${subdir}/.DS_Store ; \ - rm -f $${subdir}/\#* ; \ - rm -f $${subdir}/.\#* ; \ - rm -f $${subdir}/*~ ; \ - rm -f $${subdir}/*.orig ; \ - [ "$${dir}" != "${srcdir}/etc" ] && \ - rm -f $${subdir}/[mM]akefile*[.-]in $${subdir}/[mM]akefile ; \ - rm -f $${subdir}/ChangeLog* ; \ - done) ; \ + [ `(cd $${dest} && /bin/pwd)` = `(cd $${dir} && /bin/pwd)` ] && \ + continue ; \ + rm -rf $${dest} ; \ + umask 022; ${MKDIR_P} $${dest} ; \ + (echo "Copying $${dir} to $${dest}..." ; \ + (cd $${dir}; tar -chf - . ) \ + | (cd $${dest}; umask 022; \ + tar -xvf - && cat > /dev/null) || exit 1; \ + find $${dest} -exec chown $${installuser} {} ';' ;\ + for subdir in `find $${dest} -type d -print` ; do \ + chmod a+rx $${subdir} ; \ + rm -f $${subdir}/.gitignore ; \ + rm -f $${subdir}/.arch-inventory ; \ + rm -f $${subdir}/.DS_Store ; \ + rm -f $${subdir}/\#* ; \ + rm -f $${subdir}/.\#* ; \ + rm -f $${subdir}/*~ ; \ + rm -f $${subdir}/*.orig ; \ + [ "$${dir}" != "${srcdir}/etc" ] && \ + rm -f $${subdir}/[mM]akefile*[.-]in $${subdir}/[mM]akefile ; \ + rm -f $${subdir}/ChangeLog* ; \ + done) ; \ done -rm -f $(DESTDIR)${lispdir}/subdirs.el $(srcdir)/update-subdirs $(DESTDIR)${lispdir} @@ -641,16 +638,16 @@ install-etc: umask 022; ${MKDIR_P} $(DESTDIR)${desktopdir} ${INSTALL_DATA} ${srcdir}/etc/emacs.desktop \ $(DESTDIR)${desktopdir}/emacs.desktop - thisdir=`/bin/pwd` ; \ + thisdir=`/bin/pwd`; \ cd ${iconsrcdir} || exit 1; umask 022 ; \ for dir in */*/apps */*/mimetypes; do \ [ -d $${dir} ] || continue ; \ ( cd $${thisdir}; ${MKDIR_P} ${icondir}/$${dir} ) ; \ for icon in $${dir}/*.*; do \ [ -r $${icon} ] || continue ; \ - ( cd $${thisdir} ; \ + ( cd $${thisdir}; \ ${INSTALL_DATA} ${iconsrcdir}/$${icon} ${icondir}/$${icon} ) \ - || exit 1 ; \ + || exit 1; \ done ; \ done @@ -666,9 +663,6 @@ install-strip: $(MAKE) $(MFLAGS) INSTALL_STRIP=-s install ### Build some of the directories we're going to install Emacs in. -### We set the umask so that any created directories are world-readable. -### FIXME it would be good to warn about non-standard permissions of -### pre-existing directories, but that does not seem easy. mkdir: FRC umask 022 ; \ $(MKDIR_P) $(DESTDIR)${datadir} ${COPYDESTS} \ From b533f05ef579b40dc2f056216f99a168b1314341 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 17 May 2012 23:46:05 -0700 Subject: [PATCH 523/564] Makefile simplifications related to creating installation directories A separate mkdir rule is not needed, since MKDIR_P is thread-safe. * Makefile.in (install-arch-dep): Ensure bindir exists. Drop mkdir dependency. (install-arch-indep): Ensure docdir, infodir, mandir exist. (install-leim): Drop mkdir dependency. (mkdir): Remove most directories, now made in relevant rules. --- ChangeLog | 6 ++++++ Makefile.in | 21 ++++++++++++++------- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3d68a4bbc5f..3efaaf6cc25 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2012-05-18 Glenn Morris + * Makefile.in (install-arch-dep): Ensure bindir exists. + Drop mkdir dependency. + (install-arch-indep): Ensure docdir, infodir, mandir exist. + (install-leim): Drop mkdir dependency. + (mkdir): Remove most directories, now made in relevant rules. + * Makefile.in (install-arch-indep): Combine adjacent loops. 2012-05-17 Glenn Morris diff --git a/Makefile.in b/Makefile.in index 4398fe55cba..49fddba08c8 100644 --- a/Makefile.in +++ b/Makefile.in @@ -471,7 +471,8 @@ write_subdir=if [ -f $${subdir}/subdirs.el ]; \ ### to ensure that install-arch-indep finishes before this starts. ### (TODO Why would it be nice? Why not just make this depend on ### install-arch-indep then?) -install-arch-dep: mkdir +install-arch-dep: + umask 022; ${MKDIR_P} $(DESTDIR)${bindir} (cd lib-src; \ $(MAKE) install $(MFLAGS) prefix=${prefix} \ exec_prefix=${exec_prefix} bindir=${bindir} \ @@ -578,6 +579,7 @@ install-arch-indep: mkdir info install-etc docfile="DOC"; \ fi; \ echo "Copying etc/$${docfile} to $(DESTDIR)${docdir} ..." ; \ + umask 022; ${MKDIR_P} $(DESTDIR)${docdir} ; \ ${INSTALL_DATA} etc/$${docfile} $(DESTDIR)${docdir}/$${docfile}; \ (cd $(DESTDIR)$(docdir); \ $(set_installuser); \ @@ -592,6 +594,7 @@ install-arch-indep: mkdir info install-etc ${GZIP_PROG} -9n `echo $$f|sed 's/.elc$$/.el/'` ; \ done) \ else true; fi + umask 022; ${MKDIR_P} $(DESTDIR)${infodir} -unset CDPATH; \ thisdir=`/bin/pwd`; \ if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd $(DESTDIR)${infodir} && /bin/pwd)` ]; \ @@ -621,6 +624,7 @@ install-arch-indep: mkdir info install-etc done); \ else true; fi -chmod -R a+r $(DESTDIR)${datadir}/emacs/${version} ${COPYDESTS} + umask 022; ${MKDIR_P} $(DESTDIR)${man1dir} thisdir=`/bin/pwd`; \ cd ${mansrcdir}; \ for page in *.1; do \ @@ -655,20 +659,23 @@ install-etc: ### have separate target here instead of including it in ### `install-arch-indep'. People who extracted LEIM files after they ### installed Emacs itself can install only LEIM files by this target. -install-leim: leim/Makefile mkdir +install-leim: leim/Makefile cd leim && $(MAKE) $(MFLAGS) install ### Build Emacs and install it, stripping binaries while installing them. install-strip: $(MAKE) $(MFLAGS) INSTALL_STRIP=-s install -### Build some of the directories we're going to install Emacs in. +## Note sure this serves any useful purpose. +## If locallisppath has the default value, then the write_subdir commands +## in install-arch-indep will create all these components. +## This will only do something if locallisppath has a non-standard value. +## Is it really Emacs job to create those directories? +## Should we also be ensuring they contain subdirs.el files? +## It would be easy to do. mkdir: FRC umask 022 ; \ - $(MKDIR_P) $(DESTDIR)${datadir} ${COPYDESTS} \ - $(DESTDIR)${infodir} $(DESTDIR)${man1dir} \ - $(DESTDIR)${bindir} $(DESTDIR)${docdir} $(DESTDIR)${libexecdir} \ - $(DESTDIR)`echo ${locallisppath} | sed 's,:, $(DESTDIR),g'` + $(MKDIR_P) $(DESTDIR)`echo ${locallisppath} | sed 's,:, $(DESTDIR),g'` ### Delete all the installed files that the `install' target would ### create (but not the noninstalled files such as `make all' would create). From 37baa3c829b37b5811e733137e252082e5459fca Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 17 May 2012 23:48:14 -0700 Subject: [PATCH 524/564] * Makefile.in (install-arch-indep): Remove unneeded chmods. INSTALL_DATA does this for us. --- ChangeLog | 3 +++ Makefile.in | 5 +---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3efaaf6cc25..c25a7ae5201 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2012-05-18 Glenn Morris + * Makefile.in (install-arch-indep): Remove unneeded chmods. + INSTALL_DATA does this for us. + * Makefile.in (install-arch-dep): Ensure bindir exists. Drop mkdir dependency. (install-arch-indep): Ensure docdir, infodir, mandir exist. diff --git a/Makefile.in b/Makefile.in index 49fddba08c8..edd67845e6b 100644 --- a/Makefile.in +++ b/Makefile.in @@ -603,8 +603,7 @@ install-arch-indep: mkdir info install-etc if [ -f dir ]; then true; \ else \ (cd $${thisdir}; \ - ${INSTALL_DATA} ${srcdir}/info/dir $(DESTDIR)${infodir}/dir; \ - chmod a+r $(DESTDIR)${infodir}/dir); \ + ${INSTALL_DATA} ${srcdir}/info/dir $(DESTDIR)${infodir}/dir) ; \ fi; \ info_misc=`cd $${thisdir}/doc/misc; ${MAKE} echo-info | sed '/ing directory/d'`; \ cd ${srcdir}/info ; \ @@ -613,7 +612,6 @@ install-arch-indep: mkdir info install-etc for f in `ls $$elt $$elt-[1-9] $$elt-[1-9][0-9] 2>/dev/null`; do \ (cd $${thisdir}; \ ${INSTALL_DATA} ${srcdir}/info/$$f $(DESTDIR)${infodir}/$$f); \ - chmod a+r $(DESTDIR)${infodir}/$$f; \ if [ -n "${GZIP_INFO}" ] && [ -n "${GZIP_PROG}" ]; then \ rm -f $(DESTDIR)${infodir}/$$f.gz; \ ${GZIP_PROG} -9n $(DESTDIR)${infodir}/$$f; \ @@ -630,7 +628,6 @@ install-arch-indep: mkdir info install-etc for page in *.1; do \ (cd $${thisdir}; \ ${INSTALL_DATA} ${mansrcdir}/$${page} $(DESTDIR)${man1dir}/$${page}; \ - chmod a+r $(DESTDIR)${man1dir}/$${page}; \ if [ -n "${GZIP_INFO}" ] && [ -n "${GZIP_PROG}" ]; then \ rm -f $(DESTDIR)${man1dir}/$${page}.gz; \ ${GZIP_PROG} -9n $(DESTDIR)${man1dir}/$${page}; \ From 62061397bfc92eb454613e918a11f4a8ddbaffff Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 17 May 2012 23:54:28 -0700 Subject: [PATCH 525/564] Remove the mkdir rule from the top-level Makefile * Makefile.in (install-arch-indep): Move last element of mkdir rule here. (mkdir): Remove rule. --- ChangeLog | 4 ++++ Makefile.in | 25 ++++++++++++------------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index c25a7ae5201..332ee011bd1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2012-05-18 Glenn Morris + * Makefile.in (install-arch-indep): + Move last element of mkdir rule here. + (mkdir): Remove rule. + * Makefile.in (install-arch-indep): Remove unneeded chmods. INSTALL_DATA does this for us. diff --git a/Makefile.in b/Makefile.in index edd67845e6b..7a4ee5e4a5d 100644 --- a/Makefile.in +++ b/Makefile.in @@ -444,7 +444,7 @@ $(srcdir)/src/stamp-h.in: $(AUTOCONF_INPUTS) ## On AIX, use tar xBf. ## On Xenix, use tar xpf. -.PHONY: install mkdir +.PHONY: install ### We do install-arch-indep first because ### the executable needs the Lisp files and DOC file to work properly. @@ -532,7 +532,17 @@ set_installuser=for installuser in $${LOGNAME} $${USERNAME} $${USER} \ ## place with their files read-only (perhaps because they are checked ## into RCS). In order to make this safe, we make sure that the ## source exists and is distinct from the destination. -install-arch-indep: mkdir info install-etc + +## I'm not sure creating locallisppath here serves any useful purpose. +## If it has the default value, then the later write_subdir commands +## will ensure all these components exist. +## This will only do something if locallisppath has a non-standard value. +## Is it really Emacs's job to create those directories? +## Should we also be ensuring they contain subdirs.el files? +## It would be easy to do, just use write_subdir. +install-arch-indep: info install-etc + umask 022 ; \ + $(MKDIR_P) $(DESTDIR)`echo ${locallisppath} | sed 's,:, $(DESTDIR),g'` -set ${COPYDESTS} ; \ unset CDPATH; \ $(set_installuser); \ @@ -663,17 +673,6 @@ install-leim: leim/Makefile install-strip: $(MAKE) $(MFLAGS) INSTALL_STRIP=-s install -## Note sure this serves any useful purpose. -## If locallisppath has the default value, then the write_subdir commands -## in install-arch-indep will create all these components. -## This will only do something if locallisppath has a non-standard value. -## Is it really Emacs job to create those directories? -## Should we also be ensuring they contain subdirs.el files? -## It would be easy to do. -mkdir: FRC - umask 022 ; \ - $(MKDIR_P) $(DESTDIR)`echo ${locallisppath} | sed 's,:, $(DESTDIR),g'` - ### Delete all the installed files that the `install' target would ### create (but not the noninstalled files such as `make all' would create). ### From ed0ba302d34b9cc74dc2499cfa664fcb06e361b2 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 18 May 2012 00:00:09 -0700 Subject: [PATCH 526/564] Tweak dependencies in top-level install rules * Makefile.in (install-arch-dep): Depend on install-arch-indep. (install-arch-indep): Depend on install-leim. (install): Remove explicit install-leim dependence. --- ChangeLog | 4 ++++ Makefile.in | 14 +++++--------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index 332ee011bd1..f6f13a4f07c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2012-05-18 Glenn Morris + * Makefile.in (install-arch-dep): Depend on install-arch-indep. + (install-arch-indep): Depend on install-leim. + (install): Remove explicit install-leim dependence. + * Makefile.in (install-arch-indep): Move last element of mkdir rule here. (mkdir): Remove rule. diff --git a/Makefile.in b/Makefile.in index 7a4ee5e4a5d..bfd8727f56c 100644 --- a/Makefile.in +++ b/Makefile.in @@ -446,9 +446,7 @@ $(srcdir)/src/stamp-h.in: $(AUTOCONF_INPUTS) .PHONY: install -### We do install-arch-indep first because -### the executable needs the Lisp files and DOC file to work properly. -install: all install-arch-indep install-arch-dep install-leim blessmail +install: all install-arch-indep install-arch-dep blessmail @true ## Ensure that $subdir contains a subdirs.el file. @@ -467,11 +465,9 @@ write_subdir=if [ -f $${subdir}/subdirs.el ]; \ fi ### Install the executables that were compiled specifically for this machine. -### It would be nice to do something for a parallel make -### to ensure that install-arch-indep finishes before this starts. -### (TODO Why would it be nice? Why not just make this depend on -### install-arch-indep then?) -install-arch-dep: +### We do install-arch-indep first because the executable needs the +### Lisp files and DOC file to work properly. +install-arch-dep: install-arch-indep umask 022; ${MKDIR_P} $(DESTDIR)${bindir} (cd lib-src; \ $(MAKE) install $(MFLAGS) prefix=${prefix} \ @@ -540,7 +536,7 @@ set_installuser=for installuser in $${LOGNAME} $${USERNAME} $${USER} \ ## Is it really Emacs's job to create those directories? ## Should we also be ensuring they contain subdirs.el files? ## It would be easy to do, just use write_subdir. -install-arch-indep: info install-etc +install-arch-indep: info install-etc install-leim umask 022 ; \ $(MKDIR_P) $(DESTDIR)`echo ${locallisppath} | sed 's,:, $(DESTDIR),g'` -set ${COPYDESTS} ; \ From 3f1b25b580bf45f92c4ee4750771a987e5524299 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agust=C3=ADn=20Mart=C3=ADn?= Date: Fri, 18 May 2012 09:04:04 +0200 Subject: [PATCH 527/564] textmodes/flyspell.el: Protect delay handling for otherchars against empty otherchars. (flyspell-check-pre-word-p, flyspell-check-word-p,flyspell-debug-signal-word-checked) --- lisp/ChangeLog | 6 ++ lisp/textmodes/flyspell.el | 142 ++++++++++++++++++++----------------- 2 files changed, 82 insertions(+), 66 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e22b3d07985..774ea476fb3 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2012-05-18 Agustín Martín Domingo + + * flyspell.el (flyspell-check-pre-word-p, flyspell-check-word-p) + (flyspell-debug-signal-word-checked): Protect delay handling for + otherchars against empty otherchars. + 2012-05-18 Stefan Monnier * emacs-lisp/lisp-mode.el (doc-string-elt): Move those properties to diff --git a/lisp/textmodes/flyspell.el b/lisp/textmodes/flyspell.el index 156a7e532e8..89134a1d355 100644 --- a/lisp/textmodes/flyspell.el +++ b/lisp/textmodes/flyspell.el @@ -730,45 +730,50 @@ not the very same deplacement command." "Return non-nil if we should check the word before point. More precisely, it applies to the word that was before point before the current command." - (cond - ((or (not (numberp flyspell-pre-point)) - (not (bufferp flyspell-pre-buffer)) - (not (buffer-live-p flyspell-pre-buffer))) - nil) - ((and (eq flyspell-pre-pre-point flyspell-pre-point) - (eq flyspell-pre-pre-buffer flyspell-pre-buffer)) - nil) - ((or (and (= flyspell-pre-point (- (point) 1)) - (or (eq (char-syntax (char-after flyspell-pre-point)) ?w) - (string-match-p (ispell-get-otherchars) - (buffer-substring-no-properties - flyspell-pre-point (1+ flyspell-pre-point))))) - (= flyspell-pre-point (point)) - (= flyspell-pre-point (+ (point) 1))) - nil) - ((and (symbolp this-command) - (not executing-kbd-macro) - (or (get this-command 'flyspell-delayed) - (and (get this-command 'flyspell-deplacement) - (eq flyspell-previous-command this-command))) - (or (= (current-column) 0) - (= (current-column) flyspell-pre-column) - ;; If other post-command-hooks change the buffer, - ;; flyspell-pre-point can lie past eob (bug#468). - (null (char-after flyspell-pre-point)) - (or (eq (char-syntax (char-after flyspell-pre-point)) ?w) - (string-match-p (ispell-get-otherchars) - (buffer-substring-no-properties - flyspell-pre-point (1+ flyspell-pre-point)))))) - nil) - ((not (eq (current-buffer) flyspell-pre-buffer)) - t) - ((not (and (numberp flyspell-word-cache-start) - (numberp flyspell-word-cache-end))) - t) - (t - (or (< flyspell-pre-point flyspell-word-cache-start) - (> flyspell-pre-point flyspell-word-cache-end))))) + (let ((ispell-otherchars (ispell-get-otherchars))) + (cond + ((or (not (numberp flyspell-pre-point)) + (not (bufferp flyspell-pre-buffer)) + (not (buffer-live-p flyspell-pre-buffer))) + nil) + ((and (eq flyspell-pre-pre-point flyspell-pre-point) + (eq flyspell-pre-pre-buffer flyspell-pre-buffer)) + nil) + ((or (and (= flyspell-pre-point (- (point) 1)) + (or (eq (char-syntax (char-after flyspell-pre-point)) ?w) + (and (not (string= "" ispell-otherchars)) + (string-match-p + ispell-otherchars + (buffer-substring-no-properties + flyspell-pre-point (1+ flyspell-pre-point)))))) + (= flyspell-pre-point (point)) + (= flyspell-pre-point (+ (point) 1))) + nil) + ((and (symbolp this-command) + (not executing-kbd-macro) + (or (get this-command 'flyspell-delayed) + (and (get this-command 'flyspell-deplacement) + (eq flyspell-previous-command this-command))) + (or (= (current-column) 0) + (= (current-column) flyspell-pre-column) + ;; If other post-command-hooks change the buffer, + ;; flyspell-pre-point can lie past eob (bug#468). + (null (char-after flyspell-pre-point)) + (or (eq (char-syntax (char-after flyspell-pre-point)) ?w) + (and (not (string= "" ispell-otherchars)) + (string-match-p + ispell-otherchars + (buffer-substring-no-properties + flyspell-pre-point (1+ flyspell-pre-point))))))) + nil) + ((not (eq (current-buffer) flyspell-pre-buffer)) + t) + ((not (and (numberp flyspell-word-cache-start) + (numberp flyspell-word-cache-end))) + t) + (t + (or (< flyspell-pre-point flyspell-word-cache-start) + (> flyspell-pre-point flyspell-word-cache-end)))))) ;;*---------------------------------------------------------------------*/ ;;* The flyspell after-change-hook, store the change position. In */ @@ -812,31 +817,33 @@ Mostly we check word delimiters." "Return t when the word at `point' has to be checked. The answer depends of several criteria. Mostly we check word delimiters." - (cond - ((<= (- (point-max) 1) (point-min)) - ;; the buffer is not filled enough - nil) - ((and (and (> (current-column) 0) - (not (eq (current-column) flyspell-pre-column))) - (save-excursion - (backward-char 1) - (and (looking-at (flyspell-get-not-casechars)) - (not (looking-at (ispell-get-otherchars))) - (or flyspell-consider-dash-as-word-delimiter-flag - (not (looking-at "-")))))) - ;; yes because we have reached or typed a word delimiter. - t) - ((symbolp this-command) + (let ((ispell-otherchars (ispell-get-otherchars))) (cond - ((get this-command 'flyspell-deplacement) - (not (eq flyspell-previous-command this-command))) - ((get this-command 'flyspell-delayed) - ;; the current command is not delayed, that - ;; is that we must check the word now - (and (not unread-command-events) - (sit-for flyspell-delay))) - (t t))) - (t t))) + ((<= (- (point-max) 1) (point-min)) + ;; the buffer is not filled enough + nil) + ((and (and (> (current-column) 0) + (not (eq (current-column) flyspell-pre-column))) + (save-excursion + (backward-char 1) + (and (looking-at (flyspell-get-not-casechars)) + (or (string= "" ispell-otherchars) + (not (looking-at (ispell-get-otherchars)))) + (or flyspell-consider-dash-as-word-delimiter-flag + (not (looking-at "-")))))) + ;; yes because we have reached or typed a word delimiter. + t) + ((symbolp this-command) + (cond + ((get this-command 'flyspell-deplacement) + (not (eq flyspell-previous-command this-command))) + ((get this-command 'flyspell-delayed) + ;; the current command is not delayed, that + ;; is that we must check the word now + (and (not unread-command-events) + (sit-for flyspell-delay))) + (t t))) + (t t)))) ;;*---------------------------------------------------------------------*/ ;;* flyspell-debug-signal-no-check ... */ @@ -866,7 +873,8 @@ Mostly we check word delimiters." ;;*---------------------------------------------------------------------*/ (defun flyspell-debug-signal-word-checked () (setq debug-on-error t) - (let ((oldbuf (current-buffer)) + (let ((ispell-otherchars (ispell-get-otherchars)) + (oldbuf (current-buffer)) (point (point))) (with-current-buffer (get-buffer-create "*flyspell-debug*") (insert "WORD:\n") @@ -887,7 +895,8 @@ Mostly we check word delimiters." (save-excursion (backward-char 1) (and (and (looking-at (flyspell-get-not-casechars)) 1) - (not (looking-at (ispell-get-otherchars))) + (or (string= "" ispell-otherchars) + (not (looking-at (ispell-get-otherchars)))) (and (or flyspell-consider-dash-as-word-delimiter-flag (not (looking-at "\\-"))) 2)))))) c)))) @@ -903,7 +912,8 @@ Mostly we check word delimiters." (save-excursion (backward-char 1) (and (looking-at (flyspell-get-not-casechars)) - (not (looking-at (ispell-get-otherchars))) + (or (string= "" ispell-otherchars) + (not (looking-at (ispell-get-otherchars)))) (or flyspell-consider-dash-as-word-delimiter-flag (not (looking-at "\\-")))))))) c)) From 1fb4fc600588d5c367b4cb247eed31bb25b635e1 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 18 May 2012 00:06:23 -0700 Subject: [PATCH 528/564] Remove some old comments --- Makefile.in | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Makefile.in b/Makefile.in index bfd8727f56c..a24e40f1236 100644 --- a/Makefile.in +++ b/Makefile.in @@ -441,9 +441,6 @@ $(srcdir)/src/stamp-h.in: $(AUTOCONF_INPUTS) ## don't have to duplicate the list of utilities to install in ## this Makefile as well. -## On AIX, use tar xBf. -## On Xenix, use tar xpf. - .PHONY: install install: all install-arch-indep install-arch-dep blessmail @@ -517,9 +514,6 @@ set_installuser=for installuser in $${LOGNAME} $${USERNAME} $${USER} \ ## (ie DOC-${version}.buildnumber), otherwise DOC-${version}*. ## (Note "otherwise" is inaccurate since 2009-08-23.) -## If people complain about the h flag in tar command, take that out. -## That flag is also used in leim/Makefile.in - ## Note that the Makefiles in the etc directory are potentially useful ## in an installed Emacs, so should not be excluded. From 136c45eee75126157bd45683ba94de50b6888a14 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 18 May 2012 00:14:45 -0700 Subject: [PATCH 529/564] Stop adding Fink directories to search path on OS X * configure.in (GCC_TEST_OPTIONS, NON_GCC_TEST_OPTIONS) : No longer unconditonally add /sw directories. * etc/NEWS: Mention this. Fixes: debbugs:2280 --- ChangeLog | 3 +++ configure.in | 12 ++++++------ etc/NEWS | 4 ++++ 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index f6f13a4f07c..e8bd7061222 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2012-05-18 Glenn Morris + * configure.in (GCC_TEST_OPTIONS, NON_GCC_TEST_OPTIONS) : + No longer unconditonally add /sw directories. (Bug#2280) + * Makefile.in (install-arch-dep): Depend on install-arch-indep. (install-arch-indep): Depend on install-leim. (install): Remove explicit install-leim dependence. diff --git a/configure.in b/configure.in index 0844cc2ecb6..6b16b4356b0 100644 --- a/configure.in +++ b/configure.in @@ -492,12 +492,12 @@ case "${canonical}" in * ) unported=yes ;; esac opsys=darwin - # Use fink packages if available. - # FIXME? Is it really our business to decide this for the user? - if test -d /sw/include && test -d /sw/lib; then - GCC_TEST_OPTIONS="-I/sw/include -L/sw/lib" - NON_GCC_TEST_OPTIONS=${GCC_TEST_OPTIONS} - fi + ## Use fink packages if available. + ## FIXME find a better way to do this: http://debbugs.gnu.org/11507 +## if test -d /sw/include && test -d /sw/lib; then +## GCC_TEST_OPTIONS="-I/sw/include -L/sw/lib" +## NON_GCC_TEST_OPTIONS=${GCC_TEST_OPTIONS} +## fi ;; ## HP 9000 series 700 and 800, running HP/UX diff --git a/etc/NEWS b/etc/NEWS index d27b27cb138..f6a5bcda480 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -37,6 +37,10 @@ may be useful. /usr/pkg/lib to the linker search path. You must add them yourself if you want them. +--- +** On Mac OS X, configure no longer automatically adds the Fink /sw +directories to the search path. You must add them yourself if you want them. + * Startup Changes in Emacs 24.2 From b7e1feeab6f88af3ebccbde6080e85c3cae8b340 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 18 May 2012 00:34:10 -0700 Subject: [PATCH 530/564] * Makefile.in (install-arch-indep): Minor fix for earlier change. --- Makefile.in | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile.in b/Makefile.in index a24e40f1236..3b66db4e8c5 100644 --- a/Makefile.in +++ b/Makefile.in @@ -539,7 +539,8 @@ install-arch-indep: info install-etc install-leim for dir in ${COPYDIR} ; do \ [ -d $${dir} ] || exit 1 ; \ dest=$$1 ; shift ; \ - [ `(cd $${dest} && /bin/pwd)` = `(cd $${dir} && /bin/pwd)` ] && \ + [ -d $${dest} ] && \ + [ `(cd $${dest} && /bin/pwd)` = `(cd $${dir} && /bin/pwd)` ] && \ continue ; \ rm -rf $${dest} ; \ umask 022; ${MKDIR_P} $${dest} ; \ From 80a511622c52f16583c549a3b16cd419a77f015e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agust=C3=ADn=20Mart=C3=ADn?= Date: Fri, 18 May 2012 09:36:09 +0200 Subject: [PATCH 531/564] textmodes/flyspell.el: Minor change over last 2012-05-18T07:04:04Z!agustin.martin@hispalinux.es change. Use ispell-otherchars variable. Use ispell-otherchars variable rather than (ispell-get-otherchars). --- lisp/textmodes/flyspell.el | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lisp/textmodes/flyspell.el b/lisp/textmodes/flyspell.el index 89134a1d355..af924dd403b 100644 --- a/lisp/textmodes/flyspell.el +++ b/lisp/textmodes/flyspell.el @@ -828,7 +828,7 @@ Mostly we check word delimiters." (backward-char 1) (and (looking-at (flyspell-get-not-casechars)) (or (string= "" ispell-otherchars) - (not (looking-at (ispell-get-otherchars)))) + (not (looking-at ispell-otherchars))) (or flyspell-consider-dash-as-word-delimiter-flag (not (looking-at "-")))))) ;; yes because we have reached or typed a word delimiter. @@ -896,7 +896,7 @@ Mostly we check word delimiters." (backward-char 1) (and (and (looking-at (flyspell-get-not-casechars)) 1) (or (string= "" ispell-otherchars) - (not (looking-at (ispell-get-otherchars)))) + (not (looking-at ispell-otherchars))) (and (or flyspell-consider-dash-as-word-delimiter-flag (not (looking-at "\\-"))) 2)))))) c)))) @@ -913,7 +913,7 @@ Mostly we check word delimiters." (backward-char 1) (and (looking-at (flyspell-get-not-casechars)) (or (string= "" ispell-otherchars) - (not (looking-at (ispell-get-otherchars)))) + (not (looking-at ispell-otherchars))) (or flyspell-consider-dash-as-word-delimiter-flag (not (looking-at "\\-")))))))) c)) From 0629a797a195aad88656003387cc4bbfb6aa74e2 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 18 May 2012 00:41:13 -0700 Subject: [PATCH 532/564] Avoid installation followed by immediate deletion for self-contained ns * configure.in (INSTALL_ARCH_INDEP_EXTRA): New output variable. * Makefile.in (INSTALL_ARCH_INDEP_EXTRA): New, set by configure. (install-arch-indep): Don't install-etc for self-contained ns builds. --- ChangeLog | 4 ++++ Makefile.in | 6 +++++- configure.in | 3 +++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index e8bd7061222..6129800f25b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2012-05-18 Glenn Morris + * configure.in (INSTALL_ARCH_INDEP_EXTRA): New output variable. + * Makefile.in (INSTALL_ARCH_INDEP_EXTRA): New, set by configure. + (install-arch-indep): Don't install-etc for self-contained ns builds. + * configure.in (GCC_TEST_OPTIONS, NON_GCC_TEST_OPTIONS) : No longer unconditonally add /sw directories. (Bug#2280) diff --git a/Makefile.in b/Makefile.in index 3b66db4e8c5..432f26919ec 100644 --- a/Makefile.in +++ b/Makefile.in @@ -523,6 +523,10 @@ set_installuser=for installuser in $${LOGNAME} $${USERNAME} $${USER} \ ## into RCS). In order to make this safe, we make sure that the ## source exists and is distinct from the destination. +## This is install-etc for everything except self-contained-ns builds. +## For them, it is empty. +INSTALL_ARCH_INDEP_EXTRA = @INSTALL_ARCH_INDEP_EXTRA@ + ## I'm not sure creating locallisppath here serves any useful purpose. ## If it has the default value, then the later write_subdir commands ## will ensure all these components exist. @@ -530,7 +534,7 @@ set_installuser=for installuser in $${LOGNAME} $${USERNAME} $${USER} \ ## Is it really Emacs's job to create those directories? ## Should we also be ensuring they contain subdirs.el files? ## It would be easy to do, just use write_subdir. -install-arch-indep: info install-etc install-leim +install-arch-indep: info install-leim ${INSTALL_ARCH_INDEP_EXTRA} umask 022 ; \ $(MKDIR_P) $(DESTDIR)`echo ${locallisppath} | sed 's,:, $(DESTDIR),g'` -set ${COPYDESTS} ; \ diff --git a/configure.in b/configure.in index 6b16b4356b0..74f55334636 100644 --- a/configure.in +++ b/configure.in @@ -1573,6 +1573,7 @@ fail; fi AC_SUBST(TEMACS_LDFLAGS2) +INSTALL_ARCH_INDEP_EXTRA=install-etc LEIM_INSTALLDIR="\${install_prefix}/leim" ns_self_contained=no ns_frag=/dev/null @@ -1600,6 +1601,7 @@ if test "${HAVE_NS}" = yes; then infodir="\${ns_appresdir}/info" lispdir="\${ns_appresdir}/lisp" LEIM_INSTALLDIR="\${ns_appresdir}/leim" + INSTALL_ARCH_INDEP_EXTRA= fi ns_frag=$srcdir/src/ns.mk NS_OBJ="fontset.o fringe.o image.o" @@ -1607,6 +1609,7 @@ if test "${HAVE_NS}" = yes; then fi CFLAGS="$tmp_CFLAGS" CPPFLAGS="$tmp_CPPFLAGS" +AC_SUBST(INSTALL_ARCH_INDEP_EXTRA) AC_SUBST(LEIM_INSTALLDIR) AC_SUBST(ns_self_contained) AC_SUBST(NS_OBJ) From 6b3868cb1469a6222498dba8220aec9e02d43c1e Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 18 May 2012 00:44:13 -0700 Subject: [PATCH 533/564] Reposition previous change --- Makefile.in | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Makefile.in b/Makefile.in index 432f26919ec..117fdbe52ae 100644 --- a/Makefile.in +++ b/Makefile.in @@ -488,6 +488,10 @@ install-arch-dep: install-arch-indep ## icons (duplicates etc/images/icons/hicolor) ## man (maybe we should be installing this one, like info) +## This is install-etc for everything except self-contained-ns builds. +## For them, it is empty. +INSTALL_ARCH_INDEP_EXTRA = @INSTALL_ARCH_INDEP_EXTRA@ + ## http://lists.gnu.org/archive/html/emacs-devel/2007-10/msg01672.html ## Needs to be the user running install, so configure can't set it. set_installuser=for installuser in $${LOGNAME} $${USERNAME} $${USER} \ @@ -523,10 +527,6 @@ set_installuser=for installuser in $${LOGNAME} $${USERNAME} $${USER} \ ## into RCS). In order to make this safe, we make sure that the ## source exists and is distinct from the destination. -## This is install-etc for everything except self-contained-ns builds. -## For them, it is empty. -INSTALL_ARCH_INDEP_EXTRA = @INSTALL_ARCH_INDEP_EXTRA@ - ## I'm not sure creating locallisppath here serves any useful purpose. ## If it has the default value, then the later write_subdir commands ## will ensure all these components exist. From 784b56e25bda24e9c1e0689f1d71d3cf6fe5d552 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Fri, 18 May 2012 11:36:50 +0300 Subject: [PATCH 534/564] Fix compilation with -DGLYPH_DEBUG=1 on MS-Windows. src/w32term.c [GLYPH_DEBUG]: Add prototype for x_check_font. (x_check_font) [GLYPH_DEBUG]: New function, copied from xterm.c src/w32fns.c (unwind_create_frame) [GLYPH_DEBUG]: Fix broken reference to image_cache->refcount. (x_create_tip_frame): Fix broken use of FRAME_IMAGE_CACHE. --- src/ChangeLog | 11 +++++++++++ src/w32fns.c | 4 ++-- src/w32term.c | 25 +++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index c72c8ae4d65..b3614db2d55 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,14 @@ +2012-05-18 Eli Zaretskii + + Fix compilation with -DGLYPH_DEBUG=1 on MS-Windows. + + * w32term.c [GLYPH_DEBUG]: Add prototype for x_check_font. + (x_check_font) [GLYPH_DEBUG]: New function, copied from xterm.c + + * w32fns.c (unwind_create_frame) [GLYPH_DEBUG]: Fix broken + reference to image_cache->refcount. + (x_create_tip_frame): Fix broken use of FRAME_IMAGE_CACHE. + 2012-05-17 Juri Linkov * search.c (Fword_search_regexp, Fword_search_backward) diff --git a/src/w32fns.c b/src/w32fns.c index a3ccb4ea3e5..f5161117f9d 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -4003,7 +4003,7 @@ unwind_create_frame (Lisp_Object frame) #if GLYPH_DEBUG /* Check that reference counts are indeed correct. */ xassert (dpyinfo->reference_count == dpyinfo_refcount); - xassert (dpyinfo->image_cache->refcount == image_cache_refcount); + xassert (dpyinfo->terminal->image_cache->refcount == image_cache_refcount); #endif return Qt; } @@ -5236,7 +5236,7 @@ x_create_tip_frame (struct w32_display_info *dpyinfo, #if GLYPH_DEBUG image_cache_refcount = - FRAME_IMAGE_CACHE ? FRAME_IMAGE_CACHE (f)->refcount : 0; + FRAME_IMAGE_CACHE (f) ? FRAME_IMAGE_CACHE (f)->refcount : 0; dpyinfo_refcount = dpyinfo->reference_count; #endif /* GLYPH_DEBUG */ FRAME_KBOARD (f) = kb; diff --git a/src/w32term.c b/src/w32term.c index 18a3753f9e9..2ccd7574332 100644 --- a/src/w32term.c +++ b/src/w32term.c @@ -231,6 +231,10 @@ static void my_set_focus (struct frame *, HWND); static void my_set_foreground_window (HWND); static void my_destroy_window (struct frame *, HWND); +#if GLYPH_DEBUG +static void x_check_font (struct frame *, struct font *); +#endif + static Lisp_Object Qvendor_specific_keysyms; @@ -5904,6 +5908,27 @@ x_wm_set_icon_position (struct frame *f, int icon_x, int icon_y) #endif } + +/*********************************************************************** + Fonts + ***********************************************************************/ + +#if GLYPH_DEBUG + +/* Check that FONT is valid on frame F. It is if it can be found in F's + font table. */ + +static void +x_check_font (struct frame *f, struct font *font) +{ + xassert (font != NULL && ! NILP (font->props[FONT_TYPE_INDEX])); + if (font->driver->check) + xassert (font->driver->check (f, font) == 0); +} + +#endif /* GLYPH_DEBUG != 0 */ + + /*********************************************************************** Initialization From adf4198e98a7a664d2a624c06220210227a3c096 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 18 May 2012 06:17:28 -0400 Subject: [PATCH 535/564] Auto-commit of generated files. --- autogen/Makefile.in | 1 + autogen/configure | 16 ++++++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/autogen/Makefile.in b/autogen/Makefile.in index 7029746b9bd..956a8373684 100644 --- a/autogen/Makefile.in +++ b/autogen/Makefile.in @@ -476,6 +476,7 @@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INFO_EXT = @INFO_EXT@ INFO_OPTS = @INFO_OPTS@ INSTALL = @INSTALL@ +INSTALL_ARCH_INDEP_EXTRA = @INSTALL_ARCH_INDEP_EXTRA@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_INFO = @INSTALL_INFO@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ diff --git a/autogen/configure b/autogen/configure index 1c699212665..e397eb8f4b2 100755 --- a/autogen/configure +++ b/autogen/configure @@ -1165,6 +1165,7 @@ NS_OBJC_OBJ NS_OBJ ns_self_contained LEIM_INSTALLDIR +INSTALL_ARCH_INDEP_EXTRA TEMACS_LDFLAGS2 LD_SWITCH_X_SITE_RPATH XMKMF @@ -4482,12 +4483,12 @@ case "${canonical}" in * ) unported=yes ;; esac opsys=darwin - # Use fink packages if available. - # FIXME? Is it really our business to decide this for the user? - if test -d /sw/include && test -d /sw/lib; then - GCC_TEST_OPTIONS="-I/sw/include -L/sw/lib" - NON_GCC_TEST_OPTIONS=${GCC_TEST_OPTIONS} - fi + ## Use fink packages if available. + ## FIXME find a better way to do this: http://debbugs.gnu.org/11507 +## if test -d /sw/include && test -d /sw/lib; then +## GCC_TEST_OPTIONS="-I/sw/include -L/sw/lib" +## NON_GCC_TEST_OPTIONS=${GCC_TEST_OPTIONS} +## fi ;; ## HP 9000 series 700 and 800, running HP/UX @@ -10109,6 +10110,7 @@ $as_echo "#define NS_HAVE_NSINTEGER 1" >>confdefs.h fi +INSTALL_ARCH_INDEP_EXTRA=install-etc LEIM_INSTALLDIR="\${install_prefix}/leim" ns_self_contained=no ns_frag=/dev/null @@ -10133,6 +10135,7 @@ if test "${HAVE_NS}" = yes; then infodir="\${ns_appresdir}/info" lispdir="\${ns_appresdir}/lisp" LEIM_INSTALLDIR="\${ns_appresdir}/leim" + INSTALL_ARCH_INDEP_EXTRA= fi ns_frag=$srcdir/src/ns.mk NS_OBJ="fontset.o fringe.o image.o" @@ -10147,6 +10150,7 @@ CPPFLAGS="$tmp_CPPFLAGS" + case "${window_system}" in x11 ) HAVE_X_WINDOWS=yes From b1a107166626f4d26399f828fba43b56d57ebeb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=BCdiger=20Sonderfeld?= Date: Fri, 18 May 2012 10:16:23 -0500 Subject: [PATCH 536/564] calc/calc-lang.el (math-C-parse-bess, math-C-parse-fma): New functions. (math-function-table): Add support for more C functions. --- lisp/ChangeLog | 6 ++++++ lisp/calc/calc-lang.el | 35 +++++++++++++++++++++++++++++++++-- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 774ea476fb3..30cd1843b30 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2012-05-18 Rüdiger Sonderfeld + + * calc/calc-lang.el (math-C-parse-bess, math-C-parse-fma): + New functions. + (math-function-table): Add support for more C functions. + 2012-05-18 Agustín Martín Domingo * flyspell.el (flyspell-check-pre-word-p, flyspell-check-word-p) diff --git a/lisp/calc/calc-lang.el b/lisp/calc/calc-lang.el index c53f59eb0f4..ec4c497a1c6 100644 --- a/lisp/calc/calc-lang.el +++ b/lisp/calc/calc-lang.el @@ -133,8 +133,39 @@ ( asin . calcFunc-arcsin ) ( asinh . calcFunc-arcsinh ) ( atan . calcFunc-arctan ) - ( atan2 . calcFunc-arctan2 ) - ( atanh . calcFunc-arctanh ))) + ( atan2 . calcFunc-arctan2 ) + ( atanh . calcFunc-arctanh ) + ( fma . (math-C-parse-fma)) + ( fmax . calcFunc-max ) + ( j0 . (math-C-parse-bess)) + ( jn . calcFunc-besJ ) + ( j1 . (math-C-parse-bess)) + ( yn . calcFunc-besY ) + ( y0 . (math-C-parse-bess)) + ( y1 . (math-C-parse-bess)) + ( tgamma . calcFunc-gamma ))) + +(defun math-C-parse-bess (f val) + "Parse C's j0, j1, y0, y1 functions." + (let ((args (math-read-expr-list))) + (math-read-token) + (append + (cond ((eq val 'j0) '(calcFunc-besJ 0)) + ((eq val 'j1) '(calcFunc-besJ 1)) + ((eq val 'y0) '(calcFunc-besY 0)) + ((eq val 'y1) '(calcFunc-besY 1))) + args))) + +(defun math-C-parse-fma (f val) + "Parse C's fma function fma(x,y,z) => (x * y + z)." + (let ((args (math-read-expr-list))) + (math-read-token) + (list 'calcFunc-add + (list 'calcFunc-mul + (nth 0 args) + (nth 1 args)) + (nth 2 args)))) + (put 'c 'math-variable-table '( ( M_PI . var-pi ) From 568c6157f3061ab5b3e824c8ff494a50fcc0517f Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 18 May 2012 13:40:13 -0400 Subject: [PATCH 537/564] Minor fix for previous change. --- Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.in b/Makefile.in index 117fdbe52ae..69757d59e6c 100644 --- a/Makefile.in +++ b/Makefile.in @@ -574,6 +574,7 @@ install-arch-indep: info install-leim ${INSTALL_ARCH_INDEP_EXTRA} subdir=$(DESTDIR)${datadir}/emacs/site-lisp ; \ ${write_subdir} || true -unset CDPATH; \ + umask 022; ${MKDIR_P} $(DESTDIR)${docdir} ; \ if [ `(cd ./etc; /bin/pwd)` != `(cd $(DESTDIR)${docdir}; /bin/pwd)` ]; \ then \ fullversion=`./src/emacs --version | sed -n '1 s/GNU Emacs *//p'`; \ @@ -584,7 +585,6 @@ install-arch-indep: info install-leim ${INSTALL_ARCH_INDEP_EXTRA} docfile="DOC"; \ fi; \ echo "Copying etc/$${docfile} to $(DESTDIR)${docdir} ..." ; \ - umask 022; ${MKDIR_P} $(DESTDIR)${docdir} ; \ ${INSTALL_DATA} etc/$${docfile} $(DESTDIR)${docdir}/$${docfile}; \ (cd $(DESTDIR)$(docdir); \ $(set_installuser); \ From 37f36bcb56e5b1d909a1f611756eac271ede0862 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 18 May 2012 13:49:24 -0400 Subject: [PATCH 538/564] * configure.in (mandir): May as well include it in the NS app bundle. --- ChangeLog | 2 ++ configure.in | 1 + 2 files changed, 3 insertions(+) diff --git a/ChangeLog b/ChangeLog index 6129800f25b..c19df14eb0b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 2012-05-18 Glenn Morris + * configure.in (mandir): May as well include it in the NS app bundle. + * configure.in (INSTALL_ARCH_INDEP_EXTRA): New output variable. * Makefile.in (INSTALL_ARCH_INDEP_EXTRA): New, set by configure. (install-arch-indep): Don't install-etc for self-contained ns builds. diff --git a/configure.in b/configure.in index 74f55334636..1599a036096 100644 --- a/configure.in +++ b/configure.in @@ -1599,6 +1599,7 @@ if test "${HAVE_NS}" = yes; then dnl FIXME maybe set datarootdir instead. dnl That would also get applications, icons, man. infodir="\${ns_appresdir}/info" + mandir="\${ns_appresdir}/man" lispdir="\${ns_appresdir}/lisp" LEIM_INSTALLDIR="\${ns_appresdir}/leim" INSTALL_ARCH_INDEP_EXTRA= From 660c8c1e9a08c236700574bd8bd8722c586cd62a Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 18 May 2012 13:56:08 -0400 Subject: [PATCH 539/564] * Makefile.in (install-arch-indep): Split into several rules. (install-doc, innstall-info, install-man): New rules. --- ChangeLog | 3 +++ Makefile.in | 51 ++++++++++++++++++++++++++++----------------------- 2 files changed, 31 insertions(+), 23 deletions(-) diff --git a/ChangeLog b/ChangeLog index c19df14eb0b..ed6c87e3ba5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2012-05-18 Glenn Morris + * Makefile.in (install-arch-indep): Split into several rules. + (install-doc, innstall-info, install-man): New rules. + * configure.in (mandir): May as well include it in the NS app bundle. * configure.in (INSTALL_ARCH_INDEP_EXTRA): New output variable. diff --git a/Makefile.in b/Makefile.in index 69757d59e6c..c3d6ea01193 100644 --- a/Makefile.in +++ b/Makefile.in @@ -483,10 +483,9 @@ install-arch-dep: install-arch-indep fi ## In the share directory, we are deleting: -## applications (with emacs.desktop) -## emacs (basically empty) +## applications (with emacs.desktop, also found in etc/) +## emacs (basically empty except for unneeded site-lisp directories) ## icons (duplicates etc/images/icons/hicolor) -## man (maybe we should be installing this one, like info) ## This is install-etc for everything except self-contained-ns builds. ## For them, it is empty. @@ -504,20 +503,10 @@ set_installuser=for installuser in $${LOGNAME} $${USERNAME} $${USER} \ ### the exception is the DOC-* files, which are copied ### from the build directory. -## Note that we copy DOC* and then delete DOC -## as a workaround for a bug in tar on Ultrix 4.2. -## Ultrix is no longer supported since 23.1, but the relevant line -## has another effect. We copy the entire etc/ directory from the -## source tree first. For an in-tree build, this will include -## any DOC* files there may be. So rm DOC does have an effect. ## FIXME When we copy etc we should exclude DOC*, then copy only ## the relevant one. We cannot delete DOC* from the destination directory, ## because that may include pre-existing files from another emacs. -## We install only the relevant DOC file if possible -## (ie DOC-${version}.buildnumber), otherwise DOC-${version}*. -## (Note "otherwise" is inaccurate since 2009-08-23.) - ## Note that the Makefiles in the etc directory are potentially useful ## in an installed Emacs, so should not be excluded. @@ -534,7 +523,7 @@ set_installuser=for installuser in $${LOGNAME} $${USERNAME} $${USER} \ ## Is it really Emacs's job to create those directories? ## Should we also be ensuring they contain subdirs.el files? ## It would be easy to do, just use write_subdir. -install-arch-indep: info install-leim ${INSTALL_ARCH_INDEP_EXTRA} +install-arch-indep: install-leim install-doc install-info install-man ${INSTALL_ARCH_INDEP_EXTRA} umask 022 ; \ $(MKDIR_P) $(DESTDIR)`echo ${locallisppath} | sed 's,:, $(DESTDIR),g'` -set ${COPYDESTS} ; \ @@ -574,6 +563,27 @@ install-arch-indep: info install-leim ${INSTALL_ARCH_INDEP_EXTRA} subdir=$(DESTDIR)${datadir}/emacs/site-lisp ; \ ${write_subdir} || true -unset CDPATH; \ + if [ -n "${GZIP_PROG}" ]; \ + then \ + echo "Compressing *.el ..." ; \ + (cd $(DESTDIR)${lispdir}; for f in `find . -name "*.elc" -print`; do \ + ${GZIP_PROG} -9n `echo $$f|sed 's/.elc$$/.el/'` ; \ + done) \ + else true; fi + -chmod -R a+r $(DESTDIR)${datadir}/emacs/${version} ${COPYDESTS} + +## We install only the relevant DOC file if possible +## (ie DOC-${version}.buildnumber), otherwise DOC-${version}*. +## (Note "otherwise" is inaccurate since 2009-08-23.) + +## Note that we copy DOC* and then delete DOC +## as a workaround for a bug in tar on Ultrix 4.2. +## Ultrix is no longer supported since 23.1, but the relevant line +## has another effect. We copy the entire etc/ directory from the +## source tree first. For an in-tree build, this will include +## any DOC* files there may be. So rm DOC does have an effect. +install-doc: + -unset CDPATH; \ umask 022; ${MKDIR_P} $(DESTDIR)${docdir} ; \ if [ `(cd ./etc; /bin/pwd)` != `(cd $(DESTDIR)${docdir}; /bin/pwd)` ]; \ then \ @@ -591,14 +601,8 @@ install-arch-indep: info install-leim ${INSTALL_ARCH_INDEP_EXTRA} chown $${installuser} DOC*; \ if test "`echo DOC-*`" != "DOC-*"; then rm -f DOC; fi); \ else true; fi - -unset CDPATH; \ - if [ -n "${GZIP_PROG}" ]; \ - then \ - echo "Compressing *.el ..." ; \ - (cd $(DESTDIR)${lispdir}; for f in `find . -name "*.elc" -print`; do \ - ${GZIP_PROG} -9n `echo $$f|sed 's/.elc$$/.el/'` ; \ - done) \ - else true; fi + +install-info: info umask 022; ${MKDIR_P} $(DESTDIR)${infodir} -unset CDPATH; \ thisdir=`/bin/pwd`; \ @@ -626,7 +630,8 @@ install-arch-indep: info install-leim ${INSTALL_ARCH_INDEP_EXTRA} ${INSTALL_INFO} --info-dir=$(DESTDIR)${infodir} $(DESTDIR)${infodir}/$$elt); \ done); \ else true; fi - -chmod -R a+r $(DESTDIR)${datadir}/emacs/${version} ${COPYDESTS} + +install-man: umask 022; ${MKDIR_P} $(DESTDIR)${man1dir} thisdir=`/bin/pwd`; \ cd ${mansrcdir}; \ From bfed83348183b8a4468bdad717c66d5fbb444cdb Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 18 May 2012 14:19:37 -0400 Subject: [PATCH 540/564] Fix up dependencies in previous change. install-arch-indep deletes the entire destination etc/ directory, so install-doc needs that to be run first. --- Makefile.in | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Makefile.in b/Makefile.in index c3d6ea01193..887a591110a 100644 --- a/Makefile.in +++ b/Makefile.in @@ -443,7 +443,7 @@ $(srcdir)/src/stamp-h.in: $(AUTOCONF_INPUTS) .PHONY: install -install: all install-arch-indep install-arch-dep blessmail +install: all install-arch-indep install-doc install-arch-dep blessmail @true ## Ensure that $subdir contains a subdirs.el file. @@ -464,7 +464,7 @@ write_subdir=if [ -f $${subdir}/subdirs.el ]; \ ### Install the executables that were compiled specifically for this machine. ### We do install-arch-indep first because the executable needs the ### Lisp files and DOC file to work properly. -install-arch-dep: install-arch-indep +install-arch-dep: install-arch-indep install-doc umask 022; ${MKDIR_P} $(DESTDIR)${bindir} (cd lib-src; \ $(MAKE) install $(MFLAGS) prefix=${prefix} \ @@ -523,7 +523,7 @@ set_installuser=for installuser in $${LOGNAME} $${USERNAME} $${USER} \ ## Is it really Emacs's job to create those directories? ## Should we also be ensuring they contain subdirs.el files? ## It would be easy to do, just use write_subdir. -install-arch-indep: install-leim install-doc install-info install-man ${INSTALL_ARCH_INDEP_EXTRA} +install-arch-indep: install-leim install-info install-man ${INSTALL_ARCH_INDEP_EXTRA} umask 022 ; \ $(MKDIR_P) $(DESTDIR)`echo ${locallisppath} | sed 's,:, $(DESTDIR),g'` -set ${COPYDESTS} ; \ @@ -582,7 +582,10 @@ install-arch-indep: install-leim install-doc install-info install-man ${INSTALL_ ## has another effect. We copy the entire etc/ directory from the ## source tree first. For an in-tree build, this will include ## any DOC* files there may be. So rm DOC does have an effect. -install-doc: + +## Note that install-arch-indep deletes and recreates the entire +## installed etc/ directory, so we need it to run before this does. +install-doc: install-arch-indep -unset CDPATH; \ umask 022; ${MKDIR_P} $(DESTDIR)${docdir} ; \ if [ `(cd ./etc; /bin/pwd)` != `(cd $(DESTDIR)${docdir}; /bin/pwd)` ]; \ From 29473393648da830a6e954672e59cfbf4012049b Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 18 May 2012 14:40:19 -0400 Subject: [PATCH 541/564] * Makefile.in: Install only the relevant DOC file. This only affects in-tree builds where you have several versions emacs-24.1.50.1, .2, etc lying around. * Makefile.in: (install-arch-indep): Delete etc/DOC*. (install-doc): No more need to delete etc/DOC. --- ChangeLog | 4 ++++ Makefile.in | 34 +++++++++++++--------------------- 2 files changed, 17 insertions(+), 21 deletions(-) diff --git a/ChangeLog b/ChangeLog index ed6c87e3ba5..fc5861320f3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2012-05-18 Glenn Morris + * Makefile.in: Install only the relevant DOC file. + (install-arch-indep): Delete etc/DOC*. + (install-doc): No more need to delete etc/DOC. + * Makefile.in (install-arch-indep): Split into several rules. (install-doc, innstall-info, install-man): New rules. diff --git a/Makefile.in b/Makefile.in index 887a591110a..4a21a798350 100644 --- a/Makefile.in +++ b/Makefile.in @@ -499,16 +499,8 @@ set_installuser=for installuser in $${LOGNAME} $${USERNAME} $${USER} \ done ### Install the files that are machine-independent. -### Most of them come straight from the distribution; -### the exception is the DOC-* files, which are copied -### from the build directory. - -## FIXME When we copy etc we should exclude DOC*, then copy only -## the relevant one. We cannot delete DOC* from the destination directory, -## because that may include pre-existing files from another emacs. - -## Note that the Makefiles in the etc directory are potentially useful -## in an installed Emacs, so should not be excluded. +### Most of them come straight from the distribution; the exception is +### the DOC file, which is copied from the build directory. ## We delete each directory in ${COPYDESTS} before we copy into it; ## that way, we can reinstall over directories that have been put in @@ -516,6 +508,14 @@ set_installuser=for installuser in $${LOGNAME} $${USERNAME} $${USER} \ ## into RCS). In order to make this safe, we make sure that the ## source exists and is distinct from the destination. +## We delete etc/DOC* because there may be irrelevant DOC files from +## other builds in the source directory. This is ok because we just +## deleted the entire installed etc/ directory and recreated it. +## install-doc installs the relevant DOC. + +## Note that the Makefiles in the etc directory are potentially useful +## in an installed Emacs, so should not be excluded. + ## I'm not sure creating locallisppath here serves any useful purpose. ## If it has the default value, then the later write_subdir commands ## will ensure all these components exist. @@ -541,6 +541,7 @@ install-arch-indep: install-leim install-info install-man ${INSTALL_ARCH_INDEP_E (cd $${dir}; tar -chf - . ) \ | (cd $${dest}; umask 022; \ tar -xvf - && cat > /dev/null) || exit 1; \ + [ "$${dir}" != "${srcdir}/etc" ] || rm -f $${dest}/DOC* ; \ find $${dest} -exec chown $${installuser} {} ';' ;\ for subdir in `find $${dest} -type d -print` ; do \ chmod a+rx $${subdir} ; \ @@ -576,13 +577,6 @@ install-arch-indep: install-leim install-info install-man ${INSTALL_ARCH_INDEP_E ## (ie DOC-${version}.buildnumber), otherwise DOC-${version}*. ## (Note "otherwise" is inaccurate since 2009-08-23.) -## Note that we copy DOC* and then delete DOC -## as a workaround for a bug in tar on Ultrix 4.2. -## Ultrix is no longer supported since 23.1, but the relevant line -## has another effect. We copy the entire etc/ directory from the -## source tree first. For an in-tree build, this will include -## any DOC* files there may be. So rm DOC does have an effect. - ## Note that install-arch-indep deletes and recreates the entire ## installed etc/ directory, so we need it to run before this does. install-doc: install-arch-indep @@ -599,10 +593,8 @@ install-doc: install-arch-indep fi; \ echo "Copying etc/$${docfile} to $(DESTDIR)${docdir} ..." ; \ ${INSTALL_DATA} etc/$${docfile} $(DESTDIR)${docdir}/$${docfile}; \ - (cd $(DESTDIR)$(docdir); \ - $(set_installuser); \ - chown $${installuser} DOC*; \ - if test "`echo DOC-*`" != "DOC-*"; then rm -f DOC; fi); \ + $(set_installuser); \ + chown $${installuser} $(DESTDIR)${docdir}/$${docfile} || true ; \ else true; fi install-info: info From 60c4db3a60a7b7f0b835201efbd767ce12fa18d3 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Fri, 18 May 2012 15:04:07 -0400 Subject: [PATCH 542/564] * lisp/textmodes/flyspell.el: Commenting style, plus code simplifications. (flyspell-default-deplacement-commands): Don't spell check after repeated window/frame switches (e.g. triggered by mouse-movement). (flyspell-delay-commands, flyspell-deplacement-commands): Use mapc. (flyspell-debug-signal-word-checked): Simplify and fit in 80 cols. (flyspell-casechars-cache, flyspell-ispell-casechars-cache) (flyspell-not-casechars-cache, flyspell-ispell-not-casechars-cache): Remove unused vars. (flyspell-get-casechars, flyspell-get-not-casechars): Simplify; Don't bother removing a ] just to add it back. * lisp/textmodes/ispell.el (ispell-program-name): Use executable-find. --- lisp/ChangeLog | 14 ++ lisp/textmodes/flyspell.el | 257 ++++++++++++++----------------------- lisp/textmodes/ispell.el | 47 +++---- 3 files changed, 134 insertions(+), 184 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 30cd1843b30..58bf5a025d1 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,17 @@ +2012-05-18 Stefan Monnier + + * textmodes/flyspell.el: Commenting style, plus code simplifications. + (flyspell-default-deplacement-commands): Don't spell check after + repeated window/frame switches (e.g. triggered by mouse-movement). + (flyspell-delay-commands, flyspell-deplacement-commands): Use mapc. + (flyspell-debug-signal-word-checked): Simplify and fit in 80 cols. + (flyspell-casechars-cache, flyspell-ispell-casechars-cache) + (flyspell-not-casechars-cache, flyspell-ispell-not-casechars-cache): + Remove unused vars. + (flyspell-get-casechars, flyspell-get-not-casechars): + Simplify; Don't bother removing a ] just to add it back. + * textmodes/ispell.el (ispell-program-name): Use executable-find. + 2012-05-18 Rüdiger Sonderfeld * calc/calc-lang.el (math-C-parse-bess, math-C-parse-fma): diff --git a/lisp/textmodes/flyspell.el b/lisp/textmodes/flyspell.el index af924dd403b..c0b0a837a9d 100644 --- a/lisp/textmodes/flyspell.el +++ b/lisp/textmodes/flyspell.el @@ -143,10 +143,9 @@ whose length is specified by `flyspell-delay'." :type '(repeat (symbol))) (defcustom flyspell-default-deplacement-commands - '(next-line - previous-line - scroll-up - scroll-down) + '(next-line previous-line + handle-switch-frame handle-select-window + scroll-up scroll-down) "The standard list of deplacement commands for Flyspell. See `flyspell-deplacement-commands'." :group 'flyspell @@ -631,7 +630,7 @@ in your .emacs file. (defun flyspell-delay-commands () "Install the standard set of Flyspell delayed commands." (mapc 'flyspell-delay-command flyspell-default-delayed-commands) - (mapcar 'flyspell-delay-command flyspell-delayed-commands)) + (mapc 'flyspell-delay-command flyspell-delayed-commands)) ;;*---------------------------------------------------------------------*/ ;;* flyspell-delay-command ... */ @@ -639,7 +638,7 @@ in your .emacs file. (defun flyspell-delay-command (command) "Set COMMAND to be delayed, for Flyspell. When flyspell `post-command-hook' is invoked because a delayed command -as been used the current word is not immediately checked. +has been used, the current word is not immediately checked. It will be checked only after `flyspell-delay' seconds." (interactive "SDelay Flyspell after Command: ") (put command 'flyspell-delayed t)) @@ -650,16 +649,15 @@ It will be checked only after `flyspell-delay' seconds." (defun flyspell-deplacement-commands () "Install the standard set of Flyspell deplacement commands." (mapc 'flyspell-deplacement-command flyspell-default-deplacement-commands) - (mapcar 'flyspell-deplacement-command flyspell-deplacement-commands)) + (mapc 'flyspell-deplacement-command flyspell-deplacement-commands)) ;;*---------------------------------------------------------------------*/ ;;* flyspell-deplacement-command ... */ ;;*---------------------------------------------------------------------*/ (defun flyspell-deplacement-command (command) "Set COMMAND that implement cursor movements, for Flyspell. -When flyspell `post-command-hook' is invoked because of a deplacement command -as been used the current word is checked only if the previous command was -not the very same deplacement command." +When flyspell `post-command-hook' is invoked because a deplacement command +has been used, the current word is not checked." (interactive "SDeplacement Flyspell after Command: ") (put command 'flyspell-deplacement t)) @@ -680,12 +678,12 @@ not the very same deplacement command." ;;* post command hook, we will check, if the word at this position */ ;;* has to be spell checked. */ ;;*---------------------------------------------------------------------*/ -(defvar flyspell-pre-buffer nil) -(defvar flyspell-pre-point nil) -(defvar flyspell-pre-column nil) +(defvar flyspell-pre-buffer nil "Buffer current before `this-command'.") +(defvar flyspell-pre-point nil "Point before running `this-command'") +(defvar flyspell-pre-column nil "Column before running `this-command'") (defvar flyspell-pre-pre-buffer nil) (defvar flyspell-pre-pre-point nil) -(make-variable-buffer-local 'flyspell-pre-point) +(make-variable-buffer-local 'flyspell-pre-point) ;Why?? --Stef ;;*---------------------------------------------------------------------*/ ;;* flyspell-previous-command ... */ @@ -709,18 +707,18 @@ not the very same deplacement command." ;;;###autoload (defun flyspell-mode-off () "Turn Flyspell mode off." - ;; we remove the hooks + ;; We remove the hooks. (remove-hook 'post-command-hook (function flyspell-post-command-hook) t) (remove-hook 'pre-command-hook (function flyspell-pre-command-hook) t) (remove-hook 'after-change-functions 'flyspell-after-change-function t) (remove-hook 'hack-local-variables-hook (function flyspell-hack-local-variables-hook) t) - ;; we remove all the flyspell highlightings + ;; We remove all the flyspell highlightings. (flyspell-delete-all-overlays) - ;; we have to erase pre cache variables + ;; We have to erase pre cache variables. (setq flyspell-pre-buffer nil) (setq flyspell-pre-point nil) - ;; we mark the mode as killed + ;; We mark the mode as killed. (setq flyspell-mode nil)) ;;*---------------------------------------------------------------------*/ @@ -732,9 +730,8 @@ More precisely, it applies to the word that was before point before the current command." (let ((ispell-otherchars (ispell-get-otherchars))) (cond - ((or (not (numberp flyspell-pre-point)) - (not (bufferp flyspell-pre-buffer)) - (not (buffer-live-p flyspell-pre-buffer))) + ((not (and (numberp flyspell-pre-point) + (buffer-live-p flyspell-pre-buffer))) nil) ((and (eq flyspell-pre-pre-point flyspell-pre-point) (eq flyspell-pre-pre-buffer flyspell-pre-buffer)) @@ -794,21 +791,15 @@ before the current command." ;;* flyspell-check-changed-word-p ... */ ;;*---------------------------------------------------------------------*/ (defun flyspell-check-changed-word-p (start stop) - "Return t when the changed word has to be checked. + "Return non-nil when the changed word has to be checked. The answer depends of several criteria. Mostly we check word delimiters." - (cond - ((and (memq (char-after start) '(?\n ? )) (> stop start)) - t) - ((not (numberp flyspell-pre-point)) - t) - ((and (>= flyspell-pre-point start) (<= flyspell-pre-point stop)) - nil) - ((let ((pos (point))) - (or (>= pos start) (<= pos stop) (= pos (1+ stop)))) - nil) - (t - t))) + (not (and (not (and (memq (char-after start) '(?\n ? )) (> stop start))) + (numberp flyspell-pre-point) + (or + (and (>= flyspell-pre-point start) (<= flyspell-pre-point stop)) + (let ((pos (point))) + (or (>= pos start) (<= pos stop) (= pos (1+ stop)))))))) ;;*---------------------------------------------------------------------*/ ;;* flyspell-check-word-p ... */ @@ -820,7 +811,7 @@ Mostly we check word delimiters." (let ((ispell-otherchars (ispell-get-otherchars))) (cond ((<= (- (point-max) 1) (point-min)) - ;; the buffer is not filled enough + ;; The buffer is not filled enough. nil) ((and (and (> (current-column) 0) (not (eq (current-column) flyspell-pre-column))) @@ -831,15 +822,15 @@ Mostly we check word delimiters." (not (looking-at ispell-otherchars))) (or flyspell-consider-dash-as-word-delimiter-flag (not (looking-at "-")))))) - ;; yes because we have reached or typed a word delimiter. + ;; Yes because we have reached or typed a word delimiter. t) ((symbolp this-command) (cond ((get this-command 'flyspell-deplacement) (not (eq flyspell-previous-command this-command))) ((get this-command 'flyspell-delayed) - ;; the current command is not delayed, that - ;; is that we must check the word now + ;; The current command is not delayed, that + ;; is that we must check the word now. (and (not unread-command-events) (sit-for flyspell-delay))) (t t))) @@ -877,53 +868,51 @@ Mostly we check word delimiters." (oldbuf (current-buffer)) (point (point))) (with-current-buffer (get-buffer-create "*flyspell-debug*") - (insert "WORD:\n") - (insert (format " this-cmd : %S\n" this-command)) - (insert (format " delayed : %S\n" (and (symbolp this-command) - (get this-command 'flyspell-delayed)))) - (insert (format " point : %S\n" point)) - (insert (format " prev-char : [%c] %S\n" - (with-current-buffer oldbuf - (let ((c (if (> (point) (point-min)) - (save-excursion - (backward-char 1) - (char-after (point))) - ? ))) - c)) - (with-current-buffer oldbuf - (let ((c (if (> (point) (point-min)) - (save-excursion - (backward-char 1) - (and (and (looking-at (flyspell-get-not-casechars)) 1) - (or (string= "" ispell-otherchars) - (not (looking-at ispell-otherchars))) - (and (or flyspell-consider-dash-as-word-delimiter-flag - (not (looking-at "\\-"))) 2)))))) - c)))) - (insert (format " because : %S\n" - (cond - ((not (and (symbolp this-command) - (get this-command 'flyspell-delayed))) - ;; the current command is not delayed, that - ;; is that we must check the word now - 'not-delayed) - ((with-current-buffer oldbuf - (let ((c (if (> (point) (point-min)) - (save-excursion - (backward-char 1) - (and (looking-at (flyspell-get-not-casechars)) - (or (string= "" ispell-otherchars) - (not (looking-at ispell-otherchars))) - (or flyspell-consider-dash-as-word-delimiter-flag - (not (looking-at "\\-")))))))) - c)) - ;; yes because we have reached or typed a word delimiter. - 'separator) - ((not (integerp flyspell-delay)) - ;; yes because the user had set up a no-delay configuration. - 'no-delay) - (t - 'sit-for)))) + (insert + "WORD:\n" + (format " this-cmd : %S\n" this-command) + (format " delayed : %S\n" (and (symbolp this-command) + (get this-command + 'flyspell-delayed))) + (format " point : %S\n" point) + (format " prev-char : [%c] %S\n" + (with-current-buffer oldbuf + (if (bobp) ?\ (char-before))) + (with-current-buffer oldbuf + (if (bobp) + nil + (save-excursion + (backward-char 1) + (and (looking-at (flyspell-get-not-casechars)) + (or (string= "" ispell-otherchars) + (not (looking-at ispell-otherchars))) + (or flyspell-consider-dash-as-word-delimiter-flag + (not (looking-at "\\-"))) + 2))))) + (format " because : %S\n" + (cond + ((not (and (symbolp this-command) + (get this-command 'flyspell-delayed))) + ;; The current command is not delayed, that + ;; is that we must check the word now. + 'not-delayed) + ((with-current-buffer oldbuf + (if (bobp) + nil + (save-excursion + (backward-char 1) + (and (looking-at (flyspell-get-not-casechars)) + (or (string= "" ispell-otherchars) + (not (looking-at ispell-otherchars))) + (or flyspell-consider-dash-as-word-delimiter-flag + (not (looking-at "\\-"))))))) + ;; Yes because we have reached or typed a word delimiter. + 'separator) + ((not (integerp flyspell-delay)) + ;; Yes because the user set up a no-delay configuration. + 'no-delay) + (t + 'sit-for)))) (goto-char (point-max))))) ;;*---------------------------------------------------------------------*/ @@ -946,7 +935,7 @@ Mostly we check word delimiters." ;;* 2- the word that used to be the current word before the */ ;;* THIS-COMMAND is checked if: */ ;;* a- the previous word is different from the current word */ -;;* b- the previous word as not just been checked by the */ +;;* b- the previous word has not just been checked by the */ ;;* previous FLYSPELL-POST-COMMAND-HOOK */ ;;* 3- the words changed by the THIS-COMMAND that are neither the */ ;;* previous word nor the current word */ @@ -973,7 +962,7 @@ Mostly we check word delimiters." ;; we remember which word we have just checked. ;; this will be used next time we will check a word ;; to compare the next current word with the word - ;; that as been registered in the pre-command-hook + ;; that has been registered in the pre-command-hook ;; that is these variables are used within the predicate ;; FLYSPELL-CHECK-PRE-WORD-P (setq flyspell-pre-pre-buffer (current-buffer)) @@ -1240,63 +1229,8 @@ misspelling and skips redundant spell-checking step." (>= (match-end 0) b)))))) (flyspell-math-tex-command-p))) -;;*---------------------------------------------------------------------*/ -;;* flyspell-casechars-cache ... */ -;;*---------------------------------------------------------------------*/ -(defvar flyspell-casechars-cache nil) -(defvar flyspell-ispell-casechars-cache nil) -(make-variable-buffer-local 'flyspell-casechars-cache) -(make-variable-buffer-local 'flyspell-ispell-casechars-cache) - -;;*---------------------------------------------------------------------*/ -;;* flyspell-get-casechars ... */ -;;*---------------------------------------------------------------------*/ -(defun flyspell-get-casechars () - "This function builds a string that is the regexp of word chars. -In order to avoid one useless string construction, -this function changes the last char of the `ispell-casechars' string." - (let ((ispell-casechars (ispell-get-casechars))) - (cond - ((eq ispell-parser 'tex) - (setq flyspell-ispell-casechars-cache ispell-casechars) - (setq flyspell-casechars-cache - (concat (substring ispell-casechars - 0 - (- (length ispell-casechars) 1)) - "]")) - flyspell-casechars-cache) - (t - (setq flyspell-ispell-casechars-cache ispell-casechars) - (setq flyspell-casechars-cache ispell-casechars) - flyspell-casechars-cache)))) - -;;*---------------------------------------------------------------------*/ -;;* flyspell-get-not-casechars-cache ... */ -;;*---------------------------------------------------------------------*/ -(defvar flyspell-not-casechars-cache nil) -(defvar flyspell-ispell-not-casechars-cache nil) -(make-variable-buffer-local 'flyspell-not-casechars-cache) -(make-variable-buffer-local 'flyspell-ispell-not-casechars-cache) - -;;*---------------------------------------------------------------------*/ -;;* flyspell-get-not-casechars ... */ -;;*---------------------------------------------------------------------*/ -(defun flyspell-get-not-casechars () - "This function builds a string that is the regexp of non-word chars." - (let ((ispell-not-casechars (ispell-get-not-casechars))) - (cond - ((eq ispell-parser 'tex) - (setq flyspell-ispell-not-casechars-cache ispell-not-casechars) - (setq flyspell-not-casechars-cache - (concat (substring ispell-not-casechars - 0 - (- (length ispell-not-casechars) 1)) - "]")) - flyspell-not-casechars-cache) - (t - (setq flyspell-ispell-not-casechars-cache ispell-not-casechars) - (setq flyspell-not-casechars-cache ispell-not-casechars) - flyspell-not-casechars-cache)))) +(defalias 'flyspell-get-casechars 'ispell-get-casechars) +(defalias 'flyspell-get-not-casechars 'ispell-get-not-casechars) ;;*---------------------------------------------------------------------*/ ;;* flyspell-get-word ... */ @@ -1433,7 +1367,7 @@ The buffer to mark them in is `flyspell-large-region-buffer'." (goto-char buffer-scan-pos) (let ((keep t)) ;; Iterate on string search until string is found as word, - ;; not as substring + ;; not as substring. (while keep (if (search-forward word flyspell-large-region-end t) @@ -1449,13 +1383,14 @@ The buffer to mark them in is `flyspell-large-region-buffer'." (when (or ;; Size matches, we really found it. (= found-length misspell-length) - ;; Matches as part of a boundary-char separated word + ;; Matches as part of a boundary-char separated + ;; word. (member word (split-string found ispell-otherchars)) ;; Misspelling has higher length than - ;; what flyspell considers the - ;; word. Caused by boundary-chars - ;; mismatch. Validating seems safe. + ;; what flyspell considers the word. + ;; Caused by boundary-chars mismatch. + ;; Validating seems safe. (< found-length misspell-length) ;; ispell treats beginning of some TeX ;; commands as nroff control sequences @@ -1920,11 +1855,11 @@ This command proposes various successive corrections for the current word." (interactive) (let ((pos (point)) (old-max (point-max))) - ;; use the correct dictionary + ;; Use the correct dictionary. (flyspell-accept-buffer-local-defs) (if (and (eq flyspell-auto-correct-pos pos) (consp flyspell-auto-correct-region)) - ;; we have already been using the function at the same location + ;; We have already been using the function at the same location. (let* ((start (car flyspell-auto-correct-region)) (len (cdr flyspell-auto-correct-region))) (flyspell-unhighlight-at start) @@ -1946,7 +1881,7 @@ This command proposes various successive corrections for the current word." (flyspell-display-next-corrections flyspell-auto-correct-ring)) (flyspell-ajust-cursor-point pos (point) old-max) (setq flyspell-auto-correct-pos (point))) - ;; fetch the word to be checked + ;; Fetch the word to be checked. (let ((word (flyspell-get-word))) (if (consp word) (let ((start (car (cdr word))) @@ -1954,30 +1889,30 @@ This command proposes various successive corrections for the current word." (word (car word)) poss ispell-filter) (setq flyspell-auto-correct-word word) - ;; now check spelling of word. - (ispell-send-string "%\n") ;put in verbose mode + ;; Now check spelling of word.. + (ispell-send-string "%\n") ;Put in verbose mode. (ispell-send-string (concat "^" word "\n")) - ;; wait until ispell has processed word. + ;; Wait until ispell has processed word. (while (progn (accept-process-output ispell-process) (not (string= "" (car ispell-filter))))) - ;; Remove leading empty element + ;; Remove leading empty element. (setq ispell-filter (cdr ispell-filter)) - ;; ispell process should return something after word is sent. - ;; Tag word as valid (i.e., skip) otherwise + ;; Ispell process should return something after word is sent. + ;; Tag word as valid (i.e., skip) otherwise. (or ispell-filter (setq ispell-filter '(*))) (if (consp ispell-filter) (setq poss (ispell-parse-output (car ispell-filter)))) (cond ((or (eq poss t) (stringp poss)) - ;; don't correct word + ;; Don't correct word. t) ((null poss) - ;; ispell error + ;; Ispell error. (error "Ispell: error in Ispell process")) (t - ;; the word is incorrect, we have to propose a replacement + ;; The word is incorrect, we have to propose a replacement. (let ((replacements (if flyspell-sort-corrections (sort (car (cdr (cdr poss))) 'string<) (car (cdr (cdr poss)))))) diff --git a/lisp/textmodes/ispell.el b/lisp/textmodes/ispell.el index db058d05f35..892f43e09fe 100644 --- a/lisp/textmodes/ispell.el +++ b/lisp/textmodes/ispell.el @@ -349,9 +349,9 @@ Must be greater than 1." :group 'ispell) (defcustom ispell-program-name - (or (locate-file "aspell" exec-path exec-suffixes 'file-executable-p) - (locate-file "ispell" exec-path exec-suffixes 'file-executable-p) - (locate-file "hunspell" exec-path exec-suffixes 'file-executable-p) + (or (executable-find "aspell") + (executable-find "ispell") + (executable-find "hunspell") "ispell") "Program invoked by \\[ispell-word] and \\[ispell-region] commands." :type 'string @@ -909,7 +909,7 @@ Otherwise returns the library directory name, if that is defined." ;;;###autoload (defvar ispell-menu-map nil "Key map for ispell menu.") -;;; redo menu when loading ispell to get dictionary modifications +;; Redo menu when loading ispell to get dictionary modifications (setq ispell-menu-map nil) ;;;###autoload @@ -1175,7 +1175,7 @@ The variable `ispell-library-directory' defines their location." (push name dict-list))) dict-list)) -;;; define commands in menu in opposite order you want them to appear. +;; Define commands in menu in opposite order you want them to appear. ;;;###autoload (if ispell-menu-map-needed (progn @@ -1372,9 +1372,9 @@ Protects against bogus binding of `enable-multibyte-characters' in XEmacs." (defvar ispell-pdict-modified-p nil "Non-nil means personal dictionary has modifications to be saved.") -;;; If you want to save the dictionary when quitting, must do so explicitly. -;;; When non-nil, the spell session is terminated. -;;; When numeric, contains cursor location in buffer, and cursor remains there. +;; If you want to save the dictionary when quitting, must do so explicitly. +;; When non-nil, the spell session is terminated. +;; When numeric, contains cursor location in buffer, and cursor remains there. (defvar ispell-quit nil) (defvar ispell-process-directory nil @@ -1874,10 +1874,10 @@ which is in `ispell-local-dictionary-alist' or `ispell-dictionary-alist'." (list word start end)))) -;;; Global ispell-pdict-modified-p is set by ispell-command-loop and -;;; tracks changes in the dictionary. The global may either be -;;; a value or a list, whose value is the state of whether the -;;; dictionary needs to be saved. +;; Global ispell-pdict-modified-p is set by ispell-command-loop and +;; tracks changes in the dictionary. The global may either be +;; a value or a list, whose value is the state of whether the +;; dictionary needs to be saved. ;;;###autoload (defun ispell-pdict-save (&optional no-query force-save) @@ -2416,8 +2416,8 @@ if defined." (setq start end)))))) ; else move start to next line of input -;;; This function destroys the mark location if it is in the word being -;;; highlighted. +;; This function destroys the mark location if it is in the word being +;; highlighted. (defun ispell-highlight-spelling-error-generic (start end &optional highlight refresh) "Highlight the word from START to END with a kludge using `inverse-video'. @@ -2549,7 +2549,7 @@ scrolling the current window. Leave the new window selected." (set-window-start (next-window) top)))) -;;; Should we add a compound word match return value? +;; Should we add a compound word match return value? (defun ispell-parse-output (output &optional accept-list shift) "Parse the OUTPUT string from Ispell process and return: 1: t for an exact match. @@ -2615,8 +2615,8 @@ When asynchronous processes are not supported, `run' is always returned." (defun ispell-start-process () - "Start the ispell process, with support for no asynchronous processes. -Keeps argument list for future ispell invocations for no async support." + "Start the Ispell process, with support for no asynchronous processes. +Keeps argument list for future Ispell invocations for no async support." ;; Local dictionary becomes the global dictionary in use. (setq ispell-current-dictionary (or ispell-local-dictionary ispell-dictionary)) @@ -2792,11 +2792,11 @@ With CLEAR, buffer session localwords are cleaned." (if (not (and ispell-process (eq (ispell-process-status) 'run))) (or no-error - (error "There is no ispell process running!")) + (error "There is no Ispell process running!")) (if ispell-async-processp (delete-process ispell-process) - ;; synchronous processes - (ispell-send-string "\n") ; make sure side effects occurred. + ;; Synchronous processes. + (ispell-send-string "\n") ; Make sure side effects occurred. (kill-buffer ispell-output-buffer) (kill-buffer ispell-session-buffer) (setq ispell-output-buffer nil @@ -2805,8 +2805,8 @@ With CLEAR, buffer session localwords are cleaned." (message "Ispell process killed") nil)) -;;; ispell-change-dictionary is set in some people's hooks. Maybe this should -;;; call ispell-init-process rather than wait for a spell checking command? +;; ispell-change-dictionary is set in some people's hooks. Maybe this should +;; call ispell-init-process rather than wait for a spell checking command? ;;;###autoload (defun ispell-change-dictionary (dict &optional arg) @@ -3411,6 +3411,7 @@ If optional INTERIOR-FRAG is non-nil then the word may be a character sequence inside of a word. Standard ispell choices are then available." + ;; FIXME: completion-at-point-function. (interactive "P") (let ((cursor-location (point)) (case-fold-search-val case-fold-search) @@ -3943,7 +3944,7 @@ Both should not be used to define a buffer-local dictionary." (ispell-send-string (concat "@" string "\n")))))))) -;;; returns optionally adjusted region-end-point. +;; Returns optionally adjusted region-end-point. ;; If comment-padright is defined, newcomment must be loaded. (declare-function comment-add "newcomment" (arg)) From 77f3b62ecae6cc1c2d2bfb26dbc4040346cbeab7 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Fri, 18 May 2012 16:38:37 -0400 Subject: [PATCH 543/564] * lisp/vc/vc-bzr.el (vc-bzr-state-heuristic): Save match-data around sha1. --- lisp/ChangeLog | 2 + lisp/vc/vc-bzr.el | 161 +++++++++++++++++++++++----------------------- 2 files changed, 84 insertions(+), 79 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 58bf5a025d1..ed24a1eb176 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2012-05-18 Stefan Monnier + * vc/vc-bzr.el (vc-bzr-state-heuristic): Save match-data around sha1. + * textmodes/flyspell.el: Commenting style, plus code simplifications. (flyspell-default-deplacement-commands): Don't spell check after repeated window/frame switches (e.g. triggered by mouse-movement). diff --git a/lisp/vc/vc-bzr.el b/lisp/vc/vc-bzr.el index 5488e53e32f..b5488eb96a9 100644 --- a/lisp/vc/vc-bzr.el +++ b/lisp/vc/vc-bzr.el @@ -208,85 +208,88 @@ in the repository root directory of FILE." ;; + working ( = packed_stat ) ;; parent = common ( as above ) + history ( = rev_id ) ;; kinds = (r)elocated, (a)bsent, (d)irectory, (f)ile, (l)ink - (let ((root (vc-bzr-root file))) - (when root ; Short cut. - (let ((dirstate (expand-file-name vc-bzr-admin-dirstate root))) - (condition-case nil - (with-temp-buffer - (insert-file-contents dirstate) - (goto-char (point-min)) - (if (not (looking-at "#bazaar dirstate flat format 3")) - (vc-bzr-state file) ; Some other unknown format? - (let* ((relfile (file-relative-name file root)) - (reldir (file-name-directory relfile))) - (if (re-search-forward - (concat "^\0" - (if reldir (regexp-quote - (directory-file-name reldir))) - "\0" - (regexp-quote (file-name-nondirectory relfile)) - "\0" - "[^\0]*\0" ;id? - "\\([^\0]*\\)\0" ;"a/f/d", a=removed? - "\\([^\0]*\\)\0" ;sha1 (empty if conflicted)? - "\\([^\0]*\\)\0" ;size?p - ;; y/n. Whether or not the current copy - ;; was executable the last time bzr checked? - "[^\0]*\0" - "[^\0]*\0" ;? - ;; Parent information. Absent in a new repo. - "\\(?:\\([^\0]*\\)\0" ;"a/f/d" a=added? - "\\([^\0]*\\)\0" ;sha1 again? - "\\([^\0]*\\)\0" ;size again? - ;; y/n. Whether or not the repo thinks - ;; the file should be executable? - "\\([^\0]*\\)\0" - "[^\0]*\0\\)?" ;last revid? - ;; There are more fields when merges are pending. - ) - nil t) - ;; Apparently the second sha1 is the one we want: when - ;; there's a conflict, the first sha1 is absent (and the - ;; first size seems to correspond to the file with - ;; conflict markers). - (cond - ((eq (char-after (match-beginning 1)) ?a) 'removed) - ;; If there is no parent, this must be a new repo. - ;; If file is in dirstate, can only be added (b#8025). - ((or (not (match-beginning 4)) - (eq (char-after (match-beginning 4)) ?a)) 'added) - ((or (and (eq (string-to-number (match-string 3)) - (nth 7 (file-attributes file))) - (equal (match-string 5) - (vc-bzr-sha1 file)) - ;; For a file, does the executable state match? - ;; (Bug#7544) - (or (not - (eq (char-after (match-beginning 1)) ?f)) - (let ((exe - (memq - ?x - (mapcar - 'identity - (nth 8 (file-attributes file)))))) - (if (eq (char-after (match-beginning 7)) - ?y) - exe - (not exe))))) - (and - ;; It looks like for lightweight - ;; checkouts \2 is empty and we need to - ;; look for size in \6. - (eq (match-beginning 2) (match-end 2)) - (eq (string-to-number (match-string 6)) - (nth 7 (file-attributes file))) - (equal (match-string 5) - (vc-bzr-sha1 file)))) - 'up-to-date) - (t 'edited)) - 'unregistered)))) - ;; The dirstate file can't be read, or some other problem. - (error (vc-bzr-state file))))))) + (let* ((root (vc-bzr-root file)) + (dirstate (expand-file-name vc-bzr-admin-dirstate root))) + (when root ; Short cut. + (condition-case err + (with-temp-buffer + (insert-file-contents dirstate) + (goto-char (point-min)) + (if (not (looking-at "#bazaar dirstate flat format 3")) + (vc-bzr-state file) ; Some other unknown format? + (let* ((relfile (file-relative-name file root)) + (reldir (file-name-directory relfile))) + (cond + ((not + (re-search-forward + (concat "^\0" + (if reldir (regexp-quote + (directory-file-name reldir))) + "\0" + (regexp-quote (file-name-nondirectory relfile)) + "\0" + "[^\0]*\0" ;id? + "\\([^\0]*\\)\0" ;"a/f/d", a=removed? + "\\([^\0]*\\)\0" ;sha1 (empty if conflicted)? + "\\([^\0]*\\)\0" ;size?p + ;; y/n. Whether or not the current copy + ;; was executable the last time bzr checked? + "[^\0]*\0" + "[^\0]*\0" ;? + ;; Parent information. Absent in a new repo. + "\\(?:\\([^\0]*\\)\0" ;"a/f/d" a=added? + "\\([^\0]*\\)\0" ;sha1 again? + "\\([^\0]*\\)\0" ;size again? + ;; y/n. Whether or not the repo thinks + ;; the file should be executable? + "\\([^\0]*\\)\0" + "[^\0]*\0\\)?" ;last revid? + ;; There are more fields when merges are pending. + ) + nil t)) + 'unregistered) + ;; Apparently the second sha1 is the one we want: when + ;; there's a conflict, the first sha1 is absent (and the + ;; first size seems to correspond to the file with + ;; conflict markers). + ((eq (char-after (match-beginning 1)) ?a) 'removed) + ;; If there is no parent, this must be a new repo. + ;; If file is in dirstate, can only be added (b#8025). + ((or (not (match-beginning 4)) + (eq (char-after (match-beginning 4)) ?a)) 'added) + ((or (and (eq (string-to-number (match-string 3)) + (nth 7 (file-attributes file))) + (equal (match-string 5) + (save-match-data (vc-bzr-sha1 file))) + ;; For a file, does the executable state match? + ;; (Bug#7544) + (or (not + (eq (char-after (match-beginning 1)) ?f)) + (let ((exe + (memq + ?x + (mapcar + 'identity + (nth 8 (file-attributes file)))))) + (if (eq (char-after (match-beginning 7)) + ?y) + exe + (not exe))))) + (and + ;; It looks like for lightweight + ;; checkouts \2 is empty and we need to + ;; look for size in \6. + (eq (match-beginning 2) (match-end 2)) + (eq (string-to-number (match-string 6)) + (nth 7 (file-attributes file))) + (equal (match-string 5) + (vc-bzr-sha1 file)))) + 'up-to-date) + (t 'edited))))) + ;; The dirstate file can't be read, or some other problem. + (error + (message "Falling back on \"slow\" status detection (%S)" err) + (vc-bzr-state file)))))) (defun vc-bzr-registered (file) From 6d1a623ec4125ba74f482c4610abe696abd97c5e Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 18 May 2012 19:15:11 -0400 Subject: [PATCH 544/564] Further small Makefile install simplifications * Makefile.in (install-arch-indep, install-info, install-man): Simplify some one-sided ifs. --- ChangeLog | 3 +++ Makefile.in | 41 +++++++++++++++++------------------------ 2 files changed, 20 insertions(+), 24 deletions(-) diff --git a/ChangeLog b/ChangeLog index fc5861320f3..3d4e8512af0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2012-05-18 Glenn Morris + * Makefile.in (install-arch-indep, install-info, install-man): + Simplify some one-sided ifs. + * Makefile.in: Install only the relevant DOC file. (install-arch-indep): Delete etc/DOC*. (install-doc): No more need to delete etc/DOC. diff --git a/Makefile.in b/Makefile.in index 4a21a798350..6af348d1269 100644 --- a/Makefile.in +++ b/Makefile.in @@ -563,14 +563,13 @@ install-arch-indep: install-leim install-info install-man ${INSTALL_ARCH_INDEP_E ${write_subdir} subdir=$(DESTDIR)${datadir}/emacs/site-lisp ; \ ${write_subdir} || true - -unset CDPATH; \ - if [ -n "${GZIP_PROG}" ]; \ - then \ - echo "Compressing *.el ..." ; \ - (cd $(DESTDIR)${lispdir}; for f in `find . -name "*.elc" -print`; do \ - ${GZIP_PROG} -9n `echo $$f|sed 's/.elc$$/.el/'` ; \ - done) \ - else true; fi + [ -z "${GZIP_PROG}" ] || \ + ( echo "Compressing *.el ..." ; \ + unset CDPATH; \ + cd $(DESTDIR)${lispdir}; \ + for f in `find . -name "*.elc" -print`; do \ + ${GZIP_PROG} -9n `echo $$f|sed 's/.elc$$/.el/'` ; \ + done ) -chmod -R a+r $(DESTDIR)${datadir}/emacs/${version} ${COPYDESTS} ## We install only the relevant DOC file if possible @@ -601,14 +600,11 @@ install-info: info umask 022; ${MKDIR_P} $(DESTDIR)${infodir} -unset CDPATH; \ thisdir=`/bin/pwd`; \ - if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd $(DESTDIR)${infodir} && /bin/pwd)` ]; \ - then \ + [ `(cd ${srcdir}/info && /bin/pwd)` = `(cd $(DESTDIR)${infodir} && /bin/pwd)` ] || \ (cd $(DESTDIR)${infodir}; \ - if [ -f dir ]; then true; \ - else \ + [ -f dir ] || \ (cd $${thisdir}; \ ${INSTALL_DATA} ${srcdir}/info/dir $(DESTDIR)${infodir}/dir) ; \ - fi; \ info_misc=`cd $${thisdir}/doc/misc; ${MAKE} echo-info | sed '/ing directory/d'`; \ cd ${srcdir}/info ; \ for elt in ${INFO_NONMISC} $${info_misc}; do \ @@ -616,15 +612,13 @@ install-info: info for f in `ls $$elt $$elt-[1-9] $$elt-[1-9][0-9] 2>/dev/null`; do \ (cd $${thisdir}; \ ${INSTALL_DATA} ${srcdir}/info/$$f $(DESTDIR)${infodir}/$$f); \ - if [ -n "${GZIP_INFO}" ] && [ -n "${GZIP_PROG}" ]; then \ - rm -f $(DESTDIR)${infodir}/$$f.gz; \ - ${GZIP_PROG} -9n $(DESTDIR)${infodir}/$$f; \ - else true; fi; \ + ( [ -n "${GZIP_INFO}" ] && [ -n "${GZIP_PROG}" ] ) || continue ; \ + rm -f $(DESTDIR)${infodir}/$$f.gz; \ + ${GZIP_PROG} -9n $(DESTDIR)${infodir}/$$f; \ done; \ (cd $${thisdir}; \ ${INSTALL_INFO} --info-dir=$(DESTDIR)${infodir} $(DESTDIR)${infodir}/$$elt); \ - done); \ - else true; fi + done) install-man: umask 022; ${MKDIR_P} $(DESTDIR)${man1dir} @@ -632,11 +626,10 @@ install-man: cd ${mansrcdir}; \ for page in *.1; do \ (cd $${thisdir}; \ - ${INSTALL_DATA} ${mansrcdir}/$${page} $(DESTDIR)${man1dir}/$${page}; \ - if [ -n "${GZIP_INFO}" ] && [ -n "${GZIP_PROG}" ]; then \ - rm -f $(DESTDIR)${man1dir}/$${page}.gz; \ - ${GZIP_PROG} -9n $(DESTDIR)${man1dir}/$${page}; \ - else true; fi ); \ + ${INSTALL_DATA} ${mansrcdir}/$${page} $(DESTDIR)${man1dir}/$${page}); \ + ( [ -n "${GZIP_INFO}" ] && [ -n "${GZIP_PROG}" ] ) || continue ; \ + rm -f $(DESTDIR)${man1dir}/$${page}.gz; \ + ${GZIP_PROG} -9n $(DESTDIR)${man1dir}/$${page}; \ done ## Install those items from etc/ that need to end up elsewhere. From d14b00297f7968ee861500dbf79f79ad8c77e494 Mon Sep 17 00:00:00 2001 From: Jay Belanger Date: Fri, 18 May 2012 22:00:48 -0500 Subject: [PATCH 545/564] * calc/calc.el (calc-ensure-consistent-units): New variable. * calc/calc-units.el (math-consistent-units-p, math-check-unit-consistency): New functions. (calc-quick-units, calc-convert-units): Use `math-check-unit-consistency' when `calc-ensure-consistent-units' is non-nil. (calc-extract-units): Fix typo. * doc/misc/calc.texi (Basic Operations on Units, Customizing Calc): Mention `calc-ensure-consistent-units'. --- doc/misc/ChangeLog | 6 ++++++ doc/misc/calc.texi | 18 ++++++++++++++++++ lisp/ChangeLog | 10 ++++++++++ lisp/calc/calc-units.el | 22 +++++++++++++++++++--- lisp/calc/calc.el | 7 +++++++ 5 files changed, 60 insertions(+), 3 deletions(-) diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index c7dd1d3fa82..420fde36b2f 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -1,3 +1,9 @@ +2012-05-19 Jay Belanger + + * doc/misc/calc.texi + (Basic Operations on Units, Customizing Calc): + Mention `calc-ensure-consistent-units'. + 2012-05-14 Andreas Schwab * cc-mode.texi: Avoid space before macro in 4th argument of cross diff --git a/doc/misc/calc.texi b/doc/misc/calc.texi index 48252ceb327..98b5c44abf8 100644 --- a/doc/misc/calc.texi +++ b/doc/misc/calc.texi @@ -27778,6 +27778,11 @@ acres per meter-second.) Remainder units are expressed in terms of ``fundamental'' units like @samp{m} and @samp{s}, regardless of the input units. +If you want to disallow using inconsistent units, you can set the customizable variable +@code{calc-ensure-consistent-units} to @code{t} (@pxref{Customizing Calc}). In this case, +if you request units which are inconsistent with the original units, you will be warned about +it and no conversion will occur. + One special exception is that if you specify a single unit name, and a compatible unit appears somewhere in the units expression, then that compatible unit will be converted to the new unit and the @@ -35591,6 +35596,19 @@ as @samp{a/(b*c)}. If @code{calc-multiplication-has-precedence} is of @code{calc-multiplication-has-precedence} is @code{t}. @end defvar +@defvar calc-ensure-consistent-units +When converting units, the variable @code{calc-ensure-consistent-units} +determines whether or not the target units need to be consistent with the +original units. If @code{calc-ensure-consistent-units} is @code{nil}, then +the target units don't need to have the same dimensions as the original units; +for example, converting @samp{100 ft/s} to @samp{m} will produce @samp{30.48 m/s}. +If @code{calc-ensure-consistent-units} is non-@code{nil}, then the target units +need to have the same dimensions as the original units; for example, converting +@samp{100 ft/s} to @samp{m} will result in an error, since @samp{ft/s} and @samp{m} +have different dimensions. The default value of @code{calc-ensure-consistent-units} +is @code{nil}. +@end defvar + @defvar calc-undo-length The variable @code{calc-undo-length} determines the number of undo steps that Calc will keep track of when @code{calc-quit} is called. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ed24a1eb176..91778032966 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,13 @@ +2012-05-19 Jay Belanger + + * calc/calc.el (calc-ensure-consistent-units): New variable. + + * calc/calc-units.el (math-consistent-units-p, math-check-unit-consistency): + New functions. + (calc-quick-units, calc-convert-units): Use `math-check-unit-consistency' when + `calc-ensure-consistent-units' is non-nil. + (calc-extract-units): Fix typo. + 2012-05-18 Stefan Monnier * vc/vc-bzr.el (vc-bzr-state-heuristic): Save match-data around sha1. diff --git a/lisp/calc/calc-units.el b/lisp/calc/calc-units.el index 9d2583085a2..f4100f38831 100644 --- a/lisp/calc/calc-units.el +++ b/lisp/calc/calc-units.el @@ -370,8 +370,11 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).") (unless (< pos (length units)) (error "Unit number %d not defined" pos)) (if (math-units-in-expr-p expr nil) - (calc-enter-result 1 (format "cun%d" num) - (math-convert-units expr (nth pos units))) + (progn + (if calc-ensure-consistent-units + (math-check-unit-consistency expr units)) + (calc-enter-result 1 (format "cun%d" num) + (math-convert-units expr (nth pos units)))) (calc-enter-result 1 (format "*un%d" num) (math-simplify-units (math-mul expr (nth pos units)))))))) @@ -477,6 +480,8 @@ If EXPR is nil, return nil." (setq units (math-read-expr new-units)) (when (eq (car-safe units) 'error) (error "Bad format in units expression: %s" (nth 2 units))) + (if calc-ensure-consistent-units + (math-check-unit-consistency expr units)) (math-put-default-units units) (let ((unew (math-units-in-expr-p units t)) (std (and (eq (car-safe units) 'var) @@ -560,7 +565,7 @@ If EXPR is nil, return nil." (defun calc-extract-units () (interactive) (calc-slow-wrapper - (calc-enter-result 1 "rmun" (math-simplify-units + (calc-enter-result 1 "exun" (math-simplify-units (math-extract-units (calc-top-n 1)))))) ;; The variables calc-num-units and calc-den-units are local to @@ -914,6 +919,17 @@ If EXPR is nil, return nil." (math-single-units-in-expr-p (nth 1 expr)))) (t 'wrong))) +(defun math-consistent-units-p (expr1 expr2) + "Non-nil if EXPR1 and EXPR2 have consistent units." + (math-numberp (math-get-units (list '/ expr1 expr2)))) + +(defun math-check-unit-consistency (expr units) + "Give an error if EXPR and UNITS do not have consistent units." + (unless (math-consistent-units-p expr units) + (error "New units (%s) are inconsistent with current units (%s)" + (math-format-value units) + (math-format-value (math-get-units expr))))) + (defun math-check-unit-name (v) (and (eq (car-safe v) 'var) (or (assq (nth 1 v) (or math-units-table (math-build-units-table))) diff --git a/lisp/calc/calc.el b/lisp/calc/calc.el index c7cea5f0aef..4d64209dd36 100644 --- a/lisp/calc/calc.el +++ b/lisp/calc/calc.el @@ -418,6 +418,13 @@ in normal mode." :group 'calc :type 'boolean) +(defcustom calc-ensure-consistent-units + nil + "If non-nil, make sure new units are consistent with current units +when converting units." + :group 'calc + :type 'boolean) + (defcustom calc-undo-length 100 "The number of undo steps that will be preserved when Calc is quit." From cd3466e6a5c3200dd7aaca05c3235cdb71bd61c7 Mon Sep 17 00:00:00 2001 From: Jay Belanger Date: Fri, 18 May 2012 22:03:35 -0500 Subject: [PATCH 546/564] * calc/calc-units.el (calc-ensure-consistent-units): Declare. --- lisp/calc/calc-units.el | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lisp/calc/calc-units.el b/lisp/calc/calc-units.el index f4100f38831..ffcba17f530 100644 --- a/lisp/calc/calc-units.el +++ b/lisp/calc/calc-units.el @@ -356,6 +356,8 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).") (math-to-standard-units (calc-top-n 1) nil)))))) +(defvar calc-ensure-consistent-units) + (defun calc-quick-units () (interactive) (calc-slow-wrapper From 6b38973b8ed8616f9f75e4b415ea9c53c34d40d2 Mon Sep 17 00:00:00 2001 From: Jay Belanger Date: Fri, 18 May 2012 22:11:09 -0500 Subject: [PATCH 547/564] * calc/calc-units.el (calc-quick-units): Use the proper units expression. --- lisp/calc/calc-units.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/calc/calc-units.el b/lisp/calc/calc-units.el index ffcba17f530..6d876cf79ba 100644 --- a/lisp/calc/calc-units.el +++ b/lisp/calc/calc-units.el @@ -374,7 +374,7 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).") (if (math-units-in-expr-p expr nil) (progn (if calc-ensure-consistent-units - (math-check-unit-consistency expr units)) + (math-check-unit-consistency expr (nth pos units))) (calc-enter-result 1 (format "cun%d" num) (math-convert-units expr (nth pos units)))) (calc-enter-result 1 (format "*un%d" num) From e7333757bff9dd5fe0c47b98b8e7d53e3d0b1611 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 18 May 2012 23:34:59 -0700 Subject: [PATCH 548/564] * Makefile.in (leim): No need to set PARALLEL. This predates the use of changed.misc etc to serialize the leim build. The leim Makefile used to set .NO_PARALLEL/.NOTPARALLEL for the same reason, but has not done so for many years. --- ChangeLog | 4 ++++ Makefile.in | 5 +---- leim/Makefile.in | 9 ++++++++- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3d4e8512af0..dfc5685508e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2012-05-19 Glenn Morris + + * Makefile.in (leim): No need to set PARALLEL. + 2012-05-18 Glenn Morris * Makefile.in (install-arch-indep, install-info, install-man): diff --git a/Makefile.in b/Makefile.in index 6af348d1269..a007fa00802 100644 --- a/Makefile.in +++ b/Makefile.in @@ -306,11 +306,8 @@ epaths-force: FRC ${srcdir}/build-aux/move-if-change epaths.h.$$$$ src/epaths.h # For parallel make, src should be built before leim. -# "export PARALLEL=0" is for SGI's Make, to prevent it from -# running more than 1 process in the leim directory, especially for -# the $TIT files there. leim: src Makefile FRC - cd leim && PARALLEL=0 $(MAKE) all $(MFLAGS) + cd leim && $(MAKE) all $(MFLAGS) lib-src src: lib diff --git a/leim/Makefile.in b/leim/Makefile.in index 2d9c9b59481..54ed0ad35fe 100644 --- a/leim/Makefile.in +++ b/leim/Makefile.in @@ -123,8 +123,15 @@ TIT_SOURCES= \ ${CHINESE_TIT}: changed.tit @true -## FIXME remove subdirs if poss - time-stamping. +## FIXME remove subdirs if possible - time-stamping. ## Emacs should make the directory if it does not exist. + +## The changed.* files act to serialize this part of the build. +## A single Emacs invocation creates all the CHINESE_TIT files. +## Otherwise in a parallel build multiple Emacs instances could +## interfere with each other. If we used GNU make we could probably +## parallelize this without the need for an explicit rule for each +## file. changed.tit: ${SUBDIRS} ${TIT_SOURCES} ${RUN_EMACS} -l ${buildlisppath}/international/titdic-cnv \ -f batch-titdic-convert -dir quail ${srcdir}/CXTERM-DIC; \ From 2e5d41e4a784c397889eee38ed8495513e10d6aa Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 18 May 2012 23:36:25 -0700 Subject: [PATCH 549/564] * Makefile.in (lib, lib-src, lisp): Check cd return value. --- ChangeLog | 2 ++ Makefile.in | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index dfc5685508e..3934ab1000e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 2012-05-19 Glenn Morris + * Makefile.in (lib, lib-src, lisp): Check cd return value. + * Makefile.in (leim): No need to set PARALLEL. 2012-05-18 Glenn Morris diff --git a/Makefile.in b/Makefile.in index a007fa00802..5d46ded15b4 100644 --- a/Makefile.in +++ b/Makefile.in @@ -357,7 +357,7 @@ sync-from-gnulib: $(gnulib_srcdir) # These targets should be "${SUBDIR} without `src'". lib lib-src lisp: Makefile FRC - cd $@; $(MAKE) all $(MFLAGS) \ + cd $@ && $(MAKE) all $(MFLAGS) \ CC='${CC}' CFLAGS='${CFLAGS}' CPPFLAGS='${CPPFLAGS}' \ LDFLAGS='${LDFLAGS}' MAKE='${MAKE}' From 9192d37dc57541805091a01ab157c8b7ae38713b Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 18 May 2012 23:42:26 -0700 Subject: [PATCH 550/564] * Makefile.in (SUBDIR): Add leim. Update users. --- ChangeLog | 2 ++ Makefile.in | 27 +++++++++------------------ 2 files changed, 11 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3934ab1000e..bfe905c1eff 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 2012-05-19 Glenn Morris + * Makefile.in (SUBDIR): Add leim. Update users. + * Makefile.in (lib, lib-src, lisp): Check cd return value. * Makefile.in (leim): No need to set PARALLEL. diff --git a/Makefile.in b/Makefile.in index 5d46ded15b4..62df10baa99 100644 --- a/Makefile.in +++ b/Makefile.in @@ -258,14 +258,8 @@ TRANSFORM = @program_transform_name@ EMACS = `echo emacs${EXEEXT} | sed '$(TRANSFORM)'` EMACSFULL = `echo emacs-${version}${EXEEXT} | sed '$(TRANSFORM)'` -# Subdirectories to make recursively. `lisp' is not included -# because the compiled lisp files are part of the distribution. -# leim is not included because it needs special handling. -# -# Actually, we now include `lisp' as well, since the compiled files -# are not included any more in case of bootstrap or in case Emacs was -# checked out from a VCS. -SUBDIR = lib lib-src src lisp +# Subdirectories to make recursively. +SUBDIR = lib lib-src src lisp leim # The subdir makefiles created by config.status. SUBDIR_MAKEFILES_IN = @SUBDIR_MAKEFILES_IN@ @@ -280,7 +274,7 @@ SUBDIR_MAKEFILES = `echo $(SUBDIR_MAKEFILES_IN:.in=) | sed 's|$(srcdir)/||g'` COPYDIR = ${srcdir}/etc ${srcdir}/lisp COPYDESTS = $(DESTDIR)${etcdir} $(DESTDIR)${lispdir} -all: ${SUBDIR} leim +all: ${SUBDIR} removenullpaths=sed -e 's/^://g' -e 's/:$$//g' -e 's/::/:/g' @@ -305,18 +299,15 @@ epaths-force: FRC -e 's;\(#.*PATH_DOC\).*$$;\1 "${docdir}";') && \ ${srcdir}/build-aux/move-if-change epaths.h.$$$$ src/epaths.h -# For parallel make, src should be built before leim. -leim: src Makefile FRC - cd leim && $(MAKE) all $(MFLAGS) - lib-src src: lib src: lib-src FRC -.RECURSIVE: ${SUBDIR} leim +.RECURSIVE: ${SUBDIR} -# We need to build `emacs' in `src' to compile the *.elc files in `lisp'. -lisp: src +# We need to build `emacs' in `src' to compile the *.elc files in `lisp' +# and `leim'. +lisp leim: src # Maintainers can put a copy of gnulib into $(gnulib_srcdir). gnulib_srcdir = ../gnulib @@ -356,7 +347,7 @@ sync-from-gnulib: $(gnulib_srcdir) .PHONY: sync-from-gnulib # These targets should be "${SUBDIR} without `src'". -lib lib-src lisp: Makefile FRC +lib lib-src lisp leim: Makefile FRC cd $@ && $(MAKE) all $(MFLAGS) \ CC='${CC}' CFLAGS='${CFLAGS}' CPPFLAGS='${CPPFLAGS}' \ LDFLAGS='${LDFLAGS}' MAKE='${MAKE}' @@ -818,7 +809,7 @@ maintainer-clean: bootstrap-clean FRC ### the coding standards seem to come from. It's like distclean, but ### it deletes backup and autosave files too. extraclean: - for i in ${SUBDIR} leim; do (cd $$i; $(MAKE) $(MFLAGS) extraclean); done + for i in ${SUBDIR}; do (cd $$i; $(MAKE) $(MFLAGS) extraclean); done ${top_maintainer_clean} -rm -f config-tmp-* -rm -f *~ \#* From 42d5aa3efc642f46b0dcac9f66d848fb838c04ff Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 18 May 2012 23:45:24 -0700 Subject: [PATCH 551/564] * Makefile.in (install-arch-indep): Remove unneeded chmod. Set permissions of lisp/subdirs.el. --- ChangeLog | 3 +++ Makefile.in | 5 +++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index bfe905c1eff..3a442429bc9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2012-05-19 Glenn Morris + * Makefile.in (install-arch-indep): Remove unneeded chmod. + Set permissions of lisp/subdirs.el. + * Makefile.in (SUBDIR): Add leim. Update users. * Makefile.in (lib, lib-src, lisp): Check cd return value. diff --git a/Makefile.in b/Makefile.in index 62df10baa99..d93efc67790 100644 --- a/Makefile.in +++ b/Makefile.in @@ -532,7 +532,6 @@ install-arch-indep: install-leim install-info install-man ${INSTALL_ARCH_INDEP_E [ "$${dir}" != "${srcdir}/etc" ] || rm -f $${dest}/DOC* ; \ find $${dest} -exec chown $${installuser} {} ';' ;\ for subdir in `find $${dest} -type d -print` ; do \ - chmod a+rx $${subdir} ; \ rm -f $${subdir}/.gitignore ; \ rm -f $${subdir}/.arch-inventory ; \ rm -f $${subdir}/.DS_Store ; \ @@ -546,7 +545,7 @@ install-arch-indep: install-leim install-info install-man ${INSTALL_ARCH_INDEP_E done) ; \ done -rm -f $(DESTDIR)${lispdir}/subdirs.el - $(srcdir)/update-subdirs $(DESTDIR)${lispdir} + umask 022; $(srcdir)/update-subdirs $(DESTDIR)${lispdir} subdir=$(DESTDIR)${datadir}/emacs/${version}/site-lisp ; \ ${write_subdir} subdir=$(DESTDIR)${datadir}/emacs/site-lisp ; \ @@ -560,6 +559,8 @@ install-arch-indep: install-leim install-info install-man ${INSTALL_ARCH_INDEP_E done ) -chmod -R a+r $(DESTDIR)${datadir}/emacs/${version} ${COPYDESTS} +# The last chmod isn't needed at present. + ## We install only the relevant DOC file if possible ## (ie DOC-${version}.buildnumber), otherwise DOC-${version}*. ## (Note "otherwise" is inaccurate since 2009-08-23.) From e39b98063324ef3405e1c63ccc3bb0ba8fea7fd7 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 19 May 2012 00:20:16 -0700 Subject: [PATCH 552/564] * Makefile.in (install-arch-indep): Remove unneeded subshell. Combine some rm commands. --- ChangeLog | 3 +++ Makefile.in | 32 ++++++++++++++------------------ 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3a442429bc9..c1dfe02c0ee 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2012-05-19 Glenn Morris + * Makefile.in (install-arch-indep): Remove unneeded subshell. + Combine some rm commands. + * Makefile.in (install-arch-indep): Remove unneeded chmod. Set permissions of lisp/subdirs.el. diff --git a/Makefile.in b/Makefile.in index d93efc67790..f11a8b3ed06 100644 --- a/Makefile.in +++ b/Makefile.in @@ -525,24 +525,20 @@ install-arch-indep: install-leim install-info install-man ${INSTALL_ARCH_INDEP_E continue ; \ rm -rf $${dest} ; \ umask 022; ${MKDIR_P} $${dest} ; \ - (echo "Copying $${dir} to $${dest}..." ; \ - (cd $${dir}; tar -chf - . ) \ - | (cd $${dest}; umask 022; \ - tar -xvf - && cat > /dev/null) || exit 1; \ - [ "$${dir}" != "${srcdir}/etc" ] || rm -f $${dest}/DOC* ; \ - find $${dest} -exec chown $${installuser} {} ';' ;\ - for subdir in `find $${dest} -type d -print` ; do \ - rm -f $${subdir}/.gitignore ; \ - rm -f $${subdir}/.arch-inventory ; \ - rm -f $${subdir}/.DS_Store ; \ - rm -f $${subdir}/\#* ; \ - rm -f $${subdir}/.\#* ; \ - rm -f $${subdir}/*~ ; \ - rm -f $${subdir}/*.orig ; \ - [ "$${dir}" != "${srcdir}/etc" ] && \ - rm -f $${subdir}/[mM]akefile*[.-]in $${subdir}/[mM]akefile ; \ - rm -f $${subdir}/ChangeLog* ; \ - done) ; \ + echo "Copying $${dir} to $${dest}..." ; \ + (cd $${dir}; tar -chf - . ) \ + | (cd $${dest}; umask 022; \ + tar -xvf - && cat > /dev/null) || exit 1; \ + [ "$${dir}" != "${srcdir}/etc" ] || rm -f $${dest}/DOC* ; \ + for subdir in `find $${dest} -type d -print` ; do \ + rm -f $${subdir}/.gitignore $${subdir}/.arch-inventory \ + $${subdir}/.DS_Store $${subdir}/ChangeLog* \ + $${subdir}/\#* $${subdir}/.\#* \ + $${subdir}/*~ $${subdir}/*.orig ; \ + [ "$${dir}" != "${srcdir}/etc" ] && \ + rm -f $${subdir}/[mM]akefile*[.-]in $${subdir}/[mM]akefile ; \ + done ; \ + find $${dest} -exec chown $${installuser} {} ';' ;\ done -rm -f $(DESTDIR)${lispdir}/subdirs.el umask 022; $(srcdir)/update-subdirs $(DESTDIR)${lispdir} From 003fdae20108225e6993e987a46b095765c151f0 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sat, 19 May 2012 01:49:08 -0700 Subject: [PATCH 553/564] Remove no-longer-used macro HAVE_FTIME. * configure.in (machine): Do not set to 'vax', since src/m/vax.h is being removed. (AC_CHECK_FUNCS): Remove ftime. * admin/CPP-DEFINES (HAVE_FTIME): Remove. * nt/config.nt (HAVE_FTIME): Remove undef; not needed. * src/m/vax.h: Remove; no longer needed since HAVE_FTIME is being removed. * src/s/ms-w32.h (HAVE_FTIME): Remove; not needed. --- ChangeLog | 6 ++++++ admin/CPP-DEFINES | 1 - admin/ChangeLog | 4 ++++ configure.in | 4 +--- nt/ChangeLog | 4 ++++ nt/config.nt | 1 - src/ChangeLog | 5 +++++ src/m/vax.h | 23 ----------------------- src/s/ms-w32.h | 1 - 9 files changed, 20 insertions(+), 29 deletions(-) delete mode 100644 src/m/vax.h diff --git a/ChangeLog b/ChangeLog index c1dfe02c0ee..c31ab562f35 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2012-05-19 Paul Eggert + + * configure.in (machine): Do not set to 'vax', since src/m/vax.h + is being removed. + (AC_CHECK_FUNCS): Remove ftime. + 2012-05-19 Glenn Morris * Makefile.in (install-arch-indep): Remove unneeded subshell. diff --git a/admin/CPP-DEFINES b/admin/CPP-DEFINES index c5f8c7ab31f..8310d0d96cc 100644 --- a/admin/CPP-DEFINES +++ b/admin/CPP-DEFINES @@ -120,7 +120,6 @@ HAVE_FMOD HAVE_FPATHCONF HAVE_FREXP HAVE_FSYNC -HAVE_FTIME HAVE_GETCWD HAVE_GETDOMAINNAME HAVE_GETHOSTNAME diff --git a/admin/ChangeLog b/admin/ChangeLog index 01f10f4aea5..deb83a96b50 100644 --- a/admin/ChangeLog +++ b/admin/ChangeLog @@ -1,3 +1,7 @@ +2012-05-19 Paul Eggert + + * CPP-DEFINES (HAVE_FTIME): Remove. + 2012-05-02 Glenn Morris * bzrmerge.el (bzrmerge-skip-regexp): Add "Auto-commit". diff --git a/configure.in b/configure.in index 1599a036096..4aa28d82e56 100644 --- a/configure.in +++ b/configure.in @@ -466,7 +466,6 @@ case "${canonical}" in m68k-*) machine=m68k ;; powerpc-*) machine=macppc ;; sparc*-) machine=sparc ;; - vax-*) machine=vax ;; esac ;; @@ -479,7 +478,6 @@ case "${canonical}" in i386-*) machine=intel386 ;; powerpc-*) machine=macppc ;; sparc*) machine=sparc ;; - vax-*) machine=vax ;; esac ;; @@ -2777,7 +2775,7 @@ AC_SUBST(BLESSMAIL_TARGET) AC_CHECK_FUNCS(gethostname getdomainname \ rename closedir mkdir rmdir sysinfo getrusage get_current_dir_name \ -random lrand48 logb frexp fmod rint cbrt ftime setsid \ +random lrand48 logb frexp fmod rint cbrt setsid \ strerror fpathconf select euidaccess getpagesize tzset setlocale \ utimes getrlimit setrlimit setpgid getcwd getwd shutdown getaddrinfo \ __fpending mblen mbrlen mbsinit strsignal setitimer ualarm \ diff --git a/nt/ChangeLog b/nt/ChangeLog index 0374a3df0f5..22f7bc1d5ea 100644 --- a/nt/ChangeLog +++ b/nt/ChangeLog @@ -1,3 +1,7 @@ +2012-05-19 Paul Eggert + + * config.nt (HAVE_FTIME): Remove undef; not needed. + 2012-05-01 Glenn Morris * config.nt (HAVE_LIBNCURSES): Remove undef; not needed. diff --git a/nt/config.nt b/nt/config.nt index 8b819af5cac..0ae14c93d94 100644 --- a/nt/config.nt +++ b/nt/config.nt @@ -221,7 +221,6 @@ along with GNU Emacs. If not, see . */ #undef HAVE_FMOD #undef HAVE_RINT #undef HAVE_CBRT -#undef HAVE_FTIME #undef HAVE_RES_INIT /* For -lresolv on Suns. */ #undef HAVE_SETSID #undef HAVE_FPATHCONF diff --git a/src/ChangeLog b/src/ChangeLog index b3614db2d55..4e648223497 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2012-05-19 Paul Eggert + + * m/vax.h: Remove; no longer needed since HAVE_FTIME is being removed. + * s/ms-w32.h (HAVE_FTIME): Remove; not needed. + 2012-05-18 Eli Zaretskii Fix compilation with -DGLYPH_DEBUG=1 on MS-Windows. diff --git a/src/m/vax.h b/src/m/vax.h deleted file mode 100644 index e4bed4090b9..00000000000 --- a/src/m/vax.h +++ /dev/null @@ -1,23 +0,0 @@ -/* machine description file for vax. - -Copyright (C) 1985-1986, 2001-2012 Free Software Foundation, Inc. - -This file is part of GNU Emacs. - -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 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 -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU Emacs. If not, see . */ - - -/* #define vax -- appears to be done automatically */ - -#define HAVE_FTIME diff --git a/src/s/ms-w32.h b/src/s/ms-w32.h index e89ecb05931..815ab9101f4 100644 --- a/src/s/ms-w32.h +++ b/src/s/ms-w32.h @@ -147,7 +147,6 @@ struct sigaction { #define HAVE_FMOD 1 #undef HAVE_RINT #undef HAVE_CBRT -#define HAVE_FTIME 1 #undef HAVE_RES_INIT /* For -lresolv on Suns. */ #undef HAVE_SETSID #undef HAVE_FPATHCONF From 21a8caaa4af24f258e6c7f80c1fc913b00aee044 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 19 May 2012 06:17:29 -0400 Subject: [PATCH 554/564] Auto-commit of generated files. --- autogen/config.in | 3 --- autogen/configure | 5 ++--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/autogen/config.in b/autogen/config.in index 10efc70e6d3..56d5d1976f0 100644 --- a/autogen/config.in +++ b/autogen/config.in @@ -254,9 +254,6 @@ along with GNU Emacs. If not, see . */ /* Define to 1 if you have the `fsync' function. */ #undef HAVE_FSYNC -/* Define to 1 if you have the `ftime' function. */ -#undef HAVE_FTIME - /* Define to 1 if you have the `gai_strerror' function. */ #undef HAVE_GAI_STRERROR diff --git a/autogen/configure b/autogen/configure index e397eb8f4b2..559fe4c526c 100755 --- a/autogen/configure +++ b/autogen/configure @@ -4457,7 +4457,6 @@ case "${canonical}" in m68k-*) machine=m68k ;; powerpc-*) machine=macppc ;; sparc*-) machine=sparc ;; - vax-*) machine=vax ;; esac ;; @@ -4470,7 +4469,6 @@ case "${canonical}" in i386-*) machine=intel386 ;; powerpc-*) machine=macppc ;; sparc*) machine=sparc ;; - vax-*) machine=vax ;; esac ;; @@ -10133,6 +10131,7 @@ if test "${HAVE_NS}" = yes; then docdir="\${ns_appresdir}/etc" etcdir="\${ns_appresdir}/etc" infodir="\${ns_appresdir}/info" + mandir="\${ns_appresdir}/man" lispdir="\${ns_appresdir}/lisp" LEIM_INSTALLDIR="\${ns_appresdir}/leim" INSTALL_ARCH_INDEP_EXTRA= @@ -14315,7 +14314,7 @@ esac for ac_func in gethostname getdomainname \ rename closedir mkdir rmdir sysinfo getrusage get_current_dir_name \ -random lrand48 logb frexp fmod rint cbrt ftime setsid \ +random lrand48 logb frexp fmod rint cbrt setsid \ strerror fpathconf select euidaccess getpagesize tzset setlocale \ utimes getrlimit setrlimit setpgid getcwd getwd shutdown getaddrinfo \ __fpending mblen mbrlen mbsinit strsignal setitimer ualarm \ From 76bc2ec7dc90ff0514b090a9801e71a3e92a740a Mon Sep 17 00:00:00 2001 From: Jay Belanger Date: Sat, 19 May 2012 09:59:47 -0500 Subject: [PATCH 555/564] * calc/calc-units.el (math-consistent-units-p): Accept unit systems as consistent units. --- lisp/calc/calc-units.el | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lisp/calc/calc-units.el b/lisp/calc/calc-units.el index 6d876cf79ba..e5c7b6737fb 100644 --- a/lisp/calc/calc-units.el +++ b/lisp/calc/calc-units.el @@ -921,9 +921,12 @@ If EXPR is nil, return nil." (math-single-units-in-expr-p (nth 1 expr)))) (t 'wrong))) -(defun math-consistent-units-p (expr1 expr2) - "Non-nil if EXPR1 and EXPR2 have consistent units." - (math-numberp (math-get-units (list '/ expr1 expr2)))) +(defun math-consistent-units-p (expr newunits) + "Non-nil if EXPR and NEWUNITS have consistent units." + (or + (and (eq (car-safe newunits) 'var) + (assq (nth 1 newunits) math-standard-units-systems)) + (math-numberp (math-get-units (list '/ expr newunits))))) (defun math-check-unit-consistency (expr units) "Give an error if EXPR and UNITS do not have consistent units." From 9232a6d9a7ca8ef3e725899552cfd568463ddcfe Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sat, 19 May 2012 11:04:49 -0700 Subject: [PATCH 556/564] Remove unused HAVE_* symbols for functions. * configure.in (AC_CHECK_FUNCS): Remove XSetWMProtocols, getdomainname, mblen (twice), mbrlen (twice), mbsinit, ualarm, getsockopt, setsockopt, mremap, mempcpy. * admin/CPP-DEFINES (HAVE_GETDOMAINNAME): Remove. * msdos/sed2v2.inp (HAVE_MBLEN): Remove. * msdos/sed2x.inp (HAVE_XSETWMPROTOCOLS): Remove. * nt/config.nt (HAVE_GETDOMAINNAME, HAVE_XSETWMPROTOCOLS) (HAVE_GETSOCKOPT, HAVE_SETSOCKOPT): Remove; not needed. * src/s/ms-w32.h (HAVE_GETDOMAINNAME): Remove; not needed. --- ChangeLog | 4 ++++ admin/CPP-DEFINES | 1 - admin/ChangeLog | 2 ++ configure.in | 12 ++++++------ msdos/ChangeLog | 5 +++++ msdos/sed2v2.inp | 2 -- msdos/sed2x.inp | 1 - nt/ChangeLog | 3 +++ nt/config.nt | 4 ---- src/ChangeLog | 2 ++ src/s/ms-w32.h | 1 - 11 files changed, 22 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index c31ab562f35..3ed2fb71a25 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2012-05-19 Paul Eggert + * configure.in (AC_CHECK_FUNCS): Remove XSetWMProtocols, + getdomainname, mblen (twice), mbrlen (twice), mbsinit, ualarm, + getsockopt, setsockopt, mremap, mempcpy. + * configure.in (machine): Do not set to 'vax', since src/m/vax.h is being removed. (AC_CHECK_FUNCS): Remove ftime. diff --git a/admin/CPP-DEFINES b/admin/CPP-DEFINES index 8310d0d96cc..71ba4bf8ece 100644 --- a/admin/CPP-DEFINES +++ b/admin/CPP-DEFINES @@ -121,7 +121,6 @@ HAVE_FPATHCONF HAVE_FREXP HAVE_FSYNC HAVE_GETCWD -HAVE_GETDOMAINNAME HAVE_GETHOSTNAME HAVE_GETLOADAVG HAVE_GETPAGESIZE diff --git a/admin/ChangeLog b/admin/ChangeLog index deb83a96b50..55504b3d6f8 100644 --- a/admin/ChangeLog +++ b/admin/ChangeLog @@ -1,5 +1,7 @@ 2012-05-19 Paul Eggert + * CPP-DEFINES (HAVE_GETDOMAINNAME): Remove. + * CPP-DEFINES (HAVE_FTIME): Remove. 2012-05-02 Glenn Morris diff --git a/configure.in b/configure.in index 4aa28d82e56..87c9a6cd276 100644 --- a/configure.in +++ b/configure.in @@ -1873,7 +1873,7 @@ if test "${HAVE_X11}" = "yes"; then fi AC_CHECK_FUNCS(XrmSetDatabase XScreenResourceString \ -XScreenNumberOfScreen XSetWMProtocols) +XScreenNumberOfScreen) fi if test "${window_system}" = "x11"; then @@ -2773,15 +2773,15 @@ esac AC_SUBST(BLESSMAIL_TARGET) -AC_CHECK_FUNCS(gethostname getdomainname \ +AC_CHECK_FUNCS(gethostname \ rename closedir mkdir rmdir sysinfo getrusage get_current_dir_name \ random lrand48 logb frexp fmod rint cbrt setsid \ strerror fpathconf select euidaccess getpagesize tzset setlocale \ utimes getrlimit setrlimit setpgid getcwd getwd shutdown getaddrinfo \ -__fpending mblen mbrlen mbsinit strsignal setitimer ualarm \ -sendto recvfrom getsockopt setsockopt getsockname getpeername \ -gai_strerror mkstemp getline getdelim mremap fsync sync \ -difftime mempcpy mblen mbrlen posix_memalign \ +__fpending strsignal setitimer \ +sendto recvfrom getsockname getpeername \ +gai_strerror mkstemp getline getdelim fsync sync \ +difftime posix_memalign \ getpwent endpwent getgrent endgrent \ cfmakeraw cfsetspeed copysign __executable_start) diff --git a/msdos/ChangeLog b/msdos/ChangeLog index 603baa978e0..46472373e51 100644 --- a/msdos/ChangeLog +++ b/msdos/ChangeLog @@ -1,3 +1,8 @@ +2012-05-19 Paul Eggert + + * sed2v2.inp (HAVE_MBLEN): Remove. + * sed2x.inp (HAVE_XSETWMPROTOCOLS): Remove. + 2012-04-21 Eli Zaretskii * sedleim.inp (RUN_EMACS): Replace BUILT_EMACS with EMACS. diff --git a/msdos/sed2v2.inp b/msdos/sed2v2.inp index 7c7a4ad6271..06a59513af7 100644 --- a/msdos/sed2v2.inp +++ b/msdos/sed2v2.inp @@ -46,7 +46,6 @@ /^#undef HAVE_SETRLIMIT *$/s/^.*$/#define HAVE_SETRLIMIT 1/ /^#undef HAVE_GETRUSAGE *$/s/^.*$/#define HAVE_GETRUSAGE 1/ /^#undef HAVE_TM_GMTOFF *$/s/^.*$/#define HAVE_TM_GMTOFF 1/ -/^#undef HAVE_MBLEN *$/s/^.*$/#define HAVE_MBLEN 1/ /^#undef HAVE_STRUCT_TIMEZONE *$/s/^.*$/#define HAVE_STRUCT_TIMEZONE 1/ /^#undef HAVE_SIZE_T *$/s/^.*$/#define HAVE_SIZE_T 1/ /^#undef HAVE_MKSTEMP *$/s/^.*$/#define HAVE_MKSTEMP 1/ @@ -119,4 +118,3 @@ s/^#undef HAVE_STRTOULL *$/#define HAVE_STRTOULL 1/ # might be defined in sys/config.h we include at the top of config.h. /^#undef BSTRING/s|#undef|# undef| /^#undef .*$/s|^.*$|/* & */| - diff --git a/msdos/sed2x.inp b/msdos/sed2x.inp index 159c35fd251..fa920246c96 100644 --- a/msdos/sed2x.inp +++ b/msdos/sed2x.inp @@ -20,6 +20,5 @@ /^#undef HAVE_X11 *$/s/undef/define/ /^#undef HAVE_X_MENU *$/s/undef/define/ /^#undef HAVE_XSCREENNUMBEROFSCREEN *$/s/undef/define/ -/^#undef HAVE_XSETWMPROTOCOLS *$/s/undef/define/ /^#undef HAVE_SELECT *$/s/undef/define/ diff --git a/nt/ChangeLog b/nt/ChangeLog index 22f7bc1d5ea..faf6f80c4c5 100644 --- a/nt/ChangeLog +++ b/nt/ChangeLog @@ -1,5 +1,8 @@ 2012-05-19 Paul Eggert + * config.nt (HAVE_GETDOMAINNAME, HAVE_XSETWMPROTOCOLS) + (HAVE_GETSOCKOPT, HAVE_SETSOCKOPT): Remove; not needed. + * config.nt (HAVE_FTIME): Remove undef; not needed. 2012-05-01 Glenn Morris diff --git a/nt/config.nt b/nt/config.nt index 0ae14c93d94..9d933c2d0a0 100644 --- a/nt/config.nt +++ b/nt/config.nt @@ -179,7 +179,6 @@ along with GNU Emacs. If not, see . */ #undef GETTIMEOFDAY_ONE_ARGUMENT #endif #undef HAVE_GETHOSTNAME -#undef HAVE_GETDOMAINNAME #undef HAVE_DUP2 #undef HAVE_RENAME #undef HAVE_CLOSEDIR @@ -205,7 +204,6 @@ along with GNU Emacs. If not, see . */ #undef HAVE_XRMSETDATABASE #undef HAVE_XSCREENRESOURCESTRING #undef HAVE_XSCREENNUMBEROFSCREEN -#undef HAVE_XSETWMPROTOCOLS #undef HAVE_MKDIR #undef HAVE_RMDIR @@ -244,8 +242,6 @@ along with GNU Emacs. If not, see . */ #define HAVE_SENDTO 1 #define HAVE_RECVFROM 1 -#define HAVE_GETSOCKOPT 1 -#define HAVE_SETSOCKOPT 1 #define HAVE_GETSOCKNAME 1 #define HAVE_GETPEERNAME 1 #define HAVE_SNPRINTF 1 diff --git a/src/ChangeLog b/src/ChangeLog index 4e648223497..0f1914b6e46 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,7 @@ 2012-05-19 Paul Eggert + * s/ms-w32.h (HAVE_GETDOMAINNAME): Remove; not needed. + * m/vax.h: Remove; no longer needed since HAVE_FTIME is being removed. * s/ms-w32.h (HAVE_FTIME): Remove; not needed. diff --git a/src/s/ms-w32.h b/src/s/ms-w32.h index 815ab9101f4..63fc2f1f62b 100644 --- a/src/s/ms-w32.h +++ b/src/s/ms-w32.h @@ -122,7 +122,6 @@ struct sigaction { #define HAVE_GETTIMEOFDAY 1 #define HAVE_GETHOSTNAME 1 -#undef HAVE_GETDOMAINNAME #define HAVE_DUP2 1 #define HAVE_RENAME 1 #define HAVE_CLOSEDIR 1 From 3858bfe7c9f11d482715879fe40f06ce3dd6c009 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sat, 19 May 2012 14:28:32 -0400 Subject: [PATCH 557/564] * lisp/emacs-lisp/bytecomp.el (byte-compile-root-dir): New var. (byte-compile-warning-prefix, batch-byte-compile-file): Use it. --- lisp/ChangeLog | 5 ++++ lisp/emacs-lisp/bytecomp.el | 51 ++++++++++++++++++++----------------- 2 files changed, 32 insertions(+), 24 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 91778032966..b311fc4fcaa 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-05-19 Stefan Monnier + + * emacs-lisp/bytecomp.el (byte-compile-root-dir): New var. + (byte-compile-warning-prefix, batch-byte-compile-file): Use it. + 2012-05-19 Jay Belanger * calc/calc.el (calc-ensure-consistent-units): New variable. diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el index 9cb0a376e36..91db288feef 100644 --- a/lisp/emacs-lisp/bytecomp.el +++ b/lisp/emacs-lisp/bytecomp.el @@ -1002,12 +1002,14 @@ Each function's symbol gets added to `byte-compile-noruntime-functions'." (defvar byte-compile-last-warned-form nil) (defvar byte-compile-last-logged-file nil) +(defvar byte-compile-root-dir nil + "Directory relative to which file names in error messages are written.") ;; This is used as warning-prefix for the compiler. ;; It is always called with the warnings buffer current. (defun byte-compile-warning-prefix (level entry) (let* ((inhibit-read-only t) - (dir default-directory) + (dir (or byte-compile-root-dir default-directory)) (file (cond ((stringp byte-compile-current-file) (format "%s:" (file-relative-name byte-compile-current-file dir))) @@ -4515,29 +4517,30 @@ already up-to-date." (kill-emacs (if error 1 0)))) (defun batch-byte-compile-file (file) - (if debug-on-error - (byte-compile-file file) - (condition-case err - (byte-compile-file file) - (file-error - (message (if (cdr err) - ">>Error occurred processing %s: %s (%s)" - ">>Error occurred processing %s: %s") - file - (get (car err) 'error-message) - (prin1-to-string (cdr err))) - (let ((destfile (byte-compile-dest-file file))) - (if (file-exists-p destfile) - (delete-file destfile))) - nil) - (error - (message (if (cdr err) - ">>Error occurred processing %s: %s (%s)" - ">>Error occurred processing %s: %s") - file - (get (car err) 'error-message) - (prin1-to-string (cdr err))) - nil)))) + (let ((byte-compile-root-dir (or byte-compile-root-dir default-directory))) + (if debug-on-error + (byte-compile-file file) + (condition-case err + (byte-compile-file file) + (file-error + (message (if (cdr err) + ">>Error occurred processing %s: %s (%s)" + ">>Error occurred processing %s: %s") + file + (get (car err) 'error-message) + (prin1-to-string (cdr err))) + (let ((destfile (byte-compile-dest-file file))) + (if (file-exists-p destfile) + (delete-file destfile))) + nil) + (error + (message (if (cdr err) + ">>Error occurred processing %s: %s (%s)" + ">>Error occurred processing %s: %s") + file + (get (car err) 'error-message) + (prin1-to-string (cdr err))) + nil))))) (defun byte-compile-refresh-preloaded () "Reload any Lisp file that was changed since Emacs was dumped. From afdc34774001166f25e998ba925301338001c3cc Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 19 May 2012 11:47:39 -0700 Subject: [PATCH 558/564] Undo part of previous change, in case it makes command line too long --- ChangeLog | 1 - Makefile.in | 14 +++++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3ed2fb71a25..7e98201cc61 100644 --- a/ChangeLog +++ b/ChangeLog @@ -11,7 +11,6 @@ 2012-05-19 Glenn Morris * Makefile.in (install-arch-indep): Remove unneeded subshell. - Combine some rm commands. * Makefile.in (install-arch-indep): Remove unneeded chmod. Set permissions of lisp/subdirs.el. diff --git a/Makefile.in b/Makefile.in index f11a8b3ed06..74111dc8348 100644 --- a/Makefile.in +++ b/Makefile.in @@ -531,12 +531,16 @@ install-arch-indep: install-leim install-info install-man ${INSTALL_ARCH_INDEP_E tar -xvf - && cat > /dev/null) || exit 1; \ [ "$${dir}" != "${srcdir}/etc" ] || rm -f $${dest}/DOC* ; \ for subdir in `find $${dest} -type d -print` ; do \ - rm -f $${subdir}/.gitignore $${subdir}/.arch-inventory \ - $${subdir}/.DS_Store $${subdir}/ChangeLog* \ - $${subdir}/\#* $${subdir}/.\#* \ - $${subdir}/*~ $${subdir}/*.orig ; \ + rm -f $${subdir}/.gitignore ; \ + rm -f $${subdir}/.arch-inventory ; \ + rm -f $${subdir}/.DS_Store ; \ + rm -f $${subdir}/\#* ; \ + rm -f $${subdir}/.\#* ; \ + rm -f $${subdir}/*~ ; \ + rm -f $${subdir}/*.orig ; \ + rm -f $${subdir}/ChangeLog* ; \ [ "$${dir}" != "${srcdir}/etc" ] && \ - rm -f $${subdir}/[mM]akefile*[.-]in $${subdir}/[mM]akefile ; \ + rm -f $${subdir}/[mM]akefile*[.-]in $${subdir}/[mM]akefile ; \ done ; \ find $${dest} -exec chown $${installuser} {} ';' ;\ done From af006ad50e088b8e2f715a1778fa4caa3ab28d8f Mon Sep 17 00:00:00 2001 From: Ulrich Mueller Date: Sat, 19 May 2012 11:57:10 -0700 Subject: [PATCH 559/564] * Makefile.in (install-etc): Respect DESTDIR. Fixes: debbugs:11518 --- ChangeLog | 4 ++++ Makefile.in | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7e98201cc61..56326b34ddb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2012-05-19 Ulrich Mueller + + * Makefile.in (install-etc): Respect DESTDIR. (Bug#11518) + 2012-05-19 Paul Eggert * configure.in (AC_CHECK_FUNCS): Remove XSetWMProtocols, diff --git a/Makefile.in b/Makefile.in index 74111dc8348..6e0f8703d06 100644 --- a/Makefile.in +++ b/Makefile.in @@ -630,11 +630,11 @@ install-etc: cd ${iconsrcdir} || exit 1; umask 022 ; \ for dir in */*/apps */*/mimetypes; do \ [ -d $${dir} ] || continue ; \ - ( cd $${thisdir}; ${MKDIR_P} ${icondir}/$${dir} ) ; \ + ( cd $${thisdir}; ${MKDIR_P} $(DESTDIR)${icondir}/$${dir} ) ; \ for icon in $${dir}/*.*; do \ [ -r $${icon} ] || continue ; \ ( cd $${thisdir}; \ - ${INSTALL_DATA} ${iconsrcdir}/$${icon} ${icondir}/$${icon} ) \ + ${INSTALL_DATA} ${iconsrcdir}/$${icon} $(DESTDIR)${icondir}/$${icon} ) \ || exit 1; \ done ; \ done From 41a2ce39fa914487fb649edaea1a5e2a8f886bc6 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 19 May 2012 12:04:50 -0700 Subject: [PATCH 560/564] Comments --- Makefile.in | 6 ++++++ leim/Makefile.in | 4 +++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Makefile.in b/Makefile.in index 6e0f8703d06..acaafcd23ae 100644 --- a/Makefile.in +++ b/Makefile.in @@ -511,6 +511,12 @@ set_installuser=for installuser in $${LOGNAME} $${USERNAME} $${USER} \ ## Is it really Emacs's job to create those directories? ## Should we also be ensuring they contain subdirs.el files? ## It would be easy to do, just use write_subdir. + +## Note that we use tar instead of plain old cp -R/-r because the latter +## is apparently not portable (even in 2012!). +## http://lists.gnu.org/archive/html/emacs-devel/2012-05/msg00278.html +## I have no idea which platforms Emacs supports where cp -R does not +## work correctly, and therefore no idea when tar can be replaced. install-arch-indep: install-leim install-info install-man ${INSTALL_ARCH_INDEP_EXTRA} umask 022 ; \ $(MKDIR_P) $(DESTDIR)`echo ${locallisppath} | sed 's,:, $(DESTDIR),g'` diff --git a/leim/Makefile.in b/leim/Makefile.in index 54ed0ad35fe..646102eee71 100644 --- a/leim/Makefile.in +++ b/leim/Makefile.in @@ -131,7 +131,9 @@ ${CHINESE_TIT}: changed.tit ## Otherwise in a parallel build multiple Emacs instances could ## interfere with each other. If we used GNU make we could probably ## parallelize this without the need for an explicit rule for each -## file. +## file. Something like the pattern rule: +## quail/%.el: CXTERM-DIC/%.tit +## It doesn't seem possible to do this with VPATH and suffix rules. changed.tit: ${SUBDIRS} ${TIT_SOURCES} ${RUN_EMACS} -l ${buildlisppath}/international/titdic-cnv \ -f batch-titdic-convert -dir quail ${srcdir}/CXTERM-DIC; \ From 567739fbcb3d46656f7fc4397e89f17334d52cdc Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 19 May 2012 12:17:04 -0700 Subject: [PATCH 561/564] Comments --- Makefile.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Makefile.in b/Makefile.in index acaafcd23ae..ec74a2ec8a9 100644 --- a/Makefile.in +++ b/Makefile.in @@ -517,6 +517,8 @@ set_installuser=for installuser in $${LOGNAME} $${USERNAME} $${USER} \ ## http://lists.gnu.org/archive/html/emacs-devel/2012-05/msg00278.html ## I have no idea which platforms Emacs supports where cp -R does not ## work correctly, and therefore no idea when tar can be replaced. +## See also these comments from 2004 about cp -r working fine: +## http://lists.gnu.org/archive/html/autoconf-patches/2004-11/msg00005.html install-arch-indep: install-leim install-info install-man ${INSTALL_ARCH_INDEP_EXTRA} umask 022 ; \ $(MKDIR_P) $(DESTDIR)`echo ${locallisppath} | sed 's,:, $(DESTDIR),g'` From b2f4d39feba297c55c0547d933c018267d9157f8 Mon Sep 17 00:00:00 2001 From: Ken Brown Date: Sat, 19 May 2012 17:46:43 -0400 Subject: [PATCH 562/564] Improve test for when xg_select should just invoke select (bug#9754). * src/xfns.c (x_in_use): Remove `static' qualifier. * src/xterm.h (x_in_use): Declare. * src/xgselect.c: Include xterm.h. (xg_select): Test `x_in_use' instead of `inhibit_window_system' and `display_arg'. --- src/ChangeLog | 8 ++++++++ src/xfns.c | 2 +- src/xgselect.c | 3 ++- src/xterm.h | 1 + 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 0f1914b6e46..de07e87e7b5 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2012-05-19 Ken Brown + + * xfns.c (x_in_use): Remove `static' qualifier. + * xterm.h (x_in_use): Declare. + * xgselect.c: Include xterm.h. + (xg_select): Test `x_in_use' instead of `inhibit_window_system' + and `display_arg' (bug#9754). + 2012-05-19 Paul Eggert * s/ms-w32.h (HAVE_GETDOMAINNAME): Remove; not needed. diff --git a/src/xfns.c b/src/xfns.c index 510a66d6349..717378f1cd1 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -136,7 +136,7 @@ char *gray_bitmap_bits = gray_bits; /* Nonzero if using X. */ -static int x_in_use; +int x_in_use; static Lisp_Object Qnone; static Lisp_Object Qsuppress_icon; diff --git a/src/xgselect.c b/src/xgselect.c index 8b5ee68e55b..69ad93b3127 100644 --- a/src/xgselect.c +++ b/src/xgselect.c @@ -27,6 +27,7 @@ along with GNU Emacs. If not, see . */ #include #include #include +#include "xterm.h" static GPollFD *gfds; static ptrdiff_t gfds_size; @@ -43,7 +44,7 @@ xg_select (int max_fds, SELECT_TYPE *rfds, SELECT_TYPE *wfds, SELECT_TYPE *efds, int n_gfds = 0, our_tmo = 0, retval = 0, our_fds = 0; int i, nfds, fds_lim, tmo_in_millisec; - if (inhibit_window_system || !display_arg) + if (!x_in_use) return select (max_fds, rfds, wfds, efds, timeout); if (rfds) memcpy (&all_rfds, rfds, sizeof (all_rfds)); diff --git a/src/xterm.h b/src/xterm.h index 86daa7bd27e..89eb493a43c 100644 --- a/src/xterm.h +++ b/src/xterm.h @@ -1038,6 +1038,7 @@ extern void x_clipboard_manager_save_all (void); extern struct x_display_info * check_x_display_info (Lisp_Object); extern Lisp_Object x_get_focus_frame (struct frame *); +extern int x_in_use; #ifdef USE_GTK extern int xg_set_icon (struct frame *, Lisp_Object); From 754b8051171cab674ebf18893c8fbbc98b7ffaa7 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sun, 20 May 2012 06:18:48 -0400 Subject: [PATCH 563/564] Auto-commit of generated files. --- autogen/config.in | 30 ------------------------------ autogen/configure | 12 ++++++------ 2 files changed, 6 insertions(+), 36 deletions(-) diff --git a/autogen/config.in b/autogen/config.in index 56d5d1976f0..b08960e0fd4 100644 --- a/autogen/config.in +++ b/autogen/config.in @@ -269,9 +269,6 @@ along with GNU Emacs. If not, see . */ /* Define to 1 if you have the `getdelim' function. */ #undef HAVE_GETDELIM -/* Define to 1 if you have the `getdomainname' function. */ -#undef HAVE_GETDOMAINNAME - /* Define to 1 if you have the `getgrent' function. */ #undef HAVE_GETGRENT @@ -311,9 +308,6 @@ along with GNU Emacs. If not, see . */ /* Define to 1 if you have the `getsockname' function. */ #undef HAVE_GETSOCKNAME -/* Define to 1 if you have the `getsockopt' function. */ -#undef HAVE_GETSOCKOPT - /* Define to 1 if you have the `gettimeofday' function. */ #undef HAVE_GETTIMEOFDAY @@ -540,24 +534,12 @@ along with GNU Emacs. If not, see . */ /* Define to 1 if you have the header file. */ #undef HAVE_MALLOC_MALLOC_H -/* Define to 1 if you have the `mblen' function. */ -#undef HAVE_MBLEN - -/* Define to 1 if you have the `mbrlen' function. */ -#undef HAVE_MBRLEN - -/* Define to 1 if you have the `mbsinit' function. */ -#undef HAVE_MBSINIT - /* Define to 1 if declares mbstate_t. */ #undef HAVE_MBSTATE_T /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H -/* Define to 1 if you have the `mempcpy' function. */ -#undef HAVE_MEMPCPY - /* Define to 1 if you have mouse menus. (This is automatic if you use X, but the option to specify it remains.) It is also defined with other window systems that support xmenu.c. */ @@ -575,9 +557,6 @@ along with GNU Emacs. If not, see . */ /* Define if you have mouse support. */ #undef HAVE_MOUSE -/* Define to 1 if you have the `mremap' function. */ -#undef HAVE_MREMAP - /* Define to 1 if you have the header file. */ #undef HAVE_NET_IF_DL_H @@ -672,9 +651,6 @@ along with GNU Emacs. If not, see . */ /* Define to 1 if you have the `setsid' function. */ #undef HAVE_SETSID -/* Define to 1 if you have the `setsockopt' function. */ -#undef HAVE_SETSOCKOPT - /* Define to 1 if you have the `shutdown' function. */ #undef HAVE_SHUTDOWN @@ -854,9 +830,6 @@ along with GNU Emacs. If not, see . */ /* Define to 1 if you have the `tzset' function. */ #undef HAVE_TZSET -/* Define to 1 if you have the `ualarm' function. */ -#undef HAVE_UALARM - /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H @@ -936,9 +909,6 @@ along with GNU Emacs. If not, see . */ /* Define to 1 if you have the `XScreenResourceString' function. */ #undef HAVE_XSCREENRESOURCESTRING -/* Define to 1 if you have the `XSetWMProtocols' function. */ -#undef HAVE_XSETWMPROTOCOLS - /* Define if you have usable i18n support. */ #undef HAVE_X_I18N diff --git a/autogen/configure b/autogen/configure index 559fe4c526c..c46e7717bb0 100755 --- a/autogen/configure +++ b/autogen/configure @@ -10903,7 +10903,7 @@ $as_echo "#define HAVE_XKBGETKEYBOARD 1" >>confdefs.h fi for ac_func in XrmSetDatabase XScreenResourceString \ -XScreenNumberOfScreen XSetWMProtocols +XScreenNumberOfScreen do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" @@ -14312,15 +14312,15 @@ esac -for ac_func in gethostname getdomainname \ +for ac_func in gethostname \ rename closedir mkdir rmdir sysinfo getrusage get_current_dir_name \ random lrand48 logb frexp fmod rint cbrt setsid \ strerror fpathconf select euidaccess getpagesize tzset setlocale \ utimes getrlimit setrlimit setpgid getcwd getwd shutdown getaddrinfo \ -__fpending mblen mbrlen mbsinit strsignal setitimer ualarm \ -sendto recvfrom getsockopt setsockopt getsockname getpeername \ -gai_strerror mkstemp getline getdelim mremap fsync sync \ -difftime mempcpy mblen mbrlen posix_memalign \ +__fpending strsignal setitimer \ +sendto recvfrom getsockname getpeername \ +gai_strerror mkstemp getline getdelim fsync sync \ +difftime posix_memalign \ getpwent endpwent getgrent endgrent \ cfmakeraw cfsetspeed copysign __executable_start do : From 1b170bc63c2f3a3fbe6ba6996d5a015e82634909 Mon Sep 17 00:00:00 2001 From: Ken Brown Date: Sun, 20 May 2012 08:19:13 -0400 Subject: [PATCH 564/564] Get rid of compiler warnings on Cygwin. * src/gmalloc.c (_free_internal_nolock, _realloc_internal_nolock) [CYGWIN]: Cast ptr to (char *) before comparing to _heapbase. --- src/ChangeLog | 5 +++++ src/gmalloc.c | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index de07e87e7b5..ea898893073 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2012-05-20 Ken Brown + + * gmalloc.c (_free_internal_nolock, _realloc_internal_nolock) + [CYGWIN]: Cast ptr to (char *) before comparing to _heapbase. + 2012-05-19 Ken Brown * xfns.c (x_in_use): Remove `static' qualifier. diff --git a/src/gmalloc.c b/src/gmalloc.c index 38406fd029a..b53199e7312 100644 --- a/src/gmalloc.c +++ b/src/gmalloc.c @@ -1004,7 +1004,7 @@ _free_internal_nolock (void *ptr) return; #ifdef CYGWIN - if (ptr < _heapbase) + if ((char *) ptr < _heapbase) /* We're being asked to free something in the static heap. */ return; #endif @@ -1341,7 +1341,7 @@ _realloc_internal_nolock (void *ptr, size_t size) return _malloc_internal_nolock (size); #ifdef CYGWIN - if (ptr < _heapbase) + if ((char *) ptr < _heapbase) /* ptr points into the static heap */ return special_realloc (ptr, size); #endif