Merge branch 'master' into feature/tree-sitter

This commit is contained in:
Yuan Fu 2022-10-06 11:06:07 -07:00
commit cea1e95d38
No known key found for this signature in database
GPG key ID: 56E19BC57664A442
69 changed files with 165 additions and 150 deletions

View file

@ -443,6 +443,25 @@ We recommend using either the built-in 'display-line-numbers-mode', or
the 'nlinum' package from GNU ELPA instead. The former has better
performance, but the latter is closer to a drop-in replacement.
1. To use 'display-line-numbers-mode', add something like this to your
Init file:
(global-display-line-numbers-mode 1)
;; Alternatively, to use it only in programming modes:
(add-hook 'prog-mode-hook #'display-line-numbers-mode)
2. To use 'nlinum', add this to your Init file:
(package-install 'nlinum)
(global-nlinum-mode 1)
;; Alternatively, to use it only in programming modes:
(add-hook 'prog-mode-hook #'nlinum-mode)
3. To continue using the obsolete package 'linum', add this line to
your Init file, in addition to any existing customizations:
(require 'linum)
---
** The thumbs.el library is now obsolete.
We recommend using 'M-x image-dired' instead.
@ -3237,8 +3256,8 @@ given predicate in the specified sequence.
+++
** New function 'seq-keep'.
This is like 'seq-map', but removes all non-nil results from the
returned list.
This is like 'seq-map', but removes all nil results from the returned
list.
** Themes

View file

@ -914,6 +914,15 @@ The following %-sequences are provided:
;;; `apm' interface for BSD.
;; This function is a wrapper on `call-process' that return the
;; standard output in a string. We are using it instead
;; `shell-command-to-string' because this last one is trying to run
;; PROGRAM on the remote host if the buffer is remote.
(defun battery--call-process-to-string (program &rest args)
(with-output-to-string
(with-current-buffer standard-output
(apply #'call-process program nil t nil args))))
(defun battery-bsd-apm ()
"Get APM status information from BSD apm binary.
The following %-sequences are provided:
@ -929,13 +938,16 @@ The following %-sequences are provided:
%t Remaining time (to charge or discharge) in the form `h:min'"
(let* ((os-name (car (split-string
;; FIXME: Can't we use something like `system-type'?
(shell-command-to-string "/usr/bin/uname"))))
(battery--call-process-to-string
(executable-find "uname")))))
(apm-flag (pcase os-name
("OpenBSD" "mP")
("FreeBSD" "st")
(_ "ms")))
(apm-cmd (concat "/usr/sbin/apm -abl" apm-flag))
(apm-output (split-string (shell-command-to-string apm-cmd)))
(apm-args (concat "-abl" apm-flag))
(apm-output (split-string
(battery--call-process-to-string
(executable-find "apm") apm-args)))
(indices (pcase os-name
;; FreeBSD's manpage documents that multiple
;; outputs are ordered by "the order in which

View file

@ -2436,10 +2436,14 @@ If NOSAVE is non-nil, the package is not removed from
"Reinstall package PKG.
PKG should be either a symbol, the package name, or a `package-desc'
object."
(interactive (list (intern (completing-read
"Reinstall package: "
(mapcar #'symbol-name
(mapcar #'car package-alist))))))
(interactive
(progn
(package--archives-initialize)
(list (intern (completing-read
"Reinstall package: "
(mapcar #'symbol-name
(mapcar #'car package-alist)))))))
(package--archives-initialize)
(package-delete
(if (package-desc-p pkg) pkg (cadr (assq pkg package-alist)))
'force 'nosave)

View file

@ -1519,12 +1519,8 @@ If you are unsure, use synchronous version of this function
(process-send-eof (epg-context-process context))))
;; Normal (or cleartext) signature.
(if (epg-data-file signature)
(epg--start context (if (eq (epg-context-protocol context) 'CMS)
(list "--verify" "--" (epg-data-file signature))
(list "--" (epg-data-file signature))))
(epg--start context (if (eq (epg-context-protocol context) 'CMS)
'("--verify" "-")
'("-")))
(epg--start context (list "--verify" "--" (epg-data-file signature)))
(epg--start context '("--verify" "-"))
(if (eq (process-status (epg-context-process context)) 'run)
(process-send-string (epg-context-process context)
(epg-data-string signature)))

View file

@ -1623,7 +1623,7 @@ found."
(if (equal x-locale "C")
;; Treat the C locale specially, as it means "ascii" under X.
'ascii
(let ((locale (downcase x-locale)))
(let ((locale (locale-translate (downcase x-locale))))
(or (locale-name-match locale locale-preferred-coding-systems)
(when locale
(if (string-match "\\.\\([^@]+\\)" locale)

View file

@ -1557,7 +1557,7 @@ a skeleton (see `skeleton-insert').")
'(if (and (boundp 'reftex-mode) reftex-mode) (reftex-label "table"))
\n _)
("figure" nil > _ \n "\\caption{" > (skeleton-read "Caption: ") "}" > \n
'(if (and (boundp 'reftex-mode) reftex-mode) (reftex-label "table"))))
'(if (and (boundp 'reftex-mode) reftex-mode) (reftex-label "figure"))))
"Skeleton element to use for the body of particular environments.
Every element of the list has the form (NAME . SKEL-ELEM) where NAME is
the name of the environment and SKEL-ELEM is an element to use in

View file

