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 4990B6DE0941 for ; Tue, 15 Nov 2016 11:48:52 -0800 (PST) X-Virus-Scanned: Debian amavisd-new at cworth.org X-Spam-Flag: NO X-Spam-Score: 0.561 X-Spam-Level: X-Spam-Status: No, score=0.561 tagged_above=-999 required=5 tests=[AWL=-0.569, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, FREEMAIL_REPLY=1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_PASS=-0.001] 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 2oK7S0C3Iydb for ; Tue, 15 Nov 2016 11:48:51 -0800 (PST) Received: from mail-wm0-f66.google.com (mail-wm0-f66.google.com [74.125.82.66]) by arlo.cworth.org (Postfix) with ESMTPS id AFEC26DE0222 for ; Tue, 15 Nov 2016 11:48:50 -0800 (PST) Received: by mail-wm0-f66.google.com with SMTP id g23so3515235wme.1 for ; Tue, 15 Nov 2016 11:48:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=220Zr3xfgiWIaQeHHHJgasmoWceXcUoc4AmrRETjXLU=; b=MnV+wOvHR1V2OJ2O+IH65wdprUWFY6VIy+iOgrPJSWCoesqG9pKX7Duj2EsZNqgFKE GqkCDRzpUCHXripdIOKg99HgsJPsaiTIwLboKVk7TYQOzQAJjiUG33UpXO9HoLp1p/Zr wYfBJyXmKnOZhZ0xXKQVu13p/CQKjykaVmm46L/vRDI5QbYv7h9NcaiC6zaM+TGuwvkZ viE9jnF22h9CITg8fu9JCHcWwOpGjOPpk7VV+fNvH71rv4MgyAxZhgG1C3akcM8eJ7YW NMqm1++BMbkTYhG4vGV+zleMb46MjLZm2K1kdqDrzE/yn9SUWuPf9SYOXIBEp1vJMB27 4AUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=220Zr3xfgiWIaQeHHHJgasmoWceXcUoc4AmrRETjXLU=; b=UL/GYeAoYZu9QnAeYJITrx5xXQFaS9yOV5LmqJ+Y0RI61wIxXsyVU7V+q8Y+9dHuO2 Qiq/dfyDK8dAxt1VFiXm2k2tMVzz6KjhEUrOHrxO9A1Y+eTwFQ1pYloTMFwwuUSGkuUY 7v8uOo2j8UQRFJ8j8JYfJro0JFZ+DLL7Me1z0gYKforN9H9suMIUR9r9V7S9iOohsaAP LTTgpIrbwBizMG8rds3lCKF2SZjJNiI8+s/9MwB/j2jG7CzsVELgx6ifnMbcejsBL6gK 7F9wESUFsugaEL6wj8llcPPwJME1GQFJuIraWh5kgWNWeeUuL++VaXzEaPCr5Upsa4L0 bEJQ== X-Gm-Message-State: ABUngveGMfpWn6DoWQOBaQVbc7kU9ykTFj6tJkiybzq1pp1Eu0x+xXO3yg4EIYYCWdH3Fw== X-Received: by 10.28.173.131 with SMTP id w125mr1572721wme.0.1479239328662; Tue, 15 Nov 2016 11:48:48 -0800 (PST) Received: from localhost (5751dfa2.skybroadband.com. [87.81.223.162]) by smtp.gmail.com with ESMTPSA id dj5sm3699570wjb.34.2016.11.15.11.48.47 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 15 Nov 2016 11:48:48 -0800 (PST) From: Mark Walters To: notmuch@notmuchmail.org Subject: [PATCH v3] emacs: add compatibility functions for emacs 23 Date: Tue, 15 Nov 2016 19:48:45 +0000 Message-Id: <1479239325-23638-1-git-send-email-markwalters1009@gmail.com> X-Mailer: git-send-email 2.1.4 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: Tue, 15 Nov 2016 19:48:52 -0000 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) 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