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