From: Thomas Fitzsimmons <fitzsim@fitzsim.org>
To: Alexander Adolf <alexander.adolf@condition-alpha.com>
Cc: emacs-devel@gnu.org
Subject: Re: [Proposal] New EUDC backend for macOS address book
Date: Mon, 27 Apr 2020 12:10:01 -0400 [thread overview]
Message-ID: <m35zdk7vvq.fsf@fitzsim.org> (raw)
In-Reply-To: <f1bd89cf6c17dc777f5596c0e2e69172@condition-alpha.com> (Alexander Adolf's message of "Mon, 27 Apr 2020 17:09:07 +0200")
Hi Alexander,
Alexander Adolf <alexander.adolf@condition-alpha.com> writes:
> Dear Emacs Developers,
>
> I am in the process of migrating my email workflow to `notmuch-mode'
> within Emacs. While `notmuch-mode' provides a completion backend for
> `company-mode' to get auto-completion for email addresses from your
> notmuch email archive, I was looking for a way to give me
> auto-completion for email addresses from my macOS address book, too.
>
> My research lead me to EUDC [1], and its `eudcb-mab.el', but which
> didn't work out of the box for me. Looking at the code, it turns out
> that `eudcb-mab.el' accesses the SQLite file used by macOS address book
> to store a local copy of the contacts, and reverse-engineers its
> contents. This is however not documented by Apple as an "official" way
> of accessing that data, and in fact Apple had recently changed the file
> name of the SQLite. This broke `eudcb-mab.el' for me, as it was still
> looking for the old file name. Also, since it is an undocumented file,
> Apple may choose to not only change the file name, but also its inner
> structure at any point.
Thanks for working on this, and for the background information.
It sounds like the AppleScript-based approach is superior and the way
forward. However, I'd still like to know more about how eudcb-mab.el
failed, so that we can discuss backward compatibility. Was the
incorrect file path the only issue preventing eudcb-mab.el from working
for you?
> On the other hand, there is an Apple officially documented, and endorsed
> way of accessing the macOS address book contacts, and this is via
> AppleScript [2]. Being a published and documented API, it can probably
> be expected to remain stable, and invariant towards any redesigns of the
> macOS address book app that Apple may choose to undertake in the
> foreseeable future.
OK.
> I hence set out to write a new backend for EUDC to get access to macOS
> address book contacts via AppleScript. The result is
> `eudcb-macos-contacts.el', which is enclosed with this message, and
> which I would kindly like to propose for inclusion as part of EUDC (and
> replacing the existing `eudcb-mab.el').
Do you have a sense for how far back the AppleScript method will work?
i.e., would it work on all systems on which eudcb-mab.el currently
works? Do you think we should maintain eudcb-mab and
eudcb-macos-contacts in parallel, at least for a few releases, and
recommend eudcb-macos-contacts to existing eudcb-mab users?
> Yes, I have duly signed the copyright assignment (rt.gnu.org #1503473).
Great!
> In my implementation, I found that - interestingly - there is an elisp
> function in Emacs core, cunningly called `do_applescript()', and which
> is intended to execute AppleScript on the macOS platform from within
> Emacs. Unfortunately, I did find some oddities with it (see debbugs
> #39890 [3]), but couldn't discern whether the cause was in
> `do_applescript()' itself (so a fix could have been proposed), or in the
> Apple library code it builds upon. I hence decided to instead use
> `call-process()' to invoke the osascript [4] command line utility, which
> ships as part of every macOS. This does work reliably for me, and yields
> a more graceful overall behaviour of Emacs during large queries (again
> see debbugs #39890 [3]).
>
> [3] https://debbugs.gnu.org/cgi/bugreport.cgi?bug=39890
Thanks for the detailed bug report. I hope someone with access to a
system to test AppleScript and/or the required expertise will comment
there.
Thomas
next prev parent reply other threads:[~2020-04-27 16:10 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-27 15:09 [Proposal] New EUDC backend for macOS address book Alexander Adolf
2020-04-27 16:10 ` Thomas Fitzsimmons [this message]
2020-04-27 16:41 ` Jean-Christophe Helary
2020-05-02 16:20 ` Thomas Fitzsimmons
2020-05-06 15:14 ` Alexander Adolf
2020-05-06 17:41 ` Thomas Fitzsimmons
2020-05-07 16:03 ` Alexander Adolf
2020-05-07 18:29 ` Thomas Fitzsimmons
2020-05-08 12:17 ` Alexander Adolf
2020-05-08 13:44 ` Thomas Fitzsimmons
2020-06-08 20:41 ` Alexander Adolf
2020-06-10 5:03 ` Thomas Fitzsimmons
2020-06-29 13:38 ` Alexander Adolf
2020-07-09 15:12 ` Alexander Adolf
2020-07-09 20:29 ` Thomas Fitzsimmons
2020-07-10 13:36 ` Alexander Adolf
2020-07-10 3:53 ` Richard Stallman
2020-07-14 14:46 ` Thomas Fitzsimmons
2020-07-15 3:49 ` Jean-Christophe Helary
2020-07-17 0:56 ` Richard Stallman
2020-08-09 1:57 ` Richard Stallman
2020-09-06 3:00 ` Thomas Fitzsimmons
2020-05-05 14:47 ` Alexander Adolf
2020-04-27 20:00 ` chad
2020-05-05 13:30 ` Alexander Adolf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=m35zdk7vvq.fsf@fitzsim.org \
--to=fitzsim@fitzsim.org \
--cc=alexander.adolf@condition-alpha.com \
--cc=emacs-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.