annotate lisp/password-cache.el @ 106768:21fd634f447a

Make line<->pixel_y conversion macros aware of native menu/tool bars. They are placed above the internal border. This supersedes special treatment of native tool bars in the display code. This fixes wrong display position of native menu bars and bogus mouse highlighting of native tool bars, both of which can be found when internal border width is large. Also it fixes wrong flashed part on visible bell with native menu bars. * frame.h (FRAME_TOP_MARGIN_HEIGHT): New macro. (FRAME_LINE_TO_PIXEL_Y, FRAME_PIXEL_Y_TO_LINE): Take account of pseudo windows above internal border. * window.h (WINDOW_MENU_BAR_P, WINDOW_TOOL_BAR_P): New macros. (WINDOW_TOP_EDGE_Y, WINDOW_BOTTOM_EDGE_Y): Take account of pseudo windows above internal border. * xdisp.c (get_glyph_string_clip_rects, init_glyph_string): Don't treat tool bar windows specially. * xfns.c (x_set_tool_bar_lines): Take account of menu bar height. * xterm.c (x_after_update_window_line): Don't treat tool bar windows specially. (XTflash): Take account of menu bar height. * w32term.c (x_after_update_window_line): Don't treat tool bar windows specially.
author YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
date Sat, 09 Jan 2010 13:16:32 +0900
parents a9dc0e7c3f2b
children 1d1d5d9bd884
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
87036
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1 ;;; password-cache.el --- Read passwords, possibly using a password cache.
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
2
100908
a9dc0e7c3f2b Add 2009 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 94678
diff changeset
3 ;; Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2008, 2009
87036
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
4 ;; Free Software Foundation, Inc.
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
5
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
6 ;; Author: Simon Josefsson <simon@josefsson.org>
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
7 ;; Created: 2003-12-21
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
8 ;; Keywords: password cache passphrase key
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
9
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
11
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
12 ;; GNU Emacs is free software: you can redistribute it and/or modify
87036
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
14 ;; the Free Software Foundation, either version 3 of the License, or
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
15 ;; (at your option) any later version.
87036
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
16
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
20 ;; GNU General Public License for more details.
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
21
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
23 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
87036
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
24
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
25 ;;; Commentary:
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
26
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
27 ;; Greatly influenced by pgg.el written by Daiki Ueno, with timer
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
28 ;; fixes for XEmacs by Katsumi Yamaoka. In fact, this is mostly just
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
29 ;; a rip-off.
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
30 ;;
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
31 ;; (password-read "Password? " "test")
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
32 ;; ;; Minibuffer prompt for password.
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
33 ;; => "foo"
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
34 ;;
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
35 ;; (password-cache-add "test" "foo")
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
36 ;; => nil
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
37
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
38 ;; (password-read "Password? " "test")
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
39 ;; ;; No minibuffer prompt
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
40 ;; => "foo"
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
41 ;;
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
42 ;; (password-read "Password? " "test")
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
43 ;; ;; No minibuffer prompt
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
44 ;; => "foo"
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
45 ;;
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
46 ;; ;; Wait `password-cache-expiry' seconds.
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
47 ;;
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
48 ;; (password-read "Password? " "test")
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
49 ;; ;; Minibuffer prompt for password is back.
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
50 ;; => "foo"
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
51
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
52 ;;; Code:
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
53
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
54 (defcustom password-cache t
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
55 "Whether to cache passwords."
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
56 :group 'password
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
57 :type 'boolean)
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
58
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
59 (defcustom password-cache-expiry 16
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
60 "How many seconds passwords are cached, or nil to disable expiring.
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
61 Whether passwords are cached at all is controlled by `password-cache'."
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
62 :group 'password
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
63 :type '(choice (const :tag "Never" nil)
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
64 (integer :tag "Seconds")))
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
65
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
66 (defvar password-data (make-vector 7 0))
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
67
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
68 (defun password-read-from-cache (key)
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
69 "Obtain passphrase for KEY from time-limited passphrase cache.
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
70 Custom variables `password-cache' and `password-cache-expiry'
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
71 regulate cache behavior."
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
72 (and password-cache
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
73 key
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
74 (symbol-value (intern-soft key password-data))))
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
75
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
76 (defun password-read (prompt &optional key)
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
77 "Read password, for use with KEY, from user, or from cache if wanted.
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
78 KEY indicate the purpose of the password, so the cache can
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
79 separate passwords. The cache is not used if KEY is nil. It is
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
80 typically a string.
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
81 The variable `password-cache' control whether the cache is used."
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
82 (or (password-read-from-cache key)
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
83 (read-passwd prompt)))
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
84
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
85 (defun password-read-and-add (prompt &optional key)
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
86 "Read password, for use with KEY, from user, or from cache if wanted.
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
87 Then store the password in the cache. Uses `password-read' and
87037
f2417ea1baac (top-level): Don't require cl when compiling.
Glenn Morris <rgm@gnu.org>
parents: 87036
diff changeset
88 `password-cache-add'. Custom variables `password-cache' and
f2417ea1baac (top-level): Don't require cl when compiling.
Glenn Morris <rgm@gnu.org>
parents: 87036
diff changeset
89 `password-cache-expiry' regulate cache behavior.
f2417ea1baac (top-level): Don't require cl when compiling.
Glenn Morris <rgm@gnu.org>
parents: 87036
diff changeset
90
f2417ea1baac (top-level): Don't require cl when compiling.
Glenn Morris <rgm@gnu.org>
parents: 87036
diff changeset
91 Warning: the password is cached without checking that it is
f2417ea1baac (top-level): Don't require cl when compiling.
Glenn Morris <rgm@gnu.org>
parents: 87036
diff changeset
92 correct. It is better to check the password before caching. If
f2417ea1baac (top-level): Don't require cl when compiling.
Glenn Morris <rgm@gnu.org>
parents: 87036
diff changeset
93 you must use this function, take care to check passwords and
f2417ea1baac (top-level): Don't require cl when compiling.
Glenn Morris <rgm@gnu.org>
parents: 87036
diff changeset
94 remove incorrect ones from the cache."
87036
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
95 (let ((password (password-read prompt key)))
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
96 (when (and password key)
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
97 (password-cache-add key password))
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
98 password))
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
99
87037
f2417ea1baac (top-level): Don't require cl when compiling.
Glenn Morris <rgm@gnu.org>
parents: 87036
diff changeset
100 (make-obsolete 'password-read-and-add 'password-read "23.1")
f2417ea1baac (top-level): Don't require cl when compiling.
Glenn Morris <rgm@gnu.org>
parents: 87036
diff changeset
101
87036
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
102 (defun password-cache-remove (key)
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
103 "Remove password indexed by KEY from password cache.
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
104 This is typically run be a timer setup from `password-cache-add',
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
105 but can be invoked at any time to forcefully remove passwords
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
106 from the cache. This may be useful when it has been detected
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
107 that a password is invalid, so that `password-read' query the
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
108 user again."
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
109 (let ((password (symbol-value (intern-soft key password-data))))
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
110 (when password
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
111 (if (fboundp 'clear-string)
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
112 (clear-string password)
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
113 (fillarray password ?_))
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
114 (unintern key password-data))))
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
115
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
116 (defun password-cache-add (key password)
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
117 "Add password to cache.
87037
f2417ea1baac (top-level): Don't require cl when compiling.
Glenn Morris <rgm@gnu.org>
parents: 87036
diff changeset
118 The password is removed by a timer after `password-cache-expiry' seconds."
87036
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
119 (when (and password-cache-expiry (null (intern-soft key password-data)))
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
120 (run-at-time password-cache-expiry nil
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
121 #'password-cache-remove
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
122 key))
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
123 (set (intern key password-data) password)
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
124 nil)
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
125
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
126 (defun password-reset ()
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
127 "Clear the password cache."
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
128 (interactive)
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
129 (fillarray password-data 0))
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
130
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
131 (provide 'password-cache)
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
132
93975
1e3a407766b9 Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 87665
diff changeset
133 ;; arch-tag: ab160494-16c8-4c68-a4a1-73eebf6686e5
87036
fcc71de0dc1c Move to here from gnus/password.el.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
134 ;;; password-cache.el ends here