Если вы не хотите писать программу для этого, есть несколько программ, которые будут показывать вам события мыши. Например, evemu-record
на устройстве ввода мыши будет отображать каждое нажатие кнопки, прокрутку колесика и движение в очень подробном выводе, таком как (, показанный отредактированным):
E: 0001 0111 0001 # EV_KEY / BTN_RIGHT 1
E: 0000 0000 0000 # ------------ SYN_REPORT (0) ---------- +552ms
E: 0002 0008 -001 # EV_REL / REL_WHEEL -1
E: 0000 0000 0000 # ------------ SYN_REPORT (0) ---------- +1016ms
E: 0002 0000 0001 # EV_REL / REL_X 1
E: 0002 0001 0003 # EV_REL / REL_Y 3
Запустите evemu-record
без аргументов, чтобы получить список устройств ввода. В моем случае это было
/dev/input/event5: Logitech USB Optical Mouse
тогда вы можете написать сценарий оболочки bash, например:
( pid=$BASHPID
evemu-record /dev/input/event5 |
stdbuf -oL egrep 'EV_KEY|REL_WHEEL' |
( while read -t 5 junk
do echo -n.
done
echo ok
kill -pipe $pid
)
)
Здесь используется egrep
для фильтрации всех линий, кроме кнопок и колес, и stdbuf
для обеспечения отсутствия буферизации вывода (, хотя ваш grep может принять параметр --line-buffered
, который делает то же самое ). Цикл while считывает каждую строку и выводит «.», но если в течение 5 секунд нет ввода (-t 5
), цикл останавливается. Наконец, kill
необходим для конвейера, который в противном случае не завершится, пока не будет обнаружено новое событие и egrep
не умрет с SIGPIPE. Использование kill -pipe
отправляет сигнал SIGPIPE, что позволяет избежать сообщений об ошибках, которые вы получили бы от kill -hup
. Внешняя оболочка (...)
необходима для получения идентификатора процесса для оболочки ($BASHPID
), который не уничтожит окружающий код оболочки.
Кроме того, вы можете получить поток данных PS/2 из /dev/input/mice
, но я не знаю всех деталей формата. Вы можете увидеть 3-байтовые записи с помощью
od -v -An -w3 -tx1 /dev/input/mice
Нет, нельзя. Вы можете использовать другой язык оболочки, создать символическую ссылку без пробелов на этот каталог или использовать некоторые трюки с псевдонимами.
Лично я не стал бы делать последнего, так как скоро забуду об этом;-)
Но вот пример:
# usage: q cmd...
# just like cmd..., only without IFS splitting
alias q='_q=$(fc -nl -0); IFS= eval "${_q#*q}" #'
$ src='foo bar' dst='baz quux'
$ q mkdir -p $src/dir $dst
$ q mv $src/dir $dst
$ q ls $dst
dir
Не совсем ваш вопрос, но если ваша проблема явно связана с обычной операцией перемещения файлов из папки «Загрузки», вы можете использовать для этого определенный псевдоним:
alias dl-mv='mv "$dl"/'
Конечно, вы также можете переименовать/изменить расположение папки «Загрузки» (или использовать символическую ссылку без пробелов в пути ).