From 99e9be91869be143ad183b2d9b788f99233014e0 Mon Sep 17 00:00:00 2001 From: verdant Date: Wed, 5 Aug 2026 21:10:16 +0800 Subject: Implement rename feature --- src/fm.c | 31 +++++++++++++++++++++++++++++++ src/keys.c | 17 ++++++++++++----- 2 files changed, 43 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/fm.c b/src/fm.c index ea6a816..cb9cbc1 100644 --- a/src/fm.c +++ b/src/fm.c @@ -554,3 +554,34 @@ new_dir(fm_info *info) fm_getdir(info->cur, info->cwd); return 0; } + +int +fm_rename(fm_info *info) +{ + if (!info) + return -1; + + char newname[PATH_MAX] = {0}; + + size_t len = snprintf(newname, sizeof(newname), "%s/%s", info->cwd, + info->cur->items[info->cursor].name); + if (len >= sizeof(newname)) { + die("Length of items error"); + } + + char *oldname = info->cur->items[info->cursor].name; + get_input("New name: ", newname, strlen(newname)); + + if (rename(oldname, newname) == 0) { + need_redraw = true; + fm_getdir(info->cur, info->cwd); + } else { + if (errno == EXDEV) { + /* TODO: copy and link manually */ + return -1; + } + } + + return 0; +} + diff --git a/src/keys.c b/src/keys.c index 8128db3..8ad6852 100644 --- a/src/keys.c +++ b/src/keys.c @@ -1,16 +1,18 @@ #include "keys.h" -#include -#include -#include -#include - #include "display.h" #include "err.h" #include "fm.h" #include "log.h" #include "mem.h" +#include "utils.h" #include "wm.h" +#include +#include +#include +#include +#include +#include bool keymap = false; @@ -91,6 +93,11 @@ handling_keys(int ch, fm_info *i) case '+': new_dir(i); break; + case 'R': + case 'r': { + fm_rename(i); + break; + } default: return; } -- cgit v1.2.3