# some utilities for converting numbers from hex
# lowercase letters only for now
== code
# instruction effective address register displacement immediate
# . op subop mod rm32 base index scale r32
# . 1-3 bytes 3 bits 2 bits 3 bits 3 bits 3 bits 2 bits 2 bits 0/1/2/4 bytes 0/1/2/4 bytes
hex-int?: # in: (addr slice) -> result/eax: boolean
# . prologue
55/push-ebp
89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . . # copy esp to ebp
# . save registers
51/push-ecx
52/push-edx
53/push-ebx
# ecx = s
8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 1/r32/ecx 8/disp8 . # copy *(ebp+8) to ecx
# edx = s->end
8b/copy 1/mod/*+disp8 1/rm32/ecx . . . 2/r32/edx 4/disp8 . # copy *(ecx+4) to edx
# var curr/ecx: (addr byte) = s->start
8b/copy 0/mod/indirect 1/rm32/ecx . . . 1/r32/ecx . . # copy *ecx to ecx
# if s is empty return false
b8/copy-to-eax 0/imm32/false
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
73/jump-if-addr>= $hex-int?:end/disp8
# skip past leading '-'
# . if (*curr == '-') ++curr
31/xor 3/mod/direct 3/rm32/ebx . . . 3/r32/ebx . . # clear ebx
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 3/r32/BL . . # copy byte at *ecx to BL
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x2d/imm32/- # compare ebx
75/jump-if-!= $hex-int?:initial-0/disp8
# . ++curr
41/increment-ecx
# skip past leading '0x'
$hex-int?:initial-0:
# . if (*curr != '0') jump to loop
31/xor 3/mod/direct 3/rm32/ebx . . . 3/r32/ebx . . # clear ebx
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 3/r32/BL . . # copy byte at *ecx to BL
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x30/imm32/0 # compare ebx
75/jump-if-!= $hex-int?:loop/disp8
# . ++curr
41/increment-ecx
$hex-int?:initial-0x:
# . if (curr >= in->end) return true
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
73/jump-if-addr>= $hex-int?:true/disp8
# . if (*curr != 'x') jump to loop # the previous '0' is still valid so doesn't need to be checked again
31/xor 3/mod/direct 3/rm32/ebx . . . 3/r32/ebx . . # clear ebx
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 3/r32/BL . . # copy byte at *ecx to BL
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x78/imm32/x # compare ebx
75/jump-if-!= $hex-int?:loop/disp8
# . ++curr
41/increment-ecx
$hex-int?:loop:
# if (curr >= in->end) return true
39/compare Ranger v.1.0.4
==============
Ranger
A keeper, guardian, or soldier who ranges over a region
to protect the area or enforce the law.
This is the filemanager Chuck Norris the Texas Ranger would use
if he had a computer with a unix-like operating system. (He doesn't
trust computers though and prefers to do the calculations himself.)
After all, as a professional ranger, he needs a broad overview of his
territory, and the multi-column display of ranger provides just that,
rather than restricting you to the current directory only.
You can preview the content of the selected file or directory, copy or move
files around with the VIM-like commands dd and yy, execute predefined
applications when opening a file, etc...
Everything is fully customizable and written in Python (2.6 and 3.1
compatible) using curses for the text-based user interface.
About
-----
* Author: Roman Zimbelmann
* Email: romanz@lavabit.com
* Website: http://savannah.nongnu.org/projects/ranger
* Git repo: http://git.savannah.gnu.org/cgit/ranger.git
* Version: 1.0.4
Features
--------
* Multi-column display
* Preview of the selected file/directory
* Common file operations (create/chmod/copy/delete/...)
* Quickly find files or text inside files
* VIM-like console and hotkeys
* Open files in external programs
* Mouse support
* Change the directory of your shell after exiting ranger
* Bookmarks
Dependencies
------------
* A Unix-like Operating System
* Python 2.6 or 3.1
* Python curses module (often but not always included with Python)
Bugs and Feature Requests
-------------------------
Report bugs and feature requests on savannah:
https://savannah.nongnu.org/bugs/?func=additem&group=ranger
Alternatively you can send an email to romanz@lavabit.com.
Please include as much relevant information as possible.
Using ranger with the --debug option will abort the program and
print tracebacks rather than a red message in the statusbar.
If this applies to you, please include such a traceback in your report.
Getting Started
---------------
If you just want to check out ranger without installing it, type
./ranger.py --clean
in the top directory of ranger. By using the --clean switch, it will
leave no trace on your system whatsoever.
To properly install it, follow the instructions in the INSTALL file,
then type:
ranger
You should see 4 columns. The third is the directory where you are at
the moment. To the left, there are the directories above the current
working directory, and the column on the right is a preview of the selected
file/directory.
Now use the arrow keys to navigate, press enter to open a file.
A list of commands with short descriptions can be viewed by
pressing "?" inside the program and following the instructions.
The file ranger/defaults/keys.py contains all key combinations, so that's
another place you may want to check out.
Opening Files with Ranger
-------------------------
If you use the same applications like me, you'll be able to open
files by pressing the right arrow key. If not, you will have to
specify them in ranger/defaults/apps.py. It's explained
in the docstrings how exactly to do that.
Once you've set up your applications, you can also use ranger to
open files from the shell:
ranger blabla.pdf
Customizing Ranger
------------------
The file ranger/defaults/options.py contains most of the options.
apps.py defines how files are run, keys.py defines keybindings.
The files in ranger/defaults/ can be copied into ~/.ranger/ for per-user
modifications. Colorschemes can be placed in ~/.ranger/colorschemes.
The configuration files should be self-explanatory. If you need more
information, check out the source code.
Also, see the file HACKING for more detailed instructions on
modifying the program.
Tips
----
Change the directory of your parent shell when you exit ranger:
ranger() {
$(which ranger) $@ &&
cd "$(grep \^\' ~/.ranger/bookmarks | cut -b3-)"
}
This can be put into your ~/.bashrc or something similar.