mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-16 17:24:23 +00:00
Move several completions from eshell to pcomplete (Bug#10585)
* lisp/eshell/em-unix.el (eshell-complete-hostname) (pcomplete/ftp, pcomplete/ncftp, pcomplete/ping) (pcomplete/rlogin, pcomplete/telnet, pcomplete/rsh): Move from here... * lisp/pcmpl-unix.el (pcmpl-unix-complete-hostname) (pcomplete/ftp, pcomplete/ncftp, pcomplete/ping) (pcomplete/rlogin, pcomplete/telnet, pcomplete/rsh): ...to here. Make old names into aliases. * lisp/eshell/esh-util.el (eshell-hosts-file) (eshell-host-names, eshell-host-timestamp) (eshell-read-hosts-file, eshell-read-hosts) (eshell-read-host-names): Move from here... * lisp/pcomplete.el (pcomplete-hosts-file) (pcomplete--host-name-cache) (pcomplete--host-name-cache-timestamp) (pcomplete-read-hosts-file, pcomplete-read-hosts) (pcomplete-read-host-names): ...to here. Make old names into aliases. * lisp/eshell/em-unix.el (eshell-complete-host-reference): Update caller.
This commit is contained in:
parent
600d3f0669
commit
fb68645b5a
4 changed files with 94 additions and 59 deletions
|
|
@ -787,9 +787,9 @@ external command."
|
|||
|
||||
;; completions rules for some common UNIX commands
|
||||
|
||||
(defsubst eshell-complete-hostname ()
|
||||
"Complete a command that wants a hostname for an argument."
|
||||
(pcomplete-here (eshell-read-host-names)))
|
||||
(autoload 'pcmpl-unix-complete-hostname "pcmpl-unix")
|
||||
(define-obsolete-function-alias 'eshell-complete-hostname
|
||||
#'pcmpl-unix-complete-hostname "28.1")
|
||||
|
||||
(defun eshell-complete-host-reference ()
|
||||
"If there is a host reference, complete it."
|
||||
|
|
@ -798,26 +798,7 @@ external command."
|
|||
(when (setq index (string-match "@[a-z.]*\\'" arg))
|
||||
(setq pcomplete-stub (substring arg (1+ index))
|
||||
pcomplete-last-completion-raw t)
|
||||
(throw 'pcomplete-completions (eshell-read-host-names)))))
|
||||
|
||||
(defalias 'pcomplete/ftp 'eshell-complete-hostname)
|
||||
(defalias 'pcomplete/ncftp 'eshell-complete-hostname)
|
||||
(defalias 'pcomplete/ping 'eshell-complete-hostname)
|
||||
(defalias 'pcomplete/rlogin 'eshell-complete-hostname)
|
||||
|
||||
(defun pcomplete/telnet ()
|
||||
(require 'pcmpl-unix)
|
||||
(pcomplete-opt "xl(pcmpl-unix-user-names)")
|
||||
(eshell-complete-hostname))
|
||||
|
||||
(defun pcomplete/rsh ()
|
||||
"Complete `rsh', which, after the user and hostname, is like xargs."
|
||||
(require 'pcmpl-unix)
|
||||
(pcomplete-opt "l(pcmpl-unix-user-names)")
|
||||
(eshell-complete-hostname)
|
||||
(pcomplete-here (funcall pcomplete-command-completion-function))
|
||||
(funcall (or (pcomplete-find-completion-function (pcomplete-arg 1))
|
||||
pcomplete-default-completion-function)))
|
||||
(throw 'pcomplete-completions (pcomplete-read-host-names)))))
|
||||
|
||||
(defvar block-size)
|
||||
(defvar by-bytes)
|
||||
|
|
|
|||
|
|
@ -51,9 +51,15 @@ similarly to external commands, as far as successful result output."
|
|||
:group 'eshell-util)
|
||||
|
||||
(defcustom eshell-hosts-file "/etc/hosts"
|
||||
"The name of the /etc/hosts file."
|
||||
"The name of the /etc/hosts file.
|
||||
Use `pcomplete-hosts-file' instead; this variable is obsolete and
|
||||
has no effect."
|
||||
:type '(choice (const :tag "No hosts file" nil) file)
|
||||
:group 'eshell-util)
|
||||
;; Don't make it into an alias, because it doesn't really work with
|
||||
;; custom and risks creating duplicate entries. Just point users to
|
||||
;; the other variable, which is less frustrating.
|
||||
(make-obsolete-variable 'eshell-hosts-file nil "28.1")
|
||||
|
||||
(defcustom eshell-handle-errors t
|
||||
"If non-nil, Eshell will handle errors itself.
|
||||
|
|
@ -127,11 +133,14 @@ function `string-to-number'."
|
|||
(defvar eshell-user-timestamp nil
|
||||
"A timestamp of when the user file was read.")
|
||||
|
||||
(defvar eshell-host-names nil
|
||||
"A cache the names of frequently accessed hosts.")
|
||||
;;; Obsolete variables:
|
||||
|
||||
(defvar eshell-host-timestamp nil
|
||||
"A timestamp of when the hosts file was read.")
|
||||
(define-obsolete-variable-alias 'eshell-host-names
|
||||
'pcomplete--host-name-cache "28.1")
|
||||
(define-obsolete-variable-alias 'eshell-host-timestamp
|
||||
'pcomplete--host-name-cache-timestamp "28.1")
|
||||
(defvar pcomplete--host-name-cache)
|
||||
(defvar pcomplete--host-name-cache-timestamp)
|
||||
|
||||
;;; Functions:
|
||||
|
||||
|
|
@ -479,37 +488,15 @@ list."
|
|||
|
||||
(defalias 'eshell-user-name 'user-login-name)
|
||||
|
||||
(defun eshell-read-hosts-file (filename)
|
||||
"Read in the hosts from FILENAME, default `eshell-hosts-file'."
|
||||
(let (hosts)
|
||||
(with-temp-buffer
|
||||
(insert-file-contents (or filename eshell-hosts-file))
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward
|
||||
;; "^ \t\\([^# \t\n]+\\)[ \t]+\\([^ \t\n]+\\)\\([ \t]*\\([^ \t\n]+\\)\\)?"
|
||||
"^[ \t]*\\([^# \t\n]+\\)[ \t]+\\([^ \t\n].+\\)" nil t)
|
||||
(push (cons (match-string 1)
|
||||
(split-string (match-string 2)))
|
||||
hosts)))
|
||||
(nreverse hosts)))
|
||||
|
||||
(defun eshell-read-hosts (file result-var timestamp-var)
|
||||
"Read the contents of /etc/hosts for host names."
|
||||
(if (or (not (symbol-value result-var))
|
||||
(not (symbol-value timestamp-var))
|
||||
(time-less-p
|
||||
(symbol-value timestamp-var)
|
||||
(file-attribute-modification-time (file-attributes file))))
|
||||
(progn
|
||||
(set result-var (apply #'nconc (eshell-read-hosts-file file)))
|
||||
(set timestamp-var (current-time))))
|
||||
(symbol-value result-var))
|
||||
|
||||
(defun eshell-read-host-names ()
|
||||
"Read the contents of /etc/hosts for host names."
|
||||
(if eshell-hosts-file
|
||||
(eshell-read-hosts eshell-hosts-file 'eshell-host-names
|
||||
'eshell-host-timestamp)))
|
||||
(autoload 'pcomplete-read-hosts-file "pcomplete")
|
||||
(autoload 'pcomplete-read-hosts "pcomplete")
|
||||
(autoload 'pcomplete-read-host-names "pcomplete")
|
||||
(define-obsolete-function-alias 'eshell-read-hosts-file
|
||||
#'pcomplete-read-hosts-file "28.1")
|
||||
(define-obsolete-function-alias 'eshell-read-hosts
|
||||
#'pcomplete-read-hosts "28.1")
|
||||
(define-obsolete-function-alias 'eshell-read-host-names
|
||||
#'pcomplete-read-host-names "28.1")
|
||||
|
||||
(defsubst eshell-copy-environment ()
|
||||
"Return an unrelated copy of `process-environment'."
|
||||
|
|
|
|||
|
|
@ -217,6 +217,29 @@ Includes files as well as host names followed by a colon."
|
|||
(pcmpl-ssh-hosts)))))))
|
||||
(complete-with-action action table string pred))))))
|
||||
|
||||
(defsubst pcmpl-unix-complete-hostname ()
|
||||
"Complete a command that wants a hostname for an argument."
|
||||
(pcomplete-here (pcomplete-read-host-names)))
|
||||
|
||||
(defalias 'pcomplete/ftp 'pcmpl-unix-complete-hostname)
|
||||
(defalias 'pcomplete/ncftp 'pcmpl-unix-complete-hostname)
|
||||
(defalias 'pcomplete/ping 'pcmpl-unix-complete-hostname)
|
||||
(defalias 'pcomplete/rlogin 'pcmpl-unix-complete-hostname)
|
||||
|
||||
;;;###autoload
|
||||
(defun pcomplete/telnet ()
|
||||
(pcomplete-opt "xl(pcmpl-unix-user-names)")
|
||||
(pcmpl-unix-complete-hostname))
|
||||
|
||||
;;;###autoload
|
||||
(defun pcomplete/rsh ()
|
||||
"Complete `rsh', which, after the user and hostname, is like xargs."
|
||||
(pcomplete-opt "l(pcmpl-unix-user-names)")
|
||||
(pcmpl-unix-complete-hostname)
|
||||
(pcomplete-here (funcall pcomplete-command-completion-function))
|
||||
(funcall (or (pcomplete-find-completion-function (pcomplete-arg 1))
|
||||
pcomplete-default-completion-function)))
|
||||
|
||||
(provide 'pcmpl-unix)
|
||||
|
||||
;;; pcmpl-unix.el ends here
|
||||
|
|
|
|||
|
|
@ -325,6 +325,10 @@ already terminated by a character, this variable should be locally
|
|||
modified to be an empty string, or the desired separation string."
|
||||
:type 'string)
|
||||
|
||||
(defcustom pcomplete-hosts-file "/etc/hosts"
|
||||
"The name of the /etc/hosts file."
|
||||
:type '(choice (const :tag "No hosts file" nil) file))
|
||||
|
||||
;;; Internal Variables:
|
||||
|
||||
;; for cycling completion support
|
||||
|
|
@ -1289,6 +1293,46 @@ If specific documentation can't be given, be generic."
|
|||
(skip-chars-backward "\n")
|
||||
(buffer-substring (point-min) (point))))
|
||||
|
||||
;; hostname completion
|
||||
|
||||
(defvar pcomplete--host-name-cache nil
|
||||
"A cache the names of frequently accessed hosts.")
|
||||
|
||||
(defvar pcomplete--host-name-cache-timestamp nil
|
||||
"A timestamp of when the hosts file was read.")
|
||||
|
||||
(defun pcomplete-read-hosts-file (filename)
|
||||
"Read in the hosts from FILENAME, default `pcomplete-hosts-file'."
|
||||
(let (hosts)
|
||||
(with-temp-buffer
|
||||
(insert-file-contents (or filename pcomplete-hosts-file))
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward
|
||||
;; "^ \t\\([^# \t\n]+\\)[ \t]+\\([^ \t\n]+\\)\\([ \t]*\\([^ \t\n]+\\)\\)?"
|
||||
"^[ \t]*\\([^# \t\n]+\\)[ \t]+\\([^ \t\n].+\\)" nil t)
|
||||
(push (cons (match-string 1)
|
||||
(split-string (match-string 2)))
|
||||
hosts)))
|
||||
(nreverse hosts)))
|
||||
|
||||
(defun pcomplete-read-hosts (file result-var timestamp-var)
|
||||
"Read the contents of /etc/hosts for host names."
|
||||
(if (or (not (symbol-value result-var))
|
||||
(not (symbol-value timestamp-var))
|
||||
(time-less-p
|
||||
(symbol-value timestamp-var)
|
||||
(file-attribute-modification-time (file-attributes file))))
|
||||
(progn
|
||||
(set result-var (apply #'nconc (pcomplete-read-hosts-file file)))
|
||||
(set timestamp-var (current-time))))
|
||||
(symbol-value result-var))
|
||||
|
||||
(defun pcomplete-read-host-names ()
|
||||
"Read the contents of /etc/hosts for host names."
|
||||
(if pcomplete-hosts-file
|
||||
(pcomplete-read-hosts pcomplete-hosts-file 'pcomplete--host-name-cache
|
||||
'pcomplete--host-name-cache-timestamp)))
|
||||
|
||||
;; create a set of aliases which allow completion functions to be not
|
||||
;; quite so verbose
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue