Merge pull request #1346 from matthiasbeyer/libimagrt/editor-in-config

libimagrt: editor in config
This commit is contained in:
Matthias Beyer 2018-03-14 11:39:01 +01:00 committed by GitHub
commit c5154e8363
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 26 additions and 4 deletions

View file

@ -57,6 +57,8 @@ This section contains the changelog from the last release to the next release.
* `imag-diary` supports "daily" diaries now. * `imag-diary` supports "daily" diaries now.
* `imag-contact` joins multiple emails with "," now * `imag-contact` joins multiple emails with "," now
* `imag-tag` commandline was rewritten for positional arguments. * `imag-tag` commandline was rewritten for positional arguments.
* `libimagrt` automatically takes "rt.editor" into account when building
editor object
* Bugfixes * Bugfixes
* imag does not panic anymore when piping and breaking that pipe, for * imag does not panic anymore when piping and breaking that pipe, for
example like with `imag store ids | head -n 1`. example like with `imag store ids | head -n 1`.
@ -78,6 +80,8 @@ This section contains the changelog from the last release to the next release.
`std::str::Lines` iterator takes empty lines as no lines. `std::str::Lines` iterator takes empty lines as no lines.
* `libimagentryedit` fixed to inherit stdin and stderr to child process for * `libimagentryedit` fixed to inherit stdin and stderr to child process for
editor command. editor command.
* `libimagrt` produced the editor command without taking arguments into
account.
## 0.6.3 ## 0.6.3

View file

@ -1,6 +1,9 @@
# This is a example configuration file for the imag suite. # This is a example configuration file for the imag suite.
# It is written in TOML # It is written in TOML
[rt]
editor = "vim"
# #
# imag supports templates when specifying formats. The templates support several # imag supports templates when specifying formats. The templates support several
# functionalities, from colorizing to underlining and such things. # functionalities, from colorizing to underlining and such things.

View file

@ -25,6 +25,7 @@ use std::io::Stdin;
pub use clap::App; pub use clap::App;
use toml::Value; use toml::Value;
use toml_query::read::TomlValueReadExt;
use clap::{Arg, ArgMatches}; use clap::{Arg, ArgMatches};
@ -457,12 +458,26 @@ impl<'a> Runtime<'a> {
self.cli() self.cli()
.value_of("editor") .value_of("editor")
.map(String::from) .map(String::from)
.or_else(|| {
self.config()
.and_then(|v| match v.read("rt.editor") {
Ok(Some(&Value::String(ref s))) => Some(s.clone()),
_ => None, // FIXME silently ignore errors in config is bad
})
})
.or(env::var("EDITOR").ok()) .or(env::var("EDITOR").ok())
.map(|s| { .map(|s| {debug!("Editing with '{}'", s); s})
let mut c = Command::new(s); .and_then(|s| {
c.stdin(::std::process::Stdio::inherit()); let mut split = s.split(" ");
let command = split.next();
if command.is_none() {
return None
}
let mut c = Command::new(command.unwrap()); // secured above
c.args(split);
c.stdin(::std::process::Stdio::null());
c.stderr(::std::process::Stdio::inherit()); c.stderr(::std::process::Stdio::inherit());
c Some(c)
}) })
} }