unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Minibuffer default values list
@ 2007-10-22  0:22 Juri Linkov
  2007-10-23  7:12 ` Richard Stallman
                   ` (2 more replies)
  0 siblings, 3 replies; 38+ messages in thread
From: Juri Linkov @ 2007-10-22  0:22 UTC (permalink / raw)
  To: emacs-devel

I installed a new feature (with updates in NEWS and Info manuals) since
Richard approved it twice before the previous release but that was postponed
due to feature freeze.

It allows specifying a list of default values in the DEFAULT argument of
minibuffer functions.  This list of default values is accessible by typing
M-n in the minibuffer; each M-n inserts the next value.

The first use of this feature is the shell command guessing in dired-x.
It now puts a list of available commands to the default list (accessible
via M-n after typing `!' in the dired buffer) instead of temporarily
pushing it to the history list.

Now I propose to improve dired-x to read a list of commands from the mailcap
mechanism, and later to move this code to dired.el.  An alternative would be
to start implementing this in dired.el (provide a list of mailcap commands
available via M-n), but then after loading dired-x users will get less
useful list of commands in ! (since this is not implemented in dired-x).

-- 
Juri Linkov
http://www.jurta.org/emacs/

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

* Re: Minibuffer default values list
  2007-10-22  0:22 Minibuffer default values list Juri Linkov
@ 2007-10-23  7:12 ` Richard Stallman
  2007-10-28 10:57   ` Juri Linkov
  2007-11-11 23:43 ` Juri Linkov
  2007-11-11 23:45 ` Juri Linkov
  2 siblings, 1 reply; 38+ messages in thread
From: Richard Stallman @ 2007-10-23  7:12 UTC (permalink / raw)
  To: Juri Linkov; +Cc: emacs-devel

Thanks for implementing this feature.

    Now I propose to improve dired-x to read a list of commands from the mailcap
    mechanism, and later to move this code to dired.el.  An alternative would be
    to start implementing this in dired.el (provide a list of mailcap commands
    available via M-n), but then after loading dired-x users will get less
    useful list of commands in ! (since this is not implemented in dired-x).

You could put this code in both.  dired-x is not used by most users,
so having it only in dired-x is not very useful.

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

* Re: Minibuffer default values list
  2007-10-23  7:12 ` Richard Stallman
@ 2007-10-28 10:57   ` Juri Linkov
  2007-11-11 23:42     ` Juri Linkov
  0 siblings, 1 reply; 38+ messages in thread
From: Juri Linkov @ 2007-10-28 10:57 UTC (permalink / raw)
  To: rms; +Cc: emacs-devel

> Thanks for implementing this feature.
>
>     Now I propose to improve dired-x to read a list of commands from the mailcap
>     mechanism, and later to move this code to dired.el.  An alternative would be
>     to start implementing this in dired.el (provide a list of mailcap commands
>     available via M-n), but then after loading dired-x users will get less
>     useful list of commands in ! (since this is not implemented in dired-x).
>
> You could put this code in both.  dired-x is not used by most users,
> so having it only in dired-x is not very useful.

Below is a prototype code that puts commands retrieved by the mailcap
feature into the default list of the command `!' in Dired.  `M-n' allows
selecting a command to run.  The default list contains commands common to
all marked files.  Since mailcap marks the argument placeholder with
`%s', it's necessary to replace it with `*' used in Dired for the
same purpose, or remove it at the end of the command.

If this approach is right, before installing in CVS this code could be
changed to not use cl functions.

(defun dired-read-shell-command (prompt arg files)
  (dired-mark-pop-up
   nil 'shell files
   (function read-string)
   (format prompt (dired-mark-prompt arg files))
   nil 'shell-command-history
   (mapcan (lambda (mime-info)
	     (let ((command (cdr (assoc 'viewer mime-info))))
	       (if (stringp command)
		   (list (replace-regexp-in-string
			  "'%s'" "*"
			  (replace-regexp-in-string
			   "\s*'%s'$" "" command nil t) nil t)))))
	   (reduce 'intersection
		   (mapcar (lambda (mime-type)
			     (mailcap-mime-info mime-type 'all))
			   (delete-dups (mapcar (lambda (file)
						  (mailcap-extension-to-mime
						   (file-name-extension file t)))
						files)))))))

-- 
Juri Linkov
http://www.jurta.org/emacs/

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

* Re: Minibuffer default values list
  2007-10-28 10:57   ` Juri Linkov
@ 2007-11-11 23:42     ` Juri Linkov
  2007-11-12  5:59       ` Richard Stallman
  0 siblings, 1 reply; 38+ messages in thread
From: Juri Linkov @ 2007-11-11 23:42 UTC (permalink / raw)
  To: rms; +Cc: emacs-devel

>> You could put this code in both.  dired-x is not used by most users,
>> so having it only in dired-x is not very useful.
>
> Below is a prototype code that puts commands retrieved by the mailcap
> feature into the default list of the command `!' in Dired.  `M-n' allows
> selecting a command to run.  The default list contains commands common to
> all marked files.  Since mailcap marks the argument placeholder with
> `%s', it's necessary to replace it with `*' used in Dired for the
> same purpose, or remove it at the end of the command.
>
> If this approach is right, before installing in CVS this code could be
> changed to not use cl functions.

Below is a patch ready to install that implements this feature
without using cl functions:

Index: lisp/dired-aux.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/dired-aux.el,v
retrieving revision 1.157
diff -c -r1.157 dired-aux.el
*** lisp/dired-aux.el	9 Nov 2007 09:45:23 -0000	1.157
--- lisp/dired-aux.el	11 Nov 2007 23:41:29 -0000
***************
*** 463,468 ****
--- 498,547 ----
  \f
  ;;; Shell commands
  
+ (defun dired-read-shell-command-default (files)
+   "Return a list of default commands for `dired-read-shell-command'."
+   (require 'mailcap)
+   (mailcap-parse-mailcaps)
+   (mailcap-parse-mimetypes)
+   (let* ((all-mime-type
+ 	  ;; All unique MIME types from file extensions
+ 	  (delete-dups (mapcar (lambda (file)
+ 				 (mailcap-extension-to-mime
+ 				  (file-name-extension file t)))
+ 			       files)))
+ 	 (all-mime-info
+ 	  ;; All MIME info lists
+ 	  (delete-dups (mapcar (lambda (mime-type)
+ 				 (mailcap-mime-info mime-type 'all))
+ 			       all-mime-type)))
+ 	 (common-mime-info
+ 	  ;; Intersection of mime-infos from different mime-types;
+ 	  ;; or just the first MIME info for a single MIME type
+ 	  (if (cdr all-mime-info)
+ 	      (delq nil (mapcar (lambda (mi1)
+ 				  (unless (memq nil (mapcar
+ 						     (lambda (mi2)
+ 						       (member mi1 mi2))
+ 						     (cdr all-mime-info)))
+ 				    mi1))
+ 				(car all-mime-info)))
+ 	    (car all-mime-info)))
+ 	 (commands
+ 	  ;; Command strings from `viewer' field of the MIME info
+ 	  (delq nil (mapcar (lambda (mime-info)
+ 			      (let ((command (cdr (assoc 'viewer mime-info))))
+ 				(if (stringp command)
+ 				    (replace-regexp-in-string
+ 				     ;; Replace mailcap's `%s' placeholder
+ 				     ;; with dired's `*' placeholder
+ 				     "%s" "*"
+ 				     (replace-regexp-in-string
+ 				      ;; Remove the final filename placeholder
+ 				      "\s*\\('\\)?%s\\1?\s*$" "" command nil t)
+ 				     nil t))))
+ 			    common-mime-info))))
+     commands))
+ 
  (defun dired-read-shell-command (prompt arg files)
  ;;  "Read a dired shell command prompting with PROMPT (using read-string).
  ;;ARG is the prefix arg and may be used to indicate in the prompt which
***************
*** 472,478 ****
     nil 'shell files
     (function read-string)
     (format prompt (dired-mark-prompt arg files))
!    nil 'shell-command-history))
  
  ;; The in-background argument is only needed in Emacs 18 where
  ;; shell-command doesn't understand an appended ampersand `&'.
--- 551,558 ----
     nil 'shell files
     (function read-string)
     (format prompt (dired-mark-prompt arg files))
!    nil 'shell-command-history
!    (dired-read-shell-command-default files)))
  
  ;; The in-background argument is only needed in Emacs 18 where
  ;; shell-command doesn't understand an appended ampersand `&'.


-- 
Juri Linkov
http://www.jurta.org/emacs/

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

* Re: Minibuffer default values list
  2007-10-22  0:22 Minibuffer default values list Juri Linkov
  2007-10-23  7:12 ` Richard Stallman
@ 2007-11-11 23:43 ` Juri Linkov
  2007-11-12  5:59   ` Richard Stallman
  2007-11-11 23:45 ` Juri Linkov
  2 siblings, 1 reply; 38+ messages in thread
From: Juri Linkov @ 2007-11-11 23:43 UTC (permalink / raw)
  To: emacs-devel

Another useful place for multiple default "future" values in dired
are commands: M dired-do-chmod, O dired-do-chown, G dired-do-chgrp,
T dired-do-touch.  The patch below puts a list of file attributes of
marked files to the default list of these commands.  It also adds
file attributes of the file with the mark, so it makes easy to set
the same attributes to another file by putting the mark on one file
and selecting its attribute from the default list of these commands
run on another file.

Index: lisp/dired-aux.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/dired-aux.el,v
retrieving revision 1.157
diff -c -r1.157 dired-aux.el
*** lisp/dired-aux.el	9 Nov 2007 09:45:23 -0000	1.157
--- lisp/dired-aux.el	11 Nov 2007 23:43:01 -0000
***************
*** 207,236 ****
     (directory-files dir)))
  \f
  
! (defun dired-touch-initial (files)
!   "Create initial input value for `touch' command."
!   (let (initial)
!     (while files
!       (let ((current (nth 5 (file-attributes (car files)))))
!         (if (and initial (not (equal initial current)))
!             (setq initial (current-time) files nil)
!           (setq initial current))
!         (setq files (cdr files))))
!     (format-time-string "%Y%m%d%H%M.%S" initial)))
  
  (defun dired-do-chxxx (attribute-name program op-symbol arg)
    ;; Change file attributes (mode, group, owner, timestamp) of marked files and
    ;; refresh their file lines.
    ;; ATTRIBUTE-NAME is a string describing the attribute to the user.
    ;; PROGRAM is the program used to change the attribute.
!   ;; OP-SYMBOL is the type of operation (for use in dired-mark-pop-up).
!   ;; ARG describes which files to use, as in dired-get-marked-files.
    (let* ((files (dired-get-marked-files t arg))
  	 (new-attribute
  	  (dired-mark-read-string
  	   (concat "Change " attribute-name " of %s to: ")
  	   (if (eq op-symbol 'touch) (dired-touch-initial files))
! 	   op-symbol arg files))
  	 (operation (concat program " " new-attribute))
  	 failures)
      (setq failures
--- 207,269 ----
     (directory-files dir)))
  \f
  
! (defun dired-do-chxxx-default (op-symbol files)
!   "Return default values for the prompt in `dired-do-chxxx'.
! The argument FILES contains a list of marked files.  This function
! also adds the file at the mark to refer to its attributes in the
! default list.  If OP-SYMBOL is `chown' or `chgrp', return a list of
! unique UID or GID strings of all files.  If OP-SYMBOL is `touch',
! return a list of the current time and file timestamps in reverse
! chronological order."
!   (let* ((files
! 	  (delq nil (cons
! 		     ;; file at mark to use its attributes (like `touch -r')
! 		     (if (if transient-mark-mode mark-active (mark t))
! 			 (save-excursion (goto-char (mark t))
! 					 (dired-get-filename t t)))
! 		     ;; marked files
! 		     files))))
!     (cond
!      ((eq op-symbol 'chmod)
!       (sort (delete-dups
! 	     (mapcar (lambda (file) (format "%o" (file-modes file))) files))
! 	    'string-lessp))
!      ((or (eq op-symbol 'chown) (eq op-symbol 'chgrp))
!       (sort (delete-dups
! 	     (mapcar (lambda (file)
! 		       (let ((attr (nth (if (eq op-symbol 'chown) 2 3)
! 					(file-attributes file))))
! 			 (if (integerp attr)
! 			     (number-to-string attr)
! 			   attr)))
! 		     files))
! 	    'string-lessp))
!      ((eq op-symbol 'touch)
!       (nreverse
!        (sort
! 	(delete-dups
! 	 (mapcar (lambda (time) (format-time-string "%Y%m%d%H%M.%S" time))
! 		 (cons (current-time)
! 		       (mapcar (lambda (file)
! 				 (nth 5 (file-attributes file)))
! 			       files))))
! 	'string-lessp))))))
  
  (defun dired-do-chxxx (attribute-name program op-symbol arg)
    ;; Change file attributes (mode, group, owner, timestamp) of marked files and
    ;; refresh their file lines.
    ;; ATTRIBUTE-NAME is a string describing the attribute to the user.
    ;; PROGRAM is the program used to change the attribute.
!   ;; OP-SYMBOL is the type of operation (for use in `dired-mark-pop-up').
!   ;; ARG describes which files to use, as in `dired-get-marked-files'.
    (let* ((files (dired-get-marked-files t arg))
+          (default (dired-do-chxxx-default op-symbol files))
  	 (new-attribute
  	  (dired-mark-read-string
  	   (concat "Change " attribute-name " of %s to: ")
  	   (if (eq op-symbol 'touch) (dired-touch-initial files))
! 	   op-symbol arg files
! 	   default))
  	 (operation (concat program " " new-attribute))
  	 failures)
      (setq failures
***************
*** 256,264 ****
  Symbolic modes like `g+w' are allowed."
    (interactive "P")
    (let* ((files (dired-get-marked-files t arg))
  	 (modes (dired-mark-read-string
  		 "Change mode of %s to: " nil
! 		 'chmod arg files))
  	 (num-modes (if (string-match "^[0-7]+" modes)
  			(string-to-number modes 8))))
      (dolist (file files)
--- 289,299 ----
  Symbolic modes like `g+w' are allowed."
    (interactive "P")
    (let* ((files (dired-get-marked-files t arg))
+          (default (dired-do-chxxx-default 'chmod files))
  	 (modes (dired-mark-read-string
  		 "Change mode of %s to: " nil
! 		 'chmod arg files
! 		 default))
  	 (num-modes (if (string-match "^[0-7]+" modes)
  			(string-to-number modes 8))))
      (dolist (file files)
***************
*** 359,372 ****
  ;; If the current file was used, the list has but one element and ARG
  ;; does not matter. (It is non-nil, non-integer in that case, namely '(4)).
  
! (defun dired-mark-read-string (prompt initial op-symbol arg files)
    ;; PROMPT for a string, with INITIAL input.
    ;; Other args are used to give user feedback and pop-up:
    ;; OP-SYMBOL of command, prefix ARG, marked FILES.
    (dired-mark-pop-up
     nil op-symbol files
     (function read-string)
!    (format prompt (dired-mark-prompt arg files)) initial))
  \f
  ;;; Cleaning a directory: flagging some backups for deletion.
  
--- 394,407 ----
  ;; If the current file was used, the list has but one element and ARG
  ;; does not matter. (It is non-nil, non-integer in that case, namely '(4)).
  
! (defun dired-mark-read-string (prompt initial op-symbol arg files &optional default)
    ;; PROMPT for a string, with INITIAL input.
    ;; Other args are used to give user feedback and pop-up:
    ;; OP-SYMBOL of command, prefix ARG, marked FILES.
    (dired-mark-pop-up
     nil op-symbol files
     (function read-string)
!    (format prompt (dired-mark-prompt arg files)) initial nil default))
  \f
  ;;; Cleaning a directory: flagging some backups for deletion.
  
Index: lisp/files.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/files.el,v
retrieving revision 1.940
diff -c -r1.940 files.el
*** lisp/files.el	10 Nov 2007 17:20:37 -0000	1.940
--- lisp/files.el	11 Nov 2007 23:43:25 -0000
***************
*** 5516,5522 ****
  ORIG-FILE is the original file of which modes will be change."
    (let* ((modes (or (if orig-file (file-modes orig-file) 0)
  		    (error "File not found")))
! 	 (value (read-string (or prompt "File modes (octal or symbolic): "))))
      (save-match-data
        (if (string-match "^[0-7]+" value)
  	  (string-to-number value 8)
--- 5516,5523 ----
  ORIG-FILE is the original file of which modes will be change."
    (let* ((modes (or (if orig-file (file-modes orig-file) 0)
  		    (error "File not found")))
! 	 (value (read-string (or prompt "File modes (octal or symbolic): ")
! 			     nil nil (format "%o" modes))))
      (save-match-data
        (if (string-match "^[0-7]+" value)
  	  (string-to-number value 8)

-- 
Juri Linkov
http://www.jurta.org/emacs/

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

* Re: Minibuffer default values list
  2007-10-22  0:22 Minibuffer default values list Juri Linkov
  2007-10-23  7:12 ` Richard Stallman
  2007-11-11 23:43 ` Juri Linkov
@ 2007-11-11 23:45 ` Juri Linkov
  2007-11-12  5:59   ` Richard Stallman
  2 siblings, 1 reply; 38+ messages in thread
From: Juri Linkov @ 2007-11-11 23:45 UTC (permalink / raw)
  To: emacs-devel

I remember there were discussions what the default value is better to
use in `occur'.  Now there is no need to select only one default value.
The patch below adds a list of default values to `keep-lines',
`flush-lines', `how-many' and `occur':

Index: lisp/replace.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/replace.el,v
retrieving revision 1.260
diff -c -r1.260 replace.el
*** lisp/replace.el	10 Nov 2007 21:48:46 -0000	1.260
--- lisp/replace.el	11 Nov 2007 23:45:09 -0000
***************
*** 533,540 ****
    "Read arguments for `keep-lines' and friends.
  Prompt for a regexp with PROMPT.
  Value is a list, (REGEXP)."
!   (list (read-from-minibuffer prompt nil nil nil
! 			      'regexp-history nil t)
  	nil nil t))
  
  (defun keep-lines (regexp &optional rstart rend interactive)
--- 533,550 ----
    "Read arguments for `keep-lines' and friends.
  Prompt for a regexp with PROMPT.
  Value is a list, (REGEXP)."
!   (list (read-from-minibuffer
! 	 prompt nil nil nil 'regexp-history
! 	 (delq nil (list
! 		    (regexp-quote
! 		     (funcall (or find-tag-default-function
! 				  (get major-mode 'find-tag-default-function)
! 				  'find-tag-default)))
! 		    (car regexp-search-ring)
! 		    (regexp-quote (car search-ring))
! 		    (car (symbol-value
! 			  query-replace-from-history-variable))))
! 	 t)
  	nil nil t))
  
  (defun keep-lines (regexp &optional rstart rend interactive)
***************
*** 938,958 ****
        (nreverse result))))
  
  (defun occur-read-primary-args ()
!   (list (let* ((default (car regexp-history))
  	       (input
  		(read-from-minibuffer
! 		 (if default
! 		     (format "List lines matching regexp (default %s): "
! 			     (query-replace-descr default))
! 		   "List lines matching regexp: ")
! 		 nil
! 		 nil
! 		 nil
! 		 'regexp-history
! 		 default)))
! 	  (if (equal input "")
! 	      default
! 	    input))
  	(when current-prefix-arg
  	  (prefix-numeric-value current-prefix-arg))))
  
--- 948,972 ----
        (nreverse result))))
  
  (defun occur-read-primary-args ()
!   (list (let* ((default
! 		 (delq nil (list
! 			    (and transient-mark-mode mark-active
! 				 (regexp-quote
! 				  (buffer-substring-no-properties
! 				   (region-beginning) (region-end))))
! 			    (regexp-quote
! 			     (funcall (or find-tag-default-function
! 					  (get major-mode 'find-tag-default-function)
! 					  'find-tag-default)))
! 			    (car regexp-search-ring)
! 			    (regexp-quote (car search-ring))
! 			    (car (symbol-value
! 				  query-replace-from-history-variable)))))
  	       (input
  		(read-from-minibuffer
! 		 "List lines matching regexp: "
! 		 nil nil nil 'regexp-history default)))
! 	  input)
  	(when current-prefix-arg
  	  (prefix-numeric-value current-prefix-arg))))
  

-- 
Juri Linkov
http://www.jurta.org/emacs/

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

* Re: Minibuffer default values list
  2007-11-11 23:42     ` Juri Linkov
@ 2007-11-12  5:59       ` Richard Stallman
  2007-11-16  1:27         ` Substitute ? in dired without surrounding whitespace (was: Minibuffer default values list) Juri Linkov
                           ` (2 more replies)
  0 siblings, 3 replies; 38+ messages in thread
From: Richard Stallman @ 2007-11-12  5:59 UTC (permalink / raw)
  To: Juri Linkov; +Cc: emacs-devel

If nobody finds a problem in a few days, please install it.

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

* Re: Minibuffer default values list
  2007-11-11 23:43 ` Juri Linkov
@ 2007-11-12  5:59   ` Richard Stallman
  0 siblings, 0 replies; 38+ messages in thread
From: Richard Stallman @ 2007-11-12  5:59 UTC (permalink / raw)
  To: Juri Linkov; +Cc: emacs-devel

    Another useful place for multiple default "future" values in dired
    are commands: M dired-do-chmod, O dired-do-chown, G dired-do-chgrp,
    T dired-do-touch.

I am not sure that this is very useful.  What are the values you
think of providing?

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

* Re: Minibuffer default values list
  2007-11-11 23:45 ` Juri Linkov
@ 2007-11-12  5:59   ` Richard Stallman
  0 siblings, 0 replies; 38+ messages in thread
From: Richard Stallman @ 2007-11-12  5:59 UTC (permalink / raw)
  To: Juri Linkov; +Cc: emacs-devel

It looks good.

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

* Substitute ? in dired without surrounding whitespace (was: Minibuffer default values list)
  2007-11-12  5:59       ` Richard Stallman
@ 2007-11-16  1:27         ` Juri Linkov
  2007-11-17 23:30           ` Richard Stallman
  2007-11-19  0:48         ` Minibuffer default values list Juri Linkov
  2007-11-19  0:52         ` Juri Linkov
  2 siblings, 1 reply; 38+ messages in thread
From: Juri Linkov @ 2007-11-16  1:27 UTC (permalink / raw)
  To: rms; +Cc: emacs-devel

> If nobody finds a problem in a few days, please install it.

Installed.  And I found a related problem (not caused by this change).

One of mailcap entries is

    display 'jpeg:%s'

that gets translated to the dired's file name placeholder as

    display 'jpeg:?'

but dired doesn't substitute it with a file name because ? is not
surrounded by whitespace.  This dired's limitation applies also
to manually typing such a command line, not only by selecting it
from a list of mailcap commands.

Does there exist a way to tell dired to substitute a file name placeholder
without surrounding whitespace?

-- 
Juri Linkov
http://www.jurta.org/emacs/

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

* Re: Substitute ? in dired without surrounding whitespace (was: Minibuffer default values list)
  2007-11-16  1:27         ` Substitute ? in dired without surrounding whitespace (was: Minibuffer default values list) Juri Linkov
@ 2007-11-17 23:30           ` Richard Stallman
  2007-11-17 23:57             ` Substitute ? in dired without surrounding whitespace Juri Linkov
  0 siblings, 1 reply; 38+ messages in thread
From: Richard Stallman @ 2007-11-17 23:30 UTC (permalink / raw)
  To: Juri Linkov; +Cc: emacs-devel

    that gets translated to the dired's file name placeholder as

	display 'jpeg:?'

    but dired doesn't substitute it with a file name because ? is not
    surrounded by whitespace.  This dired's limitation applies also
    to manually typing such a command line, not only by selecting it
    from a list of mailcap commands.

    Does there exist a way to tell dired to substitute a file name placeholder
    without surrounding whitespace?

One solution is to set a shell variable.  Does this work?

  for file in * ; do display "jpeg:$file"; done

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

* Re: Substitute ? in dired without surrounding whitespace
  2007-11-17 23:30           ` Richard Stallman
@ 2007-11-17 23:57             ` Juri Linkov
  2007-11-18 22:46               ` Richard Stallman
  0 siblings, 1 reply; 38+ messages in thread
From: Juri Linkov @ 2007-11-17 23:57 UTC (permalink / raw)
  To: rms; +Cc: emacs-devel

>     that gets translated to the dired's file name placeholder as
>
> 	display 'jpeg:?'
>
>     but dired doesn't substitute it with a file name because ? is not
>     surrounded by whitespace.  This dired's limitation applies also
>     to manually typing such a command line, not only by selecting it
>     from a list of mailcap commands.
>
>     Does there exist a way to tell dired to substitute a file name placeholder
>     without surrounding whitespace?
>
> One solution is to set a shell variable.  Does this work?
>
>   for file in * ; do display "jpeg:$file"; done

Yes, this works.  But this command line is to complicated and
inconvenient to edit for users.  And I'm not sure is it sufficiently
portable to different systems.

The goal was to run the command returned by mailcap in the format:

    display 'jpeg:%s'

where "%s" is intended to be replaced by the file name in the programs
that read mailcap entries.

So perhaps we could change Dired to accept this format and to replace %s
(regardless of surrounding whitespace) with the file name.

-- 
Juri Linkov
http://www.jurta.org/emacs/

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

* Re: Substitute ? in dired without surrounding whitespace
  2007-11-17 23:57             ` Substitute ? in dired without surrounding whitespace Juri Linkov
@ 2007-11-18 22:46               ` Richard Stallman
  0 siblings, 0 replies; 38+ messages in thread
From: Richard Stallman @ 2007-11-18 22:46 UTC (permalink / raw)
  To: Juri Linkov; +Cc: emacs-devel

    Yes, this works.  But this command line is to complicated and
    inconvenient to edit for users.  And I'm not sure is it sufficiently
    portable to different systems.

Editing it by hand is not all that inconvenient, and that's a side
issue anyway.  It ought to work on all systems except Windows, since
they all have sh, and this probably won't work on Windows anyway.

    where "%s" is intended to be replaced by the file name in the programs
    that read mailcap entries.

    So perhaps we could change Dired to accept this format and to replace %s
    (regardless of surrounding whitespace) with the file name.

That would create additional quoting difficulties.
I don't want to do it.

I do not want to make this feature yet more complicated
just to simplify a few default commands.

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

* Re: Minibuffer default values list
  2007-11-12  5:59       ` Richard Stallman
  2007-11-16  1:27         ` Substitute ? in dired without surrounding whitespace (was: Minibuffer default values list) Juri Linkov
@ 2007-11-19  0:48         ` Juri Linkov
  2007-11-22  2:28           ` Richard Stallman
  2007-11-19  0:52         ` Juri Linkov
  2 siblings, 1 reply; 38+ messages in thread
From: Juri Linkov @ 2007-11-19  0:48 UTC (permalink / raw)
  To: rms; +Cc: emacs-devel

There is the following etc/TODO item that could be implemented now:

  ** M-! M-n should fetch the buffer-file-name as the default.

I think in addition to the file name it will be useful add a list of
commands extracted from mailcap to the "future history" list where a
filename placeholder is replaced with the buffer-file-name.  This will
help the user to select one of predefined commands by using M-n and
run it on the current buffer's file.

Below is a first implementation that has one drawback: it uses a new
function dired-read-shell-command-default from dired.  I think this
function should be generalized and moved to simple.el.

Index: lisp/simple.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/simple.el,v
retrieving revision 1.889
diff -c -r1.889 simple.el
*** lisp/simple.el	15 Nov 2007 16:42:43 -0000	1.889
--- lisp/simple.el	19 Nov 2007 00:48:12 -0000
***************
*** 1962,1969 ****
  In an interactive call, the variable `shell-command-default-error-buffer'
  specifies the value of ERROR-BUFFER."
  
!   (interactive (list (read-from-minibuffer "Shell command: "
! 					   nil nil nil 'shell-command-history)
  		     current-prefix-arg
  		     shell-command-default-error-buffer))
    ;; Look for a handler in case default-directory is a remote file name.
--- 1962,1979 ----
  In an interactive call, the variable `shell-command-default-error-buffer'
  specifies the value of ERROR-BUFFER."
  
!   (interactive (list (read-from-minibuffer
! 		      "Shell command: "
! 		      nil nil nil 'shell-command-history
! 		      (if buffer-file-name
! 			  (let* ((filename (file-relative-name buffer-file-name))
! 				 (defaults (dired-read-shell-command-default
! 					    (list filename))))
! 			    (cons filename
! 				  (mapcar (lambda (command)
! 					    (replace-regexp-in-string
! 					     "?" filename command nil t))
! 					  defaults)))))
  		     current-prefix-arg
  		     shell-command-default-error-buffer))
    ;; Look for a handler in case default-directory is a remote file name.

-- 
Juri Linkov
http://www.jurta.org/emacs/

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

* Re: Minibuffer default values list
  2007-11-12  5:59       ` Richard Stallman
  2007-11-16  1:27         ` Substitute ? in dired without surrounding whitespace (was: Minibuffer default values list) Juri Linkov
  2007-11-19  0:48         ` Minibuffer default values list Juri Linkov
@ 2007-11-19  0:52         ` Juri Linkov
  2007-11-19 19:02           ` Richard Stallman
  2 siblings, 1 reply; 38+ messages in thread
From: Juri Linkov @ 2007-11-19  0:52 UTC (permalink / raw)
  To: rms; +Cc: emacs-devel

Another etc/TODO item I'd like to remove is:

  ** In C-x d, the default if you type RET should be the directory name,
  but if you type M-n you should get the visited file name of the
  current buffer.

and a patch is below:

Index: lisp/dired.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/dired.el,v
retrieving revision 1.372
diff -c -r1.372 dired.el
*** lisp/dired.el	18 Oct 2007 15:59:01 -0000	1.372
--- lisp/dired.el	19 Nov 2007 00:52:04 -0000
***************
*** 595,602 ****
  	    (if (next-read-file-uses-dialog-p)
  		(read-directory-name (format "Dired %s(directory): " str)
  				     nil default-directory nil)
! 	      (read-file-name (format "Dired %s(directory): " str)
! 			      nil default-directory nil)))))
  
  ;;;###autoload (define-key ctl-x-map "d" 'dired)
  ;;;###autoload
--- 591,602 ----
  	    (if (next-read-file-uses-dialog-p)
  		(read-directory-name (format "Dired %s(directory): " str)
  				     nil default-directory nil)
! 	      (let ((default (and buffer-file-name
! 				  (abbreviate-file-name buffer-file-name))))
! 		(minibuffer-with-setup-hook
! 		    (lambda () (setq minibuffer-default default))
! 		  (read-file-name (format "Dired %s(directory): " str)
! 				  nil default-directory nil)))))))
  
  ;;;###autoload (define-key ctl-x-map "d" 'dired)
  ;;;###autoload

-- 
Juri Linkov
http://www.jurta.org/emacs/

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

* Re: Minibuffer default values list
  2007-11-19  0:52         ` Juri Linkov
@ 2007-11-19 19:02           ` Richard Stallman
  2007-11-23  0:48             ` Juri Linkov
  0 siblings, 1 reply; 38+ messages in thread
From: Richard Stallman @ 2007-11-19 19:02 UTC (permalink / raw)
  To: Juri Linkov; +Cc: emacs-devel

Thanks for working on this.  If nobody finds a problem in a few days,
please install it.




Index: lisp/dired.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/dired.el,v
retrieving revision 1.372
diff -c -r1.372 dired.el
*** lisp/dired.el	18 Oct 2007 15:59:01 -0000	1.372
--- lisp/dired.el	19 Nov 2007 00:52:04 -0000
***************
*** 595,602 ****
  	    (if (next-read-file-uses-dialog-p)
  		(read-directory-name (format "Dired %s(directory): " str)
  				     nil default-directory nil)
! 	      (read-file-name (format "Dired %s(directory): " str)
! 			      nil default-directory nil)))))
  
  ;;;###autoload (define-key ctl-x-map "d" 'dired)
  ;;;###autoload
--- 591,602 ----
  	    (if (next-read-file-uses-dialog-p)
  		(read-directory-name (format "Dired %s(directory): " str)
  				     nil default-directory nil)
! 	      (let ((default (and buffer-file-name
! 				  (abbreviate-file-name buffer-file-name))))
! 		(minibuffer-with-setup-hook
! 		    (lambda () (setq minibuffer-default default))
! 		  (read-file-name (format "Dired %s(directory): " str)
! 				  nil default-directory nil)))))))
  
  ;;;###autoload (define-key ctl-x-map "d" 'dired)
  ;;;###autoload

-- 
Juri Linkov
http://www.jurta.org/emacs/

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

* Re: Minibuffer default values list
  2007-11-19  0:48         ` Minibuffer default values list Juri Linkov
@ 2007-11-22  2:28           ` Richard Stallman
  2007-11-22 19:02             ` Juri Linkov
  0 siblings, 1 reply; 38+ messages in thread
From: Richard Stallman @ 2007-11-22  2:28 UTC (permalink / raw)
  To: Juri Linkov; +Cc: emacs-devel

    Below is a first implementation that has one drawback: it uses a new
    function dired-read-shell-command-default from dired.  I think this
    function should be generalized and moved to simple.el.

I don't like the idea that all use of M-! will load mailcap.el.
In addition, it is unmodular since mailcap.el is a part of Gnus.

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

* Re: Minibuffer default values list
  2007-11-22  2:28           ` Richard Stallman
@ 2007-11-22 19:02             ` Juri Linkov
  2007-11-23  4:35               ` Richard Stallman
  2007-11-23  4:35               ` Minibuffer default values list Richard Stallman
  0 siblings, 2 replies; 38+ messages in thread
From: Juri Linkov @ 2007-11-22 19:02 UTC (permalink / raw)
  To: rms; +Cc: emacs-devel

>     Below is a first implementation that has one drawback: it uses a new
>     function dired-read-shell-command-default from dired.  I think this
>     function should be generalized and moved to simple.el.
>
> I don't like the idea that all use of M-! will load mailcap.el.

In Dired ! already loads mailcap.el, and it seems this is not a bad thing.

If you don't want loading mailcap.el on M-! then what do you think about
loading mailcap.el only when the user types M-n in the shell command's
minibuffer?  This is possible to implement by creating a new minibuffer
variable e.g. `minibuffer-lazy-default'.  When this variable is non-nil,
then minibuffer functions will load mailcap.el and set the value of
`minibuffer-default' to the list of commands after the user types M-n.

> In addition, it is unmodular since mailcap.el is a part of Gnus.

mailcap.el is located in the gnus directory, but it doesn't depend on Gnus.
It doesn't load Gnus-specific files.

-- 
Juri Linkov
http://www.jurta.org/emacs/

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

* Re: Minibuffer default values list
  2007-11-19 19:02           ` Richard Stallman
@ 2007-11-23  0:48             ` Juri Linkov
  0 siblings, 0 replies; 38+ messages in thread
From: Juri Linkov @ 2007-11-23  0:48 UTC (permalink / raw)
  To: rms; +Cc: emacs-devel

> Thanks for working on this.  If nobody finds a problem in a few days,
> please install it.

Installed.

I recall that another discussed part of this task was a suggestion to
bind a key `M-g d' to a new command that reads a filename, creates a Dired
buffer in the file's directory and moves point to the given file name.

Does anyone want this command?

-- 
Juri Linkov
http://www.jurta.org/emacs/

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

* Re: Minibuffer default values list
  2007-11-22 19:02             ` Juri Linkov
@ 2007-11-23  4:35               ` Richard Stallman
  2007-11-24 17:54                 ` Juri Linkov
  2007-11-23  4:35               ` Minibuffer default values list Richard Stallman
  1 sibling, 1 reply; 38+ messages in thread
From: Richard Stallman @ 2007-11-23  4:35 UTC (permalink / raw)
  To: Juri Linkov; +Cc: emacs-devel

    In Dired ! already loads mailcap.el, and it seems this is not a bad thing.

It is somewhat of a bad thing (though the feature is a good feature).

    If you don't want loading mailcap.el on M-! then what do you think about
    loading mailcap.el only when the user types M-n in the shell command's
    minibuffer?

That is an interesting approach.

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

* Re: Minibuffer default values list
  2007-11-22 19:02             ` Juri Linkov
  2007-11-23  4:35               ` Richard Stallman
@ 2007-11-23  4:35               ` Richard Stallman
  2007-11-23 15:05                 ` Stefan Monnier
  1 sibling, 1 reply; 38+ messages in thread
From: Richard Stallman @ 2007-11-23  4:35 UTC (permalink / raw)
  To: Juri Linkov; +Cc: emacs-devel

    mailcap.el is located in the gnus directory, but it doesn't depend on Gnus.
    It doesn't load Gnus-specific files.

We should move it.  Where -- `lisp/mail'?  I am not sure, because
Dired's ! command has nothing to do with mail.

I suspect that there is a part of mailcap.el that is not specific to
mail, and that that is the part Dired uses.  Is that the case?

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

* Re: Minibuffer default values list
  2007-11-23  4:35               ` Minibuffer default values list Richard Stallman
@ 2007-11-23 15:05                 ` Stefan Monnier
       [not found]                   ` <E1IvwoM-0004oD-AU@fencepost.gnu.org>
  0 siblings, 1 reply; 38+ messages in thread
From: Stefan Monnier @ 2007-11-23 15:05 UTC (permalink / raw)
  To: rms; +Cc: Juri Linkov, emacs-devel

>     mailcap.el is located in the gnus directory, but it doesn't depend
>     on Gnus.  It doesn't load Gnus-specific files.

> We should move it.  Where -- `lisp/mail'?  I am not sure, because
> Dired's ! command has nothing to do with mail.

> I suspect that there is a part of mailcap.el that is not specific to
> mail, and that that is the part Dired uses.  Is that the case?

mailcap deals with MIME types and takes its name from the "mail
capabilities" stored in the /etc/mailcap file to decide what to do for
any given attachment given its MIME type.

Now all this was mail-specific at the beginning, but MIME types are now
used for much more than "MIME" and so none of it is specific to mail
any more.


        Stefan

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

* Re: Minibuffer default values list
  2007-11-23  4:35               ` Richard Stallman
@ 2007-11-24 17:54                 ` Juri Linkov
  2007-11-25  3:43                   ` Richard Stallman
  0 siblings, 1 reply; 38+ messages in thread
From: Juri Linkov @ 2007-11-24 17:54 UTC (permalink / raw)
  To: rms; +Cc: emacs-devel

>     If you don't want loading mailcap.el on M-! then what do you think about
>     loading mailcap.el only when the user types M-n in the shell command's
>     minibuffer?
>
> That is an interesting approach.

Below is a patch that implements this approach.

It adds a new variable `goto-history-element-pre-hook' run at the beginning
of `goto-history-element'.  And `shell-command' binds it to a function
that after typing e.g. `M-n M-n' and going to the second default value
(the first element is a static value set to the current file name)
adds more commands extracted from mailcap to `minibuffer-default'.
`dired-read-shell-command' below does the same.

Index: lisp/simple.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/simple.el,v
retrieving revision 1.889
diff -c -r1.889 simple.el
*** lisp/simple.el	15 Nov 2007 16:42:43 -0000	1.889
--- lisp/simple.el	24 Nov 2007 17:54:00 -0000
***************
*** 1298,1307 ****
--- 1298,1311 ----
  
  (defvar minibuffer-temporary-goal-position nil)
  
+ (defvar goto-history-element-pre-hook nil
+   "*List of functions run by `goto-history-element' before changing history position.")
+ 
  (defun goto-history-element (nabs)
    "Puts element of the minibuffer history in the minibuffer.
  The argument NABS specifies the absolute history position."
    (interactive "p")
+   (run-hooks 'goto-history-element-pre-hook)
    (let ((minimum (if minibuffer-default
  		     (- (if (listp minibuffer-default)
  			    (length minibuffer-default)
***************
*** 1962,1971 ****
  In an interactive call, the variable `shell-command-default-error-buffer'
  specifies the value of ERROR-BUFFER."
  
!   (interactive (list (read-from-minibuffer "Shell command: "
! 					   nil nil nil 'shell-command-history)
! 		     current-prefix-arg
! 		     shell-command-default-error-buffer))
    ;; Look for a handler in case default-directory is a remote file name.
    (let ((handler
  	 (find-file-name-handler (directory-file-name default-directory)
--- 1966,1988 ----
  In an interactive call, the variable `shell-command-default-error-buffer'
  specifies the value of ERROR-BUFFER."
  
!   (interactive
!    (let* ((filename
! 	   (if buffer-file-name (file-relative-name buffer-file-name)))
! 	  (default filename)
! 	  (minibuffer-default-set nil)
! 	  (goto-history-element-pre-hook
! 	   (cons (lambda ()
! 		   (when (and (null minibuffer-default-set) (< nabs -1))
! 		     (setq minibuffer-default
! 			   (cons filename (dired-read-shell-command-default
! 					   (list filename))))
! 		     (setq minibuffer-default-set t)))
! 		 goto-history-element-pre-hook)))
!      (list (read-from-minibuffer "Shell command: " nil nil nil
! 				 'shell-command-history default)
! 	   current-prefix-arg
! 	   shell-command-default-error-buffer)))
    ;; Look for a handler in case default-directory is a remote file name.
    (let ((handler
  	 (find-file-name-handler (directory-file-name default-directory)

Index: lisp/dired-aux.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/dired-aux.el,v
retrieving revision 1.160
diff -c -r1.160 dired-aux.el
*** lisp/dired-aux.el	22 Nov 2007 13:49:34 -0000	1.160
--- lisp/dired-aux.el	24 Nov 2007 17:54:25 -0000
***************
*** 517,528 ****
  ;;ARG is the prefix arg and may be used to indicate in the prompt which
  ;;  files are affected.
  ;;This is an extra function so that you can redefine it, e.g., to use gmhist."
!   (dired-mark-pop-up
!    nil 'shell files
!    (function read-string)
!    (format prompt (dired-mark-prompt arg files))
!    nil 'shell-command-history
!    (dired-read-shell-command-default files)))
  
  ;; The in-background argument is only needed in Emacs 18 where
  ;; shell-command doesn't understand an appended ampersand `&'.
--- 517,534 ----
  ;;ARG is the prefix arg and may be used to indicate in the prompt which
  ;;  files are affected.
  ;;This is an extra function so that you can redefine it, e.g., to use gmhist."
!   (let ((minibuffer-default-set nil)
! 	(goto-history-element-pre-hook
! 	 (cons (lambda ()
! 		 (when (and (null minibuffer-default-set) (< nabs 0))
! 		   (setq minibuffer-default (dired-read-shell-command-default files)
! 			 minibuffer-default-set t)))
! 	       goto-history-element-pre-hook)))
!     (dired-mark-pop-up
!      nil 'shell files
!      (function read-string)
!      (format prompt (dired-mark-prompt arg files))
!      nil 'shell-command-history)))
  
  ;; The in-background argument is only needed in Emacs 18 where
  ;; shell-command doesn't understand an appended ampersand `&'.

-- 
Juri Linkov
http://www.jurta.org/emacs/

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

* Re: Minibuffer default values list
  2007-11-24 17:54                 ` Juri Linkov
@ 2007-11-25  3:43                   ` Richard Stallman
  2007-11-25 15:18                     ` mb-pos.el (was: Minibuffer default values list) Juri Linkov
  2007-11-25 15:19                     ` Subject: mb-depth.el (was: Minibuffer default values list) Juri Linkov
  0 siblings, 2 replies; 38+ messages in thread
From: Richard Stallman @ 2007-11-25  3:43 UTC (permalink / raw)
  To: Juri Linkov; +Cc: emacs-devel

	(interactive "p")
    +   (run-hooks 'goto-history-element-pre-hook)
	(let ((minimum (if minibuffer-default
			 (- (if (listp minibuffer-default)

How about running this hook only when moving
into the "future"?

    ! 	  (goto-history-element-pre-hook
    ! 	   (cons (lambda ()
    ! 		   (when (and (null minibuffer-default-set) (< nabs -1))
    ! 		     (setq minibuffer-default
    ! 			   (cons filename (dired-read-shell-command-default
    ! 					   (list filename))))
    ! 		     (setq minibuffer-default-set t)))
    ! 		 goto-history-element-pre-hook)))

Why preserve any ambient binding?  I think it should bbe completely
superseded.

For that reason, maybe it should be `goto-history-element-pre-function'
and its value should be just one function.

A better name would be `goto-history-defaults-function'.

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

* mb-pos.el (was: Minibuffer default values list)
  2007-11-25  3:43                   ` Richard Stallman
@ 2007-11-25 15:18                     ` Juri Linkov
  2007-12-02 21:27                       ` Richard Stallman
  2007-11-25 15:19                     ` Subject: mb-depth.el (was: Minibuffer default values list) Juri Linkov
  1 sibling, 1 reply; 38+ messages in thread
From: Juri Linkov @ 2007-11-25 15:18 UTC (permalink / raw)
  To: rms; +Cc: emacs-devel

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

>     +   (run-hooks 'goto-history-element-pre-hook)
>
> How about running this hook only when moving into the "future"?
>
> Why preserve any ambient binding?  I think it should bbe completely
> superseded.
>
> For that reason, maybe it should be `goto-history-element-pre-function'
> and its value should be just one function.
>
> A better name would be `goto-history-defaults-function'.

The reason I added a new hook `goto-history-element-pre-hook' is to add
later another symmetric hook `goto-history-element-post-hook' necessary
for implementing another feature: with the recent improvements in the
minibuffer functionality it became essential for the user to know the
current minibuffer position in the history list or in the "future" values
list.  To indicate the current minibuffer position I've created a new file
mb-pos.el attached below based in the existing file mb-depth.el with the
very similar functionality.  Since both files are very short, perhaps
we should even rename mb-depth.el to mb-ind.el (minibuffer indications),
and merge mb-pos.el into this common file.

Index: lisp/simple.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/simple.el,v
retrieving revision 1.889
diff -u -r1.889 simple.el
--- lisp/simple.el	15 Nov 2007 16:42:43 -0000	1.889
+++ lisp/simple.el	25 Nov 2007 15:18:27 -0000
@@ -1302,6 +1302,7 @@
   "Puts element of the minibuffer history in the minibuffer.
 The argument NABS specifies the absolute history position."
   (interactive "p")
+  (run-hooks 'goto-history-element-pre-hook)
   (let ((minimum (if minibuffer-default
 		     (- (if (listp minibuffer-default)
 			    (length minibuffer-default)
@@ -1344,7 +1345,8 @@
 	 (let ((print-level nil))
 	   (prin1-to-string elt))
        elt))
-    (goto-char (or minibuffer-temporary-goal-position (point-max)))))
+    (goto-char (or minibuffer-temporary-goal-position (point-max)))
+    (run-hooks 'goto-history-element-post-hook)))
 
 (defun next-history-element (n)
   "Puts next element of the minibuffer history in the minibuffer.


[-- Attachment #2: mb-pos.el --]
[-- Type: application/emacs-lisp, Size: 3497 bytes --]

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


-- 
Juri Linkov
http://www.jurta.org/emacs/

[-- Attachment #4: Type: text/plain, Size: 142 bytes --]

_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-devel

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

* Subject: mb-depth.el (was: Minibuffer default values list)
  2007-11-25  3:43                   ` Richard Stallman
  2007-11-25 15:18                     ` mb-pos.el (was: Minibuffer default values list) Juri Linkov
@ 2007-11-25 15:19                     ` Juri Linkov
  2008-07-31 17:28                       ` Juri Linkov
  1 sibling, 1 reply; 38+ messages in thread
From: Juri Linkov @ 2007-11-25 15:19 UTC (permalink / raw)
  To: rms; +Cc: emacs-devel

BTW, currently mb-depth.el uses 3 different name prefixes for its
variables and functions:

minibuffer-indicate-depth
minibuffer-depth
minibuf-depth

To reduce the entropy, I propose to use the same name prefix
`minibuffer-depth' that is the name of the primary function
this package relies on:

Index: lisp/mb-depth.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/mb-depth.el,v
retrieving revision 1.4
diff -u -r1.4 mb-depth.el
--- lisp/mb-depth.el	8 Oct 2007 14:44:49 -0000	1.4
+++ lisp/mb-depth.el	25 Nov 2007 15:19:45 -0000
@@ -24,7 +24,7 @@
 
 ;;; Commentary:
 ;;
-;; Defines the minor mode `minibuffer-indicate-depth-mode'.
+;; Defines the minor mode `minibuffer-depth-indicate-mode'.
 ;;
 ;; When active, any recursive use of the minibuffer will show
 ;; the recursion depth in the minibuffer prompt.  This is only
@@ -32,7 +32,7 @@
 
 ;;; Code:
 
-(defvar minibuf-depth-indicator-function nil
+(defvar minibuffer-depth-indicator-function nil
   "If non-nil, function to set up the minibuffer depth indicator.
 It is called with one argument, the minibuffer depth,
 and must return a string.")
@@ -40,24 +40,24 @@
 ;; An overlay covering the prompt.  This is a buffer-local variable in
 ;; each affected minibuffer.
 ;;
-(defvar minibuf-depth-overlay)
-(make-variable-buffer-local 'minibuf-depth-overlay)
+(defvar minibuffer-depth-overlay)
+(make-variable-buffer-local 'minibuffer-depth-overlay)
 
 ;; This function goes on minibuffer-setup-hook
-(defun minibuf-depth-setup-minibuffer ()
-  "Set up a minibuffer for `minibuffer-indicate-depth-mode'.
+(defun minibuffer-depth-setup ()
+  "Set up a minibuffer for `minibuffer-depth-indicate-mode'.
 The prompt should already have been inserted."
   (when (> (minibuffer-depth) 1)
-    (setq minibuf-depth-overlay (make-overlay (point-min) (1+ (point-min))))
-    (overlay-put minibuf-depth-overlay 'before-string
-		 (if minibuf-depth-indicator-function
-		     (funcall minibuf-depth-indicator-function (minibuffer-depth))
+    (setq minibuffer-depth-overlay (make-overlay (point-min) (1+ (point-min))))
+    (overlay-put minibuffer-depth-overlay 'before-string
+		 (if minibuffer-depth-indicator-function
+		     (funcall minibuffer-depth-indicator-function (minibuffer-depth))
 		   (propertize (format "[%d]" (minibuffer-depth)) 'face 'highlight)))
-    (overlay-put minibuf-depth-overlay 'evaporate t)))
+    (overlay-put minibuffer-depth-overlay 'evaporate t)))
 
 ;;;###autoload
-(define-minor-mode minibuffer-indicate-depth-mode
-  "Toggle Minibuffer Indicate Depth mode.
+(define-minor-mode minibuffer-depth-indicate-mode
+  "Toggle Minibuffer Depth Indication mode.
 When active, any recursive use of the minibuffer will show
 the recursion depth in the minibuffer prompt.  This is only
 useful if `enable-recursive-minibuffers' is non-nil.
@@ -66,11 +66,11 @@
 Returns non-nil if the new state is enabled."
   :global t
   :group 'minibuffer
-  (if minibuffer-indicate-depth-mode
+  (if minibuffer-depth-indicate-mode
       ;; Enable the mode
-      (add-hook 'minibuffer-setup-hook 'minibuf-depth-setup-minibuffer)
+      (add-hook 'minibuffer-setup-hook 'minibuffer-depth-setup)
     ;; Disable the mode
-    (remove-hook 'minibuffer-setup-hook 'minibuf-depth-setup-minibuffer)))
+    (remove-hook 'minibuffer-setup-hook 'minibuffer-depth-setup)))
 
 (provide 'mb-depth)

-- 
Juri Linkov
http://www.jurta.org/emacs/

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

* Re: mb-pos.el (was: Minibuffer default values list)
  2007-11-25 15:18                     ` mb-pos.el (was: Minibuffer default values list) Juri Linkov
@ 2007-12-02 21:27                       ` Richard Stallman
  2007-12-03  0:34                         ` Minibuffer default values list Juri Linkov
  0 siblings, 1 reply; 38+ messages in thread
From: Richard Stallman @ 2007-12-02 21:27 UTC (permalink / raw)
  To: Juri Linkov; +Cc: emacs-devel

    The reason I added a new hook `goto-history-element-pre-hook' is to add
    later another symmetric hook `goto-history-element-post-hook' necessary
    for implementing another feature: with the recent improvements in the
    minibuffer functionality it became essential for the user to know the
    current minibuffer position in the history list or in the "future" values
    list.

I don't understand what that refers to.  Could you explain?

If we want both kinds of hooks, we should make each of them work the
right way, than make them artificially parallel if that is bad.

The "pre-hook" should be a single function, not a hook,
and ideally should only run when trying to move into the future,
for the reasons I gave.

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

* Re: Minibuffer default values list
  2007-12-02 21:27                       ` Richard Stallman
@ 2007-12-03  0:34                         ` Juri Linkov
  2007-12-03 18:43                           ` Richard Stallman
  0 siblings, 1 reply; 38+ messages in thread
From: Juri Linkov @ 2007-12-03  0:34 UTC (permalink / raw)
  To: rms; +Cc: emacs-devel

> The "pre-hook" should be a single function, not a hook,
> and ideally should only run when trying to move into the future,
> for the reasons I gave.

In the patch below I added a new one-function variable
`minibuffer-default-set-function' run before `goto-history-element'
reads the value of `minibuffer-default' when moving into the future.

Note that `shell-command' still depends on dired, but this can be avoided
by moving `dired-read-shell-command-default' to mailcap.el.

Also I added another dependence on dired, and I think for a good reason:
when M-! is typed in the dired buffer, then it gets the dired file
under point and provides its commands to the list of future values.

Index: lisp/simple.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/simple.el,v
retrieving revision 1.889
diff -c -r1.889 simple.el
*** lisp/simple.el	15 Nov 2007 16:42:43 -0000	1.889
--- lisp/simple.el	3 Dec 2007 00:34:45 -0000
***************
*** 1298,1307 ****
--- 1298,1316 ----
  
  (defvar minibuffer-temporary-goal-position nil)
  
+ (defvar minibuffer-default-set-function nil
+   "*Function run by `goto-history-element' before using `minibuffer-default'.
+ This is useful to dynamically set the value of `minibuffer-default'
+ before `goto-history-element' reads it when moves into the future.")
+ 
  (defun goto-history-element (nabs)
    "Puts element of the minibuffer history in the minibuffer.
  The argument NABS specifies the absolute history position."
    (interactive "p")
+   (when (and (functionp minibuffer-default-set-function)
+ 	     (< nabs (if (stringp minibuffer-default) -1 0)))
+     (setq minibuffer-default (funcall minibuffer-default-set-function)
+ 	  minibuffer-default-set-function nil))
    (let ((minimum (if minibuffer-default
  		     (- (if (listp minibuffer-default)
  			    (length minibuffer-default)
***************
*** 1962,1971 ****
  In an interactive call, the variable `shell-command-default-error-buffer'
  specifies the value of ERROR-BUFFER."
  
!   (interactive (list (read-from-minibuffer "Shell command: "
! 					   nil nil nil 'shell-command-history)
! 		     current-prefix-arg
! 		     shell-command-default-error-buffer))
    ;; Look for a handler in case default-directory is a remote file name.
    (let ((handler
  	 (find-file-name-handler (directory-file-name default-directory)
--- 1972,1991 ----
  In an interactive call, the variable `shell-command-default-error-buffer'
  specifies the value of ERROR-BUFFER."
  
!   (interactive
!    (let* ((filename
! 	   (cond (buffer-file-name (file-relative-name buffer-file-name))
! 		 ((eq major-mode 'dired-mode) (dired-get-filename t))))
! 	  (default filename)
! 	  (minibuffer-default-set-function
! 	   (lambda ()
! 	     (if filename
! 		 (cons filename
! 		       (dired-read-shell-command-default (list filename)))))))
!      (list (read-from-minibuffer "Shell command: " nil nil nil
! 				 'shell-command-history default)
! 	   current-prefix-arg
! 	   shell-command-default-error-buffer)))
    ;; Look for a handler in case default-directory is a remote file name.
    (let ((handler
  	 (find-file-name-handler (directory-file-name default-directory)

Index: lisp/dired-aux.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/dired-aux.el,v
retrieving revision 1.160
diff -c -r1.160 dired-aux.el
*** lisp/dired-aux.el	22 Nov 2007 13:49:34 -0000	1.160
--- lisp/dired-aux.el	3 Dec 2007 00:34:48 -0000
***************
*** 517,528 ****
  ;;ARG is the prefix arg and may be used to indicate in the prompt which
  ;;  files are affected.
  ;;This is an extra function so that you can redefine it, e.g., to use gmhist."
!   (dired-mark-pop-up
!    nil 'shell files
!    (function read-string)
!    (format prompt (dired-mark-prompt arg files))
!    nil 'shell-command-history
!    (dired-read-shell-command-default files)))
  
  ;; The in-background argument is only needed in Emacs 18 where
  ;; shell-command doesn't understand an appended ampersand `&'.
--- 517,529 ----
  ;;ARG is the prefix arg and may be used to indicate in the prompt which
  ;;  files are affected.
  ;;This is an extra function so that you can redefine it, e.g., to use gmhist."
!   (let ((minibuffer-default-set-function
! 	 (lambda () (dired-read-shell-command-default files))))
!     (dired-mark-pop-up
!      nil 'shell files
!      (function read-string)
!      (format prompt (dired-mark-prompt arg files))
!      nil 'shell-command-history)))
  
  ;; The in-background argument is only needed in Emacs 18 where
  ;; shell-command doesn't understand an appended ampersand `&'.

-- 
Juri Linkov
http://www.jurta.org/emacs/

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

* Re: Minibuffer default values list
       [not found]                     ` <jwvwss5ptqv.fsf-monnier+emacs@gnu.org>
@ 2007-12-03 18:42                       ` Richard Stallman
  0 siblings, 0 replies; 38+ messages in thread
From: Richard Stallman @ 2007-12-03 18:42 UTC (permalink / raw)
  To: emacs-devel; +Cc: Stefan Monnier

    So of course, `mailcap' specifically has also been used by web browsers
    to decide how to display specific page contents.

Thanks.

Would someone please move mailcap.el to an appropriate directory?

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

* Re: Minibuffer default values list
  2007-12-03  0:34                         ` Minibuffer default values list Juri Linkov
@ 2007-12-03 18:43                           ` Richard Stallman
  0 siblings, 0 replies; 38+ messages in thread
From: Richard Stallman @ 2007-12-03 18:43 UTC (permalink / raw)
  To: Juri Linkov; +Cc: emacs-devel

    In the patch below I added a new one-function variable
    `minibuffer-default-set-function' run before `goto-history-element'
    reads the value of `minibuffer-default' when moving into the future.

It looks good.

    Note that `shell-command' still depends on dired, but this can be avoided
    by moving `dired-read-shell-command-default' to mailcap.el.

Once the file mailcap.el is moved, it would be a good idea
to move that function into mailcap.el and rename it
to `mailcap-file-default-commands'.

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

* Re: mb-depth.el (was: Minibuffer default values list)
  2007-11-25 15:19                     ` Subject: mb-depth.el (was: Minibuffer default values list) Juri Linkov
@ 2008-07-31 17:28                       ` Juri Linkov
  2008-07-31 18:08                         ` Drew Adams
  0 siblings, 1 reply; 38+ messages in thread
From: Juri Linkov @ 2008-07-31 17:28 UTC (permalink / raw)
  To: emacs-devel

> BTW, currently mb-depth.el uses 3 different name prefixes for its
> variables and functions:
>
> minibuffer-indicate-depth
> minibuffer-depth
> minibuf-depth
>
> To reduce the entropy, I propose to use the same name prefix
> `minibuffer-depth' that is the name of the primary function
> this package relies on.

Fixed.

-- 
Juri Linkov
http://www.jurta.org/emacs/




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

* RE: mb-depth.el (was: Minibuffer default values list)
  2008-07-31 17:28                       ` Juri Linkov
@ 2008-07-31 18:08                         ` Drew Adams
  2008-07-31 18:24                           ` Juanma Barranquero
  0 siblings, 1 reply; 38+ messages in thread
From: Drew Adams @ 2008-07-31 18:08 UTC (permalink / raw)
  To: 'Juri Linkov', emacs-devel

> > BTW, currently mb-depth.el uses 3 different name prefixes for its
> > variables and functions:
> >
> > minibuffer-indicate-depth
> > minibuffer-depth
> > minibuf-depth
> >
> > To reduce the entropy, I propose to use the same name prefix
> > `minibuffer-depth' that is the name of the primary function
> > this package relies on.
> 
> Fixed.

This breaks all existing code that uses the old names.
Please provide aliases for compatibility with previous versions.

I have code, for instance, that tests `minibuffer-indicate-depth-mode' and that
uses `minibuf-depth-overlay'.





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

* Re: mb-depth.el (was: Minibuffer default values list)
  2008-07-31 18:08                         ` Drew Adams
@ 2008-07-31 18:24                           ` Juanma Barranquero
  2008-07-31 18:35                             ` Drew Adams
  0 siblings, 1 reply; 38+ messages in thread
From: Juanma Barranquero @ 2008-07-31 18:24 UTC (permalink / raw)
  To: Drew Adams; +Cc: Juri Linkov, emacs-devel

[Accidentally sent privately; resending]

On Thu, Jul 31, 2008 at 20:08, Drew Adams <drew.adams@oracle.com> wrote:

> This breaks all existing code that uses the old names.
> Please provide aliases for compatibility with previous versions.
>
> I have code, for instance, that tests `minibuffer-indicate-depth-mode' and that
> uses `minibuf-depth-overlay'.

If I'm not mistaken, there's no released Emacs that includes
`minibuffer-indicate-depth-mode' or `minibuf-depth-overlay'. It is
silly to add a new feature and a back-compatible alias at the same
time.

  Juanma




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

* RE: mb-depth.el (was: Minibuffer default values list)
  2008-07-31 18:24                           ` Juanma Barranquero
@ 2008-07-31 18:35                             ` Drew Adams
  2008-08-01 12:34                               ` Juanma Barranquero
  0 siblings, 1 reply; 38+ messages in thread
From: Drew Adams @ 2008-07-31 18:35 UTC (permalink / raw)
  To: 'Juanma Barranquero'; +Cc: 'Juri Linkov', emacs-devel

> > This breaks all existing code that uses the old names.
> > Please provide aliases for compatibility with previous versions.
> >
> > I have code, for instance, that tests 
> > `minibuffer-indicate-depth-mode' and that uses
> > `minibuf-depth-overlay'.
> 
> If I'm not mistaken, there's no released Emacs that includes
> `minibuffer-indicate-depth-mode' or `minibuf-depth-overlay'. It is
> silly to add a new feature and a back-compatible alias at the same
> time.

Yes, you're right.

There is a copy of mb-depth.el on Emacs Wiki. I'll remove it and post a notice
that you can now obtain it from Emacs 23.

That will require people to download Emacs 23 to get this library, even though
it works with older Emacs versions also. That's too bad, but it is no doubt
preferable to having an out-of-date version out there.





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

* Re: mb-depth.el (was: Minibuffer default values list)
  2008-07-31 18:35                             ` Drew Adams
@ 2008-08-01 12:34                               ` Juanma Barranquero
  2008-08-01 16:27                                 ` Drew Adams
  0 siblings, 1 reply; 38+ messages in thread
From: Juanma Barranquero @ 2008-08-01 12:34 UTC (permalink / raw)
  To: Drew Adams; +Cc: Juri Linkov, emacs-devel

On Thu, Jul 31, 2008 at 20:35, Drew Adams <drew.adams@oracle.com> wrote:

> There is a copy of mb-depth.el on Emacs Wiki. I'll remove it and post a notice
> that you can now obtain it from Emacs 23.
>
> That will require people to download Emacs 23 to get this library, even though
> it works with older Emacs versions also. That's too bad, but it is no doubt
> preferable to having an out-of-date version out there.

There's no need to download all Emacs 23:

http://cvs.savannah.gnu.org/viewvc/*checkout*/emacs/emacs/lisp/mb-depth.el

   Juanma




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

* RE: mb-depth.el (was: Minibuffer default values list)
  2008-08-01 12:34                               ` Juanma Barranquero
@ 2008-08-01 16:27                                 ` Drew Adams
  2008-08-01 17:09                                   ` mb-depth.el patch Drew Adams
  0 siblings, 1 reply; 38+ messages in thread
From: Drew Adams @ 2008-08-01 16:27 UTC (permalink / raw)
  To: 'Juanma Barranquero'; +Cc: 'Juri Linkov', emacs-devel

> > There is a copy of mb-depth.el on Emacs Wiki. I'll remove 
> > it and post a notice
> > that you can now obtain it from Emacs 23.
> >
> > That will require people to download Emacs 23 to get this 
> > library, even though it works with older Emacs versions also.
> > That's too bad, but it is no doubt preferable to having an
> > out-of-date version out there.
> 
> There's no need to download all Emacs 23:
> 
> http://cvs.savannah.gnu.org/viewvc/*checkout*/emacs/emacs/lisp
> /mb-depth.el

Thanks for the info, Juanma. I've updated the wiki accordingly (removing the
file and providing that link).





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

* mb-depth.el patch
  2008-08-01 16:27                                 ` Drew Adams
@ 2008-08-01 17:09                                   ` Drew Adams
  2008-08-04 13:13                                     ` Juanma Barranquero
  0 siblings, 1 reply; 38+ messages in thread
From: Drew Adams @ 2008-08-01 17:09 UTC (permalink / raw)
  To: 'Juanma Barranquero'; +Cc: 'Juri Linkov', emacs-devel

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

Attached is a patch for mb-depth.el that lets users customize the depth
indicator (its form and face). These are currently hard-coded.

See also the thread "feature request: indicator of minibuffer-recursion depth"
from a year ago:
http://lists.gnu.org/archive/html/emacs-devel/2007-06/msg00304.html. That thread
petered out, but there was at least some agreement that users should be able to
customize this in some way.


[-- Attachment #2: mb-depth-2008-08-01.patch --]
[-- Type: application/octet-stream, Size: 1597 bytes --]

diff -c -w "mb-depth-CVS-2008-08-01.el" "mb-depth.el"
*** mb-depth-CVS-2008-08-01.el	Fri Aug  1 08:14:50 2008
--- mb-depth.el	Fri Aug  1 09:48:54 2008
***************
*** 30,35 ****
--- 30,43 ----
  
  ;;; Code:
  
+ (defface minibuffer-depth-indicator '((t (:inherit default)))
+   "Face used to indicate minibuffer depth."
+   :group 'convenience :group 'faces)
+ 
+ (defcustom minibuffer-depth-indicator-format "%d) "
+   "*Format string for minibuffer depth indicator."
+   :type 'string :group 'convenience)
+ 
  (defvar minibuffer-depth-indicator-function nil
    "If non-nil, function to set up the minibuffer depth indicator.
  It is called with one argument, the minibuffer depth,
***************
*** 50,56 ****
      (overlay-put minibuffer-depth-overlay 'before-string
  		 (if minibuffer-depth-indicator-function
  		     (funcall minibuffer-depth-indicator-function (minibuffer-depth))
! 		   (propertize (format "[%d]" (minibuffer-depth)) 'face 'highlight)))
      (overlay-put minibuffer-depth-overlay 'evaporate t)))
  
  ;;;###autoload
--- 58,65 ----
      (overlay-put minibuffer-depth-overlay 'before-string
                   (if minibuffer-depth-indicator-function
                       (funcall minibuffer-depth-indicator-function (minibuffer-depth))
!                    (propertize (format minibuffer-depth-indicator-format (minibuffer-depth))
!                                'face 'minibuffer-depth-indicator)))
      (overlay-put minibuffer-depth-overlay 'evaporate t)))
  
  ;;;###autoload

Diff finished at Fri Aug 01 09:49:33

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

* Re: mb-depth.el patch
  2008-08-01 17:09                                   ` mb-depth.el patch Drew Adams
@ 2008-08-04 13:13                                     ` Juanma Barranquero
  0 siblings, 0 replies; 38+ messages in thread
From: Juanma Barranquero @ 2008-08-04 13:13 UTC (permalink / raw)
  To: Drew Adams; +Cc: Juri Linkov, emacs-devel

On Fri, Aug 1, 2008 at 19:09, Drew Adams <drew.adams@oracle.com> wrote:

> See also the thread "feature request: indicator of minibuffer-recursion depth"
> from a year ago:
> http://lists.gnu.org/archive/html/emacs-devel/2007-06/msg00304.html. That thread
> petered out, but there was at least some agreement that users should be able to
> customize this in some way.

Currently, they can use minibuffer-depth-indicator-function (but not
through the customization interface).

 Juanma




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

end of thread, other threads:[~2008-08-04 13:13 UTC | newest]

Thread overview: 38+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-10-22  0:22 Minibuffer default values list Juri Linkov
2007-10-23  7:12 ` Richard Stallman
2007-10-28 10:57   ` Juri Linkov
2007-11-11 23:42     ` Juri Linkov
2007-11-12  5:59       ` Richard Stallman
2007-11-16  1:27         ` Substitute ? in dired without surrounding whitespace (was: Minibuffer default values list) Juri Linkov
2007-11-17 23:30           ` Richard Stallman
2007-11-17 23:57             ` Substitute ? in dired without surrounding whitespace Juri Linkov
2007-11-18 22:46               ` Richard Stallman
2007-11-19  0:48         ` Minibuffer default values list Juri Linkov
2007-11-22  2:28           ` Richard Stallman
2007-11-22 19:02             ` Juri Linkov
2007-11-23  4:35               ` Richard Stallman
2007-11-24 17:54                 ` Juri Linkov
2007-11-25  3:43                   ` Richard Stallman
2007-11-25 15:18                     ` mb-pos.el (was: Minibuffer default values list) Juri Linkov
2007-12-02 21:27                       ` Richard Stallman
2007-12-03  0:34                         ` Minibuffer default values list Juri Linkov
2007-12-03 18:43                           ` Richard Stallman
2007-11-25 15:19                     ` Subject: mb-depth.el (was: Minibuffer default values list) Juri Linkov
2008-07-31 17:28                       ` Juri Linkov
2008-07-31 18:08                         ` Drew Adams
2008-07-31 18:24                           ` Juanma Barranquero
2008-07-31 18:35                             ` Drew Adams
2008-08-01 12:34                               ` Juanma Barranquero
2008-08-01 16:27                                 ` Drew Adams
2008-08-01 17:09                                   ` mb-depth.el patch Drew Adams
2008-08-04 13:13                                     ` Juanma Barranquero
2007-11-23  4:35               ` Minibuffer default values list Richard Stallman
2007-11-23 15:05                 ` Stefan Monnier
     [not found]                   ` <E1IvwoM-0004oD-AU@fencepost.gnu.org>
     [not found]                     ` <jwvwss5ptqv.fsf-monnier+emacs@gnu.org>
2007-12-03 18:42                       ` Richard Stallman
2007-11-19  0:52         ` Juri Linkov
2007-11-19 19:02           ` Richard Stallman
2007-11-23  0:48             ` Juri Linkov
2007-11-11 23:43 ` Juri Linkov
2007-11-12  5:59   ` Richard Stallman
2007-11-11 23:45 ` Juri Linkov
2007-11-12  5:59   ` 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).