[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
lynx-dev have big patch
From: |
Klaus Weide |
Subject: |
lynx-dev have big patch |
Date: |
Thu, 3 Jun 1999 05:13:57 -0500 (CDT) |
Hello all,
I have been offline for some time (and, as you can see, have yet
another email address now). During this time I have continueed
tweaking lynx, resulting in lots of small and some bigger changes.
I realize this is about the worst possible moment for this, right when
2.8.2 is supposed to be done. (I may not have the right picture
right now how much "done" it is supposed to be, since I haven't
followed all the list mail.) But before 2.8.2 is released, please
consider whether these changes should be integrated. No doubt this
would delay release, and I understand if you decide to not include
any of this stuff. OTOH there are a lot of small and not-so-small
fixes; if it were up to me (which it isn't), I wouldn't want to
release 2.8.2 without them.
In that category there is particularly the breakdown of -restrictions
logic that has occurred; various other restriction issues (including
fixing, I hope, a hole where restrictions could be circumvented using
a specific kind of form field); changes to the mouse code (it's there,
and people are going to compile with it and run lynx in an xterm; so
it shouldn't be as broken as it was); and removing some crash
opportunities with unusual proxy_foo specifications. Unfortunately
I have not separated these from other changes.
There are also some things that could be called "new features", the
biggest ones are the keycode extensions, a new Lineedit Binding,
RULE extensions. IMO, none of them are as intrusive as other new
features added recently, like source caching or pretty-source (they
don't change the flow of control and of bytes for requests, and don't
add new alternative flow-of-control sequences that need to be considered).
The keycode extensions are in part needed (or at least very helpful)
in resolving line-editing limitations (including the IMO still open
question how EDIT for textareas and similar should be handled), as well
as some of the mouse-related stuff. The RULE additions don't affect
most users, are not compiled in if NO_RULES is defined, and make the
RULE stuff more useful for those who want to use it (or in some cases -
for those who use proxies - useful for the first time).
Appended is my current CHANGES log for the modifications, not yet
cleaned up. Changes are against 2.8.2pre.2, there are some minor
duplications of small things that are also in the pre.<latest> (at
least HISTORY position, a trace flush), and I would have to merge with
pre.<latest>. I haven't uploaded this anywhere, waiting for a response.
----------------------------------------------
* Key handling changes:
- Extended lynxkeycodes: a bit flag is used to indicate that the
lower bits of the value already are a lynxactioncode and need no
be looked up again. Reduces need for back and forth forward and
reverse binding lookups; currently only used in some places.
- Extended lynxkeycodes: several (currently three) bit flags are used
to indicate key modifiers.
- Added some macros for manipulating and mapping of these codes,
see especially LYKeymap.h, LKC_TO_LAC() etc. Added some comments
about the various kinds of codes.
- Added several editaction codes and flags for setting key modifier
on next key (i.e. for declaring keys as prefix keys, for the purposes
of line editing); for flagging a key for different action if same key
is repeated; for exiting input field line editing and passing a
specific lynxactioncode on; and for undoing 8-bit C1 -> 7-bit
replacement transformation for some chars. Added code to line-editor
implementation to react to these new editactions.
Note that the mapping of lynxkeycode to lynxactioncode outside of
line editing, i.e. KEYMAP in lynx.cfg etc., ignores the modifiers.
The main loop just drops modifier flags or ignores the modified key;
modifier flags cannot be used in lynx.cfg KEYMAP 'keystroke' values.
- An ESC not recognized as part of an escape sequence can set the
appropriate modifier flag in LYgetch(), except for SLANG which
normally uses a different LYgetch() implementation. Interpreting
an ESC prefix as modifier is very useful for situations where a
held-down Alt key (or some other key) is encoded this way: linux
console, kermit with emacs key mappings, possibly xterm with
'*eightBitInput: false'. OTOH it doesn't work for all characters
or in all situations.
- New "Bash-like" Line Editor binding. Adds several new emacs-like
editing functions. Adds tables for keys with modifiers (actually
the same table is currently used for all modifiers, to save some
space). Most notably, ^X is a prefix key to set a modifier flag.
Keys with second function when pressed twice are ^E^E and ^K^K.
ESC is also recognized as setting a modifier flag, in case it
gets through without been having been handled in LYgetch().
See new file keystrokes/bashlike_edit_help.html for more info.
The Bash-like Line Editor Bindings are only compiled in if compiled
with -DEXP_ALT_BINDINGS / configured with --enable-alt-bindings
(but not subject to a new macro). Implementation code for the new
emacs-like functions additionally ifdef'd with ENHANCED_LINEEDIT.
- Avoid dependency on DNARROW key binding when form field line-editing
is ended with Enter or Return key.
- Take setting of real_c/old_c into consideration after return from
form field line-editing. Previously there were some strange effects:
statusline messages would sometimes not appear when they should,
the KEYMAP command would sometimes not work when invoked with ^Vk
while in a form field.
- Make NOCACHE ('x') work for TEXT_SUBMIT_TYPE form fields (i.e. forms
with a single text input field where Enter automatically submits).
Of course 'x' has to be typed as ^Vx while line-editing the field
(or NOCACHE mapped to a different key). Similarly allow DOWNLOAD,
and HEAD to work for such fields. Try to ensure that all permission
checks that apply to other form submissions are also done for
TEXT_SUBMIT_TYPE fields, this wasn't the case before.
- New key actions LPOS_PREV_LINK and LPOS_NEXT_LINK. They are like
PREV_LINK and NEXT_LINK, with the difference that, when moving to
a form input or textarea line, the last column position (relative
to the field) is remembered. They are not mapped by default, but
mentioned in lynx.cfg.
- New key action DWIMHELP. It should give some context-sensitive
help. Currentely the appropriate Line Editor Binding help page
is shown if a form input field is selected, otherwise it defaults
to the main HELP page.
- New key action DWIMEDIT. Revert meaning of EDIT back to previous
meaning: always edit document file, not textarea content. DWIMEDIT
acts like EDITTEXTAREA if the current link is a form textarea or
input field and AUTOEXTEDIT was defined, and like EDIT otherwise.
Also added slightly different statusline message if form field
external editiong cannot be done because editing is disabled:
it shouldn't refer to "The 'e'dit command".
- More appropriate message statusline message if GROWTEXTAREA or
INSERTFILE cannot be done because a textarea is not selected:
it shouldn't refer to "external editor".
- Check whether an editor is defined before trying to use it for
textarea editing. Generate message if spawning of external textarea
editor failed.
Summary of reasonable ways to invoke external texarea editing
(assuming that it is desired to keep the action of 'e' to edit
files at least outside of input fields):
1) KEYMAP 'e' to DWIMEDIT, invoke ^Ve. (if AUTOEXTEDIT is defined,
which is the case by default.)
[ 1a) KEYMAP <some other key> to DWIMEDIT, invoke ^V<some other key>. ]
1b) KEYMAP <some other key> to EDITTEXTAREA, invoke ^V<some other key>.
1c) Find some key whose LineEdit binding is LYE_FORM_PASS, KEYMAP it to
EDITTEXTAREA or DWIMEDIT.
2) compile with EXP_ALT_BINDINGS defined (--enable-alt-bindings),
select Bash-like Bindings,
invoke ^E^E or ^X^E (or ESC ^E aka M-C-e), or
invoke ^Xe (or ESC e aka M-e), or
2a) compile with EXP_ALT_BINDINGS defined (--enable-alt-bindings),
(invoke ESC ^E aka M-C-e or ESC e aka M-e if not slang).
* Other changes related to textarea handling:
* Mouse handling changes, mostly only if mouse support comes via ncurses:
- Re-enabled changing link by clicking in area *near* a link
(but not on the link text), but limit max. distance to 2
character positions.
- Make mouse popup menu dispappear when it should, by applying
the right magic touchline() in popup_choice().
- Lots of small tweaks to remove glitches in mouse handling, among
them: No left scrolling of long input fields on entering with mouse.
Try to ensure statusline is updated after mouse menu. Make menu
actions work as expected. Avoid acting on mouse events, especially
invoking mouse menu, in wrong context (e.g. while at a prompt), at
least in many places.
- Clicking on left or right border of mouse menu now only moves
selection.
- At right end of top/bottom line, where single click causes HISTORY
action, double click now causes VLINKS action.
- Allow to distinguish between submitting and just positioning into a
TEXT_SUBMIT_TYPE input field. Single click positions, double click
submits, 'activate' from menu also submits.
- When initializing ncurses mouse, call mousemask() with only those
bits set that we may actually be interested in.
* Changes relevant for handling window size changes:
- For ncurses, changed the way how mainlop() notifies the curses library
about a window size change. The approach taken previously, and still
used if we are not using ncurses, has more overhead, can unnecessarily
switch out of the alternative screen buffer (and back) under xterm, and
didn't really make ncurses update the WINDOW structures for the new size
in time.
- Other tweaks for size change: make sure curdoc.link is valid after
refresh.
- Detection of size changes in more situations: tolerate EOF from GetChar
in the (non-SLANG) LYgetch_for() in more cases if errno is EINTR, if this
happens check for a size change and generate trace output. Recognize
KEY_RESIZE from ncurses, check for a size change and generate trace
output when it occurs.
- Added NONRESTARTING_SIGWINCH lynx.cfg option and -nonrestarting_sigwinch
flag. If set, lynx *may* react more immediately to window size changes
when running under xterm or similar. Whether this actually has an effect
depends on the implementation of sigaction() and on the behavior of
the curses (or similar) library when a read() (or other system call)
is interrupted by signals.
Depends on '#if HAVE_SIGACTION', which currently has to be defined by
hand, for example by 'make SITE_DEFS="-DHAVE_SIGACTION"'. The command
line flag is only available on systems with HAVE_SIGACTION and SIGWINCH.
@@@ man page (,...)
- Tweaks so that lynx in an xterm can survive when the window size is made
(probably temporarily) very small, for example 1x1. Avoid display_page's
work if it wouldn't be displayable anyway. Make display_title handle
very small screen widths, at least to the degree that it doesn't crash.
* Except for VMS or when DOSPATH is defined, restore_sigpipe_for_children
(Debian bug #???)
* Changes in HTTCP.c:
- Added a CTRACE_FLUSH before creation of NSL_FORK child process.
- Block certain signals during creation of NSL_FORK child process,
if sigprocmask() and friends are available. This should prevent
a rare problem where sometimes the child process could be killed
before it has a chance to modify its signal handlers, resulting
in screen corruption, a seemingly hanging lynx, and/or other
problems. It is assumed that sigprocmask() etc. are available if
HAVE_SIGACTION is true. It currently has to be defined by hand,
for example by 'make SITE_LYDEFS="-DHAVE_SIGACTION"'.
- Generate diagnostic messages for some failures of forked lookup.
Depends on HAVE_H_ERRNO. In particular, try to detect whether
the child process failed because of memory problems, and also
fake a 'z' in that case to short-circuit a URL guessing cycle.
- For most systems, generate more trace output for connection attempts,
close to the actual connect() and select() calls to prevent clobbering
errno. See SOCKET_DEBUG_TRACE. This should help diagnose some obscure
system-dependent problems that have occasionally been reported.
* Added some missing stuff for color handling to forms Option Menu code.
* Printing to screen sometimes didn't show anything for short texts,
if screen output was buffered (and ncurses makes stdout buffered).
Added another fflush(stdout) in send_file_to_screen().
* Some checks for specific URLs (helpfilepath, lynxlistfile, and
lynxjumpfile) in LYGetFile.c were inappropriately case-insensitive for
Unix. The comparison is now case-sensitive except for VMS. This may
need tweaking for DOS and similar systems.
* Added additional LYNoRefererForThis check in getfile(), the one in
mainloop() could be missed for TEXT_SUBMIT_TYPE form fields. Also
moved other check for whether to send Referer header earlier, and
made it apply for URL types that might be proxied.
* LYAddVisitedLink tried to regard documents with the same address but
a different title string as different documents, but this was coded
wrong. Removed ineffective comparison, but keep old title string
if new title string is empty.
* Correct long-standing logic error in MAIL_SYSTEM_ERROR_LOGGING handling.
Apparently not many people are using it...
* Fix for traversal code to put the right address into the
TRAVERSE_REJECT_FILE if a request fails after popping a document from
the history stack (this can only occur if a previous request for the
same document had succeeded). Also don't try to send mail in such
a case if MAIL_SYSTEM_ERROR_LOGGING is on. Also prevent possible
history stack underflow if this occurs on return to the first
document.
* According to lynx.cfg, error logging mail may be sent to ALERTMAIL
if no document owner is known, but this was not implemented; now
it is. ALERTMAIL is used if it is defined non-empty in userdefs.h.
Of course normally it should be left empty.
* Fix for traversal code to reject form fields a bit earlier. This
prevents unnecessary lookups as well as adding of an empty line to
the TRAVERSE_REJECT_FILE for each form field encountered.
* Format -crawl output as was documented in CRAWL.announce: with this
switch, link numbering is always off by default (userdefs.h and
lynx.cfg defaults und saved user preference are ignored) unless
-number_links is given, and -crawl -traversal format is now consistent
with -crawl -dump with respect to link numbering. As a side effect,
-crawl without either -traversal or -dump now also turns link numbering
off unless -number_links is used (the meaning of -crawl without either
of these was undocumented), so it then acts effectively as a (less
powerful) negation of the -number_links switch.
* For -crawl -dump, the list of links was appended twice. Fixed.
* Tweak to position on first history entry, skipping the LYNXMESSAGES:/
link, when history list is shown in response to HISTORY command.
* Check URL as well as title before deciding that a document should
not be pushed on the history stack because it looks like a generated
special page.
* Made "Don't waste the cache" optimization in historytarget() subject
to additional checks, to avoid uncaching of the wrong document in some
cases.
* LYSafeGets() would drop the last line from a file if it was not
terminated. Changed to return the unterminated line like fgets().
* Clarifications on restrictions. "download" does not imply
"disk_save" while "print" does, this doesn't seem to make much sense
but has been the behavior for a long time.
* Restrictions inside_news, outside_news now apply to reading as well
as posting. The documentation (except for the corresponding comments
in userdefs.h) said that they apply to posting, while in fact they were
implemented for reading only. [Does nobody read this stuff???]
Also, the implementation only checked the flag for news: URLs, but not
for nntp: URLs, which doesn't make much sense given that the latter
provide an alternative way for most (if not all) purposes of the first.
So now these restrictions apply to news:, nntp:, newspost:, and
newsreply: (but not to snews:, snewspost:, or snewsreply:).
* Document -restriction=externals.
* Some of the restriction stuff not added to VMS lynx.hlp file, since
I'm not quite sure whether the corresponding features work there at
all.
* Changed restriction parsing so that "all" and "default" don't get
ignored if they appear as one of several items in the same list.
* Implement listing of current restrictions to stdout with new
-restrictions=? option. This should appear as the last command line
option, otherwise the effect of options appearing later may not be
shown. The '?' may require quoting.
* Made -restrictions= (without any option flags) act like -restrictions
(without equal sign either) as implied by documentation, i.e. list
recognized restriction options.
* LYRestriced has been greatly abused. Once upon a time it was a PRIVATE
flag in LYMain.c (then called anon_restrictions_set), used only to
get the precedence of various command line options right. Recently
it has been misused as a check (and as the only one) whether "anonymous
restrictions" are in effect. This undermines various assumptions:
- that -anonymous is merely an aggregate set of restrictions which
could be specified individually with -restrictions=.
- that individually listed restrictions (-restrictions=...) act as
expected, and can be used to restrict various aspects in a useful
manner.
- that -validate implies the strongest restrictions, except what is
explicitly exempted (i.e. 'g'oto for http/https URLs).
Use specific restrictions instead:
- new "compileopts_info" for LYNXCOMPILEOPTS: - for anonymous default see
userdefs.h
- new "lynxcfg_info" for LYNXCFG: - for anonymous default see userdefs.h
- new "lynxcfg_xinfo" for extended LYNXCFG: - for anonymous default see
userdefs.h
- new invisible "goto_configinfo" for LYNXCOMPILEOPTS: & LYNXCFG: for
anonymous default, see userdefs.h
- addtl. existing "option_save" for LYNXCFG://reload/ - always restricted by
anonymous default
* Forms options menu can now be used with -validate.
* Allow following local help file links, even if "file_url" restriction
is set, from LYNXKEYMAP, LYNXCOOKIES. (more to add?)
* Apparently realm checking (with -realm option) is bypassed for URLs
from (some) form submissions (it seems to be intentional, but why?).
Made sure this at least doesn't weaken -validate restrictions.
* Apply -localhost check in getfile for news URLs that include a hostname,
i.e. that begin with with "news://".
* Add '&' to nonalphanumeric characters forbidden by exec_ok() for lynxexec
and lynxprog URLs, but keep allowing it for lynxcgi. There's not much
point in excluding ';' and so on if '&' is acceptable!
* Tweaked LYNXMESSAGES: handling slightly: don't bypass normal getfile
handling.
* Reset LYforce_no_cache flag in mainloop() after failed access, before
popping the previous (or, actually, probably currently still displayed)
document.
* Tweak for 'no data' handling: it isn't always an error, but was sometimes
treated as such. It mostly doesn't make a difference, except for the
message printed when the startfile cannot be accessed and for traversal
and mail error logging. This needs to be revised to apply for all
protocols.
* Added new functionality for rules: Redirect, UseProxy. See cernrules.txt
in samples directory for details.
* Prevent crashes in HTNews.c with HEAD.
* Allow HEAD requests for proxied URLs (checking whether any applicable
proxy begins with http: or lynxcgi:), as far as this can be determined
based on regular environment settings (i.e. unaware of proxying by
rules).
* Modified add_item_to_list() so that if the restriction flag is omitted
from a DOWNLOADER/UPLOADER/EXTERNAL line in lynx.cfg, it is assumed
FALSE. This modifies the change of 1998-10-17 to be on the safer side,
it is more consistent with how PRINTER lines or lines with the colon
separator present but the flag value absent are handled, and it only
makes a difference when a -restriction command line option or its
equivalent is in effect anyway.
* Deal with unusual cases where telnet and similar protocols are proxied,
or possibly changed to a different type of protocol by rules. Normally
such protocols should never be proxied, but there was no protection
against it, and lynx could crash. The approach now taken does not
disallow it, but just tries to deal with the situation in a way that
avoids crashing; it is conceivable that one may want to direct e.g.
telnet or rlogin URLs to a HTTP page that explains why theses types
are not supported. A similar problem that occured when e.g. telnet
was forbidden by a rule is also dealt with.
* Protect start_curses calls in getfile against being executed if
dump_output_immediately is in effect. Maybe access to telnet, rlogin,
lynxexec URLs should be completely disabled for this case; skipping
the start_curses at least avoids being left with non-restored tty
settings after the program exits, is someone attempts to use -dump
or -source with such a URL (the -dump or -source flags is then
effectively more or less ignored).
* Tweaks in fix_http_urls, renamed fix_httplike_urls.
* Moved LYStrerror from LYStrings.{h,c} to HTAlert.{h,c}, so that it can
be used in HT*.c files without pulling in yet more LY*.h headers.
* Reset 'safe' flag in anchor on parsing "Safe: no" and "Safe: false"
headers.
* The top makefile.in had some 'rm -rf' for whole directories $(helpdir)
and $(docdir) in install targets that could potentially wipe out
unrelated files; added checks to make sure the directories haven't
been changed to something not lynx-specific (they are regarded as
lynx-specific if the last component is lynx_help and lynx_doc,
respectively).
* Updated README.defines. Other contributors should please add their
stuff there, too.
- lynx-dev have big patch,
Klaus Weide <=