mirror of
https://github.com/wez/wezterm.git
synced 2024-12-29 00:21:57 +03:00
A GPU-accelerated cross-platform terminal emulator and multiplexer written by @wez and implemented in Rust
61c52af491
This commit is a bit noisy because it also meant flipping the key map code from using the termwiz input types to the window input types, which I thought I'd done some time ago, but clearly didn't. This commit allows defining key assignments in terms of the underlying operating system raw codes, if provided by the relevant layer in the window crate (currently, only X11/Wayland). The raw codes are inherently OS/Machine/Hardware dependent; they are the rawest value that we have available and there is no meaningful understanding that we can perform in code to understand what that key is. One useful property of the raw code is that, because it hasn't gone through any OS level keymapping processing, its value reflects its physical position on the keyboard, allowing you to map keys by position rather than by value. That's useful if you use software to implement eg: DVORAK or COLEMAK but want your muscle memory to kick in for some of your key bindings. New config option: `debug_key_events = true` will cause wezterm to log an "error" to stderr each time you press a key and show the details in the key event: ``` 2020-12-06T21:23:10.313Z ERROR wezterm_gui::gui::termwindow > key_event KeyEvent { key: Char('@'), modifiers: SHIFT | CTRL, raw_key: None, raw_modifiers: SHIFT | CTRL, raw_code: Some(11), repeat_count: 1, key_is_down: true } ``` This is useful if you want to figure out the `raw_code` for a key in your setup. In your config, you can use this information to setup new key bindings. The motivating example for me is that because `raw_key` (the unmodified equivalent of `key`) is `None`, the built-in `CTRL-SHIFT-1` key assignment doesn't function for me on Linux, but I can now "fix" this in my local configuration, taking care to make it linux specific: ```lua local wezterm = require 'wezterm'; local keys = {} if wezterm.target_triple == "x86_64-unknown-linux-gnu" then local tab_no = 0 -- raw codes 10 through 19 correspond to the number key 1-9 positions -- on my keyboard on my linux system. They may be different on -- your system! for i = 10, 20 do table.insert(keys, { key="raw:"..tostring(i), mods="CTRL|SHIFT", action=wezterm.action{ActivateTab=tab_no}, }) tab_no = tab_no + 1 end end return { keys = keys, } ``` Notice that the key assignment accepts encoding a raw key code using a value like `key="raw:11"` to indicate that you want a `raw_code` of `11` to match your key assignment. The `raw_modifiers` portion of the `KeyEvent` is used together with the `raw_code` when deciding the key assignment. cc: @bew |
||
---|---|---|
.cargo | ||
.github | ||
assets | ||
async_ossl | ||
base91 | ||
bintree | ||
ci | ||
codec | ||
config | ||
deps | ||
docs | ||
env-bootstrap | ||
filedescriptor | ||
licenses | ||
luahelper | ||
mux | ||
promise | ||
pty | ||
rangeset | ||
ratelim | ||
strip-ansi-escapes | ||
tabout | ||
term | ||
termwiz | ||
test-data | ||
tmux-cc | ||
umask | ||
vtparse | ||
wezterm | ||
wezterm-client | ||
wezterm-font | ||
wezterm-gui | ||
wezterm-gui-subcommands | ||
wezterm-mux-server | ||
window | ||
.cirrus.yml | ||
.gitignore | ||
.gitmodules | ||
.rustfmt.toml | ||
Cargo.lock | ||
Cargo.toml | ||
CONTRIBUTING.md | ||
get-deps | ||
LICENSE.md | ||
README.md | ||
wt-record | ||
wt-replay |
Wez's Terminal
A GPU-accelerated cross-platform terminal emulator and multiplexer written by @wez and implemented in Rust
User facing home page at: https://wezfurlong.org/wezterm/
Screenshot of wezterm on macOS, running vim
Installation
https://wezfurlong.org/wezterm/installation.html
Getting help
This is a spare time project, so please bear with me. There are two channels for support:
- You can use the GitHub issue tracker to see if someone else has a similar issue, or to file a new one: https://github.com/wez/wezterm/issues
- There is a Matrix/Riot.im room for (potentially!) real time discussions; that is bridged from the original Gitter room.
The Matrix/Gitter room is probably better suited to questions than it is to bug reports, but don't be afraid to use whichever you are most comfortable using and we'll work it out.