/goful

Goful is a CUI file manager written in Go.

Primary LanguageGoMIT LicenseMIT

Goful

Go Report Card Go Reference MIT License

Goful is a CUI file manager written in Go.

  • Works on cross-platform such as gnome-terminal and cmd.exe
  • Displays multiple windows and workspaces
  • A command line to execute using such as bash and tmux
  • Provides filtering search, async copy, glob, bulk rename, etc.

demo

Install

Pre-build binaries

See releases.

Go version >= 1.16

$ go install github.com/anmitsu/goful@latest
...
$ goful

Go version < 1.16

$ go get github.com/anmitsu/goful
...
$ goful

Usage

key function
C-n down j Move cursor down
C-p up k Move cursor up
C-a home ^ Move cursor top
C-e end $ Move cursor bottom
C-f C-i right l Move cursor right
C-b left h Move cursor left
C-d More move cursor down
C-u More move cursor up
C-v pgdn Page down
M-v pgup Page up
M-n Scroll down
M-p Scroll up
C-h backspace u Change to upper directory
~ Change to home directory
\ Change to root directory
w Change to neighbor directory
C-o Create directory window
C-w Close directory window
M-f Move next workspace
M-b Move previous workspace
M-C-o Create workspace
M-C-w Close workspace
space Toggle mark
M-= Invert mark
C-l Reload
C-m o Open
i Open by pager
s Sort
v View
b Bookmark
e Editor
x Command
X External command
f / Find
; Shell
: Shell suspend
n Make file
K Make directory
c Copy
m Move
r Rename
R Bulk rename by regexp
D Remove
d Change directory
g Glob
G Glob recursive
C-g C-[ Cancel
q Q Quit

For more see main.go

Demos

Copy and Move

Copy (default c) and move (default m) mark (default space and invert C-space) files.

demo_copy

First input a copy source file name (or path). The default source is a file name on the cursor. If files are marked, this step is skipped.

Second input a copy destination path and start copy processing. The default destination is a neighboring directory path.

During processing draws copying file count, size and name, progress percent, gauge, bps and estimated time of arrival.

If the source file type is a directory, recursively copy. Also copy modification time and permissions.

Rise a override confirm dialog [y/n/Y/N] if the name same as source file exists in the destination. This dialog means:

  • y is overwrite only this file
  • n is not overwrite only this file
  • Y is overwrite all later file
  • N is not overwrite all later file

Copy process works asynchronously. And processed in the order if you run multiple copies.

Note that copy process can not interrupt. If you want to interrupt, please quit the application (default q Q).

Bulk Rename

Bulk renaming (default R) for mark (default space and invert C-space) files.

Rename by the regexp pattern. Input like the vim substituting style (regexp/replaced). Display and confirm matched files and replaced names before rename.

demo_bulk

Finder (Filtering search)

The finder (default f /) filters files in the directory.

Input characters recognizes as the regexp. Case insensitive when inputs lowercase only, on the other hand case sensitive when contains uppercase.

Delete characters by C-h and backspace (default). Can select input histories by M-p and M-n (default).

Other than character inputs (exclude a space) and the finder keymap pass to the main input.

Hit reset key (default C-g C-[ means Esc) to clear filtering.

demo_finder

Glob

Glob is matched by wild card pattern in the current directory (default g and recursive G).

Hit reset key (default C-g C-[ means Esc) to clear glob patterns.

demo_glob

Layout

Directory windows position are allocated by layouts of tile, tile-top, tile-bottom, one-row, one-column and fullscreen.

View menu (default v), run layout menu and select layout:

demo_layout

Execute Terminal and Shell

Shell mode (default : and suspended ;) runs a terminal and execute shell such as bash and tmux. The cmdline completion (file names and commands in $PATH) is available (default C-i that means tab).

For example, spawns commands by bash in a gnome-terminal new tab:

demo_shell

The terminal immediately doesn't close when command finished because check outputs.

If goful is running in tmux, it creates a new window and executes the command.

Expand Macro

macro expanded string
%f %F File name/path on cursor
%x %X File name/path with extension excluded on cursor
%m %M Marked file names/paths joined by spaces
%d %D Directory name/path on cursor
%d2 %D2 Neighbor directory name/path
%~f ... Expand by non quote
%& Flag to run command in background

The macro is useful if do not want to specify a file name when run the shell.

Macros starts with % are expanded surrounded by quote, and those starts with %~ are expanded by non quote. The %~ mainly uses to for cmd.exe.

Use %& when background execute the shell such as GUI apps launching.

demo_macro

Customize

Goful don't have a config file, instead you can customize by edit main.go.

Examples of customizing:

  • Change and add keybindings
  • Change terminal and shell
  • Change file opener (editor, pager and more)
  • Adding bookmarks
  • Setting colors and looks

Recommend remain original main.go and copy to own main.go for example:

Go to source directory

$ cd $GOPATH/src/github.com/anmitsu/goful

Copy original main.go to my/goful directory

$ mkdir -p my/goful
$ cp main.go my/goful
$ cd my/goful

Install after edit my/goful/main.go

$ go install

Contributing

Contributing Guide