-2010-12-12 Eli Zaretskii <eliz@gnu.org>
++2010-12-13 Eli Zaretskii <eliz@gnu.org>
+
+ * subr.el (posn-col-row): Evaluate header-line-format in the
+ context of the POSITION window's buffer.
+
-2010-12-11 Glenn Morris <rgm@gnu.org>
++2010-12-13 Glenn Morris <rgm@gnu.org>
+
+ * subr.el (member-ignore-case, run-mode-hooks, insert-for-yank-1)
+ (with-silent-modifications): Doc fixes.
+
-2010-12-10 Michael Albinus <michael.albinus@gmx.de>
++2010-12-13 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-action-password, tramp-process-actions):
+ Revert patch from 2010-12-08. Use `save-restriction'.
+
-2010-12-09 Eli Zaretskii <eliz@gnu.org>
-
- * menu-bar.el (menu-bar-frame-for-menubar, menu-bar-positive-p):
- New functions.
- (menu-bar-showhide-menu) <menu-bar-mode, showhide-tool-bar>: Use
- them instead of `nil' and `>', respectively. (Bug#1077)
-
-2010-12-09 Stephen Berman <stephen.berman@gmx.net>
++2010-12-13 Stephen Berman <stephen.berman@gmx.net>
+
+ * calendar/diary-lib.el (diary-list-sexp-entries):
+ Handle case of no newline at end of file. (Bug#7536)
+
-2010-12-09 Glenn Morris <rgm@gnu.org>
++2010-12-13 Glenn Morris <rgm@gnu.org>
+
+ * mail/smtpmail.el (smtpmail-send-it): Revert previous change.
+
-2010-12-08 Michael Albinus <michael.albinus@gmx.de>
++2010-12-13 Michael Albinus <michael.albinus@gmx.de>
+
- * net/tramp.el (tramp-handle-start-file-process): Protect
- buffer-modified value. (Bug#7557)
- (tramp-action-password): Delete region, do not narrow.
++ * net/tramp.el (tramp-action-password): Delete region, do not narrow.
+ (tramp-process-actions): Do not widen.
++ * net/tramp-sh.el (tramp-sh-handle-start-file-process):
++ Protect buffer-modified value. (Bug#7557)
+
-2010-12-08 Jan Moringen <jmoringe@techfak.uni-bielefeld.de>
++2010-12-13 Jan Moringen <jmoringe@techfak.uni-bielefeld.de>
+
+ * log-edit.el (log-edit-changelog-entries):
+ Regexp quote filename. (Bug#7505)
+
-2010-12-08 Tom Breton <tehom@panix.com>
++2010-12-13 Tom Breton <tehom@panix.com>
+
+ * cus-edit.el (custom-save-all):
+ Bind print-length and print-level to nil. (Bug#7581)
+
-2010-12-08 Glenn Morris <rgm@gnu.org>
++2010-12-13 Glenn Morris <rgm@gnu.org>
+
+ * mouse.el (mouse-menu-major-mode-map, mouse-menu-bar-map):
+ Run hooks to update menu contents. (Bug#7586)
+
+ * mail/smtpmail.el (smtpmail-send-it): Avoid colons in the queued
+ file names, for the sake of MS Windows. (Bug#7588)
+
-2010-12-07 Stefan Monnier <monnier@iro.umontreal.ca>
++2010-12-13 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * diff-mode.el (diff-refine-hunk): Make it work when the hunk contains
+ empty lines without a leading space.
+
-2010-12-06 Leo <sdl.web@gmail.com>
++2010-12-13 Leo <sdl.web@gmail.com>
+
+ * dired-aux.el (dired-do-redisplay): Postpone dired-after-readin-hook
+ while mapping over marks (Bug#6810).
+
-2010-12-06 Chong Yidong <cyd@stupidchicken.com>
++2010-12-13 Chong Yidong <cyd@stupidchicken.com>
+
+ * image-dired.el (image-dired-db-file)
+ (image-dired-temp-image-file, image-dired-gallery-dir)
+ (image-dired-temp-rotate-image-file): Set default values relative
+ to image-dired-dir (Bug#7518).
+
-2010-12-06 Lawrence Mitchell <wence@gmx.li>
++2010-12-13 Lawrence Mitchell <wence@gmx.li>
+
+ * format.el (format-decode-run-method): Pass args FROM and TO, not
+ point-min and point-max, to shell-command-on-region (Bug#7488).
+
-2010-12-06 Jan Djärv <jan.h.d@swipnet.se>
++2010-12-13 Jan Djärv <jan.h.d@swipnet.se>
+
+ * frame.el (blink-cursor-mode): Make default t for ns.
+
-2010-12-05 Bob Rogers <rogers-emacs@rgrjr.dyndns.org>
++2010-12-13 Bob Rogers <rogers-emacs@rgrjr.dyndns.org>
+
+ * vc-dir.el (vc-dir-query-replace-regexp): Doc fix (Bug#7501).
+
-2010-12-05 Chong Yidong <cyd@stupidchicken.com>
++2010-12-13 Chong Yidong <cyd@stupidchicken.com>
+
+ * comint.el (comint-dynamic-list-input-ring)
+ (comint-dynamic-complete-filename)
+ (comint-replace-by-expanded-filename)
+ (comint-dynamic-simple-complete)
+ (comint-dynamic-list-filename-completions)
+ (comint-dynamic-list-completions): Doc fix (Bug#7499).
+
+ * subr.el (posn-x-y, posn-object-x-y, posn-object-width-height):
+ Doc fix (Bug#7471).
+
-2010-12-04 Martin Rudalics <rudalics@gmx.at>
++2010-12-13 Martin Rudalics <rudalics@gmx.at>
+
+ * dired.el (dired-pop-to-buffer): Bind pop-up-frames to nil
+ (Bug#7533).
+
-2010-12-04 W. Martin Borgert <debacle@debian.org> (tiny change)
++2010-12-13 W. Martin Borgert <debacle@debian.org> (tiny change)
+
+ * files.el (auto-mode-alist): Handle .dbk (DocBook) with xml-mode.
+ (Bug#7491).
+
-2010-12-04 Chong Yidong <cyd@stupidchicken.com>
-
- * simple.el (transient-mark-mode): Doc fix (Bug#7465).
-
-2010-12-04 Eli Zaretskii <eliz@gnu.org>
++2010-12-13 Eli Zaretskii <eliz@gnu.org>
+
+ * files.el (file-relative-name): Handle UNC file names on
+ DOS/Windows. (Bug#4674)
+
-2010-12-03 Daiki Ueno <ueno@unixuser.org>
++2010-12-13 Daiki Ueno <ueno@unixuser.org>
+
+ * epg.el (epg-digest-algorithm-alist): Replace "RMD160" with
+ "RIPEMD160" (Bug#7490). Reported by Daniel Kahn Gillmor.
+ (epg-context-set-passphrase-callback): Mention that the callback
+ is not called when used with GnuPG 2.x.
+
-2010-12-02 Glenn Morris <rgm@gnu.org>
++2010-12-13 Glenn Morris <rgm@gnu.org>
+
+ * ps-print.el (ps-line-lengths-internal, ps-nb-pages):
+ Ensure ps-footer-font-size-internal is initialized.
+ Call ps-get-page-dimensions before trying to use ps-font-for-text.
+
-2010-12-01 Kenichi Handa <handa@m17n.org>
++2010-12-13 Kenichi Handa <handa@m17n.org>
+
+ * mail/rmailmm.el (rmail-mime-parse): Call rmail-mime-process
+ within condition-case.
+ (rmail-show-mime): Don't use condition-case.
+ (rmail-search-mime-message): New function.
+ (rmail-search-mime-message-function): Set to
+ rmail-search-mime-message.
+
-2010-12-01 Leo <sdl.web@gmail.com>
++2010-12-13 Leo <sdl.web@gmail.com>
+
+ * ido.el (ido-common-initialization): New function. (bug#3274)
+ (ido-mode): Use it.
+ (ido-completing-read): Call it.
+
+2010-12-12 Karl Fogel <kfogel@red-bean.com>
+
+ * bookmark.el (bookmark-name-from-full-record): Rename back to
+ this original name from `bookmark-name-from-record' reverting part
+ of 2010-12-08T08:09:27Z!kfogel@red-bean.com / kfogel@red-bean.com-20101208080927-5j9jqnb2xvcw4ogm.
+ As Drew Adams pointed out, there was no reason to cause churn for
+ third-party callers.
+
+2010-12-12 Alan Mackenzie <acm@muc.de>
+
+ * progmodes/cc-engine.el (c-forward-type): Before scanning a
+ template arglist, check that the current language supports this.
+
+2010-12-11 Glenn Morris <rgm@gnu.org>
+
+ * vc/vc-bzr.el (vc-bzr-state-heuristic): Also check that the executable
+ state of the file matches. (Bug#7544)
+ (vc-bzr-register, vc-bzr-checkin)
+ (vc-bzr-annotate-extract-revision-at-line): Doc fixes.
+ (vc-directory-exclusion-list): Remove unnecessary eval-after-load.
+
+ * textmodes/sgml-mode.el (sgml-xml-guess): Add .xhtml extension.
+
+2010-12-11 Karel Klíč <kklic@redhat.com>
+
+ * files.el (auto-mode-alist): Use html-mode for *.xhtml. (Bug#7606)
+
+2010-12-10 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ Derive from prog-mode, use derived-mode-p, and fix up various
+ minor style issues in lisp/progmodes.
+
+ * progmodes/vhdl-mode.el (vhdl-mode):
+ * progmodes/verilog-mode.el (verilog-mode):
+ * progmodes/vera-mode.el (vera-mode):
+ * progmodes/sql.el (sql-mode):
+ * progmodes/scheme.el (scheme-mode):
+ * progmodes/perl-mode.el (perl-mode):
+ * progmodes/octave-inf.el (inferior-octave-mode):
+ * progmodes/autoconf.el (autoconf-mode):
+ * progmodes/m4-mode.el (m4-mode):
+ * progmodes/inf-lisp.el (inferior-lisp-mode):
+ * progmodes/idlwave.el (idlwave-mode):
+ * progmodes/icon.el (icon-mode):
+ * progmodes/idlw-help.el (idlwave-help-mode):
+ * progmodes/dcl-mode.el (dcl-mode):
+ * progmodes/idlw-shell.el (idlwave-shell-mode):
+ * progmodes/ebrowse.el (ebrowse-tree-mode, ebrowse-electric-list-mode)
+ (ebrowse-member-mode, ebrowse-electric-position-mode):
+ Use define-derived-mode.
+
+ * progmodes/xscheme.el (exit-scheme-interaction-mode)
+ (xscheme-enter-interaction-mode, xscheme-enter-debugger-mode)
+ (xscheme-debugger-mode-p, xscheme-send-string-1):
+ * progmodes/tcl.el (inferior-tcl-proc, tcl-current-word)
+ (tcl-load-file, tcl-restart-with-file):
+ * progmodes/ps-mode.el (ps-run-running):
+ * progmodes/gdb-mi.el (gud-watch, gdb-mouse-set-clear-breakpoint):
+ * progmodes/js.el (js--get-all-known-symbols):
+ * progmodes/inf-lisp.el (inferior-lisp-proc):
+ * progmodes/idlwave.el (idlwave-beginning-of-statement)
+ (idlwave-template, idlwave-update-buffer-routine-info)
+ (idlwave-update-current-buffer-info)
+ (idlwave-get-routine-info-from-buffers, idlwave-choose)
+ (idlwave-scan-class-info, idlwave-fix-keywords)
+ (idlwave-list-buffer-load-path-shadows):
+ * progmodes/idlw-toolbar.el (idlwave-toolbar, idlwave-toolbar-add)
+ (idlwave-toolbar-remove):
+ * progmodes/idlw-shell.el (idlwave-shell-save-and-action)
+ (idlwave-shell-file-name, idlwave-shell-electric-debug-all-off)
+ (idlwave-shell-menu-def):
+ * progmodes/idlw-complete-structtag.el
+ (idlwave-prepare-structure-tag-completion):
+ * progmodes/gud.el (gud-set-buffer):
+ * progmodes/f90.el (f90-backslash-not-special):
+ * progmodes/delphi.el (delphi-find-unit): Use derived-mode-p.
+
+ * progmodes/xscheme.el (xscheme-start)
+ (local-set-scheme-interaction-buffer, scheme-interaction-mode):
+ * progmodes/which-func.el (which-function):
+ * progmodes/vhdl-mode.el (vhdl-set-style):
+ * progmodes/verilog-mode.el (verilog-set-compile-command)
+ (verilog-modify-compile-command, verilog-error-regexp-add-xemacs)
+ (verilog-set-define, verilog-auto-reeval-locals):
+ * progmodes/sql.el (sql-product-font-lock, sql-interactive-mode):
+ * progmodes/simula.el (simula-mode):
+ * progmodes/scheme.el (scheme-mode-variables, dsssl-mode):
+ * progmodes/python.el (python-check, python-mode):
+ * progmodes/prolog.el (prolog-mode-variables):
+ * progmodes/gud.el (gud-tooltip-activate-mouse-motions):
+ * progmodes/ebrowse.el (ebrowse-view-file-other-frame):
+ * progmodes/delphi.el (delphi-mode):
+ * progmodes/cc-styles.el (c-setup-paragraph-variables):
+ * progmodes/cc-mode.el (c-basic-common-init, c-common-init)
+ (c-font-lock-init): Move make-local-variable to their setq.
+
+ * progmodes/vhdl-mode.el (vhdl-write-file-hooks-init)
+ (vhdl-hs-minor-mode, vhdl-ps-print-init): Fix make-local-variable ->
+ make-local-hook.
+ * progmodes/sh-script.el (sh-require-final-newline): Remove.
+ (sh-set-shell): Don't set require-final-newline since it's already done
+ by prog-mode.
+ * progmodes/modula2.el (m2-mode): Don't make m2-end-comment-column
+ since we never set it.
+ * progmodes/ebrowse.el (ebrowse-set-tree-indentation):
+ Use read-string and standard prompt.
+ * progmodes/dcl-mode.el (dcl-mode-map): Move init into declaration.
+ * progmodes/meta-mode.el (meta-mode-abbrev-table): Merge init and decl.
+ (meta-common-mode-syntax-table): Rename from meta-mode-syntax-table.
+ (meta-common-mode-map): Rename from meta-mode-map.
+ Remove C-m binding, which is a user preference, not mode specific.
+ (meta-common-mode): New major mode; replace meta-common-initialization.
+ * progmodes/js.el (js-mode): Call syntax-propertize rather than messing
+ around with font-lock.
+ * progmodes/etags.el (select-tags-table-mode):
+ Derive from special-mode.
+ * progmodes/octave-mod.el (octave-mode):
+ * progmodes/gdb-mi.el (gdb-inferior-io-mode, gdb-threads-mode)
+ (gdb-memory-mode, gdb-disassembly-mode, gdb-breakpoints-mode)
+ (gdb-frames-mode, gdb-locals-mode, gdb-registers-mode):
+ Let define-derived-mode do its job.
+ * progmodes/cpp.el (cpp-edit-mode-map):
+ Move initialization into declaration.
+ (cpp-edit-mode): Use define-derived-mode.
+ (cpp-edit-load): Use derived-mode-p.
+ * progmodes/mixal-mode.el (mixal-mode):
+ * progmodes/f90.el (f90-mode):
+ * progmodes/cfengine.el (cfengine-mode): Don't bother setting
+ require-final-newline since prog-mode does it already.
+ * progmodes/cc-cmds.el (c-update-modeline): Use match-string.
+ * progmodes/asm-mode.el (asm-mode-map): Fix menu setup.
+ * progmodes/antlr-mode.el: Require cc-mode upfront.
+ (antlr-mode-syntax-table, antlr-action-syntax-table): Initialize in
+ the declaration.
+ (antlr-directory-dependencies, antlr-show-makefile-rules):
+ Use derived-mode-p.
+ (antlr-language-option): Don't assume point-min==1.
+ (antlr-mode): Use define-derived-mode.
+ * progmodes/ada-mode.el: Use derived-mode-p.
+ (ada-mode): Use define-derived-mode.
+ Use hack-local-variables-hook.
+
+2010-12-10 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * textmodes/texinfo.el (texinfo-mode-map): Bind texinfo-insert-@end.
+ (texinfo-mode): Don't disable adaptive-fill-mode.
+ (texinfo-insert-block): Adjust cursor placement for blocks with arg.
+ (texinfo-insert-@end, texinfo-insert-braces, texinfo-insert-@code)
+ (texinfo-insert-@dfn, texinfo-insert-@email, texinfo-insert-@emph)
+ (texinfo-insert-@example, texinfo-insert-@file, texinfo-insert-@item)
+ (texinfo-insert-@kbd, texinfo-insert-@node, texinfo-insert-@noindent)
+ (texinfo-insert-@quotation, texinfo-insert-@samp)
+ (texinfo-insert-@strong, texinfo-insert-@table, texinfo-insert-@var)
+ (texinfo-insert-@uref): Use define-skeleton.
+ (texinfo-insert-@-with-arg): Delete.
+
+2010-12-10 Eli Zaretskii <eliz@gnu.org>
+
+ * arc-mode.el (archive-zip-extract): If w32-quote-process-args is
+ nil, do quote archive member names. (Bug#6144)
+
+2010-12-10 Glenn Morris <rgm@gnu.org>
+
+ * files.el (diff-no-select): Declare.
+
+ * mail/emacsbug.el (report-emacs-bug): Use mail-user-agent properties.
+ (report-emacs-bug-create-existing-bugs-buffer): Avoid free variables.
+
+ * comint.el (comint-input-ring-file-name): Doc fix.
+
+2010-12-09 Eli Zaretskii <eliz@gnu.org>
+
+ * menu-bar.el (menu-bar-frame-for-menubar, menu-bar-positive-p):
+ New functions.
+ (menu-bar-showhide-menu) <menu-bar-mode, showhide-tool-bar>:
+ Use them instead of `nil' and `>', respectively.
+ (menu-bar-showhide-tool-bar-menu): Use menu-bar-frame-for-menubar
+ instead of `nil'.
+ (toggle-menu-bar-mode-from-frame): Use menu-bar-frame-for-menubar
+ and menu-bar-positive-p instead of `nil' and `>', respectively.
+ (Bug#1077)
+
+2010-12-09 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+
+ * whitespace.el (whitespace-newline-mode): Code fix.
+
+2010-12-09 Glenn Morris <rgm@gnu.org>
+
+ * play/landmark.el (lm-print-y,s,noise-int, lm-print-y,s,noise):
+ Rename functions without commas, update callers.
+
+2010-12-08 Jeff Dairiki <dairiki@dairiki.org> (tiny change)
+
+ * whitespace.el (whitespace-cleanup-region):
+ Clean up spaces before tabs. (Bug#7582)
+
+2010-12-08 Karl Fogel <kfogel@red-bean.com>
+
+ * bookmark.el: Adjust parameter names and doc strings to resolve
+ confusion over whether "bookmark" meant a bookmark name or a
+ bookmark record. Along the way, shorten one function's name for
+ similar reasons. (Issue #7548)
+ (bookmark-name-from-record): New name for
+ `bookmark-name-from-full-record'. All callers changed.
+ (bookmark-get-bookmark, bookmark-get-bookmark-record)
+ (bookmark-default-annotation-text, bookmark-prop-get, bookmark-prop-set)
+ (bookmark-get-annotation, bookmark-set-annotation)
+ (bookmark-get-filename, bookmark-set-filename)
+ (bookmark-get-position, bookmark-set-position)
+ (bookmark-get-front-context-string, bookmark-set-front-context-string)
+ (bookmark-get-rear-context-string, bookmark-set-rear-context-string)
+ (bookmark-get-handler, bookmark-edit-annotation, bookmark--jump-via)
+ (bookmark-handle-bookmark, bookmark-location, bookmark-show-annotation):
+ Rename `bookmark' parameter to `bookmark-name-or-record', to
+ clearly show its role, and shorten or adjust doc strings accordingly.
+ (bookmark-set-name): Same, and pass the parameter directly to
+ `bookmark-get-bookmark' instead of redundantly doing the callee's work.
+ (bookmark-default-annotation-text, bookmark-send-edited-annotation)
+ (bookmark-relocate, bookmark-insert-location, bookmark-insert)
+ (bookmark-delete): Rename `bookmark' parameter to `bookmark-name',
+ and in some cases shorten doc string accordingly.
+ (bookmark-rename): Change `old' and `new' parameters to `old-name'
+ and `new-name', and adjust an internal variable to avoid confusion.
+ (bookmark-jump, bookmark-jump-noselect): Clarify `bookmark'
+ parameter in doc string.
+
+2010-12-08 Glenn Morris <rgm@gnu.org>
+
+ * progmodes/gdb-mi.el (gdb): Try to initialize comint input history
+ from gdb's history file. (Bug#7575)
+
+ * mail/emacsbug.el (report-emacs-bug):
+ Try to handle some other mail clients.
+
+2010-12-08 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * files.el (dir-locals-collect-variables): Don't let errors stop us.
+ Use string-prefix-p.
+ (file-name-version-regexp): New var.
+ (file-name-sans-versions):
+ * jka-cmpr-hook.el (jka-compr-build-file-regexp): Use it,
+ (jka-compr-get-compression-info): Use dolist.
+ (jka-compr-compression-info-list): Don't bother specifying
+ version/backup regexps.
+
+2010-12-07 Tassilo Horn <tassilo@member.fsf.org>
+
+ * simple.el (just-one-space): Make argument n default to 1 if
+ omitted.
+
+2010-12-07 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * electric.el (electric-indent-post-self-insert-function):
+ Delete trailing newlines even if we don't reindent.
+
+2010-12-06 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * minibuffer.el (completion-at-point): Remove the `arg'.
+ * bindings.el (complete-symbol): Move back from minibuffer.el.
+
+2010-12-06 Deniz Dogan <deniz.a.m.dogan@gmail.com>
+
+ * simple.el (just-one-space): Delete newlines for negative arg.
+
+2010-12-06 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * ansi-color.el (ansi-color-unfontify-region): Replace by trivial def.
+ (ansi-color-filter-apply): Simplify.
+ (ansi-color-apply): Use `font-lock-face' rather than `face'.
+
+2010-12-05 Bob Rogers <rogers-emacs@rgrjr.dyndns.org>
+
+ * vc/vc-dir.el (vc-dir-query-replace-regexp): Doc fix (Bug#7501).
+
+2010-12-04 Chong Yidong <cyd@stupidchicken.com>
+
+ * dired.el (dired-use-ls-dired): Set default to a special
+ "unspecified" value.
+ (dired-insert-directory): When called the first time, check
+ whether "ls --dired" succeeds and set dired-use-ls-dired (Bug#7546).
+
+2010-12-04 Tak Ota <Takaaki.Ota@am.sony.com>
+
+ * replace.el: Add "collect" feature to occur.
+ (occur-collect-regexp-history): New var.
+ (occur-read-primary-args): Return a replace string for nlines,
+ if needed.
+ (occur): Extend the meaning of nlines.
+
+2010-12-04 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/which-func.el (which-func-ff-hook): Log the error message.
+ (which-func-update-1): Distinguish symbols from strings.
+ (which-function): Stay within 80 columns.
+
+2010-12-03 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * subr.el (with-demoted-errors): Distinguish symbols from strings.
+
+ * newcomment.el (comment-styles): Add docs to each style (bug#7509).
+ Improve docstring.
+ (comment-style): Use comment-styles's docs to describe values.
+
+2010-12-03 Jan Djärv <jan.h.d@swipnet.se>
+
+ * term/common-win.el (x-setup-function-keys): Restore ns-new-frame
+ and ns-show-prefs (Bug#7535).
+
+ * term/ns-win.el (global-map): Restore ns-new-frame and ns-show-prefs
+ bindings (Bug#7535).
+
+2010-12-03 Glenn Morris <rgm@gnu.org>
+
+ * nxml/nxml-mode.el: Require rng-nxml.
+ (rng-nxml-mode-init, nxml-enable-unicode-char-name-sets):
+ Remove declarations.
+
+ * nxml/nxml-mode.el, nxml/nxml-outln.el, nxml/rng-loc.el:
+ * nxml/rng-nxml.el, nxml/rng-valid.el:
+ Remove leading `*' from defcustom docs.
+
+ * startup.el (normal-top-level-add-subdirs-to-load-path): Simplify.
+ (normal-top-level-add-to-load-path, tty-handle-args):
+ Convert comments to basic doc-strings.
+
+ * net/browse-url.el (browse-url-url-at-point)
+ (browse-url-default-browser): Remove autoload cookies.
+
+ * mail/emacsbug.el (report-emacs-bug-create-existing-bugs-buffer):
+ Remove more undefined cl functions.
+
+ * vc/diff.el (diff-sentinel): Make new arguments optional.
+ * ibuf-ext.el (diff-sentinel): Update declaration.
+
+2010-12-03 Daiki Ueno <ueno@unixuser.org>
+
+ * epg.el (epg-digest-algorithm-alist): Replace "RMD160" with
+ "RIPEMD160" (Bug#7490). Reported by Daniel Kahn Gillmor.
+ (epg-context-set-passphrase-callback): Mention that the callback
+ is not called when used with GnuPG 2.x.
+
+2010-12-02 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
+ (tramp-file-name-port): Check also for `tramp-default-port'.
+ (tramp-get-connection-name): New defun.
+ (tramp-get-connection-process): Use it.
+ (tramp-debug-message): Extend function exclude list.
+ (tramp-drop-volume-letter): Fix doc string.
+
+ * net/tramp-cmds.el: Remove solved todo item.
+
+ * net/tramp-efs.el:
+ * net/tramp-ftp.el:
+ * net/tramp-gvfs.el:
+ * net/tramp-gw.el:
+ * net/tramp-imap.el:
+ * net/tramp-smb.el: Fix regexps added to `tramp-default-method-alist'
+ and `tramp-default-user-alist', respectively.
+
+ * net/tramp-gw.el (tramp-gw-open-connection):
+ Use `tramp-get-connection-name' and `tramp-get-connection-buffer'.
+
+ * net/tramp-imap.el (tramp-imap-make-iht): Use just
+ `tramp-file-name-port'.
+
+ * net/tramp-sh.el (tramp-methods): Add recursive options to "pscp"
+ and "psftp". Exchange "%k" marker with options.
+ (tramp-do-copy-or-rename-file, tramp-sh-handle-file-local-copy):
+ Compute size of link target.
+ (tramp-do-copy-or-rename-file-out-of-band). Move setting of
+ `tramp-current-*' up due to gateway methods. Optimze computing of
+ copy arguments. Use `tramp-get-connection-name' and
+ `tramp-get-connection-buffer'. Improve debug messages.
+ (tramp-compute-multi-hops): Remove port determination.
+ (tramp-maybe-open-connection): Use `tramp-get-connection-name'.
+
+ * net/trampver.el: Update release number.
+
+2010-12-02 Glenn Morris <rgm@gnu.org>
+
+ * emacs-lisp/cl-macs.el (cl-parse-loop-clause):
+ Avoid infinite loop over windows. (Bug#7492)
+
+ * progmodes/flymake.el (flymake-check-file-limit):
+ Allow nil to mean "no limit".
+ (flymake-check-patch-master-file-buffer): Update for above change.
+ Allow a .tex file-name extension to be optional.
+ (flymake-master-tex-init): Also match \include statements.
+
+2010-11-30 Sam Steingold <sds@gnu.org>
+
+ * nxml/nxml-mode.el (nxml-parent-document): Add a variable.
+ (nxml-parent-document-set): A function to set `nxml-parent-document'.
+ (nxml-mode): Define using `define-derived-mode' instead of `defun'.
+ (nxml-mode-hook): Remove `defcustom' (auto-defined by
+ define-derived-mode').
+ * nxml/rng-valid.el (rng-dtd-trivial-p): Add a helper function for
+ users who want to call `nxml-parent-document-set'.
+
2010-11-27 Chong Yidong <cyd@stupidchicken.com>
* log-edit.el (log-edit-font-lock-keywords): Don't try matching
* minibuffer.el (completion--replace): Move point where it belongs
when there's a common suffix (bug#7215).
-2010-10-15 Michael Albinus <michael.albinus@gmx.de>
+2010-10-24 Chong Yidong <cyd@stupidchicken.com>
- * net/tramp.el (tramp-open-connection-setup-interactive-shell):
- Suppress expansion of tabs to spaces. Reported by Dale Sedivec
- <dale@codefu.org>.
+ Merge read-color and facemenu-read-color (Bug#7242).
-2010-10-15 Kenichi Handa <handa@m17n.org>
+ * faces.el (read-color): Use the completion code from
+ facemenu-read-color. Require match in completion. Doc fix.
- * international/characters.el: Add category '|' (word breakable)
- to fullwidth characters.
+ * facemenu.el (facemenu-read-color): Alias for read-color.
+ (facemenu-set-foreground, facemenu-set-background):
+ Use read-color.
-2010-10-14 Kenichi Handa <handa@m17n.org>
+ * frame.el (set-background-color, set-foreground-color)
+ (set-cursor-color, set-mouse-color, set-border-color):
+ Use read-color.
- * mail/rmail.el (rmail-show-message-1): Catch an error of
- base64-decode-region and just show an error message (bug#7165).
+2010-10-24 Leo <sdl.web@gmail.com>
- * ps-mule.el (ps-mule-font-spec-list): Delete it. Not used anymore.
- (ps-mule-begin-job): Fix for the case that only ENCODING is set in
- a font-spec (bug#7197).
+ * eshell/em-unix.el (eshell-remove-entries): Use the TRASH
+ argument of delete-file and delete-directory (Bug#7011).
-2010-10-13 Glenn Morris <rgm@gnu.org>
+2010-10-24 Chong Yidong <cyd@stupidchicken.com>
- * mail/emacsbug.el (report-emacs-bug): Mention debbugs.gnu.org.
+ * emacs-lisp/package.el (package-menu-mode-map): Inherit from
+ button-buffer-map.
-2010-10-12 Juanma Barranquero <lekktu@gmail.com>
+2010-10-24 Ralf Angeli <angeli@caeruleus.net>
- * international/mule.el (define-coding-system):
- * international/titdic-cnv.el (quail-cxterm-package-ext-info):
- * composite.el (compose-region): Fix typo in docstring.
+ * emacs-lisp/package.el (package--generate-package-list): Make the
+ *Packages* buffer read-only.
-2010-10-10 Jan Djärv <jan.h.d@swipnet.se>
+2010-10-24 Alan Mackenzie <acm@muc.de>
- * term/ns-win.el (ns-right-alternate-modifier): New defvar.
- (ns-right-option-modifier): New alias for ns-right-alternate-modifier.
- (mac-right-option-modifier): New alias for ns-right-option-modifier.
+ * progmodes/cc-fonts.el (c-font-lock-declarations): Cache the
+ result of `c-beginning-of-decl-1' between invocations of a lambda
+ function (Bug #7265).
- * cus-start.el (all): ns-right-alternate-modifier is new.
+2010-10-24 Daiki Ueno <ueno@unixuser.org>
-2010-10-10 Andreas Schwab <schwab@linux-m68k.org>
+ * epg-config.el (epg-gpg-program): Try to use "gpg2" if "gpg"
+ executable is not available on the system (Bug#7268).
- * Makefile.in (ELCFILES): Update.
+2010-10-24 Glenn Morris <rgm@gnu.org>
-2010-10-09 Stefan Monnier <monnier@iro.umontreal.ca>
+ * select.el (selection-coding-system, next-selection-coding-system):
+ Sync doc with C versions.
- * emacs-lisp/lisp.el (lisp-completion-at-point):
- Use emacs-lisp-mode-syntax-table for the whole function.
+ * w32-vars.el (x-select-enable-clipboard):
+ * term/x-win.el (x-select-enable-clipboard): Move to common-win.
+ * term/common-win.el (x-select-enable-clipboard): Move here.
-2010-10-09 Richard Sharman <richard_sharman@mitel.com> (tiny change)
+ * term/tty-colors.el (tty-defined-color-alist): Remove duplicate
+ definition of C variable.
- * progmodes/gdb-ui.el (gdb-mouse-toggle-breakpoint-margin)
- (gdb-mouse-toggle-breakpoint-fringe): Correct regexp to
- work when breakpoint number exceeds nine.
+ * frame.el (show-trailing-whitespace, auto-hscroll-mode)
+ (display-hourglass, hourglass-delay, cursor-in-non-selected-windows):
+ Don't redefine things that are defined in C.
+ * cus-start.el: Also handle :risky, :safe, :set, and :tag.
+ (show-trailing-whitespace, auto-hscroll-mode)
+ (display-hourglass, hourglass-delay, cursor-in-non-selected-windows):
+ Set up the appropriate custom properties.
-2010-10-05 David Koppelman <koppel@ece.lsu.edu>
+2010-10-24 Chong Yidong <cyd@stupidchicken.com>
- * hi-lock.el (hi-lock-font-lock-hook): Check font-lock-fontified
- instead of font-lock-mode before adding keywords.
- Remove hi-lock-mode off code. Remove inhibit hack.
- (hi-lock-set-pattern): Only add keywords if font-lock-fontified
- non-nil; removed hook inhibit hack.
+ Bind "C-c ]" to ...
+ * progmodes/f90.el (f90-mode-map): ... f90-insert-end.
+ * nxml/nxml-mode.el (nxml-mode-map): ... nxml-finish-element.
+ * textmodes/tex-mode.el (tex-mode-map): ... latex-close-block.
+ * textmodes/sgml-mode.el (sgml-mode-map): ... sgml-close-tag.
-2010-10-09 Glenn Morris <rgm@gnu.org>
+2010-10-23 Glenn Morris <rgm@gnu.org>
- * emacs-lisp/shadow.el (find-emacs-lisp-shadows): Rename it...
- (load-path-shadows-find): ... to this.
- (list-load-path-shadows): Update for above change.
+ * textmodes/flyspell.el (flyspell-mode): If there was an error,
+ say what it was.
- * mail/mail-utils.el (mail-mbox-from): Also try return-path.
+ * frame.el (auto-hscroll-mode, cursor-in-non-selected-windows):
+ Sync docs with C version.
-2010-10-08 Glenn Morris <rgm@gnu.org>
+ * term/ns-win.el (xw-defined-colors):
+ * term/x-win.el (xw-defined-colors): Make docs identical to w32-win.
- * emacs-lisp/cl-compat.el, emacs-lisp/lmenu.el: Move to obsolete/.
+ * term/pc-win.el (x-select-enable-clipboard):
+ * term/x-win.el (x-select-enable-clipboard):
+ * w32-vars.el (x-select-enable-clipboard): Make doc-strings identical.
- * emacs-lisp/shadow.el (lisp-shadow): Change prefix.
- (shadows-compare-text-p): Make it an obsolete alias for...
- (load-path-shadows-compare-text): ... new name.
- (find-emacs-lisp-shadows): Update for above name change.
- (load-path-shadows-same-file-or-nonexistent): New name for the old
- shadow-same-file-or-nonexistent.
+ * comint.el (comint-password-prompt-regexp): Make it less vague.
+ Bump version.
-2010-10-03 Chong Yidong <cyd@stupidchicken.com>
+ * help-fns.el (doc-file-to-man, doc-file-to-info): New commands.
- * minibuffer.el (completion--some, completion--do-completion)
- (minibuffer-complete-and-exit, minibuffer-completion-help)
- (completion-basic-try-completion)
- (completion-basic-all-completions)
- (completion-pcm--find-all-completions): Use lexical-let to
- avoid some false matches in variable completion (Bug#7056)
+ * help.el (finder-by-keyword): Remove unnecessary autoload.
-2010-10-03 Olof Ohlsson Sax <olof.ohlsson.sax@gmail.com> (tiny change)
+2010-10-22 Glenn Morris <rgm@gnu.org>
- * vc-svn.el (vc-svn-merge-news): Use --non-interactive. (Bug#7152)
+ * loadup.el: Unconditionally load float-sup.
+ * paren.el (show-paren-delay):
+ * emacs-lisp/float-sup.el:
+ * emulation/cua-base.el (cua-prefix-override-inhibit-delay):
+ * obsolete/lazy-lock.el (lazy-lock-defer-time, lazy-lock-stealth-nice)
+ (lazy-lock-stealth-verbose): Assume float support.
+ * ps-print.el: Assume float support on Emacs.
+ * emacs-lisp/timer.el (timer-next-integral-multiple-of-time):
+ Remove non-float branch.
-2010-10-03 Leo <sdl.web@gmail.com>
+ * emacs-lisp/autoload.el (batch-update-autoloads): Update for
+ src/Makefile no longer being pre-processed.
- * dnd.el (dnd-get-local-file-name): If MUST-EXIST is non-nil, only
- return non-nil if the file exists (Bug#7090).
+2010-10-22 Stefan Monnier <monnier@iro.umontreal.ca>
-2010-09-30 Stefan Monnier <monnier@iro.umontreal.ca>
+ * emacs-lisp/find-func.el (find-library): Use test-completion.
- * minibuffer.el (completion--replace):
- Better preserve markers (bug#7138).
+2010-10-21 Lars Magne Ingebrigtsen <larsi@gnus.org>
-2010-09-29 Juanma Barranquero <lekktu@gmail.com>
+ * newcomment.el (comment-dwim): Fix the intentation in the doc string.
- * server.el (server-process-filter): Doc fix.
+2010-10-21 Michael Albinus <michael.albinus@gmx.de>
-2010-09-27 Drew Adams <drew.adams@oracle.com>
+ * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
+ space in stat format string.
+ (tramp-send-command): Unset $PS1 when using here documents, in
+ order not to get several prompts.
+ (tramp-get-inline-coding): Return `nil' in case of errors.
- * dired.el (dired-save-positions): Doc fix. (Bug#7119)
+2010-10-21 Daiki Ueno <ueno@unixuser.org>
-2010-09-27 Andreas Schwab <schwab@linux-m68k.org>
+ * hexl.el (hexl-mode, hexl-mode-exit):
+ Tweak revert-buffer-function to inhibit auto-mode-alist (Bug#7252).
+ (hexl-revert-buffer-function): New function.
+ (hexl-before-revert-hook, hexl-after-revert-hook): Abolish.
- * Makefile.in (ELCFILES): Update.
+2010-10-19 Alan Mackenzie <acm@muc.de>
- * emacs-lisp/byte-opt.el (byte-optimize-form-code-walker):
- Avoid infinite recursion on erroneous lambda form. (Bug#7114)
+ * progmodes/cc-langs.el (c-type-decl-prefix-key): C++ bit:
+ Move "\(const\|throw\|volatile\)\>" nearer the start of the regexp, so
+ that these keywords aren't wrongly matched as identifiers.
-2010-09-27 Kenichi Handa <handa@m17n.org>
+ * progmodes/cc-mode.el (c-before-change, c-after-change): Move the
+ setting of c-new-BEG and c-new-END from c-before-change to
+ c-after-change. (Bug#7181)
- * tar-mode.el (tar-header-block-tokenize): Decode filenames in
- "ustar" format.
+2010-10-19 Chong Yidong <cyd@stupidchicken.com>
-2010-09-27 Kenichi Handa <handa@m17n.org>
+ * cus-face.el (custom-theme-set-faces): Revert 2010-10-18 change.
+ Don't mark as safe.
- * international/mule.el (define-coding-system): Docstring fixed.
+ * custom.el (custom-theme-set-variables): Likewise.
+ (load-theme): Add custom-theme-set-faces and
+ custom-theme-set-variables to safe-functions while loading.
+ (custom-enabled-themes): Mark as risky.
- * international/mule-diag.el (describe-character-set): Use princ
- with proper print-length and print-level instead of insert.
+2010-10-18 Julien Danjou <julien@danjou.info>
-2010-09-26 Juanma Barranquero <lekktu@gmail.com>
+ * bindings.el: Remove end dashes in default mode-line-format.
- * window.el (walk-windows): Doc fix (bug#7105).
+2010-10-19 Chong Yidong <cyd@stupidchicken.com>
-2010-09-23 Glenn Morris <rgm@gnu.org>
+ * bindings.el (global-map): Bind C-d to delete-char and deletechar
+ to delete-forward-char.
- * isearch.el (isearch-lazy-highlight-cleanup)
- (isearch-lazy-highlight-initial-delay)
- (isearch-lazy-highlight-interval)
- (isearch-lazy-highlight-max-at-a-time, isearch-lazy-highlight-face):
- * net/net-utils.el (ipconfig-program-options):
- Move aliases to options before the associated definitions.
+ * simple.el (normal-erase-is-backspace-mode): Remap delete to
+ deletechar, and hence delete-forward-char.
-2010-09-21 Stefan Monnier <monnier@iro.umontreal.ca>
+2010-10-19 Stefan Monnier <monnier@iro.umontreal.ca>
- * newcomment.el (comment-normalize-vars): Better test validity of
- comment-end-skip.
+ * repeat.el (repeat): Use read-key (bug#6256).
-2010-09-19 Stefan Monnier <monnier@iro.umontreal.ca>
+2010-10-19 Chong Yidong <cyd@stupidchicken.com>
- * emacs-lisp/float-sup.el (float-pi): New name for `pi'.
- (float-e): New name for `e'.
- (degrees-to-radians, radians-to-degrees):
- * calendar/solar.el (solar-longitude):
- * calculator.el (calculator-registers, calculator-funcall):
- * textmodes/artist.el (artist-spray-random-points):
- * play/bubbles.el (bubbles--initialize-images): Use new names.
+ * emacs-lisp/unsafep.el: Don't mark functions that display
+ messages as safe. Suggested by Johan Bockgård.
-2010-09-19 Eric M. Ludlam <zappo@gnu.org>
+2010-10-19 Stefan Monnier <monnier@iro.umontreal.ca>
- Update to CEDET 1.0's version of EIEIO.
+ * minibuffer.el (completion--replace): Move point where it belongs
+ when there's a common suffix (bug#7215).
- * emacs-lisp/eieio.el (eieio-specialized-key-to-generic-key):
- New function.
- (eieio-defmethod, eieio-generic-form, eieio-generic-call): Use it.
- (eieio-default-eval-maybe): Eval val instead of unquoting only.
- (class-precedence-list): If class is nil, return nil.
- (eieio-generic-call): If class of first input arg is nil, don't
- look up static methods, and do check for primary methods.
- (initialize-instance): See if the default needs to be evaluated
- during the constructor.
- (eieio-perform-slot-validation-for-default): Don't do the check
- for values that will eventually be evaluated.
- (eieio-eval-default-p): New function.
- (eieio-default-eval-maybe): Use it.
+2010-10-19 Kenichi Handa <handa@m17n.org>
-2010-07-03 Jan Moringen <jan.moringen@uni-bielefeld.de>
+ * international/characters.el: Add category '|' (word breakable)
+ to fullwidth characters.
- * emacs-lisp/eieio.el (eieio-defclass): Allow :c3
- method-invocation-order.
- (eieio-c3-candidate, eieio-c3-merge-lists): New functions.
- (eieio-class-precedence-dfs): Compute class precedence list using
- dfs algorithm.
- (eieio-class-precedence-bfs): Compute class precedence list using
- bfs algorithm.
- (eieio-class-precedence-c3): Compute class precedence list using
- c3 algorithm.
- (class-precedence-list): New function.
- (eieiomt-method-list, eieiomt-sym-optimize): Use it.
- (inconsistent-class-hierarchy): New error symbol.
- (call-next-method): Stow the replacement argument list for future
- call-next-method invocations.
+2010-10-19 Michael Albinus <michael.albinus@gmx.de>
-2010-09-15 Glenn Morris <rgm@gnu.org>
+ * net/tramp-sh.el (tramp-do-file-attributes-with-stat)
+ (tramp-do-directory-files-and-attributes-with-stat): Use "e0" in
+ order to make stat results a float. Patch by Andreas Schwab
+ <schwab@linux-m68k.org>.
- * calendar/appt.el (appt-check): If not displaying the diary,
- use (diary 1) to only get the entries we need.
- (appt-make-list): Sort diary-list-entries, if we cannot guarantee
- that it is in day order. (Bug#7019)
+2010-10-18 Julien Danjou <julien@danjou.info>
- * calendar/appt.el (appt-check): Rather than showing the diary,
- just turn off invisible display, and only if needed.
+ * avoid.el (mouse-avoidance-ignore-p): Ignore mouse when it is
+ hidden by `make-pointer-invisible'.
- * calendar/diary-lib.el (diary-list-entries): Doc fix. (Bug#7019)
+2010-10-18 Stefan Monnier <monnier@iro.umontreal.ca>
-2010-09-14 Stefan Monnier <monnier@iro.umontreal.ca>
+ * files.el (locate-file-completion-table): Strip non-matching elements
+ before checking length of list (bug#7238).
- * emacs-lisp/byte-run.el (set-advertised-calling-convention):
- Add `when' argument. Update callers.
+2010-10-18 Chong Yidong <cyd@stupidchicken.com>
- * subr.el (unintern): Declare the obarray arg mandatory.
+ * custom.el (custom-theme-set-variables): Mark as a safe function.
+ (load-theme): Check forms using unsafep.
+
+ * cus-face.el (custom-theme-set-faces): Mark as a safe function.
+
+2010-10-17 Agustín Martín <agustin.martin@hispalinux.es>
+
+ * textmodes/ispell.el (ispell-aspell-find-dictionary):
+ Fix aspell data file searching (bug#7230).
+
+2010-10-16 Chong Yidong <cyd@stupidchicken.com>
+
+ * cus-theme.el (custom-theme--migrate-settings): New var.
+ (customize-create-theme): Allow editing the `user' theme.
+ (custom-theme-add-variable, custom-theme-add-var-1)
+ (custom-theme-add-face, custom-theme-add-face-1): Add a checkbox
+ to the front of each variable or face widget.
+ (custom-theme-write): Save theme settings in the correct order.
+ Optionally, remove saved settings from user customizations.
+ (custom-theme-write-variables, custom-theme-write-faces):
+ Save only the checked widgets.
+ (customize-themes): Add a link for migrating custom settings.
+
+ * custom.el (custom-declare-theme, provide-theme):
+ Use custom-theme-name-valid-p.
+ (custom-theme-name-valid-p): Remove checks that are now
+ unnecessary since themes no longer obey load-path.
+
+ * cus-edit.el (custom-variable-value-create): For the simple
+ style, hide documentation string when hidden.
+
+2010-10-16 Chong Yidong <cyd@stupidchicken.com>
+
+ * cus-edit.el (custom-variable, custom-face): Combine the
+ :inhibit-magic and :display-style properties into a single
+ :custom-style property.
+ (custom-toggle-hide-variable, custom-toggle-hide-face):
+ New functions. If hiding an edited value, save it to :shown-value.
+ (custom-variable-value-create, custom-face-value-create): Use them.
+ (custom-magic-reset): Allow magic property to be unset.
+
+ * custom.el: Custom themes no longer use load-path.
+ (custom-theme-load-path): New option. Change built-in theme
+ directory to etc/.
+ (custom-enabled-themes): Add custom-theme-load-path dependency.
+ (custom-theme--load-path): New function.
+ (load-theme, custom-available-themes): Use it.
+
+ * cus-theme.el (describe-theme-1): Use custom-theme--load-path.
+ (customize-themes): Link to custom-theme-load-path variable.
+ (custom-theme-add-var-1, custom-theme-add-face-1): Use the
+ :custom-style property.
+
+ * themes/*.el: Moved to etc/.
+
+2010-10-16 Ralf Angeli <angeli@caeruleus.net>
+
+ * textmodes/reftex-cite.el
+ (reftex-extract-bib-entries-from-thebibliography): Do not move
+ point when searching for \bibitem entries. Match entries with
+ spaces or tabs in front of arguments.
+
+2010-10-16 Chong Yidong <cyd@stupidchicken.com>
+
+ * cus-theme.el (customize-create-theme): Delete overlays after
+ erasing. If given a THEME arg, display only the faces of that arg
+ instead of custom-theme--listed-faces.
+ (custom-theme-variable-menu, custom-theme-variable-action)
+ (custom-variable-reset-theme, custom-theme-delete-variable): Delete.
+ (custom-theme-add-variable, custom-theme-add-face): Apply value
+ from the theme settings, instead of the current value.
+ (custom-theme-add-var-1, custom-theme-add-face-1): New functions.
+ (custom-theme-visit-theme): Allow calling outside theme buffers.
+ (custom-theme-merge-theme): Don't enable the theme when merging.
+ (custom-theme-write-variables, custom-theme-write-faces): Use the
+ :shown-value properties to save buffer values, not global ones.
+ (customize-themes): Display a warning about user customizations.
+
+ * cus-edit.el (custom-variable-value-create)
+ (custom-face-value-create): Obey new special properties
+ :shown-value and :inhibit-magic.
-2010-09-14 Glenn Morris <rgm@gnu.org>
+2010-10-15 Michael Albinus <michael.albinus@gmx.de>
- * calendar/diary-lib.el (diary-list-entries-hook, diary-sort-entries):
- Doc fixes.
+ * net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
+ Suppress expansion of tabs to spaces. Reported by Dale Sedivec
+ <dale@codefu.org>.
- * calendar/diary-lib.el (diary-included-files): New variable.
- (diary-list-entries): Maybe initialize diary-included-files.
- (diary-include-other-diary-files): Append to diary-included-files.
- * calendar/appt.el (appt-update-list): Also check the members of
- diary-included-files. (Bug#6999)
- (appt-check): Doc fix.
+2010-10-14 Kenichi Handa <handa@m17n.org>
-2010-09-12 David Reitter <david.reitter@gmail.com>
+ * mail/rmail.el (rmail-show-message-1): Catch an error of
+ base64-decode-region and just show an error message (bug#7165).
- * simple.el (line-move-visual): Do not truncate goal column to
- integer size. (Bug#7020)
+ * ps-mule.el (ps-mule-font-spec-list): Delete it. Not used anymore.
+ (ps-mule-begin-job): Fix for the case that only ENCODING is set in
+ a font-spec (bug#7197).
-2010-09-11 Stefan Monnier <monnier@iro.umontreal.ca>
+2010-10-14 Glenn Morris <rgm@gnu.org>
- * repeat.el (repeat): Allow repeating when the last event is a click.
- Suggested by Drew Adams (bug#6256).
+ * mail/emacsbug.el (report-emacs-bug): Mention debbugs.gnu.org.
-2010-09-11 Sascha Wilde <wilde@sha-bang.de>
+2010-10-14 Juanma Barranquero <lekktu@gmail.com>
- * vc/vc-hg.el (vc-hg-state,vc-hg-working-revision):
- Replace setting HGRCPATH to "" by some less invasive --config options.
+ * international/mule.el (define-coding-system):
+ * international/titdic-cnv.el (quail-cxterm-package-ext-info):
+ * composite.el (compose-region): Fix typo in docstring.
-2010-09-11 Stefan Monnier <monnier@iro.umontreal.ca>
+2010-10-14 Chong Yidong <cyd@stupidchicken.com>
- * font-lock.el (font-lock-beginning-of-syntax-function):
- Mark as obsolete.
+ * cus-face.el (custom-theme-set-faces): Call custom-push-theme
+ only after checking the theme-face property.
-2010-09-10 Glenn Morris <rgm@gnu.org>
+ * faces.el (face-spec-reset-face): Reset all attributes in one
+ single call to set-face-attribute.
+ (face-spec-match-p): Make it a defsubst.
+ (frame-set-background-mode): New arg KEEP-FACE-SPECS.
+ (x-create-frame-with-faces, tty-create-frame-with-faces)
+ (tty-set-up-initial-frame-faces): Don't recompute face specs in
+ frame-set-background-mode, since they are recomputed immediately
+ afterwards in face-set-after-frame-default.
+ (face-set-after-frame-default): Minor optimization.
+ (cursor): Provide non-trivial defface spec.
- * menu-bar.el (menu-bar-options-save): Fix handling of menu-bar
- and tool-bar modes. (Bug#6211)
- (menu-bar-mode): Move setting of standard-value after the
- minor-mode definition, otherwise it seems to have no effect.
+ * custom.el (custom-theme-recalc-face): Simplify.
-2010-09-08 Masatake YAMATO <yamato@redhat.com>
+2010-10-14 Jay Belanger <jay.p.belanger@gmail.com>
- * progmodes/antlr-mode.el (antlr-font-lock-additional-keywords):
- Fix typo. (Bug#6976)
+ * calc/calc-alg.el (math-var): Rename from `var'.
+ (math-is-polynomial, math-is-poly-rec): Replace `var'
+ with `math-var'.
-2010-09-06 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+ * calc/calcalg2.el (math-var): Rename from `var'.
+ (calcFunc-table, math-scan-for-limits): Replace `var'
+ with `math-var'.
- * whitespace.el: Allow cleaning up blanks without blank
- visualization (Bug#6651). Adjust help window for
- whitespace-toggle-options (Bug#6479). Allow to use fill-column
- instead of whitespace-line-column (from EmacsWiki). New version 13.1.
- (whitespace-style): Add new value 'face. Adjust docstring.
- (whitespace-space, whitespace-hspace, whitespace-tab):
- Adjust foreground property face.
- (whitespace-line-column): Adjust docstring and type declaration.
- (whitespace-style-value-list, whitespace-toggle-option-alist)
- (whitespace-help-text): Adjust const initialization.
- (whitespace-toggle-options, global-whitespace-toggle-options):
- Adjust docstring.
- (whitespace-display-window, whitespace-interactive-char)
- (whitespace-style-face-p, whitespace-color-on): Adjust code.
- (whitespace-help-scroll): New fun.
+2010-10-13 Glenn Morris <rgm@gnu.org>
-2010-09-05 Alexander Klimov <alserkli@inbox.ru> (tiny change)
+ * subr.el (last): Deal with dotted lists (reported in bug#7174).
- * files.el (directory-abbrev-alist): Use \` as default regexp.
+2010-10-13 Stephen Berman <stephen.berman@gmx.net>
- * emacs-lisp/rx.el (rx-any): Don't explode ranges that end in special
- chars like - or ] (bug#6984).
- (rx-any-condense-range): Explode 2-char ranges.
+ * subr.el (last): Use `safe-length' instead of `length' (bug#7206).
-2010-09-02 Stefan Monnier <monnier@iro.umontreal.ca>
+2010-10-13 Lars Magne Ingebrigtsen <larsi@gnus.org>
- * textmodes/bibtex.el:
- * proced.el: Update to new email for Roland Winkler <winkler@gnu.org>.
+ * net/tls.el (tls-program): Remove spurious %s from openssl.
+ (tls-starttls-switches): Remove starttls hack.
+ (open-tls-stream): Ditto.
+ (tls-find-starttls-argument): Ditto.
-2010-09-02 Glenn Morris <rgm@gnu.org>
+2010-10-13 Juanma Barranquero <lekktu@gmail.com>
- * desktop.el (desktop-path): Bump :version after 2009-09-15 change.
+ * image.el (image-library-alist): Declare as obsolete alias.
+ (image-type-available-p): Use `dynamic-library-alist'.
-2010-08-31 Kenichi Handa <handa@m17n.org>
+ * term/w32-win.el (dynamic-library-alist):
+ Use instead of `image-library-alist'.
- * international/mule-cmds.el (standard-display-european-internal):
- Setup standard-display-table for 8-bit characters by storing 8-bit
- characters in the element vector.
+2010-10-13 IRIE Shinsuke <irieshinsuke@yahoo.co.jp> (tiny change)
- * disp-table.el (standard-display-8bit):
- Setup standard-display-table for 8-bit characters by storing 8-bit
- characters in the element vector.
- (standard-display-european): Likewise.
+ * subr.el (last): Make it faster. (Bug#7174)
-2010-08-26 Michael Albinus <michael.albinus@gmx.de>
+2010-10-13 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> (tiny change)
- Sync with Tramp 2.1.19.
+ * Makefile.in (compile-clean): Use `` instead of $(). (Bug#7178)
- * net/tramp-cmds.el (tramp-cleanup-all-connections)
- (tramp-reporter-dump-variable, tramp-load-report-modules)
- (tramp-append-tramp-buffers): Use `tramp-compat-funcall'.
- (tramp-bug): Recommend setting of `tramp-verbose' to 9.
+2010-10-12 Chong Yidong <cyd@stupidchicken.com>
- * net/tramp-compat.el (top): Do not autoload
- `tramp-handle-file-remote-p'. Load tramp-util.el and tramp-vc.el
- only when `start-file-process' is not bound.
- (byte-compile-not-obsolete-vars): Define if not bound.
- (tramp-compat-funcall): New defmacro.
- (tramp-compat-line-beginning-position)
- (tramp-compat-line-end-position)
- (tramp-compat-temporary-file-directory)
- (tramp-compat-make-temp-file, tramp-compat-file-attributes)
- (tramp-compat-copy-file, tramp-compat-copy-directory)
- (tramp-compat-delete-file, tramp-compat-delete-directory)
- (tramp-compat-number-sequence, tramp-compat-process-running-p):
- Use it.
- (tramp-advice-file-expand-wildcards): Do not use
- `tramp-handle-file-remote-p'.
- (tramp-compat-make-temp-file): Simplify fallback implementation.
- (tramp-compat-copy-file): Add PRESERVE-SELINUX-CONTEXT.
- (tramp-compat-copy-tree): Remove function.
- (tramp-compat-delete-file): New defun.
- (tramp-compat-delete-directory): Provide implementation for older
- Emacsen.
- (tramp-compat-file-attributes): Handle only
- `wrong-number-of-arguments' error.
+ * cus-theme.el (custom-theme--listed-faces): Add cursor face.
+ (describe-theme-1): Extract doc from unloaded themes.
- * net/tramp-fish.el (tramp-fish-handle-copy-file):
- Add PRESERVE_SELINUX_CONTEXT.
- (tramp-fish-handle-delete-file): Add TRASH arg.
- (tramp-fish-handle-directory-files-and-attributes):
- Do not use `tramp-fish-handle-file-attributes.
- (tramp-fish-handle-file-local-copy)
- (tramp-fish-handle-insert-file-contents)
- (tramp-fish-maybe-open-connection): Use `with-progress-reporter'.
+ * custom.el (custom-theme-name-valid-p): Don't list color-themes.
- * net/tramp-gvfs.el (top): Require url-util.
- (tramp-gvfs-mount-point): Remove.
- (tramp-gvfs-file-name-handler-alist): Add `file-selinux-context'
- and `set-file-selinux-context'.
- (tramp-gvfs-stringify-dbus-message, tramp-gvfs-send-command)
- (tramp-gvfs-handle-file-selinux-context)
- (tramp-gvfs-handle-set-file-selinux-context): New defuns.
- (with-tramp-dbus-call-method): Format trace message.
- (tramp-gvfs-handle-copy-file): Handle PRESERVE-SELINUX-CONTEXT.
- (tramp-gvfs-handle-copy-file, tramp-gvfs-handle-rename-file):
- Implement backup call, when operation on local files fails.
- Use progress reporter. Flush properties of changed files.
- (tramp-gvfs-handle-delete-file): Add TRASH arg.
- Use `tramp-compat-delete-file'.
- (tramp-gvfs-handle-expand-file-name): Expand "~/".
- (tramp-gvfs-handle-make-directory): Make more traces.
- (tramp-gvfs-handle-write-region): Protect deleting tmpfile.
- (tramp-gvfs-url-file-name): Hexify file name in url.
- (tramp-gvfs-fuse-file-name): Take also prefix (like dav shares)
- into account for the resulting file name.
- (tramp-gvfs-handler-askquestion): Preserve current message, in
- order to let progress reporter continue afterwards. (Bug#6257)
- Return dummy mountpoint, when the answer is "no".
- See `tramp-gvfs-maybe-open-connection'.
- (tramp-gvfs-handler-mounted-unmounted)
- (tramp-gvfs-connection-mounted-p): Test also for new mountspec
- attribute "default_location". Set "prefix" property.
- Handle default-location.
- (tramp-gvfs-mount-spec): Return both prefix and mountspec.
- (tramp-gvfs-maybe-open-connection): Test, whether mountpoint
- exists. Raise an error, if not (due to a corresponding answer
- "no" in interactive questions, for example).
- Use `tramp-compat-funcall'.
+ * themes/tango-theme.el:
+ * themes/tango-dark-theme.el:
+ * themes/wheatgrass-theme.el: New files.
- * net/tramp-imap.el (top): Autoload `epg-make-context'.
- (tramp-imap-handle-copy-file): Add PRESERVE-SELINUX-CONTEXT.
- (tramp-imap-do-copy-or-rename-file)
- (tramp-imap-handle-insert-file-contents)
- (tramp-imap-handle-file-local-copy): Use `with-progress-reporter'.
- (tramp-imap-handle-delete-file): Add TRASH arg.
+2010-10-12 Chong Yidong <cyd@stupidchicken.com>
- * net/tramp-smb.el (tramp-smb-handle-copy-file):
- Add PRESERVE-SELINUX-CONTEXT.
- (tramp-smb-handle-copy-file)
- (tramp-smb-handle-file-local-copy, tramp-smb-handle-rename-file)
- (tramp-smb-handle-write-region, tramp-smb-maybe-open-connection):
- Use `with-progress-reporter'.
- (tramp-smb-handle-delete-file): Add TRASH arg.
+ * cus-theme.el (describe-theme, customize-themes)
+ (custom-theme-save): New commands.
+ (custom-new-theme-mode-map): Bind C-x C-s.
+ (custom-new-theme-mode): Use custom--initialize-widget-variables.
+ (customize-create-theme): New optional arg THEME.
+ (custom-theme-revert): Use it.
+ (custom-theme-visit-theme): Remove dead code.
+ (custom-theme-merge-theme): Use custom-available-themes.
+ (custom-theme-write): Make interactive.
+ (custom-theme-write): Use custom-theme-name-valid-p.
+ (describe-theme-1, custom-theme-choose-revert)
+ (custom-theme-checkbox-toggle, custom-theme-selections-toggle):
+ New funs.
+ (custom-theme-allow-multiple-selections): New option.
+ (custom-theme-choose-mode): New major mode.
- * net/tramp.el (tramp-methods): Move hostname to the end in all
- ssh `tramp-login-args'. Add `tramp-async-args' attribute where
- appropriate.
- (tramp-verbose): Describe verbose level 9.
- (tramp-completion-function-alist)
- (tramp-file-name-regexp, tramp-chunksize)
- (tramp-local-coding-commands, tramp-remote-coding-commands)
- (with-connection-property, tramp-completion-mode-p)
- (tramp-action-process-alive, tramp-action-out-of-band)
- (tramp-check-for-regexp, tramp-file-name-p, tramp-equal-remote)
- (tramp-exists-file-name-handler): Fix docstring.
- (tramp-remote-process-environment): Use `format' instead of
- `concat'. Protect version string by apostroph.
- (tramp-shell-prompt-pattern): Do not use a shy group in case of
- XEmacs.
- (tramp-file-name-regexp-unified)
- (tramp-completion-file-name-regexp-unified): On W32 systems, do
- not regard the volume letter as remote filename. (Bug#5447)
- (tramp-perl-file-attributes)
- (tramp-perl-directory-files-and-attributes): Don't pass "$3".
- (tramp-vc-registered-read-file-names): Read input as
- here-document, otherwise the command could exceed maximum length
- of command line.
- (tramp-file-name-handler-alist): Add `file-selinux-context' and
- `set-file-selinux-context'.
- (tramp-debug-message): Add `tramp-compat-funcall' to ignored
- backtrace functions.
- (tramp-error-with-buffer): Don't show the connection buffer when
- we are in completion mode.
- (tramp-progress-reporter-update, tramp-remote-selinux-p)
- (tramp-handle-file-selinux-context)
- (tramp-handle-set-file-selinux-context, tramp-process-sentinel)
- (tramp-connectable-p, tramp-open-shell, tramp-get-remote-trash):
- New defuns.
- (with-progress-reporter): New defmacro.
- (tramp-debug-outline-regexp): New defconst.
- (top, tramp-rfn-eshadow-setup-minibuffer)
- (tramp-rfn-eshadow-update-overlay, tramp-handle-set-file-times)
- (tramp-handle-dired-compress-file, tramp-handle-shell-command)
- (tramp-completion-mode-p, tramp-check-for-regexp)
- (tramp-open-connection-setup-interactive-shell)
- (tramp-compute-multi-hops, tramp-read-passwd, tramp-clear-passwd)
- (tramp-time-diff, tramp-coding-system-change-eol-conversion)
- (tramp-set-process-query-on-exit-flag, tramp-unload-tramp):
- Use `tramp-compat-funcall'.
- (tramp-handle-make-symbolic-link): Flush file properties.
- (tramp-handle-load, tramp-handle-file-local-copy)
- (tramp-handle-insert-file-contents, tramp-handle-write-region)
- (tramp-handle-vc-registered, tramp-maybe-send-script)
- (tramp-find-shell): Use `with-progress-reporter'.
- (tramp-do-file-attributes-with-stat): Add space in format string,
- in order to work around a bug in pdksh. Reported by Gilles Pion
- <gpion@lfdj.com>.
- (tramp-handle-verify-visited-file-modtime): Do not send a command
- when the connection is not established.
- (tramp-handle-set-file-times): Simplify the check for utc.
- (tramp-handle-directory-files-and-attributes)
- (tramp-get-remote-path): Use `copy-tree'.
- (tramp-completion-handle-file-name-all-completions): Ensure, that
- non remote files are still checked. Oops.
- (tramp-handle-copy-file, tramp-do-copy-or-rename-file):
- Handle PRESERVE-SELINUX-CONTEXT.
- (tramp-do-copy-or-rename-file): Add progress reporter.
- (tramp-do-copy-or-rename-file-directly): Do not use
- `tramp-handle-file-remote-p'.
- (tramp-do-copy-or-rename-file-out-of-band):
- Use `tramp-compat-delete-directory'.
- (tramp-do-copy-or-rename-file-out-of-band)
- (tramp-compute-multi-hops, tramp-maybe-open-connection):
- Use `format-spec-make'.
- (tramp-handle-delete-file): Add TRASH arg.
- (tramp-handle-dired-uncache): Flush directory cache, not only file
- cache.
- (tramp-handle-expand-file-name)
- (tramp-completion-handle-file-name-all-completions)
- (tramp-completion-handle-file-name-completion):
- Use `tramp-connectable-p'.
- (tramp-handle-start-file-process): Set connection property "vec".
- Use it, in order to invalidate file caches. Check only for
- `remote-tty' process property.
- Implement tty setting. (Bug#4604, Bug#6360)
- (tramp-file-name-for-operation): Add `call-process-region' and
- `set-file-selinux-context'.
- (tramp-find-foreign-file-name-handler)
- (tramp-advice-make-auto-save-file-name)
- (tramp-set-auto-save-file-modes): Remove superfluous check for
- `stringp'. This is done inside `tramp-tramp-file-p'.
- (tramp-file-name-handler): Trace 'quit. Catch the error for some
- operations when we are in completion mode. This gives the user
- the chance to correct the file name in the minibuffer.
- (tramp-completion-mode-p): Use `non-essential'.
- (tramp-handle-file-name-all-completions): Backward/ XEmacs
- compatibility: Use `completion-ignore-case' if
- `read-file-name-completion-ignore-case' does not exist.
- (tramp-get-debug-buffer): Use `tramp-debug-outline-regexp'.
- (tramp-find-shell, tramp-open-connection-setup-interactive-shell):
- `tramp-open-shell'.
- (tramp-action-password): Hide password prompt before next run.
+ * custom.el (custom-theme-set-variables): Remove dead code.
+ Obey custom--inhibit-theme-enable.
+ (custom--inhibit-theme-enable): New var.
+ (provide-theme): Obey it.
+ (load-theme): Replace load with manual read/eval, in order to
+ check for correctness. Use custom-theme-name-valid-p.
+ (custom-theme-name-valid-p): New function.
+ (custom-available-themes): Use it.
+
+ * cus-edit.el (custom--initialize-widget-variables): New function.
+ (Custom-mode): Use it.
+
+ * cus-face.el (custom-theme-set-faces): Remove dead code.
+ Obey custom--inhibit-theme-enable.
+
+ * help-mode.el (help-theme-def, help-theme-edit): New buttons.
+
+2010-10-12 Juanma Barranquero <lekktu@gmail.com>
+
+ * net/telnet.el (telnet-mode-map): Fix previous change (bug#7193).
+
+2010-10-12 Jan Djärv <jan.h.d@swipnet.se>
+
+ * term/ns-win.el (ns-right-alternate-modifier): New defvar.
+ (ns-right-option-modifier): New alias for ns-right-alternate-modifier.
+ (mac-right-option-modifier): New alias for ns-right-option-modifier.
+
+ * cus-start.el (all): ns-right-alternate-modifier is new.
+
+2010-10-12 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/lisp.el (lisp-completion-at-point):
+ Use emacs-lisp-mode-syntax-table for the whole function.
+
+2010-10-12 David Koppelman <koppel@ece.lsu.edu>
+
+ * hi-lock.el (hi-lock-font-lock-hook): Check font-lock-fontified
+ instead of font-lock-mode before adding keywords.
+ Remove hi-lock-mode off code. Remove inhibit hack.
+ (hi-lock-set-pattern): Only add keywords if font-lock-fontified
+ non-nil; removed hook inhibit hack.
+
+2010-10-12 Glenn Morris <rgm@gnu.org>
+
+ * emacs-lisp/shadow.el (find-emacs-lisp-shadows): Rename it...
+ (load-path-shadows-find): ... to this.
+ (list-load-path-shadows): Update for above change.
+
+ * mail/mail-utils.el (mail-mbox-from): Also try return-path.
+
+2010-10-11 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * mail/hashcash.el, net/imap.el, pgg-parse.el, pgg.el:
+ Fix comment for declare-function.
+
+2010-10-11 Chong Yidong <cyd@stupidchicken.com>
+
+ * custom.el (custom-fix-face-spec): New function; code moved from
+ custom-face-edit-fix-value.
+ (custom-push-theme): Use it when checking if a face has been
+ changed outside customize.
+ (custom-available-themes): New function.
+ (load-theme): Use it.
+
+ * cus-edit.el (custom-face-edit-fix-value): Use custom-fix-face-spec.
+
+ * custom.el (custom-push-theme): Cleanup (use cond).
+ (disable-theme): Recompute the saved-face property.
+ (custom-theme-recalc-face): Follow face alias before setting prop.
+
+ * image.el (image-checkbox-checked, image-checkbox-unchecked):
+ New variables, containing checkbox images.
+
+ * startup.el (fancy-startup-tail):
+ * wid-edit.el (checkbox): Use them.
+
+2010-10-10 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * shell.el (shell-mode-map):
+ * progmodes/modula2.el (m2-mode-map):
+ * progmodes/inf-lisp.el (inferior-lisp-mode-map):
+ * play/mpuz.el (mpuz-mode-map):
+ * play/landmark.el (lm-mode-map):
+ * play/decipher.el (decipher-mode-map):
+ * play/5x5.el (5x5-mode-map):
+ * net/telnet.el (telnet-mode-map):
+ * net/quickurl.el (quickurl-list-mode-map):
+ * net/mairix.el (mairix-searches-mode-map):
+ * net/eudc-hotlist.el (eudc-hotlist-mode-map):
+ * net/dig.el (dig-mode-map):
+ * mail/mspools.el (mspools-mode-map):
+ * hexl.el (hexl-mode-map):
+ * emulation/ws-mode.el (wordstar-C-k-map, wordstar-mode-map)
+ (wordstar-C-o-map, wordstar-C-q-map):
+ * emacs-lisp/edebug.el (edebug-eval-mode-map):
+ * emacs-lisp/chart.el (chart-map):
+ * edmacro.el (edmacro-mode-map):
+ * erc/erc-list.el (erc-list-menu-mode-map):
+ * array.el (array-mode-map): Declare and define in one step.
+
+ * vc/log-view.el (log-view-mode-map): Bind revert-buffer.
+
+2010-10-10 Daiki Ueno <ueno@unixuser.org>
+
+ * epa.el (epa-passphrase-callback-function): Display filename
+ passed as the 3rd arg.
+ * epa-file.el (epa-file-passphrase-callback-function):
+ Pass filename to epa-passphrase-callback-function.
+
+2010-10-09 Chong Yidong <cyd@stupidchicken.com>
+
+ * cus-edit.el (custom-face-widget-to-spec)
+ (custom-face-get-current-spec, custom-face-state): New functions.
+ (custom-face-set, custom-face-mark-to-save)
+ (custom-face-value-create, custom-face-state-set): Use them.
+
+ * cus-theme.el (custom-theme--listed-faces): New var.
+ (customize-create-theme): Use *Custom Theme* as the buffer name.
+ Set revert-buffer-function. Optional arg BUFFER. Insert all
+ faces listed in custom-theme--listed-faces.
+ (custom-theme-revert): New function.
+ (custom-theme-add-variable, custom-theme-add-face): Insert at the
+ bottom of the list.
+ (custom-theme-write): Prompt for theme name if empty.
+ (custom-theme-write-variables): Use dolist.
+ (custom-theme-write-faces): Handle hidden (collapsed) widgets.
+
+2010-10-09 Alan Mackenzie <acm@muc.de>
+
+ Enhance fontification of declarators to take account of the
+ presence/absence of "typedef".
+
+ * cc-engine.el (c-forward-type): New &optional param
+ "brace-block-too".
+ (c-forward-decl-or-cast-1): cdr of return value now indicates the
+ presence of either or both of a "struct"-like keyword and "typedef".
+
+ * cc-fonts.el (c-complex-decl-matchers): Remove the heuristic
+ fontification of declarators which follow a "}".
+ (c-font-lock-declarations): Fontify declarators according to the
+ presence/absence of "typedef".
+
+ * cc-langs.el (c-typedef-kwds c-typedef-key): New lang variable
+ for "typedef".
+ (c-typedef-decl-key): New lang variable built from
+ c-typedef-decl-kwds.
+
+2010-10-09 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * ibuffer.el (ibuffer-mode-map): Don't redefine the cursor keys,
+ since that's too annoying. Move the filter groups commands to
+ TAB/backtab.
+
+ * epa.el (epa-passphrase-callback-function): Say what we're
+ querying the password for.
+
+ * ibuffer.el (ibuffer-visit-buffer): To mimick list-buffers
+ behaviour, don't bury the ibuffer buffer when visiting other buffers.
+
+2010-10-08 Chong Yidong <cyd@stupidchicken.com>
+
+ * cus-edit.el (custom-commands, custom-buffer-create-internal)
+ (custom-magic-value-create): Pad button tags with spaces.
+ (custom-face-edit): New variable.
+ (custom-face-value-create): Determine whether to use the usual
+ face editor here, instead of using custom-face-selected.
+ Pass face defaults to custom-face-edit widget.
+ (custom-face-selected, custom-display-unselected): Delete widgets.
+ (custom-display-unselected-match): Function removed.
+ (custom-face-set, custom-face-mark-to-save):
+ Accept custom-face-edit widgets as the direct widget child.
+
+ * wid-edit.el (widget--completing-widget): New var.
+ (widget-default-complete): Bind it when doing completion.
+ (widget-string-complete, widget-file-complete): Use it.
+
+2010-10-09 Glenn Morris <rgm@gnu.org>
+
+ * calendar/cal-hebrew.el (holiday-hebrew-rosh-hashanah)
+ (holiday-hebrew-passover, holiday-hebrew-tisha-b-av)
+ (holiday-hebrew-misc): Small simplifications.
+
+ * emacs-lisp/authors.el (authors-valid-file-names): Add b2m.c.
+
+ * net/browse-url.el: Don't require thingatpt, term, dired,
+ executable, or w3-auto when compiling.
+ (dired-get-filename, term-char-mode, term-send-down, term-send-string):
+ Declare.
+ (browse-url-text-emacs): Require term.
+
+2010-10-08 Andreas Schwab <schwab@linux-m68k.org>
+
+ * net/browse-url.el (browse-url-xdg-open): Remove use of /bin/sh.
+
+2010-10-08 Glenn Morris <rgm@gnu.org>
+
+ * emacs-lisp/cl-compat.el, emacs-lisp/lmenu.el: Move to obsolete/.
+
+ * emacs-lisp/shadow.el (lisp-shadow): Change prefix.
+ (shadows-compare-text-p): Make it an obsolete alias for...
+ (load-path-shadows-compare-text): ... new name.
+ (find-emacs-lisp-shadows): Update for above name change.
+ (load-path-shadows-same-file-or-nonexistent): New name for the old
+ shadow-same-file-or-nonexistent.
+
+2010-10-08 Chong Yidong <cyd@stupidchicken.com>
+
+ * minibuffer.el (completion--some, completion--do-completion)
+ (minibuffer-complete-and-exit, minibuffer-completion-help)
+ (completion-basic-try-completion)
+ (completion-basic-all-completions)
+ (completion-pcm--find-all-completions): Use lexical-let to
+ avoid some false matches in variable completion (Bug#7056)
+
+2010-10-08 Olof Ohlsson Sax <olof.ohlsson.sax@gmail.com> (tiny change)
+
+ * vc-svn.el (vc-svn-merge-news): Use --non-interactive. (Bug#7152)
+
+2010-10-08 Leo <sdl.web@gmail.com>
+
+ * dnd.el (dnd-get-local-file-name): If MUST-EXIST is non-nil, only
+ return non-nil if the file exists (Bug#7090).
+
+2010-10-08 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * minibuffer.el (completion--replace):
+ Better preserve markers (bug#7138).
+
+2010-10-08 Juanma Barranquero <lekktu@gmail.com>
+
+ * server.el (server-process-filter): Doc fix.
+
+2010-10-08 Drew Adams <drew.adams@oracle.com>
+
+ * dired.el (dired-save-positions): Doc fix. (Bug#7119)
+
+2010-10-08 Glenn Morris <rgm@gnu.org>
+
+ * vc/ediff-wind.el (ediff-setup-control-frame):
+ * vc/ediff-ptch.el (ediff-default-backup-extension):
+ * vc/ediff-diff.el (ediff-shell, ediff-diff-options)
+ (ediff-exec-process): Remove system-types emx, windows-95.
+
+ * net/browse-url.el (browse-url-xdg-open): Shell-quote url. (Bug#7166)
+
+2010-10-07 Chong Yidong <cyd@stupidchicken.com>
+
+ * cus-edit.el (custom-variable, custom-face): Doc fix.
+ (custom-face-edit): Add value-create attribute.
+ (custom-face-edit-value-create)
+ (custom-face-edit-value-visibility-action): New functions.
+ Hide unused face attributes by default, and add a visibility toggle.
+ (custom-face-edit-deactivate): Show empty values with shadow face.
+ (custom-face-selected): Only use this for face specs with default
+ attributes.
+ (custom-face-value-create): Cleanup.
+
+ * wid-edit.el (widget-checklist-value-create): Use dolist.
+ (widget-checklist-match-find): Make second arg optional.
+
+2010-10-07 Glenn Morris <rgm@gnu.org>
+
+ * hilit-chg.el (hilit-chg-get-diff-info, hilit-chg-get-diff-list-hk):
+ Prefix things.
+
+ * emacs-lisp/shadow.el (shadow-font-lock-keywords)
+ (load-path-shadows-mode, list-load-path-shadows): Rename shadow-mode to
+ load-path-shadows-mode, update references.
+ (load-path-shadows-font-lock-keywords, load-path-shadows-find-file):
+ Rename variable and button.
+ (list-load-path-shadows): Update button caller.
+
+2010-10-07 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/smie.el (smie-bnf-classify): New function.
+ (smie-bnf-precedence-table): Use it to remember the closers/openers.
+ (smie-merge-prec2s): Handle those new entries.
+ (smie-prec2-levels): Only set precedence to nil for actual
+ openers/closers.
+ * progmodes/octave-mod.el (octave-smie-op-levels): Remove dummy entry
+ that is now unnecessary.
+
+2010-10-07 Miles Bader <miles@gnu.org>
+
+ * emacs-lisp/regexp-opt.el (regexp-opt): Add `symbols' mode.
+
+2010-10-07 Glenn Morris <rgm@gnu.org>
+
+ * mail/rmail.el (mail-sendmail-delimit-header, mail-header-end)
+ (mail-position-on-field): Remove declarations.
+ (mail-position-on-field): Autoload it.
+ (rmail-retry-failure): Replace use of mail-sendmail-delimit-header
+ and mail-header-end. Don't require sendmail.
+
+ * emacs-lisp/shadow.el (shadow-font-lock-keywords): New variable.
+ (shadow-mode): New mode.
+ (shadow-find-file): New button.
+ (list-load-path-shadows): Use shadow-mode and buttons.
+
+ * iimage.el (iimage-version): Remove.
+ (iimage-mode-image-search-path, iimage-mode-image-regex-alist):
+ Turn into defcustoms.
+ (iimage-mode-map): Give it a doc string.
+
+ * calendar/appt.el (appt-activate): Give a warning rather than an error
+ if there is no diary-file.
+
+2010-10-06 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp-sh.el (tramp-sh-file-name-handler-alist):
+ Use `tramp-handle-find-backup-file-name'.
+
+2010-10-06 Glenn Morris <rgm@gnu.org>
+
+ * font-core.el (font-lock-defaults-alist): Remove variable.
+ (font-lock-mode): Doc fix.
+ (font-lock-default-function): Do not consult font-lock-defaults-alist.
+ * font-lock.el (font-lock-refresh-defaults): Doc fix.
+ (font-lock-set-defaults): Doc fix.
+ Do not consult font-lock-defaults-alist.
+
+ * hilit-chg.el (hilit-chg-get-diff-list-hk): Declare `e' for compiler.
+
+ * emacs-lisp/cl.el: No longer provide cl-19.
+
+2010-10-05 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-handle-directory-files-and-attributes)
+ (tramp-handle-file-exists-p, tramp-handle-file-newer-than-file-p):
+ New defuns, taken from tramp-smb.el.
+ (tramp-coding-system-change-eol-conversion)
+ (tramp-set-process-query-on-exit-flag): Remove.
+
+ * net/tramp-compat.el (top): Do not check for byte-compiler objects.
+ (tramp-compat-coding-system-change-eol-conversion)
+ (tramp-compat-set-process-query-on-exit-flag): New defuns, taken
+ from tramp.el.
+
+ * net/tramp-gvfs.el:
+ * net/tramp-gw.el: Replace `tramp-set-process-query-on-exit-flag'
+ by `tramp-compat-set-process-query-on-exit-flag'.
+
+ * net/tramp-imap.el (tramp-imap-file-name-handler-alist):
+ Use `tramp-handle-directory-files-and-attributes',
+ `tramp-handle-file-exists-p' and
+ `tramp-handle-file-newer-than-file-p'.
+ (tramp-imap-handle-file-exists-p)
+ (tramp-imap-handle-file-executable-p)
+ (tramp-imap-handle-file-readable-p)
+ (tramp-imap-handle-directory-files-and-attributes)
+ (tramp-imap-handle-file-newer-than-file-p): Remove.
+
+ * net/tramp-sh.el: Replace `tramp-set-process-query-on-exit-flag'
+ by `tramp-compat-set-process-query-on-exit-flag' and
+ `tramp-coding-system-change-eol-conversion' by
+ `tramp-compat-coding-system-change-eol-conversion'.
+
+ * net/tramp-smb.el (tramp-smb-file-name-handler-alist):
+ Use `tramp-handle-directory-files-and-attributes',
+ `tramp-handle-file-exists-p' and
+ `tramp-handle-file-newer-than-file-p'.
+ (tramp-smb-handle-directory-files-and-attributes)
+ (tramp-smb-handle-file-exists-p)
+ (tramp-smb-handle-file-newer-than-file-p): Remove.
+ (tramp-smb-maybe-open-connection):
+ Replace `tramp-set-process-query-on-exit-flag' by
+ `tramp-compat-set-process-query-on-exit-flag'.
+
+2010-10-05 Glenn Morris <rgm@gnu.org>
+
+ * obsolete/rnews.el, obsolete/rnewspost.el: Remove files.
+
+2010-10-04 Michael Albinus <michael.albinus@gmx.de>
+
+ Continue reorganization of load dependencies. (Bug#7156)
+
+ * net/tramp.el (tramp-handle-file-local-copy-hook)
+ (tramp-delete-temp-file-function): Move down.
+ (tramp-exists-file-name-handler): Move up.
+ (tramp-register-file-name-handlers): Simplify autoload.
+ (tramp-handle-write-region-hook, tramp-handle-directory-file-name)
+ (tramp-handle-directory-files, tramp-handle-dired-uncache)
+ (tramp-handle-file-modes, tramp-handle-file-name-as-directory)
+ (tramp-handle-file-name-completion)
+ (tramp-handle-file-name-directory)
+ (tramp-handle-file-name-nondirectory, tramp-handle-file-regular-p)
+ (tramp-handle-file-remote-p, tramp-handle-file-symlink-p)
+ (tramp-handle-find-backup-file-name)
+ (tramp-handle-insert-file-contents, tramp-handle-load)
+ (tramp-handle-substitute-in-file-name)
+ (tramp-handle-unhandled-file-name-directory)
+ (tramp-mode-string-to-int, tramp-local-host-p)
+ (tramp-make-tramp-temp-file): Move from tramp-sh.el.
+
+ * net/tramp-gvfs.el (top):
+ * net/tramp-smb.el (top): Do not require 'tramp-sh.
+
+ * net/tramp-sh.el (all): Move several objects to tramp.el, see
+ there. Rename `tramp-handle-*' to `tramp-sh-handle-*'.
+
+2010-10-04 Glenn Morris <rgm@gnu.org>
+
+ * calendar/appt.el (appt-add): Ensure reminders are enabled.
+ (appt-activate): Give status messages.
+
+2010-10-03 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * net/gnutls.el: Improve docs. Remove starttls and ssl emulation.
+ Provide only `open-gnutls-stream' (formerly `open-ssl-stream') and
+ `gnutls-negotiate' (formerly `starttls-negotiate').
+ Remove trivial wrapper `starttls-open-stream'.
+
+2010-10-03 Dan Nicolaescu <dann@ics.uci.edu>
+
+ Make 'g' (AKA revert-buffer) rerun the VC log, log-incoming and
+ log-outgoing commands.
+ * vc/vc.el (vc-log-internal-common): Add a new argument and use it
+ to create a buffer local revert-buffer-function variable.
+ (vc-print-log-internal, vc-log-incoming, vc-log-outgoing): Pass a
+ revert-buffer-function lambda.
+
+2010-10-03 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * net/gnutls.el (starttls-negotiate): Use the plist interface to
+ `gnutls-boot'. Make TYPE the only required parameter.
+ Allow TRUSTFILES and KEYFILES to be lists.
+ (open-ssl-stream): Use it.
+
+2010-10-03 Glenn Morris <rgm@gnu.org>
+
+ * subr.el (directory-sep-char): Remove obsolete variable.
+ * net/tramp-compat.el: Don't mess about with the byte-compiler unless
+ it is "necessary".
+
+ * vc/vc-hooks.el (vc-header-alist): Remove obsolete variable.
+ * vc/vc.el (vc-static-header-alist): Doc fix.
+ * vc/vc-cvs.el (vc-cvs-header):
+ * vc/vc-rcs.el (vc-rcs-header):
+ * vc/vc-sccs.el (vc-sccs-header):
+ * vc/vc-svn.el (vc-svn-header): Do not consult vc-header-alist.
+ * obsolete/vc-mcvs.el (vc-mcvs-header):
+ * progmodes/cperl-mode.el (cperl-mode): Only set vc-header-alist
+ on XEmacs.
+
+2010-10-03 Chong Yidong <cyd@stupidchicken.com>
+
+ * emacs-lisp/bytecomp.el (byte-compile-from-buffer):
+ Remove obsolete use of binary-overwrite-mode (Bug#7001).
+
+2010-10-03 Glenn Morris <rgm@gnu.org>
+
+ * obsolete/x-menu.el: Remove file, obsolete since 21.1
+
+ * textmodes/rst.el (rst-font-lock-keywords-function):
+ Drop Emacs 20 code.
+
+ * textmodes/artist.el (artist-replace-char): Drop Emacs 20 code.
+
+ * printing.el: Drop Emacs 20 code.
+
+ * calendar/appt.el (appt-delete): Don't autoload it (you can't use it
+ without having used appt.el already).
+
+ * subr.el (make-local-hook): Remove function obsolete since 21.1.
+ * progmodes/cc-mode.el (make-local-hook): Don't do cc-bytecomp stuff.
+ (c-basic-common-init, c-font-lock-init): Only call make-local-hook on
+ XEmacs.
+ * progmodes/cc-styles.el (make-local-hook): Don't do cc-bytecomp stuff.
+ (c-make-styles-buffer-local): Only call make-local-hook on XEmacs.
+
+ * ps-def.el (leading-code-private-22, charset-bytes, charset-id)
+ (charset-width, find-charset-region, chars-in-region, forward-point)
+ (encode-coding-string, coding-system-p, ccl-execute-on-string)
+ (define-ccl-program, multibyte-string-p, string-make-multibyte):
+ Remove compatibility cruft (none of these are used by ps*.el).
+
+2010-10-03 Kevin Rodgers <kevin.d.rodgers@gmail.com>
+
+ * subr.el (booleanp): Return t instead of a list (Bug#7086).
+
+2010-10-03 Chong Yidong <cyd@stupidchicken.com>
+
+ * server.el (server-process-filter, server-return-error):
+ Give emacsclient time to shut down after receiving an error string.
+
+2010-10-02 Michael Albinus <michael.albinus@gmx.de>
+
+ * files.el (remote-file-name-inhibit-cache): New defcustom.
+
+ * time.el (display-time-file-nonempty-p):
+ Use `remote-file-name-inhibit-cache'.
+
+ * net/tramp.el (tramp-completion-reread-directory-timeout):
+ Fix docstring.
+
+ * net/tramp-cache.el (tramp-cache-inhibit-cache): Remove.
+ (tramp-get-file-property): Replace `tramp-cache-inhibit-cache' by
+ `remote-file-name-inhibit-cache'. Check also for an integer
+ value. Add/increase counter when `tramp-verbose' >= 10.
+ (tramp-set-file-property): Add/increase counter when
+ `tramp-verbose' >= 10.
+
+ * net/tramp-cmds.el (tramp-cleanup-all-connections)
+ (tramp-cleanup-all-buffers): Set tramp-autoload cookie.
+ (tramp-bug): Set tramp-autoload cookie. Report all interned
+ tramp-* variables. Report also `remote-file-name-inhibit-cache'.
+ (tramp-reporter-dump-variable): Fix docstring. Mask non-7bit
+ characters only in strings.
+
+ * net/tramp-compat.el (remote-file-name-inhibit-cache): Define due
+ to backward compatibility.
+
+ * net/tramp-sh.el (tramp-handle-verify-visited-file-modtime)
+ (tramp-handle-file-name-all-completions)
+ (tramp-handle-vc-registered): Use `remote-file-name-inhibit-cache'.
+ (tramp-open-connection-setup-interactive-shell):
+ Call `tramp-cleanup-connection' directly.
+
+2010-10-02 Glenn Morris <rgm@gnu.org>
+
+ * emacs-lisp/checkdoc.el (checkdoc-minor-keymap): Remove obsolete alias.
+
+ * subr.el (char-bytes): Remove obsolete function.
+
+ * isearch.el (isearch-return-char): Remove obsolete function.
+
+ * mouse.el: No longer provide mldrag.
+ (mldrag-drag-mode-line, mldrag-drag-vertical-line):
+ Remove obsolete aliases.
+
+ * comint.el (comint-kill-output): Remove obsolete alias.
+
+ * composite.el (decompose-composite-char): Remove obsolete function.
+ * ps-def.el (decompose-composite-char): Remove unused function.
+
+ * iswitchb.el (iswitchb-default-keybindings): Remove obsolete function.
+
+ * outline.el (outline-visible): Remove obsolete function.
+
+ * term/pc-win.el (x-frob-font-slant, x-frob-font-weight):
+ * faces.el (internal-find-face, internal-get-face)
+ (frame-update-faces, frame-update-face-colors)
+ (x-frob-font-weight, x-frob-font-slant)
+ (internal-frob-font-weight, internal-frob-font-slant)
+ (x-make-font-bold, x-make-font-demibold, x-make-font-unbold)
+ (x-make-font-italic, x-make-font-oblique, x-make-font-unitalic)
+ (x-make-font-bold-italic): Remove functions and aliases, obsolete
+ since Emacs 21.1.
+ * emulation/viper-util.el (viper-get-face):
+ * obsolete/lucid.el (find-face, get-face): Use facep.
+ * vc/ediff-init.el (ediff-valid-color-p, ediff-get-face):
+ Remove unused functions.
+ * vc/ediff-util.el (ediff-submit-report): Doc fix.
+
+ * emacs-lisp/bytecomp.el (byte-compile-file): Use kill-emacs-hook to
+ delete tempfile if interrupted during compilation.
+
+2010-10-01 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * net/tls.el (tls-starttls-switches): Give up on using starttls with
+ gnutls-cli.
+ (tls-program): Add --insecure to be consistent with the defaults from
+ openssl s_client. Now all three commands are insecure.
+
+2010-10-01 Eli Zaretskii <eliz@gnu.org>
+
+ * makefile.w32-in (DEST, TAGS, TAGS-LISP, TAGS-nmake)
+ (TAGS-LISP-nmake, TAGS-gmake, TAGS-LISP-gmake, TAGS-SH)
+ (TAGS-LISP-SH, TAGS-CMD, TAGS-LISP-CMD): New targets.
+
+2010-10-01 Glenn Morris <rgm@gnu.org>
+
+ * obsolete/sc.el: Remove file.
+
+ * files.el (temporary-file-directory): On darwin, also try
+ DARWIN_USER_TEMP_DIR (see discussion in bug#7135).
+
+2010-10-01 Juanma Barranquero <lekktu@gmail.com>
+
+ * server.el (server-start): Revert part of 2010-09-30T02:53:26Z!lekktu@gmail.com.
+ Let's not break compatibility gratuitously, shall we?
+
+2010-09-30 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * net/tls.el (tls-starttls-switches): New variable.
+ (tls-find-starttls-argument): Use it.
+ (open-tls-stream): Ditto.
+
+ * net/netrc.el (netrc-credentials): Return the value of the "default"
+ entry.
+ (netrc-machine): Ditto.
+
+2010-09-30 Eli Zaretskii <eliz@gnu.org>
+
+ * vc/vc-hooks.el (vc-default-mode-line-string): Doc fix.
+
+2010-09-30 Juanma Barranquero <lekktu@gmail.com>
+
+ * server.el (server-start): Don't write pid to the authentication file.
+ (server-create-tty-frame): Don't send pid.
+ (server-process-filter): Send pid at the start of every connection.
+
+2010-09-30 Glenn Morris <rgm@gnu.org>
+
+ * calendar/diary-lib.el (view-diary-entries, list-diary-entries)
+ (show-all-diary-entries): Remove obsolete function aliases.
+
+ * calendar/appt.el (appt-issue-message, appt-visible, appt-msg-window):
+ Remove options, obsolete since 22.1.
+ (appt-display-format, appt-display-message):
+ Remove backwards-compatibility code.
+ (appt-check): No longer check appt-issue-message.
+ (appt-make-list): No longer autoload it. Doc fix. No longer
+ activate the package.
+
+2010-09-29 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * net/gnutls.el (starttls-negotiate): Loop a lot longer.
+ (starttls-negotiate): Just call boot, and let the handshake be
+ triggered from the read loop.
+
+2010-09-29 Glenn Morris <rgm@gnu.org>
+
+ * calendar/diary-lib.el (diary-list-entries): Use temp buffers when
+ not displaying the diary.
+ (diary-add-to-list): If no buffer-file-name, fall back to diary-file.
+ * calendar/appt.el (appt-check): No longer need to kill diary.
+
+ * calendar/diary-lib.el (diary-list-entries): Move the
+ "Preparing..." message entirely here.
+ (diary-simple-display, diary-fancy-display): Move "Preparing..."
+ messages to diary-list-entries.
+ (diary-include-other-diary-files): Use LIST-ONLY rather than setting
+ diary-display-function.
+
+ * calendar/diary-lib.el (diary-include-other-diary-files):
+ Trap some recursive includes.
+
+ * calendar/appt.el (appt-activate): Check diary file.
+
+2010-09-29 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * pgg.el (pgg-run-at-time-1): Define it for XEmacs only; fix if/else
+ construction.
+
+ * calendar/time-date.el: No need to require cl for Emacs 21.
+
+2010-09-28 Glenn Morris <rgm@gnu.org>
+
+ * calendar/appt.el (appt-check): Minor simplification.
+
+2010-09-28 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * mail/sendmail.el (mail-citation-prefix-regexp): Remove "}" from
+ citation prefix.
+
+2010-09-27 Andreas Schwab <schwab@linux-m68k.org>
+
+ * emacs-lisp/byte-opt.el (byte-optimize-form-code-walker):
+ Avoid infinite recursion on erroneous lambda form. (Bug#7114)
+
+2010-09-27 Kenichi Handa <handa@m17n.org>
+
+ * tar-mode.el (tar-header-block-tokenize): Decode filenames in
+ "ustar" format.
+
+2010-09-27 Kenichi Handa <handa@m17n.org>
+
+ * international/mule.el (define-coding-system): Docstring fixed.
+
+ * international/mule-diag.el (describe-character-set): Use princ
+ with proper print-length and print-level instead of insert.
+
+2010-09-27 Juanma Barranquero <lekktu@gmail.com>
+
+ * window.el (walk-windows): Doc fix (bug#7105).
+
+2010-09-27 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/float-sup.el (e): Remove.
+
+2010-09-27 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * net/gnutls.el (gnutls, gnutls-log-level): Add group and custom
+ variable.
+ (starttls-negotiate): Use it.
+
+2010-09-27 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * net/gnutls.el (starttls-negotiate): Stop looping when we get a t
+ back.
+
+2010-09-26 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/pcase.el (pcase-let*, pcase-let): plet -> pcase-let.
+
+2010-09-26 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * net/gnutls.el (starttls-negotiate): Avoid the cl.el decf function.
+
+ * net/netrc.el (netrc-store-data): New function.
+
+2010-09-26 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * net/gnutls.el: GnuTLS glue code to set up a connection.
+
+2010-09-25 Julien Danjou <julien@danjou.info>
+
+ * notifications.el: Call dbus-register-signal only if it is bound.
+
+2010-09-25 Glenn Morris <rgm@gnu.org>
+
+ * eshell/em-alias.el, eshell/em-banner.el, eshell/em-basic.el:
+ * eshell/em-cmpl.el, eshell/em-dirs.el, eshell/em-glob.el:
+ * eshell/em-hist.el, eshell/em-ls.el, eshell/em-pred.el:
+ * eshell/em-prompt.el, eshell/em-rebind.el, eshell/em-script.el:
+ * eshell/em-smart.el, eshell/em-term.el, eshell/em-unix.el:
+ * eshell/esh-cmd.el, eshell/esh-ext.el, eshell/esh-io.el:
+ * eshell/esh-mode.el, eshell/esh-proc.el, eshell/esh-test.el:
+ * eshell/esh-util.el, eshell/esh-var.el:
+ Remove leading `*' from docs of faces and defcustoms.
+
+2010-09-25 Ulrich Mueller <ulm@gentoo.org>
+
+ * eshell/em-ls.el (eshell-ls-archive-regexp):
+ * eshell/esh-util.el (eshell-tar-regexp):
+ * ibuffer.el (ibuffer-compressed-file-name-regexp):
+ * info.el (Info-suffix-list):
+ * international/mule.el (auto-coding-alist):
+ * woman.el (woman-file-regexp, woman-file-compression-regexp):
+ * progmodes/etags.el (tags-compression-info-list):
+ Support xz compression.
+
+2010-09-25 Chong Yidong <cyd@stupidchicken.com>
+
+ * files.el (get-free-disk-space): Don't assume the "df" output
+ columns line up (Bug#6995).
+
+2010-09-25 Juanma Barranquero <lekktu@gmail.com>
+
+ * finder.el (finder-unknown-keywords):
+ * progmodes/gdb-mi.el (gdb-jsonify-buffer, gdb-running-threads-count):
+ * progmodes/etags.el (tags-table-including): Fix typos in docstrings.
+
+2010-09-25 Juanma Barranquero <lekktu@gmail.com>
+
+ * server.el (server-start): Revert part of 2010-08-08 change. Using
+ address 127.0.0.1 for local host is now done in Fmake_network_process.
+
+2010-09-24 Glenn Morris <rgm@gnu.org>
+
+ * image-mode.el, progmodes/compile.el, progmodes/gud.el:
+ * progmodes/mixal-mode.el, textmodes/bibtex-style.el:
+ * textmodes/css-mode.el, textmodes/dns-mode.el:
+ Move autoloaded auto-mode-alist entries to files.el.
+ * files.el (auto-mode-alist): Move entries here.
+
+2010-09-23 Glenn Morris <rgm@gnu.org>
+
+ * isearch.el (isearch-lazy-highlight-cleanup)
+ (isearch-lazy-highlight-initial-delay)
+ (isearch-lazy-highlight-interval)
+ (isearch-lazy-highlight-max-at-a-time, isearch-lazy-highlight-face):
+ * net/net-utils.el (ipconfig-program-options):
+ Move aliases to options before the associated definitions.
+
+2010-09-23 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * newcomment.el (comment-normalize-vars): Better test validity of
+ comment-end-skip.
+
+2010-09-23 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/float-sup.el (float-pi): New name for `pi'.
+ (float-e): New name for `e'.
+ (degrees-to-radians, radians-to-degrees):
+ * calendar/solar.el (solar-longitude):
+ * calculator.el (calculator-registers, calculator-funcall):
+ * textmodes/artist.el (artist-spray-random-points):
+ * play/bubbles.el (bubbles--initialize-images): Use new names.
+
+2010-09-23 Eric M. Ludlam <zappo@gnu.org>
+
+ Update to CEDET 1.0's version of EIEIO.
+
+ * emacs-lisp/eieio.el (eieio-specialized-key-to-generic-key):
+ New function.
+ (eieio-defmethod, eieio-generic-form, eieio-generic-call): Use it.
+ (eieio-default-eval-maybe): Eval val instead of unquoting only.
+ (class-precedence-list): If class is nil, return nil.
+ (eieio-generic-call): If class of first input arg is nil, don't
+ look up static methods, and do check for primary methods.
+ (initialize-instance): See if the default needs to be evaluated
+ during the constructor.
+ (eieio-perform-slot-validation-for-default): Don't do the check
+ for values that will eventually be evaluated.
+ (eieio-eval-default-p): New function.
+ (eieio-default-eval-maybe): Use it.
+
+2010-09-23 Jan Moringen <jan.moringen@uni-bielefeld.de>
+
+ * emacs-lisp/eieio.el (eieio-defclass): Allow :c3
+ method-invocation-order.
+ (eieio-c3-candidate, eieio-c3-merge-lists): New functions.
+ (eieio-class-precedence-dfs): Compute class precedence list using
+ dfs algorithm.
+ (eieio-class-precedence-bfs): Compute class precedence list using
+ bfs algorithm.
+ (eieio-class-precedence-c3): Compute class precedence list using
+ c3 algorithm.
+ (class-precedence-list): New function.
+ (eieiomt-method-list, eieiomt-sym-optimize): Use it.
+ (inconsistent-class-hierarchy): New error symbol.
+ (call-next-method): Stow the replacement argument list for future
+ call-next-method invocations.
+
+2010-09-23 Glenn Morris <rgm@gnu.org>
+
+ * calendar/appt.el (appt-check): If not displaying the diary,
+ use (diary 1) to only get the entries we need.
+ (appt-make-list): Sort diary-list-entries, if we cannot guarantee
+ that it is in day order. (Bug#7019)
+
+ * calendar/appt.el (appt-check): Rather than showing the diary,
+ just turn off invisible display, and only if needed.
+
+ * calendar/diary-lib.el (diary-list-entries): Doc fix. (Bug#7019)
+
+2010-09-23 Glenn Morris <rgm@gnu.org>
+
+ * emacs-lisp/bytecomp.el (byte-compile-file-form-defvar):
+ (byte-compile-defvar, byte-compile-cl-warn):
+ Start warnings with lower-case, like the majority.
+
+ * files.el (auto-mode-alist): Add .xa, .xw, .xsw for ld-script-mode.
+
+ * files.el (auto-mode-alist): Prefer C-mode for .xs. (Bug#7071)
+
+ * progmodes/ld-script.el (auto-mode-alist): Move to files.el.
+ * files.el (auto-mode-alist): Move ld-script entries here, further down
+ the list.
+
+ * vc/add-log.el: Don't require timezone when compiling.
+ (timezone-make-date-sortable): Autoload it.
+ (change-log-sortable-date-at): Don't require timezone.
+ Use `ignore-errors'.
+
+ * comint.el (comint-use-prompt-regexp-instead-of-fields):
+ Move alias before definition, so it does not need autoloading.
+
+ * emulation/crisp.el, emulation/cua-base.el, emulation/edt.el:
+ * emulation/pc-select.el, emulation/vip.el, international/iso-ascii.el:
+ * international/kkc.el, international/ogonek.el, mail/feedmail.el:
+ * net/browse-url.el, net/eudc-vars.el, net/net-utils.el:
+ * net/rcompile.el, net/rlogin.el, textmodes/enriched.el:
+ * textmodes/makeinfo.el, textmodes/page-ext.el, textmodes/picture.el:
+ * textmodes/refer.el, textmodes/spell.el, textmodes/table.el:
+ * textmodes/tex-mode.el, textmodes/two-column.el:
+ Remove leading `*' from docs of defcustoms etc.
+
+2010-09-23 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * net/netrc.el (netrc-parse): Remove encrypt.el mentions.
+
+2010-09-22 Dan Christensen <jdc@uwo.ca>
+
+ * calendar/time-date.el (date-to-time): Try using parse-time-string
+ first before using the slower timezone-make-date-arpa-standard.
+
+2010-09-22 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * calendar/time-date.el (format-seconds): Comment fix.
+
+2010-09-22 Glenn Morris <rgm@gnu.org>
+
+ * emacs-lisp/package.el (package-menu-mode): `revert-buffer-function'
+ is not automatically buffer-local.
+
+2010-09-21 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/smie.el (smie-debug--describe-cycle): Fix typo.
+ (smie-indent-comment): Be more careful with comment-start-skip.
+ (smie-indent-comment-close, smie-indent-comment-inside): New funs.
+ (smie-indent-functions): Use them.
+
+2010-09-21 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/ange-ftp.el (ange-ftp-skip-msgs): Add "^504 ..." message.
+
+2010-09-21 Jan Djärv <jan.h.d@swipnet.se>
+
+ * menu-bar.el (menu-bar-set-tool-bar-position): customize-set-variable
+ tool-bar-position. Don't modify frame parameters here.
+ (menu-bar-options-save): Add tool-bar-position.
+
+ * tool-bar.el (tool-bar-position): New defcustom (Bug#7049).
+
+2010-09-20 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * textmodes/reftex-parse.el (reftex-what-macro)
+ (reftex-context-substring): Let-bind forward-sexp-function to nil
+ since we don't need/want to treat \begin...\end as a block (bug#7053).
+
+ * emacs-lisp/lisp.el (up-list): Don't do nothing silently.
+
+ * simple.el (blink-matching-open): Use syntax-class.
+
+ * progmodes/pascal.el (pascal-mode): Use define-derived-mode.
+ Set invisibility spec for pascal's outline mode.
+ (pascal-outline-change): Clean up calling convention.
+ (pascal-show-all, pascal-hide-other-defuns): Update callers.
+
+ * progmodes/prolog.el (prolog-smie-forward-token)
+ (prolog-smie-backward-token): New functions.
+ (prolog-mode-variables): Use them to parse "!," correctly.
+ Set up smie-blink-matching for ".".
+
+ * textmodes/ispell.el (ispell-start, ispell-end): Rename from `start'
+ and `end'.
+ (ispell-region, ispell-process-line): Update users.
+
+ * textmodes/reftex-parse.el (reftex-what-macro): Don't hardcode
+ point-min==1.
+
+ * textmodes/ispell.el: Fix commenting convention.
+ (ispell-parse-output): Simplify, use push.
+ (ispell-region): Use match-string-no-properties.
+ (ispell-begin-skip-region-regexp): Use mapconcat to simplify.
+ (ispell-minor-mode): Use define-minor-mode.
+ (ispell-message): Remove unused var `skip-regexp'.
+ (ispell-add-per-file-word-list): Use dynamic let-binding.
+ Try and use the proper comment marker.
+
+ * mail/sendmail.el: Fix commenting convention.
+ (sendmail-send-it): Use line-beginning-position.
+
+ * help-fns.el (describe-variable): Add original value, if applicable.
+
+2010-09-20 Juanma Barranquero <lekktu@gmail.com>
+
+ * subr.el (y-or-n-p): Remove leftover code from 2010-09-17T13:30:30Z!monnier@iro.umontreal.ca.
+
+ * emacs-lisp/smie.el (smie-indent--hanging-p): Use `smie-indent--bolp'.
+
+2010-09-19 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/smie.el (smie-bnf-precedence-table): Improve error message.
+ (smie-debug--prec2-cycle, smie-debug--describe-cycle): New functions.
+ (smie-prec2-levels): Use them to better diagnose precedence cycles.
+ (smie-blink-matching-check): Don't signal a mismatch if car is t.
+ (smie-blink-matching-open): Rewrite to remove assumptions, so that
+ something like "." can also be a closer.
+ (smie--associative-p, smie-indent--hanging-p, smie-indent--bolp)
+ (smie-indent--offset, smie-indent--offset-rule, smie-indent--column):
+ Rename internal functions to use "--". Update callers.
+
+ * frame.el (make-frame-names-alist): Don't list frames on other displays.
+
+ * fringe.el (fringe-styles): New var.
+ (fringe-mode, fringe-query-style): Use it.
+
+2010-09-18 Michael R. Mauger <mmaug@yahoo.com>
+
+ * progmodes/sql.el: Version 2.8
+ (sql-login-params): Update widget structure; changes still needed.
+ (sql-product-alist): Add :list-all and :list-table features for
+ SQLite, Postgres and MySQL products.
+ (sql-redirect): Handle default value.
+ (sql-execute, sql-execute-feature): New functions.
+ (sql-read-table-name): New function.
+ (sql-list-all, sql-list-table): New functions. User API.
+ (sql-mode-map, sql-interactive-mode-map): Add key definitions
+ for above functions.
+ (sql-mode-menu, sql-interactive-mode-menu): Add menu definitions
+ for above functions.
+ (sql-postgres-login-params): Add user and database defaults.
+ (sql-buffer-live-p): Bug fix.
+ (sql-product-history): New variable.
+ (sql-read-product): New function. Use it.
+ (sql-set-product, sql-product-interactive): Use it.
+ (sql-connection-history): New variable.
+ (sql-read-connection): New function. Use it.
+ (sql-connect): New function.
+ (sql-for-each-login): Redesign function interface.
+ (sql-make-alternate-buffer-name, sql-save-connection): Use it.
+ (sql-get-login-ext, sql-get-login): Use it. Handle default values.
+ (sql-comint): Check for program. Existing live buffer.
+ (sql-comint-postgres): Add port parameter.
+
+2010-09-19 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/warnings.el: Fix commenting convention.
+ (display-warning): Use special mode and make the buffer read-only.
+
+2010-09-18 Jay Belanger <jay.p.belanger@gmail.com>
+
+ * calc/calc-prog.el (calc-read-parse-table-part): Don't "fix" the
+ empty string when it follows a repeated or optional pattern.
+
+2010-09-18 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * indent.el (indent-according-to-mode): Apply syntax-propertize.
+ (indent-region): Use indent-according-to-mode.
+
+2010-09-18 Eli Zaretskii <eliz@gnu.org>
+
+ * fringe.el (fringe-mode): Doc fix.
+
+2010-09-14 Kan-Ru Chen <kanru@kanru.info> (tiny change)
+
+ * textmodes/nroff-mode.el (nroff-view): Kill old buffer before
+ refreshing the preview buffer.
+
+2010-09-18 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * textmodes/tex-mode.el (tex-syntax-propertize-rules)
+ (latex-syntax-propertize-rules): New consts; replace
+ tex-font-lock-syntactic-keywords.
+ (tex-env-mark, latex-env-before-change): New functions.
+ (latex-electric-env-pair-mode): New minor mode.
+ (tex-font-lock-verb): Change arguments; do move point.
+ (tex-font-lock-syntactic-face-function): Adjust to new verbatim
+ representation as a form of comment.
+ (tex-font-lock-keywords-1): Remove workaround, now unneeded.
+ (doctex-syntax-propertize-rules): New const; replaces
+ doctex-font-lock-syntactic-keywords.
+ (tex-common-initialization, doctex-mode): Use syntax-propertize-rules.
+
+ * progmodes/fortran.el (fortran--font-lock-syntactic-keywords): Remove.
+ (fortran-make-syntax-propertize-function): New function; replaces
+ fortran-font-lock-syntactic-keywords.
+ (fortran-mode): Use it.
+ (fortran-line-length): Use it. Improve interactive spec.
+
+ * emacs-lisp/syntax.el (syntax-propertize-precompile-rules): New macro.
+ (syntax-propertize-rules): Add var-ref case. Fix offset computation
+ when adding surrounding \(..\).
+
+ * progmodes/js.el (js-mode): Fix last change (bug#7054).
+
+2010-09-17 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * obsolete/old-whitespace.el (whitespace-rescan-files-in-buffers):
+ Use with-current-buffer.
+
+ * isearch.el (isearch-face): Rename from `isearch'.
+ (isearch-highlight): Use new name.
+
+2010-09-17 Eli Zaretskii <eliz@gnu.org>
+
+ * fringe.el (fringe-mode, fringe-query-style): Use 4 pixels, not
+ 5, for `half' width fringes. (Bug#6933)
+
+2010-09-17 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/bytecomp.el (byte-compile-file-form-defvar)
+ (byte-compile-defvar): "foo/bar" does not lack a prefix.
+
+ * subr.el (y-or-n-p): Add the "(y or n)" that was lost somehow.
+
+2010-09-17 Stephen Berman <stephen.berman@gmx.net>
+
+ * dframe.el (dframe-reposition-frame-emacs): Use tool-bar-pixel-width
+ in calculating new frame position. Add more space between new and
+ parent on the left (Bug#7048).
+
+2010-09-17 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp-compat.el (tramp-compat-with-temp-message): Make it a
+ defmacro.
+
+2010-09-16 Chong Yidong <cyd@stupidchicken.com>
+
+ * mail/sendmail.el: Add "*unsent mail*" to same-window-buffer-names.
+
+ * term/x-win.el (x-cut-buffer-or-selection-value): Define as
+ obsolete alias for x-selection-value.
+
+ * ido.el (ido-make-buffer-list): Fix error in 2010-08-22 merge.
+
+2010-09-16 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp-cmds.el (tramp-cleanup-connection): Set tramp-autoload
+ cookie.
+
+2010-09-15 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp-compat.el (tramp-compat-with-temp-message)
+ (tramp-compat-font-lock-add-keywords, tramp-compat-process-get)
+ (tramp-compat-process-put): New defuns.
+
+ * net/tramp.el (top):
+ * net/tramp-gvfs.el (top):
+ * net/tramp-cache.el (top): Use `tramp-compat-font-lock-add-keywords'.
+
+ * net/tramp.el (tramp-progress-reporter-update):
+ Use `tramp-compat-funcall'.
+
+ * net/tramp.el (tramp-process-actions):
+ * net/tramp-gvfs.el (tramp-handle-vc-registered):
+ * net/tramp-sh.el (tramp-gvfs-handler-askquestion)
+ (tramp-get-remote-stat, tramp-get-remote-readlink):
+ Use `tramp-compat-with-temp-message'.
+
+ * net/tramp-sh.el (top): Require 'cl.
+ (tramp-handle-start-file-process): Use `tramp-compat-process-get'.
+ (tramp-open-connection-setup-interactive-shell):
+ Use `tramp-compat-process-put'.
+
+2010-09-15 Alan Mackenzie <acm@muc.de>
+
+ * progmodes/cc-engine.el (c-forward-<>-arglist-recur): Correct the
+ indentation.
+ (c-forward-<>-arglist-recur): Fix an infinite recursion.
+
+2010-09-15 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/bytecomp.el (byte-compile-warning-types): New type
+ `lexical' for warnings related to lexical scoping.
+ (byte-compile-file-form-defvar, byte-compile-defvar): Warn about
+ global vars which don't have a prefix and could hence affect lexical
+ scoping in unrelated files.
+
+2010-09-14 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * net/imap.el: Revert back to version
+ cb950ed8ff3e0f40dac437a51b269166f9ffb60d, since some of the changes
+ seem problematic.
+
+2010-09-14 Juanma Barranquero <lekktu@gmail.com>
+
+ * obsolete/old-whitespace.el (whitespace-unload-function):
+ Explicitly pass `obarray' to `unintern' to avoid a warning.
+
+2010-09-14 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/byte-run.el (set-advertised-calling-convention):
+ Add `when' argument. Update callers.
+
+ * subr.el (unintern): Declare the obarray arg mandatory.
+
+2010-09-14 Glenn Morris <rgm@gnu.org>
+
+ * calendar/diary-lib.el (diary-list-entries-hook, diary-sort-entries):
+ Doc fixes.
+
+ * calendar/diary-lib.el (diary-included-files): New variable.
+ (diary-list-entries): Maybe initialize diary-included-files.
+ (diary-include-other-diary-files): Append to diary-included-files.
+ * calendar/appt.el (appt-update-list): Also check the members of
+ diary-included-files. (Bug#6999)
+ (appt-check): Doc fix.
+
+2010-09-14 David Reitter <david.reitter@gmail.com>
+
+ * simple.el (line-move-visual): Do not truncate goal column to
+ integer size. (Bug#7020)
+
+2010-09-14 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * repeat.el (repeat): Allow repeating when the last event is a click.
+ Suggested by Drew Adams (bug#6256).
+
+2010-09-14 Sascha Wilde <wilde@sha-bang.de>
+
+ * vc/vc-hg.el (vc-hg-state,vc-hg-working-revision):
+ Replace setting HGRCPATH to "" by some less invasive --config options.
+
+2010-09-14 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * font-lock.el (font-lock-beginning-of-syntax-function):
+ Mark as obsolete.
+
+2010-09-14 Glenn Morris <rgm@gnu.org>
+
+ * menu-bar.el (menu-bar-options-save): Fix handling of menu-bar
+ and tool-bar modes. (Bug#6211)
+ (menu-bar-mode): Move setting of standard-value after the
+ minor-mode definition, otherwise it seems to have no effect.
+
+2010-09-14 Masatake YAMATO <yamato@redhat.com>
+
+ * progmodes/antlr-mode.el (antlr-font-lock-additional-keywords):
+ Fix typo. (Bug#6976)
+
+2010-09-14 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+
+ * whitespace.el: Allow cleaning up blanks without blank
+ visualization (Bug#6651). Adjust help window for
+ whitespace-toggle-options (Bug#6479). Allow to use fill-column
+ instead of whitespace-line-column (from EmacsWiki). New version 13.1.
+ (whitespace-style): Add new value 'face. Adjust docstring.
+ (whitespace-space, whitespace-hspace, whitespace-tab):
+ Adjust foreground property face.
+ (whitespace-line-column): Adjust docstring and type declaration.
+ (whitespace-style-value-list, whitespace-toggle-option-alist)
+ (whitespace-help-text): Adjust const initialization.
+ (whitespace-toggle-options, global-whitespace-toggle-options):
+ Adjust docstring.
+ (whitespace-display-window, whitespace-interactive-char)
+ (whitespace-style-face-p, whitespace-color-on): Adjust code.
+ (whitespace-help-scroll): New fun.
+
+2010-09-14 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * calendar/time-date.el (format-seconds): Comment fix.
+
+2010-09-13 Michael R. Mauger <mmaug@yahoo.com>
+
+ * progmodes/sql.el: Version 2.7.
+ (sql-buffer-live-p): Improve detection.
+ (sql-find-sqli-buffer, sql-set-sqli-buffer-generally)
+ (sql-set-sqli-buffer): Use it.
+ (sql-product-interactive): Run `sql-set-sqli-hook'.
+ (sql-rename-buffer): Code cleanup.
+ (sql-redirect, sql-redirect-value): New functions. More to come.
+
+2010-09-13 Juanma Barranquero <lekktu@gmail.com>
+
+ Port tramp-related Makefile changes of 2010-09-08T14:42:54Z!michael.albinus@gmx.de, 2010-09-13T15:17:01Z!michael.albinus@gmx.de to Windows.
+ * makefile.w32-in (LOADDEFS): Add $(lisp)/net/tramp-loaddefs.el.
+ (TRAMP_SRC): New macro.
+ ($(lisp)/net/tramp-loaddefs.el): New target.
+
+2010-09-13 Michael Albinus <michael.albinus@gmx.de>
+
+ Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
+
+ * Makefile.in (TRAMP_SRC): Remove tramp-fish.el. Add tramp-sh.el.
+
+ * net/tramp.el (top): Don't show loading message. Require just
+ 'tramp-compat, everything else is required there.
+ Use `ignore-errors' where appropriate.
+ (tramp-inline-compress-start-size, tramp-copy-size-limit)
+ (tramp-terminal-type, tramp-end-of-output)
+ (tramp-initial-end-of-output, tramp-completion-function-alist-rsh)
+ (tramp-completion-function-alist-ssh)
+ (tramp-completion-function-alist-telnet)
+ (tramp-completion-function-alist-su)
+ (tramp-completion-function-alist-putty, tramp-remote-path)
+ (tramp-remote-process-environment, tramp-sh-extra-args)
+ (tramp-actions-before-shell, tramp-uudecode)
+ (tramp-perl-file-truename, tramp-perl-file-name-all-completions)
+ (tramp-perl-file-attributes)
+ (tramp-perl-directory-files-and-attributes)
+ (tramp-perl-encode-with-module, tramp-perl-decode-with-module)
+ (tramp-perl-encode, tramp-perl-decode)
+ (tramp-vc-registered-read-file-names, tramp-file-mode-type-map)
+ (tramp-file-name-handler-alist, tramp-make-tramp-temp-file)
+ (tramp-handle-make-symbolic-link, tramp-handle-load)
+ (tramp-handle-file-name-as-directory)
+ (tramp-handle-file-name-directory)
+ (tramp-handle-file-name-nondirectory, tramp-handle-file-truename)
+ (tramp-handle-file-exists-p, tramp-handle-file-attributes)
+ (tramp-do-file-attributes-with-ls)
+ (tramp-do-file-attributes-with-perl)
+ (tramp-do-file-attributes-with-stat)
+ (tramp-handle-set-visited-file-modtime)
+ (tramp-handle-verify-visited-file-modtime)
+ (tramp-handle-set-file-modes, tramp-handle-set-file-times)
+ (tramp-set-file-uid-gid, tramp-remote-selinux-p)
+ (tramp-handle-file-selinux-context)
+ (tramp-handle-set-file-selinux-context)
+ (tramp-handle-file-executable-p, tramp-handle-file-readable-p)
+ (tramp-handle-file-newer-than-file-p, tramp-handle-file-modes)
+ (tramp-handle-file-directory-p, tramp-handle-file-regular-p)
+ (tramp-handle-file-symlink-p, tramp-handle-file-writable-p)
+ (tramp-handle-file-ownership-preserved-p)
+ (tramp-handle-directory-file-name, tramp-handle-directory-files)
+ (tramp-handle-directory-files-and-attributes)
+ (tramp-do-directory-files-and-attributes-with-perl)
+ (tramp-do-directory-files-and-attributes-with-stat)
+ (tramp-handle-file-name-all-completions)
+ (tramp-handle-file-name-completion, tramp-handle-add-name-to-file)
+ (tramp-handle-copy-file, tramp-handle-copy-directory)
+ (tramp-handle-rename-file, tramp-do-copy-or-rename-file)
+ (tramp-do-copy-or-rename-file-via-buffer)
+ (tramp-do-copy-or-rename-file-directly)
+ (tramp-do-copy-or-rename-file-out-of-band)
+ (tramp-handle-make-directory, tramp-handle-delete-directory)
+ (tramp-handle-delete-file)
+ (tramp-handle-dired-recursive-delete-directory)
+ (tramp-handle-dired-compress-file, tramp-handle-dired-uncache)
+ (tramp-handle-insert-directory)
+ (tramp-handle-unhandled-file-name-directory)
+ (tramp-handle-expand-file-name)
+ (tramp-handle-substitute-in-file-name)
+ (tramp-handle-executable-find, tramp-process-sentinel)
+ (tramp-handle-start-file-process, tramp-handle-process-file)
+ (tramp-handle-call-process-region, tramp-handle-shell-command)
+ (tramp-handle-file-local-copy, tramp-handle-file-remote-p)
+ (tramp-handle-insert-file-contents)
+ (tramp-handle-insert-file-contents-literally)
+ (tramp-handle-find-backup-file-name)
+ (tramp-handle-make-auto-save-file-name, tramp-handle-write-region)
+ (tramp-vc-registered-file-names, tramp-handle-vc-registered)
+ (tramp-sh-file-name-handler, tramp-vc-file-name-handler)
+ (tramp-maybe-send-script, tramp-set-auto-save, tramp-run-test)
+ (tramp-run-test2, tramp-find-executable, tramp-set-remote-path)
+ (tramp-find-file-exists-command, tramp-open-shell)
+ (tramp-find-shell, tramp-barf-if-no-shell-prompt)
+ (tramp-open-connection-setup-interactive-shell)
+ (tramp-local-coding-commands, tramp-remote-coding-commands)
+ (tramp-find-inline-encoding, tramp-call-local-coding-command)
+ (tramp-inline-compress-commands, tramp-find-inline-compress)
+ (tramp-compute-multi-hops, tramp-maybe-open-connection)
+ (tramp-send-command, tramp-wait-for-output)
+ (tramp-send-command-and-check, tramp-barf-unless-okay)
+ (tramp-send-command-and-read, tramp-mode-string-to-int)
+ (tramp-convert-file-attributes, tramp-check-cached-permissions)
+ (tramp-file-mode-from-int, tramp-file-mode-permissions)
+ (tramp-shell-case-fold, tramp-make-copy-program-file-name)
+ (tramp-method-out-of-band-p, tramp-local-host-p)
+ (tramp-get-remote-path, tramp-get-remote-tmpdir)
+ (tramp-get-ls-command, tramp-get-ls-command-with-dired)
+ (tramp-get-test-command, tramp-get-test-nt-command)
+ (tramp-get-file-exists-command, tramp-get-remote-ln)
+ (tramp-get-remote-perl, tramp-get-remote-stat)
+ (tramp-get-remote-readlink, tramp-get-remote-trash)
+ (tramp-get-remote-id, tramp-get-remote-uid, tramp-get-remote-gid)
+ (tramp-get-local-uid, tramp-get-local-gid)
+ (tramp-get-inline-compress, tramp-get-inline-coding): Move to
+ tramp-sh.el.
+ (tramp-methods, tramp-default-method-alist)
+ (tramp-default-user-alist, tramp-foreign-file-name-handler-alist):
+ Move initialization to tramp-sh.el.
+ (tramp-temp-name-prefix): Make it a defconst.
+ (tramp-dissect-file-name): Don't check anymore for multi-hop
+ methods.
+ (tramp-debug-outline-regexp): Add a docstring.
+ (tramp-debug-outline-level): Rename from `tramp-outline-level'.
+ (tramp-get-debug-buffer): Use it.
+
+ * net/tramp-cache.el (top): Set tramp-autoload cookie for
+ initialization forms.
+ (tramp-set-connection-property): Don't protect `tramp-message'
+ call, it isn't necessary any longer.
+ (tramp-dump-connection-properties): Use `ignore-errors'.
+
+ * net/tramp-compat.el (top): Require 'advice, 'format-spec,
+ 'password-cache and 'auth-source.
+
+ * net/tramp-gvfs.el (top):
+ * net/tramp-smb.el (top): Require 'tramp-sh.
+
+ * net/tramp-gw.el (tramp-gw-open-network-stream): Use `ignore-errors'.
+
+ * net/tramp-sh.el: New file, derived from tramp.el.
+ (top): Initialize `tramp-methods', `tramp-default-method-alist',
+ `tramp-default-user-alist', `tramp-foreign-file-name-handler-alist'.
+ Remove "scp1_old", "scp2_old", "ssh1_old", "ssh2_old".
+ Use `ignore-errors' where appropriate.
+ (tramp-sh-file-name-handler-alist): Rename from
+ `tramp-file-name-handler-alist'.
+ (tramp-send-command-and-check): Return t or nil. Remove all
+ `zerop' checks, where called.
+ (tramp-handle-set-file-modes)
+ (tramp-do-copy-or-rename-file-directly)
+ (tramp-handle-delete-directory, tramp-handle-delete-file)
+ (tramp-maybe-send-script): Use `tramp-barf-unless-okay'.
+ (tramp-sh-file-name-handler, tramp-send-command-and-check)
+ (tramp-get-remote-ln): Set tramp-autoload cookie.
+
+ * net/tramp-fish.el: Remove file.
+
+2010-09-13 Daiki Ueno <ueno@unixuser.org>
+
+ * epa-file.el (epa-file-insert-file-contents): If visiting, bind
+ buffer-file-name to avoid file-locking. (Bug#7026)
+
+2010-09-13 Julien Danjou <julien@danjou.info>
+
+ * notifications.el (notifications-notify): Add support for
+ image-path and sound-name.
+ (notifications-specification-version): Add this variable.
+
+2010-09-12 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * subr.el (y-or-n-p): New function, moved from src/fns.c; use read-key.
+
+2010-09-12 Leo <sdl.web@gmail.com>
+
+ * net/rcirc.el (rcirc-server-commands, rcirc-client-commands)
+ (rcirc-completion-start): New variables.
+ (rcirc-nick-completions): Rename to rcirc-completions.
+ (rcirc-nick-completion-start-offset): Delete.
+ (rcirc-completion-at-point): New function for constructing
+ completion data for both nicks and irc commands. Add to
+ completion-at-point-functions in rcirc mode.
+ (rcirc-complete): Rename from rcirc-nick-complete; use
+ rcirc-completion-at-point.
+ (defun-rcirc-command): Update rcirc-client-commands.
+
+2010-09-11 Glenn Morris <rgm@gnu.org>
+
+ * emacs-lisp/bytecomp.el (byte-compile-file): Create .elc files
+ atomically, to avoid parallel build errors. (Bug#4196)
+
+2010-09-11 Michael R. Mauger <mmaug@yahoo.com>
+
+ * progmodes/sql.el: Version 2.6
+ (sql-dialect): Synonym for "sql-product".
+ (sql-find-sqli-buffer, sql-set-sqli-buffer-generally)
+ (sql-set-sqli-buffer, sql-show-sqli-buffer, sql-interactive-mode):
+ Set "sql-buffer" to buffer name not buffer object so multiple sql
+ interactive buffers work properly. Reverts misguided changes in
+ earlier work.
+ (sql-comint): Make sure different buffer name is used if "*SQL*"
+ buffer is for a different product.
+ (sql-make-alternate-buffer-name): Fix bug with "sql-database"
+ login param.
+ (sql-oracle, sql-sybase, sql-informix, sql-sqlite, sql-mysql)
+ (sql-solid, sql-ingres, sql-ms, sql-postgres, sql-interbase)
+ (sql-db2, sql-linter, sql-product-interactive, sql-rename-buffer):
+ Accept new buffer name or prompt for one.
+ (sql-port): Default to zero.
+ (sql-comint-mysql): Handle "sql-port" as a numeric.
+ (sql-port-history): Delete unused variable.
+ (sql-get-login): Default "sql-port" to a number.
+ (sql-product-alist): Correct Postgres prompt and terminator regexp.
+ (sql-sqlite-program): Dynamically detect presence of "sqlite" or
+ "sqlite3" executables.
+ (sql-sqlite-login-params): Add "*.sqlite[23]?" database name pattern.
+ (sql-buffer-live-p): New function.
+ (sql-mode-menu, sql-send-string): Use it.
+ (sql-mode-oracle-font-lock-keywords): Improve SQL*Plus REMARK
+ syntax pattern.
+ (sql-mode-postgres-font-lock-keywords): Support Postgres V9.
+ (sql-mode-sqlite-font-lock-keywords): Hilight sqlite commands.
+
+2010-09-10 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * net/netrc.el (netrc-credentials): New convenience function.
+
+2010-09-10 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * textmodes/texinfo.el (texinfo-syntax-propertize-function): New fun
+ to replace texinfo-font-lock-syntactic-keywords.
+ (texinfo-mode): Use it.
+
+ * textmodes/tex-mode.el (tex-common-initialization, doctex-mode):
+ Use syntax-propertize-function.
+
+ * textmodes/sgml-mode.el (sgml-syntax-propertize-function): New var to
+ replace sgml-font-lock-syntactic-keywords.
+ (sgml-mode): Use it.
+
+ * textmodes/reftex.el (font-lock-syntactic-keywords): Don't declare
+ since we don't use it.
+
+ * textmodes/bibtex.el (bibtex-mode): Use syntax-propertize-function.
+
+ * progmodes/vhdl-mode.el (vhdl-mode): Use syntax-propertize-function
+ if available.
+ (vhdl-fontify-buffer): Adjust.
+
+ * progmodes/tcl.el (tcl-syntax-propertize-function): New var to
+ replace tcl-font-lock-syntactic-keywords.
+ (tcl-mode): Use it.
+
+ * progmodes/simula.el (simula-syntax-propertize-function): New var to
+ replace simula-font-lock-syntactic-keywords.
+ (simula-mode): Use it.
+
+ * progmodes/sh-script.el (sh-st-symbol): Remove.
+ (sh-font-lock-close-heredoc, sh-font-lock-open-heredoc): Add eol arg.
+ (sh-font-lock-flush-syntax-ppss-cache, sh-font-lock-here-doc): Remove.
+ (sh-font-lock-quoted-subshell): Assume we've already matched $(.
+ (sh-font-lock-paren): Set syntax-multiline.
+ (sh-font-lock-syntactic-keywords): Remove.
+ (sh-syntax-propertize-function): New function to replace it.
+ (sh-mode): Use it.
+
+ * progmodes/ruby-mode.el (ruby-here-doc-beg-re):
+ Define while compiling.
+ (ruby-here-doc-end-re, ruby-here-doc-beg-match)
+ (ruby-font-lock-syntactic-keywords, ruby-comment-beg-syntax)
+ (syntax-ppss, ruby-in-ppss-context-p, ruby-in-here-doc-p)
+ (ruby-here-doc-find-end, ruby-here-doc-beg-syntax)
+ (ruby-here-doc-end-syntax): Only define when
+ syntax-propertize is not available.
+ (ruby-syntax-propertize-function, ruby-syntax-propertize-heredoc):
+ New functions.
+ (ruby-in-ppss-context-p): Update to new syntax of heredocs.
+ (electric-indent-chars): Silence bytecompiler.
+ (ruby-mode): Use prog-mode, syntax-propertize-function, and
+ electric-indent-chars.
+
+ * progmodes/python.el (python-syntax-propertize-function): New var to
+ replace python-font-lock-syntactic-keywords.
+ (python-mode): Use it.
+ (python-quote-syntax): Simplify and adjust to new use.
+
+ * progmodes/perl-mode.el (perl-syntax-propertize-function): New fun to
+ replace perl-font-lock-syntactic-keywords.
+ (perl-syntax-propertize-special-constructs): New fun to replace
+ perl-font-lock-special-syntactic-constructs.
+ (perl-font-lock-syntactic-face-function): New fun.
+ (perl-mode): Use it.
+
+ * progmodes/octave-mod.el (octave-syntax-propertize-sqs): New function
+ to replace octave-font-lock-close-quotes.
+ (octave-syntax-propertize-function): New function to replace
+ octave-font-lock-syntactic-keywords.
+ (octave-mode): Use it.
+
+ * progmodes/mixal-mode.el (mixal-syntax-propertize-function): New var;
+ replaces mixal-font-lock-syntactic-keywords.
+ (mixal-mode): Use it.
+
+ * progmodes/make-mode.el (makefile-syntax-propertize-function):
+ New var; replaces makefile-font-lock-syntactic-keywords.
+ (makefile-mode): Use it.
+ (makefile-imake-mode): Adjust.
+
+ * progmodes/js.el (js--regexp-literal): Define while compiling.
+ (js-syntax-propertize-function): New var; replaces
+ js-font-lock-syntactic-keywords.
+ (js-mode): Use it.
+
+ * progmodes/gud.el (gdb-script-syntax-propertize-function): New var;
+ replaces gdb-script-font-lock-syntactic-keywords.
+ (gdb-script-mode): Use it.
+
+ * progmodes/fortran.el (fortran-mode): Use syntax-propertize-function.
+ (fortran--font-lock-syntactic-keywords): New var.
+ (fortran-line-length): Update syntax-propertize-function and
+ fortran--font-lock-syntactic-keywords.
+
+ * progmodes/cperl-mode.el (cperl-mode): Use syntax-propertize-function.
+
+ * progmodes/cfengine.el (cfengine-mode):
+ Use syntax-propertize-function.
+ (cfengine-font-lock-syntactic-keywords): Remove.
+
+ * progmodes/autoconf.el (autoconf-mode):
+ Use syntax-propertize-function.
+ (autoconf-font-lock-syntactic-keywords): Remove.
+
+ * progmodes/ada-mode.el (ada-set-syntax-table-properties)
+ (ada-after-change-function, ada-initialize-syntax-table-properties)
+ (ada-handle-syntax-table-properties): Only define when
+ syntax-propertize is not available.
+ (ada-mode): Use syntax-propertize-function.
+
+ * font-lock.el (font-lock-syntactic-keywords): Make obsolete.
+ (font-lock-fontify-syntactic-keywords-region): Move handling of
+ font-lock-syntactically-fontified to...
+ (font-lock-default-fontify-region): ...here.
+ Let syntax-propertize-function take precedence.
+ (font-lock-fontify-syntactically-region): Cal syntax-propertize.
+
+ * emacs-lisp/syntax.el (syntax-propertize-function)
+ (syntax-propertize-chunk-size, syntax-propertize--done)
+ (syntax-propertize-extend-region-functions): New vars.
+ (syntax-propertize-wholelines, syntax-propertize-multiline)
+ (syntax-propertize--shift-groups, syntax-propertize-via-font-lock)
+ (syntax-propertize): New functions.
+ (syntax-propertize-rules): New macro.
+ (syntax-ppss-flush-cache): Set syntax-propertize--done.
+ (syntax-ppss): Call syntax-propertize.
+
+ * emacs-lisp/regexp-opt.el (regexp-opt-depth): Skip named groups.
+
+2010-09-10 Agustín Martín <agustin.martin@hispalinux.es>
+
+ * textmodes/ispell.el (ispell-init-process): Improve comments.
+ XEmacs compatibility changes regarding (add-hook) 'local option
+ and (set-process-query-on-exit-flag).
+
+2010-09-09 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp-cache.el (tramp-parse-connection-properties):
+ Set tramp-autoload cookie.
+
+2010-09-09 Glenn Morris <rgm@gnu.org>
+
+ * image.el (imagemagick-types-inhibit): Add :type, :version, :group.
+ (imagemagick-register-types): Doc fix.
+
+2010-09-08 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/octave-mod.el (electric-indent-chars): Silence bytecomp.
+
+ * progmodes/js.el (require): Require is already "eval-and-compile".
+ (js--re-search-forward): Avoid `eval'. Preserve the error data.
+ (js--re-search-backward): Use js--re-search-forward.
+
+ * progmodes/fortran.el (fortran-line-length): Don't recompute
+ syntactic keywords redundantly a second time.
+
+ * progmodes/ada-mode.el: Replace "(set '" with setq.
+ (ada-mode): Simplify.
+ (ada-create-case-exception, ada-adjust-case-interactive)
+ (ada-adjust-case-region, ada-format-paramlist, ada-indent-current)
+ (ada-search-ignore-string-comment, ada-move-to-start)
+ (ada-move-to-end): Use with-syntax-table.
+
+ * font-lock.el (save-buffer-state): Remove `varlist' arg.
+ (font-lock-unfontify-region, font-lock-default-fontify-region):
+ Update usage correspondingly.
+ (font-lock-fontify-syntactic-keywords-region):
+ Set parse-sexp-lookup-properties buffer-locally here.
+ (font-lock-fontify-syntactically-region): Remove unused `ppss' arg.
+
+ * simple.el (blink-matching-open): Don't burp if we can't find a match.
+
+2010-09-08 Glenn Morris <rgm@gnu.org>
+
+ * emacs-lisp/bytecomp.el (byte-compile-report-ops):
+ Error if not compiled with -DBYTE_CODE_METER.
+
+ * emacs-lisp/bytecomp.el (byte-recompile-directory):
+ Ignore dir-locals-file.
+
+2010-09-08 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/compile.el (compilation-error-regexp-alist-alist):
+ Not a const.
+ (compilation-error-regexp-alist-alist): Rule out ": " in file names
+ for the `gnu' messages.
+ (compilation-set-skip-threshold): New command.
+ (compilation-start): Use \' rather than $.
+ (compilation-forget-errors): Use clrhash.
+
+2010-09-08 Agustín Martín <agustin.martin@hispalinux.es>
+
+ * textmodes/ispell.el (ispell-valid-dictionary-list):
+ Simplify logic.
+
+2010-09-08 Michael Albinus <michael.albinus@gmx.de>
+
+ Migrate to Tramp 2.2. Rearrange load dependencies.
+ (Bug#1529, Bug#5448, Bug#5705)
+
+ * Makefile.in (TRAMP_DIR, TRAMP_SRC): New variables.
+ ($(TRAMP_DIR)/tramp-loaddefs.el): New target.
+ (LOADDEFS): Add $(lisp)/net/tramp-loaddefs.el.
+
+ * net/tramp.el (top): Remove all other tramp-* loads except
+ tramp-compat.el. Remove all changes to tramp-unload-hook for
+ other tramp-* packages. Rearrange defun order. Change calls of
+ `tramp-compat-call-process', `tramp-compat-decimal-to-octal',
+ `tramp-compat-octal-to-decimal' to new function names.
+ (tramp-terminal-type, tramp-initial-end-of-output)
+ (tramp-methods, tramp-foreign-file-name-handler-alist)
+ (tramp-tramp-file-p, tramp-completion-mode-p)
+ (tramp-send-command-and-check, tramp-get-remote-path)
+ (tramp-get-remote-tmpdir, tramp-get-remote-ln)
+ (tramp-shell-quote-argument): Set tramp-autoload cookie.
+ (with-file-property, with-connection-property): Move to
+ tramp-cache.el.
+ (tramp-local-call-process, tramp-decimal-to-octal)
+ (tramp-octal-to-decimal): Move to tramp-compat.el.
+ (tramp-handle-shell-command): Do not require 'shell.
+ (tramp-compute-multi-hops): No special handling for tramp-gw-*
+ symbols.
+ (tramp-unload-tramp): Do not call `tramp-unload-file-name-handlers'.
+
+ * net/tramp-cache.el (top): Require 'tramp. Add to
+ `tramp-unload-hook'.
+ (tramp-cache-data, tramp-get-file-property)
+ (tramp-set-file-property, tramp-flush-file-property)
+ (tramp-flush-directory-property, tramp-get-connection-property)
+ (tramp-set-connection-property, tramp-flush-connection-property)
+ (tramp-cache-print, tramp-list-connections): Set tramp-autoload
+ cookie.
+ (with-file-property, with-connection-property): New defuns, moved
+ from tramp.el.
+ (tramp-flush-file-function): Use `with-parsed-tramp-file-name'
+ macro.
+
+ * net/tramp-cmds.el (top): Add to `tramp-unload-hook'.
+ (tramp-version): Set tramp-autoload cookie.
+
+ * net/tramp-compat.el (top): Require 'tramp-loaddefs. Remove all
+ changes to tramp-unload-hook for other tramp-* packages. Add to
+ `tramp-unload-hook'.
+ (tramp-compat-decimal-to-octal, tramp-compat-octal-to-decimal)
+ (tramp-compat-call-process): New defuns, moved from tramp.el.
+
+ * net/tramp-fish.el (top) Require just 'tramp. Add objects to
+ `tramp-methods' and `tramp-foreign-file-name-handler-alist'.
+ Add to `tramp-unload-hook'. Change call of
+ `tramp-compat-decimal-to-octal' to new function name.
+ (tramp-fish-method): Make it a defconst.
+ (tramp-fish-file-name-p): Make it a defsubst.
+ (tramp-fish-method, tramp-fish-file-name-handler)
+ (tramp-fish-file-name-p): Set tramp-autoload cookie.
+
+ * net/tramp-ftp.el (top) Add objects to `tramp-methods' and
+ `tramp-foreign-file-name-handler-alist'. Add to
+ `tramp-unload-hook'.
+ (tramp-ftp-method): Make it a defconst.
+ (tramp-ftp-file-name-p): Make it a defsubst.
+ (tramp-ftp-method, tramp-ftp-file-name-handler)
+ (tramp-ftp-file-name-p): Set tramp-autoload cookie.
+
+ * net/tramp-gvfs.el (top) Add objects to `tramp-methods' and
+ `tramp-foreign-file-name-handler-alist'. Add to
+ `tramp-unload-hook'. Change checks, whether package can be
+ loaded.
+ (tramp-gvfs-file-name-p): Make it a defsubst.
+ (tramp-gvfs-methods, tramp-gvfs-file-name-handler)
+ (tramp-gvfs-file-name-p): Set tramp-autoload cookie.
+ (tramp-gvfs-handle-file-directory-p): New defun.
+ (tramp-gvfs-file-name-handler-alist): Use it.
+
+ * net/tramp-gw.el (top) Add objects to `tramp-methods' and
+ `tramp-foreign-file-name-handler-alist'. Add to
+ `tramp-unload-hook'.
+ (tramp-gw-tunnel-method, tramp-gw-default-tunnel-port)
+ (tramp-gw-socks-method, tramp-gw-default-socks-port): Make it a
+ defconst.
+ (tramp-gw-tunnel-method, tramp-gw-socks-method)
+ (tramp-gw-open-connection): Set tramp-autoload cookie.
+
+ * net/tramp-imap.el (top) Require just 'tramp. Add objects to
+ `tramp-methods' and `tramp-foreign-file-name-handler-alist'.
+ Add to `tramp-unload-hook'. Change checks, whether package can be
+ loaded.
+ (tramp-imap-file-name-p): Make it a defsubst.
+ (tramp-imap-method, tramp-imaps-method)
+ (tramp-imap-file-name-handler)
+ (tramp-imap-file-name-p): Set tramp-autoload cookie.
+
+ * net/tramp-smb.el (top) Require just 'tramp. Add objects to
+ `tramp-methods' and `tramp-foreign-file-name-handler-alist'.
+ Add to `tramp-unload-hook'. Change checks, whether package can be
+ loaded. Change call of `tramp-compat-decimal-to-octal' to new
+ function name.
+ (tramp-smb-tunnel-method): Make it a defconst.
+ (tramp-smb-file-name-p): Make it a defsubst.
+ (tramp-smb-method, tramp-smb-file-name-handler)
+ (tramp-smb-file-name-p): Set tramp-autoload cookie.
+
+ * net/tramp-uu.el (top) Add to `tramp-unload-hook'.
+ (tramp-uuencode-region): Set tramp-autoload cookie.
+
+ * net/trampver.el (top) Add to `tramp-unload-hook'.
+ (tramp-version, tramp-bug-report-address): Set tramp-autoload
+ cookie. Update release number.
+
+2010-09-07 Agustín Martín <agustin.martin@hispalinux.es>
+
+ * textmodes/ispell.el (ispell-start-process): Make sure original
+ arg list is properly initialized (Bug#6993, Bug#6994).
+
+2010-09-06 Alexander Klimov <alserkli@inbox.ru> (tiny change)
+
+ * files.el (directory-abbrev-alist): Use \` as default regexp.
+
+ * emacs-lisp/rx.el (rx-any): Don't explode ranges that end in special
+ chars like - or ] (bug#6984).
+ (rx-any-condense-range): Explode 2-char ranges.
+
+2010-09-06 Glenn Morris <rgm@gnu.org>
+
+ * desktop.el (desktop-path): Bump :version after 2009-09-15 change.
+
+2010-09-06 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * textmodes/bibtex.el:
+ * proced.el: Update to new email for Roland Winkler <winkler@gnu.org>.
+
+2010-09-05 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * net/imap.el (imap-message-map): Remove optional buffer parameter,
+ since no callers use it.
+ (imap-message-get): Ditto.
+ (imap-message-put): Ditto.
+ (imap-mailbox-map): Ditto.
+ (imap-mailbox-put): Ditto.
+ (imap-mailbox-get): Ditto.
+ (imap-mailbox-get): Revert last change for this function.
+
+2010-09-05 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * net/imap.el (imap-fetch-safe): Remove function, and alter all
+ callers to use `imap-fetch' instead. According to the comments, this
+ should be safe, since all other IMAP clients use the 1:* syntax.
+ (imap-enable-exchange-bug-workaround): Remove.
+ (imap-debug): Remove -- doesn't seem very useful.
+
+2010-09-05 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * net/imap.el (imap-log): New convenience function used throughout
+ instead of repeating the same code all over the place.
+
+2010-09-05 David De La Harpe Golden <david@harpegolden.net>
+
+ * mouse.el (mouse-save-then-kill): Save region to kill-ring
+ when mouse-drag-copy-region is non-nil (Bug#6956).
+
+2010-09-05 Chong Yidong <cyd@stupidchicken.com>
+
+ * dired.el (dired-ls-sorting-switches, dired-sort-by-name-regexp):
+ Improve regexps (Bug#6987).
+ (dired-sort-toggle): Search more robustly for -t flag.
+
+ * files.el (get-free-disk-space): Search more robustly for
+ "available" column. Suggested by Ehud Karni
+ <ehud@unix.mvs.co.il>.
+
+2010-09-05 Juanma Barranquero <lekktu@gmail.com>
+
+ * international/uni-bidi.el:
+ * international/uni-category.el:
+ * international/uni-combining.el:
+ * international/uni-decimal.el:
+ * international/uni-mirrored.el:
+ * international/uni-name.el: Regenerate.
+
+2010-09-04 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * electric.el (electric-indent-post-self-insert-function):
+ Don't reindent with a sloppy indentation function.
+
+ * emacs-lisp/syntax.el (syntax-ppss): More sanity check to catch
+ border case in change-log-mode.
+
+2010-09-04 Chong Yidong <cyd@stupidchicken.com>
+
+ * progmodes/compile.el (compilation-error-regexp-alist-alist):
+ Remove ruby regexp; handle Ruby errors with gcc-include and gnu.
+ Recognize leading tab in gcc-include regexp. Ignore names with
+ leading "from" or "in" in gnu regexp (Bug#6937).
+
+2010-09-04 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ Avoid global recursive calls to kill-buffer-hooks; fit into 80 cols.
+ * textmodes/ispell.el (ispell-process-buffer-name): Remove.
+ (ispell-start-process): Avoid setq and simplify logic.
+ (ispell-init-process): Setup kill-buffer-hook locally when needed.
+ (kill-buffer-hook): Don't use it globally with code that uses
+ expand-file-name since that may call kill-buffer via
+ code_conversion_restore.
+
+2010-09-04 Noorul Islam K M <noorul@noorul.com> (tiny change)
+
+ * emacs-lisp/package.el (package-directory-list): Only call
+ file-name-nondirectory on a string.
+
+2010-09-02 Chong Yidong <cyd@stupidchicken.com>
+
+ * emacs-lisp/package.el (package--download-one-archive):
+ Ensure that archive-contents is valid before saving it.
+ (package-activate-1, package-mark-obsolete, define-package)
+ (package-compute-transaction, package-list-maybe-add): Use push.
+
+2010-09-03 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ Use SMIE's blink-paren for octave-mode.
+ * progmodes/octave-mod.el (octave-font-lock-close-quotes):
+ Backslashes do not escape single-quotes, single-quotes do.
+ (octave-block-else-regexp, octave-block-end-regexp)
+ (octave-block-match-alist): Remove.
+ (octave-smie-bnf-table): New var, with old content.
+ (octave-smie-op-levels): Use it.
+ (octave-smie-closer-alist): New var.
+ (octave-mode): Use it. Setup smie-blink-matching and electric-indent.
+ (octave-blink-matching-block-open): Remove.
+ (octave-reindent-then-newline-and-indent, octave-electric-semi)
+ (octave-electric-space): Let self-insert-command run expand-abbrev and
+ blink parens.
+
+ * electric.el (electricity): New group.
+ (electric-indent-chars): New var.
+ (electric-indent-post-self-insert-function): New fun.
+ (electric-indent-mode): New minor mode.
+ (electric-pair-skip-self): New custom.
+ (electric-pair-post-self-insert-function): New function.
+ (electric-pair-mode): New minor mode.
+
+ * calc/calc-aent.el (calcAlg-blink-matching-check): New fun, to replace
+ calcAlg-blink-matching-open.
+ (calc-alg-ent-map, calc-alg-ent-esc-map): Initialize in the declaration.
+ (calc-do-alg-entry): Only touch the part of the keymap that varies.
+ Use the new blink-matching-check-function.
+
+ Provide blink-matching support to SMIE.
+ * emacs-lisp/smie.el (smie-bnf-closer-alist): New function.
+ (smie-blink-matching-triggers, smie-blink-matching-inners): New vars.
+ (smie-blink-matching-check, smie-blink-matching-open): New functions.
+
+ * simple.el (newline): Fix last change to properly remove itself from
+ the hook.
+
+2010-09-02 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * simple.el (newline): Eliminate optimization.
+ Use post-self-insert-hook to set hard-newline and things before
+ running post-self-insert-hook.
+ (blink-matching-check-mismatch): New function.
+ (blink-matching-check-function): New variable.
+ (blink-matching-open): Use them.
+ Skip back forward over prefix chars skipped by forward-sexp.
+ Don't check if the parens are backslash escaped.
+ (blink-paren-post-self-insert-function): Check backslash escaping here.
+
+2010-09-02 Chong Yidong <cyd@stupidchicken.com>
+
+ * emacs-lisp/package.el (package-menu-mode-map):
+ Change package-menu-revert bindings to revert-buffer.
+ (package-menu-mode): Set revert-buffer-function.
+ (package-menu-revert): Doc fix.
+
+2010-09-02 Agustín Martín <agustin.martin@hispalinux.es>
+
+ * textmodes/ispell.el (ispell-init-process): Use "~/" as
+ `default-directory' unless using Ispell per-directory personal
+ dictionaries and not in a mini-buffer under XEmacs.
+ (kill-buffer-hook): Do not kill ispell process on exit when
+ `ispell-process-directory' is "~/". (Bug#6143)
+
+2010-09-02 Jan Djärv <jan.h.d@swipnet.se>
+
+ * simple.el (kill-new): Call interprogram-cut-function with only
+ one argument.
+
+ * term.el (term-mouse-paste): Don't call x-get-cutbuffer.
+ Remove cut buffer from error message.
+
+ * term/x-win.el (x-select-text):
+ * term/pc-win.el (x-selection-value):
+ * term/ns-win.el (x-selection-value):
+ * eshell/em-term.el:
+ * w32-fns.el (x-get-selection-value):
+ * mouse-sel.el (mouse-sel-set-selection-function):
+ * frame.el (display-selections-p): Remove cut-buffer in documentation.
+
+ * term/x-win.el: Update documentation for x-last-selected-text-*.
+ (x-last-selected-text-cut, x-last-selected-text-cut-encoded)
+ (x-last-cut-buffer-coding, x-cut-buffer-max): Remove.
+ (x-select-text): Remove argument PUSH, update documentation.
+ Remove cut-buffer code.
+ (x-selection-value-internal): Was previously x-selection-value.
+ (x-selection-value): Rename from x-cut-buffer-or-selection-value.
+ Update documentation, remove cut-buffer code.
+ Call x-selection-value-internal.
+ (x-clipboard-yank): Call x-selection-value-internal.
+ (x-initialize-window-system): Remove setting of x-cut-buffer-max.
+
+ * term/pc-win.el (x-last-selected-text):
+ x-cut-buffer-or-selection-value renamed to x-selection-value
+ (x-select-text): Remove argument PUSH, update documentation.
+
+ * term/ns-win.el (x-setup-function-keys, ns-last-selected-text):
+ x-cut-buffer-or-selection-value renamed to x-selection-value
+ (x-selection-value): Rename from x-cut-buffer-or-selection-value.
+ (x-select-text): Remove argument PUSH, update documentation.
+
+ * emacs-lisp/cl-macs.el (x-get-cutbuffer, x-get-cut-buffer): Remove.
+
+ * w32-fns.el (x-last-selected-text):
+ x-cut-buffer-or-selection-value renamed to x-selection-value.
+ (x-cut-buffer-max): Remove.
+ (x-select-text): Remove argument PUSH, update documentation.
+
+ * simple.el (interprogram-cut-function): Remove mention of PUSH.
+
+ * select.el (x-get-cut-buffer, x-set-cut-buffer): Remove.
+
+ * mouse-sel.el (mouse-sel-get-selection-function):
+ x-cut-buffer-or-selection-value renamed to x-selection-value.
+ (x-select-text): Remove optional push.
+
+2010-09-01 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * simple.el (blink-paren-function): Move from C to here.
+ (blink-paren-post-self-insert-function): New function.
+ (post-self-insert-hook): Use it.
+
+ * emacs-lisp/pcase.el (pcase-split-memq):
+ Fix overenthusiastic optimisation.
+ (pcase-u1): Handle the case of a lambda pred.
+
+2010-08-31 Kenichi Handa <handa@m17n.org>
+
+ * international/mule-cmds.el (standard-display-european-internal):
+ Setup standard-display-table for 8-bit characters by storing 8-bit
+ characters in the element vector.
+
+ * disp-table.el (standard-display-8bit):
+ Setup standard-display-table for 8-bit characters by storing 8-bit
+ characters in the element vector.
+ (standard-display-european): Likewise.
+
+2010-08-31 Masatake YAMATO <yamato@redhat.com>
+
+ * textmodes/nroff-mode.el (nroff-view): New command.
+ (nroff-mode-map): Bind it to C-c C-c.
+
+2010-08-31 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/smie.el (smie-down-list): New command.
+
+ Remove old indentation and navigation code on octave-mode.
+ * progmodes/octave-mod.el (octave-mode-map): Remap down-list to
+ smie-down-list rather than add a binding for octave-down-block.
+ (octave-mark-block, octave-blink-matching-block-open):
+ Rely on forward-sexp-function.
+ (octave-fill-paragraph): Don't narrow, so you can use
+ indent-according-to-mode.
+ (octave-block-begin-regexp, octave-block-begin-or-end-regexp): Remove.
+ (octave-in-block-p, octave-re-search-forward-kw)
+ (octave-re-search-backward-kw, octave-indent-calculate)
+ (octave-end-as-array-index-p, octave-block-end-offset)
+ (octave-scan-blocks, octave-forward-block, octave-backward-block)
+ (octave-down-block, octave-backward-up-block, octave-up-block)
+ (octave-before-magic-comment-p, octave-indent-line): Remove.
+
+2010-08-31 Chong Yidong <cyd@stupidchicken.com>
+
+ * emacs-lisp/package.el (package--read-archive-file): Just use
+ `read', to avoid copying an additional string.
+ (package-menu-mode): Set header-line-format here.
+ (package-menu-refresh, package-menu-revert): Signal an error if
+ not in the Package Menu.
+ (package-menu-package-list): New var.
+ (package--generate-package-list): Operate on the current buffer;
+ don't assume that it is *Packages*, since the user may rename it.
+ Allow persistent package listings and sort keys using
+ package-menu-package-list and package-menu-package-sort-key.
+ (package-menu--version-predicate): Fix version calculation.
+ (package-menu-sort-by-column): Don't select the window.
+ (package--list-packages): Create the *Packages* buffer.
+ Set package-menu-package-list-key.
+ (list-packages): Sorting by status is now the default.
+ (package-buffer-info): Use match-string-no-properties.
+ (define-package): Add a &rest argument for future proofing, but
+ don't use it yet.
+ (package-install-from-buffer, package-install-buffer-internal):
+ Merge into a single function, package-install-from-buffer.
+ (package-install-file): Change caller.
+
+ * finder.el: Load finder-inf using `require'.
+ (finder-list-matches): Sorting by status is now the default.
+ (finder-compile-keywords): Simpify printing.
+
+2010-08-30 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/octave-mod.el (octave-font-lock-keywords): Use regexp-opt.
+ (octave-mode-map): Remove special bindings for forward/backward-block
+ and octave-backward-up-block. Use smie-close-block.
+ (octave-continuation-marker-regexp): New var.
+ (octave-continuation-regexp): Use it.
+ (octave-operator-table, octave-smie-op-levels)
+ (octave-operator-regexp, octave-smie-indent-rules): New vars.
+ (octave-smie-backward-token, octave-smie-forward-token): New funs.
+ (octave-mode): Use SMIE.
+ (octave-close-block): Delete.
+
+2010-08-30 Eli Zaretskii <eliz@gnu.org>
+
+ * menu-bar.el (menu-bar-edit-menu) <"Paste">: Check selection in
+ CLIPBOARD, not in PRIMARY. (Bug#6944)
+
+2010-08-30 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/smie.el (smie-indent-offset-rule): Let :parent take
+ a list of parents.
+ (smie-indent-column): Allow indirection through variables.
+
+ * composite.el (save-buffer-state): Delete, unused.
+ * font-lock.el (save-buffer-state): Use with-silent-modifications.
+ (font-lock-default-fontify-region): Use with-syntax-table.
+ * jit-lock.el (with-buffer-unmodified): Remove.
+ (with-buffer-prepared-for-jit-lock): Use with-silent-modifications.
+
+ Use `declare' in defmacros.
+ * window.el (save-selected-window):
+ * subr.el (with-temp-file, with-temp-message, with-syntax-table):
+ * progmodes/python.el (def-python-skeleton):
+ * net/dbus.el (dbus-ignore-errors):
+ * jka-cmpr-hook.el (with-auto-compression-mode):
+ * international/mule.el (with-category-table):
+ * emacs-lisp/timer.el (with-timeout):
+ * emacs-lisp/lisp-mnt.el (lm-with-file):
+ * emacs-lisp/eieio.el (with-slots):
+ * emacs-lisp/easymenu.el (easy-menu-define):
+ * emacs-lisp/debug.el (debugger-env-macro):
+ * emacs-lisp/cl-compat.el (Multiple-value-bind, Multiple-value-setq)
+ (Multiple-value-call, Multiple-value-prog1):
+ * emacs-lisp/cl-seq.el (cl-parsing-keywords, cl-check-key)
+ (cl-check-test-nokey, cl-check-test, cl-check-match): Move indent and
+ edebug rule to definition.
+ * emacs-lisp/lisp-mode.el (save-selected-window)
+ (with-current-buffer, combine-after-change-calls)
+ (with-output-to-string, with-temp-file, with-temp-buffer)
+ (with-temp-message, with-syntax-table, read-if, eval-after-load)
+ (dolist, dotimes, when, unless):
+ * emacs-lisp/byte-run.el (inline): Remove indent rule, redundant.
+
+2010-08-29 Chong Yidong <cyd@stupidchicken.com>
+
+ * finder.el: Require `package'.
+ (finder-known-keywords): Tweak descriptions. Retire `oop' keyword.
+ (finder-package-info): Var deleted.
+ (finder-keywords-hash, finder--builtins-alist): New vars.
+ (finder-compile-keywords): Compute package--builtins and
+ finder-keywords-hash instead of finder-keywords-hash, respecting
+ the "Package" header.
+ (finder-unknown-keywords, finder-list-matches):
+ Use finder-keywords-hash and package--list-packages.
+ (finder-mode): Don't set font-lock-defaults.
+ (finder-exit): We don't use "*Finder-package*" and "*Finder
+ Category*" buffers anymore.
+
+ * emacs-lisp/package.el (package--builtins-base): Var deleted.
+ (package--builtins): Set default value to nil.
+ (package-initialize): Load precomputed value of package--builtins
+ from finder-inf.el.
+ (package-alist, package-compute-transaction)
+ (package-download-transaction): Improve docstring.
+ (package-read-all-archive-contents): Do not change
+ package--builtins here.
+ (list-packages): Make package-list-packages an alias for this.
+ Sort by status by default.
+ (package--list-packages): Add optional PACKAGES arg.
+ (describe-package-1): Use font-lock-face property. For built-in
+ packages, insert file commentary.
+ (package--generate-package-list): Rename from
+ package-list-packages-internal; all callers changed. Add optional
+ PACKAGES arg. Add alphabetical sort fallbacks.
+ (package-menu--version-predicate, package-menu--status-predicate)
+ (package-menu--description-predicate)
+ (package-menu--name-predicate): New functions.
+
+ * info.el (Info-finder-find-node): Search package-alist instead of
+ finder-package-info.
+
+2010-08-29 Chong Yidong <cyd@stupidchicken.com>
+
+ * subr.el (version-regexp-alist): Don't use "a" and "b" for
+ "alpha" and "beta".
+ (version-to-list): Handle versions like "10.3d".
+
+2010-08-28 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/macroexp.el (macroexpand-all-1): Use pcase.
+ (macroexp-accumulate): Use `declare'.
+
+2010-08-27 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+
+ * whitespace.el (whitespace-style): Adjust type declaration.
+
+2010-08-26 Magnus Henoch <magnus.henoch@gmail.com>
+
+ * net/tramp-gvfs.el (tramp-gvfs-handle-copy-file): Do not pass
+ empty argument to gvfs-copy.
+
+2010-08-26 Chong Yidong <cyd@stupidchicken.com>
+
+ * net/tramp-compat.el (tramp-compat-delete-file): Rewrite to
+ handle new TRASH arg of `delete-file'.
+
+2010-08-26 Christian Lynbech <christian.lynbech@tieto.com> (tiny change)
+
+ * net/tramp.el (tramp-handle-insert-directory): Don't use
+ `forward-word', its default syntax could be changed.
+
+2010-08-26 Toru TSUNEYOSHI <t_tuneyosi@hotmail.com>
+ Michael Albinus <michael.albinus@gmx.de>
+
+ Implement compression for inline methods.
+
+ * net/tramp.el (tramp-inline-compress-start-size): New defcustom.
+ (tramp-copy-size-limit): Allow also nil.
+ (tramp-inline-compress-commands): New defconst.
+ (tramp-find-inline-compress, tramp-get-inline-compress)
+ (tramp-get-inline-coding): New defuns.
+ (tramp-get-remote-coding, tramp-get-local-coding): Remove,
+ replaced by `tramp-get-inline-coding'.
+ (tramp-handle-file-local-copy, tramp-handle-write-region)
+ (tramp-method-out-of-band-p): Use `tramp-get-inline-coding'.
+
+2010-08-26 Noah Lavine <noah549@gmail.com> (tiny change)
+
+ Detect ssh 'ControlMaster' argument automatically in some cases.
+
+ * net/tramp.el (tramp-detect-ssh-controlmaster): New defun.
+ (tramp-default-method): Use it.
+
+2010-08-26 Karel Klíč <kklic@redhat.com>
+
+ * net/tramp.el (tramp-file-name-for-operation):
+ Add file-selinux-context.
+
+2010-08-26 Łukasz Stelmach <lukasz.stelmach@iem.pw.edu.pl> (tiny change)
+
+ * play/cookie1.el (read-cookie): Fix off-by-one error (bug#6921).
+
+2010-08-26 Chong Yidong <cyd@stupidchicken.com>
+
+ * simple.el (beginning-of-buffer, end-of-buffer): Doc fix
+ (Bug#6907).
+
+2010-08-26 Nathan Weizenbaum <nweiz@cressida.sea.corp.google.com> (tiny change)
+
+ * progmodes/js.el: Make indentation more customizable (Bug#6914).
+ (js-paren-indent-offset, js-square-indent-offset)
+ (js-curly-indent-offset): New options.
+ (js--proper-indentation): Use them.
+
+2010-08-26 Daniel Colascione <dan.colascione@gmail.com>
+
+ * progmodes/sh-script.el (sh-get-indent-info): Use syntax-ppss
+ instead of inspecting font-lock properties (Bug#6916).
+
+2010-08-26 David Reitter <david.reitter@gmail.com>
+
+ * server.el (server-visit-files): Run pre-command-hook and
+ post-command-hook for each buffer while it is current (Bug#6910).
+ (server-execute): Do not run hooks here.
+
+2010-08-26 Michael Albinus <michael.albinus@gmx.de>
+
+ Sync with Tramp 2.1.19.
+
+ * net/tramp-cmds.el (tramp-cleanup-all-connections)
+ (tramp-reporter-dump-variable, tramp-load-report-modules)
+ (tramp-append-tramp-buffers): Use `tramp-compat-funcall'.
+ (tramp-bug): Recommend setting of `tramp-verbose' to 9.
+
+ * net/tramp-compat.el (top): Do not autoload
+ `tramp-handle-file-remote-p'. Load tramp-util.el and tramp-vc.el
+ only when `start-file-process' is not bound.
+ (byte-compile-not-obsolete-vars): Define if not bound.
+ (tramp-compat-funcall): New defmacro.
+ (tramp-compat-line-beginning-position)
+ (tramp-compat-line-end-position)
+ (tramp-compat-temporary-file-directory)
+ (tramp-compat-make-temp-file, tramp-compat-file-attributes)
+ (tramp-compat-copy-file, tramp-compat-copy-directory)
+ (tramp-compat-delete-file, tramp-compat-delete-directory)
+ (tramp-compat-number-sequence, tramp-compat-process-running-p):
+ Use it.
+ (tramp-advice-file-expand-wildcards): Do not use
+ `tramp-handle-file-remote-p'.
+ (tramp-compat-make-temp-file): Simplify fallback implementation.
+ (tramp-compat-copy-file): Add PRESERVE-SELINUX-CONTEXT.
+ (tramp-compat-copy-tree): Remove function.
+ (tramp-compat-delete-file): New defun.
+ (tramp-compat-delete-directory): Provide implementation for older
+ Emacsen.
+ (tramp-compat-file-attributes): Handle only
+ `wrong-number-of-arguments' error.
+
+ * net/tramp-fish.el (tramp-fish-handle-copy-file):
+ Add PRESERVE_SELINUX_CONTEXT.
+ (tramp-fish-handle-delete-file): Add TRASH arg.
+ (tramp-fish-handle-directory-files-and-attributes):
+ Do not use `tramp-fish-handle-file-attributes.
+ (tramp-fish-handle-file-local-copy)
+ (tramp-fish-handle-insert-file-contents)
+ (tramp-fish-maybe-open-connection): Use `with-progress-reporter'.
+
+ * net/tramp-gvfs.el (top): Require url-util.
+ (tramp-gvfs-mount-point): Remove.
+ (tramp-gvfs-file-name-handler-alist): Add `file-selinux-context'
+ and `set-file-selinux-context'.
+ (tramp-gvfs-stringify-dbus-message, tramp-gvfs-send-command)
+ (tramp-gvfs-handle-file-selinux-context)
+ (tramp-gvfs-handle-set-file-selinux-context): New defuns.
+ (with-tramp-dbus-call-method): Format trace message.
+ (tramp-gvfs-handle-copy-file): Handle PRESERVE-SELINUX-CONTEXT.
+ (tramp-gvfs-handle-copy-file, tramp-gvfs-handle-rename-file):
+ Implement backup call, when operation on local files fails.
+ Use progress reporter. Flush properties of changed files.
+ (tramp-gvfs-handle-delete-file): Add TRASH arg.
+ Use `tramp-compat-delete-file'.
+ (tramp-gvfs-handle-expand-file-name): Expand "~/".
+ (tramp-gvfs-handle-make-directory): Make more traces.
+ (tramp-gvfs-handle-write-region): Protect deleting tmpfile.
+ (tramp-gvfs-url-file-name): Hexify file name in url.
+ (tramp-gvfs-fuse-file-name): Take also prefix (like dav shares)
+ into account for the resulting file name.
+ (tramp-gvfs-handler-askquestion): Preserve current message, in
+ order to let progress reporter continue afterwards. (Bug#6257)
+ Return dummy mountpoint, when the answer is "no".
+ See `tramp-gvfs-maybe-open-connection'.
+ (tramp-gvfs-handler-mounted-unmounted)
+ (tramp-gvfs-connection-mounted-p): Test also for new mountspec
+ attribute "default_location". Set "prefix" property.
+ Handle default-location.
+ (tramp-gvfs-mount-spec): Return both prefix and mountspec.
+ (tramp-gvfs-maybe-open-connection): Test, whether mountpoint
+ exists. Raise an error, if not (due to a corresponding answer
+ "no" in interactive questions, for example).
+ Use `tramp-compat-funcall'.
+
+ * net/tramp-imap.el (top): Autoload `epg-make-context'.
+ (tramp-imap-handle-copy-file): Add PRESERVE-SELINUX-CONTEXT.
+ (tramp-imap-do-copy-or-rename-file)
+ (tramp-imap-handle-insert-file-contents)
+ (tramp-imap-handle-file-local-copy): Use `with-progress-reporter'.
+ (tramp-imap-handle-delete-file): Add TRASH arg.
+
+ * net/tramp-smb.el (tramp-smb-handle-copy-file):
+ Add PRESERVE-SELINUX-CONTEXT.
+ (tramp-smb-handle-copy-file)
+ (tramp-smb-handle-file-local-copy, tramp-smb-handle-rename-file)
+ (tramp-smb-handle-write-region, tramp-smb-maybe-open-connection):
+ Use `with-progress-reporter'.
+ (tramp-smb-handle-delete-file): Add TRASH arg.
+
+ * net/tramp.el (tramp-methods): Move hostname to the end in all
+ ssh `tramp-login-args'. Add `tramp-async-args' attribute where
+ appropriate.
+ (tramp-verbose): Describe verbose level 9.
+ (tramp-completion-function-alist)
+ (tramp-file-name-regexp, tramp-chunksize)
+ (tramp-local-coding-commands, tramp-remote-coding-commands)
+ (with-connection-property, tramp-completion-mode-p)
+ (tramp-action-process-alive, tramp-action-out-of-band)
+ (tramp-check-for-regexp, tramp-file-name-p, tramp-equal-remote)
+ (tramp-exists-file-name-handler): Fix docstring.
+ (tramp-remote-process-environment): Use `format' instead of
+ `concat'. Protect version string by apostroph.
+ (tramp-shell-prompt-pattern): Do not use a shy group in case of
+ XEmacs.
+ (tramp-file-name-regexp-unified)
+ (tramp-completion-file-name-regexp-unified): On W32 systems, do
+ not regard the volume letter as remote filename. (Bug#5447)
+ (tramp-perl-file-attributes)
+ (tramp-perl-directory-files-and-attributes): Don't pass "$3".
+ (tramp-vc-registered-read-file-names): Read input as
+ here-document, otherwise the command could exceed maximum length
+ of command line.
+ (tramp-file-name-handler-alist): Add `file-selinux-context' and
+ `set-file-selinux-context'.
+ (tramp-debug-message): Add `tramp-compat-funcall' to ignored
+ backtrace functions.
+ (tramp-error-with-buffer): Don't show the connection buffer when
+ we are in completion mode.
+ (tramp-progress-reporter-update, tramp-remote-selinux-p)
+ (tramp-handle-file-selinux-context)
+ (tramp-handle-set-file-selinux-context, tramp-process-sentinel)
+ (tramp-connectable-p, tramp-open-shell, tramp-get-remote-trash):
+ New defuns.
+ (with-progress-reporter): New defmacro.
+ (tramp-debug-outline-regexp): New defconst.
+ (top, tramp-rfn-eshadow-setup-minibuffer)
+ (tramp-rfn-eshadow-update-overlay, tramp-handle-set-file-times)
+ (tramp-handle-dired-compress-file, tramp-handle-shell-command)
+ (tramp-completion-mode-p, tramp-check-for-regexp)
+ (tramp-open-connection-setup-interactive-shell)
+ (tramp-compute-multi-hops, tramp-read-passwd, tramp-clear-passwd)
+ (tramp-time-diff, tramp-coding-system-change-eol-conversion)
+ (tramp-set-process-query-on-exit-flag, tramp-unload-tramp):
+ Use `tramp-compat-funcall'.
+ (tramp-handle-make-symbolic-link): Flush file properties.
+ (tramp-handle-load, tramp-handle-file-local-copy)
+ (tramp-handle-insert-file-contents, tramp-handle-write-region)
+ (tramp-handle-vc-registered, tramp-maybe-send-script)
+ (tramp-find-shell): Use `with-progress-reporter'.
+ (tramp-do-file-attributes-with-stat): Add space in format string,
+ in order to work around a bug in pdksh. Reported by Gilles Pion
+ <gpion@lfdj.com>.
+ (tramp-handle-verify-visited-file-modtime): Do not send a command
+ when the connection is not established.
+ (tramp-handle-set-file-times): Simplify the check for utc.
+ (tramp-handle-directory-files-and-attributes)
+ (tramp-get-remote-path): Use `copy-tree'.
+ (tramp-completion-handle-file-name-all-completions): Ensure, that
+ non remote files are still checked. Oops.
+ (tramp-handle-copy-file, tramp-do-copy-or-rename-file):
+ Handle PRESERVE-SELINUX-CONTEXT.
+ (tramp-do-copy-or-rename-file): Add progress reporter.
+ (tramp-do-copy-or-rename-file-directly): Do not use
+ `tramp-handle-file-remote-p'.
+ (tramp-do-copy-or-rename-file-out-of-band):
+ Use `tramp-compat-delete-directory'.
+ (tramp-do-copy-or-rename-file-out-of-band)
+ (tramp-compute-multi-hops, tramp-maybe-open-connection):
+ Use `format-spec-make'.
+ (tramp-handle-delete-file): Add TRASH arg.
+ (tramp-handle-dired-uncache): Flush directory cache, not only file
+ cache.
+ (tramp-handle-expand-file-name)
+ (tramp-completion-handle-file-name-all-completions)
+ (tramp-completion-handle-file-name-completion):
+ Use `tramp-connectable-p'.
+ (tramp-handle-start-file-process): Set connection property "vec".
+ Use it, in order to invalidate file caches. Check only for
+ `remote-tty' process property.
+ Implement tty setting. (Bug#4604, Bug#6360)
+ (tramp-file-name-for-operation): Add `call-process-region' and
+ `set-file-selinux-context'.
+ (tramp-find-foreign-file-name-handler)
+ (tramp-advice-make-auto-save-file-name)
+ (tramp-set-auto-save-file-modes): Remove superfluous check for
+ `stringp'. This is done inside `tramp-tramp-file-p'.
+ (tramp-file-name-handler): Trace 'quit. Catch the error for some
+ operations when we are in completion mode. This gives the user
+ the chance to correct the file name in the minibuffer.
+ (tramp-completion-mode-p): Use `non-essential'.
+ (tramp-handle-file-name-all-completions): Backward/ XEmacs
+ compatibility: Use `completion-ignore-case' if
+ `read-file-name-completion-ignore-case' does not exist.
+ (tramp-get-debug-buffer): Use `tramp-debug-outline-regexp'.
+ (tramp-find-shell, tramp-open-connection-setup-interactive-shell):
+ `tramp-open-shell'.
+ (tramp-action-password): Hide password prompt before next run.
+ (tramp-process-actions): Widen connection buffer for the trace.
+ (tramp-open-connection-setup-interactive-shell): Set `remote-tty'
+ process property. Trace stty settings if `tramp-verbose' >= 9.
+ Apply workaround for IRIX64 bug. Move argument of last
+ `tramp-send-command' where it belongs to.
+ (tramp-maybe-open-connection): Use `async-args' and `gw-args' in
+ front of `login-args'.
+ (tramp-get-ls-command, tramp-get-ls-command-with-dired): Run tests
+ on "/dev/null" instead of "/".
+ (tramp-get-ls-command-with-dired): Make test for "--dired"
+ stronger.
+ (tramp-set-auto-save-file-modes): Adapt version check.
+ (tramp-set-process-query-on-exit-flag): Fix wrong parentheses.
+ (tramp-handle-process-file): Call the program in a subshell, in
+ order to preserve working directory.
+ (tramp-handle-shell-command): Don't use hard-wired "/bin/sh" but
+ `tramp-remote-sh' from `tramp-methods'.
+ (tramp-get-ls-command): Make test for "--color=never" stronger.
+ (tramp-check-for-regexp): Use (forward-line 1).
+
+ * net/trampver.el: Update release number.
+
+2010-08-26 Chong Yidong <cyd@stupidchicken.com>
+
+ * help.el (help-map): Bind `C-h P' to describe-package.
+
+ * menu-bar.el (menu-bar-describe-menu): Add describe-package.
+
+ * emacs-lisp/package.el (package-refresh-contents): Catch errors
+ when downloading archives.
+ (describe-package-1): Add package commentary.
+ (package-install-button-action): New function.
+ (package-menu-mode-map): Bind ? to package-menu-describe-package.
+ (package-menu-view-commentary): Function removed.
+ (package-list-packages-internal): Hide the `package' package too.
+
+2010-08-25 Kenichi Handa <handa@m17n.org>
+
+ * language/misc-lang.el ("Arabic"): New language environment.
+ Setup composition-function-table for Arabic characters.
+
+ * international/fontset.el (setup-default-fontset): Fix typo for
+ arabic OTF spec (fini->fina).
+
+2010-08-25 Jan Djärv <jan.h.d@swipnet.se>
+
+ * menu-bar.el (menu-bar-set-tool-bar-position): Set frame parameter
+ on all frames.
+
+2010-08-24 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+
+ * whitespace.el: Allow cleaning up blanks without blank
+ visualization (Bug#6651). Adjust help window for
+ whitespace-toggle-options (Bug#6479). Allow to use fill-column
+ instead of whitespace-line-column (from EmacsWiki). New version
+ 13.1.
+ (whitespace-style): Add new value 'face. Adjust docstring.
+ (whitespace-space, whitespace-hspace, whitespace-tab):
+ Adjust foreground property face.
+ (whitespace-line-column): Adjust docstring and type declaration.
+ (whitespace-style-value-list, whitespace-toggle-option-alist)
+ (whitespace-help-text): Adjust const initialization.
+ (whitespace-toggle-options, global-whitespace-toggle-options):
+ Adjust docstring.
+ (whitespace-display-window, whitespace-interactive-char)
+ (whitespace-style-face-p, whitespace-color-on): Adjust code.
+ (whitespace-help-scroll): New fun.
+
+2010-08-24 Chong Yidong <cyd@stupidchicken.com>
+
+ * emacs-lisp/package.el (list-packages): Alias for
+ package-list-packages.
+
+2010-08-24 Kevin Ryde <user42@zip.com.au>
+
+ * textmodes/flyspell.el (flyspell-check-tex-math-command): Doc fix
+ (Bug#5651).
+
+ * progmodes/ruby-mode.el (ruby): Add defgroup.
+
+2010-08-24 Chong Yidong <cyd@stupidchicken.com>
+
+ * progmodes/python.el: Add Ipython support (Bug#5390).
+ (python-shell-prompt-alist)
+ (python-shell-continuation-prompt-alist): New options.
+ (python--set-prompt-regexp): New function.
+ (inferior-python-mode, run-python, python-shell):
+ Require ansi-color. Use python--set-prompt-regexp to set the comint
+ prompt based on the Python interpreter.
+ (python--prompt-regexp): New var.
+ (python-check-comint-prompt)
+ (python-comint-output-filter-function): Use it.
+ (run-python): Use a pipe (Bug#5694).
+
+2010-08-24 Fabian Ezequiel Gallina <galli.87@gmail.com> (tiny change)
+
+ * progmodes/python.el (python-send-region): Send a different
+ Python command if Ipython is in use.
+ (python-check-version): Use a Python command to find the version.
+
+2010-08-24 Chong Yidong <cyd@stupidchicken.com>
+
+ * mouse.el (mouse-yank-primary): Avoid setting primary when
+ deactivating the mark (Bug#6872).
+
+2010-08-23 Chris Foote <chris@foote.com.au> (tiny change)
+
+ * progmodes/python.el (python-block-pairs): Allow use of "finally"
+ with "else" (Bug#3991).
+
+2010-08-23 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/dbus.el: Accept UNIX domain sockets as bus address.
+ (top): Don't initialize `dbus-registered-objects-table' anymore,
+ this is done in dbusbind,c.
+ (dbus-check-event): Adapt test for bus.
+ (dbus-return-values-table, dbus-unregister-service)
+ (dbus-event-bus-name, dbus-introspect, dbus-register-property):
+ Adapt doc string.
+
+2010-08-23 Juanma Barranquero <lekktu@gmail.com>
+
+ * ido.el (ido-use-virtual-buffers): Fix typo in docstring.
+
+2010-08-22 Juri Linkov <juri@jurta.org>
+
+ * simple.el (read-extended-command): New function with the logic
+ for `completing-read' moved to Elisp from `execute-extended-command'.
+ Use `function-called-at-point' in `minibuffer-default-add-function'
+ to get a command name for M-n (bug#5364, bug#5214).
+
+2010-08-22 Chong Yidong <cyd@stupidchicken.com>
+
+ * startup.el (command-line-1): Issue warning for ignored arguments
+ --unibyte, etc (Bug#6886).
+
+2010-08-22 Leo <sdl.web@gmail.com>
+
+ * net/rcirc.el (rcirc-add-or-remove): Accept a list of elements.
+ (ignore, bright, dim, keyword): Split list of nicknames before
+ passing to rcirc-add-or-remove (Bug#6894).
+
+2010-08-22 Chong Yidong <cyd@stupidchicken.com>
+
+ * emacs-lisp/easy-mmode.el (define-minor-mode): Doc fix (Bug#6880).
+
+2010-08-22 Leo <sdl.web@gmail.com>
+
+ Fix buffer-list rename&refresh after killing a buffer in ido.
+ * ido.el: Revert Óscar's.
+ (ido-kill-buffer-at-head): Exit the minibuffer with ido-exit=refresh.
+ Remember the buffers at head, rather than their name.
+ * iswitchb.el (iswitchb-kill-buffer): Re-make the list.
+
+2010-08-22 Kirk Kelsey <kirk.kelsey@0x4b.net> (tiny change)
+ Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/make-mode.el (makefile-fill-paragraph): Account for the
+ extra backslash added to each line (bug#6890).
+
+2010-08-22 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * subr.el (read-key): Don't echo keystrokes (bug#6883).
+
+2010-08-22 Glenn Morris <rgm@gnu.org>
+
+ * menu-bar.el (menu-bar-games-menu): Add landmark.
+
+2010-08-22 Glenn Morris <rgm@gnu.org>
+
+ * align.el (align-regexp): Make group and spacing arguments
+ use the interactive defaults when non-interactive. (Bug#6698)
+
+ * mail/rmail.el (rmail-forward): Replace mail-text-start with its
+ expansion, so as not to need sendmail.
+ (mail-text-start): Remove declaration.
+ (rmail-retry-failure): Require sendmail.
+
+2010-08-22 Chong Yidong <cyd@stupidchicken.com>
+
+ * subr.el (read-key): Don't hide the menu-bar entries (bug#6881).
+
+2010-08-22 Michael Albinus <michael.albinus@gmx.de>
+
+ * progmodes/flymake.el (flymake-start-syntax-check-process):
+ Use `start-file-process' in order to let it run also on remote hosts.
+
+2010-08-22 Kenichi Handa <handa@m17n.org>
+
+ * files.el: Add `word-wrap' as safe local variable.
+
+2010-08-22 Glenn Morris <rgm@gnu.org>
+
+ * woman.el (woman-translate): Case matters. (Bug#6849)
+
+2010-08-22 Chong Yidong <cyd@stupidchicken.com>
+
+ * simple.el (kill-region): Doc fix (Bug#6787).
+
+2010-08-22 Glenn Morris <rgm@gnu.org>
+
+ * calendar/diary-lib.el (diary-header-line-format):
+ Fit it to the window, not the frame.
+
+2010-08-22 Andreas Schwab <schwab@linux-m68k.org>
+
+ * subr.el (ignore-errors): Add debug declaration.
+
+2010-08-22 Geoff Gole <geoffgole@gmail.com> (tiny change)
+
+ * whitespace.el (whitespace-color-off): Remove post-command-hook
+ locally.
+
+2010-08-21 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * vc/add-log.el (add-log-file-name): Don't get confused by symlinks.
+
+2010-08-21 Chong Yidong <cyd@stupidchicken.com>
+
+ * cus-edit.el (custom-group-value-create): Add extra newline
+ before end line (Bug#6876).
+
+2010-08-21 Chong Yidong <cyd@stupidchicken.com>
+
+ * mouse.el (mouse-save-then-kill): Don't save region to kill ring
+ when extending it. Before killing on the second click, check if
+ the buffer is the correct one. Doc fix.
+ (mouse-secondary-save-then-kill): Allow usage without first
+ calling mouse-start-secondary, by defaulting to point. Don't save
+ an empty secondary selection. Doc fix.
+
+2010-08-21 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+
+ * whitespace.el: Fix slow cursor movement (Bug#6172). Reported by
+ Christoph Groth <cwg@falma.de> and Liu Xin <x_liu@neusoft.com>.
+ New version 13.0.
+ (whitespace-empty-at-bob-regexp, whitespace-empty-at-eob-regexp):
+ Adjust initialization.
+ (whitespace-bob-marker, whitespace-eob-marker)
+ (whitespace-buffer-changed): New vars.
+ (whitespace-cleanup, whitespace-color-on, whitespace-color-off)
+ (whitespace-empty-at-bob-regexp, whitespace-empty-at-eob-regexp)
+ (whitespace-post-command-hook, whitespace-display-char-on):
+ Adjust code.
+ (whitespace-looking-back, whitespace-buffer-changed): New funs.
+ (whitespace-space-regexp, whitespace-tab-regexp): Fun eliminated.
+
+2010-08-19 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * files.el (locate-file-completion-table): Only list the .el and .elc
+ extensions if there's no other choice (bug#5955).
+
+ * facemenu.el (facemenu-self-insert-data): New var.
+ (facemenu-post-self-insert-function, facemenu-set-self-insert-face):
+ New functions.
+ (facemenu-add-face): Use them.
+
+ * simple.el (blink-matching-open): Obey forward-sexp-function.
+
+2010-08-18 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * simple.el (prog-mode-map): New var.
+ (prog-indent-sexp): New command.
+
+ * progmodes/octave-mod.el (octave-mode-menu): Make toggle buttons.
+
+ * progmodes/prolog.el (smie): Require.
+
+ * emacs-lisp/smie.el (smie-default-backward-token)
+ (smie-default-forward-token): Strip properties.
+ (smie-next-sexp): Be more careful with associative operators.
+ (smie-forward-sexp-command): Generalize.
+ (smie-backward-sexp-command): Simplify.
+ (smie-closer-alist): New var.
+ (smie-close-block): New command.
+ (smie-indent-debug-log): New var.
+ (smie-indent-offset-rule): Add a few more cases.
+ (smie-indent-column): New function.
+ (smie-indent-after-keyword): Use it.
+ (smie-indent-keyword): Use it.
+ Fix up the opener code's point position.
+ (smie-indent-comment): Only applies at BOL.
+ (smie-indent-debug): New command.
+
+ * emacs-lisp/autoload.el (make-autoload): Preload the macros's
+ declarations that are useful before running the macro.
+
+2010-08-18 Joakim Verona <joakim@verona.se>
+
+ * image.el (imagemagick-types-inhibit): New variable.
+ (imagemagick-register-types): New function.
+ * image-mode.el (image-transform-properties): New function.
+ (image-transform-set-scale, image-transform-fit-to-height)
+ (image-transform-set-rotation, image-transform-set-resize)
+ (image-transform-fit-to-width, image-transform-fit-to-height):
+ New functions.
+ (image-toggle-display-image): Support image transforms.
+
+2010-08-18 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * image.el (create-animated-image): Don't add heuristic mask to image
+ (Bug#6839).
+
+2010-08-18 Jan Djärv <jan.h.d@swipnet.se>
+
+ * term/ns-win.el (ns-get-pasteboard, ns-set-pasteboard):
+ Use QCLIPBOARD instead of QPRIMARY (Bug#6677).
+
+2010-08-17 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/lisp.el (up-list): Obey forward-sexp-function if set.
+
+ Font-lock '...' strings, plus various simplifications and fixes.
+ * progmodes/octave-mod.el (octave-font-lock-keywords): Use regexp-opt.
+ (octave-font-lock-close-quotes): New function.
+ (octave-font-lock-syntactic-keywords): New var.
+ (octave-mode): Use it. Set beginning-of-defun-function.
+ (octave-mode-map): Don't override the <foo>-defun commands.
+ (octave-mode-menu): Pass it directly to easy-menu-define;
+ remove (now generic) <foo>-defun commands; use info-lookup-symbol.
+ (octave-block-match-alist): Fix up last change so that
+ octave-close-block uses the more specific keyword.
+ (info-lookup-mode): Silence byte-compiler.
+ (octave-beginning-of-defun): Not interactive any more.
+ Optimize slightly.
+ (octave-end-of-defun, octave-mark-defun, octave-in-defun-p): Remove.
+ (octave-indent-defun, octave-send-defun): Use mark-defun instead.
+ (octave-completion-at-point-function): Make sure point is within
+ beg..end.
+ (octave-reindent-then-newline-and-indent):
+ Use reindent-then-newline-and-indent.
+ (octave-add-octave-menu): Remove.
+
+2010-08-17 Jan Djärv <jan.h.d@swipnet.se>
+
+ * mail/emacsbug.el (report-emacs-bug-insert-to-mailer)
+ (report-emacs-bug-can-use-xdg-email): New functions.
+ (report-emacs-bug): Set can-xdg-email to result of
+ report-emacs-bug-can-use-xdg-email. If can-xdg-email bind
+ \C-cm to report-emacs-bug-insert-to-mailer and add help text
+ about it.
+
+ * net/browse-url.el (browse-url-default-browser): Add cond
+ for browse-url-xdg-open.
+ (browse-url-can-use-xdg-open, browse-url-xdg-open): New functions.
+
+2010-08-17 Glenn Morris <rgm@gnu.org>
+
+ * progmodes/cc-engine.el (c-new-BEG, c-new-END)
+ (c-fontify-recorded-types-and-refs): Define for compiler.
+ * progmodes/cc-mode.el (c-new-BEG, c-new-END): Move definitions
+ before use.
+
+ * calendar/icalendar.el (icalendar--convert-recurring-to-diary):
+ Fix format call.
+
+2010-08-17 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-handle-make-symbolic-link): Flush file
+ properties.
+ (tramp-handle-process-file): Call the program in a subshell, in
+ order to preserve working directory.
+ (tramp-action-password): Hide password prompt before next run.
(tramp-process-actions): Widen connection buffer for the trace.
+
+2010-08-16 Deniz Dogan <deniz.a.m.dogan@gmail.com>
+
+ * net/rcirc.el (rcirc-log-process-buffers): New option.
+ (rcirc-print): Use it.
+ (rcirc-generate-log-filename): New function.
+ (rcirc-log-filename-function): Change default to
+ rcirc-generate-log-filename (Bug#6828).
+
+2010-08-16 Chong Yidong <cyd@stupidchicken.com>
+
+ * simple.el (deactivate-mark): If select-active-regions is `only',
+ only set selection for temporarily active regions.
+
+ * cus-start.el: Change defcustom for select-active-regions.
+
+2010-08-15 Chong Yidong <cyd@stupidchicken.com>
+
+ * mouse.el (mouse--drag-set-mark-and-point): New function.
+ (mouse-drag-track): Use LOCATION arg to push-mark.
+ Use mouse--drag-set-mark-and-point to take click-count into
+ consideration when updating point and mark (Bug#6840).
+
+2010-08-15 Chong Yidong <cyd@stupidchicken.com>
+
+ * progmodes/compile.el (compilation-error-regexp-alist-alist):
+ Give the Ruby rule a lower priority than Gnu (Bug#6778).
+
+2010-08-14 Štěpán Němec <stepnem@gmail.com> (tiny change)
+
+ * font-lock.el (lisp-font-lock-keywords-2):
+ Add combine-after-change-calls, condition-case-no-debug,
+ with-demoted-errors, and with-silent-modifications (Bug#6025).
+
+2010-08-14 Kevin Ryde <user42@zip.com.au>
+
+ * emacs-lisp/copyright.el (copyright-update-year)
+ (copyright-update): Temporary switch-to-buffer to ensure the
+ buffer change being queried is visible (Bug#5394).
+
+2010-08-14 Tom Tromey <tromey@redhat.com>
+
+ * progmodes/etags.el (tags-file-name): Mark safe if stringp
+ (Bug#6733).
+
+2010-08-14 Eli Zaretskii <eliz@gnu.org>
+
+ * mouse.el (mouse-yank-primary): Fix mouse-2 on MS-Windows and
+ MS-DOS. (Bug#6689)
+
+2010-08-13 Jan Djärv <jan.h.d@swipnet.se>
+
+ * menu-bar.el (menu-bar-set-tool-bar-position): New function.
+ (menu-bar-showhide-tool-bar-menu-customize-enable-left)
+ (menu-bar-showhide-tool-bar-menu-customize-enable-right)
+ (menu-bar-showhide-tool-bar-menu-customize-enable-top)
+ (menu-bar-showhide-tool-bar-menu-customize-enable-bottom):
+ Call menu-bar-set-tool-bar-position.
+
+2010-08-12 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/octave-mod.el (octave-mode-syntax-table): Use the new "c"
+ comment style (bug#6834).
+ * progmodes/scheme.el (scheme-mode-syntax-table):
+ * emacs-lisp/lisp-mode.el (lisp-mode-syntax-table): Remove spurious
+ "b" flag in "' 14b" syntax.
+
+ * progmodes/octave-mod.el (octave-mode-map): Remove special bindings
+ for (un)commenting the region and performing completion.
+ (octave-mode-menu): Use standard commands for help and completion.
+ (octave-mode-syntax-table): Support %{..%} comments (sort of).
+ (octave-mode): Use define-derived-mode.
+ Set completion-at-point-functions and don't set columns.
+ Don't disable adaptive-fill-regexp.
+ (octave-describe-major-mode, octave-comment-region)
+ (octave-uncomment-region, octave-comment-indent)
+ (octave-indent-for-comment): Remove.
+ (octave-indent-calculate): Rename from calculate-octave-indent.
+ (octave-indent-line, octave-fill-paragraph): Update caller.
+ (octave-initialize-completions): No need to make an alist.
+ (octave-completion-at-point-function): New function.
+ (octave-complete-symbol): Use it.
+ (octave-insert-defun): Use define-skeleton.
+
+ * progmodes/octave-mod.el (octave-mode): Set comment-add.
+ (octave-mode-map): Use comment-dwim (bug#6829).
+
+2010-08-12 Antoine Levitt <antoine.levitt@gmail.com> (tiny change)
+
+ * cus-edit.el (custom-save-variables, custom-save-faces): Fix up
+ indentation of inserted comment.
+
+2010-08-11 Jan Djärv <jan.h.d@swipnet.se>
+
+ * faces.el (region): Add type gtk that uses gtk colors.
+
+ * dynamic-setting.el (dynamic-setting-handle-config-changed-event):
+ Handle theme-name change.
+
+2010-08-10 Michael R. Mauger <mmaug@yahoo.com>
+
+ * progmodes/sql.el: Version 2.5
+ (sql-product-alist): Add :prompt-cont-regexp property for several
+ database products.
+ (sql-prompt-cont-regexp): New variable.
+ (sql-output-newline-count, sql-output-by-send):
+ New variables. Record number of newlines in input text.
+ (sql-send-string): Handle multiple filters and count newlines.
+ (sql-send-magic-terminator): Count terminator newline.
+ (sql-interactive-remove-continuation-prompt): Filters output to
+ remove continuation prompts; one for each newline.
+ (sql-interactive-mode): Set up new variables, prompt regexp and
+ output filter.
+ (sql-mode-sqlite-font-lock-keywords): Correct some keywords.
+ (sql-make-alternate-buffer-name): Correct buffer name in edge cases.
+
+2010-08-10 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/pcase.el: New file.
+
+2010-08-10 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-vc-registered-read-file-names): Read input
+ as here-document, otherwise the command could exceed maximum
+ length of command line.
+ (tramp-handle-vc-registered): Call script accordingly.
+ Reported by Toru TSUNEYOSHI <t_tuneyosi@hotmail.com>.
+
+2010-08-10 Kenichi Handa <handa@m17n.org>
+
+ * language/hebrew.el: Exclude U+05C3 (Hebrew SOF PASUQ) from the
+ composable pattern.
+
+2010-08-09 Chong Yidong <cyd@stupidchicken.com>
+
+ * emacs-lisp/package.el (package-version-split)
+ (package--version-first-nonzero, package-version-compare):
+ Functions removed.
+ (package-directory-list, package-load-all-descriptors)
+ (package--built-in, package-activate, define-package)
+ (package-installed-p, package-compute-transaction)
+ (package-read-all-archive-contents)
+ (package--add-to-archive-contents, package-buffer-info)
+ (package-tar-file-info, package-list-packages-internal):
+ Use version-to-list and version-list-*.
+
+ * emacs-lisp/package-x.el (package-upload-buffer-internal):
+ Use version-to-list.
+ (package-upload-buffer-internal): Use version-list-<=.
+
+2010-08-09 Kenichi Handa <handa@m17n.org>
+
+ * language/hebrew.el: Exclude U+05BD (Hebrew MAQAF) from the
+ composable pattern.
+
+2010-08-08 Chong Yidong <cyd@stupidchicken.com>
+
+ * tutorial.el (tutorial--default-keys): C-d is now bound to
+ delete-forward-char (Bug#6826).
+
+ * mouse.el (mouse-drag-track): Remove accidentally-removed check
+ for `double' value of mouse-1-click-follows-link (Bug#6807).
+
+2010-08-08 Johan Bockgård <bojohan@gnu.org>
+
+ * replace.el (replace-highlight): Bind isearch-forward and
+ isearch-error, ensuring that highlighting is updated if the user
+ switches the search direction (Bug#6808).
+
+ * isearch.el (isearch-lazy-highlight-forward): New var.
+ (isearch-lazy-highlight-new-loop, isearch-lazy-highlight-search):
+ (isearch-lazy-highlight-update): Use it.
+
+2010-08-08 Kenichi Handa <handa@m17n.org>
+
+ * international/mule.el (define-charset): Store NAME as :base property.
+ (ctext-non-standard-encodings-table): Pay attention to charset aliases.
+ (ctext-pre-write-conversion): Sort ctext-standard-encodings by the
+ current priority. Force using the designation of the specific
+ charset by adding `charset' text property. Improve the whole algorithm.
+
+2010-08-08 Juanma Barranquero <lekktu@gmail.com>
+
+ * emulation/pc-select.el (pc-selection-mode-hook)
+ (copy-region-as-kill-nomark, beginning-of-buffer-mark)
+ (pc-selection-mode): Fix typos in docstrings.
+
+2010-08-08 Kenichi Handa <handa@m17n.org>
+
+ * language/cyrillic.el: Don't add "microsoft-cp1251" to
+ ctext-non-standard-encodings-alist here.
+
+ * international/mule.el (ctext-non-standard-encodings-alist):
+ Add "koi8-r" and "microsoft-cp1251".
+ (ctext-standard-encodings): New variable.
+ (ctext-non-standard-encodings-table): List only elements for
+ non-standard encodings.
+ (ctext-pre-write-conversion): Adjust for the above change.
+ Check ctext-standard-encodings.
+
+ * international/mule-conf.el (compound-text): Doc fix.
+ (ctext-no-compositions): Doc fix.
+ (compound-text-with-extensions): Doc fix.
+
+2010-08-08 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * simple.el (exchange-dot-and-mark): Mark obsolete, finally.
+
+2010-08-08 Juanma Barranquero <lekktu@gmail.com>
+
+ * progmodes/which-func.el (which-func-format): Split help-echo text
+ into lines, like other mode-line tooltips.
+
+ * server.el (server-start): When using TCP sockets, force IPv4
+ and use a literal 127.0.0.1 for localhost. (Related to bug#6781.)
+
+2010-08-08 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * bindings.el (complete-symbol): Run completion-at-point as a fallback.
+
+2010-08-08 Juanma Barranquero <lekktu@gmail.com>
+
+ * term.el (term-delimiter-argument-list): Reflow docstring.
+ (term-read-input-ring, term-write-input-ring, term-send-input)
+ (term-bol, term-erase-in-display, serial-supported-or-barf):
+ Fix typos in docstrings.
+
+2010-08-08 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * bindings.el (function-key-map): Add a S-tab => backtab fallback.
+
+2010-08-08 Juanma Barranquero <lekktu@gmail.com>
+
+ * dabbrev.el (dabbrev-completion): Fix typo in docstring.
+
+2010-08-08 MON KEY <monkey@sandpframing.com> (tiny change)
+
+ * emacs-lisp/syntax.el (syntax-ppss-toplevel-pos):
+ Fix typo in docstring (bug#6747).
+
+2010-08-08 Leo <sdl.web@gmail.com>
+
+ * eshell/esh-io.el (eshell-get-target): Better detection of
+ read-only file (Bug#6762).
+
+2010-08-08 Juanma Barranquero <lekktu@gmail.com>
+
+ * align.el (align-default-spacing): Doc fix.
+ (align-region-heuristic, align-regexp): Fix typos in docstrings.
+
+2010-08-08 Stephen Peters <speters@itasoftware.com>
+
+ * calendar/icalendar.el
+ (icalendar--split-value): Fix splitting regexp. (Bug#6766)
+ (icalendar--get-weekday-numbers): New.
+ (icalendar--convert-recurring-to-diary): Handle multiple byday
+ values in weekly rules. (Bug#6766)
+
+2010-08-08 Ulf Jasper <ulf.jasper@web.de>
+
+ * calendar/icalendar.el (icalendar-uid-format): Doc fix.
+ (icalendar--create-uid, icalendar-export-region)
+ (icalendar--parse-summary-and-rest): Code formatting.
+
+2010-08-08 Jay Belanger <jay.p.belanger@gmail.com>
+
+ * calc/calc.el (calc-trail-mode,calc-refresh): Use `face' property
+ to italicize headers.
+ (calc-highlight-selections-with-faces): New variable.
+ (calc-selected-face, calc-nonselected-face): New faces.
+
+ * calc/calccomp.el (math-comp-highlight-string): Use
+ `calc-highlight-selections-with-faces' to determine how to highlight
+ sub-formulas.
+
+ * calc/calc-sel.el (calc-show-selections): Change message to when
+ using faces to highlight selections.
+
+2010-08-07 Michael R. Mauger <mmaug@yahoo.com>
+
+ * progmodes/sql.el (sql-mode-sqlite-font-lock-keywords):
+ Add SQLite 3 keywords, functions and datatypes.
+ (sql-interactive-mode): Remove `comint-process-echoes' set to t
+ (Bug#6686).
+
+2010-08-07 Chong Yidong <cyd@stupidchicken.com>
+
+ * simple.el (select-active-regions): Move to keyboard.c.
+ (deactivate-mark): Used saved-region-selection.
+ (select-active-region): Function removed.
+ (activate-mark, set-mark, push-mark-command)
+ (handle-shift-selection): Don't call it.
+ (keyboard-quit): Avoid adding the region to the window selection.
+
+ * mouse.el (mouse-drag-track): Remove hacks to deal with old
+ select-active-regions implementation.
+ (mouse-yank-at-click): Doc fix.
+
+ * cus-start.el: Add custom declaration for select-active-regions.
+
+2010-08-07 Eli Zaretskii <eliz@gnu.org>
+
+ * simple.el (delete-forward-char): Doc fix.
+
+ * tutorial.el (help-with-tutorial): Hack safe file-local variables
+ after reading the tutorial.
+
+2010-08-06 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-cmds.el (c-mask-paragraph, c-fill-paragraph):
+ Fix for the case that a C style comment has its delimiters alone on
+ their respective lines.
+
+2010-08-06 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-handle-start-file-process): Set connection
+ property "vec".
+ (tramp-process-sentinel): Use it for flushing the cache.
+ We cannot do it via the process buffer, the buffer could be deleted
+ already when running the sentinel.
+
+2010-08-06 Jürgen Hötzel <juergen@archlinux.org> (tiny change)
+
+ * comint.el (comint-mode): Make directory tracking functions
+ functional on remote files. (Bug#6764)
+
+2010-08-06 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * vc/diff-mode.el (diff-mode-shared-map): Bind g to revert-buffer.
+
+2010-08-05 Eli Zaretskii <eliz@gnu.org>
+
+ * emacs-lisp/find-gc.el (find-gc-source-files):
+ Rename unexec.c => unexcoff.c.
+
+ * emacs-lisp/authors.el (authors-fixed-entries):
+ Rename unexec.c => unexcoff.c.
+
+2010-08-05 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-handle-dired-uncache): Flush directory
+ cache, not only file cache.
+ (tramp-process-sentinel): New defun.
+ (tramp-handle-start-file-process): Use it, in order to invalidate
+ file caches.
+
+2010-08-03 Leo <sdl.web@gmail.com>
+
+ * server.el (server-start): Simplify loop.
+
+2010-08-02 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * frame.el (screen-height, screen-width, set-screen-width)
+ (set-screen-height): Remove ancient compatibility aliases.
+
+ * textmodes/fill.el (justify-current-line): Don't add 1 to nspaces
+ when justifying. It seems useless and harmful for ncols=1 (bug#6738).
+
+ * emacs-lisp/timer.el (timer-event-handler): Protect against timers
+ that change current buffer.
+
+2010-08-01 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * mouse.el (mouse-fixup-help-message): Match "mouse-2" only at the
+ beginning of the string. Use `string-match-p'. (Bug#6765)
+
+2010-08-01 Jan Djärv <jan.h.d@swipnet.se>
+
+ * cus-start.el (x-gtk-use-system-tooltips): New variable.
+
+2010-08-01 Chong Yidong <cyd@stupidchicken.com>
+
+ * emacs-lisp/package.el (package--list-packages): Fix column alignment.
+ (package--builtins): Tweak descriptions.
+ (package-print-package): Upcase descriptions if necessary.
+ Show all built-in packages in font-lock-builtin-face.
+ (package-list-packages-internal): Omit "emacs" package.
+ Show status of built-in packages as "built-in".
+
+2010-07-31 Chong Yidong <cyd@stupidchicken.com>
+
+ * mouse.el (mouse-save-then-kill): Doc fix. Deactivate mark
+ before killing to preserve the primary selection (Bug#6701).
+
+ * term/x-win.el (x-select-text): Doc fix.
+
+2010-07-31 Nathaniel Flath <flat0103@gmail.com>
+
+ * progmodes/cc-vars.el (c-offsets-alist, c-inside-block-syms)
+ (objc-font-lock-extra-types):
+ * progmodes/cc-mode.el (c-basic-common-init):
+ * progmodes/cc-langs.el (c-make-mode-syntax-table)
+ (c++-make-template-syntax-table)
+ (c-identifier-syntax-modifications, c-symbol-start, c-operators)
+ (c-<-op-cont-regexp, c->-op-cont-regexp, c-class-decl-kwds)
+ (c-brace-list-decl-kwds, c-modifier-kwds, c-prefix-spec-kwds-re)
+ (c-type-list-kwds, c-decl-prefix-re, c-opt-type-suffix-key):
+ * progmodes/cc-fonts.el (c-make-inverse-face)
+ (c-basic-matchers-after):
+ * progmodes/cc-engine.el (c-forward-keyword-clause)
+ (c-forward-<>-arglist, c-forward-<>-arglist-recur)
+ (c-forward-name, c-forward-type, c-forward-decl-or-cast-1)
+ (c-guess-continued-construct, c-guess-basic-syntax):
+ Enhance Java Mode to handle Java 5.0 (Tiger) and Java 6 (Mustang).
+ The above functions were modified or created.
+
+2010-07-31 Jan Djärv <jan.h.d@swipnet.se>
+
+ * faces.el (face-all-attributes): Improve documentation (Bug#6767).
+
+2010-07-31 Eli Zaretskii <eliz@gnu.org>
+
+ * files.el (bidi-paragraph-direction): Define safe local values.
+
+ * language/hebrew.el ("Hebrew"): Add TUTORIAL.he to
+ language-info-alist. Remove outdated FIXME in a comment.
+
+2010-07-31 Alan Mackenzie <acm@muc.de>
+
+ * progmodes/cc-cmds.el (c-mask-paragraph): Fix bug #6688:
+ Auto-fill broken in C/C++ modes.
+
+2010-07-29 Jan Djärv <jan.h.d@swipnet.se>
+
+ * menu-bar.el (menu-bar-showhide-tool-bar-menu-customize-enable-left)
+ (menu-bar-showhide-tool-bar-menu-customize-disable)
+ (menu-bar-showhide-tool-bar-menu-customize-enable-right)
+ (menu-bar-showhide-tool-bar-menu-customize-enable-bottom)
+ (menu-bar-showhide-tool-bar-menu-customize-enable-top): New functions
+ (menu-bar-showhide-tool-bar-menu): If tool bar is moveable,
+ make a menu for Options => toolbar that can move it.
+
+2010-07-29 Chong Yidong <cyd@stupidchicken.com>
+
+ * emacs-lisp/package-x.el (package--make-rss-entry):
+ (package-maint-add-news-item, package--update-news)
+ (package-upload-buffer-internal): New arg ARCHIVE-URL.
+
+ * emacs-lisp/package.el (package-archive-url): Rename from
+ package-archive-id.
+ (package-install): Doc fix.
+ (package-download-single, package-download-tar, package-install)
+ (package-menu-view-commentary): Callers changed.
+
+2010-07-29 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-handle-start-file-process): Check only for
+ `remote-tty' process property.
+ (tramp-open-shell): Don't check for tty.
(tramp-open-connection-setup-interactive-shell): Set `remote-tty'
- process property. Trace stty settings if `tramp-verbose' >= 9.
+ process property.
+
+ * progmodes/gdb-mi.el (gdb-init-1): Check also for tty on a remote
+ host.
+
+2010-07-28 Chong Yidong <cyd@stupidchicken.com>
+
+ * emacs-lisp/package.el (package-load-list, package-archives)
+ (package-archive-contents, package-user-dir)
+ (package-directory-list, package--builtins, package-alist)
+ (package-activated-list, package-obsolete-alist): Mark as risky.
+
+2010-07-28 Phil Hagelberg <phil@evri.com>
+
+ Add support for non-default package repositories.
+ * emacs-lisp/package.el (package-archive-base): Var deleted.
+ (package-archives): New variable.
+ (package-archive-contents): Doc fix.
+ (package-load-descriptor): Do nothing if descriptor file is missing.
+ (package--write-file-no-coding): New function.
+ (package-unpack-single): Use it.
+ (package-archive-id): New function.
+ (package-download-single, package-download-tar)
+ (package-menu-view-commentary): Use it.
+ (package-installed-p): Make second argument optional.
+ (package-read-all-archive-contents): New function.
+ (package-initialize): Use it.
+ (package-read-archive-contents): Add ARCHIVE argument.
+ (package--add-to-archive-contents): New function.
+ (package-install): Don't call package-read-archive-contents.
+ (package--download-one-archive): Store archive file in a
+ subdirectory of package-user-dir.
+ (package-menu-execute): Remove spurious line movement.
+
+2010-07-28 Jan Djärv <jan.h.d@swipnet.se>
+
+ * cus-start.el (tool-bar-style): Add text-image-horiz.
+
+2010-07-28 Michael Albinus <michael.albinus@gmx.de>
+
+ * progmodes/gud.el (gud-common-init): Check for remoteness of
+ `file', and not of `default-directory'.
+
+2010-07-28 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-methods): Move hostname to the end in all
+ ssh `tramp-login-args'.
+ (tramp-verbose): Describe verbose level 9.
+ (tramp-open-shell): Check for tty if `tramp-verbose' >= 9.
+ (tramp-open-connection-setup-interactive-shell): Trace stty
+ settings if `tramp-verbose' >= 9.
+ (tramp-handle-start-file-process): Implement tty setting.
+ (Bug#4604, Bug#6360)
+
+ * net/tramp-cmds.el (tramp-bug): Recommend setting of
+ `tramp-verbose' to 9.
+
+2010-07-27 Aaron S. Hawley <ashawley@burlingtontelecom.net>
+
+ * emacs-lisp/re-builder.el (reb-re-syntax, reb-lisp-mode)
+ (reb-lisp-syntax-p, reb-change-syntax, reb-cook-regexp):
+ Remove references to package `lisp-re' (bug#4369).
+
+2010-07-27 Tom Tromey <tromey@redhat.com>
+
+ * progmodes/js.el (js-mode):
+ * progmodes/make-mode.el (makefile-mode):
+ * progmodes/simula.el (simula-mode):
+ * progmodes/tcl.el (tcl-mode): Derive from prog-mode.
+
+2010-07-27 Juanma Barranquero <lekktu@gmail.com>
+
+ * help-fns.el (find-lisp-object-file-name): Doc fix (bug#6494).
+
+ * time.el (display-time-day-and-date): Remove spurious * in docstring.
+ (display-time-world-buffer-name, display-time-world-mode-map):
+ Fix typos in docstrings.
+
+2010-07-27 Shyam Karanatt <shyam@swathanthran.in> (tiny change)
+
+ * image-mode.el (image-display-size): New function.
+ (image-forward-hscroll, image-next-line, image-eol, image-eob)
+ (image-mode-fit-frame): Use it (Bug#6639).
+
+2010-07-27 Chong Yidong <cyd@stupidchicken.com>
+
+ * dired.el (dired-buffers-for-dir): Handle list values of
+ dired-directory (Bug#6636).
+
+2010-07-26 Sam Steingold <sds@gnu.org>
+
+ * mouse.el (mouse-yank-primary, mouse-yank-secondary):
+ Do not call `x-get-selection' the second time, reuse the value.
+
+2010-07-26 Daiki Ueno <ueno@unixuser.org>
+
+ * epa-mail.el (epa-mail-mode-map): Add alternative key bindings
+ which consist of control chars only. Suggested by Richard Stallman.
+
+2010-07-25 Daiki Ueno <ueno@unixuser.org>
+
+ * epa-file.el (epa-file-insert-file-contents): Check if LOCAL-FILE
+ exists before passing an error to find-file-not-found-functions
+ (bug#6723).
+
+2010-07-23 Lukas Huonker <l.huonker@gmail.com>
+
+ * play/tetris.el (tetris-tty-colors, tetris-x-colors, tetris-blank):
+ Remove leading nil element, adjust values.
+ (tetris-shapes, tetris-shape-scores):
+ Change representation of shapes and remove some redundancy.
+ (tetris-get-shape-cell, tetris-shape-width, tetris-draw-next-shape)
+ (tetris-draw-shape, tetris-erase-shape, tetris-test-shape):
+ Adjust for working with new representation of shapes.
+ (tetris-shape-rotations): New function.
+ (tetris-move-bottom, tetris-move-left, tetris-move-right)
+ (tetris-rotate-prev, tetris-rotate-next):
+ Adjust for working with the new version of tetris-test-shape.
+
+2010-07-23 Markus Triska <markus.triska@gmx.at>
+
+ * progmodes/ps-mode.el: Use comint (bug#5954).
+ (ps-run-mode-map): Adapt for comint-mode; omit "\r", [return]..
+ (ps-mode-other-newline): Simplify.
+ (ps-run-mode): Derive from comint-mode instead of
+ fundamental-mode, yielding input history etc.
+ (ps-run-start, ps-run-quit, ps-run-clear, ps-run-region)
+ (ps-run-send-string): Adapt for comint-mode.
+ (ps-run-newline): Remove now unneeded function.
+
+2010-07-23 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-methods): Move hostname to the end in all
+ plink `tramp-login-args'.
+
+2010-07-23 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-open-shell): New defun.
+ (tramp-find-shell, tramp-open-connection-setup-interactive-shell):
+ Use it.
+
+2010-07-23 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-file-name-regexp-unified)
+ (tramp-completion-file-name-regexp-unified): On W32 systems, do
+ not regard the volume letter as remote filename. (Bug#5447)
+
+2010-07-23 Juanma Barranquero <lekktu@gmail.com>
+
+ * custom.el (custom-declare-variable): Give a clearer error message
+ when the docstring is missing (bug#6476).
+
+2010-07-22 Michael R. Mauger <mmaug@yahoo.com>
+
+ * progmodes/sql.el: Version 2.4. Improved Login prompting.
+ (sql-login-params): New widget definition.
+ (sql-oracle-login-params, sql-mysql-login-params)
+ (sql-solid-login-params, sql-sybase-login-params)
+ (sql-informix-login-params, sql-ingres-login-params)
+ (sql-ms-login-params, sql-postgres-login-params)
+ (sql-interbase-login-params, sql-db2-login-params)
+ (sql-linter-login-params): Use it.
+ (sql-sqlite-login-params): Use it; Define "database" parameter as
+ a file name.
+ (sql-sqlite-program): Change to "sqlite3".
+ (sql-comint-sqlite): Make sure database name is complete.
+ (sql-for-each-login): New function.
+ (sql-connect, sql-save-connection): Use it.
+ (sql-get-login-ext): New function.
+ (sql-get-login): Use it.
+ (sql-make-alternate-buffer-name): Handle :file parameters.
+
+2010-07-22 Juanma Barranquero <lekktu@gmail.com>
+
+ * dired.el (dired-no-confirm): Document value t and fix defcustom to
+ accept it (bug#6597). Suggested by Drew Adams <drew.adams@oracle.com>.
+
+2010-07-22 Teemu Likonen <tlikonen@iki.fi> (tiny change)
+
+ * dired.el (dired-mode-map): Use command remapping (bug#6632).
+
+2010-07-22 Lawrence Mitchell <wence@gmx.li>
+
+ * term/vt100.el (vt100-wide-mode): Fix :init-value keyword (bug#6620).
+
+2010-07-21 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-get-ls-command)
+ (tramp-get-ls-command-with-dired): Run tests on "/dev/null"
+ instead of "/".
+
+2010-07-20 Michael R. Mauger <mmaug@yahoo.com>
+
+ * progmodes/sql.el: Version 2.3.
- (sql-connection-alist): Changed keys from symbols to strings;
++ (sql-connection-alist): Change keys from symbols to strings;
+ enhanced the widget definition.
+ (sql-mode-menu): Add submenu to select connections.
+ (sql-interactive-mode-menu): Add "Save Connection" item.
+ (sql-add-product): Fix menu item.
+ (sql-get-product-feature): Improved error handling.
+ (sql--alt-buffer-part, sql--alt-if-not-empty): Removed.
+ (sql-make-alternate-buffer-name): Simplified.
+ (sql-product-interactive): Handle missing product.
+ (sql-connect): Support string keys, minor improvements.
+ (sql-save-connection): New function.
+ (sql-connection-menu-filter): New function.
+
+2010-07-20 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-file-name-handler): Trace 'quit.
+ (tramp-open-connection-setup-interactive-shell):
Apply workaround for IRIX64 bug. Move argument of last
`tramp-send-command' where it belongs to.
+
+2010-07-20 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-perl-file-attributes)
+ (tramp-perl-directory-files-and-attributes): Don't pass "$3".
(tramp-maybe-open-connection): Use `async-args' and `gw-args' in
front of `login-args'.
- (tramp-get-ls-command, tramp-get-ls-command-with-dired): Run tests
- on "/dev/null" instead of "/".
- (tramp-get-ls-command-with-dired): Make test for "--dired"
- stronger.
- (tramp-set-auto-save-file-modes): Adapt version check.
+
+2010-07-19 Juanma Barranquero <lekktu@gmail.com>
+
+ * time.el (display-time-world-mode): Define with `define-derived-mode'.
+ Set `show-trailing-whitespace' to nil.
+ (display-time-world-display): Simplify.
+
+2010-07-18 Alan Mackenzie <acm@muc.de>
+
+ Enhance `c-file-style' in file/directory local variables.
+ * progmodes/cc-mode.el (c-count-cfss): New function.
+ (c-before-hack-hook): Call `c-set-style' differently according to
+ whether c-file-style was set in file or directory local
+ variables.
+
+2010-07-18 Michael R. Mauger <mmaug@yahoo.com>
+
+ * progmodes/sql.el: Version 2.2.
+ (sql-product, sql-user, sql-database, sql-server, sql-port):
+ Use defcustom :safe keyword rather than putting safe-local-variable
+ property.
+ (sql-password): Use defcustom :risky keyword rather than putting
+ risky-local-variable property.
+ (sql-oracle-login-params, sql-sqlite-login-params)
+ (sql-solid-login-params, sql-sybase-login-params)
+ (sql-informix-login-params, sql-ingres-login-params)
+ (sql-ms-login-params, sql-postgres-login-params)
+ (sql-interbase-login-params, sql-db2-login-params)
+ (sql-linter-login-params): Add `port' option.
+ (sql-get-product-feature): Add NO-INDIRECT parameter.
+ (sql-comint-oracle, sql-comint-sybase)
+ (sql-comint-informix, sql-comint-sqlite, sql-comint-mysql)
+ (sql-comint-solid, sql-comint-ingres, sql-comint-ms)
+ (sql-comint-postgres, sql-comint-interbase, sql-comint-db2)
+ (sql-comint-linter): Rename sql-connect-* functions to
+ sql-comint-*.
+ (sql-product-alist, sql-mode-menu): Rename as above and
+ :sqli-connect-func to :sqli-comint-func.
+ (sql-connection): New variable.
+ (sql-interactive-mode): Set it.
+ (sql-connection-alist): New variable.
+ (sql-connect): New function.
+ (sql--alt-buffer-part, sql--alt-if-not-empty)
+ (sql-make-alternate-buffer-name): Improved alternative buffer name.
+
+2010-07-17 Thierry Volpiatto <thierry.volpiatto@gmail.com>
+
+ * image-mode.el (image-bookmark-make-record): Do not set context
+ in an image (Bug#6650).
+
+2010-07-17 Chong Yidong <cyd@stupidchicken.com>
+
+ * simple.el (select-active-region): New function.
+ (push-mark-command, set-mark, activate-mark)
+ (handle-shift-selection): Use it.
+ (deactivate-mark): Don't check for size of region.
+
+ * mouse.el (mouse-drag-track): Use select-active-region.
+
+2010-07-17 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-get-ls-command-with-dired): Make test for
+ "--dired" stronger.
+
+2010-07-17 Chong Yidong <cyd@stupidchicken.com>
+
+ * term/x-win.el (x-select-enable-primary): Change default to nil.
+ (x-select-enable-clipboard): Add :version keyword.
+
+ * mouse.el (mouse-drag-copy-region):
+ * simple.el (select-active-regions): Likewise.
+
+2010-07-16 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * vc/vc.el (vc-coding-system-inherit-eol): New defvar.
+ (vc-coding-system-for-diff): Use it to decide whether to inherit
+ from the file the EOL format for reading the diffs of that file.
+ (Bug#4451)
+
+2010-07-16 Eli Zaretskii <eliz@gnu.org>
+
+ * mail/rmailmm.el (rmail-mime-save): Make the temp buffer
+ unibyte, so compressed attachments are not compressed again.
+
+2010-07-16 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-handle-shell-command): Don't use hard-wired
+ "/bin/sh" but `tramp-remote-sh' from `tramp-methods'.
+ (tramp-find-shell): Simplify setting connection property.
+ (tramp-get-ls-command): Make test for "--color=never" stronger.
+
+2010-07-15 Simon South <ssouth@member.fsf.org>
+
+ * progmodes/delphi.el (delphi-previous-indent-of): Indent case
+ blocks within record declarations (i.e. variant parts) correctly.
+
+2010-07-15 Simon South <ssouth@member.fsf.org>
+
+ * progmodes/delphi.el (delphi-token-at): Give newlines precedence
+ over literal tokens when parsing so newlines aren't "absorbed" by
+ single-line comments. Corrects the indentation of case blocks
+ that have a comment on the first line.
+
+2010-07-14 Karl Fogel <kfogel@red-bean.com>
+
+ * bookmark.el (bookmark-load-hook): Fix doc string as suggested
+ by Drew Adams (Bug#5504).
+
+2010-07-14 Jan Djärv <jan.h.d@swipnet.se>
+
+ * xt-mouse.el (xterm-mouse-event-read): Fix for characters > 127
+ now that Unicode is used (Bug#6594).
+
+2010-07-14 Chong Yidong <cyd@stupidchicken.com>
+
+ * term/x-win.el (x-select-enable-clipboard): Default to t.
+ (x-initialize-window-system): Don't overwrite Paste menu item.
+
+ * simple.el (select-active-regions): Default to t.
+ (push-mark-command): Don't overwrite primary with empty string.
+
+ * mouse.el: Bind mouse-2 to mouse-yank-primary.
+ (mouse-drag-copy-region): Default to nil.
+
+ * menu-bar.el (menu-bar-enable-clipboard): Don't overwrite
+ Cut/Copy/Paste menu bar items.
+
+2010-07-13 Thierry Volpiatto <thierry.volpiatto@gmail.com>
+
+ Allow C-w when setting a bookmark in a Gnus Article buffer (Bug#5975).
+ Patch applied by Karl Fogel.
+
+ * bookmark.el (bookmark-set): Don't set `bookmark-yank-point'
+ and `bookmark-current-buffer' if they have been already set in
+ another buffer (e.g gnus-art).
+
+2010-07-13 Karl Fogel <kfogel@red-bean.com>
+ Thierry Volpiatto <thierry.volpiatto@gmail.com>
+
+ Preparation for setting bookmarks in Gnus article buffers (Bug#5975).
+
+ * bookmark.el (bookmark-make-record-default): Allow unneeded
+ information to be omitted from the record.
+
+ Adjust declarations and calls:
+
+ * info.el (bookmark-make-record-default): Adjust declaration.
+ (Info-bookmark-make-record): Adjust call.
+
+ * woman.el (bookmark-make-record-default): Adjust declaration.
+ (woman-bookmark-make-record): Adjust call.
+
+ * man.el (bookmark-make-record-default): Adjust declaration.
+ (Man-bookmark-make-record): Adjust call.
+
+ * image-mode.el (bookmark-make-record-default): Adjust declaration.
+
+ * doc-view.el (bookmark-make-record-default): Adjust declaration.
+
+2010-07-13 Karl Fogel <kfogel@red-bean.com>
+
+ * bookmark.el (bookmark-show-annotation): Use `when' instead of `if'.
+ This is also from Thierry Volpiatto's patch in bug #6444. However,
+ because it was extraneous to the functional change in that patch,
+ and causes a re-indendation, I am committing it separately.
+
+2010-07-13 Thierry Volpiatto <thierry.volpiatto@gmail.com>
+
+ * bookmark.el (bookmark-show-annotation): Ensure annotations show,
+ e.g. in Info bookmarks, by using `switch-to-buffer-other-window'.
+ Patch applied by Karl Fogel (Bug#6444).
+
+2010-07-13 Chong Yidong <cyd@stupidchicken.com>
+
+ * frame.el (make-frame): Fix typo in 2010-06-30 change (Bug#6625).
+
+2010-07-13 Adrian Robert <Adrian.B.Robert@gmail.com>
+
+ * term/ns-win.el: Bind M-~ to 'ns-prev-frame (due to Matthew
+ Dempsky; bug#5084). Remove incorrect binding for S-tab.
+ (ns-alternatives-map): Change S-tab binding to backtab
+ (bug#6616).
+
+ * simple.el (normal-erase-is-backspace-setup-frame): Set mode on
+ under ns.
+
+2010-07-12 Andreas Schwab <schwab@linux-m68k.org>
+
+ * language/tai-viet.el ("TaiViet"): Try to fix re-encoding bugs.
+ (Bug#5806)
+
+ * language/tv-util.el (tai-viet-re): Remove format.
+
+2010-07-12 Kenichi Handa <handa@m17n.org>
+
+ * language/hebrew.el: Remove no-byte-compile declaration.
+ Change coding: tag to utf-8. Register hebrew-shape-gstring in
+ composition-function-table for 3-character looking back.
+ (hebrew-font-get-precomposed): New function.
+ (hebrew-shape-gstring): Utilize precomposed glyphs if available.
+
+2010-07-11 Chong Yidong <cyd@stupidchicken.com>
+
+ * mouse.el (mouse-drag-track): Handle select-active-regions
+ (Bug#6612).
+
+2010-07-11 Magnus Henoch <magnus.henoch@gmail.com>
+
+ * net/tramp-gvfs.el (tramp-gvfs-handle-copy-file): Do not pass
+ empty argument to gvfs-copy.
+
+2010-07-10 Glenn Morris <rgm@gnu.org>
+
+ * calendar/calendar.el (calendar-week-end-day): New function.
+ * calendar/cal-tex.el (cal-tex-cursor-month): Remove unused vars.
+ Respect calendar-week-start-day. (Bug#6606)
+ (cal-tex-insert-day-names, cal-tex-insert-blank-days)
+ (cal-tex-insert-blank-days-at-end): Respect calendar-week-start-day.
+ (cal-tex-first-blank-p, cal-tex-last-blank-p): Simplify, and
+ respect calendar-week-start-day.
+
+2010-07-10 Chong Yidong <cyd@stupidchicken.com>
+
+ * simple.el (use-region-p): Doc fix (Bug#6607).
+
+2010-07-10 Aleksei Gusev <aleksei.gusev@gmail.com> (tiny change)
+
+ * progmodes/compile.el (compilation-error-regexp-alist-alist):
+ Add regexps for cucumber and ruby.
+
+2010-07-08 Daiki Ueno <ueno@unixuser.org>
+
+ * epa-file.el (epa-file-error, epa-file--find-file-not-found-function)
+ (epa-file-insert-file-contents): Hack to prevent
+ find-file from opening empty buffer when decryption failed
+ (bug#6568).
+
+2010-07-07 Agustín Martín <agustin.martin@hispalinux.es>
+
+ * textmodes/ispell.el (ispell-alternate-dictionary):
+ Use file-readable-p.
+ Return nil if no word-list is found at default locations.
+ (ispell-complete-word-dict): Default to nil.
+ (ispell-command-loop): Use 'word-list' when using lookup-words.
+ (lookup-words): Use ispell-complete-word-dict or
+ ispell-alternate-dictionary. Check for word-list availability
+ and handle errors if needed with better messages (Bug#6539).
+ (ispell-complete-word): Use ispell-complete-word-dict or
+ ispell-alternate-dictionary.
+
+2010-07-07 Christoph Scholtes <cschol2112@gmail.com>
+
+ * progmodes/python.el (python-font-lock-keywords): Add Python 2.7
+ builtins (BufferError, BytesWarning, WindowsError; callables
+ bin, bytearray, bytes, format, memoryview, next, print; __package__).
+
+2010-07-07 Glenn Morris <rgm@gnu.org>
+
+ * play/zone.el (top-level): Do not require timer, tabify, or cl.
+ (zone-shift-left): Ignore intangibility, and any errors from
+ forward-char.
+ (zone-shift-right): Remove no-op end-of-line. Ignore intangibility.
+ (zone-pgm-putz-with-case): Use upcase-region rather than inserting,
+ deleting, and copying text properties.
+ (zone-line-specs, zone-pgm-stress): Check forward-line exit status.
+ (zone-pgm-rotate): Handle odd buffers like that of gomoku, where getting
+ to point-max is hard.
+ (zone-fret, zone-fill-out-screen): Replace cl's do with dotimes.
+ (zone-fill-out-screen): Ignore intangibility.
+
+2010-07-05 Chong Yidong <cyd@stupidchicken.com>
+
+ * menu-bar.el (menu-bar-mode):
+ * tool-bar.el (tool-bar-mode): Replace default-frame-alist element
+ if it has been set.
+
+ * mouse.el (mouse-drag-track): Call mouse-start-end to handle
+ word/line selection (Bug#6565).
+
+2010-07-04 Juanma Barranquero <lekktu@gmail.com>
+
+ * net/dbus.el (dbus-send-signal): Declare function.
+
+2010-07-04 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
+ (dbus-register-property): New optional argument EMITS-SIGNAL.
+ (dbus-property-handler): Send signal "PropertiesChanged" if requested.
+
+2010-07-03 Chong Yidong <cyd@stupidchicken.com>
+
+ * mouse.el (mouse-drag-overlay): Variable deleted.
+ (mouse-move-drag-overlay, mouse-show-mark): Functions deleted.
+ (mouse--remap-link-click-p): New function.
+ (mouse-drag-track): Handle dragging by using temporary Transient
+ Mark mode, instead of a special overlay.
+ (mouse-kill-ring-save, mouse-save-then-kill): Don't call
+ mouse-show-mark.
+
+ * mouse-sel.el (mouse-sel-selection-alist): mouse-drag-overlay
+ deleted.
+
+2010-07-02 Juri Linkov <juri@jurta.org>
+
+ * autoinsert.el (auto-insert-alist): Fix readability
+ by using dotted pair notation for lambda.
+
+2010-07-02 Juri Linkov <juri@jurta.org>
+
+ * faces.el (read-face-name): Rename arg `string-describing-default'
+ to `default'. Doc fix. Display the default value in quotes
+ in the prompt. With empty input, return the `default' arg,
+ unless the default value is a string (in which case return nil).
+ (describe-face): Replace the string `default' arg of `read-face-name'
+ with the symbol `default'.
+
+2010-07-02 Chong Yidong <cyd@stupidchicken.com>
+
+ * emulation/viper-cmd.el (viper-delete-backward-char)
+ (viper-del-backward-char-in-insert)
+ (viper-del-backward-char-in-replace, viper-change)
+ (viper-backward-indent): Replace delete-backward-char with
+ delete-char (Bug#6552).
+
+2010-07-01 Chong Yidong <cyd@stupidchicken.com>
+
+ * ruler-mode.el (ruler--save-header-line-format): Fix typos.
+
+2010-06-30 Chong Yidong <cyd@stupidchicken.com>
+
+ * frame.el (make-frame): Add default-frame-alist to the PARAMETERS
+ argument passed to frame-creation-function (Bug#5378).
+
+ * faces.el (x-handle-named-frame-geometry)
+ (x-handle-reverse-video, x-create-frame-with-faces)
+ (face-set-after-frame-default, tty-create-frame-with-faces):
+ Don't separately consult default-frame-alist. It is now passed as the
+ PARAMETER argument.
+
+2010-06-30 Andreas Schwab <schwab@linux-m68k.org>
+
+ * startup.el (command-line): Don't call tool-bar-setup in a
+ tty-only build.
+
+2010-06-30 Chong Yidong <cyd@stupidchicken.com>
+
+ * ruler-mode.el (ruler--save-header-line-format): New fun.
+ (ruler-mode): Use it as a setter function, so as not to overwrite
+ ruler-mode-header-line-format-old if Ruler mode is on (Bug#5370).
+
+2010-06-29 Chong Yidong <cyd@stupidchicken.com>
+
+ * vc/vc.el (vc-deduce-backend): New fun. Handle diff buffers.
+ (vc-root-diff, vc-print-root-log, vc-log-incoming)
+ (vc-log-outgoing): Use it.
+ (vc-diff-internal): Set diff-vc-backend.
+
+ * vc/diff-mode.el (diff-vc-backend): New var.
+
+2010-06-28 Jan Djärv <jan.h.d@swipnet.se>
+
+ * dynamic-setting.el (font-setting-change-default-font):
+ Remove call to message.
+
+2010-06-28 Kenichi Handa <handa@m17n.org>
+
+ * international/quail.el (quail-insert-kbd-layout): Fix the
+ showing of untranslated characters.
+
+2010-06-28 Chong Yidong <cyd@stupidchicken.com>
+
+ * simple.el (delete-active-region): New option.
+ (delete-backward-char): Implement in Lisp.
+ (delete-forward-char): New command.
+
+ * mouse.el (mouse-region-delete-keys): Deleted.
+ (mouse-show-mark): Simplify.
+
+ * bindings.el (global-map): Bind delete and DEL, the former to
+ delete-forward-char.
+
+2010-06-27 Lennart Borgman <lennart.borgman@gmail.com>
+
+ * progmodes/ruby-mode.el (ruby-mode-map): Don't bind TAB.
+ (ruby-mode): Bind indent-line-function (Bug#5119).
+
+2010-06-27 Chong Yidong <cyd@stupidchicken.com>
+
+ * startup.el (command-line): Recognize "0" X resource value.
+
+2010-06-27 Chong Yidong <cyd@stupidchicken.com>
+
+ * startup.el (command-line): Use X resources to set the value of
+ menu-bar-mode and tool-bar-mode, before calling frame-initialize.
+
+ * menu-bar.el (menu-bar-mode):
+ * tool-bar.el (tool-bar-mode): Don't change default-frame-alist.
+ Set init-value to t.
+
+ * frame.el (frame-notice-user-settings): Don't change
+ default-frame-alist based on menu-bar-mode and tool-bar-mode, or
+ vice versa (Bug#2249).
+
+2010-06-26 Eli Zaretskii <eliz@gnu.org>
+
+ * w32-fns.el (w32-convert-standard-filename): Doc fix.
+
+2010-06-25 Agustín Martín <agustin.martin@hispalinux.es>
+
+ * textmodes/flyspell.el (flyspell-check-previous-highlighted-word):
+ Make sure `flyspell-word' re-checks word after function run (Bug#6504).
+
+ * textmodes/ispell.el (ispell-init-process): Make sure ispell and
+ default directories are expanded (Bug#6143).
+
+2010-06-24 Juri Linkov <juri@jurta.org>
+
+ * minibuffer.el (completions-format): Change default from nil to
+ `horizontal'. Remove `nil' value from :type. Doc fix. (Bug#6459)
+
+2010-06-24 Juri Linkov <juri@jurta.org>
+
+ * vc/vc.el (vc-diff-internal): Set `revert-buffer-function'
+ buffer-locally to lambda that re-runs the vc diff command.
+ (Bug#6447)
+
+2010-06-24 Chong Yidong <cyd@stupidchicken.com>
+
+ * kmacro.el (kmacro-call-macro): Don't issue hint message if the
+ echo area is in use (Bug#3412).
+
+2010-06-22 Glenn Morris <rgm@gnu.org>
+
+ * textmodes/texinfmt.el (texinfo-format-region)
+ (texinfo-raise-lower-sections, texinfo-format-separate-node)
+ (texinfo-itemize-item, texinfo-multitable-item, texinfo-alias)
+ (texinfo-format-option, texinfo-noindent):
+ Use line-beginning-position and line-end-position.
+
+ * calc/calc-aent.el, calc/calc-ext.el, calc/calc-lang.el:
+ * calc/calc-store.el, calc/calc-units.el, calc/calc.el:
+ * calc/calccomp.el: Add explicit utf-8 coding cookies to files with
+ utf-8 characters.
+
+2010-06-21 Karl Fogel <kfogel@red-bean.com>
+
+ * play/zone.el (zone-fall-through-ws): Fix next-line ->
+ forward-line fallout.
+
+2010-07-06 Chong Yidong <cyd@stupidchicken.com>
+
+ * mouse.el (mouse-appearance-menu): Add docstring.
+
+ * help.el (describe-key): Print up-event using key-description.
+
+2010-07-03 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/zeroconf.el (zeroconf-resolve-service)
+ (zeroconf-service-resolver-handler): Use `dbus-byte-array-to-string'.
+ (zeroconf-publish-service): Use `dbus-string-to-byte-array'.
+
+2010-07-03 Jan Moringen <jan.moringen@uni-bielefeld.de>
+
+ * net/zeroconf.el (zeroconf-service-remove-hook): New defun.
+
+2010-06-30 Dan Nicolaescu <dann@ics.uci.edu>
+
+ Avoid displaying files with a nil state in vc-dir.
+ * vc/vc-dir.el (vc-dir-update): Obey the noinsert argument in all
+ cases that cause insertion.
+ (vc-dir-resynch-file): Tell vc-dir-update to avoid inserting files
+ with a nil state.
+
+2010-06-30 Chong Yidong <cyd@stupidchicken.com>
+
+ * xml.el (xml-parse-region): Avoid infloop (Bug#5281).
+
+2010-06-29 Leo <sdl.web@gmail.com>
+
+ * emacs-lisp/rx.el (rx): Doc fix. (Bug#6537)
+
+2010-06-27 Oleksandr Gavenko <gavenkoa@gmail.com> (tiny change)
+
+ * generic-x.el (bat-generic-mode): Fix regexp for command line
+ switches (Bug#5719).
+
+2010-06-27 Masatake YAMATO <yamato@redhat.com>
+
+ * htmlfontify.el (hfy-face-attr-for-class): Use append instead
+ of nconc to avoid pure storage error (Bug#6239).
+
+2010-06-27 Christoph <cschol2112@googlemail.com> (tiny change)
+
+ * bookmark.el (bookmark-bmenu-2-window, bookmark-bmenu-other-window)
+ (bookmark-bmenu-other-window-with-mouse): Remove unnecessary
+ bindings of bookmark-automatically-show-annotations (Bug#6515).
+
+2010-06-25 Eli Zaretskii <eliz@gnu.org>
+
+ * arc-mode.el (archive-zip-extract): Don't quote the file name on
+ MS-Windows and MS-DOS. (Bug#6467, Bug#6144)
+
+2010-06-24 Štěpán Němec <stepnem@gmail.com> (tiny change)
+
+ * comint.el (make-comint, make-comint-in-buffer): Mention return
+ value in the docstrings. (Bug#6498)
+
+2010-06-24 Yoni Rabkin <yoni@rabkins.net>
+
+ * bs.el (bs-mode-font-lock-keywords): Remove "by" from Dired pattern,
+ since it is not present when using some non-default switches.
+
+2010-06-23 Karl Fogel <kfogel@red-bean.com>
+
+ * simple.el (compose-mail): Fix doc string to refer to
+ `compose-mail-user-agent-warnings', instead of to the
+ nonexistent `compose-mail-check-user-agent'.
+
+2010-06-21 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ Fix an indentation bug:
+
+ * progmodes/cc-mode.el (c-common-init): Initialise c-new-BEG/END.
+ (c-neutralize-syntax-in-and-mark-CPP): c-new-BEG/END: Take account
+ of existing values.
+
+ * progmodes/cc-engine.el (c-clear-<-pair-props-if-match-after)
+ (c-clear->-pair-props-if-match-before): now return t when they've
+ cleared properties, nil otherwise.
+ (c-before-change-check-<>-operators): Set c-new-beg/end correctly
+ by taking account of the existing value.
+
+ * progmodes/cc-defs.el
+ (c-clear-char-property-with-value-function): Fix this to clear the
+ property rather than overwriting it with nil.
+
+2010-06-20 Chong Yidong <cyd@stupidchicken.com>
+
+ * emacs-lisp/package.el (package-print-package): Add link to
+ package description via describe-package.
+ (describe-package-1): List package requirements. Add button to
+ perform installation.
+ (package-menu-describe-package): New command.
+
+ * help-mode.el (help-package): New button type.
+
+2010-06-19 Chong Yidong <cyd@stupidchicken.com>
+
+ * emacs-lisp/package.el: Move package-list-packages binding to
+ menu-bar.el.
+ (describe-package, describe-package-1, package--dir): New funs.
+ (package-activate-1): Use package--dir.
+
+ * emacs-lisp/package-x.el (gnus-article-buffer): Require package.
+
+ * help-mode.el (help-package-def): New button type.
+
+ * menu-bar.el: Move package-list-packages binding here from
+ package.el.
+
+2010-06-19 Gustav Hållberg <gustav@gmail.com> (tiny change)
+
+ * descr-text.el (describe-char): Avoid trailing whitespace. (Bug#6423)
+
+2010-06-18 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/edebug.el (edebug-read-list):
+ Phase out old-style backquotes.
+
+2010-06-17 Juri Linkov <juri@jurta.org>
+
+ * help-mode.el (help-mode): Set buffer-local variable
+ revert-buffer-function to help-mode-revert-buffer.
+ (help-mode-revert-buffer): New function.
+
+ * info.el (Info-revert-find-node): Check for major-mode Info-mode
+ before popping to "*info*" (like in other Info functions).
+ Keep buffer-name in old-buffer-name. Keep Info-history-forward in
+ old-history-forward. Pop to old-buffer-name or "*info*" to
+ recreate the killed buffer. Set Info-history-forward from
+ old-history-forward.
+ (Info-breadcrumbs-depth): Add :group and :version.
+
+2010-06-17 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * emacs-lisp/package.el (package-menu-mode-map): Add a menu.
+
+2010-06-17 Agustín Martín <agustin.martin@hispalinux.es>
+
+ * textmodes/ispell.el (ispell-aspell-find-dictionary): Fix regexp
+ for languages like Portuguese with pt_{BR,PT} and no plain pt.
+
+2010-06-17 Juanma Barranquero <lekktu@gmail.com>
+
+ * emacs-lisp/package.el (package-menu-mode-map):
+ Move initialization into declaration.
+
+ * menu-bar.el (menu-bar-options-menu): Fix typo in menu entry.
+
+2010-06-17 Chong Yidong <cyd@stupidchicken.com>
+
+ * emacs-lisp/package.el (package-archive-base): Point to
+ elpa.gnu.org.
+ (package-enable, package-load-list): New defcustoms.
+ (package-user-dir, package-directory-list): Turn into defcustoms.
+ Don't include package-user-dir in package-directory-list.
+ (package--builtins-base): Don't include Emacs as a "package".
+ (package-subdirectory-regexp): New var.
+ (package-load-all-descriptors, package-compute-transaction)
+ (package-download-transaction): Obey package-load-list.
+ (package-activate-1): Rename from package-do-activate.
+ (package-list-packages-internal): Check package-load-list.
+ (package-load-descriptor, package-generate-autoloads)
+ (package-unpack, package-unpack-single)
+ (package--read-archive-file, package-delete):
+ Use expand-file-name.
+
+ * emacs-lisp/package-x.el: New file. Package uploading
+ functionality split out from package.el.
+
+ * startup.el (command-line): Load packages after reading init file.
+
+2010-06-17 Tom Tromey <tromey@redhat.com>
+
+ * emacs-lisp/package.el: New file.
+
+2010-06-22 Dan Nicolaescu <dann@ics.uci.edu>
+
+ Fix vc-annotate for renamed files when using Git.
+ * vc/vc-git.el (vc-git-find-revision): Deal with empty results from
+ ls-files. Doe not pass the object as a file name to cat-file, it
+ is not a file name.
+ (vc-git-annotate-command): Pass the file name using -- to avoid
+ ambiguity with the revision.
+ (vc-git-previous-revision): Pass a relative file name.
+
+2010-06-22 Glenn Morris <rgm@gnu.org>
+
+ * progmodes/js.el (js-mode-map): Use standard capitalization and
+ ellipses for menu entries.
+
+ * wid-edit.el (widget-complete): Doc fix.
+
+2010-06-22 Jürgen Hötzel <juergen@hoetzel.info> (tiny change)
+
+ * wid-edit.el (widget-complete): Fix typo in 2009-12-02 change.
+
+2010-06-22 Dan Nicolaescu <dann@ics.uci.edu>
+
+ Fix annotating other revisions for renamed files in vc-annotate.
+ * vc/vc-annotate.el (vc-annotate): Add an optional argument for the
+ VC backend. Use it when non-nil.
+ (vc-annotate-warp-revision): Pass the VC backend to vc-annotate.
+ (Bug#6487).
+
+ Fix vc-annotate-show-changeset-diff-revision-at-line for git.
+ * vc/vc-annotate.el (vc-annotate-show-diff-revision-at-line-internal):
+ Do not pass the file name to the 'previous-revision call when we
+ don't want a file diff. (Bug#6489)
+
+2010-06-21 Dan Nicolaescu <dann@ics.uci.edu>
+
+ Fix finding revisions for renamed files in vc-annotate.
+ * vc/vc.el (vc-find-revision): Add an optional argument for
+ the VC backend. Use it when non-nil.
+ * vc/vc-annotate.el (vc-annotate-find-revision-at-line): Pass the VC
+ backend to vc-find-revision. (Bug#6487)
+
+2010-06-21 Dan Nicolaescu <dann@ics.uci.edu>
+
+ Fix reading file names in Git annotate buffers.
+ * vc/vc-git.el (vc-git-annotate-extract-revision-at-line):
+ Remove trailing whitespace. Suggested by Eric Hanchrow. (Bug#6481)
+
+2010-06-20 Alan Mackenzie <acm@muc.de>
+
+ * progmodes/cc-mode.el (c-before-hack-hook): When the mode is set
+ in file local variables, set it first.
+
+2010-06-19 Glenn Morris <rgm@gnu.org>
+
+ * descr-text.el (describe-char-unicode-data): Insert separating
+ space when needed. (Bug#6422)
+
+ * progmodes/idlwave.el (idlwave-action-and-binding):
+ Fix typo in 2009-12-03 change. (Bug#6450)
+
+2010-06-17 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/macroexp.el (macroexpand-all-1): Put back special
+ handling for `lambda' (misunderstanding).
+
+2010-06-16 Jay Belanger <jay.p.belanger@gmail.com>
+
+ * calc/calc-poly.el (math-accum-factors): Make sure that
+ constants aren't distributed after they are factored out.
+
+2010-06-16 Juri Linkov <juri@jurta.org>
+
+ * facemenu.el (list-colors-display): Call `pop-to-buffer' before
+ `list-colors-print'. (Bug#6332)
+
+ * subr.el (read-quoted-char): Fix up last change (bug#6290).
+
+2010-06-16 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/macroexp.el (macroexpand-all-1): Don't handle `lambda'
+ specially, since it's a macro. Fix up wrong hint passed to maybe-cons.
+
+ * font-lock.el (font-lock-major-mode): Rename from
+ font-lock-mode-major-mode to distinguish it from
+ global-font-lock-mode's own font-lock-mode-major-mode (bug#6135).
+ (font-lock-set-defaults):
+ * font-core.el (font-lock-default-function): Adjust users.
+ (font-lock-mode): Don't set it at all.
+
+2010-06-16 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * vc/vc-annotate.el (vc-annotate): Use vc-read-revision.
+
+2010-06-16 Glenn Morris <rgm@gnu.org>
+
+ * calendar/appt.el (appt-time-msg-list): Doc fix.
+ (appt-check): Let-bind appt-warn-time.
+ (appt-add): Make the 3rd argument optional.
+ Simplify argument names. Doc fix. Check for integer WARNTIME.
+ Only add WARNTIME to the output list if non-nil.
+
+2010-06-16 Ivan Kanis <apple@kanis.eu>
+
+ * calendar/appt.el (appt-check): Let the 3rd element of
+ appt-time-msg-list specify the warning time.
+ (appt-add): Add new argument with the warning time. (Bug#5176)
+
+2010-06-16 Bob Rogers <rogers-emacs@rgrjr.dyndns.org>
+
+ * vc/vc-svn.el (vc-svn-after-dir-status): Fix regexp for Subversions
+ older than version 1.6. (Bug#6361)
+
+2010-06-16 Helmut Eller <eller.helmut@gmail.com>
+
+ * emacs-lisp/cl-macs.el (destructuring-bind): Bind `bind-enquote',
+ used by cl-do-arglist. (Bug#6408)
+
+2010-06-16 Agustín Martín <agustin.martin@hispalinux.es>
+
+ * textmodes/ispell.el (ispell-dictionary-base-alist):
+ Fix portuguese casechars/not-casechars for missing 'çÇ'.
+ Suggested by Rolando Pereira (bug#6434).
+
+2010-06-15 Juanma Barranquero <lekktu@gmail.com>
+
+ * facemenu.el (list-colors-sort): Doc fix.
+
+2010-06-15 Bob Rogers <rogers-emacs@rgrjr.dyndns.org>
+
+ * progmodes/sql.el (sql-connect-mysql): Fix typo.
+
+2010-06-14 Juri Linkov <juri@jurta.org>
+
+ Add sort option `list-colors-sort'. (Bug#6332)
+ * facemenu.el (color-rgb-to-hsv): New function.
+ (list-colors-sort): New defcustom.
+ (list-colors-sort-key): New function.
+ (list-colors-display): Doc fix. Sort list according to the option
+ `list-colors-sort'.
+ (list-colors-print): Add HSV values to `help-echo' property of
+ RGB strings.
+
+2010-06-14 Juri Linkov <juri@jurta.org>
+
+ * compare-w.el: Move to the "vc" subdirectory.
+
+2010-06-14 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * image-mode.el (image-mode-map): Remap left-char and right-char.
+
+ * nxml/nxml-mode.el (nxml-indent-line): Standardize indent behavior.
+
+2010-06-12 Chong Yidong <cyd@stupidchicken.com>
+
+ * term/common-win.el (x-colors): Add all the color names defined
+ in rgb.txt (Bug#6332).
+
+ * facemenu.el (list-colors-print): Don't print extra names if it
+ will overflow the window width.
+
+ * vc/log-edit.el (log-edit-font-lock-keywords): Revert 2010-06-02
+ change (Bug#6343).
+
+2010-06-12 Eli Zaretskii <eliz@gnu.org>
+
+ * files.el (make-directory): Doc fix (bug#6396).
+
+2010-06-12 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-remote-process-environment): Protect version
+ string by apostroph.
+ (tramp-shell-prompt-pattern): Do not use a shy group in case of
+ XEmacs.
+ (tramp-file-name-for-operation): Add `call-process-region'.
(tramp-set-process-query-on-exit-flag): Fix wrong parentheses.
- (tramp-handle-process-file): Call the program in a subshell, in
- order to preserve working directory.
- (tramp-handle-shell-command): Don't use hard-wired "/bin/sh" but
- `tramp-remote-sh' from `tramp-methods'.
- (tramp-get-ls-command): Make test for "--color=never" stronger.
- (tramp-check-for-regexp): Use (forward-line 1).
- * net/trampver.el: Update release number.
+ * net/tramp-compat.el (top): Do not autoload
+ `tramp-handle-file-remote-p'. Load tramp-util.el and tramp-vc.el
+ only when `start-file-process' is not bound.
+ (tramp-advice-file-expand-wildcards): Do not use
+ `tramp-handle-file-remote-p'.
+ (tramp-compat-make-temp-file): Handle the case, that
+ `make-temp-file' has no third argument EXTENSION.
+
+2010-06-11 Juanma Barranquero <lekktu@gmail.com>
+
+ * makefile.w32-in (WINS_BASIC): Include new directory vc.
+
+ * loadup.el ("vc-hooks", "ediff-hook"): Load from lisp/vc/.
+
+2010-06-11 Juri Linkov <juri@jurta.org>
+
+ * finder.el (finder-known-keywords): Add keyword "vc"
+ for version control.
+
+ * add-log.el, cvs-status.el, diff.el, diff-mode.el, ediff.el,
+ * emerge.el, log-edit.el, log-view.el, pcvs.el, smerge-mode.el,
+ * vc-annotate.el, vc-bzr.el, vc-dir.el, vc-dispatcher.el, vc-git.el,
+ * vc-hg.el, vc-mtn.el, vc.el: Add keyword "vc".
+
+2010-06-11 Juri Linkov <juri@jurta.org>
+
+ Move version control related files to the "vc" subdirectory.
+ * add-log.el, cvs-status.el, diff.el, diff-mode.el, ediff-diff.el,
+ * ediff.el, ediff-help.el, ediff-hook.el, ediff-init.el,
+ * ediff-merg.el, ediff-mult.el, ediff-ptch.el, ediff-util.el,
+ * ediff-vers.el, ediff-wind.el, emerge.el, log-edit.el, log-view.el,
+ * pcvs-defs.el, pcvs.el, pcvs-info.el, pcvs-parse.el, pcvs-util.el,
+ * smerge-mode.el, vc-annotate.el, vc-arch.el, vc-bzr.el, vc-cvs.el,
+ * vc-dav.el, vc-dir.el, vc-dispatcher.el, vc.el, vc-git.el,
+ * vc-hg.el, vc-hooks.el, vc-mtn.el, vc-rcs.el, vc-sccs.el, vc-svn.el:
+ Move files to the "vc" subdirectory.
+
+2010-06-11 Chong Yidong <cyd@stupidchicken.com>
+
+ * comint.el (comint-password-prompt-regexp): Fix 2010-04-10 change
+ (Bug#6367).
+
+2010-06-11 Stephen Eglen <stephen@gnu.org>
+
+ * shell.el: Bind `shell-resync-dirs' to M-RET.
+
+2010-06-10 Michael Albinus <michael.albinus@gmx.de>
+
+ * notifications.el: Move file from lisp/net, because it is
+ supposed to talk locally to the user.
+
+2010-06-10 Julien Danjou <julien@danjou.info>
+
+ * net/notifications.el (notifications-on-action-signal)
+ (notifications-on-closed-signal): Pass notification id as first
+ argument to the callback functions. Add docstrings.
+ (notifications-notify): Fix docstring.
+
+2010-06-10 Glenn Morris <rgm@gnu.org>
+
+ * emacs-lisp/authors.el (authors-ignored-files)
+ (authors-valid-file-names): Add some files.
+
+2010-06-10 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * net/rcirc.el (rcirc-server-alist, rcirc, rcirc-connect): Resolve
+ merge conflict, giving preference to the emacs-23 version of the code.
+
+2010-06-09 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/advice.el (ad-compile-function):
+ Define warning-suppress-types before we let-bind it (bug#6275).
+
+ * vc-dispatcher.el: Rename mode-line-hook to vc-mode-line-hook;
+ declare it, make it buffer-local and permanent-local (bug#6324).
+ (vc-resynch-window): Adjust name.
+ * vc-hooks.el (vc-find-file-hook): Adjust name.
+
+2010-06-09 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/notifications.el (notifications-notify): Fix docstring.
+
+2010-06-09 Juanma Barranquero <lekktu@gmail.com>
+
+ Update to Unicode 6.0.0 beta.
+ * international/charprop.el: Update copyright.
+ * international/mule-cmds.el (ucs-names): Update character ranges.
+ * international/uni-bidi.el:
+ * international/uni-category.el:
+ * international/uni-combining.el:
+ * international/uni-comment.el:
+ * international/uni-decimal.el:
+ * international/uni-decomposition.el:
+ * international/uni-digit.el:
+ * international/uni-lowercase.el:
+ * international/uni-mirrored.el:
+ * international/uni-name.el:
+ * international/uni-numeric.el:
+ * international/uni-old-name.el:
+ * international/uni-titlecase.el:
+ * international/uni-uppercase.el: Regenerate.
+
+2010-06-09 Juanma Barranquero <lekktu@gmail.com>
+
+ * emacs-lisp/smie.el (comment-string-strip): Declare function.
+ (smie-precs-precedence-table): Fix typo in docstring.
+
+ * vc-mtn.el (log-edit-extract-headers): Declare function.
+
+ * vc-hg.el (log-edit-extract-headers): Remove duplicate declaration.
+
+ * net/notifications.el (dbus-register-signal): Declare function.
+ (notifications-notify): Fix typos and reflow docstring.
+
+2010-06-09 Dan Nicolaescu <dann@ics.uci.edu>
+
+ Improve VC create/retrieve tag/branch.
+ * vc.el (vc-create-tag): Do not read the directory name for VCs
+ with repository revision granularity. Adjust the tag/branch
+ prompt. Reset VC properties.
+ (vc-retrieve-tag): Do not read the directory name for VCs
+ with repository revision granularity. Reset VC properties.
+
+2010-06-09 Julien Danjou <julien@danjou.info>
+
+ * net/notifications.el: New file.
+
+2010-06-09 Dan Nicolaescu <dann@ics.uci.edu>
+
+ Add optional support for resetting VC properties.
+ * vc-dispatcher.el (vc-resynch-window): Add new optional argument,
+ call vc-file-clearprops when true.
+ (vc-resynch-buffer): Add new optional argument, pass it down.
+ (vc-resynch-buffers-in-directory): Likewise.
+
+ Improve support for special markup in the VC commit message.
+ * vc-mtn.el (vc-mtn-checkin): Add support for Author: and Date: markup.
+ * vc-hg.el (vc-hg-checkin): Add support for Date:.
+ * vc-git.el (vc-git-checkin):
+ * vc-bzr.el (vc-bzr-checkin): Likewise.
+
+2010-06-09 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/smie.el (smie-indent-keyword): Remove special case that
+ can be handled with a ((:before "fn") (:prev "=>" parent)) rule.
+
+2010-06-07 Martin Pohlack <mp26@os.inf.tu-dresden.de>
+
+ * iimage.el: Remove images as soon as the underlying text is modified.
+ (iimage-modification-hook): New function.
+ (iimage-mode-buffer): Use it.
+
+2010-06-07 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/smie.el (smie-indent-offset-rule): Rename from
+ smie-indent-offset-after. Add :prev case. Make a bit more generic.
+ (smie-indent-virtual): Remove `virtual' arg. Update callers.
+ (smie-indent-keyword): Add handling of open-paren keywords.
+ (smie-indent-comment-continue): Don't assume comment-continue.
+
+2010-06-07 Martin Rudalics <rudalics@gmx.at>
+
+ * window.el (pop-to-buffer): Remove the conditional that
+ compares new-window and old-window, so it will reselect
+ the selected window unconditionally.
+ http://lists.gnu.org/archive/html/emacs-devel/2010-06/msg00078.html
+
+2010-06-07 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/smie.el (smie-indent-offset-after)
+ (smie-indent-forward-token, smie-indent-backward-token): New functions.
+ (smie-indent-after-keyword): Use them.
+ (smie-indent-fixindent): Only applies to the indentation of the BOL.
+ (smie-indent-keyword): Tweak the black magic.
+ (smie-indent-comment-continue): Strip comment-continue before use.
+ (smie-indent-functions): Indent comments before keywords.
+
+2010-06-06 Juri Linkov <juri@jurta.org>
+
+ * isearch.el (isearch-lazy-highlight-search): Fix looping
+ by checking for empty match. This syncs this loop with the
+ similar loop in `isearch-search'. (Bug#6362)
+
+2010-06-05 Juanma Barranquero <lekktu@gmail.com>
+
+ * net/dbus.el (dbus-register-method): Declare function.
+ (dbus-handle-event, dbus-property-handler): Fix typos in docstrings.
+ (dbus-introspect): Doc fix.
+ (dbus-event-bus-name, dbus-introspect-get-interface)
+ (dbus-introspect-get-argument): Reflow docstrings.
+
+2010-06-05 Dan Nicolaescu <dann@ics.uci.edu>
+
+ vc-log-incoming/vc-log-outgoing fixes for Git.
+ * vc-git.el (vc-git-log-view-mode): Fix font lock for
+ incoming/outgoing logs.
+ (vc-git-log-outgoing, vc-git-log-incoming): Use @{upstream}
+ instead of vc-git-compute-remote.
+ (vc-git-compute-remote): Remove.
+
+2010-06-04 Chong Yidong <cyd@stupidchicken.com>
+
+ * term/common-win.el (x-colors): Add "dark green" and "dark
+ turquoise" (Bug#6332).
+
+2010-06-04 Juri Linkov <juri@jurta.org>
+
+ * simple.el (kill-new): Fix logic of kill-do-not-save-duplicates.
+ Instead of setting `replace' to t and replacing the same string
+ with itself, don't do certain actions when
+ kill-do-not-save-duplicates is non-nil and string is equal to car
+ of kill-ring: don't call menu-bar-update-yank-menu, don't push
+ interprogram-paste strings to kill-ring, and don't push the input
+ argument `string' to kill-ring.
+ http://lists.gnu.org/archive/html/emacs-devel/2010-06/msg00072.html
+
+2010-06-04 Juanma Barranquero <lekktu@gmail.com>
+
+ * subr.el (directory-sep-char): Move from fileio.c and make a defconst.
+
+2010-06-04 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp-gvfs.el (tramp-gvfs-handle-expand-file-name): Expand "~/".
+ (tramp-gvfs-handler-mounted-unmounted)
+ (tramp-gvfs-connection-mounted-p): Handle default-location.
+
+ * net/tramp-smb.el (tramp-smb-handle-delete-directory): Don't try to
+ move files to trash.
+
+2010-06-04 Juanma Barranquero <lekktu@gmail.com>
+
+ * international/mule-cmds.el (nonascii-insert-offset)
+ (nonascii-translation-table): Add obsolescence information.
+
+ * international/mule.el (make-translation-table-from-vector): Doc fix.
+
+2010-06-03 Glenn Morris <rgm@gnu.org>
+
+ * desktop.el (desktop-clear-preserve-buffers):
+ Add "*Warnings*" buffer. (Bug#6336)
+
+2010-06-03 Dan Nicolaescu <dann@ics.uci.edu>
+
+ vc-log-incoming/vc-log-outgoing improvements for Git.
+ * vc-git.el (vc-git-log-outgoing): Use the same format as the
+ short log.
+ (vc-git-log-incoming): Likewise. Run "git fetch" before the log command.
+
+ Add bindings for vc-log-incoming and vc-log-outgoing.
+ * vc-hooks.el (vc-prefix-map): Add bindings for vc-log-incoming
+ and vc-log-outgoing.
+ * vc-dir.el (vc-dir-menu-map): Add menu bindings for vc-log-incoming
+ and vc-log-outgoing.
+
+2010-06-03 Chong Yidong <cyd@stupidchicken.com>
+
+ * net/rcirc.el (rcirc-sort-nicknames): Remove.
+ (rcirc-handler-366): Always sort nicknames.
+
+2010-06-03 Juanma Barranquero <lekktu@gmail.com>
+
+ * emacs-lisp/smie.el (comment-continue): Declare for byte-compiler.
+
+2010-06-03 Chong Yidong <cyd@stupidchicken.com>
+
+ * net/rcirc.el (rcirc-nickname<, rcirc-sort-nicknames-join): Doc fix.
+
+2010-06-03 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * net/rcirc.el (rcirc-sort-nicknames): Change default.
+ (rcirc-sort-nicknames-join): Avoid setq.
+
+2010-06-03 Deniz Dogan <deniz.a.m.dogan@gmail.com>
+
+ * net/rcirc.el (rcirc-sort-nicknames): New custom.
+ (rcirc-nickname<, rcirc-sort-nicknames-join): New funs.
+ (rcirc-handler-366): Use them.
+
+2010-06-03 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ Split smie-indent-calculate into more manageable chunks.
+ * emacs-lisp/smie.el (smie-indent-virtual, smie-indent-fixindent)
+ (smie-indent-comment, smie-indent-after-keyword, smie-indent-keyword)
+ (smie-indent-close, smie-indent-comment-continue, smie-indent-bob)
+ (smie-indent-exps): Extract from smie-indent-calculate.
+ (smie-indent-functions): New var.
+ (smie-indent-functions): Use them.
+
+2010-06-02 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/smie.el (smie-indent-hanging-p): Use smie-bolp.
+ (smie-indent-calculate): Simplify and cleanup.
+
+2010-06-02 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp-gvfs.el (top): Require url-util.
+ (tramp-gvfs-mount-point): Remove.
+ (tramp-gvfs-stringify-dbus-message, tramp-gvfs-send-command):
+ New defuns.
+ (with-tramp-dbus-call-method): Format trace message.
+ (tramp-gvfs-handle-copy-file, tramp-gvfs-handle-rename-file):
+ Implement backup call, when operation on local files fails.
+ Use progress reporter. Flush properties of changed files.
+ (tramp-gvfs-handle-make-directory): Make more traces.
+ (tramp-gvfs-url-file-name): Hexify file name in url.
+ (tramp-gvfs-fuse-file-name): Take also prefix (like dav shares)
+ into account for the resulting file name.
+ (tramp-gvfs-handler-askquestion): Return dummy mountpoint, when
+ the answer is "no". See `tramp-gvfs-maybe-open-connection'.
+ (tramp-gvfs-handler-mounted-unmounted)
+ (tramp-gvfs-connection-mounted-p): Test also for new mountspec
+ attribute "default_location". Set "prefix" property.
+ (tramp-gvfs-mount-spec): Return both prefix and mountspec.
+ (tramp-gvfs-maybe-open-connection): Test, whether mountpoint
+ exists. Raise an error, if not (due to a corresponding answer
+ "no" in interactive questions, for example).
+
+2010-06-02 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * log-edit.el (log-edit-font-lock-keywords): Make group 4 match lax.
+
+2010-06-01 Juanma Barranquero <lekktu@gmail.com>
+
+ * emacs-lisp/eldoc.el: Add completions for new commands left-* and
+ right-*. (Bug#6265)
+
+2010-06-01 Dan Nicolaescu <dann@ics.uci.edu>
+
+ Add support for vc-log-incoming, improve vc-log-outgoing for Git.
+ * vc-git.el (vc-git-compute-remote): New function.
+ (vc-git-log-outgoing): Use it instead of hard coding a value.
+ (vc-git-log-incoming): New function.
+
+ Improve state updating for VC tag commands.
+ * vc.el (vc-create-tag, vc-retrieve-tag): Call vc-resynch-buffer
+ to update the state of all buffers in the directory.
+
+ * vc-dir.el (vc-dir-update): Remove entries with a nil state (bug#5539).
+
+2010-06-01 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * vc-bzr.el (vc-bzr-revision-completion-table): Apply
+ `file-directory-p' to the filename part rather than to the whole text.
+
+2010-05-31 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * man.el (Man-completion-table): Let the user type "-k " (bug#6319).
+
+2010-05-31 Drew Adams <drew.adams@oracle.com>
+
+ * files.el (directory-files-no-dot-files-regexp): Doc fix (bug#6298).
+
+2010-05-31 Juanma Barranquero <lekktu@gmail.com>
+
+ * subr.el (momentary-string-display): Just use read-event to read
+ the exit event (Bug#6238).
+
+2010-05-30 Eli Zaretskii <eliz@gnu.org>
+
+ * international/mule.el (define-coding-system): Doc fix (bug#6313).
+
+2010-05-30 Juanma Barranquero <lekktu@gmail.com>
+
+ * emulation/cua-base.el: Recognize also `right-word' and `left-word'.
+ Suggested by Eli Zaretskii <eliz@gnu.org>.
+
+2010-05-30 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * minibuffer.el (completion-file-name-table): Don't return a boundary
+ past the end of `string' (bug#6299).
+ (completion--file-name-table): Delegate to completion-file-name-table
+ for the `boundaries' case.
+
+2010-05-30 Juanma Barranquero <lekktu@gmail.com>
+
+ * emulation/cua-base.el: Recognize `right-char' and `left-char' as
+ movement commands.
+
+ * progmodes/ada-xref.el (ada-prj-ada-project-path-sep): Set from
+ `path-separator', but maintain compatibility with Emacs 20.2.
+
+2010-05-29 Chong Yidong <cyd@stupidchicken.com>
+
+ * server.el (server-process-filter): Receive parent-id argument
+ from emacsclient.
+ (server-create-window-system-frame): New arg. Pass parent-id as
+ frame parameter.
+
+2010-05-29 Eli Zaretskii <eliz@gnu.org>
+
+ Bidi-sensitive word movement with arrow keys.
+ * subr.el (right-arrow-command, left-arrow-command): Move to
+ bindings.el.
+
+ * bindings.el (right-char, left-char): Move from subr.el and
+ rename from right-arrow-command and left-arrow-command.
+ (right-word, left-word): New functions.
+ (global-map) <right>: Bind to right-char.
+ (global-map) <left>: Bind to left-char.
+ (global-map) <C-right>: Bind to right-word.
+ (global-map) <C-left>: Bind to left-word.
+
+ * ls-lisp.el (ls-lisp-classify-file): New function.
+ (ls-lisp-insert-directory): Call it if switches include -F (bug#6294).
+ (ls-lisp-classify): Call ls-lisp-classify-file.
+ (insert-directory): Remove blanks from switches.
+
+2010-05-29 Chong Yidong <cyd@stupidchicken.com>
+
+ * ansi-color.el: Delete unused escape sequences (Bug#6085).
+ (ansi-color-drop-regexp): New constant.
+ (ansi-color-apply, ansi-color-filter-region)
+ (ansi-color-apply-on-region): Delete unrecognized control sequences.
+ (ansi-color-apply): Build string list before calling concat.
+
+2010-05-28 Juri Linkov <juri@jurta.org>
+
+ * image-dired.el (image-dired-dired-toggle-marked-thumbs):
+ Replace LOCALP arg of `dired-get-filename' 'no-dir with nil.
+ (Bug#5270)
+
+2010-05-28 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-debug-message): Add `tramp-compat-funcall'
+ to ignored backtrace functions.
+ (with-progress-reporter): Expand docstring.
+ (tramp-handle-delete-file): Implement TRASH argument.
+ (tramp-get-remote-trash): New defun.
+
+2010-05-28 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp-compat.el (tramp-compat-delete-file):
+ Use `symbol-value' for backward compatibility.
+
+ * net/tramp.el (tramp-handle-make-symbolic-link)
+ (tramp-handle-load)
+ (tramp-do-copy-or-rename-file-via-buffer)
+ (tramp-do-copy-or-rename-file-directly)
+ (tramp-do-copy-or-rename-file-out-of-band)
+ (tramp-handle-process-file, tramp-handle-call-process-region)
+ (tramp-handle-shell-command, tramp-handle-file-local-copy)
+ (tramp-handle-insert-file-contents, tramp-handle-write-region)
+ (tramp-delete-temp-file-function): Use `delete-file' instead
+ of `tramp-compat-delete-file'.
+
+ * net/tramp-fish.el (tramp-fish-handle-delete-directory)
+ (tramp-fish-handle-make-symbolic-link)
+ (tramp-fish-handle-process-file): Use `delete-file' instead
+ of `tramp-compat-delete-file'.
+
+ * net/tramp-ftp.el (tramp-ftp-file-name-handler):
+ Use `delete-file' instead of `tramp-compat-delete-file'.
+
+ * net/tramp-gvfs.el (tramp-gvfs-handle-delete-file): Rename arg.
+ (tramp-gvfs-handle-write-region): Use `delete-file' instead of
+ `tramp-compat-delete-file'.
+
+ * net/tramp-imap.el (tramp-imap-do-copy-or-rename-file):
+ Use `delete-file' instead of `tramp-compat-delete-file'.
+
+ * net/tramp-smb.el (tramp-smb-handle-copy-file)
+ (tramp-smb-handle-file-local-copy, tramp-smb-handle-rename-file)
+ (tramp-smb-handle-write-region): Use `delete-file' instead of
+ `tramp-compat-delete-file'.
+ (tramp-smb-handle-delete-directory): Use 'trash as arg.
+
+2010-05-27 Chong Yidong <cyd@stupidchicken.com>
+
+ * dired.el (dired-delete-file): New arg TRASH.
+ (dired-internal-do-deletions): New arg TRASH. Use progress reporter.
+ (dired-do-flagged-delete, dired-do-delete): Use trash.
+
+ * speedbar.el (speedbar-item-delete): Allow trashing.
+
+ * files.el (delete-directory): New arg TRASH.
+
+ * net/ange-ftp.el (ange-ftp-del-tmp-name, ange-ftp-delete-file)
+ (ange-ftp-rename-remote-to-remote)
+ (ange-ftp-rename-local-to-remote)
+ (ange-ftp-rename-remote-to-local, ange-ftp-load)
+ (ange-ftp-compress, ange-ftp-uncompress): Remove optional arg from
+ `delete-file'.
+ (ange-ftp-delete-directory): Add optional arg to `delete-file', to
+ allow trashing.
+
+ * net/tramp-compat.el (tramp-compat-delete-file): Rewrite to
+ handle new TRASH arg of `delete-file'.
+
+ * net/tramp.el (tramp-handle-delete-file): Change FORCE arg to TRASH.
+ (tramp-handle-make-symbolic-link, tramp-handle-load)
+ (tramp-do-copy-or-rename-file-via-buffer)
+ (tramp-do-copy-or-rename-file-directly)
+ (tramp-do-copy-or-rename-file-out-of-band)
+ (tramp-handle-process-file, tramp-handle-call-process-region)
+ (tramp-handle-shell-command, tramp-handle-file-local-copy)
+ (tramp-handle-insert-file-contents, tramp-handle-write-region)
+ (tramp-delete-temp-file-function): Use null TRASH arg in
+ tramp-compat-delete-file call.
+
+ * net/tramp-fish.el (tramp-fish-handle-delete-directory)
+ (tramp-fish-handle-delete-file)
+ (tramp-fish-handle-make-symbolic-link)
+ (tramp-fish-handle-process-file): Use null TRASH arg in
+ `tramp-compat-delete-file' call.
+
+ * net/tramp-ftp.el (tramp-ftp-file-name-handler): Use null TRASH
+ arg in `tramp-compat-delete-file' call.
+
+ * net/tramp-gvfs.el (tramp-gvfs-handle-delete-file): Rename arg.
+ (tramp-gvfs-handle-write-region): Use null TRASH arg in
+ `tramp-compat-delete-file' call.
+
+ * net/tramp-imap.el (tramp-imap-handle-delete-file): Rename arg.
+ (tramp-imap-do-copy-or-rename-file): Use null TRASH arg in
+ `tramp-compat-delete-file' call.
+
+ * net/tramp-smb.el (tramp-smb-handle-copy-file)
+ (tramp-smb-handle-file-local-copy, tramp-smb-handle-rename-file)
+ (tramp-smb-handle-write-region): Use null TRASH arg in
+ tramp-compat-delete-file call.
+ (tramp-smb-handle-delete-directory): Use tramp-compat-delete-file.
+ (tramp-smb-handle-delete-file): Rename arg.
+
+ * diff.el (diff-sentinel):
+ * epg.el (epg--make-temp-file, epg-decrypt-string)
+ (epg-verify-string, epg-sign-string, epg-encrypt-string):
+ * jka-compr.el (jka-compr-partial-uncompress)
+ (jka-compr-call-process, jka-compr-write-region):
+ * server.el (server-sentinel): Remove optional arg from
+ delete-file, reverting 2010-05-03 change.
+
+2010-05-27 Chong Yidong <cyd@stupidchicken.com>
+
+ * progmodes/verilog-mode.el (verilog-type-font-keywords):
+ Use font-lock-constant-face, not obsolete font-lock-reference-face.
+
+2010-05-27 Kenichi Handa <handa@m17n.org>
+
+ * language/hebrew.el (hebrew-shape-gstring): Check if a glyph
+ element of GSTRING is nil.
+
+2010-05-27 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/smie.el (smie-forward-token-function)
+ (smie-backward-token-function): New vars.
+ (smie-backward-sexp, smie-forward-sexp)
+ (smie-indent-hanging-p, smie-indent-calculate): Use them.
+ (smie-default-backward-token): Rename from smie-backward-token and
+ skip comments.
+ (smie-default-forward-token): Rename from smie-forward-token and
+ skip comments.
+ (smie-next-sexp): Handle nil results from next-token.
+ (smie-indent-calculate): Add a new case for special `fixindent' comments.
+
+2010-05-27 Chong Yidong <cyd@stupidchicken.com>
+
+ * progmodes/verilog-mode.el (verilog-type-font-keywords):
+ Use font-lock-constant-face, not obsolete font-lock-reference-face.
+
+2010-05-27 Masatake YAMATO <yamato@redhat.com>
+
+ * htmlfontify.el (hfy-face-resolve-face): New function.
+ (hfy-face-to-style): Use it (Bug#6279).
+
+2010-05-26 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/ada-xref.el (ada-gnat-parse-gpr):
+ * emulation/edt.el (edt-load-keys): Avoid (expand-file-name ".").
+
+2010-05-26 Glenn Morris <rgm@gnu.org>
+
+ * emulation/edt.el (edt-load-keys): Use locate-library.
+
+2010-05-25 Chong Yidong <cyd@stupidchicken.com>
+
+ * log-edit.el (log-edit-strip-single-file-name): Default to nil.
+ (log-edit-changelog-entries): Doc fix.
+ (log-edit-changelog-insert-entries): Args changed.
+ Rename relative filenames in ChangeLog entries. Delete tabs.
+ (log-edit-insert-changelog-entries): Reorganize return value of
+ `log-edit-changelog-entries' to pass filenames to
+ log-edit-changelog-insert-entries.
+
+2010-05-25 Thierry Volpiatto <thierry.volpiatto@gmail.com>
+
+ * dired.el (dired-mode-map): Rebind "\C-t\C-t" from
+ `image-dired-dired-insert-marked-thumbs' to
+ `image-dired-dired-toggle-marked-thumbs'.
+
+ * image-dired.el: Require cl when compiling.
+ (image-dired-dired-toggle-marked-thumbs): Rename from
+ `image-dired-dired-insert-marked-thumbs'. Add ARG. Doc fix.
+ Use interactive spec "P". Set LOCALP arg of `dired-get-filename'
+ to 'no-dir. Skip files whose names don't match
+ `image-file-name-regexp'. When file has a thumbnail overlay,
+ delete it. (Bug#5270)
+
+2010-05-25 Juri Linkov <juri@jurta.org>
+
+ * image-mode.el (image-mode): Add image-after-revert-hook to
+ after-revert-hook.
+ (image-after-revert-hook): New function. (Bug#5669)
+
+2010-05-25 Juri Linkov <juri@jurta.org>
+
+ * image.el (image-animated-p): When delay between animated images
+ is 0, set it to 10 (0.1 sec). (Bug#6258)
+
+2010-05-25 Christian Lynbech <christian.lynbech@tieto.com> (tiny change)
+
+ * net/tramp.el (tramp-handle-insert-directory): Don't use
+ `forward-word', its default syntax could be changed.
+
+2010-05-25 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-progress-reporter-update): New defun.
+ (with-progress-reporter): Use it.
+ (tramp-process-actions):
+ * net/tramp-gvfs.el (tramp-gvfs-handler-askquestion):
+ Preserve current message, in order to let progress reporter continue
+ afterwards. (Bug#6257)
+
+2010-05-25 Glenn Morris <rgm@gnu.org>
+
+ * net/rcirc.el (rcirc-default-user-name, rcirc-default-full-name):
+ Add :version.
+
+2010-05-25 Ryan Yeske <rcyeske@gmail.com>
+
+ * net/rcirc.el (rcirc-default-user-name): Change to "user".
+ (rcirc-default-full-name): Change to "unknown".
+ (rcirc-user-name-history): Add variable.
+
+2010-05-25 Ryan Yeske <rcyeske@gmail.com>
+ Jonathan Rockway <jon@jrock.us>
+
+ * net/rcirc.el (rcirc-server-alist): Add :pass.
+ (rcirc): When prompting for connection parameters, also prompt for
+ username and password.
+ (rcirc-connect): Take a PASS argument. If PASS is non-nil, send
+ value to server when connecting.
+
+2010-05-25 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/smie.el (smie-set-prec2tab): Check override before use.
+ (smie-merge-prec2s): Pass the tables as separate args.
+ (smie-bnf-precedence-table): Adjust call accordingly.
+ (smie-prec2-levels): Set levels at the end.
+
+ Replace Lisp calls to delete-backward-char by delete-char.
+ * bs.el, expand.el, ido.el, image-dired.el, lpr.el, pcomplete.el,
+ * skeleton.el, term.el, time.el, wid-edit.el, woman.el,
+ * calc/calc-graph.el, calc/calc-help.el, calc/calc-incom.el,
+ * calc/calc.el, emacs-lisp/cl-extra.el, emacs-lips/cl-loaddefs.el,
+ * emulation/cua-rect.el, emulation/viper-ex.el, eshell/esh-test.el,
+ * eshell/eshell.el, gnus/gnus-uu.el, gnus/nndoc.el, gnus/nnrss.el,
+ * gnus/rfc2047.el, gnus/utf7.el, international/utf-7.el,
+ * language/ethio-util.el, mh-e/mh-alias.el, mh-e/mh-search.el,
+ * net/imap.el, net/rcirc.el, obsolete/complete.el, play/decipher.el,
+ * progmodes/ada-mode.el, progmodes/cc-awk.el, progmodes/dcl-mode.el,
+ * progmodes/ps-mode.el, progmodes/verilog-mode.el,
+ * progmodes/vhdl-mode.el, textmodes/bibtex.el, textmodes/fill.el,
+ * textmodes/reftex-auc.el, textmodes/rst.el, textmodes/sgml-mode.el,
+ * textmodes/table.el, textmodes/texinfmt.el: Replace Lisp calls to
+ delete-backward-char by calls to delete-char.
+
+2010-05-25 Kenichi Handa <handa@m17n.org>
+
+ * language/hebrew.el (hebrew-shape-gstring): New function.
+ Register it in composition-function-table for all Hebrew combining
+ characters.
+
+2010-05-25 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * epa.el (epa--select-keys): Don't explicitly delete the window since
+ that can fail (e.g. sole window in frame). Use dedication instead.
+
+2010-05-24 Uday S Reddy <u.s.reddy@cs.bham.ac.uk> (tiny change)
+
+ * textmodes/fill.el (fill-region): Don't fill past the end (bug#6201).
+
+2010-05-22 Chong Yidong <cyd@stupidchicken.com>
+
+ * image.el (image-refresh): Define as an alias for image-flush.
+
+ * image-mode.el (image-toggle-display-image): Caller changed.
+
+2010-05-21 Juri Linkov <juri@jurta.org>
+
+ * progmodes/grep.el (grep-read-files): Fix multi-pattern aliases.
+ Remove "all" from grep-files-aliases. Split grep-files-aliases by
+ whitespace, call wildcard-to-regexp on substrings and concat them
+ with "\\|". (Bug#6114)
+
+2010-05-21 Alan Mackenzie <acm@muc.de>
+
+ * progmodes/cc-engine.el (c-parse-state-get-strategy):
+ Replace parameter `here' with `here-' and `here-plus', which sandwich
+ any pertinent CPP construct.
+ (c-remove-stale-state-cache-backwards): Fix a bug which happens
+ when doing (c-parse-state) in a CPP construct: Exclude any "new"
+ CPP construct from taking part in the scanning.
+
+2010-05-21 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-do-copy-or-rename-file)
+ (tramp-handle-file-local-copy, tramp-maybe-open-connection):
+ Tune `with-progress-reporter' messages.
+ (tramp-handle-vc-registered):
+ * net/tramp-fish.el (tramp-fish-handle-file-local-copy)
+ (tramp-fish-handle-insert-file-contents)
+ (tramp-fish-maybe-open-connection):
+ * net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection):
+ * net/tramp-imap.el (tramp-imap-do-copy-or-rename-file)
+ (tramp-imap-handle-insert-file-contents)
+ (tramp-imap-handle-file-local-copy): Use `with-progress-reporter'.
+
+2010-05-21 Juanma Barranquero <lekktu@gmail.com>
+
+ * add-log.el (change-log-font-lock-keywords):
+ Highlight all authors in multi-author entries.
+
+ * smerge-mode.el (smerge-refine-ignore-whitespace)
+ (smerge-refine-weight-hack, smerge-refine, smerge-makeup-conflict):
+ Fix typos in docstrings.
+ (smerge-resolve, smerge-refine-subst): Reflow docstrings.
+
+2010-05-21 Glenn Morris <rgm@gnu.org>
+
+ * progmodes/fortran.el (fortran-mode):
+ * progmodes/f90.el (f90-mode): Derive from prog-mode.
+
+ * loadup.el [CANNOT_DUMP]: Update for bootstrap-emacs no longer
+ having a relative path in src/Makefile.in.
+
+2010-05-20 Kevin Ryde <user42@zip.com.au>
+
+ * help-mode.el (help-make-xrefs): For Info node links turn
+ newlines into spaces. Link node names with newlines are matched
+ by help-xref-info-regexp and buttonized, this change ensures they
+ can be followed successfully with RET. (Bug#6206)
+
+2010-05-20 Juri Linkov <juri@jurta.org>
+
+ * locate.el (locate): Use pop-to-buffer instead of
+ switch-to-buffer-other-window. (Bug#6204)
+
+2010-05-20 Juri Linkov <juri@jurta.org>
+
+ * replace.el (replace-highlight): Fix lazy-highlighting
+ for `M-s w str M-% str RET'.
+
+2009-12-15 Masatake YAMATO <yamato@redhat.com>
+
+ * isearch.el (isearch-yank-word-or-char): Pull next subword
+ when `subword-mode' is activated. (Bug#6220)
+
+2010-05-20 Mark A. Hershberger <mah@everybody.org>
+
+ * isearch.el (isearch-update-post-hook): New hook.
+ (isearch-update): Use the new hook. (Bug#6225)
+
+2010-05-20 Juri Linkov <juri@jurta.org>
+
+ * isearch.el (isearch-mode-map): Bind more keys to isearch-help-map:
+ [f1], [help], and (char-to-string help-char) instead of "\C-h".
+ (Bug#6222)
+
+2010-05-20 Juri Linkov <juri@jurta.org>
+
+ * isearch.el (isearch-yank-string): Use isearch-process-search-string.
+ (Bug#6223)
+
+2010-05-20 Juri Linkov <juri@jurta.org>
+
+ * dired-x.el (dired-jump, dired-jump-other-window): Add arg
+ FILE-NAME to read from the minibuffer when called interactively
+ with prefix argument instead of using buffer-file-name.
+ http://lists.gnu.org/archive/html/emacs-devel/2010-05/msg00534.html
+
+ * dired.el: Update autoloads.
+
+2010-05-20 Chong Yidong <cyd@stupidchicken.com>
+
+ * nxml/nxml-mode.el (nxml-mode-map): Bind C-c / to
+ nxml-finish-element, for consistency with SGML mode.
+
+ * progmodes/octave-mod.el (octave-mode-map): Bind C-c / to
+ octave-close-block.
+
+2010-05-20 Juanma Barranquero <lekktu@gmail.com>
+
+ * composite.el: Require cl when compiling.
+ (reference-point-alist, compose-gstring-for-graphic)
+ (compose-gstring-for-terminal): Fix typos in docstrings.
+
+2010-05-19 Juri Linkov <juri@jurta.org>
+
+ * emacs-lisp/cl-macs.el (window-parameter): Add defsetf with
+ set-window-parameter.
+
+2010-05-19 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-methods): Add `tramp-async-args' attribute
+ where appropriate.
+ (tramp-maybe-open-connection): Use it.
+
+2010-05-19 Eli Zaretskii <eliz@gnu.org>
+
+ * simple.el (move-end-of-line): Make sure we are at line beginning
+ before backing up to end of previous line.
+
+2010-05-19 Michael Albinus <michael.albinus@gmx.de>
+
+ * password-cache.el (password-cache-remove): Fix docstring.
+
+ * net/secrets.el: Autoload the widget functions.
+ (secrets-search-items, secrets-create-item)
+ (secrets-get-attributes, secrets-expand-item): Attributes will be
+ stored on the password database without leading ":", as all other
+ clients do as well.
+ (secrets-mode): Fix docstring.
+ (secrets-show-secrets): Provide it as autoloaded command only when
+ D-Bus support is available. Check existence of Secret Service API.
+
+2010-05-19 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * indent.el (indent-region): Deactivate region (bug#6200).
+
+2010-05-19 Glenn Morris <rgm@gnu.org>
+
+ * vc-dir.el (vc-dir): Don't pop-up-windows. (Bug#6204)
+
+2010-05-19 Kenichi Handa <handa@m17n.org>
+
+ * composite.el: Register compose-gstring-for-graphic in
+ composition-function-table only for combining characters (Mn, Mc, Me).
+
+2010-05-18 Jay Belanger <jay.p.belanger@gmail.com>
+
+ * calc/calc-trail.el (calc-trail-isearch-forward)
+ (calc-trail-isearch-backward): Ensure that the new window
+ point is set correctly.
+
+2010-05-18 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * subr.el (read-quoted-char): Resolve modifiers after key
+ remapping (bug#6212).
+
+2010-05-18 Michael Albinus <michael.albinus@gmx.de>
+
+ Add visualization code for secrets.
+ * net/secrets.el (secrets-mode): New major mode.
+ (secrets-show-secrets, secrets-show-collections)
+ (secrets-expand-collection, secrets-expand-item)
+ (secrets-tree-widget-after-toggle-function)
+ (secrets-tree-widget-show-password): New defuns.
+
+2010-05-18 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/smie.el (smie-next-sexp): Break inf-loop at BOB.
+ (smie-backward-sexp, smie-forward-sexp): Remove boundary condition now
+ handled in smie-next-sexp.
+ (smie-indent-calculate): Provide a starting indentation (so the
+ recursion is well-founded ;-).
+
+ Fix handling of non-associative equal levels.
+ * emacs-lisp/smie.el (smie-prec2-levels): Choose distinct levels even
+ when it's not needed.
+ (smie-op-left, smie-op-right): New functions.
+ (smie-next-sexp): New function, extracted from smie-backward-sexp.
+ Better handle equal levels to distinguish the associative case from
+ the "multi-keyword construct" case.
+ (smie-backward-sexp, smie-forward-sexp): Use it.
+
+2010-05-18 Juanma Barranquero <lekktu@gmail.com>
+
+ * progmodes/prolog.el (smie-indent-basic): Declare for byte-compiler.
+
+ * emacs-lisp/smie.el (smie-precs-precedence-table, smie-backward-sexp)
+ (smie-forward-sexp, smie-indent-calculate): Fix typos in docstrings.
+
+2010-05-17 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ Provide a simple generic indentation engine and use it for Prolog.
+ * emacs-lisp/smie.el: New file.
+ * progmodes/prolog.el (prolog-smie-op-levels)
+ (prolog-smie-indent-rules): New var.
+ (prolog-mode-variables): Use them to configure SMIE.
+ (prolog-indent-line, prolog-indent-level): Remove.
+
+2010-05-17 Jay Belanger <jay.p.belanger@gmail.com>
+
+ * calc/calc-vec.el (math-vector-avg): Put the vector elements in
+ order before computing the averages.
+
+2010-05-16 Jay Belanger <jay.p.belanger@gmail.com>
+
+ * calc/calc-vec.el (calc-histogram):
+ (calcFunc-histogram): Allow vectors as inputs.
+ (math-vector-avg): New function.
+
+ * calc/calc-ext.el (math-group-float): Have the number of digits
+ being grouped depend on the radix (Bug#6189).
+
+2010-05-15 Ken Raeburn <raeburn@raeburn.org>
+
+ * version.el (emacs-copyright, emacs-version): Don't define here,
+ now that emacs.c defines it.
+
+2010-05-15 Eli Zaretskii <eliz@gnu.org>
+
+ * international/mule-cmds.el (mule-menu-keymap): Fix definition of
+ "Describe Language Environment" menu item.
+
+ * language/hebrew.el ("Hebrew", "Windows-1255"): Doc fix.
+
+ Bidi-sensitive movement with arrow keys.
+ * subr.el (right-arrow-command, left-arrow-command): New functions.
+
+ * bindings.el (global-map): Bind them to right and left arrow keys.
+
+ Don't override standard definition of convert-standard-filename.
+ * files.el (convert-standard-filename):
+ Call w32-convert-standard-filename and dos-convert-standard-filename on
+ the corresponding systems.
+
+ * w32-fns.el (w32-convert-standard-filename): Rename from
+ convert-standard-filename. Doc fix.
+
+ * dos-fns.el (dos-convert-standard-filename): Doc fix.
+ (convert-standard-filename): Don't defalias.
+ (register-name-alist, make-register, register-value)
+ (set-register-value, intdos): Obsolete aliases for the
+ corresponding dos-* functions and variables.
+ (dos-intdos): Add a doc string.
+
+2010-05-15 Jay Belanger <jay.p.belanger@gmail.com>
+
+ * calc/calc-aent.el (math-read-token, math-find-user-tokens):
+ * calc/calc-lang.el (math-read-big-rec, math-lang-read-symbol):
+ (math-compose-tex-func):
+ * calc/calccomp.el (math-compose-expr):
+ * calc/calc-ext.el (math-format-flat-expr-fancy):
+ * calc/calc-store.el (calc-read-var-name):
+ * calc/calc-units.el (calc-explain-units-rec): Allow Greek letters.
+
+ * calc/calc.el (var-π, var-φ, var-γ): New variables.
+ * calc/calc-aent.el (math-read-replacement-list): Add "micro" symbol.
+ * calc/calc-units.el (math-unit-prefixes): Add mu for micro.
+ (math-standard-units): Add units.
+
+2010-05-15 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/asm-mode.el (asm-mode):
+ * progmodes/prolog.el (prolog-mode): Use define-derived-mode.
+
+ * pcomplete.el (pcomplete-completions-at-point): New function,
+ extracted from pcomplete-std-complete.
+ (pcomplete-std-complete): Use it.
+
+2010-05-15 Glenn Morris <rgm@gnu.org>
+
+ * Makefile.in (setwins, setwins_almost, setwins_for_subdirs):
+ Remove references to CVS, RCS and Old directories.
+
+2010-05-14 Jay Belanger <jay.p.belanger@gmail.com>
+
+ * calc/calc-bin.el (math-format-twos-complement): Group digits when
+ appropriate.
+
+2010-05-14 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/sh-script.el (sh-mode-default-syntax-table): Remove.
+ (sh-mode-syntax-table): Give it a default value instead.
+ (sh-header-marker): Make buffer-local.
+ (sh-mode): Move make-local-variable to the corresponding setq.
+ (sh-add-completer): Avoid gratuitously let-binding a buffer-local var.
+ Use complete-with-action.
+
+ * simple.el (prog-mode): New (abstract) major mode.
+ * emacs-lisp/lisp-mode.el (emacs-lisp-mode, lisp-mode): Use it.
+ * progmodes/sh-script.el (sh-mode): Remove redundant var assignment.
+
+2010-05-14 Juanma Barranquero <lekktu@gmail.com>
+
+ * progmodes/sql.el (sql-oracle-program): Reflow docstring.
+ (sql-oracle-scan-on, sql-sybase-program, sql-product-font-lock)
+ (sql-add-product-keywords, sql-highlight-product, sql-set-product)
+ (sql-make-alternate-buffer-name, sql-placeholders-filter)
+ (sql-escape-newlines-filter, sql-input-sender)
+ (sql-send-magic-terminator, sql-sybase): Fix typos in docstrings.
+
+2010-05-13 Chong Yidong <cyd@stupidchicken.com>
+
+ Add TeX open-block and close-block keybindings to SGML, and vice versa.
+
+ * textmodes/tex-mode.el (tex-mode-map): Bind C-c C-t to
+ latex-open-block and C-c / to latex-close-block.
+
+ * textmodes/sgml-mode.el (sgml-mode-map): Bind C-c C-o to sgml-tag
+ and C-c C-e to sgml-close-tag.
+
+2010-05-13 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (with-progress-reporter): Create reporter object
+ only when the message would be displayed. Handle nested calls.
+ (tramp-handle-load, tramp-handle-file-local-copy)
+ (tramp-handle-insert-file-contents, tramp-handle-write-region)
+ (tramp-maybe-send-script, tramp-find-shell):
+ Use `with-progress-reporter'.
+ (tramp-handle-dired-compress-file, tramp-maybe-open-connection):
+ Fix message text.
+
+ * net/tramp-smb.el (tramp-smb-handle-copy-file)
+ (tramp-smb-handle-file-local-copy, tramp-smb-handle-rename-file)
+ (tramp-smb-handle-write-region, tramp-smb-maybe-open-connection):
+ Use `with-progress-reporter'.
+
+2010-05-13 Agustín Martín <agustin.martin@hispalinux.es>
+
+ * textmodes/ispell.el (ispell-init-process): Do not kill ispell
+ process everytime when spellchecking from the minibuffer (bug#6143).
+
+2010-05-13 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/sh-script.el (sh-mode): Use define-derived-mode.
+
+ * dos-fns.el: Add "dos-" prefix for namespace control.
+ (convert-standard-filename): Define as alias for
+ dos-convert-standard-filename but only if applicable.
+
+2010-05-12 Alan Mackenzie <acm@muc.de>
+
+ * progmodes/cc-cmds.el (c-beginning-of-defun, c-end-of-defun):
+ Push the mark at the start of these functions when appropriate.
+
+2010-05-12 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * minibuffer.el (completion-cycle-threshold): New custom var.
+ (completion--do-completion): Use it.
+ (minibuffer-complete): Use cycling if appropriate.
+
+2010-05-11 Juanma Barranquero <lekktu@gmail.com>
+
+ * dirtrack.el (dirtrackp): Remove defcustom; don't make automatically
+ buffer-local (it's an obsolete alias for `dirtrack-mode') (bug#6173).
+
+2010-05-11 Juri Linkov <juri@jurta.org>
+
+ * scroll-all.el (scroll-all-check-to-scroll):
+ Add `scroll-up-command' and `scroll-down-command' (bug#6164).
+
+2010-05-11 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * iimage.el (iimage-mode-map): Move initialization into declaration.
+ (iimage-mode-buffer): Use with-silent-modifications.
+ Simplify calling convention. Adjust callers.
+ (iimage-mode): Don't run hook redundantly.
+
+ * minibuffer.el (completion-pcm--pattern->regex):
+ Fix last change (bug#6160).
+
+2010-05-10 Juri Linkov <juri@jurta.org>
+
+ Remove nodes visited during Isearch from the Info history.
+ * info.el (Info-isearch-initial-history)
+ (Info-isearch-initial-history-list): New variables.
+ (Info-isearch-start): Record initial values of
+ Info-isearch-initial-history and Info-isearch-initial-history-list.
+ Add Info-isearch-end to isearch-mode-end-hook.
+ (Info-isearch-end): New function.
+
+2010-05-10 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-do-file-attributes-with-stat): Add space in
+ format string, in order to work around a bug in pdksh.
+ Reported by Gilles Pion <gpion@lfdj.com>.
+ (tramp-handle-verify-visited-file-modtime): Do not send a command
+ when the connection is not established.
+ (tramp-handle-set-file-times): Simplify the check for utc.
+
+2010-05-10 Juanma Barranquero <lekktu@gmail.com>
+
+ Fix use of `filter-buffer-substring' (rework previous change).
+ * emulation/cua-base.el (cua--filter-buffer-noprops): New function.
+ (cua-repeat-replace-region):
+ * emulation/cua-rect.el (cua--extract-rectangle, cua-incr-rectangle):
+ * emulation/cua-gmrk.el (cua-copy-region-to-global-mark)
+ (cua-cut-region-to-global-mark): Use it.
+
+2010-05-09 Michael R. Mauger <mmaug@yahoo.com>
+
+ * progmodes/sql.el: Version 2.1.
+ (sql-product-alist): Redesign structure of product info.
+ (sql-product, sql-user, sql-server, sql-database): Safe variables.
+ (sql-port, sql-port-history): New variables.
+ (sql-interactive-product): New variable.
+ (sql-send-terminator): New variable.
+ (sql-imenu-generic-expression): Add "Types" imenu entry.
+ (sql-oracle-login-params, sql-sqlite-login-params)
+ (sql-mysql-login-params, sql-solid-login-params)
+ (sql-sybase-login-params, sql-informix-login-params)
+ (sql-ingres-login-params, sql-ms-login-params)
+ (sql-postgres-login-params, sql-interbase-login-params)
+ (sql-db2-login-params, sql-linter-login-params)
+ (sql-oracle-scan-on): New variables.
+ (sql-mode-map): Add C-c C-i to start interactive mode.
+ (sql-mode-menu): Update existing menu entries.
+ (sql-font-lock-keywords-builder): Compile-time font-lock optimization.
+ (sql-mode-oracle-font-lock-keywords)
+ (sql-mode-postgres-font-lock-keywords)
+ (sql-mode-ms-font-lock-keywords)
+ (sql-mode-sybase-font-lock-keywords)
+ (sql-mode-informix-font-lock-keywords)
+ (sql-mode-interbase-font-lock-keywords)
+ (sql-mode-ingres-font-lock-keywords)
+ (sql-mode-solid-font-lock-keywords)
+ (sql-mode-mysql-font-lock-keywords)
+ (sql-mode-sqlite-font-lock-keywords)
+ (sql-mode-db2-font-lock-keywords)
+ (sql-mode-linter-font-lock-keywords): Update initialization to
+ reduce run-time complexity.
+ (sql-add-product, sql-del-product): New functions.
+ (sql-set-product-feature, sql-get-product-feature): New functions.
+ (sql-product-font-lock): Update product API.
+ (sql-add-product-keywords): New function.
+ (sql-highlight-product): Update product API.
+ (sql-help-list-products): New function.
+ (sql-help): Dynamically lists free and non-free products.
+ (sql-get-login): Correct bug in handling history and added
+ prompt for port.
+ (sql-copy-column): Copy without properties.
+ (sqli-input-sender): Apply filters to SQLi input.
+ (sql-query-placeholders-and-send): Obey `sql-oracle-scan-on' setting.
+ Implement as a filter.
+ (sql-escape-newlines-filter): Implement as a filter.
+ (sql-remove-tabs-filter): New function.
+ (sql-send-magic-terminator): New function.
+ (sql-send-string): Implement magic terminator.
+ (sql-send-region): Use `sql-send-string'.
+ (sql-interactive-mode): Use product API.
+ (sql-product-interactive): Use product API.
+ (sql-oracle, sql-sybase, sql-informix, sql-sqlite, sql-mysql)
+ (sql-solid, sql-ingres, sql-ms, sql-postgres, sql-interbase)
+ (sql-db2, sql-linter): Use `sql-product-interactive'.
+ (sql-connect): New function.
+ (sql-connect-oracle, sql-connect-sybase, sql-connect-informix)
+ (sql-connect-sqlite, sql-connect-mysql, sql-connect-solid)
+ (sql-connect-ingres, sql-connect-ms, sql-connect-postgres)
+ (sql-connect-interbase, sql-connect-db2, sql-connect-linter):
+ Use `sql-connect'.
+
+2010-05-09 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * minibuffer.el (completion-pcm-complete-word-inserts-delimiters):
+ New custom variable.
+ (completion-pcm--string->pattern): Use it.
+ (completion-pcm--pattern->regex, completion-pcm--pattern->string):
+ Make it handle any symbol as `any'.
+ (completion-pcm--merge-completions): Extract common suffix for the new
+ `prefix' symbol as well.
+ (completion-substring--all-completions): Use the new `prefix' symbol.
+
+2010-05-09 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp-compat.el (byte-compile-not-obsolete-vars): Define if
+ not bound.
+ (tramp-compat-copy-file): Add PRESERVE-SELINUX-CONTEXT.
+ (tramp-compat-funcall): New defmacro.
+ (tramp-compat-line-beginning-position)
+ (tramp-compat-line-end-position)
+ (tramp-compat-temporary-file-directory)
+ (tramp-compat-make-temp-file, tramp-compat-file-attributes)
+ (tramp-compat-copy-file, tramp-compat-copy-directory)
+ (tramp-compat-delete-file, tramp-compat-delete-directory)
+ (tramp-compat-number-sequence, tramp-compat-process-running-p)
+ * net/tramp.el (top, with-progress-reporter)
+ (tramp-rfn-eshadow-setup-minibuffer)
+ (tramp-rfn-eshadow-update-overlay, tramp-handle-set-file-times)
+ (tramp-handle-dired-compress-file, tramp-handle-shell-command)
+ (tramp-completion-mode-p, tramp-check-for-regexp)
+ (tramp-open-connection-setup-interactive-shell)
+ (tramp-compute-multi-hops, tramp-read-passwd, tramp-clear-passwd)
+ (tramp-time-diff, tramp-coding-system-change-eol-conversion)
+ (tramp-set-process-query-on-exit-flag, tramp-unload-tramp)
+ * net/tramp-cmds.el (tramp-cleanup-all-connections)
+ (tramp-reporter-dump-variable, tramp-load-report-modules)
+ (tramp-append-tramp-buffers)
+ * net/tramp-gvfs.el (tramp-gvfs-handle-file-selinux-context): Use it.
+
+ * net/tramp-imap.el (top): Autoload `epg-make-context'.
+
+2010-05-08 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/compile.el (compilation-buffer-modtime): Rename from
+ buffer-modtime. Adjust users.
+
+2010-05-08 Chong Yidong <cyd@stupidchicken.com>
+
+ * international/mule.el (auto-coding-alist): Only purecopy
+ car of each item, not the whole list (Bug#6083).
+
+2010-05-08 Chong Yidong <cyd@stupidchicken.com>
+
+ * progmodes/js.el (js-mode): Make paragraph variables local before
+ calling c-setup-paragraph-variables (Bug#6071).
+
+2010-05-08 Eli Zaretskii <eliz@gnu.org>
+
+ * composite.el (compose-region, reference-point-alist): Fix typos
+ in the doc strings.
+
+2010-05-08 Alexander Klimov <alserkli@inbox.ru> (tiny change)
+
+ * calc/calc-graph.el (calc-graph-plot): Use the proper form for
+ gnuplot's "set" command.
+
+2010-05-08 Juanma Barranquero <lekktu@gmail.com>
+
+ * abbrev.el (last-abbrev-text): Doc fix.
+ (abbrev-prefix-mark): Don't escape parenthesis.
+
+2010-05-08 Andreas Schwab <schwab@linux-m68k.org>
+
+ * composite.el (find-composition): Doc fix.
+
+2010-05-08 Juanma Barranquero <lekktu@gmail.com>
+
+ * progmodes/sql.el (sql-electric-stuff): Fix typo in tag.
+ (sql-oracle-program, sql-sqlite-options)
+ (sql-query-placeholders-and-send): Doc fixes.
+ (sql-set-product, sql-interactive-mode): Reflow docstrings.
+ (sql-imenu-generic-expression, sql-buffer)
+ (sql-mode-ansi-font-lock-keywords, sql-mode-oracle-font-lock-keywords)
+ (sql-mode-postgres-font-lock-keywords, sql-mode-ms-font-lock-keywords)
+ (sql-mode-sybase-font-lock-keywords)
+ (sql-mode-informix-font-lock-keywords)
+ (sql-mode-interbase-font-lock-keywords)
+ (sql-mode-ingres-font-lock-keywords, sql-mode-solid-font-lock-keywords)
+ (sql-mode-mysql-font-lock-keywords, sql-mode-sqlite-font-lock-keywords)
+ (sql-mode-db2-font-lock-keywords, sql-mode-font-lock-keywords)
+ (sql-product-feature, sql-highlight-product)
+ (comint-line-beginning-position, sql-rename-buffer)
+ (sql-toggle-pop-to-buffer-after-send-region sql-oracle)
+ (sql-sybase, sql-informix, sql-sqlite, sql-mysql, sql-solid)
+ (sql-ingres, sql-ms, sql-postgres, sql-interbase, sql-db2, sql-linter):
+ Fix typos in docstrings.
+
+2010-05-08 Juri Linkov <juri@jurta.org>
+
+ * info.el (Info-fontify-node): Put Info-breadcrumbs to the `display'
+ property instead of `invisible' and `after-string' (bug#5998).
+
+2010-05-08 Juri Linkov <juri@jurta.org>
+
+ * image-mode.el (image-mode-as-text): Fix typo in docstring.
+
+2010-05-08 Juanma Barranquero <lekktu@gmail.com>
+
+ * filecache.el (file-cache-add-directory-list)
+ (file-cache-add-directory-recursively): Fix typos in docstrings.
+
+2010-05-08 Kenichi Handa <handa@m17n.org>
+
+ * language/indian.el (gurmukhi-composable-pattern): Fix typo.
+ (gujarati-composable-pattern): Fix typo.
+
+2010-05-08 Kenichi Handa <handa@m17n.org>
+
+ * language/indian.el (oriya-composable-pattern)
+ (tamil-composable-pattern, malayalam-composable-pattern):
+ Add two-part vowels to "v" (vowel sign).
+
+2010-05-08 Chong Yidong <cyd@stupidchicken.com>
+
+ * files.el (copy-directory): Handle symlinks (Bug#5982).
+
+2010-05-08 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * vc-hg.el (vc-hg-state): Use HGRCPATH, not HGRC.
+ (vc-hg-working-revision): Likewise. Use hg parents, not hg parent
+ (Bug#5846).
+
+2010-05-08 Glenn Morris <rgm@gnu.org>
+
+ * emacs-lisp/lisp.el (lisp-completion-at-point): Give it a doc string.
+
+ * minibuffer.el (completion-at-point): Doc fix.
+
+2010-05-08 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * electric.el (Electric-command-loop): Minor tweak.
+
+ * ebuff-menu.el (electric-buffer-list): Try and make it behave a bit
+ better with dedicated windows.
+
+2010-05-07 Chong Yidong <cyd@stupidchicken.com>
+
+ * Version 23.2 released.
+
+2010-05-07 Deniz Dogan <deniz.a.m.dogan@gmail.com> (tiny change)
+ Stefan Monnier <monnier@iro.umontreal.ca>
+
+ Highlight vendor specific properties.
+ * textmodes/css-mode.el (css-proprietary-nmstart-re): New var.
+ (css-proprietary-property): New face.
+ (css-font-lock-keywords): Use them.
+
+2010-05-07 Eli Zaretskii <eliz@gnu.org>
-2010-08-26 Magnus Henoch <magnus.henoch@gmail.com>
+ * cus-start.el (all): Add native condition for tool-bar-* symbols.
- * net/tramp-gvfs.el (tramp-gvfs-handle-copy-file): Do not pass
- empty argument to gvfs-copy.
+2010-05-07 Stefan Monnier <monnier@iro.umontreal.ca>
-2010-08-26 Chong Yidong <cyd@stupidchicken.com>
+ * textmodes/dns-mode.el (auto-mode-alist): Add entry for .zone files.
+ * files.el (auto-mode-alist): Remove redundant entries.
- * net/tramp-compat.el (tramp-compat-delete-file): Rewrite to
- handle new TRASH arg of `delete-file'.
+ * files.el (auto-save-mode): Move to simple.el to fix bootstrap.
+ * simple.el (auto-save-mode): Move from files.el.
+ * minibuffer.el (completion--common-suffix): Fix copy&paste error.
-2010-08-26 Christian Lynbech <christian.lynbech@tieto.com> (tiny change)
+2010-05-07 Christian von Roques <roques@mti.ag> (tiny change)
- * net/tramp.el (tramp-handle-insert-directory): Don't use
- `forward-word', its default syntax could be changed.
+ * epg.el (epg-key-capablity-alist): Add "D" flag (Bug#5592).
-2010-08-26 Toru TSUNEYOSHI <t_tuneyosi@hotmail.com>
+2010-05-07 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * mail/binhex.el (binhex-decode-region-internal)
+ * mail/uudecode.el (uudecode-decode-region-internal)
+ * net/dns.el (dns-read-string-name, dns-write, dns-read)
+ (dns-read-type, dns-query)
+ * pgg-parse.el (pgg-parse-armor)
+ * pgg.el (pgg-verify-region)
+ * sha1.el (sha1-string-external): Don't run set-buffer-multibyte for
+ XEmacs.
+
+ * net/imap.el (imap-disable-multibyte): Redefine it as a macro.
+
+2010-05-07 Juanma Barranquero <lekktu@gmail.com>
+
+ * progmodes/cperl-mode.el (cperl-mode-unload-function): New function.
+
+ Fix use of `filter-buffer-substring' (4th arg NOPROPS removed).
+ * emulation/cua-base.el (cua-repeat-replace-region):
+ * emulation/cua-gmrk.el (cua-copy-region-to-global-mark)
+ (cua-cut-region-to-global-mark):
+ Remove text properties with `set-text-properties'.
+
+2010-05-06 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (top, with-progress-reporter):
+ Use `symbol-function' inside `funcall'.
+
+ * net/tramp-compat.el (tramp-compat-file-attributes)
+ (tramp-compat-delete-file, tramp-compat-delete-directory):
+ Handle only `wrong-number-of-arguments' error.
+
+ * net/tramp-gvfs.el (tramp-gvfs-handle-copy-file): Fix typo.
+ (tramp-gvfs-handle-file-selinux-context): Use `symbol-function'
+ inside `funcall'.
+
+2010-05-06 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * minibuffer.el (completion--sreverse, completion--common-suffix):
+ New functions.
+ (completion-pcm--merge-completions): Extract common suffix when safe.
+
+ * emacs-lisp/easy-mmode.el (define-minor-mode):
+ Make :variable more flexible.
+ * files.el (auto-save-mode): Use it to define using define-minor-mode.
+
+2010-05-05 Juri Linkov <juri@jurta.org>
+
+ Add `slow' and `history' tags to the desktop data.
+
+ * info.el (Info-virtual-nodes) [*Index*]: Add `slow' tag.
+ (Info-virtual-files) [*Apropos*]: Add `slow' tag.
+ (Info-finder-find-node): Require `finder.el' to be able
+ to restore node from the desktop.
+ (Info-desktop-buffer-misc-data): Save all nodes. Save additional
+ data `Info-history' and `slow' tag in the assoc list.
+ (Info-restore-desktop-buffer): Don't restore nodes with the
+ `slow' tag. Restore `Info-history'.
+
+2010-05-05 Michael Albinus <michael.albinus@gmx.de>
+
+ Add FORCE argument to `delete-file'.
+
+ * net/ange-ftp.el (ange-ftp-del-tmp-name): Make it a defun,
+ forcing to delete the temporary file.
+ (ange-ftp-delete-file): Add FORCE arg.
+ (ange-ftp-rename-remote-to-remote)
+ (ange-ftp-rename-local-to-remote, ange-ftp-rename-remote-to-local)
+ (ange-ftp-load, ange-ftp-compress, ange-ftp-uncompress):
+ Force file deletion.
+
+ * net/tramp-compat.el (tramp-compat-delete-file): New defun.
+
+ * net/tramp.el (tramp-handle-delete-file): Add FORCE arg.
+ (tramp-handle-make-symbolic-link, tramp-handle-load)
+ (tramp-do-copy-or-rename-file-via-buffer)
+ (tramp-do-copy-or-rename-file-directly)
+ (tramp-do-copy-or-rename-file-out-of-band)
+ (tramp-handle-process-file, tramp-handle-call-process-region)
+ (tramp-handle-shell-command, tramp-handle-file-local-copy)
+ (tramp-handle-insert-file-contents, tramp-handle-write-region)
+ (tramp-delete-temp-file-function): Use `tramp-compat-delete-file'.
+
+ * net/tramp-fish.el (tramp-fish-handle-delete-file): Add FORCE arg.
+ (tramp-fish-handle-make-symbolic-link)
+ (tramp-fish-handle-process-file): Use `tramp-compat-delete-file'.
+
+ * net/tramp-ftp.el (tramp-ftp-file-name-handler):
+ Use `tramp-compat-delete-file'.
+
+ * net/tramp-gvfs.el (tramp-gvfs-handle-delete-file): Add FORCE arg.
+ (tramp-gvfs-handle-write-region): Use `tramp-compat-delete-file'.
+
+ * net/tramp-imap.el (tramp-imap-handle-delete-file): Add FORCE arg.
+ (tramp-imap-do-copy-or-rename-file): Use `tramp-compat-delete-file'.
+
+ * net/tramp-smb.el (tramp-smb-handle-delete-file): Add FORCE arg.
+ (tramp-smb-handle-copy-file, tramp-smb-handle-file-local-copy)
+ (tramp-smb-handle-rename-file, tramp-smb-handle-write-region):
+ Use `tramp-compat-delete-file'.
+
+2010-05-05 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ Minor cleanups.
+ * subr.el (add-minor-mode): Use push.
+ * mail/supercite.el (sc-electric-mode): Use more descriptive arg name.
+ * emulation/edt.el (edt-select-mode): Simplify.
+
+ Use define-minor-mode in more cases.
+ * term/tvi970.el (tvi970-set-keypad-mode):
+ * simple.el (auto-fill-mode, overwrite-mode, binary-overwrite-mode)
+ (normal-erase-is-backspace-mode):
+ * scroll-bar.el (scroll-bar-mode): Use it and define-minor-mode.
+ (set-scroll-bar-mode-1): (Re)move to its sole caller.
+ (get-scroll-bar-mode): New function.
+ * emacs-lisp/cl-macs.el (eq): Handle a non-variable first arg.
+
+ Use define-minor-mode for less obvious cases.
+ * emacs-lisp/easy-mmode.el (define-minor-mode): Add :variable keyword.
+ * emacs-lisp/cl-macs.el (terminal-parameter, eq): Add setf method.
+ * international/iso-ascii.el (iso-ascii-mode):
+ * frame.el (auto-raise-mode, auto-lower-mode):
+ * composite.el (global-auto-composition-mode): Use define-minor-mode.
+
+2010-05-04 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-methods): Remove "-q" from `tramp-login-args'
+ in order to see error messages for failed logins.
+
+2010-05-03 Chong Yidong <cyd@stupidchicken.com>
+
+ * diff.el (diff-sentinel):
+
+ * epg.el (epg--make-temp-file, epg-decrypt-string)
+ (epg-verify-string, epg-sign-string, epg-encrypt-string):
+
+ * jka-compr.el (jka-compr-partial-uncompress)
+ (jka-compr-call-process, jka-compr-write-region, jka-compr-load):
+
+ * server.el (server-sentinel): Use delete-file's new FORCE arg
+ (Bug#6070).
+
+2010-05-03 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ Use define-minor-mode where applicable.
+ * view.el (view-mode):
+ * type-break.el (type-break-query-mode)
+ (type-break-mode-line-message-mode):
+ * textmodes/reftex.el (reftex-mode):
+ * term/vt100.el (vt100-wide-mode):
+ * tar-mode.el (tar-subfile-mode):
+ * savehist.el (savehist-mode):
+ * ibuf-ext.el (ibuffer-auto-mode):
+ * composite.el (auto-composition-mode):
+ * progmodes/vhdl-mode.el (vhdl-electric-mode, vhdl-stutter-mode):
+ Use define-minor-mode.
+ (vhdl-mode): Use static mode-line format.
+ (vhdl-mode-line-update): Delete.
+ (vhdl-create-mode-menu, vhdl-activate-customizations)
+ (vhdl-hs-minor-mode): Don't bother calling it.
+
+2010-05-02 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * simple.el (with-wrapper-hook): Move.
+ (buffer-substring-filters): Mark obsolete.
+ (filter-buffer-substring-functions): New variable.
+ (filter-buffer-substring): Use it. Remove unused arg `noprops'.
+
+2010-05-01 Toru TSUNEYOSHI <t_tuneyosi@hotmail.com>
Michael Albinus <michael.albinus@gmx.de>
Implement compression for inline methods.
--- /dev/null
- (unwind-protect
- ;; When PROGRAM is nil, we just provide a tty.
- (let ((command
- (when (stringp program)
- (format "cd %s; exec %s"
- (tramp-shell-quote-argument localname)
- (mapconcat 'tramp-shell-quote-argument
- (cons program args) " "))))
- (tramp-process-connection-type
- (or (null program) tramp-process-connection-type))
- (name1 name)
- (i 0))
- (unless buffer
- ;; BUFFER can be nil. We use a temporary buffer.
- (setq buffer (generate-new-buffer tramp-temp-buffer-name)))
- (while (get-process name1)
- ;; NAME must be unique as process name.
- (setq i (1+ i)
- name1 (format "%s<%d>" name i)))
- (setq name name1)
- ;; Set the new process properties.
- (tramp-set-connection-property v "process-name" name)
- (tramp-set-connection-property v "process-buffer" buffer)
- ;; Activate narrowing in order to save BUFFER contents.
- ;; Clear also the modification time; otherwise we might be
- ;; interrupted by `verify-visited-file-modtime'.
- (with-current-buffer (tramp-get-connection-buffer v)
- (clear-visited-file-modtime)
- (narrow-to-region (point-max) (point-max)))
- (if command
- ;; Send the command.
- (tramp-send-command v command nil t) ; nooutput
- ;; Check, whether a pty is associated.
- (tramp-maybe-open-connection v)
- (unless (tramp-compat-process-get
- (tramp-get-connection-process v) 'remote-tty)
- (tramp-error
- v 'file-error "pty association is not supported for `%s'" name)))
- (let ((p (tramp-get-connection-process v)))
- ;; Set sentinel and query flag for this process.
- (tramp-set-connection-property p "vector" v)
- (set-process-sentinel p 'tramp-process-sentinel)
- (tramp-compat-set-process-query-on-exit-flag p t)
- ;; Return process.
- p))
- ;; Save exit.
- (with-current-buffer (tramp-get-connection-buffer v)
- (if (string-match tramp-temp-buffer-name (buffer-name))
- (progn
- (set-process-buffer (tramp-get-connection-process v) nil)
- (kill-buffer (current-buffer)))
- (widen)
- (goto-char (point-max))))
- (tramp-set-connection-property v "process-name" nil)
- (tramp-set-connection-property v "process-buffer" nil))))
+;;; tramp-sh.el --- Tramp access functions for (s)sh-like connections
+
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+
+;; (copyright statements below in code to be updated with the above notice)
+
+;; Author: Kai Großjohann <kai.grossjohann@gmx.net>
+;; Michael Albinus <michael.albinus@gmx.de>
+;; Keywords: comm, processes
+;; Package: tramp
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Code:
+
+(eval-when-compile (require 'cl)) ; ignore-errors
+(require 'tramp)
+(require 'shell)
+
+;; Pacify byte-compiler. The function is needed on XEmacs only. I'm
+;; not sure at all that this is the right way to do it, but let's hope
+;; it works for now, and wait for a guru to point out the Right Way to
+;; achieve this.
+;;(eval-when-compile
+;; (unless (fboundp 'dired-insert-set-properties)
+;; (fset 'dired-insert-set-properties 'ignore)))
+;; Gerd suggests this:
+(eval-when-compile (require 'dired))
+;; Note that dired is required at run-time, too, when it is needed.
+;; It is only needed on XEmacs for the function
+;; `dired-insert-set-properties'.
+
+(defcustom tramp-inline-compress-start-size 4096
+ "*The minimum size of compressing where inline transfer.
+When inline transfer, compress transfered data of file
+whose size is this value or above (up to `tramp-copy-size-limit').
+If it is nil, no compression at all will be applied."
+ :group 'tramp
+ :type '(choice (const nil) integer))
+
+(defcustom tramp-copy-size-limit 10240
+ "*The maximum file size where inline copying is preferred over an out-of-the-band copy.
+If it is nil, inline out-of-the-band copy will be used without a check."
+ :group 'tramp
+ :type '(choice (const nil) integer))
+
+;;;###tramp-autoload
+(defcustom tramp-terminal-type "dumb"
+ "*Value of TERM environment variable for logging in to remote host.
+Because Tramp wants to parse the output of the remote shell, it is easily
+confused by ANSI color escape sequences and suchlike. Often, shell init
+files conditionalize this setup based on the TERM environment variable."
+ :group 'tramp
+ :type 'string)
+
+;; ksh on OpenBSD 4.5 requires, that $PS1 contains a `#' character for
+;; root users. It uses the `$' character for other users. In order
+;; to guarantee a proper prompt, we use "#$" for the prompt.
+
+(defvar tramp-end-of-output
+ (format
+ "///%s#$"
+ (md5 (concat (prin1-to-string process-environment) (current-time-string))))
+ "String used to recognize end of output.
+The '$' character at the end is quoted; the string cannot be
+detected as prompt when being sent on echoing hosts, therefore.")
+
+;;;###tramp-autoload
+(defconst tramp-initial-end-of-output "#$ "
+ "Prompt when establishing a connection.")
+
+;; Initialize `tramp-methods' with the supported methods.
+;;;###tramp-autoload
+(add-to-list 'tramp-methods
+ '("rcp"
+ (tramp-login-program "rsh")
+ (tramp-login-args (("%h") ("-l" "%u")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program "rcp")
+ (tramp-copy-args (("%k" "-p") ("-r")))
+ (tramp-copy-keep-date t)
+ (tramp-copy-recursive t)))
+;;;###tramp-autoload
+(add-to-list 'tramp-methods
+ '("remcp"
+ (tramp-login-program "remsh")
+ (tramp-login-args (("%h") ("-l" "%u")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program "rcp")
+ (tramp-copy-args (("%k" "-p")))
+ (tramp-copy-keep-date t)))
+;;;###tramp-autoload
+(add-to-list 'tramp-methods
+ '("scp"
+ (tramp-login-program "ssh")
+ (tramp-login-args (("-l" "%u") ("-p" "%p") ("-e" "none") ("%h")))
+ (tramp-async-args (("-q")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program "scp")
+ (tramp-copy-args (("-P" "%p") ("%k" "-p") ("-q") ("-r")))
+ (tramp-copy-keep-date t)
+ (tramp-copy-recursive t)
+ (tramp-gw-args (("-o" "GlobalKnownHostsFile=/dev/null")
+ ("-o" "UserKnownHostsFile=/dev/null")
+ ("-o" "StrictHostKeyChecking=no")))
+ (tramp-default-port 22)))
+;;;###tramp-autoload
+(add-to-list 'tramp-methods
+ '("scp1"
+ (tramp-login-program "ssh")
+ (tramp-login-args (("-l" "%u") ("-p" "%p")
+ ("-1") ("-e" "none") ("%h")))
+ (tramp-async-args (("-q")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program "scp")
+ (tramp-copy-args (("-1") ("-P" "%p") ("%k" "-p") ("-q") ("-r")))
+ (tramp-copy-keep-date t)
+ (tramp-copy-recursive t)
+ (tramp-gw-args (("-o" "GlobalKnownHostsFile=/dev/null")
+ ("-o" "UserKnownHostsFile=/dev/null")
+ ("-o" "StrictHostKeyChecking=no")))
+ (tramp-default-port 22)))
+;;;###tramp-autoload
+(add-to-list 'tramp-methods
+ '("scp2"
+ (tramp-login-program "ssh")
+ (tramp-login-args (("-l" "%u") ("-p" "%p")
+ ("-2") ("-e" "none") ("%h")))
+ (tramp-async-args (("-q")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program "scp")
+ (tramp-copy-args (("-2") ("-P" "%p") ("%k" "-p") ("-q") ("-r")))
+ (tramp-copy-keep-date t)
+ (tramp-copy-recursive t)
+ (tramp-gw-args (("-o" "GlobalKnownHostsFile=/dev/null")
+ ("-o" "UserKnownHostsFile=/dev/null")
+ ("-o" "StrictHostKeyChecking=no")))
+ (tramp-default-port 22)))
+;;;###tramp-autoload
+(add-to-list 'tramp-methods
+ '("scpc"
+ (tramp-login-program "ssh")
+ (tramp-login-args (("-l" "%u") ("-p" "%p")
+ ("-o" "ControlPath=%t.%%r@%%h:%%p")
+ ("-o" "ControlMaster=yes")
+ ("-e" "none") ("%h")))
+ (tramp-async-args (("-q")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program "scp")
+ (tramp-copy-args (("-P" "%p") ("%k" "-p") ("-q")
+ ("-o" "ControlPath=%t.%%r@%%h:%%p")
+ ("-o" "ControlMaster=auto")))
+ (tramp-copy-keep-date t)
+ (tramp-gw-args (("-o" "GlobalKnownHostsFile=/dev/null")
+ ("-o" "UserKnownHostsFile=/dev/null")
+ ("-o" "StrictHostKeyChecking=no")))
+ (tramp-default-port 22)))
+;;;###tramp-autoload
+(add-to-list 'tramp-methods
+ '("scpx"
+ (tramp-login-program "ssh")
+ (tramp-login-args (("-l" "%u") ("-p" "%p")
+ ("-e" "none") ("-t" "-t")
+ ("%h") ("/bin/sh")))
+ (tramp-async-args (("-q")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program "scp")
+ (tramp-copy-args (("%k" "-p")))
+ (tramp-copy-keep-date t)
+ (tramp-gw-args (("-o" "GlobalKnownHostsFile=/dev/null")
+ ("-o" "UserKnownHostsFile=/dev/null")
+ ("-o" "StrictHostKeyChecking=no")))
+ (tramp-default-port 22)))
+;;;###tramp-autoload
+(add-to-list 'tramp-methods
+ '("sftp"
+ (tramp-login-program "ssh")
+ (tramp-login-args (("-l" "%u") ("-p" "%p") ("-e" "none") ("%h")))
+ (tramp-async-args (("-q")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program "sftp")))
+;;;###tramp-autoload
+(add-to-list 'tramp-methods
+ '("rsync"
+ (tramp-login-program "ssh")
+ (tramp-login-args (("-l" "%u") ("-p" "%p") ("-e" "none") ("%h")))
+ (tramp-async-args (("-q")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program "rsync")
+ (tramp-copy-args (("-e" "ssh") ("%k" "-t") ("-r")))
+ (tramp-copy-keep-date t)
+ (tramp-copy-keep-tmpfile t)
+ (tramp-copy-recursive t)))
+;;;###tramp-autoload
+(add-to-list 'tramp-methods
+ `("rsyncc"
+ (tramp-login-program "ssh")
+ (tramp-login-args (("-l" "%u") ("-p" "%p")
+ ("-o" "ControlPath=%t.%%r@%%h:%%p")
+ ("-o" "ControlMaster=yes")
+ ("-e" "none") ("%h")))
+ (tramp-async-args (("-q")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program "rsync")
+ (tramp-copy-args (("%k" "-t") ("-r")))
+ (tramp-copy-env (("RSYNC_RSH")
+ (,(concat
+ "ssh"
+ " -o ControlPath=%t.%%r@%%h:%%p"
+ " -o ControlMaster=auto"))))
+ (tramp-copy-keep-date t)
+ (tramp-copy-keep-tmpfile t)
+ (tramp-copy-recursive t)))
+;;;###tramp-autoload
+(add-to-list 'tramp-methods
+ '("rsh"
+ (tramp-login-program "rsh")
+ (tramp-login-args (("%h") ("-l" "%u")))
+ (tramp-remote-sh "/bin/sh")))
+;;;###tramp-autoload
+(add-to-list 'tramp-methods
+ '("remsh"
+ (tramp-login-program "remsh")
+ (tramp-login-args (("%h") ("-l" "%u")))
+ (tramp-remote-sh "/bin/sh")))
+;;;###tramp-autoload
+(add-to-list 'tramp-methods
+ '("ssh"
+ (tramp-login-program "ssh")
+ (tramp-login-args (("-l" "%u") ("-p" "%p") ("-e" "none") ("%h")))
+ (tramp-async-args (("-q")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-gw-args (("-o" "GlobalKnownHostsFile=/dev/null")
+ ("-o" "UserKnownHostsFile=/dev/null")
+ ("-o" "StrictHostKeyChecking=no")))
+ (tramp-default-port 22)))
+;;;###tramp-autoload
+(add-to-list 'tramp-methods
+ '("ssh1"
+ (tramp-login-program "ssh")
+ (tramp-login-args (("-l" "%u") ("-p" "%p")
+ ("-1") ("-e" "none") ("%h")))
+ (tramp-async-args (("-q")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-gw-args (("-o" "GlobalKnownHostsFile=/dev/null")
+ ("-o" "UserKnownHostsFile=/dev/null")
+ ("-o" "StrictHostKeyChecking=no")))
+ (tramp-default-port 22)))
+;;;###tramp-autoload
+(add-to-list 'tramp-methods
+ '("ssh2"
+ (tramp-login-program "ssh")
+ (tramp-login-args (("-l" "%u") ("-p" "%p")
+ ("-2") ("-e" "none") ("%h")))
+ (tramp-async-args (("-q")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-gw-args (("-o" "GlobalKnownHostsFile=/dev/null")
+ ("-o" "UserKnownHostsFile=/dev/null")
+ ("-o" "StrictHostKeyChecking=no")))
+ (tramp-default-port 22)))
+;;;###tramp-autoload
+(add-to-list 'tramp-methods
+ '("sshx"
+ (tramp-login-program "ssh")
+ (tramp-login-args (("-l" "%u") ("-p" "%p")
+ ("-e" "none") ("-t" "-t")
+ ("%h") ("/bin/sh")))
+ (tramp-async-args (("-q")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-gw-args (("-o" "GlobalKnownHostsFile=/dev/null")
+ ("-o" "UserKnownHostsFile=/dev/null")
+ ("-o" "StrictHostKeyChecking=no")))
+ (tramp-default-port 22)))
+;;;###tramp-autoload
+(add-to-list 'tramp-methods
+ '("telnet"
+ (tramp-login-program "telnet")
+ (tramp-login-args (("%h") ("%p")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-default-port 23)))
+;;;###tramp-autoload
+(add-to-list 'tramp-methods
+ '("su"
+ (tramp-login-program "su")
+ (tramp-login-args (("-") ("%u")))
+ (tramp-remote-sh "/bin/sh")))
+;;;###tramp-autoload
+(add-to-list 'tramp-methods
+ '("sudo"
+ (tramp-login-program "sudo")
+ (tramp-login-args (("-u" "%u") ("-s") ("-H") ("-p" "Password:")))
+ (tramp-remote-sh "/bin/sh")))
+;;;###tramp-autoload
+(add-to-list 'tramp-methods
+ '("krlogin"
+ (tramp-login-program "krlogin")
+ (tramp-login-args (("%h") ("-l" "%u") ("-x")))
+ (tramp-remote-sh "/bin/sh")))
+;;;###tramp-autoload
+(add-to-list 'tramp-methods
+ '("plink"
+ (tramp-login-program "plink")
+ (tramp-login-args (("-l" "%u") ("-P" "%p") ("-ssh") ("%h")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-password-end-of-line "xy") ;see docstring for "xy"
+ (tramp-default-port 22)))
+;;;###tramp-autoload
+(add-to-list 'tramp-methods
+ '("plink1"
+ (tramp-login-program "plink")
+ (tramp-login-args (("-l" "%u") ("-P" "%p") ("-1" "-ssh") ("%h")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-password-end-of-line "xy") ;see docstring for "xy"
+ (tramp-default-port 22)))
+;;;###tramp-autoload
+(add-to-list 'tramp-methods
+ `("plinkx"
+ (tramp-login-program "plink")
+ ;; ("%h") must be a single element, see
+ ;; `tramp-compute-multi-hops'.
+ (tramp-login-args (("-load") ("%h") ("-t")
+ (,(format
+ "env 'TERM=%s' 'PROMPT_COMMAND=' 'PS1=%s'"
+ tramp-terminal-type
+ tramp-initial-end-of-output))
+ ("/bin/sh")))
+ (tramp-remote-sh "/bin/sh")))
+;;;###tramp-autoload
+(add-to-list 'tramp-methods
+ '("pscp"
+ (tramp-login-program "plink")
+ (tramp-login-args (("-l" "%u") ("-P" "%p") ("-ssh") ("%h")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program "pscp")
+ (tramp-copy-args (("-P" "%p") ("-scp") ("%k" "-p")
+ ("-q") ("-r")))
+ (tramp-copy-keep-date t)
+ (tramp-copy-recursive t)
+ (tramp-password-end-of-line "xy") ;see docstring for "xy"
+ (tramp-default-port 22)))
+;;;###tramp-autoload
+(add-to-list 'tramp-methods
+ '("psftp"
+ (tramp-login-program "plink")
+ (tramp-login-args (("-l" "%u") ("-P" "%p") ("-ssh") ("%h")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program "pscp")
+ (tramp-copy-args (("-P" "%p") ("-sftp") ("%k" "-p")
+ ("-q") ("-r")))
+ (tramp-copy-keep-date t)
+ (tramp-copy-recursive t)
+ (tramp-password-end-of-line "xy"))) ;see docstring for "xy"
+;;;###tramp-autoload
+(add-to-list 'tramp-methods
+ '("fcp"
+ (tramp-login-program "fsh")
+ (tramp-login-args (("%h") ("-l" "%u") ("sh" "-i")))
+ (tramp-remote-sh "/bin/sh -i")
+ (tramp-copy-program "fcp")
+ (tramp-copy-args (("%k" "-p")))
+ (tramp-copy-keep-date t)))
+
+(add-to-list 'tramp-default-method-alist
+ `(,tramp-local-host-regexp "\\`root\\'" "su"))
+
+(add-to-list 'tramp-default-user-alist
+ '("\\`su\\(do\\)?\\'" nil "root"))
+(add-to-list 'tramp-default-user-alist
+ `("\\`r\\(em\\)?\\(cp\\|sh\\)\\|telnet\\|plink1?\\'"
+ nil ,(user-login-name)))
+
+(defconst tramp-completion-function-alist-rsh
+ '((tramp-parse-rhosts "/etc/hosts.equiv")
+ (tramp-parse-rhosts "~/.rhosts"))
+ "Default list of (FUNCTION FILE) pairs to be examined for rsh methods.")
+
+(defconst tramp-completion-function-alist-ssh
+ '((tramp-parse-rhosts "/etc/hosts.equiv")
+ (tramp-parse-rhosts "/etc/shosts.equiv")
+ (tramp-parse-shosts "/etc/ssh_known_hosts")
+ (tramp-parse-sconfig "/etc/ssh_config")
+ (tramp-parse-shostkeys "/etc/ssh2/hostkeys")
+ (tramp-parse-sknownhosts "/etc/ssh2/knownhosts")
+ (tramp-parse-rhosts "~/.rhosts")
+ (tramp-parse-rhosts "~/.shosts")
+ (tramp-parse-shosts "~/.ssh/known_hosts")
+ (tramp-parse-sconfig "~/.ssh/config")
+ (tramp-parse-shostkeys "~/.ssh2/hostkeys")
+ (tramp-parse-sknownhosts "~/.ssh2/knownhosts"))
+ "Default list of (FUNCTION FILE) pairs to be examined for ssh methods.")
+
+(defconst tramp-completion-function-alist-telnet
+ '((tramp-parse-hosts "/etc/hosts"))
+ "Default list of (FUNCTION FILE) pairs to be examined for telnet methods.")
+
+(defconst tramp-completion-function-alist-su
+ '((tramp-parse-passwd "/etc/passwd"))
+ "Default list of (FUNCTION FILE) pairs to be examined for su methods.")
+
+(defconst tramp-completion-function-alist-putty
+ '((tramp-parse-putty
+ "HKEY_CURRENT_USER\\Software\\SimonTatham\\PuTTY\\Sessions"))
+ "Default list of (FUNCTION REGISTRY) pairs to be examined for putty methods.")
+
+(tramp-set-completion-function "rcp" tramp-completion-function-alist-rsh)
+(tramp-set-completion-function "remcp" tramp-completion-function-alist-rsh)
+(tramp-set-completion-function "scp" tramp-completion-function-alist-ssh)
+(tramp-set-completion-function "scp1" tramp-completion-function-alist-ssh)
+(tramp-set-completion-function "scp2" tramp-completion-function-alist-ssh)
+(tramp-set-completion-function "scpc" tramp-completion-function-alist-ssh)
+(tramp-set-completion-function "scpx" tramp-completion-function-alist-ssh)
+(tramp-set-completion-function "sftp" tramp-completion-function-alist-ssh)
+(tramp-set-completion-function "rsync" tramp-completion-function-alist-ssh)
+(tramp-set-completion-function "rsyncc" tramp-completion-function-alist-ssh)
+(tramp-set-completion-function "rsh" tramp-completion-function-alist-rsh)
+(tramp-set-completion-function "remsh" tramp-completion-function-alist-rsh)
+(tramp-set-completion-function "ssh" tramp-completion-function-alist-ssh)
+(tramp-set-completion-function "ssh1" tramp-completion-function-alist-ssh)
+(tramp-set-completion-function "ssh2" tramp-completion-function-alist-ssh)
+(tramp-set-completion-function "ssh1_old" tramp-completion-function-alist-ssh)
+(tramp-set-completion-function "ssh2_old" tramp-completion-function-alist-ssh)
+(tramp-set-completion-function "sshx" tramp-completion-function-alist-ssh)
+(tramp-set-completion-function "telnet" tramp-completion-function-alist-telnet)
+(tramp-set-completion-function "su" tramp-completion-function-alist-su)
+(tramp-set-completion-function "sudo" tramp-completion-function-alist-su)
+(tramp-set-completion-function "krlogin" tramp-completion-function-alist-rsh)
+(tramp-set-completion-function "plink" tramp-completion-function-alist-ssh)
+(tramp-set-completion-function "plink1" tramp-completion-function-alist-ssh)
+(tramp-set-completion-function "plinkx" tramp-completion-function-alist-putty)
+(tramp-set-completion-function "pscp" tramp-completion-function-alist-ssh)
+(tramp-set-completion-function "fcp" tramp-completion-function-alist-ssh)
+
+;; "getconf PATH" yields:
+;; HP-UX: /usr/bin:/usr/ccs/bin:/opt/ansic/bin:/opt/langtools/bin:/opt/fortran/bin
+;; Solaris: /usr/xpg4/bin:/usr/ccs/bin:/usr/bin:/opt/SUNWspro/bin
+;; GNU/Linux (Debian, Suse): /bin:/usr/bin
+;; FreeBSD: /usr/bin:/bin:/usr/sbin:/sbin: - beware trailing ":"!
+;; IRIX64: /usr/bin
+(defcustom tramp-remote-path
+ '(tramp-default-remote-path "/usr/sbin" "/usr/local/bin"
+ "/local/bin" "/local/freeware/bin" "/local/gnu/bin"
+ "/usr/freeware/bin" "/usr/pkg/bin" "/usr/contrib/bin")
+ "*List of directories to search for executables on remote host.
+For every remote host, this variable will be set buffer local,
+keeping the list of existing directories on that host.
+
+You can use `~' in this list, but when searching for a shell which groks
+tilde expansion, all directory names starting with `~' will be ignored.
+
+`Default Directories' represent the list of directories given by
+the command \"getconf PATH\". It is recommended to use this
+entry on top of this list, because these are the default
+directories for POSIX compatible commands.
+
+`Private Directories' are the settings of the $PATH environment,
+as given in your `~/.profile'."
+ :group 'tramp
+ :type '(repeat (choice
+ (const :tag "Default Directories" tramp-default-remote-path)
+ (const :tag "Private Directories" tramp-own-remote-path)
+ (string :tag "Directory"))))
+
+(defcustom tramp-remote-process-environment
+ `("HISTFILE=$HOME/.tramp_history" "HISTSIZE=1" "LC_ALL=C"
+ ,(format "TERM=%s" tramp-terminal-type)
+ "EMACS=t" ;; Deprecated.
+ ,(format "INSIDE_EMACS='%s,tramp:%s'" emacs-version tramp-version)
+ "CDPATH=" "HISTORY=" "MAIL=" "MAILCHECK=" "MAILPATH="
+ "autocorrect=" "correct=")
+
+ "*List of environment variables to be set on the remote host.
+
+Each element should be a string of the form ENVVARNAME=VALUE. An
+entry ENVVARNAME= diables the corresponding environment variable,
+which might have been set in the init files like ~/.profile.
+
+Special handling is applied to the PATH environment, which should
+not be set here. Instead of, it should be set via `tramp-remote-path'."
+ :group 'tramp
+ :type '(repeat string))
+
+(defcustom tramp-sh-extra-args '(("/bash\\'" . "-norc -noprofile"))
+ "*Alist specifying extra arguments to pass to the remote shell.
+Entries are (REGEXP . ARGS) where REGEXP is a regular expression
+matching the shell file name and ARGS is a string specifying the
+arguments.
+
+This variable is only used when Tramp needs to start up another shell
+for tilde expansion. The extra arguments should typically prevent the
+shell from reading its init file."
+ :group 'tramp
+ ;; This might be the wrong way to test whether the widget type
+ ;; `alist' is available. Who knows the right way to test it?
+ :type (if (get 'alist 'widget-type)
+ '(alist :key-type string :value-type string)
+ '(repeat (cons string string))))
+
+(defconst tramp-actions-before-shell
+ '((tramp-login-prompt-regexp tramp-action-login)
+ (tramp-password-prompt-regexp tramp-action-password)
+ (tramp-wrong-passwd-regexp tramp-action-permission-denied)
+ (shell-prompt-pattern tramp-action-succeed)
+ (tramp-shell-prompt-pattern tramp-action-succeed)
+ (tramp-yesno-prompt-regexp tramp-action-yesno)
+ (tramp-yn-prompt-regexp tramp-action-yn)
+ (tramp-terminal-prompt-regexp tramp-action-terminal)
+ (tramp-process-alive-regexp tramp-action-process-alive))
+ "List of pattern/action pairs.
+Whenever a pattern matches, the corresponding action is performed.
+Each item looks like (PATTERN ACTION).
+
+The PATTERN should be a symbol, a variable. The value of this
+variable gives the regular expression to search for. Note that the
+regexp must match at the end of the buffer, \"\\'\" is implicitly
+appended to it.
+
+The ACTION should also be a symbol, but a function. When the
+corresponding PATTERN matches, the ACTION function is called.")
+
+(defconst tramp-actions-copy-out-of-band
+ '((tramp-password-prompt-regexp tramp-action-password)
+ (tramp-wrong-passwd-regexp tramp-action-permission-denied)
+ (tramp-copy-failed-regexp tramp-action-permission-denied)
+ (tramp-process-alive-regexp tramp-action-out-of-band))
+ "List of pattern/action pairs.
+This list is used for copying/renaming with out-of-band methods.
+
+See `tramp-actions-before-shell' for more info.")
+
+(defconst tramp-uudecode
+ "(echo begin 600 /tmp/tramp.$$; tail +2) | uudecode
+cat /tmp/tramp.$$
+rm -f /tmp/tramp.$$"
+ "Shell function to implement `uudecode' to standard output.
+Many systems support `uudecode -o /dev/stdout' or `uudecode -o -'
+for this or `uudecode -p', but some systems don't, and for them
+we have this shell function.")
+
+(defconst tramp-perl-file-truename
+ "%s -e '
+use File::Spec;
+use Cwd \"realpath\";
+
+sub recursive {
+ my ($volume, @dirs) = @_;
+ my $real = realpath(File::Spec->catpath(
+ $volume, File::Spec->catdir(@dirs), \"\"));
+ if ($real) {
+ my ($vol, $dir) = File::Spec->splitpath($real, 1);
+ return ($vol, File::Spec->splitdir($dir));
+ }
+ else {
+ my $last = pop(@dirs);
+ ($volume, @dirs) = recursive($volume, @dirs);
+ push(@dirs, $last);
+ return ($volume, @dirs);
+ }
+}
+
+$result = realpath($ARGV[0]);
+if (!$result) {
+ my ($vol, $dir) = File::Spec->splitpath($ARGV[0], 1);
+ ($vol, @dirs) = recursive($vol, File::Spec->splitdir($dir));
+
+ $result = File::Spec->catpath($vol, File::Spec->catdir(@dirs), \"\");
+}
+
+if ($ARGV[0] =~ /\\/$/) {
+ $result = $result . \"/\";
+}
+
+print \"\\\"$result\\\"\\n\";
+' \"$1\" 2>/dev/null"
+ "Perl script to produce output suitable for use with `file-truename'
+on the remote file system.
+Escape sequence %s is replaced with name of Perl binary.
+This string is passed to `format', so percent characters need to be doubled.")
+
+(defconst tramp-perl-file-name-all-completions
+ "%s -e 'sub case {
+ my $str = shift;
+ if ($ARGV[2]) {
+ return lc($str);
+ }
+ else {
+ return $str;
+ }
+}
+opendir(d, $ARGV[0]) || die(\"$ARGV[0]: $!\\nfail\\n\");
+@files = readdir(d); closedir(d);
+foreach $f (@files) {
+ if (case(substr($f, 0, length($ARGV[1]))) eq case($ARGV[1])) {
+ if (-d \"$ARGV[0]/$f\") {
+ print \"$f/\\n\";
+ }
+ else {
+ print \"$f\\n\";
+ }
+ }
+}
+print \"ok\\n\"
+' \"$1\" \"$2\" \"$3\" 2>/dev/null"
+ "Perl script to produce output suitable for use with
+`file-name-all-completions' on the remote file system. Escape
+sequence %s is replaced with name of Perl binary. This string is
+passed to `format', so percent characters need to be doubled.")
+
+;; Perl script to implement `file-attributes' in a Lisp `read'able
+;; output. If you are hacking on this, note that you get *no* output
+;; unless this spits out a complete line, including the '\n' at the
+;; end.
+;; The device number is returned as "-1", because there will be a virtual
+;; device number set in `tramp-sh-handle-file-attributes'.
+(defconst tramp-perl-file-attributes
+ "%s -e '
+@stat = lstat($ARGV[0]);
+if (!@stat) {
+ print \"nil\\n\";
+ exit 0;
+}
+if (($stat[2] & 0170000) == 0120000)
+{
+ $type = readlink($ARGV[0]);
+ $type = \"\\\"$type\\\"\";
+}
+elsif (($stat[2] & 0170000) == 040000)
+{
+ $type = \"t\";
+}
+else
+{
+ $type = \"nil\"
+};
+$uid = ($ARGV[1] eq \"integer\") ? $stat[4] : \"\\\"\" . getpwuid($stat[4]) . \"\\\"\";
+$gid = ($ARGV[1] eq \"integer\") ? $stat[5] : \"\\\"\" . getgrgid($stat[5]) . \"\\\"\";
+printf(
+ \"(%%s %%u %%s %%s (%%u %%u) (%%u %%u) (%%u %%u) %%u.0 %%u t (%%u . %%u) -1)\\n\",
+ $type,
+ $stat[3],
+ $uid,
+ $gid,
+ $stat[8] >> 16 & 0xffff,
+ $stat[8] & 0xffff,
+ $stat[9] >> 16 & 0xffff,
+ $stat[9] & 0xffff,
+ $stat[10] >> 16 & 0xffff,
+ $stat[10] & 0xffff,
+ $stat[7],
+ $stat[2],
+ $stat[1] >> 16 & 0xffff,
+ $stat[1] & 0xffff
+);' \"$1\" \"$2\" 2>/dev/null"
+ "Perl script to produce output suitable for use with `file-attributes'
+on the remote file system.
+Escape sequence %s is replaced with name of Perl binary.
+This string is passed to `format', so percent characters need to be doubled.")
+
+(defconst tramp-perl-directory-files-and-attributes
+ "%s -e '
+chdir($ARGV[0]) or printf(\"\\\"Cannot change to $ARGV[0]: $''!''\\\"\\n\"), exit();
+opendir(DIR,\".\") or printf(\"\\\"Cannot open directory $ARGV[0]: $''!''\\\"\\n\"), exit();
+@list = readdir(DIR);
+closedir(DIR);
+$n = scalar(@list);
+printf(\"(\\n\");
+for($i = 0; $i < $n; $i++)
+{
+ $filename = $list[$i];
+ @stat = lstat($filename);
+ if (($stat[2] & 0170000) == 0120000)
+ {
+ $type = readlink($filename);
+ $type = \"\\\"$type\\\"\";
+ }
+ elsif (($stat[2] & 0170000) == 040000)
+ {
+ $type = \"t\";
+ }
+ else
+ {
+ $type = \"nil\"
+ };
+ $uid = ($ARGV[1] eq \"integer\") ? $stat[4] : \"\\\"\" . getpwuid($stat[4]) . \"\\\"\";
+ $gid = ($ARGV[1] eq \"integer\") ? $stat[5] : \"\\\"\" . getgrgid($stat[5]) . \"\\\"\";
+ printf(
+ \"(\\\"%%s\\\" %%s %%u %%s %%s (%%u %%u) (%%u %%u) (%%u %%u) %%u.0 %%u t (%%u . %%u) (%%u . %%u))\\n\",
+ $filename,
+ $type,
+ $stat[3],
+ $uid,
+ $gid,
+ $stat[8] >> 16 & 0xffff,
+ $stat[8] & 0xffff,
+ $stat[9] >> 16 & 0xffff,
+ $stat[9] & 0xffff,
+ $stat[10] >> 16 & 0xffff,
+ $stat[10] & 0xffff,
+ $stat[7],
+ $stat[2],
+ $stat[1] >> 16 & 0xffff,
+ $stat[1] & 0xffff,
+ $stat[0] >> 16 & 0xffff,
+ $stat[0] & 0xffff);
+}
+printf(\")\\n\");' \"$1\" \"$2\" 2>/dev/null"
+ "Perl script implementing `directory-files-attributes' as Lisp `read'able
+output.
+Escape sequence %s is replaced with name of Perl binary.
+This string is passed to `format', so percent characters need to be doubled.")
+
+;; These two use base64 encoding.
+(defconst tramp-perl-encode-with-module
+ "%s -MMIME::Base64 -0777 -ne 'print encode_base64($_)' 2>/dev/null"
+ "Perl program to use for encoding a file.
+Escape sequence %s is replaced with name of Perl binary.
+This string is passed to `format', so percent characters need to be doubled.
+This implementation requires the MIME::Base64 Perl module to be installed
+on the remote host.")
+
+(defconst tramp-perl-decode-with-module
+ "%s -MMIME::Base64 -0777 -ne 'print decode_base64($_)' 2>/dev/null"
+ "Perl program to use for decoding a file.
+Escape sequence %s is replaced with name of Perl binary.
+This string is passed to `format', so percent characters need to be doubled.
+This implementation requires the MIME::Base64 Perl module to be installed
+on the remote host.")
+
+(defconst tramp-perl-encode
+ "%s -e '
+# This script contributed by Juanma Barranquero <lektu@terra.es>.
+# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# Free Software Foundation, Inc.
+use strict;
+
+my %%trans = do {
+ my $i = 0;
+ map {(substr(unpack(q(B8), chr $i++), 2, 6), $_)}
+ split //, q(ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/);
+};
+
+binmode(\\*STDIN);
+
+# We read in chunks of 54 bytes, to generate output lines
+# of 72 chars (plus end of line)
+$/ = \\54;
+
+while (my $data = <STDIN>) {
+ my $pad = q();
+
+ # Only for the last chunk, and only if did not fill the last three-byte packet
+ if (eof) {
+ my $mod = length($data) %% 3;
+ $pad = q(=) x (3 - $mod) if $mod;
+ }
+
+ # Not the fastest method, but it is simple: unpack to binary string, split
+ # by groups of 6 bits and convert back from binary to byte; then map into
+ # the translation table
+ print
+ join q(),
+ map($trans{$_},
+ (substr(unpack(q(B*), $data) . q(00000), 0, 432) =~ /....../g)),
+ $pad,
+ qq(\\n);
+}' 2>/dev/null"
+ "Perl program to use for encoding a file.
+Escape sequence %s is replaced with name of Perl binary.
+This string is passed to `format', so percent characters need to be doubled.")
+
+(defconst tramp-perl-decode
+ "%s -e '
+# This script contributed by Juanma Barranquero <lektu@terra.es>.
+# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# Free Software Foundation, Inc.
+use strict;
+
+my %%trans = do {
+ my $i = 0;
+ map {($_, substr(unpack(q(B8), chr $i++), 2, 6))}
+ split //, q(ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/)
+};
+
+my %%bytes = map {(unpack(q(B8), chr $_), chr $_)} 0 .. 255;
+
+binmode(\\*STDOUT);
+
+# We are going to accumulate into $pending to accept any line length
+# (we do not check they are <= 76 chars as the RFC says)
+my $pending = q();
+
+while (my $data = <STDIN>) {
+ chomp $data;
+
+ # If we find one or two =, we have reached the end and
+ # any following data is to be discarded
+ my $finished = $data =~ s/(==?).*/$1/;
+ $pending .= $data;
+
+ my $len = length($pending);
+ my $chunk = substr($pending, 0, $len & ~3);
+ $pending = substr($pending, $len & ~3 + 1);
+
+ # Easy method: translate from chars to (pregenerated) six-bit packets, join,
+ # split in 8-bit chunks and convert back to char.
+ print join q(),
+ map $bytes{$_},
+ ((join q(), map {$trans{$_} || q()} split //, $chunk) =~ /......../g);
+
+ last if $finished;
+}' 2>/dev/null"
+ "Perl program to use for decoding a file.
+Escape sequence %s is replaced with name of Perl binary.
+This string is passed to `format', so percent characters need to be doubled.")
+
+(defconst tramp-vc-registered-read-file-names
+ "echo \"(\"
+while read file; do
+ if %s \"$file\"; then
+ echo \"(\\\"$file\\\" \\\"file-exists-p\\\" t)\"
+ else
+ echo \"(\\\"$file\\\" \\\"file-exists-p\\\" nil)\"
+ fi
+ if %s \"$file\"; then
+ echo \"(\\\"$file\\\" \\\"file-readable-p\\\" t)\"
+ else
+ echo \"(\\\"$file\\\" \\\"file-readable-p\\\" nil)\"
+ fi
+done
+echo \")\""
+ "Script to check existence of VC related files.
+It must be send formatted with two strings; the tests for file
+existence, and file readability. Input shall be read via
+here-document, otherwise the command could exceed maximum length
+of command line.")
+
+(defconst tramp-file-mode-type-map
+ '((0 . "-") ; Normal file (SVID-v2 and XPG2)
+ (1 . "p") ; fifo
+ (2 . "c") ; character device
+ (3 . "m") ; multiplexed character device (v7)
+ (4 . "d") ; directory
+ (5 . "?") ; Named special file (XENIX)
+ (6 . "b") ; block device
+ (7 . "?") ; multiplexed block device (v7)
+ (8 . "-") ; regular file
+ (9 . "n") ; network special file (HP-UX)
+ (10 . "l") ; symlink
+ (11 . "?") ; ACL shadow inode (Solaris, not userspace)
+ (12 . "s") ; socket
+ (13 . "D") ; door special (Solaris)
+ (14 . "w")) ; whiteout (BSD)
+ "A list of file types returned from the `stat' system call.
+This is used to map a mode number to a permission string.")
+
+;; New handlers should be added here. The following operations can be
+;; handled using the normal primitives: file-name-sans-versions,
+;; get-file-buffer.
+(defconst tramp-sh-file-name-handler-alist
+ '((load . tramp-handle-load)
+ (make-symbolic-link . tramp-sh-handle-make-symbolic-link)
+ (file-name-as-directory . tramp-handle-file-name-as-directory)
+ (file-name-directory . tramp-handle-file-name-directory)
+ (file-name-nondirectory . tramp-handle-file-name-nondirectory)
+ (file-truename . tramp-sh-handle-file-truename)
+ (file-exists-p . tramp-sh-handle-file-exists-p)
+ (file-directory-p . tramp-sh-handle-file-directory-p)
+ (file-executable-p . tramp-sh-handle-file-executable-p)
+ (file-readable-p . tramp-sh-handle-file-readable-p)
+ (file-regular-p . tramp-handle-file-regular-p)
+ (file-symlink-p . tramp-handle-file-symlink-p)
+ (file-writable-p . tramp-sh-handle-file-writable-p)
+ (file-ownership-preserved-p . tramp-sh-handle-file-ownership-preserved-p)
+ (file-newer-than-file-p . tramp-sh-handle-file-newer-than-file-p)
+ (file-attributes . tramp-sh-handle-file-attributes)
+ (file-modes . tramp-handle-file-modes)
+ (directory-files . tramp-handle-directory-files)
+ (directory-files-and-attributes
+ . tramp-sh-handle-directory-files-and-attributes)
+ (file-name-all-completions . tramp-sh-handle-file-name-all-completions)
+ (file-name-completion . tramp-handle-file-name-completion)
+ (add-name-to-file . tramp-sh-handle-add-name-to-file)
+ (copy-file . tramp-sh-handle-copy-file)
+ (copy-directory . tramp-sh-handle-copy-directory)
+ (rename-file . tramp-sh-handle-rename-file)
+ (set-file-modes . tramp-sh-handle-set-file-modes)
+ (set-file-times . tramp-sh-handle-set-file-times)
+ (make-directory . tramp-sh-handle-make-directory)
+ (delete-directory . tramp-sh-handle-delete-directory)
+ (delete-file . tramp-sh-handle-delete-file)
+ (directory-file-name . tramp-handle-directory-file-name)
+ ;; `executable-find' is not official yet.
+ (executable-find . tramp-sh-handle-executable-find)
+ (start-file-process . tramp-sh-handle-start-file-process)
+ (process-file . tramp-sh-handle-process-file)
+ (shell-command . tramp-sh-handle-shell-command)
+ (insert-directory . tramp-sh-handle-insert-directory)
+ (expand-file-name . tramp-sh-handle-expand-file-name)
+ (substitute-in-file-name . tramp-handle-substitute-in-file-name)
+ (file-local-copy . tramp-sh-handle-file-local-copy)
+ (file-remote-p . tramp-handle-file-remote-p)
+ (insert-file-contents . tramp-handle-insert-file-contents)
+ (insert-file-contents-literally
+ . tramp-sh-handle-insert-file-contents-literally)
+ (write-region . tramp-sh-handle-write-region)
+ (find-backup-file-name . tramp-handle-find-backup-file-name)
+ (make-auto-save-file-name . tramp-sh-handle-make-auto-save-file-name)
+ (unhandled-file-name-directory . tramp-handle-unhandled-file-name-directory)
+ (dired-compress-file . tramp-sh-handle-dired-compress-file)
+ (dired-recursive-delete-directory
+ . tramp-sh-handle-dired-recursive-delete-directory)
+ (dired-uncache . tramp-handle-dired-uncache)
+ (set-visited-file-modtime . tramp-sh-handle-set-visited-file-modtime)
+ (verify-visited-file-modtime . tramp-sh-handle-verify-visited-file-modtime)
+ (file-selinux-context . tramp-sh-handle-file-selinux-context)
+ (set-file-selinux-context . tramp-sh-handle-set-file-selinux-context)
+ (vc-registered . tramp-sh-handle-vc-registered))
+ "Alist of handler functions.
+Operations not mentioned here will be handled by the normal Emacs functions.")
+
+;; This must be the last entry, because `identity' always matches.
+;;;###tramp-autoload
+(add-to-list 'tramp-foreign-file-name-handler-alist
+ '(identity . tramp-sh-file-name-handler) 'append)
+
+;;; File Name Handler Functions:
+
+(defun tramp-sh-handle-make-symbolic-link
+ (filename linkname &optional ok-if-already-exists)
+ "Like `make-symbolic-link' for Tramp files.
+If LINKNAME is a non-Tramp file, it is used verbatim as the target of
+the symlink. If LINKNAME is a Tramp file, only the localname component is
+used as the target of the symlink.
+
+If LINKNAME is a Tramp file and the localname component is relative, then
+it is expanded first, before the localname component is taken. Note that
+this can give surprising results if the user/host for the source and
+target of the symlink differ."
+ (with-parsed-tramp-file-name linkname l
+ (let ((ln (tramp-get-remote-ln l))
+ (cwd (tramp-run-real-handler
+ 'file-name-directory (list l-localname))))
+ (unless ln
+ (tramp-error
+ l 'file-error
+ "Making a symbolic link. ln(1) does not exist on the remote host."))
+
+ ;; Do the 'confirm if exists' thing.
+ (when (file-exists-p linkname)
+ ;; What to do?
+ (if (or (null ok-if-already-exists) ; not allowed to exist
+ (and (numberp ok-if-already-exists)
+ (not (yes-or-no-p
+ (format
+ "File %s already exists; make it a link anyway? "
+ l-localname)))))
+ (tramp-error
+ l 'file-already-exists "File %s already exists" l-localname)
+ (delete-file linkname)))
+
+ ;; If FILENAME is a Tramp name, use just the localname component.
+ (when (tramp-tramp-file-p filename)
+ (setq filename
+ (tramp-file-name-localname
+ (tramp-dissect-file-name (expand-file-name filename)))))
+
+ (tramp-flush-file-property l (file-name-directory l-localname))
+ (tramp-flush-file-property l l-localname)
+
+ ;; Right, they are on the same host, regardless of user, method, etc.
+ ;; We now make the link on the remote machine. This will occur as the user
+ ;; that FILENAME belongs to.
+ (tramp-send-command-and-check
+ l
+ (format
+ "cd %s && %s -sf %s %s"
+ (tramp-shell-quote-argument cwd)
+ ln
+ (tramp-shell-quote-argument filename)
+ (tramp-shell-quote-argument l-localname))
+ t))))
+
+(defun tramp-sh-handle-file-truename (filename &optional counter prev-dirs)
+ "Like `file-truename' for Tramp files."
+ (with-parsed-tramp-file-name (expand-file-name filename) nil
+ (with-file-property v localname "file-truename"
+ (let ((result nil)) ; result steps in reverse order
+ (tramp-message v 4 "Finding true name for `%s'" filename)
+ (cond
+ ;; Use GNU readlink --canonicalize-missing where available.
+ ((tramp-get-remote-readlink v)
+ (setq result
+ (tramp-send-command-and-read
+ v
+ (format "echo \"\\\"`%s --canonicalize-missing %s`\\\"\""
+ (tramp-get-remote-readlink v)
+ (tramp-shell-quote-argument localname)))))
+
+ ;; Use Perl implementation.
+ ((and (tramp-get-remote-perl v)
+ (tramp-get-connection-property v "perl-file-spec" nil)
+ (tramp-get-connection-property v "perl-cwd-realpath" nil))
+ (tramp-maybe-send-script
+ v tramp-perl-file-truename "tramp_perl_file_truename")
+ (setq result
+ (tramp-send-command-and-read
+ v
+ (format "tramp_perl_file_truename %s"
+ (tramp-shell-quote-argument localname)))))
+
+ ;; Do it yourself. We bind `directory-sep-char' here for
+ ;; XEmacs on Windows, which would otherwise use backslash.
+ (t (let* ((directory-sep-char ?/)
+ (steps (tramp-compat-split-string localname "/"))
+ (localnamedir (tramp-run-real-handler
+ 'file-name-as-directory (list localname)))
+ (is-dir (string= localname localnamedir))
+ (thisstep nil)
+ (numchase 0)
+ ;; Don't make the following value larger than
+ ;; necessary. People expect an error message in a
+ ;; timely fashion when something is wrong;
+ ;; otherwise they might think that Emacs is hung.
+ ;; Of course, correctness has to come first.
+ (numchase-limit 20)
+ symlink-target)
+ (while (and steps (< numchase numchase-limit))
+ (setq thisstep (pop steps))
+ (tramp-message
+ v 5 "Check %s"
+ (mapconcat 'identity
+ (append '("") (reverse result) (list thisstep))
+ "/"))
+ (setq symlink-target
+ (nth 0 (file-attributes
+ (tramp-make-tramp-file-name
+ method user host
+ (mapconcat 'identity
+ (append '("")
+ (reverse result)
+ (list thisstep))
+ "/")))))
+ (cond ((string= "." thisstep)
+ (tramp-message v 5 "Ignoring step `.'"))
+ ((string= ".." thisstep)
+ (tramp-message v 5 "Processing step `..'")
+ (pop result))
+ ((stringp symlink-target)
+ ;; It's a symlink, follow it.
+ (tramp-message v 5 "Follow symlink to %s" symlink-target)
+ (setq numchase (1+ numchase))
+ (when (file-name-absolute-p symlink-target)
+ (setq result nil))
+ ;; If the symlink was absolute, we'll get a string like
+ ;; "/user@host:/some/target"; extract the
+ ;; "/some/target" part from it.
+ (when (tramp-tramp-file-p symlink-target)
+ (unless (tramp-equal-remote filename symlink-target)
+ (tramp-error
+ v 'file-error
+ "Symlink target `%s' on wrong host" symlink-target))
+ (setq symlink-target localname))
+ (setq steps
+ (append (tramp-compat-split-string
+ symlink-target "/")
+ steps)))
+ (t
+ ;; It's a file.
+ (setq result (cons thisstep result)))))
+ (when (>= numchase numchase-limit)
+ (tramp-error
+ v 'file-error
+ "Maximum number (%d) of symlinks exceeded" numchase-limit))
+ (setq result (reverse result))
+ ;; Combine list to form string.
+ (setq result
+ (if result
+ (mapconcat 'identity (cons "" result) "/")
+ "/"))
+ (when (and is-dir (or (string= "" result)
+ (not (string= (substring result -1) "/"))))
+ (setq result (concat result "/"))))))
+
+ (tramp-message v 4 "True name of `%s' is `%s'" filename result)
+ (tramp-make-tramp-file-name method user host result)))))
+
+;; Basic functions.
+
+(defun tramp-sh-handle-file-exists-p (filename)
+ "Like `file-exists-p' for Tramp files."
+ (with-parsed-tramp-file-name filename nil
+ (with-file-property v localname "file-exists-p"
+ (or (not (null (tramp-get-file-property
+ v localname "file-attributes-integer" nil)))
+ (not (null (tramp-get-file-property
+ v localname "file-attributes-string" nil)))
+ (tramp-send-command-and-check
+ v
+ (format
+ "%s %s"
+ (tramp-get-file-exists-command v)
+ (tramp-shell-quote-argument localname)))))))
+
+;; CCC: This should check for an error condition and signal failure
+;; when something goes wrong.
+;; Daniel Pittman <daniel@danann.net>
+(defun tramp-sh-handle-file-attributes (filename &optional id-format)
+ "Like `file-attributes' for Tramp files."
+ (unless id-format (setq id-format 'integer))
+ ;; Don't modify `last-coding-system-used' by accident.
+ (let ((last-coding-system-used last-coding-system-used))
+ (with-parsed-tramp-file-name (expand-file-name filename) nil
+ (with-file-property v localname (format "file-attributes-%s" id-format)
+ (save-excursion
+ (tramp-convert-file-attributes
+ v
+ (cond
+ ((tramp-get-remote-stat v)
+ (tramp-do-file-attributes-with-stat v localname id-format))
+ ((tramp-get-remote-perl v)
+ (tramp-do-file-attributes-with-perl v localname id-format))
+ (t
+ (tramp-do-file-attributes-with-ls v localname id-format)))))))))
+
+(defun tramp-do-file-attributes-with-ls (vec localname &optional id-format)
+ "Implement `file-attributes' for Tramp files using the ls(1) command."
+ (let (symlinkp dirp
+ res-inode res-filemodes res-numlinks
+ res-uid res-gid res-size res-symlink-target)
+ (tramp-message vec 5 "file attributes with ls: %s" localname)
+ (tramp-send-command
+ vec
+ (format "(%s %s || %s -h %s) && %s %s %s"
+ (tramp-get-file-exists-command vec)
+ (tramp-shell-quote-argument localname)
+ (tramp-get-test-command vec)
+ (tramp-shell-quote-argument localname)
+ (tramp-get-ls-command vec)
+ (if (eq id-format 'integer) "-ildn" "-ild")
+ (tramp-shell-quote-argument localname)))
+ ;; parse `ls -l' output ...
+ (with-current-buffer (tramp-get-buffer vec)
+ (when (> (buffer-size) 0)
+ (goto-char (point-min))
+ ;; ... inode
+ (setq res-inode
+ (condition-case err
+ (read (current-buffer))
+ (invalid-read-syntax
+ (when (and (equal (cadr err)
+ "Integer constant overflow in reader")
+ (string-match
+ "^[0-9]+\\([0-9][0-9][0-9][0-9][0-9]\\)\\'"
+ (car (cddr err))))
+ (let* ((big (read (substring (car (cddr err)) 0
+ (match-beginning 1))))
+ (small (read (match-string 1 (car (cddr err)))))
+ (twiddle (/ small 65536)))
+ (cons (+ big twiddle)
+ (- small (* twiddle 65536))))))))
+ ;; ... file mode flags
+ (setq res-filemodes (symbol-name (read (current-buffer))))
+ ;; ... number links
+ (setq res-numlinks (read (current-buffer)))
+ ;; ... uid and gid
+ (setq res-uid (read (current-buffer)))
+ (setq res-gid (read (current-buffer)))
+ (if (eq id-format 'integer)
+ (progn
+ (unless (numberp res-uid) (setq res-uid -1))
+ (unless (numberp res-gid) (setq res-gid -1)))
+ (progn
+ (unless (stringp res-uid) (setq res-uid (symbol-name res-uid)))
+ (unless (stringp res-gid) (setq res-gid (symbol-name res-gid)))))
+ ;; ... size
+ (setq res-size (read (current-buffer)))
+ ;; From the file modes, figure out other stuff.
+ (setq symlinkp (eq ?l (aref res-filemodes 0)))
+ (setq dirp (eq ?d (aref res-filemodes 0)))
+ ;; if symlink, find out file name pointed to
+ (when symlinkp
+ (search-forward "-> ")
+ (setq res-symlink-target (buffer-substring (point) (point-at-eol))))
+ ;; return data gathered
+ (list
+ ;; 0. t for directory, string (name linked to) for symbolic
+ ;; link, or nil.
+ (or dirp res-symlink-target)
+ ;; 1. Number of links to file.
+ res-numlinks
+ ;; 2. File uid.
+ res-uid
+ ;; 3. File gid.
+ res-gid
+ ;; 4. Last access time, as a list of two integers. First
+ ;; integer has high-order 16 bits of time, second has low 16
+ ;; bits.
+ ;; 5. Last modification time, likewise.
+ ;; 6. Last status change time, likewise.
+ '(0 0) '(0 0) '(0 0) ;CCC how to find out?
+ ;; 7. Size in bytes (-1, if number is out of range).
+ res-size
+ ;; 8. File modes, as a string of ten letters or dashes as in ls -l.
+ res-filemodes
+ ;; 9. t if file's gid would change if file were deleted and
+ ;; recreated. Will be set in `tramp-convert-file-attributes'
+ t
+ ;; 10. inode number.
+ res-inode
+ ;; 11. Device number. Will be replaced by a virtual device number.
+ -1
+ )))))
+
+(defun tramp-do-file-attributes-with-perl
+ (vec localname &optional id-format)
+ "Implement `file-attributes' for Tramp files using a Perl script."
+ (tramp-message vec 5 "file attributes with perl: %s" localname)
+ (tramp-maybe-send-script
+ vec tramp-perl-file-attributes "tramp_perl_file_attributes")
+ (tramp-send-command-and-read
+ vec
+ (format "tramp_perl_file_attributes %s %s"
+ (tramp-shell-quote-argument localname) id-format)))
+
+(defun tramp-do-file-attributes-with-stat
+ (vec localname &optional id-format)
+ "Implement `file-attributes' for Tramp files using stat(1) command."
+ (tramp-message vec 5 "file attributes with stat: %s" localname)
+ (tramp-send-command-and-read
+ vec
+ (format
+ ;; On Opsware, pdksh (which is the true name of ksh there) doesn't
+ ;; parse correctly the sequence "((". Therefore, we add a space.
+ "( (%s %s || %s -h %s) && %s -c '((\"%%N\") %%h %s %s %%Xe0 %%Ye0 %%Ze0 %%se0 \"%%A\" t %%ie0 -1)' %s || echo nil)"
+ (tramp-get-file-exists-command vec)
+ (tramp-shell-quote-argument localname)
+ (tramp-get-test-command vec)
+ (tramp-shell-quote-argument localname)
+ (tramp-get-remote-stat vec)
+ (if (eq id-format 'integer) "%u" "\"%U\"")
+ (if (eq id-format 'integer) "%g" "\"%G\"")
+ (tramp-shell-quote-argument localname))))
+
+(defun tramp-sh-handle-set-visited-file-modtime (&optional time-list)
+ "Like `set-visited-file-modtime' for Tramp files."
+ (unless (buffer-file-name)
+ (error "Can't set-visited-file-modtime: buffer `%s' not visiting a file"
+ (buffer-name)))
+ (if time-list
+ (tramp-run-real-handler 'set-visited-file-modtime (list time-list))
+ (let ((f (buffer-file-name))
+ coding-system-used)
+ (with-parsed-tramp-file-name f nil
+ (let* ((attr (file-attributes f))
+ ;; '(-1 65535) means file doesn't exists yet.
+ (modtime (or (nth 5 attr) '(-1 65535))))
+ (when (boundp 'last-coding-system-used)
+ (setq coding-system-used (symbol-value 'last-coding-system-used)))
+ ;; We use '(0 0) as a don't-know value. See also
+ ;; `tramp-do-file-attributes-with-ls'.
+ (if (not (equal modtime '(0 0)))
+ (tramp-run-real-handler 'set-visited-file-modtime (list modtime))
+ (progn
+ (tramp-send-command
+ v
+ (format "%s -ild %s"
+ (tramp-get-ls-command v)
+ (tramp-shell-quote-argument localname)))
+ (setq attr (buffer-substring (point)
+ (progn (end-of-line) (point)))))
+ (tramp-set-file-property
+ v localname "visited-file-modtime-ild" attr))
+ (when (boundp 'last-coding-system-used)
+ (set 'last-coding-system-used coding-system-used))
+ nil)))))
+
+;; This function makes the same assumption as
+;; `tramp-sh-handle-set-visited-file-modtime'.
+(defun tramp-sh-handle-verify-visited-file-modtime (buf)
+ "Like `verify-visited-file-modtime' for Tramp files.
+At the time `verify-visited-file-modtime' calls this function, we
+already know that the buffer is visiting a file and that
+`visited-file-modtime' does not return 0. Do not call this
+function directly, unless those two cases are already taken care
+of."
+ (with-current-buffer buf
+ (let ((f (buffer-file-name)))
+ ;; There is no file visiting the buffer, or the buffer has no
+ ;; recorded last modification time, or there is no established
+ ;; connection.
+ (if (or (not f)
+ (eq (visited-file-modtime) 0)
+ (not (tramp-file-name-handler 'file-remote-p f nil 'connected)))
+ t
+ (with-parsed-tramp-file-name f nil
+ (let* ((remote-file-name-inhibit-cache t)
+ (attr (file-attributes f))
+ (modtime (nth 5 attr))
+ (mt (visited-file-modtime)))
+
+ (cond
+ ;; File exists, and has a known modtime.
+ ((and attr (not (equal modtime '(0 0))))
+ (< (abs (tramp-time-diff
+ modtime
+ ;; For compatibility, deal with both the old
+ ;; (HIGH . LOW) and the new (HIGH LOW) return
+ ;; values of `visited-file-modtime'.
+ (if (atom (cdr mt))
+ (list (car mt) (cdr mt))
+ mt)))
+ 2))
+ ;; Modtime has the don't know value.
+ (attr
+ (tramp-send-command
+ v
+ (format "%s -ild %s"
+ (tramp-get-ls-command v)
+ (tramp-shell-quote-argument localname)))
+ (with-current-buffer (tramp-get-buffer v)
+ (setq attr (buffer-substring
+ (point) (progn (end-of-line) (point)))))
+ (equal
+ attr
+ (tramp-get-file-property
+ v localname "visited-file-modtime-ild" "")))
+ ;; If file does not exist, say it is not modified if and
+ ;; only if that agrees with the buffer's record.
+ (t (equal mt '(-1 65535))))))))))
+
+(defun tramp-sh-handle-set-file-modes (filename mode)
+ "Like `set-file-modes' for Tramp files."
+ (with-parsed-tramp-file-name filename nil
+ (tramp-flush-file-property v localname)
+ ;; FIXME: extract the proper text from chmod's stderr.
+ (tramp-barf-unless-okay
+ v
+ (format "chmod %s %s"
+ (tramp-compat-decimal-to-octal mode)
+ (tramp-shell-quote-argument localname))
+ "Error while changing file's mode %s" filename)))
+
+(defun tramp-sh-handle-set-file-times (filename &optional time)
+ "Like `set-file-times' for Tramp files."
+ (if (file-remote-p filename)
+ (with-parsed-tramp-file-name filename nil
+ (tramp-flush-file-property v localname)
+ (let ((time (if (or (null time) (equal time '(0 0)))
+ (current-time)
+ time))
+ ;; With GNU Emacs, `format-time-string' has an optional
+ ;; parameter UNIVERSAL. This is preferred, because we
+ ;; could handle the case when the remote host is located
+ ;; in a different time zone as the local host.
+ (utc (not (featurep 'xemacs))))
+ (tramp-send-command-and-check
+ v (format "%s touch -t %s %s"
+ (if utc "TZ=UTC; export TZ;" "")
+ (if utc
+ (format-time-string "%Y%m%d%H%M.%S" time t)
+ (format-time-string "%Y%m%d%H%M.%S" time))
+ (tramp-shell-quote-argument localname)))))
+
+ ;; We handle also the local part, because in older Emacsen,
+ ;; without `set-file-times', this function is an alias for this.
+ ;; We are local, so we don't need the UTC settings.
+ (zerop
+ (tramp-compat-call-process
+ "touch" nil nil nil "-t"
+ (format-time-string "%Y%m%d%H%M.%S" time)
+ (tramp-shell-quote-argument filename)))))
+
+(defun tramp-set-file-uid-gid (filename &optional uid gid)
+ "Set the ownership for FILENAME.
+If UID and GID are provided, these values are used; otherwise uid
+and gid of the corresponding user is taken. Both parameters must be integers."
+ ;; Modern Unices allow chown only for root. So we might need
+ ;; another implementation, see `dired-do-chown'. OTOH, it is mostly
+ ;; working with su(do)? when it is needed, so it shall succeed in
+ ;; the majority of cases.
+ ;; Don't modify `last-coding-system-used' by accident.
+ (let ((last-coding-system-used last-coding-system-used))
+ (if (file-remote-p filename)
+ (with-parsed-tramp-file-name filename nil
+ (if (and (zerop (user-uid)) (tramp-local-host-p v))
+ ;; If we are root on the local host, we can do it directly.
+ (tramp-set-file-uid-gid localname uid gid)
+ (let ((uid (or (and (integerp uid) uid)
+ (tramp-get-remote-uid v 'integer)))
+ (gid (or (and (integerp gid) gid)
+ (tramp-get-remote-gid v 'integer))))
+ (tramp-send-command
+ v (format
+ "chown %d:%d %s" uid gid
+ (tramp-shell-quote-argument localname))))))
+
+ ;; We handle also the local part, because there doesn't exist
+ ;; `set-file-uid-gid'. On W32 "chown" might not work.
+ (let ((uid (or (and (integerp uid) uid) (tramp-get-local-uid 'integer)))
+ (gid (or (and (integerp gid) gid) (tramp-get-local-gid 'integer))))
+ (tramp-compat-call-process
+ "chown" nil nil nil
+ (format "%d:%d" uid gid) (tramp-shell-quote-argument filename))))))
+
+(defun tramp-remote-selinux-p (vec)
+ "Check, whether SELINUX is enabled on the remote host."
+ (with-connection-property (tramp-get-connection-process vec) "selinux-p"
+ (let ((result (tramp-find-executable
+ vec "getenforce" (tramp-get-remote-path vec) t t)))
+ (and result
+ (string-equal
+ (tramp-send-command-and-read
+ vec (format "echo \\\"`%S`\\\"" result))
+ "Enforcing")))))
+
+(defun tramp-sh-handle-file-selinux-context (filename)
+ "Like `file-selinux-context' for Tramp files."
+ (with-parsed-tramp-file-name filename nil
+ (with-file-property v localname "file-selinux-context"
+ (let ((context '(nil nil nil nil))
+ (regexp (concat "\\([a-z0-9_]+\\):" "\\([a-z0-9_]+\\):"
+ "\\([a-z0-9_]+\\):" "\\([a-z0-9_]+\\)")))
+ (when (and (tramp-remote-selinux-p v)
+ (tramp-send-command-and-check
+ v (format
+ "%s -d -Z %s"
+ (tramp-get-ls-command v)
+ (tramp-shell-quote-argument localname))))
+ (with-current-buffer (tramp-get-connection-buffer v)
+ (goto-char (point-min))
+ (when (re-search-forward regexp (point-at-eol) t)
+ (setq context (list (match-string 1) (match-string 2)
+ (match-string 3) (match-string 4))))))
+ ;; Return the context.
+ context))))
+
+(defun tramp-sh-handle-set-file-selinux-context (filename context)
+ "Like `set-file-selinux-context' for Tramp files."
+ (with-parsed-tramp-file-name filename nil
+ (if (and (consp context)
+ (tramp-remote-selinux-p v)
+ (tramp-send-command-and-check
+ v (format "chcon %s %s %s %s %s"
+ (if (stringp (nth 0 context))
+ (format "--user=%s" (nth 0 context)) "")
+ (if (stringp (nth 1 context))
+ (format "--role=%s" (nth 1 context)) "")
+ (if (stringp (nth 2 context))
+ (format "--type=%s" (nth 2 context)) "")
+ (if (stringp (nth 3 context))
+ (format "--range=%s" (nth 3 context)) "")
+ (tramp-shell-quote-argument localname))))
+ (tramp-set-file-property v localname "file-selinux-context" context)
+ (tramp-set-file-property v localname "file-selinux-context" 'undef)))
+ ;; We always return nil.
+ nil)
+
+;; Simple functions using the `test' command.
+
+(defun tramp-sh-handle-file-executable-p (filename)
+ "Like `file-executable-p' for Tramp files."
+ (with-parsed-tramp-file-name filename nil
+ (with-file-property v localname "file-executable-p"
+ ;; Examine `file-attributes' cache to see if request can be
+ ;; satisfied without remote operation.
+ (or (tramp-check-cached-permissions v ?x)
+ (tramp-run-test "-x" filename)))))
+
+(defun tramp-sh-handle-file-readable-p (filename)
+ "Like `file-readable-p' for Tramp files."
+ (with-parsed-tramp-file-name filename nil
+ (with-file-property v localname "file-readable-p"
+ ;; Examine `file-attributes' cache to see if request can be
+ ;; satisfied without remote operation.
+ (or (tramp-check-cached-permissions v ?r)
+ (tramp-run-test "-r" filename)))))
+
+;; When the remote shell is started, it looks for a shell which groks
+;; tilde expansion. Here, we assume that all shells which grok tilde
+;; expansion will also provide a `test' command which groks `-nt' (for
+;; newer than). If this breaks, tell me about it and I'll try to do
+;; something smarter about it.
+(defun tramp-sh-handle-file-newer-than-file-p (file1 file2)
+ "Like `file-newer-than-file-p' for Tramp files."
+ (cond ((not (file-exists-p file1))
+ nil)
+ ((not (file-exists-p file2))
+ t)
+ ;; We are sure both files exist at this point.
+ (t
+ (save-excursion
+ ;; We try to get the mtime of both files. If they are not
+ ;; equal to the "dont-know" value, then we subtract the times
+ ;; and obtain the result.
+ (let ((fa1 (file-attributes file1))
+ (fa2 (file-attributes file2)))
+ (if (and (not (equal (nth 5 fa1) '(0 0)))
+ (not (equal (nth 5 fa2) '(0 0))))
+ (> 0 (tramp-time-diff (nth 5 fa2) (nth 5 fa1)))
+ ;; If one of them is the dont-know value, then we can
+ ;; still try to run a shell command on the remote host.
+ ;; However, this only works if both files are Tramp
+ ;; files and both have the same method, same user, same
+ ;; host.
+ (unless (tramp-equal-remote file1 file2)
+ (with-parsed-tramp-file-name
+ (if (tramp-tramp-file-p file1) file1 file2) nil
+ (tramp-error
+ v 'file-error
+ "Files %s and %s must have same method, user, host"
+ file1 file2)))
+ (with-parsed-tramp-file-name file1 nil
+ (tramp-run-test2
+ (tramp-get-test-nt-command v) file1 file2))))))))
+
+;; Functions implemented using the basic functions above.
+
+(defun tramp-sh-handle-file-directory-p (filename)
+ "Like `file-directory-p' for Tramp files."
+ ;; Care must be taken that this function returns `t' for symlinks
+ ;; pointing to directories. Surely the most obvious implementation
+ ;; would be `test -d', but that returns false for such symlinks.
+ ;; CCC: Stefan Monnier says that `test -d' follows symlinks. And
+ ;; I now think he's right. So we could be using `test -d', couldn't
+ ;; we?
+ ;;
+ ;; Alternatives: `cd %s', `test -d %s'
+ (with-parsed-tramp-file-name filename nil
+ (with-file-property v localname "file-directory-p"
+ (tramp-run-test "-d" filename))))
+
+(defun tramp-sh-handle-file-writable-p (filename)
+ "Like `file-writable-p' for Tramp files."
+ (with-parsed-tramp-file-name filename nil
+ (with-file-property v localname "file-writable-p"
+ (if (file-exists-p filename)
+ ;; Examine `file-attributes' cache to see if request can be
+ ;; satisfied without remote operation.
+ (or (tramp-check-cached-permissions v ?w)
+ (tramp-run-test "-w" filename))
+ ;; If file doesn't exist, check if directory is writable.
+ (and (tramp-run-test "-d" (file-name-directory filename))
+ (tramp-run-test "-w" (file-name-directory filename)))))))
+
+(defun tramp-sh-handle-file-ownership-preserved-p (filename)
+ "Like `file-ownership-preserved-p' for Tramp files."
+ (with-parsed-tramp-file-name filename nil
+ (with-file-property v localname "file-ownership-preserved-p"
+ (let ((attributes (file-attributes filename)))
+ ;; Return t if the file doesn't exist, since it's true that no
+ ;; information would be lost by an (attempted) delete and create.
+ (or (null attributes)
+ (= (nth 2 attributes) (tramp-get-remote-uid v 'integer)))))))
+
+;; Directory listings.
+
+(defun tramp-sh-handle-directory-files-and-attributes
+ (directory &optional full match nosort id-format)
+ "Like `directory-files-and-attributes' for Tramp files."
+ (unless id-format (setq id-format 'integer))
+ (when (file-directory-p directory)
+ (setq directory (expand-file-name directory))
+ (let* ((temp
+ (copy-tree
+ (with-parsed-tramp-file-name directory nil
+ (with-file-property
+ v localname
+ (format "directory-files-and-attributes-%s" id-format)
+ (save-excursion
+ (mapcar
+ (lambda (x)
+ (cons (car x)
+ (tramp-convert-file-attributes v (cdr x))))
+ (cond
+ ((tramp-get-remote-stat v)
+ (tramp-do-directory-files-and-attributes-with-stat
+ v localname id-format))
+ ((tramp-get-remote-perl v)
+ (tramp-do-directory-files-and-attributes-with-perl
+ v localname id-format)))))))))
+ result item)
+
+ (while temp
+ (setq item (pop temp))
+ (when (or (null match) (string-match match (car item)))
+ (when full
+ (setcar item (expand-file-name (car item) directory)))
+ (push item result)))
+
+ (if nosort
+ result
+ (sort result (lambda (x y) (string< (car x) (car y))))))))
+
+(defun tramp-do-directory-files-and-attributes-with-perl
+ (vec localname &optional id-format)
+ "Implement `directory-files-and-attributes' for Tramp files using a Perl script."
+ (tramp-message vec 5 "directory-files-and-attributes with perl: %s" localname)
+ (tramp-maybe-send-script
+ vec tramp-perl-directory-files-and-attributes
+ "tramp_perl_directory_files_and_attributes")
+ (let ((object
+ (tramp-send-command-and-read
+ vec
+ (format "tramp_perl_directory_files_and_attributes %s %s"
+ (tramp-shell-quote-argument localname) id-format))))
+ (when (stringp object) (tramp-error vec 'file-error object))
+ object))
+
+(defun tramp-do-directory-files-and-attributes-with-stat
+ (vec localname &optional id-format)
+ "Implement `directory-files-and-attributes' for Tramp files using stat(1) command."
+ (tramp-message vec 5 "directory-files-and-attributes with stat: %s" localname)
+ (tramp-send-command-and-read
+ vec
+ (format
+ (concat
+ ;; We must care about filenames with spaces, or starting with
+ ;; "-"; this would confuse xargs. "ls -aQ" might be a solution,
+ ;; but it does not work on all remote systems. Therefore, we
+ ;; quote the filenames via sed.
+ "cd %s; echo \"(\"; (%s -a | sed -e s/\\$/\\\"/g -e s/^/\\\"/g | xargs "
+ "%s -c '(\"%%n\" (\"%%N\") %%h %s %s %%Xe0 %%Ye0 %%Ze0 %%se0 \"%%A\" t %%ie0 -1)'); "
+ "echo \")\"")
+ (tramp-shell-quote-argument localname)
+ (tramp-get-ls-command vec)
+ (tramp-get-remote-stat vec)
+ (if (eq id-format 'integer) "%u" "\"%U\"")
+ (if (eq id-format 'integer) "%g" "\"%G\""))))
+
+;; This function should return "foo/" for directories and "bar" for
+;; files.
+(defun tramp-sh-handle-file-name-all-completions (filename directory)
+ "Like `file-name-all-completions' for Tramp files."
+ (unless (save-match-data (string-match "/" filename))
+ (with-parsed-tramp-file-name (expand-file-name directory) nil
+
+ (all-completions
+ filename
+ (mapcar
+ 'list
+ (or
+ ;; Try cache entries for filename, filename with last
+ ;; character removed, filename with last two characters
+ ;; removed, ..., and finally the empty string - all
+ ;; concatenated to the local directory name.
+ (let ((remote-file-name-inhibit-cache
+ (or remote-file-name-inhibit-cache
+ tramp-completion-reread-directory-timeout)))
+
+ ;; This is inefficient for very long filenames, pity
+ ;; `reduce' is not available...
+ (car
+ (apply
+ 'append
+ (mapcar
+ (lambda (x)
+ (let ((cache-hit
+ (tramp-get-file-property
+ v
+ (concat localname (substring filename 0 x))
+ "file-name-all-completions"
+ nil)))
+ (when cache-hit (list cache-hit))))
+ (tramp-compat-number-sequence (length filename) 0 -1)))))
+
+ ;; Cache expired or no matching cache entry found so we need
+ ;; to perform a remote operation.
+ (let (result)
+ ;; Get a list of directories and files, including reliably
+ ;; tagging the directories with a trailing '/'. Because I
+ ;; rock. --daniel@danann.net
+
+ ;; Changed to perform `cd' in the same remote op and only
+ ;; get entries starting with `filename'. Capture any `cd'
+ ;; error messages. Ensure any `cd' and `echo' aliases are
+ ;; ignored.
+ (tramp-send-command
+ v
+ (if (tramp-get-remote-perl v)
+ (progn
+ (tramp-maybe-send-script
+ v tramp-perl-file-name-all-completions
+ "tramp_perl_file_name_all_completions")
+ (format "tramp_perl_file_name_all_completions %s %s %d"
+ (tramp-shell-quote-argument localname)
+ (tramp-shell-quote-argument filename)
+ (if (symbol-value
+ ;; `read-file-name-completion-ignore-case'
+ ;; is introduced with Emacs 22.1.
+ (if (boundp
+ 'read-file-name-completion-ignore-case)
+ 'read-file-name-completion-ignore-case
+ 'completion-ignore-case))
+ 1 0)))
+
+ (format (concat
+ "(\\cd %s 2>&1 && (%s %s -a 2>/dev/null"
+ ;; `ls' with wildcard might fail with `Argument
+ ;; list too long' error in some corner cases; if
+ ;; `ls' fails after `cd' succeeded, chances are
+ ;; that's the case, so let's retry without
+ ;; wildcard. This will return "too many" entries
+ ;; but that isn't harmful.
+ " || %s -a 2>/dev/null)"
+ " | while read f; do"
+ " if %s -d \"$f\" 2>/dev/null;"
+ " then \\echo \"$f/\"; else \\echo \"$f\"; fi; done"
+ " && \\echo ok) || \\echo fail")
+ (tramp-shell-quote-argument localname)
+ (tramp-get-ls-command v)
+ ;; When `filename' is empty, just `ls' without
+ ;; filename argument is more efficient than `ls *'
+ ;; for very large directories and might avoid the
+ ;; `Argument list too long' error.
+ ;;
+ ;; With and only with wildcard, we need to add
+ ;; `-d' to prevent `ls' from descending into
+ ;; sub-directories.
+ (if (zerop (length filename))
+ "."
+ (concat (tramp-shell-quote-argument filename) "* -d"))
+ (tramp-get-ls-command v)
+ (tramp-get-test-command v))))
+
+ ;; Now grab the output.
+ (with-current-buffer (tramp-get-buffer v)
+ (goto-char (point-max))
+
+ ;; Check result code, found in last line of output
+ (forward-line -1)
+ (if (looking-at "^fail$")
+ (progn
+ ;; Grab error message from line before last line
+ ;; (it was put there by `cd 2>&1')
+ (forward-line -1)
+ (tramp-error
+ v 'file-error
+ "tramp-sh-handle-file-name-all-completions: %s"
+ (buffer-substring (point) (point-at-eol))))
+ ;; For peace of mind, if buffer doesn't end in `fail'
+ ;; then it should end in `ok'. If neither are in the
+ ;; buffer something went seriously wrong on the remote
+ ;; side.
+ (unless (looking-at "^ok$")
+ (tramp-error
+ v 'file-error
+ "\
+tramp-sh-handle-file-name-all-completions: internal error accessing `%s': `%s'"
+ (tramp-shell-quote-argument localname) (buffer-string))))
+
+ (while (zerop (forward-line -1))
+ (push (buffer-substring (point) (point-at-eol)) result)))
+
+ ;; Because the remote op went through OK we know the
+ ;; directory we `cd'-ed to exists
+ (tramp-set-file-property
+ v localname "file-exists-p" t)
+
+ ;; Because the remote op went through OK we know every
+ ;; file listed by `ls' exists.
+ (mapc (lambda (entry)
+ (tramp-set-file-property
+ v (concat localname entry) "file-exists-p" t))
+ result)
+
+ ;; Store result in the cache
+ (tramp-set-file-property
+ v (concat localname filename)
+ "file-name-all-completions"
+ result))))))))
+
+;; cp, mv and ln
+
+(defun tramp-sh-handle-add-name-to-file
+ (filename newname &optional ok-if-already-exists)
+ "Like `add-name-to-file' for Tramp files."
+ (unless (tramp-equal-remote filename newname)
+ (with-parsed-tramp-file-name
+ (if (tramp-tramp-file-p filename) filename newname) nil
+ (tramp-error
+ v 'file-error
+ "add-name-to-file: %s"
+ "only implemented for same method, same user, same host")))
+ (with-parsed-tramp-file-name filename v1
+ (with-parsed-tramp-file-name newname v2
+ (let ((ln (when v1 (tramp-get-remote-ln v1))))
+ (when (and (not ok-if-already-exists)
+ (file-exists-p newname)
+ (not (numberp ok-if-already-exists))
+ (y-or-n-p
+ (format
+ "File %s already exists; make it a new name anyway? "
+ newname)))
+ (tramp-error
+ v2 'file-error
+ "add-name-to-file: file %s already exists" newname))
+ (tramp-flush-file-property v2 (file-name-directory v2-localname))
+ (tramp-flush-file-property v2 v2-localname)
+ (tramp-barf-unless-okay
+ v1
+ (format "%s %s %s" ln (tramp-shell-quote-argument v1-localname)
+ (tramp-shell-quote-argument v2-localname))
+ "error with add-name-to-file, see buffer `%s' for details"
+ (buffer-name))))))
+
+(defun tramp-sh-handle-copy-file
+ (filename newname &optional ok-if-already-exists keep-date
+ preserve-uid-gid preserve-selinux-context)
+ "Like `copy-file' for Tramp files."
+ (setq filename (expand-file-name filename))
+ (setq newname (expand-file-name newname))
+ (cond
+ ;; At least one file a Tramp file?
+ ((or (tramp-tramp-file-p filename)
+ (tramp-tramp-file-p newname))
+ (tramp-do-copy-or-rename-file
+ 'copy filename newname ok-if-already-exists keep-date
+ preserve-uid-gid preserve-selinux-context))
+ ;; Compat section.
+ (preserve-selinux-context
+ (tramp-run-real-handler
+ 'copy-file
+ (list filename newname ok-if-already-exists keep-date
+ preserve-uid-gid preserve-selinux-context)))
+ (preserve-uid-gid
+ (tramp-run-real-handler
+ 'copy-file
+ (list filename newname ok-if-already-exists keep-date preserve-uid-gid)))
+ (t
+ (tramp-run-real-handler
+ 'copy-file (list filename newname ok-if-already-exists keep-date)))))
+
+(defun tramp-sh-handle-copy-directory
+ (dirname newname &optional keep-date parents)
+ "Like `copy-directory' for Tramp files."
+ (let ((t1 (tramp-tramp-file-p dirname))
+ (t2 (tramp-tramp-file-p newname)))
+ (with-parsed-tramp-file-name (if t1 dirname newname) nil
+ (if (and (tramp-get-method-parameter method 'tramp-copy-recursive)
+ ;; When DIRNAME and NEWNAME are remote, they must have
+ ;; the same method.
+ (or (null t1) (null t2)
+ (string-equal
+ (tramp-file-name-method (tramp-dissect-file-name dirname))
+ (tramp-file-name-method (tramp-dissect-file-name newname)))))
+ ;; scp or rsync DTRT.
+ (progn
+ (setq dirname (directory-file-name (expand-file-name dirname))
+ newname (directory-file-name (expand-file-name newname)))
+ (if (and (file-directory-p newname)
+ (not (string-equal (file-name-nondirectory dirname)
+ (file-name-nondirectory newname))))
+ (setq newname
+ (expand-file-name
+ (file-name-nondirectory dirname) newname)))
+ (if (not (file-directory-p (file-name-directory newname)))
+ (make-directory (file-name-directory newname) parents))
+ (tramp-do-copy-or-rename-file-out-of-band
+ 'copy dirname newname keep-date))
+ ;; We must do it file-wise.
+ (tramp-run-real-handler
+ 'copy-directory (list dirname newname keep-date parents)))
+
+ ;; When newname did exist, we have wrong cached values.
+ (when t2
+ (with-parsed-tramp-file-name newname nil
+ (tramp-flush-file-property v (file-name-directory localname))
+ (tramp-flush-file-property v localname))))))
+
+(defun tramp-sh-handle-rename-file
+ (filename newname &optional ok-if-already-exists)
+ "Like `rename-file' for Tramp files."
+ ;; Check if both files are local -- invoke normal rename-file.
+ ;; Otherwise, use Tramp from local system.
+ (setq filename (expand-file-name filename))
+ (setq newname (expand-file-name newname))
+ ;; At least one file a Tramp file?
+ (if (or (tramp-tramp-file-p filename)
+ (tramp-tramp-file-p newname))
+ (tramp-do-copy-or-rename-file
+ 'rename filename newname ok-if-already-exists t t)
+ (tramp-run-real-handler
+ 'rename-file (list filename newname ok-if-already-exists))))
+
+(defun tramp-do-copy-or-rename-file
+ (op filename newname &optional ok-if-already-exists keep-date
+ preserve-uid-gid preserve-selinux-context)
+ "Copy or rename a remote file.
+OP must be `copy' or `rename' and indicates the operation to perform.
+FILENAME specifies the file to copy or rename, NEWNAME is the name of
+the new file (for copy) or the new name of the file (for rename).
+OK-IF-ALREADY-EXISTS means don't barf if NEWNAME exists already.
+KEEP-DATE means to make sure that NEWNAME has the same timestamp
+as FILENAME. PRESERVE-UID-GID, when non-nil, instructs to keep
+the uid and gid if both files are on the same host.
+PRESERVE-SELINUX-CONTEXT activates selinux commands.
+
+This function is invoked by `tramp-sh-handle-copy-file' and
+`tramp-sh-handle-rename-file'. It is an error if OP is neither
+of `copy' and `rename'. FILENAME and NEWNAME must be absolute
+file names."
+ (unless (memq op '(copy rename))
+ (error "Unknown operation `%s', must be `copy' or `rename'" op))
+ (let ((t1 (tramp-tramp-file-p filename))
+ (t2 (tramp-tramp-file-p newname))
+ (context (and preserve-selinux-context
+ (apply 'file-selinux-context (list filename))))
+ pr tm)
+
+ (with-parsed-tramp-file-name (if t1 filename newname) nil
+ (when (and (not ok-if-already-exists) (file-exists-p newname))
+ (tramp-error
+ v 'file-already-exists "File %s already exists" newname))
+
+ (with-progress-reporter
+ v 0 (format "%s %s to %s"
+ (if (eq op 'copy) "Copying" "Renaming")
+ filename newname)
+
+ (cond
+ ;; Both are Tramp files.
+ ((and t1 t2)
+ (with-parsed-tramp-file-name filename v1
+ (with-parsed-tramp-file-name newname v2
+ (cond
+ ;; Shortcut: if method, host, user are the same for
+ ;; both files, we invoke `cp' or `mv' on the remote
+ ;; host directly.
+ ((tramp-equal-remote filename newname)
+ (tramp-do-copy-or-rename-file-directly
+ op filename newname
+ ok-if-already-exists keep-date preserve-uid-gid))
+
+ ;; Try out-of-band operation.
+ ((tramp-method-out-of-band-p
+ v1 (nth 7 (file-attributes (file-truename filename))))
+ (tramp-do-copy-or-rename-file-out-of-band
+ op filename newname keep-date))
+
+ ;; No shortcut was possible. So we copy the file
+ ;; first. If the operation was `rename', we go back
+ ;; and delete the original file (if the copy was
+ ;; successful). The approach is simple-minded: we
+ ;; create a new buffer, insert the contents of the
+ ;; source file into it, then write out the buffer to
+ ;; the target file. The advantage is that it doesn't
+ ;; matter which filename handlers are used for the
+ ;; source and target file.
+ (t
+ (tramp-do-copy-or-rename-file-via-buffer
+ op filename newname keep-date))))))
+
+ ;; One file is a Tramp file, the other one is local.
+ ((or t1 t2)
+ (cond
+ ;; Fast track on local machine.
+ ((tramp-local-host-p v)
+ (tramp-do-copy-or-rename-file-directly
+ op filename newname
+ ok-if-already-exists keep-date preserve-uid-gid))
+
+ ;; If the Tramp file has an out-of-band method, the
+ ;; corresponding copy-program can be invoked.
+ ((tramp-method-out-of-band-p
+ v (nth 7 (file-attributes (file-truename filename))))
+ (tramp-do-copy-or-rename-file-out-of-band
+ op filename newname keep-date))
+
+ ;; Use the inline method via a Tramp buffer.
+ (t (tramp-do-copy-or-rename-file-via-buffer
+ op filename newname keep-date))))
+
+ (t
+ ;; One of them must be a Tramp file.
+ (error "Tramp implementation says this cannot happen")))
+
+ ;; Handle `preserve-selinux-context'.
+ (when context (apply 'set-file-selinux-context (list newname context)))
+
+ ;; In case of `rename', we must flush the cache of the source file.
+ (when (and t1 (eq op 'rename))
+ (with-parsed-tramp-file-name filename v1
+ (tramp-flush-file-property v1 (file-name-directory localname))
+ (tramp-flush-file-property v1 localname)))
+
+ ;; When newname did exist, we have wrong cached values.
+ (when t2
+ (with-parsed-tramp-file-name newname v2
+ (tramp-flush-file-property v2 (file-name-directory localname))
+ (tramp-flush-file-property v2 localname)))))))
+
+(defun tramp-do-copy-or-rename-file-via-buffer (op filename newname keep-date)
+ "Use an Emacs buffer to copy or rename a file.
+First arg OP is either `copy' or `rename' and indicates the operation.
+FILENAME is the source file, NEWNAME the target file.
+KEEP-DATE is non-nil if NEWNAME should have the same timestamp as FILENAME."
+ (with-temp-buffer
+ ;; We must disable multibyte, because binary data shall not be
+ ;; converted.
+ (set-buffer-multibyte nil)
+ (let ((coding-system-for-read 'binary)
+ (jka-compr-inhibit t))
+ (insert-file-contents-literally filename))
+ ;; We don't want the target file to be compressed, so we let-bind
+ ;; `jka-compr-inhibit' to t.
+ (let ((coding-system-for-write 'binary)
+ (jka-compr-inhibit t))
+ (write-region (point-min) (point-max) newname)))
+ ;; KEEP-DATE handling.
+ (when keep-date (set-file-times newname (nth 5 (file-attributes filename))))
+ ;; Set the mode.
+ (set-file-modes newname (tramp-default-file-modes filename))
+ ;; If the operation was `rename', delete the original file.
+ (unless (eq op 'copy) (delete-file filename)))
+
+(defun tramp-do-copy-or-rename-file-directly
+ (op filename newname ok-if-already-exists keep-date preserve-uid-gid)
+ "Invokes `cp' or `mv' on the remote system.
+OP must be one of `copy' or `rename', indicating `cp' or `mv',
+respectively. FILENAME specifies the file to copy or rename,
+NEWNAME is the name of the new file (for copy) or the new name of
+the file (for rename). Both files must reside on the same host.
+KEEP-DATE means to make sure that NEWNAME has the same timestamp
+as FILENAME. PRESERVE-UID-GID, when non-nil, instructs to keep
+the uid and gid from FILENAME."
+ (let ((t1 (tramp-tramp-file-p filename))
+ (t2 (tramp-tramp-file-p newname))
+ (file-times (nth 5 (file-attributes filename)))
+ (file-modes (tramp-default-file-modes filename)))
+ (with-parsed-tramp-file-name (if t1 filename newname) nil
+ (let* ((cmd (cond ((and (eq op 'copy) preserve-uid-gid) "cp -f -p")
+ ((eq op 'copy) "cp -f")
+ ((eq op 'rename) "mv -f")
+ (t (tramp-error
+ v 'file-error
+ "Unknown operation `%s', must be `copy' or `rename'"
+ op))))
+ (localname1
+ (if t1
+ (tramp-file-name-handler 'file-remote-p filename 'localname)
+ filename))
+ (localname2
+ (if t2
+ (tramp-file-name-handler 'file-remote-p newname 'localname)
+ newname))
+ (prefix (file-remote-p (if t1 filename newname)))
+ cmd-result)
+
+ (cond
+ ;; Both files are on a remote host, with same user.
+ ((and t1 t2)
+ (setq cmd-result
+ (tramp-send-command-and-check
+ v (format "%s %s %s" cmd
+ (tramp-shell-quote-argument localname1)
+ (tramp-shell-quote-argument localname2))))
+ (with-current-buffer (tramp-get-buffer v)
+ (goto-char (point-min))
+ (unless
+ (or
+ (and keep-date
+ ;; Mask cp -f error.
+ (re-search-forward
+ tramp-operation-not-permitted-regexp nil t))
+ cmd-result)
+ (tramp-error-with-buffer
+ nil v 'file-error
+ "Copying directly failed, see buffer `%s' for details."
+ (buffer-name)))))
+
+ ;; We are on the local host.
+ ((or t1 t2)
+ (cond
+ ;; We can do it directly.
+ ((let (file-name-handler-alist)
+ (and (file-readable-p localname1)
+ (file-writable-p (file-name-directory localname2))
+ (or (file-directory-p localname2)
+ (file-writable-p localname2))))
+ (if (eq op 'copy)
+ (tramp-compat-copy-file
+ localname1 localname2 ok-if-already-exists
+ keep-date preserve-uid-gid)
+ (tramp-run-real-handler
+ 'rename-file (list localname1 localname2 ok-if-already-exists))))
+
+ ;; We can do it directly with `tramp-send-command'
+ ((and (file-readable-p (concat prefix localname1))
+ (file-writable-p
+ (file-name-directory (concat prefix localname2)))
+ (or (file-directory-p (concat prefix localname2))
+ (file-writable-p (concat prefix localname2))))
+ (tramp-do-copy-or-rename-file-directly
+ op (concat prefix localname1) (concat prefix localname2)
+ ok-if-already-exists keep-date t)
+ ;; We must change the ownership to the local user.
+ (tramp-set-file-uid-gid
+ (concat prefix localname2)
+ (tramp-get-local-uid 'integer)
+ (tramp-get-local-gid 'integer)))
+
+ ;; We need a temporary file in between.
+ (t
+ ;; Create the temporary file.
+ (let ((tmpfile (tramp-compat-make-temp-file localname1)))
+ (unwind-protect
+ (progn
+ (cond
+ (t1
+ (tramp-barf-unless-okay
+ v (format
+ "%s %s %s" cmd
+ (tramp-shell-quote-argument localname1)
+ (tramp-shell-quote-argument tmpfile))
+ "Copying directly failed, see buffer `%s' for details."
+ (tramp-get-buffer v))
+ ;; We must change the ownership as remote user.
+ ;; Since this does not work reliable, we also
+ ;; give read permissions.
+ (set-file-modes
+ (concat prefix tmpfile)
+ (tramp-compat-octal-to-decimal "0777"))
+ (tramp-set-file-uid-gid
+ (concat prefix tmpfile)
+ (tramp-get-local-uid 'integer)
+ (tramp-get-local-gid 'integer)))
+ (t2
+ (if (eq op 'copy)
+ (tramp-compat-copy-file
+ localname1 tmpfile t
+ keep-date preserve-uid-gid)
+ (tramp-run-real-handler
+ 'rename-file
+ (list localname1 tmpfile t)))
+ ;; We must change the ownership as local user.
+ ;; Since this does not work reliable, we also
+ ;; give read permissions.
+ (set-file-modes
+ tmpfile (tramp-compat-octal-to-decimal "0777"))
+ (tramp-set-file-uid-gid
+ tmpfile
+ (tramp-get-remote-uid v 'integer)
+ (tramp-get-remote-gid v 'integer))))
+
+ ;; Move the temporary file to its destination.
+ (cond
+ (t2
+ (tramp-barf-unless-okay
+ v (format
+ "cp -f -p %s %s"
+ (tramp-shell-quote-argument tmpfile)
+ (tramp-shell-quote-argument localname2))
+ "Copying directly failed, see buffer `%s' for details."
+ (tramp-get-buffer v)))
+ (t1
+ (tramp-run-real-handler
+ 'rename-file
+ (list tmpfile localname2 ok-if-already-exists)))))
+
+ ;; Save exit.
+ (ignore-errors (delete-file tmpfile)))))))))
+
+ ;; Set the time and mode. Mask possible errors.
+ (ignore-errors
+ (when keep-date
+ (set-file-times newname file-times)
+ (set-file-modes newname file-modes))))))
+
+(defun tramp-do-copy-or-rename-file-out-of-band (op filename newname keep-date)
+ "Invoke rcp program to copy.
+The method used must be an out-of-band method."
+ (let* ((t1 (tramp-tramp-file-p filename))
+ (t2 (tramp-tramp-file-p newname))
+ (orig-vec (tramp-dissect-file-name (if t1 filename newname)))
+ copy-program copy-args copy-env copy-keep-date port spec
+ source target)
+
+ (with-parsed-tramp-file-name (if t1 filename newname) nil
+ (if (and t1 t2)
+
+ ;; Both are Tramp files. We shall optimize it, when the
+ ;; methods for filename and newname are the same.
+ (let* ((dir-flag (file-directory-p filename))
+ (tmpfile (tramp-compat-make-temp-file localname dir-flag)))
+ (if dir-flag
+ (setq tmpfile
+ (expand-file-name
+ (file-name-nondirectory newname) tmpfile)))
+ (unwind-protect
+ (progn
+ (tramp-do-copy-or-rename-file-out-of-band
+ op filename tmpfile keep-date)
+ (tramp-do-copy-or-rename-file-out-of-band
+ 'rename tmpfile newname keep-date))
+ ;; Save exit.
+ (ignore-errors
+ (if dir-flag
+ (tramp-compat-delete-directory
+ (expand-file-name ".." tmpfile) 'recursive)
+ (delete-file tmpfile)))))
+
+ ;; 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-host v))
+
+ ;; Expand hops. Might be necessary for gateway methods.
+ (setq v (car (tramp-compute-multi-hops v)))
+ (aset v 3 localname)
+
+ ;; Check which ones of source and target are Tramp files.
+ (setq source (if t1 (tramp-make-copy-program-file-name v) filename)
+ target (funcall
+ (if (and (file-directory-p filename)
+ (string-equal
+ (file-name-nondirectory filename)
+ (file-name-nondirectory newname)))
+ 'file-name-directory
+ 'identity)
+ (if t2 (tramp-make-copy-program-file-name v) newname)))
+
+ ;; Check for port number. Until now, there's no need for handling
+ ;; like method, user, host.
+ (setq host (tramp-file-name-real-host v)
+ port (tramp-file-name-port v)
+ port (or (and port (number-to-string port)) ""))
+
+ ;; Compose copy command.
+ (setq spec (format-spec-make
+ ?h host ?u user ?p port
+ ?t (tramp-get-connection-property
+ (tramp-get-connection-process v) "temp-file" "")
+ ?k (if keep-date " " ""))
+ copy-program (tramp-get-method-parameter
+ method 'tramp-copy-program)
+ copy-keep-date (tramp-get-method-parameter
+ method 'tramp-copy-keep-date)
+ copy-args
+ (delete
+ ;; " " has either been a replacement of "%k" (when
+ ;; keep-date argument is non-nil), or a replacemtent
+ ;; for the whole keep-date sublist.
+ " "
+ (dolist
+ (x
+ (tramp-get-method-parameter method 'tramp-copy-args)
+ copy-args)
+ (setq copy-args
+ (append
+ copy-args
+ (let ((y (mapcar (lambda (z) (format-spec z spec)) x)))
+ (if (zerop (length (car y))) '(" ") y))))))
+ copy-env
+ (delq
+ nil
+ (mapcar
+ (lambda (x)
+ (setq x (mapcar (lambda (y) (format-spec y spec)) x))
+ (unless (member "" x) (mapconcat 'identity x " ")))
+ (tramp-get-method-parameter method 'tramp-copy-env))))
+
+ ;; Check for program.
+ (when (and (fboundp 'executable-find)
+ (not (let ((default-directory
+ (tramp-compat-temporary-file-directory)))
+ (executable-find copy-program))))
+ (tramp-error
+ v 'file-error "Cannot find copy program: %s" copy-program))
+
+ (with-temp-buffer
+ (unwind-protect
+ ;; The default directory must be remote.
+ (let ((default-directory
+ (file-name-directory (if t1 filename newname)))
+ (process-environment (copy-sequence process-environment)))
+ ;; Set the transfer process properties.
+ (tramp-set-connection-property
+ v "process-name" (buffer-name (current-buffer)))
+ (tramp-set-connection-property
+ v "process-buffer" (current-buffer))
+ (while copy-env
+ (tramp-message
+ orig-vec 5 "%s=\"%s\"" (car copy-env) (cadr copy-env))
+ (setenv (pop copy-env) (pop copy-env)))
+
+ ;; Use an asynchronous process. By this, password can
+ ;; be handled. The default directory must be local, in
+ ;; order to apply the correct `copy-program'. We don't
+ ;; set a timeout, because the copying of large files can
+ ;; last longer than 60 secs.
+ (let ((p (let ((default-directory
+ (tramp-compat-temporary-file-directory)))
+ (apply 'start-process
+ (tramp-get-connection-name v)
+ (tramp-get-connection-buffer v)
+ copy-program
+ (append copy-args (list source target))))))
+ (tramp-message
+ orig-vec 6 "%s"
+ (mapconcat 'identity (process-command p) " "))
+ (tramp-compat-set-process-query-on-exit-flag p nil)
+ (tramp-process-actions p v tramp-actions-copy-out-of-band)))
+
+ ;; Reset the transfer process properties.
+ (tramp-message orig-vec 6 "%s" (buffer-string))
+ (tramp-set-connection-property v "process-name" nil)
+ (tramp-set-connection-property v "process-buffer" nil)))
+
+ ;; Handle KEEP-DATE argument.
+ (when (and keep-date (not copy-keep-date))
+ (set-file-times newname (nth 5 (file-attributes filename))))
+
+ ;; Set the mode.
+ (unless (and keep-date copy-keep-date)
+ (ignore-errors
+ (set-file-modes newname (tramp-default-file-modes filename)))))
+
+ ;; If the operation was `rename', delete the original file.
+ (unless (eq op 'copy)
+ (if (file-regular-p filename)
+ (delete-file filename)
+ (tramp-compat-delete-directory filename 'recursive))))))
+
+(defun tramp-sh-handle-make-directory (dir &optional parents)
+ "Like `make-directory' for Tramp files."
+ (setq dir (expand-file-name dir))
+ (with-parsed-tramp-file-name dir nil
+ (tramp-flush-directory-property v (file-name-directory localname))
+ (save-excursion
+ (tramp-barf-unless-okay
+ v (format "%s %s"
+ (if parents "mkdir -p" "mkdir")
+ (tramp-shell-quote-argument localname))
+ "Couldn't make directory %s" dir))))
+
+(defun tramp-sh-handle-delete-directory (directory &optional recursive)
+ "Like `delete-directory' for Tramp files."
+ (setq directory (expand-file-name directory))
+ (with-parsed-tramp-file-name directory nil
+ (tramp-flush-file-property v (file-name-directory localname))
+ (tramp-flush-directory-property v localname)
+ (tramp-barf-unless-okay
+ v (format "%s %s"
+ (if recursive "rm -rf" "rmdir")
+ (tramp-shell-quote-argument localname))
+ "Couldn't delete %s" directory)))
+
+(defun tramp-sh-handle-delete-file (filename &optional trash)
+ "Like `delete-file' for Tramp files."
+ (setq filename (expand-file-name filename))
+ (with-parsed-tramp-file-name filename nil
+ (tramp-flush-file-property v (file-name-directory localname))
+ (tramp-flush-file-property v localname)
+ (tramp-barf-unless-okay
+ v (format "%s %s"
+ (or (and trash (tramp-get-remote-trash v)) "rm -f")
+ (tramp-shell-quote-argument localname))
+ "Couldn't delete %s" filename)))
+
+;; Dired.
+
+;; CCC: This does not seem to be enough. Something dies when
+;; we try and delete two directories under Tramp :/
+(defun tramp-sh-handle-dired-recursive-delete-directory (filename)
+ "Recursively delete the directory given.
+This is like `dired-recursive-delete-directory' for Tramp files."
+ (with-parsed-tramp-file-name filename nil
+ ;; Run a shell command 'rm -r <localname>'
+ ;; Code shamelessly stolen from the dired implementation and, um, hacked :)
+ (unless (file-exists-p filename)
+ (tramp-error v 'file-error "No such directory: %s" filename))
+ ;; Which is better, -r or -R? (-r works for me <daniel@danann.net>)
+ (tramp-send-command
+ v
+ (format "rm -rf %s" (tramp-shell-quote-argument localname))
+ ;; Don't read the output, do it explicitely.
+ nil t)
+ ;; Wait for the remote system to return to us...
+ ;; This might take a while, allow it plenty of time.
+ (tramp-wait-for-output (tramp-get-connection-process v) 120)
+ ;; Make sure that it worked...
+ (tramp-flush-file-property v (file-name-directory localname))
+ (tramp-flush-directory-property v localname)
+ (and (file-exists-p filename)
+ (tramp-error
+ v 'file-error "Failed to recursively delete %s" filename))))
+
+(defun tramp-sh-handle-dired-compress-file (file &rest ok-flag)
+ "Like `dired-compress-file' for Tramp files."
+ ;; OK-FLAG is valid for XEmacs only, but not implemented.
+ ;; Code stolen mainly from dired-aux.el.
+ (with-parsed-tramp-file-name file nil
+ (tramp-flush-file-property v localname)
+ (save-excursion
+ (let ((suffixes
+ (if (not (featurep 'xemacs))
+ ;; Emacs case
+ (symbol-value 'dired-compress-file-suffixes)
+ ;; XEmacs has `dired-compression-method-alist', which is
+ ;; transformed into `dired-compress-file-suffixes' structure.
+ (mapcar
+ (lambda (x)
+ (list (concat (regexp-quote (nth 1 x)) "\\'")
+ nil
+ (mapconcat 'identity (nth 3 x) " ")))
+ (symbol-value 'dired-compression-method-alist))))
+ suffix)
+ ;; See if any suffix rule matches this file name.
+ (while suffixes
+ (let (case-fold-search)
+ (if (string-match (car (car suffixes)) localname)
+ (setq suffix (car suffixes) suffixes nil))
+ (setq suffixes (cdr suffixes))))
+
+ (cond ((file-symlink-p file)
+ nil)
+ ((and suffix (nth 2 suffix))
+ ;; We found an uncompression rule.
+ (with-progress-reporter v 0 (format "Uncompressing %s" file)
+ (when (tramp-send-command-and-check
+ v (concat (nth 2 suffix) " "
+ (tramp-shell-quote-argument localname)))
+ ;; `dired-remove-file' is not defined in XEmacs.
+ (tramp-compat-funcall 'dired-remove-file file)
+ (string-match (car suffix) file)
+ (concat (substring file 0 (match-beginning 0))))))
+ (t
+ ;; We don't recognize the file as compressed, so compress it.
+ ;; Try gzip.
+ (with-progress-reporter v 0 (format "Compressing %s" file)
+ (when (tramp-send-command-and-check
+ v (concat "gzip -f "
+ (tramp-shell-quote-argument localname)))
+ ;; `dired-remove-file' is not defined in XEmacs.
+ (tramp-compat-funcall 'dired-remove-file file)
+ (cond ((file-exists-p (concat file ".gz"))
+ (concat file ".gz"))
+ ((file-exists-p (concat file ".z"))
+ (concat file ".z"))
+ (t nil))))))))))
+
+(defun tramp-sh-handle-insert-directory
+ (filename switches &optional wildcard full-directory-p)
+ "Like `insert-directory' for Tramp files."
+ (setq filename (expand-file-name filename))
+ (with-parsed-tramp-file-name filename nil
+ (if (and (featurep 'ls-lisp)
+ (not (symbol-value 'ls-lisp-use-insert-directory-program)))
+ (tramp-run-real-handler
+ 'insert-directory (list filename switches wildcard full-directory-p))
+ (when (stringp switches)
+ (setq switches (split-string switches)))
+ (when (and (member "--dired" switches)
+ (not (tramp-get-ls-command-with-dired v)))
+ (setq switches (delete "--dired" switches)))
+ (when wildcard
+ (setq wildcard (tramp-run-real-handler
+ 'file-name-nondirectory (list localname)))
+ (setq localname (tramp-run-real-handler
+ 'file-name-directory (list localname))))
+ (unless full-directory-p
+ (setq switches (add-to-list 'switches "-d" 'append)))
+ (setq switches (mapconcat 'tramp-shell-quote-argument switches " "))
+ (when wildcard
+ (setq switches (concat switches " " wildcard)))
+ (tramp-message
+ v 4 "Inserting directory `ls %s %s', wildcard %s, fulldir %s"
+ switches filename (if wildcard "yes" "no")
+ (if full-directory-p "yes" "no"))
+ ;; If `full-directory-p', we just say `ls -l FILENAME'.
+ ;; Else we chdir to the parent directory, then say `ls -ld BASENAME'.
+ (if full-directory-p
+ (tramp-send-command
+ v
+ (format "%s %s %s 2>/dev/null"
+ (tramp-get-ls-command v)
+ switches
+ (if wildcard
+ localname
+ (tramp-shell-quote-argument (concat localname ".")))))
+ (tramp-barf-unless-okay
+ v
+ (format "cd %s" (tramp-shell-quote-argument
+ (tramp-run-real-handler
+ 'file-name-directory (list localname))))
+ "Couldn't `cd %s'"
+ (tramp-shell-quote-argument
+ (tramp-run-real-handler 'file-name-directory (list localname))))
+ (tramp-send-command
+ v
+ (format "%s %s %s"
+ (tramp-get-ls-command v)
+ switches
+ (if (or wildcard
+ (zerop (length
+ (tramp-run-real-handler
+ 'file-name-nondirectory (list localname)))))
+ ""
+ (tramp-shell-quote-argument
+ (tramp-run-real-handler
+ 'file-name-nondirectory (list localname)))))))
+ (let ((beg (point)))
+ ;; We cannot use `insert-buffer-substring' because the Tramp
+ ;; buffer changes its contents before insertion due to calling
+ ;; `expand-file' and alike.
+ (insert
+ (with-current-buffer (tramp-get-buffer v)
+ (buffer-string)))
+
+ ;; Check for "--dired" output.
+ (forward-line -2)
+ (when (looking-at "//SUBDIRED//")
+ (forward-line -1))
+ (when (looking-at "//DIRED//\\s-+")
+ (let ((databeg (match-end 0))
+ (end (point-at-eol)))
+ ;; Now read the numeric positions of file names.
+ (goto-char databeg)
+ (while (< (point) end)
+ (let ((start (+ beg (read (current-buffer))))
+ (end (+ beg (read (current-buffer)))))
+ (if (memq (char-after end) '(?\n ?\ ))
+ ;; End is followed by \n or by " -> ".
+ (put-text-property start end 'dired-filename t))))))
+ ;; Remove trailing lines.
+ (goto-char (point-at-bol))
+ (while (looking-at "//")
+ (forward-line 1)
+ (delete-region (match-beginning 0) (point)))
+
+ ;; The inserted file could be from somewhere else.
+ (when (and (not wildcard) (not full-directory-p))
+ (goto-char (point-max))
+ (when (file-symlink-p filename)
+ (goto-char (search-backward "->" beg 'noerror)))
+ (search-backward
+ (if (zerop (length (file-name-nondirectory filename)))
+ "."
+ (file-name-nondirectory filename))
+ beg 'noerror)
+ (replace-match (file-relative-name filename) t))
+
+ (goto-char (point-max))))))
+
+;; Canonicalization of file names.
+
+(defun tramp-sh-handle-expand-file-name (name &optional dir)
+ "Like `expand-file-name' for Tramp files.
+If the localname part of the given filename starts with \"/../\" then
+the result will be a local, non-Tramp, filename."
+ ;; If DIR is not given, use DEFAULT-DIRECTORY or "/".
+ (setq dir (or dir default-directory "/"))
+ ;; Unless NAME is absolute, concat DIR and NAME.
+ (unless (file-name-absolute-p name)
+ (setq name (concat (file-name-as-directory dir) name)))
+ ;; If NAME is not a Tramp file, run the real handler.
+ (if (not (tramp-connectable-p name))
+ (tramp-run-real-handler 'expand-file-name (list name nil))
+ ;; Dissect NAME.
+ (with-parsed-tramp-file-name name nil
+ (unless (tramp-run-real-handler 'file-name-absolute-p (list localname))
+ (setq localname (concat "~/" localname)))
+ ;; Tilde expansion if necessary. This needs a shell which
+ ;; groks tilde expansion! The function `tramp-find-shell' is
+ ;; supposed to find such a shell on the remote host. Please
+ ;; tell me about it when this doesn't work on your system.
+ (when (string-match "\\`\\(~[^/]*\\)\\(.*\\)\\'" localname)
+ (let ((uname (match-string 1 localname))
+ (fname (match-string 2 localname)))
+ ;; We cannot simply apply "~/", because under sudo "~/" is
+ ;; expanded to the local user home directory but to the
+ ;; root home directory. On the other hand, using always
+ ;; the default user name for tilde expansion is not
+ ;; appropriate either, because ssh and companions might
+ ;; use a user name from the config file.
+ (when (and (string-equal uname "~")
+ (string-match "\\`su\\(do\\)?\\'" method))
+ (setq uname (concat uname user)))
+ (setq uname
+ (with-connection-property v uname
+ (tramp-send-command
+ v (format "cd %s; pwd" (tramp-shell-quote-argument uname)))
+ (with-current-buffer (tramp-get-buffer v)
+ (goto-char (point-min))
+ (buffer-substring (point) (point-at-eol)))))
+ (setq localname (concat uname fname))))
+ ;; There might be a double slash, for example when "~/"
+ ;; expands to "/". Remove this.
+ (while (string-match "//" localname)
+ (setq localname (replace-match "/" t t localname)))
+ ;; No tilde characters in file name, do normal
+ ;; `expand-file-name' (this does "/./" and "/../"). We bind
+ ;; `directory-sep-char' here for XEmacs on Windows, which would
+ ;; otherwise use backslash. `default-directory' is bound,
+ ;; because on Windows there would be problems with UNC shares or
+ ;; Cygwin mounts.
+ (let ((directory-sep-char ?/)
+ (default-directory (tramp-compat-temporary-file-directory)))
+ (tramp-make-tramp-file-name
+ method user host
+ (tramp-drop-volume-letter
+ (tramp-run-real-handler
+ 'expand-file-name (list localname))))))))
+
+;;; Remote commands:
+
+(defun tramp-sh-handle-executable-find (command)
+ "Like `executable-find' for Tramp files."
+ (with-parsed-tramp-file-name default-directory nil
+ (tramp-find-executable v command (tramp-get-remote-path v) t)))
+
+(defun tramp-process-sentinel (proc event)
+ "Flush file caches."
+ (unless (memq (process-status proc) '(run open))
+ (let ((vec (tramp-get-connection-property proc "vector" nil)))
+ (when vec
+ (tramp-message vec 5 "Sentinel called: `%s' `%s'" proc event)
+ (tramp-flush-directory-property vec "")))))
+
+;; We use BUFFER also as connection buffer during setup. Because of
+;; this, its original contents must be saved, and restored once
+;; connection has been setup.
+(defun tramp-sh-handle-start-file-process (name buffer program &rest args)
+ "Like `start-file-process' for Tramp files."
+ (with-parsed-tramp-file-name default-directory nil
++ ;; When PROGRAM is nil, we just provide a tty.
++ (let ((command
++ (when (stringp program)
++ (format "cd %s; exec %s"
++ (tramp-shell-quote-argument localname)
++ (mapconcat 'tramp-shell-quote-argument
++ (cons program args) " "))))
++ (tramp-process-connection-type
++ (or (null program) tramp-process-connection-type))
++ (bmp (and (buffer-live-p buffer) (buffer-modified-p buffer)))
++ (name1 name)
++ (i 0))
++ (unwind-protect
++ (save-excursion
++ (save-restriction
++ (unless buffer
++ ;; BUFFER can be nil. We use a temporary buffer.
++ (setq buffer (generate-new-buffer tramp-temp-buffer-name)))
++ (while (get-process name1)
++ ;; NAME must be unique as process name.
++ (setq i (1+ i)
++ name1 (format "%s<%d>" name i)))
++ (setq name name1)
++ ;; Set the new process properties.
++ (tramp-set-connection-property v "process-name" name)
++ (tramp-set-connection-property v "process-buffer" buffer)
++ ;; Activate narrowing in order to save BUFFER contents.
++ ;; Clear also the modification time; otherwise we might
++ ;; be interrupted by `verify-visited-file-modtime'.
++ (with-current-buffer (tramp-get-connection-buffer v)
++ (let ((buffer-undo-list t))
++ (clear-visited-file-modtime)
++ (narrow-to-region (point-max) (point-max))
++ (if command
++ ;; Send the command.
++ (tramp-send-command v command nil t) ; nooutput
++ ;; Check, whether a pty is associated.
++ (tramp-maybe-open-connection v)
++ (unless (tramp-compat-process-get
++ (tramp-get-connection-process v) 'remote-tty)
++ (tramp-error
++ v 'file-error
++ "pty association is not supported for `%s'" name)))))
++ (let ((p (tramp-get-connection-process v)))
++ ;; Set sentinel and query flag for this process.
++ (tramp-set-connection-property p "vector" v)
++ (set-process-sentinel p 'tramp-process-sentinel)
++ (tramp-compat-set-process-query-on-exit-flag p t)
++ ;; Return process.
++ p)))
++ ;; Save exit.
++ (with-current-buffer (tramp-get-connection-buffer v)
++ (if (string-match tramp-temp-buffer-name (buffer-name))
++ (progn
++ (set-process-buffer (tramp-get-connection-process v) nil)
++ (kill-buffer (current-buffer)))
++ (set-buffer-modified-p bmp)))
++ (tramp-set-connection-property v "process-name" nil)
++ (tramp-set-connection-property v "process-buffer" nil)))))
+
+(defun tramp-sh-handle-process-file
+ (program &optional infile destination display &rest args)
+ "Like `process-file' for Tramp files."
+ ;; The implementation is not complete yet.
+ (when (and (numberp destination) (zerop destination))
+ (error "Implementation does not handle immediate return"))
+
+ (with-parsed-tramp-file-name default-directory nil
+ (let (command input tmpinput stderr tmpstderr outbuf ret)
+ ;; Compute command.
+ (setq command (mapconcat 'tramp-shell-quote-argument
+ (cons program args) " "))
+ ;; Determine input.
+ (if (null infile)
+ (setq input "/dev/null")
+ (setq infile (expand-file-name infile))
+ (if (tramp-equal-remote default-directory infile)
+ ;; INFILE is on the same remote host.
+ (setq input (with-parsed-tramp-file-name infile nil localname))
+ ;; INFILE must be copied to remote host.
+ (setq input (tramp-make-tramp-temp-file v)
+ tmpinput (tramp-make-tramp-file-name method user host input))
+ (copy-file infile tmpinput t)))
+ (when input (setq command (format "%s <%s" command input)))
+
+ ;; Determine output.
+ (cond
+ ;; Just a buffer.
+ ((bufferp destination)
+ (setq outbuf destination))
+ ;; A buffer name.
+ ((stringp destination)
+ (setq outbuf (get-buffer-create destination)))
+ ;; (REAL-DESTINATION ERROR-DESTINATION)
+ ((consp destination)
+ ;; output.
+ (cond
+ ((bufferp (car destination))
+ (setq outbuf (car destination)))
+ ((stringp (car destination))
+ (setq outbuf (get-buffer-create (car destination))))
+ ((car destination)
+ (setq outbuf (current-buffer))))
+ ;; stderr.
+ (cond
+ ((stringp (cadr destination))
+ (setcar (cdr destination) (expand-file-name (cadr destination)))
+ (if (tramp-equal-remote default-directory (cadr destination))
+ ;; stderr is on the same remote host.
+ (setq stderr (with-parsed-tramp-file-name
+ (cadr destination) nil localname))
+ ;; stderr must be copied to remote host. The temporary
+ ;; file must be deleted after execution.
+ (setq stderr (tramp-make-tramp-temp-file v)
+ tmpstderr (tramp-make-tramp-file-name
+ method user host stderr))))
+ ;; stderr to be discarded.
+ ((null (cadr destination))
+ (setq stderr "/dev/null"))))
+ ;; 't
+ (destination
+ (setq outbuf (current-buffer))))
+ (when stderr (setq command (format "%s 2>%s" command stderr)))
+
+ ;; Send the command. It might not return in time, so we protect
+ ;; it. Call it in a subshell, in order to preserve working
+ ;; directory.
+ (condition-case nil
+ (unwind-protect
+ (setq ret
+ (if (tramp-send-command-and-check
+ v (format "\\cd %s; %s"
+ (tramp-shell-quote-argument localname)
+ command)
+ t t)
+ 0 1))
+ ;; We should show the output anyway.
+ (when outbuf
+ (with-current-buffer outbuf
+ (insert
+ (with-current-buffer (tramp-get-connection-buffer v)
+ (buffer-string))))
+ (when display (display-buffer outbuf))))
+ ;; When the user did interrupt, we should do it also. We use
+ ;; return code -1 as marker.
+ (quit
+ (kill-buffer (tramp-get-connection-buffer v))
+ (setq ret -1))
+ ;; Handle errors.
+ (error
+ (kill-buffer (tramp-get-connection-buffer v))
+ (setq ret 1)))
+
+ ;; Provide error file.
+ (when tmpstderr (rename-file tmpstderr (cadr destination) t))
+
+ ;; Cleanup. We remove all file cache values for the connection,
+ ;; because the remote process could have changed them.
+ (when tmpinput (delete-file tmpinput))
+
+ ;; `process-file-side-effects' has been introduced with GNU
+ ;; Emacs 23.2. If set to `nil', no remote file will be changed
+ ;; by `program'. If it doesn't exist, we assume its default
+ ;; value 't'.
+ (unless (and (boundp 'process-file-side-effects)
+ (not (symbol-value 'process-file-side-effects)))
+ (tramp-flush-directory-property v ""))
+
+ ;; Return exit status.
+ (if (equal ret -1)
+ (keyboard-quit)
+ ret))))
+
+(defun tramp-sh-handle-call-process-region
+ (start end program &optional delete buffer display &rest args)
+ "Like `call-process-region' for Tramp files."
+ (let ((tmpfile (tramp-compat-make-temp-file "")))
+ (write-region start end tmpfile)
+ (when delete (delete-region start end))
+ (unwind-protect
+ (apply 'call-process program tmpfile buffer display args)
+ (delete-file tmpfile))))
+
+(defun tramp-sh-handle-shell-command
+ (command &optional output-buffer error-buffer)
+ "Like `shell-command' for Tramp files."
+ (let* ((asynchronous (string-match "[ \t]*&[ \t]*\\'" command))
+ ;; We cannot use `shell-file-name' and `shell-command-switch',
+ ;; they are variables of the local host.
+ (args (list
+ (tramp-get-method-parameter
+ (tramp-file-name-method
+ (tramp-dissect-file-name default-directory))
+ 'tramp-remote-sh)
+ "-c" (substring command 0 asynchronous)))
+ current-buffer-p
+ (output-buffer
+ (cond
+ ((bufferp output-buffer) output-buffer)
+ ((stringp output-buffer) (get-buffer-create output-buffer))
+ (output-buffer
+ (setq current-buffer-p t)
+ (current-buffer))
+ (t (get-buffer-create
+ (if asynchronous
+ "*Async Shell Command*"
+ "*Shell Command Output*")))))
+ (error-buffer
+ (cond
+ ((bufferp error-buffer) error-buffer)
+ ((stringp error-buffer) (get-buffer-create error-buffer))))
+ (buffer
+ (if (and (not asynchronous) error-buffer)
+ (with-parsed-tramp-file-name default-directory nil
+ (list output-buffer (tramp-make-tramp-temp-file v)))
+ output-buffer))
+ (p (get-buffer-process output-buffer)))
+
+ ;; Check whether there is another process running. Tramp does not
+ ;; support 2 (asynchronous) processes in parallel.
+ (when p
+ (if (yes-or-no-p "A command is running. Kill it? ")
+ (ignore-errors (kill-process p))
+ (error "Shell command in progress")))
+
+ (if current-buffer-p
+ (progn
+ (barf-if-buffer-read-only)
+ (push-mark nil t))
+ (with-current-buffer output-buffer
+ (setq buffer-read-only nil)
+ (erase-buffer)))
+
+ (if (and (not current-buffer-p) (integerp asynchronous))
+ (prog1
+ ;; Run the process.
+ (apply 'start-file-process "*Async Shell*" buffer args)
+ ;; Display output.
+ (pop-to-buffer output-buffer)
+ (setq mode-line-process '(":%s"))
+ (shell-mode))
+
+ (prog1
+ ;; Run the process.
+ (apply 'process-file (car args) nil buffer nil (cdr args))
+ ;; Insert error messages if they were separated.
+ (when (listp buffer)
+ (with-current-buffer error-buffer
+ (insert-file-contents (cadr buffer)))
+ (delete-file (cadr buffer)))
+ (if current-buffer-p
+ ;; This is like exchange-point-and-mark, but doesn't
+ ;; activate the mark. It is cleaner to avoid activation,
+ ;; even though the command loop would deactivate the mark
+ ;; because we inserted text.
+ (goto-char (prog1 (mark t)
+ (set-marker (mark-marker) (point)
+ (current-buffer))))
+ ;; There's some output, display it.
+ (when (with-current-buffer output-buffer (> (point-max) (point-min)))
+ (if (functionp 'display-message-or-buffer)
+ (tramp-compat-funcall 'display-message-or-buffer output-buffer)
+ (pop-to-buffer output-buffer))))))))
+
+(defun tramp-sh-handle-file-local-copy (filename)
+ "Like `file-local-copy' for Tramp files."
+ (with-parsed-tramp-file-name filename nil
+ (unless (file-exists-p filename)
+ (tramp-error
+ v 'file-error
+ "Cannot make local copy of non-existing file `%s'" filename))
+
+ (let* ((size (nth 7 (file-attributes (file-truename filename))))
+ (rem-enc (tramp-get-inline-coding v "remote-encoding" size))
+ (loc-dec (tramp-get-inline-coding v "local-decoding" size))
+ (tmpfile (tramp-compat-make-temp-file filename)))
+
+ (condition-case err
+ (cond
+ ;; `copy-file' handles direct copy and out-of-band methods.
+ ((or (tramp-local-host-p v)
+ (tramp-method-out-of-band-p v size))
+ (copy-file filename tmpfile t t))
+
+ ;; Use inline encoding for file transfer.
+ (rem-enc
+ (save-excursion
+ (with-progress-reporter
+ v 3 (format "Encoding remote file %s" filename)
+ (tramp-barf-unless-okay
+ v (format rem-enc (tramp-shell-quote-argument localname))
+ "Encoding remote file failed"))
+
+ (if (functionp loc-dec)
+ ;; If local decoding is a function, we call it. We
+ ;; must disable multibyte, because
+ ;; `uudecode-decode-region' doesn't handle it
+ ;; correctly.
+ (with-temp-buffer
+ (set-buffer-multibyte nil)
+ (insert-buffer-substring (tramp-get-buffer v))
+ (with-progress-reporter
+ v 3 (format "Decoding remote file %s with function %s"
+ filename loc-dec)
+ (funcall loc-dec (point-min) (point-max))
+ ;; Unset `file-name-handler-alist'. Otherwise,
+ ;; epa-file gets confused.
+ (let (file-name-handler-alist
+ (coding-system-for-write 'binary))
+ (write-region (point-min) (point-max) tmpfile))))
+
+ ;; If tramp-decoding-function is not defined for this
+ ;; method, we invoke tramp-decoding-command instead.
+ (let ((tmpfile2 (tramp-compat-make-temp-file filename)))
+ ;; Unset `file-name-handler-alist'. Otherwise,
+ ;; epa-file gets confused.
+ (let (file-name-handler-alist
+ (coding-system-for-write 'binary))
+ (write-region (point-min) (point-max) tmpfile2))
+ (with-progress-reporter
+ v 3 (format "Decoding remote file %s with command %s"
+ filename loc-dec)
+ (unwind-protect
+ (tramp-call-local-coding-command
+ loc-dec tmpfile2 tmpfile)
+ (delete-file tmpfile2)))))
+
+ ;; Set proper permissions.
+ (set-file-modes tmpfile (tramp-default-file-modes filename))
+ ;; Set local user ownership.
+ (tramp-set-file-uid-gid tmpfile)))
+
+ ;; Oops, I don't know what to do.
+ (t (tramp-error
+ v 'file-error "Wrong method specification for `%s'" method)))
+
+ ;; Error handling.
+ ((error quit)
+ (delete-file tmpfile)
+ (signal (car err) (cdr err))))
+
+ (run-hooks 'tramp-handle-file-local-copy-hook)
+ tmpfile)))
+
+;; This is needed for XEmacs only. Code stolen from files.el.
+(defun tramp-sh-handle-insert-file-contents-literally
+ (filename &optional visit beg end replace)
+ "Like `insert-file-contents-literally' for Tramp files."
+ (let ((format-alist nil)
+ (after-insert-file-functions nil)
+ (coding-system-for-read 'no-conversion)
+ (coding-system-for-write 'no-conversion)
+ (find-buffer-file-type-function
+ (if (fboundp 'find-buffer-file-type)
+ (symbol-function 'find-buffer-file-type)
+ nil))
+ (inhibit-file-name-handlers '(jka-compr-handler image-file-handler))
+ (inhibit-file-name-operation 'insert-file-contents))
+ (unwind-protect
+ (progn
+ (fset 'find-buffer-file-type (lambda (filename) t))
+ (insert-file-contents filename visit beg end replace))
+ ;; Save exit.
+ (if find-buffer-file-type-function
+ (fset 'find-buffer-file-type find-buffer-file-type-function)
+ (fmakunbound 'find-buffer-file-type)))))
+
+(defun tramp-sh-handle-make-auto-save-file-name ()
+ "Like `make-auto-save-file-name' for Tramp files.
+Returns a file name in `tramp-auto-save-directory' for autosaving this file."
+ (let ((tramp-auto-save-directory tramp-auto-save-directory)
+ (buffer-file-name
+ (tramp-subst-strs-in-string
+ '(("_" . "|")
+ ("/" . "_a")
+ (":" . "_b")
+ ("|" . "__")
+ ("[" . "_l")
+ ("]" . "_r"))
+ (buffer-file-name))))
+ ;; File name must be unique. This is ensured with Emacs 22 (see
+ ;; UNIQUIFY element of `auto-save-file-name-transforms'); but for
+ ;; all other cases we must do it ourselves.
+ (when (boundp 'auto-save-file-name-transforms)
+ (mapc
+ (lambda (x)
+ (when (and (string-match (car x) buffer-file-name)
+ (not (car (cddr x))))
+ (setq tramp-auto-save-directory
+ (or tramp-auto-save-directory
+ (tramp-compat-temporary-file-directory)))))
+ (symbol-value 'auto-save-file-name-transforms)))
+ ;; Create directory.
+ (when tramp-auto-save-directory
+ (setq buffer-file-name
+ (expand-file-name buffer-file-name tramp-auto-save-directory))
+ (unless (file-exists-p tramp-auto-save-directory)
+ (make-directory tramp-auto-save-directory t)))
+ ;; Run plain `make-auto-save-file-name'. There might be an advice when
+ ;; it is not a magic file name operation (since Emacs 22).
+ ;; We must deactivate it temporarily.
+ (if (not (ad-is-active 'make-auto-save-file-name))
+ (tramp-run-real-handler 'make-auto-save-file-name nil)
+ ;; else
+ (ad-deactivate 'make-auto-save-file-name)
+ (prog1
+ (tramp-run-real-handler 'make-auto-save-file-name nil)
+ (ad-activate 'make-auto-save-file-name)))))
+
+;; CCC grok LOCKNAME
+(defun tramp-sh-handle-write-region
+ (start end filename &optional append visit lockname confirm)
+ "Like `write-region' for Tramp files."
+ (setq filename (expand-file-name filename))
+ (with-parsed-tramp-file-name filename nil
+ ;; Following part commented out because we don't know what to do about
+ ;; file locking, and it does not appear to be a problem to ignore it.
+ ;; Ange-ftp ignores it, too.
+ ;; (when (and lockname (stringp lockname))
+ ;; (setq lockname (expand-file-name lockname)))
+ ;; (unless (or (eq lockname nil)
+ ;; (string= lockname filename))
+ ;; (error
+ ;; "tramp-sh-handle-write-region: LOCKNAME must be nil or equal FILENAME"))
+
+ ;; XEmacs takes a coding system as the seventh argument, not `confirm'.
+ (when (and (not (featurep 'xemacs)) confirm (file-exists-p filename))
+ (unless (y-or-n-p (format "File %s exists; overwrite anyway? " filename))
+ (tramp-error v 'file-error "File not overwritten")))
+
+ (let ((uid (or (nth 2 (tramp-compat-file-attributes filename 'integer))
+ (tramp-get-remote-uid v 'integer)))
+ (gid (or (nth 3 (tramp-compat-file-attributes filename 'integer))
+ (tramp-get-remote-gid v 'integer))))
+
+ (if (and (tramp-local-host-p v)
+ ;; `file-writable-p' calls `file-expand-file-name'. We
+ ;; cannot use `tramp-run-real-handler' therefore.
+ (let (file-name-handler-alist)
+ (and
+ (file-writable-p (file-name-directory localname))
+ (or (file-directory-p localname)
+ (file-writable-p localname)))))
+ ;; Short track: if we are on the local host, we can run directly.
+ (tramp-run-real-handler
+ 'write-region
+ (list start end localname append 'no-message lockname confirm))
+
+ (let ((modes (save-excursion (tramp-default-file-modes filename)))
+ ;; We use this to save the value of
+ ;; `last-coding-system-used' after writing the tmp
+ ;; file. At the end of the function, we set
+ ;; `last-coding-system-used' to this saved value. This
+ ;; way, any intermediary coding systems used while
+ ;; talking to the remote shell or suchlike won't hose
+ ;; this variable. This approach was snarfed from
+ ;; ange-ftp.el.
+ coding-system-used
+ ;; Write region into a tmp file. This isn't really
+ ;; needed if we use an encoding function, but currently
+ ;; we use it always because this makes the logic
+ ;; simpler.
+ (tmpfile (or tramp-temp-buffer-file-name
+ (tramp-compat-make-temp-file filename))))
+
+ ;; If `append' is non-nil, we copy the file locally, and let
+ ;; the native `write-region' implementation do the job.
+ (when append (copy-file filename tmpfile 'ok))
+
+ ;; We say `no-message' here because we don't want the
+ ;; visited file modtime data to be clobbered from the temp
+ ;; file. We call `set-visited-file-modtime' ourselves later
+ ;; on. We must ensure that `file-coding-system-alist'
+ ;; matches `tmpfile'.
+ (let (file-name-handler-alist
+ (file-coding-system-alist
+ (tramp-find-file-name-coding-system-alist filename tmpfile)))
+ (condition-case err
+ (tramp-run-real-handler
+ 'write-region
+ (list start end tmpfile append 'no-message lockname confirm))
+ ((error quit)
+ (setq tramp-temp-buffer-file-name nil)
+ (delete-file tmpfile)
+ (signal (car err) (cdr err))))
+
+ ;; Now, `last-coding-system-used' has the right value. Remember it.
+ (when (boundp 'last-coding-system-used)
+ (setq coding-system-used
+ (symbol-value 'last-coding-system-used))))
+
+ ;; The permissions of the temporary file should be set. If
+ ;; filename does not exist (eq modes nil) it has been
+ ;; renamed to the backup file. This case `save-buffer'
+ ;; handles permissions.
+ ;; Ensure, that it is still readable.
+ (when modes
+ (set-file-modes
+ tmpfile
+ (logior (or modes 0) (tramp-compat-octal-to-decimal "0400"))))
+
+ ;; This is a bit lengthy due to the different methods
+ ;; possible for file transfer. First, we check whether the
+ ;; method uses an rcp program. If so, we call it.
+ ;; Otherwise, both encoding and decoding command must be
+ ;; specified. However, if the method _also_ specifies an
+ ;; encoding function, then that is used for encoding the
+ ;; contents of the tmp file.
+ (let* ((size (nth 7 (file-attributes tmpfile)))
+ (rem-dec (tramp-get-inline-coding v "remote-decoding" size))
+ (loc-enc (tramp-get-inline-coding v "local-encoding" size)))
+ (cond
+ ;; `copy-file' handles direct copy and out-of-band methods.
+ ((or (tramp-local-host-p v)
+ (tramp-method-out-of-band-p v size))
+ (if (and (not (stringp start))
+ (= (or end (point-max)) (point-max))
+ (= (or start (point-min)) (point-min))
+ (tramp-get-method-parameter
+ method 'tramp-copy-keep-tmpfile))
+ (progn
+ (setq tramp-temp-buffer-file-name tmpfile)
+ (condition-case err
+ ;; We keep the local file for performance
+ ;; reasons, useful for "rsync".
+ (copy-file tmpfile filename t)
+ ((error quit)
+ (setq tramp-temp-buffer-file-name nil)
+ (delete-file tmpfile)
+ (signal (car err) (cdr err)))))
+ (setq tramp-temp-buffer-file-name nil)
+ ;; Don't rename, in order to keep context in SELinux.
+ (unwind-protect
+ (copy-file tmpfile filename t)
+ (delete-file tmpfile))))
+
+ ;; Use inline file transfer.
+ (rem-dec
+ ;; Encode tmpfile.
+ (unwind-protect
+ (with-temp-buffer
+ (set-buffer-multibyte nil)
+ ;; Use encoding function or command.
+ (if (functionp loc-enc)
+ (with-progress-reporter
+ v 3 (format "Encoding region using function `%s'"
+ loc-enc)
+ (let ((coding-system-for-read 'binary))
+ (insert-file-contents-literally tmpfile))
+ ;; The following `let' is a workaround for the
+ ;; base64.el that comes with pgnus-0.84. If
+ ;; both of the following conditions are
+ ;; satisfied, it tries to write to a local
+ ;; file in default-directory, but at this
+ ;; point, default-directory is remote.
+ ;; (`call-process-region' can't write to
+ ;; remote files, it seems.) The file in
+ ;; question is a tmp file anyway.
+ (let ((default-directory
+ (tramp-compat-temporary-file-directory)))
+ (funcall loc-enc (point-min) (point-max))))
+
+ (with-progress-reporter
+ v 3 (format "Encoding region using command `%s'"
+ loc-enc)
+ (unless (zerop (tramp-call-local-coding-command
+ loc-enc tmpfile t))
+ (tramp-error
+ v 'file-error
+ (concat "Cannot write to `%s', "
+ "local encoding command `%s' failed")
+ filename loc-enc))))
+
+ ;; Send buffer into remote decoding command which
+ ;; writes to remote file. Because this happens on
+ ;; the remote host, we cannot use the function.
+ (with-progress-reporter
+ v 3
+ (format "Decoding region into remote file %s" filename)
+ (goto-char (point-max))
+ (unless (bolp) (newline))
+ (tramp-send-command
+ v
+ (format
+ (concat rem-dec " <<'EOF'\n%sEOF")
+ (tramp-shell-quote-argument localname)
+ (buffer-string)))
+ (tramp-barf-unless-okay
+ v nil
+ "Couldn't write region to `%s', decode using `%s' failed"
+ filename rem-dec)
+ ;; When `file-precious-flag' is set, the region is
+ ;; written to a temporary file. Check that the
+ ;; checksum is equal to that from the local tmpfile.
+ (when file-precious-flag
+ (erase-buffer)
+ (and
+ ;; cksum runs locally, if possible.
+ (zerop (tramp-compat-call-process "cksum" tmpfile t))
+ ;; cksum runs remotely.
+ (tramp-send-command-and-check
+ v
+ (format
+ "cksum <%s" (tramp-shell-quote-argument localname)))
+ ;; ... they are different.
+ (not
+ (string-equal
+ (buffer-string)
+ (with-current-buffer (tramp-get-buffer v)
+ (buffer-string))))
+ (tramp-error
+ v 'file-error
+ (concat "Couldn't write region to `%s',"
+ " decode using `%s' failed")
+ filename rem-dec)))))
+
+ ;; Save exit.
+ (delete-file tmpfile)))
+
+ ;; That's not expected.
+ (t
+ (tramp-error
+ v 'file-error
+ (concat "Method `%s' should specify both encoding and "
+ "decoding command or an rcp program")
+ method))))
+
+ ;; Make `last-coding-system-used' have the right value.
+ (when coding-system-used
+ (set 'last-coding-system-used coding-system-used))))
+
+ (tramp-flush-file-property v (file-name-directory localname))
+ (tramp-flush-file-property v localname)
+
+ ;; We must protect `last-coding-system-used', now we have set it
+ ;; to its correct value.
+ (let (last-coding-system-used (need-chown t))
+ ;; Set file modification time.
+ (when (or (eq visit t) (stringp visit))
+ (let ((file-attr (file-attributes filename)))
+ (set-visited-file-modtime
+ ;; We must pass modtime explicitely, because filename can
+ ;; be different from (buffer-file-name), f.e. if
+ ;; `file-precious-flag' is set.
+ (nth 5 file-attr))
+ (when (and (eq (nth 2 file-attr) uid)
+ (eq (nth 3 file-attr) gid))
+ (setq need-chown nil))))
+
+ ;; Set the ownership.
+ (when need-chown
+ (tramp-set-file-uid-gid filename uid gid))
+ (when (or (eq visit t) (null visit) (stringp visit))
+ (tramp-message v 0 "Wrote %s" filename))
+ (run-hooks 'tramp-handle-write-region-hook)))))
+
+(defvar tramp-vc-registered-file-names nil
+ "List used to collect file names, which are checked during `vc-registered'.")
+
+;; VC backends check for the existence of various different special
+;; files. This is very time consuming, because every single check
+;; requires a remote command (the file cache must be invalidated).
+;; Therefore, we apply a kind of optimization. We install the file
+;; name handler `tramp-vc-file-name-handler', which does nothing but
+;; remembers all file names for which `file-exists-p' or
+;; `file-readable-p' has been applied. A first run of `vc-registered'
+;; is performed. Afterwards, a script is applied for all collected
+;; file names, using just one remote command. The result of this
+;; script is used to fill the file cache with actual values. Now we
+;; can reset the file name handlers, and we make a second run of
+;; `vc-registered', which returns the expected result without sending
+;; any other remote command.
+(defun tramp-sh-handle-vc-registered (file)
+ "Like `vc-registered' for Tramp files."
+ (tramp-compat-with-temp-message ""
+ (with-parsed-tramp-file-name file nil
+ (with-progress-reporter
+ v 3 (format "Checking `vc-registered' for %s" file)
+
+ ;; There could be new files, created by the vc backend. We
+ ;; cannot reuse the old cache entries, therefore.
+ (let (tramp-vc-registered-file-names
+ (remote-file-name-inhibit-cache (current-time))
+ (file-name-handler-alist
+ `((,tramp-file-name-regexp . tramp-vc-file-name-handler))))
+
+ ;; Here we collect only file names, which need an operation.
+ (tramp-run-real-handler 'vc-registered (list file))
+ (tramp-message v 10 "\n%s" tramp-vc-registered-file-names)
+
+ ;; Send just one command, in order to fill the cache.
+ (when tramp-vc-registered-file-names
+ (tramp-maybe-send-script
+ v
+ (format tramp-vc-registered-read-file-names
+ (tramp-get-file-exists-command v)
+ (format "%s -r" (tramp-get-test-command v)))
+ "tramp_vc_registered_read_file_names")
+
+ (dolist
+ (elt
+ (tramp-send-command-and-read
+ v
+ (format
+ "tramp_vc_registered_read_file_names <<'EOF'\n%s\nEOF\n"
+ (mapconcat 'tramp-shell-quote-argument
+ tramp-vc-registered-file-names
+ "\n"))))
+
+ (tramp-set-file-property
+ v (car elt) (cadr elt) (cadr (cdr elt))))))
+
+ ;; Second run. Now all `file-exists-p' or `file-readable-p'
+ ;; calls shall be answered from the file cache. We unset
+ ;; `process-file-side-effects' in order to keep the cache when
+ ;; `process-file' calls appear.
+ (let (process-file-side-effects)
+ (tramp-run-real-handler 'vc-registered (list file)))))))
+
+;;;###tramp-autoload
+(defun tramp-sh-file-name-handler (operation &rest args)
+ "Invoke remote-shell Tramp file name handler.
+Fall back to normal file name handler if no Tramp handler exists."
+ (when (and tramp-locked (not tramp-locker))
+ (setq tramp-locked nil)
+ (signal 'file-error (list "Forbidden reentrant call of Tramp")))
+ (let ((tl tramp-locked))
+ (unwind-protect
+ (progn
+ (setq tramp-locked t)
+ (let ((tramp-locker t))
+ (save-match-data
+ (let ((fn (assoc operation tramp-sh-file-name-handler-alist)))
+ (if fn
+ (apply (cdr fn) args)
+ (tramp-run-real-handler operation args))))))
+ (setq tramp-locked tl))))
+
+(defun tramp-vc-file-name-handler (operation &rest args)
+ "Invoke special file name handler, which collects files to be handled."
+ (save-match-data
+ (let ((filename
+ (tramp-replace-environment-variables
+ (apply 'tramp-file-name-for-operation operation args)))
+ (fn (assoc operation tramp-sh-file-name-handler-alist)))
+ (with-parsed-tramp-file-name filename nil
+ (cond
+ ;; That's what we want: file names, for which checks are
+ ;; applied. We assume, that VC uses only `file-exists-p' and
+ ;; `file-readable-p' checks; otherwise we must extend the
+ ;; list. We do not perform any action, but return nil, in
+ ;; order to keep `vc-registered' running.
+ ((and fn (memq operation '(file-exists-p file-readable-p)))
+ (add-to-list 'tramp-vc-registered-file-names localname 'append)
+ nil)
+ ;; Tramp file name handlers like `expand-file-name'. They
+ ;; must still work.
+ (fn
+ (save-match-data (apply (cdr fn) args)))
+ ;; Default file name handlers, we don't care.
+ (t (tramp-run-real-handler operation args)))))))
+
+;;; Internal Functions:
+
+(defun tramp-maybe-send-script (vec script name)
+ "Define in remote shell function NAME implemented as SCRIPT.
+Only send the definition if it has not already been done."
+ (let* ((p (tramp-get-connection-process vec))
+ (scripts (tramp-get-connection-property p "scripts" nil)))
+ (unless (member name scripts)
+ (with-progress-reporter vec 5 (format "Sending script `%s'" name)
+ ;; The script could contain a call of Perl. This is masked with `%s'.
+ (tramp-barf-unless-okay
+ vec
+ (format "%s () {\n%s\n}" name
+ (format script (tramp-get-remote-perl vec)))
+ "Script %s sending failed" name)
+ (tramp-set-connection-property p "scripts" (cons name scripts))))))
+
+(defun tramp-set-auto-save ()
+ (when (and ;; ange-ftp has its own auto-save mechanism
+ (eq (tramp-find-foreign-file-name-handler (buffer-file-name))
+ 'tramp-sh-file-name-handler)
+ auto-save-default)
+ (auto-save-mode 1)))
+(add-hook 'find-file-hooks 'tramp-set-auto-save t)
+(add-hook 'tramp-unload-hook
+ (lambda ()
+ (remove-hook 'find-file-hooks 'tramp-set-auto-save)))
+
+(defun tramp-run-test (switch filename)
+ "Run `test' on the remote system, given a SWITCH and a FILENAME.
+Returns the exit code of the `test' program."
+ (with-parsed-tramp-file-name filename nil
+ (tramp-send-command-and-check
+ v
+ (format
+ "%s %s %s"
+ (tramp-get-test-command v)
+ switch
+ (tramp-shell-quote-argument localname)))))
+
+(defun tramp-run-test2 (format-string file1 file2)
+ "Run `test'-like program on the remote system, given FILE1, FILE2.
+FORMAT-STRING contains the program name, switches, and place holders.
+Returns the exit code of the `test' program. Barfs if the methods,
+hosts, or files, disagree."
+ (unless (tramp-equal-remote file1 file2)
+ (with-parsed-tramp-file-name (if (tramp-tramp-file-p file1) file1 file2) nil
+ (tramp-error
+ v 'file-error
+ "tramp-run-test2 only implemented for same method, user, host")))
+ (with-parsed-tramp-file-name file1 v1
+ (with-parsed-tramp-file-name file1 v2
+ (tramp-send-command-and-check
+ v1
+ (format format-string
+ (tramp-shell-quote-argument v1-localname)
+ (tramp-shell-quote-argument v2-localname))))))
+
+(defun tramp-find-executable
+ (vec progname dirlist &optional ignore-tilde ignore-path)
+ "Searches for PROGNAME in $PATH and all directories mentioned in DIRLIST.
+First arg VEC specifies the connection, PROGNAME is the program
+to search for, and DIRLIST gives the list of directories to
+search. If IGNORE-TILDE is non-nil, directory names starting
+with `~' will be ignored. If IGNORE-PATH is non-nil, searches
+only in DIRLIST.
+
+Returns the absolute file name of PROGNAME, if found, and nil otherwise.
+
+This function expects to be in the right *tramp* buffer."
+ (with-current-buffer (tramp-get-connection-buffer vec)
+ (let (result)
+ ;; Check whether the executable is in $PATH. "which(1)" does not
+ ;; report always a correct error code; therefore we check the
+ ;; number of words it returns.
+ (unless ignore-path
+ (tramp-send-command vec (format "which \\%s | wc -w" progname))
+ (goto-char (point-min))
+ (if (looking-at "^\\s-*1$")
+ (setq result (concat "\\" progname))))
+ (unless result
+ (when ignore-tilde
+ ;; Remove all ~/foo directories from dirlist. In XEmacs,
+ ;; `remove' is in CL, and we want to avoid CL dependencies.
+ (let (newdl d)
+ (while dirlist
+ (setq d (car dirlist))
+ (setq dirlist (cdr dirlist))
+ (unless (char-equal ?~ (aref d 0))
+ (setq newdl (cons d newdl))))
+ (setq dirlist (nreverse newdl))))
+ (tramp-send-command
+ vec
+ (format (concat "while read d; "
+ "do if test -x $d/%s -a -f $d/%s; "
+ "then echo tramp_executable $d/%s; "
+ "break; fi; done <<'EOF'\n"
+ "%s\nEOF")
+ progname progname progname (mapconcat 'identity dirlist "\n")))
+ (goto-char (point-max))
+ (when (search-backward "tramp_executable " nil t)
+ (skip-chars-forward "^ ")
+ (skip-chars-forward " ")
+ (setq result (buffer-substring (point) (point-at-eol)))))
+ result)))
+
+(defun tramp-set-remote-path (vec)
+ "Sets the remote environment PATH to existing directories.
+I.e., for each directory in `tramp-remote-path', it is tested
+whether it exists and if so, it is added to the environment
+variable PATH."
+ (tramp-message vec 5 (format "Setting $PATH environment variable"))
+ (tramp-send-command
+ vec (format "PATH=%s; export PATH"
+ (mapconcat 'identity (tramp-get-remote-path vec) ":"))))
+
+;; ------------------------------------------------------------
+;; -- Communication with external shell --
+;; ------------------------------------------------------------
+
+(defun tramp-find-file-exists-command (vec)
+ "Find a command on the remote host for checking if a file exists.
+Here, we are looking for a command which has zero exit status if the
+file exists and nonzero exit status otherwise."
+ (let ((existing "/")
+ (nonexisting
+ (tramp-shell-quote-argument "/ this file does not exist "))
+ result)
+ ;; The algorithm is as follows: we try a list of several commands.
+ ;; For each command, we first run `$cmd /' -- this should return
+ ;; true, as the root directory always exists. And then we run
+ ;; `$cmd /this\ file\ does\ not\ exist ', hoping that the file indeed
+ ;; does not exist. This should return false. We use the first
+ ;; command we find that seems to work.
+ ;; The list of commands to try is as follows:
+ ;; `ls -d' This works on most systems, but NetBSD 1.4
+ ;; has a bug: `ls' always returns zero exit
+ ;; status, even for files which don't exist.
+ ;; `test -e' Some Bourne shells have a `test' builtin
+ ;; which does not know the `-e' option.
+ ;; `/bin/test -e' For those, the `test' binary on disk normally
+ ;; provides the option. Alas, the binary
+ ;; is sometimes `/bin/test' and sometimes it's
+ ;; `/usr/bin/test'.
+ ;; `/usr/bin/test -e' In case `/bin/test' does not exist.
+ (unless (or
+ (and (setq result (format "%s -e" (tramp-get-test-command vec)))
+ (tramp-send-command-and-check
+ vec (format "%s %s" result existing))
+ (not (tramp-send-command-and-check
+ vec (format "%s %s" result nonexisting))))
+ (and (setq result "/bin/test -e")
+ (tramp-send-command-and-check
+ vec (format "%s %s" result existing))
+ (not (tramp-send-command-and-check
+ vec (format "%s %s" result nonexisting))))
+ (and (setq result "/usr/bin/test -e")
+ (tramp-send-command-and-check
+ vec (format "%s %s" result existing))
+ (not (tramp-send-command-and-check
+ vec (format "%s %s" result nonexisting))))
+ (and (setq result (format "%s -d" (tramp-get-ls-command vec)))
+ (tramp-send-command-and-check
+ vec (format "%s %s" result existing))
+ (not (tramp-send-command-and-check
+ vec (format "%s %s" result nonexisting)))))
+ (tramp-error
+ vec 'file-error "Couldn't find command to check if file exists"))
+ result))
+
+(defun tramp-open-shell (vec shell)
+ "Opens shell SHELL."
+ (with-progress-reporter vec 5 (format "Opening remote shell `%s'" shell)
+ ;; Find arguments for this shell.
+ (let ((tramp-end-of-output tramp-initial-end-of-output)
+ (alist tramp-sh-extra-args)
+ item extra-args)
+ (while (and alist (null extra-args))
+ (setq item (pop alist))
+ (when (string-match (car item) shell)
+ (setq extra-args (cdr item))))
+ (when extra-args (setq shell (concat shell " " extra-args)))
+ (tramp-send-command
+ vec (format "exec env ENV='' PROMPT_COMMAND='' PS1=%s PS2='' PS3='' %s"
+ (shell-quote-argument tramp-end-of-output) shell)
+ t))
+ ;; Setting prompts.
+ (tramp-send-command
+ vec (format "PS1=%s" (shell-quote-argument tramp-end-of-output)) t)
+ (tramp-send-command vec "PS2=''" t)
+ (tramp-send-command vec "PS3=''" t)
+ (tramp-send-command vec "PROMPT_COMMAND=''" t)))
+
+(defun tramp-find-shell (vec)
+ "Opens a shell on the remote host which groks tilde expansion."
+ (unless (tramp-get-connection-property vec "remote-shell" nil)
+ (let (shell)
+ (with-current-buffer (tramp-get-buffer vec)
+ (tramp-send-command vec "echo ~root" t)
+ (cond
+ ((or (string-match "^~root$" (buffer-string))
+ ;; The default shell (ksh93) of OpenSolaris is buggy.
+ (string-equal (tramp-get-connection-property vec "uname" "")
+ "SunOS 5.11"))
+ (setq shell
+ (or (tramp-find-executable
+ vec "bash" (tramp-get-remote-path vec) t t)
+ (tramp-find-executable
+ vec "ksh" (tramp-get-remote-path vec) t t)))
+ (unless shell
+ (tramp-error
+ vec 'file-error
+ "Couldn't find a shell which groks tilde expansion"))
+ (tramp-message
+ vec 5 "Starting remote shell `%s' for tilde expansion" shell)
+ (tramp-open-shell vec shell))
+
+ (t (tramp-message
+ vec 5 "Remote `%s' groks tilde expansion, good"
+ (tramp-set-connection-property
+ vec "remote-shell"
+ (tramp-get-method-parameter
+ (tramp-file-name-method vec) 'tramp-remote-sh)))))))))
+
+;; Utility functions.
+
+(defun tramp-barf-if-no-shell-prompt (proc timeout &rest error-args)
+ "Wait for shell prompt and barf if none appears.
+Looks at process PROC to see if a shell prompt appears in TIMEOUT
+seconds. If not, it produces an error message with the given ERROR-ARGS."
+ (unless
+ (tramp-wait-for-regexp
+ proc timeout
+ (format
+ "\\(%s\\|%s\\)\\'" shell-prompt-pattern tramp-shell-prompt-pattern))
+ (apply 'tramp-error-with-buffer nil proc 'file-error error-args)))
+
+(defun tramp-open-connection-setup-interactive-shell (proc vec)
+ "Set up an interactive shell.
+Mainly sets the prompt and the echo correctly. PROC is the shell
+process to set up. VEC specifies the connection."
+ (let ((tramp-end-of-output tramp-initial-end-of-output))
+ ;; It is useful to set the prompt in the following command because
+ ;; some people have a setting for $PS1 which /bin/sh doesn't know
+ ;; about and thus /bin/sh will display a strange prompt. For
+ ;; example, if $PS1 has "${CWD}" in the value, then ksh will
+ ;; display the current working directory but /bin/sh will display
+ ;; a dollar sign. The following command line sets $PS1 to a sane
+ ;; value, and works under Bourne-ish shells as well as csh-like
+ ;; shells. Daniel Pittman reports that the unusual positioning of
+ ;; the single quotes makes it work under `rc', too. We also unset
+ ;; the variable $ENV because that is read by some sh
+ ;; implementations (eg, bash when called as sh) on startup; this
+ ;; way, we avoid the startup file clobbering $PS1. $PROMPT_COMMAND
+ ;; is another way to set the prompt in /bin/bash, it must be
+ ;; discarded as well.
+ (tramp-open-shell
+ vec
+ (tramp-get-method-parameter (tramp-file-name-method vec) 'tramp-remote-sh))
+
+ ;; Disable echo.
+ (tramp-message vec 5 "Setting up remote shell environment")
+ (tramp-send-command vec "stty -inlcr -echo kill '^U' erase '^H'" t)
+ ;; Check whether the echo has really been disabled. Some
+ ;; implementations, like busybox of embedded GNU/Linux, don't
+ ;; support disabling.
+ (tramp-send-command vec "echo foo" t)
+ (with-current-buffer (process-buffer proc)
+ (goto-char (point-min))
+ (when (looking-at "echo foo")
+ (tramp-set-connection-property proc "remote-echo" t)
+ (tramp-message vec 5 "Remote echo still on. Ok.")
+ ;; Make sure backspaces and their echo are enabled and no line
+ ;; width magic interferes with them.
+ (tramp-send-command vec "stty icanon erase ^H cols 32767" t))))
+
+ (tramp-message vec 5 "Setting shell prompt")
+ (tramp-send-command
+ vec (format "PS1=%s" (shell-quote-argument tramp-end-of-output)) t)
+ (tramp-send-command vec "PS2=''" t)
+ (tramp-send-command vec "PS3=''" t)
+ (tramp-send-command vec "PROMPT_COMMAND=''" t)
+
+ ;; Try to set up the coding system correctly.
+ ;; CCC this can't be the right way to do it. Hm.
+ (tramp-message vec 5 "Determining coding system")
+ (tramp-send-command vec "echo foo ; echo bar" t)
+ (with-current-buffer (process-buffer proc)
+ (goto-char (point-min))
+ (if (featurep 'mule)
+ ;; Use MULE to select the right EOL convention for communicating
+ ;; with the process.
+ (let* ((cs (or (tramp-compat-funcall 'process-coding-system proc)
+ (cons 'undecided 'undecided)))
+ cs-decode cs-encode)
+ (when (symbolp cs) (setq cs (cons cs cs)))
+ (setq cs-decode (car cs))
+ (setq cs-encode (cdr cs))
+ (unless cs-decode (setq cs-decode 'undecided))
+ (unless cs-encode (setq cs-encode 'undecided))
+ (setq cs-encode (tramp-compat-coding-system-change-eol-conversion
+ cs-encode 'unix))
+ (when (search-forward "\r" nil t)
+ (setq cs-decode (tramp-compat-coding-system-change-eol-conversion
+ cs-decode 'dos)))
+ (tramp-compat-funcall
+ 'set-buffer-process-coding-system cs-decode cs-encode)
+ (tramp-message
+ vec 5 "Setting coding system to `%s' and `%s'" cs-decode cs-encode))
+ ;; Look for ^M and do something useful if found.
+ (when (search-forward "\r" nil t)
+ ;; We have found a ^M but cannot frob the process coding system
+ ;; because we're running on a non-MULE Emacs. Let's try
+ ;; stty, instead.
+ (tramp-send-command vec "stty -onlcr" t))))
+
+ (tramp-send-command vec "set +o vi +o emacs" t)
+
+ ;; Check whether the output of "uname -sr" has been changed. If
+ ;; yes, this is a strong indication that we must expire all
+ ;; connection properties. We start again with
+ ;; `tramp-maybe-open-connection', it will be catched there.
+ (tramp-message vec 5 "Checking system information")
+ (let ((old-uname (tramp-get-connection-property vec "uname" nil))
+ (new-uname
+ (tramp-set-connection-property
+ vec "uname"
+ (tramp-send-command-and-read vec "echo \\\"`uname -sr`\\\""))))
+ (when (and (stringp old-uname) (not (string-equal old-uname new-uname)))
+ (with-current-buffer (tramp-get-debug-buffer vec)
+ ;; Keep the debug buffer.
+ (rename-buffer
+ (generate-new-buffer-name tramp-temp-buffer-name) 'unique)
+ (tramp-cleanup-connection vec)
+ (if (= (point-min) (point-max))
+ (kill-buffer nil)
+ (rename-buffer (tramp-debug-buffer-name vec) 'unique))
+ ;; We call `tramp-get-buffer' in order to keep the debug buffer.
+ (tramp-get-buffer vec)
+ (tramp-message
+ vec 3
+ "Connection reset, because remote host changed from `%s' to `%s'"
+ old-uname new-uname)
+ (throw 'uname-changed (tramp-maybe-open-connection vec)))))
+
+ ;; Check whether the remote host suffers from buggy
+ ;; `send-process-string'. This is known for FreeBSD (see comment in
+ ;; `send_process', file process.c). I've tested sending 624 bytes
+ ;; successfully, sending 625 bytes failed. Emacs makes a hack when
+ ;; this host type is detected locally. It cannot handle remote
+ ;; hosts, though.
+ (with-connection-property proc "chunksize"
+ (cond
+ ((and (integerp tramp-chunksize) (> tramp-chunksize 0))
+ tramp-chunksize)
+ (t
+ (tramp-message
+ vec 5 "Checking remote host type for `send-process-string' bug")
+ (if (string-match
+ "^FreeBSD" (tramp-get-connection-property vec "uname" ""))
+ 500 0))))
+
+ ;; Set remote PATH variable.
+ (tramp-set-remote-path vec)
+
+ ;; Search for a good shell before searching for a command which
+ ;; checks if a file exists. This is done because Tramp wants to use
+ ;; "test foo; echo $?" to check if various conditions hold, and
+ ;; there are buggy /bin/sh implementations which don't execute the
+ ;; "echo $?" part if the "test" part has an error. In particular,
+ ;; the OpenSolaris /bin/sh is a problem. There are also other
+ ;; problems with /bin/sh of OpenSolaris, like redirection of stderr
+ ;; in function declarations, or changing HISTFILE in place.
+ ;; Therefore, OpenSolaris' /bin/sh is replaced by bash, when
+ ;; detected.
+ (tramp-find-shell vec)
+
+ ;; Disable unexpected output.
+ (tramp-send-command vec "mesg n; biff n" t)
+
+ ;; IRIX64 bash expands "!" even when in single quotes. This
+ ;; destroys our shell functions, we must disable it. See
+ ;; <http://stackoverflow.com/questions/3291692/irix-bash-shell-expands-expression-in-single-quotes-yet-shouldnt>.
+ (when (string-match "^IRIX64" (tramp-get-connection-property vec "uname" ""))
+ (tramp-send-command vec "set +H" t))
+
+ ;; On BSD-like systems, ?\t is expanded to spaces. Suppress this.
+ (when (string-match "BSD\\|Darwin"
+ (tramp-get-connection-property vec "uname" ""))
+ (tramp-send-command vec "stty -oxtabs" t))
+
+ ;; Set `remote-tty' process property.
+ (ignore-errors
+ (let ((tty (tramp-send-command-and-read vec "echo \\\"`tty`\\\"")))
+ (unless (zerop (length tty))
+ (tramp-compat-process-put proc 'remote-tty tty))))
+
+ ;; Dump stty settings in the traces.
+ (when (>= tramp-verbose 9)
+ (tramp-send-command vec "stty -a" t))
+
+ ;; Set the environment.
+ (tramp-message vec 5 "Setting default environment")
+
+ (let ((env (copy-sequence tramp-remote-process-environment))
+ unset item)
+ (while env
+ (setq item (tramp-compat-split-string (car env) "="))
+ (setcdr item (mapconcat 'identity (cdr item) "="))
+ (if (and (stringp (cdr item)) (not (string-equal (cdr item) "")))
+ (tramp-send-command
+ vec (format "%s=%s; export %s" (car item) (cdr item) (car item)) t)
+ (push (car item) unset))
+ (setq env (cdr env)))
+ (when unset
+ (tramp-send-command
+ vec (format "unset %s" (mapconcat 'identity unset " ")) t))))
+
+;; CCC: We should either implement a Perl version of base64 encoding
+;; and decoding. Then we just use that in the last item. The other
+;; alternative is to use the Perl version of UU encoding. But then
+;; we need a Lisp version of uuencode.
+;;
+;; Old text from documentation of tramp-methods:
+;; Using a uuencode/uudecode inline method is discouraged, please use one
+;; of the base64 methods instead since base64 encoding is much more
+;; reliable and the commands are more standardized between the different
+;; Unix versions. But if you can't use base64 for some reason, please
+;; note that the default uudecode command does not work well for some
+;; Unices, in particular AIX and Irix. For AIX, you might want to use
+;; the following command for uudecode:
+;;
+;; sed '/^begin/d;/^[` ]$/d;/^end/d' | iconv -f uucode -t ISO8859-1
+;;
+;; For Irix, no solution is known yet.
+
+(autoload 'uudecode-decode-region "uudecode")
+
+(defconst tramp-local-coding-commands
+ '((b64 base64-encode-region base64-decode-region)
+ (uu tramp-uuencode-region uudecode-decode-region)
+ (pack
+ "perl -e 'binmode STDIN; binmode STDOUT; print pack(q{u*}, join q{}, <>)'"
+ "perl -e 'binmode STDIN; binmode STDOUT; print unpack(q{u*}, join q{}, <>)'"))
+ "List of local coding commands for inline transfer.
+Each item is a list that looks like this:
+
+\(FORMAT ENCODING DECODING\)
+
+FORMAT is symbol describing the encoding/decoding format. It can be
+`b64' for base64 encoding, `uu' for uu encoding, or `pack' for simple packing.
+
+ENCODING and DECODING can be strings, giving commands, or symbols,
+giving functions. If they are strings, then they can contain
+the \"%s\" format specifier. If that specifier is present, the input
+filename will be put into the command line at that spot. If the
+specifier is not present, the input should be read from standard
+input.
+
+If they are functions, they will be called with two arguments, start
+and end of region, and are expected to replace the region contents
+with the encoded or decoded results, respectively.")
+
+(defconst tramp-remote-coding-commands
+ '((b64 "base64" "base64 -d -i")
+ ;; "-i" is more robust with older base64 from GNU coreutils.
+ ;; However, I don't know whether all base64 versions do supports
+ ;; this option.
+ (b64 "base64" "base64 -d")
+ (b64 "mimencode -b" "mimencode -u -b")
+ (b64 "mmencode -b" "mmencode -u -b")
+ (b64 "recode data..base64" "recode base64..data")
+ (b64 tramp-perl-encode-with-module tramp-perl-decode-with-module)
+ (b64 tramp-perl-encode tramp-perl-decode)
+ (uu "uuencode xxx" "uudecode -o /dev/stdout")
+ (uu "uuencode xxx" "uudecode -o -")
+ (uu "uuencode xxx" "uudecode -p")
+ (uu "uuencode xxx" tramp-uudecode)
+ (pack
+ "perl -e 'binmode STDIN; binmode STDOUT; print pack(q{u*}, join q{}, <>)'"
+ "perl -e 'binmode STDIN; binmode STDOUT; print unpack(q{u*}, join q{}, <>)'"))
+ "List of remote coding commands for inline transfer.
+Each item is a list that looks like this:
+
+\(FORMAT ENCODING DECODING\)
+
+FORMAT is symbol describing the encoding/decoding format. It can be
+`b64' for base64 encoding, `uu' for uu encoding, or `pack' for simple packing.
+
+ENCODING and DECODING can be strings, giving commands, or symbols,
+giving variables. If they are strings, then they can contain
+the \"%s\" format specifier. If that specifier is present, the input
+filename will be put into the command line at that spot. If the
+specifier is not present, the input should be read from standard
+input.
+
+If they are variables, this variable is a string containing a Perl
+implementation for this functionality. This Perl program will be transferred
+to the remote host, and it is available as shell function with the same name.")
+
+(defun tramp-find-inline-encoding (vec)
+ "Find an inline transfer encoding that works.
+Goes through the list `tramp-local-coding-commands' and
+`tramp-remote-coding-commands'."
+ (save-excursion
+ (let ((local-commands tramp-local-coding-commands)
+ (magic "xyzzy")
+ loc-enc loc-dec rem-enc rem-dec litem ritem found)
+ (while (and local-commands (not found))
+ (setq litem (pop local-commands))
+ (catch 'wont-work-local
+ (let ((format (nth 0 litem))
+ (remote-commands tramp-remote-coding-commands))
+ (setq loc-enc (nth 1 litem))
+ (setq loc-dec (nth 2 litem))
+ ;; If the local encoder or decoder is a string, the
+ ;; corresponding command has to work locally.
+ (if (not (stringp loc-enc))
+ (tramp-message
+ vec 5 "Checking local encoding function `%s'" loc-enc)
+ (tramp-message
+ vec 5 "Checking local encoding command `%s' for sanity" loc-enc)
+ (unless (zerop (tramp-call-local-coding-command
+ loc-enc nil nil))
+ (throw 'wont-work-local nil)))
+ (if (not (stringp loc-dec))
+ (tramp-message
+ vec 5 "Checking local decoding function `%s'" loc-dec)
+ (tramp-message
+ vec 5 "Checking local decoding command `%s' for sanity" loc-dec)
+ (unless (zerop (tramp-call-local-coding-command
+ loc-dec nil nil))
+ (throw 'wont-work-local nil)))
+ ;; Search for remote coding commands with the same format
+ (while (and remote-commands (not found))
+ (setq ritem (pop remote-commands))
+ (catch 'wont-work-remote
+ (when (equal format (nth 0 ritem))
+ (setq rem-enc (nth 1 ritem))
+ (setq rem-dec (nth 2 ritem))
+ ;; Check if remote encoding and decoding commands can be
+ ;; called remotely with null input and output. This makes
+ ;; sure there are no syntax errors and the command is really
+ ;; found. Note that we do not redirect stdout to /dev/null,
+ ;; for two reasons: when checking the decoding command, we
+ ;; actually check the output it gives. And also, when
+ ;; redirecting "mimencode" output to /dev/null, then as root
+ ;; it might change the permissions of /dev/null!
+ (when (not (stringp rem-enc))
+ (let ((name (symbol-name rem-enc)))
+ (while (string-match (regexp-quote "-") name)
+ (setq name (replace-match "_" nil t name)))
+ (tramp-maybe-send-script vec (symbol-value rem-enc) name)
+ (setq rem-enc name)))
+ (tramp-message
+ vec 5
+ "Checking remote encoding command `%s' for sanity" rem-enc)
+ (unless (tramp-send-command-and-check
+ vec (format "%s </dev/null" rem-enc) t)
+ (throw 'wont-work-remote nil))
+
+ (when (not (stringp rem-dec))
+ (let ((name (symbol-name rem-dec)))
+ (while (string-match (regexp-quote "-") name)
+ (setq name (replace-match "_" nil t name)))
+ (tramp-maybe-send-script vec (symbol-value rem-dec) name)
+ (setq rem-dec name)))
+ (tramp-message
+ vec 5
+ "Checking remote decoding command `%s' for sanity" rem-dec)
+ (unless (tramp-send-command-and-check
+ vec
+ (format "echo %s | %s | %s" magic rem-enc rem-dec)
+ t)
+ (throw 'wont-work-remote nil))
+
+ (with-current-buffer (tramp-get-buffer vec)
+ (goto-char (point-min))
+ (unless (looking-at (regexp-quote magic))
+ (throw 'wont-work-remote nil)))
+
+ ;; `rem-enc' and `rem-dec' could be a string meanwhile.
+ (setq rem-enc (nth 1 ritem))
+ (setq rem-dec (nth 2 ritem))
+ (setq found t)))))))
+
+ ;; Did we find something?
+ (unless found
+ (tramp-error
+ vec 'file-error "Couldn't find an inline transfer encoding"))
+
+ ;; Set connection properties.
+ (tramp-message vec 5 "Using local encoding `%s'" loc-enc)
+ (tramp-set-connection-property vec "local-encoding" loc-enc)
+ (tramp-message vec 5 "Using local decoding `%s'" loc-dec)
+ (tramp-set-connection-property vec "local-decoding" loc-dec)
+ (tramp-message vec 5 "Using remote encoding `%s'" rem-enc)
+ (tramp-set-connection-property vec "remote-encoding" rem-enc)
+ (tramp-message vec 5 "Using remote decoding `%s'" rem-dec)
+ (tramp-set-connection-property vec "remote-decoding" rem-dec))))
+
+(defun tramp-call-local-coding-command (cmd input output)
+ "Call the local encoding or decoding command.
+If CMD contains \"%s\", provide input file INPUT there in command.
+Otherwise, INPUT is passed via standard input.
+INPUT can also be nil which means `/dev/null'.
+OUTPUT can be a string (which specifies a filename), or t (which
+means standard output and thus the current buffer), or nil (which
+means discard it)."
+ (tramp-compat-call-process
+ tramp-encoding-shell
+ (when (and input (not (string-match "%s" cmd))) input)
+ (if (eq output t) t nil)
+ nil
+ tramp-encoding-command-switch
+ (concat
+ (if (string-match "%s" cmd) (format cmd input) cmd)
+ (if (stringp output) (concat "> " output) ""))))
+
+(defconst tramp-inline-compress-commands
+ '(("gzip" "gzip -d")
+ ("bzip2" "bzip2 -d")
+ ("compress" "compress -d"))
+ "List of compress and decompress commands for inline transfer.
+Each item is a list that looks like this:
+
+\(COMPRESS DECOMPRESS\)
+
+COMPRESS or DECOMPRESS are strings with the respective commands.")
+
+(defun tramp-find-inline-compress (vec)
+ "Find an inline transfer compress command that works.
+Goes through the list `tramp-inline-compress-commands'."
+ (save-excursion
+ (let ((commands tramp-inline-compress-commands)
+ (magic "xyzzy")
+ item compress decompress
+ found)
+ (while (and commands (not found))
+ (catch 'next
+ (setq item (pop commands)
+ compress (nth 0 item)
+ decompress (nth 1 item))
+ (tramp-message
+ vec 5
+ "Checking local compress command `%s', `%s' for sanity"
+ compress decompress)
+ (unless (zerop (tramp-call-local-coding-command
+ (format "echo %s | %s | %s"
+ magic compress decompress) nil nil))
+ (throw 'next nil))
+ (tramp-message
+ vec 5
+ "Checking remote compress command `%s', `%s' for sanity"
+ compress decompress)
+ (unless (tramp-send-command-and-check
+ vec (format "echo %s | %s | %s" magic compress decompress) t)
+ (throw 'next nil))
+ (setq found t)))
+
+ ;; Did we find something?
+ (if found
+ (progn
+ ;; Set connection properties.
+ (tramp-message
+ vec 5 "Using inline transfer compress command `%s'" compress)
+ (tramp-set-connection-property vec "inline-compress" compress)
+ (tramp-message
+ vec 5 "Using inline transfer decompress command `%s'" decompress)
+ (tramp-set-connection-property vec "inline-decompress" decompress))
+
+ (tramp-set-connection-property vec "inline-compress" nil)
+ (tramp-set-connection-property vec "inline-decompress" nil)
+ (tramp-message
+ vec 2 "Couldn't find an inline transfer compress command")))))
+
+(defun tramp-compute-multi-hops (vec)
+ "Expands VEC according to `tramp-default-proxies-alist'.
+Gateway hops are already opened."
+ (let ((target-alist `(,vec))
+ (choices tramp-default-proxies-alist)
+ item proxy)
+
+ ;; Look for proxy hosts to be passed.
+ (while choices
+ (setq item (pop choices)
+ proxy (eval (nth 2 item)))
+ (when (and
+ ;; host
+ (string-match (or (eval (nth 0 item)) "")
+ (or (tramp-file-name-host (car target-alist)) ""))
+ ;; user
+ (string-match (or (eval (nth 1 item)) "")
+ (or (tramp-file-name-user (car target-alist)) "")))
+ (if (null proxy)
+ ;; No more hops needed.
+ (setq choices nil)
+ ;; Replace placeholders.
+ (setq proxy
+ (format-spec
+ proxy
+ (format-spec-make
+ ?u (or (tramp-file-name-user (car target-alist)) "")
+ ?h (or (tramp-file-name-host (car target-alist)) ""))))
+ (with-parsed-tramp-file-name proxy l
+ ;; Add the hop.
+ (add-to-list 'target-alist l)
+ ;; Start next search.
+ (setq choices tramp-default-proxies-alist)))))
+
+ ;; Handle gateways.
+ (when (string-match
+ (format
+ "^\\(%s\\|%s\\)$" tramp-gw-tunnel-method tramp-gw-socks-method)
+ (tramp-file-name-method (car target-alist)))
+ (let ((gw (pop target-alist))
+ (hop (pop target-alist)))
+ ;; Is the method prepared for gateways?
+ (unless (tramp-file-name-port hop)
+ (tramp-error
+ vec 'file-error
+ "Connection `%s' is not supported for gateway access." hop))
+ ;; Open the gateway connection.
+ (add-to-list
+ 'target-alist
+ (vector
+ (tramp-file-name-method hop) (tramp-file-name-user hop)
+ (tramp-compat-funcall 'tramp-gw-open-connection vec gw hop) nil))
+ ;; For the password prompt, we need the correct values.
+ ;; Therefore, we must remember the gateway vector. But we
+ ;; cannot do it as connection property, because it shouldn't
+ ;; be persistent. And we have no started process yet either.
+ (tramp-set-file-property (car target-alist) "" "gateway" hop)))
+
+ ;; Foreign and out-of-band methods are not supported for multi-hops.
+ (when (cdr target-alist)
+ (setq choices target-alist)
+ (while choices
+ (setq item (pop choices))
+ (when
+ (or
+ (not
+ (tramp-get-method-parameter
+ (tramp-file-name-method item) 'tramp-login-program))
+ (tramp-get-method-parameter
+ (tramp-file-name-method item) 'tramp-copy-program))
+ (tramp-error
+ vec 'file-error
+ "Method `%s' is not supported for multi-hops."
+ (tramp-file-name-method item)))))
+
+ ;; In case the host name is not used for the remote shell
+ ;; command, the user could be misguided by applying a random
+ ;; hostname.
+ (let* ((v (car target-alist))
+ (method (tramp-file-name-method v))
+ (host (tramp-file-name-host v)))
+ (unless
+ (or
+ ;; There are multi-hops.
+ (cdr target-alist)
+ ;; The host name is used for the remote shell command.
+ (member
+ '("%h") (tramp-get-method-parameter method 'tramp-login-args))
+ ;; The host is local. We cannot use `tramp-local-host-p'
+ ;; here, because it opens a connection as well.
+ (string-match tramp-local-host-regexp host))
+ (tramp-error
+ v 'file-error
+ "Host `%s' looks like a remote host, `%s' can only use the local host"
+ host method)))
+
+ ;; Result.
+ target-alist))
+
+(defun tramp-maybe-open-connection (vec)
+ "Maybe open a connection VEC.
+Does not do anything if a connection is already open, but re-opens the
+connection if a previous connection has died for some reason."
+ (catch 'uname-changed
+ (let ((p (tramp-get-connection-process vec))
+ (process-name (tramp-get-connection-property vec "process-name" nil))
+ (process-environment (copy-sequence process-environment)))
+
+ ;; If too much time has passed since last command was sent, look
+ ;; whether process is still alive. If it isn't, kill it. When
+ ;; using ssh, it can sometimes happen that the remote end has
+ ;; hung up but the local ssh client doesn't recognize this until
+ ;; it tries to send some data to the remote end. So that's why
+ ;; we try to send a command from time to time, then look again
+ ;; whether the process is really alive.
+ (condition-case nil
+ (when (and (> (tramp-time-diff
+ (current-time)
+ (tramp-get-connection-property
+ p "last-cmd-time" '(0 0 0)))
+ 60)
+ p (processp p) (memq (process-status p) '(run open)))
+ (tramp-send-command vec "echo are you awake" t t)
+ (unless (and (memq (process-status p) '(run open))
+ (tramp-wait-for-output p 10))
+ ;; The error will be catched locally.
+ (tramp-error vec 'file-error "Awake did fail")))
+ (file-error
+ (tramp-flush-connection-property vec)
+ (tramp-flush-connection-property p)
+ (delete-process p)
+ (setq p nil)))
+
+ ;; New connection must be opened.
+ (unless (and p (processp p) (memq (process-status p) '(run open)))
+
+ ;; We call `tramp-get-buffer' in order to get a debug buffer for
+ ;; messages from the beginning.
+ (tramp-get-buffer vec)
+ (with-progress-reporter
+ vec 3
+ (if (zerop (length (tramp-file-name-user vec)))
+ (format "Opening connection for %s using %s"
+ (tramp-file-name-host vec)
+ (tramp-file-name-method vec))
+ (format "Opening connection for %s@%s using %s"
+ (tramp-file-name-user vec)
+ (tramp-file-name-host vec)
+ (tramp-file-name-method vec)))
+
+ ;; Start new process.
+ (when (and p (processp p))
+ (delete-process p))
+ (setenv "TERM" tramp-terminal-type)
+ (setenv "LC_ALL" "C")
+ (setenv "PROMPT_COMMAND")
+ (setenv "PS1" tramp-initial-end-of-output)
+ (let* ((target-alist (tramp-compute-multi-hops vec))
+ (process-connection-type tramp-process-connection-type)
+ (process-adaptive-read-buffering nil)
+ (coding-system-for-read nil)
+ ;; This must be done in order to avoid our file name handler.
+ (p (let ((default-directory
+ (tramp-compat-temporary-file-directory)))
+ (start-process
+ (tramp-get-connection-name vec)
+ (tramp-get-connection-buffer vec)
+ tramp-encoding-shell))))
+
+ (tramp-message
+ vec 6 "%s" (mapconcat 'identity (process-command p) " "))
+
+ ;; Check whether process is alive.
+ (tramp-compat-set-process-query-on-exit-flag p nil)
+ (tramp-barf-if-no-shell-prompt
+ p 60 "Couldn't find local shell prompt %s" tramp-encoding-shell)
+
+ ;; Now do all the connections as specified.
+ (while target-alist
+ (let* ((hop (car target-alist))
+ (l-method (tramp-file-name-method hop))
+ (l-user (tramp-file-name-user hop))
+ (l-host (tramp-file-name-host hop))
+ (l-port nil)
+ (login-program
+ (tramp-get-method-parameter
+ l-method 'tramp-login-program))
+ (login-args
+ (tramp-get-method-parameter l-method 'tramp-login-args))
+ (async-args
+ (tramp-get-method-parameter l-method 'tramp-async-args))
+ (gw-args
+ (tramp-get-method-parameter l-method 'tramp-gw-args))
+ (gw (tramp-get-file-property hop "" "gateway" nil))
+ (g-method (and gw (tramp-file-name-method gw)))
+ (g-user (and gw (tramp-file-name-user gw)))
+ (g-host (and gw (tramp-file-name-host gw)))
+ (command login-program)
+ ;; We don't create the temporary file. In fact,
+ ;; it is just a prefix for the ControlPath option
+ ;; of ssh; the real temporary file has another
+ ;; name, and it is created and protected by ssh.
+ ;; It is also removed by ssh, when the connection
+ ;; is closed.
+ (tmpfile
+ (tramp-set-connection-property
+ p "temp-file"
+ (make-temp-name
+ (expand-file-name
+ tramp-temp-name-prefix
+ (tramp-compat-temporary-file-directory)))))
+ spec)
+
+ ;; Add arguments for asynchrononous processes.
+ (when (and process-name async-args)
+ (setq login-args (append async-args login-args)))
+
+ ;; Add gateway arguments if necessary.
+ (when (and gw gw-args)
+ (setq login-args (append gw-args login-args)))
+
+ ;; Check for port number. Until now, there's no need
+ ;; for handling like method, user, host.
+ (when (string-match tramp-host-with-port-regexp l-host)
+ (setq l-port (match-string 2 l-host)
+ l-host (match-string 1 l-host)))
+
+ ;; Set variables for computing the prompt for reading
+ ;; password. They can also be derived from a gateway.
+ (setq tramp-current-method (or g-method l-method)
+ tramp-current-user (or g-user l-user)
+ tramp-current-host (or g-host l-host))
+
+ ;; Replace login-args place holders.
+ (setq
+ l-host (or l-host "")
+ l-user (or l-user "")
+ l-port (or l-port "")
+ spec (format-spec-make
+ ?h l-host ?u l-user ?p l-port ?t tmpfile)
+ command
+ (concat
+ ;; We do not want to see the trailing local prompt in
+ ;; `start-file-process'.
+ (unless (memq system-type '(windows-nt)) "exec ")
+ command " "
+ (mapconcat
+ (lambda (x)
+ (setq x (mapcar (lambda (y) (format-spec y spec)) x))
+ (unless (member "" x) (mapconcat 'identity x " ")))
+ login-args " ")
+ ;; Local shell could be a Windows COMSPEC. It
+ ;; doesn't know the ";" syntax, but we must exit
+ ;; always for `start-file-process'. "exec" does not
+ ;; work either.
+ (if (memq system-type '(windows-nt)) " && exit || exit")))
+
+ ;; Send the command.
+ (tramp-message vec 3 "Sending command `%s'" command)
+ (tramp-send-command vec command t t)
+ (tramp-process-actions p vec tramp-actions-before-shell 60)
+ (tramp-message
+ vec 3 "Found remote shell prompt on `%s'" l-host))
+ ;; Next hop.
+ (setq target-alist (cdr target-alist)))
+
+ ;; Make initial shell settings.
+ (tramp-open-connection-setup-interactive-shell p vec)))))))
+
+(defun tramp-send-command (vec command &optional neveropen nooutput)
+ "Send the COMMAND to connection VEC.
+Erases temporary buffer before sending the command. If optional
+arg NEVEROPEN is non-nil, never try to open the connection. This
+is meant to be used from `tramp-maybe-open-connection' only. The
+function waits for output unless NOOUTPUT is set."
+ (unless neveropen (tramp-maybe-open-connection vec))
+ (let ((p (tramp-get-connection-process vec)))
+ (when (tramp-get-connection-property p "remote-echo" nil)
+ ;; We mark the command string that it can be erased in the output buffer.
+ (tramp-set-connection-property p "check-remote-echo" t)
+ (setq command (format "%s%s%s" tramp-echo-mark command tramp-echo-mark)))
+ (when (string-match "<<'EOF'" command)
+ ;; Unset $PS1 when using here documents, in order to avoid
+ ;; multiple prompts.
+ (setq command (concat "(PS1= ; " command "\n)")))
+ ;; Send the command.
+ (tramp-message vec 6 "%s" command)
+ (tramp-send-string vec command)
+ (unless nooutput (tramp-wait-for-output p))))
+
+(defun tramp-wait-for-output (proc &optional timeout)
+ "Wait for output from remote command."
+ (unless (buffer-live-p (process-buffer proc))
+ (delete-process proc)
+ (tramp-error proc 'file-error "Process `%s' not available, try again" proc))
+ (with-current-buffer (process-buffer proc)
+ (let* (;; Initially, `tramp-end-of-output' is "#$ ". There might
+ ;; be leading escape sequences, which must be ignored.
+ (regexp (format "[^#$\n]*%s\r?$" (regexp-quote tramp-end-of-output)))
+ ;; Sometimes, the commands do not return a newline but a
+ ;; null byte before the shell prompt, for example "git
+ ;; ls-files -c -z ...".
+ (regexp1 (format "\\(^\\|\000\\)%s" regexp))
+ (found (tramp-wait-for-regexp proc timeout regexp1)))
+ (if found
+ (let (buffer-read-only)
+ ;; A simple-minded busybox has sent " ^H" sequences.
+ ;; Delete them.
+ (goto-char (point-min))
+ (when (re-search-forward "^\\(.\b\\)+$" (point-at-eol) t)
+ (forward-line 1)
+ (delete-region (point-min) (point)))
+ ;; Delete the prompt.
+ (goto-char (point-max))
+ (re-search-backward regexp nil t)
+ (delete-region (point) (point-max)))
+ (if timeout
+ (tramp-error
+ proc 'file-error
+ "[[Remote prompt `%s' not found in %d secs]]"
+ tramp-end-of-output timeout)
+ (tramp-error
+ proc 'file-error
+ "[[Remote prompt `%s' not found]]" tramp-end-of-output)))
+ ;; Return value is whether end-of-output sentinel was found.
+ found)))
+
+(defun tramp-send-command-and-check
+ (vec command &optional subshell dont-suppress-err)
+ "Run COMMAND and check its exit status.
+Sends `echo $?' along with the COMMAND for checking the exit status. If
+COMMAND is nil, just sends `echo $?'. Returns the exit status found.
+
+If the optional argument SUBSHELL is non-nil, the command is
+executed in a subshell, ie surrounded by parentheses. If
+DONT-SUPPRESS-ERR is non-nil, stderr won't be sent to /dev/null."
+ (tramp-send-command
+ vec
+ (concat (if subshell "( " "")
+ command
+ (if command (if dont-suppress-err "; " " 2>/dev/null; ") "")
+ "echo tramp_exit_status $?"
+ (if subshell " )" "")))
+ (with-current-buffer (tramp-get-connection-buffer vec)
+ (goto-char (point-max))
+ (unless (re-search-backward "tramp_exit_status [0-9]+" nil t)
+ (tramp-error
+ vec 'file-error "Couldn't find exit status of `%s'" command))
+ (skip-chars-forward "^ ")
+ (prog1
+ (zerop (read (current-buffer)))
+ (let (buffer-read-only)
+ (delete-region (match-beginning 0) (point-max))))))
+
+(defun tramp-barf-unless-okay (vec command fmt &rest args)
+ "Run COMMAND, check exit status, throw error if exit status not okay.
+Similar to `tramp-send-command-and-check' but accepts two more arguments
+FMT and ARGS which are passed to `error'."
+ (unless (tramp-send-command-and-check vec command)
+ (apply 'tramp-error vec 'file-error fmt args)))
+
+(defun tramp-send-command-and-read (vec command)
+ "Run COMMAND and return the output, which must be a Lisp expression.
+In case there is no valid Lisp expression, it raises an error"
+ (tramp-barf-unless-okay vec command "`%s' returns with error" command)
+ (with-current-buffer (tramp-get-connection-buffer vec)
+ ;; Read the expression.
+ (goto-char (point-min))
+ (condition-case nil
+ (prog1 (read (current-buffer))
+ ;; Error handling.
+ (when (re-search-forward "\\S-" (point-at-eol) t)
+ (error nil)))
+ (error (tramp-error
+ vec 'file-error
+ "`%s' does not return a valid Lisp expression: `%s'"
+ command (buffer-string))))))
+
+(defun tramp-convert-file-attributes (vec attr)
+ "Convert file-attributes ATTR generated by perl script, stat or ls.
+Convert file mode bits to string and set virtual device number.
+Return ATTR."
+ (when attr
+ ;; Convert last access time.
+ (unless (listp (nth 4 attr))
+ (setcar (nthcdr 4 attr)
+ (list (floor (nth 4 attr) 65536)
+ (floor (mod (nth 4 attr) 65536)))))
+ ;; Convert last modification time.
+ (unless (listp (nth 5 attr))
+ (setcar (nthcdr 5 attr)
+ (list (floor (nth 5 attr) 65536)
+ (floor (mod (nth 5 attr) 65536)))))
+ ;; Convert last status change time.
+ (unless (listp (nth 6 attr))
+ (setcar (nthcdr 6 attr)
+ (list (floor (nth 6 attr) 65536)
+ (floor (mod (nth 6 attr) 65536)))))
+ ;; Convert file size.
+ (when (< (nth 7 attr) 0)
+ (setcar (nthcdr 7 attr) -1))
+ (when (and (floatp (nth 7 attr))
+ (<= (nth 7 attr) (tramp-compat-most-positive-fixnum)))
+ (setcar (nthcdr 7 attr) (round (nth 7 attr))))
+ ;; Convert file mode bits to string.
+ (unless (stringp (nth 8 attr))
+ (setcar (nthcdr 8 attr) (tramp-file-mode-from-int (nth 8 attr)))
+ (when (stringp (car attr))
+ (aset (nth 8 attr) 0 ?l)))
+ ;; Convert directory indication bit.
+ (when (string-match "^d" (nth 8 attr))
+ (setcar attr t))
+ ;; Convert symlink from `tramp-do-file-attributes-with-stat'.
+ (when (consp (car attr))
+ (if (and (stringp (caar attr))
+ (string-match ".+ -> .\\(.+\\)." (caar attr)))
+ (setcar attr (match-string 1 (caar attr)))
+ (setcar attr nil)))
+ ;; Set file's gid change bit.
+ (setcar (nthcdr 9 attr)
+ (if (numberp (nth 3 attr))
+ (not (= (nth 3 attr)
+ (tramp-get-remote-gid vec 'integer)))
+ (not (string-equal
+ (nth 3 attr)
+ (tramp-get-remote-gid vec 'string)))))
+ ;; Convert inode.
+ (unless (listp (nth 10 attr))
+ (setcar (nthcdr 10 attr)
+ (condition-case nil
+ (cons (floor (nth 10 attr) 65536)
+ (floor (mod (nth 10 attr) 65536)))
+ ;; Inodes can be incredible huge. We must hide this.
+ (error (tramp-get-inode vec)))))
+ ;; Set virtual device number.
+ (setcar (nthcdr 11 attr)
+ (tramp-get-device vec))
+ attr))
+
+(defun tramp-check-cached-permissions (vec access)
+ "Check `file-attributes' caches for VEC.
+Return t if according to the cache access type ACCESS is known to
+be granted."
+ (let ((result nil)
+ (offset (cond
+ ((eq ?r access) 1)
+ ((eq ?w access) 2)
+ ((eq ?x access) 3))))
+ (dolist (suffix '("string" "integer") result)
+ (setq
+ result
+ (or
+ result
+ (let ((file-attr
+ (tramp-get-file-property
+ vec (tramp-file-name-localname vec)
+ (concat "file-attributes-" suffix) nil))
+ (remote-uid
+ (tramp-get-connection-property
+ vec (concat "uid-" suffix) nil))
+ (remote-gid
+ (tramp-get-connection-property
+ vec (concat "gid-" suffix) nil)))
+ (and
+ file-attr
+ (or
+ ;; Not a symlink
+ (eq t (car file-attr))
+ (null (car file-attr)))
+ (or
+ ;; World accessible.
+ (eq access (aref (nth 8 file-attr) (+ offset 6)))
+ ;; User accessible and owned by user.
+ (and
+ (eq access (aref (nth 8 file-attr) offset))
+ (equal remote-uid (nth 2 file-attr)))
+ ;; Group accessible and owned by user's
+ ;; principal group.
+ (and
+ (eq access (aref (nth 8 file-attr) (+ offset 3)))
+ (equal remote-gid (nth 3 file-attr)))))))))))
+
+(defun tramp-file-mode-from-int (mode)
+ "Turn an integer representing a file mode into an ls(1)-like string."
+ (let ((type (cdr
+ (assoc (logand (lsh mode -12) 15) tramp-file-mode-type-map)))
+ (user (logand (lsh mode -6) 7))
+ (group (logand (lsh mode -3) 7))
+ (other (logand (lsh mode -0) 7))
+ (suid (> (logand (lsh mode -9) 4) 0))
+ (sgid (> (logand (lsh mode -9) 2) 0))
+ (sticky (> (logand (lsh mode -9) 1) 0)))
+ (setq user (tramp-file-mode-permissions user suid "s"))
+ (setq group (tramp-file-mode-permissions group sgid "s"))
+ (setq other (tramp-file-mode-permissions other sticky "t"))
+ (concat type user group other)))
+
+(defun tramp-file-mode-permissions (perm suid suid-text)
+ "Convert a permission bitset into a string.
+This is used internally by `tramp-file-mode-from-int'."
+ (let ((r (> (logand perm 4) 0))
+ (w (> (logand perm 2) 0))
+ (x (> (logand perm 1) 0)))
+ (concat (or (and r "r") "-")
+ (or (and w "w") "-")
+ (or (and suid x suid-text) ; suid, execute
+ (and suid (upcase suid-text)) ; suid, !execute
+ (and x "x") "-")))) ; !suid
+
+(defun tramp-shell-case-fold (string)
+ "Converts STRING to shell glob pattern which ignores case."
+ (mapconcat
+ (lambda (c)
+ (if (equal (downcase c) (upcase c))
+ (vector c)
+ (format "[%c%c]" (downcase c) (upcase c))))
+ string
+ ""))
+
+(defun tramp-make-copy-program-file-name (vec)
+ "Create a file name suitable to be passed to `rcp' and workalikes."
+ (let ((user (tramp-file-name-user vec))
+ (host (tramp-file-name-real-host vec))
+ (localname (tramp-shell-quote-argument
+ (tramp-file-name-localname vec))))
+ (if (not (zerop (length user)))
+ (format "%s@%s:%s" user host localname)
+ (format "%s:%s" host localname))))
+
+(defun tramp-method-out-of-band-p (vec size)
+ "Return t if this is an out-of-band method, nil otherwise."
+ (and
+ ;; It shall be an out-of-band method.
+ (tramp-get-method-parameter (tramp-file-name-method vec) 'tramp-copy-program)
+ ;; Either the file size is large enough, or (in rare cases) there
+ ;; does not exist a remote encoding.
+ (or (null tramp-copy-size-limit)
+ (> size tramp-copy-size-limit)
+ (null (tramp-get-inline-coding vec "remote-encoding" size)))))
+
+;; Variables local to connection.
+
+(defun tramp-get-remote-path (vec)
+ (with-connection-property
+ ;; When `tramp-own-remote-path' is in `tramp-remote-path', we
+ ;; cache the result for the session only. Otherwise, the result
+ ;; is cached persistently.
+ (if (memq 'tramp-own-remote-path tramp-remote-path)
+ (tramp-get-connection-process vec)
+ vec)
+ "remote-path"
+ (let* ((remote-path (copy-tree tramp-remote-path))
+ (elt1 (memq 'tramp-default-remote-path remote-path))
+ (elt2 (memq 'tramp-own-remote-path remote-path))
+ (default-remote-path
+ (when elt1
+ (condition-case nil
+ (tramp-send-command-and-read
+ vec "echo \\\"`getconf PATH`\\\"")
+ ;; Default if "getconf" is not available.
+ (error
+ (tramp-message
+ vec 3
+ "`getconf PATH' not successful, using default value \"%s\"."
+ "/bin:/usr/bin")
+ "/bin:/usr/bin"))))
+ (own-remote-path
+ (when elt2
+ (condition-case nil
+ (tramp-send-command-and-read vec "echo \\\"$PATH\\\"")
+ ;; Default if "getconf" is not available.
+ (error
+ (tramp-message
+ vec 3 "$PATH not set, ignoring `tramp-own-remote-path'.")
+ nil)))))
+
+ ;; Replace place holder `tramp-default-remote-path'.
+ (when elt1
+ (setcdr elt1
+ (append
+ (tramp-compat-split-string default-remote-path ":")
+ (cdr elt1)))
+ (setq remote-path (delq 'tramp-default-remote-path remote-path)))
+
+ ;; Replace place holder `tramp-own-remote-path'.
+ (when elt2
+ (setcdr elt2
+ (append
+ (tramp-compat-split-string own-remote-path ":")
+ (cdr elt2)))
+ (setq remote-path (delq 'tramp-own-remote-path remote-path)))
+
+ ;; Remove double entries.
+ (setq elt1 remote-path)
+ (while (consp elt1)
+ (while (and (car elt1) (setq elt2 (member (car elt1) (cdr elt1))))
+ (setcar elt2 nil))
+ (setq elt1 (cdr elt1)))
+
+ ;; Remove non-existing directories.
+ (delq
+ nil
+ (mapcar
+ (lambda (x)
+ (and
+ (stringp x)
+ (file-directory-p
+ (tramp-make-tramp-file-name
+ (tramp-file-name-method vec)
+ (tramp-file-name-user vec)
+ (tramp-file-name-host vec)
+ x))
+ x))
+ remote-path)))))
+
+(defun tramp-get-remote-tmpdir (vec)
+ (with-connection-property vec "tmp-directory"
+ (let ((dir (tramp-shell-quote-argument "/tmp")))
+ (if (and (tramp-send-command-and-check
+ vec (format "%s -d %s" (tramp-get-test-command vec) dir))
+ (tramp-send-command-and-check
+ vec (format "%s -w %s" (tramp-get-test-command vec) dir)))
+ dir
+ (tramp-error vec 'file-error "Directory %s not accessible" dir)))))
+
+(defun tramp-get-ls-command (vec)
+ (with-connection-property vec "ls"
+ (tramp-message vec 5 "Finding a suitable `ls' command")
+ (or
+ (catch 'ls-found
+ (dolist (cmd '("ls" "gnuls" "gls"))
+ (let ((dl (tramp-get-remote-path vec))
+ result)
+ (while (and dl (setq result (tramp-find-executable vec cmd dl t t)))
+ ;; Check parameters. On busybox, "ls" output coloring is
+ ;; enabled by default sometimes. So we try to disable it
+ ;; when possible. $LS_COLORING is not supported there.
+ ;; Some "ls" versions are sensible wrt the order of
+ ;; arguments, they fail when "-al" is after the
+ ;; "--color=never" argument (for example on FreeBSD).
+ (when (tramp-send-command-and-check
+ vec (format "%s -lnd /" result))
+ (when (tramp-send-command-and-check
+ vec (format
+ "%s --color=never -al /dev/null" result))
+ (setq result (concat result " --color=never")))
+ (throw 'ls-found result))
+ (setq dl (cdr dl))))))
+ (tramp-error vec 'file-error "Couldn't find a proper `ls' command"))))
+
+(defun tramp-get-ls-command-with-dired (vec)
+ (save-match-data
+ (with-connection-property vec "ls-dired"
+ (tramp-message vec 5 "Checking, whether `ls --dired' works")
+ ;; Some "ls" versions are sensible wrt the order of arguments,
+ ;; they fail when "-al" is after the "--dired" argument (for
+ ;; example on FreeBSD).
+ (tramp-send-command-and-check
+ vec (format "%s --dired -al /dev/null" (tramp-get-ls-command vec))))))
+
+(defun tramp-get-test-command (vec)
+ (with-connection-property vec "test"
+ (tramp-message vec 5 "Finding a suitable `test' command")
+ (if (tramp-send-command-and-check vec "test 0")
+ "test"
+ (tramp-find-executable vec "test" (tramp-get-remote-path vec)))))
+
+(defun tramp-get-test-nt-command (vec)
+ ;; Does `test A -nt B' work? Use abominable `find' construct if it
+ ;; doesn't. BSD/OS 4.0 wants the parentheses around the command,
+ ;; for otherwise the shell crashes.
+ (with-connection-property vec "test-nt"
+ (or
+ (progn
+ (tramp-send-command
+ vec (format "( %s / -nt / )" (tramp-get-test-command vec)))
+ (with-current-buffer (tramp-get-buffer vec)
+ (goto-char (point-min))
+ (when (looking-at (regexp-quote tramp-end-of-output))
+ (format "%s %%s -nt %%s" (tramp-get-test-command vec)))))
+ (progn
+ (tramp-send-command
+ vec
+ (format
+ "tramp_test_nt () {\n%s -n \"`find $1 -prune -newer $2 -print`\"\n}"
+ (tramp-get-test-command vec)))
+ "tramp_test_nt %s %s"))))
+
+(defun tramp-get-file-exists-command (vec)
+ (with-connection-property vec "file-exists"
+ (tramp-message vec 5 "Finding command to check if file exists")
+ (tramp-find-file-exists-command vec)))
+
+(defun tramp-get-remote-ln (vec)
+ (with-connection-property vec "ln"
+ (tramp-message vec 5 "Finding a suitable `ln' command")
+ (tramp-find-executable vec "ln" (tramp-get-remote-path vec))))
+
+(defun tramp-get-remote-perl (vec)
+ (with-connection-property vec "perl"
+ (tramp-message vec 5 "Finding a suitable `perl' command")
+ (let ((result
+ (or (tramp-find-executable vec "perl5" (tramp-get-remote-path vec))
+ (tramp-find-executable
+ vec "perl" (tramp-get-remote-path vec)))))
+ ;; We must check also for some Perl modules.
+ (when result
+ (with-connection-property vec "perl-file-spec"
+ (tramp-send-command-and-check
+ vec (format "%s -e 'use File::Spec;'" result)))
+ (with-connection-property vec "perl-cwd-realpath"
+ (tramp-send-command-and-check
+ vec (format "%s -e 'use Cwd \"realpath\";'" result))))
+ result)))
+
+(defun tramp-get-remote-stat (vec)
+ (with-connection-property vec "stat"
+ (tramp-message vec 5 "Finding a suitable `stat' command")
+ (let ((result (tramp-find-executable
+ vec "stat" (tramp-get-remote-path vec)))
+ tmp)
+ ;; Check whether stat(1) returns usable syntax. %s does not
+ ;; work on older AIX systems.
+ (when result
+ (setq tmp
+ ;; We don't want to display an error message.
+ (tramp-compat-with-temp-message (or (current-message) "")
+ (ignore-errors
+ (tramp-send-command-and-read
+ vec (format "%s -c '(\"%%N\" %%s)' /" result)))))
+ (unless (and (listp tmp) (stringp (car tmp))
+ (string-match "^./.$" (car tmp))
+ (integerp (cadr tmp)))
+ (setq result nil)))
+ result)))
+
+(defun tramp-get-remote-readlink (vec)
+ (with-connection-property vec "readlink"
+ (tramp-message vec 5 "Finding a suitable `readlink' command")
+ (let ((result (tramp-find-executable
+ vec "readlink" (tramp-get-remote-path vec))))
+ (when (and result
+ ;; We don't want to display an error message.
+ (tramp-compat-with-temp-message (or (current-message) "")
+ (ignore-errors
+ (tramp-send-command-and-check
+ vec (format "%s --canonicalize-missing /" result)))))
+ result))))
+
+(defun tramp-get-remote-trash (vec)
+ (with-connection-property vec "trash"
+ (tramp-message vec 5 "Finding a suitable `trash' command")
+ (tramp-find-executable vec "trash" (tramp-get-remote-path vec))))
+
+(defun tramp-get-remote-id (vec)
+ (with-connection-property vec "id"
+ (tramp-message vec 5 "Finding POSIX `id' command")
+ (or
+ (catch 'id-found
+ (let ((dl (tramp-get-remote-path vec))
+ result)
+ (while (and dl (setq result (tramp-find-executable vec "id" dl t t)))
+ ;; Check POSIX parameter.
+ (when (tramp-send-command-and-check vec (format "%s -u" result))
+ (throw 'id-found result))
+ (setq dl (cdr dl)))))
+ (tramp-error vec 'file-error "Couldn't find a POSIX `id' command"))))
+
+(defun tramp-get-remote-uid (vec id-format)
+ (with-connection-property vec (format "uid-%s" id-format)
+ (let ((res (tramp-send-command-and-read
+ vec
+ (format "%s -u%s %s"
+ (tramp-get-remote-id vec)
+ (if (equal id-format 'integer) "" "n")
+ (if (equal id-format 'integer)
+ "" "| sed -e s/^/\\\"/ -e s/\$/\\\"/")))))
+ ;; The command might not always return a number.
+ (if (and (equal id-format 'integer) (not (integerp res))) -1 res))))
+
+(defun tramp-get-remote-gid (vec id-format)
+ (with-connection-property vec (format "gid-%s" id-format)
+ (let ((res (tramp-send-command-and-read
+ vec
+ (format "%s -g%s %s"
+ (tramp-get-remote-id vec)
+ (if (equal id-format 'integer) "" "n")
+ (if (equal id-format 'integer)
+ "" "| sed -e s/^/\\\"/ -e s/\$/\\\"/")))))
+ ;; The command might not always return a number.
+ (if (and (equal id-format 'integer) (not (integerp res))) -1 res))))
+
+(defun tramp-get-local-uid (id-format)
+ (if (equal id-format 'integer) (user-uid) (user-login-name)))
+
+(defun tramp-get-local-gid (id-format)
+ (nth 3 (tramp-compat-file-attributes "~/" id-format)))
+
+;; Some predefined connection properties.
+(defun tramp-get-inline-compress (vec prop size)
+ "Return the compress command related to PROP.
+PROP is either `inline-compress' or `inline-decompress'. SIZE is
+the length of the file to be compressed.
+
+If no corresponding command is found, nil is returned."
+ (when (and (integerp tramp-inline-compress-start-size)
+ (> size tramp-inline-compress-start-size))
+ (with-connection-property vec prop
+ (tramp-find-inline-compress vec)
+ (tramp-get-connection-property vec prop nil))))
+
+(defun tramp-get-inline-coding (vec prop size)
+ "Return the coding command related to PROP.
+PROP is either `remote-encoding', `remode-decoding',
+`local-encoding' or `local-decoding'.
+
+SIZE is the length of the file to be coded. Depending on SIZE,
+compression might be applied.
+
+If no corresponding command is found, nil is returned.
+Otherwise, either a string is returned which contains a `%s' mark
+to be used for the respective input or output file; or a Lisp
+function cell is returned to be applied on a buffer."
+ ;; We must catch the errors, because we want to return `nil', when
+ ;; no inline coding is found.
+ (ignore-errors
+ (let ((coding
+ (with-connection-property vec prop
+ (tramp-find-inline-encoding vec)
+ (tramp-get-connection-property vec prop nil)))
+ (prop1 (if (string-match "encoding" prop)
+ "inline-compress" "inline-decompress"))
+ compress)
+ ;; The connection property might have been cached. So we must
+ ;; send the script to the remote side - maybe.
+ (when (and coding (symbolp coding) (string-match "remote" prop))
+ (let ((name (symbol-name coding)))
+ (while (string-match (regexp-quote "-") name)
+ (setq name (replace-match "_" nil t name)))
+ (tramp-maybe-send-script vec (symbol-value coding) name)
+ (setq coding name)))
+ (when coding
+ ;; Check for the `compress' command.
+ (setq compress (tramp-get-inline-compress vec prop1 size))
+ ;; Return the value.
+ (cond
+ ((and compress (symbolp coding))
+ (if (string-match "decompress" prop1)
+ `(lambda (beg end)
+ (,coding beg end)
+ (let ((coding-system-for-write 'binary)
+ (coding-system-for-read 'binary))
+ (apply
+ 'call-process-region (point-min) (point-max)
+ (car (split-string ,compress)) t t nil
+ (cdr (split-string ,compress)))))
+ `(lambda (beg end)
+ (let ((coding-system-for-write 'binary)
+ (coding-system-for-read 'binary))
+ (apply
+ 'call-process-region beg end
+ (car (split-string ,compress)) t t nil
+ (cdr (split-string ,compress))))
+ (,coding (point-min) (point-max)))))
+ ((symbolp coding)
+ coding)
+ ((and compress (string-match "decoding" prop))
+ (format "(%s | %s >%%s)" coding compress))
+ (compress
+ (format "(%s <%%s | %s)" compress coding))
+ ((string-match "decoding" prop)
+ (format "%s >%%s" coding))
+ (t
+ (format "%s <%%s" coding)))))))
+
+;;; Integration of eshell.el:
+
+(eval-when-compile
+ (defvar eshell-path-env))
+
+;; eshell.el keeps the path in `eshell-path-env'. We must change it
+;; when `default-directory' points to another host.
+(defun tramp-eshell-directory-change ()
+ "Set `eshell-path-env' to $PATH of the host related to `default-directory'."
+ (setq eshell-path-env
+ (if (file-remote-p default-directory)
+ (with-parsed-tramp-file-name default-directory nil
+ (mapconcat
+ 'identity
+ (tramp-get-remote-path v)
+ ":"))
+ (getenv "PATH"))))
+
+(eval-after-load "esh-util"
+ '(progn
+ (tramp-eshell-directory-change)
+ (add-hook 'eshell-directory-change-hook
+ 'tramp-eshell-directory-change)
+ (add-hook 'tramp-unload-hook
+ (lambda ()
+ (remove-hook 'eshell-directory-change-hook
+ 'tramp-eshell-directory-change)))))
+
+(add-hook 'tramp-unload-hook
+ (lambda ()
+ (unload-feature 'tramp-sh 'force)))
+
+(provide 'tramp-sh)
+
+;;; TODO:
+
+;; * Don't use globbing for directories with many files, as this is
+;; likely to produce long command lines, and some shells choke on
+;; long command lines.
+;; * Make it work for different encodings, and for different file name
+;; encodings, too. (Daniel Pittman)
+;; * Don't search for perl5 and perl. Instead, only search for perl and
+;; then look if it's the right version (with `perl -v').
+;; * When editing a remote CVS controlled file as a different user, VC
+;; gets confused about the file locking status. Try to find out why
+;; the workaround doesn't work.
+;; * Allow out-of-band methods as _last_ multi-hop. Open a connection
+;; until the last but one hop via `start-file-process'. Apply it
+;; also for ftp and smb.
+;; * WIBNI if we had a command "trampclient"? If I was editing in
+;; some shell with root priviledges, it would be nice if I could
+;; just call
+;; trampclient filename.c
+;; as an editor, and the _current_ shell would connect to an Emacs
+;; server and would be used in an existing non-priviledged Emacs
+;; session for doing the editing in question.
+;; That way, I need not tell Emacs my password again and be afraid
+;; that it makes it into core dumps or other ugly stuff (I had Emacs
+;; once display a just typed password in the context of a keyboard
+;; sequence prompt for a question immediately following in a shell
+;; script run within Emacs -- nasty).
+;; And if I have some ssh session running to a different computer,
+;; having the possibility of passing a local file there to a local
+;; Emacs session (in case I can arrange for a connection back) would
+;; be nice.
+;; Likely the corresponding Tramp server should not allow the
+;; equivalent of the emacsclient -eval option in order to make this
+;; reasonably unproblematic. And maybe trampclient should have some
+;; way of passing credentials, like by using an SSL socket or
+;; something. (David Kastrup)
+;; * Reconnect directly to a compliant shell without first going
+;; through the user's default shell. (Pete Forman)
+;; * How can I interrupt the remote process with a signal
+;; (interrupt-process seems not to work)? (Markus Triska)
+;; * Avoid the local shell entirely for starting remote processes. If
+;; so, I think even a signal, when delivered directly to the local
+;; SSH instance, would correctly be propagated to the remote process
+;; automatically; possibly SSH would have to be started with
+;; "-t". (Markus Triska)
+;; * It makes me wonder if tramp couldn't fall back to ssh when scp
+;; isn't on the remote host. (Mark A. Hershberger)
+;; * Use lsh instead of ssh. (Alfred M. Szmidt)
+;; * Optimize out-of-band copying, when both methods are scp-like (not
+;; rsync).
+;; * Keep a second connection open for out-of-band methods like scp or
+;; rsync.
+;; * Try telnet+curl as new method. It might be useful for busybox,
+;; without built-in uuencode/uudecode.
+
+;;; tramp-sh.el ends here