unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* [PATCH] user/group completion for dired
@ 2011-09-21  7:35 Dmitry Antipov
  2011-09-21  8:49 ` Eli Zaretskii
  0 siblings, 1 reply; 10+ messages in thread
From: Dmitry Antipov @ 2011-09-21  7:35 UTC (permalink / raw)
  To: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 67 bytes --]

Hello,

there is a simple user/group completion for dired.

Dmitry

[-- Attachment #2: user_group_completion.patch --]
[-- Type: text/plain, Size: 4684 bytes --]

=== modified file 'configure.in'
--- configure.in	2011-09-15 03:01:25 +0000
+++ configure.in	2011-09-21 03:36:38 +0000
@@ -1206,7 +1206,7 @@
   linux/version.h sys/systeminfo.h \
   stdio_ext.h fcntl.h coff.h pty.h sys/mman.h \
   sys/vlimit.h sys/resource.h locale.h sys/_mbstate_t.h \
-  sys/utsname.h pwd.h utmp.h dirent.h util.h)
+  sys/utsname.h pwd.h grp.h utmp.h dirent.h util.h)
 
 AC_MSG_CHECKING(if personality LINUX32 can be set)
 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/personality.h>]], [[personality (PER_LINUX32)]])],
@@ -2730,6 +2730,7 @@
 sendto recvfrom getsockopt setsockopt getsockname getpeername \
 gai_strerror mkstemp getline getdelim mremap fsync sync \
 difftime mempcpy mblen mbrlen posix_memalign \
+getpwent endpwent getgrent endgrent \
 cfmakeraw cfsetspeed copysign __executable_start)
 
 dnl Cannot use AC_CHECK_FUNCS

=== modified file 'lisp/dired-aux.el'
--- lisp/dired-aux.el	2011-09-14 15:06:28 +0000
+++ lisp/dired-aux.el	2011-09-21 07:12:38 +0000
@@ -244,8 +244,12 @@
 			 (if (eq op-symbol 'touch)
 			     " (default now): "
 			   ": ")))
-	 (new-attribute (dired-mark-read-string prompt nil op-symbol
-						arg files default))
+	 (new-attribute (dired-mark-read-string
+			 prompt
+			 (cond ((eq op-symbol 'chown) (system-users))
+			       ((eq op-symbol 'chgrp) (system-groups)))
+			 nil op-symbol
+			 arg files default))
 	 (operation (concat program " " new-attribute))
 	 failures)
     (setq failures
@@ -284,7 +288,7 @@
 			 (match-string 2 modestr)
 			 (match-string 3 modestr)))))
 	 (modes (dired-mark-read-string
-		 "Change mode of %s to: "
+		 "Change mode of %s to: " nil
 		 nil 'chmod arg files default))
 	 num-modes)
     (cond ((equal modes "")
@@ -374,7 +378,7 @@
   (interactive "P")
   (let* ((file-list (dired-get-marked-files t arg))
 	 (command (dired-mark-read-string
-		   "Print %s with: "
+		   "Print %s with: " nil
  		   (mapconcat 'identity
 			      (cons lpr-command
 				    (if (stringp lpr-switches)
@@ -384,8 +388,8 @@
 		   'print arg file-list)))
     (dired-run-shell-command (dired-shell-stuff-it command file-list nil))))
 
-(defun dired-mark-read-string (prompt initial op-symbol arg files
-			       &optional default-value)
+(defun dired-mark-read-string (prompt collection initial op-symbol
+			       arg files &optional default-value)
   "Read args for a Dired marked-files command, prompting with PROMPT.
 Return the user input (a string).
 
@@ -399,9 +403,9 @@
 user enters empty input, this function returns the empty string,
 not DEFAULT-VALUE."
   (dired-mark-pop-up nil op-symbol files
-		     'read-from-minibuffer
+		     'completing-read
 		     (format prompt (dired-mark-prompt arg files))
-		     initial nil nil nil default-value))
+		     collection nil nil initial nil default-value nil))
 \f
 ;;; Cleaning a directory: flagging some backups for deletion.
 

=== modified file 'src/dired.c'
--- src/dired.c	2011-09-09 01:06:52 +0000
+++ src/dired.c	2011-09-21 07:19:33 +0000
@@ -27,7 +27,9 @@
 #ifdef HAVE_PWD_H
 #include <pwd.h>
 #endif
+#ifdef HAVE_GRP_H
 #include <grp.h>
+#endif
 
 #include <errno.h>
 #include <unistd.h>
@@ -1014,6 +1016,43 @@
   return Fstring_lessp (Fcar (f1), Fcar (f2));
 }
 \f
+
+DEFUN ("system-users", Fsystem_users, Ssystem_users, 0, 0, 0,
+       doc: /* Return a list of user names currently registered in the system.
+On UNIX systems, those are user names listed in /etc/passwd file.
+On other systems, this function always returns nil.  */)
+     (void)
+{
+  Lisp_Object users = Qnil;
+#if defined(HAVE_GETPWENT) && defined(HAVE_ENDPWENT)
+  struct passwd *pw;
+
+  while ((pw = getpwent ()))
+    users = Fcons (build_string (pw->pw_name), users);
+
+  endpwent ();
+#endif
+  return users;
+}
+
+DEFUN ("system-groups", Fsystem_groups, Ssystem_groups, 0, 0, 0,
+       doc: /* Return a list of user group names currently registered in the system.
+On UNIX systems, those are user group names listed in /etc/group file.
+On other systems, this function always returns nil.  */)
+     (void)
+{
+  Lisp_Object groups = Qnil;
+#if defined(HAVE_GETGRENT) && defined(HAVE_ENDGRENT)
+  struct group *gr;
+
+  while ((gr = getgrent ()))
+    groups = Fcons (build_string (gr->gr_name), groups);
+
+  endgrent ();
+#endif
+  return groups;
+}
+
 void
 syms_of_dired (void)
 {
@@ -1031,6 +1070,8 @@
   defsubr (&Sfile_name_all_completions);
   defsubr (&Sfile_attributes);
   defsubr (&Sfile_attributes_lessp);
+  defsubr (&Ssystem_users);
+  defsubr (&Ssystem_groups);
 
   DEFVAR_LISP ("completion-ignored-extensions", Vcompletion_ignored_extensions,
 	       doc: /* Completion ignores file names ending in any string in this list.


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] user/group completion for dired
  2011-09-21  7:35 [PATCH] user/group completion for dired Dmitry Antipov
@ 2011-09-21  8:49 ` Eli Zaretskii
  2011-09-21  9:25   ` Andreas Schwab
  2011-09-21 13:59   ` Dmitry Antipov
  0 siblings, 2 replies; 10+ messages in thread
