1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-24 14:30:43 -08:00

auto upstream

This commit is contained in:
Joakim Verona 2013-02-20 00:04:24 +01:00
commit 10fc3c3866
23 changed files with 582 additions and 500 deletions

View file

@ -1,3 +1,7 @@
2013-02-19 Glenn Morris <rgm@gnu.org>
* text.texi (Change Hooks): Fix typo.
2013-02-15 Glenn Morris <rgm@gnu.org>
* modes.texi (Basic Major Modes): 'z' no longer bound in special-mode.

View file

@ -4344,7 +4344,7 @@ This variable holds a list of functions to call after any buffer
modification. Each function receives three arguments: the beginning
and end of the region just changed, and the length of the text that
existed before the change. All three arguments are integers. The
buffer has been changed is always the current buffer.
buffer that has been changed is always the current buffer.
The length of the old text is the difference between the buffer
positions before and after that text as it was before the change. As

View file

@ -2030,7 +2030,7 @@ You can instruct @value{tramp} by this form:
@noindent
with @samp{192.168.0.26} being the IP address of your Android device.
The user settings for the @code{$PATH} environment valiable must be
The user settings for the @code{$PATH} environment variable must be
preserved. Add this setting:
@lisp

View file

@ -1519,7 +1519,7 @@
2009-01-27 Kenichi Handa <handa@m17n.org>
* NEWS: New function `coding-sytem-from-name'.
* NEWS: New function `coding-system-from-name'.
2009-01-25 Carsten Dominik <dominik@science.uva.nl>

View file

@ -41,9 +41,6 @@ a web search is often the best way to find results.
The Emacs Wiki has an area for storing elisp files
<URL:http://www.emacswiki.org/cgi-bin/wiki/ElispArea>.
* WikEmacs
<URL:http://wikemacs.org> is an alternative wiki for Emacs.
* Emacs slides and tutorials can be found here:
<URL:http://web.psung.name/emacs/>
@ -55,16 +52,8 @@ so you will find the latest version in Emacs.
* Ada-mode: <URL:http://stephe-leake.org/emacs/ada-mode/emacs-ada-mode.html>
* Battery and Info Look: <URL:http://ralph-schleicher.de/emacs.html>
* CC mode: <URL:http://cc-mode.sourceforge.net/>
* CPerl: <URL:http://math.berkeley.edu/~ilya/software/emacs/>
* Ediff and Viper: <URL:http://www.cs.sunysb.edu/~kifer/emacs.html>
* ERC: <URL:http://savannah.gnu.org/projects/erc/>
* Gnus: <URL:http://www.gnus.org/>
* MH-E: <URL:http://mh-e.sourceforge.net/>
@ -73,25 +62,11 @@ so you will find the latest version in Emacs.
* Org mode: <URL:http://orgmode.org/>
* RefTeX: <URL:http://www.gnu.org/software/auctex/reftex.html>
* Remember: <URL:https://gna.org/p/remember-el>
* CEDET: <URL:http://cedet.sourceforge.net/>
* Tramp: Remote file access via rsh/ssh
<URL:http://savannah.gnu.org/projects/tramp/>
* Auxiliary files
* (Tex)info files for use with Info-look that don't come from GNU
packages:
* Scheme: <URL:http://groups.csail.mit.edu/mac/ftpdir/scm/r5rs.info.tar.gz>
* LaTeX: <URL:ftp://ctan.tug.org/tex-archive/info/latex2e-help-texinfo/
latex2e.texi> (or CTAN mirrors)
* Perl: <URL:ftp://ftp.cpan.org/pub/CPAN/doc/manual/texinfo/>
(or CPAN mirrors)
* GNU Zile: <URL:http://www.gnu.org/software/zile/>
A lightweight Emacs clone, for when you don't have room for Emacs proper.
@ -108,6 +83,7 @@ packages that you can install.
* AUCTeX: <URL:http://www.gnu.org/software/auctex/>
An extensible package that supports writing and formatting TeX
files (including AMS-TeX, LaTeX, Texinfo, ConTeXt, and docTeX).
Includes Preview LaTeX: embed preview LaTeX images in source buffer.
Available from GNU ELPA.
* BBDB: personal Info Rolodex integrated with mail/news:
@ -134,6 +110,7 @@ packages that you can install.
* Emacs Muse: <URL:http://mwolson.org/projects/EmacsMuse.html>
An authoring and publishing environment for Emacs.
Available from GNU ELPA.
* Emacs speaks statistics (ESS): statistical programming within Emacs
<URL:http://ess.r-project.org>
@ -170,9 +147,6 @@ packages that you can install.
* Planner Mode: <URL:http://www.wjsullivan.net/PlannerMode.html>
Planner is an organizer and day planner for Emacs.
* Preview LaTeX: embed preview LaTeX images in source buffer.
<URL:http://www.gnu.org/software/auctex/preview-latex.html>
* Quack: <URL:http://www.neilvandyke.org/quack/>
Quack enhances Emacs support for Scheme.

