Merge from trunk
This commit is contained in:
commit
f619ad4ca2
358 changed files with 20475 additions and 7969 deletions
|
@ -1307,17 +1307,17 @@
|
|||
(defconst byte-constref-ops
|
||||
'(byte-constant byte-constant2 byte-varref byte-varset byte-varbind))
|
||||
|
||||
;; Used and set dynamically in byte-decompile-bytecode-1.
|
||||
(defvar bytedecomp-op)
|
||||
(defvar bytedecomp-ptr)
|
||||
(defvar bytedecomp-bytes)
|
||||
|
||||
;; This function extracts the bitfields from variable-length opcodes.
|
||||
;; Originally defined in disass.el (which no longer uses it.)
|
||||
|
||||
(defun disassemble-offset ()
|
||||
"Don't call this!"
|
||||
;; fetch and return the offset for the current opcode.
|
||||
;; return nil if this opcode has no offset
|
||||
;; Used and set dynamically in byte-decompile-bytecode-1.
|
||||
(defvar bytedecomp-op)
|
||||
(defvar bytedecomp-ptr)
|
||||
(defvar bytedecomp-bytes)
|
||||
(cond ((< bytedecomp-op byte-nth)
|
||||
(let ((tem (logand bytedecomp-op 7)))
|
||||
(setq bytedecomp-op (logand bytedecomp-op 248))
|
||||
|
|
|
@ -1797,7 +1797,7 @@ Replace with \"%s\"? " original replace)
|
|||
(let ((found nil) (start (point)) (msg nil) (ms nil))
|
||||
(while (and (not msg)
|
||||
(re-search-forward
|
||||
;; Ignore manual page refereces like
|
||||
;; Ignore manual page references like
|
||||
;; git-config(1).
|
||||
"[^-([`':a-zA-Z]\\(\\w+[:-]\\(\\w\\|\\s_\\)+\\)[^](']"
|
||||
e t))
|
||||
|
|
|
@ -754,7 +754,7 @@ surrounded by (block NAME ...).
|
|||
;;;;;; find nsubstitute-if-not nsubstitute-if nsubstitute substitute-if-not
|
||||
;;;;;; substitute-if substitute delete-duplicates remove-duplicates
|
||||
;;;;;; delete-if-not delete-if delete* remove-if-not remove-if remove*
|
||||
;;;;;; replace fill reduce) "cl-seq" "cl-seq.el" "43e0c1183e738e1e1038cdd84fde8366")
|
||||
;;;;;; replace fill reduce) "cl-seq" "cl-seq.el" "df375ddc313f0c1c262cacab5cffd3e4")
|
||||
;;; Generated autoloads from cl-seq.el
|
||||
|
||||
(autoload 'reduce "cl-seq" "\
|
||||
|
@ -1080,7 +1080,7 @@ Keywords supported: :key
|
|||
|
||||
(autoload 'union "cl-seq" "\
|
||||
Combine LIST1 and LIST2 using a set-union operation.
|
||||
The result list contains all items that appear in either LIST1 or LIST2.
|
||||
The resulting list contains all items that appear in either LIST1 or LIST2.
|
||||
This is a non-destructive function; it makes a copy of the data if necessary
|
||||
to avoid corrupting the original LIST1 and LIST2.
|
||||
|
||||
|
@ -1090,7 +1090,7 @@ Keywords supported: :test :test-not :key
|
|||
|
||||
(autoload 'nunion "cl-seq" "\
|
||||
Combine LIST1 and LIST2 using a set-union operation.
|
||||
The result list contains all items that appear in either LIST1 or LIST2.
|
||||
The resulting list contains all items that appear in either LIST1 or LIST2.
|
||||
This is a destructive function; it reuses the storage of LIST1 and LIST2
|
||||
whenever possible.
|
||||
|
||||
|
@ -1100,7 +1100,7 @@ Keywords supported: :test :test-not :key
|
|||
|
||||
(autoload 'intersection "cl-seq" "\
|
||||
Combine LIST1 and LIST2 using a set-intersection operation.
|
||||
The result list contains all items that appear in both LIST1 and LIST2.
|
||||
The resulting list contains all items that appear in both LIST1 and LIST2.
|
||||
This is a non-destructive function; it makes a copy of the data if necessary
|
||||
to avoid corrupting the original LIST1 and LIST2.
|
||||
|
||||
|
@ -1110,7 +1110,7 @@ Keywords supported: :test :test-not :key
|
|||
|
||||
(autoload 'nintersection "cl-seq" "\
|
||||
Combine LIST1 and LIST2 using a set-intersection operation.
|
||||
The result list contains all items that appear in both LIST1 and LIST2.
|
||||
The resulting list contains all items that appear in both LIST1 and LIST2.
|
||||
This is a destructive function; it reuses the storage of LIST1 and LIST2
|
||||
whenever possible.
|
||||
|
||||
|
@ -1120,7 +1120,7 @@ Keywords supported: :test :test-not :key
|
|||
|
||||
(autoload 'set-difference "cl-seq" "\
|
||||
Combine LIST1 and LIST2 using a set-difference operation.
|
||||
The result list contains all items that appear in LIST1 but not LIST2.
|
||||
The resulting list contains all items that appear in LIST1 but not LIST2.
|
||||
This is a non-destructive function; it makes a copy of the data if necessary
|
||||
to avoid corrupting the original LIST1 and LIST2.
|
||||
|
||||
|
@ -1130,7 +1130,7 @@ Keywords supported: :test :test-not :key
|
|||
|
||||
(autoload 'nset-difference "cl-seq" "\
|
||||
Combine LIST1 and LIST2 using a set-difference operation.
|
||||
The result list contains all items that appear in LIST1 but not LIST2.
|
||||
The resulting list contains all items that appear in LIST1 but not LIST2.
|
||||
This is a destructive function; it reuses the storage of LIST1 and LIST2
|
||||
whenever possible.
|
||||
|
||||
|
@ -1140,7 +1140,7 @@ Keywords supported: :test :test-not :key
|
|||
|
||||
(autoload 'set-exclusive-or "cl-seq" "\
|
||||
Combine LIST1 and LIST2 using a set-exclusive-or operation.
|
||||
The result list contains all items that appear in exactly one of LIST1, LIST2.
|
||||
The resulting list contains all items appearing in exactly one of LIST1, LIST2.
|
||||
This is a non-destructive function; it makes a copy of the data if necessary
|
||||
to avoid corrupting the original LIST1 and LIST2.
|
||||
|
||||
|
@ -1150,7 +1150,7 @@ Keywords supported: :test :test-not :key
|
|||
|
||||
(autoload 'nset-exclusive-or "cl-seq" "\
|
||||
Combine LIST1 and LIST2 using a set-exclusive-or operation.
|
||||
The result list contains all items that appear in exactly one of LIST1, LIST2.
|
||||
The resulting list contains all items appearing in exactly one of LIST1, LIST2.
|
||||
This is a destructive function; it reuses the storage of LIST1 and LIST2
|
||||
whenever possible.
|
||||
|
||||
|
|
|
@ -770,7 +770,7 @@ Return the sublist of LIST whose car matches.
|
|||
;;;###autoload
|
||||
(defun union (cl-list1 cl-list2 &rest cl-keys)
|
||||
"Combine LIST1 and LIST2 using a set-union operation.
|
||||
The result list contains all items that appear in either LIST1 or LIST2.
|
||||
The resulting list contains all items that appear in either LIST1 or LIST2.
|
||||
This is a non-destructive function; it makes a copy of the data if necessary
|
||||
to avoid corrupting the original LIST1 and LIST2.
|
||||
\nKeywords supported: :test :test-not :key
|
||||
|
@ -791,7 +791,7 @@ to avoid corrupting the original LIST1 and LIST2.
|
|||
;;;###autoload
|
||||
(defun nunion (cl-list1 cl-list2 &rest cl-keys)
|
||||
"Combine LIST1 and LIST2 using a set-union operation.
|
||||
The result list contains all items that appear in either LIST1 or LIST2.
|
||||
The resulting list contains all items that appear in either LIST1 or LIST2.
|
||||
This is a destructive function; it reuses the storage of LIST1 and LIST2
|
||||
whenever possible.
|
||||
\nKeywords supported: :test :test-not :key
|
||||
|
@ -802,7 +802,7 @@ whenever possible.
|
|||
;;;###autoload
|
||||
(defun intersection (cl-list1 cl-list2 &rest cl-keys)
|
||||
"Combine LIST1 and LIST2 using a set-intersection operation.
|
||||
The result list contains all items that appear in both LIST1 and LIST2.
|
||||
The resulting list contains all items that appear in both LIST1 and LIST2.
|
||||
This is a non-destructive function; it makes a copy of the data if necessary
|
||||
to avoid corrupting the original LIST1 and LIST2.
|
||||
\nKeywords supported: :test :test-not :key
|
||||
|
@ -825,7 +825,7 @@ to avoid corrupting the original LIST1 and LIST2.
|
|||
;;;###autoload
|
||||
(defun nintersection (cl-list1 cl-list2 &rest cl-keys)
|
||||
"Combine LIST1 and LIST2 using a set-intersection operation.
|
||||
The result list contains all items that appear in both LIST1 and LIST2.
|
||||
The resulting list contains all items that appear in both LIST1 and LIST2.
|
||||
This is a destructive function; it reuses the storage of LIST1 and LIST2
|
||||
whenever possible.
|
||||
\nKeywords supported: :test :test-not :key
|
||||
|
@ -835,7 +835,7 @@ whenever possible.
|
|||
;;;###autoload
|
||||
(defun set-difference (cl-list1 cl-list2 &rest cl-keys)
|
||||
"Combine LIST1 and LIST2 using a set-difference operation.
|
||||
The result list contains all items that appear in LIST1 but not LIST2.
|
||||
The resulting list contains all items that appear in LIST1 but not LIST2.
|
||||
This is a non-destructive function; it makes a copy of the data if necessary
|
||||
to avoid corrupting the original LIST1 and LIST2.
|
||||
\nKeywords supported: :test :test-not :key
|
||||
|
@ -855,7 +855,7 @@ to avoid corrupting the original LIST1 and LIST2.
|
|||
;;;###autoload
|
||||
(defun nset-difference (cl-list1 cl-list2 &rest cl-keys)
|
||||
"Combine LIST1 and LIST2 using a set-difference operation.
|
||||
The result list contains all items that appear in LIST1 but not LIST2.
|
||||
The resulting list contains all items that appear in LIST1 but not LIST2.
|
||||
This is a destructive function; it reuses the storage of LIST1 and LIST2
|
||||
whenever possible.
|
||||
\nKeywords supported: :test :test-not :key
|
||||
|
@ -866,7 +866,7 @@ whenever possible.
|
|||
;;;###autoload
|
||||
(defun set-exclusive-or (cl-list1 cl-list2 &rest cl-keys)
|
||||
"Combine LIST1 and LIST2 using a set-exclusive-or operation.
|
||||
The result list contains all items that appear in exactly one of LIST1, LIST2.
|
||||
The resulting list contains all items appearing in exactly one of LIST1, LIST2.
|
||||
This is a non-destructive function; it makes a copy of the data if necessary
|
||||
to avoid corrupting the original LIST1 and LIST2.
|
||||
\nKeywords supported: :test :test-not :key
|
||||
|
@ -879,7 +879,7 @@ to avoid corrupting the original LIST1 and LIST2.
|
|||
;;;###autoload
|
||||
(defun nset-exclusive-or (cl-list1 cl-list2 &rest cl-keys)
|
||||
"Combine LIST1 and LIST2 using a set-exclusive-or operation.
|
||||
The result list contains all items that appear in exactly one of LIST1, LIST2.
|
||||
The resulting list contains all items appearing in exactly one of LIST1, LIST2.
|
||||
This is a destructive function; it reuses the storage of LIST1 and LIST2
|
||||
whenever possible.
|
||||
\nKeywords supported: :test :test-not :key
|
||||
|
|
|
@ -326,6 +326,7 @@ User made commands should also call this method when applying changes.
|
|||
Argument OBJ is the object that has been customized."
|
||||
nil)
|
||||
|
||||
;;;###autoload
|
||||
(defun customize-object (obj &optional group)
|
||||
"Customize OBJ in a custom buffer.
|
||||
Optional argument GROUP is the sub-group of slots to display."
|
||||
|
@ -460,4 +461,8 @@ Return the symbol for the group, or nil"
|
|||
|
||||
(provide 'eieio-custom)
|
||||
|
||||
;; Local variables:
|
||||
;; generated-autoload-file: "eieio.el"
|
||||
;; End:
|
||||
|
||||
;;; eieio-custom.el ends here
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
(require 'eieio)
|
||||
|
||||
;;; Code:
|
||||
;;;###autoload
|
||||
(defun eieio-browse (&optional root-class)
|
||||
"Create an object browser window to show all objects.
|
||||
If optional ROOT-CLASS, then start with that, otherwise start with
|
||||
|
@ -71,8 +72,10 @@ Argument CH-PREFIX is another character prefix to display."
|
|||
|
||||
;;; CLASS COMPLETION / DOCUMENTATION
|
||||
|
||||
;;;###autoload
|
||||
(defalias 'describe-class 'eieio-describe-class)
|
||||
|
||||
;;;###autoload
|
||||
(defun eieio-describe-class (class &optional headerfcn)
|
||||
"Describe a CLASS defined by a string or symbol.
|
||||
If CLASS is actually an object, then also display current values of that object.
|
||||
|
@ -238,6 +241,7 @@ Outputs to the standard output."
|
|||
prot (cdr prot)
|
||||
i (1+ i)))))
|
||||
|
||||
;;;###autoload
|
||||
(defun eieio-describe-constructor (fcn)
|
||||
"Describe the constructor function FCN.
|
||||
Uses `eieio-describe-class' to describe the class being constructed."
|
||||
|
@ -301,9 +305,11 @@ are not abstract."
|
|||
;;; METHOD COMPLETION / DOC
|
||||
|
||||
(defalias 'describe-method 'eieio-describe-generic)
|
||||
;;;###autoload
|
||||
(defalias 'describe-generic 'eieio-describe-generic)
|
||||
(defalias 'eieio-describe-method 'eieio-describe-generic)
|
||||
|
||||
;;;###autoload
|
||||
(defun eieio-describe-generic (generic)
|
||||
"Describe the generic function GENERIC.
|
||||
Also extracts information about all methods specific to this generic."
|
||||
|
@ -550,6 +556,7 @@ Optional argument HISTORYVAR is the variable to use as history."
|
|||
|
||||
;;; HELP AUGMENTATION
|
||||
;;
|
||||
;;;###autoload
|
||||
(defun eieio-help-mode-augmentation-maybee (&rest unused)
|
||||
"For buffers thrown into help mode, augment for EIEIO.
|
||||
Arguments UNUSED are not used."
|
||||
|
@ -693,4 +700,8 @@ INDENT is the current indentation level."
|
|||
|
||||
(provide 'eieio-opt)
|
||||
|
||||
;; Local variables:
|
||||
;; generated-autoload-file: "eieio.el"
|
||||
;; End:
|
||||
|
||||
;;; eieio-opt.el ends here
|
||||
|
|
|
@ -2940,15 +2940,65 @@ Optional argument NOESCAPE is passed to `prin1-to-string' when appropriate."
|
|||
;;; Autoloading some external symbols, and hooking into the help system
|
||||
;;
|
||||
|
||||
(autoload 'eieio-help-mode-augmentation-maybee "eieio-opt" "For buffers thrown into help mode, augment for EIEIO.")
|
||||
(autoload 'eieio-browse "eieio-opt" "Create an object browser window." t)
|
||||
(autoload 'eieio-describe-class "eieio-opt" "Describe CLASS defined by a string or symbol" t)
|
||||
(autoload 'eieio-describe-constructor "eieio-opt" "Describe the constructor function FCN." t)
|
||||
(autoload 'describe-class "eieio-opt" "Describe CLASS defined by a string or symbol." t)
|
||||
(autoload 'eieio-describe-generic "eieio-opt" "Describe GENERIC defined by a string or symbol." t)
|
||||
(autoload 'describe-generic "eieio-opt" "Describe GENERIC defined by a string or symbol." t)
|
||||
|
||||
;;; Start of automatically extracted autoloads.
|
||||
|
||||
;;;### (autoloads (customize-object) "eieio-custom" "eieio-custom.el"
|
||||
;;;;;; "cf1bd64c76a6e6406545e8c5a5530d43")
|
||||
;;; Generated autoloads from eieio-custom.el
|
||||
|
||||
(autoload 'customize-object "eieio-custom" "Create a custom buffer editing OBJ.")
|
||||
(autoload 'customize-object "eieio-custom" "\
|
||||
Customize OBJ in a custom buffer.
|
||||
Optional argument GROUP is the sub-group of slots to display.
|
||||
|
||||
\(fn OBJ &optional GROUP)" nil nil)
|
||||
|
||||
;;;***
|
||||
|
||||
;;;### (autoloads (eieio-help-mode-augmentation-maybee eieio-describe-generic
|
||||
;;;;;; eieio-describe-constructor eieio-describe-class eieio-browse)
|
||||
;;;;;; "eieio-opt" "eieio-opt.el" "1bed0a56310f402683419139ebc18d7f")
|
||||
;;; Generated autoloads from eieio-opt.el
|
||||
|
||||
(autoload 'eieio-browse "eieio-opt" "\
|
||||
Create an object browser window to show all objects.
|
||||
If optional ROOT-CLASS, then start with that, otherwise start with
|
||||
variable `eieio-default-superclass'.
|
||||
|
||||
\(fn &optional ROOT-CLASS)" t nil)
|
||||
|
||||
(defalias 'describe-class 'eieio-describe-class)
|
||||
|
||||
(autoload 'eieio-describe-class "eieio-opt" "\
|
||||
Describe a CLASS defined by a string or symbol.
|
||||
If CLASS is actually an object, then also display current values of that object.
|
||||
Optional HEADERFCN should be called to insert a few bits of info first.
|
||||
|
||||
\(fn CLASS &optional HEADERFCN)" t nil)
|
||||
|
||||
(autoload 'eieio-describe-constructor "eieio-opt" "\
|
||||
Describe the constructor function FCN.
|
||||
Uses `eieio-describe-class' to describe the class being constructed.
|
||||
|
||||
\(fn FCN)" t nil)
|
||||
|
||||
(defalias 'describe-generic 'eieio-describe-generic)
|
||||
|
||||
(autoload 'eieio-describe-generic "eieio-opt" "\
|
||||
Describe the generic function GENERIC.
|
||||
Also extracts information about all methods specific to this generic.
|
||||
|
||||
\(fn GENERIC)" t nil)
|
||||
|
||||
(autoload 'eieio-help-mode-augmentation-maybee "eieio-opt" "\
|
||||
For buffers thrown into help mode, augment for EIEIO.
|
||||
Arguments UNUSED are not used.
|
||||
|
||||
\(fn &rest UNUSED)" nil nil)
|
||||
|
||||
;;;***
|
||||
|
||||
;;; End of automatically extracted autoloads.
|
||||
|
||||
(provide 'eieio)
|
||||
|
||||
|
|
|
@ -1877,6 +1877,7 @@ BUFFER-NAME, if non-nil, is the buffer name to use."
|
|||
(let ((inhibit-read-only t))
|
||||
(buffer-disable-undo)
|
||||
(erase-buffer)
|
||||
(ert-results-mode)
|
||||
;; Erase buffer again in case switching out of the previous
|
||||
;; mode inserted anything. (This happens e.g. when switching
|
||||
;; from ert-results-mode to ert-results-mode when
|
||||
|
@ -1895,9 +1896,8 @@ BUFFER-NAME, if non-nil, is the buffer name to use."
|
|||
(ewoc-enter-last ewoc
|
||||
(make-ert--ewoc-entry :test test :hidden-p t)))
|
||||
(ert--results-update-ewoc-hf ert--results-ewoc ert--results-stats)
|
||||
(goto-char (1- (point-max)))))
|
||||
(ert-results-mode)
|
||||
buffer)))
|
||||
(goto-char (1- (point-max)))
|
||||
buffer)))))
|
||||
|
||||
|
||||
(defvar ert--selector-history nil
|
||||
|
@ -2343,6 +2343,7 @@ To be used in the ERT results buffer."
|
|||
(let ((inhibit-read-only t))
|
||||
(buffer-disable-undo)
|
||||
(erase-buffer)
|
||||
(ert-simple-view-mode)
|
||||
;; Use unibyte because `debugger-setup-buffer' also does so.
|
||||
(set-buffer-multibyte nil)
|
||||
(setq truncate-lines t)
|
||||
|
@ -2351,8 +2352,7 @@ To be used in the ERT results buffer."
|
|||
(goto-char (point-min))
|
||||
(insert "Backtrace for test `")
|
||||
(ert-insert-test-name-button (ert-test-name test))
|
||||
(insert "':\n")
|
||||
(ert-simple-view-mode)))))))
|
||||
(insert "':\n")))))))
|
||||
|
||||
(defun ert-results-pop-to-messages-for-test-at-point ()
|
||||
"Display the part of the *Messages* buffer generated during the test at point.
|
||||
|
@ -2368,12 +2368,12 @@ To be used in the ERT results buffer."
|
|||
(let ((inhibit-read-only t))
|
||||
(buffer-disable-undo)
|
||||
(erase-buffer)
|
||||
(ert-simple-view-mode)
|
||||
(insert (ert-test-result-messages result))
|
||||
(goto-char (point-min))
|
||||
(insert "Messages for test `")
|
||||
(ert-insert-test-name-button (ert-test-name test))
|
||||
(insert "':\n")
|
||||
(ert-simple-view-mode)))))
|
||||
(insert "':\n")))))
|
||||
|
||||
(defun ert-results-pop-to-should-forms-for-test-at-point ()
|
||||
"Display the list of `should' forms executed during the test at point.
|
||||
|
@ -2389,6 +2389,7 @@ To be used in the ERT results buffer."
|
|||
(let ((inhibit-read-only t))
|
||||
(buffer-disable-undo)
|
||||
(erase-buffer)
|
||||
(ert-simple-view-mode)
|
||||
(if (null (ert-test-result-should-forms result))
|
||||
(insert "\n(No should forms during this test.)\n")
|
||||
(loop for form-description in (ert-test-result-should-forms result)
|
||||
|
@ -2406,8 +2407,7 @@ To be used in the ERT results buffer."
|
|||
(insert (concat "(Values are shallow copies and may have "
|
||||
"looked different during the test if they\n"
|
||||
"have been modified destructively.)\n"))
|
||||
(forward-line 1)
|
||||
(ert-simple-view-mode)))))
|
||||
(forward-line 1)))))
|
||||
|
||||
(defun ert-results-toggle-printer-limits-for-test-at-point ()
|
||||
"Toggle how much of the condition to print for the test at point.
|
||||
|
@ -2442,6 +2442,7 @@ To be used in the ERT results buffer."
|
|||
(let ((inhibit-read-only t))
|
||||
(buffer-disable-undo)
|
||||
(erase-buffer)
|
||||
(ert-simple-view-mode)
|
||||
(if (null data)
|
||||
(insert "(No data)\n")
|
||||
(insert (format "%-3s %8s %8s\n" "" "time" "cumul"))
|
||||
|
@ -2454,8 +2455,7 @@ To be used in the ERT results buffer."
|
|||
(insert "\n"))))
|
||||
(goto-char (point-min))
|
||||
(insert "Tests by run time (seconds):\n\n")
|
||||
(forward-line 1)
|
||||
(ert-simple-view-mode))))
|
||||
(forward-line 1))))
|
||||
|
||||
;;;###autoload
|
||||
(defun ert-describe-test (test-or-test-name)
|
||||
|
|
|
@ -55,7 +55,7 @@ Each entry has the form (FUNCTION . FUNCTIONS-IT-CALLS).")
|
|||
"term.c" "cm.c" "emacs.c" "keyboard.c" "macros.c"
|
||||
"keymap.c" "sysdep.c" "buffer.c" "filelock.c"
|
||||
"insdel.c" "marker.c" "minibuf.c" "fileio.c"
|
||||
"dired.c" "filemode.c" "cmds.c" "casefiddle.c"
|
||||
"dired.c" "cmds.c" "casefiddle.c"
|
||||
"indent.c" "search.c" "regex.c" "undo.c"
|
||||
"alloc.c" "data.c" "doc.c" "editfns.c"
|
||||
"callint.c" "eval.c" "fns.c" "print.c" "lread.c"
|
||||
|
|
|
@ -577,23 +577,22 @@ Otherwise it uses an external `tar' program.
|
|||
(let ((load-path (cons pkg-dir load-path)))
|
||||
(byte-recompile-directory pkg-dir 0 t)))))
|
||||
|
||||
(defun package--write-file-no-coding (file-name excl)
|
||||
(defun package--write-file-no-coding (file-name)
|
||||
(let ((buffer-file-coding-system 'no-conversion))
|
||||
(write-region (point-min) (point-max) file-name nil nil nil excl)))
|
||||
(write-region (point-min) (point-max) file-name)))
|
||||
|
||||
(defun package-unpack-single (file-name version desc requires)
|
||||
"Install the contents of the current buffer as a package."
|
||||
;; Special case "package".
|
||||
(if (string= file-name "package")
|
||||
(package--write-file-no-coding
|
||||
(expand-file-name (concat file-name ".el") package-user-dir)
|
||||
nil)
|
||||
(expand-file-name (concat file-name ".el") package-user-dir))
|
||||
(let* ((pkg-dir (expand-file-name (concat file-name "-" version)
|
||||
package-user-dir))
|
||||
(el-file (expand-file-name (concat file-name ".el") pkg-dir))
|
||||
(pkg-file (expand-file-name (concat file-name "-pkg.el") pkg-dir)))
|
||||
(make-directory pkg-dir t)
|
||||
(package--write-file-no-coding el-file 'excl)
|
||||
(package--write-file-no-coding el-file)
|
||||
(let ((print-level nil)
|
||||
(print-length nil))
|
||||
(write-region
|
||||
|
@ -1658,10 +1657,10 @@ list; the default is to display everything in `package-alist'."
|
|||
(require 'finder-inf nil t)
|
||||
(let ((buf (get-buffer-create "*Packages*")))
|
||||
(with-current-buffer buf
|
||||
(package-menu-mode)
|
||||
(set (make-local-variable 'package-menu-package-list) packages)
|
||||
(set (make-local-variable 'package-menu-sort-key) nil)
|
||||
(package--generate-package-list)
|
||||
(package-menu-mode))
|
||||
(package--generate-package-list))
|
||||
;; The package menu buffer has keybindings. If the user types
|
||||
;; `M-x list-packages', that suggests it should become current.
|
||||
(switch-to-buffer buf)))
|
||||
|
|
|
@ -59,6 +59,8 @@ UPatterns can take the following forms:
|
|||
`QPAT matches if the QPattern QPAT matches.
|
||||
(pred PRED) matches if PRED applied to the object returns non-nil.
|
||||
(guard BOOLEXP) matches if BOOLEXP evaluates to non-nil.
|
||||
If a SYMBOL is used twice in the same pattern (i.e. the pattern is
|
||||
\"non-linear\"), then the second occurrence is turned into an `eq'uality test.
|
||||
|
||||
QPatterns can take the following forms:
|
||||
(QPAT1 . QPAT2) matches if QPAT1 matches the car and QPAT2 the cdr.
|
||||
|
@ -465,7 +467,12 @@ and otherwise defers to REST which is a list of branches of the form
|
|||
(pcase--u1 matches code vars then-rest)
|
||||
(pcase--u else-rest))))
|
||||
((symbolp upat)
|
||||
(pcase--u1 matches code (cons (cons upat sym) vars) rest))
|
||||
(if (not (assq upat vars))
|
||||
(pcase--u1 matches code (cons (cons upat sym) vars) rest)
|
||||
;; Non-linear pattern. Turn it into an `eq' test.
|
||||
(pcase--u1 (cons `(match ,sym . (pred (eq ,(cdr (assq upat vars)))))
|
||||
matches)
|
||||
code vars rest)))
|
||||
((eq (car-safe upat) '\`)
|
||||
(pcase--q1 sym (cadr upat) matches code vars rest))
|
||||
((eq (car-safe upat) 'or)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue