From owner-svn-src-user@FreeBSD.ORG Fri Nov 15 11:33:37 2013 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 18B3023B; Fri, 15 Nov 2013 11:33:37 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id ED8412314; Fri, 15 Nov 2013 11:33:36 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id rAFBXaUU082789; Fri, 15 Nov 2013 11:33:36 GMT (envelope-from ray@svn.freebsd.org) Received: (from ray@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id rAFBXaHG082787; Fri, 15 Nov 2013 11:33:36 GMT (envelope-from ray@svn.freebsd.org) Message-Id: <201311151133.rAFBXaHG082787@svn.freebsd.org> From: Aleksandr Rybalko Date: Fri, 15 Nov 2013 11:33:36 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r258165 - user/ed/newcons/sys/dev/vt X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.16 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 Nov 2013 11:33:37 -0000 Author: ray Date: Fri Nov 15 11:33:36 2013 New Revision: 258165 URL: http://svnweb.freebsd.org/changeset/base/258165 Log: Add VT_ALT_TO_ESC_HACK enabled by default. This will prepend ESC sequence before any chars when any of ALT keys is down. ! Not sure if it right way, but now it is possible to use Alt keys in vim. Sponsored by: The FreeBSD Foundation Modified: user/ed/newcons/sys/dev/vt/vt.h user/ed/newcons/sys/dev/vt/vt_core.c Modified: user/ed/newcons/sys/dev/vt/vt.h ============================================================================== --- user/ed/newcons/sys/dev/vt/vt.h Fri Nov 15 11:32:19 2013 (r258164) +++ user/ed/newcons/sys/dev/vt/vt.h Fri Nov 15 11:33:36 2013 (r258165) @@ -56,6 +56,10 @@ #endif #endif +#ifndef VT_ALT_TO_ESC_HACK +#define VT_ALT_TO_ESC_HACK 1 +#endif + #define VT_CONSWINDOW 0 #if defined(SC_TWOBUTTON_MOUSE) || defined(VT_TWOBUTTON_MOUSE) @@ -125,6 +129,7 @@ struct vt_device { #define VDF_INITIALIZED 0x20 /* vtterm_cnprobe already done. */ #define VDF_MOUSECURSOR 0x40 /* Mouse cursor visible. */ int vd_keyboard; /* (G) Keyboard index. */ + unsigned int vd_kbstate; /* (?) Device unit. */ unsigned int vd_unit; /* (c) Device unit. */ }; @@ -318,6 +323,7 @@ static struct vt_device driver ## _consd .vd_windows = { [VT_CONSWINDOW] = &driver ## _conswindow, }, \ .vd_curwindow = &driver ## _conswindow, \ .vd_markedwin = NULL, \ + .vd_kbstate = 0, \ }; \ static term_char_t driver ## _constextbuf[(width) * \ (VBF_DEFAULT_HISTORY_SIZE)]; \ Modified: user/ed/newcons/sys/dev/vt/vt_core.c ============================================================================== --- user/ed/newcons/sys/dev/vt/vt_core.c Fri Nov 15 11:32:19 2013 (r258164) +++ user/ed/newcons/sys/dev/vt/vt_core.c Fri Nov 15 11:33:36 2013 (r258165) @@ -390,8 +390,27 @@ vt_processkey(keyboard_t *kbd, struct vt struct vt_window *vw = vd->vd_curwindow; int state = 0; +#if VT_ALT_TO_ESC_HACK + if (c & RELKEY) { + switch (c & ~RELKEY) { + case (SPCLKEY | RALT): + case (SPCLKEY | LALT): + vd->vd_kbstate &= ~ALKED; + } + /* Other keys ignored for RELKEY event. */ + return (0); + } else { + switch (c & ~RELKEY) { + case (SPCLKEY | RALT): + case (SPCLKEY | LALT): + vd->vd_kbstate |= ALKED; + } + } +#else if (c & RELKEY) + /* Other keys ignored for RELKEY event. */ return (0); +#endif if (vt_machine_kbdevent(c)) return (0); @@ -471,9 +490,18 @@ vt_processkey(keyboard_t *kbd, struct vt } } else if (KEYFLAGS(c) == 0) { /* Don't do UTF-8 conversion when doing raw mode. */ - if (vw->vw_kbdmode == K_XLATE) + if (vw->vw_kbdmode == K_XLATE) { +#if VT_ALT_TO_ESC_HACK + if (vd->vd_kbstate & ALKED) { + /* + * Prepend ESC sequence if one of ALT keys down. + */ + terminal_input_char(vw->vw_terminal, 0x1b); + } +#endif + terminal_input_char(vw->vw_terminal, KEYCHAR(c)); - else + } else terminal_input_raw(vw->vw_terminal, c); } return (0);