Commit Graph

103 Commits

Author SHA1 Message Date
Christian Duerr 5d173f6df3
Refactor config parsing files
This is a large refactor of the config parsing structure, attempting to
reduce the size of the file a bit by splitting it up into different
modules with more specific purposes.

This also fixes #2279.
2019-05-10 11:36:16 +00:00
acheronfail e9813031f6 Add fullscreen support
Fixes #34.
Fixes #2012.
2019-04-23 19:05:47 +00:00
Christian Duerr e35796485c
Document URL launcher parameter options
This fixes #2112.
2019-04-09 21:17:22 +00:00
Jerry Yin 090842bd8e Add ScrollLineUp and ScrollLineDown actions for scrolling line by line 2019-04-08 19:50:06 +00:00
Aaron Goodfellow e2eb5bbd2e Add additional key bindings for changing font size
This fixes #2010.
2019-03-15 20:41:48 +00:00
Kirill Chibisov 0b9ae4ce93 Add config option to change selection color 2019-03-12 23:11:32 +00:00
Cole Helbling e240da9ab3 Add option for window position at startup 2019-03-11 12:35:49 +00:00
stfn 9468b50b75 Add additional key bindings 2019-03-02 18:57:07 +00:00
Christian Duerr 153f9257b8
Change shift+pgup/pgdown to scroll history
The default shift+pgup/pgdown buttons were sending the escape sequences
specified by the official standard, however most terminal emulators like
XTerm, URxvt and VTE make an exception for this special case and instead
scroll the native history buffer.

Both XTerm and URxvt do never send the escapes for Shift+PgUp/PgDown,
however VTE does send them in the alternate screen.

Since Alacritty already supports keybindings based on terminal mode and
the binding to scroll the history is useless when in the alternate
screen buffer, Alacritty is now following VTEs behavior here, allowing
applications in the alt screen (like vim) to handle this escape.

Fixes #1989.
2019-02-08 01:46:56 +00:00
Christian Duerr 97e801a73e
Fix macOS config decorations doc 2019-02-04 00:17:57 +00:00
Christian Duerr 20f3198609
Fix regression in the URL launcher config
Due to the merging of configuration files on all platforms, it has been
made impossible to completely disable URL launching without still
executing some kind of program like `true`.

Setting the launcher to `None` in the config, will now disable it
completely.

