[Pkg-libvirt-commits] [libguestfs] 175/233: fish: Additional GUESTFISH_* environment variables to control the prompt.

Hilko Bengen bengen at moszumanska.debian.org
Wed Feb 19 21:12:05 UTC 2014


This is an automated email from the git hooks/post-receive script.

bengen pushed a commit to branch experimental
in repository libguestfs.

commit d93e3c50eb3062263792b0be5022abe8504604d9
Author: Richard W.M. Jones <rjones at redhat.com>
Date:   Mon Feb 3 09:08:12 2014 +0100

    fish: Additional GUESTFISH_* environment variables to control the prompt.
    
    This adds:
    
     - GUESTFISH_INIT
     - GUESTFISH_OUTPUT
     - GUESTFISH_RESTORE
    
    which along with existing GUESTFISH_PS1 allow you to fine control the
    colour of the output.
---
 fish/fish.c        | 44 ++++++++++++++++++++++++++++++++++++++++++--
 fish/guestfish.pod | 39 ++++++++++++++++++++++++++++++++++++++-
 2 files changed, 80 insertions(+), 3 deletions(-)

diff --git a/fish/fish.c b/fish/fish.c
index a9f1966..02ec6dc 100644
--- a/fish/fish.c
+++ b/fish/fish.c
@@ -634,7 +634,10 @@ shell_script (void)
 
 #define FISH "><fs> "
 
-static char *ps1 = NULL;
+static char *ps1 = NULL;        /* GUESTFISH_PS1 */
+static char *ps_output = NULL;  /* GUESTFISH_OUTPUT */
+static char *ps_restore = NULL; /* GUESTFISH_RESTORE */
+static char *ps_init = NULL;    /* GUESTFISH_INIT */
 static char *line_read = NULL;
 
 static char *
@@ -652,6 +655,11 @@ rl_gets (int prompt)
     p = prompt && ps1 ? decode_ps1 (ps1) : NULL;
     line_read = readline (prompt ? (ps1 ? p : FISH) : "");
 
+    if (ps_output) {            /* GUESTFISH_OUTPUT */
+      CLEANUP_FREE char *po = decode_ps1 (ps_output);
+      printf ("%s", po);
+    }
+
     if (line_read && *line_read)
       add_history_line (line_read);
 
@@ -683,6 +691,11 @@ script (int prompt)
   struct parsed_command pcmd;
 
   if (prompt) {
+    if (ps_init) {              /* GUESTFISH_INIT */
+      CLEANUP_FREE char *pi = decode_ps1 (ps_init);
+      printf ("%s", pi);
+    }
+
     printf (_("\n"
               "Welcome to guestfish, the guest filesystem shell for\n"
               "editing virtual machine filesystems and disk images.\n"
@@ -718,7 +731,14 @@ script (int prompt)
       }
     }
   }
-  if (prompt) printf ("\n");
+
+  if (prompt) {
+    printf ("\n");
+    if (ps_restore) {           /* GUESTFISH_RESTORE */
+      CLEANUP_FREE char *pr = decode_ps1 (ps_restore);
+      printf ("%s", pr);
+    }
+  }
 }
 
 /* Parse a command string, splitting at whitespace, handling '!', '#' etc.
@@ -1479,6 +1499,26 @@ initialize_readline (void)
       exit (EXIT_FAILURE);
     }
   }
+
+  str = getenv ("GUESTFISH_OUTPUT");
+  if (str) {
+    free (ps_output);
+    ps_output = strdup (str);
+    if (!ps_output) {
+      perror ("strdup");
+      exit (EXIT_FAILURE);
+    }
+  }
+
+  str = getenv ("GUESTFISH_INIT");
+  if (str) {
+    free (ps_init);
+    ps_init = strdup (str);
+    if (!ps_init) {
+      perror ("strdup");
+      exit (EXIT_FAILURE);
+    }
+  }
 #endif
 }
 
diff --git a/fish/guestfish.pod b/fish/guestfish.pod
index 3c9f5b8..bdfe64b 100644
--- a/fish/guestfish.pod
+++ b/fish/guestfish.pod
@@ -1262,7 +1262,14 @@ I<--no-progress-bars>.
 
 You can change or add colours to the default prompt
 (C<E<gt>E<lt>fsE<gt>>) by setting the C<GUESTFISH_PS1> environment
-variable.  A simple prompt can be set by setting this to an alternate
+variable.  A second string (C<GUESTFISH_OUTPUT>) is printed after the
+command has been entered and before the output, allowing you to
+control the colour of the output.  A third string (C<GUESTFISH_INIT>)
+is printed before the welcome message, allowing you to control the
+colour of that message.  A fourth string (C<GUESTFISH_RESTORE>) is
+printed before guestfish exits.
+
+A simple prompt can be set by setting C<GUESTFISH_PS1> to an alternate
 string:
 
  $ GUESTFISH_PS1='(type a command) '
@@ -1284,6 +1291,8 @@ A literal backslash character.
 
 =item \]
 
+(These should only be used in C<GUESTFISH_PS1>.)
+
 Place non-printing characters (eg. terminal control codes for colours)
 between C<\[...\]>.  What this does it to tell the L<readline(3)>
 library that it should treat this subsequence as zero-width, so that
@@ -1319,10 +1328,26 @@ The ASCII character whose code is the hex value NN.
 
 Note these these require a terminal that supports ANSI escape codes.
 
+=over 4
+
+=item *
+
  GUESTFISH_PS1='\[\e[1;30m\]><fs>\[\e[0;30m\] '
 
 A bold black version of the ordinary prompt.
 
+=item *
+
+ GUESTFISH_PS1='\[\e[1;32m\]><fs>\[\e[0;31m\] '
+ GUESTFISH_OUTPUT='\e[0;30m'
+ GUESTFISH_RESTORE="$GUESTFISH_OUTPUT"
+ GUESTFISH_INIT='\e[1;34m'
+
+Blue welcome text, green prompt, red commands, black command
+output.
+
+=back
+
 =head1 WINDOWS 8
 
 Windows 8 "fast startup" can prevent guestfish from mounting NTFS
@@ -1381,6 +1406,14 @@ L</SUPERMIN_KERNEL> and L</SUPERMIN_MODULES>.
 The C<display> command uses C<$GUESTFISH_DISPLAY_IMAGE> to
 display images.  If not set, it uses L<display(1)>.
 
+=item GUESTFISH_INIT
+
+Printed when guestfish starts.  See L</PROMPT>.
+
+=item GUESTFISH_OUTPUT
+
+Printed before guestfish output.  See L</PROMPT>.
+
 =item GUESTFISH_PID
 
 Used with the I<--remote> option to specify the remote guestfish
@@ -1391,6 +1424,10 @@ L</REMOTE CONTROL GUESTFISH OVER A SOCKET>.
 
 Set the command prompt.  See L</PROMPT>.
 
+=item GUESTFISH_RESTORE
+
+Printed before guestfish exits.  See L</PROMPT>.
+
 =item HEXEDITOR
 
 The L</hexedit> command uses C<$HEXEDITOR> as the external hex

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-libvirt/libguestfs.git



More information about the Pkg-libvirt-commits mailing list