unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Adding a hook to list-processes
@ 2010-11-27 18:52 Bob Rogers
  2010-11-27 19:43 ` Davis Herring
  2010-11-28 18:49 ` Stefan Monnier
  0 siblings, 2 replies; 13+ messages in thread
From: Bob Rogers @ 2010-11-27 18:52 UTC (permalink / raw)
  To: emacs-devel

   I tried to do this using the patch below; it compiles without
warning, but seems to have no effect.  Evaluating the following code in
src/emacs:

	(defun rgr-list-processes-hook ()
	  (message "In buffer %S" (current-buffer)))
	(add-hook 'after-list-processes-hook 'rgr-list-processes-hook)

and then "M-x list-processes RET" does not produce the expected message.
I cargo-culted this based on Qmouse_leave_buffer_hook; what did I do
wrong?  TIA,

					-- Bob Rogers
					   http://www.rgrjr.com/

P.S.  FWIW, I'm trying to turn the buffer names into buttons.  Given my
C skills, using a hook seemed like a safer bet.

------------------------------------------------------------------------
diff --git a/src/process.c b/src/process.c
index f8ca095..e95d465 100644
--- a/src/process.c
+++ b/src/process.c
@@ -113,6 +113,7 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 #include "nsterm.h"
 #endif
 
+Lisp_Object Vafter_list_processes_hook, Qafter_list_processes_hook;
 Lisp_Object Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess, Qttname, Qtpgid;
 Lisp_Object Qminflt, Qmajflt, Qcminflt, Qcmajflt, Qutime, Qstime, Qcstime;
 Lisp_Object Qcutime, Qpri, Qnice, Qthcount, Qstart, Qvsize, Qrss, Qargs;
@@ -1493,6 +1494,11 @@ list_processes_1 (Lisp_Object query_only)
       status_notify (NULL);
       redisplay_preserve_echo_area (13);
     }
+
+  /* Give other code a chance to tweak the buffer.  */
+  if (!NILP (Vafter_list_processes_hook))
+    call1 (Vrun_hooks, Qafter_list_processes_hook);
+
   return Qnil;
 }
 
@@ -7736,6 +7742,13 @@ The variable takes effect when `start-process' is called.  */);
 
 #endif	/* subprocesses */
 
+  Qafter_list_processes_hook = intern_c_string ("mouse-leave-buffer-hook");
+  staticpro (&Qafter_list_processes_hook);
+
+  DEFVAR_LISP ("after-list-processes-hook", &Vafter_list_processes_hook,
+	       doc: /* Hook run after list-processes.  */);
+  Vafter_list_processes_hook = Qnil;
+
   defsubr (&Sget_buffer_process);
   defsubr (&Sprocess_inherit_coding_system_flag);
   defsubr (&Slist_system_processes);



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

* Re: Adding a hook to list-processes
  2010-11-27 18:52 Adding a hook to list-processes Bob Rogers
@ 2010-11-27 19:43 ` Davis Herring
  2010-11-27 20:25   ` Bob Rogers
  2010-11-28 18:49 ` Stefan Monnier
  1 sibling, 1 reply; 13+ messages in thread
From: Davis Herring @ 2010-11-27 19:43 UTC (permalink / raw)
  To: Bob Rogers; +Cc: emacs-devel

> +  Qafter_list_processes_hook = intern_c_string
> ("mouse-leave-buffer-hook");

I don't know if the Q variable matters to DEFVAR_LISP, but this is
certainly wrong.

Davis

-- 
This product is sold by volume, not by mass.  If it appears too dense or
too sparse, it is because mass-energy conversion has occurred during
shipping.



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

* Re: Adding a hook to list-processes
  2010-11-27 19:43 ` Davis Herring
@ 2010-11-27 20:25   ` Bob Rogers
  0 siblings, 0 replies; 13+ messages in thread
From: Bob Rogers @ 2010-11-27 20:25 UTC (permalink / raw)
  To: herring; +Cc: emacs-devel

   From: "Davis Herring" <herring@lanl.gov>
   Date: Sat, 27 Nov 2010 11:43:54 -0800 (PST)

   > +  Qafter_list_processes_hook = intern_c_string
   > ("mouse-leave-buffer-hook");

   I don't know if the Q variable matters to DEFVAR_LISP, but this is
   certainly wrong.

   Davis

