Compare commits

..

No commits in common. "master" and "1.1" have entirely different histories.
master ... 1.1

3 changed files with 25 additions and 26 deletions

View file

@ -631,8 +631,8 @@ to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
Firefox-Nightly-Auto-Place-Windows-by-Workspace
Copyright (C) 2023 Sayantan Santra
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -652,7 +652,7 @@ Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
Firefox-Nightly-Auto-Place-Windows-by-Workspace Copyright (C) 2023 Sayantan Santra
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.

39
FirefoxAutoPlaceWindows → NightlyAutoPlaceWindows Normal file → Executable file
View file

@ -1,22 +1,22 @@
#!/bin/sh
#!/bin/bash
set -e
# Function to place Firefox windows by desktops after restore session.
# Firefox has long BUG https://bugzilla.mozilla.org/show_bug.cgi?id=372650#c54 (created 2007-03-05!) which make hassle of windows!
# Function to place Nightly windows by desktops after restore session.
# Nightly has long BUG https://bugzilla.mozilla.org/show_bug.cgi?id=372650#c54 (created 2007-03-05!) which make hassle of windows!
# I use at least 11 windows and it is very hard to place them on correct desktop each time. So I write that workaround.
#
# Partially idea borrowed from attempt https://github.com/zepalmer/script-vdr/blob/master/vdr, but I choose different approach:
# instead of periodically save window titles into file (which is very unstable because of many tabs in each) I just label each window with custom label
# by default match with desktop label (name).
#
# For set Firefox windows custom titles used extension (OpenSource): https://addons.mozilla.org/en-GB/Firefox/addon/window-titler/
# For set Nightly windows custom titles used extension (OpenSource): https://addons.mozilla.org/en-GB/Nightly/addon/window-titler/
#
# Now match is very simple - just one grep, but you may use regular expression or special symbols...
#
# Example:
# I have few desktops with names: Egais, DevOps, Home
# For Firefox windows I set tiltles accordingly (with extension) like "Home", then window title become: "[Home] Google - Mozilla Firefox"
# For Nightly windows I set tiltles accordingly (with extension) like "Home", then window title become: "[Home] Google - Mozilla Nightly"
# And it give me abbility understand on which desktop it should be placed.
# So I just call this function like:
# placeWindowOnDesktop Home
@ -25,7 +25,7 @@ set -e
# You may provide second argument to match desktop name if it is not same to match as for window, like:
# placeWindowOnDesktop Home 'Second desktop'
#
# For more clever and automatic way distribute all windows {@see matchAllFirefoxWindowsByDesktops} function
# For more clever and automatic way distribute all windows {@see matchAllNightlyWindowsByDesktops} function
#
# $1 - window sub-sting name. wmctrl by default find only first matching window, but we will place all, if more then one matched!
# $2 - (optional) desktop sub-sting name. It is is not present - $1 used
@ -39,7 +39,7 @@ function placeWindowOnDesktop(){
window=( $window )
echo -e "Place window ⟪\E[010;92m${window[@]:1}(id=${window[0]})\E[0m⟫ to desktop ⟪\E[010;93m${_desk[@]:1}(id=${_desk[0]})\E[0m⟫"
wmctrl -i -r ${window[0]} -t ${_desk[0]}
done < <( wmctrl -l | grep -F "${1}" | awk '{$2=""; $3=""}1' )
done < <( wmctrl -l | fgrep "${1}" | awk '{$2=""; $3=""}1' )
}
# $1 - desktop sub-sting name
@ -57,26 +57,19 @@ function deskName(){
#placeWindowOnDesktop RDC
#placeWindowOnDesktop ЦИК
# Magic function to distribute all Firefox windows by its desktops automatically!
# This is consider only Firefox windows, and get desktop tag-name from [] square brackets.
# Magic function to distribute all Nightly windows by its desktops automatically!
# This is consider only Nightly windows, and get desktop tag-name from [] square brackets.
# F.e. for windows:
# $ wmctrl -lx | grep -F 'Navigator.Firefox'
# 0x03a000c5 3 Navigator.Firefox 2.hubbitus.taskdata [Home] bash - Extract string from brackets - Stack Overflow - Mozilla Firefox
# 0x03a000ad 5 Navigator.Firefox 2.hubbitus.taskdata [RDC] rdc-iac-ansible/cleaning-snapshots.sh at ebf2122335387a66cb043f0480d8f38e6a087d39 · RegDC/rdc-iac-ansible - Mozilla Firefox
# 0x03a00089 5 Navigator.Firefox 2.hubbitus.taskdata [RDC] How to slice an array in Bash - Stack Overflow - Mozilla Firefox
# 0x03a000b9 0 Navigator.Firefox 2.hubbitus.taskdata [Egais] Firefox desktop placement issue - Mozilla Firefox
# $ wmctrl -lx | fgrep 'Navigator.Nightly'
# 0x03a000c5 3 Navigator.Nightly 2.hubbitus.taskdata [Home] bash - Extract string from brackets - Stack Overflow - Mozilla Nightly
# 0x03a000ad 5 Navigator.Nightly 2.hubbitus.taskdata [RDC] rdc-iac-ansible/cleaning-snapshots.sh at ebf2122335387a66cb043f0480d8f38e6a087d39 · RegDC/rdc-iac-ansible - Mozilla Nightly
# 0x03a00089 5 Navigator.Nightly 2.hubbitus.taskdata [RDC] How to slice an array in Bash - Stack Overflow - Mozilla Nightly
# 0x03a000b9 0 Navigator.Nightly 2.hubbitus.taskdata [Egais] Nightly desktop placement issue - Mozilla Nightly
# Home, RDC and Egais will be searched in desktop names for place windows on it accordingly!
function matchAllFirefoxWindowsByDesktops(){
for word in $( wmctrl -lx | grep -F 'Navigator.firefox' | awk -F"[][]" '{print $2}' | sort -u ); do
placeWindowOnDesktop "[$word]" "$word"
done
}
function matchAllNightlyWindowsByDesktops(){
for word in $( wmctrl -lx | grep -F 'Navigator.Nightly' | awk -F"[][]" '{print $2}' | sort -u ); do
for word in $( wmctrl -lx | fgrep 'Navigator.Nightly' | awk -F"[][]" '{print $2}' | sort -u ); do
placeWindowOnDesktop "[$word]" "$word"
done
}
matchAllFirefoxWindowsByDesktops
matchAllNightlyWindowsByDesktops
matchAllNightlyWindowsByDesktops

View file

@ -15,3 +15,9 @@ git clone https://github.com/SinTan1729/Firefox-Nightly-Auto-Place-Windows-by-Wo
cd "Firefox-Nightly-Auto-Place-Windows-by-Workspace"
NightlyAutoPlaceWindow
```
### _You might buy me a cup of coffee:_
**UPI (preferred) : sintan@ybl**
**PayPal : sayantan.santra689@gmail.com**