mirror of
https://github.com/helix-editor/helix.git
synced 2024-11-22 17:36:19 +04:00
Allow starting hx without a file. A new blank file will be created.
This commit is contained in:
parent
f00cb15137
commit
91462af546
@ -45,14 +45,17 @@ pub struct Application {
|
||||
|
||||
impl Application {
|
||||
pub fn new(mut args: Args, executor: &'static smol::Executor<'static>) -> Result<Self, Error> {
|
||||
use helix_view::editor::Action;
|
||||
let mut compositor = Compositor::new()?;
|
||||
let size = compositor.size();
|
||||
let mut editor = Editor::new(executor, size);
|
||||
|
||||
let files = args.values_of_t::<PathBuf>("files").unwrap();
|
||||
for file in files {
|
||||
use helix_view::editor::Action;
|
||||
editor.open(file, Action::HorizontalSplit)?;
|
||||
if let Ok(files) = args.values_of_t::<PathBuf>("files") {
|
||||
for file in files {
|
||||
editor.open(file, Action::HorizontalSplit)?;
|
||||
}
|
||||
} else {
|
||||
editor.new_file(Action::HorizontalSplit)?;
|
||||
}
|
||||
|
||||
compositor.push(Box::new(ui::EditorView::new()));
|
||||
|
@ -56,7 +56,7 @@ fn main() {
|
||||
.arg(
|
||||
Arg::new("files")
|
||||
.about("Sets the input file to use")
|
||||
.required(true)
|
||||
.required(false)
|
||||
.multiple(true)
|
||||
.index(1),
|
||||
)
|
||||
|
@ -51,46 +51,7 @@ fn _refresh(&mut self) {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn open(&mut self, path: PathBuf, action: Action) -> Result<DocumentId, Error> {
|
||||
let id = self
|
||||
.documents()
|
||||
.find(|doc| doc.path() == Some(&path))
|
||||
.map(|doc| doc.id);
|
||||
|
||||
let id = if let Some(id) = id {
|
||||
id
|
||||
} else {
|
||||
let mut doc = Document::load(path, self.theme.scopes())?;
|
||||
|
||||
// try to find a language server based on the language name
|
||||
let language_server = doc
|
||||
.language
|
||||
.as_ref()
|
||||
.and_then(|language| self.language_servers.get(language, self.executor));
|
||||
|
||||
if let Some(language_server) = language_server {
|
||||
doc.set_language_server(Some(language_server.clone()));
|
||||
|
||||
let language_id = doc
|
||||
.language()
|
||||
.and_then(|s| s.split('.').last()) // source.rust
|
||||
.map(ToOwned::to_owned)
|
||||
.unwrap_or_default();
|
||||
|
||||
smol::block_on(language_server.text_document_did_open(
|
||||
doc.url().unwrap(),
|
||||
doc.version(),
|
||||
doc.text(),
|
||||
language_id,
|
||||
))
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
let id = self.documents.insert(doc);
|
||||
self.documents[id].id = id;
|
||||
id
|
||||
};
|
||||
|
||||
fn _open(&mut self, id: DocumentId, action: Action) -> Result<DocumentId, Error> {
|
||||
use crate::tree::Layout;
|
||||
use helix_core::Selection;
|
||||
match action {
|
||||
@ -134,6 +95,57 @@ pub fn open(&mut self, path: PathBuf, action: Action) -> Result<DocumentId, Erro
|
||||
Ok(id)
|
||||
}
|
||||
|
||||
pub fn new_file(&mut self, action: Action) -> Result<DocumentId, Error> {
|
||||
use helix_core::Rope;
|
||||
let doc = Document::new(Rope::from("\n"));
|
||||
let id = self.documents.insert(doc);
|
||||
self.documents[id].id = id;
|
||||
self._open(id, action)
|
||||
}
|
||||
|
||||
pub fn open(&mut self, path: PathBuf, action: Action) -> Result<DocumentId, Error> {
|
||||
let id = self
|
||||
.documents()
|
||||
.find(|doc| doc.path() == Some(&path))
|
||||
.map(|doc| doc.id);
|
||||
|
||||
let id = if let Some(id) = id {
|
||||
id
|
||||
} else {
|
||||
let mut doc = Document::load(path, self.theme.scopes())?;
|
||||
|
||||
// try to find a language server based on the language name
|
||||
let language_server = doc
|
||||
.language
|
||||
.as_ref()
|
||||
.and_then(|language| self.language_servers.get(language, self.executor));
|
||||
|
||||
if let Some(language_server) = language_server {
|
||||
doc.set_language_server(Some(language_server.clone()));
|
||||
|
||||
let language_id = doc
|
||||
.language()
|
||||
.and_then(|s| s.split('.').last()) // source.rust
|
||||
.map(ToOwned::to_owned)
|
||||
.unwrap_or_default();
|
||||
|
||||
smol::block_on(language_server.text_document_did_open(
|
||||
doc.url().unwrap(),
|
||||
doc.version(),
|
||||
doc.text(),
|
||||
language_id,
|
||||
))
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
let id = self.documents.insert(doc);
|
||||
self.documents[id].id = id;
|
||||
id
|
||||
};
|
||||
|
||||
self._open(id, action)
|
||||
}
|
||||
|
||||
pub fn close(&mut self, id: ViewId) {
|
||||
let view = self.tree.get(self.tree.focus);
|
||||
// get around borrowck issues
|
||||
|
Loading…
Reference in New Issue
Block a user