Skip to main content

i3ipc-python

An improved Python library to control i3wm and sway.

About

i3’s interprocess communication (or ipc) is the interface i3wm uses to receive commands from client applications such as i3-msg. It also features a publish/subscribe mechanism for notifying interested parties of window manager events.

i3ipc-python is a Python library for controlling the window manager. This project is intended to be useful for general scripting, and for applications that interact with the window manager like status line generators, notification daemons, and window pagers.

If you have an idea for a script to extend i3wm, you can add your script to the examples folder.

For details on how to use the library, see the reference documentation.

Installation

i3ipc is on PyPI.

pip3 install i3ipc

Example

from i3ipc import Connection, Event

# Create the Connection object that can be used to send commands and subscribe
# to events.
i3 = Connection()

# Print the name of the focused window
focused = i3.get_tree().find_focused()
print('Focused window %s is on workspace %s' %
      (focused.name, focused.workspace().name))

# Query the ipc for outputs. The result is a list that represents the parsed
# reply of a command like `i3-msg -t get_outputs`.
outputs = i3.get_outputs()

print('Active outputs:')

for output in filter(lambda o: o.active, outputs):
    print(output.name)

# Send a command to be executed synchronously.
i3.command('focus left')

# Take all fullscreen windows out of fullscreen
for container in i3.get_tree().find_fullscreen():
    container.command('fullscreen')

# Print the names of all the containers in the tree
root = i3.get_tree()
print(root.name)
for con in root:
    print(con.name)

# Define a callback to be called when you switch workspaces.
def on_workspace_focus(self, e):
    # The first parameter is the connection to the ipc and the second is an object
    # with the data of the event sent from i3.
    if e.current:
        print('Windows on this workspace:')
        for w in e.current.leaves():
            print(w.name)

# Dynamically name your workspaces after the current window class
def on_window_focus(i3, e):
    focused = i3.get_tree().find_focused()
    ws_name = "%s:%s" % (focused.workspace().num, focused.window_class)
    i3.command('rename workspace to "%s"' % ws_name)

# Subscribe to events
i3.on(Event.WORKSPACE_FOCUS, on_workspace_focus)
i3.on(Event.WINDOW_FOCUS, on_window_focus)

# Start the main loop and wait for events to come in.
i3.main()

Asyncio Support

Support for asyncio is included in the i3ipc.aio package. The interface is similar to the blocking interface but the methods that interact with the socket are coroutines.

from i3ipc.aio import Connection
from i3ipc import Event

import asyncio

async def main():
    def on_window(self, e):
        print(e)

    c = await Connection(auto_reconnect=True).connect()

    workspaces = await c.get_workspaces()

    c.on(Event.WINDOW, on_window)

    await c.main()

asyncio.get_event_loop().run_until_complete(main())

Contributing

Development happens on Github. Please feel free to report bugs, request features or add examples by submitting a pull request.

License

This work is available under a BSD-3-Clause license (see LICENSE).

Copyright © 2015, Tony Crisci

All rights reserved.

Metadata

Release files for i3ipc 2.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for i3ipc 2.2.1
File Size Uploaded Provenance
i3ipc-2.2.1.tar.gz 47.8 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for i3ipc 2.2.1
File Interpreter ABI Platform
i3ipc-2.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 74.4 kB

Release files / i3ipc-2.2.1.tar.gz

Download URL i3ipc-2.2.1.tar.gz
Size 47.8 kB
Tags Source
SHA-256 checksum
How to use checksums
e880d7d7147959ead5cb34764f08b97b41385b36eb8256e8af1ce163dbcccce8
BLAKE2b-256 checksum
How to use checksums
61f3dfab70c888d85d3e933ff4d6b351aaed0ae137a29c896e03e364de3bec94
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.12.2 pkginfo/1.4.2 requests/2.22.0 setuptools/41.6.0 requests-toolbelt/0.9.1 tqdm/4.37.0 CPython/3.7.6

Release files / i3ipc-2.2.1-py3-none-any.whl

Download URL i3ipc-2.2.1-py3-none-any.whl
Size 26.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c0b898223d50d42c90c818deb5033d1304c582755547dee7d15df3e3781bc690
BLAKE2b-256 checksum
How to use checksums
de30294b07ddeccb58855c890c3ef3a951c3b0c1e2d089666d548b6a9edc39fb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.12.2 pkginfo/1.4.2 requests/2.22.0 setuptools/41.6.0 requests-toolbelt/0.9.1 tqdm/4.37.0 CPython/3.7.6

Security for i3ipc 2.2.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page