About ===== :Description: About features, differences to Links, platforms and future goals for ELinks :Keywords: browser, www, text, links, lynx [[about]] ELinks is a program for browsing the web in text mode. The goal of the project has from the beginning been to provide a feature-rich text mode browser with an open patches/features inclusion policy and active development. One of these features is that ELinks includes link:history.html#links-lua[Links-Lua] which adds scripting capabilities to ELinks. ELinks was forked from the original Links browser written by mailto:mikulas@artax.karlin.mff.cuni.cz[Mikulas Patocka]. It is in no way associated with http://www.twibright.com[Twibright Labs] and their Links version. Please read to link:history.html[the history page] for more information about the various Links versions and forks. Over the years many people have link:credits.html[contributed] to making ELinks what it is today. Features -------- Below the most noteworthy features are listed. - Lots of protocols (local files, finger, http, https, ftp, smb, ipv4, ipv6) - Authentication (HTTP authentication, Proxy authentication) - Persistent cookies - Cute menus and dialogs (link:screenshots/#UI[screenshot available]) - Tabbed browsing - Support for browser scripting (Perl, Lua, Guile) - Tables and frames rendering (link:screenshots/#frames-and-tables[screenshot available]) - Colors (link:screenshots/#colors[screenshot available]) - Background (non-blocking) downloads (link:screenshots/#multiple-downloads[screenshot available]) link:features.html[More about features and future goals ...] Supported platforms ------------------- ELinks is written in near-ANSI C and is quite portable. It has been reported to run at least on the following platforms: [format="dsv", separator="|"] `--------------`-------------`------------------------------------------------- Platform\ |Tested version\ |More information ------------------------------------------------------------------------------- AIX\ |?\ |? BeOS\ |?\ |? http://www.cygwin.com[CygWin]\ |ELinks 0.9.0-2\ |http://cygwin.com/ml/cygwin-apps/2003-12/msg00323.html[ITP post to cygwin-apps]. Digital Unix\ |?\ |? http://www.freebsd.org[FreeBSD]\ |ELinks 0.11.2\ |http://www.freebsd.org/cgi/cvsweb.cgi/ports/www/elinks/[FreeBSD Ports]. \ May crash with http://bugzilla.elinks.cz/show_bug.cgi?id=919[bug 919]; fixed in ELinks 0.11.3. http://www.gnu.org/software/hurd/[GNU Hurd]\ |ELinks 0.13.GIT 2007-12-13\ |http://savannah.gnu.org/bugs/?22861[select() spuriously indicates an exception in a pipe], making ELinks stop reading from the terminal; \ http://linuxfromscratch.org/pipermail/elinks-dev/2007-December/001683.html[patch ELinks] to work around that. \ http://savannah.gnu.org/task/?5130[There is no /dev/random], so configure without GnuTLS or set up another entropy source. \ http://bugzilla.elinks.cz/show_bug.cgi?id=1013[Bug 1013] may hinder error handling. HPUX\ |ELinks 0.4pre3\ |http://www.linuxfromscratch.org/pipermail/links-list/2002-March/001942.html[Link error]. IRIX\ |ELinks 0.9.3\ |http://www.linuxfromscratch.org/pipermail/elinks-users/2005-February/000828.html[Problems upgrading to 0.10]. http://www.linux.org[Linux] alpha\ |ELinks 0.11.3\ |http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=262514#42[Worked without problems]. http://www.linux.org[Linux] x86\ |ELinks 0.11.4rc1\ |http://bugzilla.elinks.cz/show_bug.cgi?id=1011[Bug 1011] in Bash 2.05a and later. nofollow_http://www.apple.com/macosx[Mac OS X]\ |ELinks 0.11.5\ |http://elinks.darwinports.com/[Darwin Ports]. Microsoft Windows\ |?\ |? http://www.netbsd.org[NetBSD]\ |ELinks 0.11.3\ |ftp://ftp.netbsd.org/pub/pkgsrc/current/pkgsrc/www/elinks/README.html[The NetBSD Packages Collection: www/elinks]. http://www.openbsd.org[OpenBSD]\ |ELinks 0.11.5\ |http://www.openbsd.org/4.5_packages/[Included in OpenBSD 4.5]. OS/2\ |ELinks 0.4pre6\ |http://www.os2site.com/sw/internet/browser/links/index.html[Binary packages at OS/2 Site]. RISC OS\ |ELinks 0.4.2.99-1\ |It seems the nofollow_http://www.riscos.info/packages/SectionIndex.html#Browser[Unix Porting Project] has dropped ELinks. http://www.sun.com/solaris[Solaris]\ |ELinks 0.11.3\ |``SunOS 5.8 Generic_117350-46 sun4u sparc SUNW,Sun-Fire-480R'': \ Use GNU Make 0.78 or later. \ Apply the patch from http://bugzilla.elinks.cz/show_bug.cgi?id=950[bug 950]. \ Ignore ``gcc: unrecognized option `-rdynamic'{empty}''. ------------------------------------------------------------------------------- Current versions of ELinks do several things that ANSI C does not really allow: - http://bugzilla.elinks.cz/show_bug.cgi?id=189[Bug 189]: aliasing between pointers of different types. - Declaring e.g. `unsigned char name[1]` as the last member of a structure, allocating extra memory with `malloc`, and then using more elements than declared. (Some system might detect this as a buffer overflow.) - Changing the size of a buffer with `realloc` and then comparing pointers to see whether it moved. - Casting integers to `void *` and back to integers. (Some system might raise an exception when such a pointer is loaded to an address register, or lose bits of the integer value.) One of these casts is required by `gnutls_transport_set_ptr`. - Calling functions via function pointers that have different types of parameters. Typically, the function takes a pointer to a struct, but the function pointer takes a `void *`. (Some system might use different representations for pointers of different types, or pass them in different registers.) - http://bugzilla.elinks.cz/show_bug.cgi?id=1012[Bug 1012]: multiplying signed integers and then checking whether the result wrapped around. (Some system might detect the overflow and abort the process. According to the C standard, unsigned integers must silently wrap around, but signed integers might not.) - Forward-declaring enum types and then passing pointers to them as parameters. (This is a http://gcc.gnu.org/onlinedocs/gcc-4.3.0/gcc/Incomplete-Enums.html[GCC extension]. The representation of such pointers could in principle depend on the set of values defined for the enum, especially if `sizeof(char \*) != sizeof(int \*)`.) Why text mode ? --------------- It may seem strange that anyone would develop a text mode browser in a world where the power of computers keep improving and most people favor graphical applications. Most graphical browsers are slow (especially to start up) and eat a lot of memory. For some people, this is unacceptable, so avoiding these browsers to harvest your critical system resources when doing basic tasks on the net is one thing. Text browsers are also invaluable on servers without a graphical environment and over SSH (or similiar) text-only sessions. Besides, text mode browsing is fun and highly addictive when you get the hang of it. ;-) And if you think that the current web is unbrowsable without images, you are wrong. 75% of the actual sites you visit are perfectly browsable (especially with the tables support) and another 15% are not exactly pleasant but still well-viewable. And even in text browser you can easily view individual images through some external viewer (like zgv on Linux console). Some people are actually using ELinks as their 'exclusive' browser. However, you obviously do not need to be so extreme to still have many good practical uses for a text browser. Other ways of browsing the web in text mode ------------------------------------------- ELinks is not the only text browser around. There are the various other link:history.html[Links flavors]. You might be also familiar with http://lynx.isc.org/[lynx], one of the oldest text browsers, available on many systems. You will find that a lot of the navigation keys in ELinks are similar to lynx'. There also is http://w3m.sf.net[w3m], which has some very interesting features, such as inline images or novel control style.