Commit 6ef2e5ef authored by Glenn Morris's avatar Glenn Morris

Merge from emacs-24; up to 2012-11-17T22:12:47Z!eggert@cs.ucla.edu

parents eadf1faa b6729a18
2012-11-21 Glenn Morris <rgm@gnu.org>
* configure.ac (--enable-profiling): Doc fix.
2012-11-20 Paul Eggert <eggert@cs.ucla.edu> 2012-11-20 Paul Eggert <eggert@cs.ucla.edu>
Improve static checking of integer overflow and stack smashing. Improve static checking of integer overflow and stack smashing.
......
...@@ -329,10 +329,15 @@ if test "${enableval}" != "no"; then ...@@ -329,10 +329,15 @@ if test "${enableval}" != "no"; then
fi) fi)
dnl The name of this option is unfortunate. It predates, and has no
dnl relation to, the "sampling-based elisp profiler" added in 24.3.
dnl Actually, it stops it working.
dnl http://lists.gnu.org/archive/html/emacs-devel/2012-11/msg00393.html
AC_ARG_ENABLE(profiling, AC_ARG_ENABLE(profiling,
[AS_HELP_STRING([--enable-profiling], [AS_HELP_STRING([--enable-profiling],
[build emacs with profiling support. [build emacs with low-level, gprof profiling support.
This might not work on all platforms])], Mainly useful for debugging Emacs itself. May not work on
all platforms. Stops profiler.el working.])],
[ac_enable_profiling="${enableval}"],[]) [ac_enable_profiling="${enableval}"],[])
if test x$ac_enable_profiling != x ; then if test x$ac_enable_profiling != x ; then
PROFILING_CFLAGS="-DPROFILING=1 -pg" PROFILING_CFLAGS="-DPROFILING=1 -pg"
......
2012-11-21 Dani Moncayo <dmoncayo@gmail.com>
* display.texi (Auto Scrolling): Fix some inaccuracies, plus
clarifications (Bug#12865).
(Horizontal Scrolling): Clarifications.
2012-11-18 Dani Moncayo <dmoncayo@gmail.com> 2012-11-18 Dani Moncayo <dmoncayo@gmail.com>
* mark.texi (Disabled Transient Mark): Doc fixes (Bug#12746). * mark.texi (Disabled Transient Mark): Doc fixes (Bug#12746).
......
...@@ -213,59 +213,62 @@ entire current defun onto the screen if possible. ...@@ -213,59 +213,62 @@ entire current defun onto the screen if possible.
@node Auto Scrolling @node Auto Scrolling
@section Automatic Scrolling @section Automatic Scrolling
@cindex automatic scrolling
Emacs performs @dfn{automatic scrolling} when point moves out of the Emacs performs @dfn{automatic scrolling} when point moves out of the
visible portion of the text. visible portion of the text. Normally, automatic scrolling centers
point vertically in the window, but there are several ways to alter
this behavior.
@vindex scroll-conservatively @vindex scroll-conservatively
Normally, this centers point vertically within the window. However, If you set @code{scroll-conservatively} to a small number @var{n},
if you set @code{scroll-conservatively} to a small number @var{n}, then moving point just a little off the screen (no more than @var{n}
then if you move point just a little off the screen (less than @var{n} lines) causes Emacs to scroll just enough to bring point back on
lines), Emacs scrolls the text just far enough to bring point back on screen; if doing so fails to make point visible, Emacs scrolls just
screen. If doing so fails to make point visible, Emacs centers point far enough to center point in the window. If you set
in the window. By default, @code{scroll-conservatively} is@tie{}0. @code{scroll-conservatively} to a large number (larger than 100),
If you set @code{scroll-conservatively} to a large number (larger than automatic scrolling never centers point, no matter how far point
100), Emacs will never center point as result of scrolling, even if moves; Emacs always scrolls text just enough to bring point into view,
point moves far away from the text previously displayed in the window. either at the top or bottom of the window depending on the scroll
With such a large value, Emacs will always scroll text just enough for direction. By default, @code{scroll-conservatively} is@tie{}0, which
bringing point into view, so point will end up at the top or bottom of means to always center point in the window.
the window, depending on the scroll direction.
@vindex scroll-step @vindex scroll-step
An alternative way of controlling how Emacs scrolls text is by Another way to control automatic scrolling is to customize the
customizing the variable @code{scroll-step}. Its value determines how variable @code{scroll-step}. Its value determines the number of lines
many lines to scroll the window when point moves off the screen. If by which to automatically scroll, when point moves off the screen. If
moving by that number of lines fails to bring point back into view, scrolling by that number of lines fails to bring point back into view,
point is centered instead. The default value is zero, which causes point is centered instead. The default value is zero, which (by
point to always be centered after scrolling. default) causes point to always be centered after scrolling.
Since both @code{scroll-conservatively} and @code{scroll-step}
control automatic scrolling in contradicting ways, you should set only
one of them. If you customize both, the value of
@code{scroll-conservatively} takes precedence.
@cindex aggressive scrolling @cindex aggressive scrolling
@vindex scroll-up-aggressively @vindex scroll-up-aggressively
@vindex scroll-down-aggressively @vindex scroll-down-aggressively
When the window does scroll by a distance longer than A third way to control automatic scrolling is to customize the
@code{scroll-step}, you can control how aggressively it scrolls by variables @code{scroll-up-aggressively} and
setting the variables @code{scroll-up-aggressively} and @code{scroll-down-aggressively}, which directly specify the vertical
@code{scroll-down-aggressively}. The value of position of point after scrolling. The value of
@code{scroll-up-aggressively} should be either @code{nil}, or a @code{scroll-up-aggressively} should be either @code{nil} (the
fraction @var{f} between 0 and 1. A fraction specifies where on the default), or a floating point number @var{f} between 0 and 1. The
screen to put point when scrolling upward, i.e.@: forward. When point latter means that when point goes below the bottom window edge (i.e.@:
goes off the window end, the new start position is chosen to put point scrolling forward), Emacs scrolls the window so that point is @var{f}
@var{f} parts of the window height from the bottom margin. Thus, parts of the window height from the bottom window edge. Thus, larger
larger @var{f} means more aggressive scrolling: more new text is @var{f} means more aggressive scrolling: more new text is brought into
brought into view. The default value, @code{nil}, is equivalent to view. The default value, @code{nil}, is equivalent to 0.5.
0.5.
Likewise, @code{scroll-down-aggressively} is used when point goes
Likewise, @code{scroll-down-aggressively} is used for scrolling above the bottom window edge (i.e.@: scrolling backward). The value
down, i.e.@: backward. The value specifies how far point should be specifies how far point should be from the top margin of the window
placed from the top margin of the window; thus, as with after scrolling. Thus, as with @code{scroll-up-aggressively}, a
@code{scroll-up-aggressively}, a larger value is more aggressive. larger value is more aggressive.
These two variables are ignored if either @code{scroll-step} or Note that the variables @code{scroll-conservatively},
@code{scroll-conservatively} are set to a non-zero value. @code{scroll-step}, and @code{scroll-up-aggressively} /
@code{scroll-down-aggressively} control automatic scrolling in
contradictory ways. Therefore, you should pick no more than one of
these methods to customize automatic scrolling. In case you customize
multiple variables, the order of priority is:
@code{scroll-conservatively}, then @code{scroll-step}, and finally
@code{scroll-up-aggressively} / @code{scroll-down-aggressively}.
@vindex scroll-margin @vindex scroll-margin
The variable @code{scroll-margin} restricts how close point can come The variable @code{scroll-margin} restricts how close point can come
...@@ -295,10 +298,10 @@ the cursor is left at the edge instead.) ...@@ -295,10 +298,10 @@ the cursor is left at the edge instead.)
@vindex hscroll-margin @vindex hscroll-margin
The variable @code{hscroll-margin} controls how close point can get The variable @code{hscroll-margin} controls how close point can get
to the window's edges before automatic scrolling occurs. It is to the window's left and right edges before automatic scrolling
measured in columns. For example, if the value is 5, then moving occurs. It is measured in columns. For example, if the value is 5,
point within 5 columns of an edge causes horizontal scrolling away then moving point within 5 columns of an edge causes horizontal
from that edge. scrolling away from that edge.
@vindex hscroll-step @vindex hscroll-step
The variable @code{hscroll-step} determines how many columns to The variable @code{hscroll-step} determines how many columns to
......
2012-11-21 Glenn Morris <rgm@gnu.org>
* debugging.texi (Profiling): New section.
(Debugging): Mention profiling in the introduction.
* tips.texi (Compilation Tips): Move profiling to separate section.
* elisp.texi: Add Profiling to detailed menu.
2012-11-21 Martin Rudalics <rudalics@gmx.at>
* windows.texi (Display Action Functions): Fix recently added
example. Suggested by Michael Heerdegen.
2012-11-21 Paul Eggert <eggert@cs.ucla.edu>
Minor cleanup for times as lists of four integers.
* os.texi (Time Parsing): Time values can now be four integers.
2012-11-18 Glenn Morris <rgm@gnu.org> 2012-11-18 Glenn Morris <rgm@gnu.org>
* loading.texi (How Programs Do Loading): Add eager macro expansion. * loading.texi (How Programs Do Loading): Add eager macro expansion.
......
...@@ -32,6 +32,9 @@ program. ...@@ -32,6 +32,9 @@ program.
@item @item
You can use the ERT package to write regression tests for the program. You can use the ERT package to write regression tests for the program.
@xref{Top,the ERT manual,, ERT, ERT: Emacs Lisp Regression Testing}. @xref{Top,the ERT manual,, ERT, ERT: Emacs Lisp Regression Testing}.
@item
You can profile the program to get hints about how to make it more efficient.
@end itemize @end itemize
Other useful tools for debugging input and output problems are the Other useful tools for debugging input and output problems are the
...@@ -43,6 +46,7 @@ function (@pxref{Terminal Output}). ...@@ -43,6 +46,7 @@ function (@pxref{Terminal Output}).
* Edebug:: A source-level Emacs Lisp debugger. * Edebug:: A source-level Emacs Lisp debugger.
* Syntax Errors:: How to find syntax errors. * Syntax Errors:: How to find syntax errors.
* Test Coverage:: Ensuring you have tested all branches in your code. * Test Coverage:: Ensuring you have tested all branches in your code.
* Profiling:: Measuring the resources that your code uses.
@end menu @end menu
@node Debugger @node Debugger
...@@ -809,3 +813,63 @@ never return. If it ever does return, you get a run-time error. ...@@ -809,3 +813,63 @@ never return. If it ever does return, you get a run-time error.
Edebug also has a coverage testing feature (@pxref{Coverage Edebug also has a coverage testing feature (@pxref{Coverage
Testing}). These features partly duplicate each other, and it would Testing}). These features partly duplicate each other, and it would
be cleaner to combine them. be cleaner to combine them.
@node Profiling
@section Profiling
@cindex profiling
@cindex measuring resource usage
@cindex memory usage
If your program is working correctly, but you want to make it run more
quickly or efficiently, the first thing to do is @dfn{profile} your
code so that you know how it is using resources. If you find that one
particular function is responsible for a significant portion of the
runtime, you can start looking for ways to optimize that piece.
Emacs has built-in support for this. To begin profiling, type
@kbd{M-x profiler-start}. You can choose to profile by processor
usage, memory usage, or both. After doing some work, type
@kbd{M-x profiler-report} to display a summary buffer for each
resource that you chose to profile. The names of the report buffers
include the times at which the reports were generated, so you can
generate another report later on without erasing previous results.
When you have finished profiling, type @kbd{M-x profiler-stop} (there
is a small overhead associated with profiling).
The profiler report buffer shows, on each line, a function that was
called, followed by how much resource (processor or memory) it used in
absolute and percentage times since profiling started. If a given
line has a @samp{+} symbol at the left-hand side, you can expand that
line by typing @key{RET}, in order to see the function(s) called by
the higher-level function. Pressing @key{RET} again will collapse
back to the original state.
Press @kbd{j} or @kbd{mouse-2} to jump to the definition of a function.
Press @kbd{d} to view a function's documentation.
You can save a profile to a file using @kbd{C-x C-w}.
You can compare two profiles using @kbd{=}.
@c FIXME reversed calltree?
@cindex @file{elp.el}
@cindex timing programs
The @file{elp} library offers an alternative approach. See the file
@file{elp.el} for instructions.
@cindex @file{benchmark.el}
@cindex benchmarking
You can check the speed of individual Emacs Lisp forms using the
@file{benchmark} library. See the functions @code{benchmark-run} and
@code{benchmark-run-compiled} in @file{benchmark.el}.
@c Not worth putting in the printed manual.
@ifnottex
@cindex --enable-profiling option of configure
For low-level profiling of Emacs itself, you can build it using the
@option{--enable-profiling} option of @command{configure}. When Emacs
exits, it generates a file @file{gmon.out} that you can examine using
the @command{gprof} utility. This feature is mainly useful for
debugging Emacs. It actually stops the Lisp-level @kbd{M-x
profiler-@dots{}} commands described above from working.
@end ifnottex
...@@ -617,6 +617,7 @@ Debugging Lisp Programs ...@@ -617,6 +617,7 @@ Debugging Lisp Programs
* Edebug:: A source-level Emacs Lisp debugger. * Edebug:: A source-level Emacs Lisp debugger.
* Syntax Errors:: How to find syntax errors. * Syntax Errors:: How to find syntax errors.
* Test Coverage:: Ensuring you have tested all branches in your code. * Test Coverage:: Ensuring you have tested all branches in your code.
* Profiling:: Measuring the resources that your code uses.
The Lisp Debugger The Lisp Debugger
......
...@@ -1373,8 +1373,8 @@ on others, years as early as 1901 do work. ...@@ -1373,8 +1373,8 @@ on others, years as early as 1901 do work.
@node Time Parsing @node Time Parsing
@section Parsing and Formatting Times @section Parsing and Formatting Times
These functions convert time values (lists of two or three integers) These functions convert time values to text in a string, and vice versa.
to text in a string, and vice versa. Time values are lists of two to four integers (@pxref{Time of Day}).
@defun date-to-time string @defun date-to-time string
This function parses the time-string @var{string} and returns the This function parses the time-string @var{string} and returns the
......
...@@ -460,18 +460,8 @@ Lisp programs. ...@@ -460,18 +460,8 @@ Lisp programs.
@itemize @bullet @itemize @bullet
@item @item
@cindex profiling Profile your program, to find out where the time is being spent.
@cindex timing programs @xref{Profiling}.
@cindex @file{elp.el}
Profile your program with the @file{elp} library. See the file
@file{elp.el} for instructions.
@item
@cindex @file{benchmark.el}
@cindex benchmarking
Check the speed of individual Emacs Lisp forms using the
@file{benchmark} library. See the functions @code{benchmark-run} and
@code{benchmark-run-compiled} in @file{benchmark.el}.
@item @item
Use iteration rather than recursion whenever possible. Use iteration rather than recursion whenever possible.
......
...@@ -2038,7 +2038,8 @@ Evaluating the form above will cause @code{display-buffer} to proceed as ...@@ -2038,7 +2038,8 @@ Evaluating the form above will cause @code{display-buffer} to proceed as
follows: If `*foo*' already appears on a visible or iconified frame, it follows: If `*foo*' already appears on a visible or iconified frame, it
will reuse its window. Otherwise, it will try to pop up a new window will reuse its window. Otherwise, it will try to pop up a new window
or, if that is impossible, a new frame. If all these steps fail, it or, if that is impossible, a new frame. If all these steps fail, it
will try to use some existing window. will proceed using whatever @code{display-buffer-base-action} and
@code{display-buffer-fallback-action} prescribe.
Furthermore, @code{display-buffer} will try to adjust a reused window Furthermore, @code{display-buffer} will try to adjust a reused window
(provided `*foo*' was put by @code{display-buffer} there before) or a (provided `*foo*' was put by @code{display-buffer} there before) or a
......
...@@ -847,7 +847,7 @@ are deprecated and will be removed eventually. ...@@ -847,7 +847,7 @@ are deprecated and will be removed eventually.
** New sampling-based Elisp profiler. ** New sampling-based Elisp profiler.
Try M-x profiler-start, do some work, and then call M-x profiler-report. Try M-x profiler-start, do some work, and then call M-x profiler-report.
When finished, use M-x profiler-stop. The sampling rate can be based on When finished, use M-x profiler-stop. The sampling rate can be based on
CPU time (only supported on some systems) or memory allocations. CPU time or memory allocations.
+++ +++
** CL-style generalized variables are now in core Elisp. ** CL-style generalized variables are now in core Elisp.
......
2012-11-21 Eli Zaretskii <eliz@gnu.org>
* simple.el (line-move): Don't call line-move-partial if
scroll-conservatively is in effect. (Bug#12927)
2012-11-21 Stefan Monnier <monnier@iro.umontreal.ca>
* eshell/em-cmpl.el (eshell-pcomplete): Refine fix for bug#12838:
Fallback on completion-at-point rather than
pcomplete-expand-and-complete, and only if pcomplete actually failed.
(eshell-cmpl-initialize): Setup completion-at-point.
* pcomplete.el (pcomplete--entries): Obey pcomplete-ignore-case.
* emacs-lisp/ert.el (ert--expand-should-1): Adapt to cl-lib.
2012-11-21 Michael Albinus <michael.albinus@gmx.de>
* net/tramp-sh.el (tramp-do-copy-or-rename-file): If both files
are remote, check out-of-band property for both.
2012-11-21 Stefan Monnier <monnier@iro.umontreal.ca>
* window.el (switch-to-buffer): Re-add the warning that was lost in the
code rewrite.
2012-11-21 Paul Eggert <eggert@cs.ucla.edu>
More minor time fixes.
* calendar/time-date.el: Commentary fix.
* net/tramp-sh.el (tramp-do-file-attributes-with-ls): Undo last change;
too much other code depends on (0 0) time stamps.
* net/tramp.el (tramp-time-less-p, tramp-time-subtract):
Add a couple of FIXME comments.
Minor cleanup for times as lists of four integers.
* files.el (dir-locals-directory-cache):
* ps-bdf.el (bdf-file-mod-time, bdf-read-font-info):
Doc fixes.
* net/tramp-sh.el (tramp-do-file-attributes-with-ls):
* ps-bdf.el (bdf-file-newer-than-time):
Process four-integers time stamps, not two. Doc fixes.
2012-11-20 Stefan Monnier <monnier@iro.umontreal.ca> 2012-11-20 Stefan Monnier <monnier@iro.umontreal.ca>
* uniquify.el (uniquify-managed): Use defvar-local. * uniquify.el (uniquify-managed): Use defvar-local.
......
...@@ -30,11 +30,10 @@ ...@@ -30,11 +30,10 @@
;; value equal to HIGH * 2^16 + LOW + USEC * 10^-6 + PSEC * 10^-12 ;; value equal to HIGH * 2^16 + LOW + USEC * 10^-6 + PSEC * 10^-12
;; seconds, where missing components are treated as zero. HIGH can be ;; seconds, where missing components are treated as zero. HIGH can be
;; negative, either because the value is a time difference, or because ;; negative, either because the value is a time difference, or because
;; the machine supports negative time stamps that fall before the ;; the machine supports negative time stamps that fall before the epoch.
;; epoch. The macro `with-decoded-time-value' and the ;; The macro `with-decoded-time-value' and the function
;; function `encode-time-value' make it easier to deal with these ;; `encode-time-value' make it easier to deal with these formats.
;; three formats. See `time-subtract' for an example of how to use ;; See `time-subtract' for an example of how to use them.
;; them.
;;; Code: ;;; Code:
......
...@@ -388,16 +388,11 @@ DATA is displayed to the user and should state the reason of the failure." ...@@ -388,16 +388,11 @@ DATA is displayed to the user and should state the reason of the failure."
(defun ert--expand-should-1 (whole form inner-expander) (defun ert--expand-should-1 (whole form inner-expander)
"Helper function for the `should' macro and its variants." "Helper function for the `should' macro and its variants."
(let ((form (let ((form
;; If `cl-macroexpand' isn't bound, the code that we're (macroexpand form (cond
;; compiling doesn't depend on cl and thus doesn't need an ((boundp 'macroexpand-all-environment)
;; environment arg for `macroexpand'. macroexpand-all-environment)
(if (fboundp 'cl-macroexpand) ((boundp 'cl-macro-environment)
;; Suppress warning about run-time call to cl function: we cl-macro-environment)))))
;; only call it if it's fboundp.
(with-no-warnings
(cl-macroexpand form (and (boundp 'cl-macro-environment)
cl-macro-environment)))
(macroexpand form))))
(cond (cond
((or (atom form) (ert--special-operator-p (car form))) ((or (atom form) (ert--special-operator-p (car form)))
(let ((value (ert--gensym "value-"))) (let ((value (ert--gensym "value-")))
......
...@@ -297,6 +297,8 @@ to writing a completion function." ...@@ -297,6 +297,8 @@ to writing a completion function."
(define-key eshell-command-map [? ] 'pcomplete-expand) (define-key eshell-command-map [? ] 'pcomplete-expand)
(define-key eshell-mode-map [tab] 'eshell-pcomplete) (define-key eshell-mode-map [tab] 'eshell-pcomplete)
(define-key eshell-mode-map [(control ?i)] 'eshell-pcomplete) (define-key eshell-mode-map [(control ?i)] 'eshell-pcomplete)
(add-hook 'completion-at-point-functions
#'pcomplete-completions-at-point nil t)
;; jww (1999-10-19): Will this work on anything but X? ;; jww (1999-10-19): Will this work on anything but X?
(if (featurep 'xemacs) (if (featurep 'xemacs)
(define-key eshell-mode-map [iso-left-tab] 'pcomplete-reverse) (define-key eshell-mode-map [iso-left-tab] 'pcomplete-reverse)
...@@ -452,9 +454,9 @@ to writing a completion function." ...@@ -452,9 +454,9 @@ to writing a completion function."
(defun eshell-pcomplete () (defun eshell-pcomplete ()
"Eshell wrapper for `pcomplete'." "Eshell wrapper for `pcomplete'."
(interactive) (interactive)
(if eshell-cmpl-ignore-case (condition-case nil
(pcomplete-expand-and-complete) ; hack workaround for bug#12838 (pcomplete)
(pcomplete))) (text-read-only (completion-at-point)))) ; Workaround for bug#12838.
(provide 'em-cmpl) (provide 'em-cmpl)
......
...@@ -3433,7 +3433,7 @@ DIR is the name of the directory. ...@@ -3433,7 +3433,7 @@ DIR is the name of the directory.
CLASS is the name of a variable class (a symbol). CLASS is the name of a variable class (a symbol).
MTIME is the recorded modification time of the directory-local MTIME is the recorded modification time of the directory-local
variables file associated with this entry. This time is a list variables file associated with this entry. This time is a list
of two integers (the same format as `file-attributes'), and is of integers (the same format as `file-attributes'), and is
used to test whether the cache entry is still valid. used to test whether the cache entry is still valid.
Alternatively, MTIME can be nil, which means the entry is always Alternatively, MTIME can be nil, which means the entry is always
considered valid.") considered valid.")
......
...@@ -1270,9 +1270,10 @@ target of the symlink differ." ...@@ -1270,9 +1270,10 @@ target of the symlink differ."
res-uid res-uid
;; 3. File gid. ;; 3. File gid.
res-gid res-gid
;; 4. Last access time, as a list of two integers. First ;; 4. Last access time, as a list of integers. Normally this
;; integer has high-order 16 bits of time, second has low 16 ;; would be in the same format as `current-time', but the
;; bits. ;; subseconds part is not currently implemented, and (0 0)
;; denotes an unknown time.
;; 5. Last modification time, likewise. ;; 5. Last modification time, likewise.
;; 6. Last status change time, likewise. ;; 6. Last status change time, likewise.
'(0 0) '(0 0) '(0 0) ;CCC how to find out? '(0 0) '(0 0) '(0 0) ;CCC how to find out?
...@@ -1980,6 +1981,7 @@ file names." ...@@ -1980,6 +1981,7 @@ file names."
(error "Unknown operation `%s', must be `copy' or `rename'" op)) (error "Unknown operation `%s', must be `copy' or `rename'" op))
(let ((t1 (tramp-tramp-file-p filename)) (let ((t1 (tramp-tramp-file-p filename))
(t2 (tramp-tramp-file-p newname)) (t2 (tramp-tramp-file-p newname))
(length (nth 7 (file-attributes (file-truename filename))))
(context (and preserve-selinux-context (context (and preserve-selinux-context
(apply 'file-selinux-context (list filename)))) (apply 'file-selinux-context (list filename))))
pr tm) pr tm)
...@@ -2009,8 +2011,9 @@ file names." ...@@ -2009,8 +2011,9 @@ file names."
ok-if-already-exists keep-date preserve-uid-gid)) ok-if-already-exists keep-date preserve-uid-gid))
;; Try out-of-band operation. ;; Try out-of-band operation.
((tramp-method-out-of-band-p ((and
v1 (nth 7 (file-attributes (file-truename filename)))) (tramp-method-out-of-band-p v1 length)
(tramp-method-out-of-band-p v2 length))
(tramp-do-copy-or-rename-file-out-of-band (tramp-do-copy-or-rename-file-out-of-band
op filename newname keep-date)) op filename newname keep-date))
...@@ -2038,8 +2041,7 @@ file names." ...@@ -2038,8 +2041,7 @@ file names."
;; If the Tramp file has an out-of-band method, the ;; If the Tramp file has an out-of-band method, the
;; corresponding copy-program can be invoked. ;; corresponding copy-program can be invoked.
((tramp-method-out-of-band-p ((tramp-method-out-of-band-p v length)
v (nth 7 (file-attributes (file-truename filename))))
(tramp-do-copy-or-rename-file-out-of-band (tramp-do-copy-or-rename-file-out-of-band
op filename newname keep-date)) op filename newname keep-date))
......
...@@ -3767,6 +3767,7 @@ Invokes `password-read' if available, `read-passwd' else." ...@@ -3767,6 +3767,7 @@ Invokes `password-read' if available, `read-passwd' else."
("oct" . 10) ("nov" . 11) ("dec" . 12)) ("oct" . 10) ("nov" . 11) ("dec" . 12))
"Alist mapping month names to integers.") "Alist mapping month names to integers.")
;; FIXME: Shouldn't this also look at any subseconds parts of T1 and T2?
;;;###tramp-autoload ;;;###tramp-autoload
(defun tramp-time-less-p (t1 t2) (defun tramp-time-less-p (t1 t2)
"Say whether time value T1 is less than time value T2." "Say whether time value T1 is less than time value T2."
...@@ -3776,6 +3777,7 @@ Invokes `password-read' if available, `read-passwd' else." ...@@ -3776,6 +3777,7 @@ Invokes `password-read' if available, `read-passwd' else."
(and (= (car t1) (car t2)) (and (= (car t1) (car t2))
(< (nth 1 t1) (nth 1 t2))))) (< (nth 1 t1) (nth 1 t2)))))
;; FIXME: Shouldn't this also look at any subseconds parts of T1 and T2?
(defun tramp-time-subtract (t1 t2) (defun tramp-time-subtract (t1 t2)
"Subtract two time values. "Subtract two time values.
Return the difference in the format of a time value." Return the difference in the format of a time value."
......
...@@ -833,7 +833,8 @@ this is `comint-dynamic-complete-functions'." ...@@ -833,7 +833,8 @@ this is `comint-dynamic-complete-functions'."
. ,(lambda (comps) . ,(lambda (comps)
(sort comps pcomplete-compare-entry-function))) (sort comps pcomplete-compare-entry-function)))
,@(cdr (completion-file-name-table s p a))) ,@(cdr (completion-file-name-table s p a)))
(let ((completion-ignored-extensions nil)) (let ((completion-ignored-extensions nil)
(completion-ignore-case pcomplete-ignore-case))
(completion-table-with-predicate (completion-table-with-predicate
#'comint-completion-file-name-table pred 'strict s p a)))))) #'comint-completion-file-name-table pred 'strict s p a))))))