Read the odd startup option from org-mode files.
This commit is contained in:
parent
8450785186
commit
a74ea730f4
@ -22,6 +22,11 @@ pub struct GlobalSettings<'g, 's> {
|
|||||||
///
|
///
|
||||||
/// Corresponds to the tab-width elisp variable.
|
/// Corresponds to the tab-width elisp variable.
|
||||||
pub tab_width: IndentationLevel,
|
pub tab_width: IndentationLevel,
|
||||||
|
|
||||||
|
/// Whether to only allow odd headline levels.
|
||||||
|
///
|
||||||
|
/// Corresponds to org-odd-levels-only elisp variable.
|
||||||
|
pub odd_levels_only: HeadlineLevelFilter,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'g, 's> GlobalSettings<'g, 's> {
|
impl<'g, 's> GlobalSettings<'g, 's> {
|
||||||
@ -35,6 +40,7 @@ impl<'g, 's> GlobalSettings<'g, 's> {
|
|||||||
complete_todo_keywords: BTreeSet::new(),
|
complete_todo_keywords: BTreeSet::new(),
|
||||||
org_list_allow_alphabetical: false,
|
org_list_allow_alphabetical: false,
|
||||||
tab_width: 8,
|
tab_width: 8,
|
||||||
|
odd_levels_only: HeadlineLevelFilter::OddEven,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -44,3 +50,9 @@ impl<'g, 's> Default for GlobalSettings<'g, 's> {
|
|||||||
GlobalSettings::new()
|
GlobalSettings::new()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone)]
|
||||||
|
pub enum HeadlineLevelFilter {
|
||||||
|
Odd,
|
||||||
|
OddEven,
|
||||||
|
}
|
||||||
|
@ -25,5 +25,6 @@ pub(crate) use exiting::ExitClass;
|
|||||||
pub use file_access_interface::FileAccessInterface;
|
pub use file_access_interface::FileAccessInterface;
|
||||||
pub use file_access_interface::LocalFileAccessInterface;
|
pub use file_access_interface::LocalFileAccessInterface;
|
||||||
pub use global_settings::GlobalSettings;
|
pub use global_settings::GlobalSettings;
|
||||||
|
pub use global_settings::HeadlineLevelFilter;
|
||||||
pub(crate) use list::List;
|
pub(crate) use list::List;
|
||||||
pub(crate) use parser_with_context::parser_with_context;
|
pub(crate) use parser_with_context::parser_with_context;
|
||||||
|
@ -1,13 +1,17 @@
|
|||||||
use nom::branch::alt;
|
use nom::branch::alt;
|
||||||
|
use nom::bytes::complete::is_not;
|
||||||
use nom::bytes::complete::tag_no_case;
|
use nom::bytes::complete::tag_no_case;
|
||||||
use nom::character::complete::anychar;
|
use nom::character::complete::anychar;
|
||||||
|
use nom::character::complete::space1;
|
||||||
use nom::combinator::map;
|
use nom::combinator::map;
|
||||||
use nom::multi::many0;
|
use nom::multi::many0;
|
||||||
use nom::multi::many_till;
|
use nom::multi::many_till;
|
||||||
|
use nom::multi::separated_list0;
|
||||||
|
|
||||||
use super::keyword::filtered_keyword;
|
use super::keyword::filtered_keyword;
|
||||||
use super::keyword_todo::todo_keywords;
|
use super::keyword_todo::todo_keywords;
|
||||||
use super::OrgSource;
|
use super::OrgSource;
|
||||||
|
use crate::context::HeadlineLevelFilter;
|
||||||
use crate::error::Res;
|
use crate::error::Res;
|
||||||
use crate::types::Keyword;
|
use crate::types::Keyword;
|
||||||
use crate::GlobalSettings;
|
use crate::GlobalSettings;
|
||||||
@ -50,6 +54,7 @@ pub(crate) fn apply_in_buffer_settings<'g, 's, 'sf>(
|
|||||||
) -> Result<GlobalSettings<'g, 's>, String> {
|
) -> Result<GlobalSettings<'g, 's>, String> {
|
||||||
let mut new_settings = original_settings.clone();
|
let mut new_settings = original_settings.clone();
|
||||||
|
|
||||||
|
// Todo Keywords
|
||||||
for kw in keywords.iter().filter(|kw| {
|
for kw in keywords.iter().filter(|kw| {
|
||||||
kw.key.eq_ignore_ascii_case("todo")
|
kw.key.eq_ignore_ascii_case("todo")
|
||||||
|| kw.key.eq_ignore_ascii_case("seq_todo")
|
|| kw.key.eq_ignore_ascii_case("seq_todo")
|
||||||
@ -65,5 +70,18 @@ pub(crate) fn apply_in_buffer_settings<'g, 's, 'sf>(
|
|||||||
.extend(complete_words.into_iter().map(str::to_string));
|
.extend(complete_words.into_iter().map(str::to_string));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Startup settings
|
||||||
|
for kw in keywords
|
||||||
|
.iter()
|
||||||
|
.filter(|kw| kw.key.eq_ignore_ascii_case("startup"))
|
||||||
|
{
|
||||||
|
let (_remaining, settings) =
|
||||||
|
separated_list0(space1::<&str, nom::error::Error<_>>, is_not(" \t"))(kw.value)
|
||||||
|
.map_err(|err: nom::Err<_>| err.to_string())?;
|
||||||
|
if settings.contains(&"odd") {
|
||||||
|
new_settings.odd_levels_only = HeadlineLevelFilter::Odd;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Ok(new_settings)
|
Ok(new_settings)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user