1
1
mirror of https://github.com/wez/wezterm.git synced 2024-12-25 22:33:52 +03:00
Commit Graph

5755 Commits

Author SHA1 Message Date
Wez Furlong
509fd98b03 docs: changelog for https://github.com/wez/wezterm/pull/2038 2022-05-26 16:47:15 -07:00
Erlend Lind Madsen
6a320009bd docs: add linear gradient example 2022-05-26 16:45:19 -07:00
Erlend Lind Madsen
c3ea11487c gui: add Linear gradient 2022-05-26 16:45:19 -07:00
Wez Furlong
4e00b24dbf gui: allow layers to be allocated for zindex on the fly
Make the layer allocation more dynamic, which makes it
possible for the box model stuff to allocate a layer based
on the zindex for an element.

Adjust the box model code to cascade the base zindex via
the layer context so that the render stage can select
the correct layer.

This fixes up rendering tabs over the top of the right status
area.
2022-05-26 08:32:55 -07:00
Wez Furlong
17d1170b2a windows: fix divined current working directory
The issue was that we were generating an invalid file URI; fix
that up!

refs: #2036
2022-05-26 05:56:57 -07:00
Wez Furlong
b2cd800c70 fix positional modifiers on Windows
I overlooked this as part of e83f2c95f4
The positional mods need to be stripped out when looking up keymap
assignments, so let's do that.

refs: https://github.com/wez/wezterm/issues/2009
refs: https://github.com/wez/wezterm/issues/2037
2022-05-26 05:38:15 -07:00
Wez Furlong
0b64d2c7f6 cargo update
My windows build didn't work this morning, complaining:

; cargo build
    Updating crates.io index
error: failed to select a version for the requirement `libgit2-sys = "^0.13.4"`
candidate versions found which didn't match: 0.13.2+1.4.2, 0.13.1+1.4.2, 0.13.0+1.4.1, ...
location searched: crates.io index
required by package `git2 v0.14.4`
    ... which satisfies dependency `git2 = "^0.14"` (locked to 0.14.4) of package `config v0.1.0 (C:\Users\wez\wez-personal\wezterm\config)`
    ... which satisfies path dependency `config` (locked to 0.1.0) of package `codec v0.1.0 (C:\Users\wez\wez-personal\wezterm\codec)`
    ... which satisfies path dependency `codec` (locked to 0.1.0) of package `wezterm v0.1.0 (C:\Users\wez\wez-personal\wezterm\wezterm)`

The cargo update downgraded the dep, but looking at crates.io the
requested revs look ok.  Something is fishy.

I upgraded rust and ran cargo update again to get back on the
same git rev, so now this commit captures the other things
that changed.
2022-05-26 05:37:22 -07:00
Wez Furlong
3be4dbc878 pane select: allow bg to have alpha channel
Wraps up the changes from the following diff and allows for the modal
layer (and box model) to use alpha for poly quads.

Change the default background color for pane select to be slightly
transparent.
2022-05-25 23:25:09 -07:00
Wez Furlong
3058e245d0 Allow for multiple layers
Each layer has the same 3-pass draw that we use for the main terminal
display.

These layers allow for potentially compositing between the layers.
That is untested at the moment as the upper layers use the box model
stuff which hard-codes its work to the vb index 1 which doesn't
use regular alpha blending.
2022-05-25 20:51:36 -07:00
Wez Furlong
e83f2c95f4 Allow tracking left/right control and shift modifiers
I think this might only be a thing on Windows.