View file

@ -1,3 +1,66 @@
2013-02-19 Michael Albinus <michael.albinus@gmx.de>
* net/tramp-cache.el (tramp-get-hash-table): New defun.
(tramp-get-file-property, tramp-set-file-property)
(tramp-get-connection-property, tramp-set-connection-property): Use it.
(tramp-flush-file-property, tramp-flush-directory-property):
Rename argument to KEY.
(tramp-flush-connection-property): Simplify a little bit.
(tramp-connection-property-p): New defun.
(top): Reapply saved values only if there isn't a corresponding
entry in `tramp-connection-properties'.
2013-02-19 Fabián Ezequiel Gallina <fgallina@cuca>
* progmodes/python.el (python-indent-context):
Fix python-info-line-ends-backslash-p call.
(python-info-line-ends-backslash-p)
(python-info-beginning-of-backslash): Respect line-number argument.
(python-info-current-line-comment-p):
Fix behavior when not at beginning-of-line.
(python-util-position): Remove function.
(python-util-goto-line): New function.
2013-02-19 Michael Albinus <michael.albinus@gmx.de>
* eshell/em-unix.el (eshell/su): Require tramp.
(eshell/sudo): Require tramp. Remove now unnecessary check.
* net/tramp-sh.el (tramp-sh-handle-start-file-process): Let-bind
`tramp-current-connection' in order to avoid an error when several
commands are invoked in a short time in eshell and friends.
2013-02-19 Stefan Monnier <monnier@iro.umontreal.ca>
Cleanup some of EIEIO's namespace.
* emacs-lisp/eieio.el (eieio--define-field-accessors): New macro.
Use it to define all the class-* and object-* field accessors (renamed
to eieio--class-* and eieio--object-*). Update all uses.
(eieio--class-num-slots, eieio--object-num-slots): Rename from
class-num-slots and object-num-slots.
(eieio--check-type): New macro.
(eieio-defclass, eieio-oref, eieio-oref-default, same-class-p)
(object-of-class-p, child-of-class-p, object-slots, class-slot-initarg)
(eieio-oset, eieio-oset-default, object-assoc, object-assoc-list)
(object-assoc-list-safe): Use it.
(eieio-defclass): Tighten regexp.
(eieio--defmethod): Use `memq'. Signal an error for unknown method kind.
Remove unreachable code.
(object-class-fast): Declare obsolete.
(eieio-class-name, eieio-object-name, eieio-object-set-name-string)
(eieio-object-class, eieio-object-class-name, eieio-class-parents)
(eieio-class-children, eieio-class-precedence-list, eieio-class-parent):
Rename from class-name, object-name, object-set-name-string,
object-class, object-class-name, class-parents, class-children,
class-precedence-list, class-parent; with obsolete alias.
(class-of, class-direct-superclasses, class-direct-subclasses):
Declare obsolete.
(eieio-defmethod): Use `memq'; remove unreachable code.
* emacs-lisp/eieio-base.el (eieio-persistent-read):
* emacs-lisp/eieio-opt.el (eieio-class-button, eieio-describe-generic)
(eieio-browse-tree, eieio-browse): Use eieio--check-type.
2013-02-18 Michael Heerdegen <michael_heerdegen@web.de>
* emacs-lisp/eldoc.el (eldoc-highlight-function-argument):

View file

