Re: [PATCH v3] emacs: add compatibility functions for emacs 23

2016-11-17 Thread David Bremner
Mark Walters  writes:

> 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.

pushed to master and release
___
notmuch mailing list
notmuch@notmuchmail.org
https://notmuchmail.org/mailman/listinfo/notmuch


Re: [PATCH v3] emacs: add compatibility functions for emacs 23

2016-11-16 Thread Tomi Ollila
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-markwalters1...@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@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  arg  _ignore)
> diff --git a/emacs/notmuch-compat.el b/emacs/notmuch-compat.el
> new file mode 100644
> index 000..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  
> 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)

[PATCH v3] emacs: add compatibility functions for emacs 23

2016-11-15 Thread Mark Walters
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-markwalters1...@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@tethera.net into this file as that confuses the
copyright situation (I think that it is all Tomi's code)

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  arg  _ignore)
diff --git a/emacs/notmuch-compat.el b/emacs/notmuch-compat.el
new file mode 100644
index 000..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  
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