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

Tomi Ollila tomi.ollila at iki.fi
Sun Nov 1 07:16: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.
---

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
+
+# 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";
+	}
+}'
+
+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



More information about the notmuch mailing list