Age | Commit message (Collapse) | Author |
|
|
|
All of the changes in this commit are due to clippy lints.
|
|
Resolves #25
|
|
This adds a trait OnResize and a separate method handle_resize to the
display. Instead of having a callback to receive resize events, a list
of &mut OnResize are passed to this new method. Doing this allowed the
only RefCell usage in the codebase to be removed :).
|
|
|
|
The cell under the cursor is now tracked in the input processor at
`self.mouse.line` and `self.mouse.column`. This could probably be
optimized to only compute the cell when in certain states, but the
calculation is cheap.
|
|
This makes scrolling work for mouse wheels (was previously just
trackpads).
|
|
* config::Monitor is more ergonomic and self-contained
* Fixed an issue with macOS resize. Previously, the terminal was marked
as dirty in the window resize handler, but the display can't do that.
Instead, the event processor returns a flag whether it was requested
to wakeup.
|
|
This is part of an ongoing decoupling effort across the codebase and
tidying effort in main.rs. Everything to do with showing the window with
a grid of characters is now managed by the `Display` type. It owns the
window, the font rasterizer, and the renderer. The only info needed from
it are dimensions of characters and the window itself for sizing the
terminal properly. Additionally, the I/O loop has access to wake it up
when new data arrives.
|
|
The doc comment outlines my plan about cleaning up this function.
|
|
|
|
Adds a wrapper for the glutin::Window which provides strongly typed
APIs and more convenient interfaces. Moves some gl calls into the
opengl-based renderer.
The point of most of the changes here is to clean up main().
|
|
This cleans up the Config::load API significantly. Several miscellaneous
comments were also added.
|
|
This introduces the `cli` module and the `cli::Options` type. This type
holds all the options passable on the command line in addition to
providing arg parsing.
|
|
|
|
The identify_terminal function signature had to change to support
writing to the terminal before processing additional input.
|
|
|
|
glutin::Window is not threadsafe; putting it into an Arc is
misleading (although the glutin::Window type claims to be Send + Sync).
The reference was just needed on the main thread anyway, so it's better
to just pass a ref around directly.
|
|
There's now a ColorList type that provides strongly typed indexing for
not only usize but NamedColor as well. Previously, the `NamedColor` was
casted to a `usize` when indexing the colors. Additionally, only one
copy of the ColorList needs to exist;it's borrowed from the `Config`
when rendering, and the renderer doesn't need a copy.
|
|
ANSI escape sequences like `\x1b[48;5;10m` were not supported until now.
Specifically, the second attribute, 5, says that the following attribute
is a color index.
The ref tests were updated since `enum Color` variants changed.
|
|
This probably should have been renamed in the original refactor, but oh
well. `render_cells()` takes a generic parameter `I` which is any
`Iterator<Item=IndexedCell>` and is thus no longer coupled to the grid
type. Renaming it reflects that.
|
|
Binding/Action execute now has access to TermMode to support bracketed
paste mode.
|
|
The cell module was previously implemented within term.rs. Now each
module has its own file.
|
|
Also fixes formatting on the Term::new method signature.
|
|
The terminal now has a `renderable_cells()` function that returns a
`RenderableCellIter` iterator. This allows reuse of the cell selection
code by multiple renderers, makes it testable, and makes it
independently optimizable.
The render API now takes an `Iterator<Item=IndexedCell>` to support both
the new renderable cells iterator and the `render_string()` method which
generates its own iterator.
The `vim_large_window_scoll` ref test was added here because it provides
a nice large and busy grid to benchmark the cell selection with.
|
|
Was reading through the code and realized this function could be cleaned
up significantly.
|
|
Linebased scrolling is still unsupported (need a mouse to test with).
|
|
This allows the user for eg clicking columnts in htop to sort.
|
|
Some shells will send a backspace at column 0, apparently.
|
|
Config expected key and the default config file had the wrong section.
|
|
Also adds a feature `err-println` for enabling `err_println!` printing.
|
|
Ref tests use a recording of the terminal protocol and a serialization
of the grid state to check that the parsing and action handling systems
produce the correct result. Ref tests may be recorded by running
alacritty with `--ref-test` and closing the terminal by using the window
"X" button. At that point, the recording is fully written to disk, and a
serialization of important state is recorded. Those files should be
moved to an appropriate folder in the `tests/ref/` tree, and the
`ref_test!` macro invocation should be updated accordingly.
A couple of changes were necessary to make this work:
* Ref tests shouldn't create a pty; the pty was refactored out of the
`Term` type.
* Repeatable lines/cols were needed; on startup, the terminal is resized
* by default to 80x24 though that may be changed by passing
`--dimensions w h`.
* Calculating window size based on desired rows/columns and font metrics
required making load_font callable multiple times.
* Refactor types into library crate so they may be imported in an
integration test.
* A whole bunch of types needed symmetric serialization and
deserialization. Mostly this was just adding derives, but the custom
deserialization of Rgb had to change to a deserialize_with function.
This initially adds one ref test as a sanity check, and more will be
added in subsequent commits. This initial ref tests just starts the
terminal and runs `ll`.
|
|
Bindings were previously hardcoded within input.rs; adding, removing, or
changing a binding required a recompile! Now, bindings may be declared
in alacritty.yml. Even better, bindings are live-reloaded when
alacritty.yml is changed!
One unexpected benefit of this change was that all of the special casing
in input.rs has disappeared.
Conversely, config.rs has gained complexity for all of the
deserialization logic.
Resolves #3.
|
|
bytes 2 and 3 are not necessarily zeroed
|
|
Fixes an issue where waking from sleep on macOS would continue showing
the lock screen if Alacritty was the active app.
|
|
Committed this on a plane with no internet; need to get a real glutin
ref pushed somewhere and update this commit before merging into master.
|
|
Adds support for pageup, pagedown, home, and end. Fixes delete inserting
spaces.
Resolves #15.
|
|
Readiness for the pty file descriptor will never be HUP or ERROR; the
out-of-band flag raised by sigchld is used instead.
Resolves #14.
|
|
This still has a problem where intermediate sizes are not drawn.
Apparently cocoa blocks the event loop during resize. This needs to be
fixed in Glutin.
Resolves #16.
|
|
|
|
There's an issue where drawing the cell backgrounds will overwrite part
of a neighboring glyph. The real solution here is to figure out glyph
metrics properly, but simply limiting to 2 draw calls per frame (first
background, then all the glyphs) makes the problem "go away".
|
|
This feature is on by default
|
|
|
|
Indexing colors on the vertex shader added complexity and after
profiling suggests perf is basically the same. This commit will still be
here in case it makes sense to try this again at some point.
|
|
Everything else was already in place, just needed to set the flag.
|
|
This feature was previously shoved into the renderer due to initial
proof of concept. Now, providing config updates to other systems is
possible. This will be especially important for key bindings!
|
|
Which means it can be disabled in release builds. No more working on a
renderer feature and actually breaking the Alacritty your editor is
running inside.
|
|
Move more work to GPU from CPU. Some very non-scientific profiling
suggests this is implementation is more performant, but more work should
be done there.
|
|
The whole enumeration should be well defined for the renderer.
|
|
|