aboutsummaryrefslogtreecommitdiff
path: root/src/event.rs
Commit message (Collapse)AuthorAge
...
* Add clippy check to travisChristian Duerr2018-01-06
| | | | This commit adds clippy as a required step of the build process. To make this possible, all existing clippy issues have been resolved.
* Pass ModifiersState to mouse_moved method tooChristian Duerr2018-01-03
|
* Pass ModifiersState to mouse input as wholeChristian Duerr2018-01-03
| | | | | | ModifiersState is now passed to the mouse methods in `input.rs` as a whole instead of just passing the `shift` state. This should make it a bit easier to do changes in the future.
* Update mouse modifiers to only pass shiftChristian Duerr2018-01-03
| | | | | | The only mouse modifier required right now is the shift key, to prevent passing around unnecessary state, only the shift state is passed to the mouse processors now.
* Enable shift+select in mouse modeChristian Dürr2018-01-03
| | | | | | | | | | | When an application takes control over the mouse, it usually disables selection completely. However the common way to still make selection possible is by allowing selection while the shift key is held down. This feature is implemented here by making use of the new `modifiers` field on mouse events with glutin/winit. This fixes jwilm/alacritty#146.
* Add custom box cursor for unfocused windowChristian Duerr2017-12-24
|
* Update glutin to v0.11chetgurevitch2017-12-23
|
* Update glutin to v0.10Chet Gurevitch2017-12-23
|
* Set urgent WM flag on bell on X11 systems (#812)Barret Rennie2017-10-21
| | | | | Sets the urgent WM flag when bell is emitted on X11 systems. Additionally, the flag is cleared on focus because not all WMs clear it automatically.
* Implement user actions for font resize (#625)Dan Aloni2017-10-14
| | | | | | | | | | | | | | | | | Adds support for font resizing at run-time. Three new actions are introduced: * IncreaseFontSize - Increases current font size by 1.0 * DecreaseFontSize - Decreases current font size by 1.0 * ResetFontSize - Resets font size to that specified in the configuration. The stock config files have example configuration for each which should match gnome-terminal. For convenience, the config entries are: - { key: Key0, mods: Control, action: ResetFontSize } - { key: Equals, mods: Control, action: IncreaseFontSize } - { key: Subtract, mods: Control, action: DecreaseFontSize }
* Revert "Update glutin & fix a few wayland issues (#815)"Joe Wilm2017-10-06
| | | | | | This reverts commit e17d38167e174a2cf664e430fe968ec6492e1f08. Was breaking builds for mac users.
* Update glutin & fix a few wayland issues (#815)Victor Berger2017-10-06
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This PR fixes a few wayland issues of alacritty (and updates glutin on the process because it is needed). Mainly two changes are done: 1. Add a drawing_ready() method on Window: see https://docs.rs/winit/0.8.2/winit/os/unix/trait.WindowExt.html#tymethod.is_ready for explanations. Hopefully glutin will be able to handle it itself in the future, but it currently does not. 2. resize window and OpenGL contextes. The way wayland forces winit to draw its own decorations and how surface size is defined by its content means that in practice: - winit's window.set_inner_size() defines the dimensions of the borders - glutins gl_window.resize() defines the dimensions of the content (and is a noop in other platforms) It is for now glutin's user responsibility to keep them in sync otherwise borders are drawn stupidly. This PR changes the resize methods of alacritty::Window to always update both. This fixed the borders issues for me, tested on weston.
* Fix #721: touchpad scrolling (#726)Linus Heckemann2017-09-02
|
* Fix panic when resizingJoe Wilm2017-08-21
| | | | | | The selection might have a beginning or end that is outside the bounds after a resize and cause a panic on subsequent draws. Easy solution is to just clear the selection on resize.
* Update to latest Glutin/winit (#671)Joe Wilm2017-07-20
| | | | | | | | | | | * Update to latest Glutin/winit This *finally* gets us off the fork of Glutin we've been on for so long and will unblock a number of other items. Functionality should be the same as before. The update forced our hand on a compiler update. It's no longer feasible to pin on an old version. From now on, we require latest stable.
* Fix unnecessary redraws with active selectionJoe Wilm2017-06-19
| | | | | | | Could be cleaned up a bit if there was a wrapper for Option<Selection> that contained this flag. Also fixes a few compiler warnings.
* Implement semantic and line selection draggingJoe Wilm2017-06-19
| | | | | | Unlike the regular selection that is by cell, these selection modes highlight either semantic groupings or entire lines while the mouse is dragged.
* Implement FocusIn/FocusOut reports (#589)Aaron Hill2017-05-29
| | | | Implements sending FocusIn/FocusOut events, as defined at http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-FocusIn_FocusOut
* Document hide cursor when typing behaviourTuomas Siipola2017-02-22
|
* Fix cursor visibility when window lost focusTuomas Siipola2017-02-22
|
* Set cursor only when its visibility changesTuomas Siipola2017-02-22
|
* Add hide cursor when typing optionTuomas Siipola2017-02-22
|
* Add visual bell supportMark Andrus Roberts2017-02-07
| | | | | | | | | | | | | | | | This commit adds support for a visual bell. Although the Handler in src/ansi.rs warns "Hopefully this is never implemented", I wanted to give it a try. A new config option is added, `visual_bell`, which sets the `duration` and `animation` function of the visual bell. The default `duration` is 150 ms, and the default `animation` is `EaseOutExpo`. To disable the visual bell, set its duration to 0. The visual bell is modeled by VisualBell in src/term/mod.rs. It has a method to ring the bell, `ring`, and another method, `intensity`. Both return the "intensity" of the bell, which ramps down from 1.0 to 0.0 at a rate set by `duration` and `animation`. Whether or not the Processor waits for events is now configurable in order to allow for smooth drawing of the visual bell.
* Semantic SelectionXiaoyu Yin2017-02-07
| | | | | | | | | | | | | | | | | | | | | Fix tests and add line select Refactor BidirectionalIter to remove if blocks Allow for cells tagged with WRAPLINE to continue expanding the selection Reorganize config into structs Add test coverage that callbacks are called Cleanup mouse config - Uses Duration type for ClickHandler::threshold - Removes `action` property from ClickHandler--this can be added in a backwards compatible way later on - Renames ClickState::DblClick to DoubleClick fixup! Cleanup mouse config
* Decouple input processing from TermJoe Wilm2017-02-02
| | | | Should make input processing much more easily tested.
* Use the log-crate instead of printing to stdoutLukas Lueg2017-01-23
|
* print glutin events if --print-events is passedTom Crayford2017-01-08
| | | | | | | | When debugging many issues, it's often very helpful to have the raw glutin events printed out to stderr as they come in. This does that. Note that since `glutin::Event` doesn't implement `Display`, we just use rust's debugging output for now via `{:?}`.
* Clippy fixes!Manish Goregaokar2017-01-06
|
* Fix panic when closing windowJoe Wilm2017-01-06
| | | | Resolves #81.
* Draw the screen when Refresh event arrivesJoe Wilm2017-01-04
| | | | cc #53
* Fix pty read sometimes not triggering drawJoe Wilm2016-12-29
| | | | | | | | | | | 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.
* Fix some bugs with selectionsJoe Wilm2016-12-29
| | | | Moving the window on macOS would cause a panic in certain circumstances.
* Hopefully fix read not triggering drawJoe Wilm2016-12-29
| | | | | | | | 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
* Implement copying selection for macOSJoe Wilm2016-12-26
| | | | Still need automatic loading into selection copy buffer for linux.
* Major cleanup for event handlingJoe Wilm2016-12-26
| | | | | | | | | | | | | | | | | | | | | | 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.
* Refactor input processing to take action contextJoe Wilm2016-12-25
| | | | | | | Various functions take some permutation of the current selection, the terminal, and a notifier. Instead of having to juggle some number of arguments everywhere, the `ActionContext` is constructed and then passed around.
* Implement visual component of mouse selectionsJoe Wilm2016-12-22
| | | | | | 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.
* Remove need for Rc<RefCell<_>> usageJoe Wilm2016-12-12
| | | | | | | 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 :).
* Track terminal cells on mouse movementJoe Wilm2016-12-11
| | | | | | | 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.
* Finish main.rs cleanupJoe Wilm2016-12-11
| | | | | | | | * 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.
* Display manages window, renderer, rasterizerJoe Wilm2016-12-11
| | | | | | | | | | 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.
* Cleaning up main; Added window moduleJoe Wilm2016-12-11
| | | | | | | | 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().
* Support trackpad scrollingJoe Wilm2016-12-11
| | | | Linebased scrolling is still unsupported (need a mouse to test with).
* Support normal mouse tracking modeJoe Wilm2016-12-11
| | | | This allows the user for eg clicking columnts in htop to sort.
* Add support for recording/running ref testsJoe Wilm2016-11-19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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`.
* Make bindings configurable from alacritty.ymlJoe Wilm2016-11-17
| | | | | | | | | | | | | | | 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.
* Redraw screen on focusJoe Wilm2016-11-17
| | | | | Fixes an issue where waking from sleep on macOS would continue showing the lock screen if Alacritty was the active app.
* Fallback to received chars when no bindingsJoe Wilm2016-11-17
| | | | | 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.
* Fix/add some keybindingsJoe Wilm2016-11-11
| | | | | | | Adds support for pageup, pagedown, home, and end. Fixes delete inserting spaces. Resolves #15.
* Rustup and update dependenciesJoe Wilm2016-10-14
| | | | Now uses serde_dervive \o/