unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* `k' in Dired with inserted subdirectories.
@ 2004-07-13 19:55 Luc Teirlinck
  2004-07-13 20:19 ` Luc Teirlinck
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Luc Teirlinck @ 2004-07-13 19:55 UTC (permalink / raw)


As I pointed out in a prior message in this thread (quite a while
ago),  the documentation of `dired-do-kill-lines' in the docstring and
the Emacs manual contradict each other and _both_ are wrong.
Moreover, `dired-do-kill-lines' contains code that never gets
executed.  Of course, it is strictly speaking not necessary to remove
that code.  Since it never gets executed it never does any harm.  But
it is confusing to anybody reading the source code.

The patches below to dired-aux and man/dired.texi correct both problems.

The reason I replaced:

! \(A negative argument kills lines before the current line.)

with:

! \(A negative argument kills backward.)

in `dired-do-kill-lines's docstring is that to me, the original
sentence does not make clear whether the line itself is included (it is).

I can install if it looks OK.

===File ~/dired-aux-diff====================================
*** dired-aux.el	14 Jun 2004 22:05:32 -0500	1.124
--- dired-aux.el	13 Jul 2004 14:22:28 -0500	
***************
*** 627,635 ****
  (defun dired-do-kill-lines (&optional arg fmt)
    "Kill all marked lines (not the files).
  With a prefix argument, kill that many lines starting with the current line.
! \(A negative argument kills lines before the current line.)
! To kill an entire subdirectory, go to its directory header line
! and use this command with a prefix argument (the value does not matter)."
    ;; Returns count of killed lines.  FMT="" suppresses message.
    (interactive "P")
    (if arg
--- 627,640 ----
  (defun dired-do-kill-lines (&optional arg fmt)
    "Kill all marked lines (not the files).
  With a prefix argument, kill that many lines starting with the current line.
! \(A negative argument kills backward.)
! If a prefix argument is given and you kill the line for a file
! that is a directory, which is inserted in the Dired buffer as
! a subdirectory, then that subdirectory is deleted from the buffer
! as well.
! To kill an entire subdirectory \(without killing its line in the
! parent directory), go to its directory header line and use this
! command with a prefix argument (the value does not matter)."
    ;; Returns count of killed lines.  FMT="" suppresses message.
    (interactive "P")
    (if arg
***************
*** 638,660 ****
  	(dired-kill-line arg))
      (save-excursion
        (goto-char (point-min))
!       (let (buffer-read-only (count 0))
! 	(if (not arg)			; kill marked lines
! 	    (let ((regexp (dired-marker-regexp)))
! 	      (while (and (not (eobp))
! 			  (re-search-forward regexp nil t))
! 		(setq count (1+ count))
! 		(delete-region (progn (beginning-of-line) (point))
! 			       (progn (forward-line 1) (point)))))
! 	  ;; else kill unmarked lines
! 	  (while (not (eobp))
! 	    (if (or (dired-between-files)
! 		    (not (looking-at "^  ")))
! 		(forward-line 1)
! 	      (setq count (1+ count))
! 	      (delete-region (point) (save-excursion
! 				       (forward-line 1)
! 				       (point))))))
  	(or (equal "" fmt)
  	    (message (or fmt "Killed %d line%s.") count (dired-plural-s count)))
  	count))))
--- 643,656 ----
  	(dired-kill-line arg))
      (save-excursion
        (goto-char (point-min))
!       (let (buffer-read-only
! 	    (count 0)
! 	    (regexp (dired-marker-regexp)))
! 	(while (and (not (eobp))
! 		    (re-search-forward regexp nil t))
! 	  (setq count (1+ count))
! 	  (delete-region (progn (beginning-of-line) (point))
! 			 (progn (forward-line 1) (point))))
  	(or (equal "" fmt)
  	    (message (or fmt "Killed %d line%s.") count (dired-plural-s count)))
  	count))))
============================================================

===File ~/dired.texi-diff===================================
*** dired.texi	14 Jun 2004 14:51:51 -0500	1.29
--- dired.texi	13 Jul 2004 12:46:51 -0500	
***************
*** 1030,1039 ****
  files, or on the marked files if any; but it does not operate on the
  current file as a last resort.
  
!   If you kill the line for a file that is a directory, the directory's
! contents are also deleted from the buffer.  Typing @kbd{C-u k} on the
! header line for a subdirectory is another way to delete a subdirectory
! from the Dired buffer.
  
    The @kbd{g} command brings back any individual lines that you have
  killed in this way, but not subdirectories---you must use @kbd{i} to
--- 1030,1040 ----
  files, or on the marked files if any; but it does not operate on the
  current file as a last resort.
  
!   If a numeric prefix argument is given and you kill the line for a
! file that is a directory, the directory's contents are also deleted
! from the buffer.  Typing @kbd{C-u k} on the header line for a
! subdirectory is another way to delete a subdirectory from the Dired
! buffer.
  
    The @kbd{g} command brings back any individual lines that you have
  killed in this way, but not subdirectories---you must use @kbd{i} to
============================================================

^ permalink raw reply	[flat|nested] 10+ messages in thread
* `k' in Dired with inserted subdirectories.
@ 2004-06-07  2:06 Luc Teirlinck
  0 siblings, 0 replies; 10+ messages in thread
From: Luc Teirlinck @ 2004-06-07  2:06 UTC (permalink / raw)


There are inconsistencies regarding the behavior of `k' for subdirectories.
Also, `dired-do-kill-lines' contains several lines of code that can
_never_ be executed.

First problem:

Doc string:

  To kill an entire subdirectory, go to its directory header line and
  use this command with a prefix argument (the value does not matter).

No other way to kill a subdirectory is mentioned.

Emacs manual:

     If you kill the line for a file that is a directory, the directory's
  contents are also deleted from the buffer.  Typing `C-u k' on the
  header line for a subdirectory is another way to delete a subdirectory
  from the Dired buffer.

The fact that C-u k on a subdirectory header line kills that
subdirectory is uncontested.  But what for `k' on a line for a file
that is a directory (but _not_ a directory header line)?

Actual behavior:

If a numeric prefix argument is used and if the directory is inserted in
the buffer, it _is_ removed.  But if marks are used, it is _not_ removed.
What _should_ the behavior be?  Or is the current behavior for some
reason OK, but just not correctly documented?

Second problem with `dired-do-kill-lines':

There is some code in `dired-do-kill-lines' that attempts to delete
all lines that are _not_ marked if a numeric prefix argument is given.
This conflicts with the standard meaning of a numeric prefix argument
in Dired, which `dired-do-kill-lines' _also_ implements.  As a result the
`delete-if-not-marked' with numeric prefix argument code will _never_ be
executed.  So why is it there?  It will never cause bugs, but it is
confusing:

  (if arg
      (if (dired-get-subdir)
        (dired-kill-subdir)
	(dired-kill-line arg))
    ;; Pesonal remark: arg is nil now.
    (save-excursion
      (goto-char (point-min))
      (let (buffer-read-only (count 0))
      ;; Personal remark:  This is equivalent with:
      ;; (if t                          ; kill marked lies
      (if (not arg)			; kill marked lines
 

   ;; else kill unmarked lines
   ;; Personal remark: who cares, `else' _never_ happens.
     (while (not (eobp))         

Sincerely,

Luc.

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

end of thread, other threads:[~2004-07-18  7:18 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-07-13 19:55 `k' in Dired with inserted subdirectories Luc Teirlinck
2004-07-13 20:19 ` Luc Teirlinck
2004-07-13 20:43 ` Luc Teirlinck
2004-07-14 18:26 ` Richard Stallman
2004-07-15 21:16   ` Luc Teirlinck
2004-07-16 16:08     ` Richard Stallman
2004-07-16 16:57       ` Luc Teirlinck
2004-07-18  7:18         ` Richard Stallman
2004-07-15 21:19   ` Luc Teirlinck
  -- strict thread matches above, loose matches on Subject: below --
2004-06-07  2:06 Luc Teirlinck

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

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

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