lynx-dev
[Top][All Lists]
Advanced

[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.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]