aboutsummaryrefslogtreecommitdiff
path: root/helix-term
diff options
context:
space:
mode:
Diffstat (limited to 'helix-term')
-rw-r--r--helix-term/src/commands.rs11
-rw-r--r--helix-term/src/keymap.rs2
-rw-r--r--helix-term/src/main.rs34
3 files changed, 28 insertions, 19 deletions
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index 3dba9333..7b30168a 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -473,10 +473,10 @@ fn scroll(cx: &mut Context, offset: usize, direction: Direction) {
let last_line = view.last_line(doc);
// clamp into viewport
- let line = cursor.row.clamp(
- view.first_line + scrolloff,
- last_line.saturating_sub(scrolloff),
- );
+ let line = cursor
+ .row
+ .min(view.first_line + scrolloff)
+ .max(last_line.saturating_sub(scrolloff));
let text = doc.text().slice(..);
let pos = pos_at_coords(text, Position::new(line, cursor.col)); // this func will properly truncate to line end
@@ -1031,6 +1031,9 @@ pub fn command_mode(cx: &mut Context) {
}
let parts = input.split_ascii_whitespace().collect::<Vec<&str>>();
+ if parts.is_empty() {
+ return;
+ }
if let Some(cmd) = cmd::COMMANDS.get(parts[0]) {
(cmd.fun)(editor, &parts[1..], event);
diff --git a/helix-term/src/keymap.rs b/helix-term/src/keymap.rs
index 044d97eb..fc7bb86e 100644
--- a/helix-term/src/keymap.rs
+++ b/helix-term/src/keymap.rs
@@ -240,10 +240,12 @@ pub fn default() -> Keymaps {
code: KeyCode::PageUp,
modifiers: KeyModifiers::NONE
} => commands::page_up,
+ ctrl!('b') => commands::page_up,
KeyEvent {
code: KeyCode::PageDown,
modifiers: KeyModifiers::NONE
} => commands::page_down,
+ ctrl!('f') => commands::page_down,
ctrl!('u') => commands::half_page_up,
ctrl!('d') => commands::half_page_down,
diff --git a/helix-term/src/main.rs b/helix-term/src/main.rs
index ac060bbe..3a0f4d20 100644
--- a/helix-term/src/main.rs
+++ b/helix-term/src/main.rs
@@ -8,11 +8,13 @@ mod ui;
use application::Application;
+use helix_core::config_dir;
+
use std::path::PathBuf;
-use anyhow::Error;
+use anyhow::{Context, Result};
-fn setup_logging(verbosity: u64) -> Result<(), fern::InitError> {
+fn setup_logging(verbosity: u64) -> Result<()> {
let mut base_config = fern::Dispatch::new();
// Let's say we depend on something which whose "info" level messages are too
@@ -27,8 +29,6 @@ fn setup_logging(verbosity: u64) -> Result<(), fern::InitError> {
_3_or_more => base_config.level(log::LevelFilter::Trace),
};
- let home = dirs_next::home_dir().expect("can't find the home directory");
-
// Separate file config so we can include year, month and day in file logs
let file_config = fern::Dispatch::new()
.format(|out, message, record| {
@@ -40,7 +40,7 @@ fn setup_logging(verbosity: u64) -> Result<(), fern::InitError> {
message
))
})
- .chain(fern::log_file(home.join("helix.log"))?);
+ .chain(fern::log_file(config_dir().join("helix.log"))?);
base_config.chain(file_config).apply()?;
@@ -51,7 +51,7 @@ pub struct Args {
files: Vec<PathBuf>,
}
-fn main() {
+fn main() -> Result<()> {
let help = format!(
"\
{} {}
@@ -89,14 +89,19 @@ FLAGS:
verbosity = 1;
}
- setup_logging(verbosity).expect("failed to initialize logging.");
+ let conf_dir = config_dir();
+
+ if !conf_dir.exists() {
+ std::fs::create_dir(&conf_dir);
+ }
+
+ setup_logging(verbosity).context("failed to initialize logging")?;
let args = Args {
files: pargs.finish().into_iter().map(|arg| arg.into()).collect(),
};
// initialize language registry
- use helix_core::config_dir;
use helix_core::syntax::{Loader, LOADER};
// load $HOME/.config/helix/languages.toml, fallback to default config
@@ -105,17 +110,16 @@ FLAGS:
.as_deref()
.unwrap_or(include_bytes!("../../languages.toml"));
- LOADER.get_or_init(|| {
- let config = toml::from_slice(toml).expect("Could not parse languages.toml");
- Loader::new(config)
- });
+ let config = toml::from_slice(toml).context("Could not parse languages.toml")?;
+ LOADER.get_or_init(|| Loader::new(config));
- let runtime = tokio::runtime::Runtime::new().unwrap();
+ let runtime = tokio::runtime::Runtime::new().context("unable to start tokio runtime")?;
// TODO: use the thread local executor to spawn the application task separately from the work pool
+ let mut app = Application::new(args).context("unable to create new appliction")?;
runtime.block_on(async move {
- let mut app = Application::new(args).unwrap();
-
app.run().await;
});
+
+ Ok(())
}