From b600f877f6d4cbd55605c831f5ff0fc03a13948e Mon Sep 17 00:00:00 2001 From: Tomi Ollila Date: Tue, 5 Jan 2016 22:36:54 +0200 Subject: [PATCH] Re: [PATCH v5] devel/emacs: add devel/try-emacs-mua --- 10/9e5ca400ec0f0b1be8177be087188f52eea89a | 223 ++++++++++++++++++++++ 1 file changed, 223 insertions(+) create mode 100644 10/9e5ca400ec0f0b1be8177be087188f52eea89a diff --git a/10/9e5ca400ec0f0b1be8177be087188f52eea89a b/10/9e5ca400ec0f0b1be8177be087188f52eea89a new file mode 100644 index 000000000..757c45524 --- /dev/null +++ b/10/9e5ca400ec0f0b1be8177be087188f52eea89a @@ -0,0 +1,223 @@ +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 191D46DE13DB + for ; Tue, 5 Jan 2016 12:36:43 -0800 (PST) +X-Virus-Scanned: Debian amavisd-new at cworth.org +X-Spam-Flag: NO +X-Spam-Score: 0.671 +X-Spam-Level: +X-Spam-Status: No, score=0.671 tagged_above=-999 required=5 tests=[AWL=0.019, + SPF_NEUTRAL=0.652] 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 FeVT0yV_0emg for ; + Tue, 5 Jan 2016 12:36:40 -0800 (PST) +Received: from guru.guru-group.fi (guru.guru-group.fi [46.183.73.34]) + by arlo.cworth.org (Postfix) with ESMTP id 96EA86DE13AF + for ; Tue, 5 Jan 2016 12:36:39 -0800 (PST) +Received: from guru.guru-group.fi (localhost [IPv6:::1]) + by guru.guru-group.fi (Postfix) with ESMTP id 19AF01000CD; + Tue, 5 Jan 2016 22:36:55 +0200 (EET) +From: Tomi Ollila +To: Michal Sojka , notmuch@notmuchmail.org +Subject: Re: [PATCH v5] devel/emacs: add devel/try-emacs-mua +In-Reply-To: <87egdxx78z.fsf@steelpick.2x.cz> +References: <1451946112-23573-1-git-send-email-tomi.ollila@iki.fi> + <87egdxx78z.fsf@steelpick.2x.cz> +User-Agent: Notmuch/0.21+32~g73439f8 (http://notmuchmail.org) Emacs/24.3.1 + (x86_64-unknown-linux-gnu) +X-Face: HhBM'cA~ +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: Tue, 05 Jan 2016 20:36:43 -0000 + +On Tue, Jan 05 2016, Michal Sojka 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 +>> +;; +>> +;; 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 -- 2.26.2