Locate password icon in global-mode-string
authorMichael Albinus <michael.albinus@gmx.de>
Fri, 18 Oct 2024 15:47:43 +0000 (17:47 +0200)
committerMichael Albinus <michael.albinus@gmx.de>
Fri, 18 Oct 2024 15:47:43 +0000 (17:47 +0200)
* doc/emacs/mini.texi (Passwords): Precise the location of the
password icon.

* doc/lispref/minibuf.texi (Reading a Password): The password icon
is added to global-mode-string.

* lisp/auth-source.el (read-passwd--mode-line-buffer): Remove.
(read-passwd--hide-password): Fix docstring.
(read-passwd-toggle-visibility): Don't use
`read-passwd--mode-line-buffer'.  Check for `read-passwd-mode'.
Force update in all mode lines.
(read-passwd-mode): Set `read-passwd--mode-line-icon' in
`global-mode-string'.  (Bug#73768)

doc/emacs/mini.texi
doc/lispref/minibuf.texi
lisp/auth-source.el

index 3be9b76ad88b6110b9ca34974407ed7b8881b0fc..b1361695211a3114100a601665471428d1a54f64 100644 (file)
@@ -975,8 +975,8 @@ password.  You may type either @key{RET} or @key{ESC} to submit the
 password.  Any other self-inserting character key inserts the associated
 character into the password, and all other input is ignored.
 
-  There is also an icon at the front of the mode line indicating the
-password visibility.  Clicking @kbd{mouse-1} on it toggles the password
+  There is also an icon in the mode line indicating the password
+visibility.  Clicking @kbd{mouse-1} on it toggles the password
 visibility as well.
 
 @node Yes or No Prompts
index f0b7fef30c7ed4d6bd564d4a22241094a3df7362..c5b9176d628831dea291f83083e33ff7226955df 100644 (file)
@@ -2562,9 +2562,9 @@ This function uses @code{read-passwd-mode}, a minor mode.  It binds two
 keys in the minbuffer: @kbd{C-u} (@code{delete-minibuffer-contents})
 deletes the password, and @kbd{TAB}
 (@code{read-passwd--toggle-visibility}) toggles the visibility of the
-password.  There is also an additional icon in the mode-line.  Clicking
-on this icon with @key{mouse-1} toggles the visibility of the password
-as well.
+password.  There is also an additional icon in the mode-line's
+@code{global-mode-string}.  Clicking on this icon with @key{mouse-1}
+toggles the visibility of the password as well.
 @end defun
 
 @node Minibuffer Commands
index 90b58f560c0b19d4fb716aaa3f51ec97dfdfc877..557d360bc6af18758c5844c4a6a9a8c0b61eb303 100644 (file)
@@ -2467,14 +2467,11 @@ point is moved into the passwords (see `authinfo-hide-elements').
   :version "30.1"
   :help-echo "mouse-1: Toggle password visibility")
 
-(defvar read-passwd--mode-line-buffer nil
-  "Buffer to modify `mode-line-format' for showing/hiding passwords.")
-
 (defvar read-passwd--mode-line-icon nil
   "Propertized mode line icon for showing/hiding passwords.")
 
 (defvar read-passwd--hide-password t
-  "Toggle whether password should be hidden in minubuffer.")
+  "Toggle whether password should be hidden in minibuffer.")
 
 (defun read-passwd--hide-password ()
   "Make password in minibuffer hidden or visible."
@@ -2497,8 +2494,8 @@ Adapt also mode line."
     ;; FIXME: In case of a recursive minibuffer, this may select the wrong
     ;; mini-buffer.
     (with-current-buffer (window-buffer win)
-      (setq read-passwd--hide-password (not read-passwd--hide-password))
-      (with-current-buffer read-passwd--mode-line-buffer
+      (when (memq 'read-passwd-mode local-minor-modes)
+        (setq read-passwd--hide-password (not read-passwd--hide-password))
         (setq read-passwd--mode-line-icon
               `(:propertize
                 ,(if icon-preference
@@ -2514,8 +2511,8 @@ Adapt also mode line."
                      (define-key map [mode-line mouse-1]
                                  #'read-passwd-toggle-visibility)
                      map))))
-        (force-mode-line-update))
-      (read-passwd--hide-password))))
+        (force-mode-line-update 'all)
+        (read-passwd--hide-password)))))
 
 (defvar read-passwd-map
   ;; BEWARE: `defconst' would purecopy it, breaking the sharing with
@@ -2534,25 +2531,18 @@ Adapt also mode line."
   :keymap read-passwd-map
   :version "30.1"
 
-  (setq read-passwd--hide-password nil
-        ;; Stolen from `eldoc-minibuffer-message'.
-        read-passwd--mode-line-buffer
-        (window-buffer
-         (or (window-in-direction 'above (minibuffer-window))
-            (minibuffer-selected-window)
-            (get-largest-window))))
+  (setq read-passwd--hide-password nil)
+  (or global-mode-string (setq global-mode-string '("")))
 
-  (if read-passwd-mode
-      (with-current-buffer read-passwd--mode-line-buffer
+  (let ((mode-string '(:eval read-passwd--mode-line-icon)))
+    (if read-passwd-mode
         ;; Add `read-passwd--mode-line-icon'.
-        (when (listp mode-line-format)
-          (setq mode-line-format
-                (cons '(:eval read-passwd--mode-line-icon)
-                     mode-line-format))))
-    (with-current-buffer read-passwd--mode-line-buffer
+        (or (member mode-string global-mode-string)
+            (setq global-mode-string
+                 (append global-mode-string (list mode-string))))
       ;; Remove `read-passwd--mode-line-icon'.
-      (when (listp mode-line-format)
-        (setq mode-line-format (cdr mode-line-format)))))
+      (setq global-mode-string
+           (delete mode-string global-mode-string))))
 
   (when read-passwd-mode
     (read-passwd-toggle-visibility)))