From: Eli Zaretskii @ 2011-09-21  8:49 UTC (permalink / raw)
  To: Dmitry Antipov; +Cc: emacs-devel

> Date: Wed, 21 Sep 2011 11:35:36 +0400
> From: Dmitry Antipov <dmantipov@yandex.ru>
> 
> there is a simple user/group completion for dired.

Thanks.  Allow me a few comments.

> +DEFUN ("system-users", Fsystem_users, Ssystem_users, 0, 0, 0,
> +       doc: /* Return a list of user names currently registered in the system.
> +On UNIX systems, those are user names listed in /etc/passwd file.
> +On other systems, this function always returns nil.  */)

IMO, the last two sentences are too categorical and too OS-specific.
E.g., in the MS-DOS build of Emacs, getpwent and getgrent are
available and usable, although MS-DOS is certainly not a Unix system.
It should also be possible to write an emulation of these functions
for MS-Windows.  And even on Unix systems, I'm not sure the
information is always on /etc/passwd.  And the same goes for groups
and /etc/groups.

So please make the doc strings more vague; it should be enough to say
that if this functionality is not supported, the value is nil, or
something like that.

> +  Lisp_Object users = Qnil;

We should at least return the single user that is the current user,
instead of nil.  Emacs always knows who is the current user, on all
supported systems, so there's no need to be so restrictive when
getpwent is unavailable.

