* Re: dired-do-touch
@ 2004-04-24 15:28 Lars Hansen
2004-04-24 17:01 ` dired-do-touch Eli Zaretskii
0 siblings, 1 reply; 62+ messages in thread
From: Lars Hansen @ 2004-04-24 15:28 UTC (permalink / raw)
On 27 Mar 2004 Eli Zaretskii wrote:
>The patch to add set-file-times is already reviewed by at least 2
>Emacs maintainers, and is IMHO ready for being checked in.
>
What happened to this?
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-04-24 15:28 dired-do-touch Lars Hansen @ 2004-04-24 17:01 ` Eli Zaretskii 2004-04-24 17:04 ` dired-do-touch Lars Hansen 0 siblings, 1 reply; 62+ messages in thread From: Eli Zaretskii @ 2004-04-24 17:01 UTC (permalink / raw) Cc: emacs-devel > Date: Sat, 24 Apr 2004 17:28:29 +0200 > From: Lars Hansen <larsh@math.ku.dk> > > On 27 Mar 2004 Eli Zaretskii wrote: > > >The patch to add set-file-times is already reviewed by at least 2 > >Emacs maintainers, and is IMHO ready for being checked in. > > > What happened to this? I thought it was committed. Wasn't it? ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-04-24 17:01 ` dired-do-touch Eli Zaretskii @ 2004-04-24 17:04 ` Lars Hansen 0 siblings, 0 replies; 62+ messages in thread From: Lars Hansen @ 2004-04-24 17:04 UTC (permalink / raw) Cc: emacs-devel Eli Zaretskii wrote: >I thought it was committed. Wasn't it? > > I don't think so, I can't find it when I look with grep in src. ^ permalink raw reply [flat|nested] 62+ messages in thread
* [PATCH] fix goto-line @ 2011-07-28 12:57 Jose E. Marchesi 2011-07-28 14:07 ` Juanma Barranquero 0 siblings, 1 reply; 62+ messages in thread From: Jose E. Marchesi @ 2011-07-28 12:57 UTC (permalink / raw) To: emacs-devel Hi hackers! Just a tiny patch fixing a problem in goto-line, which was passing a string as the second parameter to read-number, triggering an error. 2011-07-28 Jose E. Marchesi <jemarch@gnu.org> * simple.el (goto-line): Use string-to-number to provide a numeric argument to read-number. --- lisp/simple.el 2011-07-16 18:42:38 +0000 +++ lisp/simple.el 2011-07-28 12:47:34 +0000 @@ -900,10 +900,11 @@ (save-excursion (skip-chars-backward "0-9") (if (looking-at "[0-9]") - (buffer-substring-no-properties + (string-to-number + (buffer-substring-no-properties (point) (progn (skip-chars-forward "0-9") - (point)))))) + (point))))))) ;; Decide if we're switching buffers. (buffer (if (consp current-prefix-arg) -- Jose E. Marchesi jemarch@gnu.org GNU Project http://www.gnu.org ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH] fix goto-line 2011-07-28 12:57 [PATCH] fix goto-line Jose E. Marchesi @ 2011-07-28 14:07 ` Juanma Barranquero 2011-07-29 11:15 ` Juri Linkov 0 siblings, 1 reply; 62+ messages in thread From: Juanma Barranquero @ 2011-07-28 14:07 UTC (permalink / raw) To: Jose E. Marchesi; +Cc: emacs-devel On Thu, Jul 28, 2011 at 14:57, Jose E. Marchesi <jemarch@gnu.org> wrote: > Just a tiny patch fixing a problem in goto-line, which was passing a > string as the second parameter to read-number, triggering an error. Committed. Next time please file it as a bug report. Thanks, Juanma ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH] fix goto-line 2011-07-28 14:07 ` Juanma Barranquero @ 2011-07-29 11:15 ` Juri Linkov 2011-07-29 11:22 ` Juanma Barranquero 0 siblings, 1 reply; 62+ messages in thread From: Juri Linkov @ 2011-07-29 11:15 UTC (permalink / raw) To: emacs-devel >> Just a tiny patch fixing a problem in goto-line, which was passing a >> string as the second parameter to read-number, triggering an error. > > Committed. I noticed the following areas for improvement: 1. `read-number' already inserts the default value into prompt. So the same code is not necessary in `goto-line'. 2. It would be useful to add the current line number to the defaults of `goto-line' to allow its easier modification by users. This is implemented with: === modified file 'lisp/simple.el' --- lisp/simple.el 2011-07-28 14:05:07 +0000 +++ lisp/simple.el 2011-07-29 11:14:04 +0000 @@ -914,11 +914,8 @@ (defun goto-line (line &optional buffer) (concat " in " (buffer-name buffer)) ""))) ;; Read the argument, offering that number (if any) as default. - (list (read-number (format (if default "Goto line%s (%s): " - "Goto line%s: ") - buffer-prompt - default) - default) + (list (read-number (format "Goto line%s: " buffer-prompt) + (list default (line-number-at-pos))) buffer)))) ;; Switch to the desired buffer, one way or another. (if buffer 3. `read-number' still doesn't support multiple default values like other minibuffer reading functions. Let's do it. === modified file 'lisp/subr.el' --- lisp/subr.el 2011-07-15 23:59:25 +0000 +++ lisp/subr.el 2011-07-29 11:12:45 +0000 @@ -2113,23 +2113,27 @@ (defun read-number (prompt &optional def "Read a numeric value in the minibuffer, prompting with PROMPT. DEFAULT specifies a default value to return if the user just types RET. The value of DEFAULT is inserted into PROMPT." - (let ((n nil)) - (when default + (let ((n nil) + (default1 (if (consp default) (car default) default))) + (when default1 (setq prompt (if (string-match "\\(\\):[ \t]*\\'" prompt) - (replace-match (format " (default %s)" default) t t prompt 1) + (replace-match (format " (default %s)" default1) t t prompt 1) (replace-regexp-in-string "[ \t]*\\'" - (format " (default %s) " default) + (format " (default %s) " default1) prompt t t)))) (while (progn - (let ((str (read-from-minibuffer prompt nil nil nil nil - (and default - (number-to-string default))))) + (let ((str (read-from-minibuffer + prompt nil nil nil nil + (when default + (if (consp default) + (mapcar 'number-to-string (delq nil default)) + (number-to-string default)))))) (condition-case nil (setq n (cond - ((zerop (length str)) default) - ((stringp str) (read str)))) + ((zerop (length str)) default1) + ((stringp str) (string-to-number str)))) (error nil))) (unless (numberp n) (message "Please enter a number.") 4. In the patch above I replaced `read' with `string-to-number' for consistency. ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH] fix goto-line 2011-07-29 11:15 ` Juri Linkov @ 2011-07-29 11:22 ` Juanma Barranquero 2011-07-29 15:28 ` Juri Linkov 0 siblings, 1 reply; 62+ messages in thread From: Juanma Barranquero @ 2011-07-29 11:22 UTC (permalink / raw) To: Juri Linkov; +Cc: emacs-devel On Fri, Jul 29, 2011 at 13:15, Juri Linkov <juri@jurta.org> wrote: > I noticed the following areas for improvement: > > 1. `read-number' already inserts the default value into prompt. > So the same code is not necessary in `goto-line'. > > 2. It would be useful to add the current line number to the defaults > of `goto-line' to allow its easier modification by users. There are improvements and not bug fixes, so please file this as a wishlist item for 24.2 (and do not forget to add the "patch" tag). Juanma ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH] fix goto-line 2011-07-29 11:22 ` Juanma Barranquero @ 2011-07-29 15:28 ` Juri Linkov 2011-07-29 16:45 ` Paul Eggert 0 siblings, 1 reply; 62+ messages in thread From: Juri Linkov @ 2011-07-29 15:28 UTC (permalink / raw) To: Juanma Barranquero; +Cc: emacs-devel > There are improvements and not bug fixes, so please file this as a > wishlist item for 24.2 (and do not forget to add the "patch" tag). These are improvements, but changes in the default value of `dired-do-touch' is a regression. I'd like to fix this regression with the following patch. It restores the old pre-24 essential behavior, but still keeps the requirement asked by the reporter of bug#6887 to use the current time. More changes from http://thread.gmane.org/gmane.emacs.devel/81414/focus=82988 could be postponed to 24.2. === modified file 'lisp/dired-aux.el' --- lisp/dired-aux.el 2011-07-25 08:23:29 +0000 +++ lisp/dired-aux.el 2011-07-29 15:27:45 +0000 @@ -227,20 +227,6 @@ (defun dired-files-attributes (dir) (directory-files dir))) \f -(defun dired-touch-initial (files) - "Create initial input value for `touch' command." - ;; Nobody can explain what this version is supposed to do. (Bug#6887) - ;; Also, the manual says it uses "the present time". - ;;; (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))) - (format-time-string "%Y%m%d%H%M.%S" (current-time))) - (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. @@ -249,11 +235,18 @@ (defun dired-do-chxxx (attribute-name pr ;; 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)) + (initial + (if (eq op-symbol 'touch) + (format-time-string "%Y%m%d%H%M.%S" (current-time)))) + (default + (if (eq op-symbol 'touch) + (and (stringp (car files)) + (format-time-string "%Y%m%d%H%M.%S" + (nth 5 (file-attributes (car 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)) + initial op-symbol arg files default)) (operation (concat program " " new-attribute)) failures) (setq failures ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH] fix goto-line 2011-07-29 15:28 ` Juri Linkov @ 2011-07-29 16:45 ` Paul Eggert 2011-07-30 9:17 ` dired-do-touch (was: [PATCH] fix goto-line) Juri Linkov 0 siblings, 1 reply; 62+ messages in thread From: Paul Eggert @ 2011-07-29 16:45 UTC (permalink / raw) To: Juri Linkov; +Cc: Juanma Barranquero, emacs-devel On 07/29/11 08:28, Juri Linkov wrote: > I'd like to fix this regression with the following patch. Thanks, could you please open up a bug report for this on debbugs.gnu.org? That'd be a better place to discuss this anyway. > + (if (eq op-symbol 'touch) > + (format-time-string "%Y%m%d%H%M.%S" (current-time)))) I don't know what the overall problem is here, but I can see two issues with this proposed patch. First, presumably it invokes (current-time) at one point, and then, later, uses that saved current-time to do the 'touch'. But that's not quite right; it's the equivalent of the shell command touch --date="$(date)" file whereas surely what is wanted is the equivalent of touch file The latter command avoids some race conditions, because it uses the time at the point of the 'touch', not at the point of the invocation of 'date' (or of 'current-time'). The second issue is minor, and perhaps fixing the first issue will make it irrelevant, but here it is anyway: the "(current-time)" can be omitted in the above code, as it's the default for that argument of format-time-string. ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch (was: [PATCH] fix goto-line) 2011-07-29 16:45 ` Paul Eggert @ 2011-07-30 9:17 ` Juri Linkov 2011-07-30 9:50 ` dired-do-touch Juri Linkov 2011-07-30 9:54 ` dired-do-touch (was: [PATCH] fix goto-line) Andreas Schwab 0 siblings, 2 replies; 62+ messages in thread From: Juri Linkov @ 2011-07-30 9:17 UTC (permalink / raw) To: Paul Eggert; +Cc: emacs-devel > Thanks, could you please open up a bug report for this > on debbugs.gnu.org? That'd be a better place to discuss > this anyway. I've unarchived that bug report and referred to this thread from it. >> + (if (eq op-symbol 'touch) >> + (format-time-string "%Y%m%d%H%M.%S" (current-time)))) > > I don't know what the overall problem is here, but I can > see two issues with this proposed patch. First, presumably it > invokes (current-time) at one point, and then, later, > uses that saved current-time to do the 'touch'. But that's > not quite right; it's the equivalent of the shell command > > touch --date="$(date)" file In theory you are right. But in practice a 1-2 sec delay is not a problem. > whereas surely what is wanted is the equivalent of > > touch file When `touch file' is really wanted then it's easy to type `! touch'. `dired-do-touch' was created for the convenience of changing the file's timestamp providing useful default values for editing. > The latter command avoids some race conditions, because it > uses the time at the point of the 'touch', not at the point of > the invocation of 'date' (or of 'current-time'). `T' is intended to allow editing the file attribute of the last modification time, like `M' is used for editing the file's mode, `O' - owner's UID, `G' - GID. The docstring of `dired-do-touch' says: "Change the timestamp of the marked (or next ARG) files." And Dired is "Directory Editor" after all, so it should allow editing file attributes including timestamps. > The second issue is minor, and perhaps fixing the first issue > will make it irrelevant, but here it is anyway: the > "(current-time)" can be omitted in the above code, as it's the default > for that argument of format-time-string. Thanks, I removed "(current-time)" from the call to `format-time-string'. BTW, I noticed that the docstring of `format-time-string' refers to the argument `TIME' whereas the real argument name is `TIMEVAL'. Adding something like "\n\(fn FORMAT-STRING &optional TIME UNIVERSAL)" to the last line of the docstring would help. Another documentation mismatch is that (info "(emacs) Operating on Files") says: `M MODESPEC <RET>' Change the mode (also called "permission bits") of the specified files (`dired-do-chmod'). This uses the `chmod' program, so MODESPEC can be any argument that `chmod' can handle. But actually `dired-do-chmod' doesn't use the `chmod' program anymore. ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2011-07-30 9:17 ` dired-do-touch (was: [PATCH] fix goto-line) Juri Linkov @ 2011-07-30 9:50 ` Juri Linkov 2011-07-30 9:54 ` dired-do-touch (was: [PATCH] fix goto-line) Andreas Schwab 1 sibling, 0 replies; 62+ messages in thread From: Juri Linkov @ 2011-07-30 9:50 UTC (permalink / raw) To: Paul Eggert; +Cc: emacs-devel > BTW, I noticed that the docstring of `format-time-string' refers > to the argument `TIME' whereas the real argument name is `TIMEVAL'. > Adding something like "\n\(fn FORMAT-STRING &optional TIME UNIVERSAL)" > to the last line of the docstring would help. The "\(fn" syntax is used only for the docstrings of Lisp functions. So it should be "usage: (format-time-string FORMAT-STRING &optional TIME UNIVERSAL)" ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch (was: [PATCH] fix goto-line) 2011-07-30 9:17 ` dired-do-touch (was: [PATCH] fix goto-line) Juri Linkov 2011-07-30 9:50 ` dired-do-touch Juri Linkov @ 2011-07-30 9:54 ` Andreas Schwab 2011-07-30 11:01 ` dired-do-touch Juri Linkov 1 sibling, 1 reply; 62+ messages in thread From: Andreas Schwab @ 2011-07-30 9:54 UTC (permalink / raw) To: Juri Linkov; +Cc: Paul Eggert, emacs-devel Juri Linkov <juri@jurta.org> writes: >>> + (if (eq op-symbol 'touch) >>> + (format-time-string "%Y%m%d%H%M.%S" (current-time)))) >> >> I don't know what the overall problem is here, but I can >> see two issues with this proposed patch. First, presumably it >> invokes (current-time) at one point, and then, later, >> uses that saved current-time to do the 'touch'. But that's >> not quite right; it's the equivalent of the shell command >> >> touch --date="$(date)" file > > In theory you are right. But in practice a 1-2 sec delay > is not a problem. Note that changing the timestamp to a specific value requires owner rights, whereas setting it to the current time only requires write access. >> whereas surely what is wanted is the equivalent of >> >> touch file > > When `touch file' is really wanted then it's easy to type `! touch'. > `dired-do-touch' was created for the convenience of changing > the file's timestamp providing useful default values for editing. An empty timestamp should mean running touch without time argument. Andreas. -- Andreas Schwab, schwab@linux-m68k.org GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different." ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2011-07-30 9:54 ` dired-do-touch (was: [PATCH] fix goto-line) Andreas Schwab @ 2011-07-30 11:01 ` Juri Linkov 0 siblings, 0 replies; 62+ messages in thread From: Juri Linkov @ 2011-07-30 11:01 UTC (permalink / raw) To: Andreas Schwab; +Cc: Paul Eggert, emacs-devel > An empty timestamp should mean running touch without time argument. Good idea. But unfortunately `dired-do-chxxx' reads arguments using `read-string' that can't return an empty string when there are values for M-n. ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch @ 2007-08-23 20:06 martin rudalics 2007-08-23 22:35 ` dired-do-touch Sean Sieger 0 siblings, 1 reply; 62+ messages in thread From: martin rudalics @ 2007-08-23 20:06 UTC (permalink / raw) To: sean.sieger; +Cc: help-gnu-emacs > I was looking for a one-key key-binding in dired > to create a file in the current directory. If you don't like the binding for T try (define-key dired-mode-map "T" 'find-file) ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2007-08-23 20:06 dired-do-touch martin rudalics @ 2007-08-23 22:35 ` Sean Sieger 0 siblings, 0 replies; 62+ messages in thread From: Sean Sieger @ 2007-08-23 22:35 UTC (permalink / raw) To: help-gnu-emacs martin rudalics <rudalics@gmx.at> writes: If you don't like the binding for T try (define-key dired-mode-map "T" 'find-file) Perfect, in fact, I used `t'. Thank you, you guys, for your patience with me, I like living in GNU Emacs. `Self-documenting' is becoming a practical feature for me, even though it may not show from my initial question. I don't split my frames much but that is changing with a lot more C-h m. ^ permalink raw reply [flat|nested] 62+ messages in thread
[parent not found: <mailman.5195.1187881677.32220.help-gnu-emacs@gnu.org>]
* Re: dired-do-touch [not found] <mailman.5195.1187881677.32220.help-gnu-emacs@gnu.org> @ 2007-08-23 15:23 ` Sven Joachim 2007-08-23 17:43 ` dired-do-touch Sean Sieger 0 siblings, 1 reply; 62+ messages in thread From: Sven Joachim @ 2007-08-23 15:23 UTC (permalink / raw) To: help-gnu-emacs Sean Sieger <sean.sieger@gmail.com> writes: > In GNU Emacs 23.0.0.5 (i686-pc-linux-gnu, GTK+ Version 2.10.11) of > 2007-07-31, when I do > > T > > in a dired buffer, dired prompts to change timestamp. Yes. > Is something > wrong with my build or configuration of GNU Emacs? I don't think so. What did you expect 'T' to do? Sven ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2007-08-23 15:23 ` dired-do-touch Sven Joachim @ 2007-08-23 17:43 ` Sean Sieger 0 siblings, 0 replies; 62+ messages in thread From: Sean Sieger @ 2007-08-23 17:43 UTC (permalink / raw) To: help-gnu-emacs Sven Joachim <svenjoac@gmx.de> writes: What did you expect 'T' to do? Thank you for asking. I was looking for a one-key key-binding in dired to create a file in the current directory. ^ permalink raw reply [flat|nested] 62+ messages in thread
* dired-do-touch @ 2007-08-23 15:07 Sean Sieger 2007-08-23 15:36 ` dired-do-touch Peter Dyballa 2007-08-23 17:39 ` dired-do-touch Sean Sieger 0 siblings, 2 replies; 62+ messages in thread From: Sean Sieger @ 2007-08-23 15:07 UTC (permalink / raw) To: help-gnu-emacs In GNU Emacs 23.0.0.5 (i686-pc-linux-gnu, GTK+ Version 2.10.11) of 2007-07-31, when I do T in a dired buffer, dired prompts to change timestamp. Is something wrong with my build or configuration of GNU Emacs? Thank you. ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2007-08-23 15:07 dired-do-touch Sean Sieger @ 2007-08-23 15:36 ` Peter Dyballa [not found] ` <4135e3e50708231035pbc95223m8988de9677ec3c4c@mail.gmail.com> 2007-08-23 17:39 ` dired-do-touch Sean Sieger 1 sibling, 1 reply; 62+ messages in thread From: Peter Dyballa @ 2007-08-23 15:36 UTC (permalink / raw) To: Sean Sieger; +Cc: help-gnu-emacs Am 23.08.2007 um 17:07 schrieb Sean Sieger: > when I do > > T > > in a dired buffer, dired prompts to change timestamp. Is something > wrong with my build or configuration of GNU Emacs? No. What do you expect? -- Greetings Pete Mac OS X is like a wigwam: no fences, no gates, but an apache inside. ^ permalink raw reply [flat|nested] 62+ messages in thread
[parent not found: <4135e3e50708231035pbc95223m8988de9677ec3c4c@mail.gmail.com>]
* Re: dired-do-touch [not found] ` <4135e3e50708231035pbc95223m8988de9677ec3c4c@mail.gmail.com> @ 2007-08-23 18:06 ` Peter Dyballa [not found] ` <mailman.5210.1187892398.32220.help-gnu-emacs@gnu.org> 1 sibling, 0 replies; 62+ messages in thread From: Peter Dyballa @ 2007-08-23 18:06 UTC (permalink / raw) To: Sean Sieger; +Cc: GNU Emacs List Am 23.08.2007 um 19:35 schrieb Sean Sieger: > I expected that > > T <RET> filename <RET> > > would create a file. Dired works only on existing files. And directories. Although there is an exception ... see below! > Is C-x C-f the only way to create a new file in dired or is there a > one-key key-binding? No. You can use *shell* or such buffers to create new files, you can copy or rename, or in dired-mode: ! t o u c h SPC <file name> > > On a different note, do you use bookmarks extensively? No. And neither intensively. Not at all, for short. -- Greetings Pete Math illiteracy affects 7 out of every 5 Americans. ^ permalink raw reply [flat|nested] 62+ messages in thread
[parent not found: <mailman.5210.1187892398.32220.help-gnu-emacs@gnu.org>]
* Re: dired-do-touch [not found] ` <mailman.5210.1187892398.32220.help-gnu-emacs@gnu.org> @ 2007-08-24 6:32 ` Fabian Braennstroem 2007-08-24 16:44 ` dired-do-touch Sean Sieger [not found] ` <mailman.5260.1187973928.32220.help-gnu-emacs@gnu.org> 0 siblings, 2 replies; 62+ messages in thread From: Fabian Braennstroem @ 2007-08-24 6:32 UTC (permalink / raw) To: help-gnu-emacs Peter Dyballa schrieb am 08/23/2007 06:06 PM: > Am 23.08.2007 um 19:35 schrieb Sean Sieger: > >> I expected that >> >> T <RET> filename <RET> >> >> would create a file. > > Dired works only on existing files. And directories. Although there > is an exception ... see below! > >> Is C-x C-f the only way to create a new file in dired or is there a >> one-key key-binding? > > No. You can use *shell* or such buffers to create new files, you can > copy or rename, or in dired-mode: > > ! t o u c h SPC <file name> > >> On a different note, do you use bookmarks extensively? > > No. And neither intensively. Not at all, for short. I use it a lot and it is great; first I used a small macro to jump to the directories and since yesterday evening: (define-key dired-mode-map "1" (lambda () (interactive) (bookmark-jump "bookmark name"))) which is a lot faster :-) Regards! Fabian ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2007-08-24 6:32 ` dired-do-touch Fabian Braennstroem @ 2007-08-24 16:44 ` Sean Sieger [not found] ` <mailman.5260.1187973928.32220.help-gnu-emacs@gnu.org> 1 sibling, 0 replies; 62+ messages in thread From: Sean Sieger @ 2007-08-24 16:44 UTC (permalink / raw) To: help-gnu-emacs Fabian Braennstroem <f.braennstroem@gmx.de> writes: I use it a lot and it is great; first I used a small macro to jump to the directories and since yesterday evening: (define-key dired-mode-map "1" (lambda () (interactive) (bookmark-jump "bookmark name"))) which is a lot faster :-) I watched that thread as well as looked at explicit `bookmark' threads back to 2002. A question that I formulated regarding the above binding is, why not `j', does the function dired-goto-file serve you well? C-x C-f is so reflexive, after a day in GNU Emacs, I do C-x C-f to get to the shower. ^ permalink raw reply [flat|nested] 62+ messages in thread
[parent not found: <mailman.5260.1187973928.32220.help-gnu-emacs@gnu.org>]
* Re: dired-do-touch [not found] ` <mailman.5260.1187973928.32220.help-gnu-emacs@gnu.org> @ 2007-08-24 21:15 ` Fabian Braennstroem 0 siblings, 0 replies; 62+ messages in thread From: Fabian Braennstroem @ 2007-08-24 21:15 UTC (permalink / raw) To: help-gnu-emacs Hi Sean, Sean Sieger schrieb am 08/24/2007 04:44 PM: > Fabian Braennstroem <f.braennstroem@gmx.de> writes: > > I use it a lot and it is great; first I used a small macro > to jump to the directories and since yesterday > evening: > > (define-key dired-mode-map "1" > (lambda () > (interactive) > (bookmark-jump "bookmark name"))) > > which is a lot faster :-) > > I watched that thread as well as looked at explicit `bookmark' threads > back to 2002. A question that I formulated regarding the above binding > is, why not `j', does the function dired-goto-file serve you well? C-x > C-f is so reflexive, after a day in GNU Emacs, I do C-x C-f to get to > the shower. I am not really getting it, but I have around 15 dired bookmarks using 1-9 and a combination with Control; j, h, l , k I, g, G , H I use for navigation ( I was a vim user :-) ) Greetings! Fabian > > ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2007-08-23 15:07 dired-do-touch Sean Sieger 2007-08-23 15:36 ` dired-do-touch Peter Dyballa @ 2007-08-23 17:39 ` Sean Sieger 1 sibling, 0 replies; 62+ messages in thread From: Sean Sieger @ 2007-08-23 17:39 UTC (permalink / raw) To: help-gnu-emacs Sean Sieger <sean.sieger@gmail.com> writes: In GNU Emacs 23.0.0.5 (i686-pc-linux-gnu, GTK+ Version 2.10.11) of 2007-07-31, when I do T in a dired buffer, dired prompts to change timestamp. Um, I see this is expected. Sorry. ^ permalink raw reply [flat|nested] 62+ messages in thread
[parent not found: <20040321165848.0DB3C662F8@imf.math.ku.dk>]
* Re: dired-do-touch [not found] <20040321165848.0DB3C662F8@imf.math.ku.dk> @ 2004-03-21 18:12 ` Lars Hansen 2004-03-22 23:45 ` dired-do-touch Matthew Mundell 0 siblings, 1 reply; 62+ messages in thread From: Lars Hansen @ 2004-03-21 18:12 UTC (permalink / raw) Cc: matt, Kai Grossjohann, Eli Zaretskii > > >I wonder: wouldn't it be better to have an Emacs primitive to do >this, instead of invoking an external program? For starters, it will >then work on any platform, including those where `touch' is not a >standard part of the OS. > A week ago, in the thread "Re: Set modtime of a local file?", I suggested to make the existing function set_file_times (in sysdep.c) into a lisp primitive because such a primitive is needed in Tramp. This primitive could be used by dired-do-touch to obtain independence of external programs. ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-21 18:12 ` dired-do-touch Lars Hansen @ 2004-03-22 23:45 ` Matthew Mundell 2004-03-23 6:31 ` dired-do-touch Eli Zaretskii 0 siblings, 1 reply; 62+ messages in thread From: Matthew Mundell @ 2004-03-22 23:45 UTC (permalink / raw) Here's a version of dired-do-touch which operates on the selected files in the same manner as the other Dired uppercase operations. This version uses set-file-times, a primitive interface to set_file_times, to touch the files. The set-file-times primitive uses lisp_time_argument to get or parse the time. This requires the change to editfns.c to provide lisp_time_argument externally. Making this change will require the set-file-times file name handler to be added to the list of handlers in the Elisp reference. =================================================================== RCS file: /cvsroot/emacs/emacs/lisp/dired-aux.el,v diff -u -r1.114 dired-aux.el --- lisp/dired-aux.el 8 Feb 2004 22:38:51 -0000 1.114 +++ lisp/dired-aux.el 22 Mar 2004 21:53:58 -0000 @@ -2135,6 +2135,29 @@ (backward-delete-char 1)) (message "%s" (buffer-string)))) +(defun dired-touch () + "Touch current file. Return file name on failure, else nil." + (let ((file (dired-get-filename)) + fail) + (condition-case err + (set-file-times file (current-time)) + (error (setq fail err))) + (if fail + (progn + (dired-log "Setting time on `%s' failed:\n%s\n" + file fail) + (dired-make-relative file))))) + +;;;###autoload +(defun dired-do-touch (&optional arg) + "Set the selected files' access and mod times to the current time. + +With non-zero prefix argument ARG, the command operates on the +next ARG files. Otherwise, it operates on all the marked files, +or the current file if none are marked." + (interactive "P") + (dired-map-over-marks-check (function dired-touch) arg 'touch nil)) + (provide 'dired-aux) ;;; arch-tag: 4b508de9-a153-423d-8d3f-a1bbd86f4f60 =================================================================== RCS file: /cvsroot/emacs/emacs/src/editfns.c,v diff -u -r1.368 editfns.c --- src/editfns.c 2 Mar 2004 21:42:03 -0000 1.368 +++ src/editfns.c 22 Mar 2004 22:01:45 -0000 @@ -73,7 +73,7 @@ static void find_field P_ ((Lisp_Object, Lisp_Object, Lisp_Object, int *, Lisp_Object, int *)); static void update_buffer_properties P_ ((int, int)); static Lisp_Object region_limit P_ ((int)); -static int lisp_time_argument P_ ((Lisp_Object, time_t *, int *)); +int lisp_time_argument P_ ((Lisp_Object, time_t *, int *)); static size_t emacs_memftimeu P_ ((char *, size_t, const char *, size_t, const struct tm *, int)); static void general_insert_function P_ ((void (*) (const unsigned char *, int), @@ -1377,7 +1377,7 @@ } \f -static int +int lisp_time_argument (specified_time, result, usec) Lisp_Object specified_time; time_t *result; =================================================================== RCS file: /cvsroot/emacs/emacs/src/fileio.c,v diff -u -r1.499 fileio.c --- src/fileio.c 18 Mar 2004 02:58:45 -0000 1.499 +++ src/fileio.c 22 Mar 2004 21:53:23 -0000 @@ -323,6 +323,7 @@ Lisp_Object Qfile_accessible_directory_p; Lisp_Object Qfile_modes; Lisp_Object Qset_file_modes; +Lisp_Object Qset_file_times; Lisp_Object Qfile_newer_than_file_p; Lisp_Object Qinsert_file_contents; Lisp_Object Qwrite_region; @@ -3438,7 +3439,45 @@ XSETINT (value, (~ realmask) & 0777); return value; } +\f +DEFUN ("set-file-times", Fset_file_times, Sset_file_times, 1, 2, 0, + doc: /* Set access and modification times of file FILENAME. +If optional second argument TIME is supplied then it is used instead +of the current time. TIME must be in the format of +`current-time'. */) + (filename, time) + Lisp_Object filename, time; +{ + Lisp_Object absname, encoded_absname; + Lisp_Object handler; + time_t sec; + int usec; + + if (! lisp_time_argument (time, &sec, &usec)) + error ("Invalid time specification"); + + absname = Fexpand_file_name (filename, current_buffer->directory); + + /* If the file name has special constructs in it, + call the corresponding file handler. */ + handler = Ffind_file_name_handler (absname, Qset_file_times); + if (!NILP (handler)) + return call3 (handler, Qset_file_times, absname, time); + + encoded_absname = ENCODE_FILE (absname); + + { + EMACS_TIME t; + EMACS_SET_SECS (t, sec); + EMACS_SET_USECS (t, usec); + + if (set_file_times (SDATA (encoded_absname), t, t) < 0) + report_file_error ("Setting file times", Fcons (absname, Qnil)); + } + + return Qnil; +} \f #ifdef __NetBSD__ #define unix 42 @@ -6339,6 +6378,7 @@ Qfile_accessible_directory_p = intern ("file-accessible-directory-p"); Qfile_modes = intern ("file-modes"); Qset_file_modes = intern ("set-file-modes"); + Qset_file_times = intern ("set-file-times"); Qfile_newer_than_file_p = intern ("file-newer-than-file-p"); Qinsert_file_contents = intern ("insert-file-contents"); Qwrite_region = intern ("write-region"); @@ -6372,6 +6412,7 @@ staticpro (&Qfile_accessible_directory_p); staticpro (&Qfile_modes); staticpro (&Qset_file_modes); + staticpro (&Qset_file_times); staticpro (&Qfile_newer_than_file_p); staticpro (&Qinsert_file_contents); staticpro (&Qwrite_region); @@ -6595,6 +6636,7 @@ defsubr (&Sfile_regular_p); defsubr (&Sfile_modes); defsubr (&Sset_file_modes); + defsubr (&Sset_file_times); defsubr (&Sset_default_file_modes); defsubr (&Sdefault_file_modes); defsubr (&Sfile_newer_than_file_p); ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-22 23:45 ` dired-do-touch Matthew Mundell @ 2004-03-23 6:31 ` Eli Zaretskii 2004-03-23 21:48 ` dired-do-touch Matthew Mundell 0 siblings, 1 reply; 62+ messages in thread From: Eli Zaretskii @ 2004-03-23 6:31 UTC (permalink / raw) Cc: emacs-devel > From: Matthew Mundell <matt@mundell.ukfsn.org> > Date: 22 Mar 2004 23:45:14 +0000 > > + if (set_file_times (SDATA (encoded_absname), t, t) < 0) > + report_file_error ("Setting file times", Fcons (absname, Qnil)); I think this will throw an error on Windows if the file is a directory. So it would be good to single out that case on DOS_NT systems. Otherwise, thanks a lot! ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-23 6:31 ` dired-do-touch Eli Zaretskii @ 2004-03-23 21:48 ` Matthew Mundell 2004-03-24 7:11 ` dired-do-touch Eli Zaretskii 2004-03-25 2:00 ` dired-do-touch Richard Stallman 0 siblings, 2 replies; 62+ messages in thread From: Matthew Mundell @ 2004-03-23 21:48 UTC (permalink / raw) Cc: emacs-devel > Eli Zaretskii <eliz@elta.co.il> writes: > > > > From: Matthew Mundell <matt@mundell.ukfsn.org> > > > Date: 22 Mar 2004 23:45:14 +0000 > > > > > > + if (set_file_times (SDATA (encoded_absname), t, t) < 0) > > > + report_file_error ("Setting file times", Fcons (absname, Qnil)); > > > > I think this will throw an error on Windows if the file is a > > directory. So it would be good to single out that case on DOS_NT > > systems. Does the version below correctly handle the case? > > Otherwise, thanks a lot! Thanks. Here are change logs and the Dired "T" key binding, to go with yesterday's patches. 2004-03-23 Matthew Mundell <matt@mundell.ukfsn.org> * dired-aux.el (dired-touch, dired-do-touch): New defuns. * dired.el: Bind dired-do-touch to T. =================================================================== RCS file: /cvsroot/emacs/emacs/lisp/dired.el,v diff -u -r1.273 dired.el --- lisp/dired.el 23 Mar 2004 05:20:11 -0000 1.273 +++ lisp/dired.el 23 Mar 2004 12:17:57 -0000 @@ -909,6 +909,7 @@ (define-key map "Q" 'dired-do-query-replace-regexp) (define-key map "R" 'dired-do-rename) (define-key map "S" 'dired-do-symlink) + (define-key map "T" 'dired-do-touch) (define-key map "X" 'dired-do-shell-command) (define-key map "Z" 'dired-do-compress) (define-key map "!" 'dired-do-shell-command) 2004-03-23 Matthew Mundell <matt@mundell.ukfsn.org> * fileio.c (Qset_file_times): New variable. (Fset_file_times): New function. (lisp_time_argument): New declaration. (syms_of_fileio): staticpro and intern new variable, defsubr new function. * editfns.c (lisp_time_argument): Provide externally. =================================================================== RCS file: /cvsroot/emacs/emacs/src/fileio.c,v diff -u -r1.499 fileio.c --- src/fileio.c 18 Mar 2004 02:58:45 -0000 1.499 +++ src/fileio.c 23 Mar 2004 12:56:40 -0000 @@ -323,6 +323,7 @@ Lisp_Object Qfile_accessible_directory_p; Lisp_Object Qfile_modes; Lisp_Object Qset_file_modes; +Lisp_Object Qset_file_times; Lisp_Object Qfile_newer_than_file_p; Lisp_Object Qinsert_file_contents; Lisp_Object Qwrite_region; @@ -3438,7 +3439,66 @@ XSETINT (value, (~ realmask) & 0777); return value; } +\f +extern int lisp_time_argument P_ ((Lisp_Object, time_t *, int *)); + +DEFUN ("set-file-times", Fset_file_times, Sset_file_times, 1, 2, 0, + doc: /* Set access and modification times of file FILENAME. +If optional second argument TIME is supplied then it is used instead +of the current time. TIME must be in the format of +`current-time'. */) + (filename, time) + Lisp_Object filename, time; +{ + Lisp_Object absname, encoded_absname; + Lisp_Object handler; + time_t sec; + int usec; + + if (! lisp_time_argument (time, &sec, &usec)) + error ("Invalid time specification"); + + absname = Fexpand_file_name (filename, current_buffer->directory); + + /* If the file name has special constructs in it, + call the corresponding file handler. */ + handler = Ffind_file_name_handler (absname, Qset_file_times); + if (!NILP (handler)) + return call3 (handler, Qset_file_times, absname, time); + + encoded_absname = ENCODE_FILE (absname); + + { + EMACS_TIME t; + + EMACS_SET_SECS (t, sec); + EMACS_SET_USECS (t, usec); + +#ifdef WINDOWSNT + { + DWORD attributes; + Lisp_Object filename; + /* Ensure file is writable while its modified time is set. */ + filename = SDATA (encoded_absname); + attributes = GetFileAttributes (filename); + SetFileAttributes (filename, attributes & ~FILE_ATTRIBUTE_READONLY); + if (set_file_times (filename, t, t)) + { + /* Restore original attributes. */ + SetFileAttributes (filename, attributes); + report_file_error ("Setting file times", Fcons (absname, Qnil)); + } + /* Restore original attributes. */ + SetFileAttributes (filename, attributes); + } +#else + if (set_file_times (SDATA (encoded_absname), t, t)) + report_file_error ("Setting file times", Fcons (absname, Qnil)); +#endif + } + return Qnil; +} \f #ifdef __NetBSD__ #define unix 42 @@ -6339,6 +6399,7 @@ Qfile_accessible_directory_p = intern ("file-accessible-directory-p"); Qfile_modes = intern ("file-modes"); Qset_file_modes = intern ("set-file-modes"); + Qset_file_times = intern ("set-file-times"); Qfile_newer_than_file_p = intern ("file-newer-than-file-p"); Qinsert_file_contents = intern ("insert-file-contents"); Qwrite_region = intern ("write-region"); @@ -6372,6 +6433,7 @@ staticpro (&Qfile_accessible_directory_p); staticpro (&Qfile_modes); staticpro (&Qset_file_modes); + staticpro (&Qset_file_times); staticpro (&Qfile_newer_than_file_p); staticpro (&Qinsert_file_contents); staticpro (&Qwrite_region); @@ -6595,6 +6657,7 @@ defsubr (&Sfile_regular_p); defsubr (&Sfile_modes); defsubr (&Sset_file_modes); + defsubr (&Sset_file_times); defsubr (&Sset_default_file_modes); defsubr (&Sdefault_file_modes); defsubr (&Sfile_newer_than_file_p); ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-23 21:48 ` dired-do-touch Matthew Mundell @ 2004-03-24 7:11 ` Eli Zaretskii 2004-03-24 10:57 ` dired-do-touch Kim F. Storm 2004-03-24 20:57 ` dired-do-touch Matthew Mundell 2004-03-25 2:00 ` dired-do-touch Richard Stallman 1 sibling, 2 replies; 62+ messages in thread From: Eli Zaretskii @ 2004-03-24 7:11 UTC (permalink / raw) Cc: emacs-devel > From: Matthew Mundell <matt@mundell.ukfsn.org> > Date: 23 Mar 2004 21:48:19 +0000 > > > > > + if (set_file_times (SDATA (encoded_absname), t, t) < 0) > > > > + report_file_error ("Setting file times", Fcons (absname, Qnil)); > > > > > > I think this will throw an error on Windows if the file is a > > > directory. So it would be good to single out that case on DOS_NT > > > systems. > > Does the version below correctly handle the case? I don't know, but that was not what I had in mind. Whether a directory is or isn't writable is not an issue, to the best of my knowledge (IIRC, Windows ignores the read-only attribute when it handles directories, so, e.g., you can delete such a directory regardless). The issue is that Windows doesn't let you modify the directory's time stamp at all. So on DOS_NT systems we should either refrain from trying to change the time stamp of directories at all and print something like "Cannot set time stamp of directories on this system", or else more-or-less silently ignore errors in this function for directories on such systems. The second alternative is probably slightly better, since this is a primitive function that can be called from deep inside some complex command, where signalling an error might disrupt the rest of processing. FWIW, the DOS/Windows port of the `touch' utility doesn't print any error message if invoked on a directory, it silently fails. ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-24 7:11 ` dired-do-touch Eli Zaretskii @ 2004-03-24 10:57 ` Kim F. Storm 2004-03-24 11:10 ` dired-do-touch Eli Zaretskii 2004-03-24 20:57 ` dired-do-touch Matthew Mundell 1 sibling, 1 reply; 62+ messages in thread From: Kim F. Storm @ 2004-03-24 10:57 UTC (permalink / raw) Cc: Matthew Mundell, emacs-devel Eli Zaretskii <eliz@elta.co.il> writes: > else more-or-less silently ignore errors in this function for > directories on such systems. The second alternative is probably > slightly better, since this is a primitive function that can be called > from deep inside some complex command, where signalling an error might > disrupt the rest of processing. I think that this is acceptable behaviour on such systems. Maybe the function could simply return t if time was modified, nil otherwise. Then it would be easier for a programmer to change his code to deal with systems where the call fails. -- Kim F. Storm <storm@cua.dk> http://www.cua.dk ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-24 10:57 ` dired-do-touch Kim F. Storm @ 2004-03-24 11:10 ` Eli Zaretskii 2004-03-24 12:22 ` dired-do-touch Kim F. Storm 0 siblings, 1 reply; 62+ messages in thread From: Eli Zaretskii @ 2004-03-24 11:10 UTC (permalink / raw) Cc: matt, emacs-devel > From: storm@cua.dk (Kim F. Storm) > Date: 24 Mar 2004 11:57:48 +0100 > > > else more-or-less silently ignore errors in this function for > > directories on such systems. The second alternative is probably > > slightly better, since this is a primitive function that can be called > > from deep inside some complex command, where signalling an error might > > disrupt the rest of processing. > > I think that this is acceptable behaviour on such systems. What is? to signal an error? > Maybe the function could simply return t if time was modified, nil > otherwise. Then it would be easier for a programmer to change his > code to deal with systems where the call fails. Yes, a good idea, IMHO. ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-24 11:10 ` dired-do-touch Eli Zaretskii @ 2004-03-24 12:22 ` Kim F. Storm 2004-03-24 21:59 ` dired-do-touch Matthew Mundell 0 siblings, 1 reply; 62+ messages in thread From: Kim F. Storm @ 2004-03-24 12:22 UTC (permalink / raw) Cc: matt, emacs-devel Eli Zaretskii <eliz@elta.co.il> writes: > > I think that this is acceptable behaviour on such systems. > > What is? to signal an error? Ups -- no, that's not what I meant. Let me try again: > else more-or-less silently ignore errors in this function for > directories on such systems. I think that this is acceptable behaviour on such systems. > > Maybe the function could simply return t if time was modified, nil > > otherwise. Then it would be easier for a programmer to change his > > code to deal with systems where the call fails. > > Yes, a good idea, IMHO. So let's do it that way. Matt? -- Kim F. Storm <storm@cua.dk> http://www.cua.dk ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-24 12:22 ` dired-do-touch Kim F. Storm @ 2004-03-24 21:59 ` Matthew Mundell 2004-03-25 7:10 ` dired-do-touch Eli Zaretskii 0 siblings, 1 reply; 62+ messages in thread From: Matthew Mundell @ 2004-03-24 21:59 UTC (permalink / raw) Cc: emacs-devel storm@cua.dk (Kim F. Storm) writes: > Eli Zaretskii <eliz@elta.co.il> writes: > > > > I think that this is acceptable behaviour on such systems. > > > > What is? to signal an error? > > Ups -- no, that's not what I meant. > > Let me try again: > > > else more-or-less silently ignore errors in this function for > > directories on such systems. > > I think that this is acceptable behaviour on such systems. > > > > > Maybe the function could simply return t if time was modified, nil > > > otherwise. Then it would be easier for a programmer to change his > > > code to deal with systems where the call fails. > > > > Yes, a good idea, IMHO. > > So let's do it that way. Matt? Silently ignoring the error for directories on those systems sounds like the right approach. Here is the primitive. Does the change look OK? It needs to be tried on those systems. =================================================================== RCS file: /cvsroot/emacs/emacs/src/fileio.c,v diff -u -r1.499 fileio.c -- src/fileio.c 18 Mar 2004 02:58:45 -0000 1.499 ++ src/fileio.c 24 Mar 2004 14:51:31 -0000 @@ -323,6 +323,7 @@ Lisp_Object Qfile_accessible_directory_p; Lisp_Object Qfile_modes; Lisp_Object Qset_file_modes; Lisp_Object Qset_file_times; Lisp_Object Qfile_newer_than_file_p; Lisp_Object Qinsert_file_contents; Lisp_Object Qwrite_region; @@ -3438,7 +3439,59 @@ XSETINT (value, (~ realmask) & 0777); return value; } \f extern int lisp_time_argument P_ ((Lisp_Object, time_t *, int *)); DEFUN ("set-file-times", Fset_file_times, Sset_file_times, 1, 2, 0, doc: /* Set times of file FILENAME to TIME. Set both access and modification times. Return t on success, else nil. Use the current time if TIME is nil. TIME is in the format of `current-time'. */) (filename, time) Lisp_Object filename, time; { Lisp_Object absname, encoded_absname; Lisp_Object handler; time_t sec; int usec; if (! lisp_time_argument (time, &sec, &usec)) error ("Invalid time specification"); absname = Fexpand_file_name (filename, current_buffer->directory); /* If the file name has special constructs in it, call the corresponding file handler. */ handler = Ffind_file_name_handler (absname, Qset_file_times); if (!NILP (handler)) return call3 (handler, Qset_file_times, absname, time); encoded_absname = ENCODE_FILE (absname); { EMACS_TIME t; EMACS_SET_SECS (t, sec); EMACS_SET_USECS (t, usec); if (set_file_times (SDATA (encoded_absname), t, t)) { #ifdef DOS_NT struct stat st; /* Setting times on a directory always fails. */ if (stat (SDATA (encoded_absname), &st) == 0 && (st.st_mode & S_IFMT) == S_IFDIR) return Qnil; #endif report_file_error ("Setting file times", Fcons (absname, Qnil)); return Qnil; } } return Qt; } \f #ifdef __NetBSD__ #define unix 42 @@ -6339,6 +6392,7 @@ Qfile_accessible_directory_p = intern ("file-accessible-directory-p"); Qfile_modes = intern ("file-modes"); Qset_file_modes = intern ("set-file-modes"); Qset_file_times = intern ("set-file-times"); Qfile_newer_than_file_p = intern ("file-newer-than-file-p"); Qinsert_file_contents = intern ("insert-file-contents"); Qwrite_region = intern ("write-region"); @@ -6372,6 +6426,7 @@ staticpro (&Qfile_accessible_directory_p); staticpro (&Qfile_modes); staticpro (&Qset_file_modes); staticpro (&Qset_file_times); staticpro (&Qfile_newer_than_file_p); staticpro (&Qinsert_file_contents); staticpro (&Qwrite_region); @@ -6595,6 +6650,7 @@ defsubr (&Sfile_regular_p); defsubr (&Sfile_modes); defsubr (&Sset_file_modes); defsubr (&Sset_file_times); defsubr (&Sset_default_file_modes); defsubr (&Sdefault_file_modes); defsubr (&Sfile_newer_than_file_p); ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-24 21:59 ` dired-do-touch Matthew Mundell @ 2004-03-25 7:10 ` Eli Zaretskii 0 siblings, 0 replies; 62+ messages in thread From: Eli Zaretskii @ 2004-03-25 7:10 UTC (permalink / raw) Cc: emacs-devel, storm > From: Matthew Mundell <matt@mundell.ukfsn.org> > Date: 24 Mar 2004 21:59:50 +0000 > > Silently ignoring the error for directories on those systems sounds > like the right approach. Here is the primitive. Does the change look > OK? It needs to be tried on those systems. The change looks okay, although I didn't have an opportunity to test it yet. I think it can go in; later, if there are problems on non-Posix platforms, someone will fix them. Thanks! ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-24 7:11 ` dired-do-touch Eli Zaretskii 2004-03-24 10:57 ` dired-do-touch Kim F. Storm @ 2004-03-24 20:57 ` Matthew Mundell 1 sibling, 0 replies; 62+ messages in thread From: Matthew Mundell @ 2004-03-24 20:57 UTC (permalink / raw) Cc: emacs-devel Eli Zaretskii <eliz@elta.co.il> writes: > > From: Matthew Mundell <matt@mundell.ukfsn.org> > > Date: 23 Mar 2004 21:48:19 +0000 > > > > > > > + if (set_file_times (SDATA (encoded_absname), t, t) < 0) > > > > > + report_file_error ("Setting file times", Fcons (absname, Qnil)); > > > > > > > > I think this will throw an error on Windows if the file is a > > > > directory. So it would be good to single out that case on DOS_NT > > > > systems. > > > > Does the version below correctly handle the case? > > I don't know, but that was not what I had in mind. Whether a > directory is or isn't writable is not an issue, to the best of my > knowledge (IIRC, Windows ignores the read-only attribute when it > handles directories, so, e.g., you can delete such a directory > regardless). > > The issue is that Windows doesn't let you modify the directory's time > stamp at all. So on DOS_NT systems we should either refrain from > trying to change the time stamp of directories at all and print > something like "Cannot set time stamp of directories on this system", > or else more-or-less silently ignore errors in this function for > directories on such systems. The second alternative is probably > slightly better, since this is a primitive function that can be called > from deep inside some complex command, where signalling an error might > disrupt the rest of processing. > > FWIW, the DOS/Windows port of the `touch' utility doesn't print any > error message if invoked on a directory, it silently fails. I had copied the use of set_file_times in the WINDOWS_NT portion of copy-file, which is also in fileio.c. I see now that copy-file only sets the time when given a prefix argument, and that the doc notes that this will only work on some systems. ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-23 21:48 ` dired-do-touch Matthew Mundell 2004-03-24 7:11 ` dired-do-touch Eli Zaretskii @ 2004-03-25 2:00 ` Richard Stallman 2004-03-26 18:31 ` dired-do-touch Matthew Mundell 1 sibling, 1 reply; 62+ messages in thread From: Richard Stallman @ 2004-03-25 2:00 UTC (permalink / raw) Cc: eliz, emacs-devel The changes in dired.el and fileio.c look ok to me. The changes in dired-aux.el were omitted. ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-25 2:00 ` dired-do-touch Richard Stallman @ 2004-03-26 18:31 ` Matthew Mundell 2004-03-28 1:36 ` dired-do-touch Richard Stallman 2004-03-28 1:36 ` dired-do-touch Richard Stallman 0 siblings, 2 replies; 62+ messages in thread From: Matthew Mundell @ 2004-03-26 18:31 UTC (permalink / raw) Cc: eliz, emacs-devel Richard Stallman <rms@gnu.org> writes: > The changes in dired.el and fileio.c look ok to me. > The changes in dired-aux.el were omitted. The changes to dired-aux.el were the same as in the original post. Here are all the changes, with change logs. Fset_file_times in fileio.c now silently ignores failures on DOS_NT systems, at Eli's suggestion, and returns t or nil, at Kim's suggestion. 2004-03-23 Matthew Mundell <matt@mundell.ukfsn.org> * fileio.c (Fset_file_times): New function. Suggested by Lars Hansen <larsh@math.ku.dk>. (Qset_file_times): New variable. (lisp_time_argument): New declaration. (syms_of_fileio): staticpro and intern new variable, defsubr new function. * editfns.c (lisp_time_argument): Provide externally. 2004-03-23 Matthew Mundell <matt@mundell.ukfsn.org> * dired-aux.el (dired-touch, dired-do-touch): New defuns. * dired.el: Bind dired-do-touch to T. =================================================================== RCS file: /cvsroot/emacs/emacs/lisp/dired-aux.el,v diff -u -r1.115 dired-aux.el --- lisp/dired-aux.el 23 Mar 2004 07:39:35 -0000 1.115 +++ lisp/dired-aux.el 26 Mar 2004 16:32:37 -0000 @@ -2139,6 +2139,29 @@ (backward-delete-char 1)) (message "%s" (buffer-string)))) +(defun dired-touch () + "Touch current file. Return file name on failure, else nil." + (let ((file (dired-get-filename)) + fail) + (condition-case err + (set-file-times file (current-time)) + (error (setq fail err))) + (if fail + (progn + (dired-log "Setting time on `%s' failed:\n%s\n" + file fail) + (dired-make-relative file))))) + +;;;###autoload +(defun dired-do-touch (&optional arg) + "Set the selected files' access and mod times to the current time. + +With non-zero prefix argument ARG, the command operates on the +next ARG files. Otherwise, it operates on all the marked files, +or the current file if none are marked." + (interactive "P") + (dired-map-over-marks-check (function dired-touch) arg 'touch nil)) + (provide 'dired-aux) ;;; arch-tag: 4b508de9-a153-423d-8d3f-a1bbd86f4f60 =================================================================== RCS file: /cvsroot/emacs/emacs/lisp/dired.el,v diff -u -r1.276 dired.el --- lisp/dired.el 25 Mar 2004 10:40:59 -0000 1.276 +++ lisp/dired.el 26 Mar 2004 16:31:59 -0000 @@ -919,6 +919,7 @@ (define-key map "Q" 'dired-do-query-replace-regexp) (define-key map "R" 'dired-do-rename) (define-key map "S" 'dired-do-symlink) + (define-key map "T" 'dired-do-touch) (define-key map "X" 'dired-do-shell-command) (define-key map "Z" 'dired-do-compress) (define-key map "!" 'dired-do-shell-command) =================================================================== RCS file: /cvsroot/emacs/emacs/src/fileio.c,v diff -u -r1.499 fileio.c --- src/fileio.c 18 Mar 2004 02:58:45 -0000 1.499 +++ src/fileio.c 26 Mar 2004 16:34:06 -0000 @@ -323,6 +323,7 @@ Lisp_Object Qfile_accessible_directory_p; Lisp_Object Qfile_modes; Lisp_Object Qset_file_modes; +Lisp_Object Qset_file_times; Lisp_Object Qfile_newer_than_file_p; Lisp_Object Qinsert_file_contents; Lisp_Object Qwrite_region; @@ -3438,7 +3439,59 @@ XSETINT (value, (~ realmask) & 0777); return value; } +\f +extern int lisp_time_argument P_ ((Lisp_Object, time_t *, int *)); + +DEFUN ("set-file-times", Fset_file_times, Sset_file_times, 1, 2, 0, + doc: /* Set times of file FILENAME to TIME. +Set both access and modification times. +Return t on success, else nil. +Use the current time if TIME is nil. TIME is in the format of +`current-time'. */) + (filename, time) + Lisp_Object filename, time; +{ + Lisp_Object absname, encoded_absname; + Lisp_Object handler; + time_t sec; + int usec; + + if (! lisp_time_argument (time, &sec, &usec)) + error ("Invalid time specification"); + + absname = Fexpand_file_name (filename, current_buffer->directory); + + /* If the file name has special constructs in it, + call the corresponding file handler. */ + handler = Ffind_file_name_handler (absname, Qset_file_times); + if (!NILP (handler)) + return call3 (handler, Qset_file_times, absname, time); + + encoded_absname = ENCODE_FILE (absname); + + { + EMACS_TIME t; + + EMACS_SET_SECS (t, sec); + EMACS_SET_USECS (t, usec); + + if (set_file_times (SDATA (encoded_absname), t, t)) + { +#ifdef DOS_NT + struct stat st; + /* Setting times on a directory always fails. */ + if (stat (SDATA (encoded_absname), &st) == 0 + && (st.st_mode & S_IFMT) == S_IFDIR) + return Qnil; +#endif + report_file_error ("Setting file times", Fcons (absname, Qnil)); + return Qnil; + } + } + + return Qt; +} \f #ifdef __NetBSD__ #define unix 42 @@ -6339,6 +6392,7 @@ Qfile_accessible_directory_p = intern ("file-accessible-directory-p"); Qfile_modes = intern ("file-modes"); Qset_file_modes = intern ("set-file-modes"); + Qset_file_times = intern ("set-file-times"); Qfile_newer_than_file_p = intern ("file-newer-than-file-p"); Qinsert_file_contents = intern ("insert-file-contents"); Qwrite_region = intern ("write-region"); @@ -6372,6 +6426,7 @@ staticpro (&Qfile_accessible_directory_p); staticpro (&Qfile_modes); staticpro (&Qset_file_modes); + staticpro (&Qset_file_times); staticpro (&Qfile_newer_than_file_p); staticpro (&Qinsert_file_contents); staticpro (&Qwrite_region); @@ -6595,6 +6650,7 @@ defsubr (&Sfile_regular_p); defsubr (&Sfile_modes); defsubr (&Sset_file_modes); + defsubr (&Sset_file_times); defsubr (&Sset_default_file_modes); defsubr (&Sdefault_file_modes); defsubr (&Sfile_newer_than_file_p); ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-26 18:31 ` dired-do-touch Matthew Mundell @ 2004-03-28 1:36 ` Richard Stallman 2004-03-28 1:36 ` dired-do-touch Richard Stallman 1 sibling, 0 replies; 62+ messages in thread From: Richard Stallman @ 2004-03-28 1:36 UTC (permalink / raw) Cc: eliz, emacs-devel The changes to dired-aux.el were the same as in the original post. Because I am so terribly busy, I'd appreciate it if you would spare me the need to do things like search for a previous post. ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-26 18:31 ` dired-do-touch Matthew Mundell 2004-03-28 1:36 ` dired-do-touch Richard Stallman @ 2004-03-28 1:36 ` Richard Stallman 1 sibling, 0 replies; 62+ messages in thread From: Richard Stallman @ 2004-03-28 1:36 UTC (permalink / raw) Cc: eliz, emacs-devel This change looks ok. We have to wait for your legal papers to be filed. ^ permalink raw reply [flat|nested] 62+ messages in thread
* dired-do-touch @ 2004-03-20 19:05 Matthew Mundell 2004-03-21 13:31 ` dired-do-touch Ehud Karni ` (3 more replies) 0 siblings, 4 replies; 62+ messages in thread From: Matthew Mundell @ 2004-03-20 19:05 UTC (permalink / raw) In Dired "T" could touch the current file with the touch shell command. 2004-02-08 Matthew Mundell <matt@mundell.ukfsn.org> * dired-aux.el (dired-do-touch): New defun. * dired.el: Bind dired-do-touch to T. =================================================================== RCS file: /cvsroot/emacs/emacs/lisp/dired.el,v retrieving revision 1.272 diff -u -r1.272 dired.el --- lisp/dired.el 3 Feb 2004 16:55:30 -0000 1.272 +++ lisp/dired.el 20 Mar 2004 14:04:27 -0000 @@ -895,6 +895,7 @@ (define-key map "Q" 'dired-do-query-replace-regexp) (define-key map "R" 'dired-do-rename) (define-key map "S" 'dired-do-symlink) + (define-key map "T" 'dired-do-touch) (define-key map "X" 'dired-do-shell-command) (define-key map "Z" 'dired-do-compress) (define-key map "!" 'dired-do-shell-command) =================================================================== RCS file: /cvsroot/emacs/emacs/lisp/dired-aux.el,v retrieving revision 1.114 diff -u -r1.114 dired-aux.el --- lisp/dired-aux.el 8 Feb 2004 22:38:51 -0000 1.114 +++ lisp/dired-aux.el 20 Mar 2004 15:15:26 -0000 @@ -2135,6 +2135,17 @@ (backward-delete-char 1)) (message "%s" (buffer-string)))) +;;;###autoload +(defun dired-do-touch (file) + "Touch the current file with the `touch' program." + (interactive (list (dired-get-filename t))) + (with-temp-buffer + (call-process "touch" nil t t "--" file) + (unless (bobp) + (when (bolp) + (backward-delete-char 1)) + (message "%s" (buffer-string))))) + (provide 'dired-aux) ;;; arch-tag: 4b508de9-a153-423d-8d3f-a1bbd86f4f60 ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-20 19:05 dired-do-touch Matthew Mundell @ 2004-03-21 13:31 ` Ehud Karni 2004-03-21 18:27 ` dired-do-touch Eli Zaretskii 2004-03-21 16:50 ` dired-do-touch Eli Zaretskii ` (2 subsequent siblings) 3 siblings, 1 reply; 62+ messages in thread From: Ehud Karni @ 2004-03-21 13:31 UTC (permalink / raw) Cc: emacs-devel -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On 20 Mar 2004 19:05:40 +0000, Matthew Mundell <matt@mundell.ukfsn.org> wrote: > > In Dired "T" could touch the current file with the touch shell > command. > > +(defun dired-do-touch (file) > + "Touch the current file with the `touch' program." > + (interactive (list (dired-get-filename t))) > + (with-temp-buffer > + (call-process "touch" nil t t "--" file) > + (unless (bobp) > + (when (bolp) > + (backward-delete-char 1)) > + (message "%s" (buffer-string))))) I think it is better to define `dired-do-touch' like the other file modifying functions in dired-aux (a'la `dired-do-chown/grp/mod').' Here is my version: (defun dired-do-touch (&optional arg) "touch the marked (or next ARG) files." (interactive "P") (dired-do-chxxx (concat "date & TIME (" (if (eq 'w32 window-system) "MMDDhhmm[[CC][YY][.ss])" ;; Windows NT/95 system (20.x) "[[CC][YY]MMDDhhmm.[ss])")) ;; UNIX dired-touch-program 'touch arg)) (defvar dired-touch-program (cond ((eq system-type 'ms-dos) nil) ; nil for dos! ((eq system-type 'windows-nt) "touch") ; use Cygwin32 touch (t "touch-t")) ; UNIX - script "Name of touch command (usually `touch').") The "touch-t" script is simply "touch -t" . Ehud. - -- Ehud Karni Tel: +972-3-7966-561 /"\ Mivtach - Simon Fax: +972-3-7966-667 \ / ASCII Ribbon Campaign Insurance agencies (USA) voice mail and X Against HTML Mail http://www.mvs.co.il FAX: 1-815-5509341 / \ GnuPG: 98EA398D <http://www.keyserver.net/> Better Safe Than Sorry -----BEGIN PGP SIGNATURE----- Comment: use http://www.keyserver.net/ to get my key (and others) iD8DBQFAXZkiLFvTvpjqOY0RAqTjAJ9ovu0d85vdMLF6cFvCJOI2LT4SLQCghrLr j6lYQyTTTxi1qS3t66aKTjM= =LOq+ -----END PGP SIGNATURE----- ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-21 13:31 ` dired-do-touch Ehud Karni @ 2004-03-21 18:27 ` Eli Zaretskii 0 siblings, 0 replies; 62+ messages in thread From: Eli Zaretskii @ 2004-03-21 18:27 UTC (permalink / raw) Cc: matt, emacs-devel > Date: Sun, 21 Mar 2004 15:31:14 +0200 > From: "Ehud Karni" <ehud@unix.mvs.co.il> > > (dired-do-chxxx (concat > "date & TIME (" > (if (eq 'w32 window-system) It is IMHO fundamentally wrong to test window-system here, since the same behavior would be expected from "emacs -nw" running on Windows. I think you want to look at system-type. > "MMDDhhmm[[CC][YY][.ss])" ;; Windows NT/95 system (20.x) > "[[CC][YY]MMDDhhmm.[ss])")) ;; UNIX Why the difference between Windows and Unix? Doesn't the ported `touch' accept on Windows the same format as on Unix and GNU systems? > (defvar dired-touch-program > (cond > ((eq system-type 'ms-dos) nil) ; nil for dos! Why? A ported `touch' (as part of GNU Fileutils) is available on MS-DOS. ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-20 19:05 dired-do-touch Matthew Mundell 2004-03-21 13:31 ` dired-do-touch Ehud Karni @ 2004-03-21 16:50 ` Eli Zaretskii 2004-03-21 19:21 ` dired-do-touch Richard Stallman 2004-03-25 14:54 ` dired-do-touch Juri Linkov 3 siblings, 0 replies; 62+ messages in thread From: Eli Zaretskii @ 2004-03-21 16:50 UTC (permalink / raw) Cc: emacs-devel > From: Matthew Mundell <matt@mundell.ukfsn.org> > Date: 20 Mar 2004 19:05:40 +0000 > > In Dired "T" could touch the current file with the touch shell > command. Thanks. I wonder: wouldn't it be better to have an Emacs primitive to do this, instead of invoking an external program? For starters, it will then work on any platform, including those where `touch' is not a standard part of the OS. ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-20 19:05 dired-do-touch Matthew Mundell 2004-03-21 13:31 ` dired-do-touch Ehud Karni 2004-03-21 16:50 ` dired-do-touch Eli Zaretskii @ 2004-03-21 19:21 ` Richard Stallman 2004-03-25 14:54 ` dired-do-touch Juri Linkov 3 siblings, 0 replies; 62+ messages in thread From: Richard Stallman @ 2004-03-21 19:21 UTC (permalink / raw) Cc: emacs-devel Capital letter Dired commands are supposed to operate on all the marked files. It would be a bad idea to introduce a command which doesn't follow that convention. ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-20 19:05 dired-do-touch Matthew Mundell ` (2 preceding siblings ...) 2004-03-21 19:21 ` dired-do-touch Richard Stallman @ 2004-03-25 14:54 ` Juri Linkov 2004-03-25 21:07 ` dired-do-touch Juri Linkov 2004-03-27 5:52 ` dired-do-touch Richard Stallman 3 siblings, 2 replies; 62+ messages in thread From: Juri Linkov @ 2004-03-25 14:54 UTC (permalink / raw) Cc: emacs-devel I am very happy with the following patch. So if you want to use primitive functions instead of external programs, please make them possible to co-exist with useful features I implemented below: the default input string guessing for chmod, chown, chgrp and touch. And if you want to achieve independence of external programs then other commands should be changed to use primitives too: dired-do-chmod, dired-do-chown, dired-do-chgrp. Index: emacs/lisp/dired.el =================================================================== RCS file: /cvsroot/emacs/emacs/lisp/dired.el,v retrieving revision 1.276 diff -c -r1.276 dired.el *** emacs/lisp/dired.el 25 Mar 2004 10:40:59 -0000 1.276 --- emacs/lisp/dired.el 25 Mar 2004 14:30:37 -0000 *************** *** 79,84 **** --- 79,87 ---- (defvar dired-chmod-program "chmod" "Name of chmod command (usually `chmod').") + (defvar dired-touch-program "touch" + "Name of touch command (usually `touch').") + ;;;###autoload (defcustom dired-ls-F-marks-symlinks nil "*Informs dired about how `ls -lF' marks symbolic links. *************** *** 919,924 **** --- 922,928 ---- (define-key map "Q" 'dired-do-query-replace-regexp) (define-key map "R" 'dired-do-rename) (define-key map "S" 'dired-do-symlink) + (define-key map "T" 'dired-do-touch) (define-key map "X" 'dired-do-shell-command) (define-key map "Z" 'dired-do-compress) (define-key map "!" 'dired-do-shell-command) *************** *** 1189,1194 **** --- 1193,1201 ---- (define-key map [menu-bar operate chmod] '(menu-item "Change Mode..." dired-do-chmod :help "Change mode (attributes) of marked files")) + (define-key map [menu-bar operate touch] + '(menu-item "Change Timestamp..." dired-do-touch + :help "Change timestamp of marked files")) (define-key map [menu-bar operate load] '(menu-item "Load" dired-do-load :help "Load marked Emacs Lisp files")) *************** *** 2338,2345 **** (defvar dired-no-confirm nil "A list of symbols for commands dired should not confirm. Command symbols are `byte-compile', `chgrp', `chmod', `chown', `compress', ! `copy', `delete', `hardlink', `load', `move', `print', `shell', `symlink' and ! `uncompress'.") (defun dired-mark-pop-up (bufname op-symbol files function &rest args) "Return FUNCTION's result on ARGS after showing which files are marked. --- 2345,2352 ---- (defvar dired-no-confirm nil "A list of symbols for commands dired should not confirm. Command symbols are `byte-compile', `chgrp', `chmod', `chown', `compress', ! `copy', `delete', `hardlink', `load', `move', `print', `shell', `symlink', ! `touch' and `uncompress'.") (defun dired-mark-pop-up (bufname op-symbol files function &rest args) "Return FUNCTION's result on ARGS after showing which files are marked. *************** *** 2980,2985 **** --- 2987,2996 ---- (autoload 'dired-do-chown "dired-aux" "Change the owner of the marked (or next ARG) files." + t) + + (autoload 'dired-do-touch "dired-aux" + "Change the timestamp of the marked (or next ARG) files." t) (autoload 'dired-do-print "dired-aux" Index: emacs/lisp/dired-aux.el =================================================================== RCS file: /cvsroot/emacs/emacs/lisp/dired-aux.el,v retrieving revision 1.115 diff -c -r1.115 dired-aux.el *** emacs/lisp/dired-aux.el 23 Mar 2004 07:39:35 -0000 1.115 --- emacs/lisp/dired-aux.el 25 Mar 2004 14:30:38 -0000 *************** *** 185,209 **** (file-attributes full-file-name)))) (directory-files dir))) \f (defun dired-do-chxxx (attribute-name program op-symbol arg) ! ;; Change file attributes (mode, group, owner) 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: ") ! nil op-symbol arg files)) (operation (concat program " " new-attribute)) failures) (setq failures (dired-bunch-files 10000 (function dired-check-process) (append ! (list operation program new-attribute) (if (string-match "gnu" system-configuration) '("--") nil)) files)) --- 185,270 ---- (file-attributes full-file-name)))) (directory-files dir))) \f + (defvar dired-show-initial t + "Show initial value for chmod, chown, chgrp, touch.") + + (defun dired-create-initial (op-symbol files) + (cond ((eq op-symbol 'chmod) + (dired-create-initial-chmod files)) + ((eq op-symbol 'chown) + (dired-create-initial-chown files)) + ((eq op-symbol 'chgrp) + (dired-create-initial-chgrp files)) + ((eq op-symbol 'touch) + (dired-create-initial-touch files)))) + + (defun dired-create-initial-chmod (files) + "Create initial input value for `chmod' command." + (let (initial) + (while files + (let ((current (file-modes (car files)))) + (if (and initial (not (equal initial current))) + (setq initial (default-file-modes) files nil) + (setq initial current)) + (setq files (cdr files)))) + (format "%o" initial))) + + (defun dired-create-initial-chown (files) + "Create initial input value for `chown' command." + (let (initial) + (while files + (let ((current (nth 2 (file-attributes (car files) 'string)))) + (if (and initial (not (equal initial current))) + (setq initial user-login-name files nil) + (setq initial current)) + (setq files (cdr files)))) + initial)) + + (defun dired-create-initial-chgrp (files) + "Create initial input value for `chgrp' command." + (let (initial) + (while files + (let ((current (nth 3 (file-attributes (car files) 'string)))) + (if (and initial (not (equal initial current))) + (setq initial user-login-name files nil) + (setq initial current)) + (setq files (cdr files)))) + initial)) + + (defun dired-create-initial-touch (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)) + (initial (if dired-show-initial (dired-create-initial op-symbol files))) (new-attribute (dired-mark-read-string (concat "Change " attribute-name " of %s to: ") ! initial op-symbol arg files)) (operation (concat program " " new-attribute)) failures) (setq failures (dired-bunch-files 10000 (function dired-check-process) (append ! (list operation program) ! (if (eq op-symbol 'touch) ! '("-t") nil) ! (list new-attribute) (if (string-match "gnu" system-configuration) '("--") nil)) files)) *************** *** 235,240 **** --- 296,307 ---- (if (memq system-type '(ms-dos windows-nt)) (error "chown not supported on this system")) (dired-do-chxxx "Owner" dired-chown-program 'chown arg)) + + (defun dired-do-touch (&optional arg) + "Change the timestamp of the marked (or next ARG) files. + This calls touch." + (interactive "P") + (dired-do-chxxx "Timestamp" dired-touch-program 'touch arg)) ;; Process all the files in FILES in batches of a convenient size, ;; by means of (FUNCALL FUNCTION ARGS... SOME-FILES...). -- Juri Linkov http://www.jurta.org/emacs/ ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-25 14:54 ` dired-do-touch Juri Linkov @ 2004-03-25 21:07 ` Juri Linkov 2004-03-27 5:52 ` dired-do-touch Richard Stallman 1 sibling, 0 replies; 62+ messages in thread From: Juri Linkov @ 2004-03-25 21:07 UTC (permalink / raw) Juri Linkov <juri@jurta.org> writes: > I am very happy with the following patch. And I am happy with the following patch as well (it should be applied with the patch I posted in the previous mail). This patch adds guessing the default target directory for dired-diff. If there is no mark in the current dired buffer, then it takes the target directory name from the next window using `dired-dwim-target-directory'. Another feature is that if no files are marked in the current dired buffer (i.e. dired operates on the file under point) then when reading the target file name it uses the current file name as the initial input string for C, R and some other dired commands. This is especially useful when renaming files: the prompt places the name of the current file as the basis for file name editing. Index: emacs/lisp/dired-aux.el =================================================================== RCS file: /cvsroot/emacs/emacs/lisp/dired-aux.el,v retrieving revision 1.115 diff -c -r1.115 dired-aux.el *** emacs/lisp/dired-aux.el 23 Mar 2004 07:39:35 -0000 1.115 --- emacs/lisp/dired-aux.el 25 Mar 2004 17:10:33 -0000 *************** *** 64,70 **** (if default (concat "(default " default ") ") "")) ! (dired-current-directory) default t) (if current-prefix-arg (read-string "Options for diff: " (if (stringp diff-switches) --- 64,72 ---- (if default (concat "(default " default ") ") "")) ! (if default ! (dired-current-directory) ! (dired-dwim-target-directory)) default t) (if current-prefix-arg (read-string "Options for diff: " (if (stringp diff-switches) *************** *** 1402,1408 **** (dired-mark-pop-up nil op-symbol files (function read-file-name) ! (format prompt (dired-mark-prompt arg files)) dir default)) (defun dired-dwim-target-directory () ;; Try to guess which target directory the user may want. --- 1472,1483 ---- (dired-mark-pop-up nil op-symbol files (function read-file-name) ! (format prompt (dired-mark-prompt arg files)) dir default nil ! (if (and dired-show-initial ! (and (consp files) (null (cdr files)) (car files)) ! (equal (dired-dwim-target-directory) ! (dired-current-directory))) ! (car files)))) (defun dired-dwim-target-directory () ;; Try to guess which target directory the user may want. -- Juri Linkov http://www.jurta.org/emacs/ ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-25 14:54 ` dired-do-touch Juri Linkov 2004-03-25 21:07 ` dired-do-touch Juri Linkov @ 2004-03-27 5:52 ` Richard Stallman 2004-03-27 10:59 ` dired-do-touch Juri Linkov 1 sibling, 1 reply; 62+ messages in thread From: Richard Stallman @ 2004-03-27 5:52 UTC (permalink / raw) Cc: matt, emacs-devel When we are discussing one new feature, please do not add a second feature into the same patch. That is an obstacle to considering it. Would you please send *only* the new T command, with nothing else? Then maybe we can install it. Please include the ChangeLog entries and an entry for etc/NEWS. After that we could consider the other change. ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-27 5:52 ` dired-do-touch Richard Stallman @ 2004-03-27 10:59 ` Juri Linkov 2004-03-27 12:17 ` dired-do-touch Eli Zaretskii 2004-03-28 4:25 ` dired-do-touch Richard Stallman 0 siblings, 2 replies; 62+ messages in thread From: Juri Linkov @ 2004-03-27 10:59 UTC (permalink / raw) Cc: matt, emacs-devel Richard Stallman <rms@gnu.org> writes: > When we are discussing one new feature, please do not add a second > feature into the same patch. That is an obstacle to considering it. > > Would you please send *only* the new T command, with nothing else? > Then maybe we can install it. Please include the ChangeLog entries > and an entry for etc/NEWS. > > After that we could consider the other change. Below is the patch for the new T command. It uses the external touch program and behaves like other dired commands `chmod', `chgrp' and `chown'. I suggest to install this patch first. Then I suggest to consider and install the patch that allows the initial default values for dired-do-touch, dired-do-chmod, dired-do-chgrp, dired-do-chown and some other dired commands. And after this I suggest to install the patch posted by Matthew Mundell that uses the new function `set-file-times', with small modifications which will allow to use it instead of the external program in cases when there is no touch program installed or depending on a new user option. lisp/ChangeLog: * dired.el (dired-touch-program): New var. (dired-mode-map): Bind `dired-do-touch' to `T' and add menu-item. (dired-no-confirm): Add `touch' to docstring. (dired-do-touch): Add autoload for `dired-do-touch'. * dired-aux.el (dired-do-touch): New fun. (dired-do-chxxx): Add argument `-t' for touch operation. An entry for etc/NEWS could be written later to describe all the related changes. Index: emacs/lisp/dired.el =================================================================== RCS file: /cvsroot/emacs/emacs/lisp/dired.el,v retrieving revision 1.278 diff -c -r1.278 dired.el *** emacs/lisp/dired.el 27 Mar 2004 01:16:58 -0000 1.278 --- emacs/lisp/dired.el 27 Mar 2004 10:10:01 -0000 *************** *** 79,84 **** --- 79,87 ---- (defvar dired-chmod-program "chmod" "Name of chmod command (usually `chmod').") + (defvar dired-touch-program "touch" + "Name of touch command (usually `touch').") + ;;;###autoload (defcustom dired-ls-F-marks-symlinks nil "*Informs dired about how `ls -lF' marks symbolic links. *************** *** 919,924 **** --- 922,928 ---- (define-key map "Q" 'dired-do-query-replace-regexp) (define-key map "R" 'dired-do-rename) (define-key map "S" 'dired-do-symlink) + (define-key map "T" 'dired-do-touch) (define-key map "X" 'dired-do-shell-command) (define-key map "Z" 'dired-do-compress) (define-key map "!" 'dired-do-shell-command) *************** *** 1189,1194 **** --- 1193,1201 ---- (define-key map [menu-bar operate chmod] '(menu-item "Change Mode..." dired-do-chmod :help "Change mode (attributes) of marked files")) + (define-key map [menu-bar operate touch] + '(menu-item "Change Timestamp..." dired-do-touch + :help "Change timestamp of marked files")) (define-key map [menu-bar operate load] '(menu-item "Load" dired-do-load :help "Load marked Emacs Lisp files")) *************** *** 2333,2340 **** (defvar dired-no-confirm nil "A list of symbols for commands dired should not confirm. Command symbols are `byte-compile', `chgrp', `chmod', `chown', `compress', ! `copy', `delete', `hardlink', `load', `move', `print', `shell', `symlink' and ! `uncompress'.") (defun dired-mark-pop-up (bufname op-symbol files function &rest args) "Return FUNCTION's result on ARGS after showing which files are marked. --- 2340,2347 ---- (defvar dired-no-confirm nil "A list of symbols for commands dired should not confirm. Command symbols are `byte-compile', `chgrp', `chmod', `chown', `compress', ! `copy', `delete', `hardlink', `load', `move', `print', `shell', `symlink', ! `touch' and `uncompress'.") (defun dired-mark-pop-up (bufname op-symbol files function &rest args) "Return FUNCTION's result on ARGS after showing which files are marked. *************** *** 2975,2980 **** --- 2982,2991 ---- (autoload 'dired-do-chown "dired-aux" "Change the owner of the marked (or next ARG) files." + t) + + (autoload 'dired-do-touch "dired-aux" + "Change the timestamp of the marked (or next ARG) files." t) (autoload 'dired-do-print "dired-aux" Index: emacs/lisp/dired-aux.el =================================================================== RCS file: /cvsroot/emacs/emacs/lisp/dired-aux.el,v retrieving revision 1.115 diff -c -r1.115 dired-aux.el *** emacs/lisp/dired-aux.el 23 Mar 2004 07:39:35 -0000 1.115 --- emacs/lisp/dired-aux.el 27 Mar 2004 10:10:02 -0000 *************** *** 186,192 **** (directory-files dir))) \f (defun dired-do-chxxx (attribute-name program op-symbol arg) ! ;; Change file attributes (mode, group, owner) 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. --- 186,192 ---- (directory-files dir))) \f (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. *************** *** 203,209 **** (dired-bunch-files 10000 (function dired-check-process) (append ! (list operation program new-attribute) (if (string-match "gnu" system-configuration) '("--") nil)) files)) --- 203,212 ---- (dired-bunch-files 10000 (function dired-check-process) (append ! (list operation program) ! (if (eq op-symbol 'touch) ! '("-t") nil) ! (list new-attribute) (if (string-match "gnu" system-configuration) '("--") nil)) files)) *************** *** 235,240 **** --- 238,249 ---- (if (memq system-type '(ms-dos windows-nt)) (error "chown not supported on this system")) (dired-do-chxxx "Owner" dired-chown-program 'chown arg)) + + (defun dired-do-touch (&optional arg) + "Change the timestamp of the marked (or next ARG) files. + This calls touch." + (interactive "P") + (dired-do-chxxx "Timestamp" dired-touch-program 'touch arg)) ;; Process all the files in FILES in batches of a convenient size, ;; by means of (FUNCALL FUNCTION ARGS... SOME-FILES...). -- Juri Linkov http://www.jurta.org/emacs/ ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-27 10:59 ` dired-do-touch Juri Linkov @ 2004-03-27 12:17 ` Eli Zaretskii 2004-03-27 13:06 ` dired-do-touch Juri Linkov 2004-03-27 16:09 ` dired-do-touch Matthew Mundell 2004-03-28 4:25 ` dired-do-touch Richard Stallman 1 sibling, 2 replies; 62+ messages in thread From: Eli Zaretskii @ 2004-03-27 12:17 UTC (permalink / raw) Cc: matt, rms, emacs-devel > From: Juri Linkov <juri@jurta.org> > Date: Sat, 27 Mar 2004 12:59:21 +0200 > > Below is the patch for the new T command. It uses the external touch > program and behaves like other dired commands `chmod', `chgrp' and `chown'. > > I suggest to install this patch first. Then I suggest to consider and > install the patch that allows the initial default values for > dired-do-touch, dired-do-chmod, dired-do-chgrp, dired-do-chown and > some other dired commands. > > And after this I suggest to install the patch posted by Matthew Mundell > that uses the new function `set-file-times', with small modifications > which will allow to use it instead of the external program in cases > when there is no touch program installed or depending on a new user option. I don't understand why you insist on using an external program if Emacs could easily have a primitive to do the same. I think using an Emacs primitive is faster, in addition to being more portable. The patch to add set-file-times is already reviewed by at least 2 Emacs maintainers, and is IMHO ready for being checked in. ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-27 12:17 ` dired-do-touch Eli Zaretskii @ 2004-03-27 13:06 ` Juri Linkov 2004-03-27 16:13 ` dired-do-touch Matthew Mundell 2004-03-27 16:09 ` dired-do-touch Matthew Mundell 1 sibling, 1 reply; 62+ messages in thread From: Juri Linkov @ 2004-03-27 13:06 UTC (permalink / raw) Cc: matt, rms, emacs-devel "Eli Zaretskii" <eliz@gnu.org> writes: > I don't understand why you insist on using an external program if > Emacs could easily have a primitive to do the same. I think using an > Emacs primitive is faster, in addition to being more portable. I don't see a reason why changing file time should differ from operations changing other file attributes like mode, owner and group. I don't insist on using external programs. If Emacs primitives are faster, then other dired commands for changing other file attributes should be modified to use Emacs primitives too. > The patch to add set-file-times is already reviewed by at least 2 > Emacs maintainers, and is IMHO ready for being checked in. It don't allow to change file times to values other than current time. -- Juri Linkov http://www.jurta.org/emacs/ ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-27 13:06 ` dired-do-touch Juri Linkov @ 2004-03-27 16:13 ` Matthew Mundell 2004-03-27 17:52 ` dired-do-touch Juri Linkov 0 siblings, 1 reply; 62+ messages in thread From: Matthew Mundell @ 2004-03-27 16:13 UTC (permalink / raw) Cc: Eli Zaretskii, rms, emacs-devel Juri Linkov <juri@jurta.org> writes: > "Eli Zaretskii" <eliz@gnu.org> writes: > > I don't understand why you insist on using an external program if > > Emacs could easily have a primitive to do the same. I think using an > > Emacs primitive is faster, in addition to being more portable. > > I don't see a reason why changing file time should differ from > operations changing other file attributes like mode, owner and > group. So you're suggesting to use an external program until a date can be entered with the version of dired-do-touch which uses a primitive? It sounds like a good idea. The set-file-times primitive can still be installed. > I don't insist on using external programs. If Emacs primitives are > faster, then other dired commands for changing other file attributes > should be modified to use Emacs primitives too. > > > The patch to add set-file-times is already reviewed by at least 2 > > Emacs maintainers, and is IMHO ready for being checked in. > > It don't allow to change file times to values other than current time. The primitive allows any time to be set. However, the dired-do-time patch which uses the primitive always uses the current time. For this to accept an arbitrary time it needs to parse the time from a user-supplied string. Is there a Lisp function which does this? ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-27 16:13 ` dired-do-touch Matthew Mundell @ 2004-03-27 17:52 ` Juri Linkov 2004-03-28 19:59 ` dired-do-touch Matthew Mundell 0 siblings, 1 reply; 62+ messages in thread From: Juri Linkov @ 2004-03-27 17:52 UTC (permalink / raw) Cc: Eli Zaretskii, rms, emacs-devel Matthew Mundell <matt@mundell.ukfsn.org> writes: > Juri Linkov <juri@jurta.org> writes: >> I don't see a reason why changing file time should differ from >> operations changing other file attributes like mode, owner and >> group. > > So you're suggesting to use an external program until a date can be > entered with the version of dired-do-touch which uses a primitive? It > sounds like a good idea. Yes. Since Richard asked to consider one feature at a time, I think the most natural order would be the following: 1. Add the touch dired command that works like other dired commands which change file attributes: chmod, chown, chgrp; 2a. Add a feature that guesses the initial input for these dired commands; 2b. Rewrite these dired commands to use Emacs primitives. (2a and 2b are in no particular order) > The set-file-times primitive can still be installed. I agree that the set-file-times primitive can be installed now, and later it can be used in the dired touch command. And generally this primitive may become necessary for other Lisp programs too. >> It don't allow to change file times to values other than current time. > > The primitive allows any time to be set. However, the dired-do-time > patch which uses the primitive always uses the current time. For this > to accept an arbitrary time it needs to parse the time from a > user-supplied string. Is there a Lisp function which does this? There is the function `date-to-time' which parses a time string. But it should be improved to accept the format of the touch program. -- Juri Linkov http://www.jurta.org/emacs/ ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-27 17:52 ` dired-do-touch Juri Linkov @ 2004-03-28 19:59 ` Matthew Mundell 2004-03-29 6:59 ` dired-do-touch Eli Zaretskii 2004-03-29 19:27 ` dired-do-touch Juri Linkov 0 siblings, 2 replies; 62+ messages in thread From: Matthew Mundell @ 2004-03-28 19:59 UTC (permalink / raw) Cc: Eli Zaretskii, rms, emacs-devel Juri Linkov <juri@jurta.org> writes: > Matthew Mundell <matt@mundell.ukfsn.org> writes: > > Juri Linkov <juri@jurta.org> writes: > >> I don't see a reason why changing file time should differ from > >> operations changing other file attributes like mode, owner and > >> group. > > > > So you're suggesting to use an external program until a date can be > > entered with the version of dired-do-touch which uses a primitive? It > > sounds like a good idea. > > Yes. Since Richard asked to consider one feature at a time, > I think the most natural order would be the following: > > 1. Add the touch dired command that works like other dired commands > which change file attributes: chmod, chown, chgrp; > 2a. Add a feature that guesses the initial input for these > dired commands; > 2b. Rewrite these dired commands to use Emacs primitives. There's the set-file-modes primitive for changing modes. Are there equivalent primitives for changing owner and group? If the commands are going to be rewritten soon to use primitives then perhaps step 1 can be skipped. > > (2a and 2b are in no particular order) > > > The set-file-times primitive can still be installed. > > I agree that the set-file-times primitive can be installed now, > and later it can be used in the dired touch command. And generally > this primitive may become necessary for other Lisp programs too. Earlier in the thread Lars Hansen suggested adding such a primitive, for use in Tramp. > >> It don't allow to change file times to values other than current time. > > > > The primitive allows any time to be set. However, the dired-do-time > > patch which uses the primitive always uses the current time. For this > > to accept an arbitrary time it needs to parse the time from a > > user-supplied string. Is there a Lisp function which does this? > > There is the function `date-to-time' which parses a time string. > But it should be improved to accept the format of the touch program. Thanks, I missed it. ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-28 19:59 ` dired-do-touch Matthew Mundell @ 2004-03-29 6:59 ` Eli Zaretskii 2004-03-29 19:15 ` dired-do-touch Juri Linkov 2004-03-29 19:27 ` dired-do-touch Juri Linkov 1 sibling, 1 reply; 62+ messages in thread From: Eli Zaretskii @ 2004-03-29 6:59 UTC (permalink / raw) Cc: juri, rms, emacs-devel > From: Matthew Mundell <matt@mundell.ukfsn.org> > Date: 28 Mar 2004 20:59:13 +0100 > > There's the set-file-modes primitive for changing modes. Are there > equivalent primitives for changing owner and group? I don't think so. FWIW, I think we should add them. > > There is the function `date-to-time' which parses a time string. > > But it should be improved to accept the format of the touch program. > > Thanks, I missed it. IMHO, we don't _have_ to emulate the `touch' program's date/time format. The format of the arguments that `touch' accepts is a result of a certain user-interface design that is appropriate for a command-line utility. Emacs could in principle present an entirely different UI, since it is not a command-line app. We just need to support the same _functionality_, but not necessarily the same _format_. ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-29 6:59 ` dired-do-touch Eli Zaretskii @ 2004-03-29 19:15 ` Juri Linkov 2004-03-29 22:24 ` dired-do-touch Andreas Schwab ` (2 more replies) 0 siblings, 3 replies; 62+ messages in thread From: Juri Linkov @ 2004-03-29 19:15 UTC (permalink / raw) Cc: Matthew Mundell, rms, emacs-devel Eli Zaretskii <eliz@elta.co.il> writes: >> There's the set-file-modes primitive for changing modes. Are there >> equivalent primitives for changing owner and group? > > I don't think so. FWIW, I think we should add them. I completely agree that we should add primitives for changing owner and group and use them in dired. Actually, I never understood why dired needs separate commands for external programs that can be easily run by `dired-do-shell-command', like e.g. by typing `! chown owner RET' on marked files. The main reason I wanted to add the touch dired command is that with an initial value for the time at its prompt (I posted a patch for this earlier) the user can edit an initial value. And of course, since dired commands for changing file attributes already exist it makes sense to use Emacs primitives for them for achieve independence from external programs. >> > There is the function `date-to-time' which parses a time string. >> > But it should be improved to accept the format of the touch program. >> >> Thanks, I missed it. > > IMHO, we don't _have_ to emulate the `touch' program's date/time > format. The format of the arguments that `touch' accepts is a result > of a certain user-interface design that is appropriate for a > command-line utility. Emacs could in principle present an entirely > different UI, since it is not a command-line app. We just need to > support the same _functionality_, but not necessarily the same > _format_. While I agree that we don't have to emulate the `touch' program format, I think that we ought to add it as one of the possible time formats accepted by the `date-to-time' and other Emacs time-parsing functions, because this format is very compact which makes it convenient for the user to enter. -- Juri Linkov http://www.jurta.org/emacs/ ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-29 19:15 ` dired-do-touch Juri Linkov @ 2004-03-29 22:24 ` Andreas Schwab 2004-03-30 6:50 ` dired-do-touch Eli Zaretskii 2004-03-30 16:18 ` dired-do-touch Matthew Mundell 2 siblings, 0 replies; 62+ messages in thread From: Andreas Schwab @ 2004-03-29 22:24 UTC (permalink / raw) Cc: Eli Zaretskii, emacs-devel, Matthew Mundell, rms Juri Linkov <juri@jurta.org> writes: > Actually, I never understood why dired needs separate commands for > external programs that can be easily run by `dired-do-shell-command', > like e.g. by typing `! chown owner RET' on marked files. Probably two reasons: convenience and automatic redisplay. Andreas. -- Andreas Schwab, SuSE Labs, schwab@suse.de SuSE Linux AG, Maxfeldstraße 5, 90409 Nürnberg, Germany Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different." ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-29 19:15 ` dired-do-touch Juri Linkov 2004-03-29 22:24 ` dired-do-touch Andreas Schwab @ 2004-03-30 6:50 ` Eli Zaretskii 2004-03-30 9:59 ` dired-do-touch Juri Linkov 2004-03-30 16:18 ` dired-do-touch Matthew Mundell 2 siblings, 1 reply; 62+ messages in thread From: Eli Zaretskii @ 2004-03-30 6:50 UTC (permalink / raw) Cc: matt, rms, emacs-devel > From: Juri Linkov <juri@jurta.org> > Date: Mon, 29 Mar 2004 22:15:19 +0300 > > > > IMHO, we don't _have_ to emulate the `touch' program's date/time > > format. The format of the arguments that `touch' accepts is a result > > of a certain user-interface design that is appropriate for a > > command-line utility. Emacs could in principle present an entirely > > different UI, since it is not a command-line app. We just need to > > support the same _functionality_, but not necessarily the same > > _format_. > > While I agree that we don't have to emulate the `touch' program > format, I think that we ought to add it as one of the possible time > formats accepted by the `date-to-time' and other Emacs time-parsing > functions, because this format is very compact which makes it > convenient for the user to enter. ``Convenient''? IMHO, you need to be a CS graduate just to understand it. Take a look at the Yacc parser summoned for the implementation of the "--date" option, or at the node in fileutils.info that documents it. Even the simpler "-t TIME" option's format is not easy to get right: I always confuse the traditional (and insane) MMDDhhmm[YY] format with the newer [[CC]YY]MMDDhhmm[.ss] format and need to consult the docs to be sure I don't screw up my time stamps. I wish Emacs had something more human-friendly, perhaps accessible via mouse clicks on the date/time fields of the Dired display or some such. ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-30 6:50 ` dired-do-touch Eli Zaretskii @ 2004-03-30 9:59 ` Juri Linkov 2004-03-30 12:35 ` dired-do-touch Matthew Mundell 0 siblings, 1 reply; 62+ messages in thread From: Juri Linkov @ 2004-03-30 9:59 UTC (permalink / raw) Cc: matt, rms, emacs-devel Eli Zaretskii <eliz@elta.co.il> writes: >> From: Juri Linkov <juri@jurta.org> >> Date: Mon, 29 Mar 2004 22:15:19 +0300 >> While I agree that we don't have to emulate the `touch' program >> format, I think that we ought to add it as one of the possible time >> formats accepted by the `date-to-time' and other Emacs time-parsing >> functions, because this format is very compact which makes it >> convenient for the user to enter. > > ``Convenient''? IMHO, you need to be a CS graduate just to understand > it. Take a look at the Yacc parser summoned for the implementation of > the "--date" option, or at the node in fileutils.info that documents > it. AFAIU, it's what the parse-time.el tries to do. We could just add the "-t TIME" format to it. > Even the simpler "-t TIME" option's format is not easy to get right: I > always confuse the traditional (and insane) MMDDhhmm[YY] format with The older format is purely "ill-logical". > the newer [[CC]YY]MMDDhhmm[.ss] format and need to consult the docs to > be sure I don't screw up my time stamps. The newer format makes more sense because it's like the ISO 8601 format. > I wish Emacs had something more human-friendly, perhaps accessible via > mouse clicks on the date/time fields of the Dired display or some such. It's a good idea to change file attributes diredctly (I mistyped this word instead of "directly", but the new word makes sense :-) on a dired buffer. There also was a suggestion to make dired permission fields editable. BTW, I think that since we will modify the file mode changing command to use the primitive, we could add a `rwxrwxrwx'-like format to formats acceptable by the `set-file-modes' (or perhaps to a new mode-parsing wrapper around it). -- Juri Linkov http://www.jurta.org/emacs/ ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-30 9:59 ` dired-do-touch Juri Linkov @ 2004-03-30 12:35 ` Matthew Mundell 2004-03-30 19:43 ` dired-do-touch Stefan Monnier ` (2 more replies) 0 siblings, 3 replies; 62+ messages in thread From: Matthew Mundell @ 2004-03-30 12:35 UTC (permalink / raw) Cc: Eli Zaretskii, rms, emacs-devel Juri Linkov <juri@jurta.org> writes: > Eli Zaretskii <eliz@elta.co.il> writes: [...] > > I wish Emacs had something more human-friendly, perhaps accessible via > > mouse clicks on the date/time fields of the Dired display or some such. > > It's a good idea to change file attributes diredctly (I mistyped this word > instead of "directly", but the new word makes sense :-) on a dired buffer. > > There also was a suggestion to make dired permission fields > editable. Editing permission fields and names directly can be done with wdired-mode. It's wdired.el in the Debian emacs-goodies-el package. The source suggests finding it via http://groups.google.com/groups?as_ugroup=gnu.emacs.sources&as_q=wdired. > BTW, I think that since we will modify the file mode changing command > to use the primitive, we could add a `rwxrwxrwx'-like format to formats > acceptable by the `set-file-modes' (or perhaps to a new mode-parsing > wrapper around it). This seems worse than the a+rwx format. ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-30 12:35 ` dired-do-touch Matthew Mundell @ 2004-03-30 19:43 ` Stefan Monnier 2004-03-31 3:14 ` dired-do-touch Juri Linkov 2004-03-31 15:04 ` dired-do-touch Richard Stallman 2 siblings, 0 replies; 62+ messages in thread From: Stefan Monnier @ 2004-03-30 19:43 UTC (permalink / raw) Cc: Juri Linkov, Eli Zaretskii, Juan Leon Lahoz Garcia, rms, emacs-devel > Editing permission fields and names directly can be done with > wdired-mode. BTW, what happened with it? I thought we wanted to include it (and/or dired-efap) and yet it seems like it got lost along the way. Stefan ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-30 12:35 ` dired-do-touch Matthew Mundell 2004-03-30 19:43 ` dired-do-touch Stefan Monnier @ 2004-03-31 3:14 ` Juri Linkov 2004-03-31 15:53 ` dired-do-touch Matthew Mundell 2004-03-31 15:04 ` dired-do-touch Richard Stallman 2 siblings, 1 reply; 62+ messages in thread From: Juri Linkov @ 2004-03-31 3:14 UTC (permalink / raw) Cc: emacs-devel Matthew Mundell <matt@mundell.ukfsn.org> writes: > Juri Linkov <juri@jurta.org> writes: >> BTW, I think that since we will modify the file mode changing command >> to use the primitive, we could add a `rwxrwxrwx'-like format to formats >> acceptable by the `set-file-modes' (or perhaps to a new mode-parsing >> wrapper around it). > > This seems worse than the a+rwx format. rwxrwxrwx is simpler because it is WYSIWYG. And it's easier for the user to change when s?he is presented with the initial value to edit. And it's what (nth 8 (file-attributes file)) returns, so the reverse operation will be logical. -- Juri Linkov http://www.jurta.org/emacs/ ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-31 3:14 ` dired-do-touch Juri Linkov @ 2004-03-31 15:53 ` Matthew Mundell 0 siblings, 0 replies; 62+ messages in thread From: Matthew Mundell @ 2004-03-31 15:53 UTC (permalink / raw) Cc: emacs-devel Juri Linkov <juri@jurta.org> writes: > Matthew Mundell <matt@mundell.ukfsn.org> writes: > > Juri Linkov <juri@jurta.org> writes: > >> BTW, I think that since we will modify the file mode changing command > >> to use the primitive, we could add a `rwxrwxrwx'-like format to formats > >> acceptable by the `set-file-modes' (or perhaps to a new mode-parsing > >> wrapper around it). > > > > This seems worse than the a+rwx format. > > rwxrwxrwx is simpler because it is WYSIWYG. > And it's easier for the user to change > when s?he is presented with the initial value to edit. Yes, right, there is a step to learning the a+rwx format after understanding the rwxrwxrwx format. > And it's what (nth 8 (file-attributes file)) returns, > so the reverse operation will be logical. Makes sense. ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-30 12:35 ` dired-do-touch Matthew Mundell 2004-03-30 19:43 ` dired-do-touch Stefan Monnier 2004-03-31 3:14 ` dired-do-touch Juri Linkov @ 2004-03-31 15:04 ` Richard Stallman 2004-03-31 19:42 ` dired-do-touch Stefan Monnier 2 siblings, 1 reply; 62+ messages in thread From: Richard Stallman @ 2004-03-31 15:04 UTC (permalink / raw) Cc: juri, eliz, emacs-devel Editing permission fields and names directly can be done with wdired-mode. If this code is clean so we would like to add to Emacs, and if the authors will sign papers for it, we can use this code. Otherwise, it would be useful for someone else to start from scratch and implement the same feature in a different way, someone who will indeed sign papers so we can use his code. ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-31 15:04 ` dired-do-touch Richard Stallman @ 2004-03-31 19:42 ` Stefan Monnier 2004-04-02 6:01 ` dired-do-touch Richard Stallman 0 siblings, 1 reply; 62+ messages in thread From: Stefan Monnier @ 2004-03-31 19:42 UTC (permalink / raw) Cc: juri, Matthew Mundell, Juan Leon Lahoz Garcia, eliz, emacs-devel > Editing permission fields and names directly can be done with > wdired-mode. > If this code is clean so we would like to add to Emacs, and if the > authors will sign papers for it, we can use this code. IIRC, Juan León Lahoz García <juan-leon.lahoz@tecsidel.es> signed the papers and all. But I can't check it myself. Stefan ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-31 19:42 ` dired-do-touch Stefan Monnier @ 2004-04-02 6:01 ` Richard Stallman 2004-04-23 20:57 ` dired-do-touch Stefan Monnier 0 siblings, 1 reply; 62+ messages in thread From: Richard Stallman @ 2004-04-02 6:01 UTC (permalink / raw) Cc: juri, matt, emacs-devel, eliz, juan-leon.lahoz Yes, Lahoz did sign papers for wdired.el. So we could install it now. ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-04-02 6:01 ` dired-do-touch Richard Stallman @ 2004-04-23 20:57 ` Stefan Monnier 0 siblings, 0 replies; 62+ messages in thread From: Stefan Monnier @ 2004-04-23 20:57 UTC (permalink / raw) Cc: juri, matt, emacs-devel, eliz, juan-leon.lahoz > Yes, Lahoz did sign papers for wdired.el. So we could install it now. Done, Stefan ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-29 19:15 ` dired-do-touch Juri Linkov 2004-03-29 22:24 ` dired-do-touch Andreas Schwab 2004-03-30 6:50 ` dired-do-touch Eli Zaretskii @ 2004-03-30 16:18 ` Matthew Mundell 2 siblings, 0 replies; 62+ messages in thread From: Matthew Mundell @ 2004-03-30 16:18 UTC (permalink / raw) Cc: Eli Zaretskii, rms, emacs-devel Juri Linkov <juri@jurta.org> writes: > Eli Zaretskii <eliz@elta.co.il> writes: > >> There's the set-file-modes primitive for changing modes. Are there > >> equivalent primitives for changing owner and group? > > > > I don't think so. FWIW, I think we should add them. > > I completely agree that we should add primitives for changing > owner and group and use them in dired. With some modification the coreutils change_file_owner and change_dir_owner functions (in src/chown-core.c) could be the core of such a primitive. Is this a good idea, perhaps with an interface as below? DEFUN ("set-file-owners", Fset_file_owners, Sset_file_owners, 2, 3, 0, doc: /* Set OWNER and/or or GROUP of file FILENAME. If OWNER or GROUP is nil then skip setting that attribute. Return t on success, else nil. */) (filename, owner, group) Lisp_Object filename, owner, group; { ... ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-28 19:59 ` dired-do-touch Matthew Mundell 2004-03-29 6:59 ` dired-do-touch Eli Zaretskii @ 2004-03-29 19:27 ` Juri Linkov 1 sibling, 0 replies; 62+ messages in thread From: Juri Linkov @ 2004-03-29 19:27 UTC (permalink / raw) Cc: Eli Zaretskii, rms, emacs-devel Matthew Mundell <matt@mundell.ukfsn.org> writes: > Juri Linkov <juri@jurta.org> writes: >> 1. Add the touch dired command that works like other dired commands >> which change file attributes: chmod, chown, chgrp; >> 2a. Add a feature that guesses the initial input for these >> dired commands; >> 2b. Rewrite these dired commands to use Emacs primitives. > > If the commands are going to be rewritten soon to use primitives then > perhaps step 1 can be skipped. It's only for the sake of adding one feature at a time. -- Juri Linkov http://www.jurta.org/emacs/ ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-27 12:17 ` dired-do-touch Eli Zaretskii 2004-03-27 13:06 ` dired-do-touch Juri Linkov @ 2004-03-27 16:09 ` Matthew Mundell 1 sibling, 0 replies; 62+ messages in thread From: Matthew Mundell @ 2004-03-27 16:09 UTC (permalink / raw) Cc: Juri Linkov, rms, emacs-devel "Eli Zaretskii" <eliz@gnu.org> writes: > > From: Juri Linkov <juri@jurta.org> > > Date: Sat, 27 Mar 2004 12:59:21 +0200 > > > > Below is the patch for the new T command. It uses the external touch > > program and behaves like other dired commands `chmod', `chgrp' and `chown'. > > > > I suggest to install this patch first. Then I suggest to consider and > > install the patch that allows the initial default values for > > dired-do-touch, dired-do-chmod, dired-do-chgrp, dired-do-chown and > > some other dired commands. > > > > And after this I suggest to install the patch posted by Matthew Mundell > > that uses the new function `set-file-times', with small modifications > > which will allow to use it instead of the external program in cases > > when there is no touch program installed or depending on a new user option. > > I don't understand why you insist on using an external program if > Emacs could easily have a primitive to do the same. I think using an > Emacs primitive is faster, in addition to being more portable. I also think an available primitive should take preference over an external program. For now, using the set-file-times primitive prevents the Dired interface from taking an arbitrary time. > The patch to add set-file-times is already reviewed by at least 2 > Emacs maintainers, and is IMHO ready for being checked in. He's challenging only the Dired changes, I think. ^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: dired-do-touch 2004-03-27 10:59 ` dired-do-touch Juri Linkov 2004-03-27 12:17 ` dired-do-touch Eli Zaretskii @ 2004-03-28 4:25 ` Richard Stallman 1 sibling, 0 replies; 62+ messages in thread From: Richard Stallman @ 2004-03-28 4:25 UTC (permalink / raw) Cc: matt, emacs-devel Please install your patch. We can install Matt's further change when his papers come. ^ permalink raw reply [flat|nested] 62+ messages in thread
end of thread, other threads:[~2011-07-30 11:01 UTC | newest] Thread overview: 62+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2004-04-24 15:28 dired-do-touch Lars Hansen 2004-04-24 17:01 ` dired-do-touch Eli Zaretskii 2004-04-24 17:04 ` dired-do-touch Lars Hansen -- strict thread matches above, loose matches on Subject: below -- 2011-07-28 12:57 [PATCH] fix goto-line Jose E. Marchesi 2011-07-28 14:07 ` Juanma Barranquero 2011-07-29 11:15 ` Juri Linkov 2011-07-29 11:22 ` Juanma Barranquero 2011-07-29 15:28 ` Juri Linkov 2011-07-29 16:45 ` Paul Eggert 2011-07-30 9:17 ` dired-do-touch (was: [PATCH] fix goto-line) Juri Linkov 2011-07-30 9:50 ` dired-do-touch Juri Linkov 2011-07-30 9:54 ` dired-do-touch (was: [PATCH] fix goto-line) Andreas Schwab 2011-07-30 11:01 ` dired-do-touch Juri Linkov 2007-08-23 20:06 dired-do-touch martin rudalics 2007-08-23 22:35 ` dired-do-touch Sean Sieger [not found] <mailman.5195.1187881677.32220.help-gnu-emacs@gnu.org> 2007-08-23 15:23 ` dired-do-touch Sven Joachim 2007-08-23 17:43 ` dired-do-touch Sean Sieger 2007-08-23 15:07 dired-do-touch Sean Sieger 2007-08-23 15:36 ` dired-do-touch Peter Dyballa [not found] ` <4135e3e50708231035pbc95223m8988de9677ec3c4c@mail.gmail.com> 2007-08-23 18:06 ` dired-do-touch Peter Dyballa [not found] ` <mailman.5210.1187892398.32220.help-gnu-emacs@gnu.org> 2007-08-24 6:32 ` dired-do-touch Fabian Braennstroem 2007-08-24 16:44 ` dired-do-touch Sean Sieger [not found] ` <mailman.5260.1187973928.32220.help-gnu-emacs@gnu.org> 2007-08-24 21:15 ` dired-do-touch Fabian Braennstroem 2007-08-23 17:39 ` dired-do-touch Sean Sieger [not found] <20040321165848.0DB3C662F8@imf.math.ku.dk> 2004-03-21 18:12 ` dired-do-touch Lars Hansen 2004-03-22 23:45 ` dired-do-touch Matthew Mundell 2004-03-23 6:31 ` dired-do-touch Eli Zaretskii 2004-03-23 21:48 ` dired-do-touch Matthew Mundell 2004-03-24 7:11 ` dired-do-touch Eli Zaretskii 2004-03-24 10:57 ` dired-do-touch Kim F. Storm 2004-03-24 11:10 ` dired-do-touch Eli Zaretskii 2004-03-24 12:22 ` dired-do-touch Kim F. Storm 2004-03-24 21:59 ` dired-do-touch Matthew Mundell 2004-03-25 7:10 ` dired-do-touch Eli Zaretskii 2004-03-24 20:57 ` dired-do-touch Matthew Mundell 2004-03-25 2:00 ` dired-do-touch Richard Stallman 2004-03-26 18:31 ` dired-do-touch Matthew Mundell 2004-03-28 1:36 ` dired-do-touch Richard Stallman 2004-03-28 1:36 ` dired-do-touch Richard Stallman 2004-03-20 19:05 dired-do-touch Matthew Mundell 2004-03-21 13:31 ` dired-do-touch Ehud Karni 2004-03-21 18:27 ` dired-do-touch Eli Zaretskii 2004-03-21 16:50 ` dired-do-touch Eli Zaretskii 2004-03-21 19:21 ` dired-do-touch Richard Stallman 2004-03-25 14:54 ` dired-do-touch Juri Linkov 2004-03-25 21:07 ` dired-do-touch Juri Linkov 2004-03-27 5:52 ` dired-do-touch Richard Stallman 2004-03-27 10:59 ` dired-do-touch Juri Linkov 2004-03-27 12:17 ` dired-do-touch Eli Zaretskii 2004-03-27 13:06 ` dired-do-touch Juri Linkov 2004-03-27 16:13 ` dired-do-touch Matthew Mundell 2004-03-27 17:52 ` dired-do-touch Juri Linkov 2004-03-28 19:59 ` dired-do-touch Matthew Mundell 2004-03-29 6:59 ` dired-do-touch Eli Zaretskii 2004-03-29 19:15 ` dired-do-touch Juri Linkov 2004-03-29 22:24 ` dired-do-touch Andreas Schwab 2004-03-30 6:50 ` dired-do-touch Eli Zaretskii 2004-03-30 9:59 ` dired-do-touch Juri Linkov 2004-03-30 12:35 ` dired-do-touch Matthew Mundell 2004-03-30 19:43 ` dired-do-touch Stefan Monnier 2004-03-31 3:14 ` dired-do-touch Juri Linkov 2004-03-31 15:53 ` dired-do-touch Matthew Mundell 2004-03-31 15:04 ` dired-do-touch Richard Stallman 2004-03-31 19:42 ` dired-do-touch Stefan Monnier 2004-04-02 6:01 ` dired-do-touch Richard Stallman 2004-04-23 20:57 ` dired-do-touch Stefan Monnier 2004-03-30 16:18 ` dired-do-touch Matthew Mundell 2004-03-29 19:27 ` dired-do-touch Juri Linkov 2004-03-27 16:09 ` dired-do-touch Matthew Mundell 2004-03-28 4:25 ` dired-do-touch Richard Stallman
Code repositories for project(s) associated with this external index https://git.savannah.gnu.org/cgit/emacs.git https://git.savannah.gnu.org/cgit/emacs/org-mode.git This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.