MORKDJUERANZOBUWRC2F5766BEYYWXANAF3YAQ6YQ55WFQA7X64QC WT3GA27PQ2AOAIGK65O3Q4DMX4AZDVNULBLRL6GF4QW6QCASUEAAC S2NVIFXRFER4SRA37WCT5XTXHDHAL5WIGGKY4A4XOTPLTKTZSRGQC XSZZB47UXR6KGYFZZQFQR63X2LDKOH6TPNNBRRGHUCI5JJ4JIWVAC 5MUEECMJHU44FL5RDUR3VFBIWK3H4X2L5MVJ73J37PYHZWLUKU2AC A6Z4O6RC33HYWP7JIVQ6FDWE4EOCQWQTIGENK2WAHUGSHDDLSA7QC 3XRG4BB6V5V4DICZCMOZMLQNTANWKPO7BBRATTXOZLRNSEUQIA5AC WAOGSCOJ5A372BZKHEYD2BCDBCENNVLFYW3INKUOOAZMDADDIFIQC WH57EHNML4OTGQQZBT2SG6SOFTBOD6OJPJYHJVGPH22CSSOE25AAC EJPSD5XO43DWUBBZGNQMY4TMCAXL5EWCGX3OEHUERQ5GRASGWQLQC YK3MOJJLRYEKZ4FUCNJ3YKMTKOINWIYOJKR3ER7IRSGTC7O6FJZQC 7WCB5YQJJZIPUAFHTCQBWNI6ZM5XMIQJAKTLYTR7NOR5NKESRMDQC AZ5D2LQUSYVWVEP7ISFDSZTMZ65UEHZATILMDQ4TYLCKJH4Q3TIAC QUMAQ7IXNGTRVUPBLFURIISVDUOAB52OXFBXKCEAVY32IZQSGMCAC PKLUHYE4BGIMJKU6VKGBGSHEB2ZT53OYMTFBYCZYCO4J3RVTRXSAC CULHFNIVQ3ATML2W3Z45RARZ2LHGXONYTGGN2ETWAAMV7R3Y67AQC U3EAZKHRN3DBOOYM4GDEVJK2DJ6ULHOPOHJLCCHYV2EEPUBMYX5QC LFEMJYYDO45ASMQSOJ3TNID7B5UZXDHB3NWFZJXWOAWNBS6GMDEAC 5O4FWCFP4ZPAS7WKSYPHN76ML3O2S4JUOYWOV2ETD4TF2H6KZ6AQC YGZ3VCW4OAJYPI2CYK3MTABNFY7Y2ENSSTFE5ZZ4K6HK57FCU3XQC ODCT4QJNJLQTDNFPIF7HX4XCFTEXZBESG3PTD276O7TWB7MSGWMQC UTDTZCTXAAP6AHENYQP7MOQ5QNIKKXN34NV2ONWEGM4HA4FU637AC G5WLRXODOQR3PLO7G4RS2T3COBA3TXGOJJQ6DG5T2HA7C5K4APHAC OLT666N4VXRYJAVF4ZBYL3FDCQB5N42BFUCMVFWN4LP5AANKWGPQC TEDT26JQBWGATVTY6HZTIOGFR6BXW2BHSUKUTXTA7HOXARRQ5D6AC BJ3CYLUTYL3ODCU7XIQ2YIBQ6GMHP4IQ7HYMD4YCOPFRYEIYNWKQC EH7FHUXXZ2WEY6LLQOTUCVW6LW5LGTGRC3PMC4PCUVCDHVXLPUTAC YRGDFHABL6BRX55ZWIBGXX3ZX2R4WUV4BELP7JMW5AZX54P5BBIQC LPSUBGUBMG2QHJJSAWQ35SZIMUR62R6ODPWBS7TSNNXJ5UJCNABQC 23SFYK4Q5NKBPJG53PQNPWQH6UOUU2YKJEL7RLXYBRLJOJYV7AWQC 6YZAVBWU6E5FYOI5JGEIPXGZLIKAW6LS2AOFIQWEE5DMOPPCD5PQC .map(|action::Binding { key, label, msg }| {if let Some(msg) = msg {action_button(key, label, Msg::Action(msg.clone()))} else {el(action_button_inner(key, label))}})
.map(|action::Binding {keys_str,keys: _,label,msg,}| {if let Some(msg) = msg {action_button(keys_str, label, Msg::Action(msg.clone()))} else {el(action_button_inner(keys_str, label))}},)
impl ModKeys {pub fn iter(&self) -> ModKeysIter<'_> {ModKeysIter { keys: self, ix: 0 }}}pub struct ModKeysIter<'a> {keys: &'a ModKeys,ix: usize,}impl<'a> Iterator for ModKeysIter<'a> {type Item = &'a ModKey;fn next(&mut self) -> Option<Self::Item> {let Self { keys, ix } = self;match keys {ModKeys::One(mod_key) => {if *ix == 0 {*ix += 1;Some(mod_key)} else {None}}ModKeys::Two(mod_key_0, mod_key_1) => {if *ix == 0 {*ix += 1;Some(mod_key_0)} else if *ix == 1 {*ix += 1;Some(mod_key_1)} else {None}}}}}
let key_subs = match &state.model.sub {model::SubState::PickingRepoDir(_model) => {Subscription::none()// dir_picker::subs(&picking_repo.picker)// .map(view::Msg::PickingRepo)// .map(Msg::View)}model::SubState::ManagingRepo(model) => subs_managing_repo(model),model::SubState::PickingProject(_model) => Subscription::none(),};let window_subs = window::events().map(|(_id, event)| Msg::Window(event));Subscription::batch([key_subs, window_subs])}fn subs_managing_repo(_model: &model::ManagingRepo) -> Subscription<Msg> {use iced::keyboard::{self, key, Key, Modifiers};
use iced::keyboard::{self, key, Key};
keyboard::listen().filter_map(|event| {let action = |msg| Some(Msg::View(view::Msg::Action(msg)));let selection =|selection| action(action::FilteredMsg::Selection(selection));let unfiltered = |selection| {Some(Msg::View(view::Msg::UnfilteredSelection(selection)))};
let allowed_actions = state.model.allowed_actions.clone();let key_subs = keyboard::listen().with(allowed_actions).filter_map(|(allowed_actions, event)| {let unfiltered = |selection| {Some(Msg::View(view::Msg::UnfilteredSelection(selection)))};
match event {keyboard::Event::KeyPressed {key,modifiers: mods,
match event {keyboard::Event::KeyPressed { key, modifiers, .. } => {allowed_actions.iter().find_map(|binding| {binding.msg.as_ref().and_then(|msg| {if binding.keys.iter().any(|binding| {binding.key == key&& binding.mods == modifiers}) {Some(msg.clone())} else {None}})}).map(view::Msg::Action).map(Msg::View)}keyboard::Event::KeyReleased {key,modifiers: mods,
} => {if mods.is_empty() {match key {Key::Character(c) => match c.as_str() {// _____________________________________________// Directions"j" => selection(selection::Msg::PressDir(selection::Dir::Down,)),"k" => {selection(selection::Msg::PressDir(selection::Dir::Up))}"h" => selection(selection::Msg::PressDir(selection::Dir::Left,)),"l" => selection(selection::Msg::PressDir(selection::Dir::Right,)),// _____________________________________________// Other keys (sort alphabetically)"a" => action(action::FilteredMsg::AddUntrackedFile),"c" => action(action::FilteredMsg::SelectChannel),"e" => action(action::FilteredMsg::ShowEntireLog),"f" => action(action::FilteredMsg::ForkChannel),"t" => action(action::FilteredMsg::ToRecordToggleSelectedFileOrChange,),"r" => action(action::FilteredMsg::StartRecord),"x" => action(action::FilteredMsg::RmChange),_ => None,},Key::Named(key::Named::Enter) => {action(action::FilteredMsg::Confirm)}Key::Named(key::Named::Escape) => {action(action::FilteredMsg::Cancel)}Key::Named(key::Named::ArrowDown) => {selection(selection::Msg::PressDir(selection::Dir::Down))}Key::Named(key::Named::ArrowUp) => {selection(selection::Msg::PressDir(selection::Dir::Up))}Key::Named(key::Named::ArrowLeft) => {selection(selection::Msg::PressDir(selection::Dir::Left))}Key::Named(key::Named::ArrowRight) => {selection(selection::Msg::PressDir(selection::Dir::Right))}Key::Named(key::Named::Tab) => {action(action::FilteredMsg::FocusNext)}Key::Named(_) | Key::Unidentified => None,}} else {match key {Key::Character(c) => match c.as_str() {"c" if mods == Modifiers::CTRL => {action(action::FilteredMsg::ClipboardCopy)}"c" if mods == Modifiers::SHIFT | Modifiers::CTRL => {action(action::FilteredMsg::ClipboardCopyReports)}"d" if mods == Modifiers::CTRL => {action(action::FilteredMsg::DiscardRecord)}"p" if mods == Modifiers::CTRL => {action(action::FilteredMsg::PostponeRecord)}"r" if mods == Modifiers::CTRL => {action(action::FilteredMsg::RefreshRepo)}"r" if mods == Modifiers::SHIFT => {action(action::FilteredMsg::ToggleReports)}"s" if mods == Modifiers::CTRL => {action(action::FilteredMsg::SaveRecord)}"f" if mods == Modifiers::SHIFT => action(action::FilteredMsg::EnterSubMenu(model::SubMenu::Pull),),"j" if mods == Modifiers::SHIFT => selection(selection::Msg::AltPressDir(selection::Dir::Down),),"k" if mods == Modifiers::SHIFT => selection(selection::Msg::AltPressDir(selection::Dir::Up),),"h" if mods == Modifiers::SHIFT => selection(selection::Msg::AltPressDir(selection::Dir::Left),),"l" if mods == Modifiers::SHIFT => selection(selection::Msg::AltPressDir(selection::Dir::Right),),"p" if mods == Modifiers::SHIFT => action(action::FilteredMsg::EnterSubMenu(model::SubMenu::Push),),"t" if mods == Modifiers::SHIFT => {action(action::FilteredMsg::ToRecord(to_record::Msg::ToggleOverall,))}_ => None,},Key::Named(key::Named::ArrowDown)if mods == Modifiers::SHIFT =>{selection(selection::Msg::AltPressDir(selection::Dir::Down))}Key::Named(key::Named::ArrowUp) if mods == Modifiers::SHIFT => {selection(selection::Msg::AltPressDir(selection::Dir::Up))}Key::Named(key::Named::ArrowLeft)if mods == Modifiers::SHIFT =>{selection(selection::Msg::AltPressDir(selection::Dir::Left))}Key::Named(key::Named::ArrowRight)if mods == Modifiers::SHIFT =>{selection(selection::Msg::AltPressDir(selection::Dir::Right,))}Key::Named(key::Named::Tab) if mods == Modifiers::SHIFT => {action(action::FilteredMsg::FocusPrev)}Key::Named(_) | Key::Unidentified => None,}}}keyboard::Event::KeyReleased {key,modifiers: mods,..} => {if mods.is_empty() {match key {Key::Character(c) => match c.as_str() {"j" =>unfiltered(
} => {if mods.is_empty() {match key {Key::Character(c) => match c.as_str() {"j" => unfiltered(