diff options
author | Samer Masterson <samer@samertm.com> | 2015-05-15 19:42:00 -0700 |
---|---|---|
committer | Samer Masterson <samer@samertm.com> | 2015-05-17 14:28:51 -0700 |
commit | e37da5a4a8055826f0fc1051083495a828509672 (patch) | |
tree | 0b03dfaf99da7a0e37e079bfa7cd217a4dcde845 | |
parent | b510a83ef677c3876cfd71d6bebf0e2ecaf2f976 (diff) | |
download | emacs-e37da5a4a8055826f0fc1051083495a828509672.tar.gz |
eshell: Introduce new buffer syntax
The new buffer syntax '#<buffer-name>' is equivalent to '#<buffer
buffer-name>'. Remove `eshell-buffer-shorthand', as it is no longer
needed (Bug#19319).
* lisp/eshell/esh-io.el (eshell-buffer-shorthand): Remove.
(eshell-get-target): Remove shorthand-specific code.
* lisp/eshell/esh-arg.el (eshell-parse-special-reference): Parse
'#<buffer-name>'.
-rw-r--r-- | etc/NEWS | 6 | ||||
-rw-r--r-- | lisp/eshell/esh-arg.el | 41 | ||||
-rw-r--r-- | lisp/eshell/esh-io.el | 48 |
3 files changed, 51 insertions, 44 deletions
@@ -675,6 +675,12 @@ command line's password prompt. *** The new built-in command `clear' can scroll window contents out of sight. If provided with an optional non-nil argument, the scrollback contents will be cleared. +*** New buffer syntax '#<buffer-name>', which is equivalent to +'#<buffer buffer-name>'. This shorthand makes interacting with +buffers from eshell more convenient. Custom variable +`eshell-buffer-shorthand', which has been broken for a while, has been +removed. + ** Browse-url *** Support for the Conkeror web browser. diff --git a/lisp/eshell/esh-arg.el b/lisp/eshell/esh-arg.el index a5f697f037a..49ba72735da 100644 --- a/lisp/eshell/esh-arg.el +++ b/lisp/eshell/esh-arg.el @@ -357,22 +357,31 @@ after are both returned." (goto-char (1+ end))))))) (defun eshell-parse-special-reference () - "Parse a special syntax reference, of the form '#<type arg>'." - (if (and (not eshell-current-argument) - (not eshell-current-quoted) - (looking-at "#<\\(buffer\\|process\\)\\s-")) - (let ((here (point))) - (goto-char (match-end 0)) - (let* ((buffer-p (string= (match-string 1) "buffer")) - (end (eshell-find-delimiter ?\< ?\>))) - (if (not end) - (throw 'eshell-incomplete ?\<) - (if (eshell-arg-delimiter (1+ end)) - (prog1 - (list (if buffer-p 'get-buffer-create 'get-process) - (buffer-substring-no-properties (point) end)) - (goto-char (1+ end))) - (ignore (goto-char here)))))))) + "Parse a special syntax reference, of the form '#<args>'. + +args := `type' `whitespace' `arbitrary-args' | `arbitrary-args' +type := \"buffer\" or \"process\" +arbitrary-args := any string of characters. + +If the form has no 'type', the syntax is parsed as if 'type' were +\"buffer\"." + (when (and (not eshell-current-argument) + (not eshell-current-quoted) + (looking-at "#<\\(\\(buffer\\|process\\)\\s-\\)?")) + (let ((here (point))) + (goto-char (match-end 0)) ;; Go to the end of the match. + (let ((buffer-p (if (match-string 1) + (string= (match-string 2) "buffer") + t)) ;; buffer-p is non-nil by default. + (end (eshell-find-delimiter ?\< ?\>))) + (when (not end) + (throw 'eshell-incomplete ?\<)) + (if (eshell-arg-delimiter (1+ end)) + (prog1 + (list (if buffer-p 'get-buffer-create 'get-process) + (buffer-substring-no-properties (point) end)) + (goto-char (1+ end))) + (ignore (goto-char here))))))) (defun eshell-parse-delimiter () "Parse an argument delimiter, which is essentially a command operator." diff --git a/lisp/eshell/esh-io.el b/lisp/eshell/esh-io.el index 7dfc39f3202..dc731bc928a 100644 --- a/lisp/eshell/esh-io.el +++ b/lisp/eshell/esh-io.el @@ -31,6 +31,18 @@ ;; consistent with most shells. Therefore, only unique features are ;; mentioned here. ;; +;;;_* Redirect to a Buffer or Process +;; +;; Buffers and processes can be named with '#<buffer buffer-name>' and +;; '#<process process-name>', respectively. As a shorthand, +;; '#<buffer-name>' without the explicit "buffer" arg is equivalent to +;; '#<buffer buffer-name>'. +;; +;; echo hello > #<buffer *scratch*> # Overwrite '*scratch*' with 'hello'. +;; echo hello > #<*scratch*> # Same as the command above. +;; +;; echo hello > #<process shell> # Pipe "hello" into the shell process. +;; ;;;_* Insertion ;; ;; To insert at the location of point in a buffer, use '>>>': @@ -98,19 +110,6 @@ other buffers) ." :type 'integer :group 'eshell-io) -(defcustom eshell-buffer-shorthand nil - "If non-nil, a symbol name can be used for a buffer in redirection. -If nil, redirecting to a buffer requires buffer name syntax. If this -variable is set, redirection directly to Lisp symbols will be -impossible. - -Example: - - echo hello > '*scratch* ; works if `eshell-buffer-shorthand' is t - echo hello > #<buffer *scratch*> ; always works" - :type 'boolean - :group 'eshell-io) - (defcustom eshell-print-queue-size 5 "The size of the print queue, for doing buffered printing. This is basically a speed enhancement, to avoid blocking the Lisp code @@ -355,21 +354,14 @@ it defaults to `insert'." (goto-char (point-max)))) (point-marker)))))) - ((or (bufferp target) - (and (boundp 'eshell-buffer-shorthand) - (symbol-value 'eshell-buffer-shorthand) - (symbolp target) - (not (memq target '(t nil))))) - (let ((buf (if (bufferp target) - target - (get-buffer-create - (symbol-name target))))) - (with-current-buffer buf - (cond ((eq mode 'overwrite) - (erase-buffer)) - ((eq mode 'append) - (goto-char (point-max)))) - (point-marker)))) + + ((bufferp target) + (with-current-buffer target + (cond ((eq mode 'overwrite) + (erase-buffer)) + ((eq mode 'append) + (goto-char (point-max)))) + (point-marker))) ((functionp target) nil) |