как получить MouseMove и MouseClick в Bash? - PullRequest
18 голосов
/ 11 мая 2011

Мне интересно, как получить события MouseClick и MouseMove в сценариях bash для моих собственных простых событий ОС.

Пожалуйста, скажите мне, как получить эти события.

Ответы [ 5 ]

30 голосов
/ 12 мая 2011

Эмулятор терминала xterm определяет некоторые управляющие последовательности для отслеживания мыши. Подробнее о них вы можете узнать в разделе Отслеживание мыши в документе ctlseqs для распространения xterm.Если у вас установлен xterm, вы, вероятно, будете иметь копию на /usr/share/doc/xterm/ctlseqs.txt.gz или похожем пути.

Большинство эмуляторов терминалов, работающих в системе X Window (например: Konsole, gnome-terminal, eterm, ...) понять, по крайней мере, некоторые из этих контрольных последовательностей.Если вы хотите использовать их непосредственно на одном из виртуальных терминалов Linux, вам, вероятно, придется запустить gpm(8).

. Существует несколько последовательностей управления для включения и отключения отчетов о перемещении мыши:

  • 9 -> Отчеты мыши X10, для совместимости с xterm X10, отчеты о нажатии кнопок.
  • 1000 -> Отчеты мыши X11, отчеты о нажатии и отпускании кнопок.
  • 1001 ->отчет о выделении, полезен для создания отчетов об основных моментах мыши.
  • 1002 -> отчет о движении кнопки, сообщает о движении при нажатии кнопки.
  • 1003 -> отчет обо всех движениях, сообщает обо всех движениях.

Последовательность управления: CSI ? number h для включения и CSI ? number l для отключения.CSI является либо ESC [, либо символом 0x9b.Таким образом, вы можете использовать их следующим образом:

echo -e "\e[?1000h"

Затем вы получите несколько символов при нажатии кнопки, подробности см. ctlseqs или console_codes(4).Затем вы можете отключить отслеживание мыши с помощью:

echo -e "\e[?1000l"

К сожалению, предыдущие режимы создания отчетов с мышью могут обрабатывать координаты только до 223 (255–32) или в некоторых ситуациях 95 (127–32).Итак, есть несколько новых переключателей для изменения формата сообщения координат мыши:

  • 1006 -> сообщать в виде десятичных значений (xterm, многие другие эмуляторы терминала, но не urxvt)
  • 1015 -> сообщать в виде десятичных значений (urxvt, xterm, другие эмуляторы терминала, некоторые приложения находят его сложным для анализа)
  • 1005 -> сообщать обратно в кодировке utf-8 (xterm, urxvt, с пробелом внесколько способов)

Хорошей стратегией для приложения будет включение отчетов с помощью мыши, а затем (опционально запрос режима urxvt 1015 и затем) запрос режима SGR 1006.Приложение должно обрабатывать как новые, так и устаревшие ответы на отчеты мыши, чтобы продолжить работу на эмуляторах терминала без поддержки новых режимов.

Дополнительную информацию о новых режимах отчетов можно получить по адресу:

4 голосов
/ 11 мая 2011

bash ничего не знает о мышке или щелчках мышью. По умолчанию курсор отсутствует или что-то в этом роде.

Вы можете установить «Сервер мыши общего назначения». Посмотрите на это: http://www.linuxfromscratch.org/blfs/view/6.3/general/gpm.html например, использовать копирование и вставку внутри консоли. Возможно, вы сможете использовать инструменты для работы с bash-скриптом.

... но вообще: встроенная мышь не поддерживает bash-shell

1 голос
/ 31 марта 2019

Короткий путь

Я сделал скрипт, чтобы заставить командную строку перемещать курсор по щелчку мыши :

  1. Включить отчеты об отслеживании мыши xterm
  2. Установить привязки readline, чтобы использовать escape-последовательность, генерируемую щелчками

Его можно найти здесь: https://github.com/tinmarino/mouse_xterm/blob/master/mouse.sh

Долгий путь

Xterm имеет функцию отслеживания мыши

echo -e "\e[?1000;1006;1015h" # Enable tracking
echo -e "\e[?1000;1006;1015l" # Disable tracking
  • Клик мыши выглядит как \e[<0;3;21M и релиз \e[<0;3;21. Где 2 - это x (слева), а 22 - это y (сверху)
  • Мышь оборвалась: \e[<64;3;21M
  • Мышь опрокидывается: \e[<65;3;21M
  • Нажмите C-v после включения отслеживания мыши, чтобы увидеть, что

Readline может вызвать обратный вызов bash

bind -x '"\e[<64;": mouse_void_cb' # Cannot be put in .inputrc
bind    '"\C-h"   : "$(date) \e\C-e\ef\ef\ef\ef\ef"' #Can be put in .inputrc

Readline может вызывать несколько функций

# Mouse cursor to begining-of-line before calling click callback
bind    '"\C-98" : beginning-of-line'
bind -x '"\C-99" : mouse_0_cb'
bind    '"\e[<0;": "\C-98\C-99"'

Обратный вызов Readline может изменить положение курсора (точки) с помощью READLINE_POINT переменной среды

bind -x '"\C-h"  : xterm_test'
function xterm_test {
    echo "line is $READLINE_LINE and point $READLINE_POINT"
    READLINE_POINT=24    # The cursor position (0 for begining of command)
    READLINE_LINE='coco' # The command line current content
}

Ссылки

1 голос
/ 18 августа 2011

вы можете использовать xdotool для событий mousemove и mouseclick.xdotool - это инструмент, который подделывает клавиатуру и мышь.установите его, набрав sudo apt-get install xdotool.С помощью xdotool вы можете автоматизировать практически все, что вы делаете, используя клавиатуру и мышь.

0 голосов
/ 07 мая 2015

Вы можете использовать команду 'xte' из пакета 'xautomation'.

apt-get install xautomation

В качестве примера можно отметить следующую команду:

xte 'mousemove 200 300'

Итак, указатель мыши перемещается на ширину 200 и высоту 300 экрана. В качестве другого примера имеем:

xte 'mouseclick 3'

, щелкающих правой кнопкой мыши (1: щелчок левой кнопкой мыши, 2: щелчок средней кнопкой мыши, 3: щелчок правой кнопкой мыши). Кроме того, вы можете нажимать клавиши на клавиатуре через оболочку:

xte 'keydown Control_L' 'key c' 'keyup Control_L'

В этом примере отправка Ctrl + C в оболочку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...