From eb76b71de4af8b4fd3b8db2216a37f90a901abf9 Mon Sep 17 00:00:00 2001 From: Michal Sojka Date: Tue, 5 Jan 2016 00:19:40 +0100 Subject: [PATCH] Re: [PATCH v5] devel/emacs: add devel/try-emacs-mua --- f1/726bcf5d9bf2a96d9e01901d66bd2ae80742bb | 293 ++++++++++++++++++++++ 1 file changed, 293 insertions(+) create mode 100644 f1/726bcf5d9bf2a96d9e01901d66bd2ae80742bb diff --git a/f1/726bcf5d9bf2a96d9e01901d66bd2ae80742bb b/f1/726bcf5d9bf2a96d9e01901d66bd2ae80742bb new file mode 100644 index 000000000..6c5dc04a2 --- /dev/null +++ b/f1/726bcf5d9bf2a96d9e01901d66bd2ae80742bb @@ -0,0 +1,293 @@ +Return-Path: +X-Original-To: notmuch@notmuchmail.org +Delivered-To: notmuch@notmuchmail.org +Received: from localhost (localhost [127.0.0.1]) + by arlo.cworth.org (Postfix) with ESMTP id DB7476DE1643 + for ; Mon, 4 Jan 2016 15:28:14 -0800 (PST) +X-Virus-Scanned: Debian amavisd-new at cworth.org +X-Spam-Flag: NO +X-Spam-Score: -1.511 +X-Spam-Level: +X-Spam-Status: No, score=-1.511 tagged_above=-999 required=5 tests=[AWL=0.799, + RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, + T_HEADER_FROM_DIFFERENT_DOMAINS=0.01] autolearn=disabled +Received: from arlo.cworth.org ([127.0.0.1]) + by localhost (arlo.cworth.org [127.0.0.1]) (amavisd-new, port 10024) + with ESMTP id XTHKbz4fm95y for ; + Mon, 4 Jan 2016 15:28:11 -0800 (PST) +X-Greylist: delayed 502 seconds by postgrey-1.35 at arlo; + Mon, 04 Jan 2016 15:28:08 PST +Received: from max.feld.cvut.cz (max.feld.cvut.cz [147.32.192.36]) + by arlo.cworth.org (Postfix) with ESMTP id E87576DE1715 + for ; Mon, 4 Jan 2016 15:28:08 -0800 (PST) +Received: from localhost (unknown [192.168.200.7]) + by max.feld.cvut.cz (Postfix) with ESMTP id DC60A19F47CE; + Tue, 5 Jan 2016 00:19:42 +0100 (CET) +X-Virus-Scanned: IMAP STYX AMAVIS +Received: from max.feld.cvut.cz ([192.168.200.1]) + by localhost (styx.feld.cvut.cz [192.168.200.7]) (amavisd-new, port 10044) + with ESMTP id Ac-80Dfxvxeu; Tue, 5 Jan 2016 00:19:40 +0100 (CET) +Received: from imap.feld.cvut.cz (imap.feld.cvut.cz [147.32.192.34]) + by max.feld.cvut.cz (Postfix) with ESMTP id D3C8B19F48C3; + Tue, 5 Jan 2016 00:19:40 +0100 (CET) +Received: from wsh by steelpick.2x.cz with local (Exim 4.86) + (envelope-from ) + id 1aGEPc-0003oA-5m; Tue, 05 Jan 2016 00:19:40 +0100 +From: Michal Sojka +To: Tomi Ollila , notmuch@notmuchmail.org +Cc: tomi.ollila@iki.fi +Subject: Re: [PATCH v5] devel/emacs: add devel/try-emacs-mua +In-Reply-To: <1451946112-23573-1-git-send-email-tomi.ollila@iki.fi> +References: <1451946112-23573-1-git-send-email-tomi.ollila@iki.fi> +User-Agent: Notmuch/0.21+30~g55c056a (http://notmuchmail.org) Emacs/24.5.1 + (x86_64-pc-linux-gnu) +Date: Tue, 05 Jan 2016 00:19:40 +0100 +Message-ID: <87egdxx78z.fsf@steelpick.2x.cz> +MIME-Version: 1.0 +Content-Type: text/plain +X-BeenThere: notmuch@notmuchmail.org +X-Mailman-Version: 2.1.20 +Precedence: list +List-Id: "Use and development of the notmuch mail system." + +List-Unsubscribe: , + +List-Archive: +List-Post: +List-Help: +List-Subscribe: , + +X-List-Received-Date: Mon, 04 Jan 2016 23:28:15 -0000 + +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 +> +;; +> +;; 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)' + +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? + +> + +> +(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. + +Thanks. +-Michal + +> + (if notmuch-path (concat "is " notmuch-path) "not found!") "\n")) +> + +> +(condition-case err +> +;; "opportunistic" load-prefer-newer -- will be effective since emacs 24.4 +> + (let ((load-prefer-newer t) +> + (force-load-messages t)) +> + (require 'notmuch)) +> + ;; specifying `debug' here lets the debugger run +> + ;; if `debug-on-error' is non-nil. +> + ((debug error) +> + (let ((error-message-string (error-message-string err))) +> + (insert "\nLoading notmuch failed: " error-message-string "\n") +> + (message "Loading notmuch failed: %s" error-message-string) +> + (insert "See *Messages* buffer for more information.\n") +> + (if init-file-user +> + (message "Hint: %s -q (or -Q) may help" load-file-name)) +> + (pop-to-buffer "*Messages*") +> + (error "Stopped reading %s" load-file-name)))) +> + +> +(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)) +> +") +> + +> +(if (file-exists-p (concat try-notmuch-source-directory "/notmuch")) +> + (insert " +> +To use accompanied notmuch binary from the same source, evaluate +> +* (setq exec-path (cons \"" try-notmuch-source-directory "\" exec-path)) +> +Note: Evaluating the above may be followed by unintended database +> +upgrade and getting back to old version may require dump & restore. +> +")) +> + +> +(if init-file-user ;; nil, if '-q' or '-Q' is given, but no '-u' 'USER' +> + (insert " +> +Your init file was processed during emacs startup. If you want to test +> +notmuch emacs mail client without your emacs init file interfering, Run\n\"" +> +(file-name-nondirectory load-file-name) "\" with '-q' (or '-Q') as an argument. +> +") +> + (let ((emacs-init-file-name) (notmuch-init-file-name)) +> + ;; determining init file name in startup.el/command-line is too complicated +> + ;; to be duplicated here; these 3 file names covers most of the users +> + (mapc (lambda (fn) (if (file-exists-p fn) (setq emacs-init-file-name fn))) +> + '("~/.emacs.d/init.el" "~/.emacs" "~/.emacs.el")) +> + (setq notmuch-init-file-name "~/.emacs.d/notmuch-config.el") +> + (unless (file-exists-p notmuch-init-file-name) +> + (setq notmuch-init-file-name nil)) +> + (if (and emacs-init-file-name notmuch-init-file-name) +> + (insert " +> +If you want to load your initialization files now, evaluate\n* (progn") +> + (if (or emacs-init-file-name notmuch-init-file-name) +> + (insert " +> +If you want to load your initialization file now, evaluate\n*"))) +> + (if emacs-init-file-name +> + (insert " (load \"" emacs-init-file-name "\")")) +> + (if notmuch-init-file-name +> + (insert " (load \"" notmuch-init-file-name "\")")) +> + (if (and emacs-init-file-name notmuch-init-file-name) +> + (insert ")")) +> + (if (or emacs-init-file-name notmuch-init-file-name) +> + (insert "\n"))) +> + (if (>= emacs-major-version 24) +> + (insert " +> +If you want to use packages (e.g. company from elpa) evaluate +> +* (progn (require 'package) (package-initialize)) +> +"))) +> + +> +(insert " +> +To start notmuch (hello) screen, evaluate +> +* (notmuch-hello)") +> + +> +(add-hook 'emacs-startup-hook +> + (lambda () +> + (set-buffer "*scratch*") +> + (lisp-interaction-mode) +> + (goto-char (point-min)) +> + (forward-line 2) +> + (set-buffer-modified-p nil))) +> + +> +;; Local Variables: +> +;; mode: emacs-lisp +> +;; End: +> -- +> 2.6.4 -- 2.26.2