[Checkins] SVN: Products.ExternalEditor/trunk/ Reformat readme and changes as rest

Hanno Schlichting plone at hannosch.info
Sat May 3 15:22:03 EDT 2008


Log message for revision 86276:
  Reformat readme and changes as rest
  

Changed:
  U   Products.ExternalEditor/trunk/CHANGES.txt
  U   Products.ExternalEditor/trunk/README.txt
  U   Products.ExternalEditor/trunk/setup.py

-=-
Modified: Products.ExternalEditor/trunk/CHANGES.txt
===================================================================
--- Products.ExternalEditor/trunk/CHANGES.txt	2008-05-03 19:21:38 UTC (rev 86275)
+++ Products.ExternalEditor/trunk/CHANGES.txt	2008-05-03 19:22:02 UTC (rev 86276)
@@ -1,284 +1,315 @@
-External Editor Change Log
+Change Log
+==========
 
-  unreleased - 0.9.4
+unreleased - 0.9.4
+------------------
 
-    - Updated package metadata to be usable as a package.
+  - Updated package metadata to be usable as a package.
 
-  01/03/2007 - 0.9.3 Release
 
-    - Fixed issue with 'manage_FTPget' overriding the 'Content-Type'
-      header.
+01/03/2007 - 0.9.3
+------------------
 
-    - Only run ExpandEnvironmentStrings on win32 systems.
+  - Fixed issue with 'manage_FTPget' overriding the 'Content-Type'
+    header.
 
-  9/14/2006 - 0.9.2 Release
+  - Only run ExpandEnvironmentStrings on win32 systems.
 
-    - Added 'skip_data' option to make External Editor send out only
-      the metadata part and skip appending data to the 'body'.
 
-    - Add a simple callback registry that can be used to add extra
-      metadata headers or set special response headers when a file is
-      edited through External Editor.
+9/14/2006 - 0.9.2
+-----------------
 
-    - Use rfc822.Message for parsing the metadata of the file being
-      edited.
+  - Added 'skip_data' option to make External Editor send out only
+    the metadata part and skip appending data to the 'body'.
 
-    - Don't emit a warning about deprecated 'methods' in Zope >= 2.10.
+  - Add a simple callback registry that can be used to add extra
+    metadata headers or set special response headers when a file is
+    edited through External Editor.
 
-    - Fixed acquisition issue in manage_main.dtml to sync up with the
-      same fix applied to Zope.
+  - Use rfc822.Message for parsing the metadata of the file being
+    edited.
 
-  6/23/2005 - 0.9.1 Release
+  - Don't emit a warning about deprecated 'methods' in Zope >= 2.10.
 
-    - Older pyc files for plugins were included in the 0.9 release.
-      This version has the most up to date plugins.
+  - Fixed acquisition issue in manage_main.dtml to sync up with the
+    same fix applied to Zope.
 
-  6/20/2005 - 0.9 Release
 
-    - When using the Excel plugin, errors were seen by users like
-      "TypeError: This object does not support enumeration".  We now
-      make the user deal with these.
+6/23/2005 - 0.9.1
+-----------------
 
-    - When using the Excel plugin, errors were intermittently raised to the
-      user in the form "Fatal error: <unknown>.Path" and the user could
-      subsequently not save the document back to Zope because the
-      external editor process had quit.
+  - Older pyc files for plugins were included in the 0.9 release.
+    This version has the most up to date plugins.
 
-    - Changes to documents intermittently may not have been saved back to Zope
-      when using any plugin that involved COM (Word, Excel, Powerpoint, etc).
 
-    - If Word was exited before a user actively saved, if there were
-      outstanding changes in the document being edited, those changes
-      would not be saved to the server despite the user answering
-      "yes" to the "do you want to save before you exit" dialog
-      presented by Word.
+6/20/2005 - 0.9
+---------------
 
-    - The "title" attribute of the object being externally edited is
-      now available within the set of headers returned by EE to the
-      zopeedit client.
+  - When using the Excel plugin, errors were seen by users like
+    "TypeError: This object does not support enumeration".  We now
+    make the user deal with these.
 
-    - Detecting whether the client has External Editor installed from
-      within IE using JavaScript or VBScript is now possible, assuming
-      that the client software is installed via the InnoSetup
-      installer.  See "win32/ocx.txt" for more info.
+  - When using the Excel plugin, errors were intermittently raised to the
+    user in the form "Fatal error: <unknown>.Path" and the user could
+    subsequently not save the document back to Zope because the
+    external editor process had quit.
 
-    - External Editor now compatible with objects that return a
-      "filestream iterator" in Zope 2.7.1+. (if upgrading: this fix
-      does not require an update to EE client, just the EE Zope
-      product).
+  - Changes to documents intermittently may not have been saved back to Zope
+    when using any plugin that involved COM (Word, Excel, Powerpoint, etc).
 
-    - Properly escape hyphens in man page. Thanks to Federico Sevilla III.
-  
-    - Check if the editor was launched before locking the file in Zope. This
-      prevents errors if the editor is closed before the lock request 
-      completes.
-  
-    - Do not ask the user what editor to use on Posix platforms. Instead just
-      tell the user to edit the config file. The askstring()
-      function does not work with a hidden root Tk window in Python 2.3.4.
-      Thanks to Christopher Mann.
+  - If Word was exited before a user actively saved, if there were
+    outstanding changes in the document being edited, those changes
+    would not be saved to the server despite the user answering
+    "yes" to the "do you want to save before you exit" dialog
+    presented by Word.
 
-  7/13/04 - 0.8 release
-  
-    - Add external editor icon to ZMI breadcrumbs for editable objects.
+  - The "title" attribute of the object being externally edited is
+    now available within the set of headers returned by EE to the
+    zopeedit client.
 
-    - Compiled windows helper app binary using Python 2.3.4, Pythonwin build
-      163 and py2exe 0.5.
+  - Detecting whether the client has External Editor installed from
+    within IE using JavaScript or VBScript is now possible, assuming
+    that the client software is installed via the InnoSetup
+    installer.  See "win32/ocx.txt" for more info.
 
