git: f5536286dbc3 - stable/13 - less: upgrade to v590.
Xin LI
delphij at FreeBSD.org
Mon Aug 2 08:29:13 UTC 2021
The branch stable/13 has been updated by delphij:
URL: https://cgit.FreeBSD.org/src/commit/?id=f5536286dbc34733322ee28d97ca3c0fda9a0839
commit f5536286dbc34733322ee28d97ca3c0fda9a0839
Author: Xin LI <delphij at FreeBSD.org>
AuthorDate: 2021-07-18 05:20:44 +0000
Commit: Xin LI <delphij at FreeBSD.org>
CommitDate: 2021-08-02 08:28:42 +0000
less: upgrade to v590.
(cherry picked from commit 30a1828c5196c415c8afc0d50f9131885d0c6b43)
(cherry picked from commit 4bcc6d14e23d1443a275fc3a494094274a2f8382)
---
contrib/less/NEWS | 30 ++-
contrib/less/README | 9 +-
contrib/less/ch.c | 2 +-
contrib/less/cmdbuf.c | 31 ++-
contrib/less/command.c | 1 +
contrib/less/decode.c | 93 +++++--
contrib/less/edit.c | 4 +-
contrib/less/filename.c | 57 ++--
contrib/less/funcs.h | 12 +-
contrib/less/help.c | 4 +-
contrib/less/less.h | 1 +
contrib/less/less.hlp | 2 +
contrib/less/less.nro | 102 +++++---
contrib/less/lessecho.nro | 2 +-
contrib/less/lesskey.c | 607 ++++---------------------------------------
contrib/less/lesskey.h | 24 ++
contrib/less/lesskey.nro | 51 ++--
contrib/less/lesskey_parse.c | 580 +++++++++++++++++++++++++++++++++++++++++
contrib/less/line.c | 85 +++---
contrib/less/linenum.c | 23 ++
contrib/less/optfunc.c | 61 ++++-
contrib/less/opttbl.c | 23 +-
contrib/less/output.c | 15 +-
contrib/less/screen.c | 15 +-
contrib/less/tags.c | 18 +-
contrib/less/version.c | 15 +-
contrib/less/xbuf.c | 52 ++++
contrib/less/xbuf.h | 15 ++
usr.bin/less/Makefile | 5 +-
usr.bin/less/defines.h | 6 +-
usr.bin/lesskey/Makefile | 2 +-
31 files changed, 1184 insertions(+), 763 deletions(-)
diff --git a/contrib/less/NEWS b/contrib/less/NEWS
index bc5afd655ddc..a403c5d8a875 100644
--- a/contrib/less/NEWS
+++ b/contrib/less/NEWS
@@ -3,8 +3,7 @@
======================================================================
- For the latest news about less, see the "less" Web page:
- https://greenwoodsoftware.com/less
+ For the latest news about less, see https://greenwoodsoftware.com/less
You can also download the latest version of less from there.
Report bugs, suggestions or comments at
@@ -12,7 +11,32 @@
======================================================================
- Major changes between "less" versions 563 and 581.2
+ Major changes between "less" versions 581 and 590
+
+* Make less able to read lesskey source files (deprecating lesskey).
+
+* If XDG_CONFIG_HOME is set, find lesskey source file
+ in $XDG_CONFIG_HOME/lesskey rather than $HOME/.lesskey.
+
+* If XDG_DATA_HOME is set, find and store history file
+ in $XDG_DATA_HOME/lesshst rather than $HOME/.lesshst.
+
+* Add the --lesskey-src option.
+
+* Add the --file-size option.
+
+* With -F, if screen is resized to make file fit on one screen, don't exit.
+
+* Fix bug which could leave terminal in mouse-reporting mode
+ after exiting less.
+
+* Fix bug which caused failure to respond to window resize.
+
+* Fix backslash bug searching in tag file.
+
+======================================================================
+
+ Major changes between "less" versions 563 and 581
* Change ESC-u command to toggle, not disable, highlighting per man page.
diff --git a/contrib/less/README b/contrib/less/README
index 2acbd00d762a..4a5aa62a44ee 100644
--- a/contrib/less/README
+++ b/contrib/less/README
@@ -7,9 +7,7 @@
**************************************************************************
**************************************************************************
- Less, version 581.2
-
- This is the distribution of less, version 581.2, released 28 Apr 2021.
+ This is the source code distribution of "less".
This program is part of the GNU project (http://www.gnu.org).
This program is free software. You may redistribute it and/or
@@ -27,6 +25,11 @@
=========================================================================
+You should build from a clone of a git repository
+ONLY IF you are doing development on the less source itself.
+If you are merely using less as a tool, you should download a release
+from http://greenwoodsoftware.com and NOT from github.
+
The formatted manual page is in less.man.
The manual page nroff source is in less.nro.
Major changes made since the last posted version are in NEWS.
diff --git a/contrib/less/ch.c b/contrib/less/ch.c
index bab0692f7437..379dd84c41b8 100644
--- a/contrib/less/ch.c
+++ b/contrib/less/ch.c
@@ -860,7 +860,7 @@ ch_init(f, flags)
* Allocate and initialize a new filestate.
*/
thisfile = (struct filestate *)
- calloc(1, sizeof(struct filestate));
+ ecalloc(1, sizeof(struct filestate));
thisfile->buflist.next = thisfile->buflist.prev = END_OF_CHAIN;
thisfile->nbufs = 0;
thisfile->flags = flags;
diff --git a/contrib/less/cmdbuf.c b/contrib/less/cmdbuf.c
index 9cc1f3e94977..dd135382aa11 100644
--- a/contrib/less/cmdbuf.c
+++ b/contrib/less/cmdbuf.c
@@ -1401,11 +1401,12 @@ mlist_size(ml)
* Get the name of the history file.
*/
static char *
-histfile_name(VOID_PARAM)
+histfile_name(must_exist)
+ int must_exist;
{
char *home;
+ char *xdg;
char *name;
- int len;
/* See if filename is explicitly specified by $LESSHISTFILE. */
name = lgetenv("LESSHISTFILE");
@@ -1421,19 +1422,25 @@ histfile_name(VOID_PARAM)
if (strcmp(LESSHISTFILE, "") == 0 || strcmp(LESSHISTFILE, "-") == 0)
return (NULL);
- /* Otherwise, file is in $HOME. */
+ /* Try in $XDG_DATA_HOME first, then in $HOME. */
+ xdg = lgetenv("XDG_DATA_HOME");
home = lgetenv("HOME");
- if (isnullenv(home))
- {
#if OS2
+ if (isnullenv(home))
home = lgetenv("INIT");
- if (isnullenv(home))
#endif
- return (NULL);
+ name = NULL;
+ if (!must_exist)
+ {
+ /* If we're writing the file and the file already exists, use it. */
+ name = dirfile(xdg, &LESSHISTFILE[1], 1);
+ if (name == NULL)
+ name = dirfile(home, LESSHISTFILE, 1);
}
- len = (int) (strlen(home) + strlen(LESSHISTFILE) + 2);
- name = (char *) ecalloc(len, sizeof(char));
- SNPRINTF2(name, len, "%s/%s", home, LESSHISTFILE);
+ if (name == NULL)
+ name = dirfile(xdg, &LESSHISTFILE[1], must_exist);
+ if (name == NULL)
+ name = dirfile(home, LESSHISTFILE, must_exist);
return (name);
}
@@ -1454,7 +1461,7 @@ read_cmdhist2(action, uparam, skip_search, skip_shell)
char *p;
int *skip = NULL;
- filename = histfile_name();
+ filename = histfile_name(1);
if (filename == NULL)
return;
f = fopen(filename, "r");
@@ -1700,7 +1707,7 @@ save_cmdhist(VOID_PARAM)
if (!histfile_modified())
return;
- histname = histfile_name();
+ histname = histfile_name(0);
if (histname == NULL)
return;
tempname = make_tempname(histname);
diff --git a/contrib/less/command.c b/contrib/less/command.c
index ae59181c2827..171788f2e750 100644
--- a/contrib/less/command.c
+++ b/contrib/less/command.c
@@ -797,6 +797,7 @@ prompt(VOID_PARAM)
entire_file_displayed() && !(ch_getflags() & CH_HELPFILE) &&
next_ifile(curr_ifile) == NULL_IFILE)
quit(QUIT_OK);
+ quit_if_one_screen = FALSE; /* only get one chance at this */
#if MSDOS_COMPILER==WIN32C
/*
diff --git a/contrib/less/decode.c b/contrib/less/decode.c
index f3bfb7a8ead2..7e9b167bc786 100644
--- a/contrib/less/decode.c
+++ b/contrib/less/decode.c
@@ -339,21 +339,41 @@ init_cmds(VOID_PARAM)
add_fcmd_table((char*)cmdtable, sizeof(cmdtable));
add_ecmd_table((char*)edittable, sizeof(edittable));
#if USERFILE
+#ifdef BINDIR /* For backwards compatibility */
+ /* Try to add tables in the OLD system lesskey file. */
+ add_hometable(lesskey, NULL, BINDIR "/.sysless", 1);
+#endif
/*
- * For backwards compatibility,
- * try to add tables in the OLD system lesskey file.
+ * Try to load lesskey source file or binary file.
+ * If the source file succeeds, don't load binary file.
+ * The binary file is likely to have been generated from
+ * a (possibly out of date) copy of the src file,
+ * so loading it is at best redundant.
*/
-#ifdef BINDIR
- add_hometable(NULL, BINDIR "/.sysless", 1);
-#endif
/*
- * Try to add the tables in the system lesskey file.
+ * Try to add tables in system lesskey src file.
*/
- add_hometable("LESSKEY_SYSTEM", LESSKEYFILE_SYS, 1);
+#if HAVE_LESSKEYSRC
+ if (add_hometable(lesskey_src, "LESSKEYIN_SYSTEM", LESSKEYINFILE_SYS, 1) != 0)
+#endif
+ {
+ /*
+ * Try to add the tables in the system lesskey binary file.
+ */
+ add_hometable(lesskey, "LESSKEY_SYSTEM", LESSKEYFILE_SYS, 1);
+ }
/*
- * Try to add the tables in the standard lesskey file "$HOME/.less".
+ * Try to add tables in the lesskey src file "$HOME/.lesskey".
*/
- add_hometable("LESSKEY", LESSKEYFILE, 0);
+#if HAVE_LESSKEYSRC
+ if (add_hometable(lesskey_src, "LESSKEYIN", DEF_LESSKEYINFILE, 0) != 0)
+#endif
+ {
+ /*
+ * Try to add the tables in the standard lesskey binary file "$HOME/.less".
+ */
+ add_hometable(lesskey, "LESSKEY", LESSKEYFILE, 0);
+ }
#endif
}
@@ -877,32 +897,63 @@ lesskey(filename, sysvar)
return (new_lesskey(buf, (int)len, sysvar));
}
+#if HAVE_LESSKEYSRC
+ public int
+lesskey_src(filename, sysvar)
+ char *filename;
+ int sysvar;
+{
+ static struct lesskey_tables tables;
+ int r = parse_lesskey(filename, &tables);
+ if (r != 0)
+ return (r);
+ add_fcmd_table(tables.cmdtable.buf.data, tables.cmdtable.buf.end);
+ add_ecmd_table(tables.edittable.buf.data, tables.edittable.buf.end);
+ add_var_table(sysvar ? &list_sysvar_tables : &list_var_tables,
+ tables.vartable.buf.data, tables.vartable.buf.end);
+ return (0);
+}
+
+ void
+lesskey_parse_error(s)
+ char *s;
+{
+ PARG parg;
+ parg.p_string = s;
+ error("%s", &parg);
+}
+#endif /* HAVE_LESSKEYSRC */
+
/*
- * Add the standard lesskey file "$HOME/.less"
+ * Add a lesskey file.
*/
- public void
-add_hometable(envname, def_filename, sysvar)
+ public int
+add_hometable(call_lesskey, envname, def_filename, sysvar)
+ int (*call_lesskey)(char *, int);
char *envname;
char *def_filename;
int sysvar;
{
char *filename;
- PARG parg;
+ int r;
if (envname != NULL && (filename = lgetenv(envname)) != NULL)
filename = save(filename);
- else if (sysvar)
+ else if (sysvar) /* def_filename is full path */
filename = save(def_filename);
- else
- filename = homefile(def_filename);
- if (filename == NULL)
- return;
- if (lesskey(filename, sysvar) < 0)
+ else /* def_filename is just basename */
{
- parg.p_string = filename;
- error("Cannot use lesskey file \"%s\"", &parg);
+ char *xdg = lgetenv("XDG_CONFIG_HOME");
+ if (!isnullenv(xdg))
+ filename = dirfile(xdg, def_filename+1, 1);
+ if (filename == NULL)
+ filename = homefile(def_filename);
}
+ if (filename == NULL)
+ return -1;
+ r = (*call_lesskey)(filename, sysvar);
free(filename);
+ return (r);
}
#endif
diff --git a/contrib/less/edit.c b/contrib/less/edit.c
index 12631dba6bac..529ed75b0afe 100644
--- a/contrib/less/edit.c
+++ b/contrib/less/edit.c
@@ -26,6 +26,7 @@ extern int force_open;
extern int is_tty;
extern int sigs;
extern int hshift;
+extern int want_filesize;
extern IFILE curr_ifile;
extern IFILE old_ifile;
extern struct scrpos initial_scrpos;
@@ -487,7 +488,8 @@ edit_ifile(ifile)
cmd_addhist(ml_examine, qfilename, 1);
free(qfilename);
}
-
+ if (want_filesize)
+ scan_eof();
}
free(filename);
return (0);
diff --git a/contrib/less/filename.c b/contrib/less/filename.c
index 177cb946364a..aba8d3a362e3 100644
--- a/contrib/less/filename.c
+++ b/contrib/less/filename.c
@@ -216,10 +216,11 @@ shell_quote(s)
* Return a pathname that points to a specified file in a specified directory.
* Return NULL if the file does not exist in the directory.
*/
- static char *
-dirfile(dirname, filename)
+ public char *
+dirfile(dirname, filename, must_exist)
char *dirname;
char *filename;
+ int must_exist;
{
char *pathname;
int len;
@@ -235,17 +236,20 @@ dirfile(dirname, filename)
if (pathname == NULL)
return (NULL);
SNPRINTF3(pathname, len, "%s%s%s", dirname, PATHNAME_SEP, filename);
- /*
- * Make sure the file exists.
- */
- f = open(pathname, OPEN_READ);
- if (f < 0)
+ if (must_exist)
{
- free(pathname);
- pathname = NULL;
- } else
- {
- close(f);
+ /*
+ * Make sure the file exists.
+ */
+ f = open(pathname, OPEN_READ);
+ if (f < 0)
+ {
+ free(pathname);
+ pathname = NULL;
+ } else
+ {
+ close(f);
+ }
}
return (pathname);
}
@@ -259,25 +263,19 @@ homefile(filename)
{
char *pathname;
- /*
- * Try $HOME/filename.
- */
- pathname = dirfile(lgetenv("HOME"), filename);
+ /* Try $HOME/filename. */
+ pathname = dirfile(lgetenv("HOME"), filename, 1);
if (pathname != NULL)
return (pathname);
#if OS2
- /*
- * Try $INIT/filename.
- */
- pathname = dirfile(lgetenv("INIT"), filename);
+ /* Try $INIT/filename. */
+ pathname = dirfile(lgetenv("INIT"), filename, 1);
if (pathname != NULL)
return (pathname);
#endif
#if MSDOS_COMPILER || OS2
- /*
- * Look for the file anywhere on search path.
- */
- pathname = (char *) calloc(_MAX_PATH, sizeof(char));
+ /* Look for the file anywhere on search path. */
+ pathname = (char *) ecalloc(_MAX_PATH, sizeof(char));
#if MSDOS_COMPILER==DJGPPC
{
char *res = searchpath(filename);
@@ -517,6 +515,7 @@ seek_filesize(f)
return ((POSITION) spos);
}
+#if HAVE_POPEN
/*
* Read a string from a file.
* Return a pointer to the string in memory.
@@ -560,10 +559,6 @@ readfd(fd)
return (buf);
}
-
-
-#if HAVE_POPEN
-
/*
* Execute a shell command.
* Return a pointer to a pipe connected to the shell command's standard output.
@@ -812,6 +807,7 @@ lrealpath(path)
return (save(path));
}
+#if HAVE_POPEN
/*
* Return number of %s escapes in a string.
* Return a large number if there are any other % escapes besides %s.
@@ -837,6 +833,7 @@ num_pct_s(lessopen)
}
return (num);
}
+#endif
/*
* See if we should open a "replacement file"
@@ -953,10 +950,13 @@ open_altfile(filename, pf, pfd)
cmd = readfd(fd);
pclose(fd);
if (*cmd == '\0')
+ {
/*
* Pipe is empty. This means there is no alt file.
*/
+ free(cmd);
return (NULL);
+ }
return (cmd);
#endif /* HAVE_POPEN */
}
@@ -1122,4 +1122,3 @@ last_component(name)
}
return (name);
}
-
diff --git a/contrib/less/funcs.h b/contrib/less/funcs.h
index 12930356c938..330540ac2156 100644
--- a/contrib/less/funcs.h
+++ b/contrib/less/funcs.h
@@ -106,7 +106,8 @@ public int ecmd_decode LESSPARAMS ((char *cmd, char **sp));
public char * lgetenv LESSPARAMS ((char *var));
public int isnullenv LESSPARAMS ((char* s));
public int lesskey LESSPARAMS ((char *filename, int sysvar));
-public void add_hometable LESSPARAMS ((char *envname, char *def_filename, int sysvar));
+public int lesskey_src LESSPARAMS ((char *filename, int sysvar));
+public int add_hometable LESSPARAMS ((int (*call_lesskey)(char *, int), char *envname, char *def_filename, int sysvar));
public int editchar LESSPARAMS ((int c, int flags));
public void init_textlist LESSPARAMS ((struct textlist *tlist, char *str));
public char * forw_textlist LESSPARAMS ((struct textlist *tlist, char *prev));
@@ -129,6 +130,7 @@ public void use_logfile LESSPARAMS ((char *filename));
public char * shell_unquote LESSPARAMS ((char *str));
public char * get_meta_escape LESSPARAMS ((VOID_PARAM));
public char * shell_quote LESSPARAMS ((char *s));
+public char * dirfile LESSPARAMS ((char *dirname, char *filename, int must_exist));
public char * homefile LESSPARAMS ((char *filename));
public char * fexpand LESSPARAMS ((char *s));
public char * fcomplete LESSPARAMS ((char *s));
@@ -213,6 +215,7 @@ public void add_lnum LESSPARAMS ((LINENUM linenum, POSITION pos));
public LINENUM find_linenum LESSPARAMS ((POSITION pos));
public POSITION find_pos LESSPARAMS ((LINENUM linenum));
public LINENUM currline LESSPARAMS ((int where));
+public void scan_eof LESSPARAMS ((VOID_PARAM));
public void lsystem LESSPARAMS ((char *cmd, char *donemsg));
public int pipe_mark LESSPARAMS ((int c, char *cmd));
public int pipe_data LESSPARAMS ((char *cmd, POSITION spos, POSITION epos));
@@ -235,6 +238,7 @@ public void calc_jump_sline LESSPARAMS ((VOID_PARAM));
public void opt_shift LESSPARAMS ((int type, char *s));
public void calc_shift_count LESSPARAMS ((VOID_PARAM));
public void opt_k LESSPARAMS ((int type, char *s));
+public void opt_ks LESSPARAMS ((int type, char *s));
public void opt_t LESSPARAMS ((int type, char *s));
public void opt__T LESSPARAMS ((int type, char *s));
public void opt_p LESSPARAMS ((int type, char *s));
@@ -251,6 +255,7 @@ public void opt_mousecap LESSPARAMS ((int type, char *s));
public void opt_wheel_lines LESSPARAMS ((int type, char *s));
public void opt_linenum_width LESSPARAMS ((int type, char *s));
public void opt_status_col_width LESSPARAMS ((int type, char *s));
+public void opt_filesize LESSPARAMS ((int type, char *s));
public void opt_ttyin_name LESSPARAMS ((int type, char *s));
public void opt_rstat LESSPARAMS ((int type, char *s));
public int get_swindow LESSPARAMS ((VOID_PARAM));
@@ -280,6 +285,7 @@ public void put_line LESSPARAMS ((VOID_PARAM));
public void flush LESSPARAMS ((VOID_PARAM));
public void set_output LESSPARAMS ((int fd));
public int putchr LESSPARAMS ((int c));
+public void clear_bot_if_needed LESSPARAMS ((VOID_PARAM));
public void putstr LESSPARAMS ((constant char *s));
public int less_printf LESSPARAMS ((char *fmt, PARG *parg));
public void get_return LESSPARAMS ((VOID_PARAM));
@@ -342,3 +348,7 @@ public void close_getchr LESSPARAMS ((VOID_PARAM));
public int default_wheel_lines LESSPARAMS ((VOID_PARAM));
public void rstat LESSPARAMS ((char st));
public int getchr LESSPARAMS ((VOID_PARAM));
+public void xbuf_init LESSPARAMS ((struct xbuffer *xbuf));
+public void xbuf_deinit LESSPARAMS ((struct xbuffer *xbuf));
+public void xbuf_reset LESSPARAMS ((struct xbuffer *xbuf));
+public void xbuf_add LESSPARAMS ((struct xbuffer *xbuf, char ch));
diff --git a/contrib/less/help.c b/contrib/less/help.c
index f5b4aa1fbf1a..9dabd43ca221 100644
--- a/contrib/less/help.c
+++ b/contrib/less/help.c
@@ -1,4 +1,4 @@
-/* This file was generated by mkhelp.pl from less.hlp at 14:59 on 2021/4/28 */
+/* This file was generated by mkhelp.pl from less.hlp at 17:45 on 2021/6/3 */
#include "less.h"
constant char helpdata[] = {
'\n',
@@ -208,6 +208,8 @@ 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',
' ',' ','-','#',' ','[','_','\b','N',']',' ',' ','.','.','.','.',' ',' ','-','-','s','h','i','f','t','=','[','_','\b','N',']','\n',
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','S','e','t',' ','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',
+' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','-','-','f','i','l','e','-','s','i','z','e','\n',
+' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','A','u','t','o','m','a','t','i','c','a','l','l','y',' ','d','e','t','e','r','m','i','n','e',' ','t','h','e',' ','s','i','z','e',' ','o','f',' ','t','h','e',' ','i','n','p','u','t',' ','f','i','l','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',
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','-','-','i','n','c','s','e','a','r','c','h','\n',
diff --git a/contrib/less/less.h b/contrib/less/less.h
index 4751976bac18..83e31514be3e 100644
--- a/contrib/less/less.h
+++ b/contrib/less/less.h
@@ -571,6 +571,7 @@ struct loption;
struct hilite_tree;
struct ansi_state;
#include "pattern.h"
+#include "xbuf.h"
#include "funcs.h"
/* Functions not included in funcs.h */
diff --git a/contrib/less/less.hlp b/contrib/less/less.hlp
index 1e1ebf447711..333a0b576c5e 100644
--- a/contrib/less/less.hlp
+++ b/contrib/less/less.hlp
@@ -205,6 +205,8 @@
Don't display tildes after end of file.
-# [_N] .... --shift=[_N]
Set horizontal scroll amount (0 = one half screen width).
+ --file-size
+ Automatically determine the size of the input file.
--follow-name
The F command changes files if the input file is renamed.
--incsearch
diff --git a/contrib/less/less.nro b/contrib/less/less.nro
index f148ccb76d98..7c8372b500c6 100644
--- a/contrib/less/less.nro
+++ b/contrib/less/less.nro
@@ -1,5 +1,5 @@
'\" t
-.TH LESS 1 "Version 581.2: 28 Apr 2021"
+.TH LESS 1 "Version 590: 03 Jun 2021"
.SH NAME
less \- opposite of more
.SH SYNOPSIS
@@ -759,13 +759,38 @@ Causes
.I less
to open and interpret the named file as a
.IR lesskey (1)
-file.
+binary file.
Multiple \-k options may be specified.
If the LESSKEY or LESSKEY_SYSTEM environment variable is set, or
if a lesskey file is found in a standard place (see KEY BINDINGS),
it is also used as a
.I lesskey
file.
+.IP "\-\-lesskey-src=\fIfilename\fP"
+Causes
+.I less
+to open and interpret the named file as a
+.IR lesskey (1)
+source file.
+If the LESSKEYIN or LESSKEYIN_SYSTEM environment variable is set, or
+if a lesskey source file is found in a standard place (see KEY BINDINGS),
+it is also used as a
+.I "lesskey source"
+file.
+Prior to version 582, the
+.I lesskey
+program needed to be run to convert a
+.I "lesskey source"
+file to a
+.I "lesskey binary"
+file for
+.I less
+to use.
+Newer versions of
+.I less
+read the
+.I "lesskey source"
+file directly and ignore the binary file if the source file exists.
.IP "\-K or \-\-quit-on-intr"
Causes
.I less
@@ -1054,6 +1079,12 @@ If the number is specified as a fraction, the actual number of
scroll positions is recalculated if the terminal window is resized,
so that the actual scroll remains at the specified fraction
of the screen width.
+.IP "\-\-file-size"
+If \-\-file-size is specified,
+.I less
+will determine the size of the file
+immediately after opening the file.
+Normally this is not done, because it can be slow if the input file is large.
.IP "\-\-follow-name"
Normally, if the input file is renamed while an F command is executing,
.I less
@@ -1222,57 +1253,61 @@ Delete the entire command line and return to the main prompt.
.SH "KEY BINDINGS"
You may define your own
.I less
-commands by using the program
-.IR lesskey (1)
-to create a lesskey file.
+commands by creating a lesskey source file.
This file specifies a set of command keys and an action
associated with each key.
-You may also use
-.I lesskey
-to change the line-editing keys (see LINE EDITING),
+You may also change the line-editing keys (see LINE EDITING),
and to set environment variables.
-If the environment variable LESSKEY is set,
+If the environment variable LESSKEYIN is set,
.I less
-uses that as the name of the lesskey file.
+uses that as the name of the lesskey source file.
Otherwise,
.I less
-looks in a standard place for the lesskey file:
+looks in a standard place for the lesskey source file:
On Unix systems,
.I less
-looks for a lesskey file called "$HOME/.less".
+looks for a lesskey file called "$XDG_CONFIG_HOME/lesskey" or "$HOME/.lesskey".
On MS-DOS and Windows systems,
.I less
-looks for a lesskey file called "$HOME/_less", and if it is not found there,
-then looks for a lesskey file called "_less" in any directory specified
+looks for a lesskey file called "$HOME/_lesskey", and if it is not found there,
+then looks for a lesskey file called "_lesskey" in any directory specified
in the PATH environment variable.
On OS/2 systems,
.I less
-looks for a lesskey file called "$HOME/less.ini", and if it is not found,
-then looks for a lesskey file called "less.ini" in any directory specified
+looks for a lesskey file called "$HOME/lesskey.ini", and if it is not found,
+then looks for a lesskey file called "lesskey.ini" in any directory specified
in the INIT environment variable, and if it not found there,
-then looks for a lesskey file called "less.ini" in any directory specified
+then looks for a lesskey file called "lesskey.ini" in any directory specified
in the PATH environment variable.
See the
.I lesskey
manual page for more details.
-.P
-A system-wide lesskey file may also be set up to provide key bindings.
+.PP
+A system-wide lesskey source file may also be set up to provide key bindings.
If a key is defined in both a local lesskey file and in the
system-wide file, key bindings in the local file take precedence over
those in the system-wide file.
-If the environment variable LESSKEY_SYSTEM is set,
+If the environment variable LESSKEYIN_SYSTEM is set,
.I less
uses that as the name of the system-wide lesskey file.
Otherwise,
.I less
looks in a standard place for the system-wide lesskey file:
-On Unix systems, the system-wide lesskey file is /usr/local/etc/sysless.
+On Unix systems, the system-wide lesskey file is /usr/local/etc/syslesskey.
(However, if
.I less
was built with a different sysconf directory than /usr/local/etc,
that directory is where the sysless file is found.)
-On MS-DOS and Windows systems, the system-wide lesskey file is c:\e_sysless.
-On OS/2 systems, the system-wide lesskey file is c:\esysless.ini.
+On MS-DOS and Windows systems, the system-wide lesskey file is c:\e_syslesskey.
+On OS/2 systems, the system-wide lesskey file is c:\esyslesskey.ini.
+.PP
+Previous versions of
+.I less
+(before v582) used lesskey files with a binary format, produced by the
+.I lesskey
+program. It is no longer necessary to use the
+.I lesskey
+program.
.
.SH "INPUT PREPROCESSOR"
You may define an "input preprocessor" for
@@ -1890,20 +1925,29 @@ Name of the history file used to remember search commands and
shell commands between invocations of
.IR less .
If set to "\-" or "/dev/null", a history file is not used.
-The default is "$HOME/.lesshst" on Unix systems, "$HOME/_lesshst" on
-DOS and Windows systems, or "$HOME/lesshst.ini" or "$INIT/lesshst.ini"
+The default is "$XDG_DATA_HOME/lesshst" or "$HOME/.lesshst" on Unix systems,
+"$HOME/_lesshst" on DOS and Windows systems,
+or "$HOME/lesshst.ini" or "$INIT/lesshst.ini"
on OS/2 systems.
.IP LESSHISTSIZE
The maximum number of commands to save in the history file.
The default is 100.
+.IP LESSKEYIN
+Name of the default
+.I "lesskey source"
+file.
.IP LESSKEY
Name of the default
-.IR lesskey (1)
+.I "lesskey binary"
+file. (Not used if "$LESSKEYIN" exists.)
+.IP LESSKEYIN_SYSTEM
+Name of the default system-wide
+.I "lesskey source"
file.
.IP LESSKEY_SYSTEM
Name of the default system-wide
-.IR lesskey (1)
-file.
+.I "lesskey binary"
+file. (Not used if "$LESSKEYIN_SYSTEM" exists.)
.IP LESSMETACHARS
List of characters which are considered "metacharacters" by the shell.
.IP LESSMETAESCAPE
@@ -1981,4 +2025,4 @@ Report bugs at https://github.com/gwsw/less/issues.
.br
For more information, see the less homepage at
.br
-https://greenwoodsoftware.com/less.
+https://greenwoodsoftware.com/less
diff --git a/contrib/less/lessecho.nro b/contrib/less/lessecho.nro
index 484efa135d34..4733a93edd68 100644
--- a/contrib/less/lessecho.nro
+++ b/contrib/less/lessecho.nro
@@ -1,4 +1,4 @@
-.TH LESSECHO 1 "Version 581.2: 28 Apr 2021"
+.TH LESSECHO 1 "Version 590: 03 Jun 2021"
.SH NAME
lessecho \- expand metacharacters
.SH SYNOPSIS
diff --git a/contrib/less/lesskey.c b/contrib/less/lesskey.c
index de7a9bfc8311..b5130cccb8f7 100644
--- a/contrib/less/lesskey.c
+++ b/contrib/less/lesskey.c
@@ -80,121 +80,12 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/
-#include "less.h"
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
#include "lesskey.h"
#include "cmd.h"
-
-struct cmdname
-{
- char *cn_name;
- int cn_action;
-};
-
-struct cmdname cmdnames[] =
-{
- { "back-bracket", A_B_BRACKET },
- { "back-line", A_B_LINE },
- { "back-line-force", A_BF_LINE },
- { "back-screen", A_B_SCREEN },
- { "back-scroll", A_B_SCROLL },
- { "back-search", A_B_SEARCH },
- { "back-window", A_B_WINDOW },
- { "clear-mark", A_CLRMARK },
- { "debug", A_DEBUG },
- { "digit", A_DIGIT },
- { "display-flag", A_DISP_OPTION },
- { "display-option", A_DISP_OPTION },
- { "end", A_GOEND },
- { "end-scroll", A_RRSHIFT },
- { "examine", A_EXAMINE },
- { "filter", A_FILTER },
- { "first-cmd", A_FIRSTCMD },
- { "firstcmd", A_FIRSTCMD },
- { "flush-repaint", A_FREPAINT },
- { "forw-bracket", A_F_BRACKET },
- { "forw-forever", A_F_FOREVER },
- { "forw-until-hilite", A_F_UNTIL_HILITE },
- { "forw-line", A_F_LINE },
- { "forw-line-force", A_FF_LINE },
- { "forw-screen", A_F_SCREEN },
- { "forw-screen-force", A_FF_SCREEN },
- { "forw-scroll", A_F_SCROLL },
- { "forw-search", A_F_SEARCH },
- { "forw-window", A_F_WINDOW },
- { "goto-end", A_GOEND },
- { "goto-end-buffered", A_GOEND_BUF },
- { "goto-line", A_GOLINE },
- { "goto-mark", A_GOMARK },
- { "help", A_HELP },
- { "index-file", A_INDEX_FILE },
- { "invalid", A_UINVALID },
- { "left-scroll", A_LSHIFT },
- { "next-file", A_NEXT_FILE },
- { "next-tag", A_NEXT_TAG },
- { "noaction", A_NOACTION },
- { "no-scroll", A_LLSHIFT },
- { "percent", A_PERCENT },
- { "pipe", A_PIPE },
- { "prev-file", A_PREV_FILE },
- { "prev-tag", A_PREV_TAG },
- { "quit", A_QUIT },
- { "remove-file", A_REMOVE_FILE },
- { "repaint", A_REPAINT },
- { "repaint-flush", A_FREPAINT },
- { "repeat-search", A_AGAIN_SEARCH },
- { "repeat-search-all", A_T_AGAIN_SEARCH },
- { "reverse-search", A_REVERSE_SEARCH },
- { "reverse-search-all", A_T_REVERSE_SEARCH },
- { "right-scroll", A_RSHIFT },
- { "set-mark", A_SETMARK },
- { "set-mark-bottom", A_SETMARKBOT },
- { "shell", A_SHELL },
- { "status", A_STAT },
- { "toggle-flag", A_OPT_TOGGLE },
- { "toggle-option", A_OPT_TOGGLE },
- { "undo-hilite", A_UNDO_SEARCH },
- { "clear-search", A_CLR_SEARCH },
- { "version", A_VERSION },
- { "visual", A_VISUAL },
- { NULL, 0 }
-};
-
-struct cmdname editnames[] =
-{
- { "back-complete", EC_B_COMPLETE },
- { "backspace", EC_BACKSPACE },
- { "delete", EC_DELETE },
- { "down", EC_DOWN },
- { "end", EC_END },
- { "expand", EC_EXPAND },
- { "forw-complete", EC_F_COMPLETE },
- { "home", EC_HOME },
- { "insert", EC_INSERT },
- { "invalid", EC_UINVALID },
- { "kill-line", EC_LINEKILL },
- { "abort", EC_ABORT },
- { "left", EC_LEFT },
- { "literal", EC_LITERAL },
- { "right", EC_RIGHT },
- { "up", EC_UP },
- { "word-backspace", EC_W_BACKSPACE },
- { "word-delete", EC_W_DELETE },
- { "word-left", EC_W_LEFT },
- { "word-right", EC_W_RIGHT },
- { NULL, 0 }
-};
-
-struct table
-{
- struct cmdname *names;
- char *pbuffer;
- char buffer[MAX_USERCMD];
-};
-
-struct table cmdtable;
-struct table edittable;
-struct table vartable;
-struct table *currtable = &cmdtable;
+#include "defines.h"
char fileheader[] = {
C0_LESSKEY_MAGIC,
@@ -215,26 +106,44 @@ char endsection[1] = { END_SECTION };
char *infile = NULL;
char *outfile = NULL ;
-int linenum;
-int errors;
-
extern char version[];
- void
-usage(VOID_PARAM)
+ static void
+usage(void)
{
fprintf(stderr, "usage: lesskey [-o output] [input]\n");
exit(1);
}
- char *
+ void
+lesskey_parse_error(s)
+ char *s;
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+ void *
+ecalloc(count, size)
+ int count;
+ unsigned int size;
+{
+ void *p;
+
+ p = calloc(count, size);
+ if (p != NULL)
+ return (p);
+ fprintf(stderr, "lesskey: cannot allocate %d bytes of memory\n", count*size);
+ exit(1);
+}
+
+ static char *
mkpathname(dirname, filename)
char *dirname;
char *filename;
{
char *pathname;
*** 1959 LINES SKIPPED ***
More information about the dev-commits-src-all
mailing list