Hi'all,

The next version (15) of my tab/frame/keyboard navigation patch is
ready (see bottom of this message for download instructions). 

This release incorporates a number of bug fixes to keyboard
navigation, in response to feedback on the list. It also fixes several
other bugs (see non-exhaustive list further down). And, last but not
least, there are several new features: keywords, use of location bar
for search, local document handling on location bar, user configurable
'_blank' target, repeated search, many more configurable key bindings,
etc...

   /* ATTENTION */
   This is the first release *without the conditional compile options*
   for tabs and frames. Tabs, frames and keyboard navigation are
   standard now, and there is no provision to compile Dillo without
   support for these features.

This is a BIG patch, with many changes. Please test it, and tell me
(through the list) about any problems.

New features
------------

 - keywords

   Keywords can be used to access sites and locations with short
   commands in the location bar (and elsewhere). They are defined in
   the dillorc as a space-separated list of keyword:url pairs:

      keywords = ": : ..."

      %s is in url is replaced by (escaped) location bar contents

   Example:

   (in dillorc)  keywords="s:http://www.google.com/search?q=%s"

   "s dillo patch" in the location bar will execute a search on google
   for the words 'dillo patch'.

   There is one default keyword, "search". This corresponds to the
   search_url preference. The web search feature has been changed to
   use the new code.

   Keywords currently work in the location bar, in the "open url"
   window and *from the command line*. This way you can search the web
   from the command line:

      dillo "search whatever you want to search for" (enter)

   [ programming info ]
   To add keyword processing to a url, you need to make an explicit
   call to a_Url_string_process_keywords(gchar *str). I explicitly
   did NOT add the keyword processing code to the default url code
   path, so keywords can not be initiated through external
   links. Better safe than sorry...

 - local file handling in the location bar: type a valid absolute path
   in the location bar and it will be transformed into a valid file:
   url.

   [ programming info ]
   To add local path processing to a url, you need to make an explicit
   call to a_Url_string_process_local(gchar *str, gboolean relative)
   Set relative to TRUE to include relative path processing (from the
   current directory) to the code path.

 - location bar search using keywords and/or with popup_dialogs=NO.
   If you have popup_dialogs=NO in dillorc, pressing the search button
   on the toolbar or using the search key combination (ALT-s) will
   search the web for whatever you typed in the location bar (if you
   have entered search terms) or focus the location bar with the
   search keyword set. In the latter case just add search terms and
   press enter to search.

 - location bar contents are selected when it is focused, deselected
   when the content area is focused.

 - the contents of the findtext and websearch entries are selected
   when they are re-opened. Type a new search term to replace the old
   term. Use the cursor keys to deselect the contents when you want to
   add to the existing search term.

 - the splash screen no longer lives in the binary (as suggested by
   Indan Zupancic). It is installed by the makefile and should be
   distributed with dillo. The default location is in the
   'sharedstate' directory (default /usr/share/dillo/dillo.html).
   There is a preference for those who want to change this:

     splash = NO | 

   This takes any url. Set it to NO to suppress the splash screen
   alltogether (you will still be able to get to the splash screen by
   visiting about:splash). The default value is defined in prefs.h:

     #define DILLO_SPLASH "file:/usr/share/dillo/dillo.html"

 - There is a new preference for control of the "_blank" tag and
   handling of new windows in general (as suggested by Andreas
   Schweitzer):

     target_blank = SELF | TAB | [WINDOW]

   Set this to "self" to disable the "_blank" target (no more new
   windows popping up all around). The other two settings are
   self-explanatory I guess... This also works for documents opened
   using the middle mouse button, and documents opened on the command
   line. For the latter the "self" setting is ignored (it defaults to
   new windows in that case).

 - Repeated search by pressing CTRL-g at any time. Unhiglight search
   by pressing Escape. If search resulted in a highlighted link, this
   will be unhighlighted as well (to follow that link, press Enter
   instead of Escape).

 - many more configurable key bindings. To avoid overloading the
   scrolled_frame with content-related signals I added a general
   'content_command' signal, which gets passed one parameter of type
   DilloCommand (defined in commands.h). To adjust a keybinding for a
   command, set a key for the signal 'content_command' for the widget
   named 'dillo-content' (or for the class GtkDwScrolledFrame). As an
   example the following binding sets the 'F3' key for the 'repeat
   find' command (like it does in Mozilla):

   key_bindings =
   "binding 'mozilla-keys' {
      bind 'F3' { 'content_command' (9) }
      ... (add more bindings if needed) ...
   }
   widget '*dillo-content' binding 'mozilla-keys'"

   There are currently 30 available commands:

    DILLO_COMMAND_NAVIGATE_BACK,               /*  0 */
    DILLO_COMMAND_NAVIGATE_FORWARD,            /*  1 */
    DILLO_COMMAND_NAVIGATE_RELOAD,             /*  2 */
    DILLO_COMMAND_NAVIGATE_STOP,               /*  3 */
    DILLO_COMMAND_NAVIGATE_HOME,               /*  4 */
    DILLO_COMMAND_DUPLICATE_WINDOW,            /*  5 */
    DILLO_COMMAND_DUPLICATE_TAB,               /*  6 */
    DILLO_COMMAND_FINDTEXT,                    /*  7 */
    DILLO_COMMAND_FINDTEXT_INCREMENTAL,        /*  8 */
    DILLO_COMMAND_FINDTEXT_REPEAT_LAST_SEARCH, /*  9 */
    DILLO_COMMAND_FINDTEXT_UNHIGHLIGHT,        /* 10 */
    DILLO_COMMAND_SAVE,                        /* 11 */
    DILLO_COMMAND_SAVE_LINK,                   /* 12 */
    DILLO_COMMAND_BOOKMARK,                    /* 13 */
    DILLO_COMMAND_NEW_WINDOW,                  /* 14 */
    DILLO_COMMAND_NEW_TAB,                     /* 15 */
    DILLO_COMMAND_OPEN_FILE,                   /* 16 */
    DILLO_COMMAND_OPEN_URL,                    /* 17 */
    DILLO_COMMAND_OPEN_LINK,                   /* 18 */
    DILLO_COMMAND_OPEN_LINK_NEW_WINDOW,        /* 19 */
    DILLO_COMMAND_OPEN_LINK_NEW_TAB,           /* 20 */
    DILLO_COMMAND_CLOSE_WINDOW,                /* 21 */
    DILLO_COMMAND_CLOSE_TAB,                   /* 22 */
    DILLO_COMMAND_EXIT,                        /* 23 */
    DILLO_COMMAND_TAB_PREVIOUS,                /* 24 */
    DILLO_COMMAND_TAB_NEXT,                    /* 25 */
    DILLO_COMMAND_VIEW_SOURCE,                 /* 26 */
    DILLO_COMMAND_VIEW_BOOKMARKS,              /* 27 */
    DILLO_COMMAND_FOCUS_LOCATION,              /* 28 */
    DILLO_COMMAND_WEBSEARCH,                   /* 29 */
    DILLO_COMMAND_TOGGLE_FULLWINDOW            /* 30 */
    DILLO_COMMAND_FOCUS_ACTIVATE,              /* 31 */
    DILLO_COMMAND_FOCUS_ACTIVATE_NEW_WINDOW,   /* 32 */
    DILLO_COMMAND_FOCUS_ACTIVATE_NEW_TAB,      /* 33 */
    DILLO_COMMAND_FOCUS_POPUP,                 /* 34 */
    DILLO_COMMAND_FOCUS_HIDE,                  /* 35 */
    DILLO_COMMAND_FOCUS_MOVE_UP,               /* 36 */
    DILLO_COMMAND_FOCUS_MOVE_DOWN,             /* 37 */
    DILLO_COMMAND_FOCUS_MOVE_LEFT,             /* 38 */
    DILLO_COMMAND_FOCUS_MOVE_RIGHT,            /* 39 */
    DILLO_COMMAND_FOCUS_MOVE_TAB_BACK,         /* 40 */
    DILLO_COMMAND_FOCUS_MOVE_TAB_FORWARD,      /* 41 */
    DILLO_COMMAND_SCROLL_UP,                   /* 42 */
    DILLO_COMMAND_SCROLL_DOWN,                 /* 43 */
    DILLO_COMMAND_SCROLL_LEFT,                 /* 44 */
    DILLO_COMMAND_SCROLL_RIGHT,                /* 45 */
    DILLO_COMMAND_SCROLL_PAGE_UP,              /* 46 */
    DILLO_COMMAND_SCROLL_PAGE_DOWN,            /* 47 */
    DILLO_COMMAND_SCROLL_PAGE_LEFT,            /* 48 */
    DILLO_COMMAND_SCROLL_PAGE_RIGHT,           /* 49 */
    DILLO_COMMAND_SCROLL_EDGE_TOP,             /* 50 */
    DILLO_COMMAND_SCROLL_EDGE_BOTTOM,          /* 51 */
    DILLO_COMMAND_SCROLL_EDGE_LEFT,            /* 52 */
    DILLO_COMMAND_SCROLL_EDGE_RIGHT            /* 53 */

   If you'd like to see any other commands, tell me or the list!

   [programming info]
   To add a new command, simply add the name to the DilloCommand enum,
   add a handler to a_Commands_handler() and, optionally, add a
   default key binding to a_Commands_init().
   The commands.[ch] files are in a bit of a state of flux, as many
   commands are currently present in two forms: one with a *dd
   interface, the other (older) with a *bw interface. Where
   appropriate the older (*bw) versions can and will be removed

 - the View Source window can now be closed by pressing Escape. View
   source is (over)due for an overhaul by the way. I might implement
   the view-source protocol in one of the next patches.

 - Tab movement is now cyclic, thanks to a patch by Stephan Goetter

 - the Frame context menu now has navigation controls (as suggested by
   Stephan Goetter), so it is possible to go back in the frame
   history. The main history is not yet synchronised with frame
   actions. [LIST: Is this necessary? Should the 'back' button and
   menu remember actions inside nested frames or should it do what it
   does now, remember actions in the top-level document?]

 - Keyboard navigation can be used to popup context menus, as
   suggested by Melvin Hadasht. The default binding for context menu
   is Alt-Enter (and Alt-KP_Enter). The related DILLO_COMMAND is
   DILLO_COMMAND_FOCUS_POPUP.

