From: Tomi Ollila <tomi.ollila@iki.fi>
To: Michal Sojka <sojkam1@fel.cvut.cz>, notmuch@notmuchmail.org
Subject: Re: [PATCH v5] devel/emacs: add devel/try-emacs-mua
Date: Tue, 05 Jan 2016 22:36:54 +0200 [thread overview]
Message-ID: <m2r3hvu5jt.fsf@guru.guru-group.fi> (raw)
In-Reply-To: <87egdxx78z.fsf@steelpick.2x.cz>
On Tue, Jan 05 2016, Michal Sojka <sojkam1@fel.cvut.cz> wrote:
> Hi Tomi,
>
> this looks almost good. A few minor comments below.
>
> On Mon, Jan 04 2016, Tomi Ollila wrote:
>> devel/try-emacs-mua provides an easy way to try and experiment
>> with the notmuch emacs client distributed in emacs subdirectory of
>> the notmuch source tree.
>>
>> try-emacs-mua starts a new emacs process and if initial checks pass
>> *scratch* buffer is filled with information of how to begin.
>>
>> Normal emacs command line arguments can be used, like -q or -Q.
>> These arguments are appended verbatim to the starting emacs process.
>>
>> If the emacs version in use is smaller than 24.4, special care is taken
>> to ensure that notmuch*.elc files older than corresponding .el files
>> are not loaded. Since emacs 24.4, setting `load-prefer-newer' variable
>> takes care of this.
>> ---
>>
>> Thanks to Michal for review of v4
>> id:1450610032-23776-1-git-send-email-tomi.ollila@iki.fi
>> in id:87vb7aco77.fsf@steelpick.2x.cz
>>
>> This should address the issues:
>>
>> 1) no more command line filtering
>> 2) dropped (outcommented) file-truename advising
>> 3) added information which notmuch binary is used
>> 4) dropped popping messages buffer (fixing 2 issues)
>>
>> Added:
>> * code to load ~/.emacs.d/notmuch-config.el if exists and not loaded already
>> * pop messages buffer if (require 'notmuch) fails
>> * don't suggest package-initialize if emacs version is 23
>>
>>
>> devel/try-emacs-mua | 156 ++++++++++++++++++++++++++++++++++++++++++++++++++++
>> 1 file changed, 156 insertions(+)
>> create mode 100755 devel/try-emacs-mua
>>
>> diff --git a/devel/try-emacs-mua b/devel/try-emacs-mua
>> new file mode 100755
>> index 000000000000..0236b438c30a
>> --- /dev/null
>> +++ b/devel/try-emacs-mua
>> @@ -0,0 +1,156 @@
>> +#!/bin/sh
>> +:; set -x; exec "${EMACS:-emacs}" --debug-init --load "$0" "$@"; exit
>> +;;
>> +;; Try the notmuch emacs client located in ../notmuch/emacs directory
>> +;;
>> +;; Run this without arguments; emacs window opens with some usage information
>> +;;
>> +;; Authors: Tomi Ollila <tomi.ollila@iki.fi>
>> +;;
>> +;; http://www.emacswiki.org/emacs/EmacsScripts was a useful starting point...
>> +;;
>> +;; Licence: GPLv3+
>> +;;
>> +
>> +(message "Starting '%s'" load-file-name)
>> +
>> +(set-buffer "*scratch*")
>> +
>> +(setq initial-buffer-choice t) ;; *scratch* buffer
>
> After initial tuning of emacs configuration according to the hints in
> the scratch buffer, people might want to automate things. For example
> something like:
>
> devel/try-emacs-mua -q -f notmuch-hello
>
> This does not work as one would expect, because the notmuch-hello buffer
> is buried under the *scratch* buffer. To get the hello screen after the
> start one has to run:
>
> devel/try-emacs-mua -q -f notmuch-hello --eval '(setq initial-buffer-choice nil)'
Simpler is to change the above code line to:
(setq initial-buffer-choice nil
inhibit-startup-screen t)
Now the visible buffer is *scratch* by default -- and works more closely
how emacs works normally.
> This could be also documented in the scratch buffer. Or it might be
> easier, in this case, to run emacs without this script at all. There
> will be no logging, but this might be OK for some people.
>
> Actually I don't know who are you writing this script for? For notmuch
> developers or for users who want to debug or test development version?
First of all, for me & other notmuch developers. After a few months break
when I do some notmuch elisp coding and try to test it I hope I don't have
to remember so much setup things and if something initially goes wrong I
might get visible hints to the screen.
And also to users to test development version -- or any other version by
copying this file to notmuch/devel *OR* notmuch/emacs directory (works
from both locations). And when they run and get into problems, posting
the contents of *Messages* buffer may provide useful information.
>> +
>> +(when (featurep 'notmuch)
>> + (insert "
>> +Notmuch has been loaded to this emacs (during processing of the init file)
>> +which means it is (most probably) loaded from different source than expected.
>> +
>> +Please run \"" (file-name-nondirectory load-file-name)
>> +"\" with '-q' (or '-Q') as an argument, to disable
>> +processing of the init file -- you can load it after emacs has started\n
>> +exit emacs (y or n)? ")
>> + (if (y-or-n-p "exit emacs")
>> + (kill-emacs)
>> + (error "Stopped reading %s" load-file-name)))
>> +
>> +(let ((pdir (file-name-directory
>> + (directory-file-name (file-name-directory load-file-name)))))
>> + (unless (file-exists-p (concat pdir "emacs/notmuch-lib.el"))
>> + (insert "Cannot find notmuch-emacs source directory
>> +while looking at: " pdir "emacs\n\nexit emacs (y or n)? ")
>> + (if (y-or-n-p "exit emacs")
>> + (kill-emacs)
>> + (error "Stopped reading %s" load-file-name)))
>> + (setq try-notmuch-source-directory (directory-file-name pdir))
>> + (setq try-notmuch-emacs-directory (concat pdir "emacs/"))
>> + (setq load-path (cons try-notmuch-emacs-directory load-path)))
>> +
>> +;; they say advice doesn't work for primitives (functions from c source)
>> +;; well, these 'before' advice works for emacs 23.1 - 24.5 (at least)
>> +;; ...and for our purposes 24.3 is enough (there is no load-prefer-newer there)
>> +;; note also that the old, "obsolete" defadvice mechanism was used, but that
>> +;; is the only one available for emacs 23 and 24 up to 24.3.
>> +
>> +(if (boundp 'load-prefer-newer)
>> + (defadvice require (before before-require activate)
>> + (unless (featurep feature)
>> + (message "require: %s" feature)))
>> + ;; else: special require "short-circuit"; after load feature is provided...
>> + ;; ... in notmuch sources we always use require and there are no loops
>> + (defadvice require (before before-require activate)
>> + (unless (featurep feature)
>> + (message "require: %s" feature)
>> + (let ((name (symbol-name feature)))
>> + (if (and (string-match "^notmuch" name)
>> + (file-newer-than-file-p
>> + (concat try-notmuch-emacs-directory name ".el")
>> + (concat try-notmuch-emacs-directory name ".elc")))
>> + (load (concat try-notmuch-emacs-directory name ".el") nil nil t t)
>> + )))))
>> +
>> +(insert "Found notmuch emacs client in " try-notmuch-emacs-directory "\n")
>> +
>> +(let ((notmuch-path (executable-find "notmuch")))
>> + (insert "Notmuch cli executable "
>
> Nitpick: I'd prefer CLI in all caps.
That looks better to me, too.
>
> Thanks.
> -Michal
Thanks for the review,
Tomi
prev parent reply other threads:[~2016-01-05 20:36 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-04 22:21 [PATCH v5] devel/emacs: add devel/try-emacs-mua Tomi Ollila
2016-01-04 23:19 ` Michal Sojka
2016-01-05 20:36 ` Tomi Ollila [this message]
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
List information: https://notmuchmail.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=m2r3hvu5jt.fsf@guru.guru-group.fi \
--to=tomi.ollila@iki.fi \
--cc=notmuch@notmuchmail.org \
--cc=sojkam1@fel.cvut.cz \
/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 public inbox
https://yhetil.org/notmuch.git/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).