aboutsummaryrefslogtreecommitdiff
path: root/alacritty/src/display/content.rs
Commit message (Collapse)AuthorAge
* Merge remote-tracking branch 'vendor/master' into graphicsAyose2025-07-23
|\
| * Migrate to 2024 editionChristian Duerr2025-07-13
| |
| * Fix clippy warningsKirill Chibisov2025-05-28
| |
* | Merge remote-tracking branch 'vendor/master' into graphicsAyose2024-12-26
|\|
| * Fix racing condition in hint triggeringChristian Duerr2024-11-02
| | | | | | | | | | | | | | | | | | | | | | This fixes an issue with hints where it was possible that the terminal content of highlighted hints changed between the highlighted hint update and the activation of the hint. This patch always validates the hint's text content against the hint itself to ensure that the content is still valid for the original hint which triggered the highlight. Closes #8277.
| * Implement multi-char cursor highlightKirill Chibisov2024-10-15
| | | | | | | | | | | | | | | | Use `end` of the cursor to draw a `HollowBlock` from `start` to `end`. When cursor covers only a single character, use `Beam` cursor instead of `HollowBlock`. Fixes #8238. Fixes #7849.
* | Merge remote-tracking branch 'vendor/v0.14' into graphicsAyose2024-10-24
|\ \
| * | Implement multi-char cursor highlightKirill Chibisov2024-10-15
| |/ | | | | | | | | | | | | | | Use `end` of the cursor to draw a `HollowBlock` from `start` to `end`. When cursor covers only a single character, use `Beam` cursor instead of `HollowBlock`. Fixes #8238. Fixes #7849.
* | Merge remote-tracking branch 'vendor/master' into graphicsAyose2024-10-13
|\|
| * Move root config fields to `[general]` sectionChristian Duerr2024-10-02
| | | | | | | | | | | | | | | | | | | | | | Some users struggle with TOML, since root options must always be at the top of the file, since they're otherwise associated with the last table. To avoid misunderstandings, all root-level fields have been removed. A new `general` section was added to allow housing configuration options that do not fit into any more specific groups. Closes #7906.
* | Merge remote-tracking branch 'vendor/master' into graphicsAyose2024-02-11
|\|
| * Remove `alacritty_config` from alacritty_terminalKirill Chibisov2023-11-10
| | | | | | | | | | There's no need to force alacritty's user configuration on other users of the crate, thus provide the options actually used by alacritty_terminal itself.
| * Fix typosPavel Roskin2023-10-25
| |
| * Underline hint matches during selectionChristian Duerr2023-09-22
| | | | | | | | | | | | | | | | | | | | | | This patch underlines the full regex hint match while the keyboard hint selection is in process. While it would be possible to color the entire match, this would only introduce unnecessary configuration options and be too noisy. The underline matches the mouse highlighting and has a less drastic visual impact. Closes #6178.
| * Fix regex memory usageChristian Duerr2023-09-17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This fixes an issue where regexes with a large number of possible states would consume excessive memory, since the entire DFA was compiled ahead of time. To solve this, the DFA is now built at runtime using `regex-automata`'s hybrid DFA. There are however still some checks performed ahead of time, causing errors with obscenely large regexes (`[0-9A-Za-z]{999999999}`), which shouldn't cause any issues. A regex which is large, but not large enough to fail the NFA construction (like `[0-9A-Za-z]{999999}`) will cause a long search of the entire grid, but will complete and show the match. Closes #7097.
| * Apply transparent background colors to "UI" cellsSonu Bardai2023-08-07
| |
| * Remove unnecessary mutable referencesPavel Roskin2023-07-18
| |
| * Switch to TOML configuration formatChristian Duerr2023-06-12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This switches Alacritty's default configuration format from yaml to toml. While yaml is still supported, it is done by converting it to toml and should be removed entirely in the future. All existing features were persisted based on my testing. Behavior should not change much, though `--option` might have slightly different behavior since the entire line is not interpreted as one line of toml. A new `alacritty migrate` subcommand has been added which allows automatic migration from yaml to toml. This also could be used as a facility to automatically fix configuration file changes in the future. Closes #6592.
| * Switch to VTE's built-in ansi featureAnhad Singh2023-05-23
| | | | | | Co-authored-by: Christian Duerr <contact@christianduerr.com>
| * Fix selection rotation on the last lineChristian Duerr2023-03-24
| | | | | | | | | | | | | | | | | | | | | | | | | | This fixes an issue with terminal resizes when the selection is on the last line. Alacritty would fail to rotate lines and keep the selection in the same line index whenever the terminal line count was grown or shrunk. This issue occurred due to the range passed to the selection's rotate function still being based on the old terminal size, which caused the initial or target state of the rotation to be outside of the terminal bounds. Closes #6698.
* | Merge remote-tracking branch 'vendor/master' into graphicsAyose2022-10-16
|\|
| * Add inline input method supportKirill Chibisov2022-08-29
| | | | | | | | | | | | This commit adds support for inline IME handling. It also makes the search bar use underline cursor instead of using '_' character. Fixes #1613.
* | Allow overlapping graphics.Ayose2022-07-13
| | | | | | | | | | | | | | | | | | | | | | | | If a graphic is added over another one, the implementation now checks if new graphic has transparent pixels in every cell. If so, the graphic is appended to the cell, instead of replacing the previous one. SmallVec is used to prevent heap allocation when the cell only contains a single graphic. This should be the most common scenario. The GPU will store up to 100 textures. If another texture is added when there are 100, the oldest one is deleted.
* | Allow replacing part of a graphic with text.Ayose2022-07-12
| | | | | | | | | | | | | | | | | | When text is added to a cell with a reference to a graphic, an operation is sent to the OpenGL thread to replace a subregion of the cell with a transparent area. If the OpenGL driver supports the GL_ARB_clear_texture extension, the region is updated with glClearTexSubImage. If the extension is not available, the texture is updated with glTexSubImage2D.
* | Merge with alacritty/masterAyose2022-07-12
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The merge requires multiple changes in order to be compatible with the last version of Alacritty: - Textures are now always deleted on Drop. This is required because Alacritty now supports multiple windows in the same process, so we can't assume that all resources are freed when a single window is closed. This is the same approach used for the atlas textures. - The graphics feature is only compatible with OpenGL 3.3. Alacritty now supports GLES 2.2, but in order to provide a proper support for it we need a different approach, specific for that version. - Cell dimensions in pixels are re-added to the alacritty_terminal crate.
| * Add support for hyperlink escape sequenceKirill Chibisov2022-07-10
| | | | | | | | | | | | | | This commit adds support for hyperlink escape sequence `OSC 8 ; params ; URI ST`. The configuration option responsible for those is `hints.enabled.hyperlinks`. Fixes #922.
| * Fix Vi cursor not being damaged on scrollKirill Chibisov2022-05-26
| | | | | | | | | | There's no need to damage intermediate Vi mode cursor points, since it can't change the terminal content meaning that only the previous and current vi cursor's viewport points matter to damage it properly.
| * Add colored underline supportKirill Chibisov2022-03-16
| | | | | | | | | | | | | | | | | | This commit adds support for colored underline and refines the dynamic extra storage. The extra storage now is using `Arc` making cloning it way faster compared to `Box` approach which scales really well when it comes to cloning in `Term::write_at_cursor`, since cloning `Arc` is constant time. Fixes #4142.
| * Add support for drawing undercurlsKirill Chibisov2022-02-08
| | | | | | Fixes #1628.
| * Fix renderable_cursor method documentationThomas Churchman2022-02-03
| | | | | | | | | | This method no longer returns an `Option` since #5773. Co-authored-by: Kirill Chibisov <contact@kchibisov.com>
| * Add damage tracking and reporting to compatible compositorsKirill Chibisov2022-02-02
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This allows compositors to only process damaged (that is, updated) regions of our window buffer, which for larger window sizes (think 4k) should significantly reduce compositing workload under compositors that support/honor it, which is good for performance, battery life and lower latency over remote connections like VNC. On Wayland, clients are expected to always report correct damage, so this makes us a good citizen there. It can also aid remote desktop (waypipe, rdp, vnc, ...) and other types of screencopy by having damage bubble up correctly. Fixes #3186.
| * Add parameters to `msg create-window` subcommandKirill Chibisov2021-11-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Alacritty's `msg create-window` subcommand would previously inherit all the CLI parameters from the original executable. However not only could this lead to unexpected behavior, it also prevents multi-window users from making use of parameters like `-e`, `--working-directory`, or `--hold`. This is solved by adding a JSON-based message format to the IPC socket messages which instructs the Alacritty server on which CLI parameters should be used to create the new window. Fixes #5562. Fixes #5561. Fixes #5560.
| * Fix cursor inversion logicChristian Duerr2021-10-22
| | | | | | | | | | | | | | | | | | | | | | | | The existing cursor inversion logic was causing more problems than it solved, without solving the problem of invisible cursor when inverting a cell with matching foreground and background colors. This patch reworks this logic and only inverts the cursor when the foreground and background colors of the cursor are similar and the cursor colors aren't set to fixed RGB values. Fixes #4564. Fixes #5550.
* | Merge remote-tracking branch 'vendor/master' into graphicsAyose2021-09-23
|\|
| * Add option to apply opacity to all background colorsKirill Chibisov2021-08-16
| | | | | | | | | | | | | | In some cases it could be desired to apply 'background_opacity' to all background colors instead of just 'colors.primary.background', thus adding an 'colors.opaque_background_colors' option to control that. Fixes #741.
| * Fix clippy warningsChristian Duerr2021-07-03
| |
* | Merge remote-tracking branch 'vendor/master' into graphicsAyose2021-05-29
|\|
| * Improve rendering performanceChristian Duerr2021-05-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This PR combines a couple of optimizations to drastically reduce the time it takes to gather everything necessary for rendering Alacritty's terminal grid. To help with the iteration over the grid, the `DisplayIter` which made heavy use of dynamic dispatch has been replaced with a simple addition to the `GridIterator` which also had the benefit of making the code a little easier to understand. The hints/search check for each cell was always performing an array lookup before figuring out that the cell is not part of a hint or search. Since the general case is that the cell is neither part of hints or search, they've been wrapped in an `Option` to make verifying their activity a simple `is_some()` check. For some reason the compiler was also struggling with the `cursor` method of the `RenderableContent`. Since the iterator is explicitly drained, the performance took a hit of multiple milliseconds for a single branch. Our implementation does never reach the case where draining the iterator would be necessary, so this sanity check has just been replaced with a `debug_assert`. Overall this has managed to reduce the time it takes to collect all renderable content from ~7-8ms in my large grid test to just ~3-4ms.
| * Use cell colors for focused match CellRgbNathan Lilienthal2021-04-30
| | | | | | | | | | Fixes #5022. Co-authored-by: Christian Duerr <contact@christianduerr.com>
| * Fix cursor expansion across wide charsChristian Duerr2021-04-22
| | | | | | | | | | | | | | | | | | This fixes a regression introduced in 0.7.0 where the block cursor would not expand across both cells anymore when on top of a wide char spacer cell. The logic to always move the cursor on the wide char instead of the spacer has been moved to the alacritty_terminal crate, making sure it is always performed before any processing in the UI.
* | Merge remote-tracking branch 'vendor/master' into graphicsAyose2021-04-18
|\|
| * Fix hint label with start above viewportChristian Duerr2021-04-14
| | | | | | Fixes #4960.
| * Add vi/mouse hint highlighting supportChristian Duerr2021-04-13
| | | | | | | | | | This patch removes the old url highlighting code and replaces it with a new implementation making use of hints as sources for finding matches in the terminal.
* | Merge remote-tracking branch 'vendor/master' into graphicsAyose2021-04-03
|\|
| * Fix focused match selection colorChristian Duerr2021-04-02
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In 3bd5ac221ab3b122962063edd1f4c10f9f2d117f a regression was introduced which caused the selection of a focused match to invert the cell color back to its original color. This was due to the removal of the `is_match` flag on the renderable cell, which was used to make sure a cell is not marked as part of a match if it is already part of a selection. Instead of relying on a flag that is passed through from content.rs, the application of the cell colors is instead done in the content.rs file directly. This not only fixes the bug with selecting the focused match, but also makes the logic a bit more transparent. Fixes #4934.
* | Merge remote-tracking branch 'vendor/master' into tmp1Ayose2021-04-01
|\|
| * Unify the grid line indexing typesChristian Duerr2021-03-30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously Alacritty was using two different ways to reference lines in the terminal. Either a `usize`, or a `Line(usize)`. These indexing systems both served different purposes, but made it difficult to reason about logic involving these systems because of its inconsistency. To resolve this issue, a single new `Line(i32)` type has been introduced. All existing references to lines and points now rely on this definition of a line. The indexing starts at the top of the terminal region with the line 0, which matches the line 1 used by escape sequences. Each line in the history becomes increasingly negative and the bottommost line is equal to the number of visible lines minus one. Having a system which goes into the negatives allows following the escape sequence's indexing system closely, while at the same time making it trivial to implement `Ord` for points. The Alacritty UI crate is the only place which has a different indexing system, since rendering and input puts the zero line at the top of the viewport, rather than the top of the terminal region. All instances which refer to a number of lines/columns instead of just a single Line/Column have also been changed to use a `usize` instead. This way a Line/Column will always refer to a specific place in the grid and no confusion is created by having a count of lines as a possible index into the grid storage.
* | Add Sixel supportAyose2021-03-11
|/ | | | Fixes #910
* Fix vi mode searchChristian Duerr2021-03-06
| | | | | | | | This fixes a regression introduced in a954e07 which caused the vi mode cursor to be invisible after starting a search. This was caused by a discrepancy between the search DFA and search active state, since a search is not active after it has been confirmed but the DFAs are still present for highlighting.
* Add regex terminal hintsChristian Duerr2021-03-01
| | | | | | | | | | | | | | | | This adds support for hints, which allow opening parts of the visual buffer with external programs if they match a certain regex. This is done using a visual overlay triggered on a specified key binding, which then instructs the user which keys they need to press to pass the text to the application. In the future it should be possible to supply some built-in actions for Copy/Pasting the action and using this to launch text when clicking on it with the mouse. But the current implementation should already be useful as-is. Fixes #2792. Fixes #2536.