Fixed bugs
----------

 keyboard navigation

 - all known segfaults
 - most 'weird navigation order' problems
 - related issue (now fixed in CVS): a_Findtext_search returned FALSE
   (instead of FINDTEXT_NOT_FOUND) when a search was performed on an
   empty page. Since this function is supposed to return a
   FindtextResult enum value (and the first value in that enum is
   FINDTEXT_SUCCESS) this made the focus code try to focus a link in
   an empty page leading to a segfault in the scrolled_window.

 document abstraction

 - a problem with tab/page duplication which had the potential to
   cause segfaults is fixed
 - selection copy did not work because I forgot to set the owner for
   the selection in tab mode. This is fixed.

REMOVED PREFERENCES
===================

These preferences have been removed from the patch. Update your
dillorc if you used them. Complain to me (on the list) if you want
them back.

  * tab_instead_of_window: merged into the new target_blank pref
  * focus_location_on_new: did anyone use the NO setting?
  * tab_bar_homogeneous:   did anyone use the NO setting?
  * compress_vowels:       can be changed during compile if needed,
                           COMPRESS_VOWELS in src/misc.h
  
CHANGED KEY COMBINATIONS
========================

  * Internet search:     ALT-s (was CTRL-g,       CVS CTRL-s)
  * Repeat search       CTRL-g (was nothing,      CVS nothing)
  * View source:         ALT-u (was CTRL-u,       CVS nothing)
  * Open URL:           CTRL-l (was SHIFT-CTRL-l, CVS CTRL-l)
  * focus location bar: CTRL-u (was CTRL-l,       CVS CTRL-u)

  If you want the old keys back, add a binding for the related command
  (see above)

