Ligesh <[EMAIL PROTECTED]> wrote Fri, Aug 10, 2007:
>
> Hi,
>
> I had requested a specific 2 dimensional keyboard motion some time back. It
> was like this: the up/down arrows will move straight up and down, and will
> stop on a line that contains a link anywhere on that line. The up/down arrows
> will not move right/left at all. They will just stop on a line which contains
> the link anywhere, even if the exact location of the cursor does not have a
> link.
This should be something like the move-cursor-* actions, right?
Try putting this in your elinks.conf and test:
bind "main" "up" = "move-cursor-up"
bind "main" "down" = "move-cursor-down"
> The right-left would of course move along the links on a single line. The
> right-left would also wrap-around, so that after the farthest right link, the
> right button will wrap to the left most link on the left line. But up/down
> moves only straight.
bind "main" "right" = "move-link-right"
bind "main" "left" = "move-link-left"
Almost does what, I think, you want. Unfortunately, it jumps to
a random link sometimes. I've never used this feature and the
code is a bit "hairy".
> I would like to know if I can sponsor this feature.
Maybe you could test the patch below, which makes the horizontal
navigation "kind-of" work when browsing local directories and could
serve as a start.
diff --git a/src/viewer/text/link.c b/src/viewer/text/link.c
index 175a0ff..715e690 100644
--- a/src/viewer/text/link.c
+++ b/src/viewer/text/link.c
@@ -615,14 +615,17 @@ next_link_in_dir(struct document_view *doc_view, int
dir_x, int dir_y)
vs = doc_view->vs;
link = get_current_link(doc_view);
- if (!link) return 0;
+ if (link) {
+ /* Find the link's "bounding box" coordinates. */
- /* Find the link's "bounding box" coordinates. */
+ get_link_x_bounds(link, -1, &min_x, &max_x);
- get_link_x_bounds(link, -1, &min_x, &max_x);
-
- min_y = link->points[0].y;
- max_y = link->points[link->npoints - 1].y;
+ min_y = link->points[0].y;
+ max_y = link->points[link->npoints - 1].y;
+ } else {
+ min_x = max_x = doc_view->session->tab->x - doc_view->box.x;
+ min_y = max_y = doc_view->session->tab->y - doc_view->box.y;
+ }
/* Now go from the bounding box edge in the appropriate
* direction and find the nearest link. */
--
Jonas Fonseca
_______________________________________________
elinks-dev mailing list
[email protected]
http://linuxfromscratch.org/mailman/listinfo/elinks-dev