1.1. What is GNU nano?
1.2. What is the history behind nano?
1.3. Why the name change from TIP?
1.4. What is the current version of nano?
1.5. I want to read the manpage without having to download the program!
2.1. FTP and WWW sites that carry nano.
2.2. RedHat and derivatives (.rpm) packages.
2.3. Debian (.deb) packages.
2.4. By GIT (for the brave).
3.1. How do I install the RPM or DEB package?
3.2. Compiling from source: WHAT THE HECK DO I DO NOW?
3.3. Why does everything go into /usr/local?
3.4. nano should automatically run strip on the binary when installing it!
3.5. How can I make the executable smaller? This is too bloated!
3.6. Tell me more about this multibuffer stuff!
3.7. Tell me more about this verbatim input stuff!
3.8. How do I make a .nanorc file that nano will read when I start it?
3.9. Why does my self-compiled nano not read /etc/nanorc?
4.1. Alt+Up does nothing on a Linux console. How can I make it scroll?
4.2. How can I make Ctrl+Shift+Left/Right select words on urxvt?
4.3. Ack! My numeric keypad's keys don't work properly when NumLock is off! What can I do?
4.4. With what keystroke can I paste text from the clipboard into nano?
4.5. How do I select text for or paste text from the clipboard when nano's mouse support is turned on?
4.6. When I paste text into a document, each line gets indented further than the last. Why? And how can I stop this?
4.7. When I paste from Windows into a remote nano, nano rewraps the lines. What gives?
4.8. I've compiled nano with color support, but I don't see any color when I run it!
4.9. How do I make nano my default editor (in Pine, mutt, etc.)?
5.1. There's no translation for my language!
5.2. I don't like the translation for <x> in my language. How can I fix it?
5.3. What is the status of Unicode support?
6.1. Why should I use nano instead of Pico?
6.2. Why should I use Pico instead of nano?
6.3. What is so bad about the older Pine license?
6.4. Okay, well, what mail program should I use then?
7.1. Where can I ask questions or send suggestions?
7.2. How do I submit a bug report or patch?
7.3. I want to send the development team a big load of cash (or just a thank you).
7.4. How do I join the development team?
7.5. Can I have write access to the GIT tree?
GNU nano was designed to be a free replacement for the Pico text editor, part of the Pine email suite from The University of Washington. It aimed to "emulate Pico as closely as is reasonable and then include extra functionality".
Funny you should ask!
In the beginning...
For years Pine was THE program used to read email on a Unix system. The Pico text editor is the portion of the program one would use to compose his or her mail messages. Many beginners to Unix flocked to Pico and Pine because of their well organized, easy to use interfaces. With the proliferation of GNU/Linux in the mid to late 90's, many University students became intimately familiar with the strengths (and weaknesses) of Pine and Pico.
Then came Debian...
The Debian GNU/Linux distribution, known for its strict standards in distributing truly "free" software (i.e. software with no restrictions on redistribution), would not include a binary package for Pine or Pico. Many people had a serious dilemma: they loved these programs, but the versions available at the time were not truly free software in the GNU sense of the word.
The event...
It was in late 1999 when Chris Allegretta (our hero) was yet again complaining to himself about the less-than-perfect license Pico was distributed under, the 1000 makefiles that came with it and how just a few small improvements could make it the Best Editor in the World (TM). Having been a convert from Slackware to Debian, he missed having a simple binary package that included Pine and Pico, and had grown tired of downloading them himself.
Finally something snapped inside and Chris coded and hacked like a madman for many hours straight one weekend to make a (barely usable) Pico clone, at the time called TIP (Tip Isn't Pico). The program could not be invoked without a filename, could not save files, had no help text display, spell checker, and so forth. But over time it improved, and with the help of a few great coders it matured to the (hopefully) stable state it is in today.
In February 2001, nano was declared an official GNU program by Richard Stallman. nano also reached its first production release on March 22, 2001.
On January 10, 2000, TIP was officially renamed to nano because of a namespace conflict with another program called 'tip'. The original 'tip' program "establishes a full duplex terminal connection to a remote host", and was included with many older Unix systems (and newer ones like Solaris). The conflict was not noticed at first because there is no 'tip' utility included with most GNU/Linux distributions (where nano was developed).
The current version of nano should be 5.9. Of course, you should always check the nano homepage to see what the latest and greatest version is.
Jeez, demanding, aren't we? Okay, look here.
The nano source tarballs can be downloaded from the following web sites:
Debian users can check out the current nano packages for:
You can also have a look at the Package Pool to see all the available binary and source packages.
For the 'bleeding edge' current version of nano, you can use GIT to download the current source code. Note: believe it or not, by downloading code that has not yet stabilized into an official release, there could quite possibly be bugs, in fact the code may not even compile! Anyway, see the nano GIT document for info on anonymous GIT access to the nano source.
It's simple really! As root, type rpm -Uvh nano-x.y-1*.rpm if you have a RedHat-ish system or dpkg -i nano_x.y-1*.deb if you have a Debian-ish system, where x.y is the version number of nano. There are other programs to install packages, and if you wish to use those, knock yourself out.
Okay, take a deep breath, this really isn't hard. Unpack the nano source with a command like:
tar -xvf nano-x.y.tar.gz
Then you need to run configure with any options you might want (if any).
The average case is this:
cd nano-x.y/
./configure
make
make install #(as root, of course)
Well, that's what the configure script defaults to. If you wish to change this, simply do this:
./configure --prefix=/usr
This will put nano into /usr/bin when you run make install.
It does when you use make install-strip. The default make install does not, and will not, run strip automatically.
Actually, there are several parts of the editor that can be disabled. You can pass arguments to the configure script that disable certain features. Here's a brief list:
--disable-browser Disable the built-in file browser --disable-color Disable color and syntax highlighting --disable-comment Disable the comment/uncomment function --disable-extra Disable the easter egg --disable-help Disable the built-in help texts --disable-histories Disable the saving of search strings and cursor positions --disable-justify Disable the justify/unjustify functions --disable-libmagic Disable the use of libmagic for determining a file's syntax --disable-linenumbers Disable line numbering --disable-mouse Disable mouse support --disable-multibuffer Disable the opening of multiple file buffers --disable-nanorc Disable the use of .nanorc files --disable-operatingdir Disable the setting of an operating directory --disable-speller Disable the spell-checker functions --disable-tabcomp Disable the tab-completion functions --disable-wordcomp Disable the word-completion function --disable-wrapping Disable all hard-wrapping of textThere's also the --enable-tiny option which disables everything above, as well as some larger chunks of the program (like the undo/redo code and the code for selecting text). Also, if you know you don't need other languages, you can use --disable-nls to disable internationalization and save a few kilobytes. And finally, there's always good old strip to remove all unneeded symbols.
To use multiple file buffers, you must not have configured nano with --disable-multibuffer nor with --enable-tiny (use nano -V to check the compilation options). Then when you want to insert a file into its own buffer instead of into the current file, just hit Meta-F after typing ^R. If you always want files to be loaded into their own buffers, use the -F or --multibuffer flag when you invoke nano, or add set multibuffer to your .nanorc file.
You can move between the buffers you have open with the Meta-< and Meta-> keys, or more easily without holding Shift: Meta-, and Meta-. (clear as mud, right? =-). When you have more than one buffer open, the ^X shortcut will say "Close", instead of "Exit".
When you want to insert a literal character into the file you're editing, such as a control character that nano usually treats as a command, first press Meta-V (if you're not at a prompt, you'll get the message "Verbatim Input" on the status bar), then press the key(s) that generate the character you want.
Alternatively, if Unicode support is enabled (see section 5.3), you can press Meta-V and then type a six-digit hexadecimal code (from 000000 to 10FFFF, case-insensitive), and the character with the corresponding value will be inserted. The status bar will change to "Unicode Input: ......" when you do this.
It's not hard at all! Simply copy the sample.nanorc from the doc/ directory in the nano source package (or from /usr/doc/nano on your system) to .nanorc in your home directory, and then edit it. If you didn't get a sample nanorc, the syntax of the file is simple: features are turned on and off by using the words set and unset followed by the long option name of the feature (see man nanorc for the full list of options). For example, "set quickblank" or "set smarthome". Of course, for this to work, your nano must not have been compiled with --disable-nanorc.
By default (see 3.3), nano gets installed into /usr/local. This also means that, at startup, nano will read /usr/local/etc/nanorc instead of /etc/nanorc. You can make a symlink from the former to the latter if you want your self-compiled nano to read the same nanorc as the system-installed nano. Or you can configure your nano to overwrite the system nano (again, see 3.3).
On Debian and its derivatives, the Alt+Up keystroke on a Linux console produces by default a 'KeyboardSignal', which normally does absolutely nothing and is useless for the average user. To get the keystroke to do what it ought to do (scroll the viewport one row up), run this in a Linux console:
dumpkeys --full | sed s/KeyboardSignal/Up/ | sudo loadkeys -
You will need to run this command whenever you first switch to a Linux console.
Or you can (as root) execute the following little script just once:
for file in /etc/console-setup/cached*.kmap.gz; do
gunzip $file;
sed -i 's/KeyboardSignal/Up/' ${file%.gz};
gzip ${file%.gz};
done
The urxvt terminal emulator produces non-standard escape sequences for the modified cursor keys. These deviant sequences are not listed in the terminfo database, which means that ncurses does not recognize them. The easiest way around this is to tell urxvt to produce xterm-compatible escape sequences for the relevant keystrokes. To achieve this, add the following lines to your ~/.Xresources file:
URxvt.iso14755_52: False URxvt.keysym.C-S-Up: \033[1;6A URxvt.keysym.C-S-Down: \033[1;6B URxvt.keysym.C-S-Right: \033[1;6C URxvt.keysym.C-S-Left: \033[1;6D URxvt.keysym.M-Up: \033[1;3A URxvt.keysym.M-Down: \033[1;3B URxvt.keysym.M-Right: \033[1;3C URxvt.keysym.M-Left: \033[1;3D URxvt.keysym.M-Insert: \033[2;3~ URxvt.keysym.M-Delete: \033[3;3~ URxvt.keysym.M-Page_Up: \033[5;3~ URxvt.keysym.M-Page_Down: \033[6;3~Then run xrdb ~/.Xresources and restart your urxvt terminal. Now Ctrl+Shift+Left and Ctrl+Shift+Right will select words, Alt+Up and Alt+Down will scroll the text without moving the cursor, and several such things more.
You can use the -K or --rawsequences option on the command line, or add the line set rawsequences to your .nanorc. However, nano's mouse support will be disabled if you do any of these things.
In most desktop environments Shift+Insert will paste the contents of the clipboard.
Try holding down the Shift key and selecting or pasting the text as you normally would.
You have the autoindent feature turned on. Hit Meta-I to turn it off, paste your text, and then hit Meta-I again to turn it back on.
Update: Since version 4.8, nano will suppress auto-indentation during a paste, so you no longer need to toggle it off and on manually.
When pasting from Windows, in some situations linefeeds are sent instead of carriage returns (Enters). And linefeeds are ^Js, which make nano justify (rewrap) the current paragraph. To prevent these linefeeds from causing these unwanted justifications, add this line to your .nanorc on the remote Linux box: unbind ^J main or bind ^J enter main, depending on whether the paste contains CR + LF or only LF.
Update: Since version 4.8, nano will ignore linefeed characters in a paste, so you no longer need the above workaround.
If you want nano to actually use color, you have to specify the color configurations you want it to use in your .nanorc. Several example configurations are in the syntax/ subdirectory of the nano source, which are normally installed to /usr/local/share/nano/. To enable all of them, uncomment the line # include "/usr/local/share/nano/*.nanorc" in your nanorc. See also section 3.9.
You need to make nano your $EDITOR. If you want this to be saved, you should put a line like this in your .bashrc if you use bash (or .zshrc if you believe in zsh):
export EDITOR=/usr/local/bin/nano
or, if you use tcsh, put this in your .cshrc file:
setenv EDITOR /usr/local/bin/nano
Change /usr/local/bin/nano to wherever nano is installed on your system. Type "which nano" to find out. This will not take effect until the next time you log in. So log out and back in again.
Then, on top of that, if you use Pine, you must go into setup (type S at the main menu), and then configure (type C). Hit Enter on the lines that say:
[ ] enable-alternate-editor-cmd
[ ] enable-alternate-editor-implicitlyThen exit (E) and select Yes (Y).
If you're a mutt user, you should see an effect immediately the next time you log in. No further configuration is needed. However, if you want to let people know you use nano to compose your email messages, you can put a line like this in your .muttrc:
my_hdr X-Composer: nano-x.y
Again, replace x.y with the version of nano you use.
In June 2001, GNU nano entered the Translation Project and since then, translations should be managed from there.
If there isn't a translation for your language, you could ask your language team to translate nano, or better still, join that team and do it yourself. Joining a team is easy. You just need to ask the team leader to add you, and then send a translation disclaimer to the FSF (this is necessary as nano is an official GNU package, but it does not mean that you transfer the rights of your work to the FSF, it's just so the FSF can legally manage them).
In any case, translating nano is easy. Just grab the latest nano.pot file listed on nano's page at the TP, and translate each msgid line into your native language on the msgstr line. When you're done, you should send it to the TP's central PO-file repository.
The best way is to send an e-mail with your suggested corrections to the team's mailing list. The address is mentioned in the
Language-Team:
field in the relevant PO file. The team leader or the assigned translator can then make the changes reach the nano-devel list.
Unicode should be fully usable nowadays. When the encoding of your terminal is set to UTF-8, and your locale (mainly the LANG environment variable) is UTF-8 too, then you should be able to read, enter and save Unicode text.
If you want features like undo/redo, syntax highlighting, line numbers, soft-wrapping, opening multiple files at once, an interface localized to your language, or search and replace with support for regular expressions, then you want nano.
If you use your editor only to write emails or other texts and have no need for the above-mentioned features, then Pico will do fine for you.
The U of W license for older versions of Pine and Pico is not considered truly Free Software according to both the Free Software Foundation and the Debian Free Software Guidelines. The main problem regards the limitations on distributing derived works: according to UW, you can distribute their software, and you can modify it, but you can not do both, i.e. distribute modified binaries.
If you are looking to use a Free Software program similar to Pine, and Emacs is not your thing, you should definitely take a look at mutt. It is a full-screen, console based mail program that actually has a lot more flexibility than Pine, but has a keymap included in the distribution that allows you to use the same keystrokes as Pine would to send and receive mail. It's also under the GNU General Public License, version 2.0.
Of course, due to the license change you can now use the Alpine distribution of PINE as it is now considered Free Software, but you would be sacrificing many of nano's features to do so.
There are three mailing lists for nano hosted at Savannah: info-nano, help-nano and nano-devel. info-nano is a very low traffic list where new versions of nano are announced (surprise!). help-nano is for getting help with the editor without needing to hear all of the development issues surrounding it. nano-devel is a normally low, sometimes high traffic list for discussing the present and future development of nano. Here are links to where you can sign up for a given list:
info-nano - https://lists.gnu.org/mailman/listinfo/info-nano/
help-nano - https://lists.gnu.org/mailman/listinfo/help-nano/
nano-devel - https://lists.gnu.org/mailman/listinfo/nano-devel/
The best way to submit bugs is through the Savannah bug tracker, as you can check whether the bug you are reporting has already been submitted, and it makes it easier for the maintainers to keep track of them.
You can submit patches for nano via Savannah's patch manager.
That's fine. Send it our way! Better yet, fix a bug in the program or implement a cool feature and send us that instead (though cash is fine too).
The easiest way is to consistently send in good patches that add some needed functionality, fix a bug or two, and/or make the program more optimized/efficient. Then ask nicely and you will probably be added to the Savannah development list and be given write access after a while. There is a lot of responsibility that goes along with being a team member, so don't think it's just something to add to your resume.
Re-read section 7.4 and you should know the answer.