diff options
| author | verdant <im@verdant.ee> | 2026-08-05 21:10:16 +0800 |
|---|---|---|
| committer | verdant <im@verdant.ee> | 2026-08-05 21:10:16 +0800 |
| commit | 99e9be91869be143ad183b2d9b788f99233014e0 (patch) | |
| tree | bc5dd4840aa6207636da2dcd84366636a60d9bb3 /src/fm.c | |
| parent | e4721e300cde7b64a850165380cba1a99ecbfbbf (diff) | |
| download | sf-99e9be91869be143ad183b2d9b788f99233014e0.tar.gz sf-99e9be91869be143ad183b2d9b788f99233014e0.zip | |
Implement rename feature
Diffstat (limited to 'src/fm.c')
| -rw-r--r-- | src/fm.c | 31 |
1 files changed, 31 insertions, 0 deletions
@@ -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; +} + |