This commit speculatively (I'm on a mac at the moment!) allows tracking
the left/right control/shift modifier flags and passing that through
to the win32 input mode logic.

refs: https://github.com/wez/wezterm/issues/2009
2022-05-25 18:47:47 -07:00
Wez Furlong
95bd276580 docs: add pane select screenshot 2022-05-25 09:37:10 -07:00
Wez Furlong
65889217c6 docs for PaneSelect
refs: #1975
refs: #1842
2022-05-25 09:30:17 -07:00
Wez Furlong
385f3c99d3 wezterm cli: add send-text --no-paste option
refs: https://github.com/wez/wezterm/issues/888#issuecomment-1123462175
2022-05-25 07:45:34 -07:00
Wez Furlong
8cce462780 debug overlay: avoid stair case when printing log messages
Need to normalize \n to \r\n so that `wezterm.log_error("foo\nbar")`
shows up correctly in the overlay.
2022-05-25 07:34:49 -07:00
Wez Furlong
e298bb7a11 shaping: fix repeated glyphs for Unicode NFD text
harfbuzz can return incomplete overlapping runs when it processes
text in unicode NFD.  Add another check for the case where we've
accumulated the bytes in the range 0-12 and then harfbuzz returns
another range of 6-12.  We coalesce the two together so that we can
pass the full unresolved sequence to the next fallback pass.

refs: https://github.com/wez/wezterm/issues/2032
2022-05-25 06:51:31 -07:00
Wez Furlong
2725559fc0 paneselect: add mode parameter and a mode for swapping panes
Extends the pane selector to allow:

```
wezterm --config 'keys={{key="p", mods="CTRL", action=wezterm.action{PaneSelect={mode="SwapWithActive"}}}}'
```

to swap the active pane with the selected pane.
Similar to https://wezfurlong.org/wezterm/config/lua/keyassignment/RotatePanes.html
except that only the active and the selected panes have their positions
adjusted.

refs: https://github.com/wez/wezterm/issues/1842
refs: https://github.com/wez/wezterm/issues/1975
2022-05-24 22:52:54 -07:00
Wez Furlong
e114534bee docs: fix typo in changelog 2022-05-24 20:26:49 -07:00
Wez Furlong
8f880551a0 deps: harfbuzz -> 4.3.0 2022-05-24 18:43:10 -07:00
Wez Furlong
a75ee702dd docs: tweak changelog to reflect search mode per-tab state 2022-05-24 18:41:09 -07:00
Wez Furlong
c34e9b45d4 paneselect: ctrl-g as emacs-y way to close it 2022-05-24 18:39:22 -07:00
Wez Furlong
478b0df58b Add wezterm.strftime_utc 2022-05-24 17:24:19 -07:00
Wez Furlong
a70ddd9212 docs: changelog for https://github.com/wez/wezterm/pull/2022 2022-05-24 09:38:39 -07:00
kumattau
89d78ac410 Fix IME candidate window position on macOS 2022-05-24 09:37:49 -07:00
Wez Furlong
504841f0ae revert accidental portion of prior commit 2022-05-24 09:33:49 -07:00
Wez Furlong
06db8b51aa paneselect: adjust padding/styling 2022-05-24 07:17:12 -07:00
Wez Furlong
a5162765e9 config: make wezterm.action more ergonomic
you can try this in the debug overlay repl:

```
> wezterm.action{QuickSelectArgs={}}
{
    "QuickSelectArgs": {},
}
```

```
> wezterm.action.QuickSelectArgs
{
    "QuickSelectArgs": {
        "alphabet": "",
        "label": "",
        "patterns": {},
    },
}
```

```
> wezterm.action.QuickSelectArgs{alphabet="abc"}
{
    "QuickSelectArgs": {
        "alphabet": "abc",
    },
}
```

```
> wezterm.action.QuickSelectArgs{}
{
    "QuickSelectArgs": {},
}
```

```
> wezterm.action.Copy
"Copy"
```

```
> wezterm.action.ActivatePaneByIndex(1)
{
    "ActivatePaneByIndex": 1,
}
```

refs: https://github.com/wez/wezterm/issues/1150
2022-05-23 23:01:18 -07:00
Wez Furlong
298b4abf70 split-pane: fixup some docs and defaults
The new options broke the older options; fix that up.
2022-05-23 08:38:05 -07:00
Wez Furlong
fe7f3e9214 cargo update 2022-05-23 08:18:06 -07:00
Wez Furlong
5bf736bd21 add PaneSelect key assignment
This is still a bit of a WIP, but this commit:

* Introduces a new "Modal" concept to the GUI layer. The intent is
  that modal intercepts key and mouse events while active, and renders
  over the top of the rest of the normal display.
  I think there might be a couple of cases where key events skirt
  through this, but this is good enough as a first step.
  Also, the render is forced into layer 1 which has some funny side
  effects: if the modal choses to render transparent, it will poke
  a hole in the window because all the rendering happens together:
  there aren't distinct layer compositing passes.

* Add a new PaneSelect action that is implemented as a modal.
  It uses quickselect style alphabet -> pane label generation and
  renders the labels over ~the middle of each pane using an
  enlarged version of the window frame font.  Typing the label
  will activate that pane.  Escape will cancel the modal.

More styling and docs will follow in a later commit.

refs: #1975
2022-05-23 08:16:52 -07:00
Wez Furlong
efb8d14064 config: avoid rebuilding when git index changes
Focus instead on the head and check whether a commit is made.
2022-05-23 08:16:52 -07:00
Wez Furlong
06e54f9e5a Apply suggestions from code review 2022-05-22 23:11:51 -07:00
kumattau
546b456f0d docs: fix typo 2022-05-22 23:11:51 -07:00
Wez Furlong
1f554886a8 fix build warning on !windows 2022-05-22 06:50:18 -07:00
Wez Furlong
578fa92a2e win32 input mode: fixup ctrl-ascii key combinations
refs: https://github.com/microsoft/terminal/issues/13134
refs: https://github.com/wez/wezterm/issues/1904
refs: https://github.com/wez/wezterm/issues/1509
refs: https://github.com/wez/wezterm/issues/2009
2022-05-22 06:41:57 -07:00
Wez Furlong
89e88c876d docs: changelog for #2006 2022-05-22 06:07:32 -07:00
kumattau
c145af575f docs: ime_preedit_rendering 2022-05-22 06:02:51 -07:00
kumattau
342fa3f55b Add support of IME preedit rendered by system on X11 2022-05-22 06:02:51 -07:00
kumattau
c890c238c1 Add support of IME preedit rendered by system on Windows 2022-05-22 06:02:51 -07:00
Wez Furlong
ecd05547d5 Add SplitPane assignment
This, along with the plumbing included here, allows specifying
the destination of the split (now you can specify top/left, whereas
previously it was limited to right/bottom), as well as the size
of the split, and also whether the split targets the node at the
top level of the tab rather than the active pane--that is referred
to as full-width in tmux terminology.

https://github.com/wez/wezterm/issues/578
2022-05-21 21:09:11 -07:00
Wez Furlong
d2d4257f79 Add RotatePanes key assignment 2022-05-21 17:10:04 -07:00
Wez Furlong
da7da888cd config: generate errors for things like --config tarm=foo
Invalid option names, or values that evaluate as nil (such as the `foo`
above: that's treated as a global variable reference, but `foo` isn't a
defined global and evaluates as `nil`) will now cause the program
startup to error out with an actionable error message.

Previously, the invalid config name would generate a warning, and the
invalid value would silently have no effect as it has the same effect as
omitting the named value and leaving it as its default value.

I think these cases should both immediately error out and stop
further processing, so that's what we're doing.

This commit also adds support for adding:

```
   #[dynamic(deprecated = "use newer option instead")]
   pub some_config_value: bool,
```

but not options currently use this.
2022-05-21 13:10:30 -07:00
Wez Furlong
736169a752 add min_scroll_bar_height config option
refs: https://github.com/wez/wezterm/issues/1936
2022-05-21 10:06:18 -07:00
Wez Furlong
107d3d2378 search mode can now default to searching the selection text
To do this, we split `Pattern` into the underlying pattern for the mux
layer (which is part of the codec), and another for the config layer,
so that we can specify this new mode.

At the gui layer, we translate the selection variant into the actual
selection text and map it to the mux Pattern enum.

When taking the selection text, we restrict it to just the first line.

refs: https://github.com/wez/wezterm/issues/1912
2022-05-21 07:24:50 -07:00
Wez Furlong
e8c3de9c16 copy/search mode: change scope of saved search to be per-tab
refs: https://github.com/wez/wezterm/issues/1912
2022-05-21 06:45:26 -07:00
Wez Furlong
c04d831ee5 add cell_width config to scale cell_width
This works similarly to line_height

refs: #1979
2022-05-21 06:10:03 -07:00
Wez Furlong
94039c473b dynamic: allow defaulting to None for enum struct fields
refs: https://github.com/wez/wezterm/issues/1993#issuecomment-1133283042

```
DISPLAY=:0 ./target/debug/wezterm -n --config 'keys={{key="a", mods="NONE", action=wezterm.action{SwitchToWorkspace={ name = "default"}}}}'
```
2022-05-20 13:38:24 -07:00
Wez Furlong
b312479266 quickselect: allow multiline matches
Turn on multi-line mode by default, and improve the localpane
search function to collapse runs of trailing whitespace into
just a newline.

That allows:

```
./target/debug/wezterm -n --config 'quick_select_patterns={"foo$"}'
```

to match the first line from this, but not the second:

```
printf "foo\nfoobar\n"
```

and this to match both:

```
./target/debug/wezterm -n --config 'quick_select_patterns={"^foo"}'
```

refs: https://github.com/wez/wezterm/issues/2008
2022-05-20 09:47:08 -07:00
Wez Furlong
f72207e7f0 wayland: fix weirdness with recent mutter and display scaling
Mutter recently started to enforce a protocol error that enforces
the ordering of buffer updates and that is flushing out some
bugs in various places; here's a related issue that I stumbled
into when I set my scaling to 300% and got stuck:

https://gitlab.gnome.org/GNOME/mutter/-/issues/2083

What that means to us is that we have to be careful when updating
the buffer scaling properties on our EGL surface.

We don't actually own the underlying buffer or the underlying
buffer commits, so we have to be a little indirect: what
we do here is detach the EGL managed buffer when we notice
that scaling has changed, and that appears to satisfy the
compositor.

refs: https://github.com/wez/wezterm/issues/1727
2022-05-20 08:54:07 -07:00
Wez Furlong
1e61d1ea8b wayland: avoid noisy panic-within-panic on shutdown
Ensure that we eagerly clear the window map to avoid
drop-during-global-dtor related panic which confuses
the root cause of wayland protocol errors.
2022-05-20 07:54:00 -07:00
Wez Furlong
d6063e180a config: fix specifying numeric font weights
add helpers to Value coerce to different numeric types, and use
one of those in the FontWeight conversion.

refs: #2012
2022-05-20 06:33:12 -07:00