-    - Add Dreamweaver plugin contributed by Manuel Aristaránn. Thanks also
-      to Anton Stonor.
-  
-    - Add ZMI support for Zope 2.7's ordered folder objects.      
-  
-    - Fix bug detecting basic auth info from older versions of CookieCrumber.
-      Thanks to David D. Smith and Federico Sevilla III.
-    
-    - Workaround IE browser error when running over SSL. Thanks to 
-      Marc-Aurèle Darche.
-  
-    - Add ".zem" file extension support for MacOS X (especially Mac IE),
-      to ease helper app integration where MIME support is lacking. Thanks
-      to Zac Bir.
-  
-    - Added "long_file_name" and "file_name_separator" config options.
+  - External Editor now compatible with objects that return a
+    "filestream iterator" in Zope 2.7.1+. (if upgrading: this fix
+    does not require an update to EE client, just the EE Zope
+    product).
 
-    - Fixed bug which happened under Win32 when editing an Excel file
-      using the Excel plugin where the symptom was a "Call was
-      rejected by callee" COM error. Thanks to Chris McDonough.
+  - Properly escape hyphens in man page. Thanks to Federico Sevilla III.
 
-  4/23/04 - 0.7.2 Release
+  - Check if the editor was launched before locking the file in Zope. This
+    prevents errors if the editor is closed before the lock request 
+    completes.
 
-    - Change default configuration to use .txt extension for text/plain only. 
-      Add extensions for css and javascript files.
+  - Do not ask the user what editor to use on Posix platforms. Instead just
+    tell the user to edit the config file. The askstring()
+    function does not work with a hidden root Tk window in Python 2.3.4.
+    Thanks to Christopher Mann.
 
-    - Fixed packaging bug in Windows binary which disabled several plugins.
-      This fixes "Editor did not launch properly" errors for MSOffice
-      among others.
 
-    - Fixed a bug where very short editing sessions where no changes were
-      made could make EE think the editor never launched. Thanks to Maik Ihde.
+7/13/04 - 0.8
+-------------
 
-  11/7/03 - 0.7.1 Release (affects win32 binary only)
+  - Add external editor icon to ZMI breadcrumbs for editable objects.
 
-    - Fix encoding bug in windows binary. Thanks to Chris McDonough.
+  - Compiled windows helper app binary using Python 2.3.4, Pythonwin build
+    163 and py2exe 0.5.
+
+  - Add Dreamweaver plugin contributed by Manuel Aristaránn. Thanks also
+    to Anton Stonor.
+
+  - Add ZMI support for Zope 2.7's ordered folder objects.      
+
+  - Fix bug detecting basic auth info from older versions of CookieCrumber.
+    Thanks to David D. Smith and Federico Sevilla III.
   
-    - Added tip for configuring IE to save files over SSL. Thanks to
-      Jonah Bossewitch.
+  - Workaround IE browser error when running over SSL. Thanks to 
+    Marc-Aurèle Darche.
 
-  4/1/03 - 0.7 Release
+  - Add ".zem" file extension support for MacOS X (especially Mac IE),
+    to ease helper app integration where MIME support is lacking. Thanks
+    to Zac Bir.
 
-    - Added working distutils setup for Unix.
+  - Added "long_file_name" and "file_name_separator" config options.
 
-    - You can now specify from the server that the helper app should
-      borrow a lock by passing borrow_lock=1 via the request, thus
-      suppressing the dialog box which appears by default. Thanks
-      to Shane Hathaway.
+  - Fixed bug which happened under Win32 when editing an Excel file
+    using the Excel plugin where the symptom was a "Call was
+    rejected by callee" COM error. Thanks to Chris McDonough.
 
-    - Improved open file check in Word and Powerpoint plugins 
-      thanks to Yura Petrov.
 
-    - Added plugins for Microsoft Word, Excel and Powerpoint.
+4/23/04 - 0.7.2
+---------------
 
-    - Added the man page from the Debian distro. Thanks go out to
-      Federico Sevilla III and Andreas Tille
+  - Change default configuration to use .txt extension for text/plain only. 
+    Add extensions for css and javascript files.
 
-  11/02/02 - 0.6 Release
+  - Fixed packaging bug in Windows binary which disabled several plugins.
+    This fixes "Editor did not launch properly" errors for MSOffice
+    among others.
 
-    - Built Windows helper app using Python 2.2.2 and PythonWin 148.
+  - Fixed a bug where very short editing sessions where no changes were
+    made could make EE think the editor never launched. Thanks to Maik Ihde.
 
-    - The externalEdit_ object now accepts a path argument to the object to
-      edit, allowing URLs like: http://zope/externalEdit_?path=/some/object.
-      This allows external editor to play better with applications making use
-      of traversal magic of their own. Thanks to Tres Seaver.
+11/7/03 - 0.7.1
+---------------
 
-    - Fixed NameError bug in unlock retry code. Thanks to Federico Sevilla III.
+  - Fix encoding bug in windows binary. Thanks to Chris McDonough.
 
-    - Added a workaround for non-compliant SSL servers. The software now
-      silently ignores "EOF occurred in violation of protocol" errors coming
-      from httplib. Thanks to Christopher Deckard.
+  - Added tip for configuring IE to save files over SSL. Thanks to
+    Jonah Bossewitch.
 
-    - Removed stderr writes to cure "Invalid File Descriptor" errors on
-      Windows. Thanks to Martijn Peters.
 
-    - Added Photoshop plugin (win32)
+4/1/03 - 0.7
+------------
 
-    - Added HomeSite plugin (win32)
+  - Added working distutils setup for Unix.
 
-    - Added win32 editor plugin support for the helper application.
+  - You can now specify from the server that the helper app should
+    borrow a lock by passing borrow_lock=1 via the request, thus
+    suppressing the dialog box which appears by default. Thanks
+    to Shane Hathaway.
 
-  8/19/02 - 0.5 Release
+  - Improved open file check in Word and Powerpoint plugins 
+    thanks to Yura Petrov.
 
-    - Added patch for Zope find template so that you can use external editor
-      directly from find results in the ZMI. Thanks to Jim Washington.
+  - Added plugins for Microsoft Word, Excel and Powerpoint.
 
-    - Factored out external editor link generator. Product now registers
-      a global method "externalEditLink_" which can be called to generate
-      the external editor icon link for any object.
+  - Added the man page from the Debian distro. Thanks go out to
+    Federico Sevilla III and Andreas Tille
 
-    - External editing is now governed by the "Use external editor" permission
-      to allow non-managers to use it. Users must also have the permissions to
-      edit/modify the objects they edit, plus do WebDAV locking if desired.
-      Thanks to Reineke and others.
 
-    - Unix editor command line parsing is much more robust now and properly
-      handles quoted arguments. You can also specify the "$1" placeholder in the
-      editor command to denote where the content file name is inserted. If
-      omitted it is appended to the end of the command line. "%1" continues to
-      work similarly for Windows. Thanks to Marc St-Jean.
+11/02/02 - 0.6
+--------------
 
-    - Fixed bug editing large (chunked) files and images. External editor now
-      streams their data properly to the client. Thanks to all the users who
-      reported various symptoms of this bug.
+  - Built Windows helper app using Python 2.2.2 and PythonWin 148.
 
-    - Fixed bug editing objects inside a Squishdot site. Thanks to Kevin Salt.
+  - The `externalEdit_` object now accepts a path argument to the object to
+    edit, allowing URLs like: `http://zope/externalEdit_?path=/some/object.`
+    This allows external editor to play better with applications making use
+    of traversal magic of their own. Thanks to Tres Seaver.
 
-    - Added the capability to borrow exising DAV locks. This allows external
-      editor to play well with other systems using locks, such as CMFStaging. A
-      new configuration flag, always_borrow_locks can be set to suppress the
-      borrow lock warning dialog when editing.
+  - Fixed NameError bug in unlock retry code. Thanks to Federico Sevilla III.
 
-    - Fixed auth bug when product was used with mysqlUserFolder. Thanks to
-      ViNiL.
+  - Added a workaround for non-compliant SSL servers. The software now
+    silently ignores "EOF occurred in violation of protocol" errors coming
+    from httplib. Thanks to Christopher Deckard.
 
-  6/30/02 - 0.4.2 Release (affects win32 binary only)
+  - Removed stderr writes to cure "Invalid File Descriptor" errors on
+    Windows. Thanks to Martijn Peters.
 
-    - Added SSL support to Windows binary package. Thanks to Federico 
-      Sevilla III
+  - Added Photoshop plugin (win32)
 
-  6/29/02 - 0.4.1 Release
+  - Added HomeSite plugin (win32)
 
-    - Fixed dangling dav lock bug on fatal errors. Thanks to Marc St-Jean.
+  - Added win32 editor plugin support for the helper application.
 
-    - Fixed content_type bug, now checks if it is callable. Thanks to Arnaud 
-      Bienvenu.
 
-    - Fixed bug with editing binary data on Windows. Thanks to Eric Kamm.
+8/19/02 - 0.5
+-------------
 
-    - Fixed bug setting the editor on Posix platforms.
+  - Added patch for Zope find template so that you can use external editor
+    directly from find results in the ZMI. Thanks to Jim Washington.
 
-  6/24/02 - 0.4 Release
+  - Factored out external editor link generator. Product now registers
+    a global method `externalEditLink_` which can be called to generate
+    the external editor icon link for any object.
 
-    - Added --version command line argument
+  - External editing is now governed by the "Use external editor" permission
+    to allow non-managers to use it. Users must also have the permissions to
+    edit/modify the objects they edit, plus do WebDAV locking if desired.
+    Thanks to Reineke and others.
 
-    - Made manage_FTPget the default source for the editable content, instead
-      of document_src which was broken for CMF Wiki Pages.
+  - Unix editor command line parsing is much more robust now and properly
+    handles quoted arguments. You can also specify the "$1" placeholder in the
+    editor command to denote where the content file name is inserted. If
+    omitted it is appended to the end of the command line. "%1" continues to
+    work similarly for Windows. Thanks to Marc St-Jean.
 
-    - Fixed Windows "body_file" bug.
+  - Fixed bug editing large (chunked) files and images. External editor now
+    streams their data properly to the client. Thanks to all the users who
+    reported various symptoms of this bug.
 
-    - Added binary build support for Windows using py2exe and Inno setup.
+  - Fixed bug editing objects inside a Squishdot site. Thanks to Kevin Salt.
 
-    - Fixed Windows config file locator. It now looks in the program directory
-      and then the user's home directory (if specified)
+  - Added the capability to borrow exising DAV locks. This allows external
+    editor to play well with other systems using locks, such as CMFStaging. A
+    new configuration flag, always_borrow_locks can be set to suppress the
+    borrow lock warning dialog when editing.
 
-    - Fixed bug in Windows registry editor lookup.
+  - Fixed auth bug when product was used with mysqlUserFolder. Thanks to
+    ViNiL.
 
-  6/16/02 - 0.3 Release
 
-    - Improved behavior when saving after lock attempts fail.
+6/30/02 - 0.4.2
+---------------
 
-    - Now works on Windows (applause) using Pythonwin. Much overall
-      refactoring to abstract process control. Thanks to Oliver Deckmyn,
-      Gabriel Genellina and Arno Gross for testing, patches and suggestions.
+  - Added SSL support to Windows binary package. Thanks to Federico 
+    Sevilla III
 
-    - Added "temp_dir" configuration option for specifying a different
-      temp file directory then the OS default. Also further improved 
-      temp file name generation.
 
-    - Added support for domain specific configuration options.
+6/29/02 - 0.4.1
+---------------
 
-    - Fixed trailing newline bug in encoded auth data coming from
-      CookieCrumbler. Thanks to Harald Koschinski.
+  - Fixed dangling dav lock bug on fatal errors. Thanks to Marc St-Jean.
 
