[PATCH] devel/emacs: add devel/try-emacs-mua.sh

Mark Walters markwalters1009 at gmail.com
Thu Nov 12 00:22:25 PST 2015


> devel/try-emacs-mua.sh provides an easy way to try and experiment with
> the notmuch emacs client provided in emacs subdirectory of notmuch
> source tree.
>
> User is required to choose whether to run emacs with -q, -Q or neither
> -- and experienced ones may add other command line options, like
> '-f notmuch'.
>
> This script ensures that no .el files are newer than corresponding .elc
> files so that user (/developer!) does not accidentally experiment with
> outdated elisp files. The emacs variable to have the same effect,
> `load-prefer-newer' is not available until emacs 24.4.
>
> The *scratch* buffer is filled with some code user can execute before
> running notmuch code.

I like this -- a nice simple way to get to a working but uncustomised
test environment.

I don't know how easy the following would be but one addition that I
would find very useful would be a way to make this use the test
corpus. This would be useful for giving a completely standard
environment for interactive testing, but also for debugging what is
going on when tests fail.

Of course that is a feature request and should not delay the feature.

Finally, I think there is a bug: 


> ---
>
> Addressed David's comments in id:87d1xdtim1.fsf at maritornes.cs.unb.ca
> with 2 updates:
>      1) removed "address completion insinuate"
>      2) added code to initialize package system when using -q or -Q
>
>  devel/try-emacs-mua.sh | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 92 insertions(+)
>  create mode 100755 devel/try-emacs-mua.sh
>
> diff --git a/devel/try-emacs-mua.sh b/devel/try-emacs-mua.sh
> new file mode 100755
> index 000000000000..71be152c2346
> --- /dev/null
> +++ b/devel/try-emacs-mua.sh
> @@ -0,0 +1,92 @@
> +#!/bin/sh
> +
> +# This script provides an easy way to try and experiment with the
> +# notmuch emacs client provided in notmuch/emacs directory.
> +
> +set -eu
> +
> +test $# -gt 0 || {
> +	exec >&2
> +	echo
> +	echo "Usage: $0 '' | q | Q [other-emacs-args]"
> +	echo
> +	printf "  $0 %s\n" "'' starts emacs without either -q or -Q option" \
> +		"q  starts emacs with -q" \
> +		"Q  starts emacs with -Q"
> +	echo
> +	echo Note that if there are notmuch-emacs .elc files that are older than
> +	echo their corresponding .el files those older .elcs will be removed.
> +	echo
> +	exit 1
> +}
> +
> +case $1 in '') opt=
> +	;; q | -q) opt=-q
> +	;; Q | -Q) opt=-Q
> +	;; *) echo "option '$1' not '', 'q' nor 'Q'" >&2; exit 1
> +esac
> +shift
> +
> +case $0 in
> +	*\"*)	echo "'$0' contain one or more '\"'s" >&2; exit 1 ;;
> +	*/*)	d0=${0%/*} ;;
> +	*)	d0=.
> +esac
> +
> +pwd=$PWD
> +cd "$d0/.."
> +nmd=$PWD
> +emd=$PWD/emacs
> +
> +test -f "$nmd"/emacs/notmuch-lib.el || {
> +	echo "Cannot find notmuch-emacs source directory"
> +	exit 1
> +}
> +
> +if test -x "$nmd"/notmuch
> +then
> +	nmin='
> +To use accompanied notmuch binary from the same source, evaluate
> +(setq exec-path (cons \"'"$nmd"'\" exec-path))
> +Note: Evaluating the above may be followed by unintended database
> +upgrade and getting back to old version may require dump & restore.
> +'
> +else
> +	nmin=
> +fi
> +
> +if test "$opt" = '-q' || test "$opt" = '-Q'
> +then
> +	pkgin='
> +If you want to use packages (like company from elpa) evaluate
> +(progn (require '\''package) (package-initialize))
> +'
> +else
> +	pkgin=
> +fi

As far as I can see at this point we are in $nmd not $emd so the
following does not delete stale .elc files.

> +
> +# ensure we don't load .elc files that are older than corresponding .el file
> +# the emacs variable `load-prefer-newer' is not available until emacs 24.4
> +perl -e 'use strict; use warnings;
> +while (<*.elc>) {
> +	my $elc = $_; s/elc$/el/;
> +	if (-M $_ < -M $elc) {
> +		warn "$_ is newer than $elc. Removing $elc\n";
> +		unlink $elc or die "Failed to remove '\''$elc'\'': $!\n";
> +	}
> +}'


Best wishes

Mark

> +
> +cd "$pwd"
> +
> +# note: whitespace in $EMACS splits to command and args
> +exec ${EMACS:-emacs} $opt -L "$emd" -l "$emd"/notmuch.el "$@" --eval '
> +(with-current-buffer "*scratch*"
> +  (insert "
> +Go to the end of the following lines and type C-x C-e to evaluate
> +(or C-j which is shorter but inserts evaluation results into buffer)
> +
> +To \"disable\" mail sending, evaluate
> +(setq message-send-mail-function (lambda () t))
> +'"$nmin$pkgin"'
> +To start notmuch (hello) screen, evaluate
> +(notmuch-hello)") (set-buffer-modified-p nil))'
> -- 
> 2.0.0
>
> _______________________________________________
> notmuch mailing list
> notmuch at notmuchmail.org
> https://notmuchmail.org/mailman/listinfo/notmuch


More information about the notmuch mailing list