@ -1651,10 +1651,12 @@ process_quit_flag (void)
void
probably_quit (void)
{
specpdl_ref gc_count = inhibit_garbage_collection ();
if (!NILP (Vquit_flag) && NILP (Vinhibit_quit))
process_quit_flag ();
else if (pending_signals)
process_pending_signals ();
unbind_to (gc_count, Qnil);
}
DEFUN ("signal", Fsignal, Ssignal, 2, 2, 0,

View file

@ -1551,7 +1551,6 @@ - (NSRect) frame
#ifdef NS_IMPL_COCOA
[[FRAME_NS_VIEW (SELECTED_FRAME ()) window] makeKeyWindow];
#endif
discard_menu_items ();
}
}
@ -1599,6 +1598,7 @@ - (NSRect) frame
if (error_name)
{
unbind_to (specpdl_count, Qnil);
discard_menu_items ();
[dialog close];
error ("%s", error_name);
@ -1608,6 +1608,9 @@ - (NSRect) frame
popup_activated_flag = 1;
tem = [dialog runDialogAt: p];
unbind_to (specpdl_count, Qnil);
/* This must come *after* unuse_menu_items. */
discard_menu_items ();
return tem;
}

View file

@ -8213,6 +8213,8 @@ init_window_once (void)
minibuf_selected_window = Qnil;
staticpro (&minibuf_selected_window);
old_selected_window = Qnil;
staticpro (&old_selected_window);
pdumper_do_now_and_after_late_load (init_window_once_for_pdumper);
}

View file

@ -29252,7 +29252,11 @@ x_term_init (Lisp_Object display_name, char *xrm_option, char *resource_name)
#endif
#ifdef HAVE_X_I18N
xim_initialize (dpyinfo, resource_name);
/* Avoid initializing input methods if the X library does not
support Emacs's locale. When the current locale is not
supported, decoding input method strings becomes undefined. */
if (XSupportsLocale ())
xim_initialize (dpyinfo, resource_name);
#endif
xsettings_initialize (dpyinfo);

View file

@ -1,17 +1,14 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Comment: Alice's OpenPGP certificate
mQGiBGFQyDcRBACmAI6cfY3fM02vb9JtC1BS19boKXbBsDoVrD9qRf8tDFROOpO3
ZMlbuz+O9Vnljo6Y4WZGnyeWWAMqCditMOfr1cLbux77wSrmAVgZ9exwtGzkmUhM
xcptzKuyod8NuhghXbJgVbfJZ6HlBkk4kiWv98iJQwUBZJfjBUfIv+acjwCg4M2i
Ifu2A3UYl9VqF7qfcDOZudEEAI7V35yfsBDnr9ndKqdGYNw0alX9BEG3KwnAe0fF
O1jDVW12Y/bwnyyrRTrz6o1G8dj7M4XVZQb5PpT9mpNzOSZ6yxqhg+foeJwn2JkD
vyP+kMYU7SZ/tWuMOCdzN95Ki1rf+ti7pLnSMqKx+t3vOWwQbtnsbI6RCLLwETPA
esghA/0X3Dw7cdiE5Xq4TRaPSGViCWP4ekL2KYKqmKv6M/4f2pgFNJY7C+2SIiiP
T62zFlIjs5tF2Df34/M5mh4Vx6E8341r55+XO++kfFWJ5QjLiydRAY6ochG9IFgB
xyBCkCNpiby9PpKyPodedBScdMxIAe4eJR7rG/j9gFC1MypBurQnSm9obm55IFJv
Y2tldHMgPGpvaG5ueS5yb2NrZXRzQGdmeS5vcmc+iHgEExECADgWIQRIVz1DPzm4
REDIXNtltQG5ACv6lwUCYVDINwIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK
CRBltQG5ACv6l4iZAKCqldroRYH7vUzVV0Uv1NcDVcpLngCgmEoLVxGLKSwDEXNq
qjRDzDRpReg=
=/l51
mDMEXEcE6RYJKwYBBAHaRw8BAQdArjWwk3FAqyiFbFBKT4TzXcVBqPTB3gmzlC/U
b7O1u120JkFsaWNlIExvdmVsYWNlIDxhbGljZUBvcGVucGdwLmV4YW1wbGU+iJAE
ExYIADgCGwMFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AWIQTrhbtfozp14V6UTmPy
MVUMT0fjjgUCXaWfOgAKCRDyMVUMT0fjjukrAPoDnHBSogOmsHOsd9qGsiZpgRnO
dypvbm+QtXZqth9rvwD9HcDC0tC+PHAsO7OTh1S1TC9RiJsvawAfCPaQZoed8gK4
OARcRwTpEgorBgEEAZdVAQUBAQdAQv8GIa2rSTzgqbXCpDDYMiKRVitCsy203x3s
E9+eviIDAQgHiHgEGBYIACAWIQTrhbtfozp14V6UTmPyMVUMT0fjjgUCXEcE6QIb
DAAKCRDyMVUMT0fjjlnQAQDFHUs6TIcxrNTtEZFjUFm1M0PJ1Dng/cDW4xN80fsn
0QEA22Kr7VkCjeAEC08VSTeV+QFsmz55/lntWkwYWhmvOgE=
=iIGO
-----END PGP PUBLIC KEY BLOCK-----

View file

