summary refs log tree commit diff stats
path: root/README
blob: aa16ad03ed96a04abff053b438990dcdec19e491 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
ranger v.1.6.1
==============
ranger is a console file manager with VI key bindings.  It provides a
minimalistic and nice curses interface with a view on the directory hierarchy.
It ships with "rifle", a file launcher that is good at automatically finding
out which program to use for what file type.

This file describes ranger and how to get it to run.  For instructions on the
usage, please read the man page.  See doc/HACKING for development specific
information.  For configuration, check the files in ranger/config/.  They
are usually installed to /usr/lib/python*/site-packages/ranger/config/
and can be obtained with ranger's --copy-config option.  The doc/examples/
directory contains several scripts and plugins that demonstrate how ranger can
be extended or combined with other programs.

A note to packagers:  Versions meant for packaging are listed in the changelog
on the website.


About
-----
* Authors:     Check the copyright notices in each source file
* License:     GNU General Public License Version 3

* Website:     http://ranger.nongnu.org/
* Download:    http://ranger.nongnu.org/ranger-stable.tar.gz
* Bug reports: https://savannah.nongnu.org/bugs/?group=ranger&func=additem
* git clone    http://git.sv.gnu.org/r/ranger.git


Design Goals
------------
* An easily maintainable file manager in a high level language
* A quick way to switch directories and browse the file system
* Keep it small but useful, do one thing and do it well
* Console based, with smooth integration into the unix shell


Features
--------
* UTF-8 Support  (if your python copy supports it)
* Multi-column display
* Preview of the selected file/directory
* Common file operations (create/chmod/copy/delete/...)
* Renaming multiple files at once
* VIM-like console and hotkeys
* Automatically determine file types and run them with correct programs
* Change the directory of your shell after exiting ranger
* Tabs, Bookmarks, Mouse support


Dependencies
------------
* Python (tested with version 2.6, 2.7, 3.1, 3.2) with support for ncurses
  and (optionally) wide-unicode.
* A pager ("less" by default)

Optional:
* The "file" program for determining file types
* The python module "chardet", in case of encoding detection problems
* "sudo" to use the "run as root"-feature
* w3m for the "w3mimgdisplay" program to preview images

Optional, for enhanced file previews (with "scope.sh"):
* img2txt (from caca-utils) for ASCII-art image previews
* highlight for syntax highlighting of code
* atool for previews of archives
* lynx, w3m or elinks for previews of html pages
* pdftotext for pdf previews
* transmission-show for viewing bit-torrent information
* mediainfo or exiftool for viewing information about media files


Installing
----------
Use the package manager of your operating system to install ranger.
Note that ranger can be started without installing by simply running ranger.py.

To install ranger manually:
    sudo make install

This translates roughly to:
    sudo python setup.py install --optimize=1 --record=install_log.txt

This also saves a list of all installed files to install_log.txt, which you can
use to uninstall ranger.


Getting Started
---------------
After starting ranger, you can use the Arrow Keys (or hjkl) to navigate, Enter
to open a file or type Q to quit.  The third column shows a preview of the
current file.  The second is the main column and the first shows the parent
directory.

Ranger can automatically copy default configuration files to ~/.config/ranger
if you run it with the switch --copy-config. (see ranger --help for a
description of that switch.)  Also check ranger/config/ for the default
configuration.
thon3) \ || (python -c 'import sys; sys.exit(sys.version < "2.6")' && \ which python) \ || (python2 -c 'import sys; sys.exit(sys.version < "2.6")' && \ which python2) \ ) ifeq ($(PYTHON),) $(error No suitable python found.) endif SETUPOPTS ?= '--record=install_log.txt' DOCDIR ?= doc/pydoc DESTDIR ?= / PREFIX ?= /usr/local PYOPTIMIZE ?= 1 FILTER ?= . CWD = $(shell pwd) bold := $(shell tput bold) normal := $(shell tput sgr0) default: test compile @echo 'Run `make options` for a list of all options' options: help @echo @echo 'Options:' @echo 'PYTHON = $(PYTHON)' @echo 'PYOPTIMIZE = $(PYOPTIMIZE)' @echo 'DOCDIR = $(DOCDIR)' @echo 'DESTDIR = $(DESTDIR)' help: @echo 'make: Test and compile ranger.' @echo 'make install: Install $(NAME)' @echo 'make pypi_sdist: Release a new sdist to PyPI' @echo 'make clean: Remove the compiled files (*.pyc, *.pyo)' @echo 'make doc: Create the pydoc documentation' @echo 'make cleandoc: Remove the pydoc documentation' @echo 'make man: Compile the manpage with "pod2man"' @echo 'make manhtml: Compile the html manpage with "pod2html"' @echo 'make snapshot: Create a tar.gz of the current git revision' @echo 'make test: Test everything' @echo 'make test_pylint: Test using pylint' @echo 'make test_flake8: Test using flake8' @echo 'make test_doctest: Test using doctest' @echo 'make test_pytest: Test using pytest' @echo 'make test_other: Verify the manpage is complete' @echo 'make test_py: Run all python tests, including manpage completeness' @echo 'make test_shellcheck: Test using shellcheck' @echo 'make todo: Look for TODO and XXX markers in the source code' install: $(PYTHON) setup.py install $(SETUPOPTS) \ '--prefix=$(PREFIX)' '--root=$(DESTDIR)' \ --optimize=$(PYOPTIMIZE) compile: clean PYTHONOPTIMIZE=$(PYOPTIMIZE) $(PYTHON) -m compileall -q ranger clean: find ranger -regex .\*\.py[co]\$$ -delete find ranger -depth -name __pycache__ -type d -exec rm -r -- {} \; doc: cleandoc mkdir -p $(DOCDIR) cd $(DOCDIR); \ $(PYTHON) -c 'import pydoc, sys; \ sys.path[0] = "$(CWD)"; \ pydoc.writedocs("$(CWD)")' find . -name \*.html -exec sed -i 's|'"$(CWD)"'|../..|g' -- {} \; TEST_PATHS_MAIN = \ $(shell find ./ranger -mindepth 1 -maxdepth 1 -type d \ ! -name '__pycache__' \ ! -path './ranger/config' \ ! -path './ranger/data' \ ) \ ./ranger/__init__.py \ $(shell find ./doc/tools ./examples -type f -name '*.py') \ ./ranger.py \ ./setup.py \ ./tests TEST_PATH_CONFIG = ./ranger/config test_pylint: @echo "$(bold)Running pylint...$(normal)" pylint $(TEST_PATHS_MAIN) pylint --rcfile=$(TEST_PATH_CONFIG)/.pylintrc $(TEST_PATH_CONFIG) test_flake8: @echo "$(bold)Running flake8...$(normal)" flake8 $(TEST_PATHS_MAIN) $(TEST_PATH_CONFIG) @echo test_doctest: @echo "$(bold)Running doctests...$(normal)" @set -e; \ for FILE in $(shell grep -IHm 1 doctest -r ranger | grep $(FILTER) | cut -d: -f1); do \ echo "Testing $$FILE..."; \ RANGER_DOCTEST=1 PYTHONPATH=".:"$$PYTHONPATH ${PYTHON} $$FILE; \ done @echo test_pytest: @echo "$(bold)Running py.test tests...$(normal)" py.test tests @echo test_py: test_pylint test_flake8 test_doctest test_pytest test_other @echo "$(bold)Finished python and documentation tests!$(normal)" @echo test_shellcheck: @echo "$(bold)Running shellcheck...$(normal)" sed '2,$$s/^\([[:blank:]]*\)#/\1/' ./ranger/data/scope.sh \ | shellcheck -a - @echo test_other: @echo "$(bold)Checking completeness of man page...$(normal)" @tests/manpage_completion_test.py @echo test: test_py test_shellcheck @echo "$(bold)Finished testing: All tests passed!$(normal)" doc/ranger.1: doc/ranger.pod README.md pod2man --stderr --center='ranger manual' \ --date='$(NAME)-$(VERSION)' \ --release=$(shell date -u '+%Y-%m-%d') \ doc/ranger.pod doc/ranger.1 doc/rifle.1: doc/rifle.pod README.md pod2man --stderr --center='rifle manual' \ --date='$(NAME_RIFLE)-$(VERSION_RIFLE)' \ --release=$(shell date -u '+%Y-%m-%d') \ doc/rifle.pod doc/rifle.1 man: doc/ranger.1 doc/rifle.1 manhtml: pod2html doc/ranger.pod --outfile=doc/ranger.1.html cleandoc: test -d $(DOCDIR) && rm -- $(DOCDIR)/*.html || true snapshot: git archive --prefix='$(NAME)-$(VERSION)/' --format=tar HEAD | gzip > $(SNAPSHOT_NAME) dist: snapshot todo: @grep --color -Ion '\(TODO\|XXX\).*' -r ranger .PHONY: clean cleandoc compile default dist doc help install man manhtml \ options snapshot test test_pylint test_flake8 test_doctest test_pytest \ test_other todo pypi_sdist