1
0
mirror of https://github.com/rkd77/elinks.git synced 2024-10-13 05:43:37 -04:00
This commit is contained in:
Kalle Olavi Niemitalo 2006-02-05 17:48:43 +02:00 committed by Kalle Olavi Niemitalo
commit b1f8756c59
226 changed files with 4412 additions and 1534 deletions

1
.gitignore vendored
View File

@ -13,6 +13,7 @@ depcomp
autom4te.cache
stamp-h1
.deps
.vimrc
elinks
*.swp
*.patch

6
.vimrc
View File

@ -1,6 +0,0 @@
:set shiftwidth=8
:set tabstop=8
:set softtabstop=0
:set noexpandtab
au BufNewFile,BufRead *.inc setf c

View File

@ -161,6 +161,9 @@ Doug Kearns <djkea2@mugca.its.monash.edu.au>
Edwin Groothuis <edwin@mavetju.org>
Dump-width option
Eric Wald <eswald@gmail.com>
Vim ftplugin to set ELinks coding style
Evan Hughes <hughes@lab43.org>
Bookmarks

View File

@ -26,9 +26,7 @@ from GIT in it, use the command:
$ cg clone -s check_file_SITES_for_value_of_this
Note that if you obtained the sources directly from GIT, you NEED to run
./autogen.sh! (It should be enough to do it once - however, if you have build
problems, try running this first.) Also, you obviously need GNU make and
autoconf installed on your system (note that autoconf-2.13 is supported, newer
ones may cause problems thanks to the autoconf developers who don't know how to

View File

@ -43,12 +43,10 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
TEST_LIB=$(top_srcdir)/test/libtest.sh
export TEST_LIB
host = @host@
ASCIIDOC = @ASCIIDOC@
ASCIIDOC_FLAGS = @ASCIIDOC_FLAGS@
AWK = @AWK@
CATALOGS = @CATALOGS@
CC = @CC@
@ -114,7 +112,9 @@ CONFIG_EXMODE = @CONFIG_EXMODE@
CONFIG_FASTMEM = @CONFIG_FASTMEM@
CONFIG_FINGER = @CONFIG_FINGER@
CONFIG_FORMHIST = @CONFIG_FORMHIST@
CONFIG_FSP = @CONFIG_FSP@
CONFIG_FTP = @CONFIG_FTP@
CONFIG_GC = @CONFIG_GC@
CONFIG_GLOBHIST = @CONFIG_GLOBHIST@
CONFIG_GNUTLS = @CONFIG_GNUTLS@
CONFIG_GNUTLS_OPENSSL_COMPAT = @CONFIG_GNUTLS_OPENSSL_COMPAT@
@ -130,7 +130,6 @@ CONFIG_LEDS = @CONFIG_LEDS@
CONFIG_MAILCAP = @CONFIG_MAILCAP@
CONFIG_MANUAL = @CONFIG_MANUAL@
CONFIG_MARKS = @CONFIG_MARKS@
CONFIG_MD5 = @CONFIG_MD5@
CONFIG_MIMETYPES = @CONFIG_MIMETYPES@
CONFIG_MOUSE = @CONFIG_MOUSE@
CONFIG_NNTP = @CONFIG_NNTP@
@ -143,7 +142,6 @@ CONFIG_OS_UNIX = @CONFIG_OS_UNIX@
CONFIG_OS_WIN32 = @CONFIG_OS_WIN32@
CONFIG_OWN_LIBC = @CONFIG_OWN_LIBC@
CONFIG_POD2HTML = @CONFIG_POD2HTML@
CONFIG_SCANNER = @CONFIG_SCANNER@
CONFIG_SCRIPTING = @CONFIG_SCRIPTING@
CONFIG_SCRIPTING_GUILE = @CONFIG_SCRIPTING_GUILE@
CONFIG_SCRIPTING_LUA = @CONFIG_SCRIPTING_LUA@
@ -151,7 +149,6 @@ CONFIG_SCRIPTING_PERL = @CONFIG_SCRIPTING_PERL@
CONFIG_SCRIPTING_PYTHON = @CONFIG_SCRIPTING_PYTHON@
CONFIG_SCRIPTING_RUBY = @CONFIG_SCRIPTING_RUBY@
CONFIG_SCRIPTING_SPIDERMONKEY = @CONFIG_SCRIPTING_SPIDERMONKEY@
CONFIG_SHA1 = @CONFIG_SHA1@
CONFIG_SMALL = @CONFIG_SMALL@
CONFIG_SMB = @CONFIG_SMB@
CONFIG_SPIDERMONKEY = @CONFIG_SPIDERMONKEY@

View File

@ -48,7 +48,7 @@ quiet_cmd_ld_objs = " [$(LD_COLOR)LD$(END_COLOR)] $(RELPATH)$@"
`test -e $(subdir)/$(LIB_O_NAME) && echo $(subdir)/$(LIB_O_NAME)`)
quiet_cmd_link = ' [$(LINK_COLOR)LINK$(END_COLOR)] $(RELPATH)$@'
cmd_link = $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(2) $(LIBS)
cmd_link = $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS)
quiet_cmd_sparse = ' [SPARSE] $(RELPATH)$(2)'
cmd_sparse = $(SPARSE) $(DEFS) $(INCLUDES) $(AM_CFLAGS) $(CFLAGS) $(SPARSE_FLAGS) $(2)
@ -78,9 +78,10 @@ INCLUDE_ALL=1
endif
ifneq ($(findstring init,$(MAKECMDGOALS)),)
# FIXME: Detect when $(subdir)/Makefile is $(srcdir)/$(subdir)/Makefile
# and error out so the user won't overwrite the 'master' Makefiles.
INCLUDE_ALL=1
ifndef SRC
SRC = $(shell cd $(top_srcdir) && pwd)
endif
endif
ifdef INCLUDE_ALL
@ -92,7 +93,8 @@ endif
#############################################################################
# Internal build rules
# All files in $(OBJS) and any $(subdir)/lib.o are linked into lib.o
# All files in $(OBJS) and any $(subdir)/lib.o are linked into lib.o.
# Sort them to filter out duplicated and get uniform order.
LIB_O_DEPS = \
$(sort $(filter-out $(LIB_O_NAME),$(OBJS))) \
$(foreach subdir,$(sort $(SUBDIRS)),$(wildcard $(subdir)/$(LIB_O_NAME)))
@ -106,7 +108,7 @@ DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
ifneq ($(strip $(OBJS)),)
-include $(DEP_FILES)
OBJS += $(LIB_O_NAME)
ALL_OBJS = $(LIB_O_DEPS) $(LIB_O_NAME)
endif
%.o: $(srcdir)%.c
@ -125,7 +127,7 @@ CLEAN += $(PROG) $(OBJS)
#############################################################################
# The main default rules
all-default: $(OBJS) $(PROGS) $(MAN1) $(MAN5)
all-default: $(ALL_OBJS) $(PROGS) $(MAN1) $(MAN5)
# Ensure that Makefiles in subdirs are created before we recursive into them
init-recursive: init-default
@ -133,7 +135,8 @@ init-recursive: init-default
init-default:
@$(foreach subdir,$(sort $(SUBDIRS)), \
$(MKINSTALLDIRS) $(subdir) >/dev/null; \
echo 'include $(SRC)/$(RELPATH)/$(subdir)/Makefile' > $(subdir)/Makefile;)
test -e "$(subdir)/Makefile" \
|| echo 'include $(SRC)/$(RELPATH)/$(subdir)/Makefile' > $(subdir)/Makefile;)
clean-default cleanall-default:
@-test -z "$(CLEAN)" || $(RM) $(CLEAN)
@ -161,7 +164,6 @@ ifdef MAN5
$(call ncmd,installdata,$(file),$(DESTDIR)$(mandir)/man5);)
endif
##############################################################################
# Auto-testing infrastructure
@ -171,13 +173,16 @@ ifdef TEST_PROGS
TESTDEPS-$(CONFIG_DEBUG) += $(top_builddir)/src/util/memdebug.o
TESTDEPS += $(TESTDEPS-yes)
TEST_LIB=$(top_srcdir)/test/libtest.sh
export TEST_LIB
# This is a very general rule but as long as we don't put test programs in src/
# it should work.
%: %.o $(TESTDEPS)
$(call cmd,link)
TESTS = $(wildcard $(srcdir)test-*)
$(TEST_PROGS): $(TESTDEPS)
$(call cmd,link,$@.o)
# We cannot use $$@.o in the rule above so ensure that all test programs are
# built before linking.
$(TESTS): $(addsuffix .o,$(TEST_PROGS)) $(TEST_PROGS)
@echo "*** $(notdir $@) ***"; \
$(call shellquote,$(SHELL)) $@ $(TEST_OPTS)

