From owner-freebsd-bugs@FreeBSD.ORG Wed May 5 02:50:25 2004 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id E03A116A4CF for ; Wed, 5 May 2004 02:50:25 -0700 (PDT) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 0706143D45 for ; Wed, 5 May 2004 02:50:25 -0700 (PDT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) i459oOfX024889 for ; Wed, 5 May 2004 02:50:24 -0700 (PDT) (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.12.11/8.12.11/Submit) id i459oOwi024888; Wed, 5 May 2004 02:50:24 -0700 (PDT) (envelope-from gnats) Resent-Date: Wed, 5 May 2004 02:50:24 -0700 (PDT) Resent-Message-Id: <200405050950.i459oOwi024888@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Jeremy Chadwick Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id A4B0116A4CE for ; Wed, 5 May 2004 02:43:11 -0700 (PDT) Received: from mail.parodius.com (mail.parodius.com [64.62.145.229]) by mx1.FreeBSD.org (Postfix) with ESMTP id 1FCEE43D48 for ; Wed, 5 May 2004 02:43:11 -0700 (PDT) (envelope-from jdc@pentarou.parodius.com) Received: from pentarou.parodius.com (jdc@localhost [127.0.0.1]) by mail.parodius.com (8.12.11/8.12.11) with ESMTP id i459hAPn081430 for ; Wed, 5 May 2004 02:43:10 -0700 (PDT) (envelope-from jdc@pentarou.parodius.com) Received: (from jdc@localhost) by pentarou.parodius.com (8.12.11/8.12.11/Submit) id i459hAOX081429; Wed, 5 May 2004 02:43:10 -0700 (PDT) (envelope-from jdc) Message-Id: <200405050943.i459hAOX081429@pentarou.parodius.com> Date: Wed, 5 May 2004 02:43:10 -0700 (PDT) From: Jeremy Chadwick To: FreeBSD-gnats-submit@FreeBSD.org X-Send-Pr-Version: 3.113 Subject: gnu/66279: less(1) -- add support for stty(1) erase2/VERASE2 control character X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: Jeremy Chadwick List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 05 May 2004 09:50:26 -0000 >Number: 66279 >Category: gnu >Synopsis: less(1) -- add support for stty(1) erase2/VERASE2 control character >Confidential: no >Severity: non-critical >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Wed May 05 02:50:24 PDT 2004 >Closed-Date: >Last-Modified: >Originator: Jeremy Chadwick >Release: FreeBSD 4.9-STABLE i386 >Organization: Parodius Networking >Environment: System: FreeBSD pentarou.parodius.com 4.9-STABLE FreeBSD 4.9-STABLE #0: Wed Mar 17 23:46:30 PST 2004 root@pentarou.parodius.com:/usr/obj/usr/src/sys/PENTAROU i386 >Description: less(1) lacks support for FreeBSD's erase2/VERASE2 stty(1) control character. Attempting to input whatever is assigned to erase2 results in the character being echoed, rather than being handled. >How-To-Repeat: Try inputting the character defined in stty(1) erase2/VERASE2 while inside less(1). Example: # stty -a | grep erase2 eol2 = ; erase = ^?; erase2 = ^H; intr = ^C; kill = ^U; # less /etc/rc.conf { hit '/' for search } { type in 'test' } { hit Control-H -- character is echoed on screen } >Fix: See attached patch below. Tested on 4.9-STABLE and 5.2-CURRENT. diff -ruN contrib/less.orig/command.c contrib/less/command.c --- contrib/less.orig/command.c Wed Jul 19 02:24:25 2000 +++ contrib/less/command.c Wed May 5 02:27:33 2004 @@ -19,7 +19,7 @@ #include "option.h" #include "cmd.h" -extern int erase_char, kill_char; +extern int erase_char, erase2_char, kill_char; extern int sigs; extern int quit_at_eof; extern int quit_if_one_screen; @@ -387,7 +387,7 @@ * Already have a match for the name. * Don't accept anything but erase/kill. */ - if (c == erase_char || c == kill_char) + if (c == erase_char || c == erase2_char || c == kill_char) return (MCA_DONE); return (MCA_MORE); } @@ -425,7 +425,7 @@ } } else { - if (c == erase_char || c == kill_char) + if (c == erase_char || c == erase2_char || c == kill_char) break; if (optchar != '\0') /* We already have the option letter. */ @@ -1459,7 +1459,7 @@ break; start_mca(A_SETMARK, "mark: ", (void*)NULL, 0); c = getcc(); - if (c == erase_char || c == kill_char || + if (c == erase_char || c == erase2_char || c == kill_char || c == '\n' || c == '\r') break; setmark(c); @@ -1471,7 +1471,7 @@ */ start_mca(A_GOMARK, "goto mark: ", (void*)NULL, 0); c = getcc(); - if (c == erase_char || c == kill_char || + if (c == erase_char || c == erase2_char || c == kill_char || c == '\n' || c == '\r') break; gomark(c); @@ -1486,7 +1486,7 @@ } start_mca(A_PIPE, "|mark: ", (void*)NULL, 0); c = getcc(); - if (c == erase_char || c == kill_char) + if (c == erase_char || c == erase2_char || c == kill_char) break; if (c == '\n' || c == '\r') c = '.'; diff -ruN contrib/less.orig/decode.c contrib/less/decode.c --- contrib/less.orig/decode.c Wed Jul 19 02:24:25 2000 +++ contrib/less/decode.c Wed May 5 02:27:56 2004 @@ -34,7 +34,7 @@ #include "cmd.h" #include "lesskey.h" -extern int erase_char, kill_char; +extern int erase_char, erase2_char, kill_char; extern int secure; #define SK(k) \ @@ -745,7 +745,7 @@ * but give it the edit-commands command table * This table is constructed to match the user's keyboard. */ - if (c == erase_char) + if (c == erase_char || c == erase2_char) return (EC_BACKSPACE); if (c == kill_char) return (EC_LINEKILL); diff -ruN contrib/less.orig/screen.c contrib/less/screen.c --- contrib/less.orig/screen.c Wed Jul 19 02:24:26 2000 +++ contrib/less/screen.c Wed May 5 02:28:42 2004 @@ -188,7 +188,7 @@ public int auto_wrap; /* Terminal does \r\n when write past margin */ public int ignaw; /* Terminal ignores \n immediately after wrap */ -public int erase_char, kill_char; /* The user's erase and line-kill chars */ +public int erase_char, erase2_char, kill_char; /* The user's erase and line-kill chars */ public int werase_char; /* The user's word-erase char */ public int sc_width, sc_height; /* Height & width of screen */ public int bo_s_width, bo_e_width; /* Printing width of boldface seq */ @@ -338,6 +338,7 @@ } #endif erase_char = s.c_cc[VERASE]; + erase2_char = s.c_cc[VERASE2]; kill_char = s.c_cc[VKILL]; #ifdef VWERASE werase_char = s.c_cc[VWERASE]; @@ -462,6 +463,7 @@ ospeed = s.c_cflag & CBAUD; #endif erase_char = s.c_cc[VERASE]; + erase_char = s.c_cc[VERASE2]; kill_char = s.c_cc[VKILL]; #ifdef VWERASE werase_char = s.c_cc[VWERASE]; >Release-Note: >Audit-Trail: >Unformatted: