5

ターミナル エミュレーターと対応する terminfo エントリを実装しました。これにより、 emacsmc (ミッドナイト コマンダー)、または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アクティブ化していなくても)。

私は何が欠けていますか?

4

1 に答える 1