LINUX.ORG.RU

Скрипт, скрывающий курсор мышки

 , , , спрятать


2

0

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

Автор скрипта, Винсент Загарра II, не считал нужным публиковать его где-либо по причине уверенности в том, что это никому не нужно кроме него. Поделился кодом только после переписки по почте.

#!/bin/zsh
############################################################################
# author: milomouse <vincent[at]fea.st>                                    #
# detail: banish the mouse cursor to bottom-right corner of the screen and #
#         disable touchpad (optional); also undo this by returning mouse   #
#         to last position (or center of screen) and enabling touchpad.    #
############################################################################
# depend: xdotool: for controlling the mouse                               #
#         xdpyinfo: for finding screen dimensions                          #
#         synclient: for controlling the touchpad in laptops (optional)    #
############################################################################
unsetopt nomatch
scriptname=$(print - $0(^:t))

## VARIABLE: set a temporary file for storing mouse position.
FILE="/tmp/user-keep/${USER}/.${scriptname}"

## CODE: do not edit below this line unless you know what you are doing.
function _help() {
  << EOF
usage: ${scriptname} [option]
options:
    -t | --toggle    Enable or disable mouse
    -d | --disable   Force disabling of mouse
    -e | --enable    Force enabling of mouse
    -s | --show      Display \$FILE location
    -h | --help      Display this message

depends:
    xdotool ($(print ${${${:-=xdotool}/=*/not found}/\/*/installed}))
    xdpyinfo ($(print ${${${:-=xdpyinfo}/=*/not found}/\/*/installed}))
    synclient ($(print ${${${:-=synclient}/=*/not found}/\/*/installed})) [optional]
EOF
exit
}

function __dimensions() {
  for exe in xdotool xdpyinfo; do
    which ${exe} &>/dev/null || { print "Missing required program: ${exe}" ; _err=1 }
  done
  [[ ${+_err} == 1 ]] && exit 1
  xy=${${${${${(M)${"$(xdpyinfo 2>/dev/null)"}#*dimensions:*\)}#*dimensions*:}/pixels*}// }/x/ }
  x=${${(s: :)xy}[1]}
  y=${${(s: :)xy}[2]}
}

function _mayberat() {
  if [[ ${+FILE} == "0" ]]; then
    print "You must set a temp file; see source code." && exit 1
  fi
  if [[ ! -d ${FILE:h} ]]; then
    print "Directory for file does not existing, attempting to create..."
    mkdir -p ${FILE:h} || { print "Could not create \"${FILE:h}\", make sure you have proper write permissions." ; exit 1 }
  fi
  if [[ -f ${FILE} ]]; then
    _yesrat
  else
    _norat
  fi
}

function _yesrat() {
  __dimensions
  if [[ ${+DISPLAY} == 1 ]]; then
    if [[ -f ${FILE} && ${#$(<${FILE})} -eq 2 ]]; then
      xdotool mousemove $(<${FILE}) &>/dev/null
      rm -f ${FILE} &>/dev/null
    else
      xdotool mousemove $(($(print ${x})/2)) $(($(print ${y})/2)) &>/dev/null
      rm -f ${FILE} &>/dev/null
    fi
    which synclient &>/dev/null && synclient TouchpadOff=0 &>/dev/null
  else
    print "\$DISPLAY unavailable, aborting."
    exit 1
  fi
}

function _norat() {
  __dimensions
  if [[ ${+DISPLAY} == 1 ]]; then
    print ${${${$(xdotool getmouselocation 2>/dev/null)[1,2]//:/}#x}#y} >>! ${FILE}
    xdotool mousemove $(print ${xy}) &>/dev/null
    which synclient &>/dev/null && synclient TouchpadOff=1 &>/dev/null
  else
    print "\$DISPLAY unavailable, aborting."
    exit 1
  fi
}

[[ -z $1 ]] && _help
case $1 in
  '-t'|'--toggle')  _mayberat ;;
  '-d'|'--disable') _norat ;;
  '-e'|'--enable')  _yesrat ;;
  '-s'|'--show')    print ${FILE} ; exit ;;
  '-h'|'--help')    _help ;;
  *) [[ -z $@ ]] && _help || { print "unrecognized operation: $@ (see --help for usage)" ; exit 1 } ;;
esac

Версия на пасте: http://pastebin.com/vLYxJMmH

★★☆

unclutter, последняя версия которой вышла в 1994 году - уже не работает на современных wm/de, например на осоме и bspwm оно либо сегфолтится, либо течет.

юзал на windowmaker, openbox, щас на stumpwm - работает сутками, жрёт копейки

одно но: Debian doesn't use http://sf.net/projects/unclutter/ as upstream project.

lazyklimm ★★★★★
()
Последнее исправление: lazyklimm (всего исправлений: 1)
Ответ на: комментарий от cinyflo

Даже придумать не могу зачем это нужно.

Все очень просто.

Ты читаешь или пишешь, что угодно, а по середине экрана - курсор мышки. Как его клавиатуро-ориентировано, vim-like, emacs-like, как угодно убрать без использования мышки?

(до которой больно, не комфортно, трудозатратно, дорого и проблематично для психического здоровья - тянуться?)

science ★★☆
() автор топика
Ответ на: комментарий от cinyflo

попробуй, если понравится - потом без этого не сможешь

lazyklimm ★★★★★
()
Ответ на: комментарий от lazyklimm

юзал на windowmaker, openbox, щас на stumpwm - работает сутками, жрёт копейки

а вот на awesome, bspwm, subtle и wmfs2 к сожалению не работает, потому вот такое универсальное решение, не зависящее от софтины 1994 года.

Кстати, используется ли еще какая софтинка такой давности в плане выхода последней версии? :)

Apr  9  1991 Imakefile
Apr  9  1991 Makefile
Apr 11  1994 patchlevel.h
Sep 28  1992 README
Apr 11  1994 unclutter.c
Apr 11  1994 unclutter.man
Aug  2  1991 vroot.h

science ★★☆
() автор топика
Ответ на: комментарий от Extraterrestrial

прозрачную тему курсора и установить ее?

нет конечно, а если нужна мышь, переключать тему курсора?
ты возможно не въехал в юзкейс данной темы.

science ★★☆
() автор топика
Ответ на: комментарий от science

не зависящее от софтины 1994 года.

drwxr-xr-x   6 dk   dk    4096 май  2 04:15 debian/
-rw-r--r--   1 dk   dk      59 апр  9  1991 Imakefile
-rw-r--r--   1 dk   dk    1959 сен 20 13:10 Makefile
-rw-r--r--   1 dk   dk     945 апр 11  1994 patchlevel.h
drwxr-xr-x   6 dk   dk    4096 сен 20 13:10 .pc/
-rw-r--r--   1 dk   dk    1804 сен 28  1992 README
-rw-r--r--   1 dk   dk   13334 сен 20 13:10 unclutter.c
-rw-r--r--   1 dk   dk    4181 сен 20 13:10 unclutter.man
-rw-r--r--   1 dk   dk    2863 авг  2  1991 vroot.h

это с дебиановскими патчами, если что

lazyklimm ★★★★★
()
Ответ на: комментарий от lazyklimm

в генте идёт без патчей оригинальный сорс, только в ебилде один фикс:

sed -i -e "/stdio/ a #include <stdlib.h>"

science ★★☆
() автор топика
Ответ на: комментарий от science

кому как, мне проще поставить готовый обновляемый пакет

lazyklimm ★★★★★
()

последняя версия которой вышла в 1994 году

yum info unclutter
Загружены модули: langpacks, refresh-packagekit
Доступные пакеты
Название: unclutter
Архитектура: i686
Версия: 8
Выпуск: 7.fc19
Объем: 14 k
Источник: fedora/19/i386
Аннотация: Hide mouse cursor when idle
Ссылка: ftp://export.lcs.mit.edu/contrib/utilities/unclutter-8.README
Лицензия: Public Domain
Описание: Unclutter hides the mouse cursor image from the screen so that it does not
        : obstruct the area you are looking at. It hides the mouse cursor when it is not
        : moved for a specified amount of time or no buttons are pressed on the mouse.
        : Cursor image will be restored once the mouse is moved again.

уже не работает на современных wm/de

rpm -qa kde-workspace
kde-workspace-4.10.5-3.fc19.i686

УМВР

novitchok ★★★★★
()
12 ноября 2013 г.
Ответ на: комментарий от science

а вот на awesome, bspwm, subtle и wmfs2 к сожалению не работает, потому вот такое универсальное решение, не зависящее от софтины 1994 года.

Небольшая некрофилия, но у меня работает везде. Пробовал запускать её так:

unclutter -idle 1 -reset -noevents  &
?

e7z0x1 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.