Vendor import of less v443.
This commit is contained in:
parent
a169eab989
commit
6ea5918889
2
LICENSE
2
LICENSE
@ -2,7 +2,7 @@
|
|||||||
------------
|
------------
|
||||||
|
|
||||||
Less
|
Less
|
||||||
Copyright (C) 1984-2009 Mark Nudelman
|
Copyright (C) 1984-2011 Mark Nudelman
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
modification, are permitted provided that the following conditions
|
modification, are permitted provided that the following conditions
|
||||||
|
@ -34,6 +34,14 @@ DISTFILES = \
|
|||||||
|
|
||||||
all: help.c funcs.h ${srcdir}/configure
|
all: help.c funcs.h ${srcdir}/configure
|
||||||
|
|
||||||
|
release: .FORCE
|
||||||
|
${MAKE} -f Makefile.aut tagall
|
||||||
|
${MAKE} -f Makefile.aut all
|
||||||
|
${MAKE} -f Makefile.aut clean
|
||||||
|
${MAKE} -f Makefile.aut dist
|
||||||
|
|
||||||
|
.FORCE:
|
||||||
|
|
||||||
help.c: less.hlp mkhelp
|
help.c: less.hlp mkhelp
|
||||||
-mv -f ${srcdir}/help.c ${srcdir}/help.c.old
|
-mv -f ${srcdir}/help.c ${srcdir}/help.c.old
|
||||||
rm -rf help.c
|
rm -rf help.c
|
||||||
|
@ -7,11 +7,11 @@ CC = cl
|
|||||||
|
|
||||||
# Normal flags
|
# Normal flags
|
||||||
CFLAGS = /nologo /ML /W3 /GX /O2 /I "." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /c
|
CFLAGS = /nologo /ML /W3 /GX /O2 /I "." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /c
|
||||||
LDFLAGS = /subsystem:console /incremental:no /machine:I386
|
LDFLAGS = /nologo /subsystem:console /incremental:no /machine:I386
|
||||||
|
|
||||||
# Debugging flags
|
# Debugging flags
|
||||||
#CFLAGS = /nologo /MDd /W3 /GX /Od /Gm /Zi /I "." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /c
|
#CFLAGS = /nologo /MDd /W3 /GX /Od /Gm /Zi /I "." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /c
|
||||||
#LDFLAGS = /subsystem:console /incremental:yes /debug /machine:I386
|
#LDFLAGS = /nologo /subsystem:console /incremental:yes /debug /machine:I386
|
||||||
|
|
||||||
LD = link
|
LD = link
|
||||||
LIBS = user32.lib
|
LIBS = user32.lib
|
||||||
|
31
NEWS
31
NEWS
@ -10,6 +10,37 @@
|
|||||||
To report bugs, suggestions or comments, send email to
|
To report bugs, suggestions or comments, send email to
|
||||||
bug-less@gnu.org or markn@greenwoodsoftware.com.
|
bug-less@gnu.org or markn@greenwoodsoftware.com.
|
||||||
|
|
||||||
|
======================================================================
|
||||||
|
|
||||||
|
Major changes between "less" versions 436 and 443
|
||||||
|
|
||||||
|
* Change search behavior such that when a search is given an explicit
|
||||||
|
pattern, the entire displayed screen is included in the search and
|
||||||
|
not just the portion after the target line.
|
||||||
|
|
||||||
|
* Add -A option to change search behavior to the old way: only
|
||||||
|
the portion of the screen after the target line is searched.
|
||||||
|
|
||||||
|
* Add %F formatting to prompt strings, replaced by the last component
|
||||||
|
of the input file.
|
||||||
|
|
||||||
|
* Control-G while editing a command exits the command.
|
||||||
|
|
||||||
|
* Less now exits with status 2 if control-C is pressed and -K is in effect.
|
||||||
|
|
||||||
|
* Fix "ungetc overflow" when passing long commands via the -p option.
|
||||||
|
|
||||||
|
* Fix bug in using line filtering via the & command
|
||||||
|
in combination with -i and -I.
|
||||||
|
|
||||||
|
* Fix bug in handling negative arguments to the -j option.
|
||||||
|
|
||||||
|
* Fix bug in handling %t in prompt strings.
|
||||||
|
|
||||||
|
* Improve handling of long option names.
|
||||||
|
|
||||||
|
* Improve percentage calculation for very large files.
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
|
|
||||||
Major changes between "less" versions 429 and 436
|
Major changes between "less" versions 429 and 436
|
||||||
|
8
README
8
README
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
Less, version 436
|
Less, version 443
|
||||||
|
|
||||||
This is the distribution of less, version 436, released 07 Jul 2009.
|
This is the distribution of less, version 443, released 09 Apr 2011.
|
||||||
This program is part of the GNU project (http://www.gnu.org).
|
This program is part of the GNU project (http://www.gnu.org).
|
||||||
|
|
||||||
This program is free software. You may redistribute it and/or
|
This program is free software. You may redistribute it and/or
|
||||||
@ -93,6 +93,10 @@ complaints, etc., you may mail to the author at markn@greenwoodsoftware.com.
|
|||||||
Note to hackers: comments noting possible improvements are enclosed
|
Note to hackers: comments noting possible improvements are enclosed
|
||||||
in double curly brackets {{ like this }}.
|
in double curly brackets {{ like this }}.
|
||||||
|
|
||||||
|
(Note that the above note was originally written at a time when
|
||||||
|
"hackers" most commonly meant "enthusiastic and dedicated computer
|
||||||
|
programmers", not "persons who attempt to circumvent computer security".)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
=======================================================================
|
=======================================================================
|
||||||
|
2
brac.c
2
brac.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
|
2
ch.c
2
ch.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
@ -395,7 +395,7 @@ init_charset()
|
|||||||
binary_char(c)
|
binary_char(c)
|
||||||
LWCHAR c;
|
LWCHAR c;
|
||||||
{
|
{
|
||||||
if (utf_mode)
|
if (utf_mode)
|
||||||
return (is_ubin_char(c));
|
return (is_ubin_char(c));
|
||||||
c &= 0377;
|
c &= 0377;
|
||||||
return (chardef[c] & IS_BINARY_CHAR);
|
return (chardef[c] & IS_BINARY_CHAR);
|
||||||
@ -817,7 +817,7 @@ static struct wchar_range ubin_table[] = {
|
|||||||
{ 0x000B, 0x000C} /* Cc */,
|
{ 0x000B, 0x000C} /* Cc */,
|
||||||
{ 0x000E, 0x001A} /* Cc */,
|
{ 0x000E, 0x001A} /* Cc */,
|
||||||
{ 0x001C, 0x001F} /* Cc */,
|
{ 0x001C, 0x001F} /* Cc */,
|
||||||
{ 0x007F, 0x009F} /* Cc */,
|
{ 0x007F, 0x009F} /* Cc */,
|
||||||
#if 0
|
#if 0
|
||||||
{ 0x00AD, 0x00AD} /* Cf */,
|
{ 0x00AD, 0x00AD} /* Cf */,
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2005-2009 Mark Nudelman
|
* Copyright (C) 2005-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
|
3
cmd.h
3
cmd.h
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
@ -98,6 +98,7 @@
|
|||||||
#define EC_F_COMPLETE 17
|
#define EC_F_COMPLETE 17
|
||||||
#define EC_B_COMPLETE 18
|
#define EC_B_COMPLETE 18
|
||||||
#define EC_LITERAL 19
|
#define EC_LITERAL 19
|
||||||
|
#define EC_ABORT 20
|
||||||
|
|
||||||
#define EC_NOACTION 101
|
#define EC_NOACTION 101
|
||||||
#define EC_UINVALID 102
|
#define EC_UINVALID 102
|
||||||
|
6
cmdbuf.c
6
cmdbuf.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
@ -857,6 +857,10 @@ cmd_edit(c)
|
|||||||
case EC_LINEKILL:
|
case EC_LINEKILL:
|
||||||
not_in_completion();
|
not_in_completion();
|
||||||
return (cmd_kill());
|
return (cmd_kill());
|
||||||
|
case EC_ABORT:
|
||||||
|
not_in_completion();
|
||||||
|
(void) cmd_kill();
|
||||||
|
return (CC_QUIT);
|
||||||
case EC_W_BACKSPACE:
|
case EC_W_BACKSPACE:
|
||||||
not_in_completion();
|
not_in_completion();
|
||||||
return (cmd_werase());
|
return (cmd_werase());
|
||||||
|
564
command.c
564
command.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
@ -55,8 +55,6 @@ extern int shift_count;
|
|||||||
extern int oldbot;
|
extern int oldbot;
|
||||||
extern int forw_prompt;
|
extern int forw_prompt;
|
||||||
|
|
||||||
static char ungot[UNGOT_SIZE];
|
|
||||||
static char *ungotp = NULL;
|
|
||||||
#if SHELL_ESCAPE
|
#if SHELL_ESCAPE
|
||||||
static char *shellcmd = NULL; /* For holding last shell command for "!!" */
|
static char *shellcmd = NULL; /* For holding last shell command for "!!" */
|
||||||
#endif
|
#endif
|
||||||
@ -64,7 +62,8 @@ static int mca; /* The multicharacter command (action) */
|
|||||||
static int search_type; /* The previous type of search */
|
static int search_type; /* The previous type of search */
|
||||||
static LINENUM number; /* The number typed by the user */
|
static LINENUM number; /* The number typed by the user */
|
||||||
static long fraction; /* The fractional part of the number */
|
static long fraction; /* The fractional part of the number */
|
||||||
static char optchar;
|
static struct loption *curropt;
|
||||||
|
static int opt_lower;
|
||||||
static int optflag;
|
static int optflag;
|
||||||
static int optgetname;
|
static int optgetname;
|
||||||
static POSITION bottompos;
|
static POSITION bottompos;
|
||||||
@ -73,6 +72,13 @@ static int save_hshift;
|
|||||||
static char pipec;
|
static char pipec;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
struct ungot {
|
||||||
|
struct ungot *ug_next;
|
||||||
|
char ug_char;
|
||||||
|
};
|
||||||
|
static struct ungot* ungot = NULL;
|
||||||
|
static int unget_end = 0;
|
||||||
|
|
||||||
static void multi_search();
|
static void multi_search();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -226,8 +232,8 @@ exec_mca()
|
|||||||
every_first_cmd = save(cbuf);
|
every_first_cmd = save(cbuf);
|
||||||
break;
|
break;
|
||||||
case A_OPT_TOGGLE:
|
case A_OPT_TOGGLE:
|
||||||
toggle_option(optchar, cbuf, optflag);
|
toggle_option(curropt, opt_lower, cbuf, optflag);
|
||||||
optchar = '\0';
|
curropt = NULL;
|
||||||
break;
|
break;
|
||||||
case A_F_BRACKET:
|
case A_F_BRACKET:
|
||||||
match_brac(cbuf[0], cbuf[1], 1, (int) number);
|
match_brac(cbuf[0], cbuf[1], 1, (int) number);
|
||||||
@ -280,22 +286,249 @@ exec_mca()
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Add a character to a multi-character command.
|
* Is a character an erase or kill char?
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
is_erase_char(c)
|
||||||
|
int c;
|
||||||
|
{
|
||||||
|
return (c == erase_char || c == erase2_char || c == kill_char);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Handle the first char of an option (after the initial dash).
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
mca_opt_first_char(c)
|
||||||
|
{
|
||||||
|
int flag = (optflag & ~OPT_NO_PROMPT);
|
||||||
|
if (flag == OPT_NO_TOGGLE)
|
||||||
|
{
|
||||||
|
switch (c)
|
||||||
|
{
|
||||||
|
case '_':
|
||||||
|
/* "__" = long option name. */
|
||||||
|
optgetname = TRUE;
|
||||||
|
mca_opt_toggle();
|
||||||
|
return (MCA_MORE);
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
switch (c)
|
||||||
|
{
|
||||||
|
case '+':
|
||||||
|
/* "-+" = UNSET. */
|
||||||
|
optflag = (flag == OPT_UNSET) ?
|
||||||
|
OPT_TOGGLE : OPT_UNSET;
|
||||||
|
mca_opt_toggle();
|
||||||
|
return (MCA_MORE);
|
||||||
|
case '!':
|
||||||
|
/* "-!" = SET */
|
||||||
|
optflag = (flag == OPT_SET) ?
|
||||||
|
OPT_TOGGLE : OPT_SET;
|
||||||
|
mca_opt_toggle();
|
||||||
|
return (MCA_MORE);
|
||||||
|
case CONTROL('P'):
|
||||||
|
optflag ^= OPT_NO_PROMPT;
|
||||||
|
mca_opt_toggle();
|
||||||
|
return (MCA_MORE);
|
||||||
|
case '-':
|
||||||
|
/* "--" = long option name. */
|
||||||
|
optgetname = TRUE;
|
||||||
|
mca_opt_toggle();
|
||||||
|
return (MCA_MORE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Char was not handled here. */
|
||||||
|
return (NO_MCA);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Add a char to a long option name.
|
||||||
|
* See if we've got a match for an option name yet.
|
||||||
|
* If so, display the complete name and stop
|
||||||
|
* accepting chars until user hits RETURN.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
mca_opt_nonfirst_char(c)
|
||||||
|
int c;
|
||||||
|
{
|
||||||
|
char *p;
|
||||||
|
char *oname;
|
||||||
|
|
||||||
|
if (curropt != NULL)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Already have a match for the name.
|
||||||
|
* Don't accept anything but erase/kill.
|
||||||
|
*/
|
||||||
|
if (is_erase_char(c))
|
||||||
|
return (MCA_DONE);
|
||||||
|
return (MCA_MORE);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Add char to cmd buffer and try to match
|
||||||
|
* the option name.
|
||||||
|
*/
|
||||||
|
if (cmd_char(c) == CC_QUIT)
|
||||||
|
return (MCA_DONE);
|
||||||
|
p = get_cmdbuf();
|
||||||
|
opt_lower = ASCII_IS_LOWER(p[0]);
|
||||||
|
curropt = findopt_name(&p, &oname, NULL);
|
||||||
|
if (curropt != NULL)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Got a match.
|
||||||
|
* Remember the option and
|
||||||
|
* display the full option name.
|
||||||
|
*/
|
||||||
|
cmd_reset();
|
||||||
|
mca_opt_toggle();
|
||||||
|
for (p = oname; *p != '\0'; p++)
|
||||||
|
{
|
||||||
|
c = *p;
|
||||||
|
if (!opt_lower && ASCII_IS_LOWER(c))
|
||||||
|
c = ASCII_TO_UPPER(c);
|
||||||
|
if (cmd_char(c) != CC_OK)
|
||||||
|
return (MCA_DONE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (MCA_MORE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Handle a char of an option toggle command.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
mca_opt_char(c)
|
||||||
|
int c;
|
||||||
|
{
|
||||||
|
PARG parg;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This may be a short option (single char),
|
||||||
|
* or one char of a long option name,
|
||||||
|
* or one char of the option parameter.
|
||||||
|
*/
|
||||||
|
if (curropt == NULL && len_cmdbuf() == 0)
|
||||||
|
{
|
||||||
|
int ret = mca_opt_first_char(c);
|
||||||
|
if (ret != NO_MCA)
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
if (optgetname)
|
||||||
|
{
|
||||||
|
/* We're getting a long option name. */
|
||||||
|
if (c != '\n' && c != '\r')
|
||||||
|
return (mca_opt_nonfirst_char(c));
|
||||||
|
if (curropt == NULL)
|
||||||
|
{
|
||||||
|
parg.p_string = get_cmdbuf();
|
||||||
|
error("There is no --%s option", &parg);
|
||||||
|
return (MCA_DONE);
|
||||||
|
}
|
||||||
|
optgetname = FALSE;
|
||||||
|
cmd_reset();
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
if (is_erase_char(c))
|
||||||
|
return (NO_MCA);
|
||||||
|
if (curropt != NULL)
|
||||||
|
/* We're getting the option parameter. */
|
||||||
|
return (NO_MCA);
|
||||||
|
curropt = findopt(c);
|
||||||
|
if (curropt == NULL)
|
||||||
|
{
|
||||||
|
parg.p_string = propt(c);
|
||||||
|
error("There is no %s option", &parg);
|
||||||
|
return (MCA_DONE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* If the option which was entered does not take a
|
||||||
|
* parameter, toggle the option immediately,
|
||||||
|
* so user doesn't have to hit RETURN.
|
||||||
|
*/
|
||||||
|
if ((optflag & ~OPT_NO_PROMPT) != OPT_TOGGLE ||
|
||||||
|
!opt_has_param(curropt))
|
||||||
|
{
|
||||||
|
toggle_option(curropt, ASCII_IS_LOWER(c), "", optflag);
|
||||||
|
return (MCA_DONE);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Display a prompt appropriate for the option parameter.
|
||||||
|
*/
|
||||||
|
start_mca(A_OPT_TOGGLE, opt_prompt(curropt), (void*)NULL, 0);
|
||||||
|
return (MCA_MORE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Handle a char of a search command.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
mca_search_char(c)
|
||||||
|
int c;
|
||||||
|
{
|
||||||
|
int flag = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Certain characters as the first char of
|
||||||
|
* the pattern have special meaning:
|
||||||
|
* ! Toggle the NO_MATCH flag
|
||||||
|
* * Toggle the PAST_EOF flag
|
||||||
|
* @ Toggle the FIRST_FILE flag
|
||||||
|
*/
|
||||||
|
if (len_cmdbuf() > 0)
|
||||||
|
return (NO_MCA);
|
||||||
|
|
||||||
|
switch (c)
|
||||||
|
{
|
||||||
|
case CONTROL('E'): /* ignore END of file */
|
||||||
|
case '*':
|
||||||
|
if (mca != A_FILTER)
|
||||||
|
flag = SRCH_PAST_EOF;
|
||||||
|
break;
|
||||||
|
case CONTROL('F'): /* FIRST file */
|
||||||
|
case '@':
|
||||||
|
if (mca != A_FILTER)
|
||||||
|
flag = SRCH_FIRST_FILE;
|
||||||
|
break;
|
||||||
|
case CONTROL('K'): /* KEEP position */
|
||||||
|
if (mca != A_FILTER)
|
||||||
|
flag = SRCH_NO_MOVE;
|
||||||
|
break;
|
||||||
|
case CONTROL('R'): /* Don't use REGULAR EXPRESSIONS */
|
||||||
|
flag = SRCH_NO_REGEX;
|
||||||
|
break;
|
||||||
|
case CONTROL('N'): /* NOT match */
|
||||||
|
case '!':
|
||||||
|
flag = SRCH_NO_MATCH;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (flag != 0)
|
||||||
|
{
|
||||||
|
search_type ^= flag;
|
||||||
|
mca_search();
|
||||||
|
return (MCA_MORE);
|
||||||
|
}
|
||||||
|
return (NO_MCA);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Handle a character of a multi-character command.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
mca_char(c)
|
mca_char(c)
|
||||||
int c;
|
int c;
|
||||||
{
|
{
|
||||||
char *p;
|
int ret;
|
||||||
int flag;
|
|
||||||
char buf[3];
|
|
||||||
PARG parg;
|
|
||||||
|
|
||||||
switch (mca)
|
switch (mca)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
/*
|
/*
|
||||||
* Not in a multicharacter command.
|
* We're not in a multicharacter command.
|
||||||
*/
|
*/
|
||||||
return (NO_MCA);
|
return (NO_MCA);
|
||||||
|
|
||||||
@ -318,7 +551,8 @@ mca_char(c)
|
|||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Not part of the number.
|
* Not part of the number.
|
||||||
* Treat as a normal command character.
|
* End the number and treat this char
|
||||||
|
* as a normal command character.
|
||||||
*/
|
*/
|
||||||
number = cmd_int(&fraction);
|
number = cmd_int(&fraction);
|
||||||
mca = 0;
|
mca = 0;
|
||||||
@ -328,214 +562,26 @@ mca_char(c)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case A_OPT_TOGGLE:
|
case A_OPT_TOGGLE:
|
||||||
/*
|
ret = mca_opt_char(c);
|
||||||
* Special case for the TOGGLE_OPTION command.
|
if (ret != NO_MCA)
|
||||||
* If the option letter which was entered is a
|
return (ret);
|
||||||
* single-char option, execute the command immediately,
|
break;
|
||||||
* so user doesn't have to hit RETURN.
|
|
||||||
* If the first char is + or -, this indicates
|
|
||||||
* OPT_UNSET or OPT_SET respectively, instead of OPT_TOGGLE.
|
|
||||||
* "--" begins inputting a long option name.
|
|
||||||
*/
|
|
||||||
if (optchar == '\0' && len_cmdbuf() == 0)
|
|
||||||
{
|
|
||||||
flag = (optflag & ~OPT_NO_PROMPT);
|
|
||||||
if (flag == OPT_NO_TOGGLE)
|
|
||||||
{
|
|
||||||
switch (c)
|
|
||||||
{
|
|
||||||
case '_':
|
|
||||||
/* "__" = long option name. */
|
|
||||||
optgetname = TRUE;
|
|
||||||
mca_opt_toggle();
|
|
||||||
return (MCA_MORE);
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
switch (c)
|
|
||||||
{
|
|
||||||
case '+':
|
|
||||||
/* "-+" = UNSET. */
|
|
||||||
optflag = (flag == OPT_UNSET) ?
|
|
||||||
OPT_TOGGLE : OPT_UNSET;
|
|
||||||
mca_opt_toggle();
|
|
||||||
return (MCA_MORE);
|
|
||||||
case '!':
|
|
||||||
/* "-!" = SET */
|
|
||||||
optflag = (flag == OPT_SET) ?
|
|
||||||
OPT_TOGGLE : OPT_SET;
|
|
||||||
mca_opt_toggle();
|
|
||||||
return (MCA_MORE);
|
|
||||||
case CONTROL('P'):
|
|
||||||
optflag ^= OPT_NO_PROMPT;
|
|
||||||
mca_opt_toggle();
|
|
||||||
return (MCA_MORE);
|
|
||||||
case '-':
|
|
||||||
/* "--" = long option name. */
|
|
||||||
optgetname = TRUE;
|
|
||||||
mca_opt_toggle();
|
|
||||||
return (MCA_MORE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (optgetname)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* We're getting a long option name.
|
|
||||||
* See if we've matched an option name yet.
|
|
||||||
* If so, display the complete name and stop
|
|
||||||
* accepting chars until user hits RETURN.
|
|
||||||
*/
|
|
||||||
struct loption *o;
|
|
||||||
char *oname;
|
|
||||||
int lc;
|
|
||||||
|
|
||||||
if (c == '\n' || c == '\r')
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* When the user hits RETURN, make sure
|
|
||||||
* we've matched an option name, then
|
|
||||||
* pretend he just entered the equivalent
|
|
||||||
* option letter.
|
|
||||||
*/
|
|
||||||
if (optchar == '\0')
|
|
||||||
{
|
|
||||||
parg.p_string = get_cmdbuf();
|
|
||||||
error("There is no --%s option", &parg);
|
|
||||||
return (MCA_DONE);
|
|
||||||
}
|
|
||||||
optgetname = FALSE;
|
|
||||||
cmd_reset();
|
|
||||||
c = optchar;
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
if (optchar != '\0')
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Already have a match for the name.
|
|
||||||
* Don't accept anything but erase/kill.
|
|
||||||
*/
|
|
||||||
if (c == erase_char ||
|
|
||||||
c == erase2_char ||
|
|
||||||
c == kill_char)
|
|
||||||
return (MCA_DONE);
|
|
||||||
return (MCA_MORE);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* Add char to cmd buffer and try to match
|
|
||||||
* the option name.
|
|
||||||
*/
|
|
||||||
if (cmd_char(c) == CC_QUIT)
|
|
||||||
return (MCA_DONE);
|
|
||||||
p = get_cmdbuf();
|
|
||||||
lc = ASCII_IS_LOWER(p[0]);
|
|
||||||
o = findopt_name(&p, &oname, NULL);
|
|
||||||
if (o != NULL)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Got a match.
|
|
||||||
* Remember the option letter and
|
|
||||||
* display the full option name.
|
|
||||||
*/
|
|
||||||
optchar = o->oletter;
|
|
||||||
if (!lc && ASCII_IS_LOWER(optchar))
|
|
||||||
optchar = ASCII_TO_UPPER(optchar);
|
|
||||||
cmd_reset();
|
|
||||||
mca_opt_toggle();
|
|
||||||
for (p = oname; *p != '\0'; p++)
|
|
||||||
{
|
|
||||||
c = *p;
|
|
||||||
if (!lc && ASCII_IS_LOWER(c))
|
|
||||||
c = ASCII_TO_UPPER(c);
|
|
||||||
if (cmd_char(c) != CC_OK)
|
|
||||||
return (MCA_DONE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return (MCA_MORE);
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
if (c == erase_char || c == erase2_char || c == kill_char)
|
|
||||||
break;
|
|
||||||
if (optchar != '\0')
|
|
||||||
/* We already have the option letter. */
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
optchar = c;
|
|
||||||
if ((optflag & ~OPT_NO_PROMPT) != OPT_TOGGLE ||
|
|
||||||
single_char_option(c))
|
|
||||||
{
|
|
||||||
toggle_option(c, "", optflag);
|
|
||||||
return (MCA_DONE);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* Display a prompt appropriate for the option letter.
|
|
||||||
*/
|
|
||||||
if ((p = opt_prompt(c)) == NULL)
|
|
||||||
{
|
|
||||||
buf[0] = '-';
|
|
||||||
buf[1] = c;
|
|
||||||
buf[2] = '\0';
|
|
||||||
p = buf;
|
|
||||||
}
|
|
||||||
start_mca(A_OPT_TOGGLE, p, (void*)NULL, 0);
|
|
||||||
return (MCA_MORE);
|
|
||||||
|
|
||||||
case A_F_SEARCH:
|
case A_F_SEARCH:
|
||||||
case A_B_SEARCH:
|
case A_B_SEARCH:
|
||||||
case A_FILTER:
|
case A_FILTER:
|
||||||
/*
|
ret = mca_search_char(c);
|
||||||
* Special case for search commands.
|
if (ret != NO_MCA)
|
||||||
* Certain characters as the first char of
|
return (ret);
|
||||||
* the pattern have special meaning:
|
break;
|
||||||
* ! Toggle the NO_MATCH flag
|
|
||||||
* * Toggle the PAST_EOF flag
|
|
||||||
* @ Toggle the FIRST_FILE flag
|
|
||||||
*/
|
|
||||||
if (len_cmdbuf() > 0)
|
|
||||||
/*
|
|
||||||
* Only works for the first char of the pattern.
|
|
||||||
*/
|
|
||||||
break;
|
|
||||||
|
|
||||||
flag = 0;
|
default:
|
||||||
switch (c)
|
/* Other multicharacter command. */
|
||||||
{
|
|
||||||
case CONTROL('E'): /* ignore END of file */
|
|
||||||
case '*':
|
|
||||||
if (mca != A_FILTER)
|
|
||||||
flag = SRCH_PAST_EOF;
|
|
||||||
break;
|
|
||||||
case CONTROL('F'): /* FIRST file */
|
|
||||||
case '@':
|
|
||||||
if (mca != A_FILTER)
|
|
||||||
flag = SRCH_FIRST_FILE;
|
|
||||||
break;
|
|
||||||
case CONTROL('K'): /* KEEP position */
|
|
||||||
if (mca != A_FILTER)
|
|
||||||
flag = SRCH_NO_MOVE;
|
|
||||||
break;
|
|
||||||
case CONTROL('R'): /* Don't use REGULAR EXPRESSIONS */
|
|
||||||
flag = SRCH_NO_REGEX;
|
|
||||||
break;
|
|
||||||
case CONTROL('N'): /* NOT match */
|
|
||||||
case '!':
|
|
||||||
flag = SRCH_NO_MATCH;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (flag != 0)
|
|
||||||
{
|
|
||||||
search_type ^= flag;
|
|
||||||
mca_search();
|
|
||||||
return (MCA_MORE);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Any other multicharacter command
|
* The multichar command is terminated by a newline.
|
||||||
* is terminated by a newline.
|
|
||||||
*/
|
*/
|
||||||
if (c == '\n' || c == '\r')
|
if (c == '\n' || c == '\r')
|
||||||
{
|
{
|
||||||
@ -635,7 +681,7 @@ prompt()
|
|||||||
{
|
{
|
||||||
register char *p;
|
register char *p;
|
||||||
|
|
||||||
if (ungotp != NULL && ungotp > ungot)
|
if (ungot != NULL)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* No prompt necessary if commands are from
|
* No prompt necessary if commands are from
|
||||||
@ -725,47 +771,58 @@ dispversion()
|
|||||||
public int
|
public int
|
||||||
getcc()
|
getcc()
|
||||||
{
|
{
|
||||||
if (ungotp == NULL)
|
if (unget_end)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* We have just run out of ungotten chars.
|
||||||
|
*/
|
||||||
|
unget_end = 0;
|
||||||
|
if (len_cmdbuf() == 0 || !empty_screen())
|
||||||
|
return (getchr());
|
||||||
|
/*
|
||||||
|
* Command is incomplete, so try to complete it.
|
||||||
|
*/
|
||||||
|
switch (mca)
|
||||||
|
{
|
||||||
|
case A_DIGIT:
|
||||||
|
/*
|
||||||
|
* We have a number but no command. Treat as #g.
|
||||||
|
*/
|
||||||
|
return ('g');
|
||||||
|
|
||||||
|
case A_F_SEARCH:
|
||||||
|
case A_B_SEARCH:
|
||||||
|
/*
|
||||||
|
* We have "/string" but no newline. Add the \n.
|
||||||
|
*/
|
||||||
|
return ('\n');
|
||||||
|
|
||||||
|
default:
|
||||||
|
/*
|
||||||
|
* Some other incomplete command. Let user complete it.
|
||||||
|
*/
|
||||||
|
return (getchr());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ungot == NULL)
|
||||||
|
{
|
||||||
/*
|
/*
|
||||||
* Normal case: no ungotten chars, so get one from the user.
|
* Normal case: no ungotten chars, so get one from the user.
|
||||||
*/
|
*/
|
||||||
return (getchr());
|
return (getchr());
|
||||||
|
}
|
||||||
if (ungotp > ungot)
|
|
||||||
/*
|
|
||||||
* Return the next ungotten char.
|
|
||||||
*/
|
|
||||||
return (*--ungotp);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We have just run out of ungotten chars.
|
* Return the next ungotten char.
|
||||||
*/
|
*/
|
||||||
ungotp = NULL;
|
|
||||||
if (len_cmdbuf() == 0 || !empty_screen())
|
|
||||||
return (getchr());
|
|
||||||
/*
|
|
||||||
* Command is incomplete, so try to complete it.
|
|
||||||
*/
|
|
||||||
switch (mca)
|
|
||||||
{
|
{
|
||||||
case A_DIGIT:
|
struct ungot *ug = ungot;
|
||||||
/*
|
char c = ug->ug_char;
|
||||||
* We have a number but no command. Treat as #g.
|
ungot = ug->ug_next;
|
||||||
*/
|
free(ug);
|
||||||
return ('g');
|
unget_end = (ungot == NULL);
|
||||||
|
return (c);
|
||||||
case A_F_SEARCH:
|
|
||||||
case A_B_SEARCH:
|
|
||||||
/*
|
|
||||||
* We have "/string" but no newline. Add the \n.
|
|
||||||
*/
|
|
||||||
return ('\n');
|
|
||||||
|
|
||||||
default:
|
|
||||||
/*
|
|
||||||
* Some other incomplete command. Let user complete it.
|
|
||||||
*/
|
|
||||||
return (getchr());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -777,14 +834,11 @@ getcc()
|
|||||||
ungetcc(c)
|
ungetcc(c)
|
||||||
int c;
|
int c;
|
||||||
{
|
{
|
||||||
if (ungotp == NULL)
|
struct ungot *ug = (struct ungot *) ecalloc(1, sizeof(struct ungot));
|
||||||
ungotp = ungot;
|
|
||||||
if (ungotp >= ungot + sizeof(ungot))
|
ug->ug_char = c;
|
||||||
{
|
ug->ug_next = ungot;
|
||||||
error("ungetcc overflow", NULL_PARG);
|
ungot = ug;
|
||||||
quit(QUIT_ERROR);
|
|
||||||
}
|
|
||||||
*ungotp++ = c;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -927,7 +981,7 @@ commands()
|
|||||||
mca = 0;
|
mca = 0;
|
||||||
cmd_accept();
|
cmd_accept();
|
||||||
number = 0;
|
number = 0;
|
||||||
optchar = '\0';
|
curropt = NULL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* See if any signals need processing.
|
* See if any signals need processing.
|
||||||
|
16
configure.ac
16
configure.ac
@ -1,6 +1,6 @@
|
|||||||
# Process this file with autoconf to produce a configure script.
|
# Process this file with autoconf to produce a configure script.
|
||||||
|
|
||||||
# Copyright (C) 1984-2009 Mark Nudelman
|
# Copyright (C) 1984-2011 Mark Nudelman
|
||||||
#
|
#
|
||||||
# You may distribute under the terms of either the GNU General Public
|
# You may distribute under the terms of either the GNU General Public
|
||||||
# License or the Less License, as specified in the README file.
|
# License or the Less License, as specified in the README file.
|
||||||
@ -195,6 +195,8 @@ AH_TEMPLATE([HAVE_REGEXEC2],
|
|||||||
[])
|
[])
|
||||||
AH_TEMPLATE([HAVE_VOID],
|
AH_TEMPLATE([HAVE_VOID],
|
||||||
[Define HAVE_VOID if your compiler supports the "void" type.])
|
[Define HAVE_VOID if your compiler supports the "void" type.])
|
||||||
|
AH_TEMPLATE([HAVE_FLOAT],
|
||||||
|
[Define HAVE_FLOAT if your compiler supports the "double" type.])
|
||||||
AH_TEMPLATE([HAVE_CONST],
|
AH_TEMPLATE([HAVE_CONST],
|
||||||
[Define HAVE_CONST if your compiler supports the "const" modifier.])
|
[Define HAVE_CONST if your compiler supports the "const" modifier.])
|
||||||
AH_TEMPLATE([HAVE_STAT_INO],
|
AH_TEMPLATE([HAVE_STAT_INO],
|
||||||
@ -366,6 +368,18 @@ AC_ARG_WITH(secure,
|
|||||||
[ --with-secure Compile in secure mode],
|
[ --with-secure Compile in secure mode],
|
||||||
AC_DEFINE(SECURE_COMPILE, 1), AC_DEFINE(SECURE_COMPILE, 0))
|
AC_DEFINE(SECURE_COMPILE, 1), AC_DEFINE(SECURE_COMPILE, 0))
|
||||||
|
|
||||||
|
# Should we use floating point?
|
||||||
|
AC_MSG_CHECKING(for floating point)
|
||||||
|
AC_ARG_WITH(no-float,
|
||||||
|
[ --with-no-float Do not use floating point],
|
||||||
|
WANT_NO_FLOAT=1, WANT_NO_FLOAT=0)
|
||||||
|
if test $WANT_NO_FLOAT = 0; then
|
||||||
|
AC_TRY_LINK(, [double f1 = 12.5; double f2 = f1*f1/2.5;],
|
||||||
|
[AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FLOAT)], [AC_MSG_RESULT(no)])
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT(disabled by user)
|
||||||
|
fi
|
||||||
|
|
||||||
# Checks for regular expression functions.
|
# Checks for regular expression functions.
|
||||||
have_regex=no
|
have_regex=no
|
||||||
have_posix_regex=unknown
|
have_posix_regex=unknown
|
||||||
|
2
cvt.c
2
cvt.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
|
3
decode.c
3
decode.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
@ -202,6 +202,7 @@ static unsigned char edittable[] =
|
|||||||
SK(SK_UP_ARROW),0, EC_UP, /* UPARROW */
|
SK(SK_UP_ARROW),0, EC_UP, /* UPARROW */
|
||||||
ESC,'j',0, EC_DOWN, /* ESC j */
|
ESC,'j',0, EC_DOWN, /* ESC j */
|
||||||
SK(SK_DOWN_ARROW),0, EC_DOWN, /* DOWNARROW */
|
SK(SK_DOWN_ARROW),0, EC_DOWN, /* DOWNARROW */
|
||||||
|
CONTROL('G'),0, EC_ABORT, /* CTRL-G */
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
|
@ -219,6 +219,9 @@
|
|||||||
/* Define HAVE_FILENO if you have the fileno() macro. */
|
/* Define HAVE_FILENO if you have the fileno() macro. */
|
||||||
#undef HAVE_FILENO
|
#undef HAVE_FILENO
|
||||||
|
|
||||||
|
/* Define HAVE_FLOAT if your compiler supports the "double" type. */
|
||||||
|
#undef HAVE_FLOAT
|
||||||
|
|
||||||
/* Define to 1 if you have the `fsync' function. */
|
/* Define to 1 if you have the `fsync' function. */
|
||||||
#undef HAVE_FSYNC
|
#undef HAVE_FSYNC
|
||||||
|
|
||||||
@ -386,6 +389,9 @@
|
|||||||
/* Define to the one symbol short name of this package. */
|
/* Define to the one symbol short name of this package. */
|
||||||
#undef PACKAGE_TARNAME
|
#undef PACKAGE_TARNAME
|
||||||
|
|
||||||
|
/* Define to the home page for this package. */
|
||||||
|
#undef PACKAGE_URL
|
||||||
|
|
||||||
/* Define to the version of this package. */
|
/* Define to the version of this package. */
|
||||||
#undef PACKAGE_VERSION
|
#undef PACKAGE_VERSION
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
|
12
defines.wn
12
defines.wn
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
@ -272,7 +272,7 @@
|
|||||||
#define HAVE_SYSTEM 1
|
#define HAVE_SYSTEM 1
|
||||||
|
|
||||||
/* Define if you have the snprintf function. */
|
/* Define if you have the snprintf function. */
|
||||||
#define HAVE_SNPRINTF 0
|
#define HAVE_SNPRINTF 1
|
||||||
|
|
||||||
/* Define if you have the <ctype.h> header file. */
|
/* Define if you have the <ctype.h> header file. */
|
||||||
#define HAVE_CTYPE_H 1
|
#define HAVE_CTYPE_H 1
|
||||||
@ -286,8 +286,11 @@
|
|||||||
/* Define if you have the <fcntl.h> header file. */
|
/* Define if you have the <fcntl.h> header file. */
|
||||||
#define HAVE_FCNTL_H 1
|
#define HAVE_FCNTL_H 1
|
||||||
|
|
||||||
|
/* Define HAVE_FLOAT if your compiler supports the "double" type. */
|
||||||
|
#define HAVE_FLOAT 1
|
||||||
|
|
||||||
/* Define if you have the <limits.h> header file. */
|
/* Define if you have the <limits.h> header file. */
|
||||||
#define HAVE_LIMITS_H 0
|
#define HAVE_LIMITS_H 1
|
||||||
|
|
||||||
/* Define if you have the <stdio.h> header file. */
|
/* Define if you have the <stdio.h> header file. */
|
||||||
#define HAVE_STDIO_H 1
|
#define HAVE_STDIO_H 1
|
||||||
@ -331,3 +334,6 @@
|
|||||||
|
|
||||||
#define popen _popen
|
#define popen _popen
|
||||||
#define pclose _pclose
|
#define pclose _pclose
|
||||||
|
#define snprintf _snprintf
|
||||||
|
|
||||||
|
#pragma warning(disable:4996)
|
||||||
|
2
edit.c
2
edit.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
|
22
filename.c
22
filename.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
@ -400,6 +400,7 @@ fexpand(s)
|
|||||||
return (e);
|
return (e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if TAB_COMPLETE_FILENAME
|
#if TAB_COMPLETE_FILENAME
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1057,3 +1058,22 @@ shell_coption()
|
|||||||
{
|
{
|
||||||
return ("-c");
|
return ("-c");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return last component of a pathname.
|
||||||
|
*/
|
||||||
|
public char *
|
||||||
|
last_component(name)
|
||||||
|
char *name;
|
||||||
|
{
|
||||||
|
char *slash;
|
||||||
|
|
||||||
|
for (slash = name + strlen(name); slash > name; )
|
||||||
|
{
|
||||||
|
--slash;
|
||||||
|
if (*slash == *PATHNAME_SEP || *slash == '/')
|
||||||
|
return (slash + 1);
|
||||||
|
}
|
||||||
|
return (name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
|
4
funcs.h
4
funcs.h
@ -127,6 +127,7 @@
|
|||||||
public char * bad_file ();
|
public char * bad_file ();
|
||||||
public POSITION filesize ();
|
public POSITION filesize ();
|
||||||
public char * shell_coption ();
|
public char * shell_coption ();
|
||||||
|
public char * last_component ();
|
||||||
public int eof_displayed ();
|
public int eof_displayed ();
|
||||||
public int entire_file_displayed ();
|
public int entire_file_displayed ();
|
||||||
public void squish_check ();
|
public void squish_check ();
|
||||||
@ -211,9 +212,10 @@
|
|||||||
public void opt_quote ();
|
public void opt_quote ();
|
||||||
public void opt_query ();
|
public void opt_query ();
|
||||||
public int get_swindow ();
|
public int get_swindow ();
|
||||||
|
public char * propt ();
|
||||||
public void scan_option ();
|
public void scan_option ();
|
||||||
public void toggle_option ();
|
public void toggle_option ();
|
||||||
public int single_char_option ();
|
public int opt_has_param ();
|
||||||
public char * opt_prompt ();
|
public char * opt_prompt ();
|
||||||
public int isoptpending ();
|
public int isoptpending ();
|
||||||
public void nopendopt ();
|
public void nopendopt ();
|
||||||
|
9
help.c
9
help.c
@ -115,6 +115,8 @@ constant char helpdata[] = {
|
|||||||
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','i','s','p','l','a','y',' ','h','e','l','p',' ','(','f','r','o','m',' ','c','o','m','m','a','n','d',' ','l','i','n','e',')','.','\n',
|
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','i','s','p','l','a','y',' ','h','e','l','p',' ','(','f','r','o','m',' ','c','o','m','m','a','n','d',' ','l','i','n','e',')','.','\n',
|
||||||
' ',' ','-','a',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','s','e','a','r','c','h','-','s','k','i','p','-','s','c','r','e','e','n','\n',
|
' ',' ','-','a',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','s','e','a','r','c','h','-','s','k','i','p','-','s','c','r','e','e','n','\n',
|
||||||
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','F','o','r','w','a','r','d',' ','s','e','a','r','c','h',' ','s','k','i','p','s',' ','c','u','r','r','e','n','t',' ','s','c','r','e','e','n','.','\n',
|
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','F','o','r','w','a','r','d',' ','s','e','a','r','c','h',' ','s','k','i','p','s',' ','c','u','r','r','e','n','t',' ','s','c','r','e','e','n','.','\n',
|
||||||
|
' ',' ','-','A',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','S','E','A','R','C','H','-','S','K','I','P','-','S','C','R','E','E','N','\n',
|
||||||
|
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','F','o','r','w','a','r','d',' ','s','e','a','r','c','h',' ','a','l','w','a','y','s',' ','s','k','i','p','s',' ','t','a','r','g','e','t',' ','l','i','n','e','.','\n',
|
||||||
' ',' ','-','b',' ','[','_','\b','N',']',' ',' ','.','.','.','.',' ',' ','-','-','b','u','f','f','e','r','s','=','[','_','\b','N',']','\n',
|
' ',' ','-','b',' ','[','_','\b','N',']',' ',' ','.','.','.','.',' ',' ','-','-','b','u','f','f','e','r','s','=','[','_','\b','N',']','\n',
|
||||||
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','N','u','m','b','e','r',' ','o','f',' ','b','u','f','f','e','r','s','.','\n',
|
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','N','u','m','b','e','r',' ','o','f',' ','b','u','f','f','e','r','s','.','\n',
|
||||||
' ',' ','-','B',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','a','u','t','o','-','b','u','f','f','e','r','s','\n',
|
' ',' ','-','B',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','a','u','t','o','-','b','u','f','f','e','r','s','\n',
|
||||||
@ -147,6 +149,8 @@ constant char helpdata[] = {
|
|||||||
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','i','s','p','l','a','y',' ','a',' ','s','t','a','t','u','s',' ','c','o','l','u','m','n',' ','a','t',' ','l','e','f','t',' ','e','d','g','e',' ','o','f',' ','s','c','r','e','e','n','.','\n',
|
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','i','s','p','l','a','y',' ','a',' ','s','t','a','t','u','s',' ','c','o','l','u','m','n',' ','a','t',' ','l','e','f','t',' ','e','d','g','e',' ','o','f',' ','s','c','r','e','e','n','.','\n',
|
||||||
' ',' ','-','k',' ','[','_','\b','f','_','\b','i','_','\b','l','_','\b','e',']',' ',' ','.',' ',' ','-','-','l','e','s','s','k','e','y','-','f','i','l','e','=','[','_','\b','f','_','\b','i','_','\b','l','_','\b','e',']','\n',
|
' ',' ','-','k',' ','[','_','\b','f','_','\b','i','_','\b','l','_','\b','e',']',' ',' ','.',' ',' ','-','-','l','e','s','s','k','e','y','-','f','i','l','e','=','[','_','\b','f','_','\b','i','_','\b','l','_','\b','e',']','\n',
|
||||||
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','U','s','e',' ','a',' ','l','e','s','s','k','e','y',' ','f','i','l','e','.','\n',
|
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','U','s','e',' ','a',' ','l','e','s','s','k','e','y',' ','f','i','l','e','.','\n',
|
||||||
|
' ',' ','-','K',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','-','-','q','u','i','t','-','o','n','-','i','n','t','r','\n',
|
||||||
|
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','E','x','i','t',' ','l','e','s','s',' ','i','n',' ','r','e','s','p','o','n','s','e',' ','t','o',' ','c','t','r','l','-','C','.','\n',
|
||||||
' ',' ','-','L',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','n','o','-','l','e','s','s','o','p','e','n','\n',
|
' ',' ','-','L',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','n','o','-','l','e','s','s','o','p','e','n','\n',
|
||||||
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','I','g','n','o','r','e',' ','t','h','e',' ','L','E','S','S','O','P','E','N',' ','e','n','v','i','r','o','n','m','e','n','t',' ','v','a','r','i','a','b','l','e','.','\n',
|
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','I','g','n','o','r','e',' ','t','h','e',' ','L','E','S','S','O','P','E','N',' ','e','n','v','i','r','o','n','m','e','n','t',' ','v','a','r','i','a','b','l','e','.','\n',
|
||||||
' ',' ','-','m',' ',' ','-','M',' ',' ','.','.','.','.',' ',' ','-','-','l','o','n','g','-','p','r','o','m','p','t',' ',' ','-','-','L','O','N','G','-','P','R','O','M','P','T','\n',
|
' ',' ','-','m',' ',' ','-','M',' ',' ','.','.','.','.',' ',' ','-','-','l','o','n','g','-','p','r','o','m','p','t',' ',' ','-','-','L','O','N','G','-','P','R','O','M','P','T','\n',
|
||||||
@ -197,6 +201,11 @@ constant char helpdata[] = {
|
|||||||
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','o','n','\'','t',' ','d','i','s','p','l','a','y',' ','t','i','l','d','e','s',' ','a','f','t','e','r',' ','e','n','d',' ','o','f',' ','f','i','l','e','.','\n',
|
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','o','n','\'','t',' ','d','i','s','p','l','a','y',' ','t','i','l','d','e','s',' ','a','f','t','e','r',' ','e','n','d',' ','o','f',' ','f','i','l','e','.','\n',
|
||||||
' ',' ','-','#',' ','[','_','\b','N',']',' ',' ','.','.','.','.',' ',' ','-','-','s','h','i','f','t','=','[','_','\b','N',']','\n',
|
' ',' ','-','#',' ','[','_','\b','N',']',' ',' ','.','.','.','.',' ',' ','-','-','s','h','i','f','t','=','[','_','\b','N',']','\n',
|
||||||
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','H','o','r','i','z','o','n','t','a','l',' ','s','c','r','o','l','l',' ','a','m','o','u','n','t',' ','(','0',' ','=',' ','o','n','e',' ','h','a','l','f',' ','s','c','r','e','e','n',' ','w','i','d','t','h',')','\n',
|
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','H','o','r','i','z','o','n','t','a','l',' ','s','c','r','o','l','l',' ','a','m','o','u','n','t',' ','(','0',' ','=',' ','o','n','e',' ','h','a','l','f',' ','s','c','r','e','e','n',' ','w','i','d','t','h',')','\n',
|
||||||
|
' ',' ',' ',' ',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','n','o','-','k','e','y','p','a','d','\n',
|
||||||
|
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','o','n','\'','t',' ','s','e','n','d',' ','k','e','y','p','a','d',' ','i','n','i','t','/','d','e','i','n','i','t',' ','s','e','q','u','e','n','c','e','.','\n',
|
||||||
|
' ',' ',' ',' ',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','f','o','l','l','o','w','-','n','a','m','e','\n',
|
||||||
|
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','T','h','e',' ','F',' ','c','o','m','m','a','n','d',' ','c','h','a','n','g','e','s',' ','f','i','l','e','s',' ','i','f',' ','t','h','e',' ','i','n','p','u','t',' ','f','i','l','e',' ','i','s',' ','r','e','n','a','m','e','d','.','\n',
|
||||||
|
'\n',
|
||||||
'\n',
|
'\n',
|
||||||
' ','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','\n',
|
' ','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','\n',
|
||||||
'\n',
|
'\n',
|
||||||
|
2
ifile.c
2
ifile.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
|
7
input.c
7
input.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
@ -181,6 +181,11 @@ forw_line(curr_pos)
|
|||||||
{
|
{
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
if (ABORT_SIGS())
|
||||||
|
{
|
||||||
|
null_line();
|
||||||
|
return (NULL_POSITION);
|
||||||
|
}
|
||||||
c = ch_forw_get();
|
c = ch_forw_get();
|
||||||
} while (c != '\n' && c != EOI);
|
} while (c != '\n' && c != EOI);
|
||||||
new_pos = ch_tell();
|
new_pos = ch_tell();
|
||||||
|
2
jump.c
2
jump.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
|
4
less.h
4
less.h
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
@ -344,6 +344,7 @@ struct textlist
|
|||||||
#define SRCH_FIRST_FILE (1 << 10) /* Search starting at the first file */
|
#define SRCH_FIRST_FILE (1 << 10) /* Search starting at the first file */
|
||||||
#define SRCH_NO_REGEX (1 << 12) /* Don't use regular expressions */
|
#define SRCH_NO_REGEX (1 << 12) /* Don't use regular expressions */
|
||||||
#define SRCH_FILTER (1 << 13) /* Search is for '&' (filter) command */
|
#define SRCH_FILTER (1 << 13) /* Search is for '&' (filter) command */
|
||||||
|
#define SRCH_AFTER_TARGET (1 << 14) /* Start search after the target line */
|
||||||
|
|
||||||
#define SRCH_REVERSE(t) (((t) & SRCH_FORW) ? \
|
#define SRCH_REVERSE(t) (((t) & SRCH_FORW) ? \
|
||||||
(((t) & ~SRCH_FORW) | SRCH_BACK) : \
|
(((t) & ~SRCH_FORW) | SRCH_BACK) : \
|
||||||
@ -473,6 +474,7 @@ struct textlist
|
|||||||
|
|
||||||
#define QUIT_OK 0
|
#define QUIT_OK 0
|
||||||
#define QUIT_ERROR 1
|
#define QUIT_ERROR 1
|
||||||
|
#define QUIT_INTERRUPT 2
|
||||||
#define QUIT_SAVED_STATUS (-1)
|
#define QUIT_SAVED_STATUS (-1)
|
||||||
|
|
||||||
#define FOLLOW_DESC 0
|
#define FOLLOW_DESC 0
|
||||||
|
9
less.hlp
9
less.hlp
@ -112,6 +112,8 @@
|
|||||||
Display help (from command line).
|
Display help (from command line).
|
||||||
-a ........ --search-skip-screen
|
-a ........ --search-skip-screen
|
||||||
Forward search skips current screen.
|
Forward search skips current screen.
|
||||||
|
-A ........ --SEARCH-SKIP-SCREEN
|
||||||
|
Forward search always skips target line.
|
||||||
-b [_N] .... --buffers=[_N]
|
-b [_N] .... --buffers=[_N]
|
||||||
Number of buffers.
|
Number of buffers.
|
||||||
-B ........ --auto-buffers
|
-B ........ --auto-buffers
|
||||||
@ -144,6 +146,8 @@
|
|||||||
Display a status column at left edge of screen.
|
Display a status column at left edge of screen.
|
||||||
-k [_f_i_l_e] . --lesskey-file=[_f_i_l_e]
|
-k [_f_i_l_e] . --lesskey-file=[_f_i_l_e]
|
||||||
Use a lesskey file.
|
Use a lesskey file.
|
||||||
|
-K --quit-on-intr
|
||||||
|
Exit less in response to ctrl-C.
|
||||||
-L ........ --no-lessopen
|
-L ........ --no-lessopen
|
||||||
Ignore the LESSOPEN environment variable.
|
Ignore the LESSOPEN environment variable.
|
||||||
-m -M .... --long-prompt --LONG-PROMPT
|
-m -M .... --long-prompt --LONG-PROMPT
|
||||||
@ -194,6 +198,11 @@
|
|||||||
Don't display tildes after end of file.
|
Don't display tildes after end of file.
|
||||||
-# [_N] .... --shift=[_N]
|
-# [_N] .... --shift=[_N]
|
||||||
Horizontal scroll amount (0 = one half screen width)
|
Horizontal scroll amount (0 = one half screen width)
|
||||||
|
........ --no-keypad
|
||||||
|
Don't send keypad init/deinit sequence.
|
||||||
|
........ --follow-name
|
||||||
|
The F command changes files if the input file is renamed.
|
||||||
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
52
less.nro
52
less.nro
@ -1,4 +1,4 @@
|
|||||||
.TH LESS 1 "Version 436: 07 Jul 2009"
|
.TH LESS 1 "Version 443: 09 Apr 2011"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
less \- opposite of more
|
less \- opposite of more
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@ -10,7 +10,7 @@ less \- opposite of more
|
|||||||
.br
|
.br
|
||||||
.B "less \-\-version"
|
.B "less \-\-version"
|
||||||
.br
|
.br
|
||||||
.B "less [\-[+]aBcCdeEfFgGiIJKLmMnNqQrRsSuUVwWX~]"
|
.B "less [\-[+]aABcCdeEfFgGiIJKLmMnNqQrRsSuUVwWX~]"
|
||||||
.br
|
.br
|
||||||
.B " [\-b \fIspace\fP] [\-h \fIlines\fP] [\-j \fIline\fP] [\-k \fIkeyfile\fP]"
|
.B " [\-b \fIspace\fP] [\-h \fIlines\fP] [\-j \fIline\fP] [\-k \fIkeyfile\fP]"
|
||||||
.br
|
.br
|
||||||
@ -65,7 +65,7 @@ Like SPACE, but if N is specified, it becomes the new window size.
|
|||||||
.IP "ESC-SPACE"
|
.IP "ESC-SPACE"
|
||||||
Like SPACE, but scrolls a full screenful, even if it reaches
|
Like SPACE, but scrolls a full screenful, even if it reaches
|
||||||
end-of-file in the process.
|
end-of-file in the process.
|
||||||
.IP "RETURN or ^N or e or ^E or j or ^J"
|
.IP "ENTER or RETURN or ^N or e or ^E or j or ^J"
|
||||||
Scroll forward N lines, default 1.
|
Scroll forward N lines, default 1.
|
||||||
The entire N lines are displayed, even if N is more than the screen size.
|
The entire N lines are displayed, even if N is more than the screen size.
|
||||||
.IP "d or ^D"
|
.IP "d or ^D"
|
||||||
@ -178,7 +178,7 @@ Search forward in the file for the N-th line containing the pattern.
|
|||||||
N defaults to 1.
|
N defaults to 1.
|
||||||
The pattern is a regular expression, as recognized by
|
The pattern is a regular expression, as recognized by
|
||||||
the regular expression library supplied by your system.
|
the regular expression library supplied by your system.
|
||||||
The search starts at the second line displayed
|
The search starts at the first line displayed
|
||||||
(but see the \-a and \-j options, which change this).
|
(but see the \-a and \-j options, which change this).
|
||||||
.sp
|
.sp
|
||||||
Certain characters are special
|
Certain characters are special
|
||||||
@ -333,7 +333,7 @@ the current setting is printed and nothing is changed.
|
|||||||
.IP \-\-
|
.IP \-\-
|
||||||
Like the \- command, but takes a long option name (see OPTIONS below)
|
Like the \- command, but takes a long option name (see OPTIONS below)
|
||||||
rather than a single option letter.
|
rather than a single option letter.
|
||||||
You must press RETURN after typing the option name.
|
You must press ENTER or RETURN after typing the option name.
|
||||||
A ^P immediately after the second dash suppresses printing of a
|
A ^P immediately after the second dash suppresses printing of a
|
||||||
message describing the new setting, as in the \- command.
|
message describing the new setting, as in the \- command.
|
||||||
.IP \-+
|
.IP \-+
|
||||||
@ -363,7 +363,7 @@ The setting of the option is not changed.
|
|||||||
(Double underscore.)
|
(Double underscore.)
|
||||||
Like the _ (underscore) command, but takes a long option name
|
Like the _ (underscore) command, but takes a long option name
|
||||||
rather than a single option letter.
|
rather than a single option letter.
|
||||||
You must press RETURN after typing the option name.
|
You must press ENTER or RETURN after typing the option name.
|
||||||
.IP +cmd
|
.IP +cmd
|
||||||
Causes the specified cmd to be executed each time a new file is examined.
|
Causes the specified cmd to be executed each time a new file is examined.
|
||||||
For example, +G causes
|
For example, +G causes
|
||||||
@ -465,11 +465,24 @@ This option displays a summary of the commands accepted by
|
|||||||
(Depending on how your shell interprets the question mark,
|
(Depending on how your shell interprets the question mark,
|
||||||
it may be necessary to quote the question mark, thus: "\-\e?".)
|
it may be necessary to quote the question mark, thus: "\-\e?".)
|
||||||
.IP "\-a or \-\-search-skip-screen"
|
.IP "\-a or \-\-search-skip-screen"
|
||||||
Causes searches to start after the last line
|
By default, forward searches start at the top of the displayed screen
|
||||||
displayed on the screen,
|
and backwards searches start at the bottom of the displayed screen
|
||||||
|
(except for repeated searches invoked by the n or N commands,
|
||||||
|
which start after or before the "target" line respectively;
|
||||||
|
see the \-j option for more about the target line).
|
||||||
|
The \-a option causes forward searches to instead start at
|
||||||
|
the bottom of the screen
|
||||||
|
and backward searches to start at the top of the screen,
|
||||||
thus skipping all lines displayed on the screen.
|
thus skipping all lines displayed on the screen.
|
||||||
By default, searches start at the second line on the screen
|
.IP "\-A or \-\-SEARCH-SKIP-SCREEN"
|
||||||
(or after the last found line; see the \-j option).
|
Causes all forward searches (not just non-repeated searches)
|
||||||
|
to start just after the target line, and all backward searches
|
||||||
|
to start just before the target line.
|
||||||
|
Thus, forward searches will skip part of the displayed screen
|
||||||
|
(from the first line up to and including the target line).
|
||||||
|
Similarly backwards searches will skip the displayed screen
|
||||||
|
from the last line up to and including the target line.
|
||||||
|
This was the default behavior in less versions prior to 441.
|
||||||
.IP "\-b\fIn\fP or \-\-buffers=\fIn\fP"
|
.IP "\-b\fIn\fP or \-\-buffers=\fIn\fP"
|
||||||
Specifies the amount of buffer space
|
Specifies the amount of buffer space
|
||||||
.I less
|
.I less
|
||||||
@ -590,7 +603,8 @@ is recalculated if the terminal window is resized, so that the
|
|||||||
target line remains at the specified fraction of the screen height.
|
target line remains at the specified fraction of the screen height.
|
||||||
If any form of the \-j option is used,
|
If any form of the \-j option is used,
|
||||||
forward searches begin at the line immediately after the target line,
|
forward searches begin at the line immediately after the target line,
|
||||||
and backward searches begin at the target line.
|
and backward searches begin at the target line,
|
||||||
|
unless changed by \-a or \-A.
|
||||||
For example, if "\-j4" is used, the target line is the
|
For example, if "\-j4" is used, the target line is the
|
||||||
fourth line on the screen, so forward searches begin at the fifth line
|
fourth line on the screen, so forward searches begin at the fifth line
|
||||||
on the screen.
|
on the screen.
|
||||||
@ -613,7 +627,8 @@ file.
|
|||||||
.IP "\-K or \-\-quit-on-intr"
|
.IP "\-K or \-\-quit-on-intr"
|
||||||
Causes
|
Causes
|
||||||
.I less
|
.I less
|
||||||
to exit immediately when an interrupt character (usually ^C) is typed.
|
to exit immediately (with status 2)
|
||||||
|
when an interrupt character (usually ^C) is typed.
|
||||||
Normally, an interrupt character causes
|
Normally, an interrupt character causes
|
||||||
.I less
|
.I less
|
||||||
to stop whatever it is doing and return to its command prompt.
|
to stop whatever it is doing and return to its command prompt.
|
||||||
@ -970,6 +985,8 @@ Delete the entire command line,
|
|||||||
or cancel the command if the command line is empty.
|
or cancel the command if the command line is empty.
|
||||||
If you have changed your line-kill character in Unix to something
|
If you have changed your line-kill character in Unix to something
|
||||||
other than ^U, that character is used instead of ^U.
|
other than ^U, that character is used instead of ^U.
|
||||||
|
.IP "^G"
|
||||||
|
Delete the entire command line and return to the main prompt.
|
||||||
|
|
||||||
.SH "KEY BINDINGS"
|
.SH "KEY BINDINGS"
|
||||||
You may define your own
|
You may define your own
|
||||||
@ -1290,7 +1307,6 @@ The remainder of LESSBINFMT is a string which may include one
|
|||||||
printf-style escape sequence (a % followed by x, X, o, d, etc.).
|
printf-style escape sequence (a % followed by x, X, o, d, etc.).
|
||||||
For example, if LESSBINFMT is "*u[%x]", binary characters
|
For example, if LESSBINFMT is "*u[%x]", binary characters
|
||||||
are displayed in underlined hexadecimal surrounded by brackets.
|
are displayed in underlined hexadecimal surrounded by brackets.
|
||||||
The default if no LESSBINFMT is specified is "*s<%X>".
|
|
||||||
The default if no LESSBINFMT is specified is "*s<%02X>".
|
The default if no LESSBINFMT is specified is "*s<%02X>".
|
||||||
Warning: the result of expanding the character via LESSBINFMT must
|
Warning: the result of expanding the character via LESSBINFMT must
|
||||||
be less than 31 characters.
|
be less than 31 characters.
|
||||||
@ -1347,6 +1363,8 @@ or the EDITOR environment variable if VISUAL is not defined).
|
|||||||
See the discussion of the LESSEDIT feature below.
|
See the discussion of the LESSEDIT feature below.
|
||||||
.IP "%f"
|
.IP "%f"
|
||||||
Replaced by the name of the current input file.
|
Replaced by the name of the current input file.
|
||||||
|
.IP "%F"
|
||||||
|
Replaced by the last component of the name of the current input file.
|
||||||
.IP "%i"
|
.IP "%i"
|
||||||
Replaced by the index of the current file in the list of
|
Replaced by the index of the current file in the list of
|
||||||
input files.
|
input files.
|
||||||
@ -1664,7 +1682,7 @@ The name of the editor (used for the v command).
|
|||||||
lesskey(1)
|
lesskey(1)
|
||||||
|
|
||||||
.SH COPYRIGHT
|
.SH COPYRIGHT
|
||||||
Copyright (C) 1984-2009 Mark Nudelman
|
Copyright (C) 1984-2011 Mark Nudelman
|
||||||
.PP
|
.PP
|
||||||
less is part of the GNU project and is free software.
|
less is part of the GNU project and is free software.
|
||||||
You can redistribute it and/or modify it
|
You can redistribute it and/or modify it
|
||||||
@ -1689,12 +1707,10 @@ See the GNU General Public License for more details.
|
|||||||
.PP
|
.PP
|
||||||
Mark Nudelman <markn@greenwoodsoftware.com>
|
Mark Nudelman <markn@greenwoodsoftware.com>
|
||||||
.br
|
.br
|
||||||
|
Send bug reports or comments to the above address or to bug-less@gnu.org.
|
||||||
|
.br
|
||||||
See http://www.greenwoodsoftware.com/less/bugs.html for the latest list of known bugs in less.
|
See http://www.greenwoodsoftware.com/less/bugs.html for the latest list of known bugs in less.
|
||||||
.br
|
.br
|
||||||
Send bug reports or comments to the above address or to
|
|
||||||
.br
|
|
||||||
bug-less@gnu.org.
|
|
||||||
.br
|
|
||||||
For more information, see the less homepage at
|
For more information, see the less homepage at
|
||||||
.br
|
.br
|
||||||
http://www.greenwoodsoftware.com/less.
|
http://www.greenwoodsoftware.com/less.
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
#include "less.h"
|
#include "less.h"
|
||||||
|
|
||||||
static char *version = "$Revision: 1.13 $";
|
static char *version = "$Revision: 1.14 $";
|
||||||
|
|
||||||
static int quote_all = 0;
|
static int quote_all = 0;
|
||||||
static char openquote = '"';
|
static char openquote = '"';
|
||||||
|
@ -46,4 +46,4 @@ LESSECHO(1) LESSECHO(1)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
Version 436: 07 Jul 2009 LESSECHO(1)
|
Version 443: 09 Apr 2011 LESSECHO(1)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.TH LESSECHO 1 "Version 436: 07 Jul 2009"
|
.TH LESSECHO 1 "Version 443: 09 Apr 2011"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
lessecho \- expand metacharacters
|
lessecho \- expand metacharacters
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
@ -166,6 +166,7 @@ struct cmdname editnames[] =
|
|||||||
{ "insert", EC_INSERT },
|
{ "insert", EC_INSERT },
|
||||||
{ "invalid", EC_UINVALID },
|
{ "invalid", EC_UINVALID },
|
||||||
{ "kill-line", EC_LINEKILL },
|
{ "kill-line", EC_LINEKILL },
|
||||||
|
{ "abort", EC_ABORT },
|
||||||
{ "left", EC_LEFT },
|
{ "left", EC_LEFT },
|
||||||
{ "literal", EC_LITERAL },
|
{ "literal", EC_LITERAL },
|
||||||
{ "right", EC_RIGHT },
|
{ "right", EC_RIGHT },
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
|
36
lesskey.man
36
lesskey.man
@ -13,7 +13,7 @@ LESSKEY(1) LESSKEY(1)
|
|||||||
|
|
||||||
[1mDESCRIPTION[0m
|
[1mDESCRIPTION[0m
|
||||||
[4mLesskey[24m is used to specify a set of key bindings to be used by [4mless.[0m
|
[4mLesskey[24m is used to specify a set of key bindings to be used by [4mless.[0m
|
||||||
The input file is a text file which describes the key bindings, If the
|
The input file is a text file which describes the key bindings. If the
|
||||||
input file is "-", standard input is read. If no input file is speci-
|
input file is "-", standard input is read. If no input file is speci-
|
||||||
fied, a standard filename is used as the name of the input file, which
|
fied, a standard filename is used as the name of the input file, which
|
||||||
depends on the system being used: On Unix systems, $HOME/.lesskey is
|
depends on the system being used: On Unix systems, $HOME/.lesskey is
|
||||||
@ -105,7 +105,7 @@ LESSKEY(1) LESSKEY(1)
|
|||||||
can be used in certain cases to extend the functionality of a command.
|
can be used in certain cases to extend the functionality of a command.
|
||||||
For example, see the "{" and ":t" commands in the example below. The
|
For example, see the "{" and ":t" commands in the example below. The
|
||||||
extra string has a special meaning for the "quit" action: when [4mless[0m
|
extra string has a special meaning for the "quit" action: when [4mless[0m
|
||||||
quits, first character of the extra string is used as its exit status.
|
quits, first character of the extra string is used as its exit status.
|
||||||
|
|
||||||
|
|
||||||
[1mEXAMPLE[0m
|
[1mEXAMPLE[0m
|
||||||
@ -225,12 +225,12 @@ LESSKEY(1) LESSKEY(1)
|
|||||||
|
|
||||||
|
|
||||||
[1mPRECEDENCE[0m
|
[1mPRECEDENCE[0m
|
||||||
Commands specified by [4mlesskey[24m take precedence over the default com-
|
Commands specified by [4mlesskey[24m take precedence over the default com-
|
||||||
mands. A default command key may be disabled by including it in the
|
mands. A default command key may be disabled by including it in the
|
||||||
input file with the action "invalid". Alternatively, a key may be
|
input file with the action "invalid". Alternatively, a key may be
|
||||||
defined to do nothing by using the action "noaction". "noaction" is
|
defined to do nothing by using the action "noaction". "noaction" is
|
||||||
similar to "invalid", but [4mless[24m will give an error beep for an "invalid"
|
similar to "invalid", but [4mless[24m will give an error beep for an "invalid"
|
||||||
command, but not for a "noaction" command. In addition, ALL default
|
command, but not for a "noaction" command. In addition, ALL default
|
||||||
commands may be disabled by adding this control line to the input file:
|
commands may be disabled by adding this control line to the input file:
|
||||||
|
|
||||||
#stop
|
#stop
|
||||||
@ -287,6 +287,7 @@ LESSKEY(1) LESSKEY(1)
|
|||||||
\ek up
|
\ek up
|
||||||
\ku up
|
\ku up
|
||||||
\ej down
|
\ej down
|
||||||
|
^G abort
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -322,27 +323,22 @@ LESSKEY(1) LESSKEY(1)
|
|||||||
|
|
||||||
|
|
||||||
[1mWARNINGS[0m
|
[1mWARNINGS[0m
|
||||||
It is not possible to specify special keys, such as uparrow, in a key-
|
On MS-DOS and OS/2 systems, certain keys send a sequence of characters
|
||||||
board-independent manner. The only way to specify such keys is to
|
which start with a NUL character (0). This NUL character should be
|
||||||
specify the escape sequence which a particular keyboard sends when such
|
|
||||||
a key is pressed.
|
|
||||||
|
|
||||||
On MS-DOS and OS/2 systems, certain keys send a sequence of characters
|
|
||||||
which start with a NUL character (0). This NUL character should be
|
|
||||||
represented as \340 in a lesskey file.
|
represented as \340 in a lesskey file.
|
||||||
|
|
||||||
|
|
||||||
[1mCOPYRIGHT[0m
|
[1mCOPYRIGHT[0m
|
||||||
Copyright (C) 2000-2009 Mark Nudelman
|
Copyright (C) 2000-2011 Mark Nudelman
|
||||||
|
|
||||||
lesskey is part of the GNU project and is free software; you can redis-
|
lesskey is part of the GNU project and is free software; you can redis-
|
||||||
tribute it and/or modify it under the terms of the GNU General Public
|
tribute it and/or modify it under the terms of the GNU General Public
|
||||||
License as published by the Free Software Foundation; either version 2,
|
License as published by the Free Software Foundation; either version 2,
|
||||||
or (at your option) any later version.
|
or (at your option) any later version.
|
||||||
|
|
||||||
lesskey is distributed in the hope that it will be useful, but WITHOUT
|
lesskey is distributed in the hope that it will be useful, but WITHOUT
|
||||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
for more details.
|
for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
You should have received a copy of the GNU General Public License along
|
||||||
@ -358,4 +354,4 @@ LESSKEY(1) LESSKEY(1)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
Version 436: 07 Jul 2009 LESSKEY(1)
|
Version 443: 09 Apr 2011 LESSKEY(1)
|
||||||
|
12
lesskey.nro
12
lesskey.nro
@ -1,4 +1,4 @@
|
|||||||
.TH LESSKEY 1 "Version 436: 07 Jul 2009"
|
.TH LESSKEY 1 "Version 443: 09 Apr 2011"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
lesskey \- specify key bindings for less
|
lesskey \- specify key bindings for less
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@ -13,7 +13,7 @@ lesskey \- specify key bindings for less
|
|||||||
.I Lesskey
|
.I Lesskey
|
||||||
is used to specify a set of key bindings to be used by
|
is used to specify a set of key bindings to be used by
|
||||||
.I less.
|
.I less.
|
||||||
The input file is a text file which describes the key bindings,
|
The input file is a text file which describes the key bindings.
|
||||||
If the input file is "-", standard input is read.
|
If the input file is "-", standard input is read.
|
||||||
If no input file is specified, a standard filename is used
|
If no input file is specified, a standard filename is used
|
||||||
as the name of the input file, which depends on the system being used:
|
as the name of the input file, which depends on the system being used:
|
||||||
@ -311,6 +311,7 @@ default line-editing keys used by less:
|
|||||||
\eek up
|
\eek up
|
||||||
\eku up
|
\eku up
|
||||||
\eej down
|
\eej down
|
||||||
|
^G abort
|
||||||
.fi
|
.fi
|
||||||
.sp
|
.sp
|
||||||
|
|
||||||
@ -349,17 +350,12 @@ is run, and specifies the character set to be "latin1":
|
|||||||
less(1)
|
less(1)
|
||||||
|
|
||||||
.SH WARNINGS
|
.SH WARNINGS
|
||||||
It is not possible to specify special keys, such as uparrow,
|
|
||||||
in a keyboard-independent manner.
|
|
||||||
The only way to specify such keys is to specify the escape sequence
|
|
||||||
which a particular keyboard sends when such a key is pressed.
|
|
||||||
.PP
|
|
||||||
On MS-DOS and OS/2 systems, certain keys send a sequence of characters
|
On MS-DOS and OS/2 systems, certain keys send a sequence of characters
|
||||||
which start with a NUL character (0).
|
which start with a NUL character (0).
|
||||||
This NUL character should be represented as \e340 in a lesskey file.
|
This NUL character should be represented as \e340 in a lesskey file.
|
||||||
|
|
||||||
.SH COPYRIGHT
|
.SH COPYRIGHT
|
||||||
Copyright (C) 2000-2009 Mark Nudelman
|
Copyright (C) 2000-2011 Mark Nudelman
|
||||||
.PP
|
.PP
|
||||||
lesskey is part of the GNU project and is free software;
|
lesskey is part of the GNU project and is free software;
|
||||||
you can redistribute it and/or modify it
|
you can redistribute it and/or modify it
|
||||||
|
2
lglob.h
2
lglob.h
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
|
2
line.c
2
line.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
|
6
main.c
6
main.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
@ -32,7 +32,6 @@ public char * progname;
|
|||||||
public int quitting;
|
public int quitting;
|
||||||
public int secure;
|
public int secure;
|
||||||
public int dohelp;
|
public int dohelp;
|
||||||
public int less_is_more;
|
|
||||||
|
|
||||||
#if LOGFILE
|
#if LOGFILE
|
||||||
public int logfile = -1;
|
public int logfile = -1;
|
||||||
@ -55,6 +54,7 @@ extern int jump_sline;
|
|||||||
static char consoleTitle[256];
|
static char consoleTitle[256];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
extern int less_is_more;
|
||||||
extern int missing_cap;
|
extern int missing_cap;
|
||||||
extern int know_dumb;
|
extern int know_dumb;
|
||||||
extern int quit_if_one_screen;
|
extern int quit_if_one_screen;
|
||||||
@ -406,7 +406,7 @@ quit(status)
|
|||||||
*/
|
*/
|
||||||
close(2);
|
close(2);
|
||||||
#endif
|
#endif
|
||||||
#if WIN32
|
#ifdef WIN32
|
||||||
SetConsoleTitle(consoleTitle);
|
SetConsoleTitle(consoleTitle);
|
||||||
#endif
|
#endif
|
||||||
close_getchr();
|
close_getchr();
|
||||||
|
2
mark.c
2
mark.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
|
2
mkhelp.c
2
mkhelp.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
|
100
option.c
100
option.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
@ -24,7 +24,6 @@
|
|||||||
static struct loption *pendopt;
|
static struct loption *pendopt;
|
||||||
public int plusoption = FALSE;
|
public int plusoption = FALSE;
|
||||||
|
|
||||||
static char *propt();
|
|
||||||
static char *optstring();
|
static char *optstring();
|
||||||
static int flip_triple();
|
static int flip_triple();
|
||||||
|
|
||||||
@ -33,6 +32,35 @@ extern int less_is_more;
|
|||||||
extern int quit_at_eof;
|
extern int quit_at_eof;
|
||||||
extern char *every_first_cmd;
|
extern char *every_first_cmd;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return a printable description of an option.
|
||||||
|
*/
|
||||||
|
static char *
|
||||||
|
opt_desc(o)
|
||||||
|
struct loption *o;
|
||||||
|
{
|
||||||
|
static char buf[OPTNAME_MAX + 10];
|
||||||
|
if (o->oletter == OLETTER_NONE)
|
||||||
|
SNPRINTF1(buf, sizeof(buf), "--%s", o->onames->oname);
|
||||||
|
else
|
||||||
|
SNPRINTF2(buf, sizeof(buf), "-%c (--%s)", o->oletter, o->onames->oname);
|
||||||
|
return (buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return a string suitable for printing as the "name" of an option.
|
||||||
|
* For example, if the option letter is 'x', just return "-x".
|
||||||
|
*/
|
||||||
|
public char *
|
||||||
|
propt(c)
|
||||||
|
int c;
|
||||||
|
{
|
||||||
|
static char buf[8];
|
||||||
|
|
||||||
|
sprintf(buf, "-%s", prchar(c));
|
||||||
|
return (buf);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Scan an argument (either from the command line or from the
|
* Scan an argument (either from the command line or from the
|
||||||
* LESS environment variable) and process it.
|
* LESS environment variable) and process it.
|
||||||
@ -69,7 +97,7 @@ scan_option(s)
|
|||||||
(*pendopt->ofunc)(INIT, s);
|
(*pendopt->ofunc)(INIT, s);
|
||||||
break;
|
break;
|
||||||
case NUMBER:
|
case NUMBER:
|
||||||
printopt = propt(pendopt->oletter);
|
printopt = opt_desc(pendopt);
|
||||||
*(pendopt->ovar) = getnum(&s, printopt, (int*)NULL);
|
*(pendopt->ovar) = getnum(&s, printopt, (int*)NULL);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -261,12 +289,12 @@ scan_option(s)
|
|||||||
* OPT_SET set to the inverse of the default value
|
* OPT_SET set to the inverse of the default value
|
||||||
*/
|
*/
|
||||||
public void
|
public void
|
||||||
toggle_option(c, s, how_toggle)
|
toggle_option(o, lower, s, how_toggle)
|
||||||
int c;
|
struct loption *o;
|
||||||
|
int lower;
|
||||||
char *s;
|
char *s;
|
||||||
int how_toggle;
|
int how_toggle;
|
||||||
{
|
{
|
||||||
register struct loption *o;
|
|
||||||
register int num;
|
register int num;
|
||||||
int no_prompt;
|
int no_prompt;
|
||||||
int err;
|
int err;
|
||||||
@ -275,27 +303,22 @@ toggle_option(c, s, how_toggle)
|
|||||||
no_prompt = (how_toggle & OPT_NO_PROMPT);
|
no_prompt = (how_toggle & OPT_NO_PROMPT);
|
||||||
how_toggle &= ~OPT_NO_PROMPT;
|
how_toggle &= ~OPT_NO_PROMPT;
|
||||||
|
|
||||||
/*
|
|
||||||
* Look up the option letter in the option table.
|
|
||||||
*/
|
|
||||||
o = findopt(c);
|
|
||||||
if (o == NULL)
|
if (o == NULL)
|
||||||
{
|
{
|
||||||
parg.p_string = propt(c);
|
error("No such option", NULL_PARG);
|
||||||
error("There is no %s option", &parg);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (how_toggle == OPT_TOGGLE && (o->otype & NO_TOGGLE))
|
if (how_toggle == OPT_TOGGLE && (o->otype & NO_TOGGLE))
|
||||||
{
|
{
|
||||||
parg.p_string = propt(c);
|
parg.p_string = opt_desc(o);
|
||||||
error("Cannot change the %s option", &parg);
|
error("Cannot change the %s option", &parg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (how_toggle == OPT_NO_TOGGLE && (o->otype & NO_QUERY))
|
if (how_toggle == OPT_NO_TOGGLE && (o->otype & NO_QUERY))
|
||||||
{
|
{
|
||||||
parg.p_string = propt(c);
|
parg.p_string = opt_desc(o);
|
||||||
error("Cannot query the %s option", &parg);
|
error("Cannot query the %s option", &parg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -355,15 +378,13 @@ toggle_option(c, s, how_toggle)
|
|||||||
switch (how_toggle)
|
switch (how_toggle)
|
||||||
{
|
{
|
||||||
case OPT_TOGGLE:
|
case OPT_TOGGLE:
|
||||||
*(o->ovar) = flip_triple(*(o->ovar),
|
*(o->ovar) = flip_triple(*(o->ovar), lower);
|
||||||
ASCII_IS_LOWER(c));
|
|
||||||
break;
|
break;
|
||||||
case OPT_UNSET:
|
case OPT_UNSET:
|
||||||
*(o->ovar) = o->odefault;
|
*(o->ovar) = o->odefault;
|
||||||
break;
|
break;
|
||||||
case OPT_SET:
|
case OPT_SET:
|
||||||
*(o->ovar) = flip_triple(o->odefault,
|
*(o->ovar) = flip_triple(o->odefault, lower);
|
||||||
ASCII_IS_LOWER(c));
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -465,33 +486,17 @@ flip_triple(val, lc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return a string suitable for printing as the "name" of an option.
|
* Determine if an option takes a parameter.
|
||||||
* For example, if the option letter is 'x', just return "-x".
|
|
||||||
*/
|
|
||||||
static char *
|
|
||||||
propt(c)
|
|
||||||
int c;
|
|
||||||
{
|
|
||||||
static char buf[8];
|
|
||||||
|
|
||||||
sprintf(buf, "-%s", prchar(c));
|
|
||||||
return (buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Determine if an option is a single character option (BOOL or TRIPLE),
|
|
||||||
* or if it a multi-character option (NUMBER).
|
|
||||||
*/
|
*/
|
||||||
public int
|
public int
|
||||||
single_char_option(c)
|
opt_has_param(o)
|
||||||
int c;
|
struct loption *o;
|
||||||
{
|
{
|
||||||
register struct loption *o;
|
|
||||||
|
|
||||||
o = findopt(c);
|
|
||||||
if (o == NULL)
|
if (o == NULL)
|
||||||
return (TRUE);
|
return (0);
|
||||||
return ((o->otype & (BOOL|TRIPLE|NOVAR|NO_TOGGLE)) != 0);
|
if (o->otype & (BOOL|TRIPLE|NOVAR|NO_TOGGLE))
|
||||||
|
return (0);
|
||||||
|
return (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -499,14 +504,11 @@ single_char_option(c)
|
|||||||
* Only string and number valued options have prompts.
|
* Only string and number valued options have prompts.
|
||||||
*/
|
*/
|
||||||
public char *
|
public char *
|
||||||
opt_prompt(c)
|
opt_prompt(o)
|
||||||
int c;
|
struct loption *o;
|
||||||
{
|
{
|
||||||
register struct loption *o;
|
|
||||||
|
|
||||||
o = findopt(c);
|
|
||||||
if (o == NULL || (o->otype & (STRING|NUMBER)) == 0)
|
if (o == NULL || (o->otype & (STRING|NUMBER)) == 0)
|
||||||
return (NULL);
|
return ("?");
|
||||||
return (o->odesc[0]);
|
return (o->odesc[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -541,7 +543,7 @@ nostring(printopt)
|
|||||||
public void
|
public void
|
||||||
nopendopt()
|
nopendopt()
|
||||||
{
|
{
|
||||||
nostring(propt(pendopt->oletter));
|
nostring(opt_desc(pendopt));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
6
option.h
6
option.h
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
@ -27,6 +27,8 @@
|
|||||||
|
|
||||||
#define OTYPE (BOOL|TRIPLE|NUMBER|STRING|NOVAR)
|
#define OTYPE (BOOL|TRIPLE|NUMBER|STRING|NOVAR)
|
||||||
|
|
||||||
|
#define OLETTER_NONE '\1' /* Invalid option letter */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Argument to a handling function tells what type of activity:
|
* Argument to a handling function tells what type of activity:
|
||||||
*/
|
*/
|
||||||
@ -50,6 +52,8 @@ struct optname
|
|||||||
struct optname *onext; /* List of synonymous option names */
|
struct optname *onext; /* List of synonymous option names */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define OPTNAME_MAX 32 /* Max length of long option name */
|
||||||
|
|
||||||
struct loption
|
struct loption
|
||||||
{
|
{
|
||||||
char oletter; /* The controlling letter (a-z) */
|
char oletter; /* The controlling letter (a-z) */
|
||||||
|
18
opttbl.c
18
opttbl.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
@ -133,11 +133,11 @@ static struct optname follow_optname = { "follow-name", NULL };
|
|||||||
static struct loption option[] =
|
static struct loption option[] =
|
||||||
{
|
{
|
||||||
{ 'a', &a_optname,
|
{ 'a', &a_optname,
|
||||||
BOOL, OPT_OFF, &how_search, NULL,
|
TRIPLE, OPT_ONPLUS, &how_search, NULL,
|
||||||
{
|
{
|
||||||
"Search includes displayed screen",
|
"Search includes displayed screen",
|
||||||
"Search skips displayed screen",
|
"Search skips displayed screen",
|
||||||
NULL
|
"Search includes all of displayed screen"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -237,7 +237,7 @@ static struct loption option[] =
|
|||||||
STRING, 0, NULL, opt_j,
|
STRING, 0, NULL, opt_j,
|
||||||
{
|
{
|
||||||
"Target line: ",
|
"Target line: ",
|
||||||
"0123456789.",
|
"0123456789.-",
|
||||||
NULL
|
NULL
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -427,7 +427,7 @@ static struct loption option[] =
|
|||||||
NULL
|
NULL
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ '.', &keypad_optname,
|
{ OLETTER_NONE, &keypad_optname,
|
||||||
BOOL|NO_TOGGLE, OPT_OFF, &no_keypad, NULL,
|
BOOL|NO_TOGGLE, OPT_OFF, &no_keypad, NULL,
|
||||||
{
|
{
|
||||||
"Use keypad mode",
|
"Use keypad mode",
|
||||||
@ -435,7 +435,7 @@ static struct loption option[] =
|
|||||||
NULL
|
NULL
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ '.', &oldbot_optname,
|
{ OLETTER_NONE, &oldbot_optname,
|
||||||
BOOL, OPT_OFF, &oldbot, NULL,
|
BOOL, OPT_OFF, &oldbot, NULL,
|
||||||
{
|
{
|
||||||
"Use new bottom of screen behavior",
|
"Use new bottom of screen behavior",
|
||||||
@ -443,11 +443,11 @@ static struct loption option[] =
|
|||||||
NULL
|
NULL
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ '.', &follow_optname,
|
{ OLETTER_NONE, &follow_optname,
|
||||||
BOOL, FOLLOW_DESC, &follow_mode, NULL,
|
BOOL, FOLLOW_DESC, &follow_mode, NULL,
|
||||||
{
|
{
|
||||||
"F command Follows file descriptor",
|
"F command follows file descriptor",
|
||||||
"F command Follows file name",
|
"F command follows file name",
|
||||||
NULL
|
NULL
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
43
os.c
43
os.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
@ -250,6 +250,28 @@ errno_message(filename)
|
|||||||
return (m);
|
return (m);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* #define HAVE_FLOAT 0 */
|
||||||
|
|
||||||
|
static POSITION
|
||||||
|
muldiv(val, num, den)
|
||||||
|
POSITION val, num, den;
|
||||||
|
{
|
||||||
|
#if HAVE_FLOAT
|
||||||
|
double v = (((double) val) * num) / den;
|
||||||
|
return ((POSITION) (v + 0.5));
|
||||||
|
#else
|
||||||
|
POSITION v = ((POSITION) val) * num;
|
||||||
|
|
||||||
|
if (v / num == val)
|
||||||
|
/* No overflow */
|
||||||
|
return (POSITION) (v / den);
|
||||||
|
else
|
||||||
|
/* Above calculation overflows;
|
||||||
|
* use a method that is less precise but won't overflow. */
|
||||||
|
return (POSITION) (val / (den / num));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return the ratio of two POSITIONS, as a percentage.
|
* Return the ratio of two POSITIONS, as a percentage.
|
||||||
* {{ Assumes a POSITION is a long int. }}
|
* {{ Assumes a POSITION is a long int. }}
|
||||||
@ -258,12 +280,7 @@ errno_message(filename)
|
|||||||
percentage(num, den)
|
percentage(num, den)
|
||||||
POSITION num, den;
|
POSITION num, den;
|
||||||
{
|
{
|
||||||
POSITION num100 = num * 100;
|
return (int) muldiv(num, (POSITION) 100, den);
|
||||||
|
|
||||||
if (num100 / 100 == num)
|
|
||||||
return (num100 / den);
|
|
||||||
else
|
|
||||||
return (num / (den / 100));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -276,19 +293,11 @@ percent_pos(pos, percent, fraction)
|
|||||||
long fraction;
|
long fraction;
|
||||||
{
|
{
|
||||||
/* Change percent (parts per 100) to perden (parts per NUM_FRAC_DENOM). */
|
/* Change percent (parts per 100) to perden (parts per NUM_FRAC_DENOM). */
|
||||||
long perden = (percent * (NUM_FRAC_DENOM / 100)) + (fraction / 100);
|
POSITION perden = (percent * (NUM_FRAC_DENOM / 100)) + (fraction / 100);
|
||||||
POSITION temp;
|
|
||||||
|
|
||||||
if (perden == 0)
|
if (perden == 0)
|
||||||
return (0);
|
return (0);
|
||||||
temp = pos * perden; /* This might overflow. */
|
return (POSITION) muldiv(pos, perden, (POSITION) NUM_FRAC_DENOM);
|
||||||
if (temp / perden == pos)
|
|
||||||
/* No overflow */
|
|
||||||
return (temp / NUM_FRAC_DENOM);
|
|
||||||
else
|
|
||||||
/* Above calculation overflows;
|
|
||||||
* use a method that is less precise but won't overflow. */
|
|
||||||
return (perden * (pos / NUM_FRAC_DENOM));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !HAVE_STRCHR
|
#if !HAVE_STRCHR
|
||||||
|
3
output.c
3
output.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
@ -532,6 +532,7 @@ error(fmt, parg)
|
|||||||
|
|
||||||
get_return();
|
get_return();
|
||||||
lower_left();
|
lower_left();
|
||||||
|
clear_eol();
|
||||||
|
|
||||||
if (col >= sc_width)
|
if (col >= sc_width)
|
||||||
/*
|
/*
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
@ -254,8 +254,8 @@ match_pattern(pattern, tpattern, line, line_len, sp, ep, notbol, search_type)
|
|||||||
|
|
||||||
if (search_type & SRCH_NO_REGEX)
|
if (search_type & SRCH_NO_REGEX)
|
||||||
matched = match(tpattern, strlen(tpattern), line, line_len, sp, ep);
|
matched = match(tpattern, strlen(tpattern), line, line_len, sp, ep);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#if HAVE_POSIX_REGCOMP
|
#if HAVE_POSIX_REGCOMP
|
||||||
{
|
{
|
||||||
regmatch_t rm;
|
regmatch_t rm;
|
||||||
@ -314,7 +314,7 @@ match_pattern(pattern, tpattern, line, line_len, sp, ep, notbol, search_type)
|
|||||||
#if NO_REGEX
|
#if NO_REGEX
|
||||||
matched = match(tpattern, strlen(tpattern), line, line_len, sp, ep);
|
matched = match(tpattern, strlen(tpattern), line, line_len, sp, ep);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
matched = (!(search_type & SRCH_NO_MATCH) && matched) ||
|
matched = (!(search_type & SRCH_NO_MATCH) && matched) ||
|
||||||
((search_type & SRCH_NO_MATCH) && !matched);
|
((search_type & SRCH_NO_MATCH) && !matched);
|
||||||
return (matched);
|
return (matched);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
|
2
pckeys.h
2
pckeys.h
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
|
6
prompt.c
6
prompt.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
@ -303,6 +303,9 @@ protochar(c, where, iseditproto)
|
|||||||
case 'f': /* File name */
|
case 'f': /* File name */
|
||||||
ap_str(get_filename(curr_ifile));
|
ap_str(get_filename(curr_ifile));
|
||||||
break;
|
break;
|
||||||
|
case 'F': /* Last component of file name */
|
||||||
|
ap_str(last_component(get_filename(curr_ifile)));
|
||||||
|
break;
|
||||||
case 'i': /* Index into list of files */
|
case 'i': /* Index into list of files */
|
||||||
#if TAGS
|
#if TAGS
|
||||||
if (ntags())
|
if (ntags())
|
||||||
@ -363,6 +366,7 @@ protochar(c, where, iseditproto)
|
|||||||
case 't': /* Truncate trailing spaces in the message */
|
case 't': /* Truncate trailing spaces in the message */
|
||||||
while (mp > message && mp[-1] == ' ')
|
while (mp > message && mp[-1] == ' ')
|
||||||
mp--;
|
mp--;
|
||||||
|
*mp = '\0';
|
||||||
break;
|
break;
|
||||||
case 'T': /* Type of list */
|
case 'T': /* Type of list */
|
||||||
#if TAGS
|
#if TAGS
|
||||||
|
4
screen.c
4
screen.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
@ -1788,7 +1788,7 @@ win32_scroll_up(n)
|
|||||||
|
|
||||||
/* Move the source text to the top of the screen. */
|
/* Move the source text to the top of the screen. */
|
||||||
new_org.X = rcSrc.Left;
|
new_org.X = rcSrc.Left;
|
||||||
/* new_org.Y = rcClip.top; -- doesn't compile under MSVC6 */
|
new_org.Y = rcClip.Top;
|
||||||
|
|
||||||
/* Fill the right character and attributes. */
|
/* Fill the right character and attributes. */
|
||||||
fillchar.Char.AsciiChar = ' ';
|
fillchar.Char.AsciiChar = ' ';
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
|
160
search.c
160
search.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
@ -70,6 +70,25 @@ struct pattern_info {
|
|||||||
static struct pattern_info search_info;
|
static struct pattern_info search_info;
|
||||||
static struct pattern_info filter_info;
|
static struct pattern_info filter_info;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Are there any uppercase letters in this string?
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
is_ucase(str)
|
||||||
|
char *str;
|
||||||
|
{
|
||||||
|
char *str_end = str + strlen(str);
|
||||||
|
LWCHAR ch;
|
||||||
|
|
||||||
|
while (str < str_end)
|
||||||
|
{
|
||||||
|
ch = step_char(&str, +1, str_end);
|
||||||
|
if (IS_UPPER(ch))
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Compile and save a search pattern.
|
* Compile and save a search pattern.
|
||||||
*/
|
*/
|
||||||
@ -93,6 +112,16 @@ set_pattern(info, pattern, search_type)
|
|||||||
strcpy(info->text, pattern);
|
strcpy(info->text, pattern);
|
||||||
}
|
}
|
||||||
info->search_type = search_type;
|
info->search_type = search_type;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Ignore case if -I is set OR
|
||||||
|
* -i is set AND the pattern is all lowercase.
|
||||||
|
*/
|
||||||
|
is_ucase_pattern = is_ucase(pattern);
|
||||||
|
if (is_ucase_pattern && caseless != OPT_ONPLUS)
|
||||||
|
is_caseless = 0;
|
||||||
|
else
|
||||||
|
is_caseless = caseless;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -155,25 +184,6 @@ get_cvt_ops()
|
|||||||
return (ops);
|
return (ops);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Are there any uppercase letters in this string?
|
|
||||||
*/
|
|
||||||
static int
|
|
||||||
is_ucase(str)
|
|
||||||
char *str;
|
|
||||||
{
|
|
||||||
char *str_end = str + strlen(str);
|
|
||||||
LWCHAR ch;
|
|
||||||
|
|
||||||
while (str < str_end)
|
|
||||||
{
|
|
||||||
ch = step_char(&str, +1, str_end);
|
|
||||||
if (IS_UPPER(ch))
|
|
||||||
return (1);
|
|
||||||
}
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Is there a previous (remembered) search pattern?
|
* Is there a previous (remembered) search pattern?
|
||||||
*/
|
*/
|
||||||
@ -229,7 +239,7 @@ repaint_hilite(on)
|
|||||||
goto_line(slinenum);
|
goto_line(slinenum);
|
||||||
put_line();
|
put_line();
|
||||||
}
|
}
|
||||||
lower_left(); // if !oldbot
|
lower_left();
|
||||||
hide_hilite = save_hide_hilite;
|
hide_hilite = save_hide_hilite;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -599,7 +609,7 @@ search_pos(search_type)
|
|||||||
*/
|
*/
|
||||||
if (search_type & SRCH_FORW)
|
if (search_type & SRCH_FORW)
|
||||||
{
|
{
|
||||||
return (ch_zero());
|
pos = ch_zero();
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
pos = ch_length();
|
pos = ch_length();
|
||||||
@ -608,46 +618,66 @@ search_pos(search_type)
|
|||||||
(void) ch_end_seek();
|
(void) ch_end_seek();
|
||||||
pos = ch_length();
|
pos = ch_length();
|
||||||
}
|
}
|
||||||
return (pos);
|
|
||||||
}
|
}
|
||||||
}
|
linenum = 0;
|
||||||
if (how_search)
|
} else
|
||||||
{
|
{
|
||||||
/*
|
int add_one = 0;
|
||||||
* Search does not include current screen.
|
|
||||||
*/
|
if (how_search == OPT_ON)
|
||||||
if (search_type & SRCH_FORW)
|
|
||||||
linenum = BOTTOM_PLUS_ONE;
|
|
||||||
else
|
|
||||||
linenum = TOP;
|
|
||||||
pos = position(linenum);
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Search includes current screen.
|
|
||||||
* It starts at the jump target (if searching backwards),
|
|
||||||
* or at the jump target plus one (if forwards).
|
|
||||||
*/
|
|
||||||
linenum = adjsline(jump_sline);
|
|
||||||
pos = position(linenum);
|
|
||||||
if (search_type & SRCH_FORW)
|
|
||||||
{
|
{
|
||||||
pos = forw_raw_line(pos, (char **)NULL, (int *)NULL);
|
/*
|
||||||
while (pos == NULL_POSITION)
|
* Search does not include current screen.
|
||||||
{
|
*/
|
||||||
if (++linenum >= sc_height)
|
if (search_type & SRCH_FORW)
|
||||||
break;
|
linenum = BOTTOM_PLUS_ONE;
|
||||||
pos = position(linenum);
|
else
|
||||||
}
|
linenum = TOP;
|
||||||
|
} else if (how_search == OPT_ONPLUS && !(search_type & SRCH_AFTER_TARGET))
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Search includes all of displayed screen.
|
||||||
|
*/
|
||||||
|
if (search_type & SRCH_FORW)
|
||||||
|
linenum = TOP;
|
||||||
|
else
|
||||||
|
linenum = BOTTOM_PLUS_ONE;
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
while (pos == NULL_POSITION)
|
/*
|
||||||
{
|
* Search includes the part of current screen beyond the jump target.
|
||||||
if (--linenum < 0)
|
* It starts at the jump target (if searching backwards),
|
||||||
break;
|
* or at the jump target plus one (if forwards).
|
||||||
pos = position(linenum);
|
*/
|
||||||
}
|
linenum = jump_sline;
|
||||||
|
if (search_type & SRCH_FORW)
|
||||||
|
add_one = 1;
|
||||||
}
|
}
|
||||||
|
linenum = adjsline(linenum);
|
||||||
|
pos = position(linenum);
|
||||||
|
if (add_one)
|
||||||
|
pos = forw_raw_line(pos, (char **)NULL, (int *)NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the line is empty, look around for a plausible starting place.
|
||||||
|
*/
|
||||||
|
if (search_type & SRCH_FORW)
|
||||||
|
{
|
||||||
|
while (pos == NULL_POSITION)
|
||||||
|
{
|
||||||
|
if (++linenum >= sc_height)
|
||||||
|
break;
|
||||||
|
pos = position(linenum);
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
while (pos == NULL_POSITION)
|
||||||
|
{
|
||||||
|
if (--linenum < 0)
|
||||||
|
break;
|
||||||
|
pos = position(linenum);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return (pos);
|
return (pos);
|
||||||
}
|
}
|
||||||
@ -789,7 +819,7 @@ search_range(pos, endpos, search_type, matches, maxlines, plinepos, pendpos)
|
|||||||
if (prev_pattern(&search_info))
|
if (prev_pattern(&search_info))
|
||||||
{
|
{
|
||||||
line_match = match_pattern(search_info.compiled, search_info.text,
|
line_match = match_pattern(search_info.compiled, search_info.text,
|
||||||
cline, line_len, &sp, &ep, 0, search_type); //FIXME search_info.search_type
|
cline, line_len, &sp, &ep, 0, search_type);
|
||||||
if (line_match)
|
if (line_match)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@ -853,12 +883,6 @@ hist_pattern(search_type)
|
|||||||
if (set_pattern(&search_info, pattern, search_type) < 0)
|
if (set_pattern(&search_info, pattern, search_type) < 0)
|
||||||
return (0);
|
return (0);
|
||||||
|
|
||||||
is_ucase_pattern = is_ucase(pattern);
|
|
||||||
if (is_ucase_pattern && caseless != OPT_ONPLUS)
|
|
||||||
is_caseless = 0;
|
|
||||||
else
|
|
||||||
is_caseless = caseless;
|
|
||||||
|
|
||||||
#if HILITE_SEARCH
|
#if HILITE_SEARCH
|
||||||
if (hilite_search == OPT_ONPLUS && !hide_hilite)
|
if (hilite_search == OPT_ONPLUS && !hide_hilite)
|
||||||
hilite_screen();
|
hilite_screen();
|
||||||
@ -892,6 +916,7 @@ search(search_type, pattern, n)
|
|||||||
/*
|
/*
|
||||||
* A null pattern means use the previously compiled pattern.
|
* A null pattern means use the previously compiled pattern.
|
||||||
*/
|
*/
|
||||||
|
search_type |= SRCH_AFTER_TARGET;
|
||||||
if (!prev_pattern(&search_info) && !hist_pattern(search_type))
|
if (!prev_pattern(&search_info) && !hist_pattern(search_type))
|
||||||
{
|
{
|
||||||
error("No previous regular expression", NULL_PARG);
|
error("No previous regular expression", NULL_PARG);
|
||||||
@ -930,15 +955,6 @@ search(search_type, pattern, n)
|
|||||||
*/
|
*/
|
||||||
if (set_pattern(&search_info, pattern, search_type) < 0)
|
if (set_pattern(&search_info, pattern, search_type) < 0)
|
||||||
return (-1);
|
return (-1);
|
||||||
/*
|
|
||||||
* Ignore case if -I is set OR
|
|
||||||
* -i is set AND the pattern is all lowercase.
|
|
||||||
*/
|
|
||||||
is_ucase_pattern = is_ucase(pattern);
|
|
||||||
if (is_ucase_pattern && caseless != OPT_ONPLUS)
|
|
||||||
is_caseless = 0;
|
|
||||||
else
|
|
||||||
is_caseless = caseless;
|
|
||||||
#if HILITE_SEARCH
|
#if HILITE_SEARCH
|
||||||
if (hilite_search)
|
if (hilite_search)
|
||||||
{
|
{
|
||||||
|
4
signal.c
4
signal.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
@ -252,6 +252,6 @@ psignals()
|
|||||||
if (tsignals & S_INTERRUPT)
|
if (tsignals & S_INTERRUPT)
|
||||||
{
|
{
|
||||||
if (quit_on_intr)
|
if (quit_on_intr)
|
||||||
quit(QUIT_OK);
|
quit(QUIT_INTERRUPT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
2
tags.c
2
tags.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
|
2
ttyin.c
2
ttyin.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
|
17
version.c
17
version.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 1984-2009 Mark Nudelman
|
* Copyright (C) 1984-2011 Mark Nudelman
|
||||||
*
|
*
|
||||||
* You may distribute under the terms of either the GNU General Public
|
* You may distribute under the terms of either the GNU General Public
|
||||||
* License or the Less License, as specified in the README file.
|
* License or the Less License, as specified in the README file.
|
||||||
@ -729,6 +729,19 @@ v433 6/28/09 Cleanup search code.
|
|||||||
v434 6/29/09 More cleanup.
|
v434 6/29/09 More cleanup.
|
||||||
v435 7/04/09 Fix bugs with non-regex filtering.
|
v435 7/04/09 Fix bugs with non-regex filtering.
|
||||||
v436 7/05/09 Fix memory leak.
|
v436 7/05/09 Fix memory leak.
|
||||||
|
-----------------------------------------------------------------
|
||||||
|
v437 7/14/09 Fix bug in handling some long option names;
|
||||||
|
make percentage calculation more accurate.
|
||||||
|
v438 12/29/10 Fix bugs with -i/-I and & filtering;
|
||||||
|
exit with status 2 on ctrl-C with -K.
|
||||||
|
v439 12/31/10 Add -A option.
|
||||||
|
v440 1/5/11 Fix bug displaying prompt after = command.
|
||||||
|
v441 1/21/11 Fix semi-infinite loop if no newlines in file;
|
||||||
|
make new -A behavior the default.
|
||||||
|
-----------------------------------------------------------------
|
||||||
|
v442 3/2/11 Fix search bug.
|
||||||
|
Add ctrl-G line edit command.
|
||||||
|
v443 4/9/11 Fix Windows build.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
char version[] = "436";
|
char version[] = "443";
|
||||||
|
Loading…
Reference in New Issue
Block a user