Compare commits
No commits in common. "1cb9672b4861dbc0085f19aa7f0bc1c9a74cf6f3" and "5189ba323b90df198563c306fe39c79a8a0e1509" have entirely different histories.
1cb9672b48
...
5189ba323b
2 changed files with 2 additions and 130 deletions
128
README.md
128
README.md
|
@ -1,128 +0,0 @@
|
||||||
# i3toolwait
|
|
||||||
|
|
||||||
Launch a program and move it to the correct workspace.
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
`i3toolwait -c FILE`
|
|
||||||
|
|
||||||
Optionally start multiple programs and wait for their windows to appear.
|
|
||||||
Once these windows appeared a custom i3 command can be specified.
|
|
||||||
|
|
||||||
## Example
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
---
|
|
||||||
timeout: 10000
|
|
||||||
init: |
|
|
||||||
(begin
|
|
||||||
(define i3_path ".container.window_properties.class")
|
|
||||||
(define sway_path ".container.app_id")
|
|
||||||
(defun idmatch (name) (== (if (has-key sway_path) (load sway_path) (load i3_path)) name))
|
|
||||||
(defun match (name) (and (== (load ".change") "new") (idmatch name)))
|
|
||||||
(defun match-load (name) (if (match name) (load ".container.id") F))
|
|
||||||
)
|
|
||||||
cmd: 'workspace 1'
|
|
||||||
programs:
|
|
||||||
- run: 'exec gtk-launch librewolf'
|
|
||||||
cmd: 'for_window [con_id="{result}"] focus; move container to workspace 1'
|
|
||||||
match: '(match-load "LibreWolf")'
|
|
||||||
- run: 'exec gtk-launch nheko || gtk-launch io.element.Element'
|
|
||||||
cmd: 'for_window [con_id="{result}"] focus; move container to workspace 2'
|
|
||||||
match: '(if (or (match "Electron") (match "nheko")) (load ".container.id") F)'
|
|
||||||
- run: 'exec gtk-launch thunderbird'
|
|
||||||
cmd: 'for_window [con_id="{result}"] focus; move container to workspace 3'
|
|
||||||
match: '(match-load "thunderbird")'
|
|
||||||
- run: 'exec nm-applet --indicator'
|
|
||||||
- run: 'exec blueman-applet'
|
|
||||||
- run: 'exec gtk-launch org.kde.kdeconnect.nonplasma'
|
|
||||||
- run: 'exec gtk-launch syncthing-gtk'
|
|
||||||
```
|
|
||||||
|
|
||||||
## Configuration
|
|
||||||
|
|
||||||
The configuration file is in YAML format.
|
|
||||||
|
|
||||||
|
|
||||||
### Configuration
|
|
||||||
|
|
||||||
#### timeout: int
|
|
||||||
|
|
||||||
_Optional_ _Default_ `3000`
|
|
||||||
|
|
||||||
Total program timeout in ms.
|
|
||||||
|
|
||||||
#### init: String
|
|
||||||
|
|
||||||
_Optional_ _Default_ `""`
|
|
||||||
|
|
||||||
Initialization program; Used to initialize the environment, useful
|
|
||||||
to define custom functions which should be available everywhere.
|
|
||||||
|
|
||||||
#### cmd: String
|
|
||||||
|
|
||||||
_Optional_ _Default_ `""`
|
|
||||||
|
|
||||||
A final i3 command to be executed before exiting.
|
|
||||||
|
|
||||||
#### programs: List[Union[[Program](#program), [Signal](#signal)]]
|
|
||||||
|
|
||||||
_Optional_ _Default_ `[]`
|
|
||||||
|
|
||||||
A list of programs to execute.
|
|
||||||
|
|
||||||
### Program
|
|
||||||
|
|
||||||
Launch all programs using [`run`](#run-string) and execute
|
|
||||||
[`cmd`](#cmd-string-1) once [`match`](#match-string) matches
|
|
||||||
a window.
|
|
||||||
|
|
||||||
#### match: String
|
|
||||||
|
|
||||||
_Required_
|
|
||||||
|
|
||||||
A lisp program which analyzes the i3 window event and returns a value.
|
|
||||||
If the return value is `false` the window does not match and no
|
|
||||||
further processing occurs. Otherwise the i3 command
|
|
||||||
[`cmd`](#cmd-string-1).
|
|
||||||
will be executed.
|
|
||||||
|
|
||||||
#### cmd: String
|
|
||||||
|
|
||||||
_Required_
|
|
||||||
|
|
||||||
A i3 command. Can contain a format `{result}` which gets replaced
|
|
||||||
by the output of the match command.
|
|
||||||
|
|
||||||
**Example:**
|
|
||||||
|
|
||||||
`for_window [con_id="{result}"] focus; move container to window 1`
|
|
||||||
|
|
||||||
#### run: String
|
|
||||||
|
|
||||||
_Optional_ _Default_ `null`
|
|
||||||
|
|
||||||
A i3 command which is run at program startup, can be used to launch
|
|
||||||
programs.
|
|
||||||
|
|
||||||
**Example:**
|
|
||||||
|
|
||||||
`exec gtk-launch firefox`
|
|
||||||
|
|
||||||
### Signal
|
|
||||||
|
|
||||||
Programs are launched in order and only advance after
|
|
||||||
[`timeout`](#timeout-int-1) or after receiving signal
|
|
||||||
`SIGUSR1`.
|
|
||||||
|
|
||||||
#### run: String
|
|
||||||
|
|
||||||
_Optional_ _Default_ `null`
|
|
||||||
|
|
||||||
A i3 command.
|
|
||||||
|
|
||||||
#### timeout: int
|
|
||||||
|
|
||||||
_Optional_ _Default_ `500`
|
|
||||||
|
|
||||||
How long to wait for the signal in ms.
|
|
|
@ -84,10 +84,10 @@ pub struct Config {
|
||||||
pub timeout: u64,
|
pub timeout: u64,
|
||||||
#[serde(default = "Config::default_init")]
|
#[serde(default = "Config::default_init")]
|
||||||
pub init: Value,
|
pub init: Value,
|
||||||
#[serde(default)]
|
|
||||||
pub cmd: Option<String>,
|
|
||||||
#[serde(default = "Config::default_programs")]
|
#[serde(default = "Config::default_programs")]
|
||||||
pub programs: Vec<ProgramEntry>,
|
pub programs: Vec<ProgramEntry>,
|
||||||
|
#[serde(default)]
|
||||||
|
pub cmd: Option<String>,
|
||||||
}
|
}
|
||||||
// Config is only unsafe because Value has dyn Any in it (via Foreign).
|
// Config is only unsafe because Value has dyn Any in it (via Foreign).
|
||||||
// if we don't use !Send in Foreign everything is fine.
|
// if we don't use !Send in Foreign everything is fine.
|
||||||
|
|
Loading…
Reference in a new issue