@@ -86,17 +86,20 @@ var LibraryVIM = {
8686 if ( charCode == 0 ) {
8787 var special = vimjs . special_keys [ keyCode ] ;
8888 if ( special !== undefined ) {
89- vimjs . gui_web_handle_key ( charCode || keyCode , modifiers , special . charCodeAt ( 0 ) , special . charCodeAt ( 1 ) ) ;
89+ vimjs . gui_web_handle_key ( keyCode , modifiers , special . charCodeAt ( 0 ) , special . charCodeAt ( 1 ) ) ;
9090 handled = true ;
91- }
91+ } else {
92+ vimjs . gui_web_handle_key ( keyCode , modifiers , 0 , 0 ) ;
93+ handled = true ;
94+ }
9295 }
9396
9497 if ( ! handled ) {
9598 var MAX_UTF8_BYTES = 6 ;
9699 var chars = new Uint8Array ( MAX_UTF8_BYTES + 1 ) ; // null-terminated
97100 var charLen = stringToUTF8Array ( String . fromCharCode ( charCode ) , chars , 0 , MAX_UTF8_BYTES ) ;
98101 if ( charLen == 1 ) {
99- vimjs . gui_web_handle_key ( chars [ 0 ] , modifiers , 0 , 0 ) ;
102+ vimjs . gui_web_handle_key ( chars [ 0 ] , 0 , 0 , 0 ) ;
100103 } else {
101104 // no modifers for UTF-8, should be handled in chars already
102105 for ( var i = 0 ; i < charLen ; i ++ ) {
@@ -696,6 +699,7 @@ var LibraryVIM = {
696699 * C means "needed for Chrome"
697700 */
698701 var keys_to_intercept_upon_keydown = { } ;
702+ var ctrl_keys_to_intercept_upon_keydown = { } ;
699703 [ KeyEvent . DOM_VK_ESCAPE , // CF
700704 KeyEvent . DOM_VK_TAB , // C
701705 KeyEvent . DOM_VK_BACK_SPACE , // C
@@ -706,14 +710,24 @@ var LibraryVIM = {
706710 KeyEvent . DOM_VK_DELETE , // C
707711 KeyEvent . DOM_VK_PAGE_UP , // C
708712 KeyEvent . DOM_VK_PAGE_DOWN , // C
713+ KeyEvent . DOM_VK_HOME , // C
714+ KeyEvent . DOM_VK_END , // C
709715 ] . forEach ( function ( k ) {
710716 keys_to_intercept_upon_keydown [ k ] = 1 ;
711717 } ) ;
718+ [
719+ KeyEvent . DOM_VK_F ,
720+ KeyEvent . DOM_VK_B ,
721+ ] . forEach ( function ( k ) {
722+ ctrl_keys_to_intercept_upon_keydown [ k ] = 1 ;
723+ } ) ;
724+
712725
713726 /* capture some special keys that won't trigger 'keypress' */
714727 document . addEventListener ( 'keydown' , function ( e ) {
715728 if ( ignoreKeys ( ) ) return true ;
716- if ( e . keyCode in keys_to_intercept_upon_keydown ) {
729+ if ( ( e . keyCode in keys_to_intercept_upon_keydown ) ||
730+ ( e . ctrlKey && ( e . keyCode in ctrl_keys_to_intercept_upon_keydown ) ) ) {
717731 e . preventDefault ( ) ;
718732 vimjs . handle_key ( 0 , e . keyCode , e ) ;
719733 }
0 commit comments