diff --git a/g10/ChangeLog b/g10/ChangeLog index 781ec57ab..4137f1d58 100644 --- a/g10/ChangeLog +++ b/g10/ChangeLog @@ -1,5 +1,9 @@ 2009-08-05 Werner Koch + * 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. diff --git a/g10/call-agent.c b/g10/call-agent.c index 8a0b21a7a..64b5cd857 100644 --- a/g10/call-agent.c +++ b/g10/call-agent.c @@ -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, diff --git a/g10/card-util.c b/g10/card-util.c index 5ba42b871..61fd3112e 100644 --- a/g10/card-util.c +++ b/g10/card-util.c @@ -23,6 +23,10 @@ #include #include #include +#ifdef HAVE_LIBREADLINE +# define GNUPG_LIBREADLINE_H_INCLUDED +# include +#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 -# include -# 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 == '#' );