[net.sources] emacs bindings for less

charles@hpcvcd.HP (Charles Brown) (01/21/87)

I tried to mail this to the moderator of mod.sources.  Either I do
not have the correct mail address for him, or I just don't know how
to get from hplabs to mirror.  So I am posting this here.  These
diffs are from the version of less in mod.sources.  They may not
apply to the version(s) recently posted here in net.sources.
-----------------------------------------------------------------

			Date= Fri Dec 19 15:00:41 1986 

From:	Charles Brown		hplabs!hp-pcd!charles
To:	mod.sources moderator	hp-pcd!hplabs!mirror!sources
Re:	less

When porting less to our HP9000s500 we modified a few files.
	To make it work correctly with HP terminals:
		screen.c
                        HP terminals treat the  screen  as  a  window
                        into  the terminal memory.  It is possible to
                        move this window  up  and  down  within  this
                        screen  memory.   When  you scroll the screen
                        down, the text that disappears off the bottom
                        of the screen is still  in  memory.   If  you
                        then  scroll  the  screen  back  up  (such as
                        typing LF at the bottom of  the  screen)  the
                        text  re-appears.   Usually  this  feature is
                        very  desirable.   Only   occasionally   will
                        programs show up which assume that text which
                        has   scrolled   down  has  been  permanently
                        erased.  I believe the enclosed change will
			work with non-HP terminals.
	To make things a little cleaner and esthetic:
		makefile.sys5 (linked to makefile)
	To add emacs bindings:
		command.c
		prim.c
		version.c
		less.nro
================================================================
	diffs for screen.c
236c236
< 	sc_eol_clear = (dumb) ? NULL : tgetstr("ce", &sp);
---
> 	sc_eol_clear = (dumb) ? NULL : tgetstr("cd", &sp);
================================================================
	diffs for makefile.sys5
92c92
< INSTALL_HELP =	/usr/local/bin/less.help
---
> INSTALL_HELP =	/usr/local/lib/less.help
95c95
< HELPFILE =	/usr/local/bin/less.help
---
> HELPFILE =	/usr/local/lib/less.help
================================================================
	diffs for command.c