Good eye; thanks!  Knew it had to be something stupid like that . . .

					-- Bob



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

* Re: Adding a hook to list-processes
  2010-11-27 18:52 Adding a hook to list-processes Bob Rogers
  2010-11-27 19:43 ` Davis Herring
@ 2010-11-28 18:49 ` Stefan Monnier
  2010-11-28 18:54   ` Bob Rogers
  2010-11-30  6:05   ` Elisp implementation of list-processes Bob Rogers
  1 sibling, 2 replies; 13+ messages in thread
From: Stefan Monnier @ 2010-11-28 18:49 UTC (permalink / raw)
  To: Bob Rogers; +Cc: emacs-devel

>    I tried to do this using the patch below; it compiles without
> warning, but seems to have no effect.  Evaluating the following code in
> src/emacs:

> 	(defun rgr-list-processes-hook ()
> 	  (message "In buffer %S" (current-buffer)))
> 	(add-hook 'after-list-processes-hook 'rgr-list-processes-hook)

BTW, rather than add a hook to this piece of C code, I'd much rather
move this piece of code to Elisp first.  There is no good reason for it
to be written in C.  If it can't currently be written in Elisp because
of some missing Elisp primitives, then they should be added.


        Stefan



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

* Re: Adding a hook to list-processes
  2010-11-28 18:49 ` Stefan Monnier
@ 2010-11-28 18:54   ` Bob Rogers
  2010-11-30  6:05   ` Elisp implementation of list-processes Bob Rogers
  1 sibling, 0 replies; 13+ messages in thread
From: Bob Rogers @ 2010-11-28 18:54 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

   From: Stefan Monnier <monnier@IRO.UMontreal.CA>
   Date: Sun, 28 Nov 2010 13:49:36 -0500

   > 	(defun rgr-list-processes-hook ()
   > 	  (message "In buffer %S" (current-buffer)))
   > 	(add-hook 'after-list-processes-hook 'rgr-list-processes-hook)

   BTW, rather than add a hook to this piece of C code, I'd much rather
   move this piece of code to Elisp first.  There is no good reason for it
   to be written in C.  If it can't currently be written in Elisp because
   of some missing Elisp primitives, then they should be added.

	   Stefan

Great; I will start hacking in that direction, then.

					-- Bob



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

* Elisp implementation of list-processes
  2010-11-28 18:49 ` Stefan Monnier
  2010-11-28 18:54   ` Bob Rogers
@ 2010-11-30  6:05   ` Bob Rogers
  2010-11-30 21:06     ` Elisp implementation of list-processes (and: Why is list-processes implemented in C?) Stefan Monnier
                       ` (3 more replies)
  1 sibling, 4 replies; 13+ messages in thread
From: Bob Rogers @ 2010-11-30  6:05 UTC (permalink / raw)
  To: Stefan Monnier, emacs-devel

   From: Stefan Monnier <monnier@IRO.UMontreal.CA>
   Date: Sun, 28 Nov 2010 13:49:36 -0500

   . . .

   BTW, rather than add a hook to this piece of C code, I'd much rather
   move this piece of code to Elisp first.  There is no good reason for it
   to be written in C.  If it can't currently be written in Elisp because
   of some missing Elisp primitives, then they should be added.

	   Stefan

A nearly complete Elisp implementation of Flist_processes is included
below; feedback welcome.  It should produce the identical output (except
for using buttons for buffer names), though I haven't tested it on the
more exotic kinds of processes.  The only thing I couldn't do was the
following snippet from the very end:

	if (exited)
	  {
	    status_notify (NULL);
	    redisplay_preserve_echo_area (13);
	  }

status_notify is a static function in process.c, used to clean up when
we find exited processes.  It is unclear to me whether
redisplay_preserve_echo_area is really necessary.  In any case, a small
DEFUN would seem to be in order.  Not sure what to call it, though;
"status_notify" is not very informative.  Perhaps "process-clean-up"?

   The only other question is:  Where should it go?  It is called from
save-buffers-kill-emacs in files.el (the only other use is in
lisp/eshell/esh-proc.el), but files.el is already pretty crowded.  On
the other hand, autoloading it for something so basic might be
problematic.  Suggestions?

					-- Bob Rogers
					   http://www.rgrjr.com/

------------------------------------------------------------------------
;;;; Elisp implementation of list-processes.

(defun list-proc-insert-line (minspace underline-p &rest labels-and-indents)
  (let ((tail labels-and-indents))
    (while tail
      (let ((item (pop tail)))
	(cond ((null item)
		;; Ignore the next.
		(pop tail))
	      ((integerp item)
		(indent-to item minspace))
	      (underline-p
		(insert (make-string (length item) ?-)))
	      ((bufferp item)
		(let ((name (buffer-name item)))
		  (if (not name)
		      (insert "(Killed)")
		      (insert-button (buffer-name item)
				     'action 'list-proc-button-select-buffer
				     'help-echo "mouse-2, RET: Select this buffer"
				     'buffer-name (buffer-name item)))))
	      (t
		(insert item))))))
  (insert "\n"))

(defun list-proc-button-select-buffer (button)
  ;; Select the buffer named by the buffer-name property of the button.
  (let* ((buffer-name (button-get button 'buffer-name))
	 (buffer (and buffer-name (get-buffer buffer-name))))
    (when buffer
      (switch-to-buffer buffer))))

(defun list-proc-make-command (proc)
  ;; Return a string that describes the process-command of PROC.  This is just
  ;; the list of command words for a normal subprocess, and a description for
  ;; network and serial connections.
  (let ((status (process-status proc))
	(proc-type (process-type proc))
	(command (process-command proc)))
    (cond ((eq status 'listen)
	    ;; It's a listening server socket.
	    (let ((port (plist-get (process-plist proc) :service))
		  (type (if (process-datagram-address proc)
			    "datagram" "stream")))
	      (cond ((integerp port)
		      (setq port (number-to-string port)))
		    ((null port)
		      (setq port (format-network-address
				   (plist-get (process-plist proc) :local)))))
	      (concat "(network " type " server on " port ")")))
	  ((eq proc-type 'network)
	    (let ((host (plist-get (process-plist proc) :host))
		  (type (if (process-datagram-address proc)
			    "datagram" "stream")))
	      (unless (stringp host)
		(setq host (plist-get (process-plist proc) :service))
		(when (integerp host)
		  (setq host (format "%d" host))))
	      (when (null host)
		(setq host (format-network-address
			     (plist-get (process-plist proc) :remote))))
	      (concat "(network " type " connection to "
		      (if (stringp host) host "?") ")")))
	  ((eq proc-type 'serial)
	    (let ((port (plist-get (process-plist proc) :port))
		  (speed (plist-get (process-plist proc) :speed)))
	      (concat "(serial port "
		      (if (stringp port) port "?")
		      (if (integerp speed)
			  (format " at %d b/s" speed)
			  "")
		      ")")))
	  (t
	    (mapconcat 'identity command " ")))))

(defun list-proc-make-status (proc)
  ;; Return a string describing the PROC's process-status.
  (let ((status (process-status proc)))
    (when (consp status)
      (setq status (car status)))
    (let ((result (cond ((eq status 'signal)
			  (symbol-name status))
			((member (process-type proc) '(network serial))
			  (cond ((eq status 'exit) "closed")
				((eq (process-command proc) t) "stopped")
				((eq status 'run) "open")
				(t (symbol-name status))))
			(t
			  (symbol-name status)))))
      (if (eq status 'exit)
	  (let ((code (cadr (process-status proc))))
	    (format "%s %d" result code))
	  result))))

(defun el-list-processes (&optional query-only)
  "Display a list of all processes.
If optional argument QUERY-ONLY is non-nil, only processes with
the query-on-exit flag set will be listed.
Any process listed as exited or signaled is actually eliminated
after the listing is made."
  (interactive)	       		  
  (with-current-buffer (get-buffer-create "*Process List*")
    (let ((w-proc 4)
	  (w-buffer 6)
	  (w-tty 0)
	  (filtered-processes nil))

      ;; Compute field widths.
      (dolist (proc (process-list))
	(let ((type (process-type proc))
	      (name (process-name proc))
	      (tty-name (process-tty-name proc))
	      (buffer (process-buffer proc)))
	  (when (and type
		     (or (not query-only)
			 (process-query-on-exit-flag proc)))
	    (push proc filtered-processes)
	    (if (and name (> (length name) w-proc))
		(setq w-proc (length name)))
	    (if buffer
		(let* ((buf-name (buffer-name buffer))
		       (len (if buf-name
				(length buf-name)
				;; "(Killed)"
				8)))
		  (if (> len w-buffer)
		      (setq w-buffer len))))
	    (if (and tty-name (> (length tty-name) w-tty))
		(setq w-tty (length tty-name))))))

      ;; Print headings.
      (let* ((i-status (+ w-proc 1))
	     (i-buffer (+ i-status 9))
	     (i-tty nil)
	     (i-command (+ i-buffer w-buffer 1))
	     (minspace 1)
	     (buffer-read-only nil)
	     (buffer-undo-list t))
	(when (> w-tty 0)
	  (setq i-tty i-command
		i-command (+ i-tty w-tty 1)))
	(setq truncate-lines t)
	(erase-buffer)
	(dolist (underline-p '(nil t))
	  (list-proc-insert-line minspace underline-p "Proc"
				 i-status "Status"
				 i-buffer "Buffer"
				 i-tty "Tty"
				 i-command "Command"))

	;; Generate content.
	(dolist (proc filtered-processes)
	  (list-proc-insert-line minspace nil (process-name proc)
				 i-status (list-proc-make-status proc)
				 i-buffer (or (process-buffer proc) "(none)")
				 i-tty (or (process-tty-name proc) "")
				 i-command (list-proc-make-command proc)))

	;; Done.
	(goto-char (point-min))
	(set-buffer-modified-p nil)
	(display-buffer (current-buffer))))))



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

* Re: Elisp implementation of list-processes (and: Why is list-processes implemented in C?)
  2010-11-30  6:05   ` Elisp implementation of list-processes Bob Rogers
@ 2010-11-30 21:06     ` Stefan Monnier
  2010-12-01  3:27       ` Leo
  2010-12-01  4:16       ` Elisp implementation of list-processes (and: Why islist-processes " Drew Adams
  2010-12-01 10:55     ` Elisp implementation of list-processes Leo
                       ` (2 subsequent siblings)
  3 siblings, 2 replies; 13+ messages in thread
From: Stefan Monnier @ 2010-11-30 21:06 UTC (permalink / raw)
  To: Bob Rogers, Leo; +Cc: emacs-devel

> A nearly complete Elisp implementation of Flist_processes is included
> below; feedback welcome.

So we now have 2 implementations candidates. :-(

> It should produce the identical output (except
> for using buttons for buffer names), though I haven't tested it on the
> more exotic kinds of processes.  The only thing I couldn't do was the
> following snippet from the very end:

> 	if (exited)
> 	  {
> 	    status_notify (NULL);
> 	    redisplay_preserve_echo_area (13);
> 	  }

Leo had a similar problem.  I don't have time to dig into it right now,
but I suspect that this part of the behavior can be dropped.  If not,
maybe something like (sit-for 0) will do the trick.

>    The only other question is:  Where should it go?  It is called from
> save-buffers-kill-emacs in files.el (the only other use is in
> lisp/eshell/esh-proc.el), but files.el is already pretty crowded.  On
> the other hand, autoloading it for something so basic might be
> problematic.  Suggestions?

It should probably go into subr.el.  Yes, it's a large file, but that's
not really a problem.  The only real problem with it is that this file
can't use CL macros (because CL macros use functions defined in
subr.el).


        Stefan "who hasn't had time to look at either implementation"



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

* Re: Elisp implementation of list-processes (and: Why is list-processes implemented in C?)
  2010-11-30 21:06     ` Elisp implementation of list-processes (and: Why is list-processes implemented in C?) Stefan Monnier
@ 2010-12-01  3:27       ` Leo
  2010-12-01  4:16       ` Elisp implementation of list-processes (and: Why islist-processes " Drew Adams
  1 sibling, 0 replies; 13+ messages in thread
From: Leo @ 2010-12-01  3:27 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Bob Rogers, emacs-devel


Hello Bob and Stefan,

On 2010-11-30 21:06 +0000, Stefan Monnier wrote:
>> A nearly complete Elisp implementation of Flist_processes is included
>> below; feedback welcome.
>
> So we now have 2 implementations candidates. :-(

I have put my implementation here:
https://github.com/leoliu/emacs-process.

Comments welcome. I'd love to look at Bob's implementation if it is
available somewhere. Emacs-Devel mailing list seems to be down for the
moment.

Cheers,
Leo



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

* RE: Elisp implementation of list-processes (and: Why islist-processes implemented in C?)
  2010-11-30 21:06     ` Elisp implementation of list-processes (and: Why is list-processes implemented in C?) Stefan Monnier
  2010-12-01  3:27       ` Leo
@ 2010-12-01  4:16       ` Drew Adams
  1 sibling, 0 replies; 13+ messages in thread
From: Drew Adams @ 2010-12-01  4:16 UTC (permalink / raw)
  To: 'Stefan Monnier', 'Bob Rogers', 'Leo'
  Cc: 'emacs-devel'

> It should probably go into subr.el.  Yes, it's a large file, 
> but that's not really a problem.  The only real problem with
> it is that this file can't use CL macros (because CL macros
> use functions defined in subr.el).

What about breaking out those functions used by CL macros into their own file?
That way other stuff in the file can use CL macros.  Otherwise it seems like
you're working with a pretty artificial limitation.

(Are those functions used _only_ by CL macros?  I'd guess not, otherwise we
would already have put them in their own file with a `cl-' prefix.)




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

* Re: Elisp implementation of list-processes
  2010-11-30  6:05   ` Elisp implementation of list-processes Bob Rogers
  2010-11-30 21:06     ` Elisp implementation of list-processes (and: Why is list-processes implemented in C?) Stefan Monnier
@ 2010-12-01 10:55     ` Leo
  2010-12-01 11:12     ` Leo
  2010-12-01 21:12     ` Richard Stallman
  3 siblings, 0 replies; 13+ messages in thread
From: Leo @ 2010-12-01 10:55 UTC (permalink / raw)
  To: Bob Rogers; +Cc: Stefan Monnier, emacs-devel

On 2010-11-30 06:05 +0000, Bob Rogers wrote:
> status_notify is a static function in process.c, used to clean up when
> we find exited processes.  It is unclear to me whether
> redisplay_preserve_echo_area is really necessary.  In any case, a small
> DEFUN would seem to be in order.  Not sure what to call it, though;
> "status_notify" is not very informative.  Perhaps "process-clean-up"?
>
>    The only other question is:  Where should it go?  It is called from
> save-buffers-kill-emacs in files.el (the only other use is in
> lisp/eshell/esh-proc.el), but files.el is already pretty crowded.  On
> the other hand, autoloading it for something so basic might be
> problematic.  Suggestions?

I think it could be moved to process-list.

In a similar scenario: list-buffers and buffer-list, the latter only
returns live buffers.

Cheers,
Leo



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

* Re: Elisp implementation of list-processes
  2010-11-30  6:05   ` Elisp implementation of list-processes Bob Rogers
  2010-11-30 21:06     ` Elisp implementation of list-processes (and: Why is list-processes implemented in C?) Stefan Monnier
  2010-12-01 10:55     ` Elisp implementation of list-processes Leo
@ 2010-12-01 11:12     ` Leo
  2010-12-02  2:48       ` Bob Rogers
  2010-12-01 21:12     ` Richard Stallman
  3 siblings, 1 reply; 13+ messages in thread
From: Leo @ 2010-12-01 11:12 UTC (permalink / raw)
  To: Bob Rogers; +Cc: Stefan Monnier, emacs-devel

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

On 2010-11-30 06:05 +0000, Bob Rogers wrote:
> A nearly complete Elisp implementation of Flist_processes is included
> below; feedback welcome. It should produce the identical output
> (except for using buttons for buffer names), though I haven't tested
> it on the more exotic kinds of processes.

I think your version follows the C version more closely, but it is also
less lispy.

In my version (as attached), I use list of plists for processes (See:
emacs-process-info) and then display that in a buffer with KEY
designates the heading and omit columns with 0 width.


[-- Attachment #2: emacs-process.el --]
[-- Type: application/emacs-lisp, Size: 7305 bytes --]

[-- Attachment #3: Type: text/plain, Size: 13 bytes --]


Cheers,
Leo

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

* Re: Elisp implementation of list-processes
  2010-11-30  6:05   ` Elisp implementation of list-processes Bob Rogers
                       ` (2 preceding siblings ...)
  2010-12-01 11:12     ` Leo
@ 2010-12-01 21:12     ` Richard Stallman
  3 siblings, 0 replies; 13+ messages in thread
From: Richard Stallman @ 2010-12-01 21:12 UTC (permalink / raw)
  To: Bob Rogers; +Cc: monnier, emacs-devel

    status_notify is a static function in process.c, used to clean up when
    we find exited processes.  It is unclear to me whether
    redisplay_preserve_echo_area is really necessary.  In any case, a small
    DEFUN would seem to be in order.  Not sure what to call it, though;
    "status_notify" is not very informative.  Perhaps "process-clean-up"?

Calling status_notify implements this feature:

    Any process listed as exited or signaled is actually eliminated
    after the listing is made.  */)

So it would be clean to add a function `process-clean-up' to do it.

-- 
Richard Stallman
President, Free Software Foundation
51 Franklin St
Boston MA 02110
USA
www.fsf.org, www.gnu.org



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

* Re: Elisp implementation of list-processes
  2010-12-01 11:12     ` Leo
@ 2010-12-02  2:48       ` Bob Rogers
  0 siblings, 0 replies; 13+ messages in thread
From: Bob Rogers @ 2010-12-02  2:48 UTC (permalink / raw)
  To: Leo; +Cc: Stefan Monnier, emacs-devel

   From: Leo <sdl.web@gmail.com>
   Date: Wed, 01 Dec 2010 11:12:05 +0000

   On 2010-11-30 06:05 +0000, Bob Rogers wrote:
   > A nearly complete Elisp implementation of Flist_processes is included
   > below; feedback welcome . . .

   I think your version follows the C version more closely . . .

Yes, I was trying hard to stick to the original list-processes
formatting, including the presentation of networking process types.

   In my version (as attached), I use list of plists for processes (See:
   emacs-process-info) and then display that in a buffer with KEY
   designates the heading and omit columns with 0 width.

I see you've gone to the trouble of making a whole mode for it; I was
visualizing something more light-weight, just a drop-in replacement for
the existing command.  But if Stefan prefers a mode, it would make sense
to graft some of my connection-formatting code into your mode.

   Stefan?

					-- Bob



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

end of thread, other threads:[~2010-12-02  2:48 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-11-27 18:52 Adding a hook to list-processes Bob Rogers
2010-11-27 19:43 ` Davis Herring
2010-11-27 20:25   ` Bob Rogers
2010-11-28 18:49 ` Stefan Monnier
2010-11-28 18:54   ` Bob Rogers
2010-11-30  6:05   ` Elisp implementation of list-processes Bob Rogers
2010-11-30 21:06     ` Elisp implementation of list-processes (and: Why is list-processes implemented in C?) Stefan Monnier
2010-12-01  3:27       ` Leo
2010-12-01  4:16       ` Elisp implementation of list-processes (and: Why islist-processes " Drew Adams
2010-12-01 10:55     ` Elisp implementation of list-processes Leo
2010-12-01 11:12     ` Leo
2010-12-02  2:48       ` Bob Rogers
2010-12-01 21:12     ` Richard Stallman

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).