Giter Club home page Giter Club logo

place-cursor-at's Introduction

place-cursor-at

A utility for X11 that moves the mouse cursor using the keyboard. Written in Haskell.

This utility only gives you an ability to quickly move your mouse cursor to one of 9 common spots of the screen. It’s intended to reduce the use of the mouse, but not to replace it completely. It doesn’t provide you accurate aiming, only approximate.

You bind a hotkey (in your WM configuration or by using xbindkeys) to run place-cursor-at (say Super+M) and when you press it you see 9 windows on current screen with letters shown on them. When you press a letter on your keyboard that is associated with one of those windows your mouse cursor appear at the center of that window and the application closes. Thus you can quickly move your mouse cursor to one of 9 different spots by two-step combo.

Other key bindings:

  1. Press Escape to close the application (when one of the letter windows is focused)

  2. Move focus to a letter window where you want your mouse cursor to be and press Enter (this is the same as pressing that letter on your keyboard)

I originally created this tool it for myself to use it with xmonad and i3.

Screenshot

Requirements

Either one:

  1. Nix Package Manager

  2. The Haskell Tool Stack and:

    1. libX11 development files
    2. libXinerama development files

How to use

With Nix

See Nix Package Manager.

You can run this application like this:

nix-shell --run place-cursor-at

See also shell.nix’s arguments for available options. For instance if you want to enter a nix-shell with cabal available:

nix-shell --arg withCabal true

NixOS

You can add this application into your NixOS configuration.nix like this:

{ pkgs, ... }:
let
  place-cursor-at-src = pkgs.fetchFromGitHub {
    owner = "unclechu";
    repo = "place-cursor-at";
    rev = "ffffffffffffffffffffffffffffffffffffffff"; # Git commit hash
    sha256 = "0000000000000000000000000000000000000000000000000000";
  };

  place-cursor-at = pkgs.callPackage place-cursor-at-src {};
in
{
  environment.systemPackages = [ place-cursor-at ];
}

With Stack

See The Haskell Tool Stack.

stack build
stack exec place-cursor-at

You could install place-cursor-at binary to ~/.local/bin directory (make sure you have this directory in your PATH environment variable):

stack install

NixOS note

If you need to work with Stack under NixOS for whatever reason you would have to use --system-ghc in order to make it work. You can manually add --system-ghc to each call of stack or define this alias for your convenience:

alias stack='stack --system-ghc'

Using it as script

You also can run this application as a script (nix-shell script, so you have to install Nix Package Manager first):

src/place-cursor-at.hs

But this application is intended to be used very often (to be run again and again many times) and to be very responsive, so it’s better to precompile it to reduce startup time.

Xinerama note

By default it appears and do its stuff on display where your mouse cursor is. But you can specify which display where it should appear on:

place-cursor-at 1

Or on third display:

place-cursor-at 3

Jump to specific position without GUI

You can immediately jump to specific position of a screen without showing any GUI, like this:

place-cursor-at LT

It’s case-insensitive, this also would work:

place-cursor-at lt

And you also can specify a display you want to jump to:

place-cursor-at lt 1

In any order of the arguments:

place-cursor-at 1 lt

Codes of available positions

Code Deciphering
LT Left-Top
LC Left-Center
LB Left-Bottom
CT Center-Top
CC Center-Center
CB Center-Bottom
RT Right-Top
RC Right-Center
RB Right-Bottom

Author

Viacheslav Lotsmanov

Contributors

The logo is created by psikoz and some technical adjustments are made by Viacheslav Lotsmanov.

Licenses

  1. place-cursor-atGNU/GPLv3

  2. The logo — Creative Commons — Attribution 4.0 International (CC BY 4.0)

    These files in artwork/logo directory in particular:

place-cursor-at's People

Contributors

psikoz avatar unclechu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

psikoz molleweide

place-cursor-at's Issues

Logo proposal

Hey @unclechu , I designed a logo by combining keyboard and mouse icons for you. If there is anything else you want, you can tell me. WDYT?

place

Failes on missed font

Hi.

I've seen the following error

$ place-cursor-at
place-cursor-at: user error (loadQueryFont)
place-cursor-at: user error (loadQueryFont)
place-cursor-at: user error (loadQueryFont)
place-cursor-at: user error (loadQueryFont)
place-cursor-at: user error (loadQueryFont)
place-cursor-at: user error (loadQueryFont)
place-cursor-at: user error (loadQueryFont)
place-cursor-at: user error (loadQueryFont)
place-cursor-at: user error (loadQueryFont)
place-cursor-at: thread blocked indefinitely in an MVar operation

until i've installed xfonts-terminus and restarted X server on Debian 8
system. May be fallback to another font or use fontconfig somehow?

(можно писать по-русски? Честно говоря, я так и не понял, что программа делает; перемещает курсор в одном окне? Или между разными? Но это я так, к слову; может, опишите это более подробно в README.)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.