New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
consistent way of managing apps that don't follow normal window behavior #105
Comments
I'm a little bit torn on whether to incorporate this config into GlazeWM - it feels a little weird IMO to pull in the config from another WM. A few of the properties in the config I'm not 100% sure what they do. Would you happen to know what these ones do: Something I'm noticing though is a lot of these rules are actually redundant because GlazeWM makes some assumptions that Komorebi does not. From taking a look at the config, these differences seem to be:
There's of course cases that this doesn't cover, but it means there's way less overlap with the Komorebi config. |
I'm not sure what Even though some of these are not used by GlazeWM, its still a very general list of what applications and application windows, so maybe just use the |
Hi guys 👋
In the example of GlazeWM, since it already handles a lot of stuff as @lars-berger described above, you could just parse the YAML file and discard things that are already handled while just generating configuration output for things that are needed. Anyone can write and maintain a configuration generator for any twm using that big old YAML file as an input. 🎉 |
Here's a very basic dotnet script which downloads and converts the yml to the yml format glazewm uses for all the floating rules: #r "nuget: YamlDotNet, 12.0.0"
using System;
using System.Linq;
using System.Net.Http;
using YamlDotNet.Serialization;
var response = await new HttpClient().GetAsync("https://raw.githubusercontent.com/LGUG2Z/komorebi-application-specific-configuration/master/applications.yaml");
var responseString = await response.Content.ReadAsStringAsync();
var entities = new Deserializer().Deserialize<List<dynamic>>(new StringReader(responseString));
var outputs = new List<Dictionary<string, string>>();
foreach (var entity in entities.Where(e => e.ContainsKey("float_identifiers")))
{
foreach (var identifier in entity["float_identifiers"])
{
(var kind, var id) = (identifier["kind"], identifier["id"]);
(var outputType, var outputId) = kind switch {
"exe" => ("match_process_name", id.Split(".exe")[0]),
"class" => ("match_class_name", id),
"title" => ("match_title", id),
_ => throw new ArgumentException(kind)
};
var output = new Dictionary<string, string>();
output["command"] = "set floating";
output[outputType] = outputId;
outputs.Add(output);
}
}
Console.WriteLine(new Serializer().Serialize(outputs));
- command: set floating
match_process_name: 1Password
- command: set floating
match_title: Window Spy
- command: set floating
match_title: Calculator
- command: set floating
match_process_name: CredentialUIBroker
- command: set floating
match_class_name: Chrome_RenderWidgetHostHWND
- command: set floating
match_class_name: TApplication
- command: set floating
match_class_name: TWizardForm
- command: set floating
match_class_name: SunAwtDialog
- command: set floating
match_process_name: LogiBolt
- command: set floating
match_process_name: LogiTune
- command: set floating
match_process_name: LogiOptionsUI
- command: set floating
match_class_name: _WwB
- command: set floating
match_class_name: _WwB
- command: set floating
match_class_name: _WwB
- command: set floating
match_title: Microsoft Teams Notifications
- command: set floating
match_class_name: _WwB
- command: set floating
match_class_name: MozillaTaskbarPreviewClass
- command: set floating
match_process_name: NohBoard
- command: set floating
match_process_name: Paradox Launcher
- command: set floating
match_process_name: PowerToys.ColorPickerUI
- command: set floating
match_process_name: PowerToys.ImageResizer
- command: set floating
match_process_name: ProcessHacker
- command: set floating
match_class_name: SunAwtDialog
- command: set floating
match_process_name: QuickLook
- command: set floating
match_process_name: RepoZ
- command: set floating
match_process_name: RoundedTB
- command: set floating
match_class_name: Chrome_RenderWidgetHostHWND
- command: set floating
match_class_name: Chrome_RenderWidgetHostHWND
- command: set floating
match_class_name: Shell_Dialog
- command: set floating
match_class_name: TaskManagerWindow
- command: set floating
match_process_name: tcconfig
- command: set floating
match_process_name: TranslucentTB
- command: set floating
match_class_name: OperationStatusWindow
- command: set floating
match_title: Control Panel
- command: set floating
match_class_name: MsiDialogCloseClass
- command: set floating
match_title: Hotkey sink
- command: set floating
match_process_name: Zoom
- command: set floating
match_process_name: ueli |
Could it be possible to integrate https://github.com/LGUG2Z/komorebi-application-specific-configuration into GlazeWM? This way, we can have a guaranteed and easy way to make sure all the apps are treated properly and function correctly.
Mainly, the problem is with apps not respecting the window dimensions correctly.
Related issues:
#73
#33
#62
The text was updated successfully, but these errors were encountered: