From cc0dbb0cad89f54ad1648cf3149645a77bdbc8a7 Mon Sep 17 00:00:00 2001 From: emmett1 Date: Thu, 23 Jul 2026 12:08:05 +0800 Subject: fix --- sfm.cpp | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) (limited to 'sfm.cpp') diff --git a/sfm.cpp b/sfm.cpp index f199b1f..8ba5204 100644 --- a/sfm.cpp +++ b/sfm.cpp @@ -61,7 +61,7 @@ enum { enum class EntryType { Directory, File, Symlink }; struct Entry { - std::string name; // display name (dirs end with '/', symlinks with '@') + std::string name; // display name (dirs end with '/') std::string full_path; // absolute canonical path EntryType type = EntryType::File; bool is_hidden = false; @@ -298,6 +298,8 @@ void FileManager::restore_term() { curs_set(1); endwin(); } + // Clear screen and move cursor home (visible in scrollback otherwise) + printf("\033[2J\033[H"); } void FileManager::update_size() { @@ -363,7 +365,6 @@ void FileManager::load_entries() { e.name += '/'; } else if (S_ISLNK(st.st_mode)) { e.type = EntryType::Symlink; - e.name += '@'; char buf[PATH_MAX]; ssize_t len = readlink(e.full_path.c_str(), buf, sizeof(buf) - 1); if (len > 0) { buf[len] = '\0'; e.symlink_target = buf; } @@ -1187,8 +1188,8 @@ void FileManager::do_open() { if (!e) return; std::string target = join_path(cwd_, e->name); - // Strip trailing / for directory and @ for symlink - if (!target.empty() && (target.back() == '/' || target.back() == '@')) + // Strip trailing / for directory + if (!target.empty() && target.back() == '/') target.pop_back(); switch (e->type) { @@ -1616,9 +1617,9 @@ void FileManager::do_rename() { return; } - // Strip trailing / or @ + // Strip trailing / std::string name = e->name; - if (!name.empty() && (name.back() == '/' || name.back() == '@')) + if (!name.empty() && name.back() == '/') name.pop_back(); std::string new_name; @@ -1682,13 +1683,13 @@ void FileManager::do_delete() { std::vector targets; if (!selected_.empty()) { for (const auto &sel_name : selected_) - targets.push_back(join_path(cwd_, strip_suffix(strip_suffix(sel_name, "@"), "/"))); + targets.push_back(join_path(cwd_, strip_suffix(sel_name, "/"))); } else { const Entry *e = get_sel(); if (!e) return; std::string n = e->name; if (!n.empty() && n.back() == '/') n.pop_back(); - if (!n.empty() && n.back() == '@') n.pop_back(); + targets.push_back(join_path(cwd_, n)); } @@ -1750,7 +1751,6 @@ void FileManager::do_trash() { std::string name = e->name; if (!name.empty() && name.back() == '/') name.pop_back(); - if (!name.empty() && name.back() == '@') name.pop_back(); std::string src = join_path(cwd_, name); @@ -1797,7 +1797,6 @@ void FileManager::do_open_with() { return; } std::string name = e->name; - if (!name.empty() && name.back() == '@') name.pop_back(); std::string target = join_path(cwd_, name); std::string prog; @@ -1827,7 +1826,6 @@ void FileManager::do_chmod_x(bool set) { return; } std::string name = e->name; - if (!name.empty() && name.back() == '@') name.pop_back(); std::string target = join_path(cwd_, name); struct stat st; @@ -1950,7 +1948,6 @@ void FileManager::do_copy_path() { if (!e) return; std::string name = e->name; if (!name.empty() && name.back() == '/') name.pop_back(); - if (!name.empty() && name.back() == '@') name.pop_back(); std::string path = join_path(cwd_, name); // Try clipboard tools @@ -2010,7 +2007,7 @@ void FileManager::do_yank() { for (const auto &sel_name : selected_) { std::string n = sel_name; if (!n.empty() && n.back() == '/') n.pop_back(); - if (!n.empty() && n.back() == '@') n.pop_back(); + clipboard_paths_.push_back(join_path(cwd_, n)); } clip_mode_ = ClipMode::Copy; @@ -2021,7 +2018,7 @@ void FileManager::do_yank() { if (!e) return; std::string n = e->name; if (!n.empty() && n.back() == '/') n.pop_back(); - if (!n.empty() && n.back() == '@') n.pop_back(); + clipboard_paths_.push_back(join_path(cwd_, n)); clip_mode_ = ClipMode::Copy; flash_msg("yanked: " + e->name); @@ -2035,7 +2032,7 @@ void FileManager::do_cut() { for (const auto &sel_name : selected_) { std::string n = sel_name; if (!n.empty() && n.back() == '/') n.pop_back(); - if (!n.empty() && n.back() == '@') n.pop_back(); + clipboard_paths_.push_back(join_path(cwd_, n)); } clip_mode_ = ClipMode::Cut; @@ -2046,7 +2043,7 @@ void FileManager::do_cut() { if (!e) return; std::string n = e->name; if (!n.empty() && n.back() == '/') n.pop_back(); - if (!n.empty() && n.back() == '@') n.pop_back(); + clipboard_paths_.push_back(join_path(cwd_, n)); clip_mode_ = ClipMode::Cut; flash_msg("cut: " + e->name); -- cgit v1.2.3