From 4cb0aa7579893362daebd1c203248f8bcc231f0b Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Tue, 17 Jan 2012 11:29:52 +0100 Subject: * net/tramp.el (tramp-local-end-of-line): New defcustom. (tramp-action-login, tramp-action-yesno, tramp-action-yn) (tramp-action-terminal): Use it. (Bug#10530) --- lisp/ChangeLog | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'lisp/ChangeLog') diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 2813d80d9ff..fa51e7eb28f 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2012-01-17 Michael Albinus + + * net/tramp.el (tramp-local-end-of-line): New defcustom. + (tramp-action-login, tramp-action-yesno, tramp-action-yn) + (tramp-action-terminal): Use it. (Bug#10530) + 2012-01-16 Stefan Monnier * minibuffer.el (completion--replace): Strip properties (bug#10062). -- cgit v1.3 From 8c82b1b4dcca42c29992a71b3f1c9d3803d74d3a Mon Sep 17 00:00:00 2001 From: Alan Mackenzie Date: Tue, 17 Jan 2012 18:46:02 +0000 Subject: Update the ChangeLog. --- lisp/ChangeLog | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'lisp/ChangeLog') diff --git a/lisp/ChangeLog b/lisp/ChangeLog index fa51e7eb28f..f9628202001 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -40,6 +40,17 @@ * dired.el (dired-get-filename): Fix 'verbatim case of previous change. +2012-01-13 Alan Mackenzie + + Fix filling for when filladapt mode is enabled. + + * progmodes/cc-cmds.el (c-fill-paragraph): In the invocation of + c-mask-paragraph, pass in `fill-paragraph' rather than + `fill-region-as-paragraph'. (This is a reversion of a previous + change.) + * progmodes/cc-mode.el (c-basic-common-init): Make + fill-paragraph-handle-comment buffer local and set it to nil. + 2012-01-13 Glenn Morris * dired.el (dired-switches-escape-p): New function. -- cgit v1.3 From 1db03b16182e5661068c21a8828b03ac79b243a2 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Jan 2012 17:27:46 -0500 Subject: Dired fixes for newlines in directory names. * lisp/dired.el (dired-insert-directory): Handle newlines in directory name. (dired-build-subdir-alist): Unescape newlines in directory name. --- lisp/ChangeLog | 5 +++++ lisp/dired.el | 45 +++++++++++++++++++++++++++++++++++++++------ 2 files changed, 44 insertions(+), 6 deletions(-) (limited to 'lisp/ChangeLog') diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f9628202001..0ef61f48679 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-01-17 Glenn Morris + + * dired.el (dired-insert-directory): Handle newlines in directory name. + (dired-build-subdir-alist): Unescape newlines in directory name. + 2012-01-17 Michael Albinus * net/tramp.el (tramp-local-end-of-line): New defcustom. diff --git a/lisp/dired.el b/lisp/dired.el index f1a778ad05a..34fb651db10 100644 --- a/lisp/dired.el +++ b/lisp/dired.el @@ -1172,7 +1172,22 @@ see `dired-use-ls-dired' for more details.") "\\015" (text-properties-at (match-beginning 0))) nil t)) - (set-marker end nil))) + (set-marker end nil)) + ;; Replace any newlines in DIR with literal "\n"s, for the sake + ;; of the header line. To disambiguate a literal "\n" in the + ;; actual dirname, we also replace "\" with "\\". + ;; Personally, I think this should always be done, irrespective + ;; of the value of dired-actual-switches, because: + ;; i) Dired simply does not work with an unescaped newline in + ;; the directory name used in the header (bug=10469#28), and + ;; ii) "\" is always replaced with "\\" in the listing, so doing + ;; it in the header as well makes things consistent. + ;; But at present it is only done if "-b" is in ls-switches, + ;; because newlines in dirnames are uncommon, and people may + ;; have gotten used to seeing unescaped "\" in the headers. + ;; Note: adjust dired-build-subdir-alist if you change this. + (setq dir (replace-regexp-in-string "\\\\" "\\\\" dir nil t) + dir (replace-regexp-in-string "\n" "\\n" dir nil t))) (dired-insert-set-properties opoint (point)) ;; If we used --dired and it worked, the lines are already indented. ;; Otherwise, indent them. @@ -2541,12 +2556,30 @@ instead of `dired-actual-switches'." (delete-region (point) (match-end 1)) (insert new-dir-name)) (setq count (1+ count)) + ;; Undo any escaping of newlines and \ by dired-insert-directory. + ;; Convert "n" preceded by odd number of \ to newline, and \\ to \. + (when (dired-switches-escape-p switches) + (let (temp res) + (mapc (lambda (char) + (cond ((equal char ?\\) + (if temp + (setq res (concat res "\\") + temp nil) + (setq temp "\\"))) + ((and temp (equal char ?n)) + (setq res (concat res "\n") + temp nil)) + (t + (setq res (concat res temp (char-to-string char)) + temp nil)))) + new-dir-name) + (setq new-dir-name res))) (dired-alist-add-1 new-dir-name - ;; Place a sub directory boundary between lines. - (save-excursion - (goto-char (match-beginning 0)) - (beginning-of-line) - (point-marker))))) + ;; Place a sub directory boundary between lines. + (save-excursion + (goto-char (match-beginning 0)) + (beginning-of-line) + (point-marker))))) (if (and (> count 1) (called-interactively-p 'interactive)) (message "Buffer includes %d directories" count))) ;; We don't need to sort it because it is in buffer order per -- cgit v1.3 From 0e6038be96b1641a32620b0f29a5a898a1c4cb31 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Jan 2012 17:33:05 -0500 Subject: * lisp/isearch.el (search-nonincremental-instead): Fix doc typo. --- lisp/ChangeLog | 2 ++ lisp/isearch.el | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) (limited to 'lisp/ChangeLog') diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 0ef61f48679..efb428313e2 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2012-01-17 Glenn Morris + * isearch.el (search-nonincremental-instead): Fix doc typo. + * dired.el (dired-insert-directory): Handle newlines in directory name. (dired-build-subdir-alist): Unescape newlines in directory name. diff --git a/lisp/isearch.el b/lisp/isearch.el index a6cc69be9a6..ce759116860 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el @@ -102,7 +102,7 @@ in Isearch mode is always downcased." :group 'isearch) (defcustom search-nonincremental-instead t - "If non-nil, do a nonincremental search instead if exiting immediately. + "If non-nil, do a nonincremental search instead of exiting immediately. Actually, `isearch-edit-string' is called to let you enter the search string, and RET terminates editing and does a nonincremental search." :type 'boolean -- cgit v1.3 From 71784361eb381ec2b12bd8283724a7addec49079 Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Wed, 18 Jan 2012 10:11:15 +0900 Subject: international/mule-cmds.el (prefer-coding-system): Show a warning message if the default value of file-name-coding-system was not changed. --- lisp/ChangeLog | 6 ++++++ lisp/international/mule-cmds.el | 5 ++++- 2 files changed, 10 insertions(+), 1 deletion(-) (limited to 'lisp/ChangeLog') diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 37286d0780c..f900c7dfa50 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2011-12-30 Kenichi Handa + + * international/mule-cmds.el (prefer-coding-system): Show a + warning message if the default value of file-name-coding-system + was not changed. + 2011-12-29 Michael Albinus * net/tramp-sh.el (tramp-find-shell): Set "remote-shell" property diff --git a/lisp/international/mule-cmds.el b/lisp/international/mule-cmds.el index 0d3f079866e..94b5724c016 100644 --- a/lisp/international/mule-cmds.el +++ b/lisp/international/mule-cmds.el @@ -418,7 +418,10 @@ To prefer, for instance, utf-8, say the following: (if (memq eol-type '(0 1 2)) (setq base (coding-system-change-eol-conversion base eol-type))) - (set-default-coding-systems base))) + (set-default-coding-systems base) + (if (called-interactively-p 'interactive) + (or (eq base default-file-name-coding-system) + (message "The default value of `file-name-coding-system' was not changed because the specified coding system is not suitable for file names."))))) (defvar sort-coding-systems-predicate nil "If non-nil, a predicate function to sort coding systems. -- cgit v1.3 From f3860cea15990321965ecba3961c9f5d5700556f Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Jan 2012 20:33:19 -0500 Subject: files.el doc fixes. * lisp/files.el (auto-mode-alist, inhibit-first-line-modes-regexps) (set-auto-mode): Doc fixes. --- lisp/ChangeLog | 5 +++++ lisp/files.el | 9 ++++----- 2 files changed, 9 insertions(+), 5 deletions(-) (limited to 'lisp/ChangeLog') diff --git a/lisp/ChangeLog b/lisp/ChangeLog index efb428313e2..6ada090d071 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-01-18 Glenn Morris + + * files.el (auto-mode-alist, inhibit-first-line-modes-regexps) + (set-auto-mode): Doc fixes. + 2012-01-17 Glenn Morris * isearch.el (search-nonincremental-instead): Fix doc typo. diff --git a/lisp/files.el b/lisp/files.el index f15c523400d..6056a70d4a1 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -2405,9 +2405,6 @@ If the element has the form (REGEXP FUNCTION NON-NIL), then after calling FUNCTION (if it's not nil), we delete the suffix that matched REGEXP and search the list again for another match. -If the file name matches `inhibit-first-line-modes-regexps', -then `auto-mode-alist' is not processed. - The extensions whose FUNCTION is `archive-mode' should also appear in `auto-coding-alist' with `no-conversion' coding system. @@ -2481,7 +2478,8 @@ See also `auto-mode-alist'.") (defvar inhibit-first-line-modes-regexps (mapcar 'purecopy '("\\.tar\\'" "\\.tgz\\'" "\\.tiff?\\'" "\\.gif\\'" "\\.png\\'" "\\.jpe?g\\'")) - "List of regexps; if one matches a file name, don't look for `-*-'.") + "List of regexps; if one matches a file name, don't look for `-*-'. +See also `inhibit-first-line-modes-suffixes'.") (defvar inhibit-first-line-modes-suffixes nil "List of regexps for what to ignore, for `inhibit-first-line-modes-regexps'. @@ -2550,7 +2548,8 @@ Also applies to `magic-fallback-mode-alist'.") (defun set-auto-mode (&optional keep-mode-if-same) "Select major mode appropriate for current buffer. -To find the right major mode, this function checks for a -*- mode tag, +To find the right major mode, this function checks for a -*- mode tag +\(unless `inhibit-first-line-modes-regexps' says not to), checks for a `mode:' entry in the Local Variables section of the file, checks if it uses an interpreter listed in `interpreter-mode-alist', matches the buffer beginning against `magic-mode-alist', -- cgit v1.3 From 606c44c4cfea818143b9007754331dcf4fa06561 Mon Sep 17 00:00:00 2001 From: Alan Mackenzie Date: Wed, 18 Jan 2012 13:39:32 +0000 Subject: Update ChangeLog. --- lisp/ChangeLog | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'lisp/ChangeLog') diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 6ada090d071..0fea6a47b08 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,27 @@ +2012-01-18 Alan Mackenzie + + Eliminate sluggishness and hangs in fontification of "semicolon + deserts". + + * progmodes/cc-engine.el (c-state-nonlit-pos-interval): change + value 10000 -> 3000. + (c-state-safe-place): Reformulate so it doesn't stack up an + infinite number of wrong entries in c-state-nonlit-pos-cache. + (c-determine-limit-get-base, c-determine-limit): New functions to + determine backward search limits disregarding literals. + (c-find-decl-spots): Amend commenting. + (c-cheap-inside-bracelist-p): New function which detects "={". + + * progmodes/cc-fonts.el + (c-make-font-lock-BO-decl-search-function): Give a limit to a + backward search. + (c-font-lock-declarations): Fix an occurrence of point being + undefined. Check additionally for point being in a bracelist or + near a macro invocation without a semicolon so as to avoid a + fruitless time consuming search for a declarator. Give a more + precise search limit for declarators using the new + c-determine-limit. + 2012-01-18 Glenn Morris * files.el (auto-mode-alist, inhibit-first-line-modes-regexps) -- cgit v1.3 From 34a02f46dce0136ef10deb0f632330c76babbd9c Mon Sep 17 00:00:00 2001 From: Martin Rudalics Date: Thu, 19 Jan 2012 11:38:31 +0100 Subject: Fix handling of persistent window parameters. * window.c (save_window_save, Fcurrent_window_configuration) (Vwindow_persistent_parameters): Do not use Qstate. Rewrite doc-strings. * window.el (window--state-get-1, window-state-get): Do not use special state value for window-persistent-parameters. Rename argument IGNORE to WRITABLE. Rewrite doc-string. (window--state-put-2): Reset all window parameters to nil before assigning values of persistent parameters. * windows.texi (Window Configurations): Rewrite references to persistent window parameters. (Window Parameters): Fix description of persistent window parameters. --- doc/lispref/ChangeLog | 7 +++++ doc/lispref/windows.texi | 57 +++++++++++++++-------------------- lisp/ChangeLog | 8 +++++ lisp/window.el | 78 ++++++++++++++++++++++-------------------------- src/ChangeLog | 6 ++++ src/window.c | 36 +++++++++++----------- 6 files changed, 99 insertions(+), 93 deletions(-) (limited to 'lisp/ChangeLog') diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 4b9531c0e6c..44467d5f51b 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,10 @@ +2012-01-19 Martin Rudalics + + * windows.texi (Window Configurations): Rewrite references to + persistent window parameters. + (Window Parameters): Fix description of persistent window + parameters. + 2012-01-16 Juanma Barranquero * windows.texi (Window Parameters): Use @pxref. diff --git a/doc/lispref/windows.texi b/doc/lispref/windows.texi index 1bff30e45e1..a0f8b61ddfe 100644 --- a/doc/lispref/windows.texi +++ b/doc/lispref/windows.texi @@ -3104,9 +3104,9 @@ window configuration; see @ref{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. This function saves copies of window parameters listed by the -variable @code{window-persistent-parameters}, see @ref{Window -Parameters} for details. +frame. The variable @code{window-persistent-parameters} specifies +whether and which window parameters are saved by this function, see +@ref{Window Parameters} for details. @end defun @defun set-window-configuration configuration @@ -3214,27 +3214,25 @@ 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). -@defun window-state-get &optional window ignore +@defun window-state-get &optional window writable This function returns the state of @var{window} as a Lisp object. The argument @var{window} can be any window and defaults to the root window of the selected frame. -If the optional argument @var{ignore} is non-@code{nil}, this means to +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 on disk and read back in another session. +state shall be written to disk and read back in another session. -The variable @code{window-persistent-parameters} specifies whether and -which window parameters are saved by this function, see @ref{Window -Parameters} for details. +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. @end defun -The value returned by @code{window-state-get} can be converted, using -one of the functions defined by Desktop Save Mode (@pxref{Desktop Save -Mode}), to an object that can be written to a file. Such objects can be -read back and converted to a Lisp object representing the state of the -window. That Lisp object can be used as argument for the following -function in order to restore the state window in another window. +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. @defun window-state-put state &optional window ignore This function puts the window state @var{state} into @var{window}. The @@ -3281,10 +3279,10 @@ states of windows (@pxref{Window Configurations}) do not care about 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 -that when you clone via @code{window-state-put} a window state saved -earlier by @code{window-state-get}, the cloned windows come up with no -parameters at all. The following variable allows to override the -standard behavior. +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. @defvar window-persistent-parameters This variable is an alist specifying which parameters get saved by @@ -3293,32 +3291,25 @@ subsequently restored by @code{set-window-configuration} and @code{window-state-put}, see @ref{Window Configurations}. The @sc{car} of each entry of this alist is the symbol specifying the -parameter. The @sc{cdr} must be one of the following: +parameter. The @sc{cdr} should be one of the following: @table @asis -@item @code{state} -This value means the parameter is saved by @code{window-state-get} -provided its @var{ignore} argument is @code{nil}. The function -@code{current-window-configuration} does not save this parameter. - @item @code{nil} +This value means the parameter is neither saved 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{ignore} +@code{current-window-configuration} and, provided its @var{writable} argument is @code{nil}, by @code{window-state-get}. -@item @code{t} +@item @code{writable} This means that the parameter is saved unconditionally by both @code{current-window-configuration} and @code{window-state-get}. This value should not be used for parameters whose values do not have a read syntax. Otherwise, invoking @code{window-state-put} in another session may fail with an @code{invalid-read-syntax} error. @end table - -Parameters that have been saved are restored to their previous values by -@code{set-window-configuration} respectively are installed by -@code{window-state-put}. Parameters that have not been saved are left -alone by @code{set-window-configuration} respectively are not installed -by @code{window-state-put}. @end defvar Some functions, notably @code{delete-window}, diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 0fea6a47b08..8fa8031d125 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,11 @@ +2012-01-19 Martin Rudalics + + * window.el (window--state-get-1, window-state-get): Do not use + special state value for window-persistent-parameters. Rename + argument IGNORE to WRITABLE. Rewrite doc-string. + (window--state-put-2): Reset all window parameters to nil before + assigning values of persistent parameters. + 2012-01-18 Alan Mackenzie Eliminate sluggishness and hangs in fontification of "semicolon diff --git a/lisp/window.el b/lisp/window.el index 54e5ec9c74c..9122904b0bb 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -3568,7 +3568,7 @@ specific buffers." )) ;;; Window states, how to get them and how to put them in a window. -(defun window--state-get-1 (window &optional ignore) +(defun window--state-get-1 (window &optional writable) "Helper function for `window-state-get'." (let* ((type (cond @@ -3585,29 +3585,22 @@ specific buffers." (normal-height . ,(window-normal-size window)) (normal-width . ,(window-normal-size window t)) (combination-limit . ,(window-combination-limit window)) - ,@(let (list) - ;; Make copies of persistent window parameters whose cdr - ;; is either t or, when IGNORE is non-nil, is either nil - ;; or `state'. - (dolist (pers window-persistent-parameters) - (when (and (consp pers) - (or (eq (cdr pers) t) - (and (memq (cdr pers) '(state nil)) - (not ignore)))) - (let ((par (assq (car pers) (window-parameters window)))) - (setq list (cons (cons (car pers) (when par (cdr par))) - list))))) - ;; Save `clone-of' parameter unless IGNORE or - ;; `window-persistent-parameters' prevail. - (when (and (not (assq 'clone-of (window-parameters window))) - (let ((clone-of - (assq 'clone-of - window-persistent-parameters))) - (when clone-of - (if ignore - (eq (cdr clone-of) t) - (memq (cdr clone-of) '(state nil)))))) - (setq list (cons (cons 'clone-of window) list))) + ,@(let ((parameters (window-parameters window)) + list) + ;; Make copies of those window parameters whose + ;; persistence property is `writable' if WRITABLE is + ;; non-nil and non-nil if WRITABLE is nil. + (dolist (par parameters) + (let ((pers (cdr (assq (car par) + window-persistent-parameters)))) + (when (and pers (or (not writable) (eq pers 'writable))) + (setq list (cons (cons (car par) (cdr par)) list))))) + ;; Add `clone-of' parameter if necessary. + (let ((pers (cdr (assq 'clone-of + window-persistent-parameters)))) + (when (and pers (or (not writable) (eq pers 'writable)) + (not (assq 'clone-of list))) + (setq list (cons (cons 'clone-of window) list)))) (when list `((parameters . ,list)))) ,@(when buffer @@ -3628,31 +3621,34 @@ specific buffers." (scroll-bars . ,(window-scroll-bars window)) (vscroll . ,(window-vscroll window)) (dedicated . ,(window-dedicated-p window)) - (point . ,(if ignore point (copy-marker point))) - (start . ,(if ignore start (copy-marker start))) + (point . ,(if writable point (copy-marker point))) + (start . ,(if writable start (copy-marker start))) ,@(when mark - `((mark . ,(if ignore + `((mark . ,(if writable mark (copy-marker mark)))))))))))) (tail (when (memq type '(vc hc)) (let (list) (setq window (window-child window)) (while window - (setq list (cons (window--state-get-1 window ignore) list)) + (setq list (cons (window--state-get-1 window writable) list)) (setq window (window-right window))) (nreverse list))))) (append head tail))) -(defun window-state-get (&optional window ignore) +(defun window-state-get (&optional window writable) "Return state of WINDOW as a Lisp object. WINDOW can be any window and defaults to the root window of the selected frame. -Optional argument IGNORE non-nil means do not use markers for -sampling positions like `window-point' or `window-start' and do -not record parameters unless `window-persistent-parameters' -requests it. IGNORE should be non-nil when the return value -shall be written to a file and read back in another session. +Optional argument WRITABLE non-nil means do not use markers for +sampling `window-point' and `window-start'. Together, WRITABLE +and the variable `window-persistent-parameters' specify which +window parameters are saved by this function. WRITABLE should be +non-nil when the return value shall be written to a file and read +back in another session. Otherwise, an application may run into +an `invalid-read-syntax' error while attempting to read back the +value from file. The return value can be used as argument for `window-state-put' to put the state recorded here into an arbitrary window. The @@ -3678,7 +3674,7 @@ value can be also stored on disk and read back in a new session." ;; These are probably not needed. ,@(when (window-size-fixed-p window) `((fixed-height . t))) ,@(when (window-size-fixed-p window t) `((fixed-width . t)))) - (window--state-get-1 window ignore))) + (window--state-get-1 window writable))) (defvar window-state-put-list nil "Helper variable for `window-state-put'.") @@ -3757,15 +3753,13 @@ value can be also stored on disk and read back in a new session." (state (cdr (assq 'buffer item)))) (when combination-limit (set-window-combination-limit window combination-limit)) - ;; Assign saved window parameters. If a parameter's value is nil, - ;; don't assign it unless the new window has it set already (which - ;; shouldn't happen unless some `window-configuration-change-hook' - ;; function installed it). + ;; Reset window's parameters and assign saved ones (we might want + ;; a `remove-window-parameters' function here). + (dolist (parameter (window-parameters window)) + (set-window-parameter window (car parameter) nil)) (when parameters (dolist (parameter parameters) - (when (or (cdr parameter) - (window-parameter window (car parameter))) - (set-window-parameter window (car parameter) (cdr parameter))))) + (set-window-parameter window (car parameter) (cdr parameter)))) ;; Process buffer related state. (when state ;; We don't want to raise an error here so we create a buffer if diff --git a/src/ChangeLog b/src/ChangeLog index 3a6e31eede4..faaea4057c5 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2012-01-19 Martin Rudalics + + * window.c (save_window_save, Fcurrent_window_configuration) + (Vwindow_persistent_parameters): Do not use Qstate. Rewrite + doc-strings. + 2012-01-19 Kenichi Handa * character.c (char_width): New function. diff --git a/src/window.c b/src/window.c index 3dc6029d24d..324689498ae 100644 --- a/src/window.c +++ b/src/window.c @@ -57,7 +57,7 @@ static Lisp_Object Qreplace_buffer_in_windows, Qget_mru_window; static Lisp_Object Qwindow_resize_root_window, Qwindow_resize_root_window_vertically; static Lisp_Object Qscroll_up, Qscroll_down, Qscroll_command; static Lisp_Object Qsafe, Qabove, Qbelow; -static Lisp_Object Qauto_buffer_name, Qclone_of, Qstate; +static Lisp_Object Qauto_buffer_name, Qclone_of; static int displayed_window_lines (struct window *); static struct window *decode_window (Lisp_Object); @@ -5889,9 +5889,8 @@ save_window_save (Lisp_Object window, struct Lisp_Vector *vector, int i) tem = XCDR (tem)) { pers = XCAR (tem); - /* Save values for persistent window parameters whose cdr - is either nil or t. */ - if (CONSP (pers) && (NILP (XCDR (pers)) || EQ (XCDR (pers), Qt))) + /* Save values for persistent window parameters. */ + if (CONSP (pers) && !NILP (XCDR (pers))) { par = Fassq (XCAR (pers), w->window_parameters); if (NILP (par)) @@ -5966,7 +5965,9 @@ and for each displayed buffer, where display starts, and the positions of point and mark. An exception is made for point in the current buffer: its value is -not- saved. This also records the currently selected frame, and FRAME's focus -redirection (see `redirect-frame-focus'). */) +redirection (see `redirect-frame-focus'). The variable +`window-persistent-parameters' specifies which window parameters are +saved by this function. */) (Lisp_Object frame) { register Lisp_Object tem; @@ -6504,7 +6505,6 @@ syms_of_window (void) DEFSYM (Qbelow, "below"); DEFSYM (Qauto_buffer_name, "auto-buffer-name"); DEFSYM (Qclone_of, "clone-of"); - DEFSYM (Qstate, "state"); staticpro (&Vwindow_list); @@ -6616,28 +6616,28 @@ function `set-window-combination-limit'. */); DEFVAR_LISP ("window-persistent-parameters", Vwindow_persistent_parameters, doc: /* Alist of persistent window parameters. -Parameters in this list are saved by `current-window-configuration' and -`window-state-get' and subsequently restored to their previous values by -`set-window-configuration' and `window-state-put'. +This alist specifies which window parameters shall get saved by +`current-window-configuration' and `window-state-get' and subsequently +restored to their previous values by `set-window-configuration' and +`window-state-put'. The car of each entry of this alist is the symbol specifying the parameter. The cdr is one of the following: -The symbol `state' means the parameter is saved by `window-state-get' -provided its IGNORE argument is nil. `current-window-configuration' -does not save this parameter. +nil means the parameter is neither saved by `window-state-get' nor by +`current-window-configuration'. -nil means the parameter is saved by `current-window-configuration' and, -provided its IGNORE argument is nil, by `window-state-get'. +t means the parameter is saved by `current-window-configuration' and, +provided its WRITABLE argument is nil, by `window-state-get'. -t means the parameter is saved unconditionally by both -`current-window-configuration' and `window-state-get'. Parameters -without read syntax (like windows or frames) should not use that. +The symbol `writable' means the parameter is saved unconditionally by +both `current-window-configuration' and `window-state-get'. Do not use +this value for parameters without read syntax (like windows or frames). Parameters not saved by `current-window-configuration' or `window-state-get' are left alone by `set-window-configuration' respectively are not installed by `window-state-put'. */); - Vwindow_persistent_parameters = list1 (Fcons (Qclone_of, Qstate)); + Vwindow_persistent_parameters = list1 (Fcons (Qclone_of, Qt)); defsubr (&Sselected_window); defsubr (&Sminibuffer_window); -- cgit v1.3 From 0d0deb382bfc139f4c30f1f17ef1ab410ff94836 Mon Sep 17 00:00:00 2001 From: Julien Danjou Date: Thu, 19 Jan 2012 23:06:49 +0000 Subject: color.el (color-name-to-rgb): Use the white color to find the max color component value and return correctly computed values. (color-name-to-rgb): Add missing float conversion for max value. --- lisp/ChangeLog | 6 ++++++ lisp/color.el | 5 ++++- 2 files changed, 10 insertions(+), 1 deletion(-) (limited to 'lisp/ChangeLog') diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 8fa8031d125..ab813e21922 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2012-01-19 Julien Danjou + + * color.el (color-name-to-rgb): Use the white color to find the max + color component value and return correctly computed values. + (color-name-to-rgb): Add missing float conversion for max value. + 2012-01-19 Martin Rudalics * window.el (window--state-get-1, window-state-get): Do not use diff --git a/lisp/color.el b/lisp/color.el index ff7f0eee4e6..6fab613ba69 100644 --- a/lisp/color.el +++ b/lisp/color.el @@ -53,7 +53,10 @@ numbers, (RED GREEN BLUE), each between 0.0 and 1.0 inclusive. Optional arg FRAME specifies the frame where the color is to be displayed. If FRAME is omitted or nil, use the selected frame. If FRAME cannot display COLOR, return nil." - (mapcar (lambda (x) (/ x 65535.0)) (color-values color frame))) + ;; `colors-values' maximum value is either 65535 or 65280 depending on the + ;; display system. So we use a white conversion to get the max value. + (let ((valmax (float (car (color-values "#ffffff"))))) + (mapcar (lambda (x) (/ x valmax)) (color-values color frame)))) (defun color-rgb-to-hex (red green blue) "Return hexadecimal notation for the color RED GREEN BLUE. -- cgit v1.3 From dd6e3cdd5aa93d7c5125bad0b22cce71df5f04d0 Mon Sep 17 00:00:00 2001 From: Martin Rudalics Date: Fri, 20 Jan 2012 09:12:35 +0100 Subject: In make-help-screen make original minor-mode-map-alist temporarily visible. * help-macro.el (make-help-screen): Temporarily restore original binding for minor-mode-map-alist (Bug#10454). --- lisp/ChangeLog | 5 +++++ lisp/help-macro.el | 9 ++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) (limited to 'lisp/ChangeLog') diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ab813e21922..71211ca9af9 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-01-20 Martin Rudalics + + * help-macro.el (make-help-screen): Temporarily restore original + binding for minor-mode-map-alist (Bug#10454). + 2012-01-19 Julien Danjou * color.el (color-name-to-rgb): Use the white color to find the max diff --git a/lisp/help-macro.el b/lisp/help-macro.el index 0bd6f3c4798..112c72778bc 100644 --- a/lisp/help-macro.el +++ b/lisp/help-macro.el @@ -184,9 +184,12 @@ and then returns." (when config (set-window-configuration config) (setq config nil)) - ;; `defn' must make sure that its frame is - ;; selected, so we won't iconify it below. - (call-interactively defn) + ;; Temporarily rebind `minor-mode-map-alist' + ;; to `new-minor-mode-map-alist' (Bug#10454). + (let ((minor-mode-map-alist new-minor-mode-map-alist)) + ;; `defn' must make sure that its frame is + ;; selected, so we won't iconify it below. + (call-interactively defn)) (when new-frame ;; Do not iconify the selected frame. (unless (eq new-frame (selected-frame)) -- cgit v1.3 From 7b447e9bda80e5de478922771a62c2b3a8f9b2aa Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 20 Jan 2012 16:41:05 -0800 Subject: File-local variable fixes. * lisp/files.el (local-enable-local-variables): Doc fix. (inhibit-local-variables-regexps): Rename from inhibit-first-line-modes-regexps. Keep old name as obsolete alias. Doc fix. Add some extensions from auto-coding-alist. (inhibit-local-variables-suffixes): Rename from inhibit-first-line-modes-suffixes. Doc fix. (inhibit-local-variables-p): New function, extracted from set-auto-mode-1. (set-auto-mode): Doc fix. Respect inhibit-local-variables-regexps. (set-auto-mode-1): Doc fix. Use inhibit-local-variables-p. (hack-local-variables): Doc fix. Make the mode-only case respect enable-local-variables and friends. Respect inhibit-local-variables-regexps for file-locals, but not for directory-locals. (set-visited-file-name): Take account of inhibit-local-variables-regexps. Whether it applies may change as the file name is changed. * lisp/jka-cmpr-hook.el (jka-compr-install): * lisp/jka-compr.el (jka-compr-uninstall): Update for inhibit-first-line-modes-suffixes name change. * etc/NEWS: Mention this change. Fixes: debbugs:10506 --- etc/NEWS | 8 ++ lisp/ChangeLog | 23 ++++ lisp/files.el | 306 +++++++++++++++++++++++++++++++------------------- lisp/jka-cmpr-hook.el | 12 +- lisp/jka-compr.el | 9 +- 5 files changed, 234 insertions(+), 124 deletions(-) (limited to 'lisp/ChangeLog') diff --git a/etc/NEWS b/etc/NEWS index 11537363ef4..743e3ce2e7b 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -369,6 +369,14 @@ turn on `whitespace-mode' for *vc-diff* buffers. Modes should call *** Using "mode: MINOR-MODE" to enable a minor mode is deprecated. Instead, use "eval: (minor-mode 1)". +FIXME: inhibit-first-line-modes-regexps was not mentioned in lispref, +but this probably should be. +*** The variable `inhibit-first-line-modes-regexps' has been renamed +to `inhibit-local-variables-regexps'. As the name suggests, it now +applies to ALL file local variables, not just -*- mode ones. +The associated `inhibit-first-line-modes-suffixes' has been renamed +in the corresponding way. + +++ ** The variable `focus-follows-mouse' now always defaults to nil. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 71211ca9af9..248de3429fa 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,26 @@ +2012-01-21 Glenn Morris + + * files.el (local-enable-local-variables): Doc fix. + (inhibit-local-variables-regexps): Rename from + inhibit-first-line-modes-regexps. Keep old name as obsolete alias. + Doc fix. Add some extensions from auto-coding-alist. + (inhibit-local-variables-suffixes): + Rename from inhibit-first-line-modes-suffixes. Doc fix. + (inhibit-local-variables-p): + New function, extracted from set-auto-mode-1. + (set-auto-mode): Doc fix. Respect inhibit-local-variables-regexps. + (set-auto-mode-1): Doc fix. Use inhibit-local-variables-p. + (hack-local-variables): Doc fix. Make the mode-only case + respect enable-local-variables and friends. + Respect inhibit-local-variables-regexps for file-locals, but + not for directory-locals. + (set-visited-file-name): + Take account of inhibit-local-variables-regexps. + Whether it applies may change as the file name is changed. + * jka-cmpr-hook.el (jka-compr-install): + * jka-compr.el (jka-compr-uninstall): + Update for inhibit-first-line-modes-suffixes name change. + 2012-01-20 Martin Rudalics * help-macro.el (make-help-screen): Temporarily restore original diff --git a/lisp/files.el b/lisp/files.el index 6056a70d4a1..7a72775ac3f 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -510,14 +510,36 @@ and ignores this variable." (other :tag "Query" other)) :group 'find-file) +;; This is an odd variable IMO. +;; You might wonder why it is needed, when we could just do: +;; (set (make-local-variable 'enable-local-variables) nil) +;; These two are not precisely the same. +;; Setting this variable does not cause -*- mode settings to be +;; ignored, whereas setting enable-local-variables does. +;; Only three places in Emacs use this variable: tar and arc modes, +;; and rmail. The first two don't need it. They already use +;; inhibit-local-variables-regexps, which is probably enough, and +;; could also just set enable-local-variables locally to nil. +;; Them setting it has the side-effect that dir-locals cannot apply to +;; eg tar files (?). FIXME Is this appropriate? +;; AFAICS, rmail is the only thing that needs this, and the only +;; reason it uses it is for BABYL files (which are obsolete). +;; These contain "-*- rmail -*-" in the first line, which rmail wants +;; to respect, so that find-file on a BABYL file will switch to +;; rmail-mode automatically (this is nice, but hardly essential, +;; since most people are used to explicitly running a command to +;; access their mail; M-x gnus etc). Rmail files may happen to +;; contain Local Variables sections in messages, which Rmail wants to +;; ignore. So AFAICS the only reason this variable exists is for a +;; minor convenience feature for handling of an obsolete Rmail file format. (defvar local-enable-local-variables t "Like `enable-local-variables' but meant for buffer-local bindings. The meaningful values are nil and non-nil. The default is non-nil. If a major mode sets this to nil, buffer-locally, then any local -variables list in the file will be ignored. +variables list in a file visited in that mode will be ignored. -This variable does not affect the use of major modes -specified in a -*- line.") +This variable does not affect the use of major modes specified +in a -*- line.") (defcustom enable-local-eval 'maybe "Control processing of the \"variable\" `eval' in a file's local variables. @@ -2475,17 +2497,55 @@ of a script, mode MODE is enabled. See also `auto-mode-alist'.") -(defvar inhibit-first-line-modes-regexps - (mapcar 'purecopy '("\\.tar\\'" "\\.tgz\\'" "\\.tiff?\\'" - "\\.gif\\'" "\\.png\\'" "\\.jpe?g\\'")) - "List of regexps; if one matches a file name, don't look for `-*-'. -See also `inhibit-first-line-modes-suffixes'.") - -(defvar inhibit-first-line-modes-suffixes nil - "List of regexps for what to ignore, for `inhibit-first-line-modes-regexps'. -When checking `inhibit-first-line-modes-regexps', we first discard +(define-obsolete-variable-alias 'inhibit-first-line-modes-regexps + 'inhibit-file-local-variables-regexps "24.1") + +;; TODO really this should be a list of modes (eg tar-mode), not regexps, +;; because we are duplicating info from auto-mode-alist. +;; TODO many elements of this list are also in auto-coding-alist. +(defvar inhibit-local-variables-regexps + (mapcar 'purecopy '("\\.tar\\'" "\\.t[bg]z\\'" + "\\.arc\\'" "\\.zip\\'" "\\.lzh\\'" "\\.lha\\'" + "\\.zoo\\'" "\\.[jew]ar\\'" "\\.xpi\\'" "\\.rar\\'" + "\\.7z\\'" + "\\.sx[dmicw]\\'" "\\.odt\\'" + "\\.tiff?\\'" "\\.gif\\'" "\\.png\\'" "\\.jpe?g\\'")) + "List of regexps matching file names in which to ignore local variables. +This includes `-*-' lines as well as trailing \"Local Variables\" sections. +Files matching this list are typically binary file formats. +They may happen to contain sequences that look like local variable +specifications, but are not really, or they may be containers for +member files with their own local variable sections, which are +not appropriate for the containing file. +See also `inhibit-local-variables-suffixes'.") + +(define-obsolete-variable-alias 'inhibit-first-line-modes-suffixes + 'inhibit-local-variables-suffixes "24.1") + +(defvar inhibit-local-variables-suffixes nil + "List of regexps matching suffixes to remove from file names. +When checking `inhibit-local-variables-regexps', we first discard from the end of the file name anything that matches one of these regexps.") +;; TODO explicitly add case-fold-search t? +(defun inhibit-local-variables-p () + "Return non-nil if file local variables should be ignored. +This checks the file (or buffer) name against `inhibit-local-variables-regexps' +and `inhibit-local-variables-suffixes'." + (let ((temp inhibit-local-variables-regexps) + (name (if buffer-file-name + (file-name-sans-versions buffer-file-name) + (buffer-name)))) + (while (let ((sufs inhibit-local-variables-suffixes)) + (while (and sufs (not (string-match (car sufs) name))) + (setq sufs (cdr sufs))) + sufs) + (setq name (substring name 0 (match-beginning 0)))) + (while (and temp + (not (string-match (car temp) name))) + (setq temp (cdr temp))) + temp)) + (defvar auto-mode-interpreter-regexp (purecopy "#![ \t]?\\([^ \t\n]*\ /bin/env[ \t]\\)?\\([^ \t\n]+\\)") @@ -2549,21 +2609,23 @@ Also applies to `magic-fallback-mode-alist'.") "Select major mode appropriate for current buffer. To find the right major mode, this function checks for a -*- mode tag -\(unless `inhibit-first-line-modes-regexps' says not to), checks for a `mode:' entry in the Local Variables section of the file, checks if it uses an interpreter listed in `interpreter-mode-alist', matches the buffer beginning against `magic-mode-alist', compares the filename against the entries in `auto-mode-alist', then matches the buffer beginning against `magic-fallback-mode-alist'. -If `enable-local-variables' is nil, this function does not check for -any mode: tag anywhere in the file. +If `enable-local-variables' is nil, or if the file name matches +`inhibit-local-variables-regexps', this function does not check +for any mode: tag anywhere in the file. If `local-enable-local-variables' +is nil, then the only mode: tag that can be relevant is a -*- one. If the optional argument KEEP-MODE-IF-SAME is non-nil, then we set the major mode only if that would change it. In other words we don't actually set it to the same mode the buffer already has." ;; Look for -*-MODENAME-*- or -*- ... mode: MODENAME; ... -*- - (let (end done mode modes) + (let ((try-locals (not (inhibit-local-variables-p))) + end done mode modes) ;; Once we drop the deprecated feature where mode: is also allowed to ;; specify minor-modes (ie, there can be more than one "mode:"), we can ;; remove this section and just let (hack-local-variables t) handle it. @@ -2571,7 +2633,9 @@ we don't actually set it to the same mode the buffer already has." (save-excursion (goto-char (point-min)) (skip-chars-forward " \t\n") + ;; Note by design local-enable-local-variables does not matter here. (and enable-local-variables + try-locals (setq end (set-auto-mode-1)) (if (save-excursion (search-forward ":" end t)) ;; Find all specifications for the `mode:' variable @@ -2602,8 +2666,12 @@ we don't actually set it to the same mode the buffer already has." (or (set-auto-mode-0 mode keep-mode-if-same) ;; continuing would call minor modes again, toggling them off (throw 'nop nil)))))) + ;; hack-local-variables checks local-enable-local-variables etc, but + ;; we might as well be explicit here for the sake of clarity. (and (not done) enable-local-variables + local-enable-local-variables + try-locals (setq mode (hack-local-variables t)) (not (memq mode modes)) ; already tried and failed (if (not (functionp mode)) @@ -2713,38 +2781,24 @@ same, do nothing and return nil." (defun set-auto-mode-1 () "Find the -*- spec in the buffer. Call with point at the place to start searching from. -If one is found, set point to the beginning -and return the position of the end. -Otherwise, return nil; point may be changed." +If one is found, set point to the beginning and return the position +of the end. Otherwise, return nil; may change point. +The variable `inhibit-local-variables-regexps' can cause a -*- spec to +be ignored; but `enable-local-variables' and `local-enable-local-variables' +have no effect." (let (beg end) (and ;; Don't look for -*- if this file name matches any - ;; of the regexps in inhibit-first-line-modes-regexps. - (let ((temp inhibit-first-line-modes-regexps) - (name (if buffer-file-name - (file-name-sans-versions buffer-file-name) - (buffer-name)))) - (while (let ((sufs inhibit-first-line-modes-suffixes)) - (while (and sufs (not (string-match (car sufs) name))) - (setq sufs (cdr sufs))) - sufs) - (setq name (substring name 0 (match-beginning 0)))) - (while (and temp - (not (string-match (car temp) name))) - (setq temp (cdr temp))) - (not temp)) - + ;; of the regexps in inhibit-local-variables-regexps. + (not (inhibit-local-variables-p)) (search-forward "-*-" (line-end-position - ;; If the file begins with "#!" - ;; (exec interpreter magic), look - ;; for mode frobs in the first two - ;; lines. You cannot necessarily - ;; put them in the first line of - ;; such a file without screwing up - ;; the interpreter invocation. - ;; The same holds for - ;; '\" - ;; in man pages (preprocessor + ;; If the file begins with "#!" (exec + ;; interpreter magic), look for mode frobs + ;; in the first two lines. You cannot + ;; necessarily put them in the first line + ;; of such a file without screwing up the + ;; interpreter invocation. The same holds + ;; for '\" in man pages (preprocessor ;; magic for the `man' program). (and (looking-at "^\\(#!\\|'\\\\\"\\)") 2)) t) (progn @@ -3089,19 +3143,41 @@ Uses `hack-local-variables-apply' to apply the variables. If MODE-ONLY is non-nil, all we do is check whether a \"mode:\" is specified, and return the corresponding mode symbol, or nil. In this case, we try to ignore minor-modes, and only return a -major-mode." +major-mode. + +If `enable-local-variables' or `local-enable-local-variables' is nil, +this function does nothing. If `inhibit-local-variables-regexps' +applies to the file in question, the file is not scanned for +local variables, but directory-local variables may still be applied." + ;; We don't let inhibit-local-variables-p influence the value of + ;; enable-local-variables, because then it would affect dir-local + ;; variables. We don't want to search eg tar files for file local + ;; variable sections, but there is no reason dir-locals cannot apply + ;; to them. The real meaning of inhibit-local-variables-p is "do + ;; not scan this file for local variables". (let ((enable-local-variables (and local-enable-local-variables enable-local-variables)) result) (unless mode-only (setq file-local-variables-alist nil) (report-errors "Directory-local variables error: %s" + ;; Note this is a no-op if enable-local-variables is nil. (hack-dir-local-variables))) - (when (or mode-only enable-local-variables) - ;; If MODE-ONLY is non-nil, and the prop line specifies a mode, - ;; then we're done, and have no need to scan further. - (unless (and (setq result (hack-local-variables-prop-line mode-only)) - mode-only) + ;; This entire function is basically a no-op if enable-local-variables + ;; is nil. All it does is set file-local-variables-alist to nil. + (when enable-local-variables + ;; This part used to ignore enable-local-variables when mode-only + ;; was non-nil. That was inappropriate, eg consider the + ;; (artificial) example of: + ;; (setq local-enable-local-variables nil) + ;; Open a file foo.txt that contains "mode: sh". + ;; It correctly opens in text-mode. + ;; M-x set-visited-file name foo.c, and it incorrectly stays in text-mode. + (unless (or (inhibit-local-variables-p) + ;; If MODE-ONLY is non-nil, and the prop line specifies a + ;; mode, then we're done, and have no need to scan further. + (and (setq result (hack-local-variables-prop-line mode-only)) + mode-only)) ;; Look for "Local variables:" line in last page. (save-excursion (goto-char (point-max)) @@ -3191,14 +3267,13 @@ major-mode." (indirect-variable var)) val) result) (error nil))))) - (forward-line 1))))))))) - ;; Now we've read all the local variables. - ;; If MODE-ONLY is non-nil, return whether the mode was specified. - (cond (mode-only result) - ;; Otherwise, set the variables. - (enable-local-variables - (hack-local-variables-filter result nil) - (hack-local-variables-apply))))) + (forward-line 1)))))))) + ;; Now we've read all the local variables. + ;; If MODE-ONLY is non-nil, return whether the mode was specified. + (if mode-only result + ;; Otherwise, set the variables. + (hack-local-variables-filter result nil) + (hack-local-variables-apply))))) (defun hack-local-variables-apply () "Apply the elements of `file-local-variables-alist'. @@ -3610,7 +3685,7 @@ the old visited file has been renamed to the new name FILENAME." (interactive "FSet visited file name: ") (if (buffer-base-buffer) (error "An indirect buffer cannot visit a file")) - (let (truename) + (let (truename old-try-locals) (if filename (setq filename (if (string-equal filename "") @@ -3635,7 +3710,8 @@ the old visited file has been renamed to the new name FILENAME." (progn (and filename (lock-buffer filename)) (unlock-buffer))) - (setq buffer-file-name filename) + (setq old-try-locals (not (inhibit-local-variables-p)) + buffer-file-name filename) (if filename ; make buffer name reflect filename. (let ((new-name (file-name-nondirectory buffer-file-name))) (setq default-directory (file-name-directory buffer-file-name)) @@ -3655,59 +3731,63 @@ the old visited file has been renamed to the new name FILENAME." (setq buffer-file-number (if filename (nthcdr 10 (file-attributes buffer-file-name)) - nil))) - ;; write-file-functions is normally used for things like ftp-find-file - ;; that visit things that are not local files as if they were files. - ;; Changing to visit an ordinary local file instead should flush the hook. - (kill-local-variable 'write-file-functions) - (kill-local-variable 'local-write-file-hooks) - (kill-local-variable 'revert-buffer-function) - (kill-local-variable 'backup-inhibited) - ;; If buffer was read-only because of version control, - ;; that reason is gone now, so make it writable. - (if vc-mode - (setq buffer-read-only nil)) - (kill-local-variable 'vc-mode) - ;; Turn off backup files for certain file names. - ;; Since this is a permanent local, the major mode won't eliminate it. - (and buffer-file-name - backup-enable-predicate - (not (funcall backup-enable-predicate buffer-file-name)) - (progn - (make-local-variable 'backup-inhibited) - (setq backup-inhibited t))) - (let ((oauto buffer-auto-save-file-name)) - ;; If auto-save was not already on, turn it on if appropriate. - (if (not buffer-auto-save-file-name) - (and buffer-file-name auto-save-default - (auto-save-mode t)) - ;; If auto save is on, start using a new name. - ;; We deliberately don't rename or delete the old auto save - ;; for the old visited file name. This is because perhaps - ;; the user wants to save the new state and then compare with the - ;; previous state from the auto save file. - (setq buffer-auto-save-file-name - (make-auto-save-file-name))) - ;; Rename the old auto save file if any. - (and oauto buffer-auto-save-file-name - (file-exists-p oauto) - (rename-file oauto buffer-auto-save-file-name t))) - (and buffer-file-name - (not along-with-file) - (set-buffer-modified-p t)) - ;; Update the major mode, if the file name determines it. - (condition-case nil - ;; Don't change the mode if it is special. - (or (not change-major-mode-with-file-name) - (get major-mode 'mode-class) - ;; Don't change the mode if the local variable list specifies it. - (hack-local-variables t) - ;; TODO consider making normal-mode handle this case. - (let ((old major-mode)) - (set-auto-mode t) - (or (eq old major-mode) - (hack-local-variables)))) - (error nil))) + nil)) + ;; write-file-functions is normally used for things like ftp-find-file + ;; that visit things that are not local files as if they were files. + ;; Changing to visit an ordinary local file instead should flush the hook. + (kill-local-variable 'write-file-functions) + (kill-local-variable 'local-write-file-hooks) + (kill-local-variable 'revert-buffer-function) + (kill-local-variable 'backup-inhibited) + ;; If buffer was read-only because of version control, + ;; that reason is gone now, so make it writable. + (if vc-mode + (setq buffer-read-only nil)) + (kill-local-variable 'vc-mode) + ;; Turn off backup files for certain file names. + ;; Since this is a permanent local, the major mode won't eliminate it. + (and buffer-file-name + backup-enable-predicate + (not (funcall backup-enable-predicate buffer-file-name)) + (progn + (make-local-variable 'backup-inhibited) + (setq backup-inhibited t))) + (let ((oauto buffer-auto-save-file-name)) + ;; If auto-save was not already on, turn it on if appropriate. + (if (not buffer-auto-save-file-name) + (and buffer-file-name auto-save-default + (auto-save-mode t)) + ;; If auto save is on, start using a new name. + ;; We deliberately don't rename or delete the old auto save + ;; for the old visited file name. This is because perhaps + ;; the user wants to save the new state and then compare with the + ;; previous state from the auto save file. + (setq buffer-auto-save-file-name + (make-auto-save-file-name))) + ;; Rename the old auto save file if any. + (and oauto buffer-auto-save-file-name + (file-exists-p oauto) + (rename-file oauto buffer-auto-save-file-name t))) + (and buffer-file-name + (not along-with-file) + (set-buffer-modified-p t)) + ;; Update the major mode, if the file name determines it. + (condition-case nil + ;; Don't change the mode if it is special. + (or (not change-major-mode-with-file-name) + (get major-mode 'mode-class) + ;; Don't change the mode if the local variable list specifies it. + ;; The file name can influence whether the local variables apply. + (and old-try-locals + ;; h-l-v also checks it, but might as well be explcit. + (not (inhibit-local-variables-p)) + (hack-local-variables t)) + ;; TODO consider making normal-mode handle this case. + (let ((old major-mode)) + (set-auto-mode t) + (or (eq old major-mode) + (hack-local-variables)))) + (error nil)))) (defun write-file (filename &optional confirm) "Write current buffer into file FILENAME. diff --git a/lisp/jka-cmpr-hook.el b/lisp/jka-cmpr-hook.el index d09e64634c3..600ed549731 100644 --- a/lisp/jka-cmpr-hook.el +++ b/lisp/jka-cmpr-hook.el @@ -119,7 +119,7 @@ based on the filename itself and `jka-compr-compression-info-list'." (defun jka-compr-install () "Install jka-compr. This adds entries to `file-name-handler-alist' and `auto-mode-alist' -and `inhibit-first-line-modes-suffixes'." +and `inhibit-local-variables-suffixes'." (setq jka-compr-file-name-handler-entry (cons (jka-compr-build-file-regexp) 'jka-compr-handler)) @@ -145,12 +145,12 @@ and `inhibit-first-line-modes-suffixes'." ;; are chosen right according to the file names ;; sans `.gz'. (push (list (jka-compr-info-regexp x) nil 'jka-compr) auto-mode-alist) - ;; Also add these regexps to - ;; inhibit-first-line-modes-suffixes, so that a - ;; -*- line in the first file of a compressed tar - ;; file doesn't override tar-mode. + ;; Also add these regexps to inhibit-local-variables-suffixes, + ;; so that a -*- line in the first file of a compressed tar file, + ;; or a Local Variables section in a member file at the end of + ;; the tar file don't override tar-mode. (push (jka-compr-info-regexp x) - inhibit-first-line-modes-suffixes))) + inhibit-local-variables-suffixes))) (setq auto-mode-alist (append auto-mode-alist jka-compr-mode-alist-additions)) diff --git a/lisp/jka-compr.el b/lisp/jka-compr.el index 786e4292d5f..8a8d7cdbb52 100644 --- a/lisp/jka-compr.el +++ b/lisp/jka-compr.el @@ -657,16 +657,15 @@ It is not recommended to set this variable permanently to anything but nil.") (defun jka-compr-uninstall () "Uninstall jka-compr. This removes the entries in `file-name-handler-alist' and `auto-mode-alist' -and `inhibit-first-line-modes-suffixes' that were added +and `inhibit-local-variables-suffixes' that were added by `jka-compr-installed'." - ;; Delete from inhibit-first-line-modes-suffixes - ;; what jka-compr-install added. + ;; Delete from inhibit-local-variables-suffixes what jka-compr-install added. (mapc (function (lambda (x) (and (jka-compr-info-strip-extension x) - (setq inhibit-first-line-modes-suffixes + (setq inhibit-local-variables-suffixes (delete (jka-compr-info-regexp x) - inhibit-first-line-modes-suffixes))))) + inhibit-local-variables-suffixes))))) jka-compr-compression-info-list--internal) (let* ((fnha (cons nil file-name-handler-alist)) -- cgit v1.3 From 117a9ea130c92a79b9b6f2a0bdc5fb297256d19c Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 20 Jan 2012 16:42:09 -0800 Subject: * lisp/international/mule.el (auto-coding-alist): Add .tbz. --- lisp/ChangeLog | 2 ++ lisp/international/mule.el | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) (limited to 'lisp/ChangeLog') diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 248de3429fa..58579e18727 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2012-01-21 Glenn Morris + * international/mule.el (auto-coding-alist): Add .tbz. + * files.el (local-enable-local-variables): Doc fix. (inhibit-local-variables-regexps): Rename from inhibit-first-line-modes-regexps. Keep old name as obsolete alias. diff --git a/lisp/international/mule.el b/lisp/international/mule.el index 17163071d3f..d4dd4e4cf24 100644 --- a/lisp/international/mule.el +++ b/lisp/international/mule.el @@ -1668,6 +1668,7 @@ in-place." ;;; FILE I/O +;; TODO many elements of this list are also in inhibit-local-variables-regexps. (defcustom auto-coding-alist ;; .exe and .EXE are added to support archive-mode looking at DOS ;; self-extracting exe archives. @@ -1677,7 +1678,7 @@ arc\\|zip\\|lzh\\|lha\\|zoo\\|[jew]ar\\|xpi\\|rar\\|7z\\|\ ARC\\|ZIP\\|LZH\\|LHA\\|ZOO\\|[JEW]AR\\|XPI\\|RAR\\|7Z\\)\\'" . no-conversion-multibyte) ("\\.\\(exe\\|EXE\\)\\'" . no-conversion) - ("\\.\\(sx[dmicw]\\|odt\\|tar\\|tgz\\)\\'" . no-conversion) + ("\\.\\(sx[dmicw]\\|odt\\|tar\\|t[bg]z\\)\\'" . no-conversion) ("\\.\\(gz\\|Z\\|bz\\|bz2\\|xz\\|gpg\\)\\'" . no-conversion) ("\\.\\(jpe?g\\|png\\|gif\\|tiff?\\|p[bpgn]m\\)\\'" . no-conversion) ("\\.pdf\\'" . no-conversion) -- cgit v1.3 From dd6f2a637de3c4e91a2633e06344b6a0e3bbac70 Mon Sep 17 00:00:00 2001 From: Jay Belanger Date: Fri, 20 Jan 2012 18:46:09 -0600 Subject: calc/calc-units.el (math-put-default-units): Don't use "1" as a default unit. --- lisp/ChangeLog | 5 +++++ lisp/calc/calc-units.el | 19 ++++++++++--------- 2 files changed, 15 insertions(+), 9 deletions(-) (limited to 'lisp/ChangeLog') diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 58579e18727..40e4a8a844a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-01-21 Jay Belanger + + * calc/calc-units.el (math-put-default-units): Don't use "1" as a + default unit. + 2012-01-21 Glenn Morris * international/mule.el (auto-coding-alist): Add .tbz. diff --git a/lisp/calc/calc-units.el b/lisp/calc/calc-units.el index 8f4c79e3f0a..dcbf845c371 100644 --- a/lisp/calc/calc-units.el +++ b/lisp/calc/calc-units.el @@ -415,18 +415,19 @@ If EXPR is nil, return nil." (defun math-put-default-units (expr) "Put the units in EXPR in the default units table." - (let* ((units (math-get-units expr)) - (standard-units (math-get-standard-units expr)) + (let ((units (math-get-units expr))) + (unless (eq units 1) + (let* ((standard-units (math-get-standard-units expr)) (default-units (gethash standard-units math-default-units-table))) - (cond - ((not default-units) - (puthash standard-units (list units) math-default-units-table)) - ((not (equal units (car default-units))) - (puthash standard-units - (list units (car default-units)) - math-default-units-table))))) + (cond + ((not default-units) + (puthash standard-units (list units) math-default-units-table)) + ((not (equal units (car default-units))) + (puthash standard-units + (list units (car default-units)) + math-default-units-table))))))) (defun calc-convert-units (&optional old-units new-units) -- cgit v1.3 From f096042862cdc2d204dfa1017e01a222ea50ce80 Mon Sep 17 00:00:00 2001 From: Jérémy Compostella Date: Sat, 21 Jan 2012 11:02:34 +0100 Subject: Fix windmove-reference-loc miscalculation. --- lisp/ChangeLog | 5 +++++ lisp/windmove.el | 18 +++++++++--------- 2 files changed, 14 insertions(+), 9 deletions(-) (limited to 'lisp/ChangeLog') diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 40e4a8a844a..4790ec98cf6 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-01-21 Jérémy Compostella + + * windmove.el (windmove-reference-loc): Fix + windmove-reference-loc miscalculation. + 2012-01-21 Jay Belanger * calc/calc-units.el (math-put-default-units): Don't use "1" as a diff --git a/lisp/windmove.el b/lisp/windmove.el index 10a564419fb..0523530869b 100644 --- a/lisp/windmove.el +++ b/lisp/windmove.el @@ -417,17 +417,17 @@ supplied, if ARG is greater or smaller than zero, respectively." (- (nth 3 edges) 1)))) (cond ((> effective-arg 0) - top-left) + top-left) ((< effective-arg 0) - bottom-right) + bottom-right) ((= effective-arg 0) - (windmove-coord-add - top-left - (let ((col-row - (posn-col-row - (posn-at-point (window-point window) window)))) - (cons (- (car col-row) (window-hscroll window)) - (cdr col-row))))))))) + (windmove-coord-add + top-left + ;; Don't care whether window is horizontally scrolled - + ;; `posn-at-point' handles that already. See also: + ;; http://lists.gnu.org/archive/html/emacs-devel/2012-01/msg00638.html + (posn-col-row + (posn-at-point (window-point window) window)))))))) ;; This uses the reference location in the current window (calculated ;; by `windmove-reference-loc' above) to find a reference location -- cgit v1.3 From cc6d5805ba054948ee5151e93b4b1318e2a4f5b2 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Sat, 21 Jan 2012 17:02:53 +0100 Subject: * net/tramp-sh.el (tramp-default-user-alist): Don't add "plink", "plink1" and "psftp". (Bug#10530) --- lisp/ChangeLog | 7 ++++++- lisp/net/tramp-sh.el | 4 ++-- 2 files changed, 8 insertions(+), 3 deletions(-) (limited to 'lisp/ChangeLog') diff --git a/lisp/ChangeLog b/lisp/ChangeLog index cbedfa287fa..63679e1580f 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,4 +1,9 @@ -20122-01-21 Kenichi Handa +2012-01-21 Michael Albinus + + * net/tramp-sh.el (tramp-default-user-alist): Don't add "plink", + "plink1" and "psftp". (Bug#10530) + +2012-01-21 Kenichi Handa * international/mule-cmds.el (prefer-coding-system): Show a warning message if the default value of file-name-coding-system diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index 2478253841f..e078a227061 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -419,13 +419,13 @@ detected as prompt when being sent on echoing hosts, therefore.") `(,(concat "\\`" (regexp-opt '("su" "sudo" "ksu")) "\\'") nil "root")) ;; Do not add "ssh" based methods, otherwise ~/.ssh/config would be ignored. +;; Do not add "plink" and "psftp", they ask interactively for the user. ;;;###tramp-autoload (add-to-list 'tramp-default-user-alist `(,(concat "\\`" (regexp-opt - '("rcp" "remcp" "rsh" "telnet" "krlogin" - "plink" "plink1" "pscp" "psftp" "fcp")) + '("rcp" "remcp" "rsh" "telnet" "krlogin" "pscp" "fcp")) "\\'") nil ,(user-login-name))) -- cgit v1.3 From a5509865d7a0dd40bfb6217693ca2684a517d6d0 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Sun, 22 Jan 2012 13:55:36 +0100 Subject: * net/tramp.el (tramp-action-login): Set connection property "login-as". * net/tramp-cache.el (tramp-dump-connection-properties): Do not dump properties, when "login-as" is set. * net/tramp-sh.el (tramp-methods): Add user spec to "pscp" and "psftp". (tramp-default-user-alist): Don't add "pscp". (tramp-do-copy-or-rename-file-out-of-band): Use connection property "login-as", if set. (Bug#10530) --- lisp/ChangeLog | 12 ++++++++++++ lisp/net/tramp-cache.el | 11 ++++++++--- lisp/net/tramp-sh.el | 24 ++++++++++++++++-------- lisp/net/tramp.el | 12 +++++++----- 4 files changed, 43 insertions(+), 16 deletions(-) (limited to 'lisp/ChangeLog') diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 63679e1580f..8ada003d23d 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,15 @@ +2012-01-22 Michael Albinus + + * net/tramp.el (tramp-action-login): Set connection property "login-as". + + * net/tramp-cache.el (tramp-dump-connection-properties): Do not dump + properties, when "login-as" is set. + + * net/tramp-sh.el (tramp-methods): Add user spec to "pscp" and "psftp". + (tramp-default-user-alist): Don't add "pscp". + (tramp-do-copy-or-rename-file-out-of-band): Use connection + property "login-as", if set. (Bug#10530) + 2012-01-21 Michael Albinus * net/tramp-sh.el (tramp-default-user-alist): Don't add "plink", diff --git a/lisp/net/tramp-cache.el b/lisp/net/tramp-cache.el index 03a5fe5b88e..d222dd1011d 100644 --- a/lisp/net/tramp-cache.el +++ b/lisp/net/tramp-cache.el @@ -243,7 +243,7 @@ PROPERTY is set persistent when KEY is a vector." (aset key 3 nil)) (let ((hash (or (gethash key tramp-cache-data) (puthash key (make-hash-table :test 'equal) - tramp-cache-data)))) + tramp-cache-data)))) (puthash property value hash) (setq tramp-cache-data-changed t) (tramp-message key 7 "%s %s" property value) @@ -329,10 +329,15 @@ KEY identifies the connection, it is either a process or a vector." tramp-cache-data-changed (stringp tramp-persistency-file-name)) (let ((cache (copy-hash-table tramp-cache-data))) - ;; Remove temporary data. + ;; Remove temporary data. If there is the key "login-as", we + ;; don't save either, because all other properties might + ;; depend on the login name, and we want to give the + ;; possibility to use another login name later on. (maphash (lambda (key value) - (if (and (vectorp key) (not (tramp-file-name-localname key))) + (if (and (vectorp key) + (not (tramp-file-name-localname key)) + (not (gethash "login-as" value))) (progn (remhash "process-name" value) (remhash "process-buffer" value) diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index e078a227061..38e19730a6d 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -380,7 +380,7 @@ detected as prompt when being sent on echoing hosts, therefore.") (tramp-remote-shell "/bin/sh") (tramp-remote-shell-args ("-c")) (tramp-copy-program "pscp") - (tramp-copy-args (("-P" "%p") ("-scp") ("-p" "%k") + (tramp-copy-args (("-l" "%u") ("-P" "%p") ("-scp") ("-p" "%k") ("-q") ("-r"))) (tramp-copy-keep-date t) (tramp-copy-recursive t) @@ -394,7 +394,7 @@ detected as prompt when being sent on echoing hosts, therefore.") (tramp-remote-shell "/bin/sh") (tramp-remote-shell-args ("-c")) (tramp-copy-program "pscp") - (tramp-copy-args (("-P" "%p") ("-sftp") ("-p" "%k") + (tramp-copy-args (("-l" "%u") ("-P" "%p") ("-sftp") ("-p" "%k") ("-q") ("-r"))) (tramp-copy-keep-date t) (tramp-copy-recursive t) @@ -419,13 +419,12 @@ detected as prompt when being sent on echoing hosts, therefore.") `(,(concat "\\`" (regexp-opt '("su" "sudo" "ksu")) "\\'") nil "root")) ;; Do not add "ssh" based methods, otherwise ~/.ssh/config would be ignored. -;; Do not add "plink" and "psftp", they ask interactively for the user. +;; Do not add "plink" based methods, they ask interactively for the user. ;;;###tramp-autoload (add-to-list 'tramp-default-user-alist `(,(concat "\\`" - (regexp-opt - '("rcp" "remcp" "rsh" "telnet" "krlogin" "pscp" "fcp")) + (regexp-opt '("rcp" "remcp" "rsh" "telnet" "krlogin" "fcp")) "\\'") nil ,(user-login-name))) @@ -2281,8 +2280,10 @@ The method used must be an out-of-band method." ;; Set variables for computing the prompt for reading ;; password. (setq tramp-current-method (tramp-file-name-method v) - tramp-current-user (tramp-file-name-user v) - tramp-current-host (tramp-file-name-real-host v)) + tramp-current-user (or (tramp-file-name-user v) + (tramp-get-connection-property + v "login-as" nil)) + tramp-current-host (tramp-file-name-real-host v)) ;; Expand hops. Might be necessary for gateway methods. (setq v (car (tramp-compute-multi-hops v))) @@ -2309,8 +2310,15 @@ The method used must be an out-of-band method." (setq port (string-to-number (match-string 2 host)) host (string-to-number (match-string 1 host)))) + ;; Check for user. There might be an interactive setting. + (setq user (or (tramp-file-name-user v) + (tramp-get-connection-property v "login-as" nil))) + ;; Compose copy command. - (setq spec (format-spec-make + (setq host (or host "") + user (or user "") + port (or port "") + spec (format-spec-make ?h host ?u user ?p port ?t (tramp-get-connection-property (tramp-get-connection-process v) "temp-file" "") diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 98295c6617a..f13315bc662 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -3115,13 +3115,15 @@ beginning of local filename are not substituted." (defun tramp-action-login (proc vec) "Send the login name." (when (not (stringp tramp-current-user)) - (save-window-excursion - (let ((enable-recursive-minibuffers t)) - (pop-to-buffer (tramp-get-connection-buffer vec)) - (setq tramp-current-user (read-string (match-string 0)))))) - (tramp-message vec 3 "Sending login name `%s'" tramp-current-user) + (setq tramp-current-user + (with-connection-property vec "login-as" + (save-window-excursion + (let ((enable-recursive-minibuffers t)) + (pop-to-buffer (tramp-get-connection-buffer vec)) + (read-string (match-string 0))))))) (with-current-buffer (tramp-get-connection-buffer vec) (tramp-message vec 6 "\n%s" (buffer-string))) + (tramp-message vec 3 "Sending login name `%s'" tramp-current-user) (tramp-send-string vec (concat tramp-current-user tramp-local-end-of-line))) (defun tramp-action-password (proc vec) -- cgit v1.3 From d1a5c3b45081c237658c6f6b74bbd6bc986acb60 Mon Sep 17 00:00:00 2001 From: Juanma Barranquero Date: Mon, 23 Jan 2012 02:10:50 +0100 Subject: lisp/subr.el (display-delayed-warnings): Collapse identical adjacent messages. --- lisp/ChangeLog | 5 +++++ lisp/subr.el | 15 +++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) (limited to 'lisp/ChangeLog') diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 8ada003d23d..ff2b4b5f226 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-01-23 Juanma Barranquero + + * subr.el (display-delayed-warnings): + Collapse identical adjacent messages. + 2012-01-22 Michael Albinus * net/tramp.el (tramp-action-login): Set connection property "login-as". diff --git a/lisp/subr.el b/lisp/subr.el index 14f9192405c..da11b7e982a 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -1857,9 +1857,20 @@ FILE should be the name of a library, with no directory name." (defun display-delayed-warnings () "Display delayed warnings from `delayed-warnings-list'. +Collapse identical adjacent messages into one (plus count). This is the default value of `delayed-warnings-hook'." - (dolist (warning (nreverse delayed-warnings-list)) - (apply 'display-warning warning)) + (let ((count 1) + (warnings (nreverse delayed-warnings-list)) + warning) + (while warnings + (setq warning (pop warnings)) + (if (equal warning (car warnings)) + (setq count (1+ count)) + (when (> count 1) + (setcdr warning (cons (format "%s [%d times]" (cadr warning) count) + (cddr warning))) + (setq count 1)) + (apply 'display-warning warning)))) (setq delayed-warnings-list nil)) (defvar delayed-warnings-hook '(display-delayed-warnings) -- cgit v1.3 From 2724d9c71e29aa0aa298c3534b0b7b18d8fc6202 Mon Sep 17 00:00:00 2001 From: Juanma Barranquero Date: Mon, 23 Jan 2012 03:10:36 +0100 Subject: lisp/subr.el: Rework previous change. * lisp/subr.el (display-delayed-warnings): Doc fix. (collapse-delayed-warnings): New function to collapse identical adjacent warnings. (delayed-warnings-hook): Add it. --- lisp/ChangeLog | 6 ++++-- lisp/subr.el | 27 +++++++++++++++++---------- 2 files changed, 21 insertions(+), 12 deletions(-) (limited to 'lisp/ChangeLog') diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ff2b4b5f226..96c18714709 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,7 +1,9 @@ 2012-01-23 Juanma Barranquero - * subr.el (display-delayed-warnings): - Collapse identical adjacent messages. + * subr.el (display-delayed-warnings): Doc fix. + (collapse-delayed-warnings): New function to collapse identical + adjacent warnings. + (delayed-warnings-hook): Add it. 2012-01-22 Michael Albinus diff --git a/lisp/subr.el b/lisp/subr.el index da11b7e982a..c9e213c86a0 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -1857,23 +1857,30 @@ FILE should be the name of a library, with no directory name." (defun display-delayed-warnings () "Display delayed warnings from `delayed-warnings-list'. -Collapse identical adjacent messages into one (plus count). -This is the default value of `delayed-warnings-hook'." +Used from `delayed-warnings-hook' (which see)." + (dolist (warning (nreverse delayed-warnings-list)) + (apply 'display-warning warning)) + (setq delayed-warnings-list nil)) + +(defun collapse-delayed-warnings () + "Remove duplicates from `delayed-warnings-list'. +Collapse identical adjacent warnings into one (plus count). +Used from `delayed-warnings-hook' (which see)." (let ((count 1) - (warnings (nreverse delayed-warnings-list)) - warning) - (while warnings - (setq warning (pop warnings)) - (if (equal warning (car warnings)) + collapsed warning) + (while delayed-warnings-list + (setq warning (pop delayed-warnings-list)) + (if (equal warning (car delayed-warnings-list)) (setq count (1+ count)) (when (> count 1) (setcdr warning (cons (format "%s [%d times]" (cadr warning) count) (cddr warning))) (setq count 1)) - (apply 'display-warning warning)))) - (setq delayed-warnings-list nil)) + (push warning collapsed))) + (setq delayed-warnings-list (nreverse collapsed)))) -(defvar delayed-warnings-hook '(display-delayed-warnings) +(defvar delayed-warnings-hook '(collapse-delayed-warnings + display-delayed-warnings) "Normal hook run to process delayed warnings. Functions in this hook should access the `delayed-warnings-list' variable (which see) and remove from it the warnings they process.") -- cgit v1.3 From 802a2ae21ff07fa801aa8de843a9b9d496fb459a Mon Sep 17 00:00:00 2001 From: Mike Lamb Date: Mon, 23 Jan 2012 00:12:10 -0800 Subject: Handle comments in eshell-read-hosts-file (tiny change) * lisp/eshell/esh-util.el (eshell-read-hosts-file): Skip comment lines. Fixes: debbugs:10549 --- lisp/ChangeLog | 5 +++++ lisp/eshell/esh-util.el | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) (limited to 'lisp/ChangeLog') diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 96c18714709..297043fa12b 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-01-23 Mike Lamb (tiny change) + + * eshell/esh-util.el (eshell-read-hosts-file): + Skip comment lines. (Bug#10549) + 2012-01-23 Juanma Barranquero * subr.el (display-delayed-warnings): Doc fix. diff --git a/lisp/eshell/esh-util.el b/lisp/eshell/esh-util.el index f111fd91230..8218e91ddc7 100644 --- a/lisp/eshell/esh-util.el +++ b/lisp/eshell/esh-util.el @@ -483,7 +483,7 @@ list." (insert-file-contents eshell-hosts-file) (goto-char (point-min)) (while (re-search-forward - "^\\(\\S-+\\)\\s-+\\(\\S-+\\)\\(\\s-*\\(\\S-+\\)\\)?" nil t) + "^\\([^#[:space:]]+\\)\\s-+\\(\\S-+\\)\\(\\s-*\\(\\S-+\\)\\)?" nil t) (if (match-string 1) (add-to-list 'hosts (match-string 1))) (if (match-string 2) -- cgit v1.3 From d7128bb16449d0b4f0d9735bed049cf5e03d61e9 Mon Sep 17 00:00:00 2001 From: Mike Lamb Date: Mon, 23 Jan 2012 00:18:22 -0800 Subject: * lisp/eshell/esh-util.el (pcomplete/ssh): Remove alias. (tiny change) There is a better pcomplete/ssh defined in pcmpl-unix.el. Fixes: debbugs:10548 --- lisp/ChangeLog | 2 ++ lisp/eshell/em-unix.el | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'lisp/ChangeLog') diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 297043fa12b..97281db4c7c 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -3,6 +3,8 @@ * eshell/esh-util.el (eshell-read-hosts-file): Skip comment lines. (Bug#10549) + * eshell/em-unix.el (pcomplete/ssh): Remove. (Bug#10548) + 2012-01-23 Juanma Barranquero * subr.el (display-delayed-warnings): Doc fix. diff --git a/lisp/eshell/em-unix.el b/lisp/eshell/em-unix.el index f24180b5c7f..296e2ee8b24 100644 --- a/lisp/eshell/em-unix.el +++ b/lisp/eshell/em-unix.el @@ -792,8 +792,6 @@ external command." (funcall (or (pcomplete-find-completion-function (pcomplete-arg 1)) pcomplete-default-completion-function))) -(defalias 'pcomplete/ssh 'pcomplete/rsh) - (defvar block-size) (defvar by-bytes) (defvar dereference-links) -- cgit v1.3