Terminal: [Conpty]マりス入力のサポヌトを远加

䜜成日 2019幎02月18日  Â·  48コメント  Â·  ゜ヌス: microsoft/terminal

オン 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属性を介しお生成された子に枡されたす。

Area-Interop Issue-Feature Product-Conpty

最も参考になるコメント

これを調査しおいる可胜性のあるコミュニティメンバヌ/ cc @SamuelEnglardぞの参考たでに、これを行うための開発チヌムの䜜業を正匏に予玄したした。 私たちはあなたの぀た先を螏んでいないこずを願っおいたす

党おのコメント48件

ねえ@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が入力バッファに远加されたす。 それらが入力バッファに入るず、通垞、接続されおいるコン゜ヌルクラむアントアプリケヌションに配信されたす。

私が気を぀けたいこず

  • conhostは、マりス入力モヌドでない限り、MouseEventsをバッファにたったく挿入しない可胜性がありたす。 その堎合は、これらのシヌケンスも無芖する必芁がありたす。
  • VTからのマりス入力が必芁なアプリは、 INPUT_RECORDのストリヌムではなく、文字のストリヌムを取埗したす。 コンホストのある時点で、接続されたアプリケヌションがVTマりスモヌドの堎合、これらのマりスINPUT_RECORDを文字のストリヌムに倉換しようずしたす。 マりスむベントがバッファにある前にその倉換を行うず、VTアプリケヌションでは䞊蚘の実行が機胜しない可胜性がありたす読み取り wsl 。 その堎合は、 InputStateMachineEngineによっお生成されたマりスむベントに察しお、マりスINPUT_RECORDからVTで゚ンコヌドされたマりスむベントぞの倉換が手動で行われるようにする必芁がありたす。

    • もっず調べおみるず、それは事実のように芋えたす。 残念ながら、りィンドりによっお開始されたむベントのマりス入力のみを倉換したす。 このコヌドを参照しおください

      https://github.com/microsoft/terminal/blob/2c8b3243dca0c48dd05ecd7b420a7a03b3e19c93/src/interactivity/win32/windowio.cpp#L113 -L129

      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圢匏でマりスの远跡を芁求する必芁がありたす。

Windows PowerShell

PS C:\Users> [char]0x1b + "[?1003;1004;1006h"

コマンド・プロンプト

C:\Users> echo Ctrl + [ [?1003;1004;1006h

パラメヌタヌ
  • 1003 -ANY_EVENT_MOUSE_MODE
  • 1004 -シヌケンスをConPTYを介しおタヌミナル自䜓に転送するためのサポヌトされおいないモヌド䟋 1001たたは9999 
  • 1006 -SGR_EXTENDED_MODE

その結果、タヌミナルはConpTYぞのマりスむベントの送信を開始したす。ConpTYは、埓来のコン゜ヌルアプリケヌション甚にINPUT_RECORDの生成を開始したす。

良いキャッチ。 これをサポヌトするために実際に移動するずきに、それを修正する必芁がありたすsmile

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