How to get a mailto: URI out of abook(1)
I store my address book with abook(1).
https://manpages.debian.org/bookworm/abook/abook.1.en.html
Let's say I want to introduce some contact in some field that accepts the usual name <email>
format.
How can I ask abook(1) to produce that format?
The addressbook entry is the following:
[0]
name=Alejandro Colomar
email=alx@kernel.org,alx.manpages@gmail.com
nick=alx
(I hope it's a valid one.)
With --mutt-query, I can get something similar:
$ abook --mutt-query alx
alx@kernel.org Alejandro Colomar
alx.manpages@gmail.com Alejandro Colomar
Then, I can do some magic with custom formats, but I get a wrong email:
$ abook --mutt-query=alx --outformat=vcard \
| abook --convert --infile=- --informat=vcard \
--outformat=custom --outformatstr='{name} <{email}>';
Alejandro Colomar <alx@kernel.org,alx.manpages@gmail.com>
The above pipeline works only for contacts with a single email. Is there a way to make it work for every contact?
EDIT:
This is what I'd expect:
$ abook --mutt-query=alx --outformat=mailto
Alejandro Colomar <alx@kernel.org>
Alejandro Colomar <alx.manpages@gmail.com>
1 answer
There's no such feature. But it's easy to write. Apply this patch:
From 8ea7d1cf4933ca24006308ac61aa50fb8ab33b02 Mon Sep 17 00:00:00 2001
From: Alejandro Colomar <alx@kernel.org>
Date: Sat, 30 Sep 2023 17:44:03 +0200
Subject: [PATCH] query: outformat: Add "mailto" format
Signed-off-by: Alejandro Colomar <alx@kernel.org>
---
filter.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/filter.c b/filter.c
index d5b18dd..a441615 100644
--- a/filter.c
+++ b/filter.c
@@ -80,6 +80,7 @@ static int custom_export_database(FILE *out, struct db_enumerator e);
void vcard_export_item(FILE *out, int item);
void muttq_print_item(FILE *file, int item);
+void mailto_print_item(FILE *file, int item);
void custom_print_item(FILE *out, int item);
/*
@@ -121,6 +122,7 @@ struct abook_output_filter e_filters[] = {
struct abook_output_item_filter u_filters[] = {
{ "vcard", N_("vCard 2 file"), vcard_export_item },
{ "muttq", N_("mutt alias"), muttq_print_item },
+ { "mailto", N_("mailto address"), mailto_print_item },
{ "custom", N_("Custom format"), custom_print_item },
{ "\0", NULL }
};
@@ -2300,6 +2302,22 @@ mutt_query_export_database(FILE *out, struct db_enumerator e)
* end of mutt alias export filter
*/
+void mailto_print_item(FILE *file, int item)
+{
+ abook_list *emails, *e;
+ char *tmp = db_email_get(item);
+
+ emails = csv_to_abook_list(tmp);
+ free(tmp);
+
+ for(e = emails; e; e = e->next) {
+ fprintf(file, "%s <%s>\n", db_name_get(item), e->data);
+ if(!opt_get_bool(BOOL_MUTT_RETURN_ALL_EMAILS))
+ break;
+ }
+ abook_list_free(&emails);
+}
+
/*
* printable export filter
--
2.40.1
Then, build abook:
./configure && make
And now you can do this:
$ ./abook --mutt-query=alx --outformat=mailto
Alejandro Colomar <alx@kernel.org>
Alejandro Colomar <alx.manpages@gmail.com>
(I'll send this patch to the project soon, so hopefully this feature will be available soon.)
2 comment threads