mirror of
https://github.com/alacritty/alacritty.git
synced 2024-11-18 13:55:23 -05:00
Remove the launcher and set the locale/current directory in alacritty (#879)
This commit is contained in:
parent
9bdac6b50a
commit
94caa7667d
7 changed files with 67 additions and 18 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
@ -28,6 +28,7 @@ dependencies = [
|
||||||
"mio 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
"mio 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"mio-more 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"mio-more 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"notify 4.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"notify 4.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"objc 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"parking_lot 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
"parking_lot 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde_derive 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde_derive 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
|
|
@ -40,6 +40,9 @@ env_logger = "0.4"
|
||||||
[target.'cfg(any(target_os = "linux", target_os = "freebsd", target_os="dragonfly", target_os="openbsd"))'.dependencies]
|
[target.'cfg(any(target_os = "linux", target_os = "freebsd", target_os="dragonfly", target_os="openbsd"))'.dependencies]
|
||||||
x11-dl = "2"
|
x11-dl = "2"
|
||||||
|
|
||||||
|
[target.'cfg(target_os = "macos")'.dependencies]
|
||||||
|
objc = "0.2.2"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = []
|
default = []
|
||||||
# Enabling this feature makes shaders automatically reload when changed
|
# Enabling this feature makes shaders automatically reload when changed
|
||||||
|
|
|
@ -5,9 +5,9 @@
|
||||||
<key>CFBundleDisplayName</key>
|
<key>CFBundleDisplayName</key>
|
||||||
<string>Alacritty</string>
|
<string>Alacritty</string>
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
<string>launcher</string>
|
<string>alacritty</string>
|
||||||
<!-- <key>CFBundleIdentifier</key> -->
|
<key>CFBundleIdentifier</key>
|
||||||
<!-- <string>alacritty</string> -->
|
<string>io.alacritty</string>
|
||||||
<key>CFBundleName</key>
|
<key>CFBundleName</key>
|
||||||
<string>Alacritty</string>
|
<string>Alacritty</string>
|
||||||
<key>CFBundleIconFile</key>
|
<key>CFBundleIconFile</key>
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Dynamically discover canonical path to alacritty binary
|
|
||||||
BIN_DIR=$(cd "$(dirname "$0")"; pwd)
|
|
||||||
|
|
||||||
# Query OS for locale and setup alacritty shell to conform
|
|
||||||
ALACRITTY_LOCALE="$(osascript -e "return user locale of (get system info)")"
|
|
||||||
export LANG="${ALACRITTY_LOCALE}.UTF-8"
|
|
||||||
export LC_CTYPE="${ALACRITTY_LOCALE}.UTF-8"
|
|
||||||
|
|
||||||
# Start alacritty in user's home directory
|
|
||||||
cd "$HOME"
|
|
||||||
|
|
||||||
# Engage
|
|
||||||
exec "$BIN_DIR/alacritty"
|
|
|
@ -29,6 +29,10 @@
|
||||||
#[cfg(any(target_os = "linux", target_os = "freebsd", target_os="dragonfly", target_os="openbsd"))]
|
#[cfg(any(target_os = "linux", target_os = "freebsd", target_os="dragonfly", target_os="openbsd"))]
|
||||||
extern crate x11_dl;
|
extern crate x11_dl;
|
||||||
|
|
||||||
|
#[cfg(target_os = "macos")]
|
||||||
|
#[macro_use]
|
||||||
|
extern crate objc;
|
||||||
|
|
||||||
extern crate arraydeque;
|
extern crate arraydeque;
|
||||||
extern crate cgmath;
|
extern crate cgmath;
|
||||||
extern crate copypasta;
|
extern crate copypasta;
|
||||||
|
@ -61,6 +65,7 @@ pub mod event_loop;
|
||||||
pub mod grid;
|
pub mod grid;
|
||||||
pub mod index;
|
pub mod index;
|
||||||
pub mod input;
|
pub mod input;
|
||||||
|
pub mod locale;
|
||||||
pub mod logging;
|
pub mod logging;
|
||||||
pub mod meter;
|
pub mod meter;
|
||||||
pub mod renderer;
|
pub mod renderer;
|
||||||
|
|
47
src/locale.rs
Normal file
47
src/locale.rs
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
// Copyright 2016 Joe Wilm, The Alacritty Project Contributors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
#![cfg(target_os = "macos")]
|
||||||
|
use std::os::raw::c_char;
|
||||||
|
use std::slice;
|
||||||
|
use std::str;
|
||||||
|
use std::env;
|
||||||
|
|
||||||
|
use objc::runtime::{Class, Object};
|
||||||
|
|
||||||
|
pub fn set_locale_environment() {
|
||||||
|
let locale_id = unsafe {
|
||||||
|
let locale_class = Class::get("NSLocale").unwrap();
|
||||||
|
let locale: *const Object = msg_send![locale_class, currentLocale];
|
||||||
|
msg_send![locale_class, release];
|
||||||
|
let identifier: *const Object = msg_send![locale, localeIdentifier];
|
||||||
|
msg_send![locale, release];
|
||||||
|
let identifier_str = nsstring_as_str(identifier).to_owned();
|
||||||
|
msg_send![identifier, release];
|
||||||
|
identifier_str
|
||||||
|
};
|
||||||
|
let locale_id = locale_id + ".UTF-8";
|
||||||
|
env::set_var("LANG", &locale_id);
|
||||||
|
env::set_var("LC_CTYPE", &locale_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
const UTF8_ENCODING: usize = 4;
|
||||||
|
|
||||||
|
unsafe fn nsstring_as_str<'a>(nsstring: *const Object) -> &'a str {
|
||||||
|
let cstr: *const c_char = msg_send![nsstring, UTF8String];
|
||||||
|
let len: usize = msg_send![nsstring, lengthOfBytesUsingEncoding:UTF8_ENCODING];
|
||||||
|
str::from_utf8(slice::from_raw_parts(cstr as *const u8, len)).unwrap()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(not(target_os = "macos"))]
|
||||||
|
pub fn set_locale_environment() {}
|
|
@ -24,12 +24,15 @@ extern crate log;
|
||||||
|
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
use std::env;
|
||||||
|
|
||||||
use alacritty::cli;
|
use alacritty::cli;
|
||||||
use alacritty::config::{self, Config};
|
use alacritty::config::{self, Config};
|
||||||
use alacritty::display::Display;
|
use alacritty::display::Display;
|
||||||
use alacritty::event;
|
use alacritty::event;
|
||||||
use alacritty::event_loop::{self, EventLoop, Msg};
|
use alacritty::event_loop::{self, EventLoop, Msg};
|
||||||
|
#[cfg(target_os = "macos")]
|
||||||
|
use alacritty::locale;
|
||||||
use alacritty::logging;
|
use alacritty::logging;
|
||||||
use alacritty::sync::FairMutex;
|
use alacritty::sync::FairMutex;
|
||||||
use alacritty::term::{Term};
|
use alacritty::term::{Term};
|
||||||
|
@ -41,6 +44,11 @@ fn main() {
|
||||||
let options = cli::Options::load();
|
let options = cli::Options::load();
|
||||||
let config = load_config(&options);
|
let config = load_config(&options);
|
||||||
|
|
||||||
|
// Switch to home directory
|
||||||
|
env::set_current_dir(env::home_dir().unwrap()).unwrap();
|
||||||
|
#[cfg(target_os = "macos")]
|
||||||
|
locale::set_locale_environment();
|
||||||
|
|
||||||
// Run alacritty
|
// Run alacritty
|
||||||
if let Err(err) = run(config, &options) {
|
if let Err(err) = run(config, &options) {
|
||||||
die!("Alacritty encountered an unrecoverable error:\n\n\t{}\n", Red(err));
|
die!("Alacritty encountered an unrecoverable error:\n\n\t{}\n", Red(err));
|
||||||
|
|
Loading…
Reference in a new issue