Enable readline support in --card-edit.

better cope with re-inserted cards.
This commit is contained in:
Werner Koch 2009-08-05 13:48:23 +00:00
parent e57d2a8630
commit f27bdef888
3 changed files with 26 additions and 12 deletions

View File

@ -1,5 +1,9 @@
2009-08-05 Werner Koch <wk@g10code.com>
* card-util.c: Enable readline support also in GnuPG-2.
* call-agent.c (agent_learn): Always select the card first.
* gpg.c: Add --key-edit alias.
* call-agent.c (scd_genkey_cb): Forward progress status lines.

View File

@ -458,6 +458,19 @@ agent_learn (struct agent_card_info_s *info)
if (rc)
return rc;
/* Send the serialno command to initialize the connection. We don't
care about the data returned. If the card has already been
initialized, this is a very fast command. The main reason we
need to do this here is to handle a card removed case so that an
"l" command in --card-edit can be used to show ta newly inserted
card. We request the openpgp card because that is what we
expect. */
rc = assuan_transact (agent_ctx, "SCD SERIALNO openpgp",
NULL, NULL, NULL, NULL, NULL, NULL);
if (rc)
return rc;
memset (info, 0, sizeof *info);
rc = assuan_transact (agent_ctx, "SCD LEARN --force",
dummy_data_cb, NULL, default_inq_cb, NULL,

View File

@ -23,6 +23,10 @@
#include <string.h>
#include <errno.h>
#include <assert.h>
#ifdef HAVE_LIBREADLINE
# define GNUPG_LIBREADLINE_H_INCLUDED
# include <readline/readline.h>
#endif /*HAVE_LIBREADLINE*/
#if GNUPG_MAJOR_VERSION != 1
# include "gpg.h"
@ -34,12 +38,8 @@
#include "options.h"
#include "main.h"
#include "keyserver-internal.h"
#if GNUPG_MAJOR_VERSION == 1
# ifdef HAVE_LIBREADLINE
# define GNUPG_LIBREADLINE_H_INCLUDED
# include <stdio.h>
# include <readline/readline.h>
# endif /*HAVE_LIBREADLINE*/
# include "cardglue.h"
#else /*GNUPG_MAJOR_VERSION!=1*/
# include "call-agent.h"
@ -1704,7 +1704,7 @@ static struct
};
#if GNUPG_MAJOR_VERSION == 1 && defined (HAVE_LIBREADLINE)
#ifdef HAVE_LIBREADLINE
/* These two functions are used by readline for command completion. */
@ -1737,6 +1737,7 @@ command_generator(const char *text,int state)
static char **
card_edit_completion(const char *text, int start, int end)
{
(void)end;
/* If we are at the start of a line, we try and command-complete.
If not, just do nothing for now. */
@ -1747,7 +1748,7 @@ card_edit_completion(const char *text, int start, int end)
return NULL;
}
#endif /* GNUPG_MAJOR_VERSION == 1 && HAVE_LIBREADLINE */
#endif /*HAVE_LIBREADLINE*/
/* Menu to edit all user changeable values on an OpenPGP card. Only
Key creation is not handled here. */
@ -1815,15 +1816,11 @@ card_edit (strlist_t commands)
if (!have_commands)
{
#if GNUPG_MAJOR_VERSION == 1
tty_enable_completion (card_edit_completion);
#endif
answer = cpr_get_no_help("cardedit.prompt", _("Command> "));
cpr_kill_prompt();
#if GNUPG_MAJOR_VERSION == 1
tty_disable_completion ();
#endif
}
}
trim_spaces(answer);
}
while ( *answer == '#' );