Giter VIP home page Giter VIP logo

crossfont's Introduction

Alacritty Logo

Alacritty - A fast, cross-platform, OpenGL terminal emulator

Alacritty - A fast, cross-platform, OpenGL terminal emulator

About

Alacritty is a modern terminal emulator that comes with sensible defaults, but allows for extensive configuration. By integrating with other applications, rather than reimplementing their functionality, it manages to provide a flexible set of features with high performance. The supported platforms currently consist of BSD, Linux, macOS and Windows.

The software is considered to be at a beta level of readiness; there are a few missing features and bugs to be fixed, but it is already used by many as a daily driver.

Precompiled binaries are available from the GitHub releases page.

Join #alacritty on libera.chat if you have questions or looking for a quick help.

Features

You can find an overview over the features available in Alacritty here.

Further information

Installation

Alacritty can be installed by using various package managers on Linux, BSD, macOS and Windows.

Prebuilt binaries for macOS and Windows can also be downloaded from the GitHub releases page.

For everyone else, the detailed instructions to install Alacritty can be found here.

Requirements

  • At least OpenGL ES 2.0
  • [Windows] ConPTY support (Windows 10 version 1809 or higher)

Configuration

You can find the documentation for Alacritty's configuration in man 5 alacritty, or by looking at the website if you do not have the manpages installed.

Alacritty doesn't create the config file for you, but it looks for one in the following locations:

  1. $XDG_CONFIG_HOME/alacritty/alacritty.toml
  2. $XDG_CONFIG_HOME/alacritty.toml
  3. $HOME/.config/alacritty/alacritty.toml
  4. $HOME/.alacritty.toml

On Windows, the config file will be looked for in:

  • %APPDATA%\alacritty\alacritty.toml

Contributing

A guideline about contributing to Alacritty can be found in the CONTRIBUTING.md file.

FAQ

Is it really the fastest terminal emulator?

Benchmarking terminal emulators is complicated. Alacritty uses vtebench to quantify terminal emulator throughput and manages to consistently score better than the competition using it. If you have found an example where this is not the case, please report a bug.

Other aspects like latency or framerate and frame consistency are more difficult to quantify. Some terminal emulators also intentionally slow down to save resources, which might be preferred by some users.

If you have doubts about Alacritty's performance or usability, the best way to quantify terminal emulators is always to test them with your specific usecases.

Why isn't feature X implemented?

Alacritty has many great features, but not every feature from every other terminal. This could be for a number of reasons, but sometimes it's just not a good fit for Alacritty. This means you won't find things like tabs or splits (which are best left to a window manager or terminal multiplexer) nor niceties like a GUI config editor.

License

Alacritty is released under the Apache License, Version 2.0.

crossfont's People

Contributors

a5ob7r avatar chrisduerr avatar chrisnc avatar dorianrudolph avatar erikolofsson avatar kchibisov avatar pablomarcendo avatar returntrip avatar vbauerster avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

crossfont's Issues

use_thin_strokes has no effect on macOS 12

This is the changes that make it work
alacritty/alacritty#4616 (comment)

without this change, use_thin_strokes does nothing on macOS 12

can you merge this?

