ãããåŸ ã¡ãããŸããã ç§ã¯ãã¥ã«ãŒã«ã©ãŒã®ãµããŒããåŸãããã«ãã€ããŒã¿ãŒããã«ããããã³ã°ããŠããŸããããããã¯ã¯ããã«åªãããªãã·ã§ã³ã ãšæããŸãã
ãããå®è£ ããã«ã¯ãããã§è¡ãå¿ èŠããããŸãhttps://github.com/sourcelair/xterm.js/blob/365a9f949cc1acfb6c4649ee1d85da3bbc60f928/src/InputHandler.ts#L1276
ããªãããŒãªéšåã¯ãæåã«å¯ŸããŠè²ãä¿åããæ¹æ³ãšããããã¬ã³ããªã³ã°ããæ¹æ³ïŒããããã€ã³ã©ã€ã³style
å±æ§ïŒã決å®ããããšã§ãã https://github.com/sourcelair/xterm.js/pull/450ã®ãããªãã®ã¯ãããããå±æ§ã®è¿œå ãåçŽåããã§ãããã
æéãããã°èŠãŠã¿ããããããŸããããå¶åŸ¡ã·ãŒã±ã³ã¹ã«ç²ŸéããŠãããšã¯èšããŸããã
http://invisible-island.net/xterm/ctlseqs/ctlseqs.htmlã調ã¹ãŸãããããã¥ã«ãŒã«ã©ãŒãŸãã¯24ãããã«ã©ãŒã«ã€ããŠã¯äœãèŠã€ãããŸããã§ããã ç§ã¯äœãã足ããªãã®ã§ããããããšããããã«ããŒããä»ã®ãªãœãŒã¹ããããŸããïŒ
@cnsumner xtermã¯çŸåšããã¥ã«ãŒã«ã©ãŒã衚瀺ã§ãhttps ïŒ
ãšããã§ãããã¯ECMA-48æšæºã§éšåçã«æå®ãããŠããŸãã
ããã§äœãããå¿ èŠãããããããããç解ããããã«ãåä»ãªæŠå¿µå®èšŒããŸãšããŠãã ããhttps://github.com/Tyriar/xterm.js/tree/484_truecolor
å®è¡ããå¿ èŠãããããšïŒ
0x1RRGGBB
ïŒfgïŒãŸãã¯0x0RRGGBB
ïŒbgïŒã®åœ¢åŒã§ãtruecolorããè¡šãåæåã«å¥ã®æ°å€ãè¿œå ããŸãcurTrueColor
ã¯ãšãŠãéãã§ãæåãã©ã®ããã«ãšã³ã³ãŒããããŠããããåèããææãããããŸãããçŸåšã®åœ¢åŒã¯æ¬¡ã®ãšããã§ãã
[attribute, character, width]
attribute
ïŒascii fgãascii bgãããã³ãã©ã°ïŒå€ªåãäžç·ãç¹æ»
ãå転ãé衚瀺ïŒãä¿æãã32ãããæŽæ°ããã¹ãŠã®ãããã䜿çšãããããã§ã¯ãããŸãããchar
ïŒç©ºã®æååïŒã¯ã€ãæåãåãã0å¹
ã®æåã®å ŽåïŒãŸãã¯1æåã®Unicodeæååwidth
ïŒæåã®å¹
ã¯çŸåš0ã1ããŸãã¯2ã§ãããã¿ããé©åã«ãµããŒãããããã«ããã«å€ãã®æåãå«ããããšãã§ããŸãhttps://github.com/sourcelair/xterm.js/issues/734@Tyriar
ããããããäœæ¶è²»ã®ããã«æé©åãããŠããªãå Žåãã¡ã¢ãªäœ¿çšéã¯ççºããŸãã width
ãšäžç·ã«ããã¯ã§ãããããããŸãããããã®ãã£ãŒã«ãã16ãã倧ãããªãå¯èœæ§ã¯äœãã4ãã€ãããæ¶è²»ããŸããïŒã¿ãã®ããã©ã«ãã¯éåžž4ãŸãã¯8ã§ãïŒã ããã«ããã1ã€ã®RGBå®çŸ©*ã®äœå°ãæ®ããŸãïŒ width
ã32ãããæŽæ°ã§ãããšæ³å®ïŒã attribute
ã§ç©ºããããæ°ãããããªãå Žåã¯ã2çªç®ã®RGBå®çŸ©ã«é²ãããšãã§ããŸãã
å±æ§ã¯çŸåšãbgã«9ãã€ããbgã«9ãã€ãããã©ã°ã«5ãã€ããæ¶è²»ããŠããããã«èŠããæåŸã«å¹ ãçµãã®ã«ååãªäœå°ããããŸãã RGBå®çŸ©ã«ã¯ããããã24ãã€ãïŒ8 * 3ïŒãå¿ èŠã§ãã
ãããïŒå°ãè€éãªïŒçã¹ããŒã¹ã®ã¢ãããŒãã§ããããªããææ¡ããŠãããšæããŸãã
[char, attr1, attr2]
attr1ã¯ïŒ29ãããïŒã§ãã
ãããŠattr2ã¯ïŒ30ãããïŒã§ãïŒ
ããåçŽãªã¢ãããŒãã§ã¯ãç¹ã«å±æ§ã«çªå·ã䜿çšããŸãã
[char, attr, truecolorBg, truecolorFg]
attrã¯æ¬¡ã®ãšããã§ãã
ãããã®è©³çŽ°ã¯æ¬åœã«è€éãªã®ã§ãã²ã©ãã«ãã»ã«åãããã®ã§ãããtypescriptã䜿çšãããšãã²ãã¿ãŒãé åã«é 眮ã§ããã®ã§ã¯ãªãããšæããŸãã ãªããžã§ã¯ãã®äœ¿çšã¯ãjsperfã§è¡ã£ããã€ã¯ããã³ãããŒã¯ã«åºã¥ãé åããã20åé ããåžžã«ä¿¡é Œã§ãããšã¯éããŸããããããã¯ããããã¿ã€ãã«åºã¥ããŠãªããžã§ã¯ããäœæããããã®ãªãŒããŒããããšããŠæåŸ ãããã®ã§ãã
äœãããã«ããŠãããã©ãŒãããã¯éåžžã«ããææžåããå¿
èŠããããŸãã ä»ãããªãã¯InputHandler.charAttributes
èŠãŠèªåã§ãããç解ããå¿
èŠããããŸãã
ã¡ã¢ãªç¯çŽã«é¢ããããå°ãã®èãïŒ
null
ããã°åé¡ãªãåäœããå¯èœæ§ããããŸããã¯ããã»ãšãã©ã®JSãšã³ãžã³ã§ã¯ãã€ã³ããã¯ã¹ã«ã¢ã¯ã»ã¹ã§ããé åã¯ããªããžã§ã¯ããšãã®ããããã£ã®è§£æ±ºãããé«éã§ãããšæããŸãã ãã ããV8ã§ã¯ãªããžã§ã¯ãã«å¯ŸããŠããã€ãã®è¿œå ã®æé©åãè¡ãããŸããã æ§ç¯ãšGCã«é¢ããŠã¯ãã¡ã¢ãªã¬ã€ã¢ãŠããã¯ããã«åçŽãªãããé åã®æ¹ãé«éã§ãïŒãã®æ¬ ç¹ã¯ãæ¢åã®ãªããžã§ã¯ããåå©çšããããšã§çç¥ã§ããŸãïŒã
ããã§æ£ããã¬ã€ã¢ãŠãã«ã€ããŠã®æãããã¯ãããŸãããåé¡ã¯ãå¯éãããã®ããããšãå¿
èŠãªå€æã®ããã«å®è¡æã®ããã«ãã£ãçºçããããšã§ãã ïŒããã¯ãã¡ã¢ãªãåé¡ã«ãªããªãå Žåã«Cã§ããããã£ãŒã«ãã䜿çšããªãçç±ã®1ã€ã§ããå¿
èŠãªã·ããæäœã«ãã£ãŠåœä»€ãã£ãã·ã¥ãæ±æããããã£ãã·ã¥ãã¹ãçºçããŸããã³ãŒãã®å®è¡é床ã倧å¹
ã«äœäžããŸãïŒã
Imhoã®ã¿ã®ãã¹ãã§ã¯ãããã§æãå¹æçãªãã®ã瀺ãããŸãã
@jerchèå³æ·±ãã§ããã ããããããããããã«4ã€ã®çªå·ããŒãžã§ã³ããããŸãã
ãããã£ãŠãããã§ã®ã¡ã¢ãªã¯çŽ5 *ïŒ1000ã¹ã¯ããŒã«ããã¯ïŒ*ïŒ64ããããã·ã³ã§ã¯8ãã€ãïŒ* 80 = 3.2mbïŒjsé åã®ãªãŒããŒãããåïŒã§ãããšäºæ³ãããŸãã çŸåšã®ãã©ãŒããããç¶æãããšãäžè¬çãªVSCode端æ«ã®å®éã®å¹ ã¯2åã«ãªããŸãã ç§ããããèŠããšãç¹ã«ãŠãŒã¶ãŒã1000ãè¶ ããã¹ã¯ããŒã«ããã¯ãšè€æ°ã®ã¢ã¯ãã£ããªç«¯æ«ãæã£ãŠããããšãå€ããããããªãæ¥ãªããã§ãã æ«å°Ÿã®ç©ºçœã¯å®éã«ã¯ã»ãšãã©è¿œå ããããåãããã«ç°¡åã«nullã«ãªãå¯èœæ§ããããããããããªã倧ããªåå©ã«ãªããŸãã
é«éã¢ã¯ã»ã¹ã®ããã®è¯ãæ¹æ³ãããéããå±æ§/ã«ã©ãŒã»ãããã£ãã·ã¥ã®ã¢ã€ãã¢ãææã§ããããã«æãããŸãã 軜éã®ã¹ãã¬ãŒããªãŒã®ãããªæ§é ãçæ³çã§ãïŒå±æ§ãžã®é«éã¢ã¯ã»ã¹ãæãé »ç¹ã«äœ¿çšãããŸãïŒã
ãŸããã©ã€ã³ããŒã¿é åãåã«ç Žæ£ããã®ã§ã¯ãªããããªãã³ã°ãããšãã«åå©çšããããšãæ€èšãã䟡å€ããããããããŸããïŒäŸïŒããïŒã
ããããšã³ãžã³ã®ãªãŒããŒãããã念é ã«çœ®ããŠãããã¯ããã«å€§ãããªããŸã-é
åãŸãã¯ãªããžã§ã¯ãå
ã®ãã¹ãŠãåç
§ãšããŠä¿åãããåºæ¬çã«ã¯ã³ã³ãã³ããžã®ãã€ã³ã¿ãŒã§ãã å¯ãªjsé
åã«ã¯ãããã§ããããªå©ç¹ããããŸãããã¹ã®ã©ããã§Cã®ãããªé
åãšããŠåœ¢æãããŸãïŒå®éã«ã¯ArrayListsïŒã ã¹ããŒã¹é
åããã³ãã®ä»ã®ãªããžã§ã¯ãã¯ãããããã£ã®è§£æ±ºã解決ããããã«ããã€ãã®ããªãŒããžãã¯ã䜿çšããŠæ§ç¯ãããŸãã
ãããã£ãŠã64ãããã®å Žåãåç
§å¯Ÿè±¡ã¯ã»ã«ããšã«5 * 8ãã€ããè¿œå ããŸãïŒåºæ¬çã«ãäžèšã®èšç®ã¯2åã«ãªããŸã-6.4mbïŒã ã³ã³ãã³ãã¯ãå®éã®ã³ã³ãã³ããã®æšªã«ããã«ãã€ããè¿œå ã§ããŸãããããã¯æŽæ°åãšæåååã®å®éã®å®è£
ã«ãã£ãŠç°ãªããŸãã
TypedArrayã§ããã解決ã§ãããããããŸããã ããã§ã¯ãæŽæ°ã®ãã®ã¯ãè¿œå ã®éæ¥åç §ãªãã§ãã¡ã¢ãªå ã®ã€ã³ããã¯ã¹äœçœ®ã«çŽæ¥ååšã§ããŸãã asm.jsã¯åºæ¬çã«ãããã«å¯ŸããŠã®ã¿åäœããŸãã
ããã§äœæããããŒã¿æ¿å ¥ã®ããTypedArrayãšJS-é åãæ¯èŒããããã®è¿ éãªãã€ã¯ããã³ãããŒã¯ã¯æ¬¡ã®ãšããã§ãã http://jsbench.github.io/#af3ea1056a70df2aa6775699d174df0d
TypedArrayã¯ãç§ã®ãã·ã³ã§FFãšChromeã䜿çšãããš10åé«éã«å®è¡ãããŸãã ããã¯äºåå²ãåœãŠãåå ã§ããå¯èœæ§ããããŸããæšå¥šãããŠããªããããjs-Arrayã§ããããã¹ãããŠããŸããã JITãäºå®ãçºèŠãããã©ããã¯ããããŸããããå€ã¯8ãã€ãããšã«1ãã€å¢å ãããããæé©åããããšãããããŸãã ãããããšããã³ãããŒã¯ã¯ãŸã£ãã圹ã«ç«ããªããªããŸãã
TypedArrayã®ã¢ã¯ã»ã¹ã¯ãããã«æªãïŒããããNumber
å€æã®ããïŒãTypedArrayã䜿çšãããšã¡ã¢ãªæ¶è²»ãã¯ããã«è¯ããªããŸãã
TypedArrayã®æ¬ ç¹ã¯ãã¹ãã¢ããŒã¿ïŒããŒã¿ãåé¿ããããã®ããªãã¯ã¯ããã§ã¯æ©èœãããã¡ã¢ãªã¯ãšã«ããã倱ããããïŒãŸãã¯ã³ã³ãã³ãã®æãè¿ãã«ãããµã€ãºå€æŽã®å Žåã®ã¡ã¢ãªã®éçãããã¯ã§ãã ãããæ£ããè¡ãã®ã¯é£ããã倧éã®ããŒã¿ãäœåºŠãã³ããŒããå¿ èŠããããŸãã
ããã«ã¡ã¯ã ããã«é¢ããæŽæ°ã¯ãããŸããïŒ ãããæ©èœããã®ãåŸ ã€ããšã¯ã§ããŸããð
ãã®åé¡ã«ç©æ¥µçã«åãçµãã§ãã人ã¯ããŸããïŒ ããã¯ä»ã®ã©ããã§è°è«ãããŠããŸããïŒ @chabou @TyriarïŒ ãã€ã¯ããœããã¯VSCodeã§ã®äœ¿çšæ³ãèæ ®ããŠæ¯æŽããŠããŸããïŒ
ããã¯ãWindows 10ã®WSLã§hyperã䜿çšããŠãtmuxãšvim / neovimããµããŒãããé©åãªéçºCLIã¯ãŒã¯ãããŒãæäŸããããã®æåŸã®é ããŠããåé¡ã§ãã WSLã§äœ¿çšã§ããä»ã®ã¿ãŒããã«ãšãã¥ã¬ãŒã¿ãŒã¯èŠãç®ãè¯ããªããwslttyã¯è¿ãã§ãããã¿ãã®ãµããŒããšãã©ã°ã€ã³ã®ãµããŒãããããŸãã...
@vastbinderjäžè¶³ããŠãããã¥ã«ãŒã«ã©ãŒã®ãµããŒããé©åãª
@szmarczakãš@vastbinderj
ãã®åé¡ã¯ãŸã è°é¡ã«ãªã£ãŠããŸãããçŸåšã®ã¿ãŒããã«ãããã¡ã®èšèšã§å°å
¥ãããã¡ã¢ãªäœ¿çšéãå€ãããããããããã¯ãããŠããŸãã ïŒ791ãããå¹ççãªãããã¡ã¬ã€ã¢ãŠããããããããšããããã¯ãã泚ç®ãéããã§ãããã
@ rfgamaralsimple-ç§ã¯å€ãã®ãã€ã¯ããµãŒãã¹ãåããéåžžã«å€§èŠæš¡ãªãšã³ã¿ãŒãã©ã€ãºã·ã¹ãã ã§1æ¥ã«å€ãã®ç°ãªãunix / linuxãµãŒããŒã§äœæ¥ããŠãããã¡ã€ã³ãã¹ãã§é©åãªã«ã©ãŒãµããŒãããªãããšã¯æ··ä¹±ãæããŸãã ç§ãrhelãcentosãdebianã®ãããã䜿çšããŠããŠããè²ãåãã§ãªãããšã«å¯ŸåŠããã®ã¯èŠçã§ãã ãŸããWindowsã§ãžã¥ãã¢ãŸãã¯ãã¢éçºè ãæ¯æŽããããã«åº§ã£ãŠãããšããããšã¯ãç©äºãåäžã«æ©èœããªãå Žåã¯ã³ã³ããã¹ããåãæ¿ããå¿ èŠãããããšãæå³ããŸãã ããããã»ãŒæ¯æãªãªãŒã¹ãããæ¹åãšVS Codeãšåãããã«ãwslãããã»ã©è¿ éã«ãªãªãŒã¹ãããããšã«ãç§ã¯éåžžã«æéãåããŸãããããã¯ååºããŠããŸãã
@jerchã¢ããããŒããããããšããïŒ791ã解決ãããã®ãèŸæ±åŒ·ãåŸ ã¡ãŸã...
ããã倧ãã«æ¥œãã¿ã«ããŠããŸãã
JavaScriptã®æ°å€ã¯ãæ倧53ãããã®æ£ç¢ºãªæŽæ°ãè¡šãããšãã§ããããšãèŠããŠãã䟡å€ããããŸãã ãããã£ãŠã32åã®ã䟿å©ãªããããã«å ããŠ21åã®ãããããããŸãã ãŸã èšå®ãããŠããªãå Žåã¯ãåçŽãªå ç®ã§å°ãããŸãã¯ãããããšãã§ããŸãã äžäœããããèªã¿åãã«ã¯ãé©åãª2ã®çŽ¯ä¹ã®æŽæ°ã§é€ç®ããŠãããéåžžã®ãããæŒç®ã䜿çšããŸãã
ãã¡ãããé«æ¬¡ããããåŠçãããªãŒããŒãããã¯å°ãå€ããªããŸãããæè¿ã®CPUã§ã¯ã1ãŸãã¯2ã®çŽ¯ä¹ã«ããé€ç®ã¯æ¯èŒçå®äŸ¡ã§ãããã¡ã¢ãªã¢ã¯ã»ã¹ãããå®äŸ¡ã§ãã
50ãããã®åäžã®æ°å€ã䜿çšããããšããå§ãããŸãããã©ã¢ã°ã©ãŠã³ããšããã¯ã°ã©ãŠã³ãã«ãããã25ãããã§ãã ã»ãããããŠããå Žåã¯1ãããã¯ã24ãããã®ããã¥ã«ãŒãã«ã©ãŒã䜿çšããŠããããšã瀺ããŸãã èšå®ãããŠããªãå Žåã¯ããè«çãïŒããŒãå¯èœïŒãŸãã¯8ãããã«ã©ãŒã䜿çšããŸãã ã€ã³ãžã±ãŒã¿ãããã¯äžäœ2ãããã§ããå¿ èŠããããŸãã èšå®ã解é€ãããšãè«ç8ãããã«ã©ãŒã次ã®30ãããã«ãªãå¯èœæ§ããããããå®éã«ãã¥ã«ãŒã«ã©ãŒã䜿çšããŠããå Žåã¯ããã32ã50ã®ã¿ã䜿çšããŸãã
@PerBothneræ°ãããããã¡ã«
ãŸããå¯èœãªã¬ã€ã¢ãŠãã«ã€ããŠããã€ãã®ãã¹ã/èšç®ãè¡ããŸããïŒhttps://gist.github.com/jerch/27c2cf91ad313a25415873e4047b2900ãåç §ïŒã ç°¡åã«èšãã°ãã¢ã€ãã¢ã¯ãmemã®ç¯çŽãšå®è¡æã®ããã«ãã£ã®ãã¬ãŒããªãã«é¢ãããã®ã§ãã åä»ãé åãžã®ç§»è¡ã«ããããã§ã«å€§å¹ ãªã¡ã¢ãªç¯çŽãå®çŸããŸããïŒçŸåšãå®éã®è²ã®å€ã¯ãŸã é©çšãããŠããŸããããäžèšã®2çªç®ã®ã¢ã€ãã¢ãå®è£ ããŠããŸãïŒã
æãåèã«ãªãã³ã¡ã³ã
ããã«ã¡ã¯ã ããã«é¢ããæŽæ°ã¯ãããŸããïŒ ãããæ©èœããã®ãåŸ ã€ããšã¯ã§ããŸããð