[gnu.bash.bug] More decode_prompt_string hacking.

ray@GIBBS.PHYSICS.PURDUE.EDU (Ray Moody) (06/14/89)

    If suggestions for neat-o-keen additions to decode_prompt_string
are being solicited, then here is mine.  I have added \H, which
inserts the host name like \h, but it only inserts up to the first
dot.  I.E., I can put "gibbs" in my prompt instead of
"gibbs.physics.purdue.edu", which is a bit long to put in every prompt.

    You need to apply Anders Ellefsrud's patch for \~ before you can
apply mine.  Also, I have renamed his addition from \~ to \W because,
in my humble opinion, it would be a ``Good Idea'' to adopt the tcsh
convention of using capital letters as alternates for the lower case
letters.

								Ray
-------------------------------------------------------------------------------
RCS file: RCS/shell.c,v
retrieving revision 0.99.1.1
diff -c -r0.99.1.1 shell.c
*** /tmp/,RCSt1018273	Tue Jun 13 15:06:59 1989
--- shell.c	Tue Jun 13 15:04:38 1989
***************
*** 36,41
  
  #include <stdio.h>
  #include <signal.h>
  #include <sys/errno.h>
  #include <sys/types.h>
  #ifndef SONY

--- 36,42 -----
  
  #include <stdio.h>
  #include <signal.h>
+ #include <strings.h> /* Ray Moody: June 13 1989 */
  #include <sys/errno.h>
  #include <sys/types.h>
  #ifndef SONY
***************
*** 86,91
  /* The current host's name. */
  char *current_host_name = (char *)NULL;
  
  /* Zero value means don't print prompts. */
  int prompt_printable = 1;
  

--- 87,96 -----
  /* The current host's name. */
  char *current_host_name = (char *)NULL;
  
+ /* Ray Moody: Jun 13 1989 */
+ /* The current host's name, but only up to the first `.' */
+ char *current_short_host_name = (char *)NULL;
+ 
  /* Zero value means don't print prompts. */
  int prompt_printable = 1;
  
***************
*** 643,648
    {
      struct passwd *entry = getpwuid (getuid ());
      char hostname[255];
      
  #if defined(SYSV) && !defined(HPUX)
      current_host_name = "localhost";

--- 648,654 -----
    {
      struct passwd *entry = getpwuid (getuid ());
      char hostname[255];
+     char *dot;			/* Ray Moody: June 13 1989 */
      
  #if defined(SYSV) && !defined(HPUX)
      current_host_name = "localhost";
***************
*** 652,657
      else
        current_host_name = savestring (hostname);
  #endif
      if (entry)
        current_user_name = savestring (entry->pw_name);
      else

--- 658,668 -----
      else
        current_host_name = savestring (hostname);
  #endif
+     /* Ray Moody: June 13 1989 */
+     if ((dot = index (hostname, '.')) != (char *)NULL)
+       *dot = '\000';
+     current_short_host_name = savestring (hostname);
+ 
      if (entry)
        current_user_name = savestring (entry->pw_name);
      else
===================================================================
RCS file: RCS/parse.y,v
retrieving revision 0.99.1.1
diff -c -r0.99.1.1 parse.y
*** /tmp/,RCSt1018273	Tue Jun 13 15:07:09 1989
--- parse.y	Tue Jun 13 14:47:26 1989
***************
*** 1370,1376
  	\n	CRLF
  	\s	the name of the shell
  	\w	the current working directory
! 	\~	the current working directory with ~ substituted for $HOME
  	\u	your username
  	\h	the hostname
  	\#	the command number of this command

--- 1370,1376 -----
  	\n	CRLF
  	\s	the name of the shell
  	\w	the current working directory
! 	\W	the current working directory with ~ substituted for $HOME
  	\u	your username
  	\h	the hostname
  	\H	the hostname, but only up to the first `.'
***************
*** 1373,1378
  	\~	the current working directory with ~ substituted for $HOME
  	\u	your username
  	\h	the hostname
  	\#	the command number of this command
  	\!	the history number of this command
  	\<octal> character code in octal

--- 1373,1379 -----
  	\W	the current working directory with ~ substituted for $HOME
  	\u	your username
  	\h	the hostname
+ 	\H	the hostname, but only up to the first `.'
  	\#	the command number of this command
  	\!	the history number of this command
  	\<octal> character code in octal
***************
*** 1457,1463
  	}
  	
        case 'w':
!       case '~':
  	{
  	  /* We would like to use the value of $PWD, but it turns out that
  	     this could be a bad idea because the user could set PWD to

--- 1458,1464 -----
  	}
  	
        case 'w':
!       case 'W':
  	{
  	  /* We would like to use the value of $PWD, but it turns out that
  	     this could be a bad idea because the user could set PWD to
***************
*** 1480,1486
  	  getwd (temp);
  #endif /* EFFICIENT */
  
! 	  if (c == '~') {
  		  int idx;
  		  if (t_string = get_string_value ("HOME")) {
  			  idx = strlen(t_string);

--- 1481,1487 -----
  	  getwd (temp);
  #endif /* EFFICIENT */
  
! 	  if (c == 'W') {
  		  int idx;
  		  if (t_string = get_string_value ("HOME")) {
  			  idx = strlen(t_string);
***************
*** 1504,1509
  	{
  	  extern char *current_host_name;
  	  temp = savestring (current_host_name);
  	  goto add_string;
  	}
  

--- 1505,1518 -----
  	{
  	  extern char *current_host_name;
  	  temp = savestring (current_host_name);
+ 	  goto add_string;
+ 	}
+ 
+ 	/* Added Tue Jun 13 14:36:18 EST 1989 by Ray Moody */
+       case 'H':
+ 	{
+ 	  extern char *current_short_host_name;
+ 	  temp = savestring (current_short_host_name);
  	  goto add_string;
  	}