allow to copy change hash
[?]
Aug 15, 2025, 1:27 PM
PKLUHYE4BGIMJKU6VKGBGSHEB2ZT53OYMTFBYCZYCO4J3RVTRXSACDependencies
- [2]
6YZAVBWUInitial commit - [3]
IQDCHWCPload a pijul repo - [4]
SWWE2R6Mdisplay basic repo stuff - [5]
WT3GA27Padd cursor with selection - [6]
UB2ITZJSrefresh changed files on FS changes - [7]
EC3TVL4Xadd untracked files - [8]
S2NVIFXRallow to enter record msg - [9]
YBJRDOTCmake all repo actions async - [10]
KM5PSZ4Awatch repo once loaded - [11]
2VUX5BTDload identity - [12]
A5YBC77Vrecord! - [13]
D7A7MSIHallow to defer or abandon record, add buttons - [14]
4WO3ZJM2show untracked files' contents - [15]
V55EAIWQadd src file LRU cache - [16]
ZVI4AWERwoot contents_diff - [17]
BFN2VHZSrefactor file stuff into sub-mod - [18]
3SYSJKYLadd app icon - [19]
23SFYK4Qbig view refactor into a new crate - [20]
6F7Q4ZLRavoid unused warns - [21]
ACDXXAX2refactor main's updates into smaller fns - [22]
I2AG42PAnew cols layout - [23]
YKHE3XMWrefactor diffs handling - [24]
KEPKF3WOunify diffs handling, simplify view - [25]
KWTBNTO3diffs selection and scrolling - [26]
PTWZYQFRuse nav-scrollable for repo status - [27]
UR4J677Rnav for log changes and refactors - [28]
OJPGHVC3entire log! - [29]
FJSVMFB4add `iced_expl_widgets` with forked scrollable - [30]
WAOGSCOJvery nice refactor, wip adding channels logs - [31]
EJPSD5XOshared allowed actions conditions between update and view - [32]
YK3MOJJLchonky refactor, wip other channels logs & diffs - [33]
7WCB5YQJrefactor msgs and modules - [34]
AZ5D2LQUallow to set record description - [35]
JZXYSIYDchannel selection! - [36]
ELG3UDT6allow to rm added files - [37]
SASAN2XCuse nav-scrollable - [38]
A6Z4O6RCactions menu - [39]
L6KSEFQImove cursor related stuff into its module - [40]
PTFDJ567add untracked files encoding - [*]
WGID4LS4absolutely slayed testing with iced task
Change contents
- edit in libflorescence/src/repo.rs at line 239
}pub fn hash_to_string(hash: &ChangeHash) -> String {pijul::Base32::to_base32(hash) - replacement in inflorescence_view/src/view.rs at line 1007
let mut short_hash = pijul::Base32::to_base32(hash);let mut short_hash = repo::hash_to_string(hash); - edit in inflorescence_model/src/action.rs at line 33
ClipboardCopy, - edit in inflorescence_model/src/action.rs at line 71
(ClipboardCopy, ClipboardCopy) => true, - edit in inflorescence_model/src/action.rs at line 87
(ClipboardCopy, _) => false, - edit in inflorescence_model/src/action.rs at line 236
let clipboard_copy_change_hash = || Binding {key: "C-c",label: "copy hash",msg: Some(FilteredMsg::ClipboardCopy),}; - replacement in inflorescence_model/src/action.rs at line 253
MainSelection::Untracked => {StatusSelection::Untracked => { - replacement in inflorescence_model/src/action.rs at line 258
MainSelection::AddedFromUntracked => {StatusSelection::AddedFromUntracked => { - replacement in inflorescence_model/src/action.rs at line 263
MainSelection::Other => {StatusSelection::LogChange => {push_if(can_select_right, right, ma);ma.push(clipboard_copy_change_hash());push_if(can_record, start_record, ma)}StatusSelection::Other => { - edit in inflorescence_model/src/action.rs at line 287
ma.push(clipboard_copy_change_hash()); - edit in inflorescence_model/src/action.rs at line 299
ma.push(clipboard_copy_change_hash()); - edit in inflorescence_model/src/action.rs at line 350
ma.push(clipboard_copy_change_hash()); - edit in inflorescence_model/src/action.rs at line 361
ma.push(clipboard_copy_change_hash()); - edit in inflorescence_model/src/action.rs at line 373
ma.push(clipboard_copy_change_hash()); - edit in inflorescence_model/src/action.rs at line 387
ma.push(clipboard_copy_change_hash()); - edit in inflorescence_model/src/action.rs at line 398
ma.push(clipboard_copy_change_hash()); - edit in inflorescence_model/src/action.rs at line 410
ma.push(clipboard_copy_change_hash()); - replacement in inflorescence_model/src/action.rs at line 439
selection: MainSelection,selection: StatusSelection, - replacement in inflorescence_model/src/action.rs at line 483
enum MainSelection {enum StatusSelection { - edit in inflorescence_model/src/action.rs at line 486
LogChange, - replacement in inflorescence_model/src/action.rs at line 567
selection: MainSelection::Untracked,selection: StatusSelection::Untracked, - replacement in inflorescence_model/src/action.rs at line 588
MainSelection::AddedFromUntrackedStatusSelection::AddedFromUntracked - replacement in inflorescence_model/src/action.rs at line 590
MainSelection::OtherStatusSelection::Other - replacement in inflorescence_model/src/action.rs at line 635
selection: MainSelection::Other,selection: StatusSelection::LogChange, - replacement in inflorescence_model/src/action.rs at line 642
selection: MainSelection::Other,selection: StatusSelection::Other, - edit in inflorescence/src/main.rs at line 63
}#[derive(Debug)]struct State {repo_fs_watch: Option<Debouncer<RecommendedWatcher, RecommendedCache>>,repo_tx_in: mpsc::UnboundedSender<repo::MsgIn>,/// Cache for untracked and changed files loaded from diskfiles: file::State,model: model::State,}#[derive(Debug, Clone)]enum Msg {View(view::Msg),NoOp,Window(window::Event),LoadedId(Box<Id>),RepoTaskExited,ToRepo(repo::MsgIn),FromRepo(repo::MsgOut),File(file::Msg), - edit in inflorescence/src/main.rs at line 129[5.624]→[3.1328:1363](∅→∅),[6.1551]→[3.1328:1363](∅→∅),[4.5076]→[3.1328:1363](∅→∅),[3.1328]→[3.1328:1363](∅→∅),[11.797]→[10.258:334](∅→∅),[22.4810]→[10.258:334](∅→∅),[3.1363]→[10.258:334](∅→∅),[10.358]→[9.6092:6144](∅→∅),[7.2096]→[9.6092:6144](∅→∅),[13.58]→[23.2975:3038](∅→∅),[23.3038]→[17.165:189](∅→∅),[13.58]→[17.165:189](∅→∅),[17.189]→[34.9596:9621](∅→∅),[17.238]→[15.1025:1028](∅→∅),[16.1224]→[15.1025:1028](∅→∅),[24.2962]→[15.1025:1028](∅→∅),[23.3248]→[15.1025:1028](∅→∅),[25.8995]→[15.1025:1028](∅→∅),[34.9621]→[15.1025:1028](∅→∅),[33.11742]→[15.1025:1028](∅→∅),[28.42705]→[15.1025:1028](∅→∅),[30.80070]→[15.1025:1028](∅→∅),[15.1025]→[15.1025:1028](∅→∅),[2.3042]→[2.3042:3066](∅→∅),[2.3066]→[19.25772:25783](∅→∅),[19.25783]→[33.11743:11764](∅→∅),[33.11764]→[22.4811:4848](∅→∅),[19.25803]→[22.4811:4848](∅→∅),[18.814]→[12.4573:4596](∅→∅),[14.2734]→[12.4573:4596](∅→∅),[22.4848]→[12.4573:4596](∅→∅),[5.668]→[12.4573:4596](∅→∅),[11.816]→[9.6176:6196](∅→∅),[12.4596]→[9.6176:6196](∅→∅),[5.668]→[9.6176:6196](∅→∅),[9.6196]→[31.23800:23825](∅→∅),[31.23825]→[9.6196:6224](∅→∅),[9.6196]→[9.6196:6224](∅→∅),[21.142]→[17.239:260](∅→∅),[13.216]→[17.239:260](∅→∅)
}#[derive(Debug)]struct State {repo_fs_watch: Option<Debouncer<RecommendedWatcher, RecommendedCache>>,repo_tx_in: mpsc::UnboundedSender<repo::MsgIn>,/// Cache for untracked and changed files loaded from diskfiles: file::State,model: model::State,}#[derive(Debug, Clone)]enum Msg {View(view::Msg),NoOp,Window(window::Event),LoadedId(Box<Id>),RepoTaskExited,ToRepo(repo::MsgIn),FromRepo(repo::MsgOut),File(file::Msg), - edit in inflorescence/src/main.rs at line 481
action::FilteredMsg::ClipboardCopy => clipboard_copy(state), - edit in inflorescence/src/main.rs at line 591
}fn clipboard_copy(state: &mut State) -> Task<Msg> {if let Some(ReadyState { selection, .. }) = model::is_ready(&state.model) {let to_copy = match selection::unify(selection) {selection::Unified::Status(Some(inflorescence_model::selection::Status::LogChange(selection::LogChange { hash, .. },),)) => Some(repo::hash_to_string(hash)),selection::Unified::Channel(Some(selection::Channel {log: Some(selection::LogChange { hash, .. }),..})) => Some(repo::hash_to_string(hash)),selection::Unified::EntireLog(Some(selection::LogChange {hash,..})) => Some(repo::hash_to_string(hash)),selection::Unified::Status(_)| selection::Unified::Channel(_)| selection::Unified::EntireLog(_) => None,};if let Some(to_copy) = to_copy {task::clipboard_write(to_copy)} else {Task::none()}} else {Task::none()} - edit in inflorescence/src/main.rs at line 1400
"c" if mods == Modifiers::CTRL => {action(action::FilteredMsg::ClipboardCopy)} - edit in iced_utils/src/task/wrappers.rs at line 11
/// Write the given contents to the clipboard.pub fn clipboard_write<T>(contents: String) -> Task<T> {#[cfg(not(any(test, feature = "testing")))]let task = iced::clipboard::write(contents);#[cfg(any(test, feature = "testing"))]let task = {let _ = contents;Task::none()}; - edit in iced_utils/src/task/wrappers.rs at line 23
task}