Mercurial > hg > xemacs-beta
diff man/hm--html-mode.texi @ 116:9f59509498e1 r20-1b10
Import from CVS: tag r20-1b10
author | cvs |
---|---|
date | Mon, 13 Aug 2007 09:23:06 +0200 |
parents | |
children | 25f70ba0133c |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/man/hm--html-mode.texi Mon Aug 13 09:23:06 2007 +0200 @@ -0,0 +1,2033 @@ +\input texinfo @c -*-texinfo-*- +@comment %**start of header (This is for running Texinfo on a region.) +@setfilename hm--html-mode.info +@settitle HM HTML Mode +@setchapternewpage odd +@comment %**end of header (This is for running Texinfo on a region.) +@comment $Id: hm--html-mode.texi,v 1.2 1997/03/28 02:29:28 steve Exp $ +@ifinfo +This file documents the Elisp package @code{hm--html-menus}. + +Copyright @copyright{} 1997 Heiko Münkel + +Permission is granted to make and distribute verbatim copies of +this manual provided the copyright notice and this permission notice +are preserved on all copies. + +@ignore +Permission is granted to process this file through TeX and print the +results, provided the printed document carries a copying permission +notice identical to this one except for the removal of this paragraph +(this paragraph not being relevant to the printed manual). + +@end ignore +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided also that the +sections entitled ``Distribution'' and ``General Public License'' are +included exactly as in the original, and provided that the entire +resulting derived work is distributed under the terms of a permission +notice identical to this one. + +Permission is granted to copy and distribute translations of this manual +into another language, under the above conditions for modified versions, +except that the sections entitled ``Distribution'' and ``General Public +License'' may be included in a translation approved by the author instead +of in the original English. + +@end ifinfo +@iftex +@input umlaute.texinfo +@end iftex +@titlepage +@sp 10 +@center @titlefont{The Elisp Package hm---html-menus} + +@sp 4 +@center by Heiko Münkel +@sp 4 +@center Version 5.6, March 1997 +@page +@vskip 0pt plus 1filll +Copyright @copyright{} 1997 Heiko Münkel +@sp 4 +Permission is granted to make and distribute verbatim copies of +this manual provided the copyright notice and this permission notice +are preserved on all copies. + +@ignore +Permission is granted to process this file through TeX and print the +results, provided the printed document carries a copying permission +notice identical to this one except for the removal of this paragraph +(this paragraph not being relevant to the printed manual). + +@end ignore +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided also that the +sections entitled ``Distribution'' and ``General Public License'' are +included exactly as in the original, and provided that the entire +resulting derived work is distributed under the terms of a permission +notice identical to this one. + +Permission is granted to copy and distribute translations of this manual +into another language, under the above conditions for modified versions, +except that the sections entitled ``Distribution'' and ``General Public +License'' may be included in a translation approved by the author instead +of in the original English. + +@end titlepage + +@comment The Top node contains the master menu for the Info file. +@comment This appears only in the Info file, not in the printed manual. + +@node Top, License, (dir), (dir) +@comment node-name, next, previous, up + + + +@menu +* License:: Your rights +* Overview:: Overview +* Distribution:: How to get the latest version +* Installation:: How to install the package +* Customization:: How to customize the package +* Add New Elements:: How to add new HTML elements +* Use With psgml-html:: Use this package as an add-on minor mode +* Internal Drag And Drop:: The HTML independent drag and drop package +* Template Minor Mode:: The HTML independent template package +* Bug Reports:: How and to whom you should send bug reports +* Concept Index:: Concept Index +* Function Index:: Function Index +* Variable Index:: Variable Index +@end menu + + +@node License, Overview, Top, Top +@comment node-name, next, previous, up +@chapter License +@cindex license to copy hm---html-menus +@cindex General Public License +Copyright (C) 1993 - 1997 Heiko Münkel, muenkel@@tnt.uni-hannover.de +@sp 2 +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + +@node Overview, Distribution, License, Top +@comment node-name, next, previous, up +@chapter Overview +@cindex overview +@cindex version +@findex hm--html-mode +@findex hm--html-minor-mode + +This document describes the Elisp package @emph{hm---html-menus 5.6}. + +The version of the document is:@* +$Id: hm--html-mode.texi,v 1.2 1997/03/28 02:29:28 steve Exp $ + +The package provides commands and various popup and pulldown menus for +an HTML mode called @dfn{hm---html-mode}, a mode for writing HTML pages +for the World Wide Web (WWW). It also provides a minor mode +(@dfn{hm---html-minor-mode}), which can be used together with another +HTML major mode, like the psgml-html modes in XEmacs 19.14. + +You can easily view the HTML documents by calling the browsers w3 (a +nice elisp package from William M. Perry), Netscape, or Mosaic directly +from the pulldown menu of the mode. + +An integrated (emacs internal) drag and drop interface makes it +very easy to insert links or images, by just clicking on them. + +When appropriate, identical commands work on selected +regions. You'll see the same menu items and can use the same +keystrokes, whether a region is active or not, but if it's +active, then the commands are operating on the region. Therefore, you +don't need to learn different menus or keys for similar functions! + +One major design goal of the package was to make it easier to write a +HTML page, even if you don't know much about HTML. For that I've tried +to put more knowledge about HTML, URL's and so on in it than an SGML based +mode could find out from a DTD file. In most cases the user gets help to +construct a specific link by examples, or by a completion list with +possible input strings. And you can choose between an expert popup menu +and an novice popup menu interactively. The novice menu contains only +the basic HTML elements, so that you're not bothered by the quantity of +different HTML elements. And if you want to use more HTML elements, then +you can easily switch to the expert menus. + +You can configure the html mode with a special configuration file for +your site and with another file specific to a user. Look at the +customization chapter for this, @xref{Customization, Customization}. + + +@node Distribution, Installation, Overview, Top +@comment node-name, next, previous, up +@chapter Distribution +The name of the distribution file is +@file{hm--html-menus-<version>.tar.gz}, where @var{<version>} is the +version number. The package is part of the XEmacs. You should always +find the latest version of the package on the following ftp server: +@display +@emph{ftp.tnt.uni-hannover.de} in @file{/pub/editors/xemacs/contrib} +@end display +You should also find the package in the USA on the ftp server +(which is mirrored on many other servers in the world): +@display +@emph{sunsite.unc.edu} in @file{/pub/Linux/apps/editors/emacs} +@end display +@menu +* Contents:: Contents of the distribution +@end menu + +@node Contents, , Distribution, Distribution +@comment node-name, next, previous, up +@section Contents +@cindex contents +The package consists of the following files: + +@table @file +@item README +Please, read this first. +@itemx README-EMACS-19 +Some special hints only for GNU Emacs 19 users. +@itemx ANNOUNCEMENT +Text of the announcement of this package. +@itemx LSM +Entry for the Linux Software Map. +@itemx NEWS +The NEWS and Change log file. +@itemx adapt.el +Provides (emulates XEmacs) functions for the use of this package with +GNU Emacs 19. +@itemx hm--html.el +Provides functions to write html pages. It defines all commands which +insert html elements and entities. +@itemx hm--html-indentation.el +Provides the lisp code for the indentation. +@itemx hm--html-keys.el +Defines the key bindings. +@itemx hm--html-menu.el +Provides the menus. +@itemx hm--html-mode.el +Provides the functions for the definition of the hm--html-mode and the +hm--html-minor-mode. This is the main file of the package. +@itemx hm--html-not-standard.el +Provides functions to insert some non standard html elements. This file +is not evaluated by default and it may be a bad idea to use it. +@itemx hm--html-configuration.el +Configuration file for the html mode. All the user variables are defined +in this file. +@itemx hm--html-drag-and-drop.el +Defines the HTML-specific functions for the drag and drop interface. +@itemx hm--date.el +Defines the function hm--date, which returns the date in the format +"day-month-year" like "30-Jun-1993". +@itemx html-view.el +Ron Tapia's html-view.el to view html pages in Mosaic. It is +patched for use with XEmacs. +@itemx internal-drag-and-drop.el +Provides the general (html-mode independent) functions of the drag and +drop interface. +@itemx templates.doc +Describes the syntax of the templates provided in the file +@file{tmpl-minor-mode.el} +@itemx tmpl-minor-mode.el +Provides functions for the tmpl-minor-mode. With this mode you can +expand templates, which are described in the file +@file{templates-syntax.doc} (look at the files +@file{command-description.html.tmpl} and @file{frame.html.tmpl} for +examples). Templates can be expanded automatically, if you include a +file with templates via the html pulldown menu item "Templates ..." or +with the item "Templates (fixed dirs)...". +@itemx command-description.html.tmpl +Template file for the use with the tmpl-minor-mode. +@itemx frame.html.tmpl +Template file, provides a simple frame. +@itemx doc/hm--html-mode.texinfo +Package documentation in the Texinfo format. +@itemx doc/umlaute.texinfo +Texinfo include file for German vowel mutation (deutsche Umlaute). +@end table + +@node Installation, Customization, Distribution, Top +@comment node-name, next, previous, up +@chapter Installation +@cindex installation + + +@enumerate +@item Put all the *.el files in one of your XEmacs (or emacs) lisp load +directories (e.g. site-lisp/hm--html-menus). + +@item Put the following in your .emacs (or default.el or site-init.el): +@lisp +(autoload 'hm--html-mode "hm--html-mode" "HTML major mode." t) +(autoload 'hm--html-minor-mode "hm--html-mode" "HTML minor mode." t) +(or (assoc "\\.html$" auto-mode-alist) + (setq auto-mode-alist (cons '("\\.html$" . hm--html-mode) + auto-mode-alist))) + +(autoload 'tmpl-expand-templates-in-buffer "tmpl-minor-mode" + "Expand all templates in the current buffer." t) + +(autoload 'html-view-start-mosaic "html-view" "Start Xmosaic." t) +(autoload 'html-view-view-buffer + "html-view" + "View the current buffer in Xmosaic." + t) +(autoload 'html-view-view-file + "html-view" + "View a file in Xmosaic." + t) +(autoload 'html-view-goto-url + "html-view" + "Goto url in Xmosaic." + t) +(autoload 'html-view-get-display + "html-view" + "Get the display for Xmosaic (i.e. hostxy:0.0)." + t) +@end lisp + +The above lines assume that you have not already installed another +html mode. If this isn't true, then you should use the following: +@lisp +(setq auto-mode-alist (cons '("\\.html$" . hm--html-mode) + auto-mode-alist)) +@end lisp + +instead of: +@lisp +(or (assoc "\\.html$" auto-mode-alist) + (setq auto-mode-alist (cons '("\\.html$" . hm--html-mode) + auto-mode-alist))) +@end lisp +If you want to use the hm--html-minor-mode together +with the psgml-html modes, then you should add the following +line (works only in XEmacs version >= 19.15 and != 20.0): +@lisp +(add-hook 'html-mode-hook 'hm--html-minor-mode) +@end lisp +@end enumerate + +@node Customization, Add New Elements, Installation, Top +@comment node-name, next, previous, up +@chapter Customization +@cindex customization +@cindex configuration + +You should be able to use the package after its installation without +any further customization. But it contains a lot of user variables to +adapt the package better to your special needs. How to do this is +described in this chapter. + +@menu +* Customization (Configuration) Files:: +* Customization Variables:: +@end menu + +@node Customization (Configuration) Files, Customization Variables, Customization, Customization +@comment node-name, next, previous, up +@section Customization (Configuration) Files +@cindex customization files +@cindex configuration files + +This package uses 3 different files to customize the mode, but you need +not use all of them. Only one of them, the file +@file{hm--html-configuration.el} is delivered together with the package. +The reason for three different files is to provide the opportunity to +have different customization for the package, the site and the +user. There's also a pulldown menu item to reload all customization +files. The files are described in the following sections. + +@menu +* Where Are All The Customization Variables Defined:: +* Where To Put Site Specific Customization:: +* Where To Put User Specific Customization:: +@end menu + +@node Where Are All The Customization Variables Defined, Where To Put Site Specific Customization, Customization (Configuration) Files, Customization (Configuration) Files +@comment node-name, next, previous, up +@subsection Where Are All The Customization Variables Defined +@cindex package specific customization +@cindex hm--configuration.el +@vindex HTML_CONFIG_FILE + +All variables which can be used to customize the mode are defined in +the package configuration file @file{hm--configuration.el}. You should +take a look at this file if you don't find how to customize a feature +in this documentation (the documentation of a program is never as +complete as its program code :-). + +This file is searched in one of your lisp load directories. You can +change this by setting the environment variable @code{HTML_CONFIG_FILE} +to another file. But I don't recommend this. + +@emph{Note}: This file is loaded before the other customization files, +so that its definitions could be overwritten. All variables are set by +@code{defvar}, so that its values could also be overwritten with +@code{setq} in any standard emacs customization files (e.g. in +@file{.emacs}). + + +@node Where To Put Site Specific Customization, Where To Put User Specific Customization, Where Are All The Customization Variables Defined, Customization (Configuration) Files +@comment node-name, next, previous, up +@subsection Where To Put Site Specific Customization +@cindex site specific customization +@cindex hm--site-configuration-file.el +@vindex HTML_SITE_CONFIG_FILE +@vindex hm--html-site-config-file + +In general all users at a site are writing their html pages for the same +WWW server. Therefore it is very likely that most of the customizations +are site specific, and only a few are user specific. However, you +don't have to use a site specific customization if you don't want one. + +If you'd like to make a site specific customization of +@code{hm--html-mode}, it's possible to put it in a special file called +@file{hm--site-configuration-file.el}. If you do this, you have to set +either the lisp variable @code{hm--html-site-config-file} or the +environment variable @code{HTML_SITE_CONFIG_FILE} to the file and its +path. If you write the filename without its extension (.el), emacs +tries first to load a compiled version of the file. + +The environment variables overwrite the lisp variables. + +You can also put the site specific customization in any standard emacs +customization file like, @file{default.el}. But an advantage to +using @file{hm--site-configuration-file.el} is that it is very likely +you will be able to use this file with future versions of the +package. I'll try to make it as backward compatible as possible. + +@emph{Note}: This file is loaded after the package customization file +and before the user customization file. + +@node Where To Put User Specific Customization, , Where To Put Site Specific Customization, Customization (Configuration) Files +@comment node-name, next, previous, up +@subsection Where To Put User Specific Customization +@cindex user specific customization +@cindex ~/.hm--configuration-file.el +@vindex HTML_USER_CONFIG_FILE +@vindex hm--html-user-config-file + +User specific customization can be put in the file +@file{.hm--configuration-file.el}, which is searched by default in the +home directory of the user. This can be overwritten by setting either +the environment variable @code{HTML_USER_CONFIG_FILE} or the lisp +variable @code{hm--html-user-config-file} to the name of the file and +its path. If you write the filename without its extension (.el), emacs +tries first to load a compiled version of the file. + +You can also put the user specific customization in your +@file{.emacs}. It's up to you to decide which way is better. + +@emph{Note}: This file is loaded after the package and the site specific +one. Therefore it overwrites all other customization files. + + +@node Customization Variables, , Customization (Configuration) Files, Customization +@comment node-name, next, previous, up +@section Customization Variables + +In the following subsections the main customization variables are +described. + +@menu +* User Name/Signature:: +* Switching Between Expert And Novice Menus :: +* HTML Doctype:: +* Defaults Used For Generating Links:: +* Templates:: +* Deleting Automounter Path Prefix:: +* Automatic Insert Of Information:: +* Latin 1 Characters:: +* Drag And Drop:: +* Font Lock Keywords:: +* Prefix Keys:: +* Pulldown Menu Names:: +* Hook Variables:: +* Previewing HTML Files:: +* Meta Element:: +* Indentation:: +@end menu + + +@node User Name/Signature, Switching Between Expert And Novice Menus , Customization Variables, Customization Variables +@comment node-name, next, previous, up +@subsection User Name/Signature +@cindex user name +@cindex signature +@vindex hm--html-username +@vindex hm--html-signature-file + +@itemize @bullet +@item +@code{hm--html-username}: Your real name. This is used as the name of +the signature links. You need only specify it if your name in the +file @file{/etc/passwd} isn't the one you'd like to see in the html +files. Otherwise this may be set to @code{nil}. +@item +@code{hm--html-signature-file}: The link used in your signature. In +general this should be a link to your home page. +@end itemize + + +@node Switching Between Expert And Novice Menus , HTML Doctype, User Name/Signature, Customization Variables +@comment node-name, next, previous, up +@subsection Switching Between Expert And Novice Menus +@cindex expert menus +@cindex novice menus +@vindex hm--html-expert + +@itemize @bullet +@item +@code{hm--html-expert}: If you're a html novice and don't want to be +bothered with lots of possible html elements, then you should use the +novice popup menus. For that, set this variable to @code{nil}, +which is the default. But if you are more familiar with html and would +like to use more html elements, then you should use the expert menus and +set this variable to @code{t}. +@end itemize + + +@node HTML Doctype, Defaults Used For Generating Links, Switching Between Expert And Novice Menus , Customization Variables +@comment node-name, next, previous, up +@subsection HTML Doctype +@vindex hm--html-html-doctype-version +@cindex HTML doctype + +@itemize @bullet +@item +@code{hm--html-html-doctype-version}: The HTML version. This is used in +the doctype element. Change this if you use non HTML 3.2 elements. This +package (@xref{Overview, version}.) defines by default only HTML 3.2 elements. +@end itemize + + +@node Defaults Used For Generating Links, Templates, HTML Doctype, Customization Variables +@comment node-name, next, previous, up +@subsection Defaults Used For Generating Links +@cindex links + +One of the main features of @code{hm--html-mode} is its easy ways to +insert special links to html pages, ftp servers, news servers and so +on. I think that most people will have their own (this may be site +specific. @xref{Where To Put Site Specific Customization, Where To Put +Site Specific Customization}.) favourite servers, directories and so +on. You may customize the default values and the alists with useful +alternatives, which are used from the mode in the inserting functions +for the links. + +@menu +* Your Favourite HTTP Server:: +* Links to WWW Servers:: +* Links To Files:: +* Links To FTP Servers:: +* Links To Emacs Info Files:: +* Links To Gopher Servers:: +* Links To WAIS Gateways:: +* Links To The Mail Gateway:: +* Links For Sending Mail:: +* Links To The Program Gateway:: +* Links To The Local Program Gateway:: +* URL For Forms And Image Tags:: +* Marking Of Examples:: +@end menu + + +@node Your Favourite HTTP Server, Links to WWW Servers, Defaults Used For Generating Links, Defaults Used For Generating Links +@comment node-name, next, previous, up +@subsubsection Your Favourite HTTP Server +@cindex favourite HTTP server +@vindex hm--html-favorite-http-server-host-name + +@itemize @bullet +@item +@code{hm--html-favorite-http-server-host-name}: The name of your +favorite http server host. It must be specified! This variable is used +in many other variables. +@end itemize + + +@node Links to WWW Servers, Links To Files, Your Favourite HTTP Server, Defaults Used For Generating Links +@comment node-name, next, previous, up +@subsubsection Links to WWW Server +@cindex WWW server links +@cindex HTTP links +@vindex hm--html-html-hostname:port-default +@vindex hm--html-html-hostname:port-alist +@vindex hm--html-html-path-alist + +@itemize @bullet +@item +@code{hm--html-html-hostname:port-default}: Default hostname with port +for http links to a HTML server. +@item +@code{hm--html-html-hostname:port-alist}: Alist with hostnames and ports +for http links to HTML servers. It contains useful alternatives. +@item +@code{hm--html-html-path-alist}: Alist with directories for the HTML +server. Each alist element must consist of a number and a directory +string. The number is used to select the directory during the query +about the directory for an http link. +@end itemize + + +@node Links To Files, Links To FTP Servers, Links to WWW Servers, Defaults Used For Generating Links +@comment node-name, next, previous, up +@subsubsection Links To Files +@cindex file gateway links +@vindex hm--html-file-path-alist + +@itemize @bullet +@item +@code{hm--html-file-path-alist}: Alist with directories for the file +gateway. Each alist element must consist of a number and a directory +string. The number is used to select the directory during the query +about the directory for a file link. +@end itemize + + +@node Links To FTP Servers, Links To Emacs Info Files, Links To Files, Defaults Used For Generating Links +@comment node-name, next, previous, up +@subsubsection Links To FTP Servers +@cindex FTP links +@vindex hm--html-ftp-hostname:port-default +@vindex hm--html-ftp-hostname:port-alist +@vindex hm--html-ftp-path-alist + +@itemize @bullet +@item +@code{hm--html-ftp-hostname:port-default}: Default hostname with port +for links to an ftp server. This is for the default FTP server. In general +you don't need to specify a port for this. +@item +@code{hm--html-ftp-hostname:port-alist}: Alist with hostnames and ports +for links to ftp servers. It contains useful alternatives. In general +you don't need to specify ports for the ftp servers. +@item +@code{hm--html-ftp-path-alist}: Alist with directories for the ftp +server links. It contains useful alternatives with /pub, /pub/gnu and +so on. Each alist element must consist of a number and a directory +string. The number is used to select the directory during the query +about the directory for an ftp link. +@end itemize + + +@node Links To Emacs Info Files, Links To Gopher Servers, Links To FTP Servers, Defaults Used For Generating Links +@comment node-name, next, previous, up +@subsubsection Links To Emacs Info Files +@cindex emacs info links +@vindex hm--html-info-hostname:port-alist +@vindex hm--html-info-hostname:port-default +@vindex hm--html-info-path-alist + +@itemize @bullet +@item +@code{hm--html-info-hostname:port-default}: Default hostname with port +for the Info gateway. +@item +@code{hm--html-info-hostname:port-alist}: Alist with hostnames and ports +for Info gateways. It contains useful alternatives. +@item +@code{hm--html-info-path-alist}: Alist with directories for the Info +gateway. This may be a list with all of your emacs info directories. +@end itemize + + +@node Links To Gopher Servers, Links To WAIS Gateways, Links To Emacs Info Files, Defaults Used For Generating Links +@comment node-name, next, previous, up +@subsubsection Links To Gopher Servers +@cindex Gopher gateway links +@vindex hm--html-gopher-hostname:port-default +@vindex hm--html-gopher-hostname:port-alist +@vindex hm--html-gopher-doctype-default +@vindex hm--html-gopher-doctype-alist +@vindex hm--html-gopher-anchor-alist + +There are a lot of useful gopher information servers on the Internet. +You can access them with a gopher browser or with a WWW browser. In the +latter case you have to use the gopher gateway. + +@itemize @bullet +@item +@code{hm--html-gopher-hostname:port-default}: Default hostname with port +for links to the default gopher server. +@item +@code{hm--html-gopher-hostname:port-alist}: Alist with hostnames and +ports for links to gopher servers. It contains useful alternatives. +@item +@code{hm--html-gopher-doctype-default}: For gopher links you have to +specify the doctype. In most cases this should be the string \"/1\". +Therefore this is the default doctype, but you can change it to +another. +@item +@code{hm--html-gopher-doctype-alist}: Alist with doctype strings for links +to a gopher server. The strings \"/1\", \"/11\" and \"/00\" are the only +doctype strings that I know. Please let me know if there are other +strings. +@item +@code{hm--html-gopher-anchor-alist}: Alist with directories for links to +a gopher server. It contains useful alternatives for the main gopher +servers. Each alist element must consist of a number and a directory +string. The number is used to select the directory during the query +about the directory for a local program gateway link. +@end itemize + + +@node Links To WAIS Gateways, Links To The Mail Gateway, Links To Gopher Servers, Defaults Used For Generating Links +@comment node-name, next, previous, up +@subsubsection Links To WAIS Gateways +@cindex WAIS gateway links +@vindex hm--html-wais-hostname:port-alist +@vindex hm--html-wais-hostname:port-default +@vindex hm--html-wais-servername:port-alist +@vindex hm--html-wais-servername:port-default +@vindex hm--html-wais-path-alist + +You can either make a link direct to a WAIS server (it may be that not +all WWW browsers support this) or an http link to a server (relay host) +which queries the WAIS server. The variables +@code{hm--html-wais-hostname:port-default} and +@code{hm--html-wais-hostname} refer to these relay hosts and the +variables @code{hm--html-wais-servername:port-default} and +@code{hm--html-wais-servername:port-alist} refer to the WAIS servers. + +@itemize @bullet +@item +@code{hm--html-wais-hostname:port-default}: Default hostname of the +relay host with port for the WAIS gateway. +@item +@code{hm--html-wais-hostname:port-alist}: Alist with hostnames of +possible relay hosts and ports for the WAIS gateway. It contains +useful alternatives. +@item +@code{hm--html-wais-servername:port-default}: Default WAIS servername +with port for the WAIS gateway. +@item +@code{hm--html-wais-servername:port-alist}: Alist with WAIS servernames +and ports for the WAIS gateway. It contains useful alternatives. +@item +@code{hm--html-wais-path-alist}: Alist with directories for the wais gateway. +@end itemize + + +@node Links To The Mail Gateway, Links For Sending Mail, Links To WAIS Gateways, Defaults Used For Generating Links +@comment node-name, next, previous, up +@subsubsection Links To The Mail Gateway +@cindex Mail gateway links +@cindex Mail folder links +@vindex hm--html-mail-hostname:port-default +@vindex hm--html-mail-hostname:port-alist +@vindex hm--html-mail-path-alist + +The following variables are for customizing the insertion of links to a mail +folder. You need a special server for this, which sends the email back +to the browser. + +@itemize @bullet +@item +@code{hm--html-mail-hostname:port-default}: Default hostname with port +for the mail gateway. +@item +@code{hm--html-mail-hostname:port-alist}: Alist with hostnames and ports +for the mail gateway. It contains useful alternatives. +@item +@code{hm--html-mail-path-alist}: Alist with directories for the mail +gateway. In these directories you'll probably find mail folders. Each +alist element must consist of a number and a directory string. The +number is used to select the directory during the query about the +directory for a mail folder link. +@end itemize + + +@node Links For Sending Mail, Links To The Program Gateway, Links To The Mail Gateway, Defaults Used For Generating Links +@comment node-name, next, previous, up +@subsubsection Links For Sending Mail +@cindex mailto links +@vindex hm--html-mailto-alist + +@itemize @bullet +@item +@code{hm--html-mailto-alist}: Alist with mail addresses for the mailto +alist. The value of `user-mail-address' will also be added by the +package to this alist. +@end itemize + + +@node Links To The Program Gateway, Links To The Local Program Gateway, Links For Sending Mail, Defaults Used For Generating Links +@comment node-name, next, previous, up +@subsubsection Links To The Program Gateway +@cindex program gateway links +@vindex hm--html-proggate-hostname:port-default +@vindex hm--html-proggate-hostname:port-alist +@vindex hm--html-proggate-allowed-file + +The program gateway is a special TNT site specific gateway for starting +programs out of a html page. The programs are started by a special +server, which looks in an allowed file to determine if it is allowed to +start the program. This is necessary because the programs are running +under the user id of the server. We're only allowed to start simple +display programs like man, ls and so on. + +@itemize @bullet +@item +@code{hm--html-proggate-hostname:port-default}: Default hostname with +port for the proggate server. +@item +@code{hm--html-proggate-hostname:port-alist}: Alist with hostnames and +ports for the proggate server. It contains useful alternatives. +@item +@code{hm--html-proggate-allowed-file}: The filename (with path) of the +proggate allowed file. +@end itemize + + +@node Links To The Local Program Gateway, URL For Forms And Image Tags, Links To The Program Gateway, Defaults Used For Generating Links +@comment node-name, next, previous, up +@subsubsection Links To The Local Program Gateway +@cindex local program gateway links +@vindex hm--html-local-proggate-path-alist + +Another TNT site specific way to start programs from a html page. These +programs are started with the id of the user on the host where the +client (browser) is running. Therefore no restriction about the allowed +programs is made. With this you can start only programs and do only +things, which you can do also without the WWW browser. + +@itemize @bullet +@item +@code{hm--html-local-proggate-path-alist}: Alist with directories for +the local program gateway. Contains directories, where you can find +programs. +@end itemize + + +@node URL For Forms And Image Tags, Marking Of Examples, Links To The Local Program Gateway, Defaults Used For Generating Links +@comment node-name, next, previous, up +@subsubsection URL For Forms And Image Tags +@cindex forms URL +@cindex image URL +@vindex hm--html-url-alist + +@itemize @bullet +@item +@code{hm--html-url-alist}: Alist with URL's for FORMS and IMAGE tags. +The cdr of each list contains symbols, which specifies the use of the +URL. +@end itemize + + +@node Marking Of Examples, , URL For Forms And Image Tags, Defaults Used For Generating Links +@comment node-name, next, previous, up +@subsubsection Marking Of Examples +@cindex color of help text +@cindex font of help text +@vindex hm--html-help-foreground +@vindex hm--html-help-background +@vindex hm--html-help-font + +The following variables are for marking the examples in the help +buffer. + +@itemize @bullet +@item +@code{hm--html-help-foreground}: The foreground color for highlighting +examples. +@item +@code{hm--html-help-background}: The background color for highlighting +examples. +@item +@code{hm--html-help-font}: The font for highlighting examples. +@end itemize + + +@node Templates, Deleting Automounter Path Prefix, Defaults Used For Generating Links, Customization Variables +@comment node-name, next, previous, up +@subsection Templates +@cindex templates +@vindex hm--html-template-dir +@vindex hm--html-frame-template-file +@vindex hm--html-automatic-expand-templates + +For inserting html template files you can customize where you keep your +templates. + +@itemize @bullet +@item +@code{hm--html-template-dir}: A directory with template files. It is now +also possible to use it as a list of directories. Look at the variable +@code{tmpl-template-dir-list} for further descriptions. If this +variable is set to a non-existent directory, then it defaults to the +directory where the package is in XEmacs. This is done during +loading the file @file{hm--html-configuration.el} (@xref{Where Are All +The Customization Variables Defined, Where Are All The Customization +Variables Defined}.). This may only be useful in XEmacs >= 19.12. +@item +@code{hm--html-frame-template-file}: File which is used as template for +a html frame. An example is in the package +@emph{hm--html-menus}. @xref{Contents, Contents}. +@item +@code{hm--html-automatic-expand-templates}: Automatic expansion of +templates. This feature needs the file @file{tmpl-minor-mode.el} from Heiko +Münkel (@cite{muenkel@@tnt.uni-hannover.de}), which is distributed with the +package hm--html-menus. +@item +@code{hm--html-template-filter-regexp}: Regexp for filtering out non +(html) template files in a directory. +@end itemize + + +@node Deleting Automounter Path Prefix, Automatic Insert Of Information, Templates, Customization Variables +@comment node-name, next, previous, up +@subsection Deleting Automounter Path Prefix +@cindex automounter path +@vindex hm--html-delete-wrong-path-prefix + +@itemize @bullet +@item +@code{hm--html-delete-wrong-path-prefix}: If non-nil, it specifies path-prefixes which should be deleted in paths. +The Sun automounter adds a temporary prefix to the automounted directories + (at our site the prefix is /tmp_mnt). But you can't select such a path +if the automounter has currently not mounted the directory, and so you +can't follow an html link which consists of such a path. To overcome +this behaviour, you can set this variable to the prefix +(e.g. "/tmp_mnt"). After that, the prefix should be stripped from the +paths during the creation of the links. ATTENTION: This variable is +used as a regular expression! It can be set to a string or to a list of +strings. +@end itemize + +@node Automatic Insert Of Information, Latin 1 Characters, Deleting Automounter Path Prefix, Customization Variables +@comment node-name, next, previous, up +@subsection Automatic Insert Of Information +@cindex automatic insert +@cindex date +@cindex changed comment +@cindex created comment +@vindex hm--html-automatic-new-date +@vindex hm--html-automatic-changed-comment +@vindex hm--html-automatic-created-comment + +The @code{hm--html-mode} automatically inserts some useful information in +html pages. This behaviour can be changed by the following variables. + +@itemize @bullet +@item +@code{hm--html-automatic-new-date}: t => The date in the title line will +be updated before file saving. nil => No automatic update of the date. +@item +@code{hm--html-automatic-changed-comment}: t => A "changed comment" +line will be added before file saving. nil => No automatic insert +of a "changed comment" line. +@item +@code{hm--html-automatic-created-comment}: t => A "created comment" +line will be added. nil => No automatic insert of a "created +comment" line. +@end itemize + + +@node Latin 1 Characters, Drag And Drop, Automatic Insert Of Information, Customization Variables +@comment node-name, next, previous, up +@subsection Latin 1 Characters +@cindex latin 1 characters +@vindex hm--html-bind-latin-1-char-entities + +@itemize @bullet +@item +@code{hm--html-bind-latin-1-char-entities}: Set this to nil, if you +don't want to use the ISO Latin 1 character entities. This is only +useful if `hm--html-use-old-keymap' is set to nil. It is only used +when loading the html package the first time. +@end itemize + + +@node Drag And Drop, Font Lock Keywords, Latin 1 Characters, Customization Variables +@comment node-name, next, previous, up +@subsection Drag And Drop +@cindex drag and drop +@vindex hm--html-idd-create-relative-links +@vindex hm--html-idd-actions + +@itemize @bullet +@item +@code{hm--html-idd-create-relative-links}: If t, then the +@code{hm--html-idd-*} functions create relative links. Otherwise +absolute links are used. The idd functions are used for drag and drop. +@item +@code{hm--html-idd-actions}: The action list for the destination mode +@code{hm--html-mode}. Look at the description of the variable +idd-actions. +@end itemize + + +@node Font Lock Keywords, Prefix Keys, Drag And Drop, Customization Variables +@comment node-name, next, previous, up +@subsection Font Lock Keywords +@cindex font lock keywords +@vindex hm--html-font-lock-keywords-1 +@vindex hm--html-font-lock-keywords-2 +@vindex hm--html-font-lock-keywords + +@itemize @bullet +@item +@code{hm--html-font-lock-keywords-1}: Subdued level highlighting for +@code{hm--html-mode}. +@item +@code{hm--html-font-lock-keywords-2}: Gaudy level highlighting for +@code{hm--html-mode}. +@item +@code{hm--html-font-lock-keywords}: Default expressions to highlight in +the @code{hm--html-mode}. +@end itemize + + +@node Prefix Keys, Pulldown Menu Names, Font Lock Keywords, Customization Variables +@comment node-name, next, previous, up +@subsection Prefix Keys +@cindex prefix keys +@kindex prefix keys +@vindex hm--html-minor-mode-prefix-key +@vindex hm--html-mode-prefix-key + +@itemize @bullet +@item +@code{hm--html-minor-mode-prefix-key}: The prefix key for the key tables +in @code{hm--html-minor-mode}. +@item +@code{hm--html-mode-prefix-key}: The prefix key for the hm--html keys in +@code{hm--html-mode}. +@end itemize + + +@node Pulldown Menu Names, Hook Variables, Prefix Keys, Customization Variables +@comment node-name, next, previous, up +@subsection Pulldown Menu Names +@cindex pulldown menu names +@vindex hm--html-minor-mode-pulldown-menu-name +@vindex hm--html-mode-pulldown-menu-name + +Perhaps you'd like to change the names to get the same menu +names in the major and in the minor modes of the @code{hm--html-menus} +package. + +@itemize @bullet +@item +@code{hm--html-mode-pulldown-menu-name}: The name of the pulldown menu +in the major html mode. +@item +@code{hm--html-minor-mode-pulldown-menu-name}: The name of the pulldown +menu in the minor html mode. +@end itemize + + +@node Hook Variables, Previewing HTML Files, Pulldown Menu Names, Customization Variables +@comment node-name, next, previous, up +@subsection Hook Variables +@vindex hm--html-mode-hook + +You may use the following two variables, if you'd like to call special +functions each time the major html mode is entered or the package is +loaded. + +@itemize @bullet +@item +@code{hm--html-mode-hook}: This hook will be called each time +@code{hm--html-mode} is invoked. +@item +@code{hm--html-load-hook}: Hook variable to execute functions after +loading the package. +@end itemize + + +@node Previewing HTML Files, Meta Element, Hook Variables, Customization Variables +@comment node-name, next, previous, up +@subsection Previewing HTML Files +@cindex previewing HTML files +@vindex html-view-mosaic-command +@vindex html-sigusr1-signal-value + +The following two variables are only used, if you preview html +documents with @code{Mosaic}. There are also some other variables in +@file{hmtl-view.el}. @xref{Contents, Contents}. Look at that file if +you have trouble with the functions to preview the html document with +@code{Mosaic}. + +@itemize @bullet +@item +@code{html-view-mosaic-command}: The command that runs @code{Mosaic} on your +system. +@item +@code{html-sigusr1-signal-value}: Value for the SIGUSR1 signal on your +system. See, usually, @file{/usr/include/sys/signal.h}. +@example + SunOS 4.1.x : (setq html-sigusr1-signal-value 30) + SunOS 5.x : (setq html-sigusr1-signal-value 16) + Linux : (setq html-sigusr1-signal-value 10)) +@end example +@end itemize + + +@node Meta Element, Indentation, Previewing HTML Files, Customization Variables +@comment node-name, next, previous, up +@subsection Meta Element +@cindex meta element +@vindex hm--html-meta-name-alist + +@itemize @bullet +@item +@code{hm--html-meta-name-alist}: Alist with possible names for the name +or http-equiv attribute of meta. Currently I know of the names +@code{Expires}, @code{Keys} and @code{Author}. Please send me +(@emph{muenkel@@tnt.uni-hannover.de}) an email, if you know other +standard html names for the meta element. +@end itemize + + +@node Indentation, , Meta Element, Customization Variables +@comment node-name, next, previous, up +@subsection Indentation +@cindex indentation +@vindex hm--html-disable-indentation +@vindex hm--html-inter-tag-indent +@vindex hm--html-comment-indent +@vindex hm--html-intra-tag-indent +@vindex hm--html-tag-name-alist + +@itemize @bullet +@item +@code{hm--html-disable-indentation}: Set this to t if you want to +disable indentation in @code{hm--html-mode}. And maybe send me +(@emph{muenkel@@tnt.uni-hannover.de}) a note why you did this. +@item +@code{hm--html-inter-tag-indent}: The indentation after a start tag. +@item +@code{hm--html-comment-indent}: The indentation of a comment. +@item +@code{hm--html-intra-tag-indent}: The indentation after the start of a +tag. +@item +@code{hm--html-tag-name-alist}: An alist with tag names known by +@code{hm--html-mode}. It is used to determine if a tag is a one element +tag or not. In the future it should also be used to get possible +parameters of the tag. Use lower case characters in this list!!!! If +you have problems with the indentation of +@code{:hm--html-one-or-two-element-tag} elements, then you should set +them to either @code{:hm--html-one-element-tag} or +@code{:hm--html-two-element-tag}, depending on how you use these +elements. In the future I'll try to implement a better indentation for +these elements. +@end itemize + + +@node Add New Elements, Use With psgml-html, Customization, Top +@comment node-name, next, previous, up +@chapter Add New Elements +@cindex add new html elements +@cindex non standard html +@vindex hm--html-tag-name-alist + +If you'd like to add new HTML elements to this package, you should first take +a look at the file @file{hm--html-not-standard.el}, which +already contains some non-standard elements. If you find your tags +there, you should uncomment the line @code{(require +'hm--html-not-standard)} in the file @file{hm--html-mode.el}. There are +also menu entries for these elements in the file +@file{hm--html-menu.el}, which are commented out. Don't forget to +recompile the changed lisp files after that! + +If you don't find your new elements there, you should do the following +steps to add them: + +@enumerate +@item +Locate a tag which is similar to the one you want to add. "Similar" +means that it is inserted in the way you want to insert the new +tags. Now let's assume, that you chose @samp{<strong></strong>}. +@item +Look at the file @file{hm--html.el} and search the function(s) which +inserts the similar tag(s). If the HTML element consists of only one +tag, then there should be only one function for inserting the tag. If +the element consists of a start and an end tag, there are at least two +functions. Only in some special cases, if it is possible to insert +elements with different attribute values, are there more than two +functions. In the case of @samp{<strong></strong>}, there are the two +functions @code{hm--html-add-strong} and +@code{hm--html-add-strong-to-region}. The first one is used if no +region is active, and the second if a region is active. The naming scheme +of these functions is always @var{hm--html-add-<tagname>} and +@var{hm--html-add-<tagname>-to-region}. @var{<tagname>} is not in all +cases the tagname. Sometimes a more human readable name is used (e.g. +bold instead of b). +@item +To get the right indentation for the new tags you should add an entry +for them to the variable @code{hm--html-tag-name-alist}, which is defined +in @file{hm--html-configuration.el}. Let's assume that the new tagname +is @samp{foo}. The entry in @code{hm--html-tag-name-alist} should +be +@lisp + ("foo" (:hm--html-one-element-tag t)) +@end lisp +if the new element consists only of one tag (@samp{img} is such an +element) or +@lisp + ("foo" (:hm--html-two-element-tag t)) +@end lisp +if the new element consists of two tags (@samp{strong} is such an +element) or +@lisp + ("foo" (:hm--html-one-or-two-element-tag t)) +@end lisp +if the new element consists of two tags, but it is permissible to use the +start tag without its end tag (@samp{p} is such an element). +@end enumerate + +Now you are ready and able to insert the new tags with +@example + M-x hm--html-add-foo +@end example +and +@example + M-x hm--html-add-foo-to-region +@end example + +If you want to add the new commands also to the popup menu, +then you have to take a look at @file{hm--html-menu.el}, where all the +menus are defined. Look at @code{hm--html-menu-noregion-expert} and +@code{hm--html-menu-region-expert}. The first one is used if no region is +active, and the second if a region is active (both are only available +if the "expert menus" are used; this is an option in the pulldown +menu). You should now add an entry like +@lisp + ["Foo" hm--html-add-foo t] +@end lisp +to the @code{hm--html-menu-noregion-expert} variable and an entry +@lisp + ["Foo" hm--html-add-foo-to-region t] +@end lisp +to the @code{hm--html-menu-region-expert} variable (only if +@code{hm--html-add-foo-to-region} exists). You can do this by setting the +whole variable to a new value or by using the function +@code{add-menu-button}. I recommend the last method. + +If you'd like to have a key sequence for inserting the new tag as well, +take a look at @file{hm--html-keys.el}. There are +different key tables defined for region and no region cases and for +different sorts of elements, like anchors, frame elements (doesn't mean +the Netscape element frame) and so on. These "groups" are the same as +the submenu groups. + + +@node Use With psgml-html, Internal Drag And Drop, Add New Elements, Top +@comment node-name, next, previous, up +@chapter Use With psgml-html +@cindex use with other HTML modes +@findex hm--html-minor-mode + +The package provides a minor mode called @code{hm--html-minor-mode}, +which could be used to join the features of this package with another +HTML package. Currently this is only tested with the psgml-html mode in +XEmacs. Please let me know if it works or not with other packages +or in Emacs 19. + +If you'd like to use the minor mode in psgml-html mode, +put the following line in your @file{.emacs}: + +@lisp + (add-hook 'html-mode-hook 'hm--html-minor-mode) +@end lisp + +Note: This should work only in XEmacs versions greater than 19.14 and not +in 20.0. It doesn't work in other versions because the hook variable +@code{html-mode-hook} doesn't exist in those versions. Therefore in those +versions you must either call the minor mode by hand or change the +lisp file of the psgml-html mode. + + +@node Internal Drag And Drop, Template Minor Mode, Use With psgml-html, Top +@comment node-name, next, previous, up +@chapter Internal Drag And Drop +@cindex drag and drop +@cindex internal drag and drop +@vindex idd-actions +@vindex hm--html-idd-actions + + +The file @file{internal-drag-and-drop.el}, which is shipped with +@file{hm--html-menus}, provides a general package for internal drag and +drop in emacs. "General" means that it can be used apart from +@code{hm--html-mode} in any other mode. + +You can start such an action by clicking with the mouse in the source +buffer and then in the destination buffer. The action may depend on +the points where you've clicked with the mouse, on the state of the +region, the point, the mark and any other properties of the source and +the destination buffers. The actions are defined by the variable +@code{idd-actions}, which is a buffer local variable. + + +@menu +* Drag And Drop Customization:: +* The Drag And Drop Commands:: +@end menu + +@node Drag And Drop Customization, The Drag And Drop Commands, Internal Drag And Drop, Internal Drag And Drop +@comment node-name, next, previous, up +@section Drag And Drop Customization +@cindex customization +@cindex configuration + +The internal drag and drop functions may be used in all +modes. Therefore their general customization isn't done in +@file{hm--html-configuration.el}. Its variables are defined in the file +@file{internal-drag-and-drop.el} instead. You can set them in your +@file{.emacs} or in one of the other emacs init files (e.g. +@file{default.el}). The following subsections describe the main +customization variables. + + +@menu +* Defining The Drag And Drop Actions:: +* The Mouse Bindings:: +@end menu + +@node Defining The Drag And Drop Actions, The Mouse Bindings, Drag And Drop Customization, Drag And Drop Customization +@comment node-name, next, previous, up +@subsection Defining The Drag And Drop Actions +@cindex actions +@cindex drag and drop actions +@vindex idd-actions + +The drag and drop actions are commands which are called after an +internal drag and drop. They depend on the source and the destination +of the drag and drop. Drag and drop actions are defined by the +variable: + +@itemize @bullet +@item +@code{idd-actions}: A list with actions, depending on the source and the +destination of the drag and drop command. +@end itemize + +The list looks like: +@lisp +'((@var{<destination-specification-1>} (@var{<source-specification-1>} @var{<action-1-1>}) + (@var{<source-specification-2>} @var{<action-1-2>}) + : + ) + (@var{<destination-specification-2>} (@var{<source-specification-1>} @var{<action-2-1>}) + (@var{<source-specification-2>} @var{<action-2-2>}) + : + ) + : + ) +@end lisp +The @var{<source-specification>} looks like the following: +@lisp +'([(@var{<specification-type>} @var{<value>})]) +@end lisp +with +@lisp +@table @var +@item <specification-type> :== +@w{@code{idd-if-minor-mode-p}} | @w{@code{idd-if-buffer-name-p}} | +@w{@code{idd-if-region-active-p}} | @w{@code{idd-if-url-at-point-p}} | +@w{@code{idd-if-major-mode-p}} | @w{@code{idd-if-variable-non-nil-p}} | +@w{@code{idd-if-dired-file-on-line-p}} | +@w{@code{idd-if-dired-no-file-on-line-p}} | +@w{@code{idd-if-local-file-p}} | @w{@code{idd-if-buffer-name-p}} | +@w{@code{idd-if-modifiers-p}} | ... +@end table +@end lisp + +The @var{<specification-type>} - functions must have two arguments. The +first one is the source or destination and the second is the +@var{<value>}. It must return @code{nil}, if the test wasn't successful, +and a number (in general 1), which specifies the weight of the test +function. The weights of all single tests are added to a summary weight +and assigned to the action. The action with the highest weight is called +from the action handler. Look at the definition of +@w{@code{idd-if-major-mode-p}}, @w{@code{idd-if-minor-mode-p}} and so on for +examples. Look at the function +@code{idd-get-source-or-destination-alist}, if you want to know the +structure of the @code{source-or-destination} argument of these +functions. + +The @var{<destination-specification>} looks like +@var{<source-specification>}, but in general it could be set to +@code{nil} in mode specific idd-action lists. + +If @var{<destination-specification-1>} or @var{<source-specification-1>} +is set to @code{nil}, then every source or source +matches. @code{idd-actions} is a buffer local variable, which should be +at least mode depended. So if the @var{<destination-specification-1>} is +set to @code{nil} it says, that the destination buffer must only have a +specific mode. However, it's also possible to define a general +@code{idd-actions} list, where the destination mode is specified by +@code{idd-if-major-mode-p}. + +@var{<action>} is a function which has two arguments. The first +specifies the source and the second the destination. Look at the +function definition of @code{idd-action-copy-region} and +@code{idd-action-copy-replace-region}. They are examples for such +actions. + +The following is an example for @code{hm--html-mode}: + +@lisp +(defvar idd-actions + '((nil (((idd-if-major-mode-p . dired-mode) + (idd-if-dired-file-on-line-p . ".*\\.\\(gif\\)\\|\\(jpq\\)")) + hm--html-idd-add-include-image-from-dired-line) + (((idd-if-major-mode-p . dired-mode) + (idd-if-dired-no-file-on-line-p . nil)) + hm--html-idd-add-file-link-to-file-on-dired-line) + (((idd-if-major-mode-p . dired-mode) + (idd-if-dired-no-file-on-line-p . t)) + hm--html-idd-add-file-link-to-directory-of-buffer) + (((idd-if-major-mode-p . w3-mode) + (idd-if-url-at-point-p . t)) + hm--html-idd-add-html-link-from-w3-buffer-point) + (((idd-if-major-mode-p . w3-mode)) + hm--html-idd-add-html-link-to-w3-buffer) + (((idd-if-local-file-p . t)) + hm--html-idd-add-file-link-to-buffer))) +@end lisp + + +@node The Mouse Bindings, , Defining The Drag And Drop Actions, Drag And Drop Customization +@comment node-name, next, previous, up +@subsection The Mouse Bindings +@cindex mouse bindings +@vindex idd-global-mouse-keys +@vindex idd-global-help-mouse-keys +@vindex idd-drag-and-drop-mouse-binding-type +@findex idd-mouse-drag-and-drop +@findex idd-help-mouse-drag-and-drop + +The following three variables determine the mouse +bindings and the mouse behaviour for the internal drag and drop package: + +@itemize @bullet +@item +@code{idd-global-mouse-keys}: The mouse keys for the command +@code{idd-mouse-drag-and-drop}. The command +@code{idd-mouse-drag-and-drop} is bound during the loading of the +package @file{internal-drag-and-drop} to these keys in the @b{global +keymap}. The drag and drop action @b{must be bound global}, because the +drag and drop action must be started by a click in the source +buffer. Therefore no action will be performed if the mouse keys are not +bound to @code{idd-mouse-drag-and-drop} in the destination buffer. + +Set it to @code{nil}, if you don't want to bind this function during +loading. + +If the command is already bound in the global keymap during loading, +then this key sequence will not be bound. + +By default the mouse binding is @key{meta} @key{control} @key{button1}. + +@item +@code{idd-global-help-mouse-keys}: The mouse keys for the command +@code{idd-help-mouse-drag-and-drop}. The command +@code{idd-help-mouse-drag-and-drop} is bound during the loading of the +package @file{internal-drag-and-drop} to these keys in the @b{global +keymap}. + +Set it to @code{nil} if you don't want to bind this function during +loading. + +If the command is already bound in the global keymap during loading, +then this key sequence will not be bound. + +By default the mouse binding is @key{meta} @key{control} @key{button3}. + +@item +@code{idd-drag-and-drop-mouse-binding-type}: The type of the drag and +drop mouse binding. The value may be @code{click} or +@code{press-button-during-move}. A value of @code{click} means that +you have to click over the source, release the button and click it again +over the destination. A value of @code{press-button-during-move} means +that you have to press the button down over the source and hold it until +the mouse pointer is over the destination. + +The @emph{disadvantage} of the @code{press-button-during-move} type +compared with the @code{click} type is that you can't select a destination +region, and therefore a drag and drop action depending on a selected +region can't be started with that type of mouse binding. +@end itemize + +@node The Drag And Drop Commands, , Drag And Drop Customization, Internal Drag And Drop +@comment node-name, next, previous, up +@section The Drag And Drop Commands +@cindex drag and drop commands + +There are 2 groups of commands. The first contains commands which +perform the drag and drop action and the second displays help +messages about a possible drag and drop action. + + +@menu +* Performing The Drag And Drop Action:: +* Displaying Help On Drag And Drop:: +@end menu + +@node Performing The Drag And Drop Action, Displaying Help On Drag And Drop, The Drag And Drop Commands, The Drag And Drop Commands +@comment node-name, next, previous, up +@subsection Performing The Drag And Drop Action +@cindex drag and drop commands +@cindex performing drag and drop +@findex idd-mouse-drag-and-drop +@findex idd-start-mouse-drag-and-drop +@findex idd-mouse-drag-and-drop-press-button-during-move +@findex idd-mouse-drag-and-drop-click +@findex idd-help-start-action +@vindex idd-drag-and-drop-mouse-binding-type + +The following five commands perform internal +drag and drop actions: + +@itemize @bullet +@item +@code{idd-mouse-drag-and-drop}: Performs a drag and drop action. It +calls the command @code{idd-mouse-drag-and-drop-click} or +@code{idd-mouse-drag-and-drop-press-button-during-move} depending on the +value of @code{idd-drag-and-drop-mouse-binding-type}. However you've set +this, you start a drag and drop action with this command by pressing +down its mouse button over the source. This command is bound by default +to a global mouse key sequence. @xref{The Mouse Bindings}. + +@item +@code{idd-start-mouse-drag-and-drop}: Starts a drag and drop command. +This command could be used to start a drag and drop command without a +button event. Therefore this should not be bound directly to a mouse +button. This command can be used to start a drag and drop action with a +click on a menu item or tool bar icon. After that you have to press a +mouse button over the source. The rest depends on the value of +@code{idd-drag-and-drop-mouse-binding-type}, as with the command +@code{idd-mouse-drag-and-drop}. + +@item +@code{idd-help-start-action}: It is possible to display a help buffer +with a message in it, which describes the action instead of performing +it immediately (@pxref{Displaying Help On Drag And Drop}). In this case +you can perform the action by clicking on a special extent in the help +buffer, which runs this command. + +@item +@code{idd-mouse-drag-and-drop-press-button-during-move}: Performs a drag +and drop action in a more traditional way than +@code{idd-mouse-drag-and-drop-click}. First you press the button +over the source and then move with the depressed button to the +destination, where you release the button. This must be bound to a +mouse button. The @code{SOURCE-EVENT} must be a +@code{button-press-event}. + +The disadvantage of this command compared with the command +@code{idd-mouse-drag-and-drop-click} is, that you can't select a +destination region. + +You should bind the command @code{idd-mouse-drag-and-drop} instead of +this one, because it's then possible to switch between both drag and +drop behaviours by changing only one variable. + +@item +@code{idd-mouse-drag-and-drop-click}: Performs a drag and drop action in +a more useful way than +@code{idd-mouse-drag-and-drop-press-button-during-move}. First you +click on the source and then on the destination. This must +be bound to a mouse button. The @code{SOURCE-EVENT} must be a +@code{button-press-event}. + +You should bind the command @code{idd-mouse-drag-and-drop} instead of +this one, because it's then possible to switch between both drag and +drop behaviours by changing only one variable. +@end itemize + + +@node Displaying Help On Drag And Drop, , Performing The Drag And Drop Action, The Drag And Drop Commands +@comment node-name, next, previous, up +@subsection Displaying Help On Drag And Drop +@cindex help on drag and drop +@cindex displaying help on drag and drop +@findex idd-help-mouse-drag-and-drop +@findex idd-start-help-mouse-drag-and-drop + +It's possible to display a buffer with a help message describing the +action being considered before actually performing it. To perform the +action, you then click on a special extent in the help buffer. To get +the help buffer, you do the same things as you do to perform the action +itself. Only the mouse key differs. There are two commands for this: + +@itemize @bullet +@item +@code{idd-help-mouse-drag-and-drop}: Displays help about the drag and +drop action. It works similarly to @code{idd-mouse-drag-and-drop} +(@pxref{Performing The Drag And Drop Action}). + +By default this command is globally bound to @key{meta} @key{control} +@key{button3}. This may be changed with the variable +@code{idd-global-help-mouse-keys} (@pxref{The Mouse Bindings}). + +@item +@code{idd-start-help-mouse-drag-and-drop}: Starts displaying help about +the drag and drop action. It works similarly to +@code{idd-start-mouse-drag-and-drop} (@pxref{Performing The Drag And +Drop Action}) and can be used to start the help by clicking on a menu +item or a tool bar icon. +@end itemize + + +@node Template Minor Mode, Bug Reports, Internal Drag And Drop, Top +@comment node-name, next, previous, up +@chapter Template Minor Mode +@cindex templates + +There's a file called @file{tmpl-minor-mode.el} in the distribution +of the package @emph{hm---html-menus}. It provides functions to use +templates for the @code{hm--html-mode} and also for other modes. It +needs nothing from the rest of the package and therefore it can be used +independently of @code{hm--html-mode}. + + +@menu +* What Are Templates:: +* Syntax Of Templates:: +* Template Customization:: +* Template Commands:: +@end menu + +@node What Are Templates, Syntax Of Templates, Template Minor Mode, Template Minor Mode +@comment node-name, next, previous, up +@section What Are Templates +@cindex templates +@findex tmpl-insert-template-file +@findex tmpl-expand-templates-in-buffer +@findex tmpl-expand-templates-in-region + +Templates are special pieces of text, which can be expanded by +emacs. Expansion means that the template is replaced by something else, +determined by evaluating lisp forms or emacs commands. The +expansion can be done automatically after the insertion of templates +with the command @code{tmpl-insert-template-file} in a buffer or by hand +with the commands @code{tmpl-expand-templates-in-buffer} or +@code{tmpl-expand-templates-in-region}. + +Templates can be put together with normal text in a so called template +file to provide prototype files. You should name these files with the +following naming scheme: + +@example + @var{<file>}.@var{<type>}.tmpl +@end example + +where @var{<file>} is a string which describes for what the template +could be used and @var{<type>} the normal file extension, e.g. @samp{c} +for C- files or @samp{html} for HTML- files. + + +@node Syntax Of Templates, Template Customization, What Are Templates, Template Minor Mode +@comment node-name, next, previous, up +@section Syntax Of Templates +@cindex template syntax +@vindex tmpl-sign + +The templates are marked with the sign ^@@, which stands for the null +character (\000). It can be inserted in a buffer with the keys @kbd{C-q +C-SPC}. You can also use any other character or string of characters by +changing the variable @code{tmpl-sign}. + +At the moment, there are 3 major types of templates: + +@enumerate +@item +@emph{Emacs Lisp function templates}: The expansion of such a template +evals a lisp form. It is possible to use functions or variables as lisp +forms. The following is a simple example: + +@lisp +^@@LISP^@@ (insert-file "~/.emacs") ^@@END LISP^@@ +@end lisp + +inserts the contents of the file @file{~/.emacs} in the current +buffer during the expansion. + +@item +@emph{Emacs command templates}: The expansion of a command template +evals a template in the same way as an interactive command, which is +invoked with @kbd{M-x command}. For example: + +@lisp +^@@COMMAND^@@ insert-file ^@@END COMMAND^@@ +@end lisp + +runs the interactive command @code{insert-file} during the expansion. + +@item +@emph{Template comments} Nothing will be evaluated during the expansion +of a template comment. It is only a comment. For example: + +@lisp +^@@C^@@ This is a comment +@end lisp + +The end of the comment is the end of the line. Therefore it has the same +syntax as a lisp or C++ comment. +@end enumerate + +By default, a template will be deleted after its expansion, but +without the linefeed. Look at the following examples: + +Before the expansion: + +@example + Line before the template + ^@@C^@@ The Text of a comment template + Line after the template +@end example + +After the expansion: + + Line before the template + + Line after the template + + +Templates can start in any column, and only the template will be deleted +after its expansion. + + +It is also possible to put an attribute list in a template. The +attributes of the list control the deletion of the template. It +may be that this will be extended in the future with other attributes. +The attribute list must be specified as an alist (assoc list) in the start +tag of a template and after its type. Each element of the alist consists +of the name of the attribute following its value. +If no attribute list is specified or if an attribute is missing, then the +default values are used. At the moment there are the following 2 attributes: + +@enumerate +@item @emph{don't delete attribute} (@code{DONT_DELETE}): If the value +is t, then the template will not be deleted after its expansion. If the +value is nil then the template will be deleted. The default is nil. For +example: + +Before the expansion: + +@example + Line before the template + ^@@LISP ((DONT-DELETE t))^@@ (insert-file "~/.cshrc") ^@@END LISP^@@ + Line after the template +@end example + +After the expansion: + +@example + Line before the template + ^@@LISP ((DONT-DELETE t))^@@ (insert-file "~/.cshrc") ^@@END LISP^@@ + Line after the template +@end example + +It was assumed, that the file @file{~/.cshrc} was empty ! + +@item @emph{delete line attribute} (@code{DELETE-LINE}): If the value is +t, then the linefeed before or after the template will be deleted. If +the value is nil then no linefeed will be deleted. The default is +nil. For example: + +Before the expansion: + +@example + Line before the template + ^@@LISP ((DELETE-LINE t))^@@ (insert-file "~/.cshrc") ^@@END LISP^@@ + Line after the template +@end example + +After the expansion: + +@example + Line before the template + Line after the template +@end example + +It was assumed, that the file @file{~/.cshrc} was empty ! +@end enumerate + +These attributes can be combined. For example: + +@example + ^@@COMMAND ((DELETE-LINE t) (DONT-DELETE nil))^@@ + insert-file + ^@@END COMMAND^@@ +@end example + +The last examples show also that whitespace (blanks, tabs, linefeeds) +is allowed at most positions in a template. + +Look at the file @file{tmpl-minor-mode.el} for a description of the +commands to expand templates. + + +@node Template Customization, Template Commands, Syntax Of Templates, Template Minor Mode +@comment node-name, next, previous, up +@section Template Customization +@cindex customization +@cindex configuration +@vindex tmpl-template-dir-list +@vindex tmpl-automatic-expand +@vindex tmpl-filter-regexp +@vindex tmpl-sign +@vindex tmpl-minor-mode-map + +Templates may be used for all editing modes, not only for +@code{hm--html-mode}. Therefore their general customization isn't done in +@file{hm--html-configuration.el}. Template variables are defined in the file +@file{tmpl-minor-mode.el} instead. You can set them in your +@file{.emacs} or in one of the other emacs init files (e.g. +@file{default.el}). The following are the main variables for +customization. + +@itemize @bullet +@item +@code{tmpl-template-dir-list}: A list of directories with template +files. If it is nil, the default-directory will be used. If more than +one directory is specified, then the template filenames should differ +in all directories. + +This variable is used in the commands for inserting templates. Look at +@code{tmpl-insert-template-file-from-fixed-dirs} and at +@code{tmpl-insert-template-file}. The command +@code{tmpl-insert-template-file} uses only the car of the list (if it is +a list.) +@item +@code{tmpl-filter-regexp}: This defines a regular expression used for +filtering out non-template files in template directories. It is used in +the command @code{tmpl-insert-template-file-from-fixed-dirs} to allow +only the selection of files which match the regexp. If it is +nil, then the Filter @code{".*\\.tmpl$"} is used. Set it to +@code{\".*\"} if you want to disable the filter function or use the +command @code{tmpl-insert-template-file}. +@item +@code{tmpl-automatic-expand}: If you insert a template file with +@code{tmpl-insert-template-file-from-fixed-dirs} or with +@code{tmpl-insert-template-file}, this variable is used. The templates +in the buffer will be automatically expanded if the variable is set to +t, which is the default. +@item +@code{tmpl-sign}: Thisdetermines the sign which marks the beginning and +the end of template expressions. By default it is set to the null +character (displayed in emacs as ^@@). You can also set this to a +string. Be careful if you change it, so that the templates will not be +mixed up with other non-template text! Note: The expansion function +looks at the whole template, so that it is very unlikely that the +function will make a mistake. +@item +@code{tmpl-minor-mode-map}: The keymap for the template minor mode. +@end itemize + + +@node Template Commands, , Template Customization, Template Minor Mode +@comment node-name, next, previous, up +@section Template Commands +@cindex commands + +In this section the commands of the template package are described. + + +@menu +* Insert Of Template Files:: +* Expansion Of Templates:: +* Escaping Of Template Signs:: +* The Template Minor Mode:: +@end menu + +@node Insert Of Template Files, Expansion Of Templates, Template Commands, Template Commands +@comment node-name, next, previous, up +@subsection Insert Of Template Files +@cindex template insert +@cindex template files +@findex tmpl-insert-template-file-from-fixed-dirs +@findex tmpl-insert-template-file + +The template package provides the following two commands for inserting +template files in an emacs buffer. + +@itemize @bullet +@item +@code{tmpl-insert-template-file}: This command can be used to insert a +template file in the current buffer. It will expand the templates in the +buffer if @code{tmpl-automatic-expand} is set to @code{t}. You can set +a default directory for this command by setting the variable +@code{tmpl-template-dir-list}. @xref{Template Customization}. +@item +@code{tmpl-insert-template-file-from-fixed-dirs}: The difference from +the simpler command @code{tmpl-insert-template-file} is that this +command will build a list for filename completion from a list of +predefined directories (look at @code{tmpl-template-dir-list}). The +filename completion list will also be filtered with the regular +expression defined by @code{tmpl-filer-regexp}. @xref{Template +Customization}. You can set the directory list and/or the filter +differently in each mode where you use templates, so that you will get +in the completion list only template files which could be used for the +current mode. + +If you want to insert a template file with this command, which is not in +one of the directories from @code{tmpl-template-dir-list}, then you have +to enter the string @emph{"Change the directory"} instead of a template +file. This string is also in the completion list. +@end itemize + +Both commands can also be used as functions. In this case the template +file with is directory path must be given to them as an parameter. + +You can also use commands like @code{insert-file} to insert template +files and expand them by hand (@pxref{Expansion Of Templates}). + + +@node Expansion Of Templates, Escaping Of Template Signs, Insert Of Template Files, Template Commands +@comment node-name, next, previous, up +@subsection Expansion Of Templates +@cindex template expansion +@cindex expansion +@findex tmpl-expand-templates-in-region +@findex tmpl-expand-templates-in-buffer + +You can expand templates by hand or automatically after their +insertion. @xref{Insert Of Template Files}, for automatic +expansion. Expansion by hand can be done with one of the +following two functions: + +@itemize @bullet +@item +@code{tmpl-expand-templates-in-region}: Expands the templates in the +region. The region is established by the optional arguments @code{BEGIN} +and @code{END}. If the arguments are @code{nil}, or if the function is called +interactively, then the current region will be used. +@item +@code{tmpl-expand-templates-in-buffer}: Expands all templates in the +current buffer. +@end itemize + +Both commands are bound to keys in the @code{tmpl-minor-mode}. @xref{The +Template Minor Mode}. + + +@node Escaping Of Template Signs, The Template Minor Mode, Expansion Of Templates, Template Commands +@comment node-name, next, previous, up +@subsection Escaping Of Template Signs +@cindex template escaping +@cindex escaping +@findex tmpl-escape-tmpl-sign-in-region +@findex tmpl-escape-tmpl-sign-in-buffer + +It is possible to escape template signs in a buffer or in a +region. Templates with escaped template signs are not expanded, but they +are un-escaped by the expansion functions. Therefore it is possible to +exclude single templates from the expansion by escaping them. Note: +You can't escape a template twice. The commands which can be used for +this are: + +@itemize @bullet +@item +@code{tmpl-escape-tmpl-sign-in-region}: Escapes all @code{tmpl-sign}s +(@pxref{Template Customization}) with a @code{tmpl-sign} in a +region. The region is established by the optional arguments @code{BEGIN} +and @code{END}. If the arguments are @code{nil}, or if the function is +called interactively, then the current region will be used. +@item +@code{tmpl-escape-tmpl-sign-in-buffer}: Same as +@code{tmpl-escape-tmpl-sign-in-region}, but escapes all templates in the +whole buffer. +@end itemize + +Both commands are bound to keys in @code{tmpl-minor-mode}. @xref{The +Template Minor Mode}. + + +@node The Template Minor Mode, , Escaping Of Template Signs, Template Commands +@comment node-name, next, previous, up +@subsection The Template Minor Mode +@cindex template minor mode +@cindex minor mode +@cindex key bindings +@findex tmpl-minor-mode + +The template minor mode can be toggled with the command +@code{tmpl-minor-mode}. The purpose of this mode is only to provide +key bindings for some of the commands of the package +@file{tmpl-minor-mode}. If you don't want to use the key bindings, you +don't need this minor mode. + +Look at the key table @code{tmpl-minor-mode-map} (@pxref{Template +Customization}) for the definition of the keys. + +It may be that I'll also provide a pulldown or popup menu for the minor +mode in a future release. + + +@node Bug Reports, Concept Index, Template Minor Mode, Top +@comment node-name, next, previous, up +@chapter Bug Reports +@cindex bug report +@findex hm--html-submit-bug-report + +There's no software out there without bugs. This package contains +software, therefore it has bugs. I (Heiko Münkel +<muenkel@@tnt.uni-hannover.de>) have inserted most of the bugs in this +package by myself, but I've forgotten where. So please help me out of +this disaster and send bug reports, if you've found one of these little +animals. I'll try to do my very best to fix them and to insert new ones. + +If it's possible, you should use the command + +@lisp + M-x hm--html-submit-bug-report +@end lisp + +There's also an entry in the pulldown menu for this. + +In some cases a backtrace would also be appropriate. + +If you can't send the report with this function, at +least include the package version and your @code{Emacs}/@code{XEmacs} +version. + +In the best of all worlds you would also include a patch to fix the bug. + +@emph{Note}: It's not true that I've inserted the bugs as a marketing trick, +so that you must buy the next version to get some of them fixed. This is +false, because this software is free. + + +@node Concept Index, Function Index, Bug Reports, Top +@comment node-name, next, previous, up +@unnumbered Concept Index + +@printindex cp + +@node Function Index, Variable Index, Concept Index, Top +@comment node-name, next, previous, up +@unnumbered Function Index + +@printindex fn + +@node Variable Index, , Function Index, Top +@comment node-name, next, previous, up +@unnumbered Variable Index + +@printindex vr + +@summarycontents +@contents +@bye