ãªã³ïŒ Microsoft Windows [Version 10.0.17763.134]
ã¿ãŒããã«ãšãã¥ã¬ãŒã¿ã«conptyãå®è£
ããŸããã
https://github.com/wez/wezterm
target\debug\wezterm.exe
ãæ£åžžã«å®è¡ããŠã cmd.exe
powershell.exe
ãbash
ãªã©ã®ã³ã³ãœãŒã«ã¢ããªã±ãŒã·ã§ã³ãçæã§ããŸãã
ç§ãèŠãŠããåé¡ã¯ã cmd.exe
ãä»ããŠéæ¥çã«ããŸãã¯bashã©ã³ãã£ãŒãä»ããŠçŽæ¥ãbashãèµ·åãããšãconptyãããŠã¹ã飲ã¿èŸŒãã§ãšã¹ã±ãŒãã·ãŒã±ã³ã¹ãå ±åããŠããããã«èŠããããšã§ãã ã¿ãŒããã«ããŒãµãŒã§åä¿¡ãããŠããªãããã set mouse=a
ã§æ§æãããŠããã«ããããããã vim
ã§ã¯å¹æçãªããŠã¹ãµããŒãããããŸããã
wsl-terminal
ãä»ããŠåãWSLã€ã³ã¹ããŒã«ãå®è¡ãããšãåäœããããŠã¹ããµããŒããããŸãã wezterm
ã¯ãåäœããããŠã¹ããµããŒãããLinuxã§ã®æ¯æ¥ã®ãã©ã€ããŒã§ãã vim
ãšwezterm
ããŒãµãŒã
ãŸãã echo -e "\e[?1000h"
ãè©ŠããŠãã·ã§ã«ããã®ããŠã¹ã¬ããŒããæåã§æå¹ã«ããŸããã éåžžïŒLinuxããã³wsl-terminalçµç±ã§ïŒããã«ãããã¿ãŒããã«ã§ã¯ãªãã¯ããŠããŒã¿ãã·ã§ã«ã«éä¿¡ããŸãïŒã¬ããŒãžå
¥åãšããŠè¡šç€ºãããŸãïŒããã¿ãŒããã«ãconptyã§å®è¡ãããšãããããã©ããã«é£²ã¿èŸŒãŸããŸãã
ç§ãptyã«ã¹ããŒã³ããã¢ããªãããŠã¹ã§åäœã§ããããã«ããããã«ãäœãç¹å¥ãªãã®ãå¿ èŠã§ããïŒ
ã³ãŒãã®éèŠãªéšåãå確èªããå Žåãé¢é£ãããã¡ã€ã«ã¯æ¬¡ã®ãšããã§ãã
https://github.com/wez/wezterm/blob/master/src/winpty.rs
ãããŒã¯ããã€ãã®ãã¢CreatePipe
ã CreatePseudoConsole
ã«éãããMSDNããã¥ã¡ã³ããšãã®ãªããžããªã®ãµã³ãã«ãšåæ§ã«ãthreadprocå±æ§ãä»ããŠçæãããåã«æž¡ãããŸãã
ãã@wez ã
æ®å¿µãªãããConPTYã¯ããŠã¹ã¬ããŒãïŒãŸãã¯ããã¹ããããŠããã¢ããªã±ãŒã·ã§ã³ããã®_ããŠã¹ã¬ããŒãã®èŠæ±_ïŒã転éããŸããã ããã远跡ããããã¯ãã°ã¢ã€ãã ããããããã«ååŸããããšèããŠããŸãã
æ®å¿µãªããããšã³ã³ãŒããããããŠã¹ã€ãã³ããæž¡ãããšã¯ã§ããŸãããConPTYã¯æšæºã®Windowsã³ã³ãœãŒã«ã¢ããªã±ãŒã·ã§ã³ããã¹ãã§ããããã MOUSE_EVENT
ReadConsoleInput
ä»ããŠåä¿¡ããããšäºæ³ãããŸããããã€ãã®ç¿»èš³ãè¡ãå¿
èŠããããŸãã
ãã ããä»ã®ãã¹ãŠã®ç¹ã§ã¯ãç䌌ã³ã³ãœãŒã«ãæ£ããèšå®ããŠããããã§ãã
è¿œè·¡ïŒ MSFTïŒ20469462
@ DHowett-MSFTã®åçããããšãããããŸãïŒ
ããŠã¹ã®ã¬ããŒãããŸã ãªãã®ã¯å°ãæ®å¿µã§ãããããã§ãæ®ãã®ptyã®ãã®ãå¯èœã«ãªã£ãŠããã®ã¯è¯ãããšã§ãïŒ
ConPTYã§ã®ããŠã¹ãµããŒããæ¬åœã«å¿ èŠãªããšä»¥å€ã«è¿œå ãããã®ã¯ãããŸããã alacrittyãalacritty + ssh + tmuxã䜿çšããŠConPTYããµããŒãããããã«ãªã£ããããWindowsäžã®çŽ æŽãããLinuxã¿ãŒããã«ã§ãããçŸåšã¯ããŠã¹ã®ãµããŒãã®ã¿ãäžè¶³ããŠããŸãã
ç§ã¯Ubuntubashã·ã§ã«ã§çå€äžã®åžä»€å®ãé »ç¹ã«äœ¿çšããŠããŸãã æ®å¿µãªãããWindowsã¿ãŒããã«0.3.2171.0ã®Ubuntuã·ã§ã«ã¿ãã¯ãããŠã¹ã€ãã³ããmcã¢ããªã±ãŒã·ã§ã³ã«éä¿¡ããŠããªãããã§ã䜿çšããã®ãéåžžã«å°é£ã§ãã ãã°ãæçš¿ããã€ããã§ããããããã¯éè€ããŸãã
ç§ã®äœ¿çšã§ã¯ãvimãštmuxãäžæã«äœéšããã«ã¯ãããŠã¹ã€ãã³ããéä¿¡ããããšãæãéèŠã§ãã
ããã«å¯Ÿããç§ã®ãµããŒããããã«ããããããã ãã§ãå°ãã³ã³ããã¹ããå ãããŸãã ãã®1ãæéããã¥ã¢ã«ããŒããåæ¢ããWindows10ã€ã³ãµã€ããŒãã«ãã®ãé«éããªã³ã°ããã©ã€ããªããŒãœãã«ãã·ã³ãšããŠäœ¿çšãå§ããŸããã ãã®äžã§ãwsl2ãå®å šã«æ©èœããx410ãå®å šã«æ©èœããMicrosoftã¿ãŒããã«ãæ£åžžã«æ©èœããããžã¥ã¢ã«ã¹ã¿ãžãªã³ãŒãwsl2çžäºéçšæ©èœãå®å šã«æ©èœããexplorer.exeçžäºéçšæ©èœãå®å šã«æ©èœããŠããŸãã
ãã®ããŠã¹å
¥åãã±ããã¯ãwsl2 / microsoft terminalããå¥ã®ããŒãã£ã·ã§ã³/éçºããã¯ã¹ãæã€ããã®åççãªä»£æ¿åãšåŒã¶ããšã劚ããå¯äžã®ããšã§ãã ããã®ããã€ãã®ã¹ãããã¯ãªãŒãã³ãœãŒã¹ãªã®ã§ã /dev
ã©ããããããŠã¹ããã€ã¹ã®å
¥åã確èªããæ¹æ³ã«ã€ããŠã®æéã¯ãããŸããïŒ
ãããããã®ãã¹ãŠã«æè¬ããŸãïŒ ããã§ãªããã°æ¬åœã«å¥œãã§ã:)
ããŠã¹ã®ãµããŒãã¯ãšãŠãçããtmuxã䜿çšããŠãã人ã¯èª°ãããããããªããŠãããŸããããããããªããšèšã£ãããèŠæ±ãããããããã®ãã1ã€ã®æ祚ã
ããŠã¹ãµããŒããæå¹ã«ããŠãã ããð
@ DHowett-MSFTããã°ã«ã€ããŠç³ãèš³ãããŸãããããããããã«ä¿®æ£ããèšç»ã¯ãããŸããïŒ ä»ã®åé¡ã«å²ãåœãŠãããã©ãã«/åªå 床ã確èªããŸãããããã¯ãããã®1ã€ã§ã¯ãªãããã確èªããã ãã§ãã ããããšãããããŸããã
@damnskippyåªå 床ã¯ã
ãã°ã®ããã«ãä¿®æ£ãã§ããã°ããããããã®ã§ãããä¿®æ£ä»¥äžã®ãã®ãå¿ èŠã§ãã
æŽæ°ããŠããã ãããããšãããããŸãã ããªãã®ä»äºã¯ãããããã§ãã
ç§ã¯ããªããããã§ãã£ãŠããããšã倧奜ãã§ããç§ã¯ããããŸãããããç§ãã¡ãããŠã¹ã®ãµããŒããåŸããŸã§ãç§ãã¡ã¯ãã®ç«¯æ«ãå¥ã®ç«¯æ«ã§è£å®ããªããã°ãªããããã®ç«¯æ«ã®ç®çãããããæã¡è² ãããŸãã
ããã®ãªãçå€äžã®åžä»€å®ã¯æªå€¢ã§ãã
ã³ãã¥ããã£ã®èª°ããWindowsã¿ãŒããã«ã§å®è¡ã§ããDosBoxã¢ãã€ã³ãšãããã¡ã€ã«ãäœæããå Žåãªã©ãäžè¬ã«ããŠã¹å ¥åã圹ç«ã€å¯èœæ§ããããŸãã
ç§ã¯vimã®ãããŒãŠãŒã¶ãŒã§ãã ããŠã¹ã®ãµããŒããæããã§ãð¢
@ cinnamon-msftããã°ã®æŽæ°ãèªãã ã°ããã§ãããããŒã ã¯ä»å¹Žã®çµãããŸã§ã«1.0ãç®æããŠããããã§ãã ããã¯ã幎æ«ãŸã§ã«ããŠã¹ã®ãµããŒããåããããšãæå³ããŸããïŒ ãããããªããããã¯çŸåšç©æ¥µçã«åãçµãã§ããŸããïŒ
ããã¯ã幎æ«ãŸã§ã«ããŠã¹ã®ãµããŒããåããããšãæå³ããŸããïŒ
ãã¶ãããããããŒãã³ãããã¯ãããŸããã ãœãããŠã§ã¢ãå®äºãããŸã§ã«ãããæéãèŠç©ããã®ã¯ãP == NPã蚌æããã®ãšåããããé£ããã§ãã ããããªããã°ã端æ«ã¯1.0察å¿ã«ã¯ãªããªãã§ãããã
ãããããªããããã¯çŸåšç©æ¥µçã«åãçµãã§ããŸããïŒ
çŸåšã¯ãããŸããã ã¿ã¹ã¯ã«ã¯èª°ãå²ãåœãŠãããŠããŸãããéåžžãããŒã ã®èª°ããã¿ã¹ã¯ãåãã ãšãã«ãèªåã§å²ãåœãŠãŸãã
奜å¥å¿ããããããè¡ãããã«å¿ èŠãªãã®ã¯ãã¹ãŠããã«ãããŸããïŒ éå¿çãªïŒèªãïŒã¯ã¬ã€ãžãŒãªïŒéçºè ã¯ãããåŒãåããŠPRãããããšãã§ããŸããïŒ
確ãã«ãéå¿çãªäººã¯çµ¶å¯Ÿã«èªåã§ãããè©Šãããšãã§ããŸãã ã©ãããå§ããŸããïŒ
ãŸããããã€ãã®ã¹ã³ãŒãã®æŠèŠã説æããŸãããã ããŠã¹å ¥åã«ã¯å€ãã®äœæ¥ãå¿ èŠã«ãªããããæåã¯å°ããªäœæ¥ããå§ããŠãå®å šãªè§£æ±ºçã«å°éããããã«å°ããã€äœæ¥ããã®ãæåã§ãã æåã«äœæ¥ãéå§ããå¿ èŠãããã®ã¯ã SGRã§ãšã³ã³ãŒããããåçŽãªããŠã¹ã®äžäžã·ãŒã±ã³ã¹ã§ãã ããŠã¹ãã€ãŒã«ã€ãã³ãã§äœæ¥ãããã®åŸãããŒããããšãã§ããŸãããã¯ãªãã¯ãããš_ã»ãšãã©ã®_ãŠãŒã¹ã±ãŒã¹ã解決ããããšæããŸãã
InputStateMachineEngine.cppã確èªããããšããInputStateMachineEngine
ã¯ãconptyãä»ããŠéä¿¡ãããå
¥åã解æãããããINPUT_RECORD
å€æãã圹å²ãæãããŸãã é²åã®æ°æ§ã«å¯ãã è¥ãéçºè
ã¯ããããã®ããŠã¹ã·ãŒã±ã³ã¹ã解æã§ããããã«ãã®ã¯ã©ã¹ãå€æŽããããããINPUT_RECORD
å€æããããšæãã§ãããã ããªããæã£ãŠããINPUT_RECORD
sã®ããåŒã³åºãInteractDispatch::WriteInput
ã ããã«ããããããã®INPUT_RECORD
ãå
¥åãããã¡ã«è¿œå ãããŸãã ããããå
¥åãããã¡ã«å
¥ããšãéåžžãæ¥ç¶ãããŠããã³ã³ãœãŒã«ã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ã«é
ä¿¡ãããŸãã
ç§ãæ°ãã€ãããããšïŒ
INPUT_RECORD
ã®ã¹ããªãŒã ã§ã¯ãªããæåã®ã¹ããªãŒã ãååŸããŸãã ã³ã³ãã¹ãã®ããæç¹ã§ãæ¥ç¶ãããã¢ããªã±ãŒã·ã§ã³ãVTããŠã¹ã¢ãŒãã®å Žåããããã®ããŠã¹INPUT_RECORD
ãæåã®ã¹ããªãŒã ã«å€æããããšããŸãã ããŠã¹ã€ãã³ãããããã¡ã«ããåã«ãã®å€æãè¡ããšãVTã¢ããªã±ãŒã·ã§ã³ã§ã¯äžèšã®å®è¡ãæ©èœããªãå¯èœæ§ããããŸãïŒèªã¿åãïŒ wsl
ïŒã ãã®å Žåã¯ã InputStateMachineEngine
ã«ãã£ãŠçæãããããŠã¹ã€ãã³ãã«å¯ŸããŠãããŠã¹INPUT_RECORD
ããVTã§ãšã³ã³ãŒããããããŠã¹ã€ãã³ããžã®å€æãæåã§è¡ãããããã«ããå¿
èŠããããŸããterminalMouseInput.HandleMouse
ã¯ãã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ã®VTã·ãŒã±ã³ã¹ãåæããŸãããæ®å¿µãªããããŠã£ã³ããŠããã·ãŒãžã£ããã®ã¿åŒã³åºãããŸãã ãããã£ãŠã InputStateMachineEngine
ãåŒã³åºãæ¹æ³ãäœããã®æ¹æ³ã§å
¬éããå¿
èŠããããŸãïŒ InteractDispatch
æ°ããã¡ãœãããä»ããŠïŒããã®ã¡ãœããã倱æããå Žåã¯ãé©åãªINPUT_RECORD
çæããŸãã terminalMouseInput.HandleMouse
åŒã³åºããInputBufferã®èªã¿åãã«ç§»åããèªã¿åããããšãã«INPUT_RECORD
æ£ããå€æããããšããå¯èœæ§ããããŸãããããã¯ãã£ãšè€éãããããŸããããã®åé¡ã«ã©ã®ããã«å¯ŸåŠããŸããïŒ ããŠã¹ã¯ãå€ãWindowsã³ã³ãœãŒã«ã§å®å šã«æ©èœããŸãã ãããä¿®æ£ããããŸã§ãã³ã³ãœãŒã«ã䜿ãç¶ããå¿ èŠããããšããããšã§ããïŒ
VTããŠã¹ã®ãµããŒããå¿ èŠãªå Žåã¯ãã¯ãã
ããã調æ»ããŠããå¯èœæ§ã®ããã³ãã¥ããã£ã¡ã³ããŒïŒ/ cc @SamuelEnglardïŒïŒãžã®åèãŸã§ã«ããããè¡ãããã®éçºããŒã ã®äœæ¥ãæ£åŒã«äºçŽããŸããã ç§ãã¡ã¯ããªãã®ã€ãŸå ãèžãã§ããªãããšãé¡ã£ãŠããŸãïŒ
èããŠã¿ãŸããããèªåã®æéãäºçŽã§ããªãã£ãã®ã§å®ç§ã§ãç¬ïŒ
ãªã¢ãŒãéçºæ¡åŒµæ©èœãåããVSCodeã§éãã§ãããšããããã®çµ±å端æ«ãå®éã«tmuxã®ããŠã¹ã¢ãŒãããµããŒãããŠããããšãããããŸããã ããã«ã®éžæããŠã£ã³ããŠã®éžæãããã«ã®ãµã€ãºå€æŽãã¹ã¯ããŒã«ãã€ãŒã«ã¯ãã¹ãŠã®äœæ¥ããµããŒãããŸãã ç§ã¯ãããã®ãããžã§ã¯ãã«äžæ £ããªã®ã§ãã¿ãŒããã«ããªãŒãã³ãœãŒã¹ã®VS Codiumã®äžéšã§ãããåºçºç¹ãšããŠäœ¿çšã§ãããã©ããããããŸãã...ãããæ¬åœã«æçšãªæ å ±ã§ãªãå Žåã¯ç³ãèš³ãããŸãã
ããã調æ»ããŠããå¯èœæ§ã®ããã³ãã¥ããã£ã¡ã³ããŒïŒ/ cc @SamuelEnglardïŒïŒãžã®åèãŸã§ã«ããããè¡ãããã®éçºããŒã ã®äœæ¥ãæ£åŒã«äºçŽããŸããã ç§ãã¡ã¯ããªãã®ã€ãŸå ãèžãã§ããªãããšãé¡ã£ãŠããŸãïŒ
@ DHowett-MSFT @ zadjii-MSFTã¯çŽ æŽããããããŠããæ¬æ现æžã®ä»ã®å Žæããã®åé¡ã«é¢ããããªãã®ã³ãã¥ãã±ãŒã·ã§ã³ã@bitcrazedã ããã¯ããœãããŠã§ã¢ã®æ§ç¯ã«ã³ãã¥ããã£ãããŸãé¢äžãããããã®æš¡ç¯ã§ãããããã瀺ããŠããŸãã ããªãã®ããŒã ïŒconsole / WSL / msft-linuxïŒã¯ãWindowsïŒnix以å€ïŒãã€ã³ã¹ããŒã«ããç§ã®ããžãã¹ã«å¯ŸããŠå人çã«è²¬ä»»ããããŸãã ååºããä»äºãç¶ããŠãã ããð¥
@thinkjrs芪åãªèšèãããããšãã
ãããŠãã¿ãŒããã«ãCascadia CodeãWSLãªã©ã®è³ªåãã¢ã€ãã¢ããã«ãªã¯ãšã¹ããå®è¡ããã³ãã¹ã/ãã¡ã€ã«ãã/éä¿¡ããã³ãã¥ããã£ã®ãã¹ãŠã®äººã«å¿ããæè¬ããŸããç§ãã¡ãäœæ¥ãåªå ããèšç»ãããšããããªãã®ãã£ãŒãããã¯ã¯ç§ãã¡ã«çŽæ¥åœ±é¿ããŸãããã³èšèšæ©èœã
ã³ãã¥ããã£ã®ããã«ããããŠã³ãã¥ããã£ãšãšãã«ãããã®æ©èœãæ§ç¯ãããšèšã£ããšããç§ãã¡ã¯åè«ã§ã¯ãããŸããã§ããð
ããã»ã¹ã¯äœã§ããïŒ WSLã«æ©èœããããŠã¹ã¯ãããŸããïŒ ã€ãŸãã tmux
ããã«åãæ¿ããã¯ãªãã¯ããŠweechat
ãširssi
ã§ãã£ãã«/ãµãŒããŒãå€æŽã (n)vim
ã¯ãªãã¯ã aptitude
ã¯ãªãã¯ã htop
ã¯ãªãã¯ãªã©
ããã»ã¹ã¯äœã§ããïŒ WSLã«æ©èœããããŠã¹ã¯ãããŸããïŒ ã€ãŸãã
tmux
ããã«åãæ¿ããã¯ãªãã¯ããŠweechat
ãširssi
ã§ãã£ãã«/ãµãŒããŒãå€æŽã(n)vim
ã¯ãªãã¯ãaptitude
ã¯ãªãã¯ãhtop
ã¯ãªãã¯ãªã©
@dmxtçŸåšãç§ã¯ãã¹ãŠã®ç«¯æ«ãªãã·ã§ã³ã®äžã§æãäºææ§ã®ããwslttyã䜿çšããŠããŸãã ãããã®æ©èœã®ããã€ããç»å Žããããã¿ãŒããã«ã«åãæ¿ããããšã楜ãã¿ã«ããŠããŸãã
ããã»ã¹ã¯äœã§ããïŒ WSLã«æ©èœããããŠã¹ã¯ãããŸããïŒ ã€ãŸãã
tmux
ããã«åãæ¿ããã¯ãªãã¯ããŠweechat
ãširssi
ã§ãã£ãã«/ãµãŒããŒãå€æŽã(n)vim
ã¯ãªãã¯ãaptitude
ã¯ãªãã¯ãhtop
ã¯ãªãã¯ãªã©@dmxtçŸåšãç§ã¯ãã¹ãŠã®ç«¯æ«ãªãã·ã§ã³ã®äžã§æãäºææ§ã®ããwslttyã䜿çšããŠããŸãã ãããã®æ©èœã®ããã€ããç»å Žããããã¿ãŒããã«ã«åãæ¿ããããšã楜ãã¿ã«ããŠããŸãã
ç§ã¯ããªãã®ã³ã¡ã³ãã«åæããŸããéå»æ°å¹Žéã«Windowsçšã«äžè¬ã«ç¥ãããŠãããã¹ãŠã®ã¿ãŒããã«ãšãã¥ã¬ãŒã¿ãŒãè©ŠããåŸãå·çæç¹ã§ã¯ãwslttyãæé«ã§ãã 圌ãã®å ¬åŒã¬ããçŽ æŽãããã§ãã圌ãã¯ç§ãã¹ããŒãã£ãŒã«å§ããããã®çŽ æŽãããã¬ã€ããæã£ãŠããŸãã æ©ç¥ã«å¯ãã ãã®ã§ãã以äžã®ããšãæ±ããããšã¯ã§ããŸããã§ãããããŸããŸãªã¯ãŒã¯ãããŒãããŒã«å šäœã§åé¡ãçºçããããšãªããå®å šãªããŠã¹ãµããŒããåŸãããŸããã
I / Oã®ããããªé 延ã«æ°ã¥ããŸãããããããWSL1ã·ã¹ãã ã®ããã«ããã¯ã ãšæããŸãã ç§ã¯ãã¢ã¡ã¿ã«Linuxã䜿çšããŠãããããŠã¹å ¥åã§0ããªç§ã®é 延ããããŸãã
@dmxt @offero XShellïŒå®éšçãªæ©èœããã®å®éã®ã³ãã³ãã©ã€ã³ããŸãã¯sshããWSLãžïŒã§æåããŸãã-åèãŸã§ã«ãããŠã¹ã®ãµããŒããªã©ããããŸãã ãŸããããŠã¹ã®ãµããŒããã²ã©ãå¿ èŠãªã¢ããªã¯ãçå€äžã®åžä»€å®ãšãã€ã¯ããšãã£ã¿ãŒã§ãã
ConEmuã§ã©ã®ããã«è§£æ±ºããããèŠãŠãã ãã
æ£ç¢ºã«ããããã€å®è£ ããããã«ã€ããŠã®ããŒãããããŸãã¯ã¿ã€ã ã©ã€ã³ã¯ãããŸããïŒ ãªãªãŒã¹ããã®ã¯éåžžã«éèŠãªæ©èœã®ããã§ãã ããã解決ãããã«v1.0ããªãªãŒã¹ãããŠããã®ã¯ãç§ã«ã¯ã¡ãã£ãšé©ãã§ãã æè¿ã®ããŒãžã§ã³ç®¡çã¯äœã®æå³ããªããšæããŸãã
ç§ãç¥ãéããWindowsã¿ãŒããã«ã®ææ°ã®Microsoft StoreããŒãžã§ã³ã®@kvnxiaoããŠã¹å ¥åã¯ïŒå°ãªããšãVimã§ã¯ïŒãµããŒããããŠããŸã
@ fat0trollç§ãç¥ãéããããã¯ééããªãset mouse=a
vimã§ããããŠã¹å
¥åã¯å€ãã³ã³ãã¹ãã§ã¯æ©èœããŸãããWindows Terminal1.0.1401.0ã§ã¯æ©èœããŸããã
set nocompatible
syntax on
set number
set mouse=a
set backspace=indent,eol,start
ãã®vimèšå®ã§ãvimã®ãŠã£ã³ããŠå ãã¯ãªãã¯ãããšãã¯ãªãã¯ããå Žæã«ã«ãŒãœã«ã移åããŸãã 1.0.1401.0ãWindowsãã«ã18368.836ïŒããã«åœ±é¿ãããå ŽåïŒã
@ kvnxiaoOpenSSH_For_Windows_7.7ã䜿çšããŠãããšæããŸãã ããŠã¹ã¢ãŒãã§åäœããªããã°ïŒ8.xã§è§£æ±ºïŒããããŸãã
ããã¯ãããŠã¹å ¥åãåãåããããã¹ãŠã®VTã¢ããªã±ãŒã·ã§ã³ã«æ瀺çã«å®è£ ãããŠããŸãã
æè¿ã®ããŒãžã§ã³ç®¡çã¯äœã®æå³ããªããšæããŸãã
äžèŠªåã§ããå¿ èŠã¯ãããŸããã
vimã«é¢ããŠã¯ãWindowsçšã«æ§ç¯ãããneovimãWindowsã®å®è¡å¯èœãã¡ã€ã«ãšããŠäœ¿çšããŠã¿ãŸããã ä»ã®äººãããŠã¹ãµããŒããvimã§æ©èœãããšèšã£ãŠããå ŽåïŒããšãã°ãssh / wslãªã©ãä»ããŠïŒãç§ã¯ããªããçã£ãŠããŸããããããã¯ãå®å šãªããµããŒãããŸã ååšããªãããšã瀺ããŠããŸãã質åïŒ
ã³ã³ãã¹ããçŸåšå¯èœãªãã®ãšæ¯èŒããŠããå®å šãªãããŠã¹ãµããŒãã®ããŒããããã«ã¯äœãæ®ã£ãŠããã§ããããã
ç§ã¯ãWTãä»ããŠããŠã¹å ¥åããµããŒãããïŒãããŠã³ã³ãã¹ãã§åäœããïŒæ±çšç«¯æ«ããŒã¹ã®ã¢ããªã±ãŒã·ã§ã³ãèµ·åããããšãã芳ç¹ãã話ããŠããŸãã ããšãã°ãWindowså®è¡å¯èœãã¡ã€ã«ãšããŠçŽæ¥æ§ç¯ãããè€æ°ã®ããã¹ãããŒã¹/ã¿ãŒããã«ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŸãã ãããã¯ãããã«ã¯ãªãã¯ããŠå®è¡ãããšæ£åžžã«æ©èœããconhostã䜿çšããŸãããWindows Terminalãä»ããŠå®è¡ãããšã衚瀺ãããããã¹ããããŠã¹ã§éžæããã ãã§çµäºããŸãã
@niklaskorzç§ã®ãããªäººã ããã®ãããã¯ã«é¢é£ãã質åãããŠãããšãã«ãåè¿°ã®ã³ã¡ã³ãã«è³æãšå察ã®æ祚ãããããšã®ãã€ã³ãã¯äœã§ããïŒããã¯ãŸã 解決ãããŠããªããããããŸããããããã§ãªããããããŸããã
ããªãã¯å®å šã«æ£ããã§ãã ãã®äœæ¥é ç®ã¯ãä»»æã®ç«¯æ«ããããŠã¹ã€ãã³ããåä¿¡ããWin32ã³ã³ãœãŒã«ã¢ããªã±ãŒã·ã§ã³çšã§ãããšæ£ããèå¥ãããŠãããã端æ«1.xãïŒãã€ââã«ã¹ããŒã³ïŒãäºå®ãããŠããŸããããã¯ãçŸåšãã2.0ãŸã§ã®éã«åãçµãããšã瀺ããŠããŸãã ãã以äžã«ãã现ããèŠç©ããã¯ãããŸããã
説æããŠãããŠããããšãïŒ ãã®ã¯ãŒã¯ã¢ã€ãã ã1.0ã§ç«¶åã§ããªãã£ãããšã¯å°ãæ²ããã§ããã競åããã®ãå¿åŸ ã¡ã«ããŠããŸããé·ãåŸ ããããªãããšãé¡ã£ãŠããŸãðã
FIWWãããªãããããç¥ããªãã£ãå Žåãæ°ããPowershell Out-ConsoleGridView
ïŒhttps://github.com/PowerShell/GraphicalToolsïŒã¯ããã®ãã©ãŒãã¹ãã±ãŒã¹ã§ãã ããã«ããããŠã¹é¢é£ã®è¿œè·¡ãã°ãåç
§ããŠãã ããïŒ https ïŒ
Terminal.Gui
ïŒhttps://github.com/tig/gui.csïŒã®äžã«æ§ç¯ãããŠããŸãã
ããã«ã Terminal.Gui
çšã®æ°ãããµã³ãã«ã¢ããªãäœæããŸãããããã䜿çšããŠãWTã§ã®ããŠã¹ãµããŒãã®ãã¹ãã«äœ¿çšã§ããŸãã
æ¬åœã«æ¥œãã¿ã«ããŠããŸãïŒ
ãã®åé¡ãä¿®æ£ããã®ã«åœ¹ç«ã€æ¹æ³ã¯ãããŸããïŒ ããã¯ãTerminal.GuiïŒhttps://github.com/tig/gui.csïŒã§æ§ç¯ãããGUIã³ã³ãœãŒã«ã¢ããªã«ãšã£ãŠã¯æ¬åœã«æ®å¿µã§ãã
@ kvnxiaoOpenSSH_For_Windows_7.7ã䜿çšããŠãããšæããŸãã ããŠã¹ã¢ãŒãã§åäœããªããã°ïŒ8.xã§è§£æ±ºïŒããããŸãã
ããã¯ãããŠã¹å ¥åãåãåããããã¹ãŠã®VTã¢ããªã±ãŒã·ã§ã³ã«æ瀺çã«å®è£ ãããŠããŸãã
æè¿ã®ããŒãžã§ã³ç®¡çã¯äœã®æå³ããªããšæããŸãã
äžèŠªåã§ããå¿ èŠã¯ãããŸããã
çµã¿èŸŒã¿ã®opensshãææ°ããŒãžã§ã³ã«æŽæ°ããã«ã¯ã©ãããã°ããã§ããïŒ
@ kvnxiaoOpenSSH_For_Windows_7.7ã䜿çšããŠãããšæããŸãã ããŠã¹ã¢ãŒãã§åäœããªããã°ïŒ8.xã§è§£æ±ºïŒããããŸãã
ããã¯ãããŠã¹å ¥åãåãåããããã¹ãŠã®VTã¢ããªã±ãŒã·ã§ã³ã«æ瀺çã«å®è£ ãããŠããŸããæè¿ã®ããŒãžã§ã³ç®¡çã¯äœã®æå³ããªããšæããŸãã
äžèŠªåã§ããå¿ èŠã¯ãããŸããã
çµã¿èŸŒã¿ã®opensshãææ°ããŒãžã§ã³ã«æŽæ°ããã«ã¯ã©ãããã°ããã§ããïŒ
ãã®ããã°æçš¿ïŒchocolateyããã®Opensshã€ã³ã¹ããŒã«ïŒã§èª¬æãããŠãããã®ãæ¢ããŠãããšæããŸãïŒ https ïŒ//blog.frankfu.com.au/2019/03/21/moving-from-windows-1809s-openssh-to-
OpenSSH_For_Windows_7.7ã䜿çšããŠãããšæããŸãã ããŠã¹ã¢ãŒãã§åäœããªããã°ïŒ8.xã§è§£æ±ºïŒããããŸãã
ããã¯ãããŠã¹å ¥åãåãåããããã¹ãŠã®VTã¢ããªã±ãŒã·ã§ã³ã«æ瀺çã«å®è£ ãããŠããŸãã
@DHowettãã®ã³ã³ããã¹ãããã OpenSSH_for_Windows_8.0p1, LibreSSL 2.6.5
ã䜿çšãããšæ©èœããããšãæåŸ
ãããããã«èãããŸããïŒ
ã¿ãŒããã«ãã¬ãã¥ãŒãã«ãã䜿çšããŠãtmuxããŠã¹ã¢ãŒããæå¹ã«ãªã£ãŠããUbuntuãã·ã³ã«SSHã§æ¥ç¶ããŠããŸãããããŠã¹å ¥åã¯ã¿ãŒããã«èªäœãå¶åŸ¡ããŠããã ãã®ããã§ãã
ãµãŒããŒãOpenSSH8.0ã«ã¢ããã°ã¬ãŒãããããšããŸããããããã圹ã«ç«ã¡ãŸããã§ããã
ãã®åé¡ã¯ãŸã ãã®ãããªãã®ãæ©èœããã®ã劚ããŠããŸããïŒ
ããã8.xã®x
ã¯1ãããããŸããã8.0ãã«ãããªãªãŒã¹ãããããšã«æ°ã¥ããŠããŸããã§ããã
ããã8.xã®xã¯1ãããããŸãããç§ã¯åœŒãã8.0ãã«ãããªãªãŒã¹ããããšã«æ°ã¥ããŠããŸããã§ããã
ç§ã¯ãããè©ŠããŠã¿ãŸãã
ã§ããŸãïŒ ããããããããšãïŒ
ç§ã¯ãã®åé¡ãç解ãå§ããŸããã
æ®å¿µãªãããMSã¯ãŸã Windowsã¿ãŒããã«ã«Win32APIã®ããŠã¹å
¥åæ©èœãå®è£
ããŠããŸããã
ïŒVTãšã¹ã±ãŒãã·ãŒã±ã³ã¹ã®ã¿ããµããŒããããŠããŸããïŒ
ã¢ããªã±ãŒã·ã§ã³ã§ReadConsoleInputWãšPeekConsoleInputWã眮ãæããããšããŸãã
Windowsã¿ãŒããã«ã§ããŠã¹ãæäœããŸãã
ãŸãã次ã®ã³ãŒããå®è¡ããŸãã
SetConsoleMode(hin, ENABLE_VIRTUAL_TERMINAL_INPUT);
SetConsoleMode(hout, ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING);
char *vt_mouse_input_enable_cmd = "\x1b[?1000h\x1b[?1003h\x1b[?1006h";
DWORD written;
WriteConsoleA(hout, vt_mouse_input_enable_cmd, strlen(vt_mouse_input_enable_cmd), &written, NULL);
次ã«ãããŠã¹å
¥åãVTãšã¹ã±ãŒãã·ãŒã±ã³ã¹ïŒsgr-1006ïŒãšããŠåä¿¡ã§ããŸãïŒäŸïŒ \x1b[<0;10;20M
ïŒã
ããããå¥ã®åé¡ãçºçããŸããã
äžéšã®ããŒå
¥åïŒç¢å°ããŒãªã©ïŒãVTãšã¹ã±ãŒãã·ãŒã±ã³ã¹ãšããŠåä¿¡ãããŸãïŒäŸïŒ \x1b[A
ïŒã
ãããã®äžèŠãªVTãšã¹ã±ãŒãã·ãŒã±ã³ã¹ãwin32APIã®ããŒã€ãã³ãã«å€æããããšããŸããã
ããããããã¯äžå®å
šã§ãã
ïŒä»®æ³ããŒã³ãŒããšä»®æ³ã¹ãã£ã³ã³ãŒããäœæ°ãªããŒãã«ãªããªã©ïŒ
ç§ã®ã³ãŒãã¯ããã«ãããŸãã
https://gist.github.com/Hamayama/6add968870269f2426716fad79724b31
ïŒPDC_read_console_input_wãšPDC_peek_console_input_wã¯ä»£æ¿é¢æ°ã§ããïŒ
ããŠã¹å ¥å以å€ã®VTãšã¹ã±ãŒãã·ãŒã±ã³ã¹ãç¡å¹ã«ããã¡ãœãããå¿ èŠã§ãã
äŸãã°
char *vt_key_input_disable_cmd = "\x1b[?9XXXl";
DWORD written;
WriteConsoleA(hout, vt_key_input_disable_cmd, strlen(vt_key_input_disable_cmd), &written, NULL);
ãŸã
SetConsoleMode(hin, ENABLE_VIRTUAL_TERMINAL_MOUSE_INPUT_ONLY);
ããããããã¯å°æ¥çã«ã¯ééã£ãèããããããŸãã...
src/terminal/parser/InputStateMachineEngine.cpp: 391
ïŒSGR VTã·ãŒã±ã³ã¹ã®INPUT_RECORD
ãžã®å€æïŒã«ã¯ããŠã¹ã®åãã®è¿œè·¡ããªãããšãããããŸããã
ã€ãŸããã¿ãŒããã«ã¯ConPTYã®VTã·ãŒã±ã³ã¹ãéä¿¡ããŸãããConPTYã¯ããŠã¹ãã¿ã³ã®ç¶æ ã®ã¿ãç£èŠããŸãã ããŠã¹åº§æšã®å€æŽã¯ç¡èŠãããŸãã
src/terminal/parser/InputStateMachineEngine.cpp: 391
ïŒ
success = _UpdateSGRMouseButtonState(id, firstParameter, buttonState, eventFlags);
success = success && _WriteMouseEvent(parameters.at(1), parameters.at(2), buttonState, modifierState, eventFlags);
ããŠã¹å ¥åã®çŸåšã®ãµããŒãç¶æ ã§ã¯ã次ã®ãªãã·ã§ã³ãå¯èœã§ãã
座æšè¿œè·¡ãè¿œå ãããšãããŠã¹ã®åããåŸæ¥ã®ã³ã³ãœãŒã«ã¢ããªã±ãŒã·ã§ã³ã§æ©èœãå§ããŸãã
src/terminal/parser/InputStateMachineEngine.hpp: 172
ïŒ
+ size_t _mouseColumn = 0;
+ size_t _mouseLine = 0;
src/terminal/parser/InputStateMachineEngine.cpp: 391
ïŒ
- success = success && _WriteMouseEvent(parameters.at(1), parameters.at(2), buttonState, modifierState, eventFlags);
+ auto mouseColumn = parameters.at(1).value_or(0);
+ auto mouseLine = parameters.at(2).value_or(0);
+ auto isMoved = mouseColumn! = _mouseColumn || mouseLine! = _mouseLine;
+ if (isMoved)
+ {
+ _mouseColumn = mouseColumn;
+ _mouseLine = mouseLine;
+ }
+ success = (success || isMoved) && _WriteMouseEvent(mouseColumn, mouseLine, buttonState, modifierState, eventFlags);
泚ïŒåŸæ¥ã®ã³ã³ãœãŒã«ã¢ããªã±ãŒã·ã§ã³ãèµ·åããåã«ãSGR圢åŒã§ããŠã¹ã®è¿œè·¡ãèŠæ±ããå¿ èŠããããŸãã
PS C:\Users> [char]0x1b + "[?1003;1004;1006h"
C:\Users> echo
Ctrl + [ [?1003;1004;1006h
1003
-ANY_EVENT_MOUSE_MODE1004
-ã·ãŒã±ã³ã¹ãConPTYãä»ããŠã¿ãŒããã«èªäœã«è»¢éããããã®ãµããŒããããŠããªãã¢ãŒãïŒäŸïŒ 1001
ãŸãã¯9999
ïŒ1006
-SGR_EXTENDED_MODEãã®çµæãã¿ãŒããã«ã¯ConpTYãžã®ããŠã¹ã€ãã³ãã®éä¿¡ãéå§ããŸããConpTYã¯ãåŸæ¥ã®ã³ã³ãœãŒã«ã¢ããªã±ãŒã·ã§ã³çšã«INPUT_RECORD
ã®çæãéå§ããŸãã
è¯ããã£ããã ããããµããŒãããããã«å®éã«ç§»åãããšãã«ããããä¿®æ£ããå¿ èŠããããŸãïŒsmileïŒ
æãåèã«ãªãã³ã¡ã³ã
ããã調æ»ããŠããå¯èœæ§ã®ããã³ãã¥ããã£ã¡ã³ããŒïŒ/ cc @SamuelEnglardïŒïŒãžã®åèãŸã§ã«ããããè¡ãããã®éçºããŒã ã®äœæ¥ãæ£åŒã«äºçŽããŸããã ç§ãã¡ã¯ããªãã®ã€ãŸå ãèžãã§ããªãããšãé¡ã£ãŠããŸãïŒ