nnn/README.md

195 lines
7 KiB
Markdown
Raw Normal View History

## nnn
2016-08-20 16:27:14 +00:00
Noice is Not Noice, a noicer fork...
2016-08-20 16:27:14 +00:00
2017-04-06 00:57:16 +00:00
<br>
[![nnn-demo-20170405.mp4](https://i.imgur.com/VGA6IcB.png)](https://static.zhimingwang.org/nnn-demo-20170405.mp4 "Click for some action!")
<p align="center"><a href="https://static.zhimingwang.org/nnn-demo-20170405.mp4">Click for some action!</a></p>
2017-04-04 14:27:44 +00:00
2017-03-29 05:33:22 +00:00
### Table of Contents
2016-08-20 16:27:14 +00:00
2017-03-29 05:33:22 +00:00
- [Introduction](#introduction)
- [Why fork?](#why-fork)
- [Original features](#original-features)
- [nnn toppings](#nnn-toppings)
2017-03-29 05:33:22 +00:00
- [Installation](#installation)
- [Usage](#usage)
- [Keyboard shortcuts](#keyboard-shortcuts)
2017-03-31 02:52:51 +00:00
- [Filters](#filters)
- [File type abbreviations](#file-type-abbreviations)
2017-03-29 05:33:22 +00:00
- [Help](#help)
- [Copy current file path to clipboard](#copy-current-file-path-to-clipboard)
2017-03-29 05:33:22 +00:00
- [Change file associations](#change-file-associations)
2016-08-21 12:07:18 +00:00
2017-03-29 05:33:22 +00:00
### Introduction
nnn is a fork of [noice](http://git.2f30.org/noice/), a blazing-fast terminal file browser with easy keyboard shortcuts for navigation, opening files and running tasks. It is developed with terminal based systems in mind. However, the incredible user-friendliness and speed make it a perfect utility on modern distros.
2017-03-29 05:33:22 +00:00
The only issue with noice is hard-coded file associations. There is no config file (better performance and simpler to maintain) and one has to modify the source to change associations (see [how to change file associations](#change-file-associations)). nnn solves the problem by adding the flexibility of using the default desktop opener at runtime. There are several other improvements too (see [fork-toppings](#fork-toppings)).
2017-03-29 05:33:22 +00:00
You can try
alias n='nnn -d'
and see how nnn simplifies those long desktop sessions.
Have fun with it! PRs are welcome. Check out [#1](https://github.com/jarun/nnn/issues/1).
2017-03-29 05:33:22 +00:00
### Why fork?
I chose to fork because:
2017-03-29 05:33:22 +00:00
- one can argue my approach deviates from the goal of the original project - keep the utility `suckless`. In my opinion evolution is the taste of time.
- I would like to have a bit of control on what features are added in the name of desktop integration. A feature-bloat is the last thing in my mind.
### Original features
2017-03-29 05:33:22 +00:00
- Super-easy navigation
2016-08-21 12:07:18 +00:00
- Open files with default-associated programs
- Jump to home directory
2016-08-21 16:10:34 +00:00
- Filter contents in current directory
2016-08-21 12:07:18 +00:00
- Show/hide hidden files
2017-03-30 04:39:21 +00:00
- Sort entries by modification time (newest to oldest)
2017-03-31 18:05:48 +00:00
- Spawn a `SHELL` in current directory (fallback sh)
2016-08-21 12:07:18 +00:00
- Run `top`
2017-03-31 16:55:56 +00:00
- Edit a file with `EDITOR` (fallback vi)
- Page through a file in `PAGER` (fallback less)
2016-08-21 12:07:18 +00:00
### nnn toppings
2016-08-20 16:27:14 +00:00
2017-03-29 10:29:56 +00:00
- Behaviour and navigation
2017-03-30 04:39:21 +00:00
- Detail view (default: disabled) with:
- file type
- modification time
- human-readable file size
- current item in reverse video
2017-03-30 13:24:18 +00:00
- number of items in current directory
- full name of currently selected file
- Show details of the currently selected file (stat, file)
2017-04-01 20:18:33 +00:00
- Directories first
- Sort numeric names in numeric order
- Case-insensitive alphabetic content listing instead of upper case first
- Roll over at the first and last entries of a directory (with Up/Down keys)
2017-03-31 02:52:51 +00:00
- Removed navigation restriction with relative paths (and let permissions handle it)
- Sort entries by file size (largest to smallest)
- Shortcut to invoke file name copier (set using environment variable `NNN_COPIER`)
2016-08-20 16:27:14 +00:00
- File associations
2017-03-31 02:52:51 +00:00
- Environment variable `NNN_OPENER` to let desktop opener handle it all. E.g.:
2016-08-21 08:28:53 +00:00
export NNN_OPENER=xdg-open
export NNN_OPENER=gnome-open
export NNN_OPENER=gvfs-open
- Selective file associations (ignored if `NNN_OPENER` is set):
2017-03-31 16:55:56 +00:00
- Associate plain text files with vi (using `file` command)
2016-08-21 07:28:38 +00:00
- Remove video file associations (to each his own favourite video player)
2017-03-31 22:23:49 +00:00
- Associate common audio mimes with mpv
2017-03-29 05:33:22 +00:00
- Associate PDF files with [zathura](https://pwmt.org/projects/zathura/)
- Use environment variable `NNN_FALLBACK_OPENER` to open other non-associated files
2017-03-31 02:52:51 +00:00
- Removed `less` as default file opener (there is no universal standalone opener utility)
2017-04-01 12:02:58 +00:00
- Optimizations
- Efficient memory usage, 0 malloc()
- Complete redundant buffer removal
- All frequently used local chunks now static
- Removed some redundant string allocation and manipulation
- Simplified some roundabout procedures
- `-O3` level optimization, warning fixes
2017-03-29 05:33:22 +00:00
- Added compilation flag `-march=native`
- Remove generated config.h on `make clean`
2017-03-29 20:59:28 +00:00
- strip the final binary
2017-03-29 05:33:22 +00:00
### Installation
nnn needs a curses implementation and standard libc.
2016-08-20 16:27:14 +00:00
Download the [latest master](https://github.com/jarun/nnn/archive/master.zip) or clone this repository. Compile and install:
2016-08-20 16:27:14 +00:00
$ make
$ sudo make install
2017-03-29 05:33:22 +00:00
No plans of packaging at the time.
2016-08-20 16:27:14 +00:00
2017-03-29 05:33:22 +00:00
### Usage
2016-08-20 16:27:14 +00:00
Start nnn (default: current directory):
2016-08-21 10:32:03 +00:00
2017-04-01 05:18:18 +00:00
$ nnn [-d] [path_to_dir]
-d: open in detail view mode
`>` indicates the currently selected entry in nnn.
2016-08-21 10:32:03 +00:00
2017-03-29 05:33:22 +00:00
### Keyboard shortcuts
2016-08-21 10:32:03 +00:00
2017-03-29 05:33:22 +00:00
| Key | Function |
| --- | --- |
2017-04-03 17:03:46 +00:00
| `Up`, `k`, `^P` | Previous entry |
| `Down`, `j`, `^N` | Next entry |
| `PgUp`, `^U` | Scroll half page up |
| `PgDn`, `^D` | Scroll half page down |
| `Home`, `g`, `^`, `^A` | Jump to first entry |
| `End`, `G`, `$`, `^E` | Jump to last entry |
2017-04-03 17:03:46 +00:00
| `Right`, `Enter`, `l`, `^M` | Open file or enter dir |
| `Left`, `Backspace`, `h`, `^H` | Go to parent dir |
| `~` | Jump to HOME dir |
| `/`, `&` | Filter dir contents |
| `c` | Show change dir prompt |
| `d` | Toggle detail view |
| `D` | Show details of selected file |
| `.` | Toggle hide .dot files |
| `s` | Toggle sort by file size |
| `t` | Toggle sort by modified time |
| `!` | Spawn `SHELL` in `PWD` (fallback sh) |
| `z` | Run `top` |
| `e` | Edit entry in `EDITOR` (fallback vi) |
| `p` | Open entry in `PAGER` (fallback less) |
| `^K` | Invoke file name copier |
| `^L` | Force a redraw |
| `?` | Show help |
| `q` | Quit |
2017-03-29 05:33:22 +00:00
2017-03-31 02:52:51 +00:00
### Filters
Filters support regexes to display only the matched entries in the current directory view. This effectively allows searching through the directory tree for a particular entry.
2017-04-04 14:27:44 +00:00
Filters do not stack on top of each other. They are applied anew every time.
An empty filter expression resets the filter.
2017-03-31 02:52:51 +00:00
If nnn is invoked as root the default filter will also match hidden files.
### File type abbreviations
The following abbreviations are used in the detail view:
| Symbol | File Type |
| --- | --- |
2017-03-30 13:24:18 +00:00
| `/` | Directory |
| `*` | Executable |
| `|` | Fifo |
| `=` | Socket |
| `@` | Symbolic Link |
| `b` | Block Device |
| `c` | Character Device |
2017-03-29 05:33:22 +00:00
### Help
$ man nnn
2017-03-29 05:33:22 +00:00
### Copy current file path to clipboard
nnn can pipe the absolute path of the current file to a copier script. For example, you can use `xsel` on Linux or `pbcopy` on OS X.
Sample Linux copier script:
#!/bin/sh
echo -n $1 | xsel --clipboard --input
export `NNN_OPENER`:
export NNN_COPIER="/home/vaio/copier.sh"
Start nnn and use `Ctrl-k` to copy the absolute path (from `/`) of the file under the cursor to clipboard.
2017-03-29 05:33:22 +00:00
### Change file associations
2017-03-31 22:23:49 +00:00
If you want to set custom applications for certain mime types, or change the ones set already (e.g. vi, mpv, zathura), modify the `assocs` structure in [config.def.h](https://github.com/jarun/nnn/blob/master/config.def.h) (it's easy). Then re-compile and install.