Package: w3m
Version: 0.5.3-11
Severity: wishlist
Tags: upstream patch

Forwarded a feature request from Laurence Richert <laurencerichert
(at yahoo.de)> on September 19, 2013 at 6:53PM +0200:
> I would like to ask if two functions could be implemented in an official
> release. I use them pretty often in other programs such as vim and
> vimperator and always get confused when switching to w3m. These would be:
> - half page scrolling
> - jumping to elements numbered by getLinkNumberStr() from Karsten
>   Schoelzel
> I have attached two patch files containing these functions, based on
> v0.5.3.

Thanks,
--
Tatsuya Kinoshita
*** main.c.orig	2013-09-19 16:09:57.440750873 +0200
--- main.c	2013-09-19 18:01:52.108911310 +0200
***************
*** 1584,1593 ****
--- 1584,1605 ----
      else
  	nscroll(-(prec_num ? searchKeyNum() : searchKeyNum()
  		  * (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")
  {
      nscroll(searchKeyNum(), B_SCROLL);
  }
***************
*** 3584,3593 ****
--- 3596,3632 ----
  
      gotoLine(Currentbuf, po->line);
      Currentbuf->pos = po->pos;
      arrangeCursor(Currentbuf);
      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")
  {
*** proto.h.orig	2013-09-19 16:35:24.156787353 +0200
--- proto.h	2013-09-19 16:35:24.152787349 +0200
***************
*** 13,14 ****
--- 13,16 ----
  extern void pgBack(void);
+ extern void hpgFore(void);
+ extern void hpgBack(void);
  extern void lup1(void);
***************
*** 63,64 ****
--- 65,67 ----
  extern void lastA(void);
+ extern void nthA(void);
  extern void onA(void);

Attachment: pgphUcXhl05XA.pgp
Description: PGP signature

Reply via email to