use crate::selection::Selection; use crate::selection_function_param; use crate::selection_functions::types::{get_buffer, SFArguments, SFError, SFResult}; use crate::state::EditorState; selection_function_param! { name: character_structural, param_type: usize, niladic: |(param, es): (usize, &EditorState)| { let buf = get_buffer(es, es.current_buffer_id)?; Ok(Selection::Position { buffer_id: es.current_buffer_id, pos: usize::min(param, buf.max_pos()) }) }, monadic_rank0: |_, buffer_id, pos| Ok(Selection::Position {buffer_id, pos}), monadic_rank1: |(param, _), buffer_id, int| Ok(Selection::Position {buffer_id, pos: usize::min(int.end, *param)}) } selection_function_param! { name: character_sequential, param_type: usize, niladic: |(param, es): (usize, &EditorState)| { let buf = get_buffer(es, es.current_buffer_id)?; Ok(Selection::Position { buffer_id: es.current_buffer_id, pos: usize::min(param, buf.max_pos()), }) }, monadic_rank0: |(param, es), buffer_id, pos| { let buf = get_buffer(es, buffer_id)?; Ok(Selection::Position {buffer_id, pos: usize::min(pos+*param, buf.max_pos())}) }, monadic_rank1: |(param, es), buffer_id, int| { let buf = get_buffer(es, buffer_id)?; Ok(Selection::Position {buffer_id, pos: usize::min(int.end+*param, buf.max_pos())}) } }