aboutsummaryrefslogtreecommitdiff
path: root/sfm.cpp
diff options
context:
space:
mode:
authoremmett1 <me@emmett1.my>2026-07-23 12:08:05 +0800
committeremmett1 <me@emmett1.my>2026-07-23 12:08:05 +0800
commitcc0dbb0cad89f54ad1648cf3149645a77bdbc8a7 (patch)
tree30da3feb7093b986c35443ca973a4c922978b2f8 /sfm.cpp
parentcd2a4dffb8347337528b5f1c9e98a54994c800d5 (diff)
downloadsfm-cc0dbb0cad89f54ad1648cf3149645a77bdbc8a7.tar.gz
sfm-cc0dbb0cad89f54ad1648cf3149645a77bdbc8a7.zip
Diffstat (limited to 'sfm.cpp')
-rw-r--r--sfm.cpp29
1 files changed, 13 insertions, 16 deletions
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<std::string> 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);