74c74,80
< 	putc(mcc);
---
> 	if( mcc == CONTROL('S') )
> 	    puts("search forward:");
> 	else
> 	    if( mcc == CONTROL('R') )
> 		puts("search reverse:");
> 	    else
> 		putc(mcc);
277c283,286
< 				case '/': case '?':
---
> 				case '/':
> 				case '?':
> 				case CONTROL('S'):
> 				case CONTROL('R'):
281c290,294
< 					for (p = cmdbuf;  *p == '+' || *p == ' ';  p++) ;
---
> 					for (
> 						p = cmdbuf;
> 						*p == '+' || *p == ' ';
> 						p++
> 					    ) ;
299a313
> 				case CONTROL('_'):
345a360
> 		case CONTROL('V'):
370a386
> 		case CONTROL('N'):
383a400
> 		case CONTROL('P'):
426d442
< 		case CONTROL('R'):
486a503
> 		case CONTROL('C'):
492a510,522
> 		case CONTROL('R'):
> 			/* 
> 			 * If vi then redraw, if emacs then reverse search
> 			 */
> 			if( 0 == strcmp( editor, "emacs" ) )
> 			    goto reverse;
> 			else
> 			{
> 			    /* Repaint screen. */
> 			    repaint();
> 			}
> 			break;
> 
494a525,526
> 		case CONTROL('S'):
> 		case CONTROL(']'):
498a531
> 		reverse:
501a535
> 			if(c == CONTROL(']'))  c = CONTROL('S'); /* kludge */
532a567
> 		examine:
543a579
> 		case CONTROL('_'):
593a630,721
> 		case CONTROL('X'):
> 			/*
> 			 * ^X command prefix
> 			 */
> 			puts("^X");
> 			c = getcc();
> 			switch(c)
> 			{
> 			    case CONTROL('V'):
> 				goto examine;
> 			    case 'n':
> 				/*
> 				 * Examine next file.
> 				 */
> 				n = cmd_int();
> 				if (n <= 0)
> 					n = 1;
> 				next_file(n);
> 				break;
> 			    case 'p':
> 				/*
> 				 * Examine previous file.
> 				 */
> 				n = cmd_int();
> 				if (n <= 0)
> 					n = 1;
> 				prev_file(n);
> 				break;
> 			    case CONTROL('X'):
> 				/*
> 				 * Go to a mark.
> 				 */
> 				lower_left();
> 				clear_eol();
> 				puts("goto mark: ");
> 				c = getcc();
> 				if (c == erase_char || c == kill_char)
> 					break;
> 				gomark(c);
> 				break;
> 			    case CONTROL('C'):
> 				/*
> 				 * Exit.
> 				 */
> 				/*setjmp(main_loop);*/
> 				quit();
> 			    default:
> 				bell();
> 				break;
> 			}
> 			break;
> 
> 		case CONTROL('['):
> 			/*
> 			 * Meta- command prefix
> 			 */
> 			puts("Meta-");
> 			c = getcc();
> 			switch(c)
> 			{
> 			    case 'v':
> 				/*
> 				 * Backward one screen.
> 				 */
> 				n = cmd_int();
> 				if (n <= 0)
> 					n = sc_window;
> 				backward(n, 1);
> 				break;
> 			    case ' ':
> 				/* 
> 				 * Set mark.
> 				 */
> 				goto mark;
> 			    case '<':
> 				/* 
> 				 * Go to beginning of file.
> 				 */
> 				jump_back(1);
> 				break;
> 			    case '>':
> 				/* 
> 				 * Go to end of file.
> 				 */
> 				jump_forw();
> 				break;
> 			    default:
> 				bell();
> 				break;
> 			}
> 			break;
> 
612a741
> 		case CONTROL('@'):
615a745
> 		mark:
================================================================
	diffs for prim.c
534c534,535
< 	register int search_forward = (direction == '/');
---
> 	register int search_forward =
> 		(direction == '/' || direction == CONTROL('S'));
================================================================
	diffs for version.c
104a105,106
>  *	v61.1: Change clear_eol to clear_eos (HP fix)	12/18/86  eric
>  *		Add emacs bindings				  charles
108c110
< char version[] = "@(#) less  version 61";
---
> char version[] = "@(#) less  version 61.1";
================================================================
	diffs for less.nro
26,27c26,27
< Commands are based on both
< .I more
---
> Commands are based on
> .I more, emacs
46a47,49
> .IP "^V"
> Same as SPACE.
> .PP
50a54,56
> .IP "ESCAPE-v"
> Same as b.
> .PP
58a65,67
> Same as RETURN.
> .PP
> .IP "^N"
66a76,78
> .IP "^P"
> Same as y.
> .PP
77c89
< .IP "r or ^R or ^L"
---
> .IP "r or ^L"
79a92,96
> .IP "^R"
> If the environment variable EDITOR is set to emacs,
> then this is the same as "?".
> Otherwise, it is the same as "r".
> .PP
92a110,115
> .IP "ESCAPE-<"
> Go to line 1 in the file.
> .PP
> .IP "ESCAPE->"
> Go to the end of the file.
> .PP
105c128
< .IP m
---
> .IP "m or ^@ or ESCAPE-SPACE"
109c132
< .IP "'"
---
> .IP "' or ^X^X"
117c140
< .IP /pattern
---
> .IP "/pattern or ^]pattern or ^Spattern"
132c155
< .IP E [filename]
---
> .IP "E[filename] or ^X^V[filename]"
137c160
< .IP N
---
> .IP "N or ^Xn"
142c165
< .IP P
---
> .IP "P or ^Xp"
170c193
< .IP q
---
> .IP "q or ^C or ^X^C"
183c206
< .IP "! shell-command"
---
> .IP "![shell-command] or ^_[shell-command]"
================================================================