This fixes #2058.
2019-02-03 16:44:39 +00:00
Christian Duerr 31271c726e
Fix crash on Windows (#2021)
The rusttype backend did not properly support manually specifying font
styles, but instead chose to panic when they are specified.

The rusttype implementation now provides a proper implementation for
handling `bold`, `italic` and `regular` font styles.

This fixes #2020.
2019-01-20 17:39:15 +00:00
Simon Dahlberg 8b15596070 Add config option to send or not send ESC when ALT-key is pressed 2019-01-17 20:42:12 +00:00
Christian Duerr 0d16478f5d
Make all configuration fields optional
All configuration fields now have fallback values which will be used if
the field is not present. This includes mouse, key bindings and platform
specific differences.

The mouse and key bindings are now filled by default, if the user
rebinds a default mapping, it will be overwritten. To unbind a default
binding, it can be mapped to `chars: ""`.

Since all platform differences can now be correctly handled by the
`src/config/mod.rs` code, it's no longer necessary to maintain separate
configuration files, so the `alacritty_macos.yml` and
`alacritty_windows.yml` have been deleted.

Fixes #40.
Fixes #1923.
2019-01-17 09:17:26 +00:00
Morton Fox cf0cece47a Fix config documentation typo 2019-01-11 05:35:45 +00:00
Christian Duerr a38a067992
Fix minor issues in the config documentation 2019-01-07 21:56:55 +00:00
Carlos Tuñón e4dc43e87c Add key/mouse action for spawning new Alacritty instances 2019-01-05 20:47:12 +00:00
Christian Duerr cf9d94eb12
Add color option to visual bell
This adds the option to specify the color of the visual bell using the
`visual_bell.color` configuration setting.

This is done by rendering a big quad over the entire screen, which also
opens up options to draw other arbitrary rectangles on the screen in the
future.
2018-12-17 19:06:07 +00:00
Jonathan Dahan 2ede659134 Add option for launching Alacritty maximized 2018-11-19 21:23:47 +00:00
Christian Duerr 42d8989916
Add keybinding action for clearing warns/errors
Since running `clear` inside of tmux doesn't actually clear any part of
the screen, but just resets the scrolling region, the warning and error
notices can't be removed without quitting tmux or Alacritty.

As a solution, a new action `ClearLogNotice` has been added which has
been bound to Ctrl+L by default. As a result, Ctrl+L can be used inside
of tmux to remove the messages, even though tmux doesn't clear the
screen.

This fixes #1811.
2018-11-19 08:33:48 +00:00
Christian Duerr e429b8dfdd
Remove `scale_with_dpi` setting from config
Since the `scale_with_dpi` setting has been deprecated, but it hasn't
been removed from the config, Alacritty would print an error every time
it is started.

To resolve this problem, the option is removed from the default
configuration file.
2018-11-18 23:05:38 +00:00
Christian Duerr 6265ef91d5
Display errors and warnings
To make sure that all error and information reporting to the user is
unified, all instances of `print!`, `eprint!`, `println!` and
`eprintln!` have been removed and replaced by logging.

When `RUST_LOG` is not specified, the default Alacritty logger now also
prints to both the stderr and a log file. The log file is only created
when a message is written to it and its name is printed to stdout the
first time it is used.

Whenever a warning or an error has been written to the log file/stderr,
a message is now displayed in Alacritty which points to the log file
where the full error is documented.

The message is cleared whenever the screen is cleared using either the
`clear` command or the `Ctrl+L` key binding.

To make sure that log files created by root don't prevent normal users
from interacting with them, the Alacritty log file is `/tmp/Alacritty-$PID.log`.

Since it's still possible that the log file can't be created, the UI
error/warning message now informs the user if the message was only
written to stderr. The reason why it couldn't be created is then printed
to stderr.

To make sure the deletion of the log file at runtime doesn't create any
issues, the file is re-created if a write is attempted without the file
being present.

To help with debugging Alacritty issues, a timestamp and the error
level are printed in all log messages.

All log messages now follow this format:
    [YYYY-MM-DD HH:MM] [LEVEL] Message

Since it's not unusual to spawn a lot of different terminal emulators
without restarting, Alacritty can create a ton of different log files.

To combat this problem, logfiles are removed by default after
Alacritty has been closed. If the user wants to persist the log of a
single session, the `--persistent_logging` option can be used. For
persisting all log files, the `persistent_logging` option can be set in
the configuration file
2018-11-17 14:39:13 +00:00
Christian Duerr d68ecb0def
Add option for dynamic padding (#1780)
This adds the `window.dynamic_padding` option which allows disabling the
dynamic spread of additional padding around the grid's content.

Based on the feedback I've gotten so far and the fact that most other
terminal emulators do not seem to center the content inside themselves,
I've changed the default configuration option to disable centering of the grid.

This fixes #1778.
2018-11-15 19:57:15 +00:00
Christian Duerr d05d16f023
Fix incorrect padding calculations
The extra window padding was calculated in the renderer which lead to
problems with the paddings calculated in the `src/display.rs` and
`src/term/mod.rs`.

As a solution, every instance of `config.padding().x/y` has been removed
from the renderer (`src/renderer/mod.rs`), instead the padding is always
passed through from the `src/display.rs`.

The initial calculations during display creation and after resize then
are scaled appropriately and then the extra padding is calculated. As a
result every other location can just make use of the correctly
calculated `size_info.padding_x` and `size_info.padding_y`.

The documentation has been changed to clearly state that the padding is
scaled by DPI now.

This fixes #1773.
2018-11-12 18:23:23 +00:00
Christian Duerr a7d9554038
Rework cursor configuration
There are a couple of cursor-related options in the Alacritty config
file now, however they aren't grouped together in any way.

To resolve this a new `cursor` field has been added where all cursor
configuration options (besides colors) have been moved.

The `custom_cursor_colors` option has also been removed, since it's not
necessary anymore. Simply making the `colors.cursor.*` fields optional,
allows overriding the cursor colors whenever one of them is present.
Like that the user doesn't have to think about a relation between two
separate configuration options.

This PR initially put the `hide_cursor_when_typing` variable under
`cursor.hide_when_typing`. However this field is completely unrelated to
the cursor, but instead relates to the mouse cursor.

Since the word `cursor` is already used for the active cell in the grid
of a terminal emulator, all occurences of the word `cursor` when talking
about the mouse have been replaced with the word `mouse`.

The configuration option has also been moved to
`mouse.hide_when_typing`, to make it clear what this option is changing.

This fixes #1080.
2018-11-01 17:23:49 +00:00
Christian Duerr cc1ad49172
Update Windows configuration file
The Windows configuration file was outdated compared to the other
configuration files, since there were some major changes to the config
during the development of the Windows PR.

All changes between the Linux and Windows configuration file have been
removed, preserving platform-specific configuration defaults that were
intentionally changed.

Some minor changes have also been made to the Linux and macOS
configuration files, since there were some inconsistencies left.

This fixes #1692.
2018-10-30 19:04:03 +00:00
Zac Pullar-Strecker 6c7308099f Revert "Update Windows configuration file"
This reverts commit a9e03f1ae0.
2018-10-30 17:05:24 +13:00
Christian Duerr a9e03f1ae0
Update Windows configuration file
The Windows configuration file was outdated compared to the other
configuration files, since there were some major changes to the config
during the development of the Windows PR.

All changes between the Linux and Windows configuration file have been
removed, preserving platform-specific configuration defaults that were
intentionally changed.

Some minor changes have also been made to the Linux and macOS
configuration files, since there were some inconsistencies left.

This fixes #1692.
2018-10-29 19:47:41 +00:00
Christian Duerr 8ee0d2b5b2
Add option to open URLs on click
This adds the option to automatically launch URLs with a specified
program when clicking on them.

The config option `mouse.url_launcher` has been added to specify which
program should be used to open the URL. The URL is always passed as the
last parameter to the specified command.

It is not always desired for URLs to open automatically when clicking on
them. To resolve this a new `modifiers` field has been introduced to the
config, which allows specifying which keyboard modifiers need to be held
down to launch URLs in the specified launcher.

Some tests have been added to make sure that the edge-cases of the URL
parsing are protected against future regressions. To make testing easier
the parsing method has been moved into the `SemanticSearch` trait. The
name of the trait has also been changed to just `Search` and it has been
moved to `src/term/mod.rs` to fit the additional functionality.

This fixes #113.
2018-10-22 19:39:26 +00:00
Christian Duerr a727801f60
Allow the usage of scancodes in the config
This change should allow the usage of scancodes in the configuration
file.

When a VirtualKeyCode for glutin is not present, this should now allow
the user to use the scancodes instead. If the user specifiecs a key with
its scancode even though the key has a VirtualKeyCode, it should still
work.

The behavior of directly specifying a VirtualKeyCode should be unchanged
by this.

This fixes #1265.
2018-10-16 18:46:26 +00:00
Christian Duerr 36920fb071
Fix invalid default config
Serde has problems deserializing yaml files which contain sections
without any values. Since the `TERM` setting has been removed recently,
the `env` section was completely empty leading to deserialization
errors.

To resolve this the `env` section has been commented-out by default, if
the user wants to set a variable, it is now necessary to uncomment that
section.

Some minor tweaks have also been made to the existing `TERM` comments,
to clearly indicate these are value examples instead of comments.
2018-10-07 18:40:58 +00:00
Tobias Sette 64a7ca60f5 Add additional documentation to "background_opacity" option 2018-10-03 11:29:37 +00:00
Daniel Eklöf ec3a80427b Add standalone terminfo definition
This replaces the current definitions, which depend on the system's
'xterm-256color' terminfo definition with the `alacritty` and
`alacritty-direct` definitions.

The new definitions are completely standalone.

The default `TERM` value has been changed to be dynamically
set based on the definitions installed on the system. Alacritty will
try to use the `alacritty` definition first and fall back to
`xterm-256color` if the `alacritty` definition is not present.
2018-09-24 19:06:12 +00:00
Gris Ge a752066bfa Allow copying selection to primary clipboard
A new configuration option `save_to_clipboard` has been added
to the `selection` section of the configuration. This allows writing
every selection to the primary system clipboard when it is set
to `true`.

On linux the selection is still written to the selection clipboard,
independent of the value of the `save_to_clipboard` setting.
2018-09-24 12:12:45 +00:00
Christian Duerr cd79680ba2
Implement config option for term colors 16..256
This adds a config option which allows setting terminal colors above the
0..16 range.

Live config reload already works for this, so it is possible to change
these colors the same way it works with the normal colors.

If a color below 16 is specified, the configuration will throw an error,
so the normal colors can't be overridden. This is just to prevent
possible complications with the settings that already exist.
2018-09-23 23:05:15 +00:00
Christian Duerr cee35b309d
Unify configuration file structure
This changes a lot of small details in the configuration file in an
attempt to unify its structure. These are some main guidelines used for
this refactoring:
    - Specify that changes require restart consistently
    - Unify the specification of available field values
    - Provide clear distinction between description title and body

Besides these guidelines used to unify minor details in the
configuration file, the section on key configuration has been completely
reworked in an attempt to reduce the amount of text used. This should
make it possible to understand what's going on without having to read
any text.

The notice that modifiers are not supported has been removed from the
mouse binding documentation.
2018-09-22 02:46:41 +00:00
Joe Moon 3b46859ece Improve window.decorations options: (#1241)
The decorations config was changed from a bool to an enum.
`full` has taken the place of `true`, and `none`, has replaced `false`.

On macOS, there are now options for `transparent` and `buttonless`.
These options are explained in both the CHANGELOG and in the
configuration files.
2018-09-20 08:24:26 -07:00
Daniel Eklöf 05d40a8adc Mention required terminfo update when changing tabspaces
Changing tabspaces from the default (8) requires a corresponding
update to the `it` item in the terminfo entry used.

Some applications, like Emacs, rely on knowing the width of a tab, and
will experience unexpected behavior if the terminfo data does not
match the actual width used.
2018-09-18 20:20:59 +00:00
Christian Duerr c4a0f9c4cb
Merge master into scrollback
* Allow disabling DPI scaling

This makes it possible to disable DPI scaling completely, instead the
the display pixel ration will always be fixed to 1.0.

By default nothing has changed and DPI is still enabled, this just seems
like a better way than running `WINIT_HIDPI_FACTOR=1.0 alacritty` every
time the user wants to start alacritty.

It would be possible to allow specifying any DPR, however I've decided
against this since I'd assume it's a very rare usecase. It's also still
possible to make use of `WINIT_HIDPI_FACTOR` to do this on X11.

Currently this is not updated at runtime using the live config update,
there is not really much of a technical limitation why this woudn't be
possible, however a solution for that issue should be first added in
jwilm/alacritty#1346, once a system is established for changing DPI at
runtime, porting that functionality to this PR should be simple.

* Add working --class and --title CLI parameters

* Reduce Increase-/DecreaseFontSize step to 0.5

Until now the Increase-/DecreaseFontSize keybinds hand a step size of 1.0. Since the font size however is multiplied by two to allow more granular font size control, this lead to the bindings skipping one font size (incrementing/decrementing by +-2).

To fix this the step size of the Increase-/DecreaseFontSize bindings has been reduced to the minimum step size that exists with the current font configuration (0.5). This should allow users to increment and decrement the font size by a single point instead of two.

This also adds a few tests to make sure the methods for increasing/decreasing/resetting font size work properly.

* Add Copy/Cut/Paste keys

This just adds support for the Copy/Cut/Paste keys and sets up
Copy/Paste as alternative defaults for Ctrl+Shift+C/V.

* Move to cargo clippy

Using clippy as a library has been deprecated, instead the `cargo
clippy` command should be used instead. To comply with this change
clippy has been removed from the `Cargo.toml` and is now installed with
cargo when building in CI.

This has also lead to a few new clippy issues to show up, this includes
everything in the `font` subdirectory. This has been fixed and `font`
should now be covered by clippy CI too.

This also upgrades all dependencies, as a result this fixes #1341 and
this fixes #1344.

* Override dynamic_title when --title is specified

* Change green implementation to use the macro

* Ignore mouse input if window is unfocused

* Make compilation of binary a phony target

* Add opensuse zypper install method to readme

* Fix clippy issues

* Update manpage to document all CLI options

The introduction of `--class` has added a flag to the CLI without adding
it to the manpage. This has been fixed by updating the manpage.

This also adds the default values of `--class` and `--title` to the CLI
options.

* Remove unnecessary clippy lint annotations

We moved to "cargo clippy" in 5ba34d4f97 and
removing the clippy lint annotations in `src/lib.rs` does not cause any additional warnings.

This also changes `cargo clippy` to use the flags required for checking integration tests.

* Enable clippy in font/copypasta crates

Enabled clippy in the sub-crates font and copypasta. All issues
that were discovered by this change have also been fixed.

* Remove outdated comment about NixOS

* Replace debug asserts with static_assertions

To check that transmutes will work correctly without having to rely on
error-prone runtime checking, the `static_assertions` crate has been
introduced. This allows comparing the size of types at compile time,
preventing potentially silent breakage.

This fixes #1417.

* Add `cargo deb` build instructions

Updated the `Cargo.toml` file and added a `package.metadata.deb`
subsection to define how to build a debian "deb" install file using
`cargo deb`. This will allow debian/ubuntu users to install `alacritty`
using their system's package manager. It also will make it easier to
provide pre-built binaries for those systems.

Also fixed a stray debug line in the bash autocomplete script that was
writting to a tempfile.

* Add config for unfocused window cursor change

* Add support for cursor shape escape sequence

* Add bright foreground color option

It was requested in jwilm/alacritty#825 that it should be possible to
add an optional bright foreground color.

This is now added to the primary colors structure and allows the user to
set a foreground color for bold normal text. This has no effect unless
the draw_bold_text_with_bright_colors option is also enabled.

If the color is not specified, the bright foreground color will fall
back to the normal foreground color.

This fixes #825.

* Fix clone URL in deb install instructions

* Fix 'cargo-deb' desktop file name

* Remove redundant dependency from deb build

* Switch from deprecated `std::env::home_dir` to `dirs::home_dir`

* Allow specifying modifiers for mouse bindings

* Send newline with NumpadEnter

* Add support for LCD-V pixel mode

* Add binding action for hiding the window

* Switch to rustup clippy component

* Add optional dim foreground color

Add optional color for the dim foreground (`\e[2m;`)
Defaults to 2/3 of the foreground color. (same as other colors).

If a bright color is dimmed, it's displayed as the normal color. The
exception for this is when the bright foreground is dimmed when no
bright foreground color is set. In that case it's treated as a normal
foreground color and dimmed to DimForeground.

To minimize the surprise for the user, the bright and dim colors have
been completely removed from the default configuration file.
Some documentation has also been added to make it clear to users what
these options can be used for.

This fixes #1448.

* Fix clippy lints and run font tests on travis

This fixes some existing clippy issues and runs the `font` tests through travis.

Testing of copypasta crate was omitted due to problens when running on headless travis-ci environment (x11 clipboard would fail).

* Ignore errors when logger can't write to output

The (e)print macro will panic when there is no output available to
write to, however in our scenario where we only log user errors to
stderr, the better choice would be to ignore when writing to stdout or
stderr is not possible.

This changes the (e)print macro to make use of `write` and ignore
any potential errors.

Since (e)println rely on (e)print, this also solves potential failuers
when calling (e)println.

With this change implemented, all of logging, (e)println and (e)print
should never fail even if the stdout/stderr is not available.
2018-07-28 23:10:13 +00:00
Christian Duerr f50ca1a54c
Scrollback cleanup
There were some unneeded codeblocks and TODO/XXX comments in the code
that have been removed. All issues marked with TODO/XXX have either been
already resolved or tracking issues exist.
2018-07-21 17:17:41 +00:00
Christian Duerr 688cabefc0 Rework auto-scrolling options
This changes two things, the first thing it does is that now whenever a
keybinding sends an escape sequence, the viewport is automatically
scrolled to the bottom.
This is enabled by default and fixes #1187.

The second thing is automatic scrolling when a command writes to the
terminal. So when running a command like `sleep 3; ls -lah`, alacritty
will scroll to the bottom once the output is sent, even if the viewport
is currently not at the bottom of the scrollback.
Because this can have an impact on performance, and is not enabled by
default in terminals like iTerm or Termite (VTE), it is an opt-in
setting in the config.
2018-06-02 09:56:50 -07:00
Christian Duerr 2c7bb9a4d3 Add scrollback hotkeys
This offers a few additional hotkeys that can be used in combination
with scrollback. None of these are used by default yet.

This implements the following bindings:
 - ScrollPageUp: Scroll exactly one screen height up
 - ScrollPageDown: Scroll exactly one screen height down
 - ScrollToTop: Scroll as far up as possible
 - ScrollToBottom: Scroll as far down as possible

This fixes #1151.
2018-06-02 09:56:50 -07:00
Christian Duerr a238e9ac58 Fix linux config default value 2018-06-02 09:46:20 -07:00
Christian Duerr d3f64072f3 Merge branch #1095
Because there was some overlap with branch #1095, these two PRs have
been added together and the config has been restructured to make use of
a `scrolling` section.

The default faux scrolling amount has also been changed to `3` because
this simplifies the code and falls in line with what most other terminal
emulators do.

There should be no additional test failures due to this.
2018-06-02 09:44:58 -07:00
Christian Duerr a2f127a5e6 Change config file to display the correct default 2018-06-02 09:44:58 -07:00
Christian Duerr dab0eca4a7 Make normal scrolling line amount configurable
It is now possible to configure the amount of lines the viewport should
scroll when using the normal scrolling mode.

This fixes #1160.
2018-06-02 09:44:58 -07:00
Joe Wilm c49a7e88f6 Make number of scrollback lines configurable 2018-06-02 09:32:29 -07:00
Christian Duerr b9ad0cfad3 Prevent negative cell dimensions (#1181)
Prevent the cell dimensions from going below 1, this bug resulted in
allocation of large amounts of memory in the scrollback PR but is also
present on master.

Currently the approach is to just `panic!`, however an `eprintln!` and
`exit` could be an alternative too. I don't think it's realistic to
check this at startup and it should have no performance impact since the
failing method is only called once at startup.

To make it a bit more clear what kind of values are accepted, the
datatypes of offsets and paddings have also been changed so that these
don't accept floats anymore and padding can never be negative.

This should allow us to be a bit more strict with the config to make
sure that errors are printed when invalid values are specified (like
negative padding).

This fixes #1167.
2018-03-12 23:07:40 -07:00
Christian Duerr f6839a8794
Expand key binding config documentation
A link to all variants available as `key` has been added to the key
bindings documentation, to help users with finding the right place
for mapping key codes.
2018-01-10 18:36:34 +00:00
Christian Duerr b01dc062c7 Address feedback
The config documentation has been changed to make it clear which part of
the documentation is related to which setting.

The faux scrollback part of the `scroll_terminal` method has been
cleaned up by making use of the fact that the `codepoint + 1` can be
used in the escape sequence which is used for scrolling.
2018-01-02 08:24:03 -08:00