svn commit: r330570 - in stable/11: contrib/less usr.bin/less
Xin LI
delphij at FreeBSD.org
Wed Mar 7 06:13:48 UTC 2018
Author: delphij
Date: Wed Mar 7 06:13:47 2018
New Revision: 330570
URL: https://svnweb.freebsd.org/changeset/base/330570
Log:
MFC r316339,317396,317829,326010,329554: less v530.
Relnotes: yes
Added:
stable/11/contrib/less/fmt.uni
- copied unchanged from r326010, head/contrib/less/fmt.uni
Deleted:
stable/11/contrib/less/mkhelp.c
Modified:
stable/11/contrib/less/LICENSE
stable/11/contrib/less/NEWS
stable/11/contrib/less/README
stable/11/contrib/less/brac.c
stable/11/contrib/less/ch.c
stable/11/contrib/less/charset.c
stable/11/contrib/less/charset.h
stable/11/contrib/less/cmd.h
stable/11/contrib/less/cmdbuf.c
stable/11/contrib/less/command.c
stable/11/contrib/less/compose.uni
stable/11/contrib/less/cvt.c
stable/11/contrib/less/decode.c
stable/11/contrib/less/edit.c
stable/11/contrib/less/filename.c
stable/11/contrib/less/forwback.c
stable/11/contrib/less/funcs.h
stable/11/contrib/less/help.c
stable/11/contrib/less/ifile.c
stable/11/contrib/less/input.c
stable/11/contrib/less/jump.c
stable/11/contrib/less/less.h
stable/11/contrib/less/less.hlp
stable/11/contrib/less/less.nro
stable/11/contrib/less/lessecho.c
stable/11/contrib/less/lessecho.nro
stable/11/contrib/less/lesskey.c
stable/11/contrib/less/lesskey.h
stable/11/contrib/less/lesskey.nro
stable/11/contrib/less/lglob.h
stable/11/contrib/less/line.c
stable/11/contrib/less/linenum.c
stable/11/contrib/less/lsystem.c
stable/11/contrib/less/main.c
stable/11/contrib/less/mark.c
stable/11/contrib/less/mkutable
stable/11/contrib/less/optfunc.c
stable/11/contrib/less/option.c
stable/11/contrib/less/option.h
stable/11/contrib/less/opttbl.c
stable/11/contrib/less/os.c
stable/11/contrib/less/output.c
stable/11/contrib/less/pattern.c
stable/11/contrib/less/pattern.h
stable/11/contrib/less/pckeys.h
stable/11/contrib/less/position.c
stable/11/contrib/less/position.h
stable/11/contrib/less/prompt.c
stable/11/contrib/less/screen.c
stable/11/contrib/less/scrsize.c
stable/11/contrib/less/search.c
stable/11/contrib/less/signal.c
stable/11/contrib/less/tags.c
stable/11/contrib/less/ttyin.c
stable/11/contrib/less/ubin.uni
stable/11/contrib/less/version.c
stable/11/contrib/less/wide.uni
stable/11/usr.bin/less/defines.h
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/contrib/less/LICENSE
==============================================================================
--- stable/11/contrib/less/LICENSE Wed Mar 7 06:04:25 2018 (r330569)
+++ stable/11/contrib/less/LICENSE Wed Mar 7 06:13:47 2018 (r330570)
@@ -2,7 +2,7 @@
------------
Less
-Copyright (C) 1984-2015 Mark Nudelman
+Copyright (C) 1984-2016 Mark Nudelman
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
Modified: stable/11/contrib/less/NEWS
==============================================================================
--- stable/11/contrib/less/NEWS Wed Mar 7 06:04:25 2018 (r330569)
+++ stable/11/contrib/less/NEWS Wed Mar 7 06:13:47 2018 (r330570)
@@ -11,6 +11,82 @@
======================================================================
+ Major changes between "less" versions 487 and 530
+
+* Don't output terminal init sequence if using -F and file fits on one screen.
+
+* When using -S, mark truncated lines with a special character.
+ The character can be changed or disabled via the new --rscroll option.
+
+* New command M marks the last line displayed on the screen.
+
+* New command ESC-m removes a line mark.
+
+* Status column (enabled via -J) now shows mark letters.
+
+* Status column shows search matches even if highlighting is disabled via -G.
+
+* A second ESC-u command will clear search match markers in the status column.
+
+* Do same ANSI escape code filtering for tag matching that we do for
+ searching, to help when viewing syntax-highlighted code.
+
+* Catch SIGTERM and clean up before exiting.
+
+* Fix bug initializing default charset on Windows.
+
+* Handle keypad ENTER key correctly if it sends something other than newline.
+
+* Fix buffering bug when using stdin with a LESSOPEN pipe.
+
+* On Windows, allow 'u' in -D option to enable underlining.
+
+* On Windows, use underline in sgr mode.
+
+* On Windows, convert UTF-8 to multibyte if console is not UTF-8.
+
+* Update Unicode tables to 2017-03-08.
+
+* Pass-thru Unicode formating chars (Cf type) instead of treating them
+ as binary chars. But treat them as binary if -U is set.
+
+* Fix erroneous binary file warning when UTF-8 file contains ANSI SGR sequences.
+
+* Fix bugs when using LESSOPEN and switching between stdin and other files.
+
+* Fix some bugs handling filenames containing shell metacharacters.
+
+* Fix some memory leaks.
+
+* Allow some debugging environment variables to be set in lesskey file.
+
+* Code improvements:
+ . Use ANSI prototypes in funcs.h declarations.
+ . Fix some const mismatches.
+ . Remove archaic "register" in variable declarations.
+
+======================================================================
+
+ Major changes between "less" versions 481 and 487
+
+* New commands ESC-{ and ESC-} to shift to start/end of displayed lines.
+
+* Make search highlights work correctly when changing caselessness with -i.
+
+* New option -Da in Windows version to enable SGR mode.
+
+* Fix "nothing to search" error when top or bottom line on screen is empty.
+
+* Fix bug when terminal has no "cm" termcap entry.
+
+* Fix incorrect display when entering double-width chars in search string.
+
+* Fix bug in Unicode handling that missed some double width characters.
+
+* Update Unicode database to 9.0.0.
+
+======================================================================
+
Major changes between "less" versions 458 and 481
* Don't overwrite history file; just append to it.
Modified: stable/11/contrib/less/README
==============================================================================
--- stable/11/contrib/less/README Wed Mar 7 06:04:25 2018 (r330569)
+++ stable/11/contrib/less/README Wed Mar 7 06:13:47 2018 (r330570)
@@ -7,9 +7,9 @@
**************************************************************************
**************************************************************************
- Less, version 481
+ Less, version 530
- This is the distribution of less, version 481, released 31 Aug 2015.
+ This is the distribution of less, version 530, released 05 Dec 2017.
This program is part of the GNU project (http://www.gnu.org).
This program is free software. You may redistribute it and/or
@@ -23,6 +23,7 @@
Please report any problems to bug-less at gnu.org.
See http://www.greenwoodsoftware.com/less for the latest info.
+ Source repository is at https://github.com/gwsw/less.git.
=========================================================================
Modified: stable/11/contrib/less/brac.c
==============================================================================
--- stable/11/contrib/less/brac.c Wed Mar 7 06:04:25 2018 (r330569)
+++ stable/11/contrib/less/brac.c Wed Mar 7 06:13:47 2018 (r330570)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 1984-2015 Mark Nudelman
+ * Copyright (C) 1984-2017 Mark Nudelman
*
* You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file.
@@ -25,13 +25,13 @@
*/
public void
match_brac(obrac, cbrac, forwdir, n)
- register int obrac;
- register int cbrac;
+ int obrac;
+ int cbrac;
int forwdir;
int n;
{
- register int c;
- register int nest;
+ int c;
+ int nest;
POSITION pos;
int (*chget)();
Modified: stable/11/contrib/less/ch.c
==============================================================================
--- stable/11/contrib/less/ch.c Wed Mar 7 06:04:25 2018 (r330569)
+++ stable/11/contrib/less/ch.c Wed Mar 7 06:13:47 2018 (r330570)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 1984-2015 Mark Nudelman
+ * Copyright (C) 1984-2017 Mark Nudelman
*
* You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file.
@@ -146,11 +146,11 @@ static int ch_addbuf();
int
ch_get()
{
- register struct buf *bp;
- register struct bufnode *bn;
- register int n;
- register int slept;
- register int h;
+ struct buf *bp;
+ struct bufnode *bn;
+ int n;
+ int slept;
+ int h;
POSITION pos;
POSITION len;
@@ -419,8 +419,8 @@ end_logfile()
public void
sync_logfile()
{
- register struct buf *bp;
- register struct bufnode *bn;
+ struct buf *bp;
+ struct bufnode *bn;
int warned = FALSE;
BLOCKNUM block;
BLOCKNUM nblocks;
@@ -457,9 +457,9 @@ sync_logfile()
buffered(block)
BLOCKNUM block;
{
- register struct buf *bp;
- register struct bufnode *bn;
- register int h;
+ struct buf *bp;
+ struct bufnode *bn;
+ int h;
h = BUFHASH(block);
FOR_BUFS_IN_CHAIN(h, bn)
@@ -477,7 +477,7 @@ buffered(block)
*/
public int
ch_seek(pos)
- register POSITION pos;
+ POSITION pos;
{
BLOCKNUM new_block;
POSITION len;
@@ -544,8 +544,8 @@ ch_end_seek()
public int
ch_end_buffer_seek()
{
- register struct buf *bp;
- register struct bufnode *bn;
+ struct buf *bp;
+ struct bufnode *bn;
POSITION buf_pos;
POSITION end_pos;
@@ -572,8 +572,8 @@ ch_end_buffer_seek()
public int
ch_beg_seek()
{
- register struct bufnode *bn;
- register struct bufnode *firstbn;
+ struct bufnode *bn;
+ struct bufnode *firstbn;
/*
* Try a plain ch_seek first.
@@ -632,7 +632,7 @@ ch_tell()
public int
ch_forw_get()
{
- register int c;
+ int c;
if (thisfile == NULL)
return (EOI);
@@ -695,7 +695,7 @@ ch_setbufspace(bufspace)
public void
ch_flush()
{
- register struct bufnode *bn;
+ struct bufnode *bn;
if (thisfile == NULL)
return;
@@ -762,8 +762,8 @@ ch_flush()
static int
ch_addbuf()
{
- register struct buf *bp;
- register struct bufnode *bn;
+ struct buf *bp;
+ struct bufnode *bn;
/*
* Allocate and initialize a new buffer and link it
@@ -787,7 +787,7 @@ ch_addbuf()
static void
init_hashtbl()
{
- register int h;
+ int h;
for (h = 0; h < BUFHASH_SIZE; h++)
{
@@ -802,7 +802,7 @@ init_hashtbl()
static void
ch_delbufs()
{
- register struct bufnode *bn;
+ struct bufnode *bn;
while (ch_bufhead != END_OF_CHAIN)
{
@@ -867,13 +867,12 @@ ch_init(f, flags)
calloc(1, sizeof(struct filestate));
thisfile->buflist.next = thisfile->buflist.prev = END_OF_CHAIN;
thisfile->nbufs = 0;
- thisfile->flags = 0;
+ thisfile->flags = flags;
thisfile->fpos = 0;
thisfile->block = 0;
thisfile->offset = 0;
thisfile->file = -1;
thisfile->fsize = NULL_POSITION;
- ch_flags = flags;
init_hashtbl();
/*
* Try to seek; set CH_CANSEEK if it works.
@@ -898,7 +897,7 @@ ch_close()
if (thisfile == NULL)
return;
- if (ch_flags & (CH_CANSEEK|CH_POPENED|CH_HELPFILE))
+ if ((ch_flags & (CH_CANSEEK|CH_POPENED|CH_HELPFILE)) && !(ch_flags & CH_KEEPOPEN))
{
/*
* We can seek or re-open, so we don't need to keep buffers.
Modified: stable/11/contrib/less/charset.c
==============================================================================
--- stable/11/contrib/less/charset.c Wed Mar 7 06:04:25 2018 (r330569)
+++ stable/11/contrib/less/charset.c Wed Mar 7 06:13:47 2018 (r330570)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 1984-2015 Mark Nudelman
+ * Copyright (C) 1984-2017 Mark Nudelman
*
* You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file.
@@ -22,6 +22,13 @@
#include "charset.h"
+#if MSDOS_COMPILER==WIN32C
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#endif
+
+extern int bs_mode;
+
public int utf_mode = 0;
/*
@@ -64,6 +71,8 @@ struct cs_alias {
char *oname;
} cs_aliases[] = {
{ "UTF-8", "utf-8" },
+ { "utf8", "utf-8" },
+ { "UTF8", "utf-8" },
{ "ANSI_X3.4-1968", "ascii" },
{ "US-ASCII", "ascii" },
{ "latin1", "iso8859" },
@@ -133,9 +142,9 @@ public int binattr = AT_STANDOUT;
ichardef(s)
char *s;
{
- register char *cp;
- register int n;
- register char v;
+ char *cp;
+ int n;
+ char v;
n = 0;
v = 0;
@@ -188,11 +197,11 @@ ichardef(s)
*/
static int
icharset(name, no_error)
- register char *name;
+ char *name;
int no_error;
{
- register struct charset *p;
- register struct cs_alias *a;
+ struct charset *p;
+ struct cs_alias *a;
if (name == NULL || *name == '\0')
return (0);
@@ -213,7 +222,13 @@ icharset(name, no_error)
{
ichardef(p->desc);
if (p->p_flag != NULL)
+ {
+#if MSDOS_COMPILER==WIN32C
+ *(p->p_flag) = 1 + (GetConsoleOutputCP() != CP_UTF8);
+#else
*(p->p_flag) = 1;
+#endif
+ }
return (1);
}
}
@@ -232,7 +247,7 @@ icharset(name, no_error)
static void
ilocale()
{
- register int c;
+ int c;
for (c = 0; c < (int) sizeof(chardef); c++)
{
@@ -249,16 +264,17 @@ ilocale()
/*
* Define the printing format for control (or binary utf) chars.
*/
- static void
-setbinfmt(s, fmtvarptr, default_fmt)
+ public void
+setfmt(s, fmtvarptr, attrptr, default_fmt)
char *s;
char **fmtvarptr;
+ int *attrptr;
char *default_fmt;
{
if (s && utf_mode)
{
/* It would be too hard to account for width otherwise. */
- char *t = s;
+ char constant *t = s;
while (*t)
{
if (*t < ' ' || *t > '~')
@@ -280,15 +296,15 @@ setbinfmt(s, fmtvarptr, default_fmt)
* Select the attributes if it starts with "*".
*/
attr:
- if (*s == '*')
+ if (*s == '*' && s[1] != '\0')
{
switch (s[1])
{
- case 'd': binattr = AT_BOLD; break;
- case 'k': binattr = AT_BLINK; break;
- case 's': binattr = AT_STANDOUT; break;
- case 'u': binattr = AT_UNDERLINE; break;
- default: binattr = AT_NORMAL; break;
+ case 'd': *attrptr = AT_BOLD; break;
+ case 'k': *attrptr = AT_BLINK; break;
+ case 's': *attrptr = AT_STANDOUT; break;
+ case 'u': *attrptr = AT_UNDERLINE; break;
+ default: *attrptr = AT_NORMAL; break;
}
s += 2;
}
@@ -303,7 +319,15 @@ set_charset()
{
char *s;
+#if MSDOS_COMPILER==WIN32C
/*
+ * If the Windows console is using UTF-8, we'll use it too.
+ */
+ if (GetConsoleOutputCP() == CP_UTF8)
+ if (icharset("utf-8", 1))
+ return;
+#endif
+ /*
* See if environment variable LESSCHARSET is defined.
*/
s = lgetenv("LESSCHARSET");
@@ -352,6 +376,7 @@ set_charset()
* rather than from predefined charset entry.
*/
ilocale();
+#else
#if MSDOS_COMPILER
/*
* Default to "dos".
@@ -381,10 +406,10 @@ init_charset()
set_charset();
s = lgetenv("LESSBINFMT");
- setbinfmt(s, &binfmt, "*s<%02X>");
+ setfmt(s, &binfmt, &binattr, "*s<%02X>");
s = lgetenv("LESSUTFBINFMT");
- setbinfmt(s, &utfbinfmt, "<U+%04lX>");
+ setfmt(s, &utfbinfmt, &binattr, "<U+%04lX>");
}
/*
@@ -484,7 +509,7 @@ prutfchar(ch)
*/
public int
utf_len(ch)
- char ch;
+ unsigned char ch;
{
if ((ch & 0x80) == 0)
return 1;
@@ -506,17 +531,18 @@ utf_len(ch)
* Does the parameter point to the lead byte of a well-formed UTF-8 character?
*/
public int
-is_utf8_well_formed(s, slen)
- unsigned char *s;
+is_utf8_well_formed(ss, slen)
+ char *ss;
int slen;
{
int i;
int len;
+ unsigned char *s = (unsigned char *) ss;
if (IS_UTF8_INVALID(s[0]))
return (0);
- len = utf_len((char) s[0]);
+ len = utf_len(s[0]);
if (len > slen)
return (0);
if (len == 1)
@@ -540,40 +566,25 @@ is_utf8_well_formed(s, slen)
}
/*
- * Return number of invalid UTF-8 sequences found in a buffer.
+ * Skip bytes until a UTF-8 lead byte (11xxxxxx) or ASCII byte (0xxxxxxx) is found.
*/
- public int
-utf_bin_count(data, len)
- unsigned char *data;
- int len;
+ public void
+utf_skip_to_lead(pp, limit)
+ char **pp;
+ char *limit;
{
- int bin_count = 0;
- while (len > 0)
- {
- if (is_utf8_well_formed(data, len))
- {
- int clen = utf_len(*data);
- data += clen;
- len -= clen;
- } else
- {
- /* Skip to next lead byte. */
- bin_count++;
- do {
- ++data;
- --len;
- } while (len > 0 && !IS_UTF8_LEAD(*data));
- }
- }
- return (bin_count);
+ do {
+ ++(*pp);
+ } while (*pp < limit && !IS_UTF8_LEAD((*pp)[0] & 0377) && !IS_ASCII_OCTET((*pp)[0]));
}
+
/*
* Get the value of a UTF-8 character.
*/
public LWCHAR
get_wchar(p)
- char *p;
+ constant char *p;
{
switch (utf_len(p[0]))
{
@@ -677,7 +688,7 @@ put_wchar(pp, ch)
step_char(pp, dir, limit)
char **pp;
signed int dir;
- char *limit;
+ constant char *limit;
{
LWCHAR ch;
int len;
@@ -687,16 +698,16 @@ step_char(pp, dir, limit)
{
/* It's easy if chars are one byte. */
if (dir > 0)
- ch = (LWCHAR) ((p < limit) ? *p++ : 0);
+ ch = (LWCHAR) (unsigned char) ((p < limit) ? *p++ : 0);
else
- ch = (LWCHAR) ((p > limit) ? *--p : 0);
+ ch = (LWCHAR) (unsigned char) ((p > limit) ? *--p : 0);
} else if (dir > 0)
{
len = utf_len(*p);
if (p + len > limit)
{
ch = 0;
- p = limit;
+ p = (char *) limit;
} else
{
ch = get_wchar(p);
@@ -737,6 +748,10 @@ DECLARE_RANGE_TABLE_START(wide)
#include "wide.uni"
DECLARE_RANGE_TABLE_END(wide)
+DECLARE_RANGE_TABLE_START(fmt)
+#include "fmt.uni"
+DECLARE_RANGE_TABLE_END(fmt)
+
/* comb_table is special pairs, not ranges. */
static struct wchar_range comb_table[] = {
{0x0644,0x0622}, {0x0644,0x0623}, {0x0644,0x0625}, {0x0644,0x0627},
@@ -777,7 +792,8 @@ is_in_table(ch, table)
is_composing_char(ch)
LWCHAR ch;
{
- return is_in_table(ch, &compose_table);
+ return is_in_table(ch, &compose_table) ||
+ (bs_mode != BS_CONTROL && is_in_table(ch, &fmt_table));
}
/*
@@ -787,7 +803,21 @@ is_composing_char(ch)
is_ubin_char(ch)
LWCHAR ch;
{
- return is_in_table(ch, &ubin_table);
+ int ubin = is_in_table(ch, &ubin_table) ||
+ (bs_mode == BS_CONTROL && is_in_table(ch, &fmt_table));
+#if MSDOS_COMPILER==WIN32C
+ if (!ubin && utf_mode == 2 && ch < 0x10000)
+ {
+ /*
+ * Consider it binary if it can't be converted.
+ */
+ BOOL used_default = TRUE;
+ WideCharToMultiByte(GetConsoleOutputCP(), WC_NO_BEST_FIT_CHARS, (LPCWSTR) &ch, 1, NULL, 0, NULL, &used_default);
+ if (used_default)
+ ubin = 1;
+ }
+#endif
+ return ubin;
}
/*
Modified: stable/11/contrib/less/charset.h
==============================================================================
--- stable/11/contrib/less/charset.h Wed Mar 7 06:04:25 2018 (r330569)
+++ stable/11/contrib/less/charset.h Wed Mar 7 06:13:47 2018 (r330570)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 1984-2015 Mark Nudelman
+ * Copyright (C) 1984-2017 Mark Nudelman
*
* You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file.
Modified: stable/11/contrib/less/cmd.h
==============================================================================
--- stable/11/contrib/less/cmd.h Wed Mar 7 06:04:25 2018 (r330569)
+++ stable/11/contrib/less/cmd.h Wed Mar 7 06:13:47 2018 (r330570)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 1984-2015 Mark Nudelman
+ * Copyright (C) 1984-2017 Mark Nudelman
*
* You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file.
@@ -8,127 +8,131 @@
*/
-#define MAX_USERCMD 1000
-#define MAX_CMDLEN 16
+#define MAX_USERCMD 1000
+#define MAX_CMDLEN 16
-#define A_B_LINE 2
-#define A_B_SCREEN 3
-#define A_B_SCROLL 4
-#define A_B_SEARCH 5
-#define A_DIGIT 6
-#define A_DISP_OPTION 7
-#define A_DEBUG 8
-#define A_EXAMINE 9
-#define A_FIRSTCMD 10
-#define A_FREPAINT 11
-#define A_F_LINE 12
-#define A_F_SCREEN 13
-#define A_F_SCROLL 14
-#define A_F_SEARCH 15
-#define A_GOEND 16
-#define A_GOLINE 17
-#define A_GOMARK 18
-#define A_HELP 19
-#define A_NEXT_FILE 20
-#define A_PERCENT 21
-#define A_PREFIX 22
-#define A_PREV_FILE 23
-#define A_QUIT 24
-#define A_REPAINT 25
-#define A_SETMARK 26
-#define A_SHELL 27
-#define A_STAT 28
-#define A_FF_LINE 29
-#define A_BF_LINE 30
-#define A_VERSION 31
-#define A_VISUAL 32
-#define A_F_WINDOW 33
-#define A_B_WINDOW 34
-#define A_F_BRACKET 35
-#define A_B_BRACKET 36
-#define A_PIPE 37
-#define A_INDEX_FILE 38
-#define A_UNDO_SEARCH 39
-#define A_FF_SCREEN 40
-#define A_LSHIFT 41
-#define A_RSHIFT 42
-#define A_AGAIN_SEARCH 43
-#define A_T_AGAIN_SEARCH 44
-#define A_REVERSE_SEARCH 45
-#define A_T_REVERSE_SEARCH 46
-#define A_OPT_TOGGLE 47
-#define A_OPT_SET 48
-#define A_OPT_UNSET 49
-#define A_F_FOREVER 50
-#define A_GOPOS 51
-#define A_REMOVE_FILE 52
-#define A_NEXT_TAG 53
-#define A_PREV_TAG 54
-#define A_FILTER 55
-#define A_F_UNTIL_HILITE 56
-#define A_GOEND_BUF 57
+#define A_B_LINE 2
+#define A_B_SCREEN 3
+#define A_B_SCROLL 4
+#define A_B_SEARCH 5
+#define A_DIGIT 6
+#define A_DISP_OPTION 7
+#define A_DEBUG 8
+#define A_EXAMINE 9
+#define A_FIRSTCMD 10
+#define A_FREPAINT 11
+#define A_F_LINE 12
+#define A_F_SCREEN 13
+#define A_F_SCROLL 14
+#define A_F_SEARCH 15
+#define A_GOEND 16
+#define A_GOLINE 17
+#define A_GOMARK 18
+#define A_HELP 19
+#define A_NEXT_FILE 20
+#define A_PERCENT 21
+#define A_PREFIX 22
+#define A_PREV_FILE 23
+#define A_QUIT 24
+#define A_REPAINT 25
+#define A_SETMARK 26
+#define A_SHELL 27
+#define A_STAT 28
+#define A_FF_LINE 29
+#define A_BF_LINE 30
+#define A_VERSION 31
+#define A_VISUAL 32
+#define A_F_WINDOW 33
+#define A_B_WINDOW 34
+#define A_F_BRACKET 35
+#define A_B_BRACKET 36
+#define A_PIPE 37
+#define A_INDEX_FILE 38
+#define A_UNDO_SEARCH 39
+#define A_FF_SCREEN 40
+#define A_LSHIFT 41
+#define A_RSHIFT 42
+#define A_AGAIN_SEARCH 43
+#define A_T_AGAIN_SEARCH 44
+#define A_REVERSE_SEARCH 45
+#define A_T_REVERSE_SEARCH 46
+#define A_OPT_TOGGLE 47
+#define A_OPT_SET 48
+#define A_OPT_UNSET 49
+#define A_F_FOREVER 50
+#define A_GOPOS 51
+#define A_REMOVE_FILE 52
+#define A_NEXT_TAG 53
+#define A_PREV_TAG 54
+#define A_FILTER 55
+#define A_F_UNTIL_HILITE 56
+#define A_GOEND_BUF 57
+#define A_LLSHIFT 58
+#define A_RRSHIFT 59
+#define A_CLRMARK 62
+#define A_SETMARKBOT 63
-#define A_INVALID 100
-#define A_NOACTION 101
-#define A_UINVALID 102
-#define A_END_LIST 103
-#define A_SPECIAL_KEY 104
+#define A_INVALID 100
+#define A_NOACTION 101
+#define A_UINVALID 102
+#define A_END_LIST 103
+#define A_SPECIAL_KEY 104
-#define A_SKIP 127
+#define A_SKIP 127
-#define A_EXTRA 0200
+#define A_EXTRA 0200
/* Line editing characters */
-#define EC_BACKSPACE 1
-#define EC_LINEKILL 2
-#define EC_RIGHT 3
-#define EC_LEFT 4
-#define EC_W_LEFT 5
-#define EC_W_RIGHT 6
-#define EC_INSERT 7
-#define EC_DELETE 8
-#define EC_HOME 9
-#define EC_END 10
-#define EC_W_BACKSPACE 11
-#define EC_W_DELETE 12
-#define EC_UP 13
-#define EC_DOWN 14
-#define EC_EXPAND 15
-#define EC_F_COMPLETE 17
-#define EC_B_COMPLETE 18
-#define EC_LITERAL 19
-#define EC_ABORT 20
+#define EC_BACKSPACE 1
+#define EC_LINEKILL 2
+#define EC_RIGHT 3
+#define EC_LEFT 4
+#define EC_W_LEFT 5
+#define EC_W_RIGHT 6
+#define EC_INSERT 7
+#define EC_DELETE 8
+#define EC_HOME 9
+#define EC_END 10
+#define EC_W_BACKSPACE 11
+#define EC_W_DELETE 12
+#define EC_UP 13
+#define EC_DOWN 14
+#define EC_EXPAND 15
+#define EC_F_COMPLETE 17
+#define EC_B_COMPLETE 18
+#define EC_LITERAL 19
+#define EC_ABORT 20
-#define EC_NOACTION 101
-#define EC_UINVALID 102
+#define EC_NOACTION 101
+#define EC_UINVALID 102
/* Flags for editchar() */
-#define EC_PEEK 01
-#define EC_NOHISTORY 02
-#define EC_NOCOMPLETE 04
-#define EC_NORIGHTLEFT 010
+#define EC_PEEK 01
+#define EC_NOHISTORY 02
+#define EC_NOCOMPLETE 04
+#define EC_NORIGHTLEFT 010
/* Environment variable stuff */
-#define EV_OK 01
+#define EV_OK 01
/* Special keys (keys which output different strings on different terminals) */
-#define SK_SPECIAL_KEY CONTROL('K')
-#define SK_RIGHT_ARROW 1
-#define SK_LEFT_ARROW 2
-#define SK_UP_ARROW 3
-#define SK_DOWN_ARROW 4
-#define SK_PAGE_UP 5
-#define SK_PAGE_DOWN 6
-#define SK_HOME 7
-#define SK_END 8
-#define SK_DELETE 9
-#define SK_INSERT 10
-#define SK_CTL_LEFT_ARROW 11
-#define SK_CTL_RIGHT_ARROW 12
-#define SK_CTL_DELETE 13
-#define SK_F1 14
-#define SK_BACKTAB 15
-#define SK_CTL_BACKSPACE 16
-#define SK_CONTROL_K 40
+#define SK_SPECIAL_KEY CONTROL('K')
+#define SK_RIGHT_ARROW 1
+#define SK_LEFT_ARROW 2
+#define SK_UP_ARROW 3
+#define SK_DOWN_ARROW 4
+#define SK_PAGE_UP 5
+#define SK_PAGE_DOWN 6
+#define SK_HOME 7
+#define SK_END 8
+#define SK_DELETE 9
+#define SK_INSERT 10
+#define SK_CTL_LEFT_ARROW 11
+#define SK_CTL_RIGHT_ARROW 12
+#define SK_CTL_DELETE 13
+#define SK_F1 14
+#define SK_BACKTAB 15
+#define SK_CTL_BACKSPACE 16
+#define SK_CONTROL_K 40
Modified: stable/11/contrib/less/cmdbuf.c
==============================================================================
--- stable/11/contrib/less/cmdbuf.c Wed Mar 7 06:04:25 2018 (r330569)
+++ stable/11/contrib/less/cmdbuf.c Wed Mar 7 06:13:47 2018 (r330570)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 1984-2015 Mark Nudelman
+ * Copyright (C) 1984-2017 Mark Nudelman
*
* You may distribute under the terms of either the GNU General Public
* License or the Less License, as specified in the README file.
@@ -40,7 +40,7 @@ static int in_completion = 0;
static char *tk_text;
static char *tk_original;
static char *tk_ipoint;
-static char *tk_trial;
+static char *tk_trial = NULL;
static struct textlist tk_tlist;
#endif
@@ -76,25 +76,25 @@ struct mlist
*/
struct mlist mlist_search =
{ &mlist_search, &mlist_search, &mlist_search, NULL, 0 };
-public void * constant ml_search = (void *) &mlist_search;
+public void *ml_search = (void *) &mlist_search;
struct mlist mlist_examine =
{ &mlist_examine, &mlist_examine, &mlist_examine, NULL, 0 };
-public void * constant ml_examine = (void *) &mlist_examine;
+public void *ml_examine = (void *) &mlist_examine;
#if SHELL_ESCAPE || PIPEC
struct mlist mlist_shell =
{ &mlist_shell, &mlist_shell, &mlist_shell, NULL, 0 };
-public void * constant ml_shell = (void *) &mlist_shell;
+public void *ml_shell = (void *) &mlist_shell;
#endif
#else /* CMD_HISTORY */
/* If CMD_HISTORY is off, these are just flags. */
-public void * constant ml_search = (void *)1;
-public void * constant ml_examine = (void *)2;
+public void *ml_search = (void *)1;
+public void *ml_examine = (void *)2;
#if SHELL_ESCAPE || PIPEC
-public void * constant ml_shell = (void *)3;
+public void *ml_shell = (void *)3;
#endif
#endif /* CMD_HISTORY */
@@ -141,28 +141,26 @@ clear_cmd()
*/
public void
cmd_putstr(s)
- char *s;
+ constant char *s;
{
LWCHAR prev_ch = 0;
LWCHAR ch;
- char *endline = s + strlen(s);
+ constant char *endline = s + strlen(s);
while (*s != '\0')
{
- char *ns = s;
+ char *ns = (char *) s;
+ int width;
ch = step_char(&ns, +1, endline);
while (s < ns)
putchr(*s++);
if (!utf_mode)
- {
- cmd_col++;
- prompt_col++;
- } else if (!is_composing_char(ch) &&
- !is_combining_char(prev_ch, ch))
- {
- int width = is_wide_char(ch) ? 2 : 1;
- cmd_col += width;
- prompt_col += width;
- }
+ width = 1;
+ else if (is_composing_char(ch) || is_combining_char(prev_ch, ch))
+ width = 0;
+ else
+ width = is_wide_char(ch) ? 2 : 1;
+ cmd_col += width;
+ prompt_col += width;
prev_ch = ch;
}
}
@@ -187,6 +185,8 @@ len_cmdbuf()
/*
* Common part of cmd_step_right() and cmd_step_left().
+ * {{ Returning pwidth and bswidth separately is a historical artifact
+ * since they're always the same. Maybe clean this up someday. }}
*/
static char *
cmd_step_common(p, ch, len, pwidth, bswidth)
@@ -197,58 +197,32 @@ cmd_step_common(p, ch, len, pwidth, bswidth)
int *bswidth;
{
char *pr;
+ int width;
if (len == 1)
{
pr = prchar((int) ch);
- if (pwidth != NULL || bswidth != NULL)
- {
- int len = (int) strlen(pr);
- if (pwidth != NULL)
- *pwidth = len;
- if (bswidth != NULL)
- *bswidth = len;
- }
+ width = (int) strlen(pr);
} else
{
pr = prutfchar(ch);
- if (pwidth != NULL || bswidth != NULL)
+ if (is_composing_char(ch))
+ width = 0;
+ else if (is_ubin_char(ch))
+ width = (int) strlen(pr);
+ else
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-stable-11
mailing list