1.0.55 • Published 2 years ago

xdotool v1.0.55

Weekly downloads
7
License
MIT
Repository
-
Last release
2 years ago

xdotool

C++ bindings for Node.js to handle X11 using the full power of libxdo.

Installation

yarn add xdotool

Examples

Key logging

A few lines of code and you're able to spy what key strokes are being pressed on the keyboard:

const bindings = new XdoToolBindings();
const kbd = new KeyboardAsync(bindings);
while(true) { // Keeps printing until you kill the process
    const buffer = Buffer.from(await kbd.queryKeymap(), 0, 32);
    for(let j = 0; j < 32; j++) {
        for(let h = 0; h < 8; h++) {
            if(buffer[j] & (1 << h)) {
                const keycode = j * 8 + h;
                const keysym = kbd.keycodeToKeysym(keycode);
                console.log(kbd.keysymToString(keysym));
            }
        }
    }
}

Activate window

In the example below we look for windows with the name of Visual Studio Code. If any valid match is found, we focus it.

import { XdoToolAsync, XdoToolBindings } from 'xdotool';

// Activate Visual Studio Code window
function activateVisualStudioCodeWindow() {
    const xdo = new XdoToolAsync(new XdoToolBindings());
    const windows = await xdo.searchWindows({
        winclassname: 'Visual Studio Code'
    });
    for(const w of windows) {
        if(!(await xdo.windowHasProperty(w, '_NET_WM_DESKTOP'))) {
            continue;
        }
        await xdo.activateWindow(w);
        break;
    }
}

Screenshot

Our X11-based screenshooter is only capable of returning raw 8-bit RGB image format data at the moment but it is very fast and memory efficient. Getting a screenshot is super simple:

import { ScreenshooterAsync, XdoToolBindings } from 'xdotool';
import { promises as fs } from 'fs';

async function screenshot() {
    const xdo = new XdoToolBindings();
    const screenshooter = new ScreenshooterAsync(xdo);
    const arrayBuffer = await screenshooter.getImage();
    fs.writeFile(`${__dirname}/screenshot_${new Date()}.rgb`, Buffer.from(arrayBuffer));
}

For obvious reasons, the ArrayBuffer returned by screenshooter.getImage is reused on every call. So, unless you create a new instance of screenshooter, if you try to keep the reference, it'll be changed if you're calling this method elsewhere at the same time.

Requirements

  • Boost
  • CMake
  • libx11
  • xdotool
1.0.55

2 years ago

1.0.54

2 years ago

1.0.52

3 years ago

1.0.44

3 years ago

1.0.43

3 years ago

1.0.42

3 years ago

1.0.41

3 years ago

1.0.48

3 years ago

1.0.47

3 years ago

1.0.46

3 years ago

1.0.45

3 years ago

1.0.49

3 years ago

1.0.51

3 years ago

1.0.50

3 years ago

1.0.39

3 years ago

1.0.38

3 years ago

1.0.40

3 years ago

1.0.33

3 years ago

1.0.32

3 years ago

1.0.37

3 years ago

1.0.36

3 years ago

1.0.35

3 years ago

1.0.34

3 years ago

1.0.31

3 years ago

1.0.30

3 years ago

1.0.29

3 years ago

1.0.28

3 years ago

1.0.27

4 years ago

1.0.26

4 years ago

1.0.25

4 years ago

1.0.24

4 years ago

1.0.23

4 years ago

1.0.22

4 years ago

1.0.21

4 years ago

1.0.20

4 years ago

1.0.9

4 years ago

1.0.8

4 years ago

1.0.71

4 years ago

1.0.10

4 years ago

1.0.7

4 years ago

1.0.6

4 years ago

1.0.5

4 years ago

1.0.4

4 years ago

1.0.3

4 years ago

1.0.2

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago