mirror of
https://github.com/wez/wezterm.git
synced 2024-11-22 22:42:48 +03:00
Add wezterm.gui.default_key_tables()
This provides a means for more easily extending the default key tables without forcing the user to recreate the entire config for themselves. wezterm.gui.default_keys is also added by this, but it is likely not as useful.
This commit is contained in:
parent
cd2c2a1a83
commit
c0fff4e843
@ -700,6 +700,13 @@ impl ConfigHandle {
|
||||
pub fn generation(&self) -> usize {
|
||||
self.generation
|
||||
}
|
||||
|
||||
pub fn default_config() -> Self {
|
||||
Self {
|
||||
config: Arc::new(Config::default_config()),
|
||||
generation: 0,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl std::ops::Deref for ConfigHandle {
|
||||
|
@ -11,6 +11,11 @@ usually the best available version.
|
||||
|
||||
As features stabilize some brief notes about them will accumulate here.
|
||||
|
||||
#### New
|
||||
* [wezterm.gui.default_key_tables](config/lua/wezterm.gui/default_key_tables.md)
|
||||
and [wezterm.gui.default_keys](config/lua/wezterm.gui/default_keys.md) for
|
||||
more conveniently copying and extending the default configuration.
|
||||
|
||||
#### Fixed
|
||||
* Wayland: key repeat gets stuck after pressing two keys in quick succession.
|
||||
Thanks to [@unrelentingtech](https://github.com/unrelentingtech)!
|
||||
|
32
docs/config/lua/wezterm.gui/default_key_tables.md
Normal file
32
docs/config/lua/wezterm.gui/default_key_tables.md
Normal file
@ -0,0 +1,32 @@
|
||||
# `wezterm.gui.default_key_tables()`
|
||||
|
||||
*Since: nightly builds only*
|
||||
|
||||
Returns a table holding the effective default set of `key_tables`. That is the
|
||||
set of keys that is used as a base if there was no configuration file.
|
||||
|
||||
This is useful in cases where you want to override a key table assignment
|
||||
without replacing the entire set of key tables.
|
||||
|
||||
This example shows how to add a key assignment for `Backspace` to `copy_mode`,
|
||||
without having to manually specify the entire key table:
|
||||
|
||||
```lua
|
||||
local wezterm = require 'wezterm'
|
||||
local act = wezterm.action
|
||||
|
||||
local copy_mode = nil
|
||||
if wezterm.gui then
|
||||
copy_mode = wezterm.gui.default_key_tables().copy_mode
|
||||
table.insert(
|
||||
copy_mode,
|
||||
{ key = 'Backspace', mods = 'NONE', action = act.CopyMode 'MoveLeft' }
|
||||
)
|
||||
end
|
||||
|
||||
return {
|
||||
key_tables = {
|
||||
copy_mode = copy_mode,
|
||||
},
|
||||
}
|
||||
```
|
8
docs/config/lua/wezterm.gui/default_keys.md
Normal file
8
docs/config/lua/wezterm.gui/default_keys.md
Normal file
@ -0,0 +1,8 @@
|
||||
# `wezterm.gui.default_keys()`
|
||||
|
||||
*Since: nightly builds only*
|
||||
|
||||
Returns a table holding the effective default values for key assignments. That
|
||||
is the set of keys that is used as a base if there was no configuration file.
|
||||
|
||||
|
@ -75,8 +75,14 @@ reassignable.
|
||||
|
||||
The key assignments for copy mode are specified by the `copy_mode` [Key Table](config/key-tables.md).
|
||||
|
||||
You may provide your own definition of this key table if you wish to customize it.
|
||||
There isn't a way to override portions of the key table, only to replace the entire table.
|
||||
You may provide your own definition of this key table if you wish to customize
|
||||
it.
|
||||
|
||||
You may use
|
||||
[wezterm.gui.default_key_tables](config/lua/wezterm.gui/default_key_tables.md)
|
||||
to obtain the defaults and extend them. In earlier versions of wezterm there
|
||||
wasn't a way to override portions of the key table, only to replace the entire
|
||||
table.
|
||||
|
||||
The default configuration at the time that these docs were built (which
|
||||
may be more recent than your version of wezterm) is shown below.
|
||||
|
@ -91,8 +91,11 @@ When the search overlay is active the behavior of wezterm changes:
|
||||
|
||||
The key assignments for copy mode are specified by the `search_mode` [Key Table](config/key-tables.md).
|
||||
|
||||
You may provide your own definition of this key table if you wish to customize it.
|
||||
There isn't a way to override portions of the key table, only to replace the entire table.
|
||||
You may use
|
||||
[wezterm.gui.default_key_tables](config/lua/wezterm.gui/default_key_tables.md)
|
||||
to obtain the defaults and extend them. In earlier versions of wezterm there
|
||||
wasn't a way to override portions of the key table, only to replace the entire
|
||||
table.
|
||||
|
||||
The default configuration at the time that these docs were built (which
|
||||
may be more recent than your version of wezterm) is shown below.
|
||||
|
@ -17,6 +17,11 @@ pub struct InputMap {
|
||||
}
|
||||
|
||||
impl InputMap {
|
||||
pub fn default_input_map() -> Self {
|
||||
let config = ConfigHandle::default_config();
|
||||
Self::new(&config)
|
||||
}
|
||||
|
||||
pub fn new(config: &ConfigHandle) -> Self {
|
||||
let mut mouse = config.mouse_bindings();
|
||||
|
||||
|
@ -1,7 +1,13 @@
|
||||
use crate::frontend::try_front_end;
|
||||
use crate::inputmap::InputMap;
|
||||
use config::keyassignment::KeyTable;
|
||||
use config::lua::get_or_create_sub_module;
|
||||
use config::lua::mlua::{self, Lua};
|
||||
use config::{DeferredKeyCode, Key, KeyNoAction};
|
||||
use luahelper::dynamic_to_lua_value;
|
||||
use mux::window::WindowId as MuxWindowId;
|
||||
use std::collections::HashMap;
|
||||
use wezterm_dynamic::ToDynamic;
|
||||
|
||||
pub mod guiwin;
|
||||
pub mod pane;
|
||||
@ -28,5 +34,41 @@ pub fn register(lua: &Lua) -> anyhow::Result<()> {
|
||||
})?,
|
||||
)?;
|
||||
|
||||
fn key_table_to_lua(table: &KeyTable) -> Vec<Key> {
|
||||
let mut keys = vec![];
|
||||
for ((key, mods), entry) in table {
|
||||
keys.push(Key {
|
||||
key: KeyNoAction {
|
||||
key: DeferredKeyCode::KeyCode(key.clone()),
|
||||
mods: *mods,
|
||||
},
|
||||
action: entry.action.clone(),
|
||||
});
|
||||
}
|
||||
keys
|
||||
}
|
||||
|
||||
window_mod.set(
|
||||
"default_keys",
|
||||
lua.create_function(|lua, _: ()| {
|
||||
let map = InputMap::default_input_map();
|
||||
let keys = key_table_to_lua(&map.keys.default);
|
||||
dynamic_to_lua_value(lua, keys.to_dynamic())
|
||||
})?,
|
||||
)?;
|
||||
|
||||
window_mod.set(
|
||||
"default_key_tables",
|
||||
lua.create_function(|lua, _: ()| {
|
||||
let inputmap = InputMap::default_input_map();
|
||||
let mut tables: HashMap<String, Vec<Key>> = HashMap::new();
|
||||
for (k, table) in &inputmap.keys.by_name {
|
||||
let keys = key_table_to_lua(table);
|
||||
tables.insert(k.to_string(), keys);
|
||||
}
|
||||
dynamic_to_lua_value(lua, tables.to_dynamic())
|
||||
})?,
|
||||
)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user