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.
 | ||||
|     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> { | ||||
| @ -35,6 +40,7 @@ impl<'g, 's> GlobalSettings<'g, 's> { | ||||
|             complete_todo_keywords: BTreeSet::new(), | ||||
|             org_list_allow_alphabetical: false, | ||||
|             tab_width: 8, | ||||
|             odd_levels_only: HeadlineLevelFilter::OddEven, | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -44,3 +50,9 @@ impl<'g, 's> Default for GlobalSettings<'g, 's> { | ||||
|         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::LocalFileAccessInterface; | ||||
| pub use global_settings::GlobalSettings; | ||||
| pub use global_settings::HeadlineLevelFilter; | ||||
| pub(crate) use list::List; | ||||
| pub(crate) use parser_with_context::parser_with_context; | ||||
|  | ||||
| @ -1,13 +1,17 @@ | ||||
| use nom::branch::alt; | ||||
| use nom::bytes::complete::is_not; | ||||
| use nom::bytes::complete::tag_no_case; | ||||
| use nom::character::complete::anychar; | ||||
| use nom::character::complete::space1; | ||||
| use nom::combinator::map; | ||||
| use nom::multi::many0; | ||||
| use nom::multi::many_till; | ||||
| use nom::multi::separated_list0; | ||||
| 
 | ||||
| use super::keyword::filtered_keyword; | ||||
| use super::keyword_todo::todo_keywords; | ||||
| use super::OrgSource; | ||||
| use crate::context::HeadlineLevelFilter; | ||||
| use crate::error::Res; | ||||
| use crate::types::Keyword; | ||||
| use crate::GlobalSettings; | ||||
| @ -50,6 +54,7 @@ pub(crate) fn apply_in_buffer_settings<'g, 's, 'sf>( | ||||
| ) -> Result<GlobalSettings<'g, 's>, String> { | ||||
|     let mut new_settings = original_settings.clone(); | ||||
| 
 | ||||
|     // Todo Keywords
 | ||||
|     for kw in keywords.iter().filter(|kw| { | ||||
|         kw.key.eq_ignore_ascii_case("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)); | ||||
|     } | ||||
| 
 | ||||
|     // 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) | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Tom Alexander
						Tom Alexander