channel selection!
[?]
Jul 24, 2025, 4:12 PM
JZXYSIYDPBWQZCAMGDZ5BFMN6SU73EVVDIYEGTDJN6DVOSBNHN4QCDependencies
- [2]
6YZAVBWUInitial commit - [3]
SWWE2R6Mdisplay basic repo stuff - [4]
WT3GA27Padd cursor with selection - [5]
UB2ITZJSrefresh changed files on FS changes - [6]
EC3TVL4Xadd untracked files - [7]
S2NVIFXRallow to enter record msg - [8]
YBJRDOTCmake all repo actions async - [9]
KM5PSZ4Awatch repo once loaded - [10]
A5YBC77Vrecord! - [11]
D7A7MSIHallow to defer or abandon record, add buttons - [12]
AMPZ2BXKshow changed files diffs (only Edit atm) - [13]
MJDGPSHGWIP contents diff - [14]
ONRCENKTrm unnecessary state from repo's internal state - [15]
4ELJZGRJload and store all change diffs at once - [16]
FR52XEMWadd action for log change file diff - [17]
CALXOZXAflatten crates dir - [18]
L6KSEFQImove cursor related stuff into its module - [19]
BFN2VHZSrefactor file stuff into sub-mod - [20]
GWZGYNIBadd view crate - [21]
3SYSJKYLadd app icon - [22]
23SFYK4Qbig view refactor into a new crate - [23]
OPXFZKEBview tests setup - [24]
3QVNMRNMtest non-empty repo app view - [25]
MYGIBRRHwip custom theme - [26]
PKJCFSBMtheme improvements - [27]
XSZZB47Urefactor stuff into lib - [28]
3BK22XE5add a test for hover btn and more refactors - [29]
WGID4LS4absolutely slayed testing with iced task - [30]
VCNKFNUFapp init test - [31]
6F7Q4ZLRavoid unused warns - [32]
ACDXXAX2refactor main's updates into smaller fns - [33]
X6AK4QPXfinish recording test - [34]
KMB6FND3test view update fn rather than direct fn calls - [35]
YYKXNBFLtest: add untracked file - [36]
5CYU7UT7test: rm added file - [37]
ESMM3FELtest selection reindexing - [38]
TSFQFCB2test got repo change - [39]
7SSBM4UQview: refactor repo view - [40]
SWDPAGF6test channel name - [41]
I2AG42PAnew cols layout - [42]
SASAN2XCuse nav-scrollable - [43]
YKHE3XMWrefactor diffs handling - [44]
KEPKF3WOunify diffs handling, simplify view - [45]
KWTBNTO3diffs selection and scrolling - [46]
5MUEECMJsmooth scrolling nav - [47]
3TLPJ57Balt scroll via context and couple fixes - [48]
AI3IMKC3refactor stairs - [49]
WXQBBQ2Aupdate nightly - [50]
PTWZYQFRuse nav-scrollable for repo status - [51]
RDRBP7ALauto-scroll status selection - [52]
UR4J677Rnav for log changes and refactors - [53]
K63JN6CRrefactor out non-view field from cursor - [54]
A6Z4O6RCactions menu - [55]
7BLZN73Oadd a key to refresh repo - [56]
IQDCHWCPload a pijul repo - [57]
KT5UYXGKfix selection after adding file, add changed file diffs - [58]
ZVI4AWERwoot contents_diff - [59]
FVA36HBVrestart repo manager task if it crashes - [60]
S2T7RUKWadd nav back placeholder - [61]
SK3WVX7Aadd wee spacing for nav back - [62]
4G6DZDO6rename diff msg for nav-scrollable - [63]
NWJD6VM6mv libflowers libflorescence - [64]
DVKSPF7Rtrack selected file path together with an index - [65]
V55EAIWQadd src file LRU cache - [66]
ELG3UDT6allow to rm added files - [67]
QMAUTRB6refactor diff - [68]
JE44NYHMdisplay log files diffs - [69]
BNHJU2DUclippy fixes - [70]
Y5ATDI2Hconvert changed file diffs and load src only if any needs it - [71]
FDDPOH5Radd arrow controls - [72]
HOJZI52Yrename flowers_ui to inflorescence - [73]
I56UGW7Umake record test, fix log update - [74]
3GZPRZXCs/-/_ in crate paths - [75]
OQ6HSAWHshow record log - [76]
KQABQCCZupdate rust to 1.88 - [77]
K5YUSV2Wauto-scroll to last offset - [78]
W7IUT3ZVstart recording impl - [79]
4PNWU55Oreplace the circular hor navigation - [80]
BJXUYQ2Yshow untracked file contents in read-only text editor - [81]
GYZWZ33Tfix unwraps on navs for view
Change contents
- edit in libflorescence/src/repo.rs at line 40
/// Current channel - edit in libflorescence/src/repo.rs at line 42
/// All channels excluding the current onepub other_channels: Vec<String>, - edit in libflorescence/src/repo.rs at line 148
SwitchToChannel(String), - edit in libflorescence/src/repo.rs at line 297
}MsgIn::SwitchToChannel(name) => {let state: State;(internal_state, state) = spawn_blocking(move || {switch_to_channel(&mut internal_state, name);let state = get_state(&internal_state);(internal_state, state)}).await.unwrap();let _ = msg_out_tx.send(MsgOut::Refreshed(state)); - edit in libflorescence/src/repo.rs at line 319
let other_channels = other_channels(repo); - edit in libflorescence/src/repo.rs at line 328
other_channels, - replacement in libflorescence/src/repo.rs at line 340
let txn = repo.pristine.arc_txn_begin().unwrap();let read_guard = txn.read();read_guard.current_channel()let txn = repo.pristine.txn_begin().unwrap();txn.current_channel() - edit in libflorescence/src/repo.rs at line 344
}/// Get all channels excluding the current channelfn other_channels(repo: &pijul::Repository) -> Vec<String> {let txn = repo.pristine.txn_begin().unwrap();let current = txn.current_channel().unwrap_or(pijul::DEFAULT_CHANNEL);txn.channels("").unwrap().into_iter().filter_map(|channel| {let channel = channel.read();let name = txn.name(&*channel);(name != current).then(|| name.to_string())}).collect() - edit in libflorescence/src/repo.rs at line 361
fn switch_to_channel(state: &mut InternalState, name: String) {let repo = &state.repo;let current_channel = current_channel(repo);let txn = repo.pristine.arc_txn_begin().unwrap();if name == current_channel {return;} else {// Check there are no unrecorded changeslet channel = {let txn = txn.read();txn.load_channel(¤t_channel).unwrap()};if let Some(channel) = channel&& has_unrecorded_changes(txn.clone(), channel.clone(), repo){error!("Cannot change channel, as there are unrecorded changes.");return;}}txn.write().set_current_channel(&name).unwrap();txn.commit().unwrap();} - edit in libflorescence/src/repo.rs at line 1030[12.1191]
fn has_unrecorded_changes(txn: pijul::ArcTxn<libpijul::pristine::sanakirja::MutTxn<()>>,channel: pijul::ChannelRef<libpijul::pristine::sanakirja::MutTxn<()>>,repo: &pijul::Repository,) -> bool {let mut state = libpijul::RecordBuilder::new();state.record(txn,libpijul::Algorithm::default(),false,&libpijul::DEFAULT_SEPARATOR,channel,&repo.working_copy,&repo.changes,"",std::thread::available_parallelism().unwrap().get(),).unwrap();let rec = state.finish();debug!("actions = {:?}", rec.actions);!rec.actions.is_empty()} - file move: cursor.rs → selection.rs
- replacement in inflorescence_view/src/selection.rs at line 27
pub selection: Option<Selection>,pub status: Option<Status>,pub channel: Option<Channel>, - replacement in inflorescence_view/src/selection.rs at line 38
pub enum Selection {pub enum Status { - edit in inflorescence_view/src/selection.rs at line 84[27.4444]
#[derive(Debug, Clone)]pub struct Channel {pub ix: usize,pub name: String,} - edit in inflorescence_view/src/lib.rs at line 2
pub mod cursor; - edit in inflorescence_view/src/lib.rs at line 3
pub mod selection; - replacement in inflorescence_view/src/app.rs at line 6
use crate::{cursor, diff, el, theme, Theme};use crate::{diff, el, selection, theme, Theme}; - replacement in inflorescence_view/src/app.rs at line 12
use iced::{font, window, Element, Font, Length, Padding};use iced::{alignment, font, window, Element, Font, Length, Padding}; - replacement in inflorescence_view/src/app.rs at line 30
pub selection: Option<Selection<'a>>,pub status_selection: Option<StatusSelection<'a>>,pub channel_selection: Option<&'a selection::Channel>, - edit in inflorescence_view/src/app.rs at line 40
/// `Some` when we're selecting a channel to switch to.pub switching_channel: bool, - replacement in inflorescence_view/src/app.rs at line 45
pub enum Selection<'a> {pub enum StatusSelection<'a> { - replacement in inflorescence_view/src/app.rs at line 83
Cursor(cursor::Msg),Confirm,Cancel,Selection(selection::Msg), - edit in inflorescence_view/src/app.rs at line 109
/// Show a list of channels to switch toSwitchChannel, - replacement in inflorescence_view/src/app.rs at line 129
selection,status_selection,channel_selection, - replacement in inflorescence_view/src/app.rs at line 133
view_repo(window_size, repo_path, repo, record_msg, selection)view_repo(window_size,repo_path,repo,record_msg,status_selection,channel_selection,) - replacement in inflorescence_view/src/app.rs at line 147
.height(Length::Fill)).height(Length::Fill).padding(Padding::from([2, 5]))) - replacement in inflorescence_view/src/app.rs at line 157
selection: Option<Selection<'a>>,status_selection: Option<StatusSelection<'a>>,channel_selection: Option<&'a selection::Channel>, - edit in inflorescence_view/src/app.rs at line 165
other_channels, - edit in inflorescence_view/src/app.rs at line 171
switching_channel, - edit in inflorescence_view/src/app.rs at line 173
let can_switch_channel = changed_files.is_empty(); - replacement in inflorescence_view/src/app.rs at line 178[52.2948]→[39.499:535](∅→∅),[39.499]→[39.499:535](∅→∅),[39.535]→[52.2949:3052](∅→∅),[52.3052]→[39.650:670](∅→∅),[39.650]→[39.650:670](∅→∅)
el(text(": ")),el(button(text(channel)), /* TODO* .on_press(Message) */),]));el(text(", channel: ")),el(button(text(channel)).on_press_maybe(can_switch_channel.then_some(Msg::SwitchChannel))),]).align_y(alignment::Vertical::Center)); - replacement in inflorescence_view/src/app.rs at line 187
let is_selected = matches!(selection.as_ref() ,Some(Selection::UntrackedFile{ ix: selected_ix, .. }) if &ix == selected_ixlet is_selected = matches!(status_selection.as_ref() ,Some(StatusSelection::UntrackedFile{ ix: selected_ix, .. }) if &ix == selected_ix - replacement in inflorescence_view/src/app.rs at line 194
.on_press(Msg::Cursor(cursor::Msg::Select(cursor::Select::UntrackedFile{ix, path: path.clone()},.on_press(Msg::Selection(selection::Msg::Select(selection::Select::UntrackedFile{ix, path: path.clone()}, - replacement in inflorescence_view/src/app.rs at line 206
let is_selected = matches!(selection.as_ref(),Some(Selection::ChangedFile{ ix: selected_ix, .. }) if &ix == selected_ixlet is_selected = matches!(status_selection.as_ref(),Some(StatusSelection::ChangedFile{ ix: selected_ix, .. }) if &ix == selected_ix - replacement in inflorescence_view/src/app.rs at line 214
.on_press(Msg::Cursor(cursor::Msg::Select(cursor::Select::ChangedFile{ix, path: file_path.clone()},.on_press(Msg::Selection(selection::Msg::Select(selection::Select::ChangedFile{ix, path: file_path.clone()}, - replacement in inflorescence_view/src/app.rs at line 231
let is_selected = matches!(selection.as_ref(),Some(Selection::Log { ix: selected_ix, .. }) if &ix == selected_ixlet is_selected = matches!(status_selection.as_ref(),Some(StatusSelection::Log { ix: selected_ix, .. }) if &ix == selected_ix - replacement in inflorescence_view/src/app.rs at line 236
.on_press(Msg::Cursor(cursor::Msg::Select(cursor::Select::LogChange { ix, hash: *hash, message: message.clone() },.on_press(Msg::Selection(selection::Msg::Select(selection::Select::LogChange { ix, hash: *hash, message: message.clone() }, - replacement in inflorescence_view/src/app.rs at line 263
let selection_details = match selection.as_ref() {Some(Selection::UntrackedFile { ix: _, path, diff }) => {let selection_details = match status_selection.as_ref() {Some(StatusSelection::UntrackedFile { ix: _, path, diff }) => { - replacement in inflorescence_view/src/app.rs at line 283
Some(Selection::ChangedFile {Some(StatusSelection::ChangedFile { - replacement in inflorescence_view/src/app.rs at line 306
Some(Selection::Log {Some(StatusSelection::Log { - replacement in inflorescence_view/src/app.rs at line 322
Msg::Cursor(cursor::Msg::Select(cursor::Select::LogChangeFile { ix, path: path.clone() }))Msg::Selection(selection::Msg::Select(selection::Select::LogChangeFile { ix, path: path.clone() })) - replacement in inflorescence_view/src/app.rs at line 357
} else if let Some(selection) = selection.as_ref() {} else if let Some(selection) = status_selection.as_ref() { - replacement in inflorescence_view/src/app.rs at line 359
Selection::UntrackedFile { .. }| Selection::ChangedFile { .. }| Selection::Log { file: None, .. } => 1,Selection::Log { file: Some(_), .. } => 2,StatusSelection::UntrackedFile { .. }| StatusSelection::ChangedFile { .. }| StatusSelection::Log { file: None, .. } => 1,StatusSelection::Log { file: Some(_), .. } => 2, - replacement in inflorescence_view/src/app.rs at line 384
let status_selected = match selection.as_ref() {Some(Selection::UntrackedFile { diff, .. }) => !difflet status_selected = match status_selection.as_ref() {Some(StatusSelection::UntrackedFile { diff, .. }) => !diff - replacement in inflorescence_view/src/app.rs at line 389
Some(Selection::ChangedFile { diff, .. }) => !diffSome(StatusSelection::ChangedFile { diff, .. }) => !diff - replacement in inflorescence_view/src/app.rs at line 393
Some(Selection::Log { file, .. }) => file.is_none(),Some(StatusSelection::Log { file, .. }) => file.is_none(), - replacement in inflorescence_view/src/app.rs at line 420
.on_press(Msg::Cursor(cursor::Msg::PressDir(cursor::Dir::Left)))).on_press(Msg::Selection(selection::Msg::PressDir(selection::Dir::Left,)))) - replacement in inflorescence_view/src/app.rs at line 431
let col_2 = match selection.as_ref() {Some(Selection::Log {let col_2 = match status_selection.as_ref() {Some(StatusSelection::Log { - replacement in inflorescence_view/src/app.rs at line 472
.on_press(Msg::Cursor(cursor::Msg::PressDir(cursor::Dir::Left),.on_press(Msg::Selection(selection::Msg::PressDir(selection::Dir::Left), - replacement in inflorescence_view/src/app.rs at line 483
Some(Selection::UntrackedFile { .. })| Some(Selection::ChangedFile { .. })| Some(Selection::Log { .. })Some(StatusSelection::UntrackedFile { .. })| Some(StatusSelection::ChangedFile { .. })| Some(StatusSelection::Log { .. }) - replacement in inflorescence_view/src/app.rs at line 489
let main = if let Some(col_2) = col_2 {let view_channels = || {other_channels.iter().enumerate().map(|(ix, channel)| {let is_selected = matches!(channel_selection,Some(selection::Channel{ ix: selected_ix, .. }) if &ix == selected_ix);el(button(text(channel)).on_press(Msg::Confirm).class(selectable_button_class(is_selected)))})};let main = if *switching_channel {if other_channels.is_empty() {el(column([el(text(format!("Current channel: {channel}")))]))} else {el(column([el(text(format!("Current channel: {channel}. Switch to:"))),el(column(view_channels())),]))}} else if let Some(col_2) = col_2 { - replacement in inflorescence_view/src/app.rs at line 523
let actions_inner = view_actions(action_state(repo, record_msg, selection));let actions_inner = view_actions(action_state(repo,record_msg,status_selection,channel_selection,)); - replacement in inflorescence_view/src/app.rs at line 533
.padding(Padding::from([4, 6])));.padding(Padding::from([2, 5]))); - replacement in inflorescence_view/src/app.rs at line 549
Msg::Cursor(cursor::Msg::PressDir(cursor::Dir::Left)),Msg::Selection(selection::Msg::PressDir(selection::Dir::Left)), - replacement in inflorescence_view/src/app.rs at line 555
Msg::Cursor(cursor::Msg::PressDir(cursor::Dir::Down)),Msg::Selection(selection::Msg::PressDir(selection::Dir::Down)), - replacement in inflorescence_view/src/app.rs at line 561
Msg::Cursor(cursor::Msg::PressDir(cursor::Dir::Up)),Msg::Selection(selection::Msg::PressDir(selection::Dir::Up)), - replacement in inflorescence_view/src/app.rs at line 567
Msg::Cursor(cursor::Msg::PressDir(cursor::Dir::Right)),Msg::Selection(selection::Msg::PressDir(selection::Dir::Right)), - replacement in inflorescence_view/src/app.rs at line 573
Msg::Cursor(cursor::Msg::AltPressDir(cursor::Dir::Down)),Msg::Selection(selection::Msg::AltPressDir(selection::Dir::Down)), - replacement in inflorescence_view/src/app.rs at line 579
Msg::Cursor(cursor::Msg::AltPressDir(cursor::Dir::Up)),Msg::Selection(selection::Msg::AltPressDir(selection::Dir::Up)), - edit in inflorescence_view/src/app.rs at line 591
let switch_channel =|| action_button("c: switch channel", Msg::SwitchChannel); - edit in inflorescence_view/src/app.rs at line 594
let confirm = || action_button("Enter: confirm", Msg::Confirm);let cancel = || action_button("Esc: cancel", Msg::Cancel); - edit in inflorescence_view/src/app.rs at line 607
#[allow(clippy::let_and_return)] - replacement in inflorescence_view/src/app.rs at line 615
match selection {let row = match selection { - replacement in inflorescence_view/src/app.rs at line 630
}};let row = add_if(!can_record, switch_channel(), row);row - replacement in inflorescence_view/src/app.rs at line 640
add_if(can_record, start_record(), row)let row = add_if(can_record, start_record(), row);let row = add_if(!can_record, switch_channel(), row);row - replacement in inflorescence_view/src/app.rs at line 646
add_if(can_record, start_record(), row)let row = add_if(can_record, start_record(), row);let row = add_if(!can_record, switch_channel(), row);row - edit in inflorescence_view/src/app.rs at line 653
ActionState::SwitchingChannel(state) => match state {SwitchingChannelState::NoOtherChannels => row([cancel()]),SwitchingChannelState::NothingSelected => {row([down(), up(), cancel()])}SwitchingChannelState::SomethingSelected => {row([down(), up(), confirm(), cancel()])}}, - replacement in inflorescence_view/src/app.rs at line 682
Diff { can_record: bool },Diff {can_record: bool,}, - edit in inflorescence_view/src/app.rs at line 687
SwitchingChannel(SwitchingChannelState), - edit in inflorescence_view/src/app.rs at line 696
enum SwitchingChannelState {NoOtherChannels,NothingSelected,SomethingSelected,} - replacement in inflorescence_view/src/app.rs at line 706
selection: Option<Selection<'a>>,status_selection: Option<StatusSelection<'a>>,channel_selection: Option<&'a selection::Channel>, - edit in inflorescence_view/src/app.rs at line 712
}if repo.switching_channel {let sub_state = if repo.state.other_channels.is_empty() {SwitchingChannelState::NoOtherChannels} else if channel_selection.is_some() {SwitchingChannelState::SomethingSelected} else {SwitchingChannelState::NothingSelected};return ActionState::SwitchingChannel(sub_state); - replacement in inflorescence_view/src/app.rs at line 727
match selection {Some(Selection::UntrackedFile {match status_selection {Some(StatusSelection::UntrackedFile { - replacement in inflorescence_view/src/app.rs at line 754
Some(Selection::ChangedFile {Some(StatusSelection::ChangedFile { - replacement in inflorescence_view/src/app.rs at line 788
Some(Selection::Log {Some(StatusSelection::Log { - replacement in inflorescence_view/src/app/test.rs at line 1
use super::{view, Repo, Selection, State};use super::{view, Repo, State, StatusSelection}; - replacement in inflorescence_view/src/app/test.rs at line 38
selection: None,status_selection: None,channel_selection: None, - edit in inflorescence_view/src/app/test.rs at line 50
other_channels: vec![], - edit in inflorescence_view/src/app/test.rs at line 61
switching_channel: false, - replacement in inflorescence_view/src/app/test.rs at line 68
selection: None,status_selection: None,channel_selection: None, - edit in inflorescence_view/src/app/test.rs at line 80
other_channels: vec![], - replacement in inflorescence_view/src/app/test.rs at line 110
selection: None,status_selection: None,channel_selection: None, - replacement in inflorescence_view/src/app/test.rs at line 124
selection: None,status_selection: None,channel_selection: None, - replacement in inflorescence_view/src/app/test.rs at line 142
let selection = Some(Selection::UntrackedFile {let status_selection = Some(StatusSelection::UntrackedFile { - replacement in inflorescence_view/src/app/test.rs at line 152
selection,status_selection,channel_selection: None, - replacement in inflorescence/src/test.rs at line 2
cursor, init, reindex_selection, repo_got_change_diffs, update, Msg, State,init, reindex_selection, repo_got_change_diffs, selection, update, Msg,State, - replacement in inflorescence/src/test.rs at line 110
Msg::View(app::Msg::Cursor(cursor::Msg::Select(cursor::Select::UntrackedFile {Msg::View(app::Msg::Selection(selection::Msg::Select(selection::Select::UntrackedFile { - replacement in inflorescence/src/test.rs at line 188
state.cursor.view.selection = Some(cursor::Selection::UntrackedFile {state.selection.view.selection = Some(selection::Status::UntrackedFile { - replacement in inflorescence/src/test.rs at line 338
Msg::View(app::Msg::Cursor(cursor::Msg::Select(cursor::Select::UntrackedFile {Msg::View(app::Msg::Selection(selection::Msg::Select(selection::Select::UntrackedFile { - replacement in inflorescence/src/test.rs at line 373
Msg::View(app::Msg::Cursor(cursor::Msg::Select(cursor::Select::ChangedFile {Msg::View(app::Msg::Selection(selection::Msg::Select(selection::Select::ChangedFile { - replacement in inflorescence/src/test.rs at line 432
assert!(state.cursor.view.selection.is_none());assert!(state.selection.view.status.is_none()); - replacement in inflorescence/src/test.rs at line 435
&mut state.cursor,&mut state.selection, - replacement in inflorescence/src/test.rs at line 442
assert!(state.cursor.view.selection.is_none());assert!(state.selection.view.status.is_none()); - replacement in inflorescence/src/test.rs at line 456
state.cursor.view.selection = Some(cursor::Selection::UntrackedFile {state.selection.view.selection = Some(selection::Status::UntrackedFile { - replacement in inflorescence/src/test.rs at line 462
&mut state.cursor,&mut state.selection, - replacement in inflorescence/src/test.rs at line 469
assert!(state.cursor.view.selection.is_some());assert!(state.selection.view.status.is_some()); - replacement in inflorescence/src/test.rs at line 471
state.cursor.view.selection.as_ref().unwrap(),cursor::Selection::UntrackedFile { ix, path, diff_selected }state.selection.view.status.as_ref().unwrap(),selection::Status::UntrackedFile { ix, path, diff_selected } - replacement in inflorescence/src/test.rs at line 491
state.cursor.view.selection = Some(cursor::Selection::UntrackedFile {state.selection.view.selection = Some(selection::Status::UntrackedFile { - replacement in inflorescence/src/test.rs at line 497
&mut state.cursor,&mut state.selection, - replacement in inflorescence/src/test.rs at line 504
assert!(state.cursor.view.selection.is_none());assert!(state.selection.view.status.is_none()); - replacement in inflorescence/src/test.rs at line 522
state.cursor.view.selection = Some(cursor::Selection::ChangedFile {state.selection.view.selection = Some(selection::Status::ChangedFile { - replacement in inflorescence/src/test.rs at line 528
&mut state.cursor,&mut state.selection, - replacement in inflorescence/src/test.rs at line 535
assert!(state.cursor.view.selection.is_some());assert!(state.selection.view.status.is_some()); - replacement in inflorescence/src/test.rs at line 537
state.cursor.view.selection.as_ref().unwrap(),cursor::Selection::ChangedFile { ix, path, diff_selected }state.selection.view.status.as_ref().unwrap(),selection::Status::ChangedFile { ix, path, diff_selected } - replacement in inflorescence/src/test.rs at line 559
state.cursor.view.selection = Some(cursor::Selection::ChangedFile {state.selection.view.selection = Some(selection::Status::ChangedFile { - replacement in inflorescence/src/test.rs at line 565
&mut state.cursor,&mut state.selection, - replacement in inflorescence/src/test.rs at line 572
assert!(state.cursor.view.selection.is_some());assert!(state.selection.view.status.is_some()); - replacement in inflorescence/src/test.rs at line 574
state.cursor.view.selection.as_ref().unwrap(),cursor::Selection::ChangedFile { ix, path, diff_selected }state.selection.view.status.as_ref().unwrap(),selection::Status::ChangedFile { ix, path, diff_selected } - replacement in inflorescence/src/test.rs at line 585
state.cursor.view.selection = Some(cursor::Selection::ChangedFile {state.selection.view.selection = Some(selection::Status::ChangedFile { - replacement in inflorescence/src/test.rs at line 591
&mut state.cursor,&mut state.selection, - replacement in inflorescence/src/test.rs at line 598
assert!(state.cursor.view.selection.is_none());assert!(state.selection.view.status.is_none()); - replacement in inflorescence/src/test.rs at line 627
state.cursor.view.selection = Some(cursor::Selection::LogChange {state.selection.view.selection = Some(selection::Status::LogChange { - replacement in inflorescence/src/test.rs at line 634
&mut state.cursor,&mut state.selection, - replacement in inflorescence/src/test.rs at line 641
assert!(state.cursor.view.selection.is_some());assert!(state.selection.view.status.is_some()); - replacement in inflorescence/src/test.rs at line 643
state.cursor.view.selection.as_ref().unwrap(),cursor::Selection::LogChange { ix, hash, .. }state.selection.view.status.as_ref().unwrap(),selection::Status::LogChange { ix, hash, .. } - replacement in inflorescence/src/test.rs at line 654
state.cursor.view.selection = Some(cursor::Selection::UntrackedFile {state.selection.view.selection = Some(selection::Status::UntrackedFile { - replacement in inflorescence/src/test.rs at line 660
&mut state.cursor,&mut state.selection, - replacement in inflorescence/src/test.rs at line 667
assert!(state.cursor.view.selection.is_none());assert!(state.selection.view.status.is_none()); - replacement in inflorescence/src/test.rs at line 691
assert!(state.cursor.view.selection.is_none());assert!(state.selection.view.status.is_none()); - replacement in inflorescence/src/test.rs at line 695
assert!(state.cursor.view.selection.is_none());assert!(state.selection.view.status.is_none()); - replacement in inflorescence/src/test.rs at line 700
state.cursor.view.selection = Some(cursor::Selection::LogChange {state.selection.view.selection = Some(selection::Status::LogChange { - replacement in inflorescence/src/test.rs at line 709
assert!(state.cursor.view.selection.is_some());assert!(state.selection.view.status.is_some()); - replacement in inflorescence/src/test.rs at line 714
state.cursor.view.selection = Some(cursor::Selection::LogChange {state.selection.view.selection = Some(selection::Status::LogChange { - replacement in inflorescence/src/test.rs at line 723
assert!(state.cursor.view.selection.is_some());assert!(state.selection.view.status.is_some()); - file move: cursor.rs → selection.rs
- replacement in inflorescence/src/selection.rs at line 4
pub use inflorescence_view::cursor::{Dir, HeldKey, LogChangeFileSelection, Msg, Select, Selection,State as ViewState,pub use inflorescence_view::selection::{Channel, Dir, HeldKey, LogChangeFileSelection, Msg, Select,State as ViewState, Status, - edit in inflorescence/src/selection.rs at line 127
switching_channel, - replacement in inflorescence/src/selection.rs at line 132
let (selection, task) = match state.view.selection.take() {Some(Selection::UntrackedFile {if *switching_channel {let channels = &repo_state.other_channels;let selection = match state.view.channel.take() {Some(Channel { ix, name: _ }) => {let ix = if ix == channels.len() - 1 { 0 } else { ix + 1 };channel_selection(ix, channels)}None => {let ix = 0;channel_selection(ix, channels)}};state.view.channel = Some(selection);return Task::none();}let (selection, task) = match state.view.status.take() {Some(Status::UntrackedFile { - replacement in inflorescence/src/selection.rs at line 158
Selection::UntrackedFile {Status::UntrackedFile { - replacement in inflorescence/src/selection.rs at line 218
Some(Selection::ChangedFile {Some(Status::ChangedFile { - replacement in inflorescence/src/selection.rs at line 226
Selection::ChangedFile {Status::ChangedFile { - replacement in inflorescence/src/selection.rs at line 286
Some(Selection::LogChange {Some(Status::LogChange { - replacement in inflorescence/src/selection.rs at line 300
let selection = Selection::LogChange {let selection = Status::LogChange { - replacement in inflorescence/src/selection.rs at line 347
let selection = Selection::LogChange {let selection = Status::LogChange { - replacement in inflorescence/src/selection.rs at line 441
state.view.selection = selection;state.view.status = selection; - edit in inflorescence/src/selection.rs at line 456
switching_channel, - replacement in inflorescence/src/selection.rs at line 461
let (selection, task) = match state.view.selection.take() {Some(Selection::UntrackedFile {if *switching_channel {let channels = &repo_state.other_channels;let selection = match state.view.channel.take() {Some(Channel { ix, name: _ }) => {let ix = if ix == 0 { channels.len() - 1 } else { ix - 1 };channel_selection(ix, channels)}None => {let ix = channels.len() - 1;channel_selection(ix, channels)}};state.view.channel = Some(selection);return Task::none();}let (selection, task) = match state.view.status.take() {Some(Status::UntrackedFile { - replacement in inflorescence/src/selection.rs at line 487
Selection::UntrackedFile {Status::UntrackedFile { - replacement in inflorescence/src/selection.rs at line 547
Some(Selection::ChangedFile {Some(Status::ChangedFile { - replacement in inflorescence/src/selection.rs at line 555
Selection::ChangedFile {Status::ChangedFile { - replacement in inflorescence/src/selection.rs at line 615
Some(Selection::LogChange {Some(Status::LogChange { - replacement in inflorescence/src/selection.rs at line 629
let selection = Selection::LogChange {let selection = Status::LogChange { - replacement in inflorescence/src/selection.rs at line 673
let selection = Selection::LogChange {let selection = Status::LogChange { - replacement in inflorescence/src/selection.rs at line 768
state.view.selection = selection;state.view.status = selection; - replacement in inflorescence/src/selection.rs at line 778
match state.view.selection.as_mut() {Some(Selection::UntrackedFile {match state.view.status.as_mut() {Some(Status::UntrackedFile { - replacement in inflorescence/src/selection.rs at line 798
Some(Selection::ChangedFile {Some(Status::ChangedFile { - replacement in inflorescence/src/selection.rs at line 817
Some(Selection::LogChange {Some(Status::LogChange { - replacement in inflorescence/src/selection.rs at line 839
Some(Selection::UntrackedFile { .. })| Some(Selection::ChangedFile { .. })| Some(Selection::LogChange { .. })Some(Status::UntrackedFile { .. })| Some(Status::ChangedFile { .. })| Some(Status::LogChange { .. }) - replacement in inflorescence/src/selection.rs at line 852
match state.view.selection.as_mut() {Some(Selection::UntrackedFile {match state.view.status.as_mut() {Some(Status::UntrackedFile { - replacement in inflorescence/src/selection.rs at line 872
Some(Selection::ChangedFile {Some(Status::ChangedFile { - replacement in inflorescence/src/selection.rs at line 891
Some(Selection::LogChange {Some(Status::LogChange { - replacement in inflorescence/src/selection.rs at line 913
Some(Selection::UntrackedFile { .. })| Some(Selection::ChangedFile { .. })| Some(Selection::LogChange { .. })Some(Status::UntrackedFile { .. })| Some(Status::ChangedFile { .. })| Some(Status::LogChange { .. }) - edit in inflorescence/src/selection.rs at line 927
switching_channel: _, - replacement in inflorescence/src/selection.rs at line 932[48.14096]→[52.34967:35034](∅→∅),[52.35034]→[53.1289:1333](∅→∅),[53.1333]→[52.35073:35113](∅→∅),[52.35073]→[52.35073:35113](∅→∅)
let (selection, task): (Option<Selection>, Task<crate::Msg>) =match state.view.selection.take() {Some(Selection::LogChange {let (selection, task): (Option<Status>, Task<crate::Msg>) =match state.view.status.take() {Some(Status::LogChange { - replacement in inflorescence/src/selection.rs at line 947
Some(Selection::LogChange {Some(Status::LogChange { - replacement in inflorescence/src/selection.rs at line 960
let selection = Selection::LogChange {let selection = Status::LogChange { - replacement in inflorescence/src/selection.rs at line 972
Some(Selection::UntrackedFile {Some(Status::UntrackedFile { - replacement in inflorescence/src/selection.rs at line 977
Some(Selection::UntrackedFile {Some(Status::UntrackedFile { - replacement in inflorescence/src/selection.rs at line 984
Some(Selection::ChangedFile {Some(Status::ChangedFile { - replacement in inflorescence/src/selection.rs at line 989
Some(Selection::ChangedFile {Some(Status::ChangedFile { - replacement in inflorescence/src/selection.rs at line 996
selection @ (Some(Selection::UntrackedFile { .. })| Some(Selection::ChangedFile { .. })| Some(Selection::LogChange { file: None, .. })selection @ (Some(Status::UntrackedFile { .. })| Some(Status::ChangedFile { .. })| Some(Status::LogChange { file: None, .. }) - replacement in inflorescence/src/selection.rs at line 1001
state.view.selection = selection;state.view.status = selection; - edit in inflorescence/src/selection.rs at line 1014
switching_channel: _, - replacement in inflorescence/src/selection.rs at line 1019
let (selection, task): (Option<Selection>, Task<crate::Msg>) = match statelet (selection, task): (Option<Status>, Task<crate::Msg>) = match state - replacement in inflorescence/src/selection.rs at line 1021
.selection.status - replacement in inflorescence/src/selection.rs at line 1024
Some(Selection::UntrackedFile {Some(Status::UntrackedFile { - replacement in inflorescence/src/selection.rs at line 1045
Some(Selection::UntrackedFile {Some(Status::UntrackedFile { - replacement in inflorescence/src/selection.rs at line 1053
Some(Selection::ChangedFile {Some(Status::ChangedFile { - replacement in inflorescence/src/selection.rs at line 1074
Some(Selection::ChangedFile {Some(Status::ChangedFile { - replacement in inflorescence/src/selection.rs at line 1082
Some(Selection::LogChange {Some(Status::LogChange { - replacement in inflorescence/src/selection.rs at line 1124
Some(Selection::LogChange {Some(Status::LogChange { - replacement in inflorescence/src/selection.rs at line 1133
Some(Selection::LogChange {Some(Status::LogChange { - replacement in inflorescence/src/selection.rs at line 1158
Some(Selection::LogChange {Some(Status::LogChange { - replacement in inflorescence/src/selection.rs at line 1173
state.view.selection = selection;state.view.status = selection; - replacement in inflorescence/src/selection.rs at line 1187
match state.view.selection.as_mut() {Some(Selection::UntrackedFile {match state.view.status.as_mut() {Some(Status::UntrackedFile { - replacement in inflorescence/src/selection.rs at line 1203
Some(Selection::ChangedFile {Some(Status::ChangedFile { - replacement in inflorescence/src/selection.rs at line 1218
Some(Selection::LogChange {Some(Status::LogChange { - replacement in inflorescence/src/selection.rs at line 1238
Some(Selection::UntrackedFile { .. })| Some(Selection::ChangedFile { .. })| Some(Selection::LogChange { .. })Some(Status::UntrackedFile { .. })| Some(Status::ChangedFile { .. })| Some(Status::LogChange { .. }) - edit in inflorescence/src/selection.rs at line 1259
switching_channel: _, - replacement in inflorescence/src/selection.rs at line 1287
Some(Selection::UntrackedFile {Some(Status::UntrackedFile { - replacement in inflorescence/src/selection.rs at line 1321
Some(Selection::ChangedFile {Some(Status::ChangedFile { - replacement in inflorescence/src/selection.rs at line 1330
Some(Selection::LogChange {Some(Status::LogChange { - replacement in inflorescence/src/selection.rs at line 1339
match state.view.selection.take() {Some(Selection::LogChange {match state.view.status.take() {Some(Status::LogChange { - replacement in inflorescence/src/selection.rs at line 1367
Some(Selection::LogChange {Some(Status::LogChange { - replacement in inflorescence/src/selection.rs at line 1380
state.view.selection = selection;state.view.status = selection; - replacement in inflorescence/src/selection.rs at line 1418
) -> (Selection, Task<crate::Msg>) {) -> (Status, Task<crate::Msg>) { - replacement in inflorescence/src/selection.rs at line 1460
let selection = Selection::UntrackedFile {let selection = Status::UntrackedFile { - replacement in inflorescence/src/selection.rs at line 1476
) -> (Selection, Task<crate::Msg>) {) -> (Status, Task<crate::Msg>) { - replacement in inflorescence/src/selection.rs at line 1520
let selection = Selection::ChangedFile {let selection = Status::ChangedFile { - replacement in inflorescence/src/selection.rs at line 1535
) -> (Selection, Task<crate::Msg>) {) -> (Status, Task<crate::Msg>) { - replacement in inflorescence/src/selection.rs at line 1569
let selection = Selection::LogChange {let selection = Status::LogChange { - edit in inflorescence/src/selection.rs at line 1617
}fn channel_selection(ix: usize, channels: &[String]) -> Channel {let name = channels.get(ix).unwrap().clone();Channel { ix, name } - edit in inflorescence/src/main.rs at line 1
mod cursor; - edit in inflorescence/src/main.rs at line 3
mod selection; - replacement in inflorescence/src/main.rs at line 50
let repo_path = PathBuf::from("/home/tz/dev/pijul");let repo_path = PathBuf::from("/home/tz/dev/pj-test"); - replacement in inflorescence/src/main.rs at line 72
let cursor = cursor::State::default();let selection = selection::State::default(); - replacement in inflorescence/src/main.rs at line 99
cursor,selection, - replacement in inflorescence/src/main.rs at line 117
cursor: cursor::State,selection: selection::State, - replacement in inflorescence/src/main.rs at line 250
app::Msg::Cursor(msg) => cursor::update(app::Msg::Confirm => {if let Some(repo) = state.repo.as_mut()&& repo.switching_channel&& let Some(selection::Channel { ix: _, name }) =state.selection.view.channel.take(){state.repo_tx_in.send(repo::MsgIn::SwitchToChannel(name)).unwrap();repo.switching_channel = false;}Task::none()}app::Msg::Cancel => {if let Some(repo) = state.repo.as_mut()&& repo.switching_channel{repo.switching_channel = false;state.selection.view.channel = None;}Task::none()}app::Msg::Selection(msg) => selection::update( - replacement in inflorescence/src/main.rs at line 276
&mut state.cursor,&mut state.selection, - edit in inflorescence/src/main.rs at line 321
app::Msg::SwitchChannel => {if let Some(repo) = state.repo.as_mut() {repo.switching_channel = true;}Task::none()} - edit in inflorescence/src/main.rs at line 354
switching_channel: _, - replacement in inflorescence/src/main.rs at line 356
&& let Some(cursor::Selection::UntrackedFile {&& let Some(selection::Status::UntrackedFile { - replacement in inflorescence/src/main.rs at line 360
}) = state.cursor.view.selection.as_ref()}) = state.selection.view.status.as_ref() - replacement in inflorescence/src/main.rs at line 379
// Re-initialize nav// Re-initialize status nav - replacement in inflorescence/src/main.rs at line 390
state.cursor.view.selection = Nonestate.selection.view.status = None - replacement in inflorescence/src/main.rs at line 393[50.5737]→[52.10086:10166](∅→∅),[52.10166]→[50.5788:5816](∅→∅),[50.5788]→[50.5788:5816](∅→∅),[50.5816]→[52.10167:10195](∅→∅),[52.10195]→[50.5816:5870](∅→∅),[50.5816]→[50.5816:5870](∅→∅),[50.5870]→[52.10196:10290](∅→∅)
let (selection, selection_task) = cursor::untracked_file_selection(repo_state,status_nav,ix,&mut state.files,&mut state.files_diffs,cursor::VertDir::Down,);let (selection, selection_task) =selection::untracked_file_selection(repo_state,status_nav,ix,&mut state.files,&mut state.files_diffs,selection::VertDir::Down,); - replacement in inflorescence/src/main.rs at line 403
state.cursor.view.selection = Some(selection);state.selection.view.status = Some(selection); - edit in inflorescence/src/main.rs at line 416
switching_channel: _, - replacement in inflorescence/src/main.rs at line 418
&& let Some(cursor::Selection::ChangedFile {&& let Some(selection::Status::ChangedFile { - replacement in inflorescence/src/main.rs at line 422
}) = state.cursor.view.selection.as_ref()}) = state.selection.view.status.as_ref() - replacement in inflorescence/src/main.rs at line 456
state.cursor.view.selection = Nonestate.selection.view.status = None - replacement in inflorescence/src/main.rs at line 460
cursor::changed_file_selection(selection::changed_file_selection( - replacement in inflorescence/src/main.rs at line 466
cursor::VertDir::Down,selection::VertDir::Down, - replacement in inflorescence/src/main.rs at line 469
state.cursor.view.selection = Some(selection);state.selection.view.status = Some(selection); - edit in inflorescence/src/main.rs at line 526[32.5494]→[32.5494:5532](∅→∅),[32.5532]→[50.7061:7124](∅→∅),[50.7124]→[32.5589:5637](∅→∅),[32.5589]→[32.5589:5637](∅→∅)
state.record_msg = None;state.repo.as_mut().unwrap().state.changed_files =repo::ChangedFiles::default(); - edit in inflorescence/src/main.rs at line 531
// Reset most thingsstate.selection = selection::State::default();state.record_msg = None;state.files_diffs.diffs_nav = None;state.logs.changes_nav = None;state.logs.diffs_nav = None;let app::Repo {state: repo_state,status_nav,switching_channel: _,} = state.repo.as_mut().unwrap();repo_state.changed_files = repo::ChangedFiles::default();state.files_diffs.diffs_nav = None;// Re-initialize status navlet contents_count = repo::nav_contents_count(repo_state);let (new_status_nav, status_nav_task) =iced_nav_scrollable::init(contents_count, HashSet::default());*status_nav = new_status_nav;return status_nav_task.map(|msg| Msg::View(app::Msg::StatusNav(msg))); - replacement in inflorescence/src/main.rs at line 602
if let Some(cursor::Selection::LogChange {if let Some(selection::Status::LogChange { - replacement in inflorescence/src/main.rs at line 607
Some(cursor::LogChangeFileSelection {Some(selection::LogChangeFileSelection { - replacement in inflorescence/src/main.rs at line 612
}) = state.cursor.view.selection.as_mut()}) = state.selection.view.status.as_mut() - edit in inflorescence/src/main.rs at line 645
switching_channel: false, - edit in inflorescence/src/main.rs at line 694
other_channels: _, - replacement in inflorescence/src/main.rs at line 701[9.1650]→[32.9442:9475](∅→∅),[32.9475]→[50.7499:7540](∅→∅),[50.7540]→[37.8669:8696](∅→∅),[37.8669]→[37.8669:8696](∅→∅)
// Re-index cursor selectionlet cursor_task = reindex_selection(&mut state.cursor,// Re-index selectionlet selection_task = reindex_selection(&mut state.selection, - edit in inflorescence/src/main.rs at line 714
let switching_channel = if changed_files.is_empty() {state.repo.as_mut().map(|repo| repo.switching_channel).unwrap_or_default()} else {// If any changed files gets added, exit out of channel selectionfalse}; - edit in inflorescence/src/main.rs at line 727
switching_channel, - replacement in inflorescence/src/main.rs at line 731
cursor_task,selection_task, - replacement in inflorescence/src/main.rs at line 738
cursor: &mut cursor::State,selection: &mut selection::State, - replacement in inflorescence/src/main.rs at line 744[37.9110]→[53.410:470](∅→∅),[53.470]→[32.9641:9691](∅→∅),[37.9165]→[32.9641:9691](∅→∅),[32.9641]→[32.9641:9691](∅→∅),[32.9691]→[45.13823:13870](∅→∅)
if let Some(selection) = cursor.view.selection.take() {let (selection, task) = match selection {cursor::Selection::UntrackedFile {if let Some(current_selection) = selection.view.status.take() {let (new_selection, task) = match current_selection {selection::Status::UntrackedFile { - replacement in inflorescence/src/main.rs at line 755
.map(|(ix, _path)| cursor::Selection::UntrackedFile {.map(|(ix, _path)| selection::Status::UntrackedFile { - replacement in inflorescence/src/main.rs at line 773
cursor::Selection::ChangedFile {selection::Status::ChangedFile { - replacement in inflorescence/src/main.rs at line 783
cursor::Selection::ChangedFile {selection::Status::ChangedFile { - replacement in inflorescence/src/main.rs at line 805
cursor::Selection::LogChange {selection::Status::LogChange { - replacement in inflorescence/src/main.rs at line 817
|cursor::LogChangeFileSelection {|selection::LogChangeFileSelection { - replacement in inflorescence/src/main.rs at line 828
cursor::LogChangeFileSelection {selection::LogChangeFileSelection { - replacement in inflorescence/src/main.rs at line 836
cursor::Selection::LogChange {selection::Status::LogChange { - replacement in inflorescence/src/main.rs at line 857
cursor.view.selection = selection;selection.view.status = new_selection; - replacement in inflorescence/src/main.rs at line 872
let task = if let Some(cursor::Selection::LogChange {let task = if let Some(selection::Status::LogChange { - replacement in inflorescence/src/main.rs at line 877
}) = state.cursor.view.selection.as_mut()}) = state.selection.view.status.as_mut() - replacement in inflorescence/src/main.rs at line 941
"j" => Some(Msg::View(app::Msg::Cursor(cursor::Msg::PressDir(cursor::Dir::Down),"c" => Some(Msg::View(app::Msg::SwitchChannel)),"j" => Some(Msg::View(app::Msg::Selection(selection::Msg::PressDir(selection::Dir::Down), - replacement in inflorescence/src/main.rs at line 945
"k" => Some(Msg::View(app::Msg::Cursor(cursor::Msg::PressDir(cursor::Dir::Up),"k" => Some(Msg::View(app::Msg::Selection(selection::Msg::PressDir(selection::Dir::Up), - replacement in inflorescence/src/main.rs at line 948
"h" => Some(Msg::View(app::Msg::Cursor(cursor::Msg::PressDir(cursor::Dir::Left),"h" => Some(Msg::View(app::Msg::Selection(selection::Msg::PressDir(selection::Dir::Left), - replacement in inflorescence/src/main.rs at line 951
"l" => Some(Msg::View(app::Msg::Cursor(cursor::Msg::PressDir(cursor::Dir::Right),"l" => Some(Msg::View(app::Msg::Selection(selection::Msg::PressDir(selection::Dir::Right), - replacement in inflorescence/src/main.rs at line 958
Key::Named(key::Named::ArrowDown) => Some(Msg::View(app::Msg::Cursor(cursor::Msg::PressDir(cursor::Dir::Down)),)),Key::Named(key::Named::ArrowUp) => Some(Msg::View(app::Msg::Cursor(cursor::Msg::PressDir(cursor::Dir::Up)),)),Key::Named(key::Named::ArrowLeft) => Some(Msg::View(app::Msg::Cursor(cursor::Msg::PressDir(cursor::Dir::Left)),)),Key::Named(key::Named::ArrowRight) => Some(Msg::View(app::Msg::Cursor(cursor::Msg::PressDir(cursor::Dir::Right)),)),Key::Named(key::Named::Enter) => {Some(Msg::View(app::Msg::Confirm))}Key::Named(key::Named::Escape) => {Some(Msg::View(app::Msg::Cancel))}Key::Named(key::Named::ArrowDown) => {Some(Msg::View(app::Msg::Selection(selection::Msg::PressDir(selection::Dir::Down),)))}Key::Named(key::Named::ArrowUp) => {Some(Msg::View(app::Msg::Selection(selection::Msg::PressDir(selection::Dir::Up),)))}Key::Named(key::Named::ArrowLeft) => {Some(Msg::View(app::Msg::Selection(selection::Msg::PressDir(selection::Dir::Left),)))}Key::Named(key::Named::ArrowRight) => {Some(Msg::View(app::Msg::Selection(selection::Msg::PressDir(selection::Dir::Right),)))} - replacement in inflorescence/src/main.rs at line 1002
Some(Msg::View(app::Msg::Cursor(cursor::Msg::AltPressDir(cursor::Dir::Down),Some(Msg::View(app::Msg::Selection(selection::Msg::AltPressDir(selection::Dir::Down), - replacement in inflorescence/src/main.rs at line 1007
Some(Msg::View(app::Msg::Cursor(cursor::Msg::AltPressDir(cursor::Dir::Up),Some(Msg::View(app::Msg::Selection(selection::Msg::AltPressDir(selection::Dir::Up), - replacement in inflorescence/src/main.rs at line 1012
Some(Msg::View(app::Msg::Cursor(cursor::Msg::AltPressDir(cursor::Dir::Left),Some(Msg::View(app::Msg::Selection(selection::Msg::AltPressDir(selection::Dir::Left), - replacement in inflorescence/src/main.rs at line 1017
Some(Msg::View(app::Msg::Cursor(cursor::Msg::AltPressDir(cursor::Dir::Right),Some(Msg::View(app::Msg::Selection(selection::Msg::AltPressDir(selection::Dir::Right), - replacement in inflorescence/src/main.rs at line 1026
Some(Msg::View(app::Msg::Cursor(cursor::Msg::AltPressDir(cursor::Dir::Down,))))Some(Msg::View(app::Msg::Selection(selection::Msg::AltPressDir(selection::Dir::Down),))) - replacement in inflorescence/src/main.rs at line 1031
Some(Msg::View(app::Msg::Cursor(cursor::Msg::AltPressDir(cursor::Dir::Up,))))Some(Msg::View(app::Msg::Selection(selection::Msg::AltPressDir(selection::Dir::Up),))) - replacement in inflorescence/src/main.rs at line 1038
Some(Msg::View(app::Msg::Cursor(cursor::Msg::AltPressDir(cursor::Dir::Left,))))Some(Msg::View(app::Msg::Selection(selection::Msg::AltPressDir(selection::Dir::Left),))) - replacement in inflorescence/src/main.rs at line 1045
Some(Msg::View(app::Msg::Cursor(cursor::Msg::AltPressDir(cursor::Dir::Right,))))Some(Msg::View(app::Msg::Selection(selection::Msg::AltPressDir(selection::Dir::Right),))) - replacement in inflorescence/src/main.rs at line 1058
"j" => Some(Msg::View(app::Msg::Cursor(cursor::Msg::ReleaseDir(cursor::Dir::Down),"j" => Some(Msg::View(app::Msg::Selection(selection::Msg::ReleaseDir(selection::Dir::Down), - replacement in inflorescence/src/main.rs at line 1061
"k" => Some(Msg::View(app::Msg::Cursor(cursor::Msg::ReleaseDir(cursor::Dir::Up),"k" => Some(Msg::View(app::Msg::Selection(selection::Msg::ReleaseDir(selection::Dir::Up), - replacement in inflorescence/src/main.rs at line 1064
"h" => Some(Msg::View(app::Msg::Cursor(cursor::Msg::ReleaseDir(cursor::Dir::Left),"h" => Some(Msg::View(app::Msg::Selection(selection::Msg::ReleaseDir(selection::Dir::Left), - replacement in inflorescence/src/main.rs at line 1067
"l" => Some(Msg::View(app::Msg::Cursor(cursor::Msg::ReleaseDir(cursor::Dir::Right),"l" => Some(Msg::View(app::Msg::Selection(selection::Msg::ReleaseDir(selection::Dir::Right), - replacement in inflorescence/src/main.rs at line 1073
Some(Msg::View(app::Msg::Cursor(cursor::Msg::ReleaseDir(cursor::Dir::Down,))))Some(Msg::View(app::Msg::Selection(selection::Msg::ReleaseDir(selection::Dir::Down),)))}Key::Named(key::Named::ArrowUp) => {Some(Msg::View(app::Msg::Selection(selection::Msg::ReleaseDir(selection::Dir::Up),))) - edit in inflorescence/src/main.rs at line 1082
Key::Named(key::Named::ArrowUp) => Some(Msg::View(app::Msg::Cursor(cursor::Msg::ReleaseDir(cursor::Dir::Up)),)), - replacement in inflorescence/src/main.rs at line 1083
Some(Msg::View(app::Msg::Cursor(cursor::Msg::ReleaseDir(cursor::Dir::Left,))))Some(Msg::View(app::Msg::Selection(selection::Msg::ReleaseDir(selection::Dir::Left),))) - replacement in inflorescence/src/main.rs at line 1088
Some(Msg::View(app::Msg::Cursor(cursor::Msg::ReleaseDir(cursor::Dir::Right,))))Some(Msg::View(app::Msg::Selection(selection::Msg::ReleaseDir(selection::Dir::Right),))) - replacement in inflorescence/src/main.rs at line 1118[50.8111]→[53.562:631](∅→∅),[53.631]→[45.15805:15853](∅→∅),[50.8175]→[45.15805:15853](∅→∅),[45.15805]→[45.15805:15853](∅→∅)
let diff_nav_subs = match state.cursor.view.selection.as_ref() {Some(cursor::Selection::UntrackedFile {let diff_nav_subs = match state.selection.view.status.as_ref() {Some(selection::Status::UntrackedFile { - replacement in inflorescence/src/main.rs at line 1134
Some(cursor::Selection::ChangedFile {Some(selection::Status::ChangedFile { - replacement in inflorescence/src/main.rs at line 1149
Some(cursor::Selection::LogChange {Some(selection::Status::LogChange { - replacement in inflorescence/src/main.rs at line 1154
Some(cursor::LogChangeFileSelection {Some(selection::LogChangeFileSelection { - replacement in inflorescence/src/main.rs at line 1168
Some(cursor::Selection::UntrackedFile { .. })| Some(cursor::Selection::ChangedFile { .. })| Some(cursor::Selection::LogChange { .. })Some(selection::Status::UntrackedFile { .. })| Some(selection::Status::ChangedFile { .. })| Some(selection::Status::LogChange { .. }) - replacement in inflorescence/src/main.rs at line 1192
cursor,selection, - replacement in inflorescence/src/main.rs at line 1199[43.6244]→[54.13429:13488](∅→∅),[53.697]→[45.17624:17672](∅→∅),[54.13488]→[45.17624:17672](∅→∅),[52.15044]→[45.17624:17672](∅→∅),[43.6308]→[45.17624:17672](∅→∅)
let selection = match cursor.view.selection.as_ref() {Some(cursor::Selection::UntrackedFile {let status_selection = match selection.view.status.as_ref() {Some(selection::Status::UntrackedFile { - replacement in inflorescence/src/main.rs at line 1224
Some(app::Selection::UntrackedFile {Some(app::StatusSelection::UntrackedFile { - replacement in inflorescence/src/main.rs at line 1230
Some(cursor::Selection::ChangedFile {Some(selection::Status::ChangedFile { - replacement in inflorescence/src/main.rs at line 1265
Some(app::Selection::ChangedFile {Some(app::StatusSelection::ChangedFile { - replacement in inflorescence/src/main.rs at line 1272
Some(cursor::Selection::LogChange {Some(selection::Status::LogChange { - replacement in inflorescence/src/main.rs at line 1279
|cursor::LogChangeFileSelection {|selection::LogChangeFileSelection { - replacement in inflorescence/src/main.rs at line 1309
Some(app::Selection::Log {Some(app::StatusSelection::Log { - replacement in inflorescence/src/main.rs at line 1325
selection,status_selection,channel_selection: selection.view.channel.as_ref(),