| Commit message (Collapse) | Author | Age |
| ... | |
| |\
| |
| | |
Add "shell" option to config
|
| | |
| |
| |
| |
| |
| | |
This allows you to configure the shell to use when alacritty starts.
cc: #122
|
| |/ |
|
| |
|
|
| |
Should solve the `monospace` issue people are seeing for now.
|
| | |
|
| |
|
|
|
|
| |
Previously, these could have crashed alacritty. Now, they simply print
an error message in Red to stderr. The Red format wrapper was moved to a
central location where both main.rs and the alacritty lib can access it.
|
| |
|
|
| |
Resolves #22.
|
| |
|
|
|
|
|
|
|
|
|
| |
There was a lot of complexity around the threadsafe `Flag` type and
waking up the event loop. The idea was to prevent unnecessary calls to
the glutin window's wakeup_event_loop() method which can be expensive.
This complexity made it difficult to get synchronization between the pty
reader and the render thread correct. Now, the `dirty` flag on the
terminal is also used to prevent spurious wakeups. It is only changed
when the mutex is held, so race conditions associated with that flag
shouldn't happen.
|
| |
|
|
| |
Moving the window on macOS would cause a panic in certain circumstances.
|
| |
|
|
|
|
|
|
| |
The terminal mutex is no longer released between event processing and
doing a draw. This may fix the race condition with data arriving but not
being displayed until a subsequent event.
cc #29
|
| | |
|
| |
|
|
| |
The reloaded config was not used immediately.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The event handling code grew organically over time, and with that came a
number of warts. The primary issue was with passing some random
selection of arguments to the input::Processor based on what the input
was. There was the issue that if multiple events were drained from a
single PollEventsIterator, the terminal mutex was potentially locked and
unlocked many times. Finally, and perhaps most importantly, there was no
good way to pass necessary state to the Action executor without going
through several API layers.
To fix all that, the input::ActionContext and input::Processor are now
generated once per call to the event::Processor. The input::Processor
holds onto the ActionContext so that it doesn't need to be passed
through layers of function calls. When a binding is activated, the
ActionContext is simply passed to the handler.
This did have the effect of breaking the input::Processor tests
(specifically, those relating to bindings). The issue was not addressed
in this commit since a larger refactor of the bindings is planned which
should also improve testability.
|
| |
|
|
|
|
| |
This adds the ability to click and drag with the mouse and have the
effect of visually selecting text. The ability to copy the selection
into a clipboard buffer is not yet implemented.
|
| |
|
|
|
| |
The main refactor broke config reloading; specifically, colors were not
updating for subsequent draws.
|
| |
|
|
| |
All of the changes in this commit are due to clippy lints.
|
| |
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
| |
* 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.
|
| | |
|
| | |
|
| |
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
| |
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.
|
| |
|
|
| |
This feature is on by default
|
| |
|
|
| |
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!
|
| | |
|
| |
|
|
|
|
|
| |
The architecture here is really poor. Need to move file watching into a
dedicated location and probably have an spmc broadcast queue. other
modules besides rendering will care about config reloading in the
future.
|
| |
|
|
|
|
| |
Added solarized dark color scheme for testing purposes.
Resolves #1.
|
| |
|
|
| |
Now uses serde_dervive \o/
|
| |
|
|
|
| |
Currently it only supports x11 via the xclip program, and that only
supports reading the clipboard contents.
|
| |
|
|
| |
doesn't work on ubuntu 16.04 for some reason
|
| |
|
|
|
|
|
|
|
|
|
| |
The main loop body was originally all written inline. There's now
separate functions for each of the actions the loop handles including
channel events, pty reading, and pty writing. There's also helper
functions on State for managing the write list.
The `EventLoop` and its `State` are returned when joining with the
thread it spawns. This will potentially be helpful once config reloading
is introduced.
|
| |
|
|
| |
This type and its implementations were seriously cluttering main.rs.
|
| | |
|
| |
|
|
|
|
|
|
|
|
| |
This was largely an experiment to see whether writing and reading from a
separate thread was causing terminal state corruption as described in
https://github.com/jwilm/alacritty/issues/9. Although this doesn't seem
to fix that particular issue.
Keeping this because it generally seems more correct than
reading/writing from separate locations.
|
| |
|
|
|
|
|
|
|
| |
Also enables debug symbols in release profile by default. Until
Alacritty ships, there's going to be lots of perf analysis which needs
debug symbols.
The PriorityMutex low priority method was never used. Now it's just a
fair mutex.
|
| |
|
|
|
|
| |
Terminal output wouldn't reliably refresh the screen. Fix is to only
modify this flag when the terminal lock is held which suggests a larger
refactoring should happen.
|
| | |
|