mirror of
https://github.com/vincentbernat/i3wm-configuration.git
synced 2025-06-29 21:04:21 +02:00
i3-companion: use bindings to communicate with companion
This avoids spawning an i3-msg process. The drawback is that we have to listen to all keybindings.
This commit is contained in:
parent
956bfa4965
commit
5239148319
2 changed files with 25 additions and 17 deletions
|
@ -111,7 +111,7 @@ async def _new_workspace(i3):
|
||||||
async def new_workspace(i3, event):
|
async def new_workspace(i3, event):
|
||||||
"""Create a new workspace and optionally move a window to it."""
|
"""Create a new workspace and optionally move a window to it."""
|
||||||
# Get the currently focused window
|
# Get the currently focused window
|
||||||
if event.payload == "move-to-new-workspace":
|
if event == "move-to-new-workspace":
|
||||||
tree = await i3.get_tree()
|
tree = await i3.get_tree()
|
||||||
current = tree.find_focused()
|
current = tree.find_focused()
|
||||||
if not current:
|
if not current:
|
||||||
|
@ -120,7 +120,7 @@ async def new_workspace(i3, event):
|
||||||
num = await _new_workspace(i3)
|
num = await _new_workspace(i3)
|
||||||
|
|
||||||
# Move the window to this workspace
|
# Move the window to this workspace
|
||||||
if event.payload == "move-to-new-workspace":
|
if event == "move-to-new-workspace":
|
||||||
await current.command(f'move container to workspace '
|
await current.command(f'move container to workspace '
|
||||||
f'number "{num}"')
|
f'number "{num}"')
|
||||||
|
|
||||||
|
@ -182,10 +182,10 @@ async def worksplace_exclusive(i3, event):
|
||||||
async def quake_console(i3, event):
|
async def quake_console(i3, event):
|
||||||
"""Spawn a quake console or toggle an existing one."""
|
"""Spawn a quake console or toggle an existing one."""
|
||||||
try:
|
try:
|
||||||
_, term_exec, term_name, height = event.payload.split(":")
|
_, term_exec, term_name, height = event.split(":")
|
||||||
height = float(height)
|
height = float(height)
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
logger.warn(f"unable to parse payload {event.payload}: {exc}")
|
logger.warn(f"unable to parse payload {event}: {exc}")
|
||||||
return
|
return
|
||||||
|
|
||||||
tree = await i3.get_tree()
|
tree = await i3.get_tree()
|
||||||
|
@ -295,17 +295,25 @@ async def main(options):
|
||||||
if isinstance(event, Event):
|
if isinstance(event, Event):
|
||||||
i3.on(event, fn)
|
i3.on(event, fn)
|
||||||
|
|
||||||
# Ticks
|
# React to some bindings
|
||||||
async def tick_event(i3, event):
|
async def binding_event(i3, event):
|
||||||
"""Process a TICK event."""
|
"""Process a binding event."""
|
||||||
if type(event.payload) is not str:
|
# We only processes it when it is a nop command and we use
|
||||||
|
# this mechanism as an IPC mechanism. The alternative would be
|
||||||
|
# to use ticks but we would need to spawn an i3-msg process
|
||||||
|
# for that.
|
||||||
|
cmd = event.binding.command
|
||||||
|
if not cmd.startswith("nop "):
|
||||||
return
|
return
|
||||||
kind = event.payload.split(":")[0]
|
cmd = cmd[4:].strip('"\'')
|
||||||
|
if not cmd:
|
||||||
|
return
|
||||||
|
kind = cmd.split(":")[0]
|
||||||
for fn, events in on.functions.items():
|
for fn, events in on.functions.items():
|
||||||
for e in events:
|
for e in events:
|
||||||
if e == kind:
|
if e == kind:
|
||||||
await fn(i3, event)
|
await fn(i3, cmd)
|
||||||
i3.on(Event.TICK, tick_event)
|
i3.on(Event.BINDING, binding_event)
|
||||||
|
|
||||||
await i3.main()
|
await i3.main()
|
||||||
|
|
||||||
|
|
12
config
12
config
|
@ -123,7 +123,7 @@ bindsym $mod+9 workspace number $ws9
|
||||||
bindsym $mod+0 workspace number $ws10
|
bindsym $mod+0 workspace number $ws10
|
||||||
bindsym $mod+Tab workspace back_and_forth
|
bindsym $mod+Tab workspace back_and_forth
|
||||||
bindsym $mod+Ctrl+o focus output right
|
bindsym $mod+Ctrl+o focus output right
|
||||||
bindsym $mod+n exec --no-startup-id i3-msg -t send_tick "new-workspace"
|
bindsym $mod+n nop "new-workspace"
|
||||||
focus_wrapping workspace
|
focus_wrapping workspace
|
||||||
|
|
||||||
# move focused container to workspace
|
# move focused container to workspace
|
||||||
|
@ -138,7 +138,7 @@ bindsym $mod+Shift+8 move container to workspace number $ws8
|
||||||
bindsym $mod+Shift+9 move container to workspace number $ws9
|
bindsym $mod+Shift+9 move container to workspace number $ws9
|
||||||
bindsym $mod+Shift+0 move container to workspace number $ws10
|
bindsym $mod+Shift+0 move container to workspace number $ws10
|
||||||
bindsym $mod+Shift+o move workspace to output right
|
bindsym $mod+Shift+o move workspace to output right
|
||||||
bindsym $mod+Shift+n exec --no-startup-id i3-msg -t send_tick "move-to-new-workspace"
|
bindsym $mod+Shift+n nop "move-to-new-workspace"
|
||||||
|
|
||||||
# reload/restart
|
# reload/restart
|
||||||
bindsym $mod+Shift+c reload
|
bindsym $mod+Shift+c reload
|
||||||
|
@ -150,12 +150,12 @@ bindsym $mod+Delete exec --no-startup-id xset s activate
|
||||||
bindsym Print exec --no-startup-id "flameshot gui -r | xclip -selection clipboard -t image/png"
|
bindsym Print exec --no-startup-id "flameshot gui -r | xclip -selection clipboard -t image/png"
|
||||||
|
|
||||||
# Quake window
|
# Quake window
|
||||||
set $quake "QuakeConsoleNeedsUniqueName"
|
set $quake QuakeConsoleNeedsUniqueName
|
||||||
for_window [instance=$quake title=$term] move window to scratchpad
|
for_window [instance="$quake" title=$term] move window to scratchpad
|
||||||
bindsym $mod+grave exec --no-startup-id i3-msg -t send_tick "quake-console:$term:$quake:0.3"
|
bindsym $mod+grave nop "quake-console:$term:$quake:0.3"
|
||||||
|
|
||||||
# Get info about an app (like xprop)
|
# Get info about an app (like xprop)
|
||||||
bindsym $mod+i exec --no-startup-id i3-msg -t send_tick "info"
|
bindsym $mod+i nop "info"
|
||||||
|
|
||||||
# Random rules
|
# Random rules
|
||||||
no_focus [window_type="splash"]
|
no_focus [window_type="splash"]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue