From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from localhost (localhost [127.0.0.1]) by arlo.cworth.org (Postfix) with ESMTP id E0F716DE02AC for ; Wed, 16 Nov 2016 09:51:48 -0800 (PST) X-Virus-Scanned: Debian amavisd-new at cworth.org X-Spam-Flag: NO X-Spam-Score: 0.528 X-Spam-Level: X-Spam-Status: No, score=0.528 tagged_above=-999 required=5 tests=[AWL=-0.124, 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 XPNS71R1Y2rT for ; Wed, 16 Nov 2016 09:51:48 -0800 (PST) Received: from guru.guru-group.fi (guru.guru-group.fi [46.183.73.34]) by arlo.cworth.org (Postfix) with ESMTP id E65FF6DE0941 for ; Wed, 16 Nov 2016 09:51:47 -0800 (PST) Received: from guru.guru-group.fi (localhost [IPv6:::1]) by guru.guru-group.fi (Postfix) with ESMTP id 6D2421000CA; Wed, 16 Nov 2016 19:52:32 +0200 (EET) From: Tomi Ollila To: Mark Walters , notmuch@notmuchmail.org Subject: Re: [PATCH v3] emacs: add compatibility functions for emacs 23 In-Reply-To: <1479239325-23638-1-git-send-email-markwalters1009@gmail.com> References: <1479239325-23638-1-git-send-email-markwalters1009@gmail.com> User-Agent: Notmuch/0.23.1+52~ga6dbf3a (https://notmuchmail.org) Emacs/24.5.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.22 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: Wed, 16 Nov 2016 17:51:49 -0000 On Tue, Nov 15 2016, Mark Walters wrote: > Some of the recent changes to the emacs code have used functions > introduced in emacs 24. The functions used are read-char-choice and > setq-local. This changeset adds a file notmuch-compat.el which > contains compatibility functions so that it should work on emacs > 23. > > Note, since these functions are taken almost unchanged from the emacs > source they are copyright the Free Software Foundation, and the header > in the file reflects that. > --- > > Hi > > This is another version of this patch. The previous version is at > id:1477736487-31319-1-git-send-email-markwalters1009@gmail.com > > The main change is to split out the compatibility functions into a > separate file. > > I haven't moved the defadvice code mentioned in > id:87mvh4rigu.fsf@tethera.net into this file as that confuses the > copyright situation (I think that it is all Tomi's code) LGTM. Tomi > > Best wishes > > Mark > > > > > emacs/Makefile.local | 1 + > emacs/notmuch-address.el | 4 +-- > emacs/notmuch-company.el | 3 +- > emacs/notmuch-compat.el | 73 ++++++++++++++++++++++++++++++++++++++++++++ > emacs/notmuch-lib.el | 1 + > emacs/notmuch-maildir-fcc.el | 4 +-- > 6 files changed, 81 insertions(+), 5 deletions(-) > create mode 100644 emacs/notmuch-compat.el > > diff --git a/emacs/Makefile.local b/emacs/Makefile.local > index 6896ff9..442a5e4 100644 > --- a/emacs/Makefile.local > +++ b/emacs/Makefile.local > @@ -3,6 +3,7 @@ > dir := emacs > emacs_sources := \ > $(dir)/notmuch-lib.el \ > + $(dir)/notmuch-compat.el \ > $(dir)/notmuch-parser.el \ > $(dir)/notmuch.el \ > $(dir)/notmuch-query.el \ > diff --git a/emacs/notmuch-address.el b/emacs/notmuch-address.el > index 5b2beef..b3c56cf 100644 > --- a/emacs/notmuch-address.el > +++ b/emacs/notmuch-address.el > @@ -147,11 +147,11 @@ toggles the setting in this buffer." > (interactive) > (if (local-variable-p 'notmuch-address-command) > (kill-local-variable 'notmuch-address-command) > - (setq-local notmuch-address-command 'internal)) > + (notmuch-setq-local notmuch-address-command 'internal)) > (if (boundp 'company-idle-delay) > (if (local-variable-p 'company-idle-delay) > (kill-local-variable 'company-idle-delay) > - (setq-local company-idle-delay nil)))) > + (notmuch-setq-local company-idle-delay nil)))) > > (defun notmuch-address-matching (substring) > "Returns a list of completion candidates matching SUBSTRING. > diff --git a/emacs/notmuch-company.el b/emacs/notmuch-company.el > index b0f9782..ebe2c08 100644 > --- a/emacs/notmuch-company.el > +++ b/emacs/notmuch-company.el > @@ -28,6 +28,7 @@ > ;;; Code: > > (eval-when-compile (require 'cl)) > +(require 'notmuch-lib) > > (defvar notmuch-company-last-prefix nil) > (make-variable-buffer-local 'notmuch-company-last-prefix) > @@ -53,7 +54,7 @@ > ;; internal completion) can still be accessed via standard company > ;; functions, e.g., company-complete. > (unless (eq notmuch-address-command 'internal) > - (setq-local company-idle-delay nil))) > + (notmuch-setq-local company-idle-delay nil))) > > ;;;###autoload > (defun notmuch-company (command &optional arg &rest _ignore) > diff --git a/emacs/notmuch-compat.el b/emacs/notmuch-compat.el > new file mode 100644 > index 0000000..c3d827a > --- /dev/null > +++ b/emacs/notmuch-compat.el > @@ -0,0 +1,73 @@ > +;; Compatibility functions for emacs 23 and 24 pre 24.4 > + > +;; The functions in this file are copied from eamcs 24.4 and are > +;; Copyright (C) 1985-1986, 1992, 1994-1995, 1999-2014 Free Software > +;; Foundation, Inc. > + > +(if (fboundp 'setq-local) > + (defalias 'notmuch-setq-local 'setq-local) > + (defmacro notmuch-setq-local (var val) > + "Set variable VAR to value VAL in current buffer. > + > +Backport of setq-local for emacs without setq-local (pre 24.3)." > + `(set (make-local-variable ',var) ,val))) > + > +(if (fboundp 'read-char-choice) > + (defalias 'notmuch-read-char-choice 'read-char-choice) > + (defun notmuch-read-char-choice (prompt chars &optional inhibit-keyboard-quit) > + "Read and return one of CHARS, prompting for PROMPT. > +Any input that is not one of CHARS is ignored. > + > +If optional argument INHIBIT-KEYBOARD-QUIT is non-nil, ignore > +keyboard-quit events while waiting for a valid input. > + > +This is an exact copy of this function from emacs 24 for use on > +emacs 23, except with the one emacs 24 only function it calls > +inlined." > + (unless (consp chars) > + (error "Called `read-char-choice' without valid char choices")) > + (let (char done show-help (helpbuf " *Char Help*")) > + (let ((cursor-in-echo-area t) > + (executing-kbd-macro executing-kbd-macro) > + (esc-flag nil)) > + (save-window-excursion ; in case we call help-form-show > + (while (not done) > + (unless (get-text-property 0 'face prompt) > + (setq prompt (propertize prompt 'face 'minibuffer-prompt))) > + (setq char (let ((inhibit-quit inhibit-keyboard-quit)) > + (read-key prompt))) > + (and show-help (buffer-live-p (get-buffer helpbuf)) > + (kill-buffer helpbuf)) > + (cond > + ((not (numberp char))) > + ;; If caller has set help-form, that's enough. > + ;; They don't explicitly have to add help-char to chars. > + ((and help-form > + (eq char help-char) > + (setq show-help t) > + ;; This is an inlined copy of help-form-show as that > + ;; was introduced in emacs 24 too. > + (let ((msg (eval help-form))) > + (if (stringp msg) > + (with-output-to-temp-buffer " *Char Help*" > + (princ msg)))))) > + ((memq char chars) > + (setq done t)) > + ((and executing-kbd-macro (= char -1)) > + ;; read-event returns -1 if we are in a kbd macro and > + ;; there are no more events in the macro. Attempt to > + ;; get an event interactively. > + (setq executing-kbd-macro nil)) > + ((not inhibit-keyboard-quit) > + (cond > + ((and (null esc-flag) (eq char ?\e)) > + (setq esc-flag t)) > + ((memq char '(?\C-g ?\e)) > + (keyboard-quit)))))))) > + ;; Display the question with the answer. But without cursor-in-echo-area. > + (message "%s%s" prompt (char-to-string char)) > + char))) > + > +;; End of compatibility functions > + > +(provide 'notmuch-compat) > diff --git a/emacs/notmuch-lib.el b/emacs/notmuch-lib.el > index 1f0d167..5dc6797 100644 > --- a/emacs/notmuch-lib.el > +++ b/emacs/notmuch-lib.el > @@ -27,6 +27,7 @@ > (require 'mm-view) > (require 'mm-decode) > (require 'cl) > +(require 'notmuch-compat) > > (unless (require 'notmuch-version nil t) > (defconst notmuch-emacs-version "unknown" > diff --git a/emacs/notmuch-maildir-fcc.el b/emacs/notmuch-maildir-fcc.el > index ea75bb9..a754b60 100644 > --- a/emacs/notmuch-maildir-fcc.el > +++ b/emacs/notmuch-maildir-fcc.el > @@ -249,7 +249,7 @@ If CREATE is non-nil then create the folder if necessary." > ;; typo, or just the user want a new folder, let the user decide > ;; how to deal with it. > (error > - (let ((response (read-char-choice > + (let ((response (notmuch-read-char-choice > "Insert failed: (r)etry, (c)reate folder, (i)gnore, or (e)dit the header? " > '(?r ?c ?i ?e)))) > (case response > @@ -335,7 +335,7 @@ if needed." > ;; fix it in some way. > (let* ((prompt (format "Fcc %s is not a maildir: (r)etry, (c)reate folder, (i)gnore, or (e)dit the header? " > fcc-header)) > - (response (read-char-choice prompt '(?r ?c ?i ?e)))) > + (response (notmuch-read-char-choice prompt '(?r ?c ?i ?e)))) > (case response > (?r (notmuch-maildir-fcc-file-fcc fcc-header)) > (?c (if (file-writable-p fcc-header) > -- > 2.1.4 > > _______________________________________________ > notmuch mailing list > notmuch@notmuchmail.org > https://notmuchmail.org/mailman/listinfo/notmuch