neovim-gtk/src/main.rs

118 lines
2.5 KiB
Rust
Raw Normal View History

2016-03-16 14:39:53 +00:00
extern crate gtk;
2017-03-09 08:44:22 +00:00
extern crate gtk_sys;
2017-03-06 13:58:10 +00:00
extern crate gio;
2016-03-31 13:52:22 +00:00
extern crate gdk;
2016-05-05 07:23:04 +00:00
extern crate gdk_sys;
#[macro_use]
2016-03-28 14:14:10 +00:00
extern crate glib;
extern crate glib_sys as glib_ffi;
2017-08-25 15:32:30 +00:00
extern crate gobject_sys as gobject_ffi;
2016-03-16 14:39:53 +00:00
extern crate cairo;
2017-03-05 22:28:07 +00:00
extern crate pango;
extern crate pango_sys;
2017-03-05 22:28:07 +00:00
extern crate pangocairo;
2016-03-19 10:27:39 +00:00
extern crate neovim_lib;
2016-04-02 20:00:18 +00:00
extern crate phf;
#[macro_use]
2017-04-03 11:17:06 +00:00
extern crate log;
extern crate env_logger;
2017-05-13 14:31:19 +00:00
extern crate htmlescape;
#[macro_use]
extern crate serde_derive;
extern crate toml;
2016-03-16 14:39:53 +00:00
mod sys;
2017-08-23 09:45:56 +00:00
mod color;
2017-07-08 11:02:56 +00:00
mod value;
2017-07-08 20:45:55 +00:00
mod mode;
2016-03-19 08:47:23 +00:00
mod ui_model;
#[macro_use]
2016-03-16 15:25:25 +00:00
mod ui;
mod nvim;
mod render;
mod shell;
2016-04-04 10:14:57 +00:00
mod input;
2017-03-13 15:03:32 +00:00
mod settings;
2017-03-22 15:37:18 +00:00
mod cursor;
2017-04-01 10:00:14 +00:00
mod shell_dlg;
mod popup_menu;
2017-05-13 14:31:19 +00:00
mod project;
2017-05-27 16:50:25 +00:00
mod tabline;
mod error;
2016-03-16 14:39:53 +00:00
2017-03-06 13:58:10 +00:00
use std::env;
2017-06-08 14:17:08 +00:00
use gio::{ApplicationExt, FileExt};
2016-05-05 14:27:45 +00:00
use ui::Ui;
2017-03-16 10:18:13 +00:00
use shell::ShellOptions;
const BIN_PATH_ARG: &'static str = "--nvim-bin-path";
2016-03-16 15:25:25 +00:00
fn main() {
2017-04-03 11:17:06 +00:00
env_logger::init().expect("Can't initialize env_logger");
2017-06-08 14:17:08 +00:00
let app_flags = gio::APPLICATION_HANDLES_OPEN;
2017-05-13 21:30:34 +00:00
let app = if cfg!(debug_assertions) {
gtk::Application::new(Some("org.daa.NeovimGtkDebug"),
2017-06-08 14:17:08 +00:00
app_flags)
2017-05-13 21:30:34 +00:00
} else {
2017-06-08 14:17:08 +00:00
gtk::Application::new(Some("org.daa.NeovimGtk"), app_flags)
2017-05-13 21:30:34 +00:00
}
2017-03-14 19:31:56 +00:00
.expect("Failed to initialize GTK application");
2017-03-06 13:58:10 +00:00
app.connect_activate(activate);
2017-06-08 14:17:08 +00:00
{
use gio::ApplicationExtManual;
app.connect_open(open);
}
2017-03-06 13:58:10 +00:00
let args: Vec<String> = env::args().collect();
2017-06-08 14:17:08 +00:00
let argv: Vec<&str> = args.iter()
.filter(|a| !a.starts_with(BIN_PATH_ARG))
.map(String::as_str)
.collect();
2017-07-11 09:33:55 +00:00
app.run(&argv);
2017-03-06 13:58:10 +00:00
}
2017-06-08 14:17:08 +00:00
fn open(app: &gtk::Application, files: &[gio::File], _: &str) {
for f in files {
2017-07-11 09:33:55 +00:00
let mut ui = Ui::new(ShellOptions::new(nvim_bin_path(std::env::args()),
f.get_path().and_then(|p| p.to_str().map(str::to_owned))));
2017-06-08 14:17:08 +00:00
2017-07-11 09:33:55 +00:00
ui.init(app);
2017-06-08 14:17:08 +00:00
}
}
2017-03-06 13:58:10 +00:00
fn activate(app: &gtk::Application) {
2017-07-11 09:33:55 +00:00
let mut ui = Ui::new(ShellOptions::new(nvim_bin_path(std::env::args()), None));
ui.init(app);
2016-03-16 14:39:53 +00:00
}
2017-03-14 19:31:56 +00:00
fn nvim_bin_path<I>(args: I) -> Option<String>
where I: Iterator<Item = String>
{
args.skip_while(|a| !a.starts_with(BIN_PATH_ARG))
.map(|p| p.split('=').nth(1).map(str::to_owned))
.nth(0)
.unwrap_or(None)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_bin_path_arg() {
2017-03-14 19:31:56 +00:00
assert_eq!(Some("/test_path".to_string()),
nvim_bin_path(vec!["neovim-gtk", "--nvim-bin-path=/test_path"]
.iter()
.map(|s| s.to_string())));
}
}