-    - You can now pass command line arguments to the editor in the config file,
-      or wrap the editor in an xterm without using a shell script.
-      
-    - Rewrote "Editor did not launch" error message so it makes more sense.
+  - Fixed content_type bug, now checks if it is callable. Thanks to Arnaud 
+    Bienvenu.
 
-    - Fixed https detection bug. External editor is now tested and working with
-      https. Many thanks to Hans-Dieter Stich and Martin Grönemeyer for their 
-      assistance and ideas.
+  - Fixed bug with editing binary data on Windows. Thanks to Eric Kamm.
 
-    - Made it possible to edit objects that are methods of ZClasses. Thanks to
-      Jim Washington
+  - Fixed bug setting the editor on Posix platforms.
 
-    - Refactored link generation code in manage_main so that it uses
-      the parent's absolute_url rather than URL1. Thanks to
-      Jim Washington
 
-    - Removed implicit save in Configuration class destructor
+6/24/02 - 0.4
+-------------
 
-    - Added caching headers to prevent client-side caching of edit data.
-      Thanks to Gabriel Genellina for pointing this out.
+  - Added --version command line argument
 
-    - Added improved support for editing CMF documents
+  - Made manage_FTPget the default source for the editable content, instead
+    of document_src which was broken for CMF Wiki Pages.
 
-    - Eliminated spurious "Editor did not launch" errors on short sessions
-      or when other errors occurred.
+  - Fixed Windows "body_file" bug.
 
-  5/16/02 - 0.2 Release
+  - Added binary build support for Windows using py2exe and Inno setup.
 
-    - Fixed product uninstallation bug
+  - Fixed Windows config file locator. It now looks in the program directory
+    and then the user's home directory (if specified)
 
-  5/15/02 - 0.1
+  - Fixed bug in Windows registry editor lookup.
 
-    - Initial release
+
+6/16/02 - 0.3
+-------------
+
+  - Improved behavior when saving after lock attempts fail.
+
+  - Now works on Windows (applause) using Pythonwin. Much overall
+    refactoring to abstract process control. Thanks to Oliver Deckmyn,
+    Gabriel Genellina and Arno Gross for testing, patches and suggestions.
+
+  - Added "temp_dir" configuration option for specifying a different
+    temp file directory then the OS default. Also further improved 
+    temp file name generation.
+
+  - Added support for domain specific configuration options.
+
+  - Fixed trailing newline bug in encoded auth data coming from
+    CookieCrumbler. Thanks to Harald Koschinski.
+
+  - You can now pass command line arguments to the editor in the config file,
+    or wrap the editor in an xterm without using a shell script.
+    
+  - Rewrote "Editor did not launch" error message so it makes more sense.
+
+  - Fixed https detection bug. External editor is now tested and working with
+    https. Many thanks to Hans-Dieter Stich and Martin Grönemeyer for their 
+    assistance and ideas.
+
+  - Made it possible to edit objects that are methods of ZClasses. Thanks to
+    Jim Washington
+
+  - Refactored link generation code in manage_main so that it uses
+    the parent's absolute_url rather than URL1. Thanks to
+    Jim Washington
+
+  - Removed implicit save in Configuration class destructor
+
+  - Added caching headers to prevent client-side caching of edit data.
+    Thanks to Gabriel Genellina for pointing this out.
+
+  - Added improved support for editing CMF documents
+
+  - Eliminated spurious "Editor did not launch" errors on short sessions
+    or when other errors occurred.
+
+5/16/02 - 0.2
+-------------
+
+  - Fixed product uninstallation bug
+
+5/15/02 - 0.1
+-------------
+
+  - Initial release

Modified: Products.ExternalEditor/trunk/README.txt
===================================================================
--- Products.ExternalEditor/trunk/README.txt	2008-05-03 19:21:38 UTC (rev 86275)
+++ Products.ExternalEditor/trunk/README.txt	2008-05-03 19:22:02 UTC (rev 86276)
@@ -1,81 +1,84 @@
 Zope External Editor
+====================
 
-  The Zope External Editor is a new way to integrate Zope more seamlessly with
-  client-side tools. It has the following features:
-    
-  - Edit objects locally, directly from the ZMI.
-  
-  - Works with any graphical editor application that can open a file from the 
-    command line, including: emacs, gvim, xemacs, nedit, gimp, etc.
+The Zope External Editor is a new way to integrate Zope more seamlessly with
+client-side tools. It has the following features:
 
-  - Automatically saves changes back to Zope without ending the editing session.
+    - Edit objects locally, directly from the ZMI.
 
-  - Associate any client-side editor application with any Zope object by
-    meta-type or content-type. Both text and binary object content can be
-    edited.
+    - Works with any graphical editor application that can open a file from the 
+      command line, including: emacs, gvim, xemacs, nedit, gimp, etc.
 
-  - Locks objects while they are being edited. Automatically unlocks them when
-    the editing session ends.
+    - Automatically saves changes back to Zope without ending the editing session.
 
-  - Can add file extensions automatically to improve syntax highlighting or 
-    file type detection.
-  
-  - Works with basic auth, cookie auth and Zope versions. Credentials are
-    automatically passed down to the helper application. No need to
-    reauthenticate.
-    
-  - https support (Openssl required)
-  
-  Using It
+    - Associate any client-side editor application with any Zope object by
+      meta-type or content-type. Both text and binary object content can be
+      edited.
 
-    Use of the application is about as easy as using the ZMI once your browser
-    is configured (see the installation instructions). To edit an object
-    externally, just click on the pencil icon next to the object in the ZMI.
-    The object will be downloaded and opened using the editor application you
-    have chosen (you will be prompted the first time to choose an editor). 
+    - Locks objects while they are being edited. Automatically unlocks them when
+      the editing session ends.
 
-    You edit the object just like any other file. When you save the changes in
-    your editor, they are automatically uploaded back to Zope in the
-    background. While the object is open in your editor, it is locked in Zope
-    to prevent concurrent editing. When you end your editing session (ie you
-    close your editor) the object is unlocked.
+    - Can add file extensions automatically to improve syntax highlighting or 
+      file type detection.
 