7
NEWS
View File

@ -5,6 +5,13 @@ You can see the complete list of recent changes, bugfixes and new features in
the link:http://pasky.or.cz/gitweb.cgi[gitweb interface]. See the ChangeLog
file for details.
ELinks now:
-----------
* Native FSP protocol support (replaces CGI program in contrib/fsp/)
* SEE Ecmascript backend
* Minimalistic RSS renderer
ELinks 0.11.0 (Elated):
-----------------------

View File

@ -1,2 +0,0 @@
:set runtimepath+=.
:runtime ../.vimrc

View File

@ -1,2 +0,0 @@
:set runtimepath+=.
:runtime ../../.vimrc

View File

@ -90,16 +90,17 @@ if test "$CONFIG_SCRIPTING_RUBY" = "yes"; then
fi
fi
EL_RESTORE_FLAGS
if test "$CONFIG_SCRIPTING_RUBY" != "yes"; then
if test -n "$CONFIG_SCRIPTING_RUBY_WITHVAL" &&
test "$CONFIG_SCRIPTING_RUBY_WITHVAL" != no; then
AC_MSG_ERROR([Ruby not found])
fi
EL_RESTORE_FLAGS
else
EL_CONFIG(CONFIG_SCRIPTING_RUBY, [Ruby])
CFLAGS="$CFLAGS_X"
LIBS="$LIBS $RUBY_LIBS"
AC_SUBST(RUBY_CFLAGS)
AC_SUBST(RUBY_LIBS)
fi

View File

