Commit graph

229 commits

Author SHA1 Message Date
Joe Wilm 0421012c2d Replace remaining use of try! with ? 2016-12-16 22:29:35 -08:00
Joe Wilm dc918ae71a Rustup and clippy
All of the changes in this commit are due to clippy lints.
2016-12-16 22:13:51 -08:00
Joe Wilm 3b995ff87a Merge pull request #27 from quininer/ref_fish_cc
add fish_cc ref
2016-12-16 13:25:01 -08:00
quininer kel 0a53d3cb86 add fish_cc ref
and update Cargo.lock
2016-12-16 18:39:51 +08:00
Joe Wilm 0b3d2dac44 Handle overflow in Term::move_backward
Resolves #25
2016-12-15 09:13:34 -08:00
Joe Wilm 1a1b740c38 Remove need for Rc<RefCell<_>> usage
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 :).
2016-12-12 09:31:48 -08:00
Joe Wilm 4e9a307bed Fix a couple of compiler warnings 2016-12-12 09:31:29 -08:00
Joe Wilm 4b63bddd55 Track terminal cells on mouse movement
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.
2016-12-11 22:02:03 -08:00
Joe Wilm 79e02b0b2f Update nightly pin on travis 2016-12-11 20:26:33 -08:00
Joe Wilm 3d26d3c68a Implement mouse scrolling with line deltas
This makes scrolling work for mouse wheels (was previously just
trackpads).
2016-12-11 20:23:41 -08:00
Joe Wilm 4df29bb377 Finish main.rs cleanup
* 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.
2016-12-11 20:23:41 -08:00
Joe Wilm ed0b1cfff0 Display manages window, renderer, rasterizer
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.
2016-12-11 20:23:41 -08:00
Joe Wilm bbd8ddbfc0 Add run() function and document it
The doc comment outlines my plan about cleaning up this function.
2016-12-11 20:23:41 -08:00
Joe Wilm bffe512c33 Add display impl for Points<T> 2016-12-11 20:23:41 -08:00
Joe Wilm 4ba2931437 Cleaning up main; Added window module
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().
2016-12-11 20:23:41 -08:00
Joe Wilm 093ac43f80 Move config path into Config type
This cleans up the Config::load API significantly. Several miscellaneous
comments were also added.
2016-12-11 20:23:41 -08:00
Joe Wilm 01bb10885b Cleanup cli option parsing
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.
2016-12-11 20:23:41 -08:00
Joe Wilm e2e98ed6c2 Force drawing when config reloads 2016-12-11 20:23:41 -08:00
Joe Wilm ed48d08c03 Implement Handler::identify_terminal for Term
The identify_terminal function signature had to change to support
writing to the terminal before processing additional input.
2016-12-11 20:23:41 -08:00
Joe Wilm 61c1e37c46 Add comments in main loop 2016-12-11 20:23:41 -08:00
Joe Wilm 43397cefec Borrow glutin::Window instead of using Arc
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.
2016-12-11 20:23:41 -08:00
Joe Wilm ce32eee099 Refactor color list management
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.
2016-12-11 20:23:41 -08:00
Joe Wilm 23e36f1925 Add support for indexed colors
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.
2016-12-11 20:23:41 -08:00
Joe Wilm 3151ef8625 Rename RenderApi::render_grid() to render_cells()
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.
2016-12-11 20:23:41 -08:00
Joe Wilm ff5081d5e5 Add support for bracketed paste
Binding/Action execute now has access to TermMode to support bracketed
paste mode.
2016-12-11 20:23:41 -08:00
Joe Wilm 7bf3d059c3 Move term::cell module to its own file
The cell module was previously implemented within term.rs. Now each
module has its own file.
2016-12-11 20:23:41 -08:00
Joe Wilm 74dcba59d8 Document a couple of methods
Also fixes formatting on the Term::new method signature.
2016-12-11 20:23:41 -08:00
Joe Wilm 30bee80a69 Refactor cell selection out of renderer
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.
2016-12-11 20:23:41 -08:00
Joe Wilm 941818d88e Refactor limit function
Was reading through the code and realized this function could be cleaned
up significantly.
2016-12-11 20:23:41 -08:00
Joe Wilm adf02b5049 Support trackpad scrolling
Linebased scrolling is still unsupported (need a mouse to test with).
2016-12-11 20:23:41 -08:00
Joe Wilm 90e0a759e8 Support normal mouse tracking mode
This allows the user for eg clicking columnts in htop to sort.
2016-12-11 20:23:41 -08:00
Joe Wilm b6c372ab48 Use checked subtraction for backspace
Some shells will send a backspace at column 0, apparently.
2016-12-10 10:14:45 -08:00
Joe Wilm d19e6e38a4 Update to latest Rust 2016-11-23 17:23:14 -08:00
Joe Wilm 52a3b0aece Remove unnecessary slicing
json::from_str takes a &str which will auto deref from &String.
2016-11-20 07:45:18 -08:00
Joe Wilm d964de708d Add README.md
Currently just want to see travis status prominently on repo page.
2016-11-19 21:51:48 -08:00
Joe Wilm 88a92982b1 Fix mouse bindings
Config expected key and the default config file had the wrong section.
2016-11-19 21:49:23 -08:00
Joe Wilm 3db0bcb2a7 Fix glutin wayland 2016-11-19 21:34:22 -08:00
Joe Wilm 0dfba30181 Add a number of simple ref-tests
Also adds a feature `err-println` for enabling `err_println!` printing.
2016-11-19 21:34:22 -08:00
Joe Wilm 66dbd29cd1 Add support for recording/running ref tests
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`.
2016-11-19 21:34:11 -08:00
Joe Wilm d97996e19d Make bindings configurable from alacritty.yml
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.
2016-11-17 17:17:54 -08:00
Joe Wilm cb2bc4eadd Fix test for Cell layout
bytes 2 and 3 are not necessarily zeroed
2016-11-17 17:16:01 -08:00
Joe Wilm cbb9167d43 Redraw screen on focus
Fixes an issue where waking from sleep on macOS would continue showing
the lock screen if Alacritty was the active app.
2016-11-17 17:16:01 -08:00
Joe Wilm 8360ab44ec Fallback to received chars when no bindings
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.
2016-11-17 17:15:56 -08:00
Joe Wilm 6925daa823 Fix/add some keybindings
Adds support for pageup, pagedown, home, and end. Fixes delete inserting
spaces.

Resolves #15.
2016-11-11 18:46:42 -08:00
Joe Wilm e4260134aa Fix alacritty shutdown when shell exits on macOS
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.
2016-11-11 18:02:38 -08:00
Joe Wilm 8cbd768094 Fix resize on macOS leaving screen blank
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.
2016-11-11 17:40:12 -08:00
Joe Wilm a652b4a65f Rustup 2016-11-11 16:55:58 -08:00
Joe Wilm 3e0b2b6c58 Fix config file reloading on macOS 2016-11-11 16:53:13 -08:00
Joe Wilm be036edbdd Workaround for cutoff glyphs
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".
2016-11-11 16:51:01 -08:00
Joe Wilm 82c8804f44 Update default config
Contains comments about what requires a restart and also includes the
bold+bright flag.
2016-10-28 09:26:16 -07:00