]> git.eshelyaron.com Git - emacs.git/commitdiff
Make NSM prompting clearer
authorLars Ingebrigtsen <larsi@gnus.org>
Fri, 5 Feb 2016 03:32:35 +0000 (14:32 +1100)
committerLars Ingebrigtsen <larsi@gnus.org>
Fri, 5 Feb 2016 03:32:35 +0000 (14:32 +1100)
* lisp/net/nsm.el (nsm-query-user): Use read-multiple-choice
to prompt in a nicer way (bug#19368).

lisp/net/nsm.el

index ee8b55bf19256ccd8eb9c19776d16a40ef6ac057..b039d11594666aee67cbee28523937885236489c 100644 (file)
@@ -297,7 +297,11 @@ unencrypted."
       nil
     (let ((response
           (condition-case nil
-              (nsm-query-user message args (nsm-format-certificate status))
+               (intern
+                (car (split-string
+                      (nsm-query-user message args
+                                      (nsm-format-certificate status))))
+                obarray)
             ;; Make sure we manage to close the process if the user hits
             ;; `C-g'.
             (quit 'no)
@@ -309,6 +313,7 @@ unencrypted."
 
 (defun nsm-query-user (message args cert)
   (let ((buffer (get-buffer-create "*Network Security Manager*")))
+    ;; First format the certificate and warnings.
     (with-help-window buffer
       (with-current-buffer buffer
        (erase-buffer)
@@ -320,28 +325,15 @@ unencrypted."
          ;; Fill the first line of the message, which usually
          ;; contains lots of explanatory text.
          (fill-region (point) (line-end-position)))))
-    (let ((responses '((?n . no)
-                      (?s . session)
-                      (?a . always)))
-         (prefix "")
-         (cursor-in-echo-area t)
-         response)
-      (while (not response)
-       (setq response
-             (cdr
-              (assq (downcase
-                     (read-char
-                      (concat prefix
-                              "Continue connecting? (No, Session only, Always) ")))
-                    responses)))
-       (unless response
-         (ding)
-         (setq prefix "Invalid choice.  ")))
-      (kill-buffer buffer)
-      ;; If called from a callback, `read-char' will insert things
-      ;; into the pending input.  Clear that.
-      (clear-this-command-keys)
-      response)))
+    ;; Then ask the user what to do about it.
+    (unwind-protect
+        (cadr
+         (read-multiple-choice
+          "Continue connecting?"
+          '((?a "always" "Accept this certificate this session and for all future sessions.")
+            (?s "session only" "Accept this certificate this session only.")
+            (?n "no" "Refuse to use this certificate, and close the connection."))))
+      (kill-buffer buffer))))
 
 (defun nsm-save-host (host port status what permanency)
   (let* ((id (nsm-id host port))