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

PATCH: WORDCHARS and emulate



This patch sets wordchars on startup according to emulation mode and
resets it upon an 'emulate' command.  Yes, it gets totally clobbered by
emulate.

The alternate WORDCHARS just lacks '/'.  It's named for ksh as that is
the only shell of bash, tcsh and pdksh (the ones I have installed) that
handles this similarly.

tcsh handles ^W as ^U (undocumented).

bash has two separate readline functions.  In bash 2.01.1(1)-release,
the manual page reads:
      backward-kill-rubout (M-rubout)
             Kill  the  word behind the cursor.  Word boundaries
	     are the same as those used by backward-word.
      unix-word-rubout (C-w)
             Kill the word behind the cursor, using white  space
	     as  a  word boundary.  The word boundaries are dif-
	     ferent from backward-kill-word.

This patch doesn't modify ZLE to handle these, so I won't be too hurt if
it's rejected.  ;^)

*** dDoc/Zsh/builtins.yo	Tue Nov 10 09:10:01 1998
--- Doc/Zsh/builtins.yo	Sat Dec  5 02:40:40 1998
***************
*** 218,223 ****
--- 218,225 ----
  item(tt(emulate) [ tt(-R) ] {tt(zsh)|tt(sh)|tt(ksh)|tt(csh)})(
  Set up zsh options to emulate the specified shell as much as possible.
  bf(csh) will never be fully emulated.
+ tt(WORDCHARS) is also modified accordingly, but may not provide an exact
+ match for all bindings.  This clobbers any changes the user may have made.
  If the argument is not one of the shells listed above, tt(zsh)
  will be used as a default.  If the tt(-R) option is given, all options
  are reset to their default value corresponding to the specified emulation
*** dDoc/Zsh/compat.yo	Sun Oct 11 22:36:18 1998
--- Doc/Zsh/compat.yo	Sat Dec  5 02:02:57 1998
***************
*** 67,69 ****
--- 67,72 ----
  and
  tt(SINGLE_LINE_ZLE)
  options are set if zsh is invoked as tt(ksh).
+ Further, the
+ tt(WORDCHARS)
+ shell variable takes a different value when emulating other shells.
*** dSrc/init.c	Sun Oct 11 23:01:03 1998
--- Src/init.c	Sat Dec  5 01:05:12 1998
***************
*** 531,537 ****
      sprompt = ztrdup("zsh: correct '%R' to '%r' [nyae]? ");
  
      ifs         = ztrdup(DEFAULT_IFS);
-     wordchars   = ztrdup(DEFAULT_WORDCHARS);
      postedit    = ztrdup("");
      underscore  = ztrdup("");
  
--- 531,536 ----
***************
*** 544,557 ****
  
      /* The following variable assignments cause zsh to behave more *
       * like Bourne and Korn shells when invoked as "sh" or "ksh".  *
!      * NULLCMD=":" and READNULLCMD=":"                             */
  
      if (emulation == EMULATE_KSH || emulation == EMULATE_SH) {
  	nullcmd     = ztrdup(":");
  	readnullcmd = ztrdup(":");
      } else {
  	nullcmd     = ztrdup("cat");
  	readnullcmd = ztrdup("more");
      }
  
      /* We cache the uid so we know when to *
--- 543,558 ----
  
      /* The following variable assignments cause zsh to behave more *
       * like Bourne and Korn shells when invoked as "sh" or "ksh".  *
!      * NULLCMD=":" and READNULLCMD=":", whilst WORDCHARS lacks '/' */
  
      if (emulation == EMULATE_KSH || emulation == EMULATE_SH) {
  	nullcmd     = ztrdup(":");
  	readnullcmd = ztrdup(":");
+ 	wordchars   = ztrdup(DEFAULT_WORDCHARS_KSH);
      } else {
  	nullcmd     = ztrdup("cat");
  	readnullcmd = ztrdup("more");
+ 	wordchars   = ztrdup(DEFAULT_WORDCHARS);
      }
  
      /* We cache the uid so we know when to *
*** dSrc/options.c	Wed Apr 29 22:42:50 1998
--- Src/options.c	Sat Dec  5 02:38:01 1998
***************
*** 433,438 ****
--- 433,439 ----
  emulate(const char *zsh_name, int fully)
  {
      char ch = *zsh_name;
+     Param wp;
  
      if (ch == 'r')
  	ch = zsh_name[1];
***************
*** 448,453 ****
--- 449,471 ----
  	emulation = EMULATE_ZSH;
  
      scanhashtable(optiontab, 0, 0, 0, setemulate, fully);
+ 
+     /* ksh does not include '/' in WORDCHARS; bash and tcsh use a   *
+      * different behaviour.  Neither includes '/' for ESC-^H; bash  *
+      * uses whitespace as a boundary for ^W whilst tcsh treats ^W   *
+      * as synonymous with ^U (undocumented)                         */
+ 
+     /* emulate() called from main() before paramtab initialised.    *
+      * setupvals() will set wordchars directly, so that's okay.     *
+      * Since wp is ignored, we could be lazy and just not bother.   */
+     if (paramtab) {
+ 	wp = (Param) paramtab->getnode(paramtab, "WORDCHARS");
+ 
+ 	if (emulation == EMULATE_ZSH)
+ 	    wordcharssetfn(wp, ztrdup(DEFAULT_WORDCHARS));
+ 	else
+ 	    wordcharssetfn(wp, ztrdup(DEFAULT_WORDCHARS_KSH));
+     }
  }
  
  /* setopt, unsetopt */
*** dSrc/params.c	Tue Nov 17 12:48:08 1998
--- Src/params.c	Sat Dec  5 02:31:46 1998
***************
*** 251,257 ****
  /* hash table containing the parameters */
   
  /**/
! HashTable paramtab;
  
  /**/
  HashTable
--- 251,257 ----
  /* hash table containing the parameters */
   
  /**/
! HashTable paramtab = NULL;
  
  /**/
  HashTable
*** dSrc/system.h	Fri Oct 30 14:56:15 1998
--- Src/system.h	Sat Dec  5 01:05:25 1998
***************
*** 317,322 ****
--- 317,323 ----
  #endif
  
  #define DEFAULT_WORDCHARS "*?_-.[]~=/&;!#$%^(){}<>"
+ #define DEFAULT_WORDCHARS_KSH "*?_-.[]~=&;!#$%^(){}<>"
  #define DEFAULT_TIMEFMT   "%J  %U user %S system %P cpu %*E total"
  
  /* Posix getpgrp takes no argument, while the BSD version *
-- 
--> Phil Pennock ; GAT d- s+:+ a22 C++(++++) UL++++/I+++/S+++/H+ P++@ L+++
E-@ W(+) N>++ o !K w--- O>+ M V !PS PE Y+ PGP+ t-- 5++ X+ R !tv b++>+++ DI+ D+
G+ e+ h* r y?



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