Mercurial > hg > xemacs-beta
changeset 42:8b8b7f3559a2 r19-15b104
Import from CVS: tag r19-15b104
line wrap: on
line diff
--- a/CHANGES-beta Mon Aug 13 08:54:26 2007 +0200 +++ b/CHANGES-beta Mon Aug 13 08:54:51 2007 +0200 @@ -1,4 +1,12 @@ -*- indented-text -*- +to 19.15 beta104 +-- EFS fixes courtesy of Michael Sperber +-- time.el-1.6 +-- Miscellaneous bug fixes +-- hm--html-mode-5.4 +-- VM-6.22 +-- Gnus-5.4.36 + to 19.15 beta103 -- VM-6.21 -- tm-7.106
--- a/etc/NEWS Mon Aug 13 08:54:26 2007 +0200 +++ b/etc/NEWS Mon Aug 13 08:54:51 2007 +0200 @@ -20,7 +20,7 @@ New users should look at the next section on "Using Outline Mode". You will be more efficient when you can navigate quickly through this file. Users -interested in some of the details of how XEmacs differs from FSF GNU Emacs +interested in some of the details of how XEmacs differs from GNU Emacs should read the section "What's Different?". Users who would to know which capabilities have been introduced in each release should look at the appropriate subsection of the "XEmacs Release Notes." @@ -99,245 +99,11 @@ both contributed significantly to the development of XEmacs. -** Why Haven't XEmacs and FSF GNU Emacs Merged? -=============================================== - -This question comes up again and again on comp.emacs.xemacs and other -newsgroups and mailing lists. Recently in fact there was a long, heated -thread about this issue. - -Here is what one XEmacs developer said about this issue. - -DISCLAIMER: This is provided for informational purposes only and does -_NOT_ necessarily represent the opinions of any of the other XEmacs -developers or of any of the organizations involved. Keep in mind -that this is a highly charged issue with differing and strongly-held -opinions held by the various parties involved. - - Subject: Re: elisp code in GNU Emacs/XEmacs - From: wing@666.com (Ben Wing) - Message-ID: <wingDqGwLH.K6w@netcom.com> - Date: Fri, 26 Apr 1996 11:44:05 GMT - - In article <9xo91fmordx.fsf@bcarsf26.nortel.ca>, Stephane Boucher - <sbo@bcarsf26.nortel.ca> wrote: - - Well, I don't think the number of volunteers is greater by having 2 - Emacsen. I think your affirmation holds true because of the - inhability of the various parties involved to work together and - compromise. If people could all work together, I don't think there - would be any benifit in having 2 Emacsen. It may seem profitable - right now, but in the long run, I think everyone looses. The time - everyone spends porting back and forth, and imitating what the other - has done is not spent to do new features. I've presonnally - experienced a project split in the past, and in the end everyone - lost. - - I don't want to try to blame anybody for the current fiasco. But we do - have a fiasco. That is unfortunate. There are so many contributors - out there that if everyone worked together we might be looking - forward to having, say, threads in Emacs. But instead, as someone - told me not that long ago, maybe we'll soon see a new editor come out - based on Java. Threads will be part of it at no extra cost, and those - people still using Emacs will continue to curse at the fact that they - can't start GNUS while typing an E-mail, and the various Emacs - contributors will continue to argue among themselves, nitpicking - about how to get the perfect solution, rather than try to move - forward. Meanwhile, people will enjoy using a new state of the art - editor. - - Don't think we're just being needlessly perverse by continuing to have - XEmacs. I'm well aware of the problems in having a project split, and - don't think for a minute that we haven't tried (extremely hard, in - fact) to come up with a merge. - - Unfortunately, as I have said before, the odds of this happening are - quite low due to severe conflicts (both technical, procedural, and - philosophical) between RMS and the XEmacs developers. If we were to - assent to even half of what RMS wants in a merged Emacs, it would take - years of work to produce the merged Emacs, and the result would be - less powerful than the existing XEmacs. - - Since so many people seem so misinformed about this problem, I'll go - ahead and state the fundamental dividing issues: - - 1. RMS does not believe in data abstraction, and cannot be convinced - of the folly of this. This by itself is such a huge division that - it makes a merge basically unthinkable. Because of this, FSF Emacs - is basically unmaintainable by anyone other than RMS. RMS has - consented to all the data abstraction I want provided that I take - sole responsibility for writing this code (which basically means - I'd have to write almost all of the code or rewrite most of his - code), and provided that he can use this issue as a bargaining - chip to get concessions of his own. - 2. RMS sees the merge process as a series of mutual concessions - traded back and forth. IMHO this is reasonable for a peace treaty - but absurd for a piece of software -- we have to have technical - agreement on the major issues involved, and the chance of that - happening is basically nil. - 3. RMS has insisted in full backwards compatibility with all aspects - of FSF Emacs, no matter how ugly; and furthermore, this backwards - compatibility must work fast enough to make existing code run - without problem. This basically means that there would have to be - parallel C implementations of events, keymaps, and many other data - structures. This not only will take months or years of extra work - to implement, but poses some fundamental technical problems due to - the non-abstractedness of FSF Emacs (e.g. in FSF Emacs keymaps are - conses or vectors and a lot of code depends on this, and - reconciling this with XEmacs's primitive keymap type is difficult - to impossible). - 4. RMS will not even consent to neutral names for the two editors. He - objects to call his editor FSF Emacs because for some unfathomable - reason he finds it insulting. He suggests just Emacs, which I find - not only insulting (XEmacs is just as much Emacs as is FSF Emacs) - but also quite confusing. He will not even consent to calling his - editor GNU Emacs without also referring to XEmacs as GNU XEmacs -- - basically a Borg-like assimilation attempt at making XEmacs a GNU - product, which it is not. (None of the developers of Lucid Emacs - and XEmacs were or are sanctioned by GNU, and none of us got the - least bit of assistance or cooperation in doing our work. In fact, - RMS actively made it harder by choosing to ignore all work - previously done in XEmacs and adding his own incompatible - interfaces for functionality already in XEmacs. This makes it - quite difficult to track FSF Emacs and keep a sane API.) He has - stated many times, and continues to assert, that most or all of - the work done on Lucid Emacs and XEmacs was done primarily as a - testing ground for potential features to be added to FSF Emacs. - All of the developers of Lucid Emacs and XEmacs assert that this - is patently false -- so why does RMS continue to insist that this - is the case? - - ben - -- - "... then the day came when the risk to remain tight in a bud was - more painful than the risk it took to blossom." -- Anais Nin - - -** Why Another Version of Emacs? (The Lucid, Inc. Point of View) -================================================================= - -Lucid's latest product, Energize, is a C/C++ development environment. -Rather than invent (and force our users to learn) a new user-interface, we -chose to build part of our environment on top of the world's best editor, -GNU Emacs. (Though our product is commercial, the work we did on is -free software, and is useful without having to purchase our product.) - -We needed a version of Emacs with mouse-sensitive regions, multiple fonts, -the ability to mark sections of a buffer as read-only, the ability to detect -which parts of a buffer has been modified, and many other features. - -*** Why Not Epoch or GNU Emacs? -------------------------------- - -For our purposes, the existing version of Epoch was not sufficient; it did -not allow us to put arbitrary pixmaps/icons in buffers, `undo' did not -restore changes to regions, regions did not overlap and merge their -attributes in the way we needed, and several other things. - -We could have devoted our time to making Epoch do what we needed (and, in -fact, we spent some time doing that in 1990) but, since the Free Software -Foundation planned to include Epoch-like features in their Version 19, we -decided that our efforts would be better spent improving GNU Emacs -instead of Epoch. - -Our original hope was that our changes to GNU Emacs would be -incorporated into the "official" v19. However, scheduling conflicts arose, -and we found that, given the amount of work still remaining to be done, we -didn't have the time or manpower to do the level of coordination that would -be necessary to get our changes accepted by the Free Software Foundation. -Consequently, we released our work as a forked branch of Emacs, instead of -delaying any longer. - -Roughly a year after Lucid Emacs 19.0 was released, a beta version of the -Free Software Foundation branch of Emacs 19 was released. This version -was better in some areas, and worse in others, as reflects the differing -focus of our development efforts. - -We planned to continue developing and supporting Lucid Emacs, and merging in -bug fixes and new features from the Free Software Foundation branch as -appropriate; we did not plan to discard any of the functionality that we -implemented which Richard Stallman of the Free Software Foundation has -chosen not to include in his version. - -However, events have overtaken us, and Lucid, Inc. has effectively ceased -doing business and is (September 1994) in the process of being sold. Our -efforts on Lucid Emacs have also ceased and we've turned over the continued -enhancement of Lucid Emacs to the University of Illinois under Chuck -Thompson, a member of the Lucid Emacs team and a maintainer of Epoch. -At the same time, Lucid Emacs has been renamed XEmacs to reflect the -substantial contribution of the University of Illinois with the support of -Sun Microsystems. - -Certain elements of Lucid Emacs, or derivatives of them, have been ported to -the FSF GNU Emacs. We have not been doing work in this direction, because -we feel that Lucid Emacs has a cleaner and more extensible substrate, and -that any kind of merger between the two branches would be far easier by -merging the Free Software Foundation changes into our version than the other -way around. - -We were working closely with the Epoch developers to merge in the -remaining Epoch functionality which Lucid Emacs does not yet have. Epoch -and Lucid Emacs will soon be one and the same thing. Work is being done on -a compatibility package which will allow Epoch 4 code to run in XEmacs with -little or no change. (As of 19.8, Lucid Emacs is running a descendant of -the Epoch redisplay engine.) - -** Why Another Version of Emacs? (The SunPro Point of View) -============================================================ - -Emacs 18 has been around for a long, long time. Version 19 was supposed to -be the successor to Emacs 18 with X support. It was going to be available -"real soon" for a long time (some people remember hearing about v19 as early -as 1984!), but it never came out. v19 development was going very, very -slowly, and from the outside it seemed that it was not moving at all. In -the meantime other people gave up waiting for v19 and decided to build their -own X-aware Emacsen. The most important of these was probably Epoch, which -came from the University of Illinois and was based on v18. - -Around three years ago we decided that we wanted an integrated editor. We -contracted with the University of Illinois to provide a number of basic -enhancements to the functionality in Epoch. The University of Illinois -initially was planning to deliver this on top of Epoch code. - -In the meantime (actually some time before we talked with the University of -Illinois) Lucid had decided that it also wanted to provide an integrated -environment with an integrated editor. Lucid decided that the Version 19 -basis was a better one than Version 18 and thus decided not to use Epoch but -instead work with Richard Stallman, the head of the Free Software Foundation -and principle author of Emacs, on getting Version 19 out. At some point -Stallman and Lucid parted ways. Lucid kept working and got a Version 19 out -that they called Lucid Emacs 19. - -After Lucid's v19 came out it became clear to us (the University of Illinois -and SunPro) that the right thing to do was to push for an integration of -both Lucid Emacs and Epoch, and to get the deliverables that we were asking -from the University of Illinois on top of this integrated platform. Through -the last two years, SunPro has been actively supporting this product and has -been investing a comparable amount of effort into it as Lucid has. -Substantial portions of the current code have originated under the support -of SunPro, either directly in SunPro, or in the University of Illinois but -paid for by us. This code was kept away from Lucid for a while, but later -was made available to them. Initially Lucid didn't know that we were -supporting UofI, but later we were open about it. - -Eventually, all development source trees were synched up. Currently, there -is basically no difference in the source trees between what is at the -University of Illinois and SunPro. - -SunPro originally called the integrated product ERA, for "Emacs Rewritten -Again". At some point, SunPro and Lucid came to an agreement to find a name -for the product that was not specific to either company. An additional -constraint that Lucid placed on the name was that it must contain the word -"Emacs" in it -- thus "ERA" was not acceptable. The agreed-upon name was -"XEmacs", and this is what the product has been called starting with the -19.11 release. - - * What's Different? =================== -** Differences between XEmacs and FSF GNU Emacs 19 +** Differences between XEmacs and GNU Emacs 19 ================================================== In XEmacs, events are first-class objects. FSF 19 represents them as @@ -347,7 +113,7 @@ In XEmacs, keymaps are first-class opaque objects. FSF 19 represents them as complicated combinations of association lists and vectors. If you use the advertised functional interface to manipulation of keymaps, the same code -will work in XEmacs, Emacs 18, and FSF GNU Emacs 19; if your code depends +will work in XEmacs, Emacs 18, and GNU Emacs 19; if your code depends on the underlying implementation of keymaps, it will not. XEmacs uses "extents" to represent all non-textual aspects of buffers; @@ -1420,18 +1186,131 @@ ** Future Plans for XEmacs ========================== -For the curious, the biggest changes in 19.15 will include integration -of TM (a MIME package for VM and GNUS), EFS (the next generation of -ange-ftp), and Auc-TeX, and a "lite" distribution that includes a -minimal base and a set of optional packages (which will include TM, -EFS, and Auc-TeX, as well as all of the large packages currently -distributed with XEmacs). There will also still be a full distribution -that includes all the optional packages. - -In the longer term, we are also working on a separate branch of XEmacs that -includes full Asian-language ("MULE") support. This work is currently in -beta and is being supported by Sun Microsystems. - +This is the end of the line for XEmacs v19. No new development is planned +on this source tree. XEmacs 20.1 will contain the functionality in 19.15, +and development will continue with XEmacs 20.2. The major new `feature' +planned in 20.2 will be the introduction of separable packages and the +capability to download and use an XEmacs lite distribution. + +** Major Differences Between 19.14 and 19.15 +============================================ + +Many bugs have been fixed. An effort has been made to eradicate all +XEmacs crashes, although we are not quite done yet. The overall +quality of XEmacs should be higher than any previous release. XEmacs +now compiles with nary a warning with some compilers. + +-- EFS replaces ange-ftp for remote file manipulation capability. + +-- TM (Tools for Mime) now comes with XEmacs. This provides MIME + (Multi-purpose Internet Multi-media Extensions?) support for Mail + and News. The primary author is Morioka Tomohiko. + +-- AUCTeX is now included with XEmacs. The primary author is Per + Abrahamsen. + +-- Command line processing should work much better now - no more order + dependencies. + +-- Customization of user options is now handled by the custom package + written by Per Abrahamsen. + +-- html mode now defaults to using HTML-3.2 + +-- VM now has a native MIME mode + +-- The traditional time.el package now has optional modeline graphics + +-- The XEmacs Logo has been changed courtesy of Jens Lautenbacher + +-- The XEmacs build procedure has been changed to make it easier than + ever to include new packages to be dumped with the binary + +-- Many many package upgraded (thanks go to countless maintainers): + + -- ediff 2.64 (Michael Kifer) + -- Gnus 5.4.36 (Lars Magne Ingebrigtsen) + -- w3 3.0.71 (Bill Perry) + -- ilisp 5.8 (Chris McConnell, Ivan Vasquez, Marco Antoniotti, Rick + Campbell) + -- VM 6.22 (Kyle Jones) + -- etags 11.78 (Francesco Potorti`) + -- ksh-mode.el 2.9 + -- vhdl-mode.el 2.73 (Rod Whitby) + -- id-select.el 1.4.5 (Bob Weiner) + -- EDT/TPU emulation modes should work now for the first time. + -- viper 2.93 (Michael Kifer) is now the `official' vi emulator for XEmacs. + -- big-menubar should work much better now. + -- mode-motion+.el 3.16 + -- backup-dir 2.0 (Greg Klanderman) + -- ps-print.el-3.05 (Jacques Duthen Prestataire) + -- lazy-lock-1.16 (Simon Marshall) + -- fast-lock.el 3.10.2 (Simon Marshall) + -- reporter 3.3 (Barry Warsaw) + -- hm--html-menus 5.4 (Heiko Muenkel) + -- cc-mode 4.387 (Barry Warsaw) + -- elp 2.37 (Barry Warsaw) + -- itimer.el-1.05 (Kyle Jones) + -- floating-toolbar.el-1.02 (Kyle Jones) + -- balloon-help.el-1.05 (Kyle Jones) + -- hyperbole-4.023 (Bob Weiner) + -- cperl-mode-1.31+ + -- OO-Browser 2.10 (Bob Weiner) + +-- Many new packages have been added: + -- m4-mode 1.8 (Andrew Csillag) + -- crisp.el - crisp/brief emulation (Gary D. Foster) + -- Johan Vroman's iso-acc.el has been ported to XEmacs by Alexandre Oliva + -- psgml-1.01 (Lennart Staflin, James Clark) + -- python-mode.el 2.90 (Barry Warsaw) + -- vrml-mode.el (Ben Wing) + -- enriched.el, face-menu.el (Boris Goldowsky, Michael Sperber) + -- sh-script.el (Daniel Pfeiffer) + -- decipher.el (Christopher J. Madsen) + -- mic-paren.el (Mikael Sjödin) + -- xrdb-mode.el 1.21 (Barry Warsaw) + -- redo.el 1.01 (Kyle Jones) + -- edmacro.el (ported by Hrvoje Niksic) + -- verilog-mode.el (Michael McNamara) + -- webjump.el-1.4 (Neil W. Van Dyke) + -- overlay.el (Joseph Nuspl support for Emacs overlay API) + -- browse-cltl2.el 1.1 (Holger Schauer) + -- mine.el 1.17 (Jacques Duthen) + -- igrep.el 2.56 (Kevin Rodger) + -- speedbar.el (Eric Ludlam) + -- frame-icon.el (Michael Lamoureux) + -- winmgr-mode.el (David Konerding, Stefan Strobel & Barry Warsaw) + -- whitespace-mode.el (Heiko Muenkel) + -- detached-minibuf.el (Alvin Shelton) + +-- New function x-keysym-on-keyboard-p helps determine keyboard + characteristics for key rebinding: + + x-keysym-on-keyboard-p: (KEYSYM &optional DEVICE) + -- a built-in function. + Return true if KEYSYM names a key on the keyboard of DEVICE. + More precisely, return true if pressing a physical key + on the keyboard of DEVICE without any modifier keys generates KEYSYM. + Valid keysyms are listed in the files /usr/include/X11/keysymdef.h and in + /usr/lib/X11/XKeysymDB, or whatever the equivalents are on your system. + +-- preceding-char and following-char have been obsoleted. Use the + much safer and correct functions char-after and char-before instead. + +-- Many symbols present for compatibility with GNU Emacs no longer + generate bytecompiler warning messages + +-- Installed info files are now compressed (support courtesy of Joseph J Nuspl) + +-- (load-average) works on Solaris, even if you're not root. Thanks to + Hrvoje Niksic. + +-- OffiX drag-and-drop support added + +-- lots of syncing with 19.34 elisp files, most by Steven Baur + +-- M-: (eval-expression) is now enabled by default since it is much + more difficult to type. ** Major Differences Between 19.13 and 19.14 ============================================ @@ -1593,10 +1472,10 @@ -- The `face' property of extents and text properties can now be a list. --- The `mouse-face' property from FSF GNU Emacs is now supported. +-- The `mouse-face' property from GNU Emacs is now supported. It supersedes the `highlight' property. --- `enriched' and `facemenu' packages from FSF GNU Emacs have been ported. +-- `enriched' and `facemenu' packages from GNU Emacs have been ported. -- New functions for easier creation of dialog boxes: `get-dialog-box-response', `message-box', and `message-or-box'. @@ -2491,7 +2370,7 @@ *** Keymaps ----------- -The FSF GNU Emacs concept of `function-key-map' is now partially +The GNU Emacs concept of `function-key-map' is now partially implemented. This allows conversion of function-key escape sequences such as `ESC [ 1 1 ~' into an equivalent human-readable keysym such as `F1'. This work will be completed in 19.14. The function-key map is @@ -2520,7 +2399,7 @@ can now easily specify an action to be invoked on single-click (i.e. down-up without appreciable motion), double-click, drag-up, etc. -Some code from FSF GNU Emacs has been ported over, generalizing some of +Some code from GNU Emacs has been ported over, generalizing some of the X-specific mouse stuff. ** INCOMPATIBLE CHANGE **: The function `set-mouse-position' accepts
--- a/etc/sample.emacs Mon Aug 13 08:54:26 2007 +0200 +++ b/etc/sample.emacs Mon Aug 13 08:54:51 2007 +0200 @@ -398,6 +398,15 @@ ) ) +;;; ******************** +;;; Load the default-dir.el package which installs fancy handling +;;; of the initial contents in the minibuffer when reading +;;; file names. + +(if (and running-xemacs + (or (and (= emacs-major-version 20) (>= emacs-minor-version 1)) + (and (= emacs-major-version 19) (>= emacs-minor-version 15)))) + (require 'default-dir)) ;;; ******************** ;;; Load the auto-save.el package, which lets you put all of your autosave
--- a/etc/sgml/CATALOG Mon Aug 13 08:54:26 2007 +0200 +++ b/etc/sgml/CATALOG Mon Aug 13 08:54:51 2007 +0200 @@ -46,9 +46,10 @@ PUBLIC "-//Microsoft//DTD Internet Explorer 2.0 HTML Strict//EN" iehtml-s.dtd PUBLIC "-//Microsoft//DTD Internet Explorer 2.0 Tables//EN" ietables.dtd PUBLIC "-//W3C//DTD HTML 3.2//EN" html-3.2.dtd +PUBLIC "-//W3C//DTD HTML 3.2 Final//EN" html-3.2f.dtd PUBLIC "-//W3C//DTD HTML Experimental 19960712//EN" html-cougar.dtd PUBLIC "-//Microsoft//DTD Internet Explorer 3.0 Tables//EN" ie3tables.dtd PUBLIC "-//Microsoft//DTD Internet Explorer 3.0 HTML//EN" ie30.dtd PUBLIC "+//Silmaril//DTD HTML Pro v0r11 19970101//EN" htmlpro.dtd -DOCTYPE HTML html-3.2.dtd +DOCTYPE HTML html-3.2f.dtd DOCTYPE HTML-3 html-3.dtd
--- a/etc/sgml/ECAT Mon Aug 13 08:54:26 2007 +0200 +++ b/etc/sgml/ECAT Mon Aug 13 08:54:51 2007 +0200 @@ -6,3 +6,4 @@ FILE html-3.2.dtd [ ] cdtd/html-3.2 FILE html-hj.dtd [ ] cdtd/html-hj FILE iehtml.dtd [ ] cdtd/iehtml +FILE html-3.2f.dtd [] cdtd/html-3.2f
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/sgml/html-3.2f.dtd Mon Aug 13 08:54:51 2007 +0200 @@ -0,0 +1,598 @@ +<!-- + W3C Document Type Definition for the HyperText Markup Language + version 3.2 as ratified by a vote of W3C member companies. + For more information on W3C look at URL http://www.w3.org/ + + Date: Tuesday January 14th 1996 + + Author: Dave Raggett <dsr@w3.org> + + HTML 3.2 aims to capture recommended practice as of early '96 + and as such to be used as a replacement for HTML 2.0 (RFC 1866). + Widely deployed rendering attributes are included where they + have been shown to be interoperable. SCRIPT and STYLE are + included to smooth the introduction of client-side scripts + and style sheets. Browsers must avoid showing the contents + of these element Otherwise support for them is not required. + ID, CLASS and STYLE attributes are not included in this version + of HTML. +--> + +<!ENTITY % HTML.Version + "-//W3C//DTD HTML 3.2 Final//EN" + + -- Typical usage: + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> + <html> + ... + </html> + -- + > + +<!--================== Deprecated Features Switch =========================--> + +<!ENTITY % HTML.Deprecated "INCLUDE"> + +<!--================== Imported Names =====================================--> + +<!ENTITY % Content-Type "CDATA" + -- meaning a MIME content type, as per RFC1521 + --> + +<!ENTITY % HTTP-Method "GET | POST" + -- as per HTTP specification + --> + +<!ENTITY % URL "CDATA" + -- The term URL means a CDATA attribute + whose value is a Uniform Resource Locator, + See RFC1808 (June 95) and RFC1738 (Dec 94). + --> + +<!-- Parameter Entities --> + +<!ENTITY % head.misc "SCRIPT|STYLE|META|LINK" -- repeatable head elements --> + +<!ENTITY % heading "H1|H2|H3|H4|H5|H6"> + +<!ENTITY % list "UL | OL | DIR | MENU"> + +<![ %HTML.Deprecated [ + <!ENTITY % preformatted "PRE | XMP | LISTING"> +]]> + +<!ENTITY % preformatted "PRE"> + +<!--================ Character mnemonic entities ==========================--> + +<!ENTITY % ISOlat1 PUBLIC + "ISO 8879-1986//ENTITIES Added Latin 1//EN//HTML"> +%ISOlat1; + +<!--================ Entities for special symbols =========================--> +<!-- &trade and &cbsp are not widely deployed and so not included here --> + +<!ENTITY amp CDATA "&" -- ampersand --> +<!ENTITY gt CDATA ">" -- greater than --> +<!ENTITY lt CDATA "<" -- less than --> + +<!--=================== Text Markup =======================================--> + +<!ENTITY % font "TT | I | B | U | STRIKE | BIG | SMALL | SUB | SUP"> + +<!ENTITY % phrase "EM | STRONG | DFN | CODE | SAMP | KBD | VAR | CITE"> + +<!ENTITY % special "A | IMG | APPLET | FONT | BASEFONT | BR | SCRIPT | MAP"> + +<!ENTITY % form "INPUT | SELECT | TEXTAREA"> + +<!ENTITY % text "#PCDATA | %font | %phrase | %special | %form"> + +<!ELEMENT (%font|%phrase) - - (%text)*> + +<!-- there are also 16 widely known color names although + the resulting colors are implementation dependent: + + aqua, black, blue, fuchsia, gray, green, lime, maroon, + navy, olive, purple, red, silver, teal, white, and yellow + + These colors were originally picked as being the standard + 16 colors supported with the Windows VGA palette. + --> + +<!ELEMENT FONT - - (%text)* -- local change to font --> +<!ATTLIST FONT + size CDATA #IMPLIED -- [+]nn e.g. size="+1", size=4 -- + color CDATA #IMPLIED -- #RRGGBB in hex, e.g. red: color="#FF0000" -- + > + +<!ELEMENT BASEFONT - O EMPTY -- base font size (1 to 7)--> +<!ATTLIST BASEFONT + size CDATA #IMPLIED -- e.g. size=3 -- + > + +<!ELEMENT BR - O EMPTY -- forced line break --> +<!ATTLIST BR + clear (left|all|right|none) none -- control of text flow -- + > + +<!--================== HTML content models ================================--> +<!-- + HTML has three basic content models: + + %text character level elements and text strings + %flow block-like elements e.g. paragraphs and lists + %bodytext as %flow plus headers H1-H6 and ADDRESS +--> + +<!ENTITY % block + "P | %list | %preformatted | DL | DIV | CENTER | + BLOCKQUOTE | FORM | ISINDEX | HR | TABLE"> + +<!-- %flow is used for DD and LI --> + +<!ENTITY % flow "(%text | %block)*"> + +<!--=================== Document Body =====================================--> + +<!ENTITY % body.content "(%heading | %text | %block | ADDRESS)*"> + +<!ENTITY % color "CDATA" -- a color specification: #HHHHHH @@ details? --> + +<!ENTITY % body-color-attrs " + bgcolor %color #IMPLIED + text %color #IMPLIED + link %color #IMPLIED + vlink %color #IMPLIED + alink %color #IMPLIED + "> + +<!ELEMENT BODY O O %body.content> +<!ATTLIST BODY + background %URL #IMPLIED -- texture tile for document background -- + %body-color-attrs; -- bgcolor, text, link, vlink, alink -- + > + +<!ENTITY % address.content "((%text;) | P)*"> + +<!ELEMENT ADDRESS - - %address.content> + +<!ELEMENT DIV - - %body.content> +<!ATTLIST DIV + align (left|center|right) #IMPLIED -- alignment of following text -- + > + +<!-- CENTER is a shorthand for DIV with ALIGN=CENTER --> +<!ELEMENT center - - %body.content> + +<!--================== The Anchor Element =================================--> + +<!ELEMENT A - - (%text)* -(A)> +<!ATTLIST A + name CDATA #IMPLIED -- named link end -- + href %URL #IMPLIED -- URL for linked resource -- + rel CDATA #IMPLIED -- forward link types -- + rev CDATA #IMPLIED -- reverse link types -- + title CDATA #IMPLIED -- advisory title string -- + > + +<!--================== Client-side image maps ============================--> + +<!-- These can be placed in the same document or grouped in a + separate document although this isn't yet widely supported --> + +<!ENTITY % SHAPE "(rect|circle|poly)"> +<!ENTITY % COORDS "CDATA" -- comma separated list of numbers --> + +<!ELEMENT MAP - - (AREA)*> +<!ATTLIST MAP + name CDATA #IMPLIED + > + +<!ELEMENT AREA - O EMPTY> +<!ATTLIST AREA + shape %SHAPE rect + coords %COORDS #IMPLIED -- defines coordinates for shape -- + href %URL #IMPLIED -- this region acts as hypertext link -- + nohref (nohref) #IMPLIED -- this region has no action -- + alt CDATA #REQUIRED -- needed for non-graphical user agents -- + > + +<!--================== The LINK Element ==================================--> + +<!ENTITY % Types "CDATA" + -- See Internet Draft: draft-ietf-html-relrev-00.txt + LINK has been part of HTML since the early days + although few browsers as yet take advantage of it. + + Relationship values can be used in principle: + + a) for document specific toolbars/menus when used + with the LINK element in the document head: + b) to link to a separate style sheet + c) to make a link to a script + d) by stylesheets to control how collections of + html nodes are rendered into printed documents + e) to make a link to a printable version of this document + e.g. a postscript or pdf version +--> + +<!ELEMENT LINK - O EMPTY> +<!ATTLIST LINK + href %URL #IMPLIED -- URL for linked resource -- + rel %Types #IMPLIED -- forward link types -- + rev %Types #IMPLIED -- reverse link types -- + title CDATA #IMPLIED -- advisory title string -- + > + +<!--=================== Images ============================================--> + +<!ENTITY % Length "CDATA" -- nn for pixels or nn% for percentage length --> +<!ENTITY % Pixels "CDATA" -- integer representing length in pixels --> + +<!-- Suggested widths are used for negotiating image size + with the module responsible for painting the image. + align=left or right cause image to float to margin + and for subsequent text to wrap around image --> + +<!ENTITY % IAlign "(top|middle|bottom|left|right)"> + +<!ELEMENT IMG - O EMPTY -- Embedded image --> +<!ATTLIST IMG + src %URL #REQUIRED -- URL of image to embed -- + alt CDATA #IMPLIED -- for display in place of image -- + align %IAlign #IMPLIED -- vertical or horizontal alignment -- + height %Pixels #IMPLIED -- suggested height in pixels -- + width %Pixels #IMPLIED -- suggested width in pixels -- + border %Pixels #IMPLIED -- suggested link border width -- + hspace %Pixels #IMPLIED -- suggested horizontal gutter -- + vspace %Pixels #IMPLIED -- suggested vertical gutter -- + usemap %URL #IMPLIED -- use client-side image map -- + ismap (ismap) #IMPLIED -- use server image map -- + > + +<!-- USEMAP points to a MAP element which may be in this document + or an external document, although the latter is not widely supported --> + +<!--=================== Java APPLET tag ===================================--> +<!-- + This tag is supported by all Java enabled browsers. Applet resources + (including their classes) are normally loaded relative to the document + URL (or <BASE> element if it is defined). The CODEBASE attribute is used + to change this default behavior. If the CODEBASE attribute is defined then + it specifies a different location to find applet resources. The value + can be an absolute URL or a relative URL. The absolute URL is used as is + without modification and is not effected by the documents <BASE> element. + When the codebase attribute is relative, then it is relative to the + document URL (or <BASE> tag if defined). +--> +<!ELEMENT APPLET - - (PARAM | %text)*> +<!ATTLIST APPLET + codebase %URL #IMPLIED -- code base -- + code CDATA #REQUIRED -- class file -- + alt CDATA #IMPLIED -- for display in place of applet -- + name CDATA #IMPLIED -- applet name -- + width %Pixels #REQUIRED -- suggested width in pixels -- + height %Pixels #REQUIRED -- suggested height in pixels -- + align %IAlign #IMPLIED -- vertical or horizontal alignment -- + hspace %Pixels #IMPLIED -- suggested horizontal gutter -- + vspace %Pixels #IMPLIED -- suggested vertical gutter -- + > + +<!ELEMENT PARAM - O EMPTY> +<!ATTLIST PARAM + name NMTOKEN #REQUIRED -- The name of the parameter -- + value CDATA #IMPLIED -- The value of the parameter -- + > + +<!-- +Here is an example: + + <applet codebase="applets/NervousText" + code=NervousText.class + width=300 + height=50> + <param name=text value="Java is Cool!"> + <img src=sorry.gif alt="This looks better with Java support"> + </applet> +--> + +<!--=================== Horizontal Rule ===================================--> + +<!ELEMENT HR - O EMPTY> +<!ATTLIST HR + align (left|right|center) #IMPLIED + noshade (noshade) #IMPLIED + size %Pixels #IMPLIED + width %Length #IMPLIED + > +<!--=================== Paragraphs=========================================--> + +<!ELEMENT P - O (%text)*> +<!ATTLIST P + align (left|center|right) #IMPLIED + > + +<!--=================== Headings ==========================================--> + +<!-- + There are six levels of headers from H1 (the most important) + to H6 (the least important). +--> + +<!ELEMENT ( %heading ) - - (%text;)*> +<!ATTLIST ( %heading ) + align (left|center|right) #IMPLIED + > + +<!--=================== Preformatted Text =================================--> + +<!-- excludes images and changes in font size --> + +<!ENTITY % pre.exclusion "IMG|BIG|SMALL|SUB|SUP|FONT"> + +<!ELEMENT PRE - - (%text)* -(%pre.exclusion)> +<!ATTLIST PRE + width NUMBER #implied -- is this widely supported? -- + > + +<![ %HTML.Deprecated [ + +<!ENTITY % literal "CDATA" + -- historical, non-conforming parsing mode where + the only markup signal is the end tag + in full + --> + +<!ELEMENT (XMP|LISTING) - - %literal> +<!ELEMENT PLAINTEXT - O %literal> + +]]> + +<!--=================== Block-like Quotes =================================--> + +<!ELEMENT BLOCKQUOTE - - %body.content> + +<!--=================== Lists =============================================--> + +<!-- + HTML 3.2 allows you to control the sequence number for ordered lists. + You can set the sequence number with the START and VALUE attributes. + The TYPE attribute may be used to specify the rendering of ordered + and unordered lists. +--> + +<!-- definition lists - DT for term, DD for its definition --> + +<!ELEMENT DL - - (DT|DD)+> +<!ATTLIST DL + compact (compact) #IMPLIED -- more compact style -- + > + +<!ELEMENT DT - O (%text)*> +<!ELEMENT DD - O %flow;> + +<!-- Ordered lists OL, and unordered lists UL --> +<!ELEMENT (OL|UL) - - (LI)+> + +<!-- + Numbering style + 1 arablic numbers 1, 2, 3, ... + a lower alpha a, b, c, ... + A upper alpha A, B, C, ... + i lower roman i, ii, iii, ... + I upper roman I, II, III, ... + + The style is applied to the sequence number which by default + is reset to 1 for the first list item in an ordered list. + + This can't be expressed directly in SGML due to case folding. +--> + +<!ENTITY % OLStyle "CDATA" -- constrained to: [1|a|A|i|I] --> + +<!ATTLIST OL -- ordered lists -- + type %OLStyle #IMPLIED -- numbering style -- + start NUMBER #IMPLIED -- starting sequence number -- + compact (compact) #IMPLIED -- reduced interitem spacing -- + > + +<!-- bullet styles --> + +<!ENTITY % ULStyle "disc|square|circle"> + +<!ATTLIST UL -- unordered lists -- + type (%ULStyle) #IMPLIED -- bullet style -- + compact (compact) #IMPLIED -- reduced interitem spacing -- + > + +<!ELEMENT (DIR|MENU) - - (LI)+ -(%block)> +<!ATTLIST DIR + compact (compact) #IMPLIED + > +<!ATTLIST MENU + compact (compact) #IMPLIED + > + +<!-- <DIR> Directory list --> +<!-- <DIR COMPACT> Compact list style --> +<!-- <MENU> Menu list --> +<!-- <MENU COMPACT> Compact list style --> + +<!-- The type attribute can be used to change the bullet style + in unordered lists and the numbering style in ordered lists --> + +<!ENTITY % LIStyle "CDATA" -- constrained to: "(%ULStyle|%OLStyle)" --> + +<!ELEMENT LI - O %flow -- list item --> +<!ATTLIST LI + type %LIStyle #IMPLIED -- list item style -- + value NUMBER #IMPLIED -- reset sequence number -- + > + +<!--================ Forms ===============================================--> + +<!ELEMENT FORM - - %body.content -(FORM)> +<!ATTLIST FORM + action %URL #IMPLIED -- server-side form handler -- + method (%HTTP-Method) GET -- see HTTP specification -- + enctype %Content-Type; "application/x-www-form-urlencoded" + > + +<!ENTITY % InputType + "(TEXT | PASSWORD | CHECKBOX | RADIO | SUBMIT + | RESET | FILE | HIDDEN | IMAGE)"> + +<!ELEMENT INPUT - O EMPTY> +<!ATTLIST INPUT + type %InputType TEXT -- what kind of widget is needed -- + name CDATA #IMPLIED -- required for all but submit and reset -- + value CDATA #IMPLIED -- required for radio and checkboxes -- + checked (checked) #IMPLIED -- for radio buttons and check boxes -- + size CDATA #IMPLIED -- specific to each type of field -- + maxlength NUMBER #IMPLIED + src %URL #IMPLIED -- for fields with background images -- + align (top|middle|bottom|left|right) top -- image alignment -- + > + +<!ELEMENT SELECT - - (OPTION+)> +<!ATTLIST SELECT + name CDATA #REQUIRED + size NUMBER #IMPLIED + multiple (multiple) #IMPLIED + > + +<!ELEMENT OPTION - O (#PCDATA)*> +<!ATTLIST OPTION + selected (selected) #IMPLIED + value CDATA #IMPLIED -- defaults to element content -- + > + +<!-- Multi-line text input field. --> + +<!ELEMENT TEXTAREA - - (#PCDATA)*> +<!ATTLIST TEXTAREA + name CDATA #REQUIRED + rows NUMBER #REQUIRED + cols NUMBER #REQUIRED + > + +<!--======================= Tables ========================================--> + +<!-- Widely deployed subset of the full table standard, see RFC 1942 + e.g. at http://www.ics.uci.edu/pub/ietf/html/rfc1942.txt --> + +<!-- horizontal placement of table relative to window --> +<!ENTITY % Where "(left|center|right)"> + +<!-- horizontal alignment attributes for cell contents --> +<!ENTITY % cell.halign + "align (left|center|right) #IMPLIED" + > + +<!-- vertical alignment attributes for cell contents --> +<!ENTITY % cell.valign + "valign (top|middle|bottom) #IMPLIED" + > + +<!ELEMENT table - - (caption?, tr+)> +<!ELEMENT tr - O (th|td)*> +<!ELEMENT (th|td) - O %body.content> + +<!ATTLIST table -- table element -- + align %Where; #IMPLIED -- table position relative to window -- + width %Length #IMPLIED -- table width relative to window -- + border %Pixels #IMPLIED -- controls frame width around table -- + cellspacing %Pixels #IMPLIED -- spacing between cells -- + cellpadding %Pixels #IMPLIED -- spacing within cells -- + > + +<!ELEMENT CAPTION - - (%text;)* -- table or figure caption --> +<!ATTLIST CAPTION + align (top|bottom) #IMPLIED + > + +<!ATTLIST tr -- table row -- + %cell.halign; -- horizontal alignment in cells -- + %cell.valign; -- vertical alignment in cells -- + > + +<!ATTLIST (th|td) -- header or data cell -- + nowrap (nowrap) #IMPLIED -- suppress word wrap -- + rowspan NUMBER 1 -- number of rows spanned by cell -- + colspan NUMBER 1 -- number of cols spanned by cell -- + %cell.halign; -- horizontal alignment in cell -- + %cell.valign; -- vertical alignment in cell -- + width %Pixels #IMPLIED -- suggested width for cell -- + height %Pixels #IMPLIED -- suggested height for cell -- + > + +<!--================ Document Head ========================================--> + +<!-- %head.misc defined earlier on as "SCRIPT|STYLE|META|LINK" --> + +<!ENTITY % head.content "TITLE & ISINDEX? & BASE?"> + +<!ELEMENT HEAD O O (%head.content) +(%head.misc)> + +<!ELEMENT TITLE - - (#PCDATA)* -(%head.misc) + -- The TITLE element is not considered part of the flow of text. + It should be displayed, for example as the page header or + window title. + --> + +<!ELEMENT ISINDEX - O EMPTY> +<!ATTLIST ISINDEX + prompt CDATA #IMPLIED -- prompt message --> + +<!-- + The BASE element gives an absolute URL for dereferencing relative + URLs, e.g. + + <BASE href="http://foo.com/index.html"> + ... + <IMG SRC="images/bar.gif"> + + The image is deferenced to + + http://foo.com/images/bar.gif + + In the absence of a BASE element the document URL should be used. + Note that this is not necessarily the same as the URL used to + request the document, as the base URL may be overridden by an HTTP + header accompanying the document. +--> + +<!ELEMENT BASE - O EMPTY> +<!ATTLIST BASE + href %URL #REQUIRED + > + +<!ELEMENT META - O EMPTY -- Generic Metainformation --> +<!ATTLIST META + http-equiv NAME #IMPLIED -- HTTP response header name -- + name NAME #IMPLIED -- metainformation name -- + content CDATA #REQUIRED -- associated information -- + > + +<!-- SCRIPT/STYLE are place holders for transition to next version of HTML --> + +<!ELEMENT STYLE - - (#PCDATA)* -(%head.misc) -- style info --> +<!ELEMENT SCRIPT - - (#PCDATA)* -(%head.misc) -- script statements --> + +<!--================ Document Structure ===================================--> + +<!ENTITY % version.attr "VERSION CDATA #FIXED '%HTML.Version;'"> + +<![ %HTML.Deprecated [ + <!ENTITY % html.content "HEAD, BODY, PLAINTEXT?"> +]]> + +<!ENTITY % html.content "HEAD, BODY"> + +<!ELEMENT HTML O O (%html.content)> +<!ATTLIST HTML + %version.attr; + > +
--- a/info/dir Mon Aug 13 08:54:26 2007 +0200 +++ b/info/dir Mon Aug 13 08:54:51 2007 +0200 @@ -51,10 +51,12 @@ * CL:: A Common Lisp compatibility package for Emacs-Lisp. * Custom:: Customization Library for Emacs * Ediff:: A Visual Interface to Unix Diff and Patch Utilities. +* EFS:: Transparent remote file access via FTP * External-Widget:: Use XEmacs as a text widget inside of another program. * Forms:: A package for editing databases by filling in forms. * Gnus:: A netnews and mail reader for XEmacs. +* HM--HTML-Mode:: HTML Editing Mode. * Hyperbole:: A programmable information management and hypertext system. * ILISP:: Multi-dialect inferior LISP interface. * Ispell:: Interactive spelling corrector.
--- a/lib-src/emacsserver.c Mon Aug 13 08:54:26 2007 +0200 +++ b/lib-src/emacsserver.c Mon Aug 13 08:54:51 2007 +0200 @@ -59,6 +59,13 @@ #if ! defined (HAVE_SYSVIPC) /* BSD code is very different from SYSV IPC code */ +#include "../src/sysproc.h" /* Needed for select */ +#ifndef SOCK_STREAM +/* this is normally included by src/sysproc.h. might be safe to omit + * it entirely. lousy ultrix's sys/socket.h chokes if it's included + * twice, so we can't include unconditionally. */ +#include <sys/socket.h> +#endif #include <sys/types.h> #include <sys/file.h> #include <sys/signal.h> @@ -66,13 +73,6 @@ #include <sys/un.h> #include <stdio.h> #include <errno.h> -#include "../src/sysproc.h" /* Needed for select */ -#ifndef SOCK_STREAM -/* this is normally included by src/sysproc.h. might be safe to omit - * it entirely. lousy ultrix's sys/socket.h chokes if it's included - * twice, so we can't include unconditionally. */ -#include <sys/socket.h> -#endif void main ()
--- a/lisp/efs/Makefile Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/Makefile Mon Aug 13 08:54:51 2007 +0200 @@ -2,7 +2,7 @@ # # File: Makefile # Release: $efs release: 1.15 $ -# Version: $Revision: 1.4 $ +# Version: $Revision: 1.5 $ # RCS: # Description: Makefile for byte-compiling efs and dired. # Author: Andy Norman, HPLabs, Bristol, UK. @@ -21,7 +21,8 @@ # 19.1 and 19.22, inclusive. # 19.23 for version 19.23 and later of the original GNU Emacs from FSF # l19.11 for XEmacs 19.11 trhu 19.14 -# x19.15 for XEmacs 19.15 and later +# x19.15 for XEmacs 19.15 +# x20 for XEmacs 20.1 and later # LISPDIR should be the directory in which you want the .elc # files installed. # BDIR should be the directory containing the .elc files for the @@ -41,7 +42,8 @@ # 19.22, inclusive # 19.23 for the original GNU Emacs from FSF, version 19.23 and later. # l19.11 for Lucid XEmacs 19.11 thru 19.14 -# x19.15 for XEmacs 19.15 and later +# x19.15 for XEmacs 19.15 +# x20 for XEmacs 20.1 and later # # If you have set the VERSION variable correctly, then typing just # make will suffice. @@ -72,6 +74,10 @@ CWD=`pwd` # Directory in which to install the lisp files LISPDIR= +# Directory in which to install the info files +INFODIR= +# Directory in which to install the Texinfo file +TEXIDIR= # Directory containing byte-compiler. This is used by fixup.el BDIR= # Directory containing VM's .elc files. @@ -112,12 +118,18 @@ efs-vms.el efs-vos.el efs-plan9.el efs-ms-unix.el VMOBJS = efs-vm.elc VMSRC = efs-vm.el -GEOBJS = dired-fsf.elc dired-mule.elc efs-dired-mule.elc \ - passwd.elc diff.elc auto-save.elc -GESRC = dired-fsf.el dired-mule.el efs-dired-mule.el \ - passwd.el diff.el auto-save.el -XEOBJS = dired-faces.elc dired-xemacs.elc -XESRC = dired-faces.el dired-xemacs.el +MULEOBJS = dired-mule.elc efs-dired-mule.elc +MULESRC = dired-mule.el efs-dired-mule.el +GEOBJS = dired-fsf.elc \ + passwd.elc diff.elc auto-save.elc \ + $(MULEOBJS) +GESRC = dired-fsf.el \ + passwd.el diff.el auto-save.el \ + $(MULESRC) +XEOBJS = dired-faces.elc dired-xemacs.elc \ + $(VMOBJS) +XESRC = dired-faces.el dired-xemacs.el \ + $(VMSRC) $(MULESRC) OBJS = $(DOBJS) $(EFSOBJS) $(VMOBJS) $(GEOBJS) $(XEOBJS) \ efs-18.elc efs-19.elc efs-19.23.elc \ efs-l19.11.elc efs-x19.15.elc \ @@ -259,20 +271,22 @@ 19.23: efs dired efs-19.23.elc $(GEOBJS) l19.11: efs dired efs-l19.11.elc $(XEOBJS) x19.15: efs dired efs-x19.15.elc $(XEOBJS) +x20: efs dired efs-x19.15.elc $(XEOBJS) $(MULEOBJS) # Installation install: @echo "Installing in $(LISPDIR)..." - @ls -C *.elc cp *.elc $(LISPDIR) + cp efs.info $(INFODIR) install_src: @echo "Installing in $(LISPDIR)..." - @ls -C `ls *.el 2>&1 | grep -v "fixup"` 2> /dev/null cp `ls *.el | grep -v "fixup"` $(LISPDIR) + cp efs.texi $(TEXIDIR) install_xemacs: @echo "Installing source in $(LISPDIR)..." cp $(EFSSRC) $(DSRC) $(XESRC) efs-x19.15.el $(LISPDIR) cp Makefile README fixup.el $(LISPDIR) + cp efs.texi $(TEXIDIR) diff_xemacs: for f in $(EFSSRC) $(DSRC) $(XESRC) efs-x19.15.el \ Makefile README fixup.el; do \
--- a/lisp/efs/default-dir.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/default-dir.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: default-dir.el ;; RCS: -;; Version: $Revision: 1.5 $ +;; Version: #Revision: 1.5 $ ;; Description: Defines the function default-directory, for fancy handling ;; of the initial contents in the minibuffer when reading ;; file names.
--- a/lisp/efs/dired-cmpr.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/dired-cmpr.el Mon Aug 13 08:54:51 2007 +0200 @@ -1,7 +1,7 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; File: dired-cmpr.el -;; Dired Version: $Revision: 7.9 $ +;; Dired Version: #Revision: 7.9 $ ;; RCS: ;; Description: Commands for compressing marked files. ;;
--- a/lisp/efs/dired-diff.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/dired-diff.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: dired-diff.el ;; RCS: -;; Dired Version: $Revision: 7.9 $ +;; Dired Version: #Revision: 7.9 $ ;; Description: Support for diff and related commands. ;; Author: Sandy Rutherford <sandy@ibm550.sissa.it> ;; Created: Fri Jun 24 08:50:20 1994 by sandy on ibm550
--- a/lisp/efs/dired-faces.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/dired-faces.el Mon Aug 13 08:54:51 2007 +0200 @@ -1,7 +1,7 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; File: dired-faces.el -;; Dired Version: $Revision: 1.2 $ +;; Dired Version: #Revision: 7.9 $ ;; RCS: ;; Description: rudimentary face customization support for dired ;; Author: Mike Sperber <sperber@informatik.uni-tuebingen.de>
--- a/lisp/efs/dired-fsf.el Mon Aug 13 08:54:26 2007 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,684 +0,0 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; File: dired-fsf.el -;; Dired Version: $Revision: 1.1 $ -;; RCS: -;; Description: dired functions for V19 of the original GNU Emacs from FSF -;; Created: Sat Jan 29 01:38:49 1994 by sandy on ibm550 -;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -;;;; Requirements and provisions -(provide 'dired-fsf) -(require 'dired) - -;;;; Variables to set. - -(setq dired-modeline-tracking-cmds '(mouse-set-point)) - -;;;; Support for text properties - -(defun dired-insert-set-properties (beg end) - ;; Sets the text properties for the file names. - (save-excursion - (goto-char beg) - (beginning-of-line) - (let ((eol (save-excursion (end-of-line) (point))) - (bol (point))) - (while (< (point) end) - (setq eol (save-excursion (end-of-line) (point))) - (if (dired-manual-move-to-filename nil bol eol) - (dired-set-text-properties - (point) (dired-manual-move-to-end-of-filename nil bol eol))) - (goto-char (setq bol (1+ eol))))))) - -(defun dired-remove-text-properties (start end &optional object) - ;; Removes text properties. Called in popup buffers. - (remove-text-properties start end '(mouse-face dired-file-name) object)) - -(defun dired-set-text-properties (start end) - ;; Sets dired's text properties - (put-text-property start end 'mouse-face 'highlight) - (put-text-property start end 'dired-file-name t)) - -(defun dired-move-to-filename (&optional raise-error bol eol) - (or bol (setq bol (save-excursion - (skip-chars-backward "^\n\r") - (point)))) - (or eol (setq eol (save-excursion - (skip-chars-forward "^\n\r") - (point)))) - (goto-char bol) - (let ((spot (next-single-property-change bol 'dired-file-name nil eol))) - (if (= spot eol) - (if raise-error - (error "No file on this line") - nil) - (goto-char spot)))) - -(defun dired-move-to-end-of-filename (&optional no-error bol eol) - ;; Assumes point is at beginning of filename, - ;; thus the rwx bit re-search-backward below will succeed in *this* - ;; line if at all. So, it should be called only after - ;; (dired-move-to-filename t). - ;; On failure, signals an error (with non-nil NO-ERROR just returns nil). - (or eol (setq eol (save-excursion (skip-chars-forward "^\r\n") (point)))) - (and - (null no-error) - selective-display - (or bol (setq bol (save-excursion (skip-chars-backward "^\r\n") (point)))) - (eq (char-after (1- bol)) ?\r) - (cond - ((dired-subdir-hidden-p (dired-current-directory)) - (error - (substitute-command-keys - "File line is hidden. Type \\[dired-hide-subdir] to unhide."))) - ((error - (substitute-command-keys - "File line is omitted. Type \\[dired-omit-toggle] to un-omit."))))) - (if (get-text-property (point) 'dired-file-name nil) - (goto-char (next-single-property-change (point) 'dired-file-name - nil eol)) - (and (null no-error) (error "No file on this line")))) - -;; Text properties do not work properly in pre-19.26. - -(if (or (not (boundp 'emacs-major-version)) - (= emacs-major-version 19)) - (progn - (if (not (boundp 'emacs-minor-version)) - ;; Argument structure of where-is-internal went through some - ;; changes. - (defun dired-key-description (cmd &rest prefixes) - ;; Return a key description string for a menu. - ;; If prefixes are given, they should be either strings, - ;; integers, or 'universal-argument. - (let ((key (where-is-internal cmd dired-mode-map nil t))) - (if key - (key-description - (apply 'vconcat - (append - (mapcar - (function - (lambda (x) - (if (eq x 'universal-argument) - (where-is-internal 'universal-argument - dired-mode-map nil t) - x))) - prefixes) - (list key)))) - "")))) - (if (or (not (boundp 'emacs-minor-version)) - (< emacs-minor-version 26)) - (progn - (fset 'dired-insert-set-properties 'ignore) - (fset 'dired-remove-text-properties 'ignore) - (fset 'dired-set-text-properties 'ignore) - (fset 'dired-move-to-filename 'dired-manual-move-to-filename) - (fset 'dired-move-to-end-of-filename - 'dired-manual-move-to-end-of-filename))))) - -;;;; Keymaps - -;;; Caching Menus - -(defun dired-menu-item (menu-item cmd width &rest prefixes) - ;; Return a key description string for a menu. If prefixes are given, - ;; they should be either characters, or 'universal-argument. - (let ((desc (apply 'dired-key-description cmd prefixes))) - (if (string-equal desc "") - menu-item - (concat menu-item - (make-string - (max (- width (length menu-item) (length desc) 2) 1) 32) - "(" desc ")")))) - -(defun dired-cache-key (keymap event cmd &rest prefixes) - ;; Caches a keybinding for cms in a menu keymap. - ;; This is able to handle prefix keys. - (let ((desc (apply 'dired-key-description cmd prefixes))) - (or (string-equal desc "") - (progn - (let ((elt (assq event keymap))) - (if elt - (let ((tail (cdr elt))) - (setcdr tail - (cons - (cons - nil (concat " (" desc ")")) - (cdr tail)))))))))) - -;; Don't cache keys in old emacs versions. Is 23 the right cut-off point? -(if (or (not (boundp 'emacs-minor-version)) - (< emacs-minor-version 23)) - (fset 'dired-cache-key 'ignore)) - -(defvar dired-visit-popup-menu nil) -;; Menus of commands in the Visit popup menu. -(defvar dired-do-popup-menu nil) -;; Menu of commands in the dired Do popup menu. - -;; Menus for the menu bar. -(defvar dired-subdir-menu - (cons "Subdir" (make-sparse-keymap "Subdir"))) -(defvar dired-mark-menu - (cons "Mark" (make-sparse-keymap "Mark"))) -(defvar dired-do-menu - (cons "Do" (make-sparse-keymap "Do"))) -(defvar dired-regex-menu - (cons "Regexp" (make-sparse-keymap "Regex"))) -(defvar dired-look-menu - (cons "Look" (make-sparse-keymap "Look"))) -(defvar dired-sort-menu - (cons "Sort" (make-sparse-keymap "Sort"))) -(defvar dired-help-menu nil) - -(defun dired-setup-menus () - - ;; popup menu - - (setq dired-visit-popup-menu - (list - (cons (dired-menu-item "Find File" 'dired-find-file 35) - 'dired-advertised-find-file) - (cons (dired-menu-item "Find in Other Window" - 'dired-find-file-other-window 35) - 'dired-find-file-other-window) - (cons (dired-menu-item "Find in Other Frame" - 'dired-find-file-other-frame 35) - 'dired-find-file-other-frame) - (cons (dired-menu-item "View File" 'dired-view-file 35) - 'dired-view-file) - (cons (dired-menu-item "Display in Other Window" - 'dired-find-file-other-window 35 - 'universal-argument) - 'dired-display-file))) - - ;; Operate popup menu - - (setq dired-do-popup-menu - (list - (cons (dired-menu-item "Copy to..." 'dired-do-copy 35 1) - 'dired-do-copy) - (cons (dired-menu-item "Rename to..." 'dired-do-rename 35 1) - 'dired-do-rename) - (cons (dired-menu-item "Compress/Uncompress" 'dired-do-compress - 35 1) 'dired-do-compress) - (cons (dired-menu-item "Uuencode/Uudecode" 'dired-do-uucode - 35 1) 'dired-do-uucode) - (cons (dired-menu-item "Change Mode..." 'dired-do-chmod 35 1) - 'dired-do-chmod) - (cons (dired-menu-item "Change Owner..." 'dired-do-chown 35 1) - 'dired-do-chown) - (cons (dired-menu-item "Change Group..." 'dired-do-chgrp 35 1) - 'dired-do-chgrp) - (cons (dired-menu-item "Load" 'dired-do-load 35 1) - 'dired-do-load) - (cons (dired-menu-item "Byte-compile" 'dired-do-byte-compile 35 1) - 'dired-do-byte-compile) - (cons (dired-menu-item "Hardlink to..." 'dired-do-hardlink 35 1) - 'dired-do-hardlink) - (cons (dired-menu-item "Symlink to..." 'dired-do-symlink 35 1) - 'dired-do-symlink) - (cons (dired-menu-item "Relative Symlink to..." - 'dired-do-relsymlink 35 1) - 'dired-do-relsymlink) - (cons (dired-menu-item "Shell Command..." - 'dired-do-shell-command 35 1) - 'dired-do-shell-command) - (cons (dired-menu-item "Background Shell Command..." - 'dired-do-background-shell-command 35 1) - 'dired-do-background-shell-command) - (cons (dired-menu-item "Delete" 'dired-do-delete 35 1) - 'dired-do-delete))) - - ;; Subdir Menu-bar Menu - - (define-key dired-mode-map [menu-bar subdir] dired-subdir-menu) - (define-key dired-mode-map [menu-bar subdir uncompress-subdir-files] - (cons "Uncompress Compressed Files" - (function - (lambda () (interactive) (dired-compress-subdir-files t))))) - (dired-cache-key dired-subdir-menu 'uncompress-subdir-files - 'dired-compress-subdir-files 'universal-argument) - (define-key dired-mode-map [menu-bar subdir compress-subdir-files] - '("Compress Uncompressed Files" . dired-compress-subdir-files)) - (define-key dired-mode-map [menu-bar subdir flag] - '("Flag Files for Deletion" . dired-flag-subdir-files)) - (define-key dired-mode-map [menu-bar subdir mark] - '("Mark Files" . dired-mark-subdir-files)) - (define-key dired-mode-map [menu-bar subdir redisplay] - '("Redisplay Subdir" . dired-redisplay-subdir)) - (define-key dired-mode-map [menu-bar subdir subdir-separator] - '("-- Commands on All Files in Subdir --")) - (define-key dired-mode-map [menu-bar subdir kill-subdir] - '("Kill This Subdir" . dired-kill-subdir)) - (define-key dired-mode-map [menu-bar subdir create-directory] - '("Create Directory..." . dired-create-directory)) - (define-key dired-mode-map [menu-bar subdir insert] - '("Insert This Subdir" . dired-maybe-insert-subdir)) - (define-key dired-mode-map [menu-bar subdir down-dir] - '("Down Dir" . dired-down-directory)) - (define-key dired-mode-map [menu-bar subdir up-dir] - '("Up Dir" . dired-up-directory)) - (define-key dired-mode-map [menu-bar subdir prev-dirline] - '("Prev Dirline" . dired-prev-dirline)) - (define-key dired-mode-map [menu-bar subdir next-dirline] - '("Next Dirline" . dired-next-dirline)) - (define-key dired-mode-map [menu-bar subdir prev-subdir] - '("Prev Subdir" . dired-prev-subdir)) - (define-key dired-mode-map [menu-bar subdir next-subdir] - '("Next Subdir" . dired-next-subdir)) - - ;; Mark Menu-bar Menu - - (define-key dired-mode-map [menu-bar mark] dired-mark-menu) - (define-key dired-mode-map [menu-bar mark mark-from-compilation-buffer] - '("Mark Files from Compile Buffer..." . dired-mark-files-compilation-buffer)) - (define-key dired-mode-map [menu-bar mark mark-from-other-buffer] - '("Mark Files from Other Dired" . - dired-mark-files-from-other-dired-buffer)) - (define-key dired-mode-map [menu-bar mark mark-separator] - '("--")) - (define-key dired-mode-map [menu-bar mark marker-char-right] - '("Marker stack right" . dired-marker-stack-right)) - (define-key dired-mode-map [menu-bar mark marker-char-left] - '("Marker stack left" . dired-marker-stack-left)) - (define-key dired-mode-map [menu-bar mark restore-marker] - '("Restore marker char" . dired-restore-marker-char)) - (define-key dired-mode-map [menu-bar mark add-marker] - '("Set new marker char..." . dired-set-marker-char)) - (define-key dired-mode-map [menu-bar mark auto-save-files] - '("Flag Auto-save Files" . dired-flag-auto-save-files)) - (define-key dired-mode-map [menu-bar mark backup-files] - '("Flag Backup Files" . dired-flag-backup-files)) - (define-key dired-mode-map [menu-bar mark executables] - '("Mark Executables" . dired-mark-executables)) - (define-key dired-mode-map [menu-bar mark directory] - '("Mark Old Backups" . dired-clean-directory)) - (define-key dired-mode-map [menu-bar mark directories] - '("Mark Directories" . dired-mark-directories)) - (define-key dired-mode-map [menu-bar mark symlinks] - '("Mark Symlinks" . dired-mark-symlinks)) - (define-key dired-mode-map [menu-bar mark toggle] - (cons "Toggle Marks..." - (function (lambda () (interactive) - (let ((current-prefix-arg t)) - (call-interactively 'dired-change-marks)))))) - (dired-cache-key dired-mark-menu 'toggle 'dired-change-marks - 'universal-argument) - (define-key dired-mode-map [menu-bar mark unmark-all] - '("Unmark All" . dired-unmark-all-files)) - (define-key dired-mode-map [menu-bar mark marks] - '("Change Marks..." . dired-change-marks)) - (define-key dired-mode-map [menu-bar mark prev] - '("Previous Marked" . dired-prev-marked-file)) - (define-key dired-mode-map [menu-bar mark next] - '("Next Marked" . dired-next-marked-file)) - - ;; Do Menu-bar Menu - - (define-key dired-mode-map [menu-bar do] - dired-do-menu) - (define-key dired-mode-map [menu-bar do do-popup] - (cons "Operate on file menu >" - 'dired-do-popup-menu-internal)) - (dired-cache-key dired-do-menu 'do-popup - 'dired-do-popup-menu) - (define-key dired-mode-map [menu-bar do visit-popup] - (cons "Visit file menu >" - 'dired-visit-popup-menu-internal)) - (dired-cache-key dired-do-menu 'visit-popup - 'dired-visit-popup-menu) - (define-key dired-mode-map [menu-bar do delete] - '("Delete Marked Files" . dired-do-delete)) - (define-key dired-mode-map [menu-bar do background-command] - '("Background Shell Command..." . dired-do-background-shell-command)) - (define-key dired-mode-map [menu-bar do command] - '("Shell Command..." . dired-do-shell-command)) - (define-key dired-mode-map [menu-bar do symlink] - '("Symlink to..." . dired-do-symlink)) - (define-key dired-mode-map [menu-bar do hardlink] - '("Hardlink to..." . dired-do-hardlink)) - (define-key dired-mode-map [menu-bar do compile] - '("Byte-compile" . dired-do-byte-compile)) - (define-key dired-mode-map [menu-bar do load] - '("Load" . dired-do-load)) - (define-key dired-mode-map [menu-bar do chgrp] - '("Change Group..." . dired-do-chgrp)) - (define-key dired-mode-map [menu-bar do chown] - '("Change Owner..." . dired-do-chown)) - (define-key dired-mode-map [menu-bar do chmod] - '("Change Mode..." . dired-do-chmod)) - (define-key dired-mode-map [menu-bar do print] - '("Print..." . dired-do-print)) - (define-key dired-mode-map [menu-bar do uucode] - '("Uuencode/Uudecode" . dired-do-uucode)) - (define-key dired-mode-map [menu-bar do compress] - '("Compress/Uncompress" . dired-do-compress)) - (define-key dired-mode-map [menu-bar do expunge] - '("Expunge File Flagged for Deletion" . dired-expunge-deletions)) - (define-key dired-mode-map [menu-bar do rename] - '("Rename to..." . dired-do-rename)) - (define-key dired-mode-map [menu-bar do copy] - '("Copy to..." . dired-do-copy)) - -;; Regex Menu-bar Menu - - (define-key dired-mode-map [menu-bar regex] dired-regex-menu) - (define-key dired-mode-map [menu-bar regex show-omit-regexp] - (cons "Show Omit Regex" - (function - (lambda () - (interactive) - (let ((current-prefix-arg 0)) - (call-interactively 'dired-add-omit-regexp)))))) - (dired-cache-key dired-regex-menu 'show-omit-regexp - 'dired-add-omit-regexp 0) - (define-key dired-mode-map [menu-bar regex remove-omit-extension] - (cons "Remove Omit Extension..." - (function - (lambda () - (interactive) - (let ((current-prefix-arg '(16))) - (call-interactively 'dired-add-omit-regexp)))))) - (dired-cache-key dired-regex-menu 'remove-omit-extension - 'dired-add-omit-regexp 'universal-argument - 'universal-argument) - (define-key dired-mode-map [menu-bar regex add-omit-extension] - (cons "Add Omit Extension..." - (function - (lambda () - (interactive) - (let ((current-prefix-arg '(4))) - (call-interactively 'dired-add-omit-regexp)))))) - (dired-cache-key dired-regex-menu 'add-omit-extension - 'dired-add-omit-regexp 'universal-argument) - (define-key dired-mode-map [menu-bar regex remove-omit-regexp] - (cons "Remove Omit Regex..." - (function - (lambda () - (interactive) - (let ((current-prefix-arg 1)) - (call-interactively 'dired-add-omit-regexp)))))) - (dired-cache-key dired-regex-menu 'remove-omit-regexp - 'dired-add-omit-regexp 1) - (define-key dired-mode-map [menu-bar regex add-omit-regexp] - '("Add Omit Regex..." . dired-add-omit-regexp)) - (define-key dired-mode-map [menu-bar regex separator] - '("--")) - (define-key dired-mode-map [menu-bar regex relsymlink] - '("Relative Symlink..." . dired-do-relsymlink-regexp)) - (define-key dired-mode-map [menu-bar regex symlink] - '("Symlink..." . dired-do-symlink-regexp)) - (define-key dired-mode-map [menu-bar regex hardlink] - '("Hardlink..." . dired-do-hardlink-regexp)) - (define-key dired-mode-map [menu-bar regex rename] - '("Rename..." . dired-do-rename-regexp)) - (define-key dired-mode-map [menu-bar regex copy] - '("Copy..." . dired-do-copy-regexp)) - (define-key dired-mode-map [menu-bar regex upcase] - '("Upcase" . dired-upcase)) - (define-key dired-mode-map [menu-bar regex downcase] - '("Downcase" . dired-downcase)) - (define-key dired-mode-map [menu-bar regex dired-flag-extension] - '("Flag Files with Extension..." . dired-flag-extension)) - (define-key dired-mode-map [menu-bar regex flag] - '("Flag..." . dired-flag-files-regexp)) - (define-key dired-mode-map [menu-bar regex mark-extension] - '("Mark Files with Extension..." . dired-mark-extension)) - (define-key dired-mode-map [menu-bar regex mark] - '("Mark..." . dired-mark-files-regexp)) - - ;; Look Menu-bar Menu - - (define-key dired-mode-map [menu-bar look] dired-look-menu) - (define-key dired-mode-map [menu-bar look patch] - '("Patch File" . dired-epatch)) - (define-key dired-mode-map [menu-bar look ediff] - '("Ediff Files..." . dired-ediff)) - (define-key dired-mode-map [menu-bar look emerge-with-ancestor] - '("Merge Files Having Common Ancestor..." . dired-emerge-with-ancestor)) - (define-key dired-mode-map [menu-bar look emerge] - '("Merge Files..." . dired-emerge)) - (define-key dired-mode-map [menu-bar look backup-diff] - '("Diff with Backup" . dired-backup-diff)) - (define-key dired-mode-map [menu-bar look diff] - '("Diff File..." . dired-diff)) - ;; Put in a separator line. - (define-key dired-mode-map [menu-bar look look-separator] - '("--")) - (define-key dired-mode-map [menu-bar look tags-query-replace] - '("Tags Query Replace..." . dired-do-tags-query-replace)) - (define-key dired-mode-map [menu-bar look tags-search] - '("Tags Search for..." . dired-do-tags-search)) - (define-key dired-mode-map [menu-bar look grep] - '("Grep for..." . dired-do-grep)) - - ;; Sort Menu-bar Menu - - (define-key dired-mode-map [menu-bar sort] dired-sort-menu) - (define-key dired-mode-map [menu-bar sort redisplay-killed] - (cons "Redisplay Killed Lines" - (function (lambda () (interactive) (dired-do-kill-file-lines 0))))) - (dired-cache-key dired-sort-menu 'redisplay-killed - 'dired-do-kill-file-lines 0) - (define-key dired-mode-map [menu-bar sort kill] - '("Kill Marked Lines" . dired-do-kill-file-lines)) - (define-key dired-mode-map [menu-bar sort toggle-omit] - '("Toggle Omit" . dired-omit-toggle)) - (define-key dired-mode-map [menu-bar sort hide-subdir] - '("Hide Subdir" . dired-hide-subdir)) - (define-key dired-mode-map [menu-bar sort hide-all] - '("Hide All Subdirs" . dired-hide-all)) - (define-key dired-mode-map [menu-bar sort sort-separator] - '("--")) - (define-key dired-mode-map [menu-bar sort entire-edit] - (cons "Edit Switches for Entire Buffer..." - (function (lambda () (interactive) - (dired-sort-toggle-or-edit '(16)))))) - (dired-cache-key dired-sort-menu 'entire-edit - 'dired-sort-toggle-or-edit 'universal-argument - 'universal-argument) - (define-key dired-mode-map [menu-bar sort entire-name] - (cons "Sort Entire Buffer by Name" - (function (lambda () (interactive) - (dired-sort-toggle-or-edit 'name))))) - (dired-cache-key dired-sort-menu 'entire-name 'dired-sort-toggle-or-edit - 'universal-argument) - (define-key dired-mode-map [menu-bar sort entire-date] - (cons "Sort Entire Buffer by Date" - (function (lambda () (interactive) - (dired-sort-toggle-or-edit 'date))))) - (dired-cache-key dired-sort-menu 'entire-date 'dired-sort-toggle-or-edit - 'universal-argument) - (define-key dired-mode-map [menu-bar sort new-edit] - (cons "Edit Default Switches for Inserted Subdirs..." - (function (lambda () (interactive) (dired-sort-toggle-or-edit 2))))) - (dired-cache-key dired-sort-menu 'new-edit 'dired-sort-toggle-or-edit 2) - (define-key dired-mode-map [menu-bar sort edit] - (cons "Edit Switches for Current Subdir..." - (function (lambda () (interactive) (dired-sort-toggle-or-edit 1))))) - (dired-cache-key dired-sort-menu 'edit 'dired-sort-toggle-or-edit 1) - (define-key dired-mode-map [menu-bar sort show] - (cons "Show Current Switches" - (function (lambda () (interactive) (dired-sort-toggle-or-edit 0))))) - (dired-cache-key dired-sort-menu 'show 'dired-sort-toggle-or-edit 0) - (define-key dired-mode-map [menu-bar sort toggle] - '("Toggle Current Subdir by Name/Date" . dired-sort-toggle-or-edit)) - - ;; Help Menu-bar Menu - - (or dired-help-menu - (setq dired-help-menu - (if (and (boundp 'menu-bar-help-menu) (keymapp menu-bar-help-menu)) - (cons "Help" (cons 'keymap (cdr menu-bar-help-menu))) - (cons "Help" (make-sparse-keymap "Help"))))) - (define-key dired-mode-map [menu-bar dired-help] dired-help-menu) - (define-key dired-mode-map [menu-bar dired-help help-separator] - '("--")) - (define-key dired-mode-map [menu-bar dired-help dired-bug] - '("Report Dired Bug" . dired-report-bug)) - (define-key dired-mode-map [menu-bar dired-help dired-var-apropos] - (cons "Dired Variable Apropos" - (function (lambda () - (interactive) - (let ((current-prefix-arg t)) - (call-interactively 'dired-apropos)))))) - (dired-cache-key dired-help-menu 'dired-var-apropos - 'dired-apropos 'universal-argument) - (define-key dired-mode-map [menu-bar dired-help dired-apropos] - '("Dired Command Apropos" . dired-apropos)) - (define-key dired-mode-map [menu-bar dired-help dired-info] - (cons "Dired Info Manual" - (function (lambda () - (interactive) - (dired-describe-mode t))))) - (dired-cache-key dired-help-menu 'dired-info 'dired-describe-mode - 'universal-argument) - (define-key dired-mode-map [menu-bar dired-help dired-describe-mode] - '("Describe Dired" . dired-describe-mode)) - (define-key dired-mode-map [menu-bar dired-help dired-summary] - '("Dired Summary Help" . dired-summary))) - -(add-hook 'dired-setup-keys-hook 'dired-setup-menus) - -;;; Mouse functions - -(defun dired-mouse-find-file (event) - "In dired, visit the file or directory name you click on." - (interactive "e") - (save-excursion - (set-buffer (window-buffer (posn-window (event-end event)))) - (if dired-subdir-alist - (save-excursion - (goto-char (posn-point (event-end event))) - (dired-find-file)) - (error - (concat "dired-subdir-alist seems to be mangled. " - (substitute-command-keys - "\\<dired-mode-map>Try dired-revert (\\[dired-revert]).")))))) - -(defun dired-mouse-mark (event) - "In dired, mark the file name that you click on. -If the file name is already marked, this unmarks it." - (interactive "e") - (save-excursion - (set-buffer (window-buffer (posn-window (event-end event)))) - (if dired-subdir-alist - (save-excursion - (goto-char (posn-point (event-end event))) - (beginning-of-line) - (if (looking-at dired-re-mark) - (dired-unmark 1) - (dired-mark 1))) - (error - (concat "dired-subdir-alist seems to be mangled. " - (substitute-command-keys - "\\<dired-mode-map>Try dired-revert (\\[dired-revert]).")))))) - -(defun dired-mouse-flag (event) - "In dired, flag for deletion the file name that you click on. -If the file name is already flag, this unflags it." - (interactive "e") - (save-excursion - (set-buffer (window-buffer (posn-window (event-end event)))) - (if dired-subdir-alist - (save-excursion - (goto-char (posn-point (event-end event))) - (beginning-of-line) - (if (char-equal (following-char) dired-del-marker) - (dired-unflag 1) - (dired-flag-file-deletion 1))) - (error - (concat "dired-subdir-alist seems to be mangled. " - (substitute-command-keys - "\\<dired-mode-map>Try dired-revert (\\[dired-revert]).")))))) - -(defun dired-mouse-get-target (event) - "In dired, put a copy of the selected directory in the active minibuffer." - (interactive "e") - (let ((obuff (current-buffer)) - mb) - (set-buffer (window-buffer (posn-window (event-end event)))) - (if (and dired-subdir-alist (setq mb (dired-get-active-minibuffer-window))) - (let (dir) - (goto-char (posn-point (event-end event))) - (setq dir (dired-current-directory)) - (select-window mb) - (set-buffer (window-buffer mb)) - (erase-buffer) - (insert dir)) - (set-buffer obuff) - (if mb - (error "No directory specified") - (error "No active minibuffer"))))) - -(defun dired-visit-popup-menu (event) - "Popup a menu to visit the moused file." - (interactive "e") - (save-excursion - (set-buffer (window-buffer (posn-window (event-end event)))) - (save-excursion - (goto-char (posn-point (event-end event))) - (dired-visit-popup-menu-internal event)))) - -(defun dired-visit-popup-menu-internal (event) - (interactive "e") - (let ((fn (dired-get-filename 'no-dir)) - fun) - (dired-remove-text-properties 0 (length fn) fn) - (setq fun (x-popup-menu - event - (list "Visit popup menu" - (cons - (concat "Visit " fn " with") - dired-visit-popup-menu)))) - (if fun (funcall fun)))) - -(defun dired-do-popup-menu (event) - ;; Pop up a menu do an operation on the moused file. - (interactive "e") - (let ((obuff (current-buffer))) - (unwind-protect - (progn - (set-buffer (window-buffer (posn-window (event-end event)))) - (dired-save-excursion - (goto-char (posn-point (event-end event))) - (dired-do-popup-menu-internal event))) - (set-buffer obuff)))) - -(defun dired-do-popup-menu-internal (event) - (interactive "e") - (let ((fn (dired-get-filename 'no-dir)) - fun) - (dired-remove-text-properties 0 (length fn) fn) - (setq fun (x-popup-menu - event - (list "Do popup menu" - (cons - (concat "Do operation on " fn) - dired-do-popup-menu)))) - (dired-save-excursion - (if fun (let ((current-prefix-arg 1)) - (call-interactively fun)))))) - -;;; Key maps - -;; Get rid of the Edit menu bar item to save space. -(define-key dired-mode-map [menu-bar edit] 'undefined) -;; We have our own help item -(define-key dired-mode-map [menu-bar help] 'undefined) -(define-key dired-mode-map [mouse-2] 'dired-mouse-find-file) -(define-key dired-mode-map [S-mouse-1] 'dired-mouse-mark) -(define-key dired-mode-map [C-S-mouse-1] 'dired-mouse-flag) -(define-key dired-mode-map [down-mouse-3] 'dired-visit-popup-menu) -;; This can be useful in dired, so move to double click. -(define-key dired-mode-map [double-mouse-3] 'mouse-save-then-kill) -(define-key dired-mode-map [C-down-mouse-2] 'dired-do-popup-menu) -(define-key dired-mode-map [M-mouse-2] 'dired-mouse-get-target) - -(or (memq 'dired-help menu-bar-final-items) - (setq menu-bar-final-items (cons 'dired-help menu-bar-final-items))) - -;;; end of dired-fsf.el
--- a/lisp/efs/dired-grep.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/dired-grep.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: dired-grep.el ;; RCS: -;; Dired Version: $Revision: 7.9 $ +;; Dired Version: #Revision: 7.9 $ ;; Description: Support for running grep on marked files in a dired buffer. ;; Author: Sandy Rutherford <sandy@ibm550.sissa.it> ;; Created: Tue Jul 13 22:59:37 1993 by sandy on ibm550
--- a/lisp/efs/dired-help.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/dired-help.el Mon Aug 13 08:54:51 2007 +0200 @@ -1,7 +1,7 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; File: dired-help.el -;; Dired Version: $Revision: 7.9 $ +;; Dired Version: #Revision: 7.9 $ ;; RCS: ;; Description: Obtaining help for dired ;; Modified: Sun Nov 20 21:10:47 1994 by sandy on gandalf
--- a/lisp/efs/dired-mob.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/dired-mob.el Mon Aug 13 08:54:51 2007 +0200 @@ -2,7 +2,7 @@ ;; ;; File: dired-mob.el ;; RCS: -;; Dired Version: $Revision: 7.9 $ +;; Dired Version: #Revision: 7.9 $ ;; Description: Commands for marking files from another buffer. ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
--- a/lisp/efs/dired-mule.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/dired-mule.el Mon Aug 13 08:54:51 2007 +0200 @@ -1,7 +1,7 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; File: dired-mule.el -;; Dired Version: $Revision: 1.1 $ +;; Dired Version: #Revision: 7.9 $ ;; RCS: ;; Description: MULE support for dired. ;; Created: Sun Jul 17 14:45:12 1994 by sandy on ibm550
--- a/lisp/efs/dired-oas.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/dired-oas.el Mon Aug 13 08:54:51 2007 +0200 @@ -1,7 +1,7 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; File: dired-oas.el -;; Dired Version: $Revision: 7.9 $ +;; Dired Version: #Revision: 7.9 $ ;; RCS: ;; Description: dired odds and sods. Dired functions not usually needed. ;; This file is not a reference to the Organization of
--- a/lisp/efs/dired-rgxp.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/dired-rgxp.el Mon Aug 13 08:54:51 2007 +0200 @@ -1,7 +1,7 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; File: dired-rgxp.el -;; Dired Version: $Revision: 7.9 $ +;; Dired Version: #Revision: 7.9 $ ;; RCS: ;; Description: Commands for running commands on files whose names ;; match a regular expression.
--- a/lisp/efs/dired-sex.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/dired-sex.el Mon Aug 13 08:54:51 2007 +0200 @@ -1,7 +1,7 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; File: dired-sex.el -;; Dired Version: $Revision: 7.9 $ +;; Dired Version: #Revision: 7.9 $ ;; RCS: ;; Description: Marking files according to sexpressions. Sorry. ;; Created: Wed Sep 14 01:30:43 1994 by sandy on ibm550
--- a/lisp/efs/dired-shell.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/dired-shell.el Mon Aug 13 08:54:51 2007 +0200 @@ -1,7 +1,7 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; File: dired-shell.el -;; Dired Version: $Revision: 7.9 $ +;; Dired Version: #Revision: 7.9 $ ;; RCS: ;; Description: Commands for running shell commands on marked files. ;;
--- a/lisp/efs/dired-uu.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/dired-uu.el Mon Aug 13 08:54:51 2007 +0200 @@ -1,7 +1,7 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; File: dired-uu.el -;; Dired Version: $Revision: 7.9 $ +;; Dired Version: #Revision: 7.9 $ ;; RCS: ;; Description: Commands for uuencoding/uudecoding marked files. ;; Author: Sandy Rutherford <sandy@math.ubc.ca>
--- a/lisp/efs/dired-vir.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/dired-vir.el Mon Aug 13 08:54:51 2007 +0200 @@ -2,7 +2,7 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; File: dired-vir.el -;; Dired Version: $Revision: 7.9 $ +;; Dired Version: #Revision: 7.9 $ ;; RCS: ;; Description: Virtual dired mode for browsing ls -lR listings. ;; Author: Sebastian Kremer <sk@thp.uni-koeln.de>
--- a/lisp/efs/dired-xemacs.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/dired-xemacs.el Mon Aug 13 08:54:51 2007 +0200 @@ -1,7 +1,7 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; File: dired-xemacs.el -;; Dired Version: $Revision: 7.9 $ +;; Dired Version: #Revision: 7.9 $ ;; RCS: ;; Description: dired functions for XEmacs ;; Author: Mike Sperber <sperber@informatik.uni-tuebingen.de> @@ -45,11 +45,11 @@ "-[-r][-w][-x][-r][-w][sS][-r][-w][xst]") "setgid plain file (even if not executable)") -(defvar dired-re-pre-permissions "^.? ?[0-9 ]*[-d]" +(defvar dired-re-pre-permissions "^[^-d]? ?[0-9 ]*[-d]" "Regexp matching the preamble to file permissions part of a dired line. This shouldn't match socket or symbolic link lines (which aren't editable).") -(defvar dired-re-permissions "[-r][-w][-Ssx][-r][-w][-Ssx][-r][-w][-xst]" +(defvar dired-re-permissions "[-r][-w][-Ssx][-r][-w][-Ssx][-r][-w][-xstT]" "Regexp matching the file permissions part of a dired line.") ;;; Setup @@ -690,10 +690,10 @@ (setq dired-u-r-keymap (dired-setup-chmod-keymap ?u ?r '(?r)) dired-u-w-keymap (dired-setup-chmod-keymap ?u ?w '(?w)) - dired-u-x-keymap (dired-setup-chmod-keymap ?u ?x '(?x ?s ?S) '(?x)) + dired-u-x-keymap (dired-setup-chmod-keymap ?u ?x '(?x ?s) '(?x)) dired-g-r-keymap (dired-setup-chmod-keymap ?g ?r '(?r)) dired-g-w-keymap (dired-setup-chmod-keymap ?g ?w '(?w)) - dired-g-x-keymap (dired-setup-chmod-keymap ?g ?x '(?x ?s ?S) '(?x)) + dired-g-x-keymap (dired-setup-chmod-keymap ?g ?x '(?x ?s) '(?x)) dired-o-r-keymap (dired-setup-chmod-keymap ?o ?r '(?r)) dired-o-w-keymap (dired-setup-chmod-keymap ?o ?w '(?w)) dired-o-x-keymap (dired-setup-chmod-keymap ?o ?x '(?x ?s ?t) '(?x))))
--- a/lisp/efs/dired-xy.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/dired-xy.el Mon Aug 13 08:54:51 2007 +0200 @@ -1,7 +1,7 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; File: dired-xy.el -;; Dired Version: $Revision: 7.9 $ +;; Dired Version: #Revision: 7.9 $ ;; RCS: ;; Description: Commands for reading mail from dired. ;;
--- a/lisp/efs/dired.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/dired.el Mon Aug 13 08:54:51 2007 +0200 @@ -5,7 +5,7 @@ ;; ;; File: dired.el ;; RCS: -;; Dired Version: $Revision: 7.9 $ +;; Dired Version: #Revision: 7.9 $ ;; Description: The DIRectory EDitor is for manipulating, and running ;; commands on files in a directory. ;; Authors: FSF, @@ -36,7 +36,7 @@ ;;; Dired Version -(defconst dired-version (substring "$Revision: 7.9 $" 11 -2) +(defconst dired-version (substring "#Revision: 7.9 $" 11 -2) "The revision number of Tree Dired (as a string). Don't forget to mention this when reporting bugs to:
--- a/lisp/efs/efs-auto.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-auto.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-auto.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.7 $ +;; Version: #Revision: 1.7 $ ;; RCS: ;; Description: Simple way of autoloading efs ;; Author: Andy Norman, Dawn @@ -37,7 +37,7 @@ (defconst efs-auto-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.7 $" 11 -2))) + (substring "#Revision: 1.7 $" 11 -2))) ;;; Interactive functions that should be accessible from here.
--- a/lisp/efs/efs-cms-knet.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-cms-knet.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-cms-knet.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.1 $ +;; Version: #Revision: 1.1 $ ;; RCS: ;; Description: CMS support for efs using KNET/VM server ;; Authors: Sandy Rutherford <sandy@ibm550.sissa.it> @@ -23,7 +23,7 @@ (defconst efs-cms-knet-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.1 $" 11 -2))) + (substring "#Revision: 1.1 $" 11 -2))) ;;;; ------------------------------------------------------------ ;;;; CMS support for KNET-VM server
--- a/lisp/efs/efs-cms.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-cms.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-cms.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.9 $ +;; Version: #Revision: 1.9 $ ;; RCS: ;; Description: CMS support for efs ;; Author: Sandy Rutherford <sandy@ibm550.sissa.it> @@ -22,7 +22,7 @@ (defconst efs-cms-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.9 $" 11 -2))) + (substring "#Revision: 1.9 $" 11 -2))) ;;;; ------------------------------------------------------------ ;;;; CMS support
--- a/lisp/efs/efs-coke.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-coke.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-coke.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.1 $ +;; Version: #Revision: 1.1 $ ;; RCS: ;; Description: Coke Machine support for efs ;; Author: Sandy Rutherford <sandy@imb550.sissa.it> @@ -22,7 +22,7 @@ (defconst efs-coke-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.1 $" 11 -2))) + (substring "#Revision: 1.1 $" 11 -2))) ;;;; ------------------------------------------------------------ ;;;; Coke Machine support
--- a/lisp/efs/efs-cp-p.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-cp-p.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-cp-p.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.1 $ +;; Version: #Revision: 1.1 $ ;; RCS: ;; Description: Support for preserving file modtimes with copies. i.e. cp -p ;; Author: Sandy Rutherford <sandy@ibm550.sissa.it> @@ -24,7 +24,7 @@ (defconst efs-cp-p-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.1 $" 11 -2))) + (substring "#Revision: 1.1 $" 11 -2))) (defvar efs-local-timezone nil) ;; cache.
--- a/lisp/efs/efs-cu.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-cu.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-cu.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.12 $ +;; Version: #Revision: 1.12 $ ;; RCS: ;; Description: Common utilities needed by efs files. ;; Author: Sandy Rutherford <sandy@ibm550.sissa.it> @@ -55,7 +55,7 @@ (defconst efs-cu-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.12 $" 11 -2))) + (substring "#Revision: 1.12 $" 11 -2))) (defconst efs-case-insensitive-host-types '(vms cms mts ti-twenex ti-explorer dos mvs tops-20 mpe ka9q dos-distinct
--- a/lisp/efs/efs-defun.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-defun.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-defun.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.1 $ +;; Version: #Revision: 1.1 $ ;; RCS: ;; Description: efs-defun allows for OS-dependent coding of functions ;; Author: Sandy Rutherford <sandy@ibm550.sissa.it> @@ -136,7 +136,7 @@ (defconst efs-defun-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.1 $" 11 -2))) + (substring "#Revision: 1.1 $" 11 -2))) (defconst efs-key-obarray (make-vector 7 0))
--- a/lisp/efs/efs-dired-mule.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-dired-mule.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-dired.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.1 $ +;; Version: #Revision: 1.1 $ ;; RCS: ;; Description: Makes efs-dired.el work with MULE. ;; Author: Ishikawa Ichiro <ichiro@ccsr.u-tokyo.ac.jp> @@ -16,7 +16,7 @@ (defconst efs-dired-mule-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.1 $" 11 -2))) + (substring "#Revision: 1.1 $" 11 -2))) ;; Keep the byte-compiler happy (defvar efs-version-host-types)
--- a/lisp/efs/efs-dired.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-dired.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-dired.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.31 $ +;; Version: #Revision: 1.31 $ ;; RCS: ;; Description: Extends much of Dired to work under efs. ;; Authors: Sebastian Kremer <sk@thp.uni-koeln.de>, @@ -25,7 +25,7 @@ (defconst efs-dired-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.31 $" 11 -2))) + (substring "#Revision: 1.31 $" 11 -2))) ;;;; ---------------------------------------------------------------- ;;;; User Configuration Variables
--- a/lisp/efs/efs-dl.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-dl.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-dl.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.3 $ +;; Version: #Revision: 1.3 $ ;; RCS: ;; Description: Unix descriptive listing support for efs ;; Author: Sandy Rutherford <sandy@tsmi19.sissa.it> @@ -21,7 +21,7 @@ (defconst efs-dl-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.3 $" 11 -2))) + (substring "#Revision: 1.3 $" 11 -2))) ;;;----------------------------------------------------------------- ;;; Unix descriptive listing (dl) support for efs
--- a/lisp/efs/efs-dos-distinct.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-dos-distinct.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-dos-distinct.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.1 $ +;; Version: #Revision: 1.1 $ ;; RCS: ;; Description: Distinct's DOS FTP server support for efs ;; Author: Sandy Rutherford <sandy@tsmi19.sissa.it> @@ -23,7 +23,7 @@ (defconst efs-dos-distinct-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.1 $" 11 -2))) + (substring "#Revision: 1.1 $" 11 -2))) ;;;; ----------------------------------------------------------------- ;;;; Distinct's DOS FTP server support for efs
--- a/lisp/efs/efs-dump.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-dump.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-dump.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.1 $ +;; Version: #Revision: 1.1 $ ;; RCS: ;; Description: Install a bare-bones EFS hook into file-name-handler-alist ;; for dumping @@ -11,8 +11,33 @@ ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(provide 'efs-dump) + +(defconst efs-dump-version + (concat (substring "$efs release: 1.15 $" 14 -2) + "/" + (substring "#Revision: 1.1 $" 11 -2))) + ;;;###autoload -(setq file-name-handler-alist - (cons - (cons efs-path-root-regexp 'efs-file-handler-function) - file-name-handler-alist)) +(defvar allow-remote-paths t + "*Set this to nil if you don't want remote paths to access +remote files.") + +;;;###autoload +(or (assoc efs-path-root-regexp file-name-handler-alist) + (setq file-name-handler-alist + (cons + (cons efs-path-root-regexp 'remote-path-file-handler-function) + file-name-handler-alist))) + +;;;###autoload +(defun remote-path-file-handler-function (operation &rest args) + "Function to call special file handlers for remote files." + (if allow-remote-paths + (apply 'efs-file-handler-function operation args) + (let ((inhibit-file-name-handlers + (cons 'remote-path-file-handler-function + (and (eq inhibit-file-name-operation operation) + inhibit-file-name-handlers))) + (inhibit-file-name-operation operation)) + (apply operation args))))
--- a/lisp/efs/efs-fnh.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-fnh.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-fnh.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.3 $ +;; Version: #Revision: 1.3 $ ;; RCS: ;; Description: Look for the emacs version, and install into ;; the file-name-handler-alist @@ -20,7 +20,7 @@ (defconst efs-fnh-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.3 $" 11 -2))) + (substring "#Revision: 1.3 $" 11 -2))) ;;;; ---------------------------------------------------------------- ;;;; Loading emacs version files @@ -96,7 +96,10 @@ (defun efs-root-handler-function (operation &rest args) "Function to handle completion in the root directory." - (let ((handler (get operation 'efs-root))) + (let ((handler (and (if (boundp 'allow-remote-paths) + allow-remote-paths + t) + (get operation 'efs-root)))) (if handler (apply handler args) (let ((inhibit-file-name-handlers @@ -135,7 +138,8 @@ nil) (and (not (memq (cdr x) - '(efs-file-handler-function + '(remote-path-file-handler-function + efs-file-handler-function efs-root-handler-function ange-ftp-hook-function ange-ftp-completion-hook-function)))
--- a/lisp/efs/efs-guardian.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-guardian.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-guardian.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.7 $ +;; Version: #Revision: 1.7 $ ;; RCS: ;; Description: Guardian support for efs ;; Author: Sandy Rutherford <sandy@math.ubc.ca> @@ -22,7 +22,7 @@ (defconst efs-guardian-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.7 $" 11 -2))) + (substring "#Revision: 1.7 $" 11 -2))) (provide 'efs-guardian) (require 'efs)
--- a/lisp/efs/efs-gwp.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-gwp.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-gwp.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.1 $ +;; Version: #Revision: 1.1 $ ;; RCS: ;; Description: Support for efs to use an interactive gateway. ;; Author: Andy Norman, Dawn @@ -77,7 +77,7 @@ (defconst efs-gwp-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.1 $" 11 -2))) + (substring "#Revision: 1.1 $" 11 -2))) (defvar efs-gwp-running t) (defvar efs-gwp-status nil)
--- a/lisp/efs/efs-hell.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-hell.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-hell.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.1 $ +;; Version: #Revision: 1.1 $ ;; RCS: ;; Description: Hellsoft FTP server support for efs ;; Author: Sandy Rutherford <sandy@ibm550.sissa.it> @@ -22,7 +22,7 @@ (defconst efs-hell-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.1 $" 11 -2))) + (substring "#Revision: 1.1 $" 11 -2))) ;;;; -------------------------------------------------------------- ;;;; Hellsoft FTP server support for efs
--- a/lisp/efs/efs-ka9q.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-ka9q.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-ka9q.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.2 $ +;; Version: #Revision: 1.2 $ ;; RCS: ;; Description: KA9Q support for efs ;; Author: Sandy Rutherford <sandy@tsmi19.sissa.it> @@ -23,7 +23,7 @@ (defconst efs-ka9q-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.2 $" 11 -2))) + (substring "#Revision: 1.2 $" 11 -2))) ;;;----------------------------------------------------------------- ;;; KA9Q support for efs
--- a/lisp/efs/efs-kerberos.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-kerberos.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-kerberos.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.0 $ +;; Version: #Revision: 1.0 $ ;; RCS: ;; Description: Support for Kerberos gateways. ;; Author: Sandy Rutherford <sandy@gandalf.sissa.it> @@ -21,7 +21,7 @@ (defconst efs-kerberos-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.0 $" 11 -2))) + (substring "#Revision: 1.0 $" 11 -2))) ;;; Internal Variables
--- a/lisp/efs/efs-l19.11.el Mon Aug 13 08:54:26 2007 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,175 +0,0 @@ -;; -*-Emacs-Lisp-*- -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; File: efs-l19.11.el -;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.1 $ -;; RCS: -;; Description: efs support for XEemacs, versions 19.11, and later. -;; Author: Sandy Rutherford <sandy@ibm550.sissa.it> -;; Created: Tue Aug 2 17:40:32 1994 by sandy on ibm550 -;; Modified: Sun Nov 27 18:34:33 1994 by sandy on gandalf -;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -(provide 'efs-l19\.11) -(require 'efs-cu) -(require 'default-dir) -(require 'efs-ovwrt) - -(defconst efs-l19\.11-version - (concat (substring "$efs release: 1.15 $" 14 -2) - "/" - (substring "$Revision: 1.1 $" 11 -2))) - -;;; Functions requiring special defs. for these lemacs versions. - -(defun efs-abbreviate-file-name (filename &optional hack-homedir) - ;; lucid emacs version of abbreviate-file-name for remote files. - (let (file-name-handler-alist) - (if (and hack-homedir (efs-ftp-path filename)) - ;; Do replacements from directory-abbrev-alist - (apply 'efs-unexpand-parsed-filename - (efs-ftp-path (abbreviate-file-name filename nil))) - (abbreviate-file-name filename hack-homedir)))) - -(defun efs-relativize-filename (file &optional dir new) - "Abbreviate the given filename relative to DIR . -If DIR is nil, use the value of `default-directory'. If the -optional parameter NEW is given and the non-directory parts match, only return -the directory part of the file." - (let* ((dir (or dir default-directory)) - (dlen (length dir)) - (result file)) - (and (> (length file) dlen) - (string-equal (substring file 0 dlen) dir) - (setq result (substring file dlen))) - (and new - (string-equal (file-name-nondirectory result) - (file-name-nondirectory new)) - (or (setq result (file-name-directory result)) - (setq result "./"))) - (abbreviate-file-name result t))) - -(defun efs-set-buffer-file-name (filename) - ;; Sets the buffer local variables for filename appropriately. - ;; A special function because Lucid and FSF do this differently. - (setq buffer-file-name filename) - (if (and efs-compute-remote-buffer-file-truename - (memq (efs-host-type (car (efs-ftp-path filename))) - efs-unix-host-types)) - (compute-buffer-file-truename) - (setq buffer-file-truename filename))) - -;; Do we need to do anything about compute-buffer-file-truename, or -;; will the handler for file-truename handle this automatically? I suppose -;; that efs-compute-remote-buffer-file-truename should really apply to -;; compute-buffer-file-truename, and not file-truename, but then we would -;; have to do deal with the fact that this function doesn't exist in GNU Emacs. - -;; Only Lucid Emacs has this function. Why do we need both this and -;; set-visited-file-modtime? - -(defun efs-set-buffer-modtime (buffer &optional time) - ;; For buffers visiting remote files, set the buffer modtime. - (or time - (progn - (setq time - (let* ((file (save-excursion - (set-buffer buffer) buffer-file-name)) - (parsed (efs-ftp-path file))) - (efs-get-file-mdtm (car parsed) (nth 1 parsed) - (nth 2 parsed) file))) - (if time - (setq time (cons (car time) (nth 1 time))) - (setq time '(0 . 0))))) - (let (file-name-handler-alist) - (set-buffer-modtime buffer time))) - -;;; Need to add access to the file-name-handler-alist to these functions. - -(defun efs-l19\.11-set-buffer-modtime (buffer &optional time) - "Documented as original" - (let ((handler (save-excursion - (set-buffer buffer) - (and buffer-file-name - (find-file-name-handler buffer-file-name - 'set-buffer-modtime))))) - (if handler - (funcall handler 'set-buffer-modtime buffer time) - (let (file-name-handler-alist) - (efs-real-set-buffer-modtime buffer time))))) - -(efs-overwrite-fn "efs" 'set-buffer-modtime 'efs-l19\.11-set-buffer-modtime) - -(defun efs-l19\.11-backup-buffer () - "Documented as original" - (if buffer-file-name - (let ((handler (find-file-name-handler buffer-file-name 'backup-buffer))) - (if handler - (funcall handler 'backup-buffer) - (let (file-name-handler-alist) - (efs-real-backup-buffer)))))) - -(efs-overwrite-fn "efs" 'backup-buffer 'efs-l19\.11-backup-buffer) - -(defun efs-l19\.11-create-file-buffer (file) - "Documented as original" - (let ((handler (find-file-name-handler file 'create-file-buffer))) - (if handler - (funcall handler 'create-file-buffer file) - (let (file-name-handler-alist) - (efs-real-create-file-buffer file))))) - -(efs-overwrite-fn "efs" 'create-file-buffer 'efs-l19\.11-create-file-buffer) - -(defun efs-l19\.11-abbreviate-file-name (filename &optional hack-homedir) - "Documented as original" - (let ((handler (find-file-name-handler filename 'abbreviate-file-name))) - (if handler - (funcall handler 'abbreviate-file-name filename hack-homedir) - (let (file-name-handler-alist) - (efs-real-abbreviate-file-name filename hack-homedir))))) - -(efs-overwrite-fn "efs" 'abbreviate-file-name - 'efs-l19\.11-abbreviate-file-name) - -(defun efs-l19\.11-recover-file (file) - "Documented as original" - (interactive - (let ((prompt-file buffer-file-name) - (file-name nil) - (file-dir nil)) - (and prompt-file - (setq file-name (file-name-nondirectory prompt-file) - file-dir (file-name-directory prompt-file))) - (list (read-file-name "Recover file: " - file-dir nil nil file-name)))) - (let* ((file (expand-file-name file)) - (handler (or (find-file-name-handler file 'recover-file) - (find-file-name-handler - (let ((buffer-file-name file)) - (make-auto-save-file-name)) - 'recover-file)))) - (if handler - (funcall handler 'recover-file file) - (efs-real-recover-file file)))) - -(efs-overwrite-fn "efs" 'recover-file 'efs-l19\.11-recover-file) - -(defun efs-l19\.11-substitute-in-file-name (filename) - "Documented as original." - (let ((handler (find-file-name-handler filename 'substitute-in-file-name))) - (if handler - (funcall handler 'substitute-in-file-name filename) - (let (file-name-handler-alist) - (efs-real-substitute-in-file-name filename))))) - -(efs-overwrite-fn "efs" 'substitute-in-file-name - 'efs-l19\.11-substitute-in-file-name) - -;;; For the file-name-handler-alist - -(put 'set-buffer-modtime 'efs 'efs-set-buffer-modtime) - -;;; end of efs-l19.11.el
--- a/lisp/efs/efs-mpe.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-mpe.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-mpe.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.8 $ +;; Version: #Revision: 1.8 $ ;; RCS: ;; Description: MPE (HP3000) support for efs. ;; Author: (Corny de Souza) cdesouza@hpbbn.bbn.hp.com @@ -125,7 +125,7 @@ (defconst efs-mpe-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.8 $" 11 -2))) + (substring "#Revision: 1.8 $" 11 -2))) ;;; Support for build parameters
--- a/lisp/efs/efs-ms-unix.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-ms-unix.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-ms-unix.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.1 $ +;; Version: #Revision: 1.1 $ ;; RCS: ;; Description: efs support for the Microsoft PC FTP server in unix mode. ;; Author: Sandy Rutherford <sandy@tsmi19.sissa.it> @@ -19,7 +19,7 @@ (defconst efs-ms-unix-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.1 $" 11 -2))) + (substring "#Revision: 1.1 $" 11 -2))) (defvar efs-ms-unix-month-and-time-regexp (concat
--- a/lisp/efs/efs-mts.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-mts.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-mts.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.1 $ +;; Version: #Revision: 1.1 $ ;; RCS: ;; Description: MTS support for efs ;; Author: Sandy Rutherford <sandy@itp.ethz.ch> @@ -22,7 +22,7 @@ (defconst efs-mts-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.1 $" 11 -2))) + (substring "#Revision: 1.1 $" 11 -2))) ;;;; ------------------------------------------------------------ ;;;; MTS support
--- a/lisp/efs/efs-mvs.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-mvs.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-mvs.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.4 $ +;; Version: #Revision: 1.4 $ ;; RCS: ;; Description: MVS support for efs ;; Author: Sandy Rutherford <sandy@math.ubc.ca, sandy@itp.ethz.ch> @@ -26,7 +26,7 @@ (defconst efs-mvs-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.4 $" 11 -2))) + (substring "#Revision: 1.4 $" 11 -2))) ;; What's the MVS character set for valid partitioned data sets? ;; I'll guess [-A-Z0-9_$+]
--- a/lisp/efs/efs-netrc.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-netrc.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-netrc.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.2 $ +;; Version: #Revision: 1.2 $ ;; RCS: ;; Description: Parses ~/.netrc file, and does completion in /. ;; Author: Sandy Rutherford <sandy@ibm550.sissa.it> @@ -32,7 +32,7 @@ (defconst efs-netrc-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.2 $" 11 -2))) + (substring "#Revision: 1.2 $" 11 -2))) ;; Make the byte compiler happy. (defvar dired-directory)
--- a/lisp/efs/efs-netware.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-netware.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-netware.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.5 $ +;; Version: #Revision: 1.5 $ ;; RCS: ;; Description: efs support for the Novell Netware FTP server ;; Author: Sandy Rutherford <sandy@math.ubc.ca> @@ -24,7 +24,7 @@ (defconst efs-netware-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.5 $" 11 -2))) + (substring "#Revision: 1.5 $" 11 -2))) ;;; Basic efs support
--- a/lisp/efs/efs-nos-ve.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-nos-ve.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-nos-ve.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.2 $ +;; Version: #Revision: 1.2 $ ;; RCS: ;; Description: efs support for NOS/VE ;; Authors: Sandy Rutherford <sandy@ibm550.sissa,it> @@ -26,7 +26,7 @@ (defconst efs-nos-ve-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.2 $" 11 -2))) + (substring "#Revision: 1.2 $" 11 -2))) ;;;;--------------------------------------------------------------- ;;;; NOS/VE support for efs
--- a/lisp/efs/efs-ovwrt.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-ovwrt.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-ovwrt.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.2 $ +;; Version: #Revision: 1.2 $ ;; RCS: ;; Description: Utilities for overwriting functions with new definitions. ;; Author: Andy Norman <ange@hplb.hpl.hp.com> @@ -15,11 +15,15 @@ ;;; makes it easier for other programs to require them. (provide 'efs-ovwrt) +(eval-when-compile + (condition-case nil + (require 'advice) + (error))) (defconst efs-ovwrt-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.2 $" 11 -2))) + (substring "#Revision: 1.2 $" 11 -2))) (defvar efs-overwrite-fmt "Note: This function has been modified to work with %s.")
--- a/lisp/efs/efs-pc.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-pc.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-pc.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.1 $ +;; Version: #Revision: 1.1 $ ;; RCS: ;; Description: PC support for efs ;; Author: Sandy Rutherford <sandy@tsmi19.sissa.it> @@ -31,7 +31,7 @@ (defconst efs-pc-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.1 $" 11 -2))) + (substring "#Revision: 1.1 $" 11 -2))) ;;;----------------------------------------------------------------- ;;; PC support for efs
--- a/lisp/efs/efs-plan9.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-plan9.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-plan9.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.1 $ +;; Version: #Revision: 1.1 $ ;; RCS: ;; Description: efs support for the Plan 9 FTP Server ;; Author: Sandy Rutherford <sandy@ibm550.sissa.it> @@ -24,7 +24,7 @@ (defconst efs-plan9-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.1 $" 11 -2))) + (substring "#Revision: 1.1 $" 11 -2))) (efs-defun efs-fix-dir-path plan9 (dir-path) ;; Convert DIR-PATH from UN*X-ish to Plan 9. Does nothing actually.
--- a/lisp/efs/efs-report.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-report.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-report.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.9 $ +;; Version: #Revision: 1.9 $ ;; RCS: ;; Description: Function to report efs bugs in a usable way. ;; Author: Andy Norman, Dawn @@ -22,7 +22,7 @@ (defconst efs-report-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.9 $" 11 -2))) + (substring "#Revision: 1.9 $" 11 -2))) (defconst efs-report-salutations ["Dear bug team:"
--- a/lisp/efs/efs-ti-explorer.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-ti-explorer.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-ti-explorer.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.1 $ +;; Version: #Revision: 1.1 $ ;; RCS: ;; Description: Explorer support for efs ;; Author: Jamie Zawinski <jwz@lucid.com> @@ -22,7 +22,7 @@ (defconst efs-ti-explorer-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.1 $" 11 -2))) + (substring "#Revision: 1.1 $" 11 -2))) ;;;; ------------------------------------------------------------ ;;;; Explorer support.
--- a/lisp/efs/efs-ti-twenex.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-ti-twenex.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-ti-twenex.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.1 $ +;; Version: #Revision: 1.1 $ ;; RCS: ;; Description: Support for a TI lisp machine in Twenex emulation mode. ;; Author: Jamie Zawinski <jwz@lucid.com> @@ -22,7 +22,7 @@ (defconst efs-ti-twenex-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.1 $" 11 -2))) + (substring "#Revision: 1.1 $" 11 -2))) ;;;; ------------------------------------------------------------ ;;;; Twenex support.
--- a/lisp/efs/efs-tops-20.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-tops-20.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-tops-20.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.1 $ +;; Version: #Revision: 1.1 $ ;; RCS: ;; Description: TOPS-20 support for efs ;; Author: Sandy Rutherford <sandy@math.ubc.ca, sandy@itp.ethz.ch> @@ -22,7 +22,7 @@ (defconst efs-tops-20-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.1 $" 11 -2))) + (substring "#Revision: 1.1 $" 11 -2))) ;;;; ------------------------------------------------------------ ;;;; TOPS-20 support
--- a/lisp/efs/efs-vm.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-vm.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-vm.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.1 $ +;; Version: #Revision: 1.1 $ ;; RCS: ;; Description: Allows the VM mail reader to access folders using efs. ;; If you are looking for support for VM/CMS, see efs-cms.el. @@ -75,7 +75,7 @@ (defconst efs-vm-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.1 $" 11 -2))) + (substring "#Revision: 1.1 $" 11 -2))) (defun efs-vm-get-new-mail (&optional arg)
--- a/lisp/efs/efs-vms.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-vms.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-vms.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.13 $ +;; Version: #Revision: 1.13 $ ;; RCS: ;; Description: VMS support for efs ;; Authors: Andy Norman, Joe Wells, Sandy Rutherford <sandy@itp.ethz.ch> @@ -20,7 +20,7 @@ (defconst efs-vms-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.13 $" 11 -2))) + (substring "#Revision: 1.13 $" 11 -2))) ;;;; ------------------------------------------------------------ ;;;; VMS support.
--- a/lisp/efs/efs-vos.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-vos.el Mon Aug 13 08:54:51 2007 +0200 @@ -4,7 +4,7 @@ ;; File: efs-vos.el ;; Description: VOS support for efs ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.1 $ +;; Version: #Revision: 1.1 $ ;; RCS: ;; Author: Sandy Rutherford <sandy@ibm550.sissa.it> ;; Created: Sat Apr 3 03:05:00 1993 by sandy on ibm550 @@ -27,7 +27,7 @@ (defconst efs-vos-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.1 $" 11 -2))) + (substring "#Revision: 1.1 $" 11 -2))) ;;;;--------------------------------------------------------------- ;;;; VOS support for efs
--- a/lisp/efs/efs-x19.15.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs-x19.15.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs-x19.15.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.2 $ +;; Version: #Revision: 1.2 $ ;; RCS: ;; Description: efs support for XEmacs, versions 19.15, and later. ;; Author: Sandy Rutherford <sandy@ibm550.sissa.it> @@ -18,7 +18,7 @@ (defconst efs-x19\.15-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.2 $" 11 -2))) + (substring "#Revision: 1.2 $" 11 -2))) ;;; Functions requiring special defs. for these XEmacs versions.
--- a/lisp/efs/efs.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/efs.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: efs.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.56 $ +;; Version: #Revision: 1.56 $ ;; RCS: ;; Description: Transparent FTP support for the original GNU Emacs ;; from FSF and Lucid Emacs @@ -1049,7 +1049,7 @@ (defconst efs-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" - (substring "$Revision: 1.56 $" 11 -2))) + (substring "#Revision: 1.56 $" 11 -2))) (defconst efs-time-zero 1970) ; we count time from midnight, Jan 1, 1970 GMT. @@ -3235,8 +3235,9 @@ (if efs-ftp-activity-function (funcall efs-ftp-activity-function num)))) +;;;###autoload (defun efs-display-ftp-activity () - "Displays the number of active background ftp sessions. + "Displays the number of active background ftp sessions in the modeline. Uses the variable `efs-mode-line-format' to determine how this will be displayed." (interactive) @@ -10730,7 +10731,10 @@ ;;;###autoload (defun efs-file-handler-function (operation &rest args) "Function to call special file handlers for remote files." - (let ((handler (get operation 'efs))) + (let ((handler (and (if (boundp 'allow-remote-paths) + allow-remote-paths + t) + (get operation 'efs)))) (if handler (apply handler args) (let ((inhibit-file-name-handlers @@ -10742,7 +10746,10 @@ (defun efs-sifn-handler-function (operation &rest args) ;; Handler function for substitute-in-file-name - (if (eq operation 'substitute-in-file-name) + (if (and (if (boundp 'allow-remote-paths) + allow-remote-paths + t) + (eq operation 'substitute-in-file-name)) (apply 'efs-substitute-in-file-name args) (let ((inhibit-file-name-handlers (cons 'efs-sifn-handler-function
--- a/lisp/efs/emacs-19.el Mon Aug 13 08:54:26 2007 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,484 +0,0 @@ -;;;; Emacs 19 compatibility functions for use in Emacs 18. -;;;; Based on: $Id: emacs-19.el,v 1.1 1997/02/11 05:05:14 steve Exp $ -;;;; -;;;; Rewritten by sandy@ibm550.sissa.it after gnu emacs 19 was -;;;; released to make it closer to V19. -;;;; Last modified: Sun Jun 12 00:06:06 1994 by sandy on ibm550 - -;;; 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 1, 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. -;;; -;;; A copy of the GNU General Public License can be obtained from this -;;; program's author (send electronic mail to roland@ai.mit.edu) or from -;;; the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA -;;; 02139, USA. - -;; These functions are used in dired.el, but are also of general -;; interest, so you may want to add this to your .emacs: -;; -;; (autoload 'make-directory "emacs-19" "Make a directory." t) -;; (autoload 'delete-directory "emacs-19" "Remove a directory." t) -;; (autoload 'member "emacs-19" "Like memq, but uses `equal' instead of `eq'.") -;; (autoload 'compiled-function-p "emacs-19" "Emacs 18 doesn't have these.") - -(provide 'emacs-19) - -;;; Variables - -(defvar insert-directory-program "ls" - "Absolute or relative name of the `ls' program used by `insert-directory'.") - -(defvar bv-length) ; make the byte compiler a happy camper - -(defconst directory-abbrev-alist - nil - "*Alist of abbreviations for file directories. -A list of elements of the form (FROM . TO), each meaning to replace -FROM with TO when it appears in a directory name. This replacement is -done when setting up the default directory of a newly visited file. -*Every* FROM string should start with `^'. - -Use this feature when you have directories which you normally refer to -via absolute symbolic links. Make TO the name of the link, and FROM -the name it is linked to.") - -(defconst automount-dir-prefix "^/tmp_mnt/" - "Regexp to match the automounter prefix in a directory name.") - -(defvar abbreviated-home-dir nil - "The the user's homedir abbreviated according to `directory-abbrev-list'.") - -;;; Autoloads - -(autoload 'diff "diff" "Diff two files." t) -(autoload 'diff-backup "diff" "Diff a file with its most recent backup.") - -;;; Functions which are subroutines in Emacs 19. - -;; Provide a non-working version of find-file-name-handler. -;; If you want it to work, require 'fn-handler. - -(or (fboundp 'find-file-name-handler) (fset 'find-file-name-handler 'ignore)) -(or (boundp 'file-name-handler-alist) (defvar file-name-handler-alist nil)) - -;; The name of buffer-flush-undo has changed in V19. -(fset 'buffer-disable-undo 'buffer-flush-undo) - -(defun current-time () - "Returns the number of seconds since midnight. -A poor man's version of the the function `current-time' in emacs 19." - (let ((string (current-time-string))) - (list - 0 - (+ (* 3600 (string-to-int (substring string 11 13))) - (* 60 (string-to-int (substring string 14 16))) - (string-to-int (substring string 17 19))) - 0))) - -;; call-process below may lose if filename starts with a `-', but I -;; fear not all mkdir or rmdir implementations understand `--'. - -(defun delete-directory (fn) - "Delete a directory. -This is a subr in Emacs 19." - (interactive - (list (read-file-name "Delete directory: " nil nil 'confirm))) - (setq fn (expand-file-name fn)) - (if (file-directory-p fn) - (call-process "rmdir" nil nil nil fn) - (error "Not a directory: %s" fn)) - (if (file-exists-p fn) - (error "Could not remove directory %s" fn))) - -(defun make-directory (dir &optional parents) - "Create the directory DIR and any nonexistent parent dirs." - (interactive "FMake directory: \nP") - (if (not parents) - (make-directory-internal dir) - (let ((dir (directory-file-name (expand-file-name dir))) - create-list) - (while (not (file-exists-p dir)) - (setq create-list (cons dir create-list) - dir (directory-file-name (file-name-directory dir)))) - (while create-list - (make-directory-internal (car create-list)) - (setq create-list (cdr create-list)))))) - -(defun make-directory-internal (fn) - ;; This is a subroutine in emacs 19. - (let* ((fn (expand-file-name fn)) - (handler (find-file-name-handler fn 'make-directory-internal))) - (if handler - (funcall handler 'make-directory-internal fn) - (setq fn (directory-file-name fn)) - (if (file-exists-p fn) - (error "Cannot make directory %s: file already exists" fn) - (call-process "mkdir" nil nil nil fn)) - (or (file-directory-p fn) - (error "Could not make directory %s" fn))))) - -(defun kill-new (string) - "Save STRING as if killed in a buffer." - (setq kill-ring (cons string kill-ring)) - (if (> (length kill-ring) kill-ring-max) - (setcdr (nthcdr (1- kill-ring-max) kill-ring) nil)) - (setq kill-ring-yank-pointer kill-ring)) - -(defun insert-directory (file switches &optional wildcard full-directory-p) - "Insert directory listing for FILE, formatted according to SWITCHES. -Leaves point after the inserted text. -SWITCHES may be a string of options, or a list of strings. -Optional third arg WILDCARD means treat FILE as shell wildcard. -Optional fourth arg FULL-DIRECTORY-P means file is a directory and -switches do not contain `d', so that a full listing is expected. - -This works by running a directory listing program -whose name is in the variable `insert-directory-program'. -If WILDCARD, it also runs the shell specified by `shell-file-name'." - ;; We need the directory in order to find the right handler. - (let ((handler (find-file-name-handler (expand-file-name file) - 'insert-directory))) - (if handler - (funcall handler 'insert-directory file switches - wildcard full-directory-p) - (if (eq system-type 'vax-vms) - (vms-read-directory file switches (current-buffer)) - (if wildcard - ;; Run ls in the directory of the file pattern we asked for. - (let ((default-directory - (if (file-name-absolute-p file) - (file-name-directory file) - (file-name-directory (expand-file-name file)))) - (pattern (file-name-nondirectory file)) - (beg 0)) - ;; Quote some characters that have special meanings in shells; - ;; but don't quote the wildcards--we want them to be special. - ;; We also currently don't quote the quoting characters - ;; in case people want to use them explicitly to quote - ;; wildcard characters. - (while (string-match "[ \t\n;<>&|()#$]" pattern beg) - (setq pattern - (concat (substring pattern 0 (match-beginning 0)) - "\\" - (substring pattern (match-beginning 0))) - beg (1+ (match-end 0)))) - (call-process shell-file-name nil t nil - "-c" (concat insert-directory-program - " -d " - (if (stringp switches) - switches - (mapconcat 'identity switches " ")) - " " - pattern))) - ;; SunOS 4.1.3, SVr4 and others need the "." to list the - ;; directory if FILE is a symbolic link. - (apply 'call-process - insert-directory-program nil t nil - (let (list) - (if (listp switches) - (setq list switches) - (if (not (equal switches "")) - (progn - ;; Split the switches at any spaces - ;; so we can pass separate options as separate args. - (while (string-match " " switches) - (setq list (cons (substring switches 0 - (match-beginning 0)) - list) - switches (substring switches - (match-end 0)))) - (setq list (cons switches list))))) - (append list - (list - (if full-directory-p - (concat (file-name-as-directory file) ".") - file)))))))))) - -(defun file-local-copy (file) - "Copy the file FILE into a temporary file on this machine. -Returns the name of the local copy, or nil, if FILE is directly -accessible." - (let* ((file (expand-file-name file)) - (handler (find-file-name-handler file 'file-local-copy))) - ;; Does nothing, if no handler. - (if handler - (funcall handler 'file-local-copy file)))) - -(defun file-truename (filename) - "Return the truename of FILENAME, which should be absolute. -The truename of a file name is found by chasing symbolic links -both at the level of the file and at the level of the directories -containing it, until no links are left at any level." - (if (or (string= filename "~") - (and (string= (substring filename 0 1) "~") - (string-match "~[^/]*" filename))) - (progn - (setq filename (expand-file-name filename)) - (if (string= filename "") - (setq filename "/")))) - (let ((handler (find-file-name-handler filename 'file-truename))) - ;; For file name that has a special handler, call handler. - ;; This is so that ange-ftp can save time by doing a no-op. - (if handler - (funcall handler 'file-truename filename) - (let ((dir (file-name-directory filename)) - target dirfile file-name-handler-alist) - ;; Get the truename of the directory. - (setq dirfile (directory-file-name dir)) - ;; If these are equal, we have the (or a) root directory. - (or (string= dir dirfile) - (setq dir (file-name-as-directory (file-truename dirfile)))) - (if (equal ".." (file-name-nondirectory filename)) - (directory-file-name (file-name-directory - (directory-file-name dir))) - (if (equal "." (file-name-nondirectory filename)) - (directory-file-name dir) - ;; Put it back on the file name. - (setq filename (concat dir (file-name-nondirectory filename))) - ;; Is the file name the name of a link? - (setq target (file-symlink-p filename)) - (if target - ;; Yes => chase that link, then start all over - ;; since the link may point to a directory name that uses links. - ;; We can't safely use expand-file-name here - ;; since target might look like foo/../bar where foo - ;; is itself a link. Instead, we handle . and .. above. - (if (file-name-absolute-p target) - (file-truename target) - (file-truename (concat dir target))) - ;; No, we are done! - filename))))))) - -(defun generate-new-buffer-name (name) - "Return a string which is the name of no existing buffer based on -NAME. If there is no live buffer named NAME, return NAME. Otherwise, -modify name by appending `<NUMBER>', incrementing NUMBER until an -unused name is found. Return that name." - (if (get-buffer name) - (let ((num 2) - attempt) - (while (progn - (setq attempt (concat name "<" (int-to-string num) ">")) - (get-buffer attempt)) - (setq num (1+ num))) - attempt) - name)) - -(defun abbreviate-file-name (filename) - "Return a version of FILENAME shortened using `directory-abbrev-alist'. -This also substitutes \"~\" for the user's home directory. -Type \\[describe-variable] directory-abbrev-alist RET for more information." - ;; Get rid of the prefixes added by the automounter. - (if (and (string-match automount-dir-prefix filename) - (file-exists-p (file-name-directory - (substring filename (1- (match-end 0)))))) - (setq filename (substring filename (1- (match-end 0))))) - (let ((tail directory-abbrev-alist)) - ;; If any elt of directory-abbrev-alist matches this name, - ;; abbreviate accordingly. - (while tail - (if (string-match (car (car tail)) filename) - (setq filename - (concat (cdr (car tail)) (substring filename (match-end 0))))) - (setq tail (cdr tail))) - ;; Compute and save the abbreviated homedir name. - ;; We defer computing this until the first time it's needed, to - ;; give time for directory-abbrev-alist to be set properly. - (or abbreviated-home-dir - (setq abbreviated-home-dir - (let ((abbreviated-home-dir "$foo")) - (concat "^" (abbreviate-file-name (expand-file-name "~")))))) - ;; If FILENAME starts with the abbreviated homedir, - ;; make it start with `~' instead. - (if (string-match abbreviated-home-dir filename) - (setq filename - (concat "~" - ;; If abbreviated-home-dir ends with a slash, - ;; don't remove the corresponding slash from - ;; filename. On MS-DOS and OS/2, you can have - ;; home directories like "g:/", in which it is - ;; important not to remove the slash. And what - ;; about poor root on Unix systems? - (if (eq ?/ (aref abbreviated-home-dir - (1- (length abbreviated-home-dir)))) - "/" - "") - (substring filename (match-end 0))))) - filename)) - -(defun file-newest-backup (filename) - "Return most recent backup file for FILENAME or nil if no backups exist." - (let* ((filename (expand-file-name filename)) - (file (file-name-nondirectory filename)) - (dir (file-name-directory filename)) - (comp (file-name-all-completions file dir)) - newest) - (while comp - (setq file (concat dir (car comp)) - comp (cdr comp)) - (if (and (backup-file-name-p file) - (or (null newest) (file-newer-than-file-p file newest))) - (setq newest file))) - newest)) - -;; This is used in various files. -;; The usage of bv-length is not very clean, -;; but I can't see a good alternative, -;; so as of now I am leaving it alone. -(defun backup-extract-version (fn) - "Given the name of a numeric backup file, return the backup number. -Uses the free variable `bv-length', whose value should be -the index in the name where the version number begins." - (if (and (string-match "[0-9]+~$" fn bv-length) - (= (match-beginning 0) bv-length)) - (string-to-int (substring fn bv-length -1)) - 0)) - -;; The standard V18 version of this function doesn't support -;; the arg KEEP-BACKUP-VERSION -(defun file-name-sans-versions (name &optional keep-backup-version) - "Return FILENAME sans backup versions or strings. -This is a separate procedure so your site-init or startup file can -redefine it. -If the optional argument KEEP-BACKUP-VERSION is non-nil, -we do not remove backup version numbers, only true file version numbers." - (let ((handler (find-file-name-handler name 'file-name-sans-versions))) - (if handler - (funcall handler 'file-name-sans-versions name keep-backup-version) - (substring name 0 - (if (eq system-type 'vax-vms) - ;; VMS version number is (a) semicolon, optional - ;; sign, zero or more digits or (b) period, option - ;; sign, zero or more digits, provided this is the - ;; second period encountered outside of the - ;; device/directory part of the file name. - (or (string-match ";[-+]?[0-9]*\\'" name) - (if (string-match "\\.[^]>:]*\\(\\.[-+]?[0-9]*\\)\\'" - name) - (match-beginning 1)) - (length name)) - (if keep-backup-version - (length name) - (or (string-match "\\.~[0-9]+~\\'" name) - (string-match "~\\'" name) - (length name)))))))) - -(defun member (x y) - "Like memq, but uses `equal' for comparison. -This is a subr in Emacs 19." - (while (and y (not (equal x (car y)))) - (setq y (cdr y))) - y) - -(defun compiled-function-p (x) - "Emacs 18 doesn't have these." - nil) - -;; punt -- this will at least allow handlers to work for this. -(defun set-visited-file-modtime (&optional time) - (error "set-visited-file-modtime not defined in emacs 18.")) - -(defun add-hook (hook function &optional append) - "Add to the value of HOOK the function FUNCTION. -FUNCTION is not added if already present. -FUNCTION is added (if necessary) at the beginning of the hook list -unless the optional argument APPEND is non-nil, in which case -FUNCTION is added at the end. - -HOOK should be a symbol, and FUNCTION may be any valid function. If -HOOK is void, it is first set to nil. If HOOK's value is a single -function, it is changed to a list of functions." - (or (boundp hook) (set hook nil)) - ;; If the hook value is a single function, turn it into a list. - (let ((old (symbol-value hook))) - (if (or (not (listp old)) (eq (car old) 'lambda)) - (set hook (list old)))) - (or (if (consp function) - ;; Clever way to tell whether a given lambda-expression - ;; is equal to anything in the hook. - (let ((tail (assoc (cdr function) (symbol-value hook)))) - (equal function tail)) - (memq function (symbol-value hook))) - (set hook - (if append - (nconc (symbol-value hook) (list function)) - (cons function (symbol-value hook)))))) - -;;; after-save.el (Now part of files.el in Gnu Emacs V19) - -;;; Copyright (C) 1990 Roland McGrath -;;; - -(or (fboundp 'real-save-buffer) - (fset 'real-save-buffer (symbol-function 'save-buffer))) - -(defvar after-save-hook nil - "A function or list of functions to be run after saving the current buffer.") - -(defun save-buffer (&optional args) - "Save the current buffer, and then run `after-save-buffer-hook'. -The hooks are only run if the buffer was actually written. -For more documentation, do \\[describe-function] real-save-buffer RET." - (interactive "p") - (let ((modp (buffer-modified-p))) - (real-save-buffer args) - (if modp - (run-hooks 'after-save-hook)))) - -;;; end of after-save - -;;;; -;;;; Correcting for V18 bugs, and hacking around stupidities. -;;;; - -;; The 18.57 version has a bug that causes C-x C-v RET (which usually -;; re-visits the current buffer) to fail on dired buffers. -;; Only the last statement was changed to avoid killing the current -;; buffer. -(defun find-alternate-file (filename) - "Find file FILENAME, select its buffer, kill previous buffer. -If the current buffer now contains an empty file that you just visited -\(presumably by mistake), use this command to visit the file you really want." - (interactive "FFind alternate file: ") - (and (buffer-modified-p) - (not buffer-read-only) - (not (yes-or-no-p (format "Buffer %s is modified; kill anyway? " - (buffer-name)))) - (error "Aborted")) - (let ((obuf (current-buffer)) - (ofile buffer-file-name) - (oname (buffer-name))) - (rename-buffer " **lose**") - (setq buffer-file-name nil) - (unwind-protect - (progn - (unlock-buffer) - (find-file filename)) - (cond ((eq obuf (current-buffer)) - (setq buffer-file-name ofile) - (lock-buffer) - (rename-buffer oname)))) - (or (eq (current-buffer) obuf) - (kill-buffer obuf)))) - -;; At least in Emacs 18.55 this defvar has been forgotten to be copied -;; from lpr.el into loaddefs.el - -(defvar lpr-command (if (eq system-type 'usg-unix-v) - "lp" "lpr") - "Shell command for printing a file") - - -;; buffer-disable-undo used to be called buffer-flush-undo in Emacs -;; 18.55: -(or (fboundp 'buffer-disable-undo) - (fset 'buffer-disable-undo 'buffer-flush-undo)) - -;;; end of emacs-19.el
--- a/lisp/efs/fixup.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/efs/fixup.el Mon Aug 13 08:54:51 2007 +0200 @@ -3,7 +3,7 @@ ;; ;; File: fixup.el ;; Release: $efs release: 1.15 $ -;; Version: $Revision: 1.1 $ +;; Version: #Revision: 1.1 $ ;; RCS: ;; Description: Fix up the load path for batch byte compilation of efs. ;; Author: Andy Norman, Dawn
--- a/lisp/efs/fn-handler.el Mon Aug 13 08:54:26 2007 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,656 +0,0 @@ -;; -*-Emacs-Lisp-*- -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; File: fn-handler.el -;; Description: enhanced file-name-handler-alist support for pre-19.23 Emacs -;; Author: Sandy Rutherford <sandy@ibm550.sissa.it> -;; Created: Sat Mar 19 00:50:10 1994 by sandy on ibm550 -;; Modified: Tue Sep 13 20:59:19 1994 by sandy on ibm550 -;; Language: Emacs-Lisp -;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - - -;;; One of the problems with the file-name-handler-alist, is that when -;;; a handler gets called, and it has nothing to do for that function, -;;; the usual procedure is to remove the handler from the alist, and -;;; re-call the function. This is necessary to avoid an infinite -;;; recursion. However, if the function calling -;;; find-file-name-handler is not a primitive, there may be other lisp -;;; functions inside of it for which the handler does have some -;;; special actions specified. They won't run, because the let-bound -;;; value of file-name-handler-alist doesn't contain the handler. -;;; -;;; This problem was solved in Emacs 19.23 with the variables -;;; inhibit-file-name-handlers and inhibit-file-name-operation -;;; This file provides this solution to older versions of emacs. - - -(provide 'fn-handler) -(require 'efs-ovwrt) - -(or (boundp 'file-name-handler-alist) - (defvar file-name-handler-alist nil - "Association list of regexps for special file names and handlers.")) - -(defvar inhibit-file-name-handlers nil - "List of handlers \(symbols\) to be avoided by `find-file-name-handler'.") - -(defvar inhibit-file-name-operation nil - "Defines to which operation `inhibit-file-name-handlers applies' -Must be a synbol.") - -(defun find-file-name-handler (filename &optional operation) - "Return FILENAME1's handler function, if its syntax is handled specially. -Does not return handlers in `inhibit-file-name-handlers' list. -If there is no handler for FILENAME1, searches for one for FILENAME2. -Returns nil, if there is no handler for either file name. -A file name is handles specially if one of the regular expressions in -`file-name-handler-alist' matches it." - (let ((match-data (match-data))) - (unwind-protect - (catch 'handler - (mapcar (function - (lambda (x) - (and - (not - (and - (or (null operation) - (eq operation inhibit-file-name-operation)) - (memq (cdr x) inhibit-file-name-handlers))) - (string-match (car x) filename) - (throw 'handler (cdr x))))) - file-name-handler-alist) - nil) - (store-match-data match-data)))) - -;;; Overloads to supply the file-name-handler-alist - -(defun fn-handler-insert-file-contents (filename &optional visit &rest args) - "Documented as original." - (let* ((filename (expand-file-name filename)) - (handler (find-file-name-handler filename 'insert-file-contents))) - (if handler - (apply handler 'insert-file-contents filename visit args) - (let (file-name-handler-alist) - (apply 'fn-handler-real-insert-file-contents filename visit args))))) - -(efs-overwrite-fn "fn-handler" 'insert-file-contents - 'fn-handler-insert-file-contents) - -(defun fn-handler-directory-files (directory &optional full match &rest nosort) - "Documented as original." - (let ((handler (find-file-name-handler directory 'directory-files))) - (if handler - (apply handler 'directory-files directory full match nosort) - (let (file-name-handler-alist) - (apply 'fn-handler-real-directory-files - directory full match nosort))))) - -(efs-overwrite-fn "fn-handler" 'directory-files 'fn-handler-directory-files) - -(defun fn-handler-list-directory (dirname &optional verbose) - "Documented as original." - (interactive (let ((pfx current-prefix-arg)) - (list (read-file-name (if pfx "List directory (verbose): " - "List directory (brief): ") - nil default-directory nil) - pfx))) - (let ((handler (find-file-name-handler dirname 'list-directory))) - (if handler - (funcall handler 'list-directory dirname verbose) - (let (file-name-handler-alist) - (fn-handler-real-list-directory dirname verbose))))) - -(efs-overwrite-fn "fn-handler" 'list-directory 'fn-handler-list-directory) - -(defun fn-handler-file-directory-p (filename) - "Documented as original." - (let* ((filename (expand-file-name filename)) - (handler (find-file-name-handler filename 'file-directory-p))) - (if handler - (funcall handler 'file-directory-p filename) - (let (file-name-handler-alist) - (fn-handler-real-file-directory-p filename))))) - -(efs-overwrite-fn "fn-handler" ' file-directory-p 'fn-handler-file-directory-p) - -(defun fn-handler-file-writable-p (filename) - "Documented as original." - (let* ((filename (expand-file-name filename)) - (handler (find-file-name-handler filename 'file-writable-p))) - (if handler - (funcall handler 'file-writable-p filename) - (let (file-name-handler-alist) - (fn-handler-real-file-writable-p filename))))) - -(efs-overwrite-fn "fn-handler" 'file-writable-p 'fn-handler-file-writable-p) - -(defun fn-handler-file-readable-p (filename) - "Documented as original." - (let* ((filename (expand-file-name filename)) - (handler (find-file-name-handler filename 'file-readable-p))) - (if handler - (funcall handler 'file-readable-p filename) - (let (file-name-handler-alist) - (fn-handler-real-file-readable-p filename))))) - -(efs-overwrite-fn "fn-handler" 'file-readable-p 'fn-handler-file-readable-p) - -(defun fn-handler-file-symlink-p (filename) - "Documented as original." - (let* ((filename (expand-file-name filename)) - (handler (find-file-name-handler filename 'file-symlink-p))) - (if handler - (funcall handler 'file-symlink-p filename) - (let (file-name-handler-alist) - (fn-handler-real-file-symlink-p filename))))) - -(efs-overwrite-fn "fn-handler" 'file-symlink-p 'fn-handler-file-symlink-p) - -(defun fn-handler-delete-file (file) - "Documented as original" - (interactive (list (read-file-name "Delete-file: " nil nil t))) - (let* ((file (expand-file-name file)) - (handler (find-file-name-handler file 'delete-file))) - (if handler - (funcall handler 'delete-file file) - (let (file-name-handler-alist) - (fn-handler-real-delete-file file))))) - -(efs-overwrite-fn "fn-handler" 'delete-file 'fn-handler-delete-file) - -(defun fn-handler-file-exists-p (filename) - "Documented as original" - (let* ((filename (expand-file-name filename)) - (handler (find-file-name-handler filename 'file-exists-p))) - (if handler - (funcall handler 'file-exists-p filename) - (let (file-name-handler-alist) - (fn-handler-real-file-exists-p filename))))) - -(efs-overwrite-fn "fn-handler" 'file-exists-p 'fn-handler-file-exists-p) - -(defun fn-handler-write-region (start end filename &optional append visit) - "Documented as original" - ;; Use read-file-name, rather then interactive spec, - ;; to make it easier to get decent initial contents in the minibuffer. - (interactive - (progn - (or (mark) (error "The mark is not set now.")) - (list (min (point) (mark)) - (max (point) (mark)) - (read-file-name "Write region to file: ")))) - (let* ((filename (expand-file-name filename)) - (handler (or (find-file-name-handler filename 'write-region) - (and (stringp visit) - (find-file-name-handler (expand-file-name visit) - 'write-region))))) - (if handler - (funcall handler 'write-region start end filename append visit) - (let (file-name-handler-alist) - (fn-handler-real-write-region start end filename append visit))))) - -(efs-overwrite-fn "fn-handler" 'write-region - 'fn-handler-write-region) - -(defun fn-handler-verify-visited-file-modtime (buffer) - "Documented as original" - (let* ((file (buffer-file-name buffer)) - (handler (and file (find-file-name-handler - file - 'verify-visited-file-modtime)))) - (if handler - (funcall handler 'verify-visited-file-modtime buffer) - (let (file-name-handler-alist) - (fn-handler-real-verify-visited-file-modtime buffer))))) - -(efs-overwrite-fn "fn-handler" 'verify-visited-file-modtime - 'fn-handler-verify-visited-file-modtime) - -(defun fn-handler-backup-buffer () - "Documented as original" - (let ((handler (and buffer-file-name - (find-file-name-handler buffer-file-name - 'backup-buffer)))) - (if handler - (funcall handler 'backup-buffer) - ;; Don't let-bind file-name-handler-alist to nil, as backup-buffer - ;; is a lisp function and I want handlers to be available inside it. - (fn-handler-real-backup-buffer)))) - -(efs-overwrite-fn "fn-handler" 'backup-buffer 'fn-handler-backup-buffer) - -(defun fn-handler-copy-file (filename newname &optional ok-if-already-exists - keep-date) - "Documented as original" - ;; handler for filename takes precedence over the handler for newname. - (interactive - (let* ((from (read-file-name "Copy file: " nil nil t)) - (to (read-file-name (format "Copy %s to: " (abbreviate-file-name - from))))) - (list from to 0 current-prefix-arg))) - (let* ((filename (expand-file-name filename)) - (newname (expand-file-name newname)) - (handler (or (find-file-name-handler filename 'copy-file) - (find-file-name-handler newname 'copy-file)))) - (if handler - ;; Using the NOWAIT arg is a bit risky for other users of the - ;; handler-alist - (funcall handler 'copy-file filename newname ok-if-already-exists - keep-date) - (let (file-name-handler-alist) - (fn-handler-real-copy-file filename newname ok-if-already-exists - keep-date))))) - -(efs-overwrite-fn "fn-handler" 'copy-file 'fn-handler-copy-file) - -(defun fn-handler-file-newer-than-file-p (file1 file2) - "Documented as original" - ;; The handler for file2 takes precedence over the handler for file1. - (let* ((file1 (expand-file-name file1)) - (file2 (expand-file-name file2)) - (handler (or (find-file-name-handler file2 'file-newer-than-file-p) - (find-file-name-handler file1 'file-newer-than-file-p)))) - (if handler - (funcall handler 'file-newer-than-file-p file1 file2) - (let (file-name-handler-alist) - (fn-handler-real-file-newer-than-file-p file1 file2))))) - -(efs-overwrite-fn "fn-handler" 'file-newer-than-file-p - 'fn-handler-file-newer-than-file-p) - -(defun fn-handler-file-attributes (file) - "Documented as original" - (let* ((file (expand-file-name file)) - (handler (find-file-name-handler file 'file-attributes))) - (if handler - (funcall handler 'file-attributes file) - (let (file-name-handler-alist) - (fn-handler-real-file-attributes file))))) - -(efs-overwrite-fn "fn-handler" 'file-attributes 'fn-handler-file-attributes) - -(defun fn-handler-file-name-directory (file) - "Documented as original" - (let ((handler (find-file-name-handler file 'file-name-directory))) - (if handler - (funcall handler 'file-name-directory file) - (let (file-name-handler-alist) - (fn-handler-real-file-name-directory file))))) - -(efs-overwrite-fn "fn-handler" 'file-name-directory - 'fn-handler-file-name-directory) - -(defun fn-handler-rename-file (filename newname &optional ok-if-already-exists) - "Documented as original" - (interactive - (let* ((from (read-file-name "Rename file: " nil nil t)) - (to (read-file-name (format "Rename %s to: " (abbreviate-file-name - from))))) - (list from to 0))) - (let* ((filename (expand-file-name filename)) - (newname (expand-file-name newname)) - (handler (or (find-file-name-handler filename 'rename-file) - (find-file-name-handler newname 'rename-file)))) - (if handler - (funcall handler 'rename-file filename newname ok-if-already-exists) - (let (file-name-handler-alist) - (fn-handler-real-rename-file filename newname ok-if-already-exists))))) - -(efs-overwrite-fn "fn-handler" 'rename-file 'fn-handler-rename-file) - -(defun fn-handler-insert-directory (file switches - &optional wildcard full-directory-p) - "Documented as original" - (let* ((file (expand-file-name file)) - (handler (find-file-name-handler file 'insert-directory))) - (if handler - (funcall handler 'insert-directory file switches wildcard - full-directory-p) - (let (file-name-handler-alist) - (fn-handler-real-insert-directory file switches wildcard - full-directory-p))))) - -(efs-overwrite-fn "fn-handler" 'insert-directory 'fn-handler-insert-directory) - -(defun fn-handler-set-visited-file-modtime (&optional time) - "Sets the buffer's record of file modtime to the modtime of buffer-file-name. -With optional TIME, sets the modtime to TIME. This is an emacs 19 function. -In emacs 18, efs will make this work for remote files only." - (if buffer-file-name - (let ((handler (find-file-name-handler buffer-file-name - 'set-visited-file-modtime))) - (if handler - (funcall handler 'set-visited-file-modtime time) - (let (file-name-handler-alist) - (fn-handler-real-set-visited-file-modtime time)))))) - -(efs-overwrite-fn "fn-handler" 'set-visited-file-modtime - 'fn-handler-set-visited-file-modtime) - -(defun fn-handler-file-name-nondirectory (name) - "Documented as original" - (let ((handler (find-file-name-handler name 'file-name-nondirectory))) - (if handler - (funcall handler 'file-name-nondirectory name) - (let (file-name-handler-alist) - (fn-handler-real-file-name-nondirectory name))))) - -(efs-overwrite-fn "fn-handler" 'file-name-nondirectory - 'fn-handler-file-name-nondirectory) - -(defun fn-handler-file-name-as-directory (name) - "Documented as original" - (let ((handler (find-file-name-handler name 'file-name-as-directory))) - (if handler - (funcall handler 'file-name-as-directory name) - (let (file-name-handler-alist) - (fn-handler-real-file-name-as-directory name))))) - -(efs-overwrite-fn "fn-handler" 'file-name-as-directory - 'fn-handler-file-name-as-directory) - -(defun fn-handler-directory-file-name (directory) - "Documented as original" - (let ((handler (find-file-name-handler directory 'directory-file-name))) - (if handler - (funcall handler 'directory-file-name directory) - (let (file-name-handler-alist) - (fn-handler-real-directory-file-name directory))))) - -(efs-overwrite-fn "fn-handler" 'directory-file-name - 'fn-handler-directory-file-name) - -(defun fn-handler-get-file-buffer (file) - "Documented as original" - (let ((handler (find-file-name-handler file 'get-file-buffer))) - (if handler - (funcall handler 'get-file-buffer file) - (let (file-name-handler-alist) - (fn-handler-real-get-file-buffer file))))) - -(efs-overwrite-fn "fn-handler" 'get-file-buffer 'fn-handler-get-file-buffer) - -(defun fn-handler-create-file-buffer (file) - "Documented as original" - (let ((handler (find-file-name-handler file 'create-file-buffer))) - (if handler - (funcall handler 'create-file-buffer file) - (let (file-name-handler-alist) - (fn-handler-real-create-file-buffer file))))) - -(efs-overwrite-fn "fn-handler" 'create-file-buffer - 'fn-handler-create-file-buffer) - -(defun fn-handler-set-file-modes (file mode) - "Documented as original" - (let* ((file (expand-file-name file)) - (handler (find-file-name-handler file 'set-file-modes))) - (if handler - (funcall handler 'set-file-modes file mode) - (let (file-name-handler-alist) - (fn-handler-real-set-file-modes file mode))))) - -(efs-overwrite-fn "fn-handler" 'set-file-modes 'fn-handler-set-file-modes) - -(defun fn-handler-file-modes (file) - "Documented as original" - (let* ((file (expand-file-name file)) - (handler (find-file-name-handler file 'file-modes))) - (if handler - (funcall handler 'file-modes file) - (let (file-name-handler-alist) - (fn-handler-real-file-modes file))))) - -(efs-overwrite-fn "fn-handler" 'file-modes 'fn-handler-file-modes) - -(if (string-match emacs-version "Lucid") - - (progn - (defun fn-handler-abbreviate-file-name (filename &optional hack-homedir) - "Documented as original" - (let ((handler (find-file-name-handler filename - 'abbreviate-file-name))) - (if handler - (funcall handler 'abbreviate-file-name filename hack-homedir) - (let (file-name-handler-alist) - (fn-handler-real-abbreviate-file-name filename hack-homedir)))))) - - (defun fn-handler-abbreviate-file-name (filename) - "Documented as original" - (let ((handler (find-file-name-handler filename 'abbreviate-file-name))) - (if handler - (funcall handler 'abbreviate-file-name filename) - (let (file-name-handler-alist) - (fn-handler-real-abbreviate-file-name filename)))))) - -(efs-overwrite-fn "fn-handler" 'abbreviate-file-name - 'fn-handler-abbreviate-file-name) - -(defun fn-handler-file-name-sans-versions (filename - &optional keep-backup-version) - "Documented as original" - (let ((handler (find-file-name-handler filename 'file-name-sans-versions))) - (if handler - (funcall handler 'file-name-sans-versions filename - keep-backup-version) - (let (file-name-handler-alist) - (fn-handler-real-file-name-sans-versions filename - keep-backup-version))))) - -(efs-overwrite-fn "fn-handler" 'file-name-sans-versions - 'fn-handler-file-name-sans-versions) - -(if (fboundp 'make-directory-internal) ; not defined in lemacs 19.[67] - (progn - (defun fn-handler-make-directory-internal (dirname) - "Documented as original" - (let* ((dirname (expand-file-name dirname)) - (handler (find-file-name-handler dirname - 'make-directory-internal))) - (if handler - (funcall handler 'make-directory-internal dirname) - (let (file-name-handler-alist) - (fn-handler-real-make-directory-internal dirname))))) - - (efs-overwrite-fn "fn-handler" 'make-directory-internal - 'fn-handler-make-directory-internal))) - -(defun fn-handler-delete-directory (dirname) - "Documented as original" - (let* ((dirname (expand-file-name dirname)) - (handler (find-file-name-handler dirname 'delete-directory))) - (if handler - (funcall handler 'delete-directory dirname) - (let (file-name-handler-alist) - (fn-handler-real-delete-directory dirname))))) - -(efs-overwrite-fn "fn-handler" 'delete-directory 'fn-handler-delete-directory) - -(defun fn-handler-make-symbolic-link (target linkname - &optional ok-if-already-exists) - "Documented as original" - (interactive - (let (target) - (list - (setq target (read-string "Make symbolic link to file: ")) - (read-file-name (format "Make symbolic link to file %s: " target)) - 0))) - (let* ((linkname (expand-file-name linkname)) - (handler (or (find-file-name-handler linkname 'make-symbolic-link) - (find-file-name-handler target 'make-symbolic-link)))) - (if handler - (funcall handler 'make-symbolic-link - target linkname ok-if-already-exists) - (let (file-name-handler-alist) - (fn-handler-real-make-symbolic-link target linkname - ok-if-already-exists))))) - -(efs-overwrite-fn "fn-handler" 'make-symbolic-link - 'fn-handler-make-symbolic-link) - -(defun fn-handler-add-name-to-file (file newname &optional - ok-if-already-exists) - "Documented as original" - (interactive - (let (file) - (list - (setq file (read-file-name "Add name to file: " nil nil t)) - (read-file-name (format "Name to add to %s: " file)) - 0))) - (let* ((file (expand-file-name file)) - (newname (expand-file-name newname)) - (handler (or (find-file-name-handler newname 'add-name-to-file) - (find-file-name-handler file 'add-name-to-file)))) - (if handler - (funcall handler 'add-name-to-file file newname ok-if-already-exists) - (let (file-name-handler-alist) - (fn-handler-real-add-name-to-file file newname - ok-if-already-exists))))) - -(efs-overwrite-fn "fn-handler" 'add-name-to-file 'fn-handler-add-name-to-file) - -(defun fn-handler-recover-file (file) - "Documented as original" - (interactive "FRecover file: ") - (let* ((file (expand-file-name file)) - (handler (or (find-file-name-handler file 'recover-file) - (find-file-name-handler (let ((buffer-file-name file)) - (make-auto-save-file-name)) - 'recover-file)))) - (if handler - (funcall handler 'recover-file file) - (let (file-name-handler-alist) - (fn-handler-real-recover-file file))))) - -(efs-overwrite-fn "fn-handler" 'recover-file 'fn-handler-recover-file) - -(defun fn-handler-file-name-completion (file dir) - "Documented as original." - (let* ((dir (expand-file-name dir)) - (handler (find-file-name-handler dir 'file-name-completion))) - (if handler - (funcall handler 'file-name-completion file dir) - (let (file-name-handler-alist) - (fn-handler-real-file-name-completion file dir))))) - -(efs-overwrite-fn "fn-handler" 'file-name-completion - 'fn-handler-file-name-completion) - -(defun fn-handler-file-name-all-completions (file dir) - "Documented as original." - (let* ((dir (expand-file-name dir)) - (handler (find-file-name-handler dir 'file-name-all-completions))) - (if handler - (funcall handler 'file-name-all-completions file dir) - (let (file-name-handler-alist) - (fn-handler-real-file-name-all-completions file dir))))) - -(efs-overwrite-fn "fn-handler" 'file-name-all-completions - 'fn-handler-file-name-all-completions) - -(if (fboundp 'file-truename) - (progn - (defun fn-handler-file-truename (filename) - "Documented as original" - (let* ((fn (expand-file-name filename)) - (handler (find-file-name-handler filename 'file-truename))) - (if handler - (funcall handler 'file-truename filename) - (let (file-name-handler-alist) - (fn-handler-real-file-truename filename))))) - (efs-overwrite-fn "fn-handler" 'file-truename - 'fn-handler-file-truename))) - -(if (fboundp 'unhandled-file-name-directory) - (progn - (defun fn-handler-unhandled-file-name-directory (filename) - "Documented as original" - (let ((handler (find-file-name-handler - filename 'unhandled-file-name-directory))) - (if handler - (funcall handler 'unhandled-file-name-directory filename) - (let (file-name-handler-alist) - (fn-handler-real-unhandled-file-name-directory filename))))) - - (efs-overwrite-fn "fn-handler" 'unhandled-file-name-directory - 'fn-handler-unhandled-file-name-directory))) - - -;; We don't need the file-name-handler-alist for these. Inhibit it to -;; avoid an infinite recursion. Hope that this doesn't step -;; on any other packages' toes. -(defun fn-handler-expand-file-name (filename &optional default) - "Documented as original." - (let (file-name-handler-alist) - (fn-handler-real-expand-file-name filename default))) - -(efs-overwrite-fn "fn-handler" 'expand-file-name 'fn-handler-expand-file-name) - -(defun fn-handler-substitute-in-file-name (filename) - "Documented as original." - (let ((handler (find-file-name-handler filename 'substitute-in-file-name))) - (if handler - (funcall handler 'substitute-in-file-name filename) - (let (file-name-handler-alist) - (fn-handler-real-substitute-in-file-name filename))))) - -(efs-overwrite-fn "fn-handler" 'substitute-in-file-name - 'fn-handler-substitute-in-file-name) - -(if (fboundp 'file-executable-p) - (progn - (defun fn-handler-file-executable-p (file) - (let ((handler (find-file-name-handler file 'file-executable-p))) - (if handler - (funcall handler 'file-executable-p file) - (let (file-name-handler-alist) - (fn-handler-real-file-executable-p file))))) - (efs-overwrite-fn "fn-handler" 'file-executable-p - 'fn-handler-file-executable-p))) - -(if (fboundp 'file-accessible-directory-p) - (progn - (defun fn-handler-file-accessible-directory-p (file) - (let ((handler (find-file-name-handler file - 'file-accessible-directory-p))) - (if handler - (funcall handler 'file-accessible-directory-p file) - (let (file-name-handler-alist) - (fn-handler-real-file-accessible-directory-p file))))) - (efs-overwrite-fn "fn-handler" 'file-accessible-directory-p - 'fn-handler-file-accessible-directory-p))) - -(defun fn-handler-load (file &optional noerror nomessage nosuffix) - (let ((handler (find-file-name-handler file 'load))) - (if handler - (funcall handler 'load file noerror nomessage nosuffix) - (let (file-name-handler-alist) - (fn-handler-real-load file noerror nomessage nosuffix))))) - -(efs-overwrite-fn "fn-handler" 'load 'fn-handler-load) - -;; We don't need file-name-handlers for do-auto-save. -;; If it does try to access them there is a risk of an infinite recursion. -(defun fn-handler-do-auto-save (&rest args) - "Documented as original." - (let (file-name-handler-alist) - (apply 'fn-handler-real-do-auto-save args))) - -(efs-overwrite-fn "fn-handler" 'do-auto-save 'fn-handler-do-auto-save) - -(if (fboundp 'vc-registered) - (progn - (defun fn-handler-vc-registered (file) - "Documented as original." - (let ((handler (find-file-name-handler file 'vc-registered))) - (if handler - (funcall handler 'vc-registered file) - (let (file-name-handler-alist) - (fn-handler-real-vc-registered file))))) - - (efs-overwrite-fn "fn-handler" 'vc-registered - 'fn-handler-vc-registered))) - -;;; end of fn-handler.el
--- a/lisp/gnus/ChangeLog Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/gnus/ChangeLog Mon Aug 13 08:54:51 2007 +0200 @@ -1,3 +1,95 @@ +Mon Mar 24 01:24:27 1997 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no> + + * gnus.el: Gnus v5.4.36 is released. + +Sun Mar 23 18:51:00 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no> + + * gnus-group.el (gnus-group-list-groups): Doc fix. + + * gnus-demon.el (gnus-inhibit-demon): New variable. + (gnus-demon): Use it. + +Sun Mar 23 18:42:55 1997 David Moore <dmoore@ucsd.edu> + + * gnus-nocem.el (gnus-nocem-already-running): New variable. + +Sun Mar 23 17:27:17 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no> + + * gnus-sum.el (gnus-select-newsgroup): Revert to old duplicate + behavior for nnvirtual groups. + + * gnus-util.el (gnus-buffer-live-p): Removed. + +Sat Mar 22 22:11:28 1997 Steven L Baur <steve@altair.xemacs.org> + + * gnus-msg.el (gnus-setup-message): Mark buffer unmodified as last + step of setting message buffer up. + + * message.el (message-kill-buffer): Make prompt look more like the + one in kill-buffer. + Only prompt if the buffer has been changed. + +Sun Mar 23 02:52:51 1997 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no> + + * gnus.el: Gnus v5.4.35 is released. + +Sun Mar 23 01:09:23 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no> + + * gnus-art.el (gnus-read-save-file-name): Tweaked definition. + (gnus-summary-save-in-rmail): Use it. + (gnus-summary-save-in-file): Ditto. + (gnus-summary-save-in-mail): Ditto. + (gnus-summary-save-body-in-file): Ditto. + + * gnus-vm.el (gnus-summary-save-in-vm): Ditto. + + * gnus-sum.el (gnus-summary-enter-digest-group): Add group param. + + * gnus-art.el (gnus-split-methods): New default. + (gnus-article-nndoc-name): New function. + +Sat Mar 22 15:47:14 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no> + + * nnmh.el (nnmh-request-accept-article): Do 'junk. + * nnbabyl.el (nnbabyl-request-accept-article): Ditto. + * nnmbox.el (nnmbox-request-accept-article): Ditto. + * nnfolder.el (nnfolder-request-accept-article): Ditto. + +Sat Mar 22 15:42:53 1997 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no> + + * gnus.el: Gnus v5.4.34 is released. + +Sat Mar 22 01:37:00 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no> + + * gnus-sum.el (gnus-summary-move-article): Understand 'junk. + + * nnml.el (nnml-request-accept-article): Return 'junk when legal. + + * gnus-sum.el (gnus-summary-respool-query): Message better, and + return right value. + + * nnmail.el (nnmail-split-abbrev-alist): New `to' and `from' + abbrevs. + +Wed Mar 19 19:36:25 1997 Dewey M. Sasser <dewey@newvision.com> + + * message.el (message-make-from): Changed so that + message-from-style value is captured from message buffer instead + of temp buffer. + +Sat Mar 22 00:47:39 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no> + + * gnus-srvr.el (gnus-browse-foreign-server): Understand server + names. + + * gnus-group.el (gnus-group-browse-foreign-server): Down methodize + the server. + +Thu Mar 20 22:49:16 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no> + + * nnfolder.el (nnfolder-read-folder): Do checking if there are new + articles after the last nnfolder marker. + Thu Mar 20 17:33:54 1997 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no> * gnus.el: Gnus v5.4.33 is released.
--- a/lisp/gnus/gnus-art.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/gnus/gnus-art.el Mon Aug 13 08:54:51 2007 +0200 @@ -323,7 +323,8 @@ :type 'function) (defcustom gnus-split-methods - '((gnus-article-archive-name)) + '((gnus-article-archive-name) + (gnus-article-nndoc-name)) "Variable used to suggest where articles are to be saved. For instance, if you would like to save articles related to Gnus in the file \"gnus-stuff\", and articles related to VM in \"vm-stuff\", @@ -1393,60 +1394,80 @@ (set-buffer gnus-summary-buffer) (funcall gnus-default-article-saver filename))))) -(defun gnus-read-save-file-name (prompt default-name &optional filename) - (cond - ((eq filename 'default) - default-name) - (filename filename) - (t - (let* ((split-name (gnus-get-split-value gnus-split-methods)) - (prompt - (format prompt (if (and gnus-number-of-articles-to-be-saved - (> gnus-number-of-articles-to-be-saved 1)) - (format "these %d articles" - gnus-number-of-articles-to-be-saved) - "this article"))) - (file - ;; Let the split methods have their say. - (cond - ;; No split name was found. - ((null split-name) - (read-file-name - (concat prompt " (default " - (file-name-nondirectory default-name) ") ") - (file-name-directory default-name) - default-name)) - ;; A single split name was found - ((= 1 (length split-name)) - (let* ((name (car split-name)) - (dir (cond ((file-directory-p name) - (file-name-as-directory name)) - ((file-exists-p name) name) - (t gnus-article-save-directory)))) - (read-file-name - (concat prompt " (default " name ") ") - dir name))) - ;; A list of splits was found. - (t - (setq split-name (nreverse split-name)) - (let (result) - (let ((file-name-history (nconc split-name file-name-history))) - (setq result - (expand-file-name - (read-file-name - (concat prompt " (`M-p' for defaults) ") - gnus-article-save-directory - (car split-name)) - gnus-article-save-directory))) - (car (push result file-name-history))))))) - ;; Create the directory. - (gnus-make-directory (file-name-directory file)) - ;; If we have read a directory, we append the default file name. - (when (file-directory-p file) - (setq file (concat (file-name-as-directory file) - (file-name-nondirectory default-name)))) - ;; Possibly translate some characters. - (nnheader-translate-file-chars file))))) +(defun gnus-read-save-file-name (prompt &optional filename + function group headers variable) + (let ((default-name (funcall function group headers + (symbol-value variable))) + result) + (setq + result + (cond + ((eq filename 'default) + default-name) + (filename filename) + (t + (let* ((split-name (gnus-get-split-value gnus-split-methods)) + (prompt + (format prompt + (if (and gnus-number-of-articles-to-be-saved + (> gnus-number-of-articles-to-be-saved 1)) + (format "these %d articles" + gnus-number-of-articles-to-be-saved) + "this article"))) + (file + ;; Let the split methods have their say. + (cond + ;; No split name was found. + ((null split-name) + (read-file-name + (concat prompt " (default " + (file-name-nondirectory default-name) ") ") + (file-name-directory default-name) + default-name)) + ;; A single group name is returned. + ((stringp split-name) + (setq default-name + (funcall function split-name headers + (symbol-value variable))) + (read-file-name + (concat prompt " (default " + (file-name-nondirectory default-name) ") ") + (file-name-directory default-name) + default-name)) + ;; A single split name was found + ((= 1 (length split-name)) + (let* ((name (car split-name)) + (dir (cond ((file-directory-p name) + (file-name-as-directory name)) + ((file-exists-p name) name) + (t gnus-article-save-directory)))) + (read-file-name + (concat prompt " (default " name ") ") + dir name))) + ;; A list of splits was found. + (t + (setq split-name (nreverse split-name)) + (let (result) + (let ((file-name-history + (nconc split-name file-name-history))) + (setq result + (expand-file-name + (read-file-name + (concat prompt " (`M-p' for defaults) ") + gnus-article-save-directory + (car split-name)) + gnus-article-save-directory))) + (car (push result file-name-history))))))) + ;; Create the directory. + (gnus-make-directory (file-name-directory file)) + ;; If we have read a directory, we append the default file name. + (when (file-directory-p file) + (setq file (concat (file-name-as-directory file) + (file-name-nondirectory default-name)))) + ;; Possibly translate some characters. + (nnheader-translate-file-chars file))))) + (gnus-make-directory (file-name-directory result)) + (set variable result))) (defun gnus-article-archive-name (group) "Return the first instance of an \"Archive-name\" in the current buffer." @@ -1455,25 +1476,26 @@ (nnheader-concat gnus-article-save-directory (match-string 1))))) +(defun gnus-article-nndoc-name (group) + "If GROUP is an nndoc group, return the name of the parent group." + (when (eq (car (gnus-find-method-for-group group)) 'nndoc) + (gnus-group-get-parameter group 'save-article-group))) + (defun gnus-summary-save-in-rmail (&optional filename) "Append this article to Rmail file. Optional argument FILENAME specifies file name. Directory to save to is default to `gnus-article-save-directory'." (interactive) (gnus-set-global-variables) - (let ((default-name - (funcall gnus-rmail-save-name gnus-newsgroup-name - gnus-current-headers gnus-newsgroup-last-rmail))) - (setq filename (gnus-read-save-file-name - "Save %s in rmail file:" default-name filename)) - (gnus-make-directory (file-name-directory filename)) - (gnus-eval-in-buffer-window gnus-save-article-buffer - (save-excursion - (save-restriction - (widen) - (gnus-output-to-rmail filename)))) - ;; Remember the directory name to save articles - (setq gnus-newsgroup-last-rmail filename))) + (setq filename (gnus-read-save-file-name + "Save %s in rmail file:" filename + gnus-rmail-save-name gnus-newsgroup-name + gnus-current-headers 'gnus-newsgroup-last-rmail)) + (gnus-eval-in-buffer-window gnus-save-article-buffer + (save-excursion + (save-restriction + (widen) + (gnus-output-to-rmail filename))))) (defun gnus-summary-save-in-mail (&optional filename) "Append this article to Unix mail file. @@ -1481,26 +1503,18 @@ Directory to save to is default to `gnus-article-save-directory'." (interactive) (gnus-set-global-variables) - (let ((default-name - (funcall gnus-mail-save-name gnus-newsgroup-name - gnus-current-headers gnus-newsgroup-last-mail))) - (setq filename (gnus-read-save-file-name - "Save %s in Unix mail file:" default-name filename)) - (setq filename - (expand-file-name filename - (and default-name - (file-name-directory default-name)))) - (gnus-make-directory (file-name-directory filename)) - (gnus-eval-in-buffer-window gnus-save-article-buffer - (save-excursion - (save-restriction - (widen) - (if (and (file-readable-p filename) - (mail-file-babyl-p filename)) - (gnus-output-to-rmail filename t) - (gnus-output-to-mail filename))))) - ;; Remember the directory name to save articles. - (setq gnus-newsgroup-last-mail filename))) + (setq filename (gnus-read-save-file-name + "Save %s in Unix mail file:" filename + gnus-mail-save-name gnus-newsgroup-name + gnus-current-headers 'gnus-newsgroup-last-mail)) + (gnus-eval-in-buffer-window gnus-save-article-buffer + (save-excursion + (save-restriction + (widen) + (if (and (file-readable-p filename) + (mail-file-babyl-p filename)) + (gnus-output-to-rmail filename t) + (gnus-output-to-mail filename)))))) (defun gnus-summary-save-in-file (&optional filename overwrite) "Append this article to file. @@ -1508,22 +1522,18 @@ Directory to save to is default to `gnus-article-save-directory'." (interactive) (gnus-set-global-variables) - (let ((default-name - (funcall gnus-file-save-name gnus-newsgroup-name - gnus-current-headers gnus-newsgroup-last-file))) - (setq filename (gnus-read-save-file-name - "Save %s in file:" default-name filename)) - (gnus-make-directory (file-name-directory filename)) - (gnus-eval-in-buffer-window gnus-save-article-buffer - (save-excursion - (save-restriction - (widen) - (when (and overwrite - (file-exists-p filename)) - (delete-file filename)) - (gnus-output-to-file filename)))) - ;; Remember the directory name to save articles. - (setq gnus-newsgroup-last-file filename))) + (setq filename (gnus-read-save-file-name + "Save %s in file:" filename + gnus-file-save-name gnus-newsgroup-name + gnus-current-headers 'gnus-newsgroup-last-file)) + (gnus-eval-in-buffer-window gnus-save-article-buffer + (save-excursion + (save-restriction + (widen) + (when (and overwrite + (file-exists-p filename)) + (delete-file filename)) + (gnus-output-to-file filename))))) (defun gnus-summary-write-to-file (&optional filename) "Write this article to a file. @@ -1538,22 +1548,18 @@ The directory to save in defaults to `gnus-article-save-directory'." (interactive) (gnus-set-global-variables) - (let ((default-name - (funcall gnus-file-save-name gnus-newsgroup-name - gnus-current-headers gnus-newsgroup-last-file))) - (setq filename (gnus-read-save-file-name - "Save %s body in file:" default-name filename)) - (gnus-make-directory (file-name-directory filename)) - (gnus-eval-in-buffer-window gnus-save-article-buffer - (save-excursion - (save-restriction - (widen) - (goto-char (point-min)) - (when (search-forward "\n\n" nil t) - (narrow-to-region (point) (point-max))) - (gnus-output-to-file filename)))) - ;; Remember the directory name to save articles. - (setq gnus-newsgroup-last-file filename))) + (setq filename (gnus-read-save-file-name + "Save %s body in file:" filename + gnus-file-save-name gnus-newsgroup-name + gnus-current-headers 'gnus-newsgroup-last-file)) + (gnus-eval-in-buffer-window gnus-save-article-buffer + (save-excursion + (save-restriction + (widen) + (goto-char (point-min)) + (when (search-forward "\n\n" nil t) + (narrow-to-region (point) (point-max))) + (gnus-output-to-file filename))))) (defun gnus-summary-save-in-pipe (&optional command) "Pipe this article to subprocess."
--- a/lisp/gnus/gnus-async.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/gnus/gnus-async.el Mon Aug 13 08:54:51 2007 +0200 @@ -126,7 +126,7 @@ (defun gnus-async-prefetch-next (group article summary) "Possibly prefetch several articles starting with the article after ARTICLE." - (when (and (gnus-buffer-live-p summary) + (when (and (buffer-live-p summary) gnus-asynchronous (gnus-group-asynchronous-p group)) (save-excursion @@ -143,7 +143,7 @@ (defun gnus-async-prefetch-article (group article summary &optional next) "Possibly prefetch several articles starting with ARTICLE." - (if (not (gnus-buffer-live-p summary)) + (if (not (buffer-live-p summary)) (gnus-async-with-semaphore (setq gnus-async-fetch-list nil)) (when (and gnus-asynchronous @@ -154,7 +154,7 @@ (let ((do-fetch next) (do-message t)) ;(eq major-mode 'gnus-summary-mode))) (when (and (gnus-group-asynchronous-p group) - (gnus-buffer-live-p summary) + (buffer-live-p summary) (or (not next) gnus-async-fetch-list)) (gnus-async-with-semaphore @@ -211,7 +211,7 @@ ,mark (set-marker (make-marker) (point-max)) ,group ,article) gnus-async-article-alist))) - (if (not (gnus-buffer-live-p ,summary)) + (if (not (buffer-live-p ,summary)) (gnus-async-with-semaphore (setq gnus-async-fetch-list nil)) (gnus-async-prefetch-article ,group ,next ,summary t)))))
--- a/lisp/gnus/gnus-demon.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/gnus/gnus-demon.el Mon Aug 13 08:54:51 2007 +0200 @@ -74,6 +74,8 @@ (defvar gnus-demon-idle-time 0) (defvar gnus-demon-handler-state nil) (defvar gnus-demon-last-keys nil) +(defvar gnus-inhibit-demon nil + "*If non-nil, no daemonic function will be run.") (eval-and-compile (autoload 'timezone-parse-date "timezone") @@ -172,10 +174,12 @@ (setq gnus-demon-idle-time 0) (setq gnus-demon-idle-has-been-called nil)) ;; Disable all daemonic stuff if we're in the minibuffer - (unless (window-minibuffer-p (selected-window)) + (when (and (not (window-minibuffer-p (selected-window))) + (not gnus-inhibit-demon)) ;; Then we go through all the handler and call those that are ;; sufficiently ripe. (let ((handlers gnus-demon-handler-state) + (gnus-inhibit-demon t) handler time idle) (while handlers (setq handler (pop handlers))
--- a/lisp/gnus/gnus-group.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/gnus/gnus-group.el Mon Aug 13 08:54:51 2007 +0200 @@ -819,7 +819,9 @@ "List newsgroups with level LEVEL or lower that have unread articles. Default is all subscribed groups. If argument UNREAD is non-nil, groups with no unread articles are also -listed." +listed. + +Also see the `gnus-group-use-permanent-levels' variable." (interactive (list (if current-prefix-arg (prefix-numeric-value current-prefix-arg) @@ -2841,36 +2843,37 @@ re-scanning. If ARG is non-nil and not a number, this will force \"hard\" re-reading of the active files from all servers." (interactive "P") - (run-hooks 'gnus-get-new-news-hook) + (let ((gnus-inhibit-demon t)) + (run-hooks 'gnus-get-new-news-hook) - ;; Read any slave files. - (unless gnus-slave - (gnus-master-read-slave-newsrc)) + ;; Read any slave files. + (unless gnus-slave + (gnus-master-read-slave-newsrc)) - ;; We might read in new NoCeM messages here. - (when (and gnus-use-nocem - (null arg)) - (gnus-nocem-scan-groups)) - ;; If ARG is not a number, then we read the active file. - (when (and arg (not (numberp arg))) - (let ((gnus-read-active-file t)) - (gnus-read-active-file)) - (setq arg nil) + ;; We might read in new NoCeM messages here. + (when (and gnus-use-nocem + (null arg)) + (gnus-nocem-scan-groups)) + ;; If ARG is not a number, then we read the active file. + (when (and arg (not (numberp arg))) + (let ((gnus-read-active-file t)) + (gnus-read-active-file)) + (setq arg nil) - ;; If the user wants it, we scan for new groups. - (when (eq gnus-check-new-newsgroups 'always) - (gnus-find-new-newsgroups))) + ;; If the user wants it, we scan for new groups. + (when (eq gnus-check-new-newsgroups 'always) + (gnus-find-new-newsgroups))) - (setq arg (gnus-group-default-level arg t)) - (if (and gnus-read-active-file (not arg)) - (progn - (gnus-read-active-file) - (gnus-get-unread-articles arg)) - (let ((gnus-read-active-file (if arg nil gnus-read-active-file))) - (gnus-get-unread-articles arg))) - (run-hooks 'gnus-after-getting-new-news-hook) - (gnus-group-list-groups (and (numberp arg) - (max (car gnus-group-list-mode) arg)))) + (setq arg (gnus-group-default-level arg t)) + (if (and gnus-read-active-file (not arg)) + (progn + (gnus-read-active-file) + (gnus-get-unread-articles arg)) + (let ((gnus-read-active-file (if arg nil gnus-read-active-file))) + (gnus-get-unread-articles arg))) + (run-hooks 'gnus-after-getting-new-news-hook) + (gnus-group-list-groups (and (numberp arg) + (max (car gnus-group-list-mode) arg))))) (defun gnus-group-get-new-news-this-group (&optional n) "Check for newly arrived news in the current group (and the N-1 next groups). @@ -3201,8 +3204,8 @@ "Address: " (mapcar (lambda (server) (list server)) gnus-secondary-servers))) - ;; We got a server name, so we find the method. - (gnus-server-to-method how))))) + ;; We got a server name. + how)))) (gnus-browse-foreign-server method)) (defun gnus-group-set-info (info &optional method-only-group part)
--- a/lisp/gnus/gnus-int.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/gnus/gnus-int.el Mon Aug 13 08:54:51 2007 +0200 @@ -331,7 +331,8 @@ (defun gnus-request-scan (group method) "Request a SCAN being performed in GROUP from METHOD. If GROUP is nil, all groups on METHOD are scanned." - (let ((method (if group (gnus-find-method-for-group group) method))) + (let ((method (if group (gnus-find-method-for-group group) method)) + (gnus-inhibit-demon t)) (funcall (gnus-get-function method 'request-scan) (and group (gnus-group-real-name group)) (nth 1 method)))) @@ -410,6 +411,7 @@ (defun gnus-close-backends () ;; Send a close request to all backends that support such a request. (let ((methods gnus-valid-select-methods) + (gnus-inhibit-demon t) func method) (while (setq method (pop methods)) (when (fboundp (setq func (intern
--- a/lisp/gnus/gnus-msg.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/gnus/gnus-msg.el Mon Aug 13 08:54:51 2007 +0200 @@ -172,7 +172,8 @@ (setq gnus-message-buffer (current-buffer)) (make-local-variable 'gnus-newsgroup-name) (run-hooks 'gnus-message-setup-hook)) - (gnus-configure-windows ,config t)))) + (gnus-configure-windows ,config t) + (set-buffer-modified-p nil)))) (defun gnus-inews-add-send-actions (winconf buffer article) (make-local-hook 'message-sent-hook)
--- a/lisp/gnus/gnus-nocem.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/gnus/gnus-nocem.el Mon Aug 13 08:54:51 2007 +0200 @@ -100,6 +100,7 @@ "Scan all NoCeM groups for new NoCeM messages." (interactive) (let ((groups gnus-nocem-groups) + (gnus-inhibit-demon t) group active gactive articles) (gnus-make-directory gnus-nocem-directory) ;; Load any previous NoCeM headers.
--- a/lisp/gnus/gnus-salt.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/gnus/gnus-salt.el Mon Aug 13 08:54:51 2007 +0200 @@ -129,7 +129,7 @@ (defun gnus-pick-setup-message () "Make Message do the right thing on exit." - (when (and (gnus-buffer-live-p gnus-summary-buffer) + (when (and (buffer-live-p gnus-summary-buffer) (save-excursion (set-buffer gnus-summary-buffer) gnus-pick-mode))
--- a/lisp/gnus/gnus-score.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/gnus/gnus-score.el Mon Aug 13 08:54:51 2007 +0200 @@ -908,7 +908,7 @@ "Add SCORE to all followups to the article in the current buffer." (interactive "P") (setq score (gnus-score-default score)) - (when (gnus-buffer-live-p gnus-summary-buffer) + (when (buffer-live-p gnus-summary-buffer) (save-excursion (save-restriction (message-narrow-to-headers) @@ -923,7 +923,7 @@ "Add SCORE to all later articles in the thread the current buffer is part of." (interactive "P") (setq score (gnus-score-default score)) - (when (gnus-buffer-live-p gnus-summary-buffer) + (when (buffer-live-p gnus-summary-buffer) (save-excursion (save-restriction (goto-char (point-min))
--- a/lisp/gnus/gnus-srvr.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/gnus/gnus-srvr.el Mon Aug 13 08:54:51 2007 +0200 @@ -530,8 +530,7 @@ ["Select" gnus-browse-read-group t] ["Next" gnus-browse-next-group t] ["Prev" gnus-browse-next-group t] - ["Exit" gnus-browse-exit t] - )) + ["Exit" gnus-browse-exit t])) (run-hooks 'gnus-browse-menu-hook))) (defvar gnus-browse-current-method nil) @@ -543,6 +542,8 @@ "Browse the server METHOD." (setq gnus-browse-current-method method) (setq gnus-browse-return-buffer return-buffer) + (when (stringp method) + (setq method (gnus-server-to-method method))) (let ((gnus-select-method method) groups group) (gnus-message 5 "Connecting to %s..." (nth 1 method))
--- a/lisp/gnus/gnus-sum.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/gnus/gnus-sum.el Mon Aug 13 08:54:51 2007 +0200 @@ -2262,7 +2262,7 @@ (setq gnus-reffed-article-number reffed) (setq gnus-current-score-file score-file) ;; The article buffer also has local variables. - (when (gnus-buffer-live-p gnus-article-buffer) + (when (buffer-live-p gnus-article-buffer) (set-buffer gnus-article-buffer) (setq gnus-summary-buffer summary)))))) @@ -3586,6 +3586,11 @@ "Select newsgroup GROUP. If READ-ALL is non-nil, all articles in the group are selected." (let* ((entry (gnus-gethash group gnus-newsrc-hashtb)) + ;;!!! Dirty hack; should be removed. + (gnus-summary-ignore-duplicates + (if (eq (car (gnus-find-method-for-group group)) 'nnvirtual) + t + gnus-summary-ignore-duplicates)) (info (nth 2 entry)) articles fetched-articles cached) @@ -4956,7 +4961,7 @@ ;; The `gnus-summary-buffer' variable may point ;; to the old summary buffer when using a single ;; article buffer. - (unless (gnus-buffer-live-p gnus-summary-buffer) + (unless (buffer-live-p gnus-summary-buffer) (set-buffer gnus-group-buffer)) (set-buffer gnus-summary-buffer) (gnus-set-global-variables)))) @@ -6180,7 +6185,8 @@ gnus-current-article))) (ogroup gnus-newsgroup-name) (params (append (gnus-info-params (gnus-get-info ogroup)) - (list (cons 'to-group ogroup)))) + (list (cons 'to-group ogroup)) + (list (cons 'save-article-group ogroup)))) (case-fold-search t) (buf (current-buffer)) dig) @@ -6667,20 +6673,26 @@ (set-buffer copy-buf) ;; First put the article in the destination group. (gnus-request-article-this-buffer article gnus-newsgroup-name) - (setq art-group - (gnus-request-accept-article - to-newsgroup select-method (not articles))) - (setq new-xref (concat new-xref " " (car art-group) - ":" (cdr art-group))) - ;; Now we have the new Xrefs header, so we insert - ;; it and replace the new article. - (nnheader-replace-header "Xref" new-xref) - (gnus-request-replace-article - (cdr art-group) to-newsgroup (current-buffer)) - art-group))))) - (if (not art-group) - (gnus-message 1 "Couldn't %s article %s" - (cadr (assq action names)) article) + (when (consp (setq art-group + (gnus-request-accept-article + to-newsgroup select-method (not articles)))) + (setq new-xref (concat new-xref " " (car art-group) + ":" (cdr art-group))) + ;; Now we have the new Xrefs header, so we insert + ;; it and replace the new article. + (nnheader-replace-header "Xref" new-xref) + (gnus-request-replace-article + (cdr art-group) to-newsgroup (current-buffer)) + art-group)))))) + (cond + ((not art-group) + (gnus-message 1 "Couldn't %s article %s" + (cadr (assq action names)) article)) + ((and (eq art-group 'junk) + (eq action 'move)) + (gnus-summary-mark-article article gnus-canceled-mark) + (gnus-message 4 "Deleted article %s" article)) + (t (let* ((entry (or (gnus-gethash (car art-group) gnus-newsrc-hashtb) @@ -6755,7 +6767,7 @@ (gnus-summary-goto-subject article) (when (eq action 'move) - (gnus-summary-mark-article article gnus-canceled-mark))) + (gnus-summary-mark-article article gnus-canceled-mark)))) (gnus-summary-remove-process-mark article)) ;; Re-activate all groups that have been moved to. (while to-groups @@ -7068,7 +7080,7 @@ ;;; Respooling -(defun gnus-summary-respool-query () +(defun gnus-summary-respool-query (&optional silent) "Query where the respool algorithm would put this article." (interactive) (gnus-set-global-variables) @@ -7078,8 +7090,13 @@ (set-buffer gnus-original-article-buffer) (save-restriction (message-narrow-to-head) - (message "This message would go to %s" - (mapconcat 'car (nnmail-article-group 'identity) ", ")))))) + (let ((groups (nnmail-article-group 'identity))) + (unless silent + (if groups + (message "This message would go to %s" + (mapconcat 'car groups ", ")) + (message "This message would go to no groups")) + groups)))))) ;; Summary marking commands.
--- a/lisp/gnus/gnus-util.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/gnus/gnus-util.el Mon Aug 13 08:54:51 2007 +0200 @@ -458,12 +458,6 @@ (let ((ids (inline (gnus-split-references references)))) (car (last ids (or n 1)))))) -(defsubst gnus-buffer-live-p (buffer) - "Say whether BUFFER is alive or not." - (and buffer - (get-buffer buffer) - (buffer-name (get-buffer buffer)))) - (defun gnus-horizontal-recenter () "Recenter the current buffer horizontally." (if (< (current-column) (/ (window-width) 2))
--- a/lisp/gnus/gnus-vm.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/gnus/gnus-vm.el Mon Aug 13 08:54:51 2007 +0200 @@ -87,24 +87,20 @@ (defun gnus-summary-save-in-vm (&optional folder) (interactive) - (let ((default-name - (funcall gnus-mail-save-name gnus-newsgroup-name - gnus-current-headers gnus-newsgroup-last-mail))) - (setq folder - (cond ((eq folder 'default) default-name) - (folder folder) - (t (gnus-read-save-file-name - "Save %s in VM folder:" default-name)))) - (gnus-make-directory (file-name-directory folder)) - (set-buffer gnus-original-article-buffer) + (setq folder + (cond ((eq folder 'default) default-name) + (folder folder) + (t (gnus-read-save-file-name + "Save %s in VM folder:" folder + gnus-mail-save-name gnus-newsgroup-name + gnus-current-headers 'gnus-newsgroup-last-mail)))) + (gnus-eval-in-buffer-window gnus-original-article-buffer (save-excursion (save-restriction (widen) (let ((vm-folder (gnus-vm-make-folder))) (vm-save-message folder) - (kill-buffer vm-folder)))) - ;; Remember the directory name to save articles. - (setq gnus-newsgroup-last-mail folder))) + (kill-buffer vm-folder)))))) (provide 'gnus-vm)
--- a/lisp/gnus/gnus.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/gnus/gnus.el Mon Aug 13 08:54:51 2007 +0200 @@ -226,7 +226,7 @@ :link '(custom-manual "(gnus)Exiting Gnus") :group 'gnus) -(defconst gnus-version-number "5.4.33" +(defconst gnus-version-number "5.4.36" "Version number for this version of Gnus.") (defconst gnus-version (format "Gnus v%s" gnus-version-number)
--- a/lisp/gnus/message.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/gnus/message.el Mon Aug 13 08:54:51 2007 +0200 @@ -113,7 +113,6 @@ :group 'message-buffers :type 'function) -;;;###autoload (defcustom message-fcc-handler-function 'message-output "*A function called to save outgoing articles. This function will be called with the name of the file to store the @@ -1656,7 +1655,8 @@ (defun message-kill-buffer () "Kill the current buffer." (interactive) - (when (yes-or-no-p "Kill the buffer? ") + (when (or (not (buffer-modified-p)) + (yes-or-no-p "Message modified; kill anyway? ")) (let ((actions message-kill-actions)) (kill-buffer (current-buffer)) (message-do-actions actions)))) @@ -2461,7 +2461,8 @@ (defun message-make-from () "Make a From header." - (let* ((login (message-make-address)) + (let* ((style message-from-style) + (login (message-make-address)) (fullname (or (and (boundp 'user-full-name) user-full-name) @@ -2471,11 +2472,11 @@ (save-excursion (message-set-work-buffer) (cond - ((or (null message-from-style) + ((or (null style) (equal fullname "")) (insert login)) - ((or (eq message-from-style 'angles) - (and (not (eq message-from-style 'parens)) + ((or (eq style 'angles) + (and (not (eq style 'parens)) ;; Use angles if no quoting is needed, or if parens would ;; need quoting too. (or (not (string-match "[^- !#-'*+/-9=?A-Z^-~]" fullname))
--- a/lisp/gnus/nnbabyl.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/gnus/nnbabyl.el Mon Aug 13 08:54:51 2007 +0200 @@ -335,10 +335,13 @@ (delete-region (point) (progn (forward-line 1) (point))))) (when nnmail-cache-accepted-message-ids (nnmail-cache-insert (nnmail-fetch-field "message-id"))) - (setq result (car (nnbabyl-save-mail - (if (stringp group) - (list (cons group (nnbabyl-active-number group))) - (nnmail-article-group 'nnbabyl-active-number))))) + (setq result + (if (stringp group) + (list (cons group (nnbabyl-active-number group))) + (nnmail-article-group 'nnbabyl-active-number))) + (if (null result) + (setq result 'junk) + (setq result (car (nnbabyl-save-mail result)))) (set-buffer nnbabyl-mbox-buffer) (goto-char (point-max)) (search-backward "\n\^_")
--- a/lisp/gnus/nnfolder.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/gnus/nnfolder.el Mon Aug 13 08:54:51 2007 +0200 @@ -377,12 +377,14 @@ (delete-region (point) (progn (forward-line 1) (point)))) (when nnmail-cache-accepted-message-ids (nnmail-cache-insert (nnmail-fetch-field "message-id"))) - (setq result - (car (nnfolder-save-mail - (if (stringp group) - (list (cons group (nnfolder-active-number group))) - (setq art-group - (nnmail-article-group 'nnfolder-active-number))))))) + (setq result (if (stringp group) + (list (cons group (nnfolder-active-number group))) + (setq art-group + (nnmail-article-group 'nnfolder-active-number)))) + (if (null result) + (setq result 'junk) + (setq result + (car (nnfolder-save-mail result))))) (when last (save-excursion (nnfolder-possibly-change-folder (or (caar art-group) group)) @@ -490,7 +492,7 @@ (when (and server (not (nnfolder-server-opened server))) (nnfolder-open-server server)) - (unless (gnus-buffer-live-p nnfolder-current-buffer) + (unless (buffer-live-p nnfolder-current-buffer) (setq nnfolder-current-buffer nil nnfolder-current-group nil)) ;; Change group. @@ -517,7 +519,7 @@ ;; is live, verify that nobody else has touched the file since last ;; time. (when (and nnfolder-current-buffer - (not (gnus-buffer-live-p nnfolder-current-buffer))) + (not (buffer-live-p nnfolder-current-buffer))) (setq nnfolder-buffer-alist (delq inf nnfolder-buffer-alist) nnfolder-current-buffer nil)) @@ -609,7 +611,7 @@ (defun nnfolder-possibly-change-folder (group) (let ((inf (assoc group nnfolder-buffer-alist))) (if (and inf - (gnus-buffer-live-p (cadr inf))) + (buffer-live-p (cadr inf))) (set-buffer (cadr inf)) (when inf (setq nnfolder-buffer-alist (delq inf nnfolder-buffer-alist))) @@ -682,6 +684,8 @@ (< maxid 2))) (goto-char (point-max)) (unless (re-search-backward marker nil t) + (goto-char (point-min))) + (when (nnmail-search-unix-mail-delim) (goto-char (point-min)))) ;; Keep track of the active number on our own, and insert it back
--- a/lisp/gnus/nnheader.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/gnus/nnheader.el Mon Aug 13 08:54:51 2007 +0200 @@ -57,8 +57,7 @@ (autoload 'mail-position-on-field "sendmail") (autoload 'message-remove-header "message") (autoload 'cancel-function-timers "timers") - (autoload 'gnus-point-at-eol "gnus-util") - (autoload 'gnus-buffer-live-p "gnus-util")) + (autoload 'gnus-point-at-eol "gnus-util")) ;;; Header access macros. @@ -382,7 +381,7 @@ (defun nnheader-init-server-buffer () "Initialize the Gnus-backend communication buffer." (save-excursion - (unless (gnus-buffer-live-p nntp-server-buffer) + (unless (buffer-live-p nntp-server-buffer) (setq nntp-server-buffer (get-buffer-create " *nntpd*"))) (set-buffer nntp-server-buffer) (buffer-disable-undo (current-buffer))
--- a/lisp/gnus/nnmail.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/gnus/nnmail.el Mon Aug 13 08:54:51 2007 +0200 @@ -393,7 +393,9 @@ (defcustom nnmail-split-abbrev-alist '((any . "from\\|to\\|cc\\|sender\\|apparently-to\\|resent-from\\|resent-to\\|resent-cc") - (mail . "mailer-daemon\\|postmaster\\|uucp")) + (mail . "mailer-daemon\\|postmaster\\|uucp") + (to . "to\\|cc\\|apparently-to\\|resent-to\\|resent-cc") + (from . "from\\|sender\\|resent-from")) "Alist of abbreviations allowed in `nnmail-split-fancy'." :group 'nnmail-split :type '(repeat (cons :format "%v" symbol regexp))) @@ -1414,7 +1416,7 @@ (defun nnmail-cache-insert (id) (when nnmail-treat-duplicates - (unless (gnus-buffer-live-p nnmail-cache-buffer) + (unless (buffer-live-p nnmail-cache-buffer) (nnmail-cache-open)) (save-excursion (set-buffer nnmail-cache-buffer)
--- a/lisp/gnus/nnmbox.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/gnus/nnmbox.el Mon Aug 13 08:54:51 2007 +0200 @@ -306,10 +306,12 @@ (delete-region (point) (progn (forward-line 1) (point)))) (when nnmail-cache-accepted-message-ids (nnmail-cache-insert (nnmail-fetch-field "message-id"))) - (setq result (nnmbox-save-mail - (if (stringp group) - (list (cons group (nnmbox-active-number group))) - (nnmail-article-group 'nnmbox-active-number))))) + (setq result (if (stringp group) + (list (cons group (nnmbox-active-number group))) + (nnmail-article-group 'nnmbox-active-number))) + (if (null result) + (setq result 'junk) + (setq result (car (nnmbox-save-mail result))))) (save-excursion (set-buffer nnmbox-mbox-buffer) (goto-char (point-max)) @@ -319,7 +321,7 @@ (nnmail-cache-close)) (nnmail-save-active nnmbox-group-alist nnmbox-active-file) (save-buffer)))) - (car result))) + result)) (deffoo nnmbox-request-replace-article (article group buffer) (nnmbox-possibly-change-newsgroup group)
--- a/lisp/gnus/nnmh.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/gnus/nnmh.el Mon Aug 13 08:54:51 2007 +0200 @@ -301,8 +301,10 @@ noinsert))) (and (nnmail-activate 'nnmh) - (car (nnmh-save-mail (nnmail-article-group 'nnmh-active-number) - noinsert)))) + (let ((resu|t (nnmail-article-group 'nnmh-active-number))) + (if (not result) + 'junk + (car (nnmh-save-mail result noinsert)))))) (when (and last nnmail-cache-accepted-message-ids) (nnmail-cache-close))))
--- a/lisp/gnus/nnml.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/gnus/nnml.el Mon Aug 13 08:54:51 2007 +0200 @@ -325,8 +325,9 @@ (and last (nnml-save-nov)))) (and (nnmail-activate 'nnml) - (setq result (car (nnml-save-mail - (nnmail-article-group 'nnml-active-number)))) + (if (not (setq result (nnmail-article-group 'nnml-active-number))) + (setq result 'junk) + (setq result (car (nnml-save-mail result)))) (when last (nnmail-save-active nnml-group-alist nnml-active-file) (when nnmail-cache-accepted-message-ids
--- a/lisp/gnus/nntp.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/gnus/nntp.el Mon Aug 13 08:54:51 2007 +0200 @@ -598,7 +598,7 @@ "Say whether a connection to SERVER has been opened." (and (nnoo-current-server-p 'nntp server) nntp-server-buffer - (gnus-buffer-live-p nntp-server-buffer) + (buffer-live-p nntp-server-buffer) (nntp-find-connection nntp-server-buffer))) (deffoo nntp-open-server (server &optional defs connectionless)
--- a/lisp/gnus/nnweb.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/gnus/nnweb.el Mon Aug 13 08:54:51 2007 +0200 @@ -133,7 +133,7 @@ (deffoo nnweb-close-group (group &optional server) (nnweb-possibly-change-server group server) - (when (gnus-buffer-live-p nnweb-buffer) + (when (buffer-live-p nnweb-buffer) (save-excursion (set-buffer nnweb-buffer) (set-buffer-modified-p nil) @@ -166,7 +166,7 @@ (deffoo nnweb-close-server (&optional server) (when (and (nnweb-server-opened server) - (gnus-buffer-live-p nnweb-buffer)) + (buffer-live-p nnweb-buffer)) (save-excursion (set-buffer nnweb-buffer) (set-buffer-modified-p nil) @@ -274,7 +274,7 @@ (defun nnweb-init (server) "Initialize buffers and such." - (unless (gnus-buffer-live-p nnweb-buffer) + (unless (buffer-live-p nnweb-buffer) (setq nnweb-buffer (save-excursion (nnheader-set-temp-buffer @@ -295,7 +295,7 @@ t))) (defun nnweb-callback (buffer callback) - (when (gnus-buffer-live-p url-working-buffer) + (when (buffer-live-p url-working-buffer) (save-excursion (set-buffer url-working-buffer) (funcall (nnweb-definition 'article))
--- a/lisp/hm--html-menus/ANNOUNCEMENT Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/hm--html-menus/ANNOUNCEMENT Mon Aug 13 08:54:51 2007 +0200 @@ -1,9 +1,9 @@ Hello, -I've written a new version (5.3) of my html package for the XEmacs +I've written a new version (5.4) of my html package for the XEmacs and the GNU Emacs 19. The name of the package is: - hm--html-menus-5.3.tar.gz + hm--html-menus-5.4.tar.gz With this package it is very easy to write html pages for the World Wide Web (WWW). Eg: In most cases the user gets help to construct a specific @@ -25,9 +25,8 @@ - a lot of bug fixes Read the NEWS file to see news in detail... -You should find hm--html-menus-5.3.tar.gz on the following ftp server: +You should find hm--html-menus-5.4.tar.gz on the following ftp server: sunsite.unc.edu in /pub/Linux/apps/editors/emacs/ - ftp.rrzn.uni-hannover.de in /pub/unix/editors/lemacs/contrib ftp.tnt.uni-hannover.de in /pub/editors/xemacs/contrib It may take some time, before the package is copied by the ftp admins
--- a/lisp/hm--html-menus/NEWS Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/hm--html-menus/NEWS Mon Aug 13 08:54:51 2007 +0200 @@ -1,3 +1,16 @@ +22.03.97 + Fixed some documentation bugs in tmpl-minor-mode.el. + Changed the key bindings in the tmpl-minor-mode. They are now + using all the prefix C-c C-c. + Fixed some documentation bugs in internal-drag-and-drop.el. + Added a package documentation as Texinfo file. It documents also + the included packages for internal drag and drop and for + templates. + -- BUILDED the version 5.4 of the package -- +18.03.97 + Applied a patch from Martin Buchholz <mrb@Eng.Sun.COM>, + to fix some spelling errors. + Changed the value of the variable `tmpl-sign' to \000. 25.02.97 Fixed two bugs, which occured during loading the mode after the psgml-html-mode.
--- a/lisp/hm--html-menus/README Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/hm--html-menus/README Mon Aug 13 08:54:51 2007 +0200 @@ -1,4 +1,4 @@ -This README file describes the emacs lisp package hm--html-menus-5.3. +This README file describes the emacs lisp package hm--html-menus-5.4. The package provides functions and various popup and pulldown menus for a html mode called hm--html-mode, a mode for writing html pages. @@ -28,7 +28,7 @@ only UNIX ?) platforms. NOTE: The current release isn't tested with the Emacs 19 (5.0 is but -5.1 to 5.3 are not). One of the next releases in the near future :-) will be a +5.1 to 5.4 are not). One of the next releases in the near future :-) will be a bug fix only release for the Emacs 19. So please report any bugs to muenkel@tnt.uni-hannover.de to shorten the time until the Emacs 19 related bugs are fixed. @@ -62,19 +62,17 @@ of the hm--html-mode; this is now the main file of the package; hm--html-not-standard.el : provides functions to insert some - non standard hteml elements; + non standard html elements; this file is not evaluated by default; hm--html-configuration.el : configuration file for the html mode; choose this as system configuration file; hm--html-drag-and-drop.el : defines the HTML- specific functions for the drag and drop interface; -hm--html-indentation.el : defines functions for the indentation of - HTML elements; hm--date.el : defines the function hm--date, which returns the date in the format "day-month-year" like "30-Jun-1993". html-view.el : Ron Tapia's html-view.el to view html-pages - in the Xmosaic; it is patched for use + in the Xmosaic; it is patched for the use with the xemacs; internal-drag-and-drop.el : provides the general (html-mode independend functions) of the drag and @@ -85,7 +83,7 @@ with this mode you can expand templates, which are described in the file templates-syntax.doc (look at the files - command-description.tmpl and + command-description.html.tmpl and frame.html.tmpl for examples); templates can be expanded automatically, if you include a file with templates via the @@ -94,7 +92,9 @@ command-description.html.tmpl : Templatefile for the use with the tmpl-minor-mode; frame.html.tmpl : Templatefile, provides a simple frame; - +doc/hm--html-mode.texinfo : Package documentation in the Texinfo format; +doc/umlaute.texinfo : Texinfo include file for german vowel + mutation (deutsche Umlaute); @@ -104,7 +104,7 @@ Note: In this version the setting of the environment variables HTML_CONFIG_FILE and HTML_USER_CONFIG_FILE are no longer necessary, -if you put the user configuration file in the home directrory and +if you put the user configuration file in the home directory and the system configuration file in one of the load path directories of your XEmacs or Emacs 19.
--- a/lisp/hm--html-menus/hm--html-configuration.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/hm--html-menus/hm--html-configuration.el Mon Aug 13 08:54:51 2007 +0200 @@ -1,6 +1,6 @@ ;;; hm--html-configuration.el - Configurationfile for the html-mode ;;; -;;; $Id: hm--html-configuration.el,v 1.4 1997/03/02 03:43:16 steve Exp $ +;;; $Id: hm--html-configuration.el,v 1.5 1997/03/24 01:26:52 steve Exp $ ;;; ;;; Copyright (C) 1993 - 1997 Heiko Muenkel ;;; email: muenkel@tnt.uni-hannover.de @@ -24,7 +24,7 @@ ;;; ;;; This file is for the system wide configuration of the html mode. ;;; User specific configuration should be done in the file -;;; ~/.hm--html-configuration.el, which preceeds the settings in +;;; ~/.hm--html-configuration.el, which precedes the settings in ;;; this file. ;;; All settings in this file are done with defvar's, therefore ;;; you could overwrite them also with the function setq in your @@ -191,6 +191,10 @@ ) "*Alist with hostnames and ports for the gopher server.") +(defvar hm--html-gopher-hostname:port-default + "newsserver.rrzn.uni-hannover.de:70" + "*Default hostname with port for the gopher server.") + (defvar hm--html-gopher-doctype-alist '(("/1") ("/11") ("/00")) @@ -199,10 +203,6 @@ (defvar hm--html-gopher-doctype-default "/1" "*Default doctype string for the gopher server.") -(defvar hm--html-gopher-hostname:port-default - "newsserver.rrzn.uni-hannover.de:70" - "*Default hostname with port for the gopher server.") - (defvar hm--html-gopher-anchor-alist '(("veronica") ("Wide%20Area%20Information%20Services%20databases") @@ -381,7 +381,7 @@ ;;; Keybindings: (defvar hm--html-bind-latin-1-char-entities t - "Set this to nil, if you don't want to use the ISO Latin 1 charcter 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 during loading the html package the first time.") @@ -410,7 +410,7 @@ (((idd-if-local-file-p . t)) hm--html-idd-add-file-link-to-buffer))) "The action list for the destination mode `hm--html-mode'. -Look at the description of the variable idd-actions") +Look at the description of the variable idd-actions.") ;;; The font lock keywords @@ -458,7 +458,7 @@ "*Hook variable to execute functions after loading the package.") (defvar hm--html-mode-hook nil - "This hook will be called each time, when the hm--html-mode is invoked.") + "*This hook will be called each time, when the hm--html-mode is invoked.") ;;; For the file html-view.el @@ -466,7 +466,7 @@ ;;; Look at that file, if you've trouble with the functions ;;; to preview the html document with the Mosaic (defvar html-view-mosaic-command "/sol/www/bin/mosaic" - "The command that runs Mosaic on your system") + "The command that runs Mosaic on your system.") (defvar html-sigusr1-signal-value 16 "Value for the SIGUSR1 signal on your system. @@ -620,7 +620,7 @@ ("script" (:hm--html-two-element-tag t)) ) "An alist with tag names known by the `hm--html-mode'. -CURRENTLY THIS LIST CONTAINS NOT ALL TAGS!!!!. +CURRENTLY THIS LIST MIGHT NOT CONTAIN ALL TAGS!!!!. It is used to determine, if a tag is a one element tag or not.
--- a/lisp/hm--html-menus/hm--html-menu.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/hm--html-menus/hm--html-menu.el Mon Aug 13 08:54:51 2007 +0200 @@ -1,6 +1,6 @@ ;;; hm--html-menu --- A menu for the hm--html-mode. ;;; -;;; $Id: hm--html-menu.el,v 1.4 1997/03/02 03:43:16 steve Exp $ +;;; $Id: hm--html-menu.el,v 1.5 1997/03/24 01:26:52 steve Exp $ ;;; ;;; Copyright (C) 1993 - 1997 Heiko Muenkel ;;; email: muenkel@tnt.uni-hannover.de @@ -189,7 +189,7 @@ ; ("Literature" ; ["Quote" hm--html-add-quote t] ; ["Acronym" hm--html-add-acronym t] -; ["Abbrevation" hm--html-add-abbrevation t] +; ["Abbreviation" hm--html-add-abbreviation t] ; ["Citation" hm--html-add-citation t] ; ["Literature" hm--html-add-literature t] ; ["Publication" hm--html-add-publication t]
--- a/lisp/hm--html-menus/hm--html-mode.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/hm--html-menus/hm--html-mode.el Mon Aug 13 08:54:51 2007 +0200 @@ -2,7 +2,7 @@ ;;; ;;; Keywords: hypermedia languages help docs wp ;;; -;;; $Id: hm--html-mode.el,v 1.4 1997/03/02 03:43:19 steve Exp $ +;;; $Id: hm--html-mode.el,v 1.5 1997/03/24 01:26:53 steve Exp $ ;;; ;;; Copyright (C) 1996, 1997 Heiko Muenkel ;;; email: muenkel@tnt.uni-hannover.de @@ -71,6 +71,7 @@ (require 'adapt) (require 'hm--date) (require 'hm--html) +;(require 'hm--html-not-standard) (eval-when-compile (require 'hm--html-configuration)) @@ -91,7 +92,7 @@ (defconst hm--html-menus-package-name "hm--html-menus") -(defconst hm--html-menus-package-version "5.3") +(defconst hm--html-menus-package-version "5.4") ;;; Generate the help buffer faces
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/hm--html-menus/hm--html-not-standard.el Mon Aug 13 08:54:51 2007 +0200 @@ -0,0 +1,405 @@ +;;; hm--html-not-standard.el +;;; v1.00; 22-Feb-1997 +;;; Copyright (C) 1997 Heiko Muenkel +;;; email: muenkel@tnt.uni-hannover.de +;;; +;;; 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. +;;; +;;; +;;; Description: +;;; +;;; This file contains lisp code for the insertation of non standard +;;; HTML 3.2 elements. I don't think, that's a good idea to use this +;;; elements in any HTML documents :-) +;;; +;;; Installation: +;;; +;;; Put this file in one of your load path directories. +;;; +;;; Put a (require 'hm--html-not-standard) in your .emacs +;;; +;;; Look at the files hm--html-mode.el and hm--html-configuration +;;; for further installation points. +;;; + +;(require 'hm--html-mode) + +(defun hm--html-add-server-side-include-command-with-parameter (command + parameter) + "This function adds a server side include command directive in the buffer. +The directive is only supported by the NCSA http daemon." + (interactive (list + (completing-read + "Include Command: " + hm--html-server-side-include-command-with-parameter-alist) + (read-string "Parameterlist sepearted by '?': "))) + (let ((start (point))) + (if (string= command "") + (error "ERROR: No command specified !") + (if (string= parameter "") + (error "ERROR: No parameter specified !") + (if (= ?| (string-to-char command)) + (if (= ?? (string-to-char parameter)) + (insert "<INC SRVURL \"" command parameter "\">") + (insert "<INC SRVURL \"" command "?" parameter "\">")) + (if (= ?? (string-to-char parameter)) + (insert "<INC SRVURL \"|" command parameter "\">") + (insert "<INC SRVURL \"|" command "?" parameter "\">"))) + (html-maybe-deemphasize-region (1+ start) (1- (point))))))) + + +(defun hm--html-add-plaintext () + "Adds the HTML tags for plaintext." + (interactive) + (hm--html-add-tags 'hm--html-insert-start-tag-with-newline + "<XMP>" + 'hm--html-insert-end-tag-with-newline + "</XMP>")) + + +(defun hm--html-add-plaintext-to-region () + "Adds the HTML tags for plaintext to the region." + (interactive) + (hm--html-add-tags-to-region 'hm--html-insert-start-tag-with-newline + "<XMP>" + 'hm--html-insert-end-tag-with-newline + "</XMP>")) + + +(defun hm--html-add-abstract () + "Adds the HTML tags for abstract text at the point in the current buffer." + (interactive) + (hm--html-add-tags 'hm--html-insert-start-tag-with-newline + "<ABSTRACT>" + 'hm--html-insert-end-tag-with-newline + "</ABSTRACT>")) + + +(defun hm--html-add-abstract-to-region () + "Adds the HTML tags for abstract text to the region." + (interactive) + (hm--html-add-tags-to-region 'hm--html-insert-start-tag-with-newline + "<ABSTRACT>" + 'hm--html-insert-end-tag-with-newline + "</ABSTRACT>")) + + +(defun hm--html-add-quote () + "Adds the HTML tags for Quote at the point in the current buffer." + (interactive) + (hm--html-add-tags 'hm--html-insert-start-tag + "<Q>" + 'hm--html-insert-end-tag + "</Q>")) + + +(defun hm--html-add-quote-to-region () + "Adds the HTML tags for Quote to the region." + (interactive) + (hm--html-add-tags-to-region 'hm--html-insert-start-tag + "<Q>" + 'hm--html-insert-end-tag + "</Q>")) + + +(defun hm--html-add-person () + "Adds the HTML tags for Person at the point in the current buffer." + (interactive) + (hm--html-add-tags 'hm--html-insert-start-tag + "<PERSON>" + 'hm--html-insert-end-tag + "</PERSON>")) + + +(defun hm--html-add-person-to-region () + "Adds the HTML tags for Person to the region." + (interactive) + (hm--html-add-tags-to-region 'hm--html-insert-start-tag + "<PERSON>" + 'hm--html-insert-end-tag + "</PERSON>")) + + +(defun hm--html-add-instance () + "Adds the HTML tags for Instance at the point in the current buffer." + (interactive) + (hm--html-add-tags 'hm--html-insert-start-tag + "<INS>" + 'hm--html-insert-end-tag + "</INS>")) + + +(defun hm--html-add-instance-to-region () + "Adds the HTML tags for Instance to the region." + (interactive) + (hm--html-add-tags-to-region 'hm--html-insert-start-tag + "<INS>" + 'hm--html-insert-end-tag + "</INS>")) + + +(defun hm--html-add-publication () + "Adds the HTML tags for Publication at the point in the current buffer." + (interactive) + (hm--html-add-tags 'hm--html-insert-start-tag + "<PUB>" + 'hm--html-insert-end-tag + "</PUB>")) + + +(defun hm--html-add-publication-to-region () + "Adds the HTML tags for Publication to the region." + (interactive) + (hm--html-add-tags-to-region 'hm--html-insert-start-tag + "<PUB>" + 'hm--html-insert-end-tag + "</PUB>")) + + +(defun hm--html-add-author () + "Adds the HTML tags for Author at the point in the current buffer." + (interactive) + (hm--html-add-tags 'hm--html-insert-start-tag + "<AUTHOR>" + 'hm--html-insert-end-tag + "</AUTHOR>")) + + +(defun hm--html-add-author-to-region () + "Adds the HTML tags for Author to the region." + (interactive) + (hm--html-add-tags-to-region 'hm--html-insert-start-tag + "<AUTHOR>" + 'hm--html-insert-end-tag + "</AUTHOR>")) + + +(defun hm--html-add-editor () + "Adds the HTML tags for Editor at the point in the current buffer." + (interactive) + (hm--html-add-tags 'hm--html-insert-start-tag + "<EDITOR>" + 'hm--html-insert-end-tag + "</EDITOR>")) + + +(defun hm--html-add-editor-to-region () + "Adds the HTML tags for Editor to the region." + (interactive) + (hm--html-add-tags-to-region 'hm--html-insert-start-tag + "<EDITOR>" + 'hm--html-insert-end-tag + "</EDITOR>")) + + +(defun hm--html-add-credits () + "Adds the HTML tags for Credits at the point in the current buffer." + (interactive) + (hm--html-add-tags 'hm--html-insert-start-tag + "<CREDITS>" + 'hm--html-insert-end-tag + "</CREDITS>")) + + +(defun hm--html-add-credits-to-region () + "Adds the HTML tags for Credits to the region." + (interactive) + (hm--html-add-tags-to-region 'hm--html-insert-start-tag + "<CREDITS>" + 'hm--html-insert-end-tag + "</CREDITS>")) + + +(defun hm--html-add-copyright () + "Adds the HTML tags for Copyright at the point in the current buffer." + (interactive) + (hm--html-add-tags 'hm--html-insert-start-tag + "<COPYRIGHT>" + 'hm--html-insert-end-tag + "</COPYRIGHT>")) + + +(defun hm--html-add-copyright-to-region () + "Adds the HTML tags for Copyright to the region." + (interactive) + (hm--html-add-tags-to-region 'hm--html-insert-start-tag + "<COPYRIGHT>" + 'hm--html-insert-end-tag + "</COPYRIGHT>")) + + +(defun hm--html-add-isbn () + "Adds the HTML tags for ISBN at the point in the current buffer." + (interactive) + (hm--html-add-tags 'hm--html-insert-start-tag + "<ISBN>" + 'hm--html-insert-end-tag + "</ISBN>")) + + +(defun hm--html-add-isbn-to-region () + "Adds the HTML tags for ISBN to the region." + (interactive) + (hm--html-add-tags-to-region 'hm--html-insert-start-tag + "<ISBN>" + 'hm--html-insert-end-tag + "</ISBN>")) + + +(defun hm--html-add-acronym () + "Adds the HTML tags for Acronym at the point in the current buffer." + (interactive) + (hm--html-add-tags 'hm--html-insert-start-tag + "<ACRONYM>" + 'hm--html-insert-end-tag + "</ACRONYM>")) + + +(defun hm--html-add-acronym-to-region () + "Adds the HTML tags for Acronym to the region." + (interactive) + (hm--html-add-tags-to-region 'hm--html-insert-start-tag + "<ACRONYM>" + 'hm--html-insert-end-tag + "</ACRONYM>")) + + +(defun hm--html-add-abbrevation () + "Adds the HTML tags for Abbrevation at the point in the current buffer." + (interactive) + (hm--html-add-tags 'hm--html-insert-start-tag + "<ABBREV>" + 'hm--html-insert-end-tag + "</ABBREV>")) + + +(defun hm--html-add-abbrev-to-region () + "Adds the HTML tags for Abbrev to the region." + (interactive) + (hm--html-add-tags-to-region 'hm--html-insert-start-tag + "<ABBREV>" + 'hm--html-insert-end-tag + "</ABBREV>")) + + +(defun hm--html-add-command () + "Adds the HTML tags for Command at the point in the current buffer." + (interactive) + (hm--html-add-tags 'hm--html-insert-start-tag + "<CMD>" + 'hm--html-insert-end-tag + "</CMD>")) + + +(defun hm--html-add-command-to-region () + "Adds the HTML tags for Command to the region." + (interactive) + (hm--html-add-tags-to-region 'hm--html-insert-start-tag + "<CMD>" + 'hm--html-insert-end-tag + "</CMD>")) + + +(defun hm--html-add-argument () + "Adds the HTML tags for Argument at the point in the current buffer." + (interactive) + (hm--html-add-tags 'hm--html-insert-start-tag + "<ARG>" + 'hm--html-insert-end-tag + "</ARG>")) + + +(defun hm--html-add-argument-to-region () + "Adds the HTML tags for Argument to the region." + (interactive) + (hm--html-add-tags-to-region 'hm--html-insert-start-tag + "<ARG>" + 'hm--html-insert-end-tag + "</ARG>")) + + +(defun hm--html-add-literature () + "Adds the HTML tags for Literature at the point in the current buffer." + (interactive) + (hm--html-add-tags 'hm--html-insert-start-tag + "<LIT>" + 'hm--html-insert-end-tag + "</LIT>")) + + +(defun hm--html-add-literature-to-region () + "Adds the HTML tags for Literature to the region." + (interactive) + (hm--html-add-tags-to-region 'hm--html-insert-start-tag + "<LIT>" + 'hm--html-insert-end-tag + "</LIT>")) + + +(defun hm--html-add-footnote () + "Adds the HTML tags for Footnote at the point in the current buffer." + (interactive) + (hm--html-add-tags 'hm--html-insert-start-tag + "<FOOTNOTE>" + 'hm--html-insert-end-tag + "</FOOTNOTE>")) + + +(defun hm--html-add-footnote-to-region () + "Adds the HTML tags for Footnote to the region." + (interactive) + (hm--html-add-tags-to-region 'hm--html-insert-start-tag + "<FOOTNOTE>" + 'hm--html-insert-end-tag + "</FOOTNOTE>")) + + +(defun hm--html-add-margin () + "Adds the HTML tags for Margin at the point in the current buffer." + (interactive) + (hm--html-add-tags 'hm--html-insert-start-tag + "<MARGIN>" + 'hm--html-insert-end-tag + "</MARGIN>")) + + +(defun hm--html-add-margin-to-region () + "Adds the HTML tags for Margin to the region." + (interactive) + (hm--html-add-tags-to-region 'hm--html-insert-start-tag + "<MARGIN>" + 'hm--html-insert-end-tag + "</MARGIN>")) + + +(defun hm--html-add-listing () + "Adds the HTML tags for listing." + (interactive) + (hm--html-add-tags 'hm--html-insert-start-tag-with-newline + "<LISTING>" + 'hm--html-insert-end-tag-with-newline + "</LISTING>")) + + +(defun hm--html-add-listing-to-region () + "Adds the HTML tags for listing to the region." + (interactive) + (hm--html-add-tags-to-region 'hm--html-insert-start-tag-with-newline + "<LISTING>" + 'hm--html-insert-end-tag-with-newline + "</LISTING>")) + + +(provide 'hm--html-not-standard)
--- a/lisp/hm--html-menus/hm--html.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/hm--html-menus/hm--html.el Mon Aug 13 08:54:51 2007 +0200 @@ -1,4 +1,4 @@ -;;; $Id: hm--html.el,v 1.4 1997/03/02 03:43:20 steve Exp $ +;;; $Id: hm--html.el,v 1.5 1997/03/24 01:26:53 steve Exp $ ;;; ;;; Copyright (C) 1993 - 1997 Heiko Muenkel ;;; email: muenkel@tnt.uni-hannover.de @@ -2503,7 +2503,7 @@ (defun hm--html-make-newsgroup-alist () "Makes a hm--html-make-newsgroup-alist from a .newsrc.el file. The function looks at the environment variable NNTPSERVER. -If this variable exists, it trys to open the file with the Name +If this variable exists, it tries to open the file with the Name ~/$NNTPSERVER.el. If this file exists, the alist of the file is returned as the newsgroup-alist. If the file doesn't exist, it tries to use the file ~/$NNTPSERVER to make the alist. The function
--- a/lisp/hm--html-menus/internal-drag-and-drop.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/hm--html-menus/internal-drag-and-drop.el Mon Aug 13 08:54:51 2007 +0200 @@ -1,4 +1,4 @@ -;;; $Id: internal-drag-and-drop.el,v 1.2 1997/02/16 01:29:11 steve Exp $ +;;; $Id: internal-drag-and-drop.el,v 1.3 1997/03/24 01:26:53 steve Exp $ ;;; ;;; Copyright (C) 1996, 1997 Heiko Muenkel ;;; email: muenkel@tnt.uni-hannover.de @@ -92,7 +92,7 @@ [(meta control mouse-3)] [(meta control button3)]) "The mouse keys for the command `idd-help-mouse-drag-and-drop'. -The command `idd-mouse-drag-and-drop' is bound during the loading +The command `idd-help-mouse-drag-and-drop' is bound during the loading of the package internal-drag-and-drop to this keys in the global key map.
--- a/lisp/hm--html-menus/tmpl-minor-mode.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/hm--html-menus/tmpl-minor-mode.el Mon Aug 13 08:54:51 2007 +0200 @@ -1,6 +1,6 @@ ;;; tmpl-minor-mode.el --- Template Minor Mode ;;; -;;; $Id: tmpl-minor-mode.el,v 1.3 1997/03/04 08:44:56 steve Exp $ +;;; $Id: tmpl-minor-mode.el,v 1.4 1997/03/24 01:26:54 steve Exp $ ;;; ;;; Copyright (C) 1993 - 1997 Heiko Muenkel ;;; email: muenkel@tnt.uni-hannover.de @@ -61,8 +61,8 @@ (defvar tmpl-template-dir-list nil "*A list of directories with the template files. -If it is nil, then the default-directory is used. -If more the one directories are given, then the +If it is nil, then the default-directory will be used. +If more than one directory is given, then the template filenames should differ in all directories. This variable is used in the commands for inserting templates. @@ -388,8 +388,8 @@ ;;;###autoload (defun tmpl-expand-templates-in-region (&optional begin end) - "Expand the templates in the region from BEGIN to END. -If BEGIN and and are nil, then the current region is used." + "Expands the templates in the region from BEGIN to END. +If BEGIN and END are nil, then the current region is used." (interactive) (tmpl-save-excursion (narrow-to-region (or begin (region-beginning)) @@ -402,13 +402,13 @@ ;;;###autoload (defun tmpl-expand-templates-in-buffer () - "Expand all templates in the current buffer." + "Expands all templates in the current buffer." (interactive) (tmpl-expand-templates-in-region (point-min) (point-max))) (defun tmpl-escape-tmpl-sign-in-region (&optional begin end) - "Escape all `tmpl-sign' with a `tmpl-sign' in the region from BEGIN to END. + "Escapes all `tmpl-sign' with a `tmpl-sign' in the region from BEGIN to END. If BEGIN and END are nil, then the active region between mark and point is used." (interactive) @@ -522,15 +522,15 @@ (defun tmpl-insert-template-file-from-fixed-dirs (file) "Inserts a template FILE and expands it, if `tmpl-automatic-expand' is t. This command tries to read the template file from a list of -predefined directries (look at `tmpl-template-dir-list') and it filters -the contents of this directories with the regular expression +predefined directories (look at `tmpl-template-dir-list') and it filters +the contents of these directories with the regular expression `tmpl-filter-regexp' (look also at this variable). The command uses a history variable, which could be changed with the variable `tmpl-history-variable-name'. -The user of the command is able to change interactive to another +The user of the command is able to change interactively to another directory by entering at first the string \"Change the directory\". -This maybe to difficult for the user. Therefore another command +This may be too difficult for the user. Therefore another command called `tmpl-insert-template-file' exist, which doesn't use fixed directories and filters." (interactive @@ -545,7 +545,7 @@ ;;;###autoload (defun tmpl-insert-template-file (file) - "Insert a template FILE and expand it, if `tmpl-automatic-expand' is t. + "Inserts a template FILE and expand it, if `tmpl-automatic-expand' is t. Look also at `tmpl-template-dir-list', to specify a default template directory. You should also take a look at `tmpl-insert-template-file-from-fixed-dirs' which has additional advantages (and disadvantages :-). @@ -622,23 +622,24 @@ (if (adapt-xemacsp) (defun tmpl-define-minor-mode-keymap () "Defines the minor mode keymap." - (define-key tmpl-minor-mode-map [(control c) x] + (define-key tmpl-minor-mode-map [(control c) (control c) x] 'tmpl-expand-templates-in-region) - (define-key tmpl-minor-mode-map [(control c) (control x)] + (define-key tmpl-minor-mode-map [(control c) (control c) (control x)] 'tmpl-expand-templates-in-buffer) - (define-key tmpl-minor-mode-map [(control c) escape] + (define-key tmpl-minor-mode-map [(control c) (control c) e] 'tmpl-escape-tmpl-sign-in-region) - (define-key tmpl-minor-mode-map [(control c) (control escape)] + (define-key tmpl-minor-mode-map + [(control c) (control c) (control e)] 'tmpl-escape-tmpl-sign-in-buffer)) (defun tmpl-define-minor-mode-keymap () "Defines the minor mode keymap." - (define-key tmpl-minor-mode-map [?\C-c ?x] + (define-key tmpl-minor-mode-map [?\C-c ?\C-c ?x] 'tmpl-expand-templates-in-region) - (define-key tmpl-minor-mode-map [?\C-c ?\C-x] + (define-key tmpl-minor-mode-map [?\C-c ?\C-c ?\C-x] 'tmpl-expand-templates-in-buffer) - (define-key tmpl-minor-mode-map [?\C-c escape] + (define-key tmpl-minor-mode-map [?\C-c ?\C-c ?e] 'tmpl-escape-tmpl-sign-in-region) - (define-key tmpl-minor-mode-map [?\C-c C-escape] + (define-key tmpl-minor-mode-map [?\C-c ?\C-c ?\C-e] 'tmpl-escape-tmpl-sign-in-buffer)) )
--- a/lisp/modes/sendmail.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/modes/sendmail.el Mon Aug 13 08:54:51 2007 +0200 @@ -312,12 +312,13 @@ (put 'user-mail-address 'saved-value (list user-mail-address)) (put 'query-user-mail-address 'saved-value '(nil)) - (custom-save-all))) - (if user-mail-address - user-mail-address - (setq user-mail-address (concat (user-login-name) "@" - (or mail-host-address - (system-name))))))) + (require 'cus-edit) + (custom-save-all)))) + (if user-mail-address + user-mail-address + (setq user-mail-address (concat (user-login-name) "@" + (or mail-host-address + (system-name)))))) (defun mail-setup (to subject in-reply-to cc replybuffer actions) (or mail-default-reply-to
--- a/lisp/packages/time.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/packages/time.el Mon Aug 13 08:54:51 2007 +0200 @@ -23,6 +23,10 @@ ;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA ;; 02111-1307, USA. +;;; Version: 1.6 (I choose the version number starting at 1.1 +;;; to indicate that 1.0 was the old version +;;; before I hacked away on it -JTL) + ;;; Synched up with: Not synched with FSF. ;;; Commentary: @@ -50,13 +54,6 @@ in the XEmacs mode line or echo area." :group 'applications) -(defcustom display-time-compatible nil - "*This variable may be set to t to get the old behaviour of display-time. -This means no display of a spiffy mail icon or use of the -display-time-form-list instead of the old display-time-string-form." - :group 'display-time - :type 'boolean) - (defcustom display-time-mail-file nil "*File name of mail inbox file, for indicating existence of new mail. Non-nil and not a string means don't check for mail. nil means use @@ -98,11 +95,17 @@ "Time when mail file's file system was recorded to be down. If that file system seems to be up, the value is nil.") -(defcustom display-time-ignore-read-mail nil +(defcustom display-time-ignore-read-mail t "*Non-nil means displays the mail icon on any non-empty mailbox." :group 'display-time :type 'boolean) +(defcustom display-time-balloon-show-mail-from t + "*Non-nil means displays the `From' lines of your new mail in the help balloon. +This feature needs `balloon-help' to be loaded." + :group 'display-time + :type 'boolean) + ;;;###autoload (defun display-time () "Display current time, load level, and mail flag in mode line of each buffer. @@ -196,6 +199,11 @@ (const transparent) (string :tag "Color"))) +(defvar display-time-balloon-date-string nil) + +(defvar display-time-spool-file-modification nil) + +(defvar display-time-mail-header nil) (defvar display-time-display-pad-old nil) @@ -216,6 +224,15 @@ (number :tag "Threshold 5") (number :tag "Threshold 6"))) +(defcustom display-time-compatible nil + "*This variable may be set to t to get the old behaviour of display-time. +It should be considered obsolete and only be used if you really want the +old behaviour (eq. you made extensive customizations yourself). +This means no display of a spiffy mail icon or use of the +display-time-form-list instead of the old display-time-string-form." + :group 'display-time + :type 'boolean) + (defun display-time-string-to-char-list (str) (mapcar (function identity) str)) @@ -365,11 +382,48 @@ elem tmp) (if (not (display-time-can-do-graphical-display textual)) time-string (display-time-generate-time-glyphs) + (setq display-time-balloon-date-string + (format "%s, %s %s %s %s" dayname day monthname year + (if (not (equal load "")) + (concat "-- Average load: " load) + ""))) (while (setq elem (pop list)) - (push (eval (intern-soft (concat "display-time-" + (setq elem (eval (intern-soft (concat "display-time-" (char-to-string elem) - "-glyph"))) tmp)) - (reverse tmp)))) + "-glyph")))) + (set-extent-property (car elem) 'balloon-help 'display-time-balloon) + (push elem tmp)) + (reverse tmp)))) + +(defun display-time-balloon (&rest ciao) + (let ((header display-time-balloon-date-string) + header-ext) + (setq header-ext + (make-extent 0 (length display-time-balloon-date-string) + header)) + (set-extent-property header-ext 'face 'red) + (set-extent-property header-ext 'duplicable t) + (concat header + (if display-time-balloon-show-mail-from + (display-time-scan-spool-file))))) + + +(defun display-time-scan-spool-file () + (let* ((mail-spool-file (or display-time-mail-file + (getenv "MAIL") + (concat rmail-spool-directory + (user-login-name)))) + (mod (nth 5 (file-attributes mail-spool-file)))) + (if (equal mod display-time-spool-file-modification) + display-time-mail-header + (setq tmp (exec-to-string + (concat "grep \"^From \" " mail-spool-file))) + (if (equal tmp "") () + (setq tmp (concat "\n\nYou have mail:\n-------------\n" tmp)) + (setq tmp (substring tmp 0 (1- (length tmp))))) + (setq display-time-spool-file-modification mod) + (setq display-time-mail-header tmp)))) + (defun display-time-convert-load (load-string &optional textual) (let ((load-number (string-to-number load-string)) @@ -381,16 +435,14 @@ (cons 2.5 (cadr (cdddr display-time-load-list))) (cons 3.0 (caddr (cdddr display-time-load-list))) (cons 100000 100000))) - result elem) + elem load-elem) (if (not (display-time-can-do-graphical-display textual)) load-string (display-time-generate-load-glyphs) (while (>= load-number (cdr (setq elem (pop alist)))) - (setq result (eval (intern-soft (concat - "display-time-load-" - (number-to-string (car elem)) - "-glyph"))))) - result))) + (setq load-elem elem)) + (eval (intern-soft (concat "display-time-load-" + (number-to-string (car load-elem)) "-glyph")))))) (defun display-time-convert-am-pm (ampm-string &optional textual) (if (not (display-time-can-do-graphical-display textual))
--- a/lisp/prim/auto-autoloads.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/prim/auto-autoloads.el Mon Aug 13 08:54:51 2007 +0200 @@ -1369,9 +1369,16 @@ ;;;*** -;;;### (autoloads nil "efs-dump" "efs/efs-dump.el") - -(setq file-name-handler-alist (cons (cons efs-path-root-regexp 'efs-file-handler-function) file-name-handler-alist)) +;;;### (autoloads (remote-path-file-handler-function) "efs-dump" "efs/efs-dump.el") + +(defvar allow-remote-paths t "\ +*Set this to nil if you don't want remote paths to access +remote files.") + +(or (assoc efs-path-root-regexp file-name-handler-alist) (setq file-name-handler-alist (cons (cons efs-path-root-regexp 'remote-path-file-handler-function) file-name-handler-alist))) + +(autoload 'remote-path-file-handler-function "efs-dump" "\ +Function to call special file handlers for remote files." nil nil) ;;;*** @@ -1393,7 +1400,12 @@ ;;;*** -;;;### (autoloads (efs-file-handler-function efs-nslookup-host) "efs" "efs/efs.el") +;;;### (autoloads (efs-file-handler-function efs-nslookup-host efs-display-ftp-activity) "efs" "efs/efs.el") + +(autoload 'efs-display-ftp-activity "efs" "\ +Displays the number of active background ftp sessions in the modeline. +Uses the variable `efs-mode-line-format' to determine how this will be +displayed." t nil) (autoload 'efs-nslookup-host "efs" "\ Attempt to resolve the given HOSTNAME using nslookup if possible." t nil) @@ -2120,8 +2132,6 @@ ;;;### (autoloads (unbold-region bold-region message-news-other-frame message-news-other-window message-mail-other-frame message-mail-other-window message-bounce message-resend message-forward message-recover message-supersede message-cancel-news message-followup message-wide-reply message-reply message-news message-mail message-mode) "message" "gnus/message.el") -(defcustom message-fcc-handler-function 'message-output "*A function called to save outgoing articles.\nThis function will be called with the name of the file to store the\narticle in. The default function is `message-output' which saves in Unix\nmailbox format." :type '(radio (function-item message-output) (function :tag "Other")) :group 'message-sending) - (defcustom message-from-style 'default "*Specifies how \"From\" headers look.\n\nIf `nil', they contain just the return address like:\n king@grassland.com\nIf `parens', they look like:\n king@grassland.com (Elvis Parsley)\nIf `angles', they look like:\n Elvis Parsley <king@grassland.com>\n\nOtherwise, most addresses look like `angles', but they look like\n`parens' if `angles' would need quoting and `parens' would not." :type '(choice (const :tag "simple" nil) (const parens) (const angles) (const default)) :group 'message-headers) (defcustom message-signature-separator "^-- *$" "Regexp matching the signature separator." :type 'regexp :group 'message-various) @@ -2339,29 +2349,29 @@ ;;;### (autoloads (tmpl-insert-template-file tmpl-insert-template-file-from-fixed-dirs tmpl-expand-templates-in-buffer tmpl-expand-templates-in-region) "tmpl-minor-mode" "hm--html-menus/tmpl-minor-mode.el") (autoload 'tmpl-expand-templates-in-region "tmpl-minor-mode" "\ -Expand the templates in the region from BEGIN to END. -If BEGIN and and are nil, then the current region is used." t nil) +Expands the templates in the region from BEGIN to END. +If BEGIN and END are nil, then the current region is used." t nil) (autoload 'tmpl-expand-templates-in-buffer "tmpl-minor-mode" "\ -Expand all templates in the current buffer." t nil) +Expands all templates in the current buffer." t nil) (autoload 'tmpl-insert-template-file-from-fixed-dirs "tmpl-minor-mode" "\ Inserts a template FILE and expands it, if `tmpl-automatic-expand' is t. This command tries to read the template file from a list of -predefined directries (look at `tmpl-template-dir-list') and it filters -the contents of this directories with the regular expression +predefined directories (look at `tmpl-template-dir-list') and it filters +the contents of these directories with the regular expression `tmpl-filter-regexp' (look also at this variable). The command uses a history variable, which could be changed with the variable `tmpl-history-variable-name'. -The user of the command is able to change interactive to another +The user of the command is able to change interactively to another directory by entering at first the string \"Change the directory\". -This maybe to difficult for the user. Therefore another command +This may be too difficult for the user. Therefore another command called `tmpl-insert-template-file' exist, which doesn't use fixed directories and filters." t nil) (autoload 'tmpl-insert-template-file "tmpl-minor-mode" "\ -Insert a template FILE and expand it, if `tmpl-automatic-expand' is t. +Inserts a template FILE and expand it, if `tmpl-automatic-expand' is t. Look also at `tmpl-template-dir-list', to specify a default template directory. You should also take a look at `tmpl-insert-template-file-from-fixed-dirs' which has additional advantages (and disadvantages :-). @@ -3719,7 +3729,7 @@ ;;;### (autoloads (ksh-mode) "ksh-mode" "modes/ksh-mode.el") (autoload 'ksh-mode "ksh-mode" "\ -ksh-mode $Revision: 1.17 $ - Major mode for editing (Bourne, Korn or Bourne again) +ksh-mode $Revision: 1.18 $ - Major mode for editing (Bourne, Korn or Bourne again) shell scripts. Special key bindings and commands: \\{ksh-mode-map} @@ -4994,7 +5004,7 @@ (autoload 'vhdl-mode "vhdl-mode" "\ Major mode for editing VHDL code. -vhdl-mode $Revision: 1.17 $ +vhdl-mode $Revision: 1.18 $ To submit a problem report, enter `\\[vhdl-submit-bug-report]' from a vhdl-mode buffer. This automatically sets up a mail buffer with version information already added. You just need to add a description of the
--- a/lisp/prim/files.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/prim/files.el Mon Aug 13 08:54:51 2007 +0200 @@ -1137,15 +1137,12 @@ '(("^#!.*[acjkwz]sh" . sh-mode) ("^#!.*sh\\b" . sh-mode) ("^#!.*\\b\\(scope\\|wishx?\\|tcl\\|tclsh\\|expect\\)" . tcl-mode) + ("perl" . perl-mode) ("python" . python-mode) ("[mng]?awk\\b" . awk-mode) ("rexx" . rexx-mode) ("scm" . scheme-mode) ("^:" . sh-mode) - ("tail" . text-mode) - ("more" . text-mode) - ("less" . text-mode) - ("pg" . text-mode) )) "Alist mapping interpreter names to major modes. This alist is used to guess the major mode of a file based on the
--- a/lisp/psgml/psgml-html.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/psgml/psgml-html.el Mon Aug 13 08:54:51 2007 +0200 @@ -158,7 +158,7 @@ "Major mode for editing HTML documents. This is based on PSGML mode, and has a sophisticated SGML parser in it. It knows how to properly indent HTML/SGML documents, and it can do - a form of document validation (use \\[sgml-next-trouble-spot\\] to find + a form of document validation (use \\[sgml-next-trouble-spot] to find the next error in your document). Commands beginning with C-z insert various types of HTML tags (prompting for the required information); to iconify or suspend,
--- a/lisp/utils/mail-utils.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/utils/mail-utils.el Mon Aug 13 08:54:51 2007 +0200 @@ -144,7 +144,7 @@ "") (concat (regexp-quote (user-login-name)) "\\>")))) - (let ((match (concat "\\(^\\|,\\)[ \t\n]*\\([^,\n]*!\\|\\)\\(" + (let ((match (concat "\\(^\\|,\\)[ \t\n]*\\([^,\n]*[!<]\\|\\)\\(" rmail-dont-reply-to-names "\\)")) (case-fold-search t)
--- a/lisp/version.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/version.el Mon Aug 13 08:54:51 2007 +0200 @@ -26,7 +26,7 @@ (defconst emacs-version "19.15" "\ Version numbers of this version of Emacs.") -(setq emacs-version (purecopy (concat emacs-version " XEmacs Lucid (beta103)"))) +(setq emacs-version (purecopy (concat emacs-version " XEmacs Lucid (beta104)"))) (defconst emacs-major-version (progn (or (string-match "^[0-9]+" emacs-version)
--- a/lisp/vm/vm-autoload.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/vm/vm-autoload.el Mon Aug 13 08:54:51 2007 +0200 @@ -2192,7 +2192,7 @@ (autoload (quote vm-mode) "vm-startup" "Major mode for reading mail. -This is VM 6.21. +This is VM 6.22. Commands: h - summarize folder contents
--- a/lisp/vm/vm-folder.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/vm/vm-folder.el Mon Aug 13 08:54:51 2007 +0200 @@ -2611,26 +2611,26 @@ nil (write-region opoint-max (point-max) buffer-file-name t t) (vm-increment vm-modification-counter) - (set-buffer-modified-p old-buffer-modified-p) - (kill-buffer crash-buf) - (if (not (stringp vm-keep-crash-boxes)) - (vm-error-free-call 'delete-file crash-box) - (let ((time (decode-time (current-time))) - name) + (set-buffer-modified-p old-buffer-modified-p)) + (kill-buffer crash-buf) + (if (not (stringp vm-keep-crash-boxes)) + (vm-error-free-call 'delete-file crash-box) + (let ((time (decode-time (current-time))) + name) + (setq name + (expand-file-name (format "Z-%02d-%02d-%05d" + (nth 4 time) + (nth 3 time) + (% (vm-abs (random)) 100000)) + vm-keep-crash-boxes)) + (while (file-exists-p name) (setq name (expand-file-name (format "Z-%02d-%02d-%05d" (nth 4 time) (nth 3 time) (% (vm-abs (random)) 100000)) - vm-keep-crash-boxes)) - (while (file-exists-p name) - (setq name - (expand-file-name (format "Z-%02d-%02d-%05d" - (nth 4 time) - (nth 3 time) - (% (vm-abs (random)) 100000)) - vm-keep-crash-boxes))) - (rename-file crash-box name)))) + vm-keep-crash-boxes))) + (rename-file crash-box name))) got-mail )))) (defun vm-compute-spool-files ()
--- a/lisp/vm/vm-mime.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/vm/vm-mime.el Mon Aug 13 08:54:51 2007 +0200 @@ -2577,10 +2577,13 @@ (delete-char 1))) ((stringp object) (let ((overridding-file-coding-system 'no-conversion)) - (insert-before-markers " ") - (forward-char -1) - (insert-file-contents-literally object) - (delete-char 1)))) + (if (vm-xemacs-p) + (insert-file-contents-literally object) + (insert-before-markers " ") + (forward-char -1) + (insert-file-contents-literally object) + (goto-char (point-max)) + (delete-char -1))))) ;; gather information about the object from the extent. (if (setq already-mimed (vm-extent-property e 'vm-mime-encoded)) (setq layout (vm-mime-parse-entity
--- a/lisp/vm/vm-startup.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/vm/vm-startup.el Mon Aug 13 08:54:51 2007 +0200 @@ -275,7 +275,7 @@ (defun vm-mode (&optional read-only) "Major mode for reading mail. -This is VM 6.21. +This is VM 6.22. Commands: h - summarize folder contents
--- a/lisp/vm/vm-version.el Mon Aug 13 08:54:26 2007 +0200 +++ b/lisp/vm/vm-version.el Mon Aug 13 08:54:51 2007 +0200 @@ -2,7 +2,7 @@ (provide 'vm-version) -(defconst vm-version "6.21" +(defconst vm-version "6.22" "Version number of VM.") (defun vm-version ()
--- a/man/Makefile Mon Aug 13 08:54:26 2007 +0200 +++ b/man/Makefile Mon Aug 13 08:54:51 2007 +0200 @@ -39,10 +39,11 @@ ../info/%.info : %.texi -$(MAKEINFO) -o $@ $< -srcs = cc-mode cl custom ediff external-widget forms gnus \ - hyperbole ilisp info ispell mailcrypt message mh-e oo-browser \ - pcl-cvs psgml psgml-api rmail standards supercite term \ - termcap texinfo vhdl-mode viper vm w3 widget xemacs-faq +srcs = cc-mode cl custom ediff efs external-widget forms gnus \ + hm--html-mode \ + hyperbole ilisp info ispell mailcrypt message mh-e oo-browser \ + pcl-cvs psgml psgml-api rmail standards supercite term \ + termcap texinfo vhdl-mode viper vm w3 widget xemacs-faq info = $(srcs:%=../info/%.info) dvi = $(srcs:%=%.dvi) @@ -79,6 +80,11 @@ -f texinfo-format-buffer -f save-buffer -mv vm.info* ../info +../info/efs.info : efs.texi + -$(EMACS) $(EMACSFLAGS) -insert efs.texi -l texinfmt \ + -f texinfo-format-buffer -f save-buffer + -mv efs.info* ../info + PERL = perl TEXI2DVI = texi2dvi
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/man/efs.texi Mon Aug 13 08:54:51 2007 +0200 @@ -0,0 +1,1688 @@ +\input texinfo @c -*-texinfo-*- +@comment %**start of header (This is for running Texinfo on a region.) +@setfilename efs.info +@settitle EFS +@comment %**end of header (This is for running Texinfo on a region.) + +@synindex fn vr + +@node Top, What is EFS?, (dir), (dir) +@comment node-name, next, previous, up +@ifinfo +@unnumbered EFS + +This file documents EFS, a system for transparent file-transfer +between remote hosts using the FTP protocol within Emacs. + +This info is for version 1.15 of EFS. + +Documentation version: 1.0 + +Copyright @copyright{} 1991, 1992 Free Software Foundation, Inc. + +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 that the +entire resulting derived work is distributed under the terms of a +permission notice identical to this one. +@end ifinfo + +@titlepage +@sp5 +@center @titlefont{EFS} +@center version 1.15 +@sp2 +@center A transparent remote file system, by Sandy Rutherford and Andy Norman +@sp7 +@center This documentation based on ange-ftp documentation by David Smith +@center and on documentation in the EFS source code +@center It was put together by Mike Sperber. + +This documentation is definitely incomplete and parts of it may be +outright incorrect or out-of-date. + +@center info-version 1.0 +@page +@vskip 0pt plus 1filll +Copyright @copyright{} 1991, 1992 Free Software Foundation, Inc. + +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. + +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided that the +entire resulting derived work is distributed under the terms of a +permission notice identical to this one. +@end titlepage + +@menu +* What is EFS?:: +* Installing EFS:: Where to find it, and how to use it. +* Using EFS:: EFS -- a users' guide. +* Getting help:: Mailing lists and newsgroups. +* Bugs:: Known bugs, and a wish list. + +Indices: +* Concept Index:: +* Variable and command index:: +@end menu + + +@node What is EFS?, Installing EFS, Top, Top +@comment node-name, next, previous, up +@chapter Introducing EFS + +EFS is a system for transparent file-transfer between remote UNIX, +Guardian, DOS, Macintosh, KA9Q, Netware, NOS/VE, Plan 9, TI Explorer, +Twenex, TOPS 20, VOS, MPE, MVS, VMS, CMS or MTS hosts using FTP. This +means that you can edit, copy and otherwise manipulate files on any +machine you have access to from within Emacs as if it were a local +file. EFS works by introducing an extended filename syntax, and +overloading functions such as @code{insert-file-contents} so that +accessing a remote file causes appropriate commands to be sent to an FTP +process. EFS includes and enhanced version of Dired to facilitate +directory browsing and multiple file transfer from remote hosts. + +The authors of EFS are Sandy Rutherford (@code{sandy@@math.ubc.ca}) and +Andy (Ange) Norman (@code{ange@@hplb.hpl.hp.com}). EFS is partly based +on an earlier package called ange-ftp. The integration of EFS 1.15 into +XEmacs and numerous bug fixes were done by Mike Sperber +(@code{sperber@@informatik.uni-tuebingen.de}). + +@ifinfo +Many people have sent in enhancements for ange-ftp and EFS. +Members of the ange-ftp and EFS Hall of Fame include: + +@itemize @bullet +@item +Many thanks to Roland McGrath for improving the filename syntax handling, +for suggesting many enhancements and for numerous cleanups to the code. + +@item +Thanks to Jamie Zawinski for bugfixes and for ideas such as gateways. + +@item +Thanks to Ken Laprade for improved @file{.netrc} parsing and password +reading, and Dired/shell autoloading. + +@item +Thanks to Sebastian Kremer for tree dired support and for many ideas and +bugfixes. + +@item +Thanks to Joe Wells for bugfixes, non-UNIX system support, VOS support, +and hostname completion. + +@item +Thanks to Nakagawa Takayuki for many good ideas, filename-completion, help +with file-name expansion, efficiency worries, stylistic concerns and many +bugfixes. + +@item +Also, thanks to Rob Austein, Doug Bagley, Andy Caiger, Jim Franklin, +Noah Friedman, Aksnes Knut-Havard, Elmar Heeb, John Interrante, Roland +McGrath, Jeff Morgenthaler, Mike Northam, Jens Petersen, Jack Repenning, +Joerg-Martin Schwarz, Michael Sperber, Svein Tjemsland, Andy Whitcroft, +Raymond A. Wiker and many others whose names have been forgotten who +have helped to debug and fix problems. +@end itemize +@end ifinfo + +Finally, this info file was put together by Mike Sperber +(@code{sperber@@informatik.uni-tuebingen.de}) from an ange-ftp info file +written by Dave Smith (@code{dsmith@@stats.adelaide.edu.au}) and the EFS +source code. + +@node Installing EFS, Using EFS, What is EFS?, Top +@comment node-name, next, previous, up +@chapter Installing EFS + +At the time of writing of this documentation, the version of EFS +distributed with XEmacs (this means the EFS running on XEmacs +19.15/20.1) is the latest version available. It includes many bugfixes +and some enhancements over the last separately released version of EFS, +1.15. This situation will change once a new version of EFS is +available. + +Generally, EFS is pretty easy to get hold of. FTP is the probably the +simplest method, but other options such as mail are available. + +Once you have the Emacs-Lisp source, there are a few customisations you +might need to make. The ideal configuration is to have the FTP process running +on the same machine as you are running Emacs on, but this is not always +possible since some machines cannot access hosts outside the local +network. In this case, the FTP process needs to be run on a machine +which @emph{does} have access to the local world --- this is called the +@strong{gateway host}. EFS has facilities to make use of a +gateway host when accessing remote hosts. + +@menu +* Obtaining source code:: Where to find the EFS source. +* Installing source:: Where to put it, how to load it. +* Using a gateway:: If your local machine has limited access. +* Setting up a gateway:: +* Gateway types:: +* Gateway problems:: +* Other options:: More user variables to twiddle. +@end menu + +@node Obtaining source code, Installing source, Installing EFS, Installing EFS +@section How to get the EFS source code +@comment node-name, next, previous, up + +The latest separately distributed version of EFS should always be +available from Andy Norman's home page at +@example +http://www-uk.hpl.hp.com/people/ange/efs +@end example + +There are also some ftp locations: + +@table @b +@item Switzerland +@example +/anonymous@@itp.ethz.ch:/sandy/efs/ +@end example + +@item Massachusetts, USA +@example +/anonymous@@alpha.gnu.ai.mit.edu:/efs/ +@end example + +@item California, USA +@example +/anonymous@@ftp.hmc.edu:/pub/emacs/packages/efs/ +@end example +@end table + +Failing these, someone on the EFS mailing list (@xref{Getting help}) may +be able to help you find the latest version. + +@node Installing source, Using a gateway, Obtaining source code, Installing EFS +@comment node-name, next, previous, up +@section Installing the source + +For byte compiling the EFS package, a @file{Makefile} is provided. You +should follow the instructions at the top of the @file{Makefile}. If +you have any problems, please let us know so that we can fix them for +other users. Don't even consider using eFS without byte compiling it. It +will be far too slow. + +If you decide to byte compile efs by hand, it is important that the file +@file{efs-defun.el} be byte compiled first, followed by @file{efs.el}. +The other files may be byte compiled in any order. + +To use EFS, simply put the byte compiled files in your load path +and add + +@example +(require 'efs) +@end example + +in your @file{.emacs} file. Note this takes awhile, and some users have +found this to be unbearably slow. Therefore ... + +If you would like efs to be autoloaded when you attempt to access +a remote file, put + +@example +(require 'efs-auto) +@end example + +in your @file{.emacs} file. Note that there are some limitations associated +with autoloading EFS. A discussion of them is given at the top of +@file{efs-auto.el}. + +Note that, in XEmacs, EFS automatically loads @file{efs-auto} when the +user accesses a remote file. Therefore, no additional @code{require} +statements should be necessary to use EFS. Just fire away ... + +The above instructions should allow you to access all hosts that your +local machine can access. If your local host has limited access, +however, you may wish to have EFS working through a gateway +machine. If so, read on. Otherwise, @xref{Using EFS} to get started +using EFS. + +@node Using a gateway, Setting up a gateway, Installing source, Installing EFS +@comment node-name, next, previous, up +@section Using a gateway + +Sometimes it is necessary for the FTP process to be run on a different +machine than the machine running Emacs. This can happen when the +local machine has restrictions on what hosts it can access. + +Suppose you are running Emacs (and EFS, of course) on a machine X +(let's call it the `local host') and you want to access a file on a +machine Z (which we will call the `remote host'). Unfortunately, X does +not have FTP access to Z: when you try a manual FTP something like +the following happens: +@example +X$ ftp Z.foo.bar.com +ftp: connect: Host is unreachable +@end example +@noindent +However, X @emph{does} have access to a machine Y (the `gateway +machine') which @emph{can} access Z. Fortunately, you have an account on +the gateway machine, and so the solution is to login to Y, ftp to Z, +download the file you want from Z to Y, and then copy it from Y to the +local host, X. This can get a bit tedious, to say the least, but +fortunately EFS can do all the hard work for you. + +@node Setting up a gateway, Gateway types, Using a gateway, Installing EFS +@comment node-name, next, previous, up +@section Setting up a gateway + +@enumerate + +@item +Set the variable @code{efs-gateway-host} to the name of a machine +@vindex efs-gateway-host +that doesn't have the access restrictions. If you need to use a +nonstandard port to access this host for gateway use, then specify +@code{efs-gateway-host} as @code{<hostname>#<port>}. + +@item +Set the variable @code{efs-ftp-local-host-regexp} to a regular +expression +@vindex efs-ftp-local-host-regexp +that matches hosts that can be contacted from running a local ftp +process, but fails to match hosts that can't be accessed locally. + +For example: + +@example + "\\.hp\\.com$\\|^[^.]*$" +@end example + +will match all hosts that are in the @t{.hp.com} domain, or don't have +an explicit domain in their name, but will fail to match hosts with +explicit domains or that are specified by their ip address. + +@item +Set the variable @code{efs-local-host-regexp} to machines that you have +@vindex efs-local-host-regexp +direct TCP/IP access. In other words, you must be able to ping these +hosts. Usually, @code{efs-ftp-local-host-regexp} and +@code{efs-local-host-regexp} will be the same. However, they will +differ for so-called transparent gateways. See below for more +details. + +@item +Set the variable @code{efs-gateway-tmp-name-template} to the name of +@vindex efs-gateway-tmp-name-template +a directory plus an identifying filename prefix for making temporary +files on the gateway. For example: @code{"/tmp/hplose/ange/efs"} + +@item +If the gateway and the local host share cross-mounted directories, +set the value of @code{efs-gateway-mounted-dirs-alist} accordingly. It +@vindex efs-gateway-mounted-dirs-alist +is particularly useful, but not mandatory, that the directory +of @code{efs-gateway-tmp-name-template} be cross-mounted. +@vindex efs-gateway-tmp-name-template + +@item +Set the variable @code{efs-gateway-type} to the type gateway that you have. +This variable is a list, the first element of which is a symbol +denoting the type of gateway. +@end enumerate + +@node Gateway types, Gateway problems, Setting up a gateway, Installing EFS +@comment node-name, next, previous, up +@section Supported gateway types + +@vindex efs-gateway-type + +@table @samp + +@item local +This means that your local host is itself the gateway. However, +it is necessary to use a different FTP client to gain access to +the outside world. If the name of the FTP client were @t{xftp}, you might +set @code{efs-gateway-type} to + +@example +(list 'local "xftp" efs-ftp-program-args) +@end example + +If @t{xftp} required special arguments, then give them in place of +@t{efs-ftp-program-args}. +@vindex efs-ftp-program-args + +@item proxy + +This indicates that your gateway works by first FTP'ing to it, and +then issuing a @code{USER} command of the form + +@example +USER <username>@@<host> +@end example + +In this case, you might set @code{efs-gateway-type} to + +@example +(list 'proxy "ftp" efs-ftp-program-args) +@end example + +If you need to use a nonstandard client, such as @t{iftp}, give this +@pindex iftp +instead of @t{ftp}. If this client needs to take special arguments, +give them instead of @t{efs-ftp-program-args}. + +@item remsh + +For this type of gateway, you need to start a remote shell on +your gateway, using either @t{remsh} or @t{rsh}. You should set +@pindex remsh +@pindex rsh +@sc{efs-gateway-type} to something like + +@example +(list 'remsh "remsh" nil "ftp" efs-ftp-program-args) +@end example + +If you use @t{rsh} instead of @r{remsh}, change the second element from +@code{"remsh"} to @code{"rsh"}. Note that the symbol indicating the gateway +type should still be @code{'remsh}. If you want to pass arguments +to the remsh program, give them as the third element. For example, +if you need to specify a user, make this @code{(list "-l" "sandy")}. +If you need to use a nonstandard FTP client, specify that as the fourth +element. If your FTP client needs to be given special arguments, +give them instead of @code{efs-ftp-program-args}. + +@item interactive + +This indicates that you need to establish a login on the gateway, +using either @t{telnet} or @t{rlogin}. +@pindex telnet +@pindex rlogin +You should set @code{efs-gateway-type} to something like + +@example +(list 'interactive "rlogin" nil "exec ftp" efs-ftp-program-args) +@end example + +If you need to use @t{telnet}, then give @code{"telnet"} in place of the second +element @code{"rlogin"}. If your login program needs to be given arguments, +then they should be given in the third slot. The fourth element +is for the name of the FTP client program. Giving this as @code{"exec ftp"}, +instead of @code{"ftp"}, ensures that you are logged out if the FTP client +dies. If the FTP client takes special arguments, give these instead +of @code{efs-ftp-program-args}. Furthermore, you should see the documentation +at the top of @file{efs-gwp.el}. You may need to set the variables +@code{efs-gwp-setup-term-command}, and @code{efs-gwp-prompt-pattern}. +@vindex efs-gwp-setup-term-command +@vindex efs-gwp-prompt-pattern + +@item raptor +This is a type of gateway where efs is expected to specify a gateway +user, and send a password for this user using the @code{ACCOUNT} command. +For example, to log in to @samp{foobar.edu} as sandy, while using the account +ange on the gateway, the following commands would be sent: + +@example +open raptorgate.com +quote USER sandy@@foobar.edu ange +quote pass <sandy's password on foobar> +quote account <ange's password on raptorgate> +@end example + +For such a gateway, you would set @code{efs-gateway-type} to + +@example +(list 'raptor efs-ftp-program efs-ftp-program-args <GATEWAY USER>) +@end example + +where @code{<GATEWAY USER>} is the name of your account on the gateway. In +the above example, this would be @code{"ange"}. You can set your gateway +password by simply setting an account password for the gateway host. +This can be done with either efs-set-account, or within your .netrc +file. If no password is set, you will be prompted for one. + +@item interlock +This is a type of gateway where you are expected to send a PASS +command after opening the connection to the gateway. +The precise login sequence is + +@example +open interlockgate +quote PASS <sandy's password on interlockgate> +quote USER sandy@@foobar.edu +quote PASS <sandy's password on foobar.edu> +@end example + +For such a gateway, you should set @code{efs-gateway-type} to + +@example +(list 'interlock efs-ftp-program efs-ftp-program-args) +@end example + +If you need to use a nonstandard name for your FTP client, +then replace @code{efs-ftp-program} with this name. If your FTP client +needs to take nonstandard arguments, then replace @code{efs-ftp-program-args} +with these arguments. + +If your gateway returns both a 220 code and a 331 code to the +@code{"open interlockgate"} command, then you should add a regular +expression to @code{efs-skip-msgs} that matches the 220 response. +Returning two response codes to a single FTP command is not permitted +in RFC 959. It is not possible for efs to ignore the 220 by default, +because than it would hang for interlock installations which do not +require a password. + +@item kerberos +With this gateway, you need to authenticate yourself by getting a +kerberos "ticket" first. Usually, this is done with the kinit program. +Once authenticated, you connect to @samp{foobar.com} as user sandy with the +sequence: (Note that the @code{"-n"} argument inhibits automatic login. +Although, in manual use you probably don't use it, EFS always uses it.) + +@example +iftp -n +open foobar.com +user sandy@@foobar.com +@end example +@pindex iftp + +You should set @code{efs-gateway-type} to something like + +@example +(list 'kerberos "iftp" efs-ftp-program-args "kinit" <KINIT-ARGS>) +@end example + +If you use an FTP client other than @t{iftp}, insert its name instead of +@code{"iftp"} above. If your FTP client needs special arguments, give +them as a list of strings in place of @code{efs-ftp-program-args}. If +the program that you use to collect a ticket in not called +@code{"kinit"}, then give its name in place of @code{"kinit"} above. +@code{<KINIT-ARGS>} should be any arguments that you need to pass to +your kinit program, given as a list of strings. Most likely, you will +give this as nil. + +See the file @file{efs-kerberos.el} for more configuration variables. If you +need to adjust any of these variables, please report this to us so that +we can fix them for other users. + +If EFS detects that you are not authenticated to use the gateway, it +will run the kinit program automatically, prompting you for a password. +If you give a password in your @file{.netrc} file for login the value of +@code{efs-gateway-host} and user @t{kerberos}, then EFS will use this to +obtain gateway authentication. + +@item Transparent gateways + +If your gateway is completely transparent (for example it uses socks), +then you should set @code{efs-gateway-type} to @code{nil}. Also, set +@code{efs-ftp-local-host-regexp} to @code{".*"}. However, +@code{efs-local-host-regexp}, must still be set to a regular expression +matching hosts in your local domain. EFS uses this to determine which +machines that it can open-network-stream to. Furthermore, you should +still set @code{efs-gateway-host} to the name of your gateway machine. +That way EFS will know that this is a special machine having direct +TCP/IP access to both hosts in the outside world, and hosts in your +local domain. + +@end table + + + +@node Gateway problems, Other options, Gateway types, Installing EFS +@comment node-name, next, previous, up +@section Common Problems with Gateways + +@subsection Spurious 220 responses + +Some proxy-style gateways (eg gateway type @code{'proxy} or @code{'raptor}), +return two 3-digit FTP reply codes to the @code{USER} command. +For example: + +@example +open gateway.weird +220 Connected to gateway.weird +quote USER sandy@@foobar +220 Connected to foobar +331 Password required for sandy +@end example + +This is wrong, according to the FTP Protocol. Each command must return +exactly one 3-digit reply code. It may be preceded by continuation +lines. What should really be returned is: + +@example +quote USER sandy@@foobar +331-Connected to foobar. +331 Password required for sandy. +@end example + +or even + +@example +quote USER sandy@@foobar +331-220 Connected to foobar. +331 Password required for sandy. +@end example + +Even though the @samp{"331-220"} looks strange, it is correct protocol, +and EFS will parse it properly. + +If your gateway is returning a spurious 220 to @code{USER}, a work-around +is to add a regular expression to @code{efs-skip-msgs} that matches +@vindex efs-skip-msgs +this line. It must not match the 220 line returned to the open +command. This work-around may not work, as some system FTP clients +also get confused by the spurious 220. In this case, the only +solution is to patch the gateway server. In either case, please +send a bug report to the author of your gateway software. + +@subsection Case-sensitive parsing of FTP commands + +Some gateway servers seem to treat FTP commands case-sensitively. +This is incorrect, as RFC 959 clearly states that FTP commands +are always to be case-insensitive. If this is a problem with your +gateway server, you should send a bug report to its author. +If efs is using a case for FTP commands that does not suit your server, +a possible work-around is to edit the efs source so that the required +case is used. However, we will not be making any changes to the +standard EFS distribution to support this type of server behaviour. +If you need help changing the efs source, you should enquire with the +efs-help mailing list. + +@node Other options, , Gateway problems, Installing EFS +@comment node-name, next, previous, up +@section Other user options + +Here are other user options available in EFS: + +@code{efs-netrc-filename}: The name of a file in @code{netrc(5)} +format that EFS will use to match hostnames, users and their +respective passwords. Hostnames specified here are also used for hostname +completion. +The default is @code{"~/.netrc"}. +@vindex efs-netrc-filename + +@code{efs-default-user}: If this is a string, it is the username to +use when none is specified in a filename. If @code{nil}, then the +name under which the user is logged in is used. If non-@code{nil} but +not a string, the user is prompted for the name. The default is @code{nil}. +@vindex efs-default-user + +@code{efs-default-password}: The password to use when the user is the +same as @code{efs-default-user}. The default is @code{nil}. +@vindex efs-default-password + +@code{efs-default-account}: Account password to use when the user +is the same as @code{efs-default-user}. The default is @code{nil}. +@vindex efs-default-account + +@code{efs-dumb-unix-host-regexp}: The FTP servers on some machines have +problems if the @code{ls} command is used. The usual indication that +something is wrong is when EFS erroneously thinks that a directory +is just a plain file. The routine @code{efs-add-host} can +be called to tell EFS to limit itself to the @code{DIR} command and +not @code{ls} for a given host (but this change will take effect for the +current Emacs session only) when called like this: + +@example +(efs-add-host 'dumb-unix "hostname") +@end example + +If a large number of machines with similar hostnames have this problem +then it is easier to change the value of this variable to a regexp which +matches hostnames which have this problem, particularly since EFS cannot +automatically detect such hosts. The default is @code{nil}. +@vindex efs-dumb-unix-host-regexp +@findex efs-add-host + +@code{efs-binary-file-name-regexp}: By default EFS will +transfer files in ASCII mode. If a file being transferred matches the +value of this regexp then the FTP process will be toggled into BINARY +mode before the transfer and back to ASCII mode after the transfer. The +default is: +@example + (concat "\\." ; the dot + ;; extensions + "\\([zZ]\\|t?gz\\|lzh\\|arc\\|zip\\|zoo\\|ta[rz]\\|dvi\\|sit\\|" + "ps\\|elc\\|gif\\|Z-part-..\\|tpz\\|exe\\|[jm]pg\\|TZ[a-z]?\\|lib\\)" + "\\(~\\|~[0-9]+~\\)?$" ; backups + "\\|" + ;; UPPER CASE LAND + "\\." + "\\(ARC\\|ELC\\|TAGS\\|EXE\\|ZIP\\|DVI\|ZOO\\|GIF\\|T?GZ\\|" + "[JM]PG\\)" + "\\([.#;][0-9]+\\)?$" ; versions + ) +@end example +@vindex efs-binary-file-name-regexp + +@code{efs-hash-mark-size}: EFS by default requests that the +FTP process sends hash marks (just @code{#} characters) during transfers +to keep track of how much data has been sent or received. This variable, +if non-@code{nil}, should be the number of kilobytes represented by the +FTP client's hash mark. The default value of 1 doesn't work for me --- I +use 2 instead. +@vindex efs-hash-mark-size + +@code{efs-verbose}: If this is @code{t} then EFS will be chatty about +interaction with the FTP process. The default is @code{t}. +@vindex efs-process-verbose + +@code{efs-ftp-program-name}: This should be the name of the FTP +program to run on the local host. The default value of @code{"ftp"} +should be fine for most systems. +@vindex efs-ftp-program-name + +@code{efs-make-backup-files}: A list of operating systems for which +EFS will make Emacs backup files on the remote host. For example, +@code{'(unix)} makes sense, but @code{'(unix vms)} or @code{'(vms)} +would be silly, since VMS makes its own backups. The host type is +determined by the function @code{efs-host-type}. Possible host +types are: @code{dumb-unix}; @code{vos}; @code{vms}; @code{mts}; and +@code{unix}. The default of @code{nil} means make no backups on remote +hosts. +@vindex efs-make-backup-files +@cindex backup files + +@code{efs-skip-msgs}: A regular expression matching messages from +the ftp process that can be ignored. The default is +@example + (concat + "^110 \\|" ; Restart marker reply. + "^125 \\|" ; Data connection already open; transfer starting. + "^150 ") ; File status OK; about to open connection. +@end example +@noindent +but you might need to tweak it if EFS is giving up when it +shouldn't. +@vindex efs-skip-msgs + +@code{efs-fatal-msgs}: A regular expression matching messages from +the FTP process that indicate something has gone drastically wrong +attempting the action that was initiated and that the FTP process should +(or already has) been killed. The default is +@example +(concat + ;; RFC959 codes + "^221 \\|" ; Service closing control connection. + "^421 \\|" ; Service not available. + "^425 \\|" ; Can't open data connection. + "^426 \\|" ; Connection closed, transfer aborted. + "^451 \\|" ; Requested action aborted, local error in processing. + ;; RFC959 non-compliant codes + "^552 Maximum Idle Time Exceded\\.$\\|" ; Hellsoft server uses this to + ; indicate a timeout. 552 is + ; supposed to be used for exceeded + ; storage allocation. Note that + ; they also misspelled the error + ; message. + ;; client problems + "^ftp: \\|^Not connected\\|^rcmd: \\|^No control connection\\|" + "^unknown host\\|: unknown host$\\|^lost connection\\|" + "^[Ss]egmentation fault\\|" + ;; Make sure that the "local: " isn't just a message about a file. + "^local: [^/]\\|" + ;; Gateways + "^iftp: cannot authenticate to server\\b" + ) +@end example +@vindex efs-fatal-msgs + +@code{efs-gateway-fatal-msgs}: Regular expression matching messages +from the rlogin / telnet process that indicates that logging in to the +gateway machine has gone wrong. The default is +@example +"No route to host\\|Connection closed\\|No such host\\|Login incorrect" +@end example +@vindex efs-gateway-fatal-msgs + +@code{efs-tmp-name-template}: This should be a directory and a +filename prefix indicating where EFS should make temporary files. +The default of @code{"/tmp/efs"} should be fine for most systems. +@vindex efs-tmp-name-template +@cindex temporary files + +@code{efs-retry-time}: Number of seconds to wait before retrying if +a file or listing doesn't arrive. For slow connections, you might get a +``listing unreadable'' error messages +@cindex listing unreadable error +or an empty buffer for a file that you know has something in it. The +solution is to increase the value of @code{efs-retry-time}. Its default +value is 5 which is plenty for reasonable connections. However, for +some transatlantic connections 20 might be a better value. +@vindex efs-retry-time + +@node Using EFS, Getting help, Installing EFS, Top +@comment node-name, next, previous, up +@chapter Using EFS + +Once installed, efs operates largely transparently. All files normally +accessible to you on the internet, become part of a large virtual file +system. These files are accessed using an extended file name syntax. To +access file @code{<path>} on remote host @code{<host>} by logging in as +user @code{<user>}, you simply specify the full path of the file as +@code{/<user>@@<host>:<path>}. Nearly all Emacs file handling functions +work for remote files. It is not possible to access remote files using +shell commands in an emacs *shell* buffer, as such commands are passed +directly to the shell, and not handled by emacs. + +FTP is the underlying utility that efs uses to operate on remote files. + +For example, if @code{find-file} is given a filename of: + +@example +/ange@@anorman:/tmp/notes +@end example + +then EFS will spawn an FTP process, connect to the host 'anorman' as +user 'ange', get the file @file{/tmp/notes} and pop up a buffer containing the +contents of that file as if it were on the local file system. If efs +needed a password to connect then it would prompt the user in the +minibuffer. For further discussion of the EFS path syntax, see the +paragraph on extended file name syntax @ref{Remote filenames}. + +Full file-name completion is supported on every type of remote host. To +do filename completion, EFS needs a listing from the remote host. +Therefore, for very slow connections, it might not save any +time. However, the listing is cached, so subsequent uses of file-name +completion will be just as fast as for local file names. + +@menu +* Ports:: Using nonstandard ports. +* Remote filenames:: The EFS extended filename syntax. +* Passwords:: +* Using Dired:: Browsing directories. +* Using a .netrc:: Preventing password pestering. +* EFS commands:: Interactive commands supplied by EFS. +* FTP processes:: How EFS does its work +* Tips:: Some stuff to help you use EFS +* DL support:: Descriptive directory listings +* Non-Unix Hosts:: Some of what you want to know +* Completion:: Works but has its price +* Accessing the FTP process:: ... manually +@end menu + +@node Ports, Remote filenames, Using EFS, Using EFS +@comment node-name, next, previous, up +@section Using nonstandard ports + +EFS supports the use of nonstandard ports on remote hosts. To specify +that port @code{<port>} should be used, give the host name as +@code{host#<port>}. Host names may be given in this form anywhere that +efs normally expects a host name. This includes in the @file{.netrc} file. +Logically, EFS treats different ports to correspond to different remote +hosts. + +@node Remote filenames, Passwords, Ports, Using EFS +@comment node-name, next, previous, up +@section Extended filename syntax + +The default full EFS path syntax is + +@example +/<user>@@<host>#<port>:<path> +@end example + +Both the @code{#<port>'}and @code{<user>@@} may be omitted. + +If the @code{#<port>} is omitted, then the default port is taken to be 21, +the usual FTP port. For most users, the port syntax will only +very rarely be necessary. + +If the @code{<user>@@} is omitted, then EFS will use a default user. If +a login token is specified in your @file{.netrc} file, then this will be +used as the default user for @code{<host>}. Otherwise, it is determined +based on the value of the variable @code{efs-default-user}. +@vindex{efs-default-user} + +This EFS path syntax can be customised to a certain extent by changing a +number of variables. To +undertake such a customization requires some knowledge about the +internal workings of EFS. + +@node Passwords, Using Dired, Remote filenames, Using EFS +@comment node-name, next, previous, up +@section Passwords + +A password is required for each host / user pair. This will be prompted +for when needed, unless already set by calling @code{efs-set-passwd}, +@findex{efs-set-passwd} or specified in a @emph{valid} @file{~/.netrc} +file. + +When EFS prompts for a password, it provides defaults from its cache of +currently known passwords. The defaults are ordered such that passwords +for accounts which have the same user name as the login which is +currently underway have priority. You can cycle through your list of +defaults with @kbd{C-n} to cycle forwards and @kbd{C-p} to cycle +backwards. The list is circular. + +@subsection Passwords for user @t{anonymous} + +Passwords for the user @t{anonymous} (or @t{ftp}) are handled specially. +The variable @code{efs-generate-anonymous-password} controls what +\vindex efs-generate-anonymous-password happens. If the value of this +variable is a string, then this is used as the password; if +non-@code{nil}, then a password is created from the name of the user and +the hostname of the machine on which Emacs is running; if @code{nil} +(the default) then the user is prompted for a password as normal. + +@subsection Account passwords + +Some FTP servers require an additional password which is sent by the +@code{ACCOUNT} command. EFS will detect this and prompt the user for an +account password if the server expects one. Also, an account password +can be set by calling @code{efs-set-account}, or by specifying an +@findex efs-set-account +account token in the @file{.netrc} file. + +Some operating systems, such as CMS, require that @code{ACCOUNT} be used +to give a write access password for minidisks. @code{efs-set-account} can be +used to set a write password for a specific minidisk. Also, tokens of +the form + +@example +minidisk <minidisk name> <password> +@end example + +may be added to host lines in your @file{.netrc} file. Minidisk tokens +must be at the end of the host line, however there may be an arbitrary +number of them for any given host. + +@node Using Dired, Using a .netrc, Passwords, Using EFS +@comment node-name, next, previous, up +@section Using Dired + +This feature of EFS is particularly useful when file transfers, as +opposed to file editing, are the order of the day. Simply run +@code{find-file} on a directory to +get a listing of the files in that directory. For example, you might +run @code{find-file} on +@example +/anonymous@@archive.site.com:pub +@end example +@noindent +to see what's in the @file{pub} directory of your favourite archive +@cindex archive sites +site. This brings up a Dired buffer of all the files in that directory. +The @kbd{f} command is useful for looking at @file{README} files --- if +you then decide to save it @kbd{C-x C-w} is useful. You can also use +this method to copy files, but the @kbd{c} command is easier. The +@kbd{f} command can also be used to descend the directory tree by +applying it to directories. + +You can also use Dired to refresh EFS's internal cache. If you +(or anybody else) has changed a remote directory since you first accessed it +with EFS, completion is not provided on any new files that EFS +does not know about. If you have +(or create) a Dired buffer which contains the modified directory, +executing @code{revert-buffer} +@findex revert-buffer +with a prefix argument (@kbd{C-u g} in the Dired buffer) +will force a refresh of both the the buffer @emph{and also EFS's +internal cache}. If you find that filename completion isn't working on a +@cindex filename completion +file that you @emph{know} is there, this is how to fix the problem. + +Dired provides facilities for maintaining an +entire directory tree in a Dired buffer, for marking files which match a +certain regexp (or you can select files interactively) and then copying +all those files to your local host (or even a different remote host). +Another useful feature is Virtual Dired, which allows you to save Dired +@cindex virtual dired +buffers of remote hosts, allowing you to browse them at a later date +without actually needing to connect to the host. + +@node Using a .netrc, EFS commands, Using Dired, Using EFS +@comment node-name, next, previous, up +@section Using a .netrc file + +Being prompted for passwords all the time can get rather annoying, but +there is a way to fix the problem --- a @file{.netrc} (but @xref{Other +options} and @code{efs-netrc-filename} +@vindex efs-netrc-filename +if you want another +filename) file in your home directory. Basically, this is a file (in the +format of Unix @code{netrc(5)}) which +contains the names of all the machines you regularly login to, as well +as the username and password you use for that machine. You can also +supply an account password, if required. + +Your @file{.netrc} file consists of lines of the form +@example +machine <machine-name> login <user-name> password <password> +@end example +@noindent +It doesn't all have to be on the one line, though: any @code{login} or +@code{password} commands in the file refer to the previous +@code{machine} command. You can also have @code{account +<account-passwd>} commands if you need special account passwords. + +For example, you might have the following line in your @file{.netrc}: +@example +machine Y.local.lan.edu login myname password secret +@end example +@noindent +Then if you run @code{find-file} on the file @file{/Y.local.lan.edu:somefile} +you will automatically be logged in as user @code{myname} with password +@code{secret}. You can still login under another name and password, if +you so desire: just include the @code{user@@} part of the filename. + +You may also include a default option, as follows: +@example +default login <user-name> password <password> +@end example +@noindent +which applies to any other machines not mentioned elsewhere in your +@file{.netrc}. A particularly useful application of this is with +anonymous logins: +@cindex anonymous FTP +@example +default login myname password myname@@myhost.edu +@end example +@noindent +so that accessing @file{/anyhost:anyfile} will automatically log you in +anonymously, provided the host is not mentioned in the @file{.netrc}. +Note also that if the value of @code{efs-default-user} is +@vindex efs-default-user +non-@code{nil}, its value will have precedence over the username +supplied in the default option of the @file{.netrc}. + +The @file{.netrc} file is also useful in another regard: machines +included in it are provided with hostname completion. That is, for any +@cindex hostname completion +machine in the @file{.netrc}, you need only type a slash and the first +few characters of its name and then press @key{TAB} to be logged in +automatically with a username and password from the @file{.netrc} file. +So it's a good idea to put hosts you use regularly in your @file{.netrc} +as well: +@example +machine archive.site.com login anonymous password myname@@X.local.lan.edu +@end example + +@node EFS commands, FTP processes, Using a .netrc, Using EFS +@comment node-name, next, previous, up +@section EFS commands + +EFS supplies a few interactive commands to make connecting with +hosts a little easier. + +@noindent +Command @code{efs-set-user}: Prompts for a hostname and a username. +Next time access to the host is attempted, EFS will attempt to log +in again with the new username. +@findex efs-set-user + +@noindent +Command @code{efs-set-passwd}: Prompts for a hostname, user and +password. Future logins to that host as that user will use the given +password. +@findex efs-set-passwd + +@noindent +Command @code{efs-set-account}: Prompts for a hostname, user and +account. Future logins to that host as that user will use the given +account. +@findex efs-set-account + +Note that the effects of the above three commands only last the duration +of the current Emacs session. To make their effects permanent, you may +include them as lisp code in your @file{.emacs}: +@example +(efs-set-user HOST USER) +(efs-set-password HOST USER PASSWORD) +(efs-set-account HOST USER ACCOUNT) +@end example +@noindent +This is an alternative to using a @file{.netrc}; @xref{Using a .netrc}. + +@noindent +Command @code{efs-kill-ftp-process}: kill the FTP process +associated with a given buffer's filename (by default the current +buffer). This is an easy way to achieve a resynch: any future accesses +to the remote host will cause the FTP process to be recreated. +@findex efs-kill-ftp-process + +@node FTP processes, Tips, EFS commands, Using EFS +@comment node-name, next, previous, up +@section FTP processes + +When EFS starts up an FTP process, it leaves it running for speed +purposes. Some FTP servers will close the connection after a period of +time, but EFS should be able to quietly reconnect the next time that +the process is needed. + +The FTP process will be killed should the associated @samp{*ftp user@@host*} +buffer be deleted. This should not cause efs any grief. + +@subsection Showing background FTP activity on the mode-line + +After EFS is loaded, the command @code{efs-display-ftp-activity} will cause +@findex efs-display-ftp-activity +background FTP activity to be displayed on the mode line. The variable +@code{efs-mode-line-format} is used to determine how this data is displayed. +@vindex efs-mode-line-format +efs does not continuously track the number of active sessions, as this +would cause the display to change too rapidly. Rather, it uses a heuristic +algorithm to determine when there is a significant change in FTP activity. + +@subsection File types + +By default EFS will assume that all files are ASCII. If a file +being transferred matches the value of @code{efs-binary-file-name-regexp} +@vindex efs-binary-file-name-regexp +then the file will be assumed to be a binary file, and EFS will +transfer it using "type image". ASCII files will be transferred +using a transfer type which efs computes to be correct according +to its knowledge of the file system of the remote host. The +command @code{efs-prompt-for-transfer-type} toggles the variable +@findex efs-prompt-for-transfer-type +@code{efs-prompt-for-transfer-type}. When this variable is +@vindex efs-prompt-for-transfer-type +non-@code{nil}, EFS will prompt the user for the transfer type to use +for every FTP transfer. Having this set all the time is annoying, but +it is useful to give special treatment to a small set of files. There +is also a variable @code{efs-text-file-name-regexp}. This is tested +@vindex {efs-text-file-name-regexp} +before @code{efs-binary-file-name-regexp}, so if you set +@code{efs-text-file-name-regexp} to a non-trivial regular expression, +and @code{efs-binary-file-name-regexp} to @samp{".*"}, the result will +to make image the default tranfer type. + +Also, if you set @code{efs-treat-crlf-as-nl}, +@vindex efs-treat-crlf-as-nl +then EFS will use type image +to transfer files between hosts whose file system differ only in that +one specifies end of line as CR-LF, and the other as NL. This is useful +if you are transferring files between UNIX and DOS machines, and have a +package such as @file{dos-mode.el}, that handles the extra @key{^M}'s. + +@subsection Status reports + +Most EFS commands that talk to the FTP process output a status +message on what they are doing. In addition, efs can take advantage +of the FTP client's @code{HASH} command to display the status of transferring +files and listing directories. See the documentation for the variables +@code{efs-hash-mark-size}, +@vindex efs-hash-mark-size +@code{efs-send-hash} +@vindex efs-send-hash +and @code{efs-verbose} +@vindex efs-verbose +for more details. + +@subsection Caching of directory information + +EFS keeps an internal cache of file listings from remote hosts. +If this cache gets out of synch, it can be renewed by reverting a +dired buffer for the appropriate directory (@code{dired-revert} is usually +bound to @kbd{g}). + +Alternatively, you can add the following two lines to your @file{.emacs} file +if you want @kbd{C-r} to refresh EFS's cache whilst doing filename +completion. + +@example +(define-key minibuffer-local-completion-map "\C-r" 'efs-re-read-dir) +(define-key minibuffer-local-must-match-map "\C-r" 'efs-re-read-dir) +@end example + +@node Tips, DL support, FTP processes, Using EFS +@comment node-name, next, previous, up + +@section Tips for using EFS + +@enumerate +@item +Beware of compressing files on non-UNIX hosts. EFS will do it by +copying the file to the local machine, compressing it there, and then +sending it back. Binary file transfers between machines of different +architectures can be a risky business. Test things out first on some +test files. @xref{Bugs} Also, note that EFS sometimes +copies files by moving them through the local machine. Again, +be careful when doing this with binary files on non-Unix +machines. + +@item +Beware that dired over ftp will use your setting of +@code{dired-no-confirm} +@vindex dired-no-confirm +(list of dired commands for which confirmation is not asked). +You might want to reconsider your setting of this variable, +because you might want confirmation for more commands on remote +direds than on local direds. For example, I strongly recommend +that you not include compress in this list. If there is enough +demand it might be a good idea to have an alist +@code{efs-dired-no-confirm} of pairs @code{( TYPE . LIST )}, where @code{TYPE} is an +operating system type and @code{LIST} is a list of commands for which +confirmation would be suppressed. Then remote dired listings +would take their (buffer-local) value of @code{dired-no-confirm} from +this alist. Who votes for this? + +@item +Some combinations of FTP clients and servers break and get out of sync +when asked to list a non-existent directory. Some of the @t{ai.mit.edu} +machines cause this problem for some FTP clients. Using +@code{efs-kill-ftp-process} +@findex efs-kill-ftp-process +can be used to restart the ftp process, which +should get things back in synch. + +@item +Some ftp servers impose a length limit on the password that can +be sent. If this limit is exceeded they may bomb in an +incomprehensible way. This sort of behaviour is common with +MVS servers. Therefore, you should beware of this possibility +if you are generating a long password (like an email address) +with @code{efs-generate-anonymous-password}. +@vindex efs-generate-anonymous-password + +@item +Some antiquated FTP servers hang when asked for an @code{RNFR} command. +EFS sometimes uses this to test whether its local cache is stale. +If your server for @code{HOST} hangs when asked for this command, put + +@example +(efs-set-host-property HOST 'rnfr-failed t) +@end example + +in your @code{efs-ftp-startup-function-alist} +@vindex efs-ftp-startup-function-alist +entry for @code{HOST}. + +@item +The FTP servers on some Unix machines have problems if the @code{ls} +command is used. EFS will try to correct for this automatically, +and send the @code{dir} command instead. If it fails, you can call the +function @code{efs-add-host}, +@findex efs-add-host +and give the host type as @code{dumb-unix}. Note that this change will +take effect for the current Emacs session only. To make this +specification for future emacs sessions, put + +@example +(efs-add-host 'dumb-unix "hostname") +@end example + +in your @file{.emacs} file. Also, please report any failure to +automatically recognize dumb unix to the "bugs" address given below, so +that we can fix the auto recognition code. + +@end enumerate + +@node DL support, Non-Unix Hosts, Tips, Using EFS +@comment node-name, next, previous, up +@section Descriptive directory listings + +Some hosts (such as @code{cs.uwp.edu}) now use descriptive directory +listings +@cindex descriptive directory listings +@cindex extended directory listings +(which in fact contain @emph{less} information than the +standard listing!) when issued the @code{ls} command, and EFS has +been modified to cope with this. EFS can detect such listings, but +if you regularly use a remote host which uses this extended listing +format you should set the variable @code{efs-dl-dir-regexp} to a +@vindex efs-dl-dir-regexp +regular expression which matches directories using the extended listing +format. You shouldn't anchor the regexp with @samp{$} -- that way the +regexp will match subdirectories as well. Alternatively, you can use +the interactive command @code{efs-add-dl-dir} to temporarily add a +@findex efs-add-dl-dir +remote directory for this Emacs session only. + +Dired has been modified to work with such descriptive listings. + +@node Non-Unix Hosts, Completion, DL support, Using EFS +@comment node-name, next, previous, up +@section Using EFS with non-Unix hosts + +EFS also works with some non-Unix hosts, although not necessarily +with all the features available with Unix hosts. VMS, CMS, and MTS +systems will all now work with EFS and Dired. It also works with a whole +bunch of others, but documentation for that has not been written yet. +This section was taken straight from the ange-ftp manual, and is +therefore in all likelihood out-of-date. + +EFS should be able to automatically detect which type of host you +are using (VMS, CMS or MTS), but if it is unable to do so you can fix +the problem by setting the appropriate +@code{efs-TYPE-host-regexp} variable (where @code{TYPE} is one of +@samp{vms}, @samp{cms} or @samp{mts}) -- see below. If EFS is unable +to automatically detect any VMS, CMS or MTS host, please report this as +a bug: @xref{Bugs}. + +In all cases the file-name conventions of the remote host are converted +to a UNIX-ish format, and this is the format you should use to find +files on such hosts. + +@menu +* VMS support:: Using EFS with VMS systems +* CMS support:: Using EFS with CMS systems +* MTS support:: Using EFS with MTS systems +@end menu + +@node VMS support, CMS support, Non-Unix Hosts, Non-Unix Hosts +@comment node-name, next, previous, up +@subsection VMS support +@cindex VMS filenames +VMS filenames are of the form @code{FILE.TYPE;##}, where both +@code{FILE} and @code{TYPE} can be up to 39 characters long, and +@code{##} is an integer version number between 1 and 32,767. Valid +characters in filenames are @samp{A}-@samp{Z}, @samp{0}-@samp{9}, +@samp{_}, @samp{-} and @samp{$}, however @samp{$} cannot begin a +filename and @samp{-} cannot be used as the first or last character. + +Directories in VMS are converted to the standard UNIX @samp{/} notation. +For example, the VMS filename +@example +PUB$:[ANONYMOUS.SDSCPUB.NEXT]README.TXT;1 +@end example +would be entered as +@noindent +@example +/PUB$$:/ANONYMOUS/SDSCPUB/NEXT/README.TXT;1 +@end example +@noindent +(The double @samp{$} is required to prevent Emacs from attempting to +expand an environment variable.) Similarly, to anonymously FTP the file +@file{[.CSV.POLICY]RULES.MEM;1} from @code{ymir.claremont.edu} you would +type @kbd{C-x C-f +/anonymous@@ymir.claremont.edu:CSV/POLICY/RULES.MEM;1}. You can always +drop off the @samp{;##} part at the end of the filename to get the +latest version. + +Sandy Rutherford provides some tips for using VMS hosts: +@itemize @bullet +@item +Although VMS is not case sensitive, EMACS running under UNIX is. +Therefore, to access a VMS file, you must enter the filename with upper +case letters. + +@item +To access the latest version of file under VMS, you use the filename +without the @samp{;} and version number. You should always edit the +latest version of a file. If you want to edit an earlier version, copy +it to a new file first. This has nothing to do with EFS, but is +simply good VMS operating practice. Therefore, to edit @file{FILE.TXT;3} +(say 3 is latest version), do @kbd{C-x C-f +/ymir.claremont.edu:FILE.TXT}. If you inadvertently do +@example +@kbd{C-x C-f /ymir.claremont.edu:FILE.TXT;3} +@end example +@noindent +you will find that VMS will not allow +you to save the file because it will refuse to overwrite +@file{FILE.TXT;3}, but instead will want to create @file{FILE.TXT;4}, +and attach the buffer to this file. To get out of this situation, +@kbd{M-x write-file /ymir.claremont.edu:FILE.TXT} will attach the buffer +to latest version of the file. For this reason, in Dired @kbd{f} +(@code{dired-find-file}), +@findex dired-find-file +always loads the file sans version, whereas @kbd{v}, +(@code{dired-view-file}), +@findex dired-view-file +always loads the explicit version number. The +reasoning being that it reasonable to view old versions of a file, but +not to edit them. + +@item +VMS filenames often contain @samp{$} characters: make sure you always +quote these as @samp{$$} and watch out for the Emacs bug which fails to +quote @samp{$}'s when defaults are presented in the minibuffer: see +@xref{Bugs}. +@end itemize + +EFS should automatically detect that you are using a VMS host. If +it fails to do so (which should be reported as a bug) you can use the +command @code{efs-add-vms-host} +@findex efs-add-vms-host +to inform EFS manually. For a more permanent effect, or +if you use a VMS host regularly, it's a good idea to set +@code{efs-vms-host-regexp} to a regular expression matching that +@vindex efs-vms-host-regexp +host's name. For instance, if use use @code{ymir.claremont.edu} a lot, +place the following in your .emacs: +@example +(setq efs-vms-host-regexp "^ymir.claremont.edu$") +@end example + +@node CMS support, MTS support, VMS support, Non-Unix Hosts +@comment node-name, next, previous, up +@subsection CMS support +EFS has full support, including Dired support, for hosts +running CMS. + +@cindex CMS filenames +CMS filenames are entered in a UNIX-y way. Minidisks are +treated as UNIX directories; for example to access the file @file{READ.ME} in +minidisk @file{*.311} on @file{cuvmb.cc.columbia.edu}, you would enter +@example +/anonymous@@cuvmb.cc.columbia.edu:/*.311/READ.ME +@end example +If @file{*.301} is the default minidisk for this account, you could access +@file{FOO.BAR} on this minidisk as +@example +/anonymous@@cuvmb.cc.columbia.edu:FOO.BAR +@end example +CMS filenames are of the form @file{FILE.TYPE}, where both @file{FILE} +and @file{TYPE} can be up to 8 characters. Again, beware that CMS +filenames are always upper case, and hence must be entered as such. + +Sandy Rutherford provides some tips on using CMS hosts: +@itemize @bullet +@item +CMS machines, with the exception of anonymous accounts, nearly always +need an account password. To have EFS send an account password, +you can either include it in your @file{.netrc} (@xref{Using a .netrc}), or use +@code{efs-set-account}. +@findex efs-set-account + +@item +EFS cannot send ``write passwords'' for a minidisk. Hopefully, we +can fix this. +@end itemize + +EFS should automatically detect that you are using a CMS host. If +it fails to do so (which should be reported as a bug) you can use the +command @code{efs-add-cms-host} +@findex efs-add-cms-host +to inform EFS manually. For a more permanent effect, or +if you use a CMS host regularly, it's a good idea to set +@code{efs-cms-host-regexp} to a regular expression matching that +@vindex efs-cms-host-regexp +host's name. + +@node MTS support, , CMS support, Non-Unix Hosts +@comment node-name, next, previous, up +@subsection MTS support +EFS has full support, including Dired support, for hosts +running the Michigan terminal system, and should be able to +automatically recognise any MTS machine. + +@cindex MTS filenames +MTS filenames are entered in a UNIX-y way. For example, if your account +was @file{YYYY}, the file @file{FILE} in the account @file{XXXX:} on +@file{mtsg.ubc.ca} would be entered as +@example +/YYYY@@mtsg.ubc.ca:/XXXX:/FILE +@end example +In other words, MTS accounts are treated as UNIX directories. Of course, +to access a file in another account, you must have access permission for +it. If @file{FILE} were in your own account, then you could enter it in a +relative path fashion as +@example +/YYYY@@mtsg.ubc.ca:FILE +@end example +MTS filenames can be up to 12 characters. Like UNIX, the structure of the +filename does not contain a type (i.e. it can have as many @samp{.}'s as you +like.) MTS filenames are always in upper case, and hence be sure to enter +them as such! MTS is not case sensitive, but an EMACS running under UNIX +is. + +EFS should automatically detect that you are using an MTS host. If +it fails to do so (which should be reported as a bug) you can use the +command @code{efs-add-mts-host} +@findex efs-add-mts-host +to inform EFS manually. For a more permanent effect, or +if you use an MTS host regularly, it's a good idea to set +@code{efs-mts-host-regexp} to a regular expression matching that +@vindex efs-mts-host-regexp +host's name. + +@node Completion, Accessing the FTP process, Non-Unix Hosts, Using EFS +@comment node-name, next, previous, up +@section File- and host-name completion + +Full filename completion is supported on all remote UNIX hosts and some +non-Unix hosts. Hostnames also have completion if they are mentioned in +the @file{.netrc} and no username is specified. However using the +filename completion feature can be a bit of a two edged sword. + +To understand why, we need to discuss how EFS works. Whenever +EFS is asked to find a remote file (or directory) an @code{ls} +command is sent to the FTP process to list all the files in the +directory. This list is maintained in an internal cache, to provide +filename completion for later requests on that directory. EFS keeps +this cache up-to-date by monitoring Emacs commands which affect files +and directories, but if a process outside Emacs (such as another user) +changes a directory (e.g. a new file is added) +completion won't work on +that file since EFS doesn't know about it yet. The solution if to +force EFS to reread the directory and update it's cache, and the +easiest way to do that is with Dired --- @xref{Using Dired} to see how. + +Another problem is that the @code{ls} command can take a long time, +especially when dealing with distant hosts over slow links. So if you're +after a file in the @file{pub/images} directory but nothing else, it's a +better idea to type @kbd{pub/images/file @key{TAB}} than @kbd{pub/im @key{TAB}} +which will force a read of the @file{pub} directory (since +EFS needs to know how to complete @code{im}). A little extra typing +can often save a lot of waiting. Don't be afraid to use the @key{TAB} +key once the directory is cached, though. + +@node Accessing the FTP process, , Completion, Using EFS +@comment node-name, next, previous, up +@section Accessing the FTP process buffer + +The FTP process used to access the remote files is available for access +if you wish. It will be in a buffer +@cindex process buffers +@cindex buffers +called @samp{"*ftp @var{remote-file-name}*"}, +i.e. if you found the file +@example +/anonymous@@archive.site.com:pub/README +@end example +@noindent +there will be a buffer +@example +*ftp anonymous@@archive.site.com* +@end example +@noindent +where all the transfers are taking place. You can have a look at the +buffer using @kbd{C-x b} as usual, and even type in commands to the FTP +process under an interface very much like @samp{shell-mode}. There are +two instances when doing this can be very useful: one is accessing +non-UNIX hosts, where Dired and filename completion may not work (if EFS +even works at all). If you are going to use @code{mget} or @code{mput}, +make sure you type @code{glob} first: EFS turns globbing off by +default. Don't be afraid of changing directories, either --- EFS always +uses absolute pathnames when communicating with the FTP process. + +You can kill the FTP process at any time simply by killing this buffer. +@cindex FTP processes +@cindex processes +You can also call @code{efs-kill-ftp-process}. +@findex efs-kill-ftp-process +This won't cause EFS any grief whatsoever --- if you later make +another request to that host, EFS will simply fire up another +process and create a new buffer to hold it. + +@node Getting help, Bugs, Using EFS, Top +@comment node-name, next, previous, up +@chapter Getting help + +EFS has its own mailing list called @t{efs-help}. All users of EFS +are welcome to subscribe (see below) and to discuss aspects of +EFS. + +To [un]subscribe to @t{efs-help}, or to report mailer problems with the +list, please mail one of the following addresses: + +@example +efs-help-request@@cuckoo.hpl.hp.com +@end example +or +@example +efs-help-request%cuckoo.hpl.hp.com@@hplb.hpl.hp.com +@end example + +Please don't forget the @t{-request} part. + +For mail to be posted directly to @t{efs-help}, send to one of the +following addresses: + +@example +efs-help@@cuckoo.hpl.hp.com +@end example +or +@example +efs-help%cuckoo.hpl.hp.com@@hplb.hpl.hp.com +@end example + +Alternatively, there is a mailing list that only gets +announcements of new EFS releases. This is called @t{efs-announce}, +and can be subscribed to by e-mailing to the @t{-request} address as +above. Please make it clear in the request which mailing list you +wish to join. + +Mailing list archives are also accessible from this web page: + +@example +http://www-uk.hpl.hp.com/people/ange/efs +@end example + + +@node Bugs, Concept Index, Getting help, Top +@comment node-name, next, previous, up +@chapter Bugs and Wish List + + +If you find any bugs or problems with this package, @strong{please} +e-mail the authors. Ideas and constructive comments are especially +welcome. So are any enhancements to EFS, preferably debugged and +documented. Also welcome are any typo fixes, corrections or additions to +this manual. + +Here is a list of known bugs: + +If you hit a bug in this list, please report it anyway. Most of +the bugs here remain unfixed because they are considered too +esoteric to be a high priority. If one of them gets reported +enough, we will likely change our view on that. + +@enumerate +@item +EFS does not check to make sure that when creating a new file, +you provide a valid filename for the remote operating system. +If you do not, then the remote FTP server will most likely +translate your filename in some way. This may cause EFS to +get confused about what exactly is the name of the file. + +@item +For CMS support, we send too many @code{cd}'s. Since @code{cd}'s are +cheap, I haven't worried about this too much. Eventually, we should have +some caching of the current minidisk. This is complicated by the fact +that some CMS servers lie about the current minidisk, so sending +redundant cd's helps us recover in this case. + +@item +The code to do compression of files over ftp is not as careful as it +should be. It deletes the old remote version of the file, before +actually checking if the local to remote transfer of the compressed file +succeeds. Of course to delete the original version of the file after +transferring the compressed version back is also dangerous, because some +OS's have severe restrictions on the length of filenames, and when the +compressed version is copied back the @code{"-Z"} or @code{".Z"} may be +truncated. Then, EFS would delete the only remaining version of the +file. Maybe EFS should make backups when it compresses files (of +course, the backup @code{"~"} could also be truncated off, sigh...). +Suggestions? + +@item +If a dir listing is attempted for an empty directory on (at least +some) VMS hosts, an ftp error is given. This is really an ftp bug, and +I don't know how to get EFS work to around it. + +@item +EFS gets confused by directories containing file names with embedded +newlines. A temporary solution is to add @code{"q"} to your dired +listing switches. As long as your dired listing switches also contain +@code{"l"} and either @code{"a"} or @code{"A"}, EFS will use these +switches to get listings for its internal cache. The "q" switch should +force listings to be exactly one file per line. You still will not be +able to access a file with embedded newlines, but at least it won't mess +up the parsing of the rest of the files. + +@item +EFS cannot parse symlinks which have an embedded @code{" -> "} in their +name. It's alright to have an embedded @code{" -> "} in the name of any +other type of file. A fix is possible, but probably not worth the +trouble. If you disagree, send us a bug report. + +@item +EFS doesn't handle context-dep. files in H-switch listings on +HP's. It wouldn't be such a big roaring deal to fix this. I'm +waiting until I get an actual bug report though. + +@item +If a hard link is added or deleted, EFS will not update its +internal cache of the link count for other names of the file. +This may cause file-nlinks to return incorrectly. Reverting +any dired buffer containing other names for the file will +cause the file data to be updated, including the link counts. +A fix for this problem is known and will be eventually +implemented. How it is implemented will depend on how we decide +to handle inodes. See below. + +@item +EFS is unable to parse R-switch listings from remote Unix hosts. +This is inefficient, because EFS will insist on doing individual +listings of the subdirectories to get its file information. +This may be fixed if there is enough demand. + +@item +In file-attributes, EFS returns a fake inode number. Of course +this is necessary, but this inode number is not even necessarily +unique. It is simply the sum of the characters (treated as +integers) in the host name, user name, and file name. Possible +ways to get a unique inode number are: + +@enumerate +@item +Simply keep a count of all remote file in the cache, and +return the file's position in this count as a negative number. +@item +For unix systems, we could actually get at the real inode number on the +remote host, by adding an @code{"i"} to the ls switches. The inode +numbers would then be removed from the listing returned by @code{efs-ls}, if +the caller hadn't requested the @code{"i"} switch. We could then make a +unique number out of the host name and the real inode number. +@end enumerate + +@item +EFS tries to determine if a file is readable or writable by comparing +the file modes, file owner, and user name under which it is logged +into the remote host. This does not take into account groups. +We simply assume that the user belongs to all groups. As a result +we may assume that a file is writable, when in fact it is not. +Groups are tough to handle correctly over FTP. Suggestions? +(For new FTP servers, can do a @code{"QUOTE SITE EXEC groups"} to +handle this.) +@end enumerate + + +@node Concept Index, Variable and command index, Bugs, Top +@comment node-name, next, previous, up +@unnumbered Concept Index + +@printindex cp + +@node Variable and function index, , Concept Index, Top +@unnumbered Variable and function index + +@printindex vr + +@contents + +@bye +
--- a/man/gnus.texi Mon Aug 13 08:54:26 2007 +0200 +++ b/man/gnus.texi Mon Aug 13 08:54:51 2007 +0200 @@ -1,7 +1,7 @@ \input texinfo @c -*-texinfo-*- @setfilename gnus -@settitle Gnus 5.4.33 Manual +@settitle Gnus 5.4.36 Manual @synindex fn cp @synindex vr cp @synindex pg cp @@ -287,7 +287,7 @@ @tex @titlepage -@title Gnus 5.4.33 Manual +@title Gnus 5.4.36 Manual @author by Lars Magne Ingebrigtsen @page @@ -323,7 +323,7 @@ spool or your mbox file. All at the same time, if you want to push your luck. -This manual corresponds to Gnus 5.4.33. +This manual corresponds to Gnus 5.4.36. @end ifinfo @@ -8240,12 +8240,12 @@ That might seem quite naughty, but it does make sense most of the time. Let's say you have 10 groups subscribed to the server -@samp{nepholococcygia.com}. This server is located somewhere quite far -away from you, the machine is quite, so it takes 1 minute just to find -out that it refuses connection from you today. If Gnus were to attempt -to do that 10 times, you'd be quite annoyed, so Gnus won't attempt to do -that. Once it has gotten a single ``connection refused'', it will -regard that server as ``down''. +@samp{nephelococcygia.com}. This server is located somewhere quite far +away from you and the machine is quite slow, so it takes 1 minute just +to find out that it refuses connection from you today. If Gnus were to +attempt to do that 10 times, you'd be quite annoyed, so Gnus won't +attempt to do that. Once it has gotten a single ``connection refused'', +it will regard that server as ``down''. So, what happens if the machine was only feeling unwell temporarily? How do you test to see whether the machine has come up again? @@ -8911,7 +8911,7 @@ (any "procmail@@informatik\\.rwth-aachen\\.de" "procmail.list") (any "SmartList@@informatik\\.rwth-aachen\\.de" "SmartList.list") ;; People... - (any "larsi@@ifi\\.uio\\.no" "people.Lars Magne Ingebrigtsen")) + (any "larsi@@ifi\\.uio\\.no" "people.Lars_Magne_Ingebrigtsen")) ;; Unmatched mail goes to the catch all group. "misc.misc") @end lisp @@ -12186,6 +12186,7 @@ * Moderation:: What to do if you're a moderator. * XEmacs Enhancements:: There are more pictures and stuff under XEmacs. * Fuzzy Matching:: What's the big fuzz? +* Thwarting Email Spam:: A how-to on avoiding unsolited commercial email. * Various Various:: Things that are really various. @end menu @@ -12985,7 +12986,7 @@ Note that adding daemons can be pretty naughty if you overdo it. Adding functions that scan all news and mail from all servers every two seconds is a sure-fire way of getting booted off any respectable system. So -behave. +behave. @node NoCeM @@ -13410,6 +13411,75 @@ manglers masquerading as newsreaders. +@node Thwarting Email Spam +@section Thwarting Email Spam +@cindex email spam +@cindex spam +@cindex UCE +@cindex unsolicited commercial email + +In these last days of the Usenet, commercial vultures are hanging about +and grepping through news like crazy to find email addresses they can +foist off their scams and products to. As a reaction to this, many +people have started putting nonsense addresses into their @code{From} +lines. I think this is counterproductive---it makes it difficult for +people to send you legitimate mail in response to things you write, as +well as making it difficult to see who wrote what. This rewriting may +perhaps be a bigger menace than the unsolicited commercial email itself +in the end. + +The biggest problem I have with email spam is that it comes in under +false pretenses. I press @kbd{g} and Gnus merrily informs me that I +have 10 new emails. I say ``Golly gee! Happy is me!'' and selects the +mail group, only to find two pyramid schemes, seven advertisements +``New! Miracle tonic for growing full, lustrouos hair on your toes!'' +and one mail asking me to repent and find some god. + +This is annoying. + +The way to deal with this is having Gnus split out all spam into a +@samp{spam} mail group (@pxref{Splitting Mail}). + +First, pick one (1) legal mail address that you can be reached at, and +put it in your @code{From} header of all your news articles. (I've +chosen @samp{larsi@@trym.ifi.uio.no}.) + +@lisp +(setq message-default-news-headers + "From: Lars Magne Ingebrigtsen <larsi@@trym.ifi.uio.no>\n") +@end lisp + +Then put the following split rule in @code{nnmail-split-fancy} +(@pxref{Fancy Mail Splitting}): + +@lisp +( + ... + (to "larsi@@trym.ifi.uio.no" + (| ("subject" "re:.*" "misc") + ("references" ".*@@.*" "misc") + "spam")) + ... +) +@end lisp + +This says that all mail to this address is suspect, but if it has a +@code{Subject} that starts with a @samp{Re:} or has a @code{References} +header, it's probably ok. All the rest goes to the @samp{spam} group. +(This idea probably comes from Tim Pierce.) + +In my experience, this will sort virtually everything into the right +group. You still have to check the @samp{spam} group from time to time to +check for legitimate mail, though. If you feel like being a good net +citizen, you can even send off complaints to the proper authorities on +each unsolicited commercial email---at your leisure. + +This works for me. It allows people an easy way to contact me (they can +just press @kbd{r} in the usual way), and I'm not bothered at all with +spam. It's a win-win situation. Forging @code{From} headers to point +to non-existant domains is yucky, in my opinion. + + @node Various Various @section Various Various @cindex mode lines
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/man/hm--html-mode.texi Mon Aug 13 08:54:51 2007 +0200 @@ -0,0 +1,2038 @@ +\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.1 1997/03/23 00:28:12 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.4, 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.4}. + +The version of the document is:@* +$Id: hm--html-mode.texi,v 1.1 1997/03/23 00:28:12 steve Exp $ + +The package provides commands and various popup and pulldown menus for +a HTML mode called @dfn{hm---html-mode}, a mode for writing HTML pages +for the World Wide Web (WWW). It provides also a minor mode +(@dfn{hm---html-minor-mode}), which can be used together with another +HTML major mode, like the psgml-html modes in the 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 direct +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. + +If it makes sense, then the commands are working also on selected +regions. You'll see the same menu items and can use the same +keystrokes, regardless if the region is activated or not, but if it's +activated, then the commands are working on the region. Therefore, you +don't need to learn different menus or keys for similar functions! + +One major design issue 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 as 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 could 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 for 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 find the +latest version of the package always 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 the 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 +the GNU Emacs 19. +@itemx hm--html.el +Provides functions to write html pages. It defines all commands which +inserts 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 the Mosaic. It is +patched for the use with the 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 (i.e. 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 installed already 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 it's 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 must +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 possibility 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 it's 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 it's definitions could be overwritten. All variables are set by +@code{defvar}, so that it's values could also be overwritten with +@code{setq} in any standard emacs customization files (i.e. 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 there 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. But however, you +don't have to use a site specific customization, if you don't like it. + +If you'd like to make a site specific customization of the +@code{hm--html-mode}, then it's possible to put it in a special file +called @file{hm--site-configuration-file.el}. If you do this, you've 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 it's +path. If you write the filename without it's extension (.el), the emacs +tries to load at first a compiled version of the file. + +The environment variables overwrites the lisp variable. + +You can also put the site specific customization in any standard emacs +customization files like @file{default.el}. But an advantage, if you +use @file{hm--site-configuration-file.el} is, that it is very likely, +that you can use this file also together 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 +it's path. If you write the filename without it's extension (.el), the +emacs tries to load at first 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 the better one. + +@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 have only to 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 could be set to 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 lot's of possible html elements, then you should use the +novice popup menus. For that you've to 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 the @code{hm--html-mode} are the 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. Therefore it should be useful to 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 Server:: +* Links To Files:: +* Links To FTP Server:: +* Links To Emacs Info Files:: +* Links To Gopher Server:: +* Links To WAIS Gateways:: +* Links To The Mail Gateway:: +* Links For Sending Mails:: +* 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 Server, 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 Server, 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 a http link. +@end itemize + + +@node Links To Files, Links To FTP Server, Links to WWW Server, 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 Server, Links To Emacs Info Files, Links To Files, Defaults Used For Generating Links +@comment node-name, next, previous, up +@subsubsection Links To FTP Server +@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 ftp server. This is the default FTP server. In general +you've not 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've not 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 a ftp link. +@end itemize + + +@node Links To Emacs Info Files, Links To Gopher Server, Links To FTP Server, 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 the Info gateway. 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 Server, Links To WAIS Gateways, Links To Emacs Info Files, Defaults Used For Generating Links +@comment node-name, next, previous, up +@subsubsection Links To Gopher Server +@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 server in the Internet. +You can access them with a gopher browser or with a WWW browser. In the +second case you've to use the gopher gateway. + +@itemize @bullet +@item +@code{hm--html-gopher-hostname:port-default}: Default hostname with port +for links to gopher server. +@item +@code{hm--html-gopher-hostname:port-alist}: Alist with hostnames and +ports for links to gopher server. It contains useful alternatives. +@item +@code{hm--html-gopher-doctype-default}: For gopher links you've to +specify the doctype. In most cases this should be the string \"/1\". +Therefore this is the default doctype, but you might change it to +another doctype. +@item +@code{hm--html-gopher-doctype-alist}: Alist with doctype strings for links +to 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 +gopher server. It contains useful alternatives on 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 Server, 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 a 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} refers to these relay hosts and the +variables @code{hm--html-wais-servername:port-default} and +@code{hm--html-wais-servername:port-alist} are refers 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 Mails, 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 insert of links to mail +folder. You need a special server for this, which sends the emails 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 find probably mail folder. 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 Mails, 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 Mails +@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 Mails, 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've 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've 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 existing directory, than it is set to a +directory, where the package in the XEmacs is. 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 the XEmacs >= 19.12. +@item +@code{hm--html-frame-template-file}: File, which is used as template for +a html frame. Such a file 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 a html-link, which consists of such a path. To overcome +this behaviour, you can set this variable to the prefix +(eg "/tmp_mnt"). After that, the prefix should be stripped from the +paths during the creation of the links. ATTENTION: This variable is +used as 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} automatic inserts some useful informations in +html pages. This behaviour could 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 +during 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 are creating 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 the @code{hm--html-minor-mode}. +@item +@code{hm--html-mode-prefix-key}: The prefix key for the hm--html keys in +the @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 + +It may be, that 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, when the +@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 the 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've trouble with the functions to preview the html document with the +@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 the indentation in the @code{hm--html-mode}. And may be send me +(@emph{muenkel@@tnt.uni-hannover.de}) a note, why you've done 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 the +@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've 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 take +at first a look at the file @file{hm--html-not-standard.el}, which +contains already 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 +Search 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 tags". 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, there are 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 are 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 (eg: +bold instead of b). +@item +To get the right indentation for the new tags you should add an entry +for it to the variable @code{hm--html-tag-name-alist}, which is defined +in @file{hm--html-configuration.el}. Lets assume, that the new tagname +is @samp{foo}, then 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 allowed to use the +start tag without it's 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 + +But if you want to add the new commands also to the popup menu, +then you've 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 used, +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 also a key sequence for inserting the new tag, +then you've to 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 sub menu 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 +the XEmacs. Please let me know, if it works or not with other packages +or in the Emacs 19. + +If you'd like to use the minor mode in the psgml html mode, you've to +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} exists not in that versions. Therefore in that +versions you've to called the minor mode either 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 the +@file{hm--html-menus}, provides a general package for internal drag and +drop in the emacs. General means, that it can be used also without the +@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 could 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 could be used in all +modes. Therefore it's general customization isn't done in +@file{hm--html-configuration.el}. It's 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 (eg: +@file{default.el}). The following subsections describes 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 depends from the source and the destination +of the drag and drop. Drag and drop actions must be 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. But 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 the @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 + +There are the following three variables, which determines 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 bind. + +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 this 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 bind. + +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 maybe @code{click} or +@code{press-button-during-move}. A value of @code{click} means, that +you've to click over the source, leave the button and click it again +over the destination. A value of @code{press-button-during-move} means, +that you've 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 one contains commands, which +performs the drag and drop action and the second displayed a help +message 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 + +There are the following five different commands, which performs 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 it's mouse button over the source. This command is bind 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 bind direct 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've to press down a +mouse button over the source. The rest depends on the value of +@code{idd-drag-and-drop-mouse-binding-type}, like 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}. At first you must press the button +down over the source and then move with the pressed button to the +destination, where you must leave the button up. This must be bind 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 behaviour 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}. At first you +must click on the source and after that on the destination. This must +be bind 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 behaviour 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 before actually performing it. To perform the action, you've then +to click on a special extent in the help buffer. To get the help buffer, +you've to do the same things, as you've to do to perform the action +direct. 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 similar as @code{idd-mouse-drag-and-drop} +(@pxref{Performing The Drag And Drop Action}). + +By default this command is global bound to @key{meta} @key{control} +@key{button3}. This could 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 similar as +@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 the @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 the +emacs. Expansion means, that the template is replaced by something else, +which is determined by evaluating lisp forms or emacs commands. The +expansion can be done automaticly after the insert 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 different mayor 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 + +It 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 + +It 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 + +The default is, that 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 every column and only the template will be deleted +after its expansion. + + +There is also the possibility to put an attribute list in a template. The +attributes of the list are controlling 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 or else +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 or else +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 + +The attributes can be combined. For example: + +@example + ^@@COMMAND ((DELETE-LINE t) (DONT-DELETE nil))^@@ + insert-file + ^@@END COMMAND^@@ +@end example + +The last examples shows also, that whitespaces (blanks, tabs, linefeeds) +are allowed at the 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 could be used for all editing modes and not only for the +@code{hm--html-mode}. Therefore it's general customization isn't done in +@file{hm--html-configuration.el}. It's 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 (eg: +@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}: It determines an 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 selecting of files, which are matching 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. In this case +the templates in the buffer will be automaticly expanded, if the +variable is set to t, which is the default. +@item +@code{tmpl-sign}: It determines the sign which marks the beginning and +the end of template expressions. By default it is set to the null +character (displayed in the 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 to 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 different in each mode, +where you use templates, so that you will get only template files in the +completion list, 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've +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 automaticly after their +insert. @xref{Insert Of Template Files}, for automatic +expansion. The 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 determined by it's optional arguments @code{BEGIN} +and @code{END}. If the arguments are @code{nil}, or if the function is called +interactive, 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 bind 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 +prevent single templates from the expansion by escaping them. Note: +You can't escape 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 determined by it's optional arguments @code{BEGIN} +and @code{END}. If the arguments are @code{nil}, or if the function is +called interactive, 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 bind to keys in the @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}. So 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 provide also 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 bus. 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 fine. + +If you can't send the report with this function, than you should at +least insert the package version and your @code{Emacs}/@code{XEmacs} +version. + +In the best of all worlds you include also 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
--- a/man/message.texi Mon Aug 13 08:54:26 2007 +0200 +++ b/man/message.texi Mon Aug 13 08:54:51 2007 +0200 @@ -1,7 +1,7 @@ \input texinfo @c -*-texinfo-*- @setfilename message -@settitle Message 5.4.33 Manual +@settitle Message 5.4.36 Manual @synindex fn cp @synindex vr cp @synindex pg cp @@ -39,7 +39,7 @@ @tex @titlepage -@title Message 5.4.33 Manual +@title Message 5.4.36 Manual @author by Lars Magne Ingebrigtsen @page @@ -79,7 +79,7 @@ * Key Index:: List of Message mode keys. @end menu -This manual corresponds to Message 5.4.33. Message is distributed with +This manual corresponds to Message 5.4.36. Message is distributed with the Gnus distribution bearing the same version number as this manual has.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/man/umlaute.texi Mon Aug 13 08:54:51 2007 +0200 @@ -0,0 +1,14 @@ +@catcode`@ß=@active +@catcode`@Ä=@active +@catcode`@ä=@active +@catcode`@Ö=@active +@catcode`@ö=@active +@catcode`@Ü=@active +@catcode`@ü=@active +@defß{@ss} +@defÄ{@"A} +@defä{@"a} +@defÖ{@"O} +@defö{@"o} +@defÜ{@"U} +@defü{@"u}
--- a/src/redisplay-x.c Mon Aug 13 08:54:26 2007 +0200 +++ b/src/redisplay-x.c Mon Aug 13 08:54:51 2007 +0200 @@ -2063,12 +2063,10 @@ default_face_font_info (window, &defascent, 0, &defheight, 0, 0); } - cursor_y = dl->ypos - defascent; - if (cursor_y < y) - cursor_y = y; - cursor_height = defheight; - if (cursor_y + cursor_height > y + height) - cursor_height = y + height - cursor_y; + /* make sure the cursor is entirely contained between y and y+height */ + cursor_height = min (defheight, height); + cursor_y = max (y, min (y + height - cursor_height, + dl->ypos - defascent)); if (focus) {
--- a/src/redisplay.c Mon Aug 13 08:54:26 2007 +0200 +++ b/src/redisplay.c Mon Aug 13 08:54:51 2007 +0200 @@ -6635,7 +6635,8 @@ { struct buffer *b = XBUFFER (w->buffer); int cur_elt; - Bufpos cur_pos; + Bufpos cur_pos, prev_pos = point; + int point_line_height; int pixheight = pixpos - WINDOW_TEXT_TOP (w); validate_line_start_cache (w); @@ -6645,6 +6646,9 @@ /* #### See comment in update_line_start_cache about big minibuffers. */ if (cur_elt < 0) return point; + + point_line_height = Dynarr_atp (w->line_start_cache, cur_elt)->height; + while (1) { cur_pos = Dynarr_atp (w->line_start_cache, cur_elt)->start; @@ -6656,7 +6660,12 @@ if (pixheight < 0) { w->line_cache_validation_override--; - return cur_pos; + if (-pixheight > point_line_height) + /* We can't make the target line cover pixpos, so put it + above pixpos. That way it will at least be visible. */ + return prev_pos; + else + return cur_pos; } cur_elt--; @@ -6682,6 +6691,7 @@ cur_elt = point_in_line_start_cache (w, cur_pos, 2) - 1; assert (cur_elt >= 0); } + prev_pos = cur_pos; } }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/s/ultrix4-3.h Mon Aug 13 08:54:51 2007 +0200 @@ -0,0 +1,21 @@ +/* Ultrix 4.3 system description header file. + Copyright (C) 1997 Free Software Foundation, Inc. + +This file is part of XEmacs. + +XEmacs 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. + +XEmacs 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 XEmacs; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#include "ultrix.h"