1
1
mirror of https://github.com/wez/wezterm.git synced 2024-11-27 02:25:28 +03:00

Add HideApplication and QuitApplication key assignments

```
[[keys]]
key = "q"
mods = "CMD"
action = "QuitApplication"
```

refs: https://github.com/wez/wezterm/issues/150
This commit is contained in:
Wez Furlong 2020-02-14 08:49:15 -08:00
parent da6783bbd0
commit 754f8166b5
6 changed files with 33 additions and 0 deletions

View File

@ -14,6 +14,11 @@ brief notes about them may accumulate here.
size of new terminal windows size of new terminal windows
* Added `hide_tab_bar_if_only_one_tab = true` config option to hide the tab * Added `hide_tab_bar_if_only_one_tab = true` config option to hide the tab
bar when the window contains only a single tab. bar when the window contains only a single tab.
* Added `HideApplication` key action (defaults to `CMD-H` on macOS only) which
hides the wezterm application. This is macOS specific.
* Added `QuitApplication` key action which causes the gui loop to terminate
and the application to exit. This is not bound by default, but you may
choose to assign it to something like `CMD-Q`.
### 20200202-181957-765184e5 ### 20200202-181957-765184e5

View File

@ -38,6 +38,8 @@ impl std::convert::TryInto<KeyAssignment> for &Key {
KeyAction::Copy => KeyAssignment::Copy, KeyAction::Copy => KeyAssignment::Copy,
KeyAction::Paste => KeyAssignment::Paste, KeyAction::Paste => KeyAssignment::Paste,
KeyAction::Hide => KeyAssignment::Hide, KeyAction::Hide => KeyAssignment::Hide,
KeyAction::HideApplication => KeyAssignment::HideApplication,
KeyAction::QuitApplication => KeyAssignment::QuitApplication,
KeyAction::Show => KeyAssignment::Show, KeyAction::Show => KeyAssignment::Show,
KeyAction::IncreaseFontSize => KeyAssignment::IncreaseFontSize, KeyAction::IncreaseFontSize => KeyAssignment::IncreaseFontSize,
KeyAction::DecreaseFontSize => KeyAssignment::DecreaseFontSize, KeyAction::DecreaseFontSize => KeyAssignment::DecreaseFontSize,
@ -103,6 +105,8 @@ pub enum KeyAction {
SendString, SendString,
Nop, Nop,
Hide, Hide,
HideApplication,
QuitApplication,
Show, Show,
CloseCurrentTab, CloseCurrentTab,
ReloadConfiguration, ReloadConfiguration,

View File

@ -1250,6 +1250,14 @@ impl TermWindow {
MoveTabRelative(n) => self.move_tab_relative(*n)?, MoveTabRelative(n) => self.move_tab_relative(*n)?,
ScrollByPage(n) => self.scroll_by_page(*n)?, ScrollByPage(n) => self.scroll_by_page(*n)?,
ShowTabNavigator => self.show_tab_navigator(), ShowTabNavigator => self.show_tab_navigator(),
HideApplication => {
let con = Connection::get().expect("call on gui thread");
con.hide_application();
}
QuitApplication => {
let con = Connection::get().expect("call on gui thread");
con.terminate_message_loop();
}
}; };
Ok(()) Ok(())
} }

View File

@ -39,6 +39,8 @@ pub enum KeyAssignment {
MoveTab(usize), MoveTab(usize),
ScrollByPage(isize), ScrollByPage(isize),
ShowTabNavigator, ShowTabNavigator,
HideApplication,
QuitApplication,
} }
pub struct KeyMap(HashMap<(KeyCode, KeyModifiers), KeyAssignment>); pub struct KeyMap(HashMap<(KeyCode, KeyModifiers), KeyAssignment>);
@ -150,6 +152,9 @@ impl KeyMap {
[KeyModifiers::ALT, KeyCode::Char('9'), ShowTabNavigator], [KeyModifiers::ALT, KeyCode::Char('9'), ShowTabNavigator],
); );
#[cfg(target_os = "macos")]
m!([KeyModifiers::SUPER, KeyCode::Char('h'), HideApplication],);
Self(map) Self(map)
} }

View File

@ -28,6 +28,11 @@ pub trait ConnectionOps {
fn terminate_message_loop(&self); fn terminate_message_loop(&self);
fn run_message_loop(&self) -> Fallible<()>; fn run_message_loop(&self) -> Fallible<()>;
/// Hide the application.
/// This actions hides all of the windows of the application and switches
/// focus away from it.
fn hide_application(&self) {}
// TODO: return a handle that can be used to cancel the timer // TODO: return a handle that can be used to cancel the timer
fn schedule_timer<F: FnMut() + 'static>(&self, interval: std::time::Duration, callback: F); fn schedule_timer<F: FnMut() + 'static>(&self, interval: std::time::Duration, callback: F);
} }

View File

@ -85,6 +85,12 @@ impl ConnectionOps for Connection {
Ok(()) Ok(())
} }
fn hide_application(&self) {
unsafe {
let () = msg_send![self.ns_app, hide: self.ns_app];
}
}
fn schedule_timer<F: FnMut() + 'static>(&self, interval: std::time::Duration, callback: F) { fn schedule_timer<F: FnMut() + 'static>(&self, interval: std::time::Duration, callback: F) {
let secs_f64 = let secs_f64 =
(interval.as_secs() as f64) + (f64::from(interval.subsec_nanos()) / 1_000_000_000_f64); (interval.as_secs() as f64) + (f64::from(interval.subsec_nanos()) / 1_000_000_000_f64);