> +  while ((pw = getpwent ()))
> +    users = Fcons (build_string (pw->pw_name), users);

What happens if the user name includes non-ASCII characters?  If that
can happen, we should decode the pw_name string, not just call
build_string on the unibyte string we get.  Same issue with the group
name.



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] user/group completion for dired
  2011-09-21  8:49 ` Eli Zaretskii
@ 2011-09-21  9:25   ` Andreas Schwab
  2011-09-21 13:59   ` Dmitry Antipov
  1 sibling, 0 replies; 10+ messages in thread
From: Andreas Schwab @ 2011-09-21  9:25 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Dmitry Antipov, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

> And even on Unix systems, I'm not sure the information is always on
> /etc/passwd.

It can basically be anywhere, depending on your NSS configuration.

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] user/group completion for dired
  2011-09-21  8:49 ` Eli Zaretskii
  2011-09-21  9:25   ` Andreas Schwab
@ 2011-09-21 13:59   ` Dmitry Antipov
  2011-09-21 15:04     ` Eli Zaretskii
  2011-09-21 15:27     ` Juanma Barranquero
  1 sibling, 2 replies; 10+ messages in thread
From: Dmitry Antipov @ 2011-09-21 13:59 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel

On 09/21/2011 12:49 PM, Eli Zaretskii wrote:

> IMO, the last two sentences are too categorical and too OS-specific.
> E.g., in the MS-DOS build of Emacs, getpwent and getgrent are
> available and usable, although MS-DOS is certainly not a Unix system.
> It should also be possible to write an emulation of these functions
> for MS-Windows.  And even on Unix systems, I'm not sure the
> information is always on /etc/passwd.  And the same goes for groups
> and /etc/groups.
>
> So please make the doc strings more vague; it should be enough to say
> that if this functionality is not supported, the value is nil, or
> something like that.

OK. I realize that receiving the list of system users/groups may require
NSS/LDAP/whatever queries. On GNU/Linux system, it should be possible
to interface libuser; other systems might have the similar methods,
but I'm not sure it's worth playing with them just for input completion
task.

> We should at least return the single user that is the current user,
> instead of nil.  Emacs always knows who is the current user, on all
> supported systems, so there's no need to be so restrictive when
> getpwent is unavailable.

OK, I guess it should be Vuser_real_login_name.

> What happens if the user name includes non-ASCII characters?  If that
> can happen, we should decode the pw_name string, not just call
> build_string on the unibyte string we get.  Same issue with the group
> name.

Comment around build_string() says it should guess about string data
and produce multibyte string if necessary. On my system (Fedora 15)
it was able to decode and represent tõendidütles (no ideas what language
it is and what does it mean :-) as multibyte string.

Dmitry




^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] user/group completion for dired
  2011-09-21 13:59   ` Dmitry Antipov
@ 2011-09-21 15:04     ` Eli Zaretskii
  2011-09-21 15:54       ` Dmitry Antipov
  2011-09-21 15:27     ` Juanma Barranquero
  1 sibling, 1 reply; 10+ messages in thread
From: Eli Zaretskii @ 2011-09-21 15:04 UTC (permalink / raw)
  To: Dmitry Antipov; +Cc: emacs-devel

> Date: Wed, 21 Sep 2011 17:59:14 +0400
> From: Dmitry Antipov <dmantipov@yandex.ru>
> CC: emacs-devel@gnu.org
> 
> On 09/21/2011 12:49 PM, Eli Zaretskii wrote:
> 
> > IMO, the last two sentences are too categorical and too OS-specific.
> > E.g., in the MS-DOS build of Emacs, getpwent and getgrent are
> > available and usable, although MS-DOS is certainly not a Unix system.
> > It should also be possible to write an emulation of these functions
> > for MS-Windows.  And even on Unix systems, I'm not sure the
> > information is always on /etc/passwd.  And the same goes for groups
> > and /etc/groups.
> >
> > So please make the doc strings more vague; it should be enough to say
> > that if this functionality is not supported, the value is nil, or
> > something like that.
> 
> OK. I realize that receiving the list of system users/groups may require
> NSS/LDAP/whatever queries. On GNU/Linux system, it should be possible
> to interface libuser; other systems might have the similar methods,
> but I'm not sure it's worth playing with them just for input completion
> task.

