gnupg/g10 (ChangeLog keyedit.c)

cvs user dshaw cvs at cvs.gnupg.org
Fri Mar 18 22:53:32 CET 2005


    Date: Friday, March 18, 2005 @ 23:07:12
  Author: dshaw
    Path: /cvs/gnupg/gnupg/g10

Modified: ChangeLog keyedit.c

* keyedit.c (command_generator, keyedit_completion) [HAVE_LIBREADLINE]:
New functions to enable command completion in the --edit-key menu.
(keyedit_menu): Call them here.


-----------+
 ChangeLog |    7 +++++++
 keyedit.c |   55 ++++++++++++++++++++++++++++++++++++++++++++++++++++---
 2 files changed, 59 insertions(+), 3 deletions(-)


Index: gnupg/g10/ChangeLog
diff -u gnupg/g10/ChangeLog:1.709 gnupg/g10/ChangeLog:1.710
--- gnupg/g10/ChangeLog:1.709	Fri Mar 18 00:52:37 2005
+++ gnupg/g10/ChangeLog	Fri Mar 18 23:07:12 2005
@@ -1,3 +1,10 @@
+2005-03-18  David Shaw  <dshaw at jabberwocky.com>
+
+	* keyedit.c (command_generator, keyedit_completion)
+	[HAVE_LIBREADLINE]: New functions to enable command completion in
+	the --edit-key menu.
+	(keyedit_menu): Call them here.
+
 2005-03-17  David Shaw  <dshaw at jabberwocky.com>
 
 	* getkey.c (get_seckey_byname2): If no explicit default key is
Index: gnupg/g10/keyedit.c
diff -u gnupg/g10/keyedit.c:1.173 gnupg/g10/keyedit.c:1.174
--- gnupg/g10/keyedit.c:1.173	Thu Mar 10 19:40:57 2005
+++ gnupg/g10/keyedit.c	Fri Mar 18 23:07:12 2005
@@ -26,7 +26,10 @@
 #include <errno.h>
 #include <assert.h>
 #include <ctype.h>
-
+#ifdef HAVE_LIBREADLINE
+#include <stdio.h>
+#include <readline/readline.h>
+#endif
 #include "options.h"
 #include "packet.h"
 #include "errors.h"
@@ -1405,6 +1408,49 @@
     { NULL, cmdNONE, 0, NULL }
   };
 
+#ifdef HAVE_LIBREADLINE
+
+/* These two functions are used by readline for command completion. */
+
+static char *command_generator(const char *text,int state)
+{
+  static int list_index,len;
+  const char *name;
+
+  /* If this is a new word to complete, initialize now.  This includes
+     saving the length of TEXT for efficiency, and initializing the
+     index variable to 0. */
+  if(!state)
+    {
+      list_index=0;
+      len=strlen(text);
+    }
+
+  /* Return the next partial match */
+  while((name=cmds[list_index].name))
+    {
+      /* Only complete commands that have help text */
+      if(cmds[list_index++].desc && strncmp(name,text,len)==0)
+	return strdup(name);
+    }
+
+  return NULL;
+}
+
+static char **keyedit_completion(const char *text, int start, int end)
+{
+  /* If we are at the start of a line, we try and command-complete.
+     If not, just do nothing for now. */
+
+  if(start==0)
+    return rl_completion_matches(text,command_generator);
+
+  rl_attempted_completion_over=1;
+
+  return NULL;
+}
+#endif
+
 void
 keyedit_menu( const char *username, STRLIST locusr,
 	      STRLIST commands, int quiet, int seckey_check )
@@ -1522,10 +1568,13 @@
 		else
 		    have_commands = 0;
 	    }
-	    if( !have_commands ) {
+	    if( !have_commands )
+	      {
+		tty_enable_completion(keyedit_completion);
 		answer = cpr_get_no_help("keyedit.prompt", _("Command> "));
 		cpr_kill_prompt();
-	    }
+		tty_disable_completion();
+	      }
 	    trim_spaces(answer);
 	} while( *answer == '#' );
 




More information about the Gnupg-commits mailing list