Без мыши
Материал из Xgu.ru
- Короткий URL: mouseless
Здесь рассматриваются программы и техники, которые могут помочь обойтись без мыши или минимизировать её использование при работе в UNIX/Linux-системе.
Большинство операций, которые выполняются с помощью мыши,
могут быть сделаны и без неё, часто даже быстрее и проще,
при помощи специальных комбинаций клавиш или с использованием
специальных программ и техник.
Первый способ обычно проще — достаточно выучить клавиатурные комбинации (keyboard shortcuts). Второй более радикален и более трудоёмок, но может быть и более эффективным.
Содержание |
[править] Программы
[править] Оконные менеджеры
- xmonad — тайловый оконный менеджер для X Window System, ориентированный на использование клавиатуры.
- wmii — оконный менеджер для X Window System, ориентированный на использование клавиатуры.
- GNU Screen — текстовый оконный менеджер.
- ratpoison - оконный менеджер, созданный на базе GNU Screen, не требующий мыши.
- Quicksilver (Mac OS X) — инструмент, превращающий клавиатуру в сверхмощный пульт управления системой.
- Katapult и подобные — им далеко до Quicksilver, но они работают под Linux и другие Unix, а не только Mac OS X
[править] Консольные приложения
- Консольные программы.
Не использовать мышь это не то же, что не сидеть в иксах. Многие задачи в чистой консоли делать невозможно, а многие — неудобно. Однако, в то же время существует большое количество консольных приложений, намного превосходящих по возможностям графические аналоги.
День без X:
- a day without x (англ.) — статья, где автор пытается прожить один день без X-сервера. Если не обращать внимания на то, что для него подвиг то, что для многих многолетняя привычка, то что скриншоты сделаны из-под иксов, а также то, что постинг написан при помощи браузера Firefox из-под Windows, он сделал неплохую работу. В любом случае, список приведённых им приложений достоин внимательного изучения.
В комментариях к статье много интересного:
- День без X-сервера — обсуждение на OpenNet
- День без X-сервера — обсуждение на ЛОР
[править] Графические приложения с текстовым интерфейсом
Некоторые программы, которые на первый взгляд, использовать без мыши невозможно, могут быть исправлены так, что мышь оказывается в них совершенно ненужной. При этом программы полностью сохраняют свою функциональность.
- Vimperator — браузер Firefox (Iceweasel) с интерфейсом Vim;
- Conkeror — браузер Firefox (Iceweasel) с интерфейсом Emacs;
- Muttator — почтовый клиент Thundebrid с интерфейсом Mutt.
[править] Совсем без мыши
В большинстве случаев, когда вы используете правильные программы, такие как wmii, Vimperator, GNU Screen, mutt, freetalk и им подобные, вы можете прекрасно обходиться без мыши, но есть некоторые ситуации, когда совсем без мыши всё же сложно.
Особенно, это касается работы с графическими приложениями, такими например как GIMP.
Как можно было бы решить указанную проблему? Нужна программа, которая размечала бы экран сеткой и присваивала каждому квадрату координату, обозначаемую символом.
Координаты могут быть присвоены, например, так:
+-----+-----+-----+-----+ | 1 | 2 | 3 | 4 | +-----+-----+-----+-----+ | q | w | e | r | +-----+-----+-----+-----+ | a | s | d | f | +-----+-----+-----+-----+ | z | x | c | v | +-----+-----+-----+-----+
Затем, когда нажимается первый символ, размечается следующий квадрат и так далее, пока мышь не будет спозиционирована как надо.
Если предположить, что на экране всего 1280x1024 точек, и при каждой итерации он разбивается на 12 секций, то получается, что потребуется не более ln(1280x1024)/ln(12)=5.66 нажатий, для того чтобы точно спозиционировать мышь. А если на 20, то для экрана такого размера достаточно и 4.7 нажатий. В действительности, такая точность позиционирования нужна редко, а для того чтобы спозиционировать с точностью до прямоугольника 20x20 будет достаточно и 3х.
При относительном позиционировании, то есть, сдвиге, нажатий может быть ещё меньше.
Существует программа keynav, которая умеет работать с такой сеткой. По умолчанию она разбивает экран сеткой из четырёх частей, что не очень удобно.
Вот конфигурационный файл для разбиения экрана на каждой итерации на 16 частей с привязкой клавиш, указанной выше:
ctrl+semicolon start,grid 4x4 1 cell-select 1x1 2 cell-select 2x1 3 cell-select 3x1 4 cell-select 4x1 q cell-select 1x2 w cell-select 2x2 e cell-select 3x2 r cell-select 4x2 a cell-select 1x3 s cell-select 2x3 d cell-select 3x3 f cell-select 4x3 z cell-select 1x4 x cell-select 2x4 c cell-select 3x4 v cell-select 4x4
Однако у keynav при всех его вкусностях, не хватает многих возможностей, из-за которых использовать его всё же сложно.
Что можно было бы в него добавить?
- Относительное позиционирование (то есть курсор перемещается не в абсолютную точку, а относительно его текущей позиции). Иногда нужно мышь передвинуть чуть-чуть вправо или чуть-чуть влево, и теоретически должно хватить одной клавиши, а тут надо заново идти и позиционировать мышь;
- Позиционирование в пределах текущего окна. Часто бывает нужно просто кликнуть мышью в какую-то точку, которая находится в текущем окне. Тогда позиционирование по всему экрану избыточно.
- Отмена выбора области. При выполнении абсолютного позиционирования, если вы быстро выбираете нужный квадрат, то вы можете легко ошибиться (особенно, сначала, когда вы только привыкаете к такому способу управления), и тогда неплохо было бы сделать отмену и вернуться на шаг назад.
[править] Программное управление положением мыши
Для того чтобы программно переместить мышь в произвольную точку, можно использовать инструмент xdotool.
Переместить мышь в точку с координатами (100,200):
%$ xdotool mousemove 100 200
Этот скрипт крутит мышкой по кругу (сплюснутому):
~/bin/xcircle
#!/usr/bin/perl use Time::HiRes (usleep); $X=1440; $Y=900; $R=400; $step=2; $sleep=10000*$step; while(1) { $x = $X/2+$R*cos($a/180*3.1415); $y = $Y/2+$R*sin($a/180*3.1415); system("xdotool mousemove $x $y"); usleep($sleep); $a+=$step; $a%=360; }
Это если вам не будет хватать движения на экране.
Этот скрипт рисует на экране слово "Linux" написан для использования на http://chatroulette.com/
#!/bin/bash #l xdotool mousemove 400 200 ;sleep 0.09 xdotool mousedown 1 xdotool mousemove 400 300 ;sleep 0.09 xdotool mousemove 450 300 ;sleep 0.09 xdotool mouseup 1 #i xdotool mousemove 500 200 ;sleep 0.09 xdotool click 1 xdotool mousemove 500 220 ;sleep 0.09 xdotool mousedown 1 xdotool mousemove 500 300 ;sleep 0.09 xdotool mouseup 1 #n xdotool mousemove 550 300 ;sleep 0.09 xdotool mousedown 1 xdotool mousemove 550 200 ;sleep 0.09 xdotool mousemove 600 200 ;sleep 0.09 xdotool mousemove 600 300 ;sleep 0.09 xdotool mouseup 1 #u xdotool mousemove 650 200 ;sleep 0.09 xdotool mousedown 1 xdotool mousemove 650 300 ;sleep 0.09 xdotool mousemove 700 300 ;sleep 0.09 xdotool mousemove 700 200 ;sleep 0.09 xdotool mouseup 1 #x xdotool mousemove 750 200 ;sleep 0.09 xdotool mousedown 1 xdotool mousemove 800 300 ;sleep 0.09 xdotool mouseup 1 xdotool mousemove 800 200 ;sleep 0.09 xdotool mousedown 1 xdotool mousemove 750 300 ;sleep 0.09 xdotool mouseup 1
[править] Отключение курсора
Если вы всё равно не используете мышь, зачем вам нужен её курсор?
Программа unclutter скрывает курсор мыши, если им не двигать на протяжении 5 секунд.
Величину интервала неактивности можно регулировать при помощи опций программы.
[править] Запуск X Window без мыши
Если X Window System не хочет работать быз мыши, можно добавить в конфигурационный файл:
Section "ServerFlags" Option "AllowMouseOpenFail" EndSection
[править] Мышиный одометр
Мышиный одометр может помочь контролировать себя и оценить, насколько хорошо удаётся избегать использования мыши.
Мышиный одометр это программа, которая подсчитывает, сколько километров наездила мышь по столу за определённый интервал времени (например, с момента запуска программы, но не обязательно).
Популярные мышиные одометры:
- xodo
- kodo (KDE)
- Gnome-Odometer (Gnome)
[править] Буфер обмена
Буфер обмена — одно из важнейших приспособлений для обмена информацией между приложениями, с которыми работает пользователь. Уметь владеть искусством занесения и извлечения информации из буфера обмена без мыши очень важно, поскольку это заметно сокращает случаи использования снаряда и существенно ускоряет процесс работы.
[править] Основы
С мышью текст, скопированный в буфер обмена X Window System (в действительности в X Window System нет никакого буфера обмена, а есть скорее механизм обмена, который координирует X-сервер; когда говорят "буфер обмена в X Window", как правило, подразумевается этот механизм), вставляется при помощи нажатия средней кнопки мыши, колёсика мыши или двух кнопок нажатых одновременно.
Вставить текст без мыши можно с помощью комбинации Shift-Insert.
Если нужно скопировать текст из файла в буфер обмена, можно использовать программу xsel. На той же странице рассказано как можно ухитриться и быстро засовывать в буфер обмена адреса URL и прочие вещи, описываемые регулярными выражениями.
В desktop-менеджерах есть свои собственные инструменты для доступа к буферу обмена. Например, в KDE:
%$ dcop klipper klipper getClipboardContents
В Mac OS X аналогичная задача решается при помощи программ pbcopy и pbpaste.
Можно копировать в буфер обмена текст из консоли, если вы сидите в screen (а сидеть в нём имеет смысл), по методу, описанному в [1]. Кратко, идея заключается в том, чтобы дублировать буфер обмена screen в буфере обмена X Window через привязку соответствующих действий к соответствующим клавишам.
[править] Буфер обмена и X11-forwarding
Копирование не всегда может происходить локально. Вы можете работать в удалённой системе, и вам может понадобиться скопировать в буфер обмена текст из той системы.
Это можно сделать даже при помощи xsel, но для того чтобы такой метод работал, необходим X11-forwarding.
host1%$ ssh -X host2 host2%$ echo privet host1 | xsel -i
После этого в буфере обмена хоста host1 будет сообщение privet host1, несмотря на то, что команда была выполнена на хосте host2.
Для связи с X-сервером, работающем на клиентском компьютере, используются переменные окружения, которые автоматически устанавливаются при входе на удалённый хост.
Если же после подключения выполняется подключение к screen, переменные теряются, и для того чтобы передавать данные удалённому X-серверу, их нужно восстановить (это, кстати, касается и ситуации, когда вы не подключаетесь удалённо, а подключаетесь локально к сеансу screen, который запускался на виртуальном терминале или в X'ах, но он пережил X-сервер, под которым вы его запускали).
Скрипт ~/bin/sx, который можно использовать для подключения к сеансу GNU Screen:
#!/bin/sh export | egrep " (SSH_AUTH_SOCK|SSH_CLIENT|SSH_CONNECTION|SSH_TTY|DISPLAY)=" > ~/.sx screen -x
После этого в файле ~/.sx находятся нужные нам переменные окружения. Их можно использовать тогда, когда мы хотим передать данные X-серверу.
Например, скрипт ~/bin/url передаёт в буфер обмена последний URL, который был прислан в freetalk. Скрипт использует файл ~/.sx, если может прочитать его, для того чтобы знать параметры SSH-соединения:
#!/bin/sh [ -r ~/.sx ] && . ~/.sx for i in ~/.freetalk/history/*/* do tail $i | grep http:// done | sort -n | tail -1 | sed "s@.*http://@http://@" | xsel -i
Последний URL скопируется из истории freetalk в буфер обмена, если вызвать команду url.
[править] Буфер обмена и XMPP
Другой способ передачи данных в буфер обмена по сети — использование XMPP.
Создаётся JID, который является точкой входа в ваш буфер обмена. Данные, отправленные по этому адресу, автоматически попадают в локальный буфер обмена.
Вот простейший пример такого скрипта, написанного на Ruby и использующего библиотеку xmpp4r.
xmpp2clip.rb
#!/usr/bin/ruby # written by Igor Chubin in 2009, based on the echo.rb example $:.unshift '../../../../../lib' require 'xmpp4r/client' include Jabber if ARGV.length != 2 puts "Run with ./xmpp2clip.rb user@server/resource password" exit 1 end myJID = JID.new(ARGV[0]) myPassword = ARGV[1] cl = Client.new(myJID) cl.connect cl.auth(myPassword) cl.send(Presence.new) puts "Connected ! send messages to #{myJID.strip.to_s}." mainthread = Thread.current cl.add_message_callback do |m| if m.type != :error f=IO.popen("xsel -i", "r+") f.puts(m.body) f.close() message="The message <#{m.body}> was copied to the clipboard" m2 = Message.new(m.from, message.chomp) m2.type = m.type cl.send(m2) if m.body == 'exit' m2 = Message.new(m.from, "Exiting ...") m2.type = m.type cl.send(m2) mainthread.wakeup end end end Thread.stop cl.close
Этот скрипт можно запускать при старте X-сервера, например, добавив в ~/.xinitrc строку:
nohup xmpp2clip.rb my-clipoard@jabber.ru password
Вместо my-clipoard@jabber.ru указывается JID, являющейся точкой входа в буфер обмена, а вместо password — пароль для подключения.
Отправлять текст из удалённой системы можно, например, с помощью sendxmpp или другим способом.
[править] Vim
Из редактора Vim можно копировать текст в буфер обмена X Window System без использования мыши. И наоборот, текст, находящийся в буфере обмена X Window System, можно вставлять в Vim операциями вклейки [2].
Буфер обмена X Window отражён на буфер * или + редактора Vim. Для обращения к определённому регистру в Vim необходимо нажать символ " и название этого регистра.
Например, скопировать строку в буфер обмена X Window можно командой:
"*yy
(кавычки, звёздочка, два раза y).
Если вы уже находитесь в режиме вставки, то ctrl-r * (но если не включить set paste, текст в этом случае вставится лесенкой).
Для того чтобы всё это работало, vim должен быть собран с поддержкой xterm_clipboard:
%$ vim --version | grep +xterm_clipboard
Вклеивать текст можно и традиционным shift-insert, но при этом надо делать множество лишних операций:
- :set paste
- i для перехода в режим вставки
- shift-insert
- Esc для выхода из режима вставки
- :set nopaste
Конечно, это не может сравниться с нажатием "*p.
[править] Vimperator
URL, находящийся в буфере обмена, можно вклеить непосредственно в Vimperator буквой P. Он откроется в новом табе.
[править] Устройства
- Foot Mouse (Footime) — ножная мышь. Управление происходит при помощи ног
- Griffin Technology PowerMate — многие вещи, которые вы привыкли делать при помощи мыши, намного удобнее и быстрее делать при помощи этого девайса
- VIM — жестокий и беспощадный (рус.) — жестокое устройство для переключения режима работы Vim ногой
[править] Дополнительная информация
[править] RSI из-за мыши
Что такое RSI и как с ним бороться:
- RSI (англ.)
- 10 Simple RSI Prevention Tips (англ.)
- Of Mice and Men - Mice and RSI (англ.) — RSI связанный с мышью
- REAL Ergonomics- Mouse Vs Trackball Vs Touchpad (англ.) — сообщение в списке рассылки, посвящённом эргономике, с развёрнутой критикой мышей
- Track Pads vs Track Ball vs Mouse (англ.) — спор на тему того, что лучше тачпад или мышь
[править] Материалы по интерфейсу пользователя на Xgu.ru
- Synaptics — настройка и использование тачпада (touchpad)
- Без мыши — почти как день без X'ов, только всю жизнь и без мыши