Lightweight event wrapper for the terminal

2019-07-11 19:57发布

I believe this is the realm of the ncurses library. I'm trying to avoid having to get down and dirty with it though.

I'm looking for a program that I can configure to run a command while performing terminal mouse reporting translation to keypresses.

This is for use with pagers like less.

For example the MouseTerm SIMBL plugin for Terminal.app does exactly this.

But iTerm2 does not. And I want it.

I think the answer may be as simple as directly remapping the codes.

It looks like there are escape codes to switch the terminal into and out of mouse-listening mode, and mouse click escape codes actually seem to include the character coordinates. I can look at them with Ctrl+V inside of Vim because I have told vim to turn on the mouse.

It looks like this:

Note ^[ denotes escape (you can type escape by typing ctrl+[)

left click: ^[[M !!
right click: ^[[M"!!
middle click: ^[[M!!!
scroll up: ^[[M`!!
scroll down: ^[[Ma!!

So that does match up with the mouse wheel button codes being 64 more than the mouse button ones according to documentation (I like this page).

Now that I'm armed with the knowledge of what codes I need to map to what I just need to find out how to get a layer that lets me filter the input.

This has apparently led me to an epiphany. I simply need a simple non-line-buffering program that listens for mouse escape codes and replaces them with key codes. Surely Perl Term::ReadKey will let me set raw mode and do this nearly trivial task.

1条回答
乱世女痞
2楼-- · 2019-07-11 20:02

This stuff is difficult. I've been making do by configuring Tmux to handle things.

查看更多
登录 后发表回答