/* * meli - ui crate. * * Copyright 2017-2018 Manos Pitsidianakis * * This file is part of meli. * * meli is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * meli is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with meli. If not, see . */ /*! A parser module for user commands passed through the Ex mode. */ pub use melib::mailbox::{SortField, SortOrder}; use nom::{digit, not_line_ending}; use std; pub mod actions; pub use crate::actions::Action::{self, *}; pub use crate::actions::ListingAction::{self, *}; pub use crate::actions::TabAction::{self, *}; named!( usize_c, map_res!( map_res!(ws!(digit), std::str::from_utf8), std::str::FromStr::from_str ) ); named!( sortfield, map_res!( map_res!(take_until_s!(" "), std::str::from_utf8), std::str::FromStr::from_str ) ); named!( sortorder, map_res!( map_res!(call!(not_line_ending), std::str::from_utf8), std::str::FromStr::from_str ) ); named!(close, map!(ws!(tag!("close")), |_| Tab(Close))); named!( goto, preceded!(tag!("go "), map!(call!(usize_c), Action::ViewMailbox)) ); named!( subsort, do_parse!(tag!("subsort ") >> p: pair!(sortfield, sortorder) >> (SubSort(p.0, p.1))) ); named!( sort, do_parse!( tag!("sort ") >> p: separated_pair!(sortfield, tag!(" "), sortorder) >> (Sort(p.0, p.1)) ) ); named!( threaded, map!(ws!(tag!("threaded")), |_| Listing(SetThreaded)) ); named!( plain, map!(ws!(tag!("plain")), |_| Listing(SetPlain)) ); named!( compact, map!(ws!(tag!("compact")), |_| Listing(SetCompact)) ); named!( toggle, preceded!(tag!("set "), alt_complete!(threaded | plain | compact)) ); named!( toggle_thread_snooze, map!(ws!(tag!("toggle_thread_snooze")), |_| ToggleThreadSnooze) ); named!(pub parse_command, alt_complete!( goto | toggle | sort | subsort | close | toggle_thread_snooze) );