-  How it Works
-  
-    Ok, so this all sounds a bit too good to be true, no? So how the heck does
-    it work anyway? First I'll give you a block diagram::
-    
-      +------------+     +------------+     +---------+        +------+
-      | Editor App | <-- | Helper App | <-- | Browser | <-/ /- | Zope |
-      +------------+     +------------+     +---------+        +------+
-                  ^       ^     ^                                ^
-                   \     /       \                              /
-                    v   v         -----------------------/ /----
-                   -------
-                  / Local \
-                  \  File /
-                   -------
-                   
-    Now the key to getting this to work is solving the problem that the editor
-    cannot know about Zope, and must only deal with local files. Also, there is
-    no standard way to communication with editors, so the only communication
-    channel can be the local file which contains the object's content or code.
-    
-    It is trivial to get the browser to fire up your editor when you download
-    a particular type of data with your browser. But that does you little good,
-    since the browser no longer involves itself once the data is downloaded. It
-    just creates a temp file and fires off the registered application, passing
-    it the file path. Once the editor is running, it is only aware of the local
-    file, and has no concept of where it originated from.
-    
-    To solve this problem, I have developed a helper application whose job is
-    essentially two-fold:
-    
+    - Works with basic auth, cookie auth and Zope versions. Credentials are
+      automatically passed down to the helper application. No need to
+      reauthenticate.
+
+    - https support (Openssl required)
+
+Using It
+--------
+
+Use of the application is about as easy as using the ZMI once your browser
+is configured (see the installation instructions). To edit an object
+externally, just click on the pencil icon next to the object in the ZMI.
+The object will be downloaded and opened using the editor application you
+have chosen (you will be prompted the first time to choose an editor). 
+
+You edit the object just like any other file. When you save the changes in
+your editor, they are automatically uploaded back to Zope in the
+background. While the object is open in your editor, it is locked in Zope
+to prevent concurrent editing. When you end your editing session (ie you
+close your editor) the object is unlocked.
+
+How it Works
+------------
+
+Ok, so this all sounds a bit too good to be true, no? So how the heck does
+it work anyway? First I'll give you a block diagram::
+
+    +------------+     +------------+     +---------+        +------+
+    | Editor App | <-- | Helper App | <-- | Browser | <-/ /- | Zope |
+    +------------+     +------------+     +---------+        +------+
+                ^       ^     ^                                ^
+                 \     /       \                              /
+                  v   v         -----------------------/ /----
+                 -------
+                / Local \
+                \  File /
+                 -------
+
+Now the key to getting this to work is solving the problem that the editor
+cannot know about Zope, and must only deal with local files. Also, there is
+no standard way to communication with editors, so the only communication
+channel can be the local file which contains the object's content or code.
+
+It is trivial to get the browser to fire up your editor when you download
+a particular type of data with your browser. But that does you little good,
+since the browser no longer involves itself once the data is downloaded. It
+just creates a temp file and fires off the registered application, passing
+it the file path. Once the editor is running, it is only aware of the local
+file, and has no concept of where it originated from.
+
+To solve this problem, I have developed a helper application whose job is
+essentially two-fold:
+
     - Determine the correct editor to launch for a given Zope object
-    
+
     - Get the data back into Zope when the changes are saved
 
-    So, let's take a step by step look at how it works:
+So, let's take a step by step look at how it works:
 
     1. You click on the external editor link (the pencil icon) in the Zope 
        management interface.
@@ -108,263 +111,267 @@
        uploaded if it has changed. Then a WebDAV unlock request is sent to Zope.
        
     9. The helper application exits.
+
+Configuration
+-------------
+
+The helper application supports several configuration options, each of
+which can be triggered in any combination of object meta-type, content-type
+or domain. This allows you to create appropriate behavior for different
+types of Zope objects and content or even different servers. The
+configuration file is stored in the file  "~/.zope-external-edit" (Unix) or
+"~\ZopeEdit.ini" (Windows). If no configuration file is found when the
+helper application starts, a default config file is created in your home
+directory.
+
+The configuration file follows the standard Python ConfigParser format,
+which is pretty much like the old .ini file format from windows. The file
+consists of sections and options in the following format::
+
+    [section 1]
+    option1 = value
+    option2 = value
+
+    [section 2]
+    ...
+
+Options
+-------
+
+The available options for all sections of the config file are:
+
+    editor -- Command line or plugin name used to invoke the editor
+    application. On Windows, if no editor setting is found for an object you
+    edit, the helper app will search the file type registry for an
+    appropriate editor based on the content-type or file extension of the
+    object (which can be specified using the extension option below). By
+    default, the file path of the local file being edited is appended to
+    this command line. To insert the file path in the middle of your
+    command, use "$1" for Unix and "%1" for Windows respectively.
+
+    save_interval -- (float) The interval in seconds that the helper 
+    application checks the edited file for changes.
+
+    use_locks -- (1 or 0) Whether to use WebDAV locking. The user editing must
+    have the proper WebDAV related permissions for this to work.
     
-  Configuration
-  
-    The helper application supports several configuration options, each of
-    which can be triggered in any combination of object meta-type, content-type
-    or domain. This allows you to create appropriate behavior for different
-    types of Zope objects and content or even different servers. The
-    configuration file is stored in the file  "~/.zope-external-edit" (Unix) or
-    "~\ZopeEdit.ini" (Windows). If no configuration file is found when the
-    helper application starts, a default config file is created in your home
-    directory.
+    always_borrow_locks -- (1 or 0) When use_locks is enabled this features
+    suppresses warnings when trying to edit an object you have already locked.
+    When enabled, external editor will always "borrow" the existing lock token
+    instead of doing the locking itself. This is useful when using CMFStaging
+    for instance. If omitted, this option defaults to 0.
 
