mirror of https://github.com/helix-editor/helix
Allow piping from stdin into a buffer on startup (#996)
* Allow piping from stdin into a buffer on startup * Refactor * Don't allow piping into new buffer on macOS * Update helix-term/src/application.rs Co-authored-by: Blaž Hrastnik <blaz@mxxn.io> * Update helix-term/src/application.rs Co-authored-by: Blaž Hrastnik <blaz@mxxn.io> * Fix Co-authored-by: Blaž Hrastnik <blaz@mxxn.io>pull/1039/head
parent
68224232af
commit
cf831b1a65
|
@ -7,7 +7,7 @@ use crate::{args::Args, compositor::Compositor, config::Config, job::Jobs, ui};
|
||||||
use log::{error, warn};
|
use log::{error, warn};
|
||||||
|
|
||||||
use std::{
|
use std::{
|
||||||
io::{stdout, Write},
|
io::{stdin, stdout, Write},
|
||||||
sync::Arc,
|
sync::Arc,
|
||||||
time::{Duration, Instant},
|
time::{Duration, Instant},
|
||||||
};
|
};
|
||||||
|
@ -17,6 +17,7 @@ use anyhow::Error;
|
||||||
use crossterm::{
|
use crossterm::{
|
||||||
event::{DisableMouseCapture, EnableMouseCapture, Event, EventStream},
|
event::{DisableMouseCapture, EnableMouseCapture, Event, EventStream},
|
||||||
execute, terminal,
|
execute, terminal,
|
||||||
|
tty::IsTty,
|
||||||
};
|
};
|
||||||
#[cfg(not(windows))]
|
#[cfg(not(windows))]
|
||||||
use {
|
use {
|
||||||
|
@ -134,8 +135,17 @@ impl Application {
|
||||||
}
|
}
|
||||||
editor.set_status(format!("Loaded {} files.", nr_of_files));
|
editor.set_status(format!("Loaded {} files.", nr_of_files));
|
||||||
}
|
}
|
||||||
} else {
|
} else if stdin().is_tty() {
|
||||||
editor.new_file(Action::VerticalSplit);
|
editor.new_file(Action::VerticalSplit);
|
||||||
|
} else if cfg!(target_os = "macos") {
|
||||||
|
// On Linux and Windows, we allow the output of a command to be piped into the new buffer.
|
||||||
|
// This doesn't currently work on macOS because of the following issue:
|
||||||
|
// https://github.com/crossterm-rs/crossterm/issues/500
|
||||||
|
anyhow::bail!("Piping into helix-term is currently not supported on macOS");
|
||||||
|
} else {
|
||||||
|
editor
|
||||||
|
.new_file_from_stdin(Action::VerticalSplit)
|
||||||
|
.unwrap_or_else(|_| editor.new_file(Action::VerticalSplit));
|
||||||
}
|
}
|
||||||
|
|
||||||
editor.set_theme(theme);
|
editor.set_theme(theme);
|
||||||
|
|
|
@ -9,6 +9,7 @@ use crate::{
|
||||||
use futures_util::future;
|
use futures_util::future;
|
||||||
use std::{
|
use std::{
|
||||||
collections::BTreeMap,
|
collections::BTreeMap,
|
||||||
|
io::stdin,
|
||||||
path::{Path, PathBuf},
|
path::{Path, PathBuf},
|
||||||
pin::Pin,
|
pin::Pin,
|
||||||
sync::Arc,
|
sync::Arc,
|
||||||
|
@ -314,16 +315,24 @@ impl Editor {
|
||||||
self._refresh();
|
self._refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn new_file(&mut self, action: Action) -> DocumentId {
|
fn new_file_from_document(&mut self, action: Action, mut document: Document) -> DocumentId {
|
||||||
let id = DocumentId(self.next_document_id);
|
let id = DocumentId(self.next_document_id);
|
||||||
self.next_document_id += 1;
|
self.next_document_id += 1;
|
||||||
let mut doc = Document::default();
|
document.id = id;
|
||||||
doc.id = id;
|
self.documents.insert(id, document);
|
||||||
self.documents.insert(id, doc);
|
|
||||||
self.switch(id, action);
|
self.switch(id, action);
|
||||||
id
|
id
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn new_file(&mut self, action: Action) -> DocumentId {
|
||||||
|
self.new_file_from_document(action, Document::default())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn new_file_from_stdin(&mut self, action: Action) -> Result<DocumentId, Error> {
|
||||||
|
let (rope, encoding) = crate::document::from_reader(&mut stdin(), None)?;
|
||||||
|
Ok(self.new_file_from_document(action, Document::from(rope, Some(encoding))))
|
||||||
|
}
|
||||||
|
|
||||||
pub fn open(&mut self, path: PathBuf, action: Action) -> Result<DocumentId, Error> {
|
pub fn open(&mut self, path: PathBuf, action: Action) -> Result<DocumentId, Error> {
|
||||||
let path = helix_core::path::get_canonicalized_path(&path)?;
|
let path = helix_core::path::get_canonicalized_path(&path)?;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue