pkgs: add i3-get-window-criteria
This commit is contained in:
parent
a7839c63e0
commit
2d21945670
|
@ -4,6 +4,8 @@ rec {
|
||||||
|
|
||||||
havm = pkgs.callPackage ./havm { };
|
havm = pkgs.callPackage ./havm { };
|
||||||
|
|
||||||
|
i3-get-window-criteria = pkgs.callPackage ./i3-get-window-criteria { };
|
||||||
|
|
||||||
lohr = pkgs.callPackage ./lohr { };
|
lohr = pkgs.callPackage ./lohr { };
|
||||||
|
|
||||||
nolimips = pkgs.callPackage ./nolimips { };
|
nolimips = pkgs.callPackage ./nolimips { };
|
||||||
|
|
43
pkgs/i3-get-window-criteria/default.nix
Normal file
43
pkgs/i3-get-window-criteria/default.nix
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
{ coreutils, gnused, makeWrapper, lib, shellcheck, stdenvNoCC, xorg }:
|
||||||
|
stdenvNoCC.mkDerivation rec {
|
||||||
|
pname = "i3-get-window-criteria";
|
||||||
|
version = "0.1.0";
|
||||||
|
|
||||||
|
src = ./i3-get-window-criteria;
|
||||||
|
|
||||||
|
phases = [ "buildPhase" "installPhase" "fixupPhase" ];
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
makeWrapper
|
||||||
|
shellcheck
|
||||||
|
];
|
||||||
|
|
||||||
|
buildPhase = ''
|
||||||
|
shellcheck $src
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out/bin
|
||||||
|
cp $src $out/bin/${pname}
|
||||||
|
chmod a+x $out/bin/${pname}
|
||||||
|
'';
|
||||||
|
|
||||||
|
wrapperPath = lib.makeBinPath [
|
||||||
|
coreutils
|
||||||
|
gnused
|
||||||
|
xorg.xprop
|
||||||
|
xorg.xwininfo
|
||||||
|
];
|
||||||
|
|
||||||
|
fixupPhase = ''
|
||||||
|
patchShebangs $out/bin/${pname}
|
||||||
|
wrapProgram $out/bin/${pname} --prefix PATH : "${wrapperPath}"
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
description = "Helper script to query i3 window criterions";
|
||||||
|
homepage = "https://gitea.belanyi.fr/ambroisie/nix-config";
|
||||||
|
license = with licenses; [ mit ];
|
||||||
|
platforms = platforms.unix;
|
||||||
|
};
|
||||||
|
}
|
30
pkgs/i3-get-window-criteria/i3-get-window-criteria
Executable file
30
pkgs/i3-get-window-criteria/i3-get-window-criteria
Executable file
|
@ -0,0 +1,30 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# i3-get-window-criteria - Get criteria for use with i3 config commands
|
||||||
|
|
||||||
|
# To use, run this script, then click on a window.
|
||||||
|
# Output is in the format: [<name>=<value> <name>=<value> ...]
|
||||||
|
|
||||||
|
# Known problem: when WM_NAME is used as fallback for the 'title="<string>"' criterion,
|
||||||
|
# quotes in "<string>" are not escaped properly. This is a problem with the output of `xprop`,
|
||||||
|
# reported upstream: https://bugs.freedesktop.org/show_bug.cgi?id=66807
|
||||||
|
|
||||||
|
match_int='[0-9][0-9]*'
|
||||||
|
match_string='".*"'
|
||||||
|
match_qstring='"[^"\\]*(\\.[^"\\]*)*"' # NOTE: Adds 1 backreference
|
||||||
|
|
||||||
|
{
|
||||||
|
# Run xwininfo, get window id
|
||||||
|
window_id=$(xwininfo -int | sed -nre "s/^xwininfo: Window id: ($match_int) .*$/\1/p")
|
||||||
|
echo "id=$window_id"
|
||||||
|
|
||||||
|
# Run xprop, transform its output into i3 criteria. Handle fallback to
|
||||||
|
# WM_NAME when _NET_WM_NAME isn't set
|
||||||
|
xprop -id "$window_id" |
|
||||||
|
sed -nr \
|
||||||
|
-e "s/^WM_CLASS\(STRING\) = ($match_qstring), ($match_qstring)$/instance=\1\nclass=\3/p" \
|
||||||
|
-e "s/^WM_WINDOW_ROLE\(STRING\) = ($match_qstring)$/window_role=\1/p" \
|
||||||
|
-e "/^WM_NAME\(STRING\) = ($match_string)$/ {s//title=\1/; h}" \
|
||||||
|
-e "/^_NET_WM_NAME\(UTF8_STRING\) = ($match_qstring)$/ {s//title=\1/; h}" \
|
||||||
|
-e '$ {g; p}'
|
||||||
|
} | sort | tr "\n" " " | sed -r 's/^(.*) $/[\1]\n/'
|
Loading…
Reference in a new issue