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 7F8136DE0297 for ; Sat, 29 Oct 2016 03:21:33 -0700 (PDT) X-Virus-Scanned: Debian amavisd-new at cworth.org X-Spam-Flag: NO X-Spam-Score: 0.55 X-Spam-Level: X-Spam-Status: No, score=0.55 tagged_above=-999 required=5 tests=[AWL=-0.580, 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 lzz_Z5i7XM0f for ; Sat, 29 Oct 2016 03:21:32 -0700 (PDT) Received: from mail-wm0-f66.google.com (mail-wm0-f66.google.com [74.125.82.66]) by arlo.cworth.org (Postfix) with ESMTPS id 0092F6DE00BD for ; Sat, 29 Oct 2016 03:21:31 -0700 (PDT) Received: by mail-wm0-f66.google.com with SMTP id c17so10807609wmc.3 for ; Sat, 29 Oct 2016 03:21:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=2vNDNZABAgugGKa9UzQrf4OOYZO3ZctVtzafncGkgcc=; b=bdydrDF0g9ZVlLs4siFWAksenl6RaSoOW0FAJUXQMD+IQ3EM7Wt1JGkV+adhptiz96 tChggIHVWej5vJj8kvdPy4CQS7PPLz6xpyyk6LdYIMidBMrIdVfNNOgbmbpfbe2xhpeA 0aVowjY+CM1B2UPDs6pVwamFKUXMmxeCg4To6mW2WARblJpA7lBE0oZkjwzDMnLzUksE m5VloC8TjsP/M2oltSSi3NI6YFfhTr6UsFJagA8RKTE0E/n28CBNTrPSO4P2cvbQBa/T cPLgb4hEVHPSUMbnXIj7v1ANizqOuZH1YOKyXQ6jbXiBM6LYF7wzy4aTiPznJBU7ee7q 6uSg== 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=2vNDNZABAgugGKa9UzQrf4OOYZO3ZctVtzafncGkgcc=; b=GcvFz6bSOBE4zWFWfZ1N8CNGcYpBpezQRtYx8l+122CXUsokbRMC4VvG+cvlb9aJVl js1+G4+kucDCEwbCgIOSTFprkX754WOmc60Q0W0/T25etLvuir9x+JwnaVckp0r6uCt6 JAPWRibgdfLhVvL/kGFq4+Mg7mL89+7HHKU/lwl1Qlnuj8fDbBzzZOXAJloa/VDXgWjk MpHjNJCRwfqEXPnO1PJ4O8AcAtn65bXMzVGyFwxVXXa0nKiCzU+uyeDxwlAEy3ICY6KC 2g7U0A9m2b+w9McmtyDSoN1tIw4I46p/Aa2uq+AvqjJOTu6nKS8muF+2QUh7aFsYZYrC I/sQ== X-Gm-Message-State: ABUngvfzgD8yN+PV20IuAddL2Z7h5xJmmWRTBe16WY9ki7iqJit61rmdA7MbSbz2got1TQ== X-Received: by 10.28.148.200 with SMTP id w191mr2433612wmd.43.1477736490000; Sat, 29 Oct 2016 03:21:30 -0700 (PDT) Received: from localhost (5751dfa2.skybroadband.com. [87.81.223.162]) by smtp.gmail.com with ESMTPSA id q125sm13552872wmd.2.2016.10.29.03.21.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 29 Oct 2016 03:21:29 -0700 (PDT) From: Mark Walters To: notmuch@notmuchmail.org Subject: [PATCH v2] emacs: add compatability functions for emacs 23 Date: Sat, 29 Oct 2016 11:21:27 +0100 Message-Id: <1477736487-31319-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: Sat, 29 Oct 2016 10:21:33 -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 compatability functions to notmuch-lib so that it should work on emacs 23. --- Version 1 of this patch (with some discussion) is at id:1477191835-17828-1-git-send-email-markwalters1009@gmail.com The general consensus is that we should not define functions outside our namespace, even when they are just backports of functions from later emacs. rlb on irc gave one additional reason not mentioned earlier in the thread -- it could be that some other package choses to test for the setq-local say and perhaps draws incorrect conclusions about the environment. In particular this would be a case where we were breaking otherwise working packages. I think it makes sense to included the whole of read-char-choice, not some cutdown version, as we may use other functionality from it later (eg help-forms etc), and it would be confusing if the change only worked on emacs 24. Finally, I have two questions 1) please could someone with emacs 23 see if the testsuite passes? My system with emacs 23 is so outdated the test suite doesn't run (wrong python versions I think). 2) Is the copyright notice I have included above the two functions sufficient, and suitably placed? Best wishes Mark emacs/notmuch-address.el | 4 +-- emacs/notmuch-company.el | 3 +- emacs/notmuch-lib.el | 72 ++++++++++++++++++++++++++++++++++++++++++++ emacs/notmuch-maildir-fcc.el | 4 +-- 4 files changed, 78 insertions(+), 5 deletions(-) diff --git a/emacs/notmuch-address.el b/emacs/notmuch-address.el index b2e1fba..1af3263 100644 --- a/emacs/notmuch-address.el +++ b/emacs/notmuch-address.el @@ -136,11 +136,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 168315f..5d75c14 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-lib.el b/emacs/notmuch-lib.el index 1f0d167..bb53170 100644 --- a/emacs/notmuch-lib.el +++ b/emacs/notmuch-lib.el @@ -966,6 +966,78 @@ status." (defvar notmuch-show-process-crypto nil) (make-variable-buffer-local 'notmuch-show-process-crypto) +;; Compatibility functions for emacs 23. + +;; The functions in this section 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 compatability functions + (provide 'notmuch-lib) ;; Local Variables: diff --git a/emacs/notmuch-maildir-fcc.el b/emacs/notmuch-maildir-fcc.el index 95e5650..7fbcc8c 100644 --- a/emacs/notmuch-maildir-fcc.el +++ b/emacs/notmuch-maildir-fcc.el @@ -242,7 +242,7 @@ 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 @@ -328,7 +328,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