* bug#28803: [PATCH] Fixed compiler warnings for advised functions. @ 2017-10-12 23:02 John Williams 2017-10-14 5:51 ` Noam Postavsky 0 siblings, 1 reply; 10+ messages in thread From: John Williams @ 2017-10-12 23:02 UTC (permalink / raw) To: 28803 [-- Attachment #1: Type: text/plain, Size: 1 bytes --] [-- Attachment #2: 0001-Fixed-compiler-warnings-for-advised-functions.patch --] [-- Type: text/x-patch, Size: 11385 bytes --] From 3589eea932f5dec0125a3dcd16061385c0f30a5e Mon Sep 17 00:00:00 2001 From: John Williams <jrw@pobox.com> Date: Thu, 12 Oct 2017 15:57:37 -0700 Subject: [PATCH] Fixed compiler warnings for advised functions. Added the function `get-advertised-calling-convention', which is mostly copied from `help-function-arglist'. Changed `help-function-arglist' to use `get-advertised-calling-convention'. Changed nadvice.el to use `get-advertised-calling-convention' instead of directly querying `advertised-signature-table'. Added a unit test to show that previously-advised functions now compile without warnings. --- lisp/emacs-lisp/byte-run.el | 76 ++++++++++++++++++++++++++++++++++++++-- lisp/emacs-lisp/nadvice.el | 7 ++-- lisp/help.el | 52 +++------------------------ test/automated/bytecomp-tests.el | 11 +++++- test/automated/cl-lib-tests.el | 4 +-- 5 files changed, 94 insertions(+), 56 deletions(-) mode change 100644 => 100755 lisp/emacs-lisp/byte-run.el mode change 100644 => 100755 lisp/emacs-lisp/nadvice.el mode change 100644 => 100755 lisp/help.el mode change 100644 => 100755 test/automated/bytecomp-tests.el mode change 100644 => 100755 test/automated/cl-lib-tests.el diff --git a/lisp/emacs-lisp/byte-run.el b/lisp/emacs-lisp/byte-run.el old mode 100644 new mode 100755 index de6755a41c7..972a069084f --- a/lisp/emacs-lisp/byte-run.el +++ b/lisp/emacs-lisp/byte-run.el @@ -325,13 +325,83 @@ defsubst (defvar advertised-signature-table (make-hash-table :test 'eq :weakness 'key)) +(defun get-advertised-calling-convention (function &optional preserve-names) + "Return a formal argument list for the function FUNCTION. +If PRESERVE-NAMES is non-nil, return a formal arglist that uses +the same names as used in the original source code, when possible. + +If the function definition is an autoload, return 'autoload. +Otherwise, if the argument list is unavailable, return t." + + (let* ((def + ;; Handle symbols aliased to other symbols. + (indirect-function function)) + (sig (gethash def advertised-signature-table t))) + (if (listp sig) + sig + ;; Advice wrappers have "catch all" args, so fetch the actual underlying + ;; function to find the real arguments. + (while (advice--p def) (setq def (advice--cdr def))) + ;; If definition is a macro, find the function inside it. + (if (eq (car-safe def) 'macro) (setq def (cdr def))) + (cond + ((and (byte-code-function-p def) (listp (aref def 0))) (aref def 0)) + ((eq (car-safe def) 'lambda) (nth 1 def)) + ((eq (car-safe def) 'closure) (nth 2 def)) + ((or (and (byte-code-function-p def) (integerp (aref def 0))) + (subrp def)) + (or (when preserve-names + (let* ((doc (condition-case nil (documentation def) (error nil))) + (docargs (if doc (car (help-split-fundoc doc nil)))) + (arglist (if docargs + (cdar (read-from-string (downcase docargs))))) + (valid t)) + ;; Check validity. + (dolist (arg arglist) + (unless (and (symbolp arg) + (let ((name (symbol-name arg))) + (if (eq (aref name 0) ?&) + (memq arg '(&rest &optional)) + (not (string-match "\\." name))))) + (setq valid nil))) + (when valid arglist))) + (let* ((args-desc (if (not (subrp def)) + (aref def 0) + (let ((a (subr-arity def))) + (logior (car a) + (if (numberp (cdr a)) + (lsh (cdr a) 8) + (lsh 1 7)))))) + (max (lsh args-desc -8)) + (min (logand args-desc 127)) + (rest (logand args-desc 128)) + (arglist ())) + (dotimes (i min) + (push (intern (concat "arg" (number-to-string (1+ i)))) arglist)) + (when (> max min) + (push '&optional arglist) + (dotimes (i (- max min)) + (push (intern (concat "arg" (number-to-string (+ 1 i min)))) + arglist))) + (unless (zerop rest) (push '&rest arglist) (push 'rest arglist)) + (nreverse arglist)))) + ((and (autoloadp def) (not (eq (nth 4 def) 'keymap))) + 'autoload) + (t t))))) + (defun set-advertised-calling-convention (function signature _when) "Set the advertised SIGNATURE of FUNCTION. This will allow the byte-compiler to warn the programmer when she uses an obsolete calling convention. WHEN specifies since when the calling -convention was modified." - (puthash (indirect-function function) signature - advertised-signature-table)) +convention was modified. + +For symmetry with with `get-advertised-calling-convention', if +SIGNATURE is not a list, the advertised signature for FUNCTION is +removed." + (if (listp signature) + (puthash (indirect-function function) signature + advertised-signature-table) + (remhash (indirect-function function) advertised-signature-table))) (defun make-obsolete (obsolete-name current-name &optional when) "Make the byte-compiler warn that function OBSOLETE-NAME is obsolete. diff --git a/lisp/emacs-lisp/nadvice.el b/lisp/emacs-lisp/nadvice.el old mode 100644 new mode 100755 index 5a100b790f1..3e5c83af902 --- a/lisp/emacs-lisp/nadvice.el +++ b/lisp/emacs-lisp/nadvice.el @@ -157,14 +157,17 @@ advice--make-interactive-form (defun advice--make-1 (byte-code stack-depth function main props) "Build a function value that adds FUNCTION to MAIN." - (let ((adv-sig (gethash main advertised-signature-table)) + (let ((adv-sig (get-advertised-calling-convention main)) (advice (apply #'make-byte-code 128 byte-code (vector #'apply function main props) stack-depth nil (and (or (commandp function) (commandp main)) (list (advice--make-interactive-form function main)))))) - (when adv-sig (puthash advice adv-sig advertised-signature-table)) + (when (listp adv-sig) + ;; Don’t use set-advertised-calling-convention here; it causes + ;; strange problems. + (puthash advice adv-sig advertised-signature-table)) advice)) (defun advice--make (where function main props) diff --git a/lisp/help.el b/lisp/help.el old mode 100644 new mode 100755 index 68e8890ee1b..31ac4494183 --- a/lisp/help.el +++ b/lisp/help.el @@ -1404,54 +1404,10 @@ help-function-arglist "Return a formal argument list for the function DEF. IF PRESERVE-NAMES is non-nil, return a formal arglist that uses the same names as used in the original source code, when possible." - ;; Handle symbols aliased to other symbols. - (if (and (symbolp def) (fboundp def)) (setq def (indirect-function def))) - ;; If definition is a macro, find the function inside it. - (if (eq (car-safe def) 'macro) (setq def (cdr def))) - (cond - ((and (byte-code-function-p def) (listp (aref def 0))) (aref def 0)) - ((eq (car-safe def) 'lambda) (nth 1 def)) - ((eq (car-safe def) 'closure) (nth 2 def)) - ((or (and (byte-code-function-p def) (integerp (aref def 0))) - (subrp def)) - (or (when preserve-names - (let* ((doc (condition-case nil (documentation def) (error nil))) - (docargs (if doc (car (help-split-fundoc doc nil)))) - (arglist (if docargs - (cdar (read-from-string (downcase docargs))))) - (valid t)) - ;; Check validity. - (dolist (arg arglist) - (unless (and (symbolp arg) - (let ((name (symbol-name arg))) - (if (eq (aref name 0) ?&) - (memq arg '(&rest &optional)) - (not (string-match "\\." name))))) - (setq valid nil))) - (when valid arglist))) - (let* ((args-desc (if (not (subrp def)) - (aref def 0) - (let ((a (subr-arity def))) - (logior (car a) - (if (numberp (cdr a)) - (lsh (cdr a) 8) - (lsh 1 7)))))) - (max (lsh args-desc -8)) - (min (logand args-desc 127)) - (rest (logand args-desc 128)) - (arglist ())) - (dotimes (i min) - (push (intern (concat "arg" (number-to-string (1+ i)))) arglist)) - (when (> max min) - (push '&optional arglist) - (dotimes (i (- max min)) - (push (intern (concat "arg" (number-to-string (+ 1 i min)))) - arglist))) - (unless (zerop rest) (push '&rest arglist) (push 'rest arglist)) - (nreverse arglist)))) - ((and (autoloadp def) (not (eq (nth 4 def) 'keymap))) - "[Arg list not available until function definition is loaded.]") - (t t))) + (let ((sig (get-advertised-calling-convention def preserve-names))) + (if (eq sig 'autoload) + "[Arg list not available until function definition is loaded.]" + sig))) (defun help--make-usage (function arglist) (cons (if (symbolp function) function 'anonymous) diff --git a/test/automated/bytecomp-tests.el b/test/automated/bytecomp-tests.el old mode 100644 new mode 100755 index f07138d3c55..ce1306abe60 --- a/test/automated/bytecomp-tests.el +++ b/test/automated/bytecomp-tests.el @@ -420,10 +420,19 @@ test-byte-comp-compile-and-load (defun def () (m)))) (should (equal (funcall 'def) 4))) +(ert-deftest bytecomp-tests--test-no-warnings-with-advice () + (defun f ()) + (define-advice f (:around (oldfun &rest args) test) + (apply oldfun args)) + (with-current-buffer (get-buffer-create "*Compile-Log*") + (let ((inhibit-read-only t)) (erase-buffer))) + (test-byte-comp-compile-and-load t '(defun f ())) + (with-current-buffer (get-buffer-create "*Compile-Log*") + (goto-char (point-min)) + (should-not (search-forward "Warning" nil t)))) ;; Local Variables: ;; no-byte-compile: t ;; End: (provide 'byte-opt-testsuite) - diff --git a/test/automated/cl-lib-tests.el b/test/automated/cl-lib-tests.el old mode 100644 new mode 100755 index 5edc3e72bf2..d4e787e56a6 --- a/test/automated/cl-lib-tests.el +++ b/test/automated/cl-lib-tests.el @@ -230,8 +230,8 @@ (ert-deftest cl-lib-arglist-performance () ;; An `&aux' should not cause lambda's arglist to be turned into an &rest ;; that's parsed by hand. - (should (equal () (help-function-arglist 'cl-lib--con-1))) - (should (pcase (help-function-arglist 'cl-lib--con-2) + (should (equal () (get-advertised-calling-convention 'cl-lib--con-1))) + (should (pcase (get-advertised-calling-convention 'cl-lib--con-2) (`(&optional ,_) t)))) (ert-deftest cl-the () -- 2.15.0.rc0.271.g36b669edcc-goog ^ permalink raw reply related [flat|nested] 10+ messages in thread
* bug#28803: [PATCH] Fixed compiler warnings for advised functions. 2017-10-12 23:02 bug#28803: [PATCH] Fixed compiler warnings for advised functions John Williams @ 2017-10-14 5:51 ` Noam Postavsky [not found] ` <CAEdRJLCj0xMqWx5DNXALJQrJw7Z-nUYzXgHeB3Jh3zQd0zPB+A@mail.gmail.com> 0 siblings, 1 reply; 10+ messages in thread From: Noam Postavsky @ 2017-10-14 5:51 UTC (permalink / raw) To: John Williams; +Cc: 28803 John Williams <jrw@pobox.com> writes: > Subject: [PATCH] Fixed compiler warnings for advised functions. I think this bug was already fixed in emacs-26, see [1: 6e2d6d54e1], Bug#14860 (https://debbugs.gnu.org/cgi/bugreport.cgi?bug=14860). [1: 6e2d6d54e1]: 2017-07-14 11:27:21 -0400 * lisp/emacs-lisp/bytecomp.el: Fix bug#14860. http://git.savannah.gnu.org/cgit/emacs.git/commit/?id=6e2d6d54e1236216462c13655ea1fe573d9672e7 ^ permalink raw reply [flat|nested] 10+ messages in thread
[parent not found: <CAEdRJLCj0xMqWx5DNXALJQrJw7Z-nUYzXgHeB3Jh3zQd0zPB+A@mail.gmail.com>]
[parent not found: <CAEdRJLCYmqcBajzDo-zHwuTg-mN=8APiZ6REYgYV5TAAu_E02A@mail.gmail.com>]
* bug#28803: [PATCH] Fixed compiler warnings for advised functions. [not found] ` <CAEdRJLCYmqcBajzDo-zHwuTg-mN=8APiZ6REYgYV5TAAu_E02A@mail.gmail.com> @ 2017-10-14 22:55 ` John Williams 2017-10-14 23:47 ` Noam Postavsky 0 siblings, 1 reply; 10+ messages in thread From: John Williams @ 2017-10-14 22:55 UTC (permalink / raw) To: Noam Postavsky; +Cc: 28803 [-- Attachment #1: Type: text/plain, Size: 751 bytes --] Oops. Is there anything that can be salvaged from my patch? Aside from fixing the bug, it also adds a unit test and refactors the logic for finding a function's argument list into a separate function that's not part of the help system. On Oct 13, 2017 10:51 PM, "Noam Postavsky" <npostavs@users.sourceforge.net> wrote: John Williams <jrw@pobox.com> writes: > Subject: [PATCH] Fixed compiler warnings for advised functions. I think this bug was already fixed in emacs-26, see [1: 6e2d6d54e1], Bug#14860 (https://debbugs.gnu.org/cgi/bugreport.cgi?bug=14860). [1: 6e2d6d54e1]: 2017-07-14 11:27:21 -0400 * lisp/emacs-lisp/bytecomp.el: Fix bug#14860. http://git.savannah.gnu.org/cgit/emacs.git/commit/?id= 6e2d6d54e1236216462c13655ea1fe573d9672e7 [-- Attachment #2: Type: text/html, Size: 1405 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#28803: [PATCH] Fixed compiler warnings for advised functions. 2017-10-14 22:55 ` John Williams @ 2017-10-14 23:47 ` Noam Postavsky 2017-10-15 0:30 ` John Williams 2017-10-21 23:33 ` Noam Postavsky 0 siblings, 2 replies; 10+ messages in thread From: Noam Postavsky @ 2017-10-14 23:47 UTC (permalink / raw) To: John Williams; +Cc: 28803 John Williams <jrw@pobox.com> writes: > Oops. Is there anything that can be salvaged from my patch? Aside > from fixing the bug, it also adds a unit test and refactors the logic > for finding a function's argument list into a separate function > that's not part of the help system. We could add the test, it seems to be passing in emacs-26. Have you assigned copyright to Emacs? (It's okay if you haven't, the patch is small enough to go in regardless, we would just need to mark it.) I don't think there's much need for moving the function argument retrieval out of the help system. (By the way, if you've spent some time looking at help-function-arglist, perhaps you have some ideas about Bug#26270? https://debbugs.gnu.org/cgi/bugreport.cgi?bug=26270) ^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#28803: [PATCH] Fixed compiler warnings for advised functions. 2017-10-14 23:47 ` Noam Postavsky @ 2017-10-15 0:30 ` John Williams 2017-10-15 1:00 ` Noam Postavsky 2017-10-21 23:33 ` Noam Postavsky 1 sibling, 1 reply; 10+ messages in thread From: John Williams @ 2017-10-15 0:30 UTC (permalink / raw) To: Noam Postavsky; +Cc: 28803 On Sat, Oct 14, 2017 at 4:47 PM, Noam Postavsky <npostavs@users.sourceforge.net> wrote: > John Williams <jrw@pobox.com> writes: > >> Oops. Is there anything that can be salvaged from my patch? Aside >> from fixing the bug, it also adds a unit test and refactors the logic >> for finding a function's argument list into a separate function >> that's not part of the help system. > > We could add the test, it seems to be passing in emacs-26. Have you > assigned copyright to Emacs? (It's okay if you haven't, the patch is > small enough to go in regardless, we would just need to mark it.) No; how would I go about doing that? The organization of the dev site is a bit confusing to me. > I don't think there's much need for moving the function argument > retrieval out of the help system. It's not a huge deal to me, but it seems weird that something like nadvice.el would depend on the help system (which it would in my patch if I hadn't moved that function--I assume the fix that was already committed does something similar). > (By the way, if you've spent some time looking at help-function-arglist, > perhaps you have some ideas about Bug#26270? > https://debbugs.gnu.org/cgi/bugreport.cgi?bug=26270) I took a look at your patch, and without having tried running it, it seems pretty reasonable to me. A unit test of some sort would be nice, but since there don't seem to be any for help-function-arglist yet, accepting the patch as-is would leave the unit test situation no worse than it was before. I'm not a regular contributor, though, so my opinion is worth what you paid for it. ^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#28803: [PATCH] Fixed compiler warnings for advised functions. 2017-10-15 0:30 ` John Williams @ 2017-10-15 1:00 ` Noam Postavsky 0 siblings, 0 replies; 10+ messages in thread From: Noam Postavsky @ 2017-10-15 1:00 UTC (permalink / raw) To: John Williams; +Cc: 28803 John Williams <jrw@pobox.com> writes: >> We could add the test, it seems to be passing in emacs-26. Have you >> assigned copyright to Emacs? (It's okay if you haven't, the patch is >> small enough to go in regardless, we would just need to mark it.) > > No; how would I go about doing that? The organization of the dev site > is a bit confusing to me. You fill in this form: http://git.savannah.gnu.org/cgit/gnulib.git/tree/doc/Copyright/request-assign.program and send it to fsf-records@gnu.org, then wait for further instructions (in my experience it takes a little over a month to get a response). >> I don't think there's much need for moving the function argument >> retrieval out of the help system. > > It's not a huge deal to me, but it seems weird that something like > nadvice.el would depend on the help system (which it would in my patch > if I hadn't moved that function--I assume the fix that was already > committed does something similar). The other patch doesn't change nadvice.el. There is another existing call to help-function-arglist in advice--make-docstring, but since it is used to create a docstring, to me it seems appropriate to depend on the help system. ^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#28803: [PATCH] Fixed compiler warnings for advised functions. 2017-10-14 23:47 ` Noam Postavsky 2017-10-15 0:30 ` John Williams @ 2017-10-21 23:33 ` Noam Postavsky 2017-10-22 2:23 ` John Williams 1 sibling, 1 reply; 10+ messages in thread From: Noam Postavsky @ 2017-10-21 23:33 UTC (permalink / raw) To: John Williams; +Cc: 28803 tags 28803 fixed close 28803 26.1 unarchive 14860 merge 28803 14860 quit Noam Postavsky <npostavs@users.sourceforge.net> writes: > John Williams <jrw@pobox.com> writes: > >> Oops. Is there anything that can be salvaged from my patch? Aside >> from fixing the bug, it also adds a unit test and refactors the logic >> for finding a function's argument list into a separate function >> that's not part of the help system. > > We could add the test, it seems to be passing in emacs-26. I've pushed the test. [1: 237e96bc52]: 2017-10-21 19:20:46 -0400 Test that advice doesn't trigger bytecomp warnings (Bug#28803) https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=237e96bc5259e59ac5623a93a47f64abffab4e0b ^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#28803: [PATCH] Fixed compiler warnings for advised functions. 2017-10-21 23:33 ` Noam Postavsky @ 2017-10-22 2:23 ` John Williams 2017-10-22 13:04 ` Noam Postavsky 2017-10-22 14:04 ` Eli Zaretskii 0 siblings, 2 replies; 10+ messages in thread From: John Williams @ 2017-10-22 2:23 UTC (permalink / raw) To: Noam Postavsky; +Cc: 28803 [-- Attachment #1: Type: text/plain, Size: 1337 bytes --] Hooray, my first official contribution to Emacs! Now I have code—not much, but some—in both Emacs and Vim, which I have to think is pretty rare. BTW, is posting to this list really the best way to send patches? At my job, all changes go through a code review tool similar to Gerrit <https://www.gerritcodereview.com/>, with code uploaded using a command analogous to "git push", so sending a patch as an email attachment feels clumsy and anachronistic. On Oct 21, 2017 4:33 PM, "Noam Postavsky" <npostavs@users.sourceforge.net> wrote: > tags 28803 fixed > close 28803 26.1 > unarchive 14860 > merge 28803 14860 > quit > > Noam Postavsky <npostavs@users.sourceforge.net> writes: > > > John Williams <jrw@pobox.com> writes: > > > >> Oops. Is there anything that can be salvaged from my patch? Aside > >> from fixing the bug, it also adds a unit test and refactors the logic > >> for finding a function's argument list into a separate function > >> that's not part of the help system. > > > > We could add the test, it seems to be passing in emacs-26. > > I've pushed the test. > > [1: 237e96bc52]: 2017-10-21 19:20:46 -0400 > Test that advice doesn't trigger bytecomp warnings (Bug#28803) > https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=237e9 > 6bc5259e59ac5623a93a47f64abffab4e0b > [-- Attachment #2: Type: text/html, Size: 2119 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#28803: [PATCH] Fixed compiler warnings for advised functions. 2017-10-22 2:23 ` John Williams @ 2017-10-22 13:04 ` Noam Postavsky 2017-10-22 14:04 ` Eli Zaretskii 1 sibling, 0 replies; 10+ messages in thread From: Noam Postavsky @ 2017-10-22 13:04 UTC (permalink / raw) To: John Williams; +Cc: 28803 John Williams <jrw@pobox.com> writes: > Hooray, my first official contribution to Emacs! Now I have code—not > much, but some—in both Emacs and Vim, which I have to think is pretty > rare. Congrats :) > BTW, is posting to this list really the best way to send patches? At > my job, all changes go through a code review tool similar to Gerrit, > with code uploaded using a command analogous to "git push", so > sending a patch as an email attachment feels clumsy and > anachronistic. For now at least yes. There has been some grumbling from others about the "anachronistic" methods, but nothing much has come of it as of yet. I have some commands in my init file for smoothing the process of sending and receiving patches between the bug list and my git repo, but they're dependent of magit, and I'm still working out the kinks. ^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#28803: [PATCH] Fixed compiler warnings for advised functions. 2017-10-22 2:23 ` John Williams 2017-10-22 13:04 ` Noam Postavsky @ 2017-10-22 14:04 ` Eli Zaretskii 1 sibling, 0 replies; 10+ messages in thread From: Eli Zaretskii @ 2017-10-22 14:04 UTC (permalink / raw) To: John Williams; +Cc: 28803, npostavs > From: John Williams <jrw@pobox.com> > Date: Sat, 21 Oct 2017 19:23:35 -0700 > Cc: 28803@debbugs.gnu.org > > Hooray, my first official contribution to Emacs! Now I have code—not much, but some—in both Emacs and > Vim, which I have to think is pretty rare. Welcome on board, and thanks for your contribution. > BTW, is posting to this list really the best way to send patches? You are not posting to a list, you are sending to our issue tracker. Having your patches sent to a mailing list is just one of the interfaces provided by the tracker; there are others (like an Emacs interface, see the debbugs package in ELPA. > At my job, all changes go through a code > review tool similar to Gerrit, with code uploaded using a command analogous to "git push", so sending a patch > as an email attachment feels clumsy and anachronistic. For large changesets, we recommend a scratch branch. ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2017-10-22 14:04 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2017-10-12 23:02 bug#28803: [PATCH] Fixed compiler warnings for advised functions John Williams 2017-10-14 5:51 ` Noam Postavsky [not found] ` <CAEdRJLCj0xMqWx5DNXALJQrJw7Z-nUYzXgHeB3Jh3zQd0zPB+A@mail.gmail.com> [not found] ` <CAEdRJLCYmqcBajzDo-zHwuTg-mN=8APiZ6REYgYV5TAAu_E02A@mail.gmail.com> 2017-10-14 22:55 ` John Williams 2017-10-14 23:47 ` Noam Postavsky 2017-10-15 0:30 ` John Williams 2017-10-15 1:00 ` Noam Postavsky 2017-10-21 23:33 ` Noam Postavsky 2017-10-22 2:23 ` John Williams 2017-10-22 13:04 ` Noam Postavsky 2017-10-22 14:04 ` Eli Zaretskii
Code repositories for project(s) associated with this external index https://git.savannah.gnu.org/cgit/emacs.git https://git.savannah.gnu.org/cgit/emacs/org-mode.git This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.