Без мыши

Материал из Xgu.ru

(Перенаправлено с mouseless)
Перейти к: навигация, поиск
stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

Если вы считаете, что её стоило бы доработать как можно быстрее, пожалуйста, скажите об этом.

Короткий 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, он сделал неплохую работу. В любом случае, список приведённых им приложений достоин внимательного изучения.

В комментариях к статье много интересного:

[править] Графические приложения с текстовым интерфейсом

Некоторые программы, которые на первый взгляд, использовать без мыши невозможно, могут быть исправлены так, что мышь оказывается в них совершенно ненужной. При этом программы полностью сохраняют свою функциональность.

  • 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 и как с ним бороться:

[править] Материалы по интерфейсу пользователя на Xgu.ru

  • Synaptics ­— настройка и использование тачпада (touchpad)
  • Без мыши — почти как день без X'ов, только всю жизнь и без мыши