Remove jq dependency from sway_tree script

This commit is contained in:
Akemi Izuko 2023-12-23 20:13:57 -07:00
parent 38915b0a0a
commit 08ecfff92d
Signed by: akemi
GPG key ID: 8DE0764E1809E9FC
3 changed files with 43 additions and 23 deletions

View file

@ -23,42 +23,35 @@
// └───> [Alacritty] // └───> [Alacritty]
use std::io::{self, BufRead, BufReader}; use std::io::{self, BufRead, BufReader};
use std::process::{Command, Stdio, ChildStdout}; use std::process::{Command, Stdio};
use std::cmp::min;
fn main() { fn main() {
let sway_tree = match get_tree() { let sway_tree = get_tree().expect("Failed to get sway tree");
Ok(tree) => BufReader::new(tree).lines().map(|l| l.unwrap()),
Err(e) => panic!("Failed to get sway tree: {}", e),
};
for (i, line) in sway_tree.enumerate() { for (i, line) in sway_tree.iter().enumerate() {
println!("Workspace {} :: {}", i+1, line); println!("Workspace {} :: {}", i+1, line);
println!("{}", ParserTree::from(&line).format()); println!("{}", ParserTree::from(line).format());
} }
} }
fn get_tree() -> io::Result<ChildStdout> { fn get_tree() -> io::Result<Vec<String>> {
let swaymsg = Command::new("swaymsg") let swaymsg = Command::new("swaymsg")
.arg("-t") .arg("-t")
.arg("get_tree") .arg("get_tree")
.stdout(Stdio::piped()) .stdout(Stdio::piped())
.spawn()?; .spawn()?;
let jq = Command::new("jq") let swaymsg_out = swaymsg.stdout.expect("Swaymsg didn't return window tree");
.arg(".nodes[1].nodes[].representation")
.stdin(swaymsg.stdout.unwrap())
.stdout(Stdio::piped())
.spawn()
.expect("`jq` binary is not available");
let tr = Command::new("tr") let repr: Vec<String> = BufReader::new(swaymsg_out)
.arg("-d") .lines()
.arg("\"") .map(|l| l.unwrap().trim().to_string())
.stdin(jq.stdout.unwrap()) .filter(|l| &l[..min(16, l.len())] == "\"representation\"")
.stdout(Stdio::piped()) .map(|l| l[19..l.len()-1].to_string())
.spawn()?; .collect();
Ok(tr.stdout.unwrap()) Ok(repr)
} }

View file

@ -13,14 +13,21 @@ Some key terms:
The opens an ssh tunnel without obstructing the current terminal: The opens an ssh tunnel without obstructing the current terminal:
```bash ```bash
ssh -p10011 -NL 7000:localhost:8080 emiliko@localhost & ssh -NL 8001:localhost:7000 emiliko@cs.ox.ac.uk &
ssh -NL <client-port>:<url-from-host>:<host-port> <user>@<host-address> & ssh -NL <client-port>:<url-from-host>:<host-port> <user>@<host-address> &
``` ```
# In config file # In config file
The syntax in the config is quite similar The syntax in the `~/.ssh/config` is quite similar
```ssh ```ssh
Host mirrorside
User emiliko
Hostname cs.ox.ac.uk
LocalForward 8001 localhost:7000 LocalForward 8001 localhost:7000
```
The general format looks like
```ssh
LocalForward <client-port> <host-address>:<host-port> LocalForward <client-port> <host-address>:<host-port>
``` ```

View file

@ -36,6 +36,7 @@ configs_pointer_is_setup() {
swayland_checks() { swayland_checks() {
check_sway_wallpaper check_sway_wallpaper
check_swaylock_wallpaper check_swaylock_wallpaper
check_swaytree_compilation
} }
check_sway_wallpaper() { check_sway_wallpaper() {
@ -71,6 +72,25 @@ check_swaylock_wallpaper() {
return $return_code return $return_code
} }
check_swaytree_compilation() {
local src=~/.configs_pointer/bin/sway_tree.rs
local exe="${src%.*}"
if [[ -x "$exe" ]]; then
return 0
elif command -v rustc &>/dev/null; then
rustc -C opt-level=3 "$src" -o "$exe"
fi
if ! [[ -x "$exe" ]]; then
printf "ERR: Uncompiled sway_tree.rs script\n"
printf "\tInstall a rust compiler and rerun this script\n"
return 1
fi
return 0
}
#################### ####################
# Tmux # Tmux
#################### ####################