Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: accessing full command line



Alex Ramos wrote:
> > >I would like to know if there is any way (e.g. an undocumented
> > >feature or a source code patch) in zsh to access the full
> > >command line passed to a function or alias. For example, if
> > >'foo' is a function, and I type
> > >
> > >	foo "blah blah $$" $XYZ
> > >
> > >I'd like to (inside 'foo') have access to the string '"blah blah $$" $XYZ'
> > >as it was typed.
> > 
> > No, there's no way.  But if all you want to do is inhibit globbing, you
> > could do
> > 
> > alias foo="noglob foo"
> 
> I would like to inhibit globbing as well as quote removal.
> (never mind that the example implies I'd like to inhibit variable
> interpolation too. It was a poorly chosen example).
> 
> Some may ask, "and why the hell would you want to do THAT?".
> The reason is, I'm trying to use zsh for some "unusual"
> purposes.  For example, I open a co-process to an interactive
> application and use a zsh subshell with a small set of aliases
> and functions to act as a gateway between the user and the
> application, thus providing history, completion, editing, etc
> and allowing a brain-dead application to be useable. (I could
> also use 'vared', but I was told that vared's history feature
> is actually a bug, so I conclude it'll be removed in the future).

In my release I disabled up-history from vared.  This is the desired behaviour
if you use vared to edit a file or a function definition, but I understand
that is may be useful in cases you mention.  It would be very easy to
implement an option controlling this behaviour, and it is much simpler and
cleaner than disabling quote removal.  Presently all I do is setting the
in_vared global variable in builtin.c in function bin_vared() before calling
zleread() and reset it to zero after the call.  If a new option is
introdudced, the only necessary change is to replace the in_vared = 1; line to
in_vared = unset(VARED_HISTORY);.

Below is a trivial patch to hzoli10.3 which implements this option (not tested
too much).

Zoltan

*** 1.28	1995/09/06 16:09:05
--- Src/builtin.c	1995/09/06 16:14:55
***************
*** 3244,3250 ****
      permalloc();
      pushnode(bufstack, ztrdup(s));
      heapalloc();
!     in_vared = 1;
      t = (char *)zleread(p1, p2);
      in_vared = 0;
      if (!t || errflag)
--- 3244,3250 ----
      permalloc();
      pushnode(bufstack, ztrdup(s));
      heapalloc();
!     in_vared = unset(VAREDHISTORY);
      t = (char *)zleread(p1, p2);
      in_vared = 0;
      if (!t || errflag)
*** 1.9	1995/07/24 17:12:46
--- Src/zsh.h	1995/07/07 14:29:00
***************
*** 205,210 ****
--- 205,211 ----
  #define INP_ALIAS	2	/* alias or history mark at end of word */
  #define INP_CONT	4	/* continue onto previously stacked input */
  #define INP_SPACE	8	/* return space after expanded alias */
+ #define INP_OLDSPACE	16	/* internal flag:  INP_SPACE was swallowed */
  
  /* linked list abstract data type */
  
***************
*** 922,927 ****
--- 923,929 ----
  #define CSHJUNKIEHISTORY    '\037'
  #define MAGICEQUALSUBST     '\040'
  #define GLOBSUBST           '\041'
+ #define VAREDHISTORY        '\042'
  #define PROMPTSUBST         '\043'
  #define ALWAYSLASTPROMPT    '\044'
  #define COMPLETEALIASES     '\045'
*** 1.10	1995/07/24 17:12:46
--- Src/globals.h	1995/07/07 14:29:00
***************
*** 703,708 ****
--- 703,709 ----
      {"shwordsplit", SHWORDSPLIT},
      {"singlelinezle", SINGLELINEZLE},
      {"sunkeyboardhack", SUNKEYBOARDHACK},
+     {"varedhistory", VAREDHISTORY},
      {"verbose", VERBOSE},
      {"xtrace", XTRACE},
      {"zle", USEZLE},



Messages sorted by: Reverse Date, Date, Thread, Author