{"id":15604655,"url":"https://github.com/amatsuda/rfd","last_synced_at":"2025-04-04T22:08:21.213Z","repository":{"id":11067166,"uuid":"13409842","full_name":"amatsuda/rfd","owner":"amatsuda","description":"Ruby on Files \u0026 Directories","archived":false,"fork":false,"pushed_at":"2024-08-04T13:45:46.000Z","size":394,"stargazers_count":154,"open_issues_count":1,"forks_count":11,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-03-28T21:06:43.481Z","etag":null,"topics":["console","fd","filer"],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"MartinRGB/MTSwift-Learning","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/amatsuda.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"MIT-LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2013-10-08T10:04:14.000Z","updated_at":"2024-12-30T16:36:48.000Z","dependencies_parsed_at":"2024-10-23T02:49:24.910Z","dependency_job_id":null,"html_url":"https://github.com/amatsuda/rfd","commit_stats":{"total_commits":628,"total_committers":7,"mean_commits":89.71428571428571,"dds":0.01273885350318471,"last_synced_commit":"f54e741246a3324b339520abf1fffb82de02dda6"},"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amatsuda%2Frfd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amatsuda%2Frfd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amatsuda%2Frfd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amatsuda%2Frfd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/amatsuda","download_url":"https://codeload.github.com/amatsuda/rfd/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247256115,"owners_count":20909240,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["console","fd","filer"],"created_at":"2024-10-03T03:57:41.450Z","updated_at":"2025-04-04T22:08:21.190Z","avatar_url":"https://github.com/amatsuda.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# rfd (Ruby on Files \u0026 Directories)\n\nrfd is a terminal-based filesystem explorer, inspired by the legendary freesoft MS-DOS filer, \"FD\".\n\n## Installation\n\n    % gem install rfd\n\n## Requirements\n\n* Ruby 2.0, Ruby 2.1\n* NCurses\n\n## Tested environments\n\nMac OS X Mountain Lion, Mac OS X Lion, Ubuntu 13.04\n\n## Screenshot\n\n![screenshot](https://www.evernote.com/shard/s20/sh/a0a275ee-39b5-4ba4-9374-8534f4ee2a24/377c504f45f17a75eb2ea12bd015b6ee/deep/0/rfd_screenshot.png)\n\n## Start Me Up\n\nOpen up your terminal and type:\n\n    % rfd\n\nYou can also pass in a starting directory name, which defaults to `.`.\n\n    % rfd ~/src/rails\n\n## Commands\n\nYou can send commands to rfd by pressing some chars on your keyboard, just like Vim.\nIf you're unfamiliar with this sort of command system, I recommend you to play with `vimtutor` before you go any further.\n\nAll available commands in rfd are defined as Ruby methods here. https://github.com/amatsuda/rfd/tree/master/lib/rfd/commands.rb\n\n### Changing the current directory\n\n* `\u003cEnter\u003e`: cd into the directory where the cursor is on.\n* `\u003cDelete\u003e` (or \\\u003cBackspace\\\u003e on your keyboard, probably?): Go up to the upper directory (cd ..).\n* `-`: Get back to where you once belonged (popd).\n* `@`: cd to a directory given via the command-line window.\n\n### Moving the cursor\n\n* `j`: Move down.\n* `k`: Move up.\n* `h`: Move left. At the leftmost column, move to the right end column at the previous page.\n* `l`: Move right. At the rightmost column, move to the left end column at the next page.\n\n### The {count} parameter\n\nSome commands such as `j` or `k` take a number parameter called {count}. For passing a {count} parameter, just type in a number prior to the command.\nFor example, `3j` moves the cursor to 3 lines below, and `999k` will take your cursor to 999 lines above.\n\n### Jumping the cursor\n\n* `H`: Move to the top of the current page.\n* `M`: Move to the middle of the current page.\n* `L`: Move to the bottom of the current page.\n\n### Switching the page\n\n* `ctrl-n, ctrl-f`: Move to the top of the next page.\n* `ctrl-p, ctrl-b`: Move to the top of the previous page.\n* `g`: Move to the top of the first page.\n* `G`: Move to the bottom of the last page.\n\n### Finding a file / directory\n\nYou can find a file by typing the first letter of it immediately after the find commands.\n\n* `f{char}`: Move to the next file / directory of which name starts with the given char.\n* `F{char}`: Move to the previous file / directory of which name starts with the given char.\n* `n`: Repeat the last `f` or `F`.\n\n### Searching, sorting\n\nFor commands like these that require a parameter string, type the parameter in the command line at the bottom of the screen, and press \\\u003cEnter\\\u003e.\n\n* `/`: Grep the current directory with the given parameter. The parameter will be interpreted as Ruby Regexp (e.g. `.*\\.rb$`).\n* `s`: Sort files / directories in the current directory in the given order.\n    * (none): by name\n    * r     : reverse order by name\n    * s, S  : order by file size\n    * sr, Sr: reverse order by file size\n    * t     : order by mtime\n    * tr    : reverse order by mtime\n    * c     : order by ctime\n    * cr    : reverse order by ctime\n    * u     : order by atime\n    * ur    : reverse order by atime\n    * e     : order by extname\n    * er    : reverse order by extname\n\n### Marking files / directories\n\nYou can send a command to the file / directory on which the cursor is on. Or, you can send a command to multiple files / directories at once by marking them first.\nThe mark is drawn as a `*` char on the left of each file / directory name.\n\n* `\u003cSpace\u003e`: Mark / unmark current file / directory.\n* `ctrl-a`: Mark / unmark all file / directories in the current directory.\n\n### Manipulating files / directories\n\nAs stated above, you can send a command to one or more files / directories. In this document, the term \"selected items\" means \"(the marked files / directories) || (the file / directory on which the cursor is on)\".\n\n* `c`: Copy selected items (cp).\n* `m`: Move selected items (mv).\n* `d`: Move selected items into the Trash.\n* `D`: Delete selected items.\n* `r`: Rename selected items. This command takes a sed-like argument separated by a `/`. For example, changing all .html files' extension to .html.erb could be done by `\\.html$/.html.erb`.\n\n### Yank and Paste\n\n`y` \u0026 `p` works just like Windows-c \u0026 Windows-v on explorer.exe.\n\n* `y`: Yank selected items.\n* `p`: Paste yanked items into the directory on which the cursor is, or into the current directory.\n\n### Creating files / directories\n\n* `t`: Create a new file (touch).\n* `K`: Creat a new directory (mkdir).\n* `S`: Create new symlink to the current file / directory (ln -s).\n\n### Attributes\n\n* `a`: Change permission of selected items (chmod). Takes chmod-like argument such as `g+w`, `755`.\n* `w`: Change the owner of of selected items (chown). Takes chown-like argument such as `alice`, `nobody:nobody`.\n\n### Viewing, Editing, Opening\n\n* `\u003cEnter\u003e`: View current file with the system $VIEWER such as `less`.\n* `v`: View current file with the system $VIEWER such as `less`.\n* `e`: Edit current file with the system $EDITOR such as `vim`.\n* `o`: Send the `open` command.\n\n### Manipulating archives\n\n* `u`: Unarchive .zip, .gz, or .tar.gz file into the current directory.\n* `z`: Archive selected items into a .zip file with the given name.\n\n### Handling .zip files\n\nYou can `cd` into a .zip file as if it's just a directory, then unarchive selected items, view files in it, and even create new files or edit files in the archive.\n\n### Splitting columns\n\n* `ctrl-w`: Change the window split size to the {count} value (e.g. `4\u003cC-w\u003e` to split the window into 4 columns). The default number of columns is 2.\n\n### Using mouse\n\nMouse is available if your terminal supports it. You can move the cursor by clicking on a file / directory. Double clicking on a file / directory is equivalent to pressing \\\u003cEnter\\\u003e on it.\n\n### Misc\n\n* `ctrl-l`: Refresh the whole screen.\n* `C`: Copy selected items' paths to the clipboard.\n* `O`: Open a new terminal window at the current directory.\n* `!`: Execute a shell command.\n* `q`: Quit the app.\n\n## How to manually execute a command, or how the commands are executed\n\nBy pressing `:`, you can enter the command-line mode. Any string given in the command line after `:` will be executed as Ruby method call in the `Controller` instance.\nFor instance, `:j` brings your cursor down, `:mkdir foo` makes a directory named \"foo\". And `:q!` of course works as you might expect, since `q!` method is implemented so.\n\n## Contributing\n\nSend me your pull requests here. https://github.com/amatsuda/rfd\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famatsuda%2Frfd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Famatsuda%2Frfd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famatsuda%2Frfd/lists"}