@ -1,17 +1,16 @@
-----BEGIN PGP PRIVATE KEY BLOCK-----
Comment: Alice's OpenPGP Transferable Secret Key
lQG7BGFQyDcRBACmAI6cfY3fM02vb9JtC1BS19boKXbBsDoVrD9qRf8tDFROOpO3
ZMlbuz+O9Vnljo6Y4WZGnyeWWAMqCditMOfr1cLbux77wSrmAVgZ9exwtGzkmUhM
xcptzKuyod8NuhghXbJgVbfJZ6HlBkk4kiWv98iJQwUBZJfjBUfIv+acjwCg4M2i
Ifu2A3UYl9VqF7qfcDOZudEEAI7V35yfsBDnr9ndKqdGYNw0alX9BEG3KwnAe0fF
O1jDVW12Y/bwnyyrRTrz6o1G8dj7M4XVZQb5PpT9mpNzOSZ6yxqhg+foeJwn2JkD
vyP+kMYU7SZ/tWuMOCdzN95Ki1rf+ti7pLnSMqKx+t3vOWwQbtnsbI6RCLLwETPA
esghA/0X3Dw7cdiE5Xq4TRaPSGViCWP4ekL2KYKqmKv6M/4f2pgFNJY7C+2SIiiP
T62zFlIjs5tF2Df34/M5mh4Vx6E8341r55+XO++kfFWJ5QjLiydRAY6ochG9IFgB
xyBCkCNpiby9PpKyPodedBScdMxIAe4eJR7rG/j9gFC1MypBugAAn0mvGeJi+oSo
5jXAeXBhRiTyI5WPCuK0J0pvaG5ueSBSb2NrZXRzIDxqb2hubnkucm9ja2V0c0Bn
Znkub3JnPoh4BBMRAgA4FiEESFc9Qz85uERAyFzbZbUBuQAr+pcFAmFQyDcCGwMF
CwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQZbUBuQAr+peImQCgqpXa6EWB+71M
1VdFL9TXA1XKS54AoJhKC1cRiyksAxFzaqo0Q8w0aUXo
=cyQm
lFgEXEcE6RYJKwYBBAHaRw8BAQdArjWwk3FAqyiFbFBKT4TzXcVBqPTB3gmzlC/U
b7O1u10AAP9XBeW6lzGOLx7zHH9AsUDUTb2pggYGMzd0P3ulJ2AfvQ4RtCZBbGlj
ZSBMb3ZlbGFjZSA8YWxpY2VAb3BlbnBncC5leGFtcGxlPoiQBBMWCAA4AhsDBQsJ
CAcCBhUKCQgLAgQWAgMBAh4BAheAFiEE64W7X6M6deFelE5j8jFVDE9H444FAl2l
nzoACgkQ8jFVDE9H447pKwD6A5xwUqIDprBzrHfahrImaYEZzncqb25vkLV2arYf
a78A/R3AwtLQvjxwLDuzk4dUtUwvUYibL2sAHwj2kGaHnfICnF0EXEcE6RIKKwYB
BAGXVQEFAQEHQEL/BiGtq0k84Km1wqQw2DIikVYrQrMttN8d7BPfnr4iAwEIBwAA
/3/xFPG6U17rhTuq+07gmEvaFYKfxRB6sgAYiW6TMTpQEK6IeAQYFggAIBYhBOuF
u1+jOnXhXpROY/IxVQxPR+OOBQJcRwTpAhsMAAoJEPIxVQxPR+OOWdABAMUdSzpM
hzGs1O0RkWNQWbUzQ8nUOeD9wNbjE3zR+yfRAQDbYqvtWQKN4AQLTxVJN5X5AWyb
Pnn+We1aTBhaGa86AQ==
=n8OM
-----END PGP PRIVATE KEY BLOCK-----

View file

@ -25,8 +25,9 @@ TRUSTDB="./trust.db"
GPG="gpg --no-default-keyring --trustdb-name $TRUSTDB --keyring $KEYRING --yes"
rm $KEYRING
$GPG --full-generate-key
$GPG --export --armor > "../key.pub"
$GPG --export-secret-keys -armor > "../key.sec"
#$GPG --full-generate-key
#$GPG --export --armor > "../key.pub"
#$GPG --export-secret-keys -armor > "../key.sec"
$GPG --import ../key.sec
$GPG --detach-sign --sign "./archive-contents"
$GPG --detach-sign --sign "./signed-good-1.0.el"

View file