If something doesn't work they way it should (or the way you *think*
it should), I want to know!

For more info on keyboard navigation, see the
doc/Keyboard_Navigation.txt document (after applying the patch,
naturally...). More information on tabs can be found in
doc/Browser_Tabs.txt, for frames see doc/Browser_Frames.txt. The
mailing list archives are also a good place to look for answers to
questions relating to this patch.

REMOVED COMPILE OPTIONS
=======================

  * --disable-tabs         Tabs are a fixed part of the code now
  * --enable-xhtml-dtd     Full frameset support is a fixed part of
                           the code now

TODO
====

 - add x scrolling capability to Dillo (change anchors, URL_POS,
   scrolling functions, iterators, etc...). This is needed for better
   keyboard navigation on wide pages.
  
Tabs, Frames and browser bloat
==============================

version: 0.8.0-pre
patch: dillo-20031121-tabs.patch.gz
unpatched:  297172 bytes
patched:    333364 bytes
 
(gcc 3.2.2, binutils 2.13.90.0.18, CFLAGS "-Os")
 
Download instructions
=====================

The patch is made against 20031119@15:09 CVS. Do not forget to run
./autogen.sh after applying the patch. You can find the patch on the
usual (ad-happy, use an ad-blocking proxy or sane browser) site:

http://www.geocities.com/ikbenfrank/

More specifically:

Dillo 0.8.0-pre (CVS)
=====================
http://www.geocities.com/ikbenfrank/dillo-20031121-tabs.patch.gz
size:    116678 bytes (gzipped, as downloaded)
         529298 bytes (uncompressed)
md5sum:  846a6be5100809cd95553e2cae595f3b (gzipped, as downloaded)
         7a94882aa87a8787d959105231fcfacf (uncompressed)
As always, check the site for the most recent version

Cheers//Frank
-- 
  WWWWW      ________________________
 ## o o\    /     Frank de Lange     \
 }#   \|   /      +46-734352015       \
  \ `--| _/           \
   `---'  \       +31-640037120        /
           \    frank@unternet.org    /
            `------------------------'
 [ "Omnis enim res, quae dando non deficit, dum habetur
    et non datur, nondum habetur, quomodo habenda est."  ]

    Source: geocities.com/ikbenfrank