-    The configuration file follows the standard Python ConfigParser format,
-    which is pretty much like the old .ini file format from windows. The file
-    consists of sections and options in the following format::
+    cleanup_files -- (1 or 0) Whether to delete the temp files created.
+    WARNING the temp file coming from the browser contains authentication
+    information and therefore setting this to 0 is a security risk,
+    especially on shared machines. If set to 1, that file is deleted at the
+    earliest opportunity, before the editor is even spawned. Set to 0 for
+    debugging only.
 
-      [section 1]
-      option1 = value
-      option2 = value
+    extension -- (text) The file extension to add to the content file. Allows
+    better handling of images and can improve syntax highlighting.
 
-      [section 2]
-      ...
+    temp_dir -- (path) Path to store local copies of object data being
+    edited. Defaults to operating system temp directory. *Note: this setting
+    has no apparent effect on Windows* 8^(
     
-    Options
-    
-      The available options for all sections of the config file are:
+    long_file_name -- (1 or 0) Whether to include the whole path to the 
+    object including the hostname in the file name (the default) or just the
+    id of the object being edited. Turn this option off for shorter file
+    names in your editors, and for editors that don't like long names.
 
-      editor -- Command line or plugin name used to invoke the editor
-      application. On Windows, if no editor setting is found for an object you
-      edit, the helper app will search the file type registry for an
-      appropriate editor based on the content-type or file extension of the
-      object (which can be specified using the extension option below). By
-      default, the file path of the local file being edited is appended to
-      this command line. To insert the file path in the middle of your
-      command, use "$1" for Unix and "%1" for Windows respectively.
+    file_name_separator -- (string) Character or characters used to separate
+    path elements in long files names used by external editor. Defaults to
+    a comma (,). This must be a legal character for use in file names on
+    your platorm (i.e., don't use a path separator character!). This option
+    is ignored if 'long_file_name' is set to 0.
 
-      save_interval -- (float) The interval in seconds that the helper 
-      application checks the edited file for changes.
+Sections
+--------
 
-      use_locks -- (1 or 0) Whether to use WebDAV locking. The user editing must
-      have the proper WebDAV related permissions for this to work.
-      
-      always_borrow_locks -- (1 or 0) When use_locks is enabled this features
-      suppresses warnings when trying to edit an object you have already locked.
-      When enabled, external editor will always "borrow" the existing lock token
-      instead of doing the locking itself. This is useful when using CMFStaging
-      for instance. If omitted, this option defaults to 0.
+The sections of the configuration file specify the types of objects and
+content that the options beneath them apply to.
 
-      cleanup_files -- (1 or 0) Whether to delete the temp files created.
-      WARNING the temp file coming from the browser contains authentication
-      information and therefore setting this to 0 is a security risk,
-      especially on shared machines. If set to 1, that file is deleted at the
-      earliest opportunity, before the editor is even spawned. Set to 0 for
-      debugging only.
+There is only one mandatory section '[general]', which should define all
+of the above options that do not have a default value. If no other
+section defines an option for a given object, the general settings are
+used.
 
-      extension -- (text) The file extension to add to the content file. Allows
-      better handling of images and can improve syntax highlighting.
+Additional sections can apply to a particular domain, content-type or
+meta-type. Since objects can have all these properties, the options are
+applied in this order of precedence.
 
-      temp_dir -- (path) Path to store local copies of object data being
-      edited. Defaults to operating system temp directory. *Note: this setting
-      has no apparent effect on Windows* 8^(
-      
-      long_file_name -- (1 or 0) Whether to include the whole path to the 
-      object including the hostname in the file name (the default) or just the
-      id of the object being edited. Turn this option off for shorter file
-      names in your editors, and for editors that don't like long names.
+    - `[content-type:text/html]` -- Options by whole content-type come first.
 
-      file_name_separator -- (string) Character or characters used to separate
-      path elements in long files names used by external editor. Defaults to
-      a comma (,). This must be a legal character for use in file names on
-      your platorm (i.e., don't use a path separator character!). This option
-      is ignored if 'long_file_name' is set to 0.
+    - `[content-type:text/*]` -- Options by major content-type come second.
 
-    Sections
-    
-      The sections of the configuration file specify the types of objects and
-      content that the options beneath them apply to.
-      
-      There is only one mandatory section '[general]', which should define all
-      of the above options that do not have a default value. If no other
-      section defines an option for a given object, the general settings are
-      used.
+    - `[meta-type:File]` -- Options by Zope meta-type are third.
 
-      Additional sections can apply to a particular domain, content-type or
-      meta-type. Since objects can have all these properties, the options are
-      applied in this order of precedence.
+    - `[domain:www.mydomain.com]` -- Options by domain follow. Several
+      sections can be added for each domain level if desired.
 
-      - '[content-type:text/html]' -- Options by whole content-type come first
-      
-      - '[content-type:text/*]' -- Options by major content-type come second.
-      
-      - '[meta-type:File]' -- Options by Zope meta-type are third.
+    - `[general]` -- General options are last.
 
-      - '[domain:www.mydomain.com]' -- Options by domain follow. Several
-        sections can be added for each domain level if desired.
-      
-      - '[general]' -- General options are last.
-      
-      This scheme allows you to specify an extension by content-type, the
-      editor by meta-type, the locking settings by domain and the remaining 
-      options under general for a given object.
-      
-  Editor Plugins
+This scheme allows you to specify an extension by content-type, the
+editor by meta-type, the locking settings by domain and the remaining 
+options under general for a given object.
 
-    For tighter client-side integration, external editor has a plugin system
-    that allows it to interact directly with supported applications.
+Editor Plugins
+--------------
 
-    On Windows this generally means using COM to invoke the application, open
-    the content file and wait for the user to save and close the file. Because
-    each application has different remote scripting capabilities and APIs,
-    editor specific plugins must be written tailored to each supported
-    application and platform.
+For tighter client-side integration, external editor has a plugin system
+that allows it to interact directly with supported applications.
 
-    This system allows external editor to efficiently connect to running
-    applications without relaunching them and therefore fully support MDI 
-    environments. The following applications currently have plugin support::
+On Windows this generally means using COM to invoke the application, open
+the content file and wait for the user to save and close the file. Because
+each application has different remote scripting capabilities and APIs,
+editor specific plugins must be written tailored to each supported
+application and platform.
 
-      Application       Platform    Plugin Module Name(s)
-      ===================================================
-      HomeSite          Windows     homesite5, homesite
-      Dreamweaver       Windows     dreamweaver	
-      Photoshop         Windows     photoshp, photoshop
-      MS Word           Windows     winword, word
-      MS Excel          Windows     excel
-      MS Powerpoint     Windows     powerpnt, powerpoint
+This system allows external editor to efficiently connect to running
+applications without relaunching them and therefore fully support MDI 
+environments. The following applications currently have plugin support::
 
-    External editor will attempt to load a plugin for any application before
-    using the general editor control method. It does this by matching the
-    name of the application executable file (sans extension) in the editor
-    command line with the available plugins. 
+    Application       Platform    Plugin Module Name(s)
+    ===================================================
+    HomeSite          Windows     homesite5, homesite
+    Dreamweaver       Windows     dreamweaver	
+    Photoshop         Windows     photoshp, photoshop
+    MS Word           Windows     winword, word
+    MS Excel          Windows     excel
+    MS Powerpoint     Windows     powerpnt, powerpoint
 
-    Because plugins do not require the path of the editor application to work,
-    you can simply specify the plugin module name for your editor in the
-    configuration file if desired. For example, to specify Photoshop for all
-    image files, use add the following section to your config file
-    (ZopeEdit.ini on Windows)::
+External editor will attempt to load a plugin for any application before
+using the general editor control method. It does this by matching the
+name of the application executable file (sans extension) in the editor
+command line with the available plugins. 
 
-      [content-type:image/*]
-      editor=photoshop
+Because plugins do not require the path of the editor application to work,
+you can simply specify the plugin module name for your editor in the
+configuration file if desired. For example, to specify Photoshop for all
+image files, use add the following section to your config file
+(ZopeEdit.ini on Windows)::
 
-    This is only a shortcut and specifying the full application path will
-    still use the plugin where possible.
+    [content-type:image/*]
+    editor=photoshop
 
-    Plugin Notes
+This is only a shortcut and specifying the full application path will
+still use the plugin where possible.
 
-      Photoshop -- Photoshop's COM API is quite limited, and external editor
-      cannot detect that you have closed a file until you exit the entire
-      application (it can still detect saves). Therefore you may want to turn 
-      off DAV locking (use_locks=0) or borrow locks (always_borrow_locks=1)
-      when using it.
+Plugin Notes
+------------
 
-      Dreamweaver -- External editor cannot detect when you have finished 
-      editing a single file. Objects edited with Dreamweaver will remain
-      locked on the server until you exit the application. As with Photoshop
-      above, you may want to turn off locking for Dreamweaver.
+Photoshop -- Photoshop's COM API is quite limited, and external editor
+cannot detect that you have closed a file until you exit the entire
+application (it can still detect saves). Therefore you may want to turn 
+off DAV locking (use_locks=0) or borrow locks (always_borrow_locks=1)
+when using it.
 
-      If your favorite editor needs a plugin because the general support is
-      not good enough, please let me know. Keep in mind that I must be able to
-      run a copy of the application in order to develop a plugin for it. So, 
-      unless the application is free, or a full demo is available for download
-      I won't be able to help much. Plugins are not difficult to write, and I
-      encourage you to write one for your favorite editor, start by reading
-      one of the existing ones. I am happy to include third-party plugins with
-      the distribution.
-    
-  Permissions
+Dreamweaver -- External editor cannot detect when you have finished 
+editing a single file. Objects edited with Dreamweaver will remain
+locked on the server until you exit the application. As with Photoshop
+above, you may want to turn off locking for Dreamweaver.
+
+If your favorite editor needs a plugin because the general support is
+not good enough, please let me know. Keep in mind that I must be able to
+run a copy of the application in order to develop a plugin for it. So, 
+unless the application is free, or a full demo is available for download
+I won't be able to help much. Plugins are not difficult to write, and I
+encourage you to write one for your favorite editor, start by reading
+one of the existing ones. I am happy to include third-party plugins with
+the distribution.
+
+Permissions
+-----------
+
+External editing is governed by the permission "Use external editor".
+Users with this permission can launch external editor from editable
+objects. In order to save changes, users will need additional permissions
+appropriate for the objects they are editing.
+
+If users wish to use the built-in locking support, they must have the
+"WebDAV access", "WebDAV Lock items" and "WebDAV Unlock items" permissions
+for the objects they are editing.
+
+If these permissions are not set in Zope, then the helper application will
+receive unauthorized errors from Zope which it will present to the user.
   
-    External editing is governed by the permission "Use external editor".
-    Users with this permission can launch external editor from editable
-    objects. In order to save changes, users will need additional permissions
-    appropriate for the objects they are editing.
-    
-    If users wish to use the built-in locking support, they must have the
-    "WebDAV access", "WebDAV Lock items" and "WebDAV Unlock items" permissions
-    for the objects they are editing.
-    
-    If these permissions are not set in Zope, then the helper application will
-    receive unauthorized errors from Zope which it will present to the user.
-      
-  Integrating with External Editor
-  
-    The external editor product in zope installs a globally available object
-    that can format objects accessible through FTP/DAV for use by the helper
-    application. You can take advantage of this functionality easily in your
-    own content management applications.
-    
-    Say you have an FTP editable object, "document", in a Zope folder named
-    "my_stuff". The URL to view the object would be::
-    
-      http://zopeserver/my_stuff/document
-      
-    The URL to kick off the external editor on this document would be::
-    
-      http://zopeserver/my_stuff/externalEdit_/document
-      
-    Now, this may look a bit odd to you if you are used to tacking views on to
-    the end of the URL. Because 'externalEdit_' is required to work on Python
-    Scripts and Page Templates, which swallow the remaining path segments on
-    the URL following themselves, you must put the call to 'externalEdit_'
-    *directly before* the object to be edited. You could do this in ZPT using
-    some TAL in a Page Template like::
+Integrating with External Editor
+--------------------------------
 
-      <a href='edit' 
-         attributes='href
-         string:${here/aq_parent/absolute_url}/externalEdit_/${here/getId}'>
-         Edit Locally
-      </a>
-      
-    As an alternative, you can also pass the path the object you want to edit
-    directly to the externalEdit_ object when you call its index_html method.
-    It can be called either directly by URL or from a python script.
-    externalEdit_ will return the proper response data for the object to edit.
-    Here are some examples::
+The external editor product in zope installs a globally available object
+that can format objects accessible through FTP/DAV for use by the helper
+application. You can take advantage of this functionality easily in your
+own content management applications.
 
-      http://zopeserver/externalEdit_?path=/my_stuff/document
-      
-      return context.externalEdit_.index_html(
-          context.REQUEST, context.RESPONSE, path='/my_stuff/document')
+Say you have an FTP editable object, "document", in a Zope folder named
+"my_stuff". The URL to view the object would be::
 
-    When integrating External Editor with a CMS that already uses DAV
-    locks, it will, by default allow users to borrow locks made on the server
-    after displaying a confirmation dialog box. Although you can make this
-    automatic by specifying 'always_borrow_locks = 1' in the External Editor
-    config file, it may be desireable to make this the default behavior when
-    using that server. To facilitate this, you can specify that locks 
-    should be automatically borrowed in the URL (New in 0.7)::
+    http://zopeserver/my_stuff/document
 
-      http://zopeserver/my_stuff/externalEdit_/document?borrow_lock=1
-      
-    External Editor also defines a global method that you can call to insert
-    pencil icon links for appropriate objects. The method automatically checks
-    if the object supports external editing and whether the user has the "Use
-    external editor" permission for that object. If both are true, it returns
-    the HTML code to insert the external editor icon link. Otherwise it returns
-    an empty string.
+The URL to kick off the external editor on this document would be::
 
-    The method is 'externalEditLink_(object)'. The object argument is the
-    object to create the link for if appropriate. Here is some example page
-    template code that inserts links to objects in the current folder and the
-    external editor icon where appropriate::
+    http://zopeserver/my_stuff/externalEdit_/document
 
-      <div tal:repeat="object here/objectValues">
-        <a href="#" 
-           tal:attributes="href object/absolute_url"
-           tal:content="object/title_or_id">Object Title</a>
-        <span tal:replace="structure python:here.externalEditLink_(object)" />
-      </div>       
+Now, this may look a bit odd to you if you are used to tacking views on to
+the end of the URL. Because `externalEdit_` is required to work on Python
+Scripts and Page Templates, which swallow the remaining path segments on
+the URL following themselves, you must put the call to `externalEdit_`
+*directly before* the object to be edited. You could do this in ZPT using
+some TAL in a Page Template like::
 
-  Conclusion
-  
-    I hope you enjoy using this software. If you have any comments, suggestions
-    or would like to report a bug, send an email to the author:
-    
-      Casey Duncan
-      
-      casey_duncan at yahoo.com
+    <a href='edit' 
+       attributes='href
+       string:${here/aq_parent/absolute_url}/externalEdit_/${here/getId}'>
+       Edit Locally
+    </a>
 
---
+As an alternative, you can also pass the path the object you want to edit
+directly to the `externalEdit_` object when you call its index_html method.
+It can be called either directly by URL or from a python script.
+`externalEdit_` will return the proper response data for the object to edit.
+Here are some examples::
 
-(c) 2003, Casey Duncan and Zope Corporation. All rights reserved.
+    http://zopeserver/externalEdit_?path=/my_stuff/document
+
+    return context.externalEdit_.index_html(
+        context.REQUEST, context.RESPONSE, path='/my_stuff/document')
+
+When integrating External Editor with a CMS that already uses DAV
+locks, it will, by default allow users to borrow locks made on the server
+after displaying a confirmation dialog box. Although you can make this
+automatic by specifying 'always_borrow_locks = 1' in the External Editor
+config file, it may be desireable to make this the default behavior when
+using that server. To facilitate this, you can specify that locks 
+should be automatically borrowed in the URL (New in 0.7)::
+
+    http://zopeserver/my_stuff/externalEdit_/document?borrow_lock=1
+
+External Editor also defines a global method that you can call to insert
+pencil icon links for appropriate objects. The method automatically checks
+if the object supports external editing and whether the user has the "Use
+external editor" permission for that object. If both are true, it returns
+the HTML code to insert the external editor icon link. Otherwise it returns
+an empty string.
+
+The method is 'externalEditLink_(object)'. The object argument is the
+object to create the link for if appropriate. Here is some example page
+template code that inserts links to objects in the current folder and the
+external editor icon where appropriate::
+
+    <div tal:repeat="object here/objectValues">
+      <a href="#" 
+         tal:attributes="href object/absolute_url"
+         tal:content="object/title_or_id">Object Title</a>
+      <span tal:replace="structure python:here.externalEditLink_(object)" />
+    </div>
+
+Conclusion
+----------
+
+I hope you enjoy using this software. If you have any comments, suggestions
+or would like to report a bug, send an email to the author:
+
+Casey Duncan
+
+`(c) 2003, Casey Duncan and Zope Corporation. All rights reserved.`

Modified: Products.ExternalEditor/trunk/setup.py
===================================================================
--- Products.ExternalEditor/trunk/setup.py	2008-05-03 19:21:38 UTC (rev 86275)
+++ Products.ExternalEditor/trunk/setup.py	2008-05-03 19:22:02 UTC (rev 86276)
@@ -4,6 +4,8 @@
 setup(name='Products.ExternalEditor',
       version='0.9.4',
       description="Zope External Editor",
+      long_description=open("README.txt").read() + "\n" + \
+                       open("CHANGES.txt").read(),
       classifiers=[
         'Framework :: Zope2',
       ],



More information about the Checkins mailing list