ターミナル エミュレーターと対応する terminfo エントリを実装しました。これにより、 emacs、mc (ミッドナイト コマンダー)、またはtig (git ブラウザー)などのncursesプログラムを実行できます。ターミナルにマウスサポートを追加したいのですが、特にウィンドウをクリックしてカーソルをemacsに配置します。多くのグーグル検索とstackoverflowの助けを借りて、必要なterminfoフィールド(特に)とコントロール()および「キー」()シーケンスについて学び、端末にマウスボタンイベントを実装しました。次のような小さなncursesプログラムを作成しました。kmous
\E[?1000h
\E[M...
initscr ();
clear ();
noecho ();
cbreak ();
keypad (stdscr, TRUE);
mousemask (ALL_MOUSE_EVENT, NULL);
if (has_mouse ())
{
while (1)
{
switch (getch ())
{
case KEY_MOUSE:
if (getmouse (&event) == OK)
{
printf ("mouse event 0x%x at %i,%i\n", event.bstate, event.x, event.y);
このプログラムはxtermと私の端末で正常に動作するため、私の端末とその terminfo エントリの両方が完全に間違っていることはありません。
ただし、mcは私の端末でのマウス サポートを認識していないよう\E[?1000h
であり、それをアクティブにするためのシーケンスさえ発行していないため、端末が送信するマウス ボタン イベントによって完全に混乱しています (\E[?1000h
アクティブ化していなくても)。
私は何が欠けていますか?