* file format is not tolerant for character set changes
+--
+[25]
+name=Lastname, Firstname
+email="Lastname, Firstname" <firstname.lastname@example.com>
+
+but the command "abook --mutt-query lastname" returns two email addresses
+
+"Lastname Lastname, Firstname
+Firstname" <firstname.lastname@example.com> Lastname, Firstname
+
+In other words, the mutt-query doesn't treat the comma as protected by the
+quotes, although the conversion from pine format did.
+--
+
Filters:
* mutt / elm / pine export filters allow to create a file with duplicate
aliases
* fseek in ldif import filter should be eliminated
-$Id: BUGS,v 1.16 2005/08/29 10:02:50 jheinonen Exp $
+$Id: BUGS,v 1.16.2.1 2006/02/23 13:39:13 jheinonen Exp $
+0.5.6
+ - translation fixes
+ - fixed gcrd export format (\r\n line endings according to RFC, Marc Tardif)
+ - fix localized keybindings with --disable-nls
+
0.5.5
- i18n support (Cedric Duval)
- French translation (Cedric Duval)
Summary: Text-based addressbook program
Name: abook
-Version: 0.5.5
+Version: 0.5.6
Release: 1
License: GPL
Group: Utilities
# Define the identity of the package.
PACKAGE=abook
- VERSION=0.5.5
+ VERSION=0.5.6
cat >>confdefs.h <<_ACEOF
dnl abook configure.in
AC_INIT(abook.c)
-AM_INIT_AUTOMAKE(abook, 0.5.5)
+AM_INIT_AUTOMAKE(abook, 0.5.6)
AM_CONFIG_HEADER(config.h)
dnl ---------------
/*
- * $Id: filter.c,v 1.48.2.1 2005/10/26 19:45:23 jheinonen Exp $
+ * $Id: filter.c,v 1.48.2.1.2.2 2006/04/10 16:02:10 jheinonen Exp $
*
* by JH <jheinonen@users.sourceforge.net>
*
{
int i,j;
- for(i=0,j=0; j < (int)strlen(buf); i++, j++)
+ for(i = 0,j = 0; j < (int)strlen(buf); i++, j++)
buf[i] = buf[j] == '\n' ? buf[++j] : buf[j];
}
if(s == NULL || *s != '(')
return;
- for(i=0; s[i]; i++ )
- s[i] = s[i+1];
+ for(i = 0; s[i]; i++)
+ s[i] = s[i + 1];
if( ( tmp = strchr(s,')')) )
- *tmp=0;
+ *tmp = '\0';
for(i = 1; ( tmp = strchr(s, ',') ) != NULL ; i++, s = tmp + 1)
if(i > MAX_EMAILS - 1) {
- *tmp = 0;
+ *tmp = '\0';
break;
}
-
}
static void
char *end;
char tmp[PINE_BUF_SIZE];
int i, len, last;
- int pine_conv_table[]= {NICK, NAME, EMAIL, -1, NOTES};
+ int pine_conv_table[] = {NICK, NAME, EMAIL, -1, NOTES};
memset(&item, 0, sizeof(item));
- for(i=0, last=0; !last ; i++) {
+ for(i = 0, last=0; !last ; i++) {
if( !(end = strchr(start, '\t')) )
last=1;
char *name;
db_enumerate_items(e) {
- fprintf(out, "BEGIN:VCARD\nFN:%s\n",
+ fprintf(out, "BEGIN:VCARD\r\nFN:%s\r\n",
safe_str(database[e.item][NAME]));
name = get_surname(database[e.item][NAME]);
if(database[e.item][NAME][j] == ' ')
break;
}
- fprintf(out, "N:%s;%.*s\n",
+ fprintf(out, "N:%s;%.*s\r\n",
safe_str(name),
j,
safe_str(database[e.item][NAME])
free(name);
if ( database[e.item][ADDRESS] )
- fprintf(out, "ADR:;;%s;%s;%s;%s;%s;%s\n",
+ fprintf(out, "ADR:;;%s;%s;%s;%s;%s;%s\r\n",
safe_str(database[e.item][ADDRESS]),
safe_str(database[e.item][ADDRESS2]),
safe_str(database[e.item][CITY]),
);
if (database[e.item][PHONE])
- fprintf(out, "TEL;HOME:%s\n", database[e.item][PHONE]);
+ fprintf(out, "TEL;HOME:%s\r\n",
+ database[e.item][PHONE]);
if (database[e.item][WORKPHONE])
- fprintf(out, "TEL;WORK:%s\n", database[e.item][WORKPHONE]);
+ fprintf(out, "TEL;WORK:%s\r\n",
+ database[e.item][WORKPHONE]);
+
if (database[e.item][FAX])
- fprintf(out, "TEL;FAX:%s\n", database[e.item][FAX]);
+ fprintf(out, "TEL;FAX:%s\r\n", database[e.item][FAX]);
if (database[e.item][MOBILEPHONE])
- fprintf(out, "TEL;CELL:%s\n", database[e.item][MOBILEPHONE]);
+ fprintf(out, "TEL;CELL:%s\r\n", database[e.item][MOBILEPHONE]);
if ( database[e.item][EMAIL] ) {
split_emailstr(e.item, emails);
for(j=0; j < MAX_EMAILS ; j++) {
if ( *emails[j] )
- fprintf(out, "EMAIL;INTERNET:%s\n",
+ fprintf(out, "EMAIL;INTERNET:%s\r\n",
emails[j]);
}
}
if ( database[e.item][NOTES] )
- fprintf(out, "NOTE:%s\n", database[e.item][NOTES]);
+ fprintf(out, "NOTE:%s\r\n", database[e.item][NOTES]);
if (database[e.item][URL])
- fprintf(out, "URL:%s\n", database[e.item][URL]);
+ fprintf(out, "URL:%s\r\n", database[e.item][URL]);
- fprintf(out, "END:VCARD\n\n");
+ fprintf(out, "END:VCARD\r\n\r\n");
}
# include "config.h"
#endif
-#ifdef ENABLE_NLS
#include <string.h>
#include "gettext.h"
-char *
+const char *
sgettext(const char *msgid)
{
- char *msgval = gettext(msgid);
+ const char *msgval = gettext(msgid);
if(msgval == msgid)
msgval = strrchr(msgid, '|') + 1;
return msgval;
}
-#endif
+
#ifndef _GETTEXT_H
#define _GETTEXT_H
+const char *sgettext(const char *msgid); /* Strip context prefix */
+
# if ENABLE_NLS
# include <libintl.h>
-char *sgettext(const char *msgid); /* Strip context prefix */
# else
# define gettext(Msgid) ((const char *) (Msgid))
-# define sgettext(Msgid) ((const char *) (Msgid))
-
-# define textdomain(Domainname) ((const char *) (Domainname))
-# define bindtextdomain(Domainname, Dirname) ((const char *) (Dirname))
+# define textdomain(Domainname) do {} while(0)
+# define bindtextdomain(Domainname, Dirname) do {} while(0)
# endif /* ENABLE_NLS */
# define _(String) gettext (String)
N_(" Z move current item down\n"),
"\n",
N_(" m send mail with mutt\n"),
-N_(" u view URL with web browser\n"),
+N_(" v view URL with web browser\n"),
NULL
};
/*
- * $Id: options.c,v 1.27 2005/09/21 16:50:31 jheinonen Exp $
+ * $Id: options.c,v 1.27.4.1 2006/04/09 18:57:34 jheinonen Exp $
*
* by JH <jheinonen@users.sourceforge.net>
*
}
}
-static char *
+static const char *
opt_set_set_option(char *var, char *p, struct option *opt)
{
int len;
return NULL;
}
-static char *
+static const char *
opt_parse_set(buffer *b)
{
int i;
#include "database.h" /* needed for change_custom_field_name */
-static char *
+static const char *
opt_parse_customfield(buffer *b)
{
char *p, num[5];
static struct {
char *token;
- char * (*func) (buffer *line);
+ const char * (*func) (buffer *line);
} opt_parsers[] = {
{ "set", opt_parse_set },
{ "customfield", opt_parse_customfield },
opt_parse_line(char *line, int n, char *fn)
{
int i;
- char *err = NULL;
+ const char *err = NULL;
char *token;
buffer b;
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: <cedricduval+abook@free.fr>\n"
-"POT-Creation-Date: 2005-10-27 17:07+0300\n"
+"POT-Creation-Date: 2005-12-06 07:50+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
msgstr ""
#: help.h:47
-msgid "\tu\t\tview URL with web browser\n"
+msgid "\tv\t\tview URL with web browser\n"
msgstr ""
#: help.h:55
msgstr ""
"Project-Id-Version: abook 0.5.5pre1\n"
"Report-Msgid-Bugs-To: <cedricduval+abook@free.fr>\n"
-"POT-Creation-Date: 2005-10-27 17:07+0300\n"
+"POT-Creation-Date: 2005-12-06 07:50+0200\n"
"PO-Revision-Date: 2005-10-03 00:56+0200\n"
"Last-Translator: Johannes Weißl <jargon@molb.org>\n"
"Language-Team: German <de@li.org>\n"
msgstr "\tm\t\tE-Mail mit Mutt senden\n"
#: help.h:47
-msgid "\tu\t\tview URL with web browser\n"
-msgstr "\tu\t\tURL mit Web-Browser anzeigen\n"
+msgid "\tv\t\tview URL with web browser\n"
+msgstr "\tv\t\tURL mit Web-Browser anzeigen\n"
#: help.h:55
msgid "\ta,c,p,o,C/arrows/h,l\tchange tab\n"
msgstr ""
"Project-Id-Version: abook\n"
"Report-Msgid-Bugs-To: <cedricduval+abook@free.fr>\n"
-"POT-Creation-Date: 2005-10-27 17:07+0300\n"
+"POT-Creation-Date: 2005-12-06 07:50+0200\n"
"PO-Revision-Date: 2005-10-03 10:53+0200\n"
"Last-Translator: Cedric Duval <cedricduval+abook@free.fr>\n"
"Language-Team: french\n"
#: help.h:37
msgid "\tS\t\t\"surname sort\"\n"
-msgstr "\ts\t\tclassement par nom de famille\n"
+msgstr "\tS\t\tclassement par nom de famille\n"
#: help.h:38
msgid "\tF\t\tsort by field (defined in configuration file)\n"
msgstr "\tm\t\tenvoyer un courrier électronique avec mutt\n"
#: help.h:47
-msgid "\tu\t\tview URL with web browser\n"
-msgstr "\tu\t\tvisualiser l'URL avec un navigateur web\n"
+msgid "\tv\t\tview URL with web browser\n"
+msgstr "\tv\t\tvisualiser l'URL avec un navigateur web\n"
#: help.h:55
msgid "\ta,c,p,o,C/arrows/h,l\tchange tab\n"
msgstr ""
"Project-Id-Version: 0.5.5\n"
"Report-Msgid-Bugs-To: <cedricduval+abook@free.fr>\n"
-"POT-Creation-Date: 2005-10-27 17:07+0300\n"
+"POT-Creation-Date: 2005-12-06 07:50+0200\n"
"PO-Revision-Date: 2005-10-18 18:10+0200\n"
"Last-Translator: TAKAHASHI Tamotsu <ttakah@lapis.plala.or.jp>\n"
"Language-Team: japanese\n"
msgstr "\tm\t\tMutt ¤Ç¥á¡¼¥ë¤òÁ÷¤ë\n"
#: help.h:47
-msgid "\tu\t\tview URL with web browser\n"
-msgstr "\tu\t\tURL ¤ò¥Ö¥é¥¦¥¶¤Ç±ÜÍ÷¤¹¤ë\n"
+msgid "\tv\t\tview URL with web browser\n"
+msgstr "\tv\t\tURL ¤ò¥Ö¥é¥¦¥¶¤Ç±ÜÍ÷¤¹¤ë\n"
#: help.h:55
msgid "\ta,c,p,o,C/arrows/h,l\tchange tab\n"
msgstr ""
"Project-Id-Version: abook 0.5.4\n"
"Report-Msgid-Bugs-To: <cedricduval+abook@free.fr>\n"
-"POT-Creation-Date: 2005-10-27 17:07+0300\n"
+"POT-Creation-Date: 2005-12-06 07:50+0200\n"
"PO-Revision-Date: 2005-09-23 22:13+0200\n"
"Last-Translator: Susanna Björverud <susanna.bjorverud@telia.com>\n"
"Language-Team: none\n"
msgstr "\tm\t\tskicka post med mutt\n"
#: help.h:47
-msgid "\tu\t\tview URL with web browser\n"
-msgstr "\tu\t\tvisa URL i webbläsare\n"
+msgid "\tv\t\tview URL with web browser\n"
+msgstr "\tv\t\tvisa URL i webbläsare\n"
#: help.h:55
msgid "\ta,c,p,o,C/arrows/h,l\tchange tab\n"
/*
- * $Id: ui.c,v 1.54 2005/10/05 11:03:36 jheinonen Exp $
+ * $Id: ui.c,v 1.54.4.1 2006/04/09 18:57:34 jheinonen Exp $
*
* by JH <jheinonen@users.sourceforge.net>
*
}
char *
-ui_readline(char *prompt, char *s, size_t limit, bool use_completion)
+ui_readline(const char *prompt, char *s, size_t limit, bool use_completion)
{
int y, x;
char *ret;
}
int
-statusline_ask_boolean(char *msg, int def)
+statusline_ask_boolean(const char *msg, int def)
{
int ret;
char *msg2 = strconcat(msg, def ? _(" (Y/n)?") : _(" (y/N)?"), NULL);
}
char *
-ask_filename(char *prompt)
+ask_filename(const char *prompt)
{
char *buf = NULL;
void headerline(const char *str);
void refresh_screen();
int statusline_msg(const char *msg);
-int statusline_askchoice(const char *msg, const char *choices, short dflt);
-char *ask_filename(char *prompt);
-int statusline_ask_boolean(char *msg, int def);
+int statusline_askchoice(const char *msg, const char *choices,
+ short dflt);
+char *ask_filename(const char *prompt);
+int statusline_ask_boolean(const char *msg, int def);
void clear_statusline();
void display_help(int help);
void statusline_addstr(const char *str);
-char * ui_readline(char *prompt, char *s, size_t limit, bool use_completion);
+char * ui_readline(const char *prompt, char *s, size_t limit,
+ bool use_completion);
void refresh_statusline();
void get_commands();
void ui_remove_items();