all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Shynur Xie <one.last.kiss@outlook.com>
To: 65621@debbugs.gnu.org
Subject: bug#65621: [PATCH] `dired-next-line' go to meaningful line
Date: Wed, 30 Aug 2023 13:02:43 +0000	[thread overview]
Message-ID: <PH0PR11MB74702015CD1A53CB4BB27127D7E6A@PH0PR11MB7470.namprd11.prod.outlook.com> (raw)

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

Cursor in Dired buffer sometimes go to a line which is not an item
line.  For example, the 1st line and the last line:

   > d:/Desktop/.emacs.d/site-lisp:
       drwxrwxrwx shynur 4096 08/30 18:15 .
       drwxrwxrwx shynur 4096 08/30 18:07 ..
       -rw-rw-rw- shynur  304 08/09  3:01 subdirs.el
   > \Newline here.

Avoiding these lines may improve the experience when moving cursor.
The attaching patch implements this.

If there is no visible item line, move the cursor as Dired used to do.

[-- Attachment #2: 0001-dired-next-line-go-to-meaningful-line.patch --]
[-- Type: application/octet-stream, Size: 2625 bytes --]

From c580e0f502eaa9180a5b97bb3f57d8ee4aed51db Mon Sep 17 00:00:00 2001
From: shynur <one.last.kiss@outlook.com>
Date: Wed, 30 Aug 2023 19:47:52 +0800
Subject: [PATCH] `dired-next-line' go to meaningful line

---
 lisp/dired.el | 42 ++++++++++++++++++++++++++++++++----------
 1 file changed, 32 insertions(+), 10 deletions(-)

diff --git a/lisp/dired.el b/lisp/dired.el
index e96b85a..3b5753e 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -2666,22 +2666,44 @@ Otherwise, toggle `read-only-mode'."
       (wdired-change-to-wdired-mode)
     (read-only-mode 'toggle)))
 
+(defun dired-filename-line-p ()
+  "Return t if the current line is a filename line."
+  (save-excursion
+    (dired-move-to-filename)
+    (get-char-property (point) 'dired-filename)))
+
 (defun dired-next-line (arg)
   "Move down lines then position at filename.
-Optional prefix ARG says how many lines to move; default is one line."
+Optional prefix ARG says how many lines to move; default is one line.
+
+Point won't go to the dired-header line or the last empty line.  If
+you really want to move there, use `next-line' instead."
   (interactive "^p")
-  (let ((line-move-visual)
-	(goal-column))
-    (line-move arg t))
-  ;; We never want to move point into an invisible line.
-  (while (and (invisible-p (point))
-	      (not (if (and arg (< arg 0)) (bobp) (eobp))))
-    (forward-char (if (and arg (< arg 0)) -1 1)))
-  (dired-move-to-filename))
+  (let ((old-line-has-filename (dired-filename-line-p)))
+    (let ((line-move-visual)
+          (goal-column))
+      (line-move arg t))
+    ;; We never want to move point into an invisible line.
+    (while (and (invisible-p (point))
+                (not (if (and arg (< arg 0)) (bobp) (eobp))))
+      (forward-char (if (and arg (< arg 0)) -1 1)))
+    (dired-move-to-filename)
+    ;; If there's a line (or one of its succeeding lines) that we can
+    ;; go back to,
+    (when old-line-has-filename
+      ;; and the current line doesn't contain a filename,
+      (unless (dired-filename-line-p)
+        ;; then let's move back.
+        (dired-next-line (if (natnump arg)
+                             -1
+                           1))))))
 
 (defun dired-previous-line (arg)
   "Move up lines then position at filename.
-Optional prefix ARG says how many lines to move; default is one line."
+Optional prefix ARG says how many lines to move; default is one line.
+
+Point won't go to the dired-header line or the last empty line.  If
+you really want to move there, use `previous-line' instead."
   (interactive "^p")
   (dired-next-line (- (or arg 1))))
 
-- 
2.41.0.windows.3


             reply	other threads:[~2023-08-30 13:02 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-30 13:02 Shynur Xie [this message]
2023-08-30 13:36 ` bug#65621: [PATCH] `dired-next-line' go to meaningful line Eli Zaretskii
2023-08-30 13:50   ` Shynur Xie
2023-08-30 14:20     ` Eli Zaretskii
2023-08-30 19:14       ` Stefan Kangas
2023-08-30 20:58         ` Drew Adams
2023-08-30 21:34           ` Stefan Kangas
2023-08-30 22:36             ` Drew Adams
2023-08-31  5:45         ` Shynur Xie
2023-08-31 15:35           ` Drew Adams
2023-08-31 15:46             ` Shynur Xie
2023-08-31 15:55               ` Drew Adams
2023-08-31 18:15                 ` Shynur Xie
2023-08-31 19:10                   ` Drew Adams
2023-08-31 19:17                     ` Drew Adams
2023-08-31 19:44                     ` Shynur Xie
2023-08-31 21:51                       ` Drew Adams
2023-08-31 21:35                   ` Stefan Kangas
2023-08-31 21:37                     ` Stefan Kangas
2023-09-01 17:29                     ` Shynur Xie
2023-09-01 18:46                       ` Drew Adams
2023-09-01 20:51                         ` Shynur Xie
2023-09-01 21:06                           ` Drew Adams
2023-09-02 12:05                             ` Shynur Xie
2023-09-02 12:13                               ` Eli Zaretskii
2023-09-02 12:18                                 ` Shynur Xie
2023-09-02 12:39                                   ` Eli Zaretskii
2023-09-02 14:40                                     ` Shynur Xie
2023-09-10  7:45                                       ` Eli Zaretskii
2023-09-03 21:47                               ` Drew Adams
2023-09-07 15:04                                 ` Shynur Xie
2023-08-30 14:54 ` Drew Adams
2023-08-30 15:39   ` Shynur Xie
2023-08-30 15:55     ` Drew Adams

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=PH0PR11MB74702015CD1A53CB4BB27127D7E6A@PH0PR11MB7470.namprd11.prod.outlook.com \
    --to=one.last.kiss@outlook.com \
    --cc=65621@debbugs.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.