@ -66,6 +66,12 @@ if test "x$CONFIG_DOC" != xno; then
EL_CONFIG(CONFIG_ASCIIDOC, [AsciiDoc])
EL_CONFIG(MANUAL_ASCIIDOC, [HTML (one file)])
EL_CONFIG(MAN_ASCIIDOC, [HTML])
echo > config.asciidoc-unsafe.txt
if "$ASCIIDOC" --unsafe config.asciidoc-unsafe.txt >&/dev/null; then
ASCIIDOC_FLAGS=--unsafe
fi
rm config.asciidoc-unsafe.*
fi
AC_PATH_PROGS(XMLTO, "xmlto")
@ -87,6 +93,7 @@ if test "x$CONFIG_DOC" != xno; then
fi
fi
AC_SUBST(ASCIIDOC_FLAGS)
AC_SUBST(CONFIG_ASCIIDOC)
AC_SUBST(CONFIG_POD2HTML)
AC_SUBST(CONFIG_XMLTO)
@ -388,9 +395,22 @@ AC_DEFUN([EL_CHECK_OPTIONAL_LIBRARY],
AC_MSG_RESULT(yes)
EL_SAVE_FLAGS
if test -n "$withval" && test -d "$withval"; then
CFLAGS="$CFLAGS -I$withval/include";
CPPFLAGS="$CPPFLAGS -I$withval/include";
LDFLAGS="$LDFLAGS -L$withval/lib";
# Be a little more careful when setting
# include and lib directories. This way
# $withval will work when includes are
# there but the library is in the common
# /usr/lib ... Does the right thing when
# looking for gc on Debian.
if test -d "$withval/include"; then
CFLAGS="$CFLAGS -I$withval/include"
CPPFLAGS="$CPPFLAGS -I$withval/include"
else
CFLAGS="$CFLAGS -I$withval"
CPPFLAGS="$CPPFLAGS -I$withval"
fi
if test -d "$withval/lib"; then
LDFLAGS="$LDFLAGS -L$withval/lib"
fi
fi
AC_CHECK_HEADERS([$3], [$1=yes], [$1=no; break;])
@ -439,6 +459,11 @@ EL_CONFIG_OPTIONAL_LIBRARY(CONFIG_BZIP2, bzlib, bzlib.h, bz2, BZ2_bzReadOpen,
EL_CONFIG_OPTIONAL_LIBRARY(CONFIG_IDN, idn, idna.h, idn, stringprep_check_version,
[ --without-idn disable international domain names support])
if test "x{with_gc}" != xno; then
EL_CONFIG_OPTIONAL_LIBRARY(CONFIG_GC, gc, gc.h, gc, GC_init,
[ --with-gc enable Boehm's garbage collector])
fi
dnl ===================================================================
dnl Bookmark and XBEL support
dnl ===================================================================
@ -507,6 +532,8 @@ AC_ARG_WITH(see, [ --with-see enable Simple Ecmascript Engine (SEE
AC_MSG_CHECKING([for SEE])
CONFIG_ECMASCRIPT_SEE=no
if test "$enable_see" = "yes"; then
AC_MSG_RESULT(yes);
## Based on the SEE_FLAGS macro.
@ -529,7 +556,6 @@ if test "$enable_see" = "yes"; then
CPPFLAGS="$CPPFLAGS $SEE_CFLAGS"
EL_CONFIG(CONFIG_ECMASCRIPT_SEE, [SEE])
AC_SUBST(SEE_CFLAGS)
AC_SUBST(CONFIG_ECMASCRIPT_SEE)
else
if test -n "$withval" && test "x$withval" != xno; then
AC_MSG_ERROR([SEE not found])
@ -583,26 +609,19 @@ if test -z "$disable_spidermonkey"; then
fi
AC_MSG_RESULT($cf_result)
CONFIG_SPIDERMONKEY="$cf_result"
EL_RESTORE_FLAGS
if test "$cf_result" != yes; then
EL_RESTORE_FLAGS
else
EL_CONFIG(CONFIG_SPIDERMONKEY, [SpiderMonkey])
CFLAGS="$CFLAGS_X"
AC_SUBST(SPIDERMONKEY_LIBS)
AC_SUBST(SPIDERMONKEY_CFLAGS)
fi
if test "$CONFIG_SPIDERMONKEY" = yes &&
test "$CONFIG_ECMASCRIPT_SEE" != yes; then
if test "x$CONFIG_SPIDERMONKEY" = xyes &&
test "x$CONFIG_ECMASCRIPT_SEE" != xyes; then
EL_CONFIG(CONFIG_ECMASCRIPT_SMJS, [SpiderMonkey document scripting])
else
CONFIG_ECMASCRIPT_SMJS=no
fi
AC_SUBST(CONFIG_SPIDERMONKEY)
AC_SUBST(CONFIG_ECMASCRIPT_SMJS)
EL_CONFIG_DEPENDS(CONFIG_ECMASCRIPT, [CONFIG_ECMASCRIPT_SEE CONFIG_ECMASCRIPT_SMJS], [ECMAScript (JavaScript)])
AC_SUBST(CONFIG_ECMASCRIPT_SEE)
AC_SUBST(CONFIG_ECMASCRIPT_SMJS)
dnl ===================================================================
@ -621,6 +640,13 @@ else
CONFIG_SCRIPTING_SPIDERMONKEY=no
fi
if test "x$CONFIG_ECMASCRIPT_SMJS" = xyes ||
test "x$CONFIG_SCRIPTING_SPIDERMONKEY" = xyes; then
LIBS="$LIBS $SPIDERMONKEY_LIBS"
AC_SUBST(SPIDERMONKEY_LIBS)
AC_SUBST(SPIDERMONKEY_CFLAGS)
AC_SUBST(CONFIG_SPIDERMONKEY)
fi
dnl ===================================================================
dnl Check for Guile, optional even if installed.
@ -732,13 +758,17 @@ dnl Check for Python
dnl ===================================================================
enable_python="no";
AC_ARG_WITH(python, [ --with-python enable Python support],
AC_ARG_WITH(python, [ --with-python=[prefix] enable Python support],
[
if test "$withval" = yes; then
if test "$withval" != no; then
# FIXME: If withval is a valid directory append it to PATH
# so that you can specify one of several Python installations.
withval="";
enable_python=yes;
if test "$withval" != yes; then
python_prefix="$withval"
else
python_prefix=""
fi
enable_python=yes
cat <<EOF
***********************************************************************
The Python support is incomplete and not so well integrated to ELinks
@ -750,35 +780,46 @@ EOF
fi
])
AC_MSG_CHECKING([for Python])
cf_result=no
EL_SAVE_FLAGS
if test "$enable_python" = "yes"; then
PYTHON_LIBS="-lpython"
PYTHON_CFLAGS="-I`python -c 'from distutils import sysconfig; print sysconfig.get_python_inc()' 2> /dev/null`"
LIBS="$PYTHON_LIBS $LIBS"
CFLAGS="$PYTHON_CFLAGS $CFLAGS"
CPPFLAGS="$CPPFLAGS $PYTHON_CFLAGS"
AC_TRY_LINK([
#include <Python.h>
],
if test -n "$python_prefix" && test -d "$python_prefix/bin"; then
PYTHON_PATH="$python_prefix/bin:$PATH"
else
PYTHON_PATH="$PATH"
fi
AC_PATH_PROG(PYTHON, python, no, $PYTHON_PATH)
if test "$PYTHON" = "no" ; then
cf_result=no
else
PYTHON_CFLAGS="-I`$PYTHON -c 'from distutils import sysconfig; print sysconfig.get_python_inc()' 2> /dev/null`"
if test -n "$python_prefix" && test -d "$python_prefix/lib"; then
PYTHON_LIBS="-L$python_prefix/lib -lpython"
else
PYTHON_LIBS="-lpython"
fi
LIBS="$PYTHON_LIBS $LIBS"
CFLAGS="$PYTHON_CFLAGS $CFLAGS"
AC_TRY_LINK([#include <Python.h>],
[Py_Initialize();],
cf_result=yes, cf_result=no)
if test "$cf_result" != "yes"; then
EL_RESTORE_FLAGS
else
EL_CONFIG(CONFIG_SCRIPTING_PYTHON, [Python])
CFLAGS="$CFLAGS_X"
AC_SUBST(PYTHON_LIBS)
AC_SUBST(PYTHON_CFLAGS)
fi
fi
fi
if test "$cf_result" != "yes"; then
EL_RESTORE_FLAGS
else
EL_CONFIG(CONFIG_SCRIPTING_PYTHON, [Python])
CFLAGS="$CFLAGS_X"
AC_SUBST(PYTHON_LIBS)
AC_SUBST(PYTHON_CFLAGS)
fi
AC_MSG_CHECKING([for Python])
if test "$cf_result"; then AC_MSG_RESULT($cf_result); fi
@ -947,6 +988,7 @@ fi
AC_MSG_RESULT($cf_result)
CONFIG_GNUTLS_OPENSSL_COMPAT=no
dnl ---- GNU TLS
dnl We can't have AC_MSG_CHECKING here, because AC_PATH_PROG prints its own and
dnl it looks ugly then.
@ -1132,6 +1174,34 @@ EL_ARG_DEPEND(CONFIG_CGI, cgi, [HAVE_SETENV_OR_PUTENV:yes], [Local CGI],
EL_ARG_ENABLE(CONFIG_FINGER, finger, [Finger protocol],
[ --enable-finger enable finger protocol support])
dnl ===================================================================
dnl FSP protocol
dnl ===================================================================
EL_SAVE_FLAGS
if test "x${enable_fsp}" != xno; then
AC_CHECK_HEADERS(fsplib.h, HAVE_FSPLIB=yes, HAVE_FSPLIB=no)
if test "$HAVE_FSPLIB" = yes; then
AC_CHECK_LIB(fsplib, fsp_open_session, HAVE_FSPLIB=yes, HAVE_FSPLIB=no)
if test "$HAVE_FSPLIB" = yes; then
LIBS="$LIBS -lfsplib"
else
AC_CHECK_LIB(fsp, fsp_open_session, HAVE_FSPLIB=yes, HAVE_FSPLIB=no)
if test "$HAVE_FSPLIB" = yes; then
LIBS="$LIBS -lfsp"
fi
fi
fi
fi
EL_ARG_DEPEND(CONFIG_FSP, fsp, [HAVE_FSPLIB:yes], [FSP protocol],
[ --enable-fsp enable FSP protocol support])
if test "x$CONFIG_FSP" = xno; then
EL_RESTORE_FLAGS
fi
EL_ARG_ENABLE(CONFIG_FTP, ftp, [FTP protocol],
[ --disable-ftp disable ftp protocol support])
@ -1201,35 +1271,6 @@ EL_ARG_ENABLE(CONFIG_OWN_LIBC, own-libc, [Own libc stubs],
EL_ARG_ENABLE(CONFIG_SMALL, small, [Small binary],
[ --enable-small reduce binary size as far as possible (but see the bottom of doc/small.txt!)])
if test "$CONFIG_OPENSSL" != yes &&
test "$CONFIG_GNUTLS_OPENSSL_COMPAT" != yes ||
test "$CONFIG_OWN_LIBC" = yes;
then
AC_MSG_CHECKING(for built-in MD5 support)
AC_MSG_RESULT(yes)
EL_CONFIG(CONFIG_MD5, [Built-in MD5])
fi
AC_SUBST(CONFIG_MD5)
if test "$CONFIG_BITTORRENT" = yes; then
if test "$CONFIG_OPENSSL" != yes ||
test "$CONFIG_OWN_LIBC" = yes;
then
AC_MSG_CHECKING(for built-in SHA1 support)
AC_MSG_RESULT(yes)
EL_CONFIG(CONFIG_SHA1, [Built-in SHA1])
fi
fi
AC_SUBST(CONFIG_SHA1)
if test "$CONFIG_CSS" = yes || test "$CONFIG_DOM" = yes;
then
EL_CONFIG(CONFIG_SCANNER, [Built-in scanner])
fi
AC_SUBST(CONFIG_SCANNER)
AC_ARG_ENABLE(weehoofooboomookerchoo,
[
Also check out the features.conf file for more information about features!
@ -1347,10 +1388,13 @@ AC_OUTPUT([ \
abs_srcdir="$(cd "$srcdir" && pwd)"
# builddir is always absolute!
if test "$abs_srcdir" != "$builddir"; then
# Bootstrap the Makefile creation
echo "include $abs_srcdir/Makefile" > "$builddir/Makefile"
"$MAKE" "SRC=$abs_srcdir" init
fi
# Make cg-status ignore this build directory
echo "*" > "$builddir/.gitignore"
fi
dnl ===================================================================
dnl Configuration summary

View File

@ -1,2 +0,0 @@
fspcgi: fspcgi.o
$(CC) -o $@ $< -lfsplib

View File

@ -1,8 +0,0 @@
To use this CGI script you need to build fspcgi and copy the executable
to your cgi directory. In ELinks, you can then use this URL:
file:///"path_to_fspcgi"?host:port/path_to_file_or_directory
You can find more info about the FSP protocol at
http://fsp.sourceforge.net/

View File

@ -1,172 +0,0 @@
/* CGI script for FSP protocol support */
#include <ctype.h>
#include <fsplib.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
char *pname, *query;
struct fq {
char *password;
char *host;
char *path;
unsigned short port;
} data;
static void
error(const char *str)
{
printf("Content-Type: text/plain\r\nConnection: close\r\n\r\n");
puts(str);
printf("%s\n", query);
exit(1);
}
static void
process_directory(FSP_SESSION *ses)
{
char buf[1024];
FSP_DIR *dir;
/* TODO: password */
snprintf(buf, sizeof(buf), "file://%s?%s:%d%s/", pname, data.host,
data.port, data.path);
printf("Content-Type: text/html\r\n\r\n");
printf("<html><head><title>%s</title></head><body>\n", buf);
dir = fsp_opendir(ses, data.path);
if (dir) {
FSP_RDENTRY fentry, *fresult;
while (!fsp_readdir_native(dir, &fentry, &fresult)) {
if (!fresult) break;
printf("<a href=\"%s%s\">%s</a><br>\n", buf, fentry.name, fentry.name);
}
fsp_closedir(dir);
}
puts("</body></html>");
fsp_close_session(ses);
exit(0);
}
static void
process_data(void)
{
FSP_SESSION *ses = fsp_open_session(data.host, data.port, data.password);
struct stat sb;
if (!ses) error("Session initialization failed.");
if (fsp_stat(ses, data.path, &sb)) error("File not found.");
if (S_ISDIR(sb.st_mode)) process_directory(ses);
else { /* regular file */
char buf[4096];
FSP_FILE *file = fsp_fopen(ses, data.path, "r");
int r;
if (!file) error("fsp_fopen error.");
printf("Content-Type: application/octet-stream\r\nContent-Length: %d\r\n"
"Connection: close\r\n\r\n", sb.st_size);
while ((r = fsp_fread(buf, 1, 4096, file)) > 0) fwrite(buf, 1, r, stdout);
fsp_fclose(file);
fsp_close_session(ses);
exit(0);
}
}
static void
process_query(void)
{
char *at = strchr(query, '@');
char *colon;
char *slash;
if (at) {
*at = '\0';
data.password = strdup(query);
query = at + 1;
}
colon = strchr(query, ':');
if (colon) {
*colon = '\0';
data.host = strdup(query);
data.port = atoi(colon + 1);
slash = strchr(colon + 1, '/');
if (slash) {
data.path = strdup(slash);
} else {
data.path = "/";
}
} else {
data.port = 21;
slash = strchr(query, '/');
if (slash) {
*slash = '\0';
data.host = strdup(query);
*slash = '/';
data.path = strdup(slash);
} else {
data.host = strdup(query);
data.path = "/";
}
}
process_data();
}
static inline int
unhx(register unsigned char a)
{
if (isdigit(a)) return a - '0';
if (a >= 'a' && a <= 'f') return a - 'a' + 10;
if (a >= 'A' && a <= 'F') return a - 'A' + 10;
return -1;
}
static void
decode_query(char *src)
{
char *dst = src;
char c;
do {
c = *src++;
if (c == '%') {
int x1 = unhx(*src);
if (x1 >= 0) {
int x2 = unhx(*(src + 1));
if (x2 >= 0) {
x1 = (x1 << 4) + x2;
if (x1 != 0) { /* don't allow %00 */
c = (unsigned char) x1;
src += 2;
}
}
}
} else if (c == '+') {
c = ' ';
}
*dst++ = c;
} while (c != '\0');
}
int
main(int argc, char **argv)
{
char *q = getenv("QUERY_STRING");
if (!q) return 1;
pname = argv[0];
query = strdup(q);
if (!query) return 2;
decode_query(query);
process_query();
return 0;
}

View File

@ -0,0 +1,13 @@
If you want to use Python scripting with ELinks add
--with-python to the configure invocation copy hooks.py to ~/.elinks
When your Python installation is your own build, you could give prefix
to the configure, eg.
--with-python=/usr/local when Python binary is placed in /usr/local/bin, etc.
When 'configure' cannot find -lpython make symbolic link to the appropriate
library, eg.
# cd /usr/local/lib
# ln -s libpython2.4.so.1.0 libpython.so
For the present hooks.py is not very usable. You are welcome to make it better.
Good Luck!

View File

@ -1,10 +1,41 @@
def goto_url_hook(url):
return None
import re
dumbprefixes = {
"7th" : "http://7thguard.net/",
"b" : "http://babelfish.altavista.com/babelfish/tr",
"bz" : "http://bugzilla.elinks.cz",
"bug" : "http://bugzilla.elinks.cz",
"d" : "http://www.dict.org",
"g" : "http://www.google.com/",
"gg" : "http://www.google.com/",
"go" : "http://www.google.com/",
"fm" : "http://www.freshmeat.net/",
"sf" : "http://www.sourceforge.net/",
"dbug" : "http://bugs.debian.org/",
"dpkg" : "http://packages.debian.org/",
"pycur" : "http://www.python.org/doc/current/",
"pydev" : "http://www.python.org/dev/doc/devel/",
"pyhelp" : "http://starship.python.net/crew/theller/pyhelp.cgi",
"pyvault" : "http://www.vex.net/parnassus/",
"e2" : "http://www.everything2.org/",
"sd" : "http://www.slashdot.org/"
}
def goto_url_hook(url, current_url):
global dumbprefixes
if dumbprefixes.has_key(url):
return dumbprefixes[url];
else:
return None
def follow_url_hook(url):
return None
def pre_format_html_hook(url, html):
if re.search("cygwin\.com", url):
html2 = re.sub("<body bgcolor=\"#000000\" color=\"#000000\"", "<body bgcolor=\"#ffffff\" color=\"#000000\"", html)
return html2
return None
def proxy_for_hook(url):

View File

@ -0,0 +1,17 @@
/* Play videos at video.google.com with minimal niggling. Just follow the link
* from the front page or the search page, and the video will automatically
* be loaded. */
function load_google_video(cached, vs) {
if (!cached.uri.match(/^http:\/\/video.google.com\/videoplay/))
return true;
var re = /(<object data="\/googleplayer.swf\?videoUrl=)(.*?)(\&.*?<\/object>)/;
var match = cached.content.match(re);
var url = unescape(match[2]);
var meta = '<meta http-equiv="refresh" content="1; url=' + url + '" />';
cached.content = cached.content.replace(/<head>/, "<head>" + meta);
return true;
}
elinks.preformat_html_hooks.push(load_google_video);

View File

@ -8,9 +8,9 @@ elinks.keymaps.main["@"] = function () {
};
elinks.preformat_html_hooks = new Array();
elinks.preformat_html = function (cached) {
elinks.preformat_html = function (cached, vs) {
for (var i in elinks.preformat_html_hooks)
if (!elinks.preformat_html_hooks[i](cached))
if (!elinks.preformat_html_hooks[i](cached, vs))
return false;
return true;
@ -36,13 +36,13 @@ elinks.follow_url_hook = function (url) {
return url;
};
function root_w00t(cached) {
function root_w00t(cached, vs) {
cached.content = cached.content.replace(/root/g, "w00t");
return true;
};
elinks.preformat_html_hooks.push(root_w00t);
function mangle_deb_bugnumbers(cached) {
function mangle_deb_bugnumbers(cached, vs) {
if (!cached.uri.match(/^[a-z0-9]+:\/\/[a-z0-9A-Z.-]+debian\.org/)
&& !cached.uri.match(/changelog\.Debian/))
return true;
@ -55,7 +55,14 @@ function mangle_deb_bugnumbers(cached) {
/* Debian Policy Manual 4.4 footnote 16 */
var closes_re = /closes:\s*(?:bug)?\#?\s?\d+(?:,\s*(?:bug)?\#?\s?\d+)*/gi;
cached.content = cached.content.replace(closes_re, rewrite_closes_fn);
var new_content = cached.content.replace(closes_re, rewrite_closes_fn);
if (cached.type == 'text/plain') {
cached.content = '<pre>' + new_content + '</pre>';
vs.plain = "0";
} else {
cached.content = new_content;
}
return true;
}

View File

@ -58,7 +58,7 @@ function cvsweb (base, project, url)
/* javascript:gitweb("http://pasky.or.cz/gitweb.cgi", "elinks.git", "%s"); */
function gitweb(base, project, url)
{
var parts = url.match(/^(search|summary|shortlog|log|commit|commitdiff|tree|tag)(\s(.*))?/);
var parts = url.match(/^(search|summary|shortlog|log|blob|commit|commitdiff|history|tree|tag)(\s(.*))?/);
var query = '?p=' + project;
if (parts) {
@ -67,6 +67,8 @@ function gitweb(base, project, url)
/* If the extra arg is not for searching assume it is an ID. */
if (parts[1] == 'search' && parts[3])
query += ';s=' + escape(parts[3]);
else if ((parts[1] == 'blob' || parts[1] == 'history' || parts[1] == 'tree') && parts[3])
query += ';f=' + escape(parts[3]);
else if (parts[3])
query += ';h=' + escape(parts[3]);

15
contrib/vim/c_elinks.vim Normal file
View File

@ -0,0 +1,15 @@
" Setting Vim to support the ELinks coding style
"
" To use this file, drop it in ~/.vim/ftplugin and set filetype plugin on.
" Finally, make sure the path to the source directory contains the word
" 'elinks', for example ~/src/elinks/.
"
" For .h files, link it as cpp_elinks.vim or define c_syntax_for_h in ~/.vimrc.
" For .inc files, let g:filetype_inc = 'c' in ~/.vimrc.
if expand('%:p:h') =~ '.*elinks.*'
setlocal shiftwidth=8
setlocal tabstop=8
setlocal softtabstop=0
setlocal noexpandtab
endif

2
debian/.vimrc vendored
View File

@ -1,2 +0,0 @@
:set runtimepath+=.
:runtime ../.vimrc

View File

@ -1,2 +0,0 @@
:set runtimepath+=.
:runtime ../.vimrc

View File

@ -12,6 +12,9 @@ docdir = $(datadir)/doc
HTML_DIR = $(DESTDIR)$(docdir)/$(PACKAGE)/html
PDF_DIR = $(DESTDIR)$(docdir)/$(PACKAGE)/pdf
ASCIIDOC_CONF = $(srcdir)asciidoc.conf
ASCIIDOC_FLAGS += -f $(ASCIIDOC_CONF) -a "builddir=$(CURDIR)/"
#############################################################################
# Build files
@ -108,11 +111,14 @@ quiet_cmd_help2doc = ' [$(LINK_COLOR)HELP2DOC$(END_COLOR)] $(RELPATH)$@'
cmd_help2doc = $(LOCALES) $(HELP2DOC) $(ELINKS) $@ > $@
quiet_cmd_conf2doc = ' [$(LINK_COLOR)CONF2DOC$(END_COLOR)] $(RELPATH)$@'
cmd_conf2doc = $(LOCALES) $(CONF2DOC) > $@
cmd_conf2doc = $(LOCALES) $(CONF2DOC) $(FEATURES) > $@
quiet_cmd_keys2doc = ' [$(LINK_COLOR)KEYS2DOC$(END_COLOR)] $(RELPATH)$@'
cmd_keys2doc = $(LOCALES) $(KEYS2DOC) $(KBDBIND) $@ > $@
quiet_cmd_code2doc = ' [$(LINK_COLOR)CODE2DOC$(END_COLOR)] $(RELPATH)$@'
cmd_code2doc = $(LOCALES) $(CODE2DOC) $< > $@
features.txt: $(FEATURES) $(CONF2DOC)
$(call cmd,conf2doc)
@ -130,10 +136,10 @@ API = $(shell find $(top_srcdir)/src/ -name '*.h' -exec grep -q 'API Doc' \{\} \
endif
define api_doc
API_TXT += api/$(2).txt
api/$(2).txt: $(1) $(CODE2DOC)
@test -d api || $(MKINSTALLDIRS) api
@$(CODE2DOC) $(1) > $$@
API_TXT += api/$(2).txt
$$(call cmd,code2doc)
endef
api_name = $(shell sed -n 's/.*API Doc\s*::\s*\([^ ]*\).*/\1/p' < $(1))
@ -149,25 +155,27 @@ api: $(patsubst %.txt,%.html,$(API_TXT))
cmd_jw = $(JW) -b $(2) $<
quiet_cmd_xmlto = ' [$(LINK_COLOR)XMLTO$(END_COLOR)] $(RELPATH)$@'
cmd_xmlto = $(XMLTO) $(3) $(2) $<
cmd_xmlto = $(XMLTO) -o $(call outdir) $(3) $(2) $<
quiet_cmd_pod2html = ' [$(LINK_COLOR)POD2HTML$(END_COLOR)] $(RELPATH)$@'
cmd_pod2html = $(POD2HTML) --outfile=$@ < $<
quiet_cmd_asciidoc = ' [$(LINK_COLOR)ASCIIDOC$(END_COLOR)] $(RELPATH)$@'
cmd_asciidoc = $(ASCIIDOC) -f asciidoc.conf -b $(2) -d $(call doctype,$<) -o $@ $<
cmd_asciidoc = $(ASCIIDOC) $(ASCIIDOC_FLAGS) -b $(call backend) -d $(call doctype) -o $@ $<
# Based on filename in $(1) find out asciidoc doctype.
doctype = $(if $(findstring .1.,$(1)),manpage,$(if $(findstring .5.,$(1)),manpage,book))
# Based on $@ find out asciidoc doctype or backend + xmlto output dir.
doctype = $(if $(findstring .1.,$@)$(findstring .5.,$@),manpage,book)
backend = $(if $(findstring .xml,$@),docbook,xhtml11)
outdir = $(if $(findstring -chunked,$@),$@,.)
# Loosely track dependencies via asciidoc includes.
asciidoc_dep = sed -n 's@include::\(.*\)\[.*@$@: \1@p' < $< > .deps/$(@F).asciidoc
asciidoc_dep = sed -n 's/[{]builddir}//g;s@include::\(.*\)\[.*@$@: $< \1@p' < $< > .deps/$(@F).asciidoc
-include .deps/*.asciidoc
# Do a little post-processing of man pages. Inserting title headers and date.
MAN_DATE = $(shell date -I)
man_desc = `sed -n 's/:Description:\s*\(.*\)/\1/p' < $(subst .xml,.txt,$<)`
man_desc = `sed -n 's/:Description:\s*\(.*\)/\1/p' < $(srcdir)$(subst .xml,.txt,$(<F))`
man_hack = sed "s/^\(\.TH \"ELINKS[^\"]*\" [0-9] \).*/\1\"$(1)\" \"$(MAN_DATE)\" \"$(1)\"/" < $@ | \
sed "s/@squote@/\\\\'/g" > $@.tmp && mv $@.tmp $@
@ -175,11 +183,11 @@ man_hack = sed "s/^\(\.TH \"ELINKS[^\"]*\" [0-9] \).*/\1\"$(1)\" \"$(MAN_DATE)\"
#############################################################################
# Build recipies
%.html: %.txt asciidoc.conf
%.html: %.txt $(ASCIIDOC_CONF)
$(call cmd,asciidoc,xhtml11)
@-$(call asciidoc_dep)
%.xml: %.txt asciidoc.conf
%.xml: %.txt $(ASCIIDOC_CONF)
$(call cmd,asciidoc,docbook)
@-$(call asciidoc_dep)
@ -192,7 +200,7 @@ man_hack = sed "s/^\(\.TH \"ELINKS[^\"]*\" [0-9] \).*/\1\"$(1)\" \"$(MAN_DATE)\"
@$(call man_hack,$(call man_desc))
%.html-chunked: %.xml
$(call cmd,xmlto,html,-o $@)
$(call cmd,xmlto,html)
%.pdf: %.xml
$(call cmd,jw,pdf)

View File

@ -57,7 +57,8 @@ in this directory or it's children.
submitting patches etc., thus every aspiring developer should take the
pains to read through it, do not forget to also look for README and similar
text files in the subdirectories containing the relevant sources for
detailed notes regarding given modules/subsystems.
detailed notes regarding given modules/subsystems. Additionally, it is
possible to build API docs. More about this below.
The Lua Scripting Book ...................... lua-scripting.txt
Events Reference Sheet ...................... events.txt
@ -94,7 +95,10 @@ and the following man page formats:
- HTML (asciidoc)
- man / groff (asciidoc + xmlto)
Note: You do not need to build manpages. They are shipped with ELinks.
Note: You do not need to build manpages. They are shipped with ELinks. However,
if you want to have the manpages to match your local configuration and changes
you can rebuild them (this is mostly an issue with elinks.conf(5) which might
otherwise contain options that is not supported by the version you install.
Note: You must first build the ELinks binary for "make all-docs" to work
successfully. The binary is used for getting option documentation.
@ -103,6 +107,43 @@ The documentation can be installed with:
$ make install-doc
Building API documentation
^^^^^^^^^^^^^^^^^^^^^^^^^^
There is some starting effort to make it possible to build HTML documentation
of the APIs presented by the different modules and subsystems in ELinks. To
build API documentation run:
$ make api
in the doc/ directory. The API documentation can then be found in the doc/api/
directory.
NOTE: Currently only few files provides API docs and there is no over-all
structure of the various APIs.
The API toolchain uses a Perl script (doc/tools/code2doc) to extract info from
header files and generate text files with AsciiDoc markup. The text files are
then converted to HTML with AsciiDoc.
To get an idea of how the code markup works take a look at src/dom/stack.h.
It has a small tag saying that it provides API docs for the dom-stack module:
/* API Doc :: dom-stack */
The API doc markup should be pretty straight forward. Here is an example of the
basic structure:
/** <title>
*
* <content>
*/
Only text in comments starting with '/**' are used. If the comment immediately
preceeds a declaration of some struct, enum, typedef, function, or macro, the
name of the declared identifier will be used when creating the output to create
anchors which can be referred to using ref:[].
Contributing
------------

View File

@ -35,7 +35,7 @@ Most options can be set in the user interface or config file, so usually you
do not need to care about them. Note that this list is roughly equivalent to
the output of running ELinks with the option `--long-help`.
include::option-command.txt[]
include::{builddir}option-command.txt[]
ENVIRONMENT VARIABLES
---------------------

View File

@ -56,7 +56,7 @@ Some sample settings:
OPTIONS
-------
include::option-config.txt[]
include::{builddir}option-config.txt[]
SEE ALSO
--------

View File

@ -93,7 +93,7 @@ FIXME:
KEYMAP ACTIONS
--------------
include::keymap-actions.txt[]
include::{builddir}keymap-actions.txt[]
DEFAULT BINDINGS
----------------
@ -101,7 +101,7 @@ DEFAULT BINDINGS
The default bindings are shown below. Any bindings in `~/.elinks/elinks.conf`
will override these.
include::keymap-defaults.txt[]
include::{builddir}keymap-defaults.txt[]
AUTHOR
------

View File

@ -71,6 +71,6 @@ include::small.txt[]
include::ecmascript.txt[]
include::features.txt[]
include::{builddir}features.txt[]
endif::installation-webpage[]

View File

@ -1,2 +0,0 @@
:set runtimepath+=.
:runtime ../../.vimrc

View File

@ -1,2 +0,0 @@
:set runtimepath+=.
:runtime ../../../.vimrc

View File

@ -17,7 +17,7 @@
.el .ne 3
.IP "\\$1" \\$2
..
.TH "ELINKS" 1 "The Elinks text-browser" "2006-01-14" "The Elinks text-browser"
.TH "ELINKS" 1 "The Elinks text-browser" "2006-01-31" "The Elinks text-browser"
.SH NAME
elinks \- lynx-like alternative character mode WWW browser
.SH "SYNOPSIS"
@ -279,7 +279,7 @@ History file containing most recently visited URLs\&.
GoTo URL dialog history file\&.
.TP
~/\&.elinks/hooks\&.{js,lua,pl,py,pl,scm}
~/\&.elinks/hooks\&.{js,lua,pl,py,rb,scm}
Browser scripting hooks\&.
.TP

View File

@ -1,2 +0,0 @@
:set runtimepath+=.
:runtime ../../../.vimrc

View File

@ -17,7 +17,7 @@
.el .ne 3
.IP "\\$1" \\$2
..
.TH "ELINKS.CONF" 5 "ELinks configuration file" "2006-01-14" "ELinks configuration file"
.TH "ELINKS.CONF" 5 "ELinks configuration file" "2006-01-31" "ELinks configuration file"
.SH NAME
elinks.conf \- ELinks configuration file
.SH "SYNOPSIS"
@ -1156,6 +1156,18 @@ Allow blacklisting of buggy peers\&.
protocol\&.file
Options specific to local browsing\&.
.TP
protocol\&.file\&.allow_special_files [0|1] (default: 0)
Whether to allow reading from non\-regular files\&. Note this can be dangerous; reading /dev/urandom or /dev/zero can ruin your day!
.TP
protocol\&.file\&.show_hidden_files [0|1] (default: 1)
When set to false, files with name starting with a dot will be hidden in local directories listing\&.
.TP
protocol\&.file\&.try_encoding_extensions [0|1] (default: 1)
When set, if we can't open a file named 'filename', we'll try to open 'filename' with some encoding extension appended (ie\&. 'filename\&.gz'); it depends on the supported encodings\&.
.TP
protocol\&.file\&.cgi
Local CGI specific options\&.
@ -1169,16 +1181,12 @@ protocol\&.file\&.cgi\&.policy [0|1] (default: 0)
Whether to execute local CGI scripts\&.
.TP
protocol\&.file\&.allow_special_files [0|1] (default: 0)
Whether to allow reading from non\-regular files\&. Note this can be dangerous; reading /dev/urandom or /dev/zero can ruin your day!
protocol\&.fsp
FSP specific options\&.
.TP
protocol\&.file\&.show_hidden_files [0|1] (default: 1)
When set to false, files with name starting with a dot will be hidden in local directories listing\&.
.TP
protocol\&.file\&.try_encoding_extensions [0|1] (default: 1)
When set, if we can't open a file named 'filename', we'll try to open 'filename' with some encoding extension appended (ie\&. 'filename\&.gz'); it depends on the supported encodings\&.
protocol\&.fsp\&.sort [0|1] (default: 1)
Whether to sort entries in directory listings\&.
.TP
protocol\&.ftp

View File

@ -14,7 +14,7 @@ command-line arguments. The built-in documentation is sure to be up-to-date.
There was a complete (or, for the most part complete) manual for Links 0.82 at
one time, and you can still find it at:
http://links.sourceforge.net/docs/manual-0.82-en/index.html
- http://links.sourceforge.net/docs/manual-0.82-en/index.html[]
While large parts of it do not apply anymore, you may still find some relevant
information there.

View File

@ -1,2 +0,0 @@
:set runtimepath+=.
:runtime ../../.vimrc

View File

@ -21,14 +21,12 @@ usage($HELP) if $opt_h or @ARGV < 1;
sub put_section {
if ($title) {
print "\n$title\n";
$_ = $title;
s/[^-]/-/g;
print "$_\n" if not $indent;
$title =~ s/[^-]/-/g;
print "$title\n" if not $indent;
}
if ($body) {
$_ = $body;
s/#newline#/$indent/g;
print "$_\n";
$body =~ s/#newline#/$indent/g;
print "$body\n";
}
$title = $body = undef;
}

View File

@ -4,6 +4,7 @@
# Copyright (c) Jonas Fonseca <fonseca@diku.dk>, 2005
#
CONFFILE="$1"
TMPFILE=$(mktemp import-features.conf.XXXXXX) || exit 1
strip_comment()
@ -53,7 +54,7 @@ __END__
fi
}
cat ../features.conf | while read line; do
cat "$CONFFILE" | while read line; do
case "$line" in
"### "*)
print_section

View File

@ -297,6 +297,21 @@ CONFIG_DATA=yes
CONFIG_FINGER=no
### File Service Protocol
#
# File Service Protocol (FSP) is a very lightweight UDP based protocol for
# transferring files. FSP has many benefits over FTP, mainly for running
# anonymous archives. FSP protocol is valuable in all kinds of environments
# because it is one of the only TCP/IP protocols that is not aggressive about
# bandwidth, while still being sufficiently fault tolerant.
#
# FSP is what anonymous FTP *should* be!
#
# See http://fsp.sourceforge.net/ for more info.
#
# Default: disabled
CONFIG_FSP=no
### File Transfer Protocol Support
#

View File

@ -1,2 +0,0 @@
:set runtimepath+=.
:runtime ../.vimrc

238
po/fr.po
View File

@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ELinks 0.12.GIT\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2006-01-10 23:00+0100\n"
"PO-Revision-Date: 2006-01-10 23:01+0100\n"
"POT-Creation-Date: 2006-01-30 23:26+0100\n"
"PO-Revision-Date: 2006-01-30 23:28+0100\n"
"Last-Translator: Laurent Monin <zas@norz.org>\n"
"Language-Team: French <zas@norz.org>\n"
"MIME-Version: 1.0\n"
@ -33,7 +33,7 @@ msgstr "Pressez espace pour d
#: src/bfu/msgbox.c:189 src/config/dialogs.c:57 src/config/dialogs.c:391
#: src/cookies/dialogs.c:354 src/dialogs/edit.c:97 src/dialogs/info.c:133
#: src/dialogs/options.c:210 src/dialogs/options.c:290 src/mime/dialogs.c:129
#: src/protocol/auth/dialogs.c:110 src/protocol/protocol.c:231
#: src/protocol/auth/dialogs.c:110 src/protocol/protocol.c:234
#: src/scripting/lua/core.c:377 src/scripting/lua/core.c:457
#: src/session/session.c:792 src/viewer/text/search.c:1593
msgid "~OK"
@ -187,7 +187,7 @@ msgid "Digital clock in the status bar."
msgstr "Horloge digitale dans la barre de status."
#: src/bfu/leds.c:77 src/bfu/leds.c:94 src/config/options.inc:1118
#: src/config/options.inc:1125 src/ecmascript/ecmascript.c:39
#: src/config/options.inc:1125 src/ecmascript/ecmascript.c:41
#: src/globhist/globhist.c:63 src/mime/backend/mailcap.c:93
#: src/mime/backend/mimetypes.c:52 src/network/ssl/ssl.c:80
msgid "Enable"
@ -1796,7 +1796,7 @@ msgid "Description"
msgstr "Description"
#: src/config/dialogs.c:320 src/protocol/bittorrent/dialogs.c:594
#: src/protocol/protocol.c:225 src/session/session.c:282