@ -1,20 +1,14 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1
Comment: Alice's OpenPGP certificate
mI0EVRDxCAEEALcScrRmxq5N+Hh+NxPg75RJJdtEi824pwtqMlT/3wG1esmP5gNu
ZIPVaTTSGNZkEzeYdhaLXBUe5qD+RQIQVh+MLt9nisF9nD35imyOrhHwAHnglOPx
GdylH8nQ/tIO5p/lfUlw+iCBlPH7eZHqFJhwP0hJML4PKE8ArWG6RtsxABEBAAG0
J0pvZSBUZXN0ZXIgKHRlc3Qga2V5KSA8am9lQGV4YW1wbGUuY29tPoi4BBMBAgAi
BQJVEPEIAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRAoscCWMvu4GGYO
A/0Zzoc2z/dvAtFVLh4ovKqP2qliQt2qschJHVP30hJnKT7dmJfJl7kz9mXmMfSt
Ym0luYmeSzdeWORM9SygLRYXuDfN6G4ZPJTlsRhgnARhNzNhSx+YlcFh48Z+a5zR
goBMn7DgYVqfU4UteZOSXMlnuA2Z5ao1qgGhVqESSJgU5riNBFUQ8QgBBADacLkK
D0U11nmlsScxPGkrDr0aJPrG8MEaDRnKjHJKNp3XTp1psGBUpWF/ErjQAIu+psFt
LO8owCGsg/vJM7CzTv2dVBRbrZXjIKvdq7HdivosTMaHArQBpEtSO9rmgVHO+jaQ
q/M2oGvNEB86zo3nfTWhOgBiB32m8kttWRiuWQARAQABiJ8EGAECAAkFAlUQ8QgC
GwwACgkQKLHAljL7uBj44AQAkMJRm7VJUryrDKFtfIfytQx/vmyU/cZcVV6IpKqP
KhztgR+QD9czlHvQhz+y3hqtLRShu2Eyf75dNexcUvKs/lS4LIDXg5V7pWSRk9eQ
G403muqR/NGu6+QmUx09rJl72trdaGxNkyHA7Zy7ZDGkcMvQsd3qoSNGsPR5TKes
w7Q=
=NMxb
mDMEXEcE6RYJKwYBBAHaRw8BAQdArjWwk3FAqyiFbFBKT4TzXcVBqPTB3gmzlC/U
b7O1u120JkFsaWNlIExvdmVsYWNlIDxhbGljZUBvcGVucGdwLmV4YW1wbGU+iJAE
ExYIADgCGwMFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AWIQTrhbtfozp14V6UTmPy
MVUMT0fjjgUCXaWfOgAKCRDyMVUMT0fjjukrAPoDnHBSogOmsHOsd9qGsiZpgRnO
dypvbm+QtXZqth9rvwD9HcDC0tC+PHAsO7OTh1S1TC9RiJsvawAfCPaQZoed8gK4
OARcRwTpEgorBgEEAZdVAQUBAQdAQv8GIa2rSTzgqbXCpDDYMiKRVitCsy203x3s
E9+eviIDAQgHiHgEGBYIACAWIQTrhbtfozp14V6UTmPyMVUMT0fjjgUCXEcE6QIb
DAAKCRDyMVUMT0fjjlnQAQDFHUs6TIcxrNTtEZFjUFm1M0PJ1Dng/cDW4xN80fsn
0QEA22Kr7VkCjeAEC08VSTeV+QFsmz55/lntWkwYWhmvOgE=
=iIGO
-----END PGP PUBLIC KEY BLOCK-----

View file

@ -1,33 +1,16 @@
-----BEGIN PGP PRIVATE KEY BLOCK-----
Version: GnuPG v1
Comment: Alice's OpenPGP Transferable Secret Key
lQHYBFUQ8QgBBAC3EnK0ZsauTfh4fjcT4O+USSXbRIvNuKcLajJU/98BtXrJj+YD
bmSD1Wk00hjWZBM3mHYWi1wVHuag/kUCEFYfjC7fZ4rBfZw9+Ypsjq4R8AB54JTj
8RncpR/J0P7SDuaf5X1JcPoggZTx+3mR6hSYcD9ISTC+DyhPAK1hukbbMQARAQAB
AAP9Hs9agZTobA5QOksXjt9kwqJ63gePtbwVVNz3AoobaGi39PMkRUCPZwaEEbEo
H/CwsUMV4J5sjVtpef/A8mN4csai7NYp82mbo+dPim4p+SUtBg4Ms8ujGVcQeRQd
1CXtIkixDu6fw4wDtNw03ZyNJOhBOXVTgAyOTSlIz3D+6n8CAMeCqEFBHQIVoQpf
Bza4YvFtJRdfGMTix3u7Cb6y9CHGBok7uUgQAeWnzQvMGTCHc3e8iHGAYBQ88GPF
v1TpiusCAOroRe69Aiid5JMVTjWoJ0SHKd47nIj0gQFiDfa5de0BNq9gYj7JLg+R
EjsJbJN39z+Z9HWjIOCUOIXDvucmM1MB/iNxW1Z8mEMflEYK5rop+PDxwqUbr8uZ
kzogw98ZdmuEuN0bheGWUiJI+0Pd8jb40zlR1KgOEMx1mZchToAJdtybMLQnSm9l
IFRlc3RlciAodGVzdCBrZXkpIDxqb2VAZXhhbXBsZS5jb20+iLgEEwECACIFAlUQ
8QgCGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJECixwJYy+7gYZg4D/RnO
hzbP928C0VUuHii8qo/aqWJC3aqxyEkdU/fSEmcpPt2Yl8mXuTP2ZeYx9K1ibSW5
iZ5LN15Y5Ez1LKAtFhe4N83obhk8lOWxGGCcBGE3M2FLH5iVwWHjxn5rnNGCgEyf
sOBhWp9ThS15k5JcyWe4DZnlqjWqAaFWoRJImBTmnQHYBFUQ8QgBBADacLkKD0U1
1nmlsScxPGkrDr0aJPrG8MEaDRnKjHJKNp3XTp1psGBUpWF/ErjQAIu+psFtLO8o
wCGsg/vJM7CzTv2dVBRbrZXjIKvdq7HdivosTMaHArQBpEtSO9rmgVHO+jaQq/M2
oGvNEB86zo3nfTWhOgBiB32m8kttWRiuWQARAQABAAP7B8uNtb/DLvGoRfL+mA0Q
REhgOJ1WpRcU6rvKYNPh8xTkKMvM+EK0nVU/znBedEpXjb0pY1WRT0uvXs2pzY2V
YeaugyKIkdUpPWnyWoEQwI8hFvHOWmU2rNHyXLW0MY7bxcGgqv2XbkL4m7/D6VQS
SR8hQ2CxBbW+9ov6aBMwv/UCAOW89+5xxuzkv48AVraWlMnaU0ggVOf6ht0Qa40+
+uw2yziNlD403gAAAycoICiB/oqwslx61B2xOHn0laCKrgsCAPNpIsHRlAwWbAsq
uCtfIQxg+C3mPXkqsNTMjeK5NjLNytrmO49NXco36zVEG6q7qz5Zj9d9IPYoGOSa
I+dQZ6sB/RKF5aonR5/e7IHJgc8BG7I0yiya4llE0AB9ghnRI/3uHwnCBnmo/32a
n4+rQkx6vm+rg3JA/09Gi7W4R9SwV+ane4ifBBgBAgAJBQJVEPEIAhsMAAoJECix
wJYy+7gY+OAEAJDCUZu1SVK8qwyhbXyH8rUMf75slP3GXFVeiKSqjyoc7YEfkA/X
M5R70Ic/st4arS0UobthMn++XTXsXFLyrP5UuCyA14OVe6VkkZPXkBuNN5rqkfzR
ruvkJlMdPayZe9ra3WhsTZMhwO2cu2QxpHDL0LHd6qEjRrD0eUynrMO0
=iCIm
lFgEXEcE6RYJKwYBBAHaRw8BAQdArjWwk3FAqyiFbFBKT4TzXcVBqPTB3gmzlC/U
b7O1u10AAP9XBeW6lzGOLx7zHH9AsUDUTb2pggYGMzd0P3ulJ2AfvQ4RtCZBbGlj
ZSBMb3ZlbGFjZSA8YWxpY2VAb3BlbnBncC5leGFtcGxlPoiQBBMWCAA4AhsDBQsJ
CAcCBhUKCQgLAgQWAgMBAh4BAheAFiEE64W7X6M6deFelE5j8jFVDE9H444FAl2l
nzoACgkQ8jFVDE9H447pKwD6A5xwUqIDprBzrHfahrImaYEZzncqb25vkLV2arYf
a78A/R3AwtLQvjxwLDuzk4dUtUwvUYibL2sAHwj2kGaHnfICnF0EXEcE6RIKKwYB
BAGXVQEFAQEHQEL/BiGtq0k84Km1wqQw2DIikVYrQrMttN8d7BPfnr4iAwEIBwAA
/3/xFPG6U17rhTuq+07gmEvaFYKfxRB6sgAYiW6TMTpQEK6IeAQYFggAIBYhBOuF
u1+jOnXhXpROY/IxVQxPR+OOBQJcRwTpAhsMAAoJEPIxVQxPR+OOWdABAMUdSzpM
hzGs1O0RkWNQWbUzQ8nUOeD9wNbjE3zR+yfRAQDbYqvtWQKN4AQLTxVJN5X5AWyb
Pnn+We1aTBhaGa86AQ==
=n8OM
-----END PGP PRIVATE KEY BLOCK-----

