1
0
Fork 0
mirror of https://github.com/alacritty/alacritty.git synced 2024-11-25 14:05:41 -05:00

Configurable window dimensions

Adds a configuration option `dimensions` which will set initial
window size by columns and lines. Changes to the config file will
require restart.

resolves #370
This commit is contained in:
Anders Rasmussen 2017-02-05 21:01:26 +11:00 committed by Joe Wilm
parent 9d44526bf9
commit edc2c7f5b9
6 changed files with 78 additions and 18 deletions

View file

@ -171,9 +171,9 @@ is created once alacritty is first run. On most systems this often defaults
to `$HOME/.config/alacritty/alacritty.yml`. to `$HOME/.config/alacritty/alacritty.yml`.
Many configuration options will take effect immediately upon saving changes to Many configuration options will take effect immediately upon saving changes to
the config file. The only exception is the `font` and `dpi` section which the config file. The only exception is the `font`, `dimensions` and `dpi` sections
requires Alacritty to be restarted. For further explanation of the config file, which requires Alacritty to be restarted. For further explanation of the config
please consult the comments in the default config file. file, please consult the comments in the default config file.
## Issues (known, unknown, feature requests, etc) ## Issues (known, unknown, feature requests, etc)

View file

@ -1,4 +1,9 @@
# Configuration for Alacritty, the GPU enhanced terminal emulator # Configuration for Alacritty, the GPU enhanced terminal emulator
# Window dimensions in character columns and lines
# (changes require restart)
dimensions:
columns: 80
lines: 40
# The FreeType rasterizer needs to know the device DPI for best results # The FreeType rasterizer needs to know the device DPI for best results
# (changes require restart) # (changes require restart)

View file

@ -1,4 +1,9 @@
# Configuration for Alacritty, the GPU enhanced terminal emulator # Configuration for Alacritty, the GPU enhanced terminal emulator
# Window dimensions in character columns and lines
# (changes require restart)
dimensions:
columns: 80
lines: 40
# The FreeType rasterizer needs to know the device DPI for best results # The FreeType rasterizer needs to know the device DPI for best results
# (changes require restart) # (changes require restart)

View file

@ -14,7 +14,7 @@
extern crate log; extern crate log;
use clap::{Arg, App}; use clap::{Arg, App};
use index::{Line, Column}; use index::{Line, Column};
use config::Shell; use config::{Dimensions, Shell};
const DEFAULT_TITLE: &'static str = "Alacritty"; const DEFAULT_TITLE: &'static str = "Alacritty";
@ -22,8 +22,7 @@ const DEFAULT_TITLE: &'static str = "Alacritty";
pub struct Options { pub struct Options {
pub print_events: bool, pub print_events: bool,
pub ref_test: bool, pub ref_test: bool,
pub columns: Column, pub dimensions: Option<Dimensions>,
pub lines: Line,
pub title: String, pub title: String,
pub log_level: log::LogLevelFilter, pub log_level: log::LogLevelFilter,
pub shell: Option<Shell<'static>>, pub shell: Option<Shell<'static>>,
@ -34,8 +33,7 @@ impl Default for Options {
Options { Options {
print_events: false, print_events: false,
ref_test: false, ref_test: false,
columns: Column(80), dimensions: None,
lines: Line(24),
title: DEFAULT_TITLE.to_owned(), title: DEFAULT_TITLE.to_owned(),
log_level: log::LogLevelFilter::Warn, log_level: log::LogLevelFilter::Warn,
shell: None, shell: None,
@ -95,8 +93,11 @@ impl Options {
} }
if let Some(mut dimensions) = matches.values_of("dimensions") { if let Some(mut dimensions) = matches.values_of("dimensions") {
dimensions.next().map(|w| w.parse().map(|w| options.columns = Column(w))); let width = dimensions.next().map(|w| w.parse().map(|w| Column(w)));
dimensions.next().map(|h| h.parse().map(|h| options.lines = Line(h))); let height = dimensions.next().map(|h| h.parse().map(|h| Line(h)));
if let (Some(Ok(width)), Some(Ok(height))) = (width, height) {
options.dimensions = Some(Dimensions::new(width, height));
}
} }
if let Some(title) = matches.value_of("title") { if let Some(title) = matches.value_of("title") {
@ -128,12 +129,8 @@ impl Options {
options options
} }
pub fn lines_u32(&self) -> u32 { pub fn dimensions(&self) -> Option<Dimensions> {
self.lines.0 as u32 self.dimensions
}
pub fn columns_u32(&self) -> u32 {
self.columns.0 as u32
} }
pub fn shell(&self) -> Option<&Shell> { pub fn shell(&self) -> Option<&Shell> {

View file

@ -23,6 +23,7 @@ use serde::de::{Visitor, MapVisitor, Unexpected};
use notify::{Watcher as WatcherApi, RecommendedWatcher as FileWatcher, op}; use notify::{Watcher as WatcherApi, RecommendedWatcher as FileWatcher, op};
use input::{Action, Binding, MouseBinding, KeyBinding}; use input::{Action, Binding, MouseBinding, KeyBinding};
use index::{Line, Column};
use ansi; use ansi;
@ -212,6 +213,10 @@ impl<'a> Shell<'a> {
/// Top-level config type /// Top-level config type
#[derive(Debug, Deserialize)] #[derive(Debug, Deserialize)]
pub struct Config { pub struct Config {
/// Initial dimensions
#[serde(default)]
dimensions: Dimensions,
/// Pixels per inch /// Pixels per inch
#[serde(default)] #[serde(default)]
dpi: Dpi, dpi: Dpi,
@ -273,6 +278,7 @@ impl Default for Config {
fn default() -> Config { fn default() -> Config {
Config { Config {
draw_bold_text_with_bright_colors: true, draw_bold_text_with_bright_colors: true,
dimensions: Default::default(),
dpi: Default::default(), dpi: Default::default(),
font: Default::default(), font: Default::default(),
render_timer: Default::default(), render_timer: Default::default(),
@ -969,6 +975,12 @@ impl Config {
&self.font &self.font
} }
/// Get window dimensions
#[inline]
pub fn dimensions(&self) -> Dimensions {
self.dimensions
}
/// Get dpi config /// Get dpi config
#[inline] #[inline]
pub fn dpi(&self) -> &Dpi { pub fn dpi(&self) -> &Dpi {
@ -1020,6 +1032,45 @@ impl Config {
} }
} }
/// Window Dimensions
///
/// Newtype to avoid passing values incorrectly
#[derive(Debug, Copy, Clone, Deserialize)]
pub struct Dimensions {
/// Window width in character columns
columns: Column,
/// Window Height in character lines
lines: Line,
}
impl Default for Dimensions {
fn default() -> Dimensions {
Dimensions::new(Column(80), Line(24))
}
}
impl Dimensions {
pub fn new(columns: Column, lines: Line) -> Self {
Dimensions {
columns: columns,
lines: lines
}
}
/// Get lines
#[inline]
pub fn lines_u32(&self) -> u32 {
self.lines.0 as u32
}
/// Get columns
#[inline]
pub fn columns_u32(&self) -> u32 {
self.columns.0 as u32
}
}
/// Pixels per inch /// Pixels per inch
/// ///
/// This is only used on `FreeType` systems /// This is only used on `FreeType` systems

View file

@ -177,8 +177,10 @@ impl Display {
let cell_height = (metrics.line_height + font.offset().y() as f64) as u32; let cell_height = (metrics.line_height + font.offset().y() as f64) as u32;
// Resize window to specified dimensions // Resize window to specified dimensions
let width = cell_width * options.columns_u32() + 4; let dimensions = options.dimensions()
let height = cell_height * options.lines_u32() + 4; .unwrap_or_else(|| config.dimensions());
let width = cell_width * dimensions.columns_u32() + 4;
let height = cell_height * dimensions.lines_u32() + 4;
let size = Size { width: Pixels(width), height: Pixels(height) }; let size = Size { width: Pixels(width), height: Pixels(height) };
info!("set_inner_size: {}", size); info!("set_inner_size: {}", size);