From: Samer Masterson <samer@samertm.com>
To: Eli Zaretskii <eliz@gnu.org>
Cc: emacs-devel@gnu.org
Subject: Re: [PATCH] Proposal: new syntax for eshell-buffer-shorthand (related: bug#19391)
Date: Sat, 16 May 2015 01:05:36 -0700 [thread overview]
Message-ID: <87pp619cbz.fsf@f-box.i-did-not-set--mail-host-address--so-tickle-me> (raw)
In-Reply-To: <83a8x5gf3c.fsf@gnu.org>
Eli Zaretskii <eliz@gnu.org> writes:
> Could you please send the patch in the form equivalent to "diff -w" (I
> hope Git allows that)? It's hard to read a large patch where most of
> the lines "changed" just due to whitespace.
My bad, I've attached the diff with whitespace ignored. What's the
process for getting write access to the Emacs repository? If it's
easier, I can install the change after you review it.
Thanks for the review.
-s
Diff below:
diff --git a/etc/NEWS b/etc/NEWS
index 48c3a2a5..9c9f13f 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -659,6 +659,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 a5f697f..49ba727 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)
+ "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-"))
+ (looking-at "#<\\(\\(buffer\\|process\\)\\s-\\)?"))
(let ((here (point)))
- (goto-char (match-end 0))
- (let* ((buffer-p (string= (match-string 1) "buffer"))
+ (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 ?\< ?\>)))
- (if (not end)
- (throw 'eshell-incomplete ?\<)
+ (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))))))))
+ (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 7dfc39f..dc731bc 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
+
+ ((bufferp target)
+ (with-current-buffer target
(cond ((eq mode 'overwrite)
(erase-buffer))
((eq mode 'append)
(goto-char (point-max))))
- (point-marker))))
+ (point-marker)))
((functionp target) nil)
next prev parent reply other threads:[~2015-05-16 8:05 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-05 8:20 Proposal: new syntax for eshell-buffer-shorthand (related: bug#19391) Samer Masterson
2015-05-16 2:59 ` [PATCH] " Samer Masterson
2015-05-16 7:24 ` Eli Zaretskii
2015-05-16 8:05 ` Samer Masterson [this message]
2015-05-16 9:00 ` Eli Zaretskii
2015-05-16 9:56 ` Samer Masterson
2015-05-16 13:46 ` Stefan Monnier
2015-05-17 21:34 ` Samer Masterson
2015-05-16 13:45 ` Stefan Monnier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87pp619cbz.fsf@f-box.i-did-not-set--mail-host-address--so-tickle-me \
--to=samer@samertm.com \
--cc=eliz@gnu.org \
--cc=emacs-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.