View file

@ -101,16 +101,15 @@
(ert-deftest epg-decrypt-1 ()
:expected-result (if (getenv "EMACS_HYDRA_CI") :failed :passed) ; fixme
(with-epg-tests (:require-passphrase t)
(with-temp-file (expand-file-name "gpg.conf" epg-tests-home-directory)
(insert "ignore-mdc-error"))
(should (equal "test"
(epg-decrypt-string epg-tests-context "\
-----BEGIN PGP MESSAGE-----
Version: GnuPG v2
jA0EAwMCE19JBLTvvmhgyRrGGglRbnKkK9PJG8fDwO5ccjysrR7IcdNcnA==
=U8z7
-----END PGP MESSAGE-----")))))
jA0ECQMCdW8+qtS9Tin/0jUBO1/9Oz69BWPmtFKEeBM62WpFP4o1+bNzdxogdyeg
+WTt292OD0yV85m5UqvLgp4ttVUmAw==
=K5Eh
-----END PGP MESSAGE-----
")))))
(ert-deftest epg-roundtrip-1 ()
:expected-result (if (getenv "EMACS_HYDRA_CI") :failed :passed) ; fixme
@ -123,7 +122,7 @@ jA0EAwMCE19JBLTvvmhgyRrGGglRbnKkK9PJG8fDwO5ccjysrR7IcdNcnA==
(with-epg-tests (:require-passphrase t
:require-public-key t
:require-secret-key t)
(let* ((recipients (epg-list-keys epg-tests-context "joe@example.com"))
(let* ((recipients (epg-list-keys epg-tests-context "alice@openpgp.example"))
(cipher (epg-encrypt-string epg-tests-context "public key"
recipients nil t)))
(should (equal "public key"
@ -135,7 +134,7 @@ jA0EAwMCE19JBLTvvmhgyRrGGglRbnKkK9PJG8fDwO5ccjysrR7IcdNcnA==
:require-secret-key t)
(let (signature verify-result)
(setf (epg-context-signers epg-tests-context)
(epg-list-keys epg-tests-context "joe@example.com"))
(epg-list-keys epg-tests-context "alice@openpgp.example"))
(setq signature (epg-sign-string epg-tests-context "signed" t))
(epg-verify-string epg-tests-context signature "signed")
(setq verify-result (epg-context-result-for context 'verify))
@ -148,7 +147,7 @@ jA0EAwMCE19JBLTvvmhgyRrGGglRbnKkK9PJG8fDwO5ccjysrR7IcdNcnA==
:require-secret-key t)
(let (signature verify-result)
(setf (epg-context-signers epg-tests-context)
(epg-list-keys epg-tests-context "joe@example.com"))
(epg-list-keys epg-tests-context "alice@openpgp.example"))
(setq signature (epg-sign-string epg-tests-context "clearsigned" 'clear))
;; Clearsign signature always ends with a new line.
(should (equal "clearsigned\n"
@ -163,7 +162,7 @@ jA0EAwMCE19JBLTvvmhgyRrGGglRbnKkK9PJG8fDwO5ccjysrR7IcdNcnA==
:require-secret-key t)
(let (signature verify-result)
(setf (epg-context-signers epg-tests-context)
(epg-list-keys epg-tests-context "joe@example.com"))
(epg-list-keys epg-tests-context "alice@openpgp.example"))
(setq signature (epg-sign-string epg-tests-context "normal signed"))
(should (equal "normal signed"
(epg-verify-string epg-tests-context signature)))

View file

@ -199,7 +199,7 @@ In both cases, the first key is customized for signing and encryption."
(let* ((mml-secure-key-preferences
'((OpenPGP (sign) (encrypt)) (CMS (sign) (encrypt))))
(pcontext (epg-make-context 'OpenPGP))
(pkey (epg-list-keys pcontext "C3999CF1268DBEA2"))
(pkey (epg-list-keys pcontext "2FAF8726121EB3C6"))
(scontext (epg-make-context 'CMS))
(skey (epg-list-keys scontext "0x479DC6E2")))
(mml-secure-cust-record-keys pcontext 'encrypt "sub@example.org" pkey)
@ -259,17 +259,17 @@ In both cases, the first key is customized for signing and encryption."
(should-not (mml-secure-check-sub-key context (car keys5) 'sign))
;; The next key has multiple subkeys.
;; 42466F0F is valid sign subkey, 501FFD98 is expired
(should (mml-secure-check-sub-key context (car keys6) 'sign "42466F0F"))
;; 167C1C27A9D25305 is valid sign subkey, 2DD796DBDAC43424 is expired
(should (mml-secure-check-sub-key context (car keys6) 'sign "167C1C27A9D25305"))
(should-not
(mml-secure-check-sub-key context (car keys6) 'sign "501FFD98"))
;; DC7F66E7 is encrypt subkey
(mml-secure-check-sub-key context (car keys6) 'sign "2DD796DBDAC43424"))
;; 8D850AA2B34936F9 is encrypt subkey
(should
(mml-secure-check-sub-key context (car keys6) 'encrypt "DC7F66E7"))
(mml-secure-check-sub-key context (car keys6) 'encrypt "8D850AA2B34936F9"))
(should-not
(mml-secure-check-sub-key context (car keys6) 'sign "DC7F66E7"))
(mml-secure-check-sub-key context (car keys6) 'sign "8D850AA2B34936F9"))
(should-not
(mml-secure-check-sub-key context (car keys6) 'encrypt "42466F0F"))
(mml-secure-check-sub-key context (car keys6) 'encrypt "167C1C27A9D25305"))
;; The final key is just a public key.
(should (mml-secure-check-sub-key context (car keys7) 'encrypt))
@ -305,9 +305,9 @@ In both cases, the first key is customized for signing and encryption."
;; Expired key should not be usable.
;; Will fail for Ma Gnus v0.14 and earlier.
;; sign@example.org has the expired subkey 0x501FFD98.
;; sign@example.org has the expired subkey 0x2DD796DBDAC43424.
(should-not
(mml-secure-find-usable-keys context "0x501FFD98" 'sign))
(mml-secure-find-usable-keys context "0x2DD796DBDAC43424" 'sign))
(should
(mml-secure-find-usable-keys context "no-exp@example.org" 'encrypt))
@ -355,16 +355,16 @@ In both cases, the first key is customized for signing and encryption."
;; Search works with key IDs, with and without prefix "0x".
(should
(= 1 (length (mml-secure-find-usable-keys
context "A142FD84" 'encrypt))))
context "CA9EA5175C9043FB" 'encrypt))))
(should
(= 1 (length (mml-secure-find-usable-keys
context "0xA142FD84" 'encrypt))))
context "0xCA9EA5175C9043FB" 'encrypt))))
(should
(= 0 (length (mml-secure-find-usable-keys
context "A142FD84" 'sign))))
context "CA9EA5175C9043FB" 'sign))))
(should
(= 0 (length (mml-secure-find-usable-keys
context "0xA142FD84" 'sign))))
context "0xCA9EA5175C9043FB" 'sign))))
))))
(ert-deftest mml-secure-select-preferred-keys-1 ()
@ -373,7 +373,7 @@ In both cases, the first key is customized for signing and encryption."
(mml-secure-test-fixture
(lambda ()
(let ((context (epg-make-context 'OpenPGP)))
(should (equal "832F3CC6518D37BC658261B802372A42CA6D40FB"
(should (equal "0281C7D97E90771C0D9A61BFA049C1E9179C086B"
(mml-secure-fingerprint
(car (mml-secure-select-preferred-keys
context '("no-exp@example.org") 'encrypt)))))))))
@ -413,18 +413,18 @@ In both cases, the first key is customized for signing and encryption."
(let ((context (epg-make-context 'OpenPGP))
(mml-secure-key-preferences
'((OpenPGP (sign) (encrypt)) (CMS (sign) (encrypt)))))
;; sub@example.org has two keys (268DBEA2, AE31D471).
;; sub@example.org has two keys (2FAF8726121EB3C6, 8E7FEE76BB1FB195).
;; Normal preference works.
(mml-secure-cust-record-keys
context 'encrypt "sub@example.org" (epg-list-keys context "268DBEA2"))
context 'encrypt "sub@example.org" (epg-list-keys context "2FAF8726121EB3C6"))
(should (mml-secure-select-preferred-keys
context '("sub@example.org") 'encrypt))
(mml-secure-cust-remove-keys context 'encrypt "sub@example.org")
;; Fake preference for expired (unrelated) key CE15FAE7,
;; Fake preference for expired (unrelated) key 22F24E21C5010683,
;; results in error (and automatic removal of outdated preference).
(mml-secure-cust-record-keys
context 'encrypt "sub@example.org" (epg-list-keys context "CE15FAE7"))
context 'encrypt "sub@example.org" (epg-list-keys context "22F24E21C5010683"))
(should-error (mml-secure-select-preferred-keys
context '("sub@example.org") 'encrypt))
(should-not
@ -438,8 +438,8 @@ In both cases, the first key is customized for signing and encryption."
(lambda ()
(let ((pcontext (epg-make-context 'OpenPGP))
(scontext (epg-make-context 'CMS))
(pkeys '("1E6BFA973D9E3103B77FD399C3999CF1268DBEA2"
"14632ECAB9E227369C8DD97BF7E79AB7AE31D471"))
(pkeys '("4D661F67B8BC4F7F1C53C2232FAF8726121EB3C6"
"EB67A6310389C9AE8A5695908E7FEE76BB1FB195"))
(skeys '("0x5F88E9FC" "0x479DC6E2"))
(mml-secure-key-preferences
'((OpenPGP (sign) (encrypt)) (CMS (sign) (encrypt)))))
@ -456,17 +456,17 @@ In both cases, the first key is customized for signing and encryption."
pcontext 'sign "sub@example.org")))
(should (= 2 (length p-e-fprs)))
(should (= 2 (length p-s-fprs)))
(should (member "1E6BFA973D9E3103B77FD399C3999CF1268DBEA2" p-e-fprs))
(should (member "14632ECAB9E227369C8DD97BF7E79AB7AE31D471" p-e-fprs))
(should (member "1E6BFA973D9E3103B77FD399C3999CF1268DBEA2" p-s-fprs))
(should (member "14632ECAB9E227369C8DD97BF7E79AB7AE31D471" p-s-fprs)))
(should (member "4D661F67B8BC4F7F1C53C2232FAF8726121EB3C6" p-e-fprs))
(should (member "EB67A6310389C9AE8A5695908E7FEE76BB1FB195" p-e-fprs))
(should (member "4D661F67B8BC4F7F1C53C2232FAF8726121EB3C6" p-s-fprs))
(should (member "EB67A6310389C9AE8A5695908E7FEE76BB1FB195" p-s-fprs)))
;; Duplicate record does not change anything.
(mml-secure-cust-record-keys
pcontext 'encrypt "sub@example.org"
(epg-list-keys pcontext "1E6BFA973D9E3103B77FD399C3999CF1268DBEA2"))
(epg-list-keys pcontext "4D661F67B8BC4F7F1C53C2232FAF8726121EB3C6"))
(mml-secure-cust-record-keys
pcontext 'sign "sub@example.org"
(epg-list-keys pcontext "1E6BFA973D9E3103B77FD399C3999CF1268DBEA2"))
(epg-list-keys pcontext "4D661F67B8BC4F7F1C53C2232FAF8726121EB3C6"))
(let ((p-e-fprs (mml-secure-cust-fpr-lookup
pcontext 'encrypt "sub@example.org"))
(p-s-fprs (mml-secure-cust-fpr-lookup
@ -524,10 +524,10 @@ Pass optional INTERACTIVE to mml-secure-test-mail-fixture."
(concat "Good signature from "
(if (eq protocol 'CMS)
"0E58229B80EE33959FF718FEEF25402B479DC6E2"
"02372A42CA6D40FB"))
"A049C1E9179C086B"))
gnus-info)))
(dolist (fpr signer-fprs nil)
;; OpenPGP: "Good signature from 02372A42CA6D40FB No Expiry <no-exp@example.org> (trust undefined) created ..."
;; OpenPGP: "Good signature from A049C1E9179C086B No Expiry <no-exp@example.org> (trust undefined) created ..."
;; S/MIME: "Good signature from D06AA118653CC38E9D0CAF56ED7A2135E1582177 /CN=No Expiry (trust full) ..."
(should (string-match-p
(concat "Good signature from "
@ -586,7 +586,7 @@ In this test, the single matching key is chosen automatically."
;; no-exp@example.org with single encryption key
(mml-secure-test-en-decrypt
method "no-exp@example.org" "sub@example.org" nil t
(list (cons "02372A42CA6D40FB" "ED7A2135E1582177")))))
(list (cons "A049C1E9179C086B" "ED7A2135E1582177")))))
(ert-deftest mml-secure-en-decrypt-2 ()
"Encrypt message; then decrypt and test for expected result.
@ -600,7 +600,7 @@ In this test, the encryption key needs to fixed among multiple ones."
(dolist (method (enc-standards) nil)
(mml-secure-test-en-decrypt
method "sub@example.org" "no-exp@example.org" nil t
(list (cons "C3999CF1268DBEA2" "EF25402B479DC6E2")))))))
(list (cons "2FAF8726121EB3C6" "EF25402B479DC6E2")))))))
(ert-deftest mml-secure-en-decrypt-3 ()
"Encrypt message; then decrypt and test for expected result.
@ -619,8 +619,8 @@ In this test, encrypt-to-self variables are set to t."
(dolist (method (enc-standards) nil)
(mml-secure-test-en-decrypt
method "sub@example.org" "no-exp@example.org" nil t
(list (cons "C3999CF1268DBEA2" "EF25402B479DC6E2")
(cons "02372A42CA6D40FB" "ED7A2135E1582177"))))))))
(list (cons "2FAF8726121EB3C6" "EF25402B479DC6E2")
(cons "A049C1E9179C086B" "ED7A2135E1582177"))))))))
(ert-deftest mml-secure-en-decrypt-4 ()
"Encrypt message; then decrypt and test for expected result.
@ -628,14 +628,14 @@ In this test, encrypt-to-self variables are set to lists."
(skip-unless (test-conf))
;; Send from sub@example.org, which has two keys; encrypt to both.
(let ((mml-secure-openpgp-encrypt-to-self
'("C3999CF1268DBEA2" "F7E79AB7AE31D471"))
'("2FAF8726121EB3C6" "8E7FEE76BB1FB195"))
(mml-secure-smime-encrypt-to-self
'("EF25402B479DC6E2" "4035D59B5F88E9FC")))
(dolist (method (enc-standards) nil)
(mml-secure-test-en-decrypt
method "no-exp@example.org" "sub@example.org" nil t
(list (cons "C3999CF1268DBEA2" "EF25402B479DC6E2")
(cons "F7E79AB7AE31D471" "4035D59B5F88E9FC"))))))
(list (cons "2FAF8726121EB3C6" "EF25402B479DC6E2")
(cons "8E7FEE76BB1FB195" "4035D59B5F88E9FC"))))))
(ert-deftest mml-secure-en-decrypt-sign-1-1-single ()
"Sign and encrypt message; then decrypt and test for expected result.
@ -672,7 +672,7 @@ In this test, just multiple encryption and signing keys may be available."
(mml-secure-smime-sign-with-sender t))
;; Now use both keys to sign. The customized one via sign-with-sender,
;; the other one via the following setting.
(let ((mml-secure-openpgp-signers '("F7E79AB7AE31D471"))
(let ((mml-secure-openpgp-signers '("8E7FEE76BB1FB195"))
(mml-secure-smime-signers '("0x5F88E9FC")))
(dolist (method (enc-sign-standards) nil)
(mml-secure-test-en-decrypt
@ -690,7 +690,7 @@ In this test, just multiple encryption and signing keys may be available."
(let ((mml-secure-openpgp-sign-with-sender nil)
(mml-secure-smime-sign-with-sender nil)
(mml-secure-openpgp-signers
'("F7E79AB7AE31D471" "C3999CF1268DBEA2"))
'("8E7FEE76BB1FB195" "2FAF8726121EB3C6"))
(mml-secure-smime-signers '("0x5F88E9FC" "0x479DC6E2")))
(dolist (method (enc-sign-standards) nil)
(mml-secure-test-en-decrypt
@ -709,7 +709,7 @@ In this test, lists of encryption and signing keys are customized."
(scontext (epg-make-context 'CMS))
(mml-secure-openpgp-sign-with-sender t)
(mml-secure-smime-sign-with-sender t))
(dolist (key '("F7E79AB7AE31D471" "C3999CF1268DBEA2") nil)
(dolist (key '("8E7FEE76BB1FB195" "2FAF8726121EB3C6") nil)
(mml-secure-cust-record-keys
pcontext 'encrypt "sub@example.org" (epg-list-keys pcontext key))
(mml-secure-cust-record-keys
@ -745,8 +745,8 @@ Use sign-with-sender and encrypt-to-self."
(dolist (method (enc-sign-standards) nil)
(mml-secure-test-en-decrypt
method "sub@example.org" "no-exp@example.org" 1 t
(list (cons "C3999CF1268DBEA2" "EF25402B479DC6E2")
(cons "02372A42CA6D40FB" "ED7A2135E1582177"))))
(list (cons "2FAF8726121EB3C6" "EF25402B479DC6E2")
(cons "A049C1E9179C086B" "ED7A2135E1582177"))))
))))
(ert-deftest mml-secure-sign-verify-1 ()
@ -765,7 +765,7 @@ Use sign-with-sender and encrypt-to-self."
;; From sub@example.org, sign with two keys;
;; sign-with-sender and one from signers-variable:
(let ((mml-secure-openpgp-signers '("02372A42CA6D40FB"))
(let ((mml-secure-openpgp-signers '("A049C1E9179C086B"))
(mml-secure-smime-signers
'("D06AA118653CC38E9D0CAF56ED7A2135E1582177")))
(mml-secure-test-en-decrypt
@ -781,7 +781,7 @@ With Ma Gnus v0.14 and earlier a signature would be created with a wrong key."
(lambda ()
(let ((with-smime nil)
(mml-secure-openpgp-sign-with-sender nil)
(mml-secure-openpgp-signers '("501FFD98")))
(mml-secure-openpgp-signers '("2DD796DBDAC43424")))
(dolist (method (sign-standards) nil)
(mml-secure-test-en-decrypt
method "no-exp@example.org" "sign@example.org" 1 nil)