public static void Main(string[] args) { Logging.Configure(); Log.Information("Windows Terminal Quake started"); _trayIcon = new TrayIcon((s, a) => Close()); try { TerminalProcess.OnExit(() => Close()); _toggler = new Toggler(args); // Transparency QSettings.Get(s => TerminalProcess.Get(args).SetTransparency(s.Opacity)); var hotkeys = string.Join(" or ", QSettings.Instance.Hotkeys.Select(hk => $"{hk.Modifiers}+{hk.Key}")); _trayIcon.Notify(ToolTipIcon.Info, $"Windows Terminal Quake is running, press {hotkeys} to toggle."); } catch (Exception ex) { Log.Logger.Warning(ex, $"Error: {ex.Message}"); MessageBox.Show($"Error starting Windows Terminal Quake: {ex.Message}", "Ah nej :("); Close(); } }
public Toggler(string[] args) { _args = args ?? Array.Empty <string>(); // Always on top if (QSettings.Instance.AlwaysOnTop) { Process.SetAlwaysOnTop(); } // Taskbar icon visibility QSettings.Get(s => { Process.ToggleTaskbarIconVisibility(s.TaskbarIconVisibility != TaskBarIconVisibility.AlwaysHidden); }); // Used to keep track of the current toggle state. // The terminal is always assumed to be open on app start. var isOpen = true; // Register hotkeys QSettings.Get(s => { if (s.Hotkeys == null) { return; // Hotkeys not loaded yet } _registeredHotKeys.ForEach(hk => HotKeyManager.UnregisterHotKey(hk)); _registeredHotKeys.Clear(); s.Hotkeys.ForEach(hk => { Log.Information($"Registering hot key {hk.Modifiers} + {hk.Key}"); var reg = HotKeyManager.RegisterHotKey(hk.Key, hk.Modifiers); _registeredHotKeys.Add(reg); }); }); QSettings.Get(s => { _termBoundsProvider = s.ToggleMode switch { ToggleMode.Move => new MovingTerminalBoundsProvider(), _ => new ResizingTerminalBoundsProvider() }; }); // Hide on focus lost FocusTracker.OnFocusLost += (s, a) => { if (QSettings.Instance.HideOnFocusLost && isOpen) { isOpen = false; Toggle(false, 0); } }; // Toggle on hotkey(s) HotKeyManager.HotKeyPressed += (s, a) => { if (FocusTracker.HotKeySuppressedForCurrentFocusedProcess()) { return; } if (QSettings.Instance.DisableWhenActiveAppIsInFullscreen && ActiveWindowIsInFullscreen()) { return; } isOpen = !isOpen; Toggle(isOpen, QSettings.Instance.ToggleDurationMs); }; // Start hidden? if (QSettings.Instance.StartHidden) { Toggle(isOpen = false, 0); } // Otherwise, call toggle once to setup the correct size and position else { Toggle(isOpen = true, 0); } }