??? My comment was only about the doc string which referenced
/etc/passwd.  AFAIK, no matter where the information resides, the
functions you used will still be able to get at it.  If I'm right,
there's no need to change the code regarding that.

> > We should at least return the single user that is the current user,
> > instead of nil.  Emacs always knows who is the current user, on all
> > supported systems, so there's no need to be so restrictive when
> > getpwent is unavailable.
> 
> OK, I guess it should be Vuser_real_login_name.

Yes, I think so.

> > What happens if the user name includes non-ASCII characters?  If that
> > can happen, we should decode the pw_name string, not just call
> > build_string on the unibyte string we get.  Same issue with the group
> > name.
> 
> Comment around build_string() says it should guess about string data
> and produce multibyte string if necessary.

Why let it guess?  You can do it with 100% certainty in this case,
because the encoding of strings provided by the OS is known -- it's
held in Vlocale_coding_system.  See system_process_attributes for an
example of how to do this.

> On my system (Fedora 15) it was able to decode and represent
> tõendidütles (no ideas what language it is and what does it mean :-)
> as multibyte string.

That's because GNU/Linux systems normally use an encoding that maps
1:1 to the internal Emacs representation of characters.  I'm guessing
that if you look in a debugger on the string you get from getpwent,
you will see it's UTF-8 encoded.  If so, it's sheer luck that it
worked for you.




^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] user/group completion for dired
  2011-09-21 13:59   ` Dmitry Antipov
  2011-09-21 15:04     ` Eli Zaretskii
@ 2011-09-21 15:27     ` Juanma Barranquero
  2011-09-21 20:21       ` Juri Linkov
  1 sibling, 1 reply; 10+ messages in thread
From: Juanma Barranquero @ 2011-09-21 15:27 UTC (permalink / raw)
  To: Dmitry Antipov; +Cc: Eli Zaretskii, emacs-devel

On Wed, Sep 21, 2011 at 15:59, Dmitry Antipov <dmantipov@yandex.ru> wrote:

>  tõendidütles (no ideas what language it is and what does it mean :-)

Likely, Estonian.

As for the meaning, Google Translate says, not entirely helpfully:
"tõendid ütles" => "evidence of said"

    Juanma



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] user/group completion for dired
  2011-09-21 15:04     ` Eli Zaretskii
@ 2011-09-21 15:54       ` Dmitry Antipov
  2011-09-21 17:40         ` Glenn Morris
  0 siblings, 1 reply; 10+ messages in thread
From: Dmitry Antipov @ 2011-09-21 15:54 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 363 bytes --]

On 09/21/2011 07:04 PM, Eli Zaretskii wrote:

> Why let it guess?  You can do it with 100% certainty in this case,
> because the encoding of strings provided by the OS is known -- it's
> held in Vlocale_coding_system.  See system_process_attributes for an
> example of how to do this.

I've looked through Ffile_attributes() and have made the same thing.

Dmitry

[-- Attachment #2: user_group_completion_2.patch --]
[-- Type: text/plain, Size: 4725 bytes --]

=== modified file 'configure.in'
--- configure.in	2011-09-15 03:01:25 +0000
+++ configure.in	2011-09-21 03:36:38 +0000
@@ -1206,7 +1206,7 @@
   linux/version.h sys/systeminfo.h \
   stdio_ext.h fcntl.h coff.h pty.h sys/mman.h \
   sys/vlimit.h sys/resource.h locale.h sys/_mbstate_t.h \
-  sys/utsname.h pwd.h utmp.h dirent.h util.h)
+  sys/utsname.h pwd.h grp.h utmp.h dirent.h util.h)
 
 AC_MSG_CHECKING(if personality LINUX32 can be set)
 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/personality.h>]], [[personality (PER_LINUX32)]])],
@@ -2730,6 +2730,7 @@
 sendto recvfrom getsockopt setsockopt getsockname getpeername \
 gai_strerror mkstemp getline getdelim mremap fsync sync \
 difftime mempcpy mblen mbrlen posix_memalign \
+getpwent endpwent getgrent endgrent \
 cfmakeraw cfsetspeed copysign __executable_start)
 
 dnl Cannot use AC_CHECK_FUNCS

=== modified file 'lisp/dired-aux.el'
--- lisp/dired-aux.el	2011-09-14 15:06:28 +0000
+++ lisp/dired-aux.el	2011-09-21 07:12:38 +0000
@@ -244,8 +244,12 @@
 			 (if (eq op-symbol 'touch)
 			     " (default now): "
 			   ": ")))
-	 (new-attribute (dired-mark-read-string prompt nil op-symbol
-						arg files default))
+	 (new-attribute (dired-mark-read-string
+			 prompt
+			 (cond ((eq op-symbol 'chown) (system-users))
+			       ((eq op-symbol 'chgrp) (system-groups)))
+			 nil op-symbol
+			 arg files default))
 	 (operation (concat program " " new-attribute))
 	 failures)
     (setq failures
@@ -284,7 +288,7 @@
 			 (match-string 2 modestr)
 			 (match-string 3 modestr)))))
 	 (modes (dired-mark-read-string
-		 "Change mode of %s to: "
+		 "Change mode of %s to: " nil
 		 nil 'chmod arg files default))
 	 num-modes)
     (cond ((equal modes "")
@@ -374,7 +378,7 @@
   (interactive "P")
   (let* ((file-list (dired-get-marked-files t arg))
 	 (command (dired-mark-read-string
-		   "Print %s with: "
+		   "Print %s with: " nil
  		   (mapconcat 'identity
 			      (cons lpr-command
 				    (if (stringp lpr-switches)
@@ -384,8 +388,8 @@
 		   'print arg file-list)))
     (dired-run-shell-command (dired-shell-stuff-it command file-list nil))))
 
-(defun dired-mark-read-string (prompt initial op-symbol arg files
-			       &optional default-value)
+(defun dired-mark-read-string (prompt collection initial op-symbol
+			       arg files &optional default-value)
   "Read args for a Dired marked-files command, prompting with PROMPT.
 Return the user input (a string).
 
@@ -399,9 +403,9 @@
 user enters empty input, this function returns the empty string,
 not DEFAULT-VALUE."
   (dired-mark-pop-up nil op-symbol files
-		     'read-from-minibuffer
+		     'completing-read
 		     (format prompt (dired-mark-prompt arg files))
-		     initial nil nil nil default-value))
+		     collection nil nil initial nil default-value nil))
 \f
 ;;; Cleaning a directory: flagging some backups for deletion.
 

=== modified file 'src/dired.c'
--- src/dired.c	2011-09-09 01:06:52 +0000
+++ src/dired.c	2011-09-21 15:41:25 +0000
@@ -27,7 +27,9 @@
 #ifdef HAVE_PWD_H
 #include <pwd.h>
 #endif
+#ifdef HAVE_GRP_H
 #include <grp.h>
+#endif
 
 #include <errno.h>
 #include <unistd.h>
@@ -1014,6 +1016,45 @@
   return Fstring_lessp (Fcar (f1), Fcar (f2));
 }
 \f
+
+DEFUN ("system-users", Fsystem_users, Ssystem_users, 0, 0, 0,
+       doc: /* Return a list of user names currently registered in the system.
+The value may be nil if not supported on this platform.  */)
+     (void)
+{
+  Lisp_Object users = Qnil;
+#if defined(HAVE_GETPWENT) && defined(HAVE_ENDPWENT)
+  struct passwd *pw;
+
+  while ((pw = getpwent ()))
+    users = Fcons (DECODE_SYSTEM (build_string (pw->pw_name)), users);
+
+  endpwent ();
+#endif
+  if (EQ (users, Qnil))
+    /* At least current user is always known. */
+    users = Fcons (Vuser_real_login_name, Qnil);
+  return users;
+}
+
+DEFUN ("system-groups", Fsystem_groups, Ssystem_groups, 0, 0, 0,
+       doc: /* Return a list of user group names currently registered in the system.
+The value may be nil if not supported on this platform.  */)
+     (void)
+{
+  Lisp_Object groups = Qnil;
+#if defined(HAVE_GETGRENT) && defined(HAVE_ENDGRENT)
+  struct group *gr;
+  int length;
+
+  while ((gr = getgrent ()))
+    groups = Fcons (DECODE_SYSTEM (build_string (gr->gr_name)), groups);
+
+  endgrent ();
+#endif
+  return groups;
+}
+
 void
 syms_of_dired (void)
 {
@@ -1031,6 +1072,8 @@
   defsubr (&Sfile_name_all_completions);
   defsubr (&Sfile_attributes);
   defsubr (&Sfile_attributes_lessp);
+  defsubr (&Ssystem_users);
+  defsubr (&Ssystem_groups);
 
   DEFVAR_LISP ("completion-ignored-extensions", Vcompletion_ignored_extensions,
 	       doc: /* Completion ignores file names ending in any string in this list.


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] user/group completion for dired
  2011-09-21 15:54       ` Dmitry Antipov
