use crate::selection::Selection; use crate::selection_function; use crate::selection_functions::types::{get_buffer, SFArguments, SFError, SFResult}; use crate::state::EditorState; selection_function! { name: end, niladic: |es: &EditorState| { let buf = get_buffer(es, es.current_buffer_id)?; Ok(Selection::Position { buffer_id: es.current_buffer_id, pos: buf.max_pos(), }) }, monadic_rank0: |_, buffer_id, pos | Ok(Selection::Position { buffer_id, pos }), monadic_rank1: |_, buffer_id, int | Ok(Selection::Position { buffer_id, pos: int.end }) } selection_function! { name: reverse_end, niladic: |es: &EditorState| { Ok(Selection::Position { buffer_id: es.current_buffer_id, pos: 0, }) }, monadic_rank0: |_, buffer_id, pos | Ok(Selection::Position { buffer_id, pos }), monadic_rank1: |_, buffer_id, int | Ok(Selection::Position { buffer_id, pos: int.start }) } selection_function! { name: sequential_end, niladic: |_| Err(SFError::NoNiladicForm(";$").into()), monadic_rank0: |_, buffer_id, pos| Ok(Selection::Position { buffer_id, pos }), monadic_rank1: |es, buffer_id, _| { let buf = get_buffer(es, buffer_id)?; Ok(Selection::Position { buffer_id, pos: buf.max_pos() }) } } selection_function! { name: sequential_reverse_end, niladic: |_| Err(SFError::NoNiladicForm(";'$").into()), monadic_rank0: |_, buffer_id, pos| { Ok(Selection::Position { buffer_id, pos }) }, monadic_rank1: |_, buffer_id, interval| { Ok(Selection::Position { buffer_id, pos: interval.end, }) } } selection_function! { name: reverse_sequential_end, niladic: |_| Err(SFError::NoNiladicForm("';$").into()), monadic_rank0: |_, buffer_id, pos| { Ok(Selection::Position { buffer_id, pos }) }, monadic_rank1: |_, buffer_id, interval| { Ok(Selection::Position { buffer_id, pos: interval.end, }) } }