ben@BeniMac2020 crossfont % git diff
diff --git a/src/darwin/mod.rs b/src/darwin/mod.rs
index aded7a7..9a0f84f 100644
--- a/src/darwin/mod.rs
+++ b/src/darwin/mod.rs
@@ -445,10 +445,13 @@ impl Font {
 
         if use_thin_strokes {
             cg_context.set_font_smoothing_style(16);
+            cg_context.set_allows_font_smoothing(false);
+            cg_context.set_should_smooth_fonts(false);
+        } else {
+            cg_context.set_allows_font_smoothing(true);
+            cg_context.set_should_smooth_fonts(true);
         }
 
-        cg_context.set_allows_font_smoothing(true);
-        cg_context.set_should_smooth_fonts(true);
         cg_context.set_allows_font_subpixel_quantization(true);
         cg_context.set_should_subpixel_quantize_fonts(true);
         cg_context.set_allows_font_subpixel_positioning(true);

Confused about text layout

How should I lay out a line of arbitrary text using crossfont? I’m a bit confused about how best to combine width and left. Is this algorithm roughly correct?

let mut x = 0;

for character in text_to_render.chars() {
    let glyph = rasterizer
        .get_glyph(GlyphKey {
            character,
            font_key,
            size,
        })
        .unwrap();

    draw_bitmap_at_pos(glyph, (x, -glyph.top));

    x += glyph.width + glyph.left;
}

Should the actual position of each glyph on the screen be x + glyph.left instead of just x as I have it here?

The algorithm above doesn’t work with any of the monospace fonts I’ve tried; rather than all characters being the same width, characters that would usually have extra space around them just don’t have that space, making them a narrower width than all the other characters.

Note how the six .s take up less space than the six ms, when they should be the same width:

Screen Shot 2021-03-14 at 12 31 38 pm

In case it matters, I’m running on macOS 11.2.2.

Primary font ignores the fontconfig's charset property.

I reported an issue several days ago. Maybe at that time I didn't make myself clear. I guess that the following source blocks cause this issue.

In src/ft/mod.rs :
In my case, the function load_face_with_glyph(...) has never been called. Because in face_for_glyph(...), it always returns early inside the 'if let' block.

In the get_face(...) function, the 'coverage' of the 'Fallbacklist' struct doesn't include the charset of the primary font. So setting the charset property of the first matched font (the primary font) in fonts.conf doesn't work if no fallback is happened.

Turned off font smoothing is not detected correctly on macOS

I was trying to figure out why my font rendering looked incorrect in Alacritty and I finally traced it to the way i set the font smoothing:

defaults -currentHost write -g AppleFontSmoothing 0

I have been doing this for years, and it seems apple allows a string as well as an integer for this.

While I have fixed my problem by storing the value as an integer it might be useful to fix the detection to work the same as in macOS?

Tested fix:
erikolofsson@2844bc8

Panic while redering space in NotoSans-Regular

I've been thorugh a a bit of a rabbit hole today because of a segfault in freetype-rs. After reading logs and stack traces, it is caused by this crate using a way too low version of freetype-rs. From what I have gathered, the issue happens with some characters that are blanks.

This is because Face::load_glyph can populate the slot with valid information, but no bitmap buffer, leaving it empty. However, in C, an empty slice is represented as (null, 0) but this is invalid in rust, causing a panic when trying to load it in crossfont. Here's the offending code: link.

This issue was fixed in this commit, and later released as version 30.1.

Related issue: #44

minimal-versions: freetype-rs dependency is too low

Compiling crossfont with -Z minimal-versions fails with:

error[E0425]: cannot find function, tuple struct or tuple variant `FT_Set_Default_Properties` in crate `freetype_sys`
   --> /home/drakulix/.cargo/registry/src/github.com-1ecc6299db9ec823/crossfont-0.4.0/src/ft/mod.rs:674:27
    |
674 |             freetype_sys::FT_Set_Default_Properties(library.raw());
    |                           ^^^^^^^^^^^^^^^^^^^^^^^^^ not found in `freetype_sys`

I assume crossfont needs a higher freetype-rs version than the minimum specified in the Cargo.toml, because running cargo update -p freetype-sys fixes the error.

Alacritty ignores fontconfig minus charset option

What I did

Fontconfig file located in /etc/fonts/conf.d/10-juliamono-remove-gear-symbol.conf to remove the icon that I don't like because the gear icon is what I want from another fontconfig file located in /etc/fonts/conf.d/10-nerd-font-symbols.conf.

/etc/fonts/conf.d/10-juliamono-remove-gear-symbol.conf
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
 <match target="scan">
    <test name="family" compare="contains">
      <string>JuliaMono</string>
    </test>
    <edit name="charset" mode="assign" binding="same">
      <minus>
        <name>charset</name>
        <charset>
          <range>
            <int>0xe611</int> <!---->
            <int>0xe615</int> <!---->
          </range>
        </charset>
      </minus>
    </edit>
  </match>
</fontconfig>
/etc/fonts/conf.d/10-nerd-font-symbols.conf Relevant lines:
    <family>JuliaMono,JuliaMono SemiBold</family>
    <prefer><family>Symbols Nerd Font</family></prefer>
  </alias>   
  <alias>
    <family>JuliaMono,JuliaMono SemiBoldItalic</family>
    <prefer><family>Symbols Nerd Font</family></prefer>
  </alias>  
  <alias>
    <family>JuliaMono,JuliaMono RegularItalic</family>
    <prefer><family>Symbols Nerd Font</family></prefer>
  </alias>
  <alias>
    <family>JuliaMono,JuliaMono LightItalic</family>
    <prefer><family>Symbols Nerd Font</family></prefer>
  </alias>
  <alias>
    <family>JuliaMono,JuliaMono Light</family>
    <prefer><family>Symbols Nerd Font</family></prefer>
  </alias>
  <alias>
    <family>JuliaMono,JuliaMono MediumItalic</family>
    <prefer><family>Symbols Nerd Font</family></prefer>
  </alias>
  <alias>
    <family>JuliaMono,JuliaMono Medium</family>
    <prefer><family>Symbols Nerd Font</family></prefer>
  </alias>
  <alias>
    <family>JuliaMono,JuliaMono Bold</family>
    <prefer><family>Symbols Nerd Font</family></prefer>
  </alias>   <alias>
    <family>JuliaMono,JuliaMono BoldItalic</family>
    <prefer><family>Symbols Nerd Font</family></prefer>
  </alias>
  <alias>
    <family>JuliaMono,JuliaMono ExtraBold</family>
    <prefer><family>Symbols Nerd Font</family></prefer>
  </alias>   <alias>
    <family>JuliaMono,JuliaMono ExtraBoldItalic</family>
    <prefer><family>Symbols Nerd Font</family></prefer>
  </alias>   <alias>
    <family>JuliaMono</family>
    <prefer><family>Symbols Nerd Font</family></prefer>

What is expected

Alacritty is expected to show the gear icon from the Symbols Nerd Font from my fontconfig


What happened

Alacritty is showing the icon from JuliaMono instead even if I explicitly did the minus-charset option to force font-fallback to Symbols Nerd Font.

Comparing another terminal

To check if another terminal respects the fontconfig I have, I use foot.

Tried to experiment with `foot` terminal to compare it with `alacritty`

As you can see in the screenshot below, alacritty (left) did not seem to respect the minus-charset option I have but foot (right) did. Thus, the gear icon from Symbols Nerd Font shows correctly in foot.

image

Alacritty Config

# Configuration for Alacritty, the GPU enhanced terminal emulator.


# Any items in the `env` entry below will be added as
# environment variables. Some entries may override variables
# set by alacritty itself.
env:
  # TERM variable
  #
  # This value is used to set the `$TERM` environment variable for
  # each instance of Alacritty. If it is not present, alacritty will
  # check the local terminfo database and use 'alacritty' if it is
  # available, otherwise 'xterm-256color' is used.
  #
  TERM: alacritty
  WINIT_HIDPI_FACTOR: "0"

window:
  opacity: 0.98
  # Window dimensions (changes require restart)
  #
  # Specified in number of columns/lines, not pixels.
  # If both are `0`, this setting is ignored.
  dimensions:
    columns: 85
    lines: 28

  # Window padding (changes require restart)
  #
  # Blank space added around the window in pixels. This padding is scaled
  # by DPI and the specified value is always added at both opposing sides.
  padding:
    x: 8
    y: 8

  # Spread additional padding evenly around the terminal content.
  dynamic_padding: false

  # Window decorations
  #
  # Values for `decorations`:
  #     - full: Borders and title bar
  #     - none: Neither borders nor title bar
  # decorations: none
  # Window title
  #title: Alacritty

  # Window class (Linux only):
  #class: Alacritty

scrolling:
  # Maximum number of lines in the scrollback buffer.
  # Specifying '0' will disable scrolling.
  history: 100000

  # Number of lines the viewport will move for every line scrolled when
  # scrollback is enabled (history > 0).
  multiplier: 3

  # Faux Scrolling
  #
  # The `faux_multiplier` setting controls the number of lines the terminal
  # should scroll when the alternate screen buffer is active. This is used
  # to allow mouse scrolling for applications like `man`.
  #
  # Specifying `0` will disable faux scrolling.
  #faux_multiplier: 3

  # Scroll to the bottom when new text is written to the terminal.
  # auto_scroll: false

# Spaces per Tab (changes require restart)
#
# This setting defines the width of a tab in cells.
#
# Some applications, like Emacs, rely on knowing about the width of a tab.
# To prevent unexpected behavior in these applications, it's also required to
# change the `it` value in terminfo when altering this setting.
# tabspaces: 8

# Font configuration (changes require restart)
font:
  # Normal (roman) font face
  normal:
    family: JuliaMono
    # The `style` can be specified to pick a specific face.
    style: Regular

  # Bold font face
  bold:
    family: JuliaMono
    # The `style` can be specified to pick a specific face.
    style: Bold

  # Italic font face
  italic:
    family: JuliaMono
    # The `style` can be specified to pick a specific face.
    style: Italic

  bold_italic:
    family: JuliaMono
    # The `style` can be specified to pick a specific face.
    style: BoldItalic

  # Point size
  size: 10

  # Offset is the extra space around each character. `offset.y` can be thought of
  # as modifying the line spacing, and `offset.x` as modifying the letter spacing.
  offset:
    x: 0
    y: 0

  # Glyph offset determines the locations of the glyphs within their cells with
  # the default being at the bottom. Increasing `x` moves the glyph to the right,
  # increasing `y` moves the glyph upwards.
  glyph_offset:
    x: 0
    y: 0



# # Base16 PaperColor Light - alacritty color config
# # Jon Leopard (http://github.com/jonleopard) based on PaperColor Theme (https://github.com/NLKNguyen/papercolor-theme)
# colors:
#   # Default colors
#   primary:
#     background: '0xffffff'
#     foreground: '0x373b41'

#   # Colors the cursor will use if `custom_cursor_colors` is true
#   cursor:
#     text: '0xeeeeee'
#     cursor: '0x444444'

#   # Normal colors
#   normal:
#     black:   '0x444444'
#     red:     '0xaf0000'
#     green:   '0x5f8700'
#     yellow:  '0xd75f00'
#     blue:    '0x005f87'
#     magenta: '0xd70087'
#     cyan:    '0x0087af'
#     white:   '0xbcbcbc'

#   # Bright colors
#   bright:
#     black:   '0x444444'
#     red:     '0xd70000'
#     green:   '0x008700'
#     yellow:  '0xd75f00'
#     blue:    '0x005faf'
#     magenta: '0xbcbcbc'
#     cyan:    '0x444444'
#     white:   '0xbcbcbc'


colors:
    primary:
        background: "#1E1E2E" # base
        foreground: "#CDD6F4" # text
        # Bright and dim foreground colors
        dim_foreground: "#CDD6F4" # text
        bright_foreground: "#CDD6F4" # text

    # Cursor colors
    cursor:
        text: "#1E1E2E" # base
        cursor: "#F5E0DC" # rosewater
    vi_mode_cursor:
        text: "#1E1E2E" # base
        cursor: "#B4BEFE" # lavender

    # Search colors
    search:
        matches:
            foreground: "#1E1E2E" # base
            background: "#A6ADC8" # subtext0
        focused_match:
            foreground: "#1E1E2E" # base
            background: "#A6E3A1" # green
        footer_bar:
            foreground: "#1E1E2E" # base
            background: "#A6ADC8" # subtext0

    # Keyboard regex hints
    hints:
        start:
            foreground: "#1E1E2E" # base
            background: "#F9E2AF" # yellow
        end:
            foreground: "#1E1E2E" # base
            background: "#A6ADC8" # subtext0

    # Selection colors
    selection:
        text: "#1E1E2E" # base
        background: "#F5E0DC" # rosewater

    # Normal colors
    normal:
        black: "#45475A" # surface1
        red: "#F38BA8" # red
        green: "#A6E3A1" # green
        yellow: "#F9E2AF" # yellow
        blue: "#89B4FA" # blue
        magenta: "#F5C2E7" # pink
        cyan: "#94E2D5" # teal
        white: "#BAC2DE" # subtext1

    # Bright colors
    bright:
        black: "#585B70" # surface2
        red: "#F38BA8" # red
        green: "#A6E3A1" # green
        yellow: "#F9E2AF" # yellow
        blue: "#89B4FA" # blue
        magenta: "#F5C2E7" # pink
        cyan: "#94E2D5" # teal
        white: "#A6ADC8" # subtext0

    # Dim colors
    dim:
        black: "#45475A" # surface1
        red: "#F38BA8" # red
        green: "#A6E3A1" # green
        yellow: "#F9E2AF" # yellow
        blue: "#89B4FA" # blue
        magenta: "#F5C2E7" # pink
        cyan: "#94E2D5" # teal
        white: "#BAC2DE" # subtext1

    indexed_colors:
        - { index: 16, color: "#FAB387" }
        - { index: 17, color: "#F5E0DC" }




# ...

# Visual Bell
# ...


# Visual Bell
#
# Any time the BEL code is received, Alacritty "rings" the visual bell. Once
# rung, the terminal background will be set to white and transition back to the
# default background color. You can control the rate of this transition by
# setting the `duration` property (represented in milliseconds). You can also
# configure the transition function by setting the `animation` property.
#
# Values for `animation`:
#   - Ease
#   - EaseOut
#   - EaseOutSine
#   - EaseOutQuad
#   - EaseOutCubic
#   - EaseOutQuart
#   - EaseOutQuint
#   - EaseOutExpo
#   - EaseOutCirc
#   - Linear
#
# Specifying a `duration` of `0` will disable the visual bell.
bell:
  animation: EaseOutExpo
  duration: 1
  color: '0xffffff'

# Background opacity
#
# Window opacity as a floating point number from `0.0` to `1.0`.
# The value `0.0` is completely transparent and `1.0` is opaque.

# Mouse bindings
#
# Available fields:
#   - mouse
#   - action
#   - mods (optional)
#
# Values for `mouse`:
#   - Middle
#   - Left
#   - Right
#   - Numeric identifier such as `5`
#
# All available `mods` and `action` values are documented in the key binding
# section.
mouse_bindings:
  - { mouse: Middle, action: PasteSelection }

mouse:
  # Click settings
  #
  # The `double_click` and `triple_click` settings control the time
  # alacritty should wait for accepting multiple clicks as one double
  # or triple click.
  double_click: { threshold: 300 }
  triple_click: { threshold: 300 }
  hide_when_typing: false

  hints:
    # URL launcher
    #
    # This program is executed when clicking on a text which is recognized as a URL.
    # The URL is always added to the command as the last parameter.
    #
    # When set to `None`, URL launching will be disabled completely.
    #
    # Default:
    #   - (macOS) open
    #   - (Linux) xdg-open
    #   - (Windows) explorer
    #launcher:
    #  program: xdg-open
    #  args: []

    # URL modifiers
    #
    # These are the modifiers that need to be held down for opening URLs when clicking
    # on them. The available modifiers are documented in the key binding section.
    modifiers: None

selection:
  semantic_escape_chars: ",│`|:\"' ()[]{}<>"

  # When set to `true`, selected text will be copied to the primary clipboard.
  save_to_clipboard: false

# Allow terminal applications to change Alacritty's window title.
dynamic_title: true

cursor:
  # Cursor style
  #
  # Values for `style`:
  #   - ▇ Block
  #   - _ Underline
  #   - | Beam
  style: Block

  # If this is `true`, the cursor will be rendered as a hollow box when the
  # window is not focused.
  unfocused_hollow: true

# Live config reload (changes require restart)
live_config_reload: true

# Shell
#
# You can set `shell.program` to the path of your favorite shell, e.g. `/bin/fish`.
# Entries in `shell.args` are passed unmodified as arguments to the shell.
#
# Default:
#   - (macOS) /bin/bash --login
#   - (Linux) user login shell
#   - (Windows) powershell
shell:
  program: /usr/bin/zsh
#  args:
#    - --login

# Startup directory
#
# Directory the shell is started in. If this is unset, or `None`, the working
# directory of the parent process will be used.
working_directory: None

# Windows 10 ConPTY backend (Windows only)
#
# This will enable better color support and may resolve other issues,
# however this API and its implementation is still young and so is
# disabled by default, as stability may not be as good as the winpty
# backend.
#
# Alacritty will fall back to the WinPTY automatically if the ConPTY
# backend cannot be initialized.
enable_experimental_conpty_backend: false

# Send ESC (\x1b) before characters when alt is pressed.
alt_send_esc: true

debug:
  # Display the time it takes to redraw each frame.
  render_timer: false

  # Keep the log file after quitting Alacritty.
  persistent_logging: false

  # Log level
  #
  # Values for `log_level`:
  #   - None
  #   - Error
  #   - Warn
  #   - Info
  #   - Debug
  #   - Trace
  log_level: Warn

  # Print all received window events.
  print_events: false

  # Record all characters and escape sequences as test data.
  ref_test: false

# Key bindings
#
# Key bindings are specified as a list of objects. Each binding will specify a
# key and modifiers required to trigger it, terminal modes where the binding is
# applicable, and what should be done when the key binding fires. It can either
# send a byte sequence to the running application (`chars`), execute a
# predefined action (`action`) or fork and execute a specified command plus
# arguments (`command`).
#
# Bindings are always filled by default, but will be replaced when a new binding
# with the same triggers is defined. To unset a default binding, it can be
# mapped to the `None` action.
#
# Example:
#   `- { key: V, mods: Control|Shift, action: Paste }`
#
# Available fields:
#   - key
#   - mods (optional)
#   - chars | action | command (exactly one required)
#   - mode (optional)
#
# Values for `key`:
#   - `A` -> `Z`
#   - `F1` -> `F12`
#   - `Key1` -> `Key0`
#
#   A full list with available key codes can be found here:
#   https://docs.rs/glutin/*/glutin/enum.VirtualKeyCode.html#variants
#
#   Instead of using the name of the keys, the `key` field also supports using
#   the scancode of the desired key. Scancodes have to be specified as a
#   decimal number.
#   This command will allow you to display the hex scancodes for certain keys:
#     `showkey --scancodes`
#
# Values for `mods`:
#   - Command
#   - Control
#   - Option
#   - Super
#   - Shift
#   - Alt
#
#   Multiple `mods` can be combined using `|` like this: `mods: Control|Shift`.
#   Whitespace and capitalization is relevant and must match the example.
#
# Values for `chars`:
#   The `chars` field writes the specified string to the terminal. This makes
#   it possible to pass escape sequences.
#   To find escape codes for bindings like `PageUp` ("\x1b[5~"), you can run
#   the command `showkey -a` outside of tmux.
#   Note that applications use terminfo to map escape sequences back to
#   keys. It is therefore required to update the terminfo when
#   changing an escape sequence.
#
# Values for `action`:
#   - Paste
#   - PasteSelection
#   - Copy
#   - IncreaseFontSize
#   - DecreaseFontSize
#   - ResetFontSize
#   - ScrollPageUp
#   - ScrollPageDown
#   - ScrollLineUp
#   - ScrollLineDown
#   - ScrollToTop
#   - ScrollToBottom
#   - ClearHistory
#   - Hide
#   - Quit
#   - ClearLogNotice
#   - SpawnNewInstance
#   - ToggleFullscreen
#   - None
#
# Values for `action` (macOS only):
#   - ToggleSimpleFullscreen: Enters fullscreen without occupying another space
#
# Values for `command`:
#   The `command` field must be a map containing a `program` string and
#   an `args` array of command line parameter strings.
#
#   Example:
#       `command: { program: "alacritty", args: ["-e", "vttest"] }`
#
# Values for `mode`:
#   - ~AppCursor
#   - AppCursor
#   - ~AppKeypad
#   - AppKeypad
key_bindings:
  # (Windows/Linux only)
  - { key: V,        mods: Control|Shift, action: Paste            }
  - { key: C,        mods: Control|Shift, action: Copy             }
  - { key: Insert,   mods: Shift,         action: PasteSelection   }
  - { key: Key0,     mods: Control,       action: ResetFontSize    }
  - { key: Equals,   mods: Control,       action: IncreaseFontSize }
  - { key: Plus,      mods: Control,       action: IncreaseFontSize }
  - { key: Minus, mods: Control,       action: DecreaseFontSize }
  #- { key: Return,   mods: Alt,           action: ToggleFullscreen }

  - { key: Paste,                   action: Paste                            }
  - { key: Copy,                    action: Copy                             }
  - { key: L,        mods: Control, action: ClearLogNotice                   }
  - { key: L,        mods: Control, chars: "\x0c"                            }
  - { key: Home,     mods: Alt,     chars: "\x1b[1;3H"                       }
  - { key: Home,                    chars: "\x1bOH",        mode: AppCursor  }
  - { key: Home,                    chars: "\x1b[H",        mode: ~AppCursor }
  - { key: End,      mods: Alt,     chars: "\x1b[1;3F"                       }
  - { key: End,                     chars: "\x1bOF",        mode: AppCursor  }
  - { key: End,                     chars: "\x1b[F",        mode: ~AppCursor }
  - { key: PageUp,   mods: Shift,   action: ScrollPageUp,   mode: ~Alt       }
  - { key: PageUp,   mods: Shift,   chars: "\x1b[5;2~",     mode: Alt        }
  - { key: PageUp,   mods: Control, chars: "\x1b[5;5~"                       }
  - { key: PageUp,   mods: Alt,     chars: "\x1b[5;3~"                       }
  - { key: PageUp,                  chars: "\x1b[5~"                         }
  - { key: PageDown, mods: Shift,   action: ScrollPageDown, mode: ~Alt       }
  - { key: PageDown, mods: Shift,   chars: "\x1b[6;2~",     mode: Alt        }
  - { key: PageDown, mods: Control, chars: "\x1b[6;5~"                       }
  - { key: PageDown, mods: Alt,     chars: "\x1b[6;3~"                       }
  - { key: PageDown,                chars: "\x1b[6~"                         }
  - { key: Tab,      mods: Shift,   chars: "\x1b[Z"                          }
  - { key: Back,                    chars: "\x7f"                            }
  - { key: Back,     mods: Alt,     chars: "\x1b\x7f"                        }
  - { key: Insert,                  chars: "\x1b[2~"                         }
  - { key: Delete,                  chars: "\x1b[3~"                         }
  - { key: Left,     mods: Shift,   chars: "\x1b[1;2D"                       }
  - { key: Left,     mods: Control, chars: "\x1b[1;5D"                       }
  - { key: Left,     mods: Alt,     chars: "\x1b[1;3D"                       }
  - { key: Left,                    chars: "\x1b[D",        mode: ~AppCursor }
  - { key: Left,                    chars: "\x1bOD",        mode: AppCursor  }
  - { key: Right,    mods: Shift,   chars: "\x1b[1;2C"                       }
  - { key: Right,    mods: Control, chars: "\x1b[1;5C"                       }
  - { key: Right,    mods: Alt,     chars: "\x1b[1;3C"                       }
  - { key: Right,                   chars: "\x1b[C",        mode: ~AppCursor }
  - { key: Right,                   chars: "\x1bOC",        mode: AppCursor  }
  - { key: Up,       mods: Shift,   chars: "\x1b[1;2A"                       }
  - { key: Up,       mods: Control, chars: "\x1b[1;5A"                       }
  - { key: Up,       mods: Alt,     chars: "\x1b[1;3A"                       }
  - { key: Up,                      chars: "\x1b[A",        mode: ~AppCursor }
  - { key: Up,                      chars: "\x1bOA",        mode: AppCursor  }
  - { key: Down,     mods: Shift,   chars: "\x1b[1;2B"                       }
  - { key: Down,     mods: Control, chars: "\x1b[1;5B"                       }
  - { key: Down,     mods: Alt,     chars: "\x1b[1;3B"                       }
  - { key: Down,                    chars: "\x1b[B",        mode: ~AppCursor }
  - { key: Down,                    chars: "\x1bOB",        mode: AppCursor  }
  - { key: F1,                      chars: "\x1bOP"                          }
  - { key: F2,                      chars: "\x1bOQ"                          }
  - { key: F3,                      chars: "\x1bOR"                          }
  - { key: F4,                      chars: "\x1bOS"                          }
  - { key: F5,                      chars: "\x1b[15~"                        }
  - { key: F6,                      chars: "\x1b[17~"                        }
  - { key: F7,                      chars: "\x1b[18~"                        }
  - { key: F8,                      chars: "\x1b[19~"                        }
  - { key: F9,                      chars: "\x1b[20~"                        }
  - { key: F10,                     chars: "\x1b[21~"                        }
  - { key: F11,                     chars: "\x1b[23~"                        }
  - { key: F12,                     chars: "\x1b[24~"                        }
  - { key: F1,       mods: Shift,   chars: "\x1b[1;2P"                       }
  - { key: F2,       mods: Shift,   chars: "\x1b[1;2Q"                       }
  - { key: F3,       mods: Shift,   chars: "\x1b[1;2R"                       }
  - { key: F4,       mods: Shift,   chars: "\x1b[1;2S"                       }
  - { key: F5,       mods: Shift,   chars: "\x1b[15;2~"                      }
  - { key: F6,       mods: Shift,   chars: "\x1b[17;2~"                      }
  - { key: F7,       mods: Shift,   chars: "\x1b[18;2~"                      }
  - { key: F8,       mods: Shift,   chars: "\x1b[19;2~"                      }
  - { key: F9,       mods: Shift,   chars: "\x1b[20;2~"                      }
  - { key: F10,      mods: Shift,   chars: "\x1b[21;2~"                      }
  - { key: F11,      mods: Shift,   chars: "\x1b[23;2~"                      }
  - { key: F12,      mods: Shift,   chars: "\x1b[24;2~"                      }
  - { key: F1,       mods: Control, chars: "\x1b[1;5P"                       }
  - { key: F2,       mods: Control, chars: "\x1b[1;5Q"                       }
  - { key: F3,       mods: Control, chars: "\x1b[1;5R"                       }
  - { key: F4,       mods: Control, chars: "\x1b[1;5S"                       }
  - { key: F5,       mods: Control, chars: "\x1b[15;5~"                      }
  - { key: F6,       mods: Control, chars: "\x1b[17;5~"                      }
  - { key: F7,       mods: Control, chars: "\x1b[18;5~"                      }
  - { key: F8,       mods: Control, chars: "\x1b[19;5~"                      }
  - { key: F9,       mods: Control, chars: "\x1b[20;5~"                      }
  - { key: F10,      mods: Control, chars: "\x1b[21;5~"                      }
  - { key: F11,      mods: Control, chars: "\x1b[23;5~"                      }
  - { key: F12,      mods: Control, chars: "\x1b[24;5~"                      }
  - { key: F1,       mods: Alt,     chars: "\x1b[1;6P"                       }
  - { key: F2,       mods: Alt,     chars: "\x1b[1;6Q"                       }
  - { key: F3,       mods: Alt,     chars: "\x1b[1;6R"                       }
  - { key: F4,       mods: Alt,     chars: "\x1b[1;6S"                       }
  - { key: F5,       mods: Alt,     chars: "\x1b[15;6~"                      }
  - { key: F6,       mods: Alt,     chars: "\x1b[17;6~"                      }
  - { key: F7,       mods: Alt,     chars: "\x1b[18;6~"                      }
  - { key: F8,       mods: Alt,     chars: "\x1b[19;6~"                      }
  - { key: F9,       mods: Alt,     chars: "\x1b[20;6~"                      }
  - { key: F10,      mods: Alt,     chars: "\x1b[21;6~"                      }
  - { key: F11,      mods: Alt,     chars: "\x1b[23;6~"                      }
  - { key: F12,      mods: Alt,     chars: "\x1b[24;6~"                      }
  - { key: F1,       mods: Super,   chars: "\x1b[1;3P"                       }
  - { key: F2,       mods: Super,   chars: "\x1b[1;3Q"                       }
  - { key: F3,       mods: Super,   chars: "\x1b[1;3R"                       }
  - { key: F4,       mods: Super,   chars: "\x1b[1;3S"                       }
  - { key: F5,       mods: Super,   chars: "\x1b[15;3~"                      }
  - { key: F6,       mods: Super,   chars: "\x1b[17;3~"                      }
  - { key: F7,       mods: Super,   chars: "\x1b[18;3~"                      }
  - { key: F8,       mods: Super,   chars: "\x1b[19;3~"                      }
  - { key: F9,       mods: Super,   chars: "\x1b[20;3~"                      }
  - { key: F10,      mods: Super,   chars: "\x1b[21;3~"                      }
  - { key: F11,      mods: Super,   chars: "\x1b[23;3~"                      }
  - { key: F12,      mods: Super,   chars: "\x1b[24;3~"                      }
  - { key: NumpadEnter,             chars: "\n"                              }

Foot config

# -*- conf -*-

# shell=$SHELL (if set, otherwise user's default shell from /etc/passwd)
# term=foot (or xterm-256color if built with -Dterminfo=disabled)
login-shell=yes

# app-id=foot
# title=foot
# locked-title=no

term=foot-extra
font=JuliaMono:size=6:style=Regular
# font-bold=<bold variant of regular font>
# font-italic=<italic variant of regular font>
# font-bold-italic=<bold+italic variant of regular font>
# line-height=<font metrics>
letter-spacing=0
# horizontal-letter-offset=0
# vertical-letter-offset=0
# underline-offset=<font metrics>
box-drawings-uses-font-glyphs=no
dpi-aware=yes

# initial-window-size-pixels=700x500  # Or,
# initial-window-size-chars=<COLSxROWS>
# initial-window-mode=windowed
# pad=2x2                             # optionally append 'center'
# resize-delay-ms=100

notify=notify-send -a ${app-id} -i ${app-id} ${title} ${body}

# bold-text-in-bright=no
# bell=urgent
# word-delimiters=,│`|:"'()[]{}<>
# selection-target=primary
# workers=<number of logical CPUs>

[bell]
 urgent=yes
 notify=yes
# command=
# command-focused=no

[scrollback]
# lines=1000
# multiplier=3.0
# indicator-positionrelative
# indicator-format=

[url]
# launch=xdg-open ${url}
# label-letters=sadfjklewcmpgh
# osc8-underline=url-mode
# protocol=http, https, ftp, ftps, file, gemini, gopher
# uri-characters=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.,~:;/?#@!$&%*+="'

[cursor]
# style=block
 color=1e1e2e f5e0dc
 blink=no
# beam-thickness=1.5
# underline-thickness=<font underline thickness>

[mouse]
# hide-when-typing=no
# alternate-scroll-mode=yes

[colors]
 alpha=1.0
 background=1E1E2E
 foreground=d9e0ee
 regular0=6e6c7e  # black
 regular1=f28fad  # red
 regular2=abe9b3  # green
 regular3=fae3b0  # yellow
 regular4=96cdfb  # blue
 regular5=f5c2e7  # magenta
 regular6=89dceb  # cyan
 regular7=d9e0ee  # white
 bright0=988ba2   # bright black
 bright1=f28fad   # bright red
 bright2=abe9b3   # bright green
 bright3=fae3b0   # bright yellow
 bright4=96cdfb   # bright blue
 bright5=f5c2e7   # bright magenta
 bright6=89dceb   # bright cyan
 bright7=d9e0ee   # bright white
# 16 = <256-color palette #16>
# ...
# 255 = <256-color palette #255>
 selection-foreground=d9e0ee
 selection-background=575268
# jump-labels=<regular0> <regular3>
 urls=f5e0dc

[csd]
# size=26
# font=<primary font>
# color=<foreground color>
# button-width=26
# button-color=<background color>
# button-minimize-color=<regular4>
# button-maximize-color=<regular2>
# button-close-color=<regular1>

[key-bindings]
# scrollback-up-page=Shift+Page_Up
# scrollback-up-half-page=none
# scrollback-up-line=none
# scrollback-down-page=Shift+Page_Down
# scrollback-down-half-page=none
# scrollback-down-line=none
# clipboard-copy=Control+Shift+c
# clipboard-paste=Control+Shift+v
# primary-paste=Shift+Insert
# search-start=Control+Shift+r
# font-increase=Control+plus Control+equal Control+KP_Add
# font-decrease=Control+minus Control+KP_Subtract
# font-reset=Control+0 Control+KP_0
# spawn-terminal=Control+Shift+n
# minimize=none
# maximize=none
# fullscreen=none
# pipe-visible=[sh -c "xurls | fuzzel | xargs -r firefox"] none
# pipe-scrollback=[sh -c "xurls | fuzzel | xargs -r firefox"] none
# pipe-selected=[xargs -r firefox] none
# show-urls-launch=Control+Shift+u
# show-urls-copy=none

[search-bindings]
# cancel=Control+g Control+c Escape
# commit=Return
# find-prev=Control+r
# find-next=Control+s
# cursor-left=Left Control+b
# cursor-left-word=Control+Left Mod1+b
# cursor-right=Right Control+f
# cursor-right-word=Control+Right Mod1+f
# cursor-home=Home Control+a
# cursor-end=End Control+e
# delete-prev=BackSpace
# delete-prev-word=Mod1+BackSpace Control+BackSpace
# delete-next=Delete
# delete-next-word=Mod1+d Control+Delete
# extend-to-word-boundary=Control+w
# extend-to-next-whitespace=Control+Shift+w
# clipboard-paste=Control+v Control+y
# primary-paste=Shift+Insert

[url-bindings]
# cancel=Control+g Control+c Control+d Escape
# toggle-url-visible=t

[mouse-bindings]
# primary-paste=BTN_MIDDLE
# select-begin=BTN_LEFT
# select-begin-block=Control+BTN_LEFT
# select-extend=BTN_RIGHT
# select-extend-character-wise=Control+BTN_RIGHT
# select-word=BTN_LEFT-2
# select-word-whitespace=Control+BTN_LEFT-2
# select-row=BTN_LEFT-3

switch from `servo-fontconfig` to `fontconfig`

servo-fontconfig had its latest release over 2 years ago. It's no longer needed by servo itself and prob wont receive any updates soon. It depends on old crates like freetype-sys 0.13 .
I think we should phase servo-fontconfig out in favor for other crates.
This would also solve #44

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.