@ -65,19 +65,19 @@ SLOT-NAME is the offending slot. FN is the function signaling the error."
"Clone OBJ, initializing `:parent' to OBJ.
All slots are unbound, except those initialized with PARAMS."
(let ((nobj (make-vector (length obj) eieio-unbound))
(nm (aref obj object-name))
(nm (eieio--object-name obj))
(passname (and params (stringp (car params))))
(num 1))
(aset nobj 0 'object)
(aset nobj object-class (aref obj object-class))
(setf (eieio--object-class nobj) (eieio--object-class obj))
;; The following was copied from the default clone.
(if (not passname)
(save-match-data
(if (string-match "-\\([0-9]+\\)" nm)
(setq num (1+ (string-to-number (match-string 1 nm)))
nm (substring nm 0 (match-beginning 0))))
(aset nobj object-name (concat nm "-" (int-to-string num))))
(aset nobj object-name (car params)))
(setf (eieio--object-name nobj) (concat nm "-" (int-to-string num))))
(setf (eieio--object-name nobj) (car params)))
;; Now initialize from params.
(if params (shared-initialize nobj (if passname (cdr params) params)))
(oset nobj parent-instance obj)
@ -232,8 +232,7 @@ for CLASS. Optional ALLOW-SUBCLASS says that it is ok for
being pedantic."
(unless class
(message "Unsafe call to `eieio-persistent-read'."))
(when (and class (not (class-p class)))
(signal 'wrong-type-argument (list 'class-p class)))
(when class (eieio--check-type class-p class))
(let ((ret nil)
(buffstr nil))
(unwind-protect
@ -308,7 +307,7 @@ Second, any text properties will be stripped from strings."
(type nil)
(classtype nil))
(setq slot-idx (- slot-idx 3))
(setq type (aref (aref (class-v class) class-public-type)
(setq type (aref (eieio--class-public-type (class-v class))
slot-idx))
(setq classtype (eieio-persistent-slot-type-is-class-p
@ -482,14 +481,13 @@ Argument SLOT-NAME is the slot that was attempted to be accessed.
OPERATION is the type of access, such as `oref' or `oset'.
NEW-VALUE is the value that was being set into SLOT if OPERATION were
a set type."
(if (or (eq slot-name 'object-name)
(eq slot-name :object-name))
(if (memq slot-name '(object-name :object-name))
(cond ((eq operation 'oset)
(if (not (stringp new-value))
(signal 'invalid-slot-type
(list obj slot-name 'string new-value)))
(object-set-name-string obj new-value))
(t (object-name-string obj)))
(eieio-object-set-name-string obj new-value))
(t (eieio-object-name-string obj)))
(call-next-method)))
(provide 'eieio-base)

View file

@ -192,22 +192,22 @@ Optional argument IGNORE is an extraneous parameter."
(let* ((chil nil)
(obj (widget-get widget :value))
(master-group (widget-get widget :eieio-group))
(cv (class-v (object-class-fast obj)))
(slots (aref cv class-public-a))
(flabel (aref cv class-public-custom-label))
(fgroup (aref cv class-public-custom-group))
(fdoc (aref cv class-public-doc))
(fcust (aref cv class-public-custom)))
(cv (class-v (eieio--object-class obj)))
(slots (eieio--class-public-a cv))
(flabel (eieio--class-public-custom-label cv))
(fgroup (eieio--class-public-custom-group cv))
(fdoc (eieio--class-public-doc cv))
(fcust (eieio--class-public-custom cv)))
;; First line describes the object, but may not editable.
(if (widget-get widget :eieio-show-name)
(setq chil (cons (widget-create-child-and-convert
widget 'string :tag "Object "
:sample-face 'bold
(object-name-string obj))
(eieio-object-name-string obj))
chil)))
;; Display information about the group being shown
(when master-group
(let ((groups (class-option (object-class-fast obj) :custom-groups)))
(let ((groups (class-option (eieio--object-class obj) :custom-groups)))
(widget-insert "Groups:")
(while groups
(widget-insert " ")
@ -260,7 +260,7 @@ Optional argument IGNORE is an extraneous parameter."
(let ((s (symbol-name
(or
(class-slot-initarg
(object-class-fast obj)
(eieio--object-class obj)
(car slots))
(car slots)))))
(capitalize
@ -287,17 +287,17 @@ Optional argument IGNORE is an extraneous parameter."
"Get the value of WIDGET."
(let* ((obj (widget-get widget :value))
(master-group eieio-cog)
(cv (class-v (object-class-fast obj)))
(fgroup (aref cv class-public-custom-group))
(cv (class-v (eieio--object-class obj)))
(fgroup (eieio--class-public-custom-group cv))
(wids (widget-get widget :children))
(name (if (widget-get widget :eieio-show-name)
(car (widget-apply (car wids) :value-inline))
nil))
(chil (if (widget-get widget :eieio-show-name)
(nthcdr 1 wids) wids))
(cv (class-v (object-class-fast obj)))
(slots (aref cv class-public-a))
(fcust (aref cv class-public-custom)))
(cv (class-v (eieio--object-class obj)))
(slots (eieio--class-public-a cv))
(fcust (eieio--class-public-custom cv)))
;; If there are any prefix widgets, clear them.
;; -- None yet
;; Create a batch of initargs for each slot.
@ -316,7 +316,7 @@ Optional argument IGNORE is an extraneous parameter."
fgroup (cdr fgroup)
fcust (cdr fcust)))
;; Set any name updates on it.
(if name (aset obj object-name name))
(if name (setf (eieio--object-name obj) name))
;; This is the same object we had before.
obj))
@ -354,7 +354,7 @@ These groups are specified with the `:group' slot flag."
(let* ((g (or group 'default)))
(switch-to-buffer (get-buffer-create
(concat "*CUSTOMIZE "
(object-name obj) " "
(eieio-object-name obj) " "
(symbol-name g) "*")))
(setq buffer-read-only nil)
(kill-all-local-variables)
@ -367,7 +367,7 @@ These groups are specified with the `:group' slot flag."
;; Add an apply reset option at the top of the buffer.
(eieio-custom-object-apply-reset obj)
(widget-insert "\n\n")
(widget-insert "Edit object " (object-name obj) "\n\n")
(widget-insert "Edit object " (eieio-object-name obj) "\n\n")
;; Create the widget editing the object.
(make-local-variable 'eieio-wo)
(setq eieio-wo (eieio-custom-widget-insert obj :eieio-group g))
@ -452,7 +452,7 @@ Must return the created widget."
(vector (concat "Group " (symbol-name group))
(list 'customize-object obj (list 'quote group))
t))
(class-option (object-class-fast obj) :custom-groups)))
(class-option (eieio--object-class obj) :custom-groups)))
(defvar eieio-read-custom-group-history nil
"History for the custom group reader.")
@ -460,7 +460,7 @@ Must return the created widget."
(defmethod eieio-read-customization-group ((obj eieio-default-superclass))
"Do a completing read on the name of a customization group in OBJ.
Return the symbol for the group, or nil"
(let ((g (class-option (object-class-fast obj) :custom-groups)))
(let ((g (class-option (eieio--object-class obj) :custom-groups)))
(if (= (length g) 1)
(car g)
;; Make the association list

View file

@ -58,9 +58,9 @@ PREBUTTONTEXT is some text between PREFIX and the object button."
(end nil)
(str (object-print object))
(tip (format "Object %s\nClass: %S\nParent(s): %S\n%d slots"
(object-name-string object)
(object-class object)
(class-parents (object-class object))
(eieio-object-name-string object)
(eieio-object-class object)
(eieio-class-parents (eieio-object-class object))
(length (object-slots object))
))
)
@ -82,16 +82,16 @@ PREBUTTONTEXT is some text between PREFIX and the object button."
(defmethod data-debug/eieio-insert-slots ((obj eieio-default-superclass)
prefix)
"Insert the slots of OBJ into the current DDEBUG buffer."
(data-debug-insert-thing (object-name-string obj)
(data-debug-insert-thing (eieio-object-name-string obj)
prefix
"Name: ")
(let* ((cl (object-class obj))
(let* ((cl (eieio-object-class obj))
(cv (class-v cl)))
(data-debug-insert-thing (class-constructor cl)
prefix
"Class: ")
;; Loop over all the public slots
(let ((publa (aref cv class-public-a))
(let ((publa (eieio--class-public-a cv))
)
(while publa
(if (slot-boundp obj (car publa))
@ -123,7 +123,7 @@ PREBUTTONTEXT is some text between PREFIX and the object button."
;;
(defmethod data-debug-show ((obj eieio-default-superclass))
"Run ddebug against any EIEIO object OBJ."
(data-debug-new-buffer (format "*%s DDEBUG*" (object-name obj)))
(data-debug-new-buffer (format "*%s DDEBUG*" (eieio-object-name obj)))
(data-debug-insert-object-slots obj "]"))
;;; DEBUG FUNCTIONS

View file

@ -45,7 +45,7 @@ variable `eieio-default-superclass'."
nil t)))
nil))
(if (not root-class) (setq root-class 'eieio-default-superclass))
(if (not (class-p root-class)) (signal 'wrong-type-argument (list 'class-p root-class)))
(eieio--check-type class-p root-class)
(display-buffer (get-buffer-create "*EIEIO OBJECT BROWSE*") t)
(with-current-buffer (get-buffer "*EIEIO OBJECT BROWSE*")
(erase-buffer)
@ -58,9 +58,9 @@ variable `eieio-default-superclass'."
Argument THIS-ROOT is the local root of the tree.
Argument PREFIX is the character prefix to use.
Argument CH-PREFIX is another character prefix to display."
(if (not (class-p (eval this-root))) (signal 'wrong-type-argument (list 'class-p this-root)))
(eieio--check-type class-p this-root)
(let ((myname (symbol-name this-root))
(chl (aref (class-v this-root) class-children))
(chl (eieio--class-children (class-v this-root)))
(fprefix (concat ch-prefix " +--"))
(mprefix (concat ch-prefix " | "))
(lprefix (concat ch-prefix " ")))
@ -99,7 +99,7 @@ Optional HEADERFCN should be called to insert a few bits of info first."
(princ "'"))
(terpri)
;; Inheritance tree information
(let ((pl (class-parents class)))
(let ((pl (eieio-class-parents class)))
(when pl
(princ " Inherits from ")
(while pl
@ -107,7 +107,7 @@ Optional HEADERFCN should be called to insert a few bits of info first."
(setq pl (cdr pl))
(if pl (princ ", ")))
(terpri)))
(let ((ch (class-children class)))
(let ((ch (eieio-class-children class)))
(when ch
(princ " Children ")
(while ch
@ -177,13 +177,13 @@ Optional HEADERFCN should be called to insert a few bits of info first."
"Describe the slots in CLASS.
Outputs to the standard output."
(let* ((cv (class-v class))
(docs (aref cv class-public-doc))
(names (aref cv class-public-a))
(deflt (aref cv class-public-d))
(types (aref cv class-public-type))
(publp (aref cv class-public-printer))
(docs (eieio--class-public-doc cv))
(names (eieio--class-public-a cv))
(deflt (eieio--class-public-d cv))
(types (eieio--class-public-type cv))
(publp (eieio--class-public-printer cv))
(i 0)
(prot (aref cv class-protection))
(prot (eieio--class-protection cv))
)
(princ "Instance Allocated Slots:")
(terpri)
@ -213,11 +213,11 @@ Outputs to the standard output."
publp (cdr publp)
prot (cdr prot)
i (1+ i)))
(setq docs (aref cv class-class-allocation-doc)
names (aref cv class-class-allocation-a)
types (aref cv class-class-allocation-type)
(setq docs (eieio--class-class-allocation-doc cv)
names (eieio--class-class-allocation-a cv)
types (eieio--class-class-allocation-type cv)
i 0
prot (aref cv class-class-allocation-protection))
prot (eieio--class-class-allocation-protection cv))
(when names
(terpri)
(princ "Class Allocated Slots:"))
@ -281,7 +281,7 @@ Uses `eieio-describe-class' to describe the class being constructed."
(mapcar
(lambda (c)
(append (list c) (eieio-build-class-list c)))
(class-children-fast class)))
(eieio-class-children-fast class)))
(list class)))
(defun eieio-build-class-alist (&optional class instantiable-only buildlist)
@ -291,7 +291,7 @@ If INSTANTIABLE-ONLY is non nil, only allow names of classes which
are not abstract, otherwise allow all classes.
Optional argument BUILDLIST is more list to attach and is used internally."
(let* ((cc (or class eieio-default-superclass))
(sublst (aref (class-v cc) class-children)))
(sublst (eieio--class-children (class-v cc))))
(unless (assoc (symbol-name cc) buildlist)
(when (or (not instantiable-only) (not (class-abstract-p cc)))
(setq buildlist (cons (cons (symbol-name cc) 1) buildlist))))
@ -335,8 +335,7 @@ are not abstract."
"Describe the generic function GENERIC.
Also extracts information about all methods specific to this generic."
(interactive (list (eieio-read-generic "Generic Method: ")))
(if (not (generic-p generic))
(signal 'wrong-type-argument '(generic-p generic)))
(eieio--check-type generic-p generic)
(with-output-to-temp-buffer (help-buffer) ; "*Help*"
(help-setup-xref (list #'eieio-describe-generic generic)
(called-interactively-p 'interactive))
@ -757,9 +756,8 @@ current expansion depth."
(defun eieio-class-button (class depth)
"Draw a speedbar button at the current point for CLASS at DEPTH."
(if (not (class-p class))
(signal 'wrong-type-argument (list 'class-p class)))
(let ((subclasses (aref (class-v class) class-children)))
(eieio--check-type class-p class)
(let ((subclasses (eieio--class-children (class-v class))))
(if subclasses
(speedbar-make-tag-line 'angle ?+
'eieio-sb-expand
@ -784,7 +782,7 @@ Argument INDENT is the depth of indentation."
(speedbar-with-writable
(save-excursion
(end-of-line) (forward-char 1)
(let ((subclasses (aref (class-v class) class-children)))
(let ((subclasses (eieio--class-children (class-v class))))
(while subclasses
(eieio-class-button (car subclasses) (1+ indent))
(setq subclasses (cdr subclasses)))))))

View file

@ -198,7 +198,7 @@ that path."
(defmethod eieio-speedbar-description (object)
"Return a string describing OBJECT."
(object-name-string object))
(eieio-object-name-string object))
(defmethod eieio-speedbar-derive-line-path (object)
"Return the path which OBJECT has something to do with."
@ -206,7 +206,7 @@ that path."
(defmethod eieio-speedbar-object-buttonname (object)
"Return a string to use as a speedbar button for OBJECT."
(object-name-string object))
(eieio-object-name-string object))
(defmethod eieio-speedbar-make-tag-line (object depth)
"Insert a tag line into speedbar at point for OBJECT.
@ -324,7 +324,7 @@ Argument DEPTH is the depth at which the tag line is inserted."
(defmethod eieio-speedbar-child-make-tag-lines ((object eieio-speedbar) depth)
"Base method for creating tag lines for non-object children."
(error "You must implement `eieio-speedbar-child-make-tag-lines' for %s"
(object-name object)))
(eieio-object-name object)))
(defmethod eieio-speedbar-expand ((object eieio-speedbar) depth)
"Expand OBJECT at indentation DEPTH.
@ -365,7 +365,7 @@ TOKEN is the object. INDENT is the current indentation level."
(defmethod eieio-speedbar-child-description ((obj eieio-speedbar))
"Return a description for a child of OBJ which is not an object."
(error "You must implement `eieio-speedbar-child-description' for %s"
(object-name obj)))
(eieio-object-name obj)))
(defun eieio-speedbar-item-info ()
"Display info for the current line when in EDE display mode."

File diff suppressed because it is too large Load diff

View file

@ -1040,6 +1040,7 @@ Show wall-clock time elapsed during execution of COMMAND.")
(defun eshell/su (&rest args)
"Alias \"su\" to call Tramp."
(require 'tramp)
(setq args (eshell-stringify-list (eshell-flatten-list args)))
(let ((orig-args (copy-tree args)))
(eshell-eval-using-options
@ -1077,6 +1078,7 @@ Become another USER during a login session.")
(defun eshell/sudo (&rest args)
"Alias \"sudo\" to call Tramp."
(require 'tramp)
(setq args (eshell-stringify-list (eshell-flatten-list args)))
(let ((orig-args (copy-tree args)))
(eshell-eval-using-options
@ -1111,8 +1113,6 @@ Execute a COMMAND as the superuser or another USER.")
(format "%s|sudo:%s@%s:%s"
(substring prefix 0 -1) user host dir)
(format "/sudo:%s@%s:%s" user host dir))))
;; Ensure, that Tramp has connected to that construct already.
(ignore (file-exists-p default-directory))
(eshell-named-command (car orig-args) (cdr orig-args))))))))
(put 'eshell/sudo 'eshell-no-numeric-conversions t)

View file

@ -27,6 +27,14 @@
;; Really cool code to lookup info indexes.
;; Try especially info-lookup-symbol (aka C-h S).
;; Some additional sources of (Tex)info files for non-GNU packages:
;;
;; Scheme: <URL:http://groups.csail.mit.edu/mac/ftpdir/scm/r5rs.info.tar.gz>
;; LaTeX:
;; <URL:ftp://ctan.tug.org/tex-archive/info/latex2e-help-texinfo/latex2e.texi>
;; (or CTAN mirrors)
;; Perl: <URL:ftp://ftp.cpan.org/pub/CPAN/doc/manual/texinfo/> (or CPAN mirrors)
;;; Code:
(require 'info)

View file

@ -98,16 +98,30 @@ matching entry in for PROPERTY in `tramp-cache-data'."
(defvar tramp-cache-data-changed nil
"Whether persistent cache data have been changed.")
(defun tramp-get-hash-table (key)
"Returns the hash table for KEY.
If it doesn't exist yet, it is created and initialized with
matching entries of `tramp-connection-properties'."
(or (gethash key tramp-cache-data)
(let ((hash
(puthash key (make-hash-table :test 'equal) tramp-cache-data)))
(when (vectorp key)
(dolist (elt tramp-connection-properties)
(when (string-match
(or (nth 0 elt) "")
(tramp-make-tramp-file-name
(aref key 0) (aref key 1) (aref key 2) nil))
(tramp-set-connection-property key (nth 1 elt) (nth 2 elt)))))
hash)))
;;;###tramp-autoload
(defun tramp-get-file-property (vec file property default)
"Get the PROPERTY of FILE from the cache context of VEC.
(defun tramp-get-file-property (key file property default)
"Get the PROPERTY of FILE from the cache context of KEY.
Returns DEFAULT if not set."
;; Unify localname.
(setq vec (copy-sequence vec))
(aset vec 3 (tramp-run-real-handler 'directory-file-name (list file)))
(let* ((hash (or (gethash vec tramp-cache-data)
(puthash vec (make-hash-table :test 'equal)
tramp-cache-data)))
(setq key (copy-sequence key))
(aset key 3 (tramp-run-real-handler 'directory-file-name (list file)))
(let* ((hash (tramp-get-hash-table key))
(value (when (hash-table-p hash) (gethash property hash))))
(if
;; We take the value only if there is any, and
@ -125,7 +139,7 @@ Returns DEFAULT if not set."
(setq value (cdr value))
(setq value default))
(tramp-message vec 8 "%s %s %s" file property value)
(tramp-message key 8 "%s %s %s" file property value)
(when (>= tramp-verbose 10)
(let* ((var (intern (concat "tramp-cache-get-count-" property)))
(val (or (ignore-errors (symbol-value var)) 0)))
@ -133,18 +147,16 @@ Returns DEFAULT if not set."
value))
;;;###tramp-autoload
(defun tramp-set-file-property (vec file property value)
"Set the PROPERTY of FILE to VALUE, in the cache context of VEC.
(defun tramp-set-file-property (key file property value)
"Set the PROPERTY of FILE to VALUE, in the cache context of KEY.
Returns VALUE."
;; Unify localname.
(setq vec (copy-sequence vec))
(aset vec 3 (tramp-run-real-handler 'directory-file-name (list file)))
(let ((hash (or (gethash vec tramp-cache-data)
(puthash vec (make-hash-table :test 'equal)
tramp-cache-data))))
(setq key (copy-sequence key))
(aset key 3 (tramp-run-real-handler 'directory-file-name (list file)))
(let ((hash (tramp-get-hash-table key)))
;; We put the timestamp there.
(puthash property (cons (current-time) value) hash)
(tramp-message vec 8 "%s %s %s" file property value)
(tramp-message key 8 "%s %s %s" file property value)
(when (>= tramp-verbose 10)
(let* ((var (intern (concat "tramp-cache-set-count-" property)))
(val (or (ignore-errors (symbol-value var)) 0)))
@ -152,26 +164,26 @@ Returns VALUE."
value))
;;;###tramp-autoload
(defun tramp-flush-file-property (vec file)
"Remove all properties of FILE in the cache context of VEC."
(defun tramp-flush-file-property (key file)
"Remove all properties of FILE in the cache context of KEY."
;; Remove file property of symlinks.
(let ((truename (tramp-get-file-property vec file "file-truename" nil)))
(let ((truename (tramp-get-file-property key file "file-truename" nil)))
(when (and (stringp truename)
(not (string-equal file truename)))
(tramp-flush-file-property vec truename)))
(tramp-flush-file-property key truename)))
;; Unify localname.
(setq vec (copy-sequence vec))
(aset vec 3 (tramp-run-real-handler 'directory-file-name (list file)))
(tramp-message vec 8 "%s" file)
(remhash vec tramp-cache-data))
(setq key (copy-sequence key))
(aset key 3 (tramp-run-real-handler 'directory-file-name (list file)))
(tramp-message key 8 "%s" file)
(remhash key tramp-cache-data))
;;;###tramp-autoload
(defun tramp-flush-directory-property (vec directory)
"Remove all properties of DIRECTORY in the cache context of VEC.
(defun tramp-flush-directory-property (key directory)
"Remove all properties of DIRECTORY in the cache context of KEY.
Remove also properties of all files in subdirectories."
(let ((directory (tramp-run-real-handler
'directory-file-name (list directory))))
(tramp-message vec 8 "%s" directory)
(tramp-message key 8 "%s" directory)
(maphash
(lambda (key value)
(when (and (stringp (tramp-file-name-localname key))
@ -216,28 +228,10 @@ If the value is not set for the connection, returns DEFAULT."
(when (vectorp key)
(setq key (copy-sequence key))
(aset key 3 nil))
(let* ((hash (gethash key tramp-cache-data))
(value
(catch 'result
(or
;; Check for dynamic properties.
(and
(hash-table-p hash)
(maphash
(lambda (x y) (when (equal x property) (throw 'result y)))
hash))
;; Check for static properties.
(and
(vectorp key)
(dolist (elt tramp-connection-properties)
(when (and (string-match
(or (nth 0 elt) "")
(tramp-make-tramp-file-name
(aref key 0) (aref key 1) (aref key 2) nil))
(string-equal (or (nth 1 elt) "") (or property "")))
(throw 'result (nth 2 elt)))))
;; The default value.
default))))
(let* ((hash (tramp-get-hash-table key))
(value (if (hash-table-p hash)
(gethash property hash default)
default)))
(tramp-message key 7 "%s %s" property value)
value))
@ -251,14 +245,18 @@ PROPERTY is set persistent when KEY is a vector."
(when (vectorp key)
(setq key (copy-sequence key))
(aset key 3 nil))
(let ((hash (or (gethash key tramp-cache-data)
(puthash key (make-hash-table :test 'equal)
tramp-cache-data))))
(let ((hash (tramp-get-hash-table key)))
(puthash property value hash)
(setq tramp-cache-data-changed t)
(tramp-message key 7 "%s %s" property value)
value))
;;;###tramp-autoload
(defun tramp-connection-property-p (key property)
"Check whether named PROPERTY of a connection is defined.
KEY identifies the connection, it is either a process or a vector."
(not (eq (tramp-get-connection-property key property 'undef) 'undef)))
;;;###tramp-autoload
(defun tramp-flush-connection-property (key)
"Remove all properties identified by KEY.
@ -272,10 +270,8 @@ KEY identifies the connection, it is either a process or a vector."
key 7 "%s %s" key
(let ((hash (gethash key tramp-cache-data))
properties)
(if (hash-table-p hash)
(maphash
(lambda (x y) (add-to-list 'properties x 'append))
(gethash key tramp-cache-data)))
(when (hash-table-p hash)
(maphash (lambda (x y) (add-to-list 'properties x 'append)) hash))
properties))
(setq tramp-cache-data-changed t)
(remhash key tramp-cache-data))
@ -396,7 +392,11 @@ for all methods. Resulting data are derived from connection history."
(while (setq element (pop list))
(setq key (pop element))
(while (setq item (pop element))
(tramp-set-connection-property key (pop item) (car item)))))
;; We set only values which are not contained in
;; `tramp-connection-properties'. The cache is
;; initialized properly by side effect.
(unless (tramp-connection-property-p key (car item))
(tramp-set-connection-property key (pop item) (car item))))))
(setq tramp-cache-data-changed nil))
(file-error
;; Most likely because the file doesn't exist yet. No message.

View file

@ -2784,7 +2784,11 @@ the result will be a local, non-Tramp, filename."
(or (null program) tramp-process-connection-type))
(bmp (and (buffer-live-p buffer) (buffer-modified-p buffer)))
(name1 name)
(i 0))
(i 0)
;; We do not want to raise an error when
;; `start-file-process' has been started several time in
;; `eshell' and friends.
(tramp-current-connection nil))
(unless buffer
;; BUFFER can be nil. We use a temporary buffer.

View file

@ -708,10 +708,9 @@ START is the buffer position where the sexp starts."
;; After backslash
((setq start (when (not (or (python-syntax-context 'string ppss)
(python-syntax-context 'comment ppss)))
(let ((line-beg-pos (line-beginning-position)))
(when (python-info-line-ends-backslash-p
(1- line-beg-pos))
(- line-beg-pos 2)))))
(let ((line-beg-pos (line-number-at-pos)))
(python-info-line-ends-backslash-p
(1- line-beg-pos)))))
'after-backslash)
;; After beginning of block
((setq start (save-excursion
@ -3115,7 +3114,7 @@ With optional argument LINE-NUMBER, check that line instead."
(save-restriction
(widen)
(when line-number
(goto-char line-number))
(python-util-goto-line line-number))
(while (and (not (eobp))
(goto-char (line-end-position))
(python-syntax-context 'paren)
@ -3131,7 +3130,7 @@ Optional argument LINE-NUMBER forces the line number to check against."
(save-restriction
(widen)
(when line-number
(goto-char line-number))
(python-util-goto-line line-number))
(when (python-info-line-ends-backslash-p)
(while (save-excursion
(goto-char (line-beginning-position))
@ -3210,7 +3209,9 @@ operator."
(defun python-info-current-line-comment-p ()
"Check if current line is a comment line."
(char-equal (or (char-after (+ (point) (current-indentation))) ?_) ?#))
(char-equal
(or (char-after (+ (line-beginning-position) (current-indentation))) ?_)
?#))
(defun python-info-current-line-empty-p ()
"Check if current line is empty, ignoring whitespace."
@ -3225,12 +3226,10 @@ operator."
;;; Utility functions
(defun python-util-position (item seq)
"Find the first occurrence of ITEM in SEQ.
Return the index of the matching item, or nil if not found."
(let ((member-result (member item seq)))
(when member-result
(- (length seq) (length member-result)))))
(defun python-util-goto-line (line-number)
"Move point to LINE-NUMBER."
(goto-char (point-min))
(forward-line (1- line-number)))
;; Stolen from org-mode
(defun python-util-clone-local-variables (from-buffer &optional regexp)

View file

@ -1,3 +1,8 @@
2013-02-19 Eli Zaretskii <eliz@gnu.org>
* w32proc.c (new_child): Avoid leaking handles if the subprocess
resources were not orderly released.
2013-02-17 Eli Zaretskii <eliz@gnu.org>
* xdisp.c (x_draw_vertical_border): For a window that is neither

View file

@ -19171,7 +19171,7 @@
* coding.c (code_convert_region_unwind):
Set Vlast_coding_system_used to the argument.
(code_convert_region): If post-read-conversion function changed
the value of last-coding-sytem, keep the new value in
the value of last-coding-system, keep the new value in
coding->symbol so that it won't be overridden.
(run_pre_post_conversion_on_str): Likewise.
(coding_system_accept_latin_extra_p): New function.

View file

@ -3053,7 +3053,7 @@ extern Lisp_Object Qautomatic_gc;
extern Lisp_Object Qchar_table_extra_slots;
extern struct Lisp_Vector *allocate_vector (EMACS_INT);
/* Make an unitialized vector for SIZE objects. NOTE: you must
/* Make an uninitialized vector for SIZE objects. NOTE: you must
be sure that GC cannot happen until the vector is completely
initialized. E.g. the following code is likely to crash:

View file

@ -500,7 +500,7 @@ set_marker_internal (Lisp_Object marker, Lisp_Object position,
register ptrdiff_t charpos, bytepos;
/* Do not use CHECK_NUMBER_COERCE_MARKER because we
don't want to call buf_charpos_to_bytepos if POSTION
don't want to call buf_charpos_to_bytepos if POSITION
is a marker and so we know the bytepos already. */
if (INTEGERP (position))
charpos = XINT (position), bytepos = -1;

View file

@ -849,6 +849,12 @@ new_child (void)
cp = &child_procs[child_proc_count++];
Initialize:
/* Last opportunity to avoid leaking handles before we forget them
for good. */
if (cp->procinfo.hProcess)
CloseHandle (cp->procinfo.hProcess);
if (cp->procinfo.hThread)
CloseHandle (cp->procinfo.hThread);
memset (cp, 0, sizeof (*cp));
cp->fd = -1;
cp->pid = -1;

View file

@ -28496,7 +28496,7 @@ x_draw_vertical_border (struct window *w)
if (FRAME_HAS_VERTICAL_SCROLL_BARS (XFRAME (w->frame)))
return;
/* Note: It is necessary to redraw bot the left and the right
/* Note: It is necessary to redraw both the left and the right
borders, for when only this single window W is being
redisplayed. */
if (!WINDOW_RIGHTMOST_P (w)