emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r112822: * eshell/esh-ext.el (eshell-


From: Tassilo Horn
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r112822: * eshell/esh-ext.el (eshell-external-command): Pass args to
Date: Sun, 02 Jun 2013 11:19:09 +0200
User-agent: Bazaar (2.6b2)

------------------------------------------------------------
revno: 112822
committer: Tassilo Horn <address@hidden>
branch nick: trunk
timestamp: Sun 2013-06-02 11:19:09 +0200
message:
  * eshell/esh-ext.el (eshell-external-command): Pass args to
  `eshell-find-interpreter'.
  (eshell-find-interpreter): Add new second parameter ARGS.
  
  * eshell/em-script.el (eshell-script-initialize): Add second arg
  to the function added as MATCH to `eshell-interpreter-alist'
  
  * eshell/em-dirs.el (eshell-dirs-initialize): Add second arg to
  the function added as MATCH to `eshell-interpreter-alist'
  
  * eshell/em-term.el (eshell-visual-subcommands): New defcustom.
  (eshell-visual-options): New defcustom.
  (eshell-escape-control-x): Adapt docstring.
  (eshell-term-initialize): Test `eshell-visual-subcommands' and
  `eshell-visual-options' in addition to `eshell-visual-commands'.
  (eshell-exec-visual): Pass args to `eshell-find-interpreter'.
modified:
  lisp/ChangeLog
  lisp/eshell/em-dirs.el
  lisp/eshell/em-script.el
  lisp/eshell/em-term.el
  lisp/eshell/esh-ext.el
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2013-06-02 03:59:46 +0000
+++ b/lisp/ChangeLog    2013-06-02 09:19:09 +0000
@@ -1,3 +1,22 @@
+2013-06-02  Tassilo Horn  <address@hidden>
+
+       * eshell/esh-ext.el (eshell-external-command): Pass args to
+       `eshell-find-interpreter'.
+       (eshell-find-interpreter): Add new second parameter ARGS.
+
+       * eshell/em-script.el (eshell-script-initialize): Add second arg
+       to the function added as MATCH to `eshell-interpreter-alist'
+
+       * eshell/em-dirs.el (eshell-dirs-initialize): Add second arg to
+       the function added as MATCH to `eshell-interpreter-alist'
+
+       * eshell/em-term.el (eshell-visual-subcommands): New defcustom.
+       (eshell-visual-options): New defcustom.
+       (eshell-escape-control-x): Adapt docstring.
+       (eshell-term-initialize): Test `eshell-visual-subcommands' and
+       `eshell-visual-options' in addition to `eshell-visual-commands'.
+       (eshell-exec-visual): Pass args to `eshell-find-interpreter'.
+
 2013-06-01  Fabián Ezequiel Gallina  <address@hidden>
 
        * progmodes/python.el (python-indent-block-enders): Add break,

=== modified file 'lisp/eshell/em-dirs.el'
--- a/lisp/eshell/em-dirs.el    2013-01-01 09:11:05 +0000
+++ b/lisp/eshell/em-dirs.el    2013-06-02 09:19:09 +0000
@@ -207,7 +207,8 @@
   (when eshell-cd-on-directory
     (make-local-variable 'eshell-interpreter-alist)
     (setq eshell-interpreter-alist
-         (cons (cons 'eshell-lone-directory-p
+         (cons (cons (lambda (file args)
+                       (eshell-lone-directory-p file))
                      'eshell-dirs-substitute-cd)
                eshell-interpreter-alist)))
 

=== modified file 'lisp/eshell/em-script.el'
--- a/lisp/eshell/em-script.el  2013-01-01 09:11:05 +0000
+++ b/lisp/eshell/em-script.el  2013-06-02 09:19:09 +0000
@@ -61,7 +61,7 @@
   "Initialize the script parsing code."
   (make-local-variable 'eshell-interpreter-alist)
   (setq eshell-interpreter-alist
-       (cons '((lambda (file)
+       (cons '((lambda (file args)
                  (string= (file-name-nondirectory file)
                           "eshell")) . eshell/source)
              eshell-interpreter-alist))

=== modified file 'lisp/eshell/em-term.el'
--- a/lisp/eshell/em-term.el    2013-05-23 04:57:27 +0000
+++ b/lisp/eshell/em-term.el    2013-06-02 09:19:09 +0000
@@ -65,6 +65,39 @@
   :type '(repeat string)
   :group 'eshell-term)
 
+(defcustom eshell-visual-subcommands
+  nil
+  "An alist of the form
+
+  ((COMMAND1 SUBCOMMAND1 SUBCOMMAND2...)
+   (COMMAND2 SUBCOMMAND1 ...))
+
+of commands with subcommands that present their output in a
+visual fashion.  A likely entry is
+
+  (\"git\" \"log\" \"diff\" \"show\")
+
+because git shows logs and diffs using a pager by default."
+  :type '(repeat (cons (string :tag "Command")
+                      (repeat (string :tag "Subcommand")))))
+
+(defcustom eshell-visual-options
+  nil
+  "An alist of the form
+
+  ((COMMAND1 OPTION1 OPTION2...)
+   (COMMAND2 OPTION1 ...))
+
+of commands with options that present their output in a visual
+fashion.  For example, a sensible entry would be
+
+  (\"git\" \"--help\")
+
+because \"git <command> --help\" shows the command's
+documentation with a pager."
+  :type '(repeat (cons (string :tag "Command")
+                      (repeat (string :tag "Option")))))
+
 ;; If you change this from term-term-name, you need to ensure that the
 ;; value you choose exists in the system's terminfo database.  (Bug#12485)
 (defcustom eshell-term-name term-term-name
@@ -77,8 +110,10 @@
 
 (defcustom eshell-escape-control-x t
   "If non-nil, allow <C-x> to be handled by Emacs key in visual buffers.
-See the variable `eshell-visual-commands'.  If this variable is set to
-nil, <C-x> will send that control character to the invoked process."
+See the variables `eshell-visual-commands',
+`eshell-visual-subcommands', and `eshell-visual-options'.  If
+this variable is set to nil, <C-x> will send that control
+character to the invoked process."
   :type 'boolean
   :group 'eshell-term)
 
@@ -93,9 +128,14 @@
   (make-local-variable 'eshell-interpreter-alist)
   (setq eshell-interpreter-alist
        (cons (cons (function
-                    (lambda (command)
-                      (member (file-name-nondirectory command)
-                              eshell-visual-commands)))
+                    (lambda (command args)
+                      (let ((command (file-name-nondirectory command)))
+                        (or (member command eshell-visual-commands)
+                            (member (car args)
+                                    (cdr (assoc command 
eshell-visual-subcommands)))
+                            (intersection args
+                                          (cdr (assoc command 
eshell-visual-options))
+                                          :test 'string=)))))
                    'eshell-exec-visual)
              eshell-interpreter-alist)))
 
@@ -104,7 +144,7 @@
 ARGS are passed to the program.  At the moment, no piping of input is
 allowed."
   (let* (eshell-interpreter-alist
-        (interp (eshell-find-interpreter (car args)))
+        (interp (eshell-find-interpreter (car args) (cdr args)))
         (program (car interp))
         (args (eshell-flatten-list
                (eshell-stringify-list (append (cdr interp)

=== modified file 'lisp/eshell/esh-ext.el'
--- a/lisp/eshell/esh-ext.el    2013-05-23 04:57:27 +0000
+++ b/lisp/eshell/esh-ext.el    2013-06-02 09:19:09 +0000
@@ -125,9 +125,10 @@
 
   (MATCH . INTERPRETER)
 
-MATCH should be a regexp, which is matched against the command name,
-or a function.  If either returns a non-nil value, then INTERPRETER
-will be used for that command.
+MATCH should be a regexp, which is matched against the command
+name, or a function of arity 2 receiving the COMMAND and its
+ARGS (a list).  If either returns a non-nil value, then
+INTERPRETER will be used for that command.
 
 If INTERPRETER is a string, it will be called as the command name,
 with the original command name passed as the first argument, with all
@@ -215,6 +216,7 @@
   (setq args (eshell-stringify-list (eshell-flatten-list args)))
   (let ((interp (eshell-find-interpreter
                 command
+                args
                 ;; `eshell-find-interpreter' does not work correctly
                 ;; for Tramp file name syntax.  But we don't need to
                 ;; know the interpreter in that case, therefore the
@@ -267,7 +269,7 @@
                (list (match-string 1)
                      file)))))))
 
-(defun eshell-find-interpreter (file &optional no-examine-p)
+(defun eshell-find-interpreter (file args &optional no-examine-p)
   "Find the command interpreter with which to execute FILE.
 If NO-EXAMINE-P is non-nil, FILE will not be inspected for a script
 line of the form #!<interp>."
@@ -277,8 +279,9 @@
            (dolist (possible eshell-interpreter-alist)
              (cond
               ((functionp (car possible))
-               (and (funcall (car possible) file)
-                    (throw 'found (cdr possible))))
+               (let ((fn (car possible)))
+                 (and (funcall fn file args)
+                      (throw 'found (cdr possible)))))
               ((stringp (car possible))
                (and (string-match (car possible) file)
                     (throw 'found (cdr possible))))
@@ -312,7 +315,7 @@
            (setq interp (eshell-script-interpreter fullname))
            (if interp
                (setq interp
-                     (cons (car (eshell-find-interpreter (car interp) t))
+                     (cons (car (eshell-find-interpreter (car interp) args t))
                            (cdr interp)))))
          (or interp (list fullname)))))))
 


reply via email to

[Prev in Thread] Current Thread [Next in Thread]