@ 2011-09-21 17:40         ` Glenn Morris
  2011-09-21 20:22           ` Juri Linkov
  0 siblings, 1 reply; 10+ messages in thread
From: Glenn Morris @ 2011-09-21 17:40 UTC (permalink / raw)
  To: Dmitry Antipov; +Cc: Eli Zaretskii, emacs-devel


For the record, this is

http://debbugs.gnu.org/cgi/bugreport.cgi?bug=7900

When you have the final version of your patch, you might send it there
as well so that it does not get lost (it can't be applied now during the
feature freeze). Please try to include a ChangeLog entry. Thanks.



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] user/group completion for dired
  2011-09-21 15:27     ` Juanma Barranquero
@ 2011-09-21 20:21       ` Juri Linkov
  0 siblings, 0 replies; 10+ messages in thread
From: Juri Linkov @ 2011-09-21 20:21 UTC (permalink / raw)
  To: Juanma Barranquero; +Cc: Eli Zaretskii, Dmitry Antipov, emacs-devel

>>  tõendidütles (no ideas what language it is and what does it mean :-)
>
> Likely, Estonian.
>
> As for the meaning, Google Translate says, not entirely helpfully:
> "tõendid ütles" => "evidence of said"

Yes, it's Estonian, but grammatically incorrect (has no grammatical
number agreement of between singular and plural) and makes no sense
out of context.



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] user/group completion for dired
  2011-09-21 17:40         ` Glenn Morris
@ 2011-09-21 20:22           ` Juri Linkov
  0 siblings, 0 replies; 10+ messages in thread
From: Juri Linkov @ 2011-09-21 20:22 UTC (permalink / raw)
  To: Glenn Morris; +Cc: Eli Zaretskii, Dmitry Antipov, emacs-devel

> For the record, this is
>
> http://debbugs.gnu.org/cgi/bugreport.cgi?bug=7900

And also

http://debbugs.gnu.org/cgi/bugreport.cgi?bug=1224

Should they be merged?



^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2011-09-21 20:22 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-09-21  7:35 [PATCH] user/group completion for dired Dmitry Antipov
2011-09-21  8:49 ` Eli Zaretskii
2011-09-21  9:25   ` Andreas Schwab
2011-09-21 13:59   ` Dmitry Antipov
2011-09-21 15:04     ` Eli Zaretskii
2011-09-21 15:54       ` Dmitry Antipov
2011-09-21 17:40         ` Glenn Morris
2011-09-21 20:22           ` Juri Linkov
2011-09-21 15:27     ` Juanma Barranquero
2011-09-21 20:21       ` Juri Linkov

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).