@@ -91,8 +91,19 @@ var LibraryVIM = {
9191 }
9292 }
9393
94- if ( ! handled )
95- vimjs . gui_web_handle_key ( charCode || keyCode , modifiers , 0 , 0 ) ;
94+ if ( ! handled ) {
95+ var MAX_UTF8_BYTES = 6 ;
96+ var chars = new Uint8Array ( MAX_UTF8_BYTES + 1 ) ; // null-terminated
97+ var charLen = stringToUTF8Array ( String . fromCharCode ( charCode ) , chars , 0 , MAX_UTF8_BYTES ) ;
98+ if ( charLen == 1 ) {
99+ vimjs . gui_web_handle_key ( chars [ 0 ] , modifiers , 0 , 0 ) ;
100+ } else {
101+ // no modifers for UTF-8, should be handled in chars already
102+ for ( var i = 0 ; i < charLen ; i ++ ) {
103+ vimjs . gui_web_handle_key ( chars [ i ] , 0 , 0 , 0 ) ;
104+ }
105+ }
106+ }
96107
97108 } , //VIMJS_FOLD_END
98109
@@ -778,7 +789,15 @@ var LibraryVIM = {
778789 } ,
779790
780791 vimjs_draw_string__deps : [ 'vimjs_clear_block' ] ,
781- vimjs_draw_string : function ( row , col , s , len , flags ) {
792+ vimjs_draw_string : function ( row , col , s_ptr , len , flags ) {
793+ var byteArray = [ ] ;
794+ for ( var i = 0 ; i < len ; i ++ ) {
795+ c = getValue ( s_ptr + i , 'i8' , true ) ;
796+ byteArray . push ( c ) ;
797+ }
798+ byteArray . push ( 0 ) ;
799+ var s = UTF8ArrayToString ( byteArray , 0 ) ;
800+ len = s . length ;
782801
783802 // TODO: use macros for flag constants
784803 if ( ! ( flags & 0x01 ) ) {
@@ -788,8 +807,6 @@ var LibraryVIM = {
788807 var font = vimjs . font ;
789808 if ( flags & 0x02 ) font = 'bold ' + font ;
790809
791- s = Pointer_stringify ( s , len ) ;
792-
793810 var ctx = vimjs . canvas_ctx ;
794811
795812 ctx . font = font ;
0 commit comments