aboutsummaryrefslogblamecommitdiffstats
path: root/debian/patches/210_vim-like.patch
blob: dcb598b81c45acf41d66421ade25cd160ecde2f6 (plain) (tree)






















































































                                                                              
Origin: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=724028
Bug: https://sourceforge.net/p/w3m/patches/68/
Subject: vim/-perator like handling
From: Laurence Richert <laurencerichert@yahoo.de>
    
    - half page scrolling
    - jumping to elements numbered by getLinkNumberStr() from Karsten
      Schoelzel

diff --git a/main.c b/main.c
index b421943..4b40e8e 100644
--- a/main.c
+++ b/main.c
@@ -1566,6 +1566,18 @@ DEFUN(pgBack, PREV_PAGE, "Move to previous page")
 		  * (Currentbuf->LINES - 1)), prec_num ? B_SCROLL : B_NORMAL);
 }
 
+/* Move half page forward */
+DEFUN(hpgFore, NEXT_HALF_PAGE, "Scroll down half page")
+{
+	nscroll(searchKeyNum() * (Currentbuf->LINES / 2 - 1), B_NORMAL);
+}
+
+/* Move half page backward */
+DEFUN(hpgBack, PREV_HALF_PAGE, "Scroll up half page")
+{
+	nscroll(-searchKeyNum() * (Currentbuf->LINES / 2 - 1), B_NORMAL);
+}
+
 /* 1 line up */
 DEFUN(lup1, UP, "Scroll up one line")
 {
@@ -3568,6 +3580,33 @@ DEFUN(lastA, LINK_END, "Go to the last link")
     displayBuffer(Currentbuf, B_NORMAL);
 }
 
+/* go to the nth anchor */
+DEFUN(nthA, LINK_N, "Go to the nth link")
+{
+    HmarkerList *hl = Currentbuf->hmarklist;
+	BufferPoint *po;
+	Anchor *an;
+
+	int n = searchKeyNum();
+	if (n < 0 || n > hl->nmark) return;
+
+	if (Currentbuf->firstLine == NULL)
+		return;
+    if (!hl || hl->nmark == 0)
+		return;
+
+	po = hl->marks + n-1;
+	an = retrieveAnchor(Currentbuf->href, po->line, po->pos);
+	if (an == NULL)
+		an = retrieveAnchor(Currentbuf->formitem, po->line, po->pos);
+	if (an == NULL) return;
+
+    gotoLine(Currentbuf, po->line);
+    Currentbuf->pos = po->pos;
+    arrangeCursor(Currentbuf);
+    displayBuffer(Currentbuf, B_NORMAL);
+}
+
 /* go to the next anchor */
 DEFUN(nextA, NEXT_LINK, "Move to next link")
 {
diff --git a/proto.h b/proto.h
index f8a7345..9d14a58 100644
--- a/proto.h
+++ b/proto.h
@@ -11,6 +11,8 @@ extern void pushEvent(int cmd, void *data);
 extern MySignalHandler intTrap(SIGNAL_ARG);
 extern void pgFore(void);
 extern void pgBack(void);
+extern void hpgFore(void);
+extern void hpgBack(void);
 extern void lup1(void);
 extern void ldown1(void);
 extern void ctrCsrV(void);
@@ -61,6 +63,7 @@ extern void submitForm(void);
 extern void followForm(void);
 extern void topA(void);
 extern void lastA(void);
+extern void nthA(void);
 extern void onA(void);
 
 extern void nextA(void);