Mercurial > hg > xemacs-beta
view lisp/cmdloop.el @ 5492:e82f5b7010fe
Merge some stuff in man, fix up Makefile
-------------------- ChangeLog entries follow: --------------------
man/ChangeLog addition:
2010-02-19 Ben Wing <ben@xemacs.org>
* widget.texi:
* widget.texi (Top):
* widget.texi (Introduction):
* widget.texi (User Interface):
* widget.texi (Programming Example):
* widget.texi (Setting Up the Buffer):
* widget.texi (Basic Types):
* widget.texi (link):
* widget.texi (url-link):
* widget.texi (info-link):
* widget.texi (push-button):
* widget.texi (editable-field):
* widget.texi (text):
* widget.texi (menu-choice):
* widget.texi (radio-button-choice):
* widget.texi (item):
* widget.texi (choice-item):
* widget.texi (toggle):
* widget.texi (checkbox):
* widget.texi (checklist):
* widget.texi (editable-list):
* widget.texi (group):
* widget.texi (Sexp Types):
* widget.texi (constants):
* widget.texi (generic):
* widget.texi (atoms):
* widget.texi (composite):
* widget.texi (Widget Properties):
* widget.texi (Defining New Widgets):
* widget.texi (Widget Browser):
* widget.texi (Widget Minor Mode):
* widget.texi (Utilities):
* widget.texi (Widget Wishlist):
* widget.texi (Widget Internals):
* widget.texi (GNU Free Documentation License):
* widget.texi (Index):
Sync with FSF 23.1.92.
2010-02-19 Ben Wing <ben@xemacs.org>
* texinfo/fdl.texi: New file.
* texinfo/texinfo.texi:
* texinfo/texinfo.texi (Top):
* texinfo/texinfo.texi (Copying Conditions):
* texinfo/texinfo.texi (Overview):
* texinfo/texinfo.texi (Reporting Bugs):
* texinfo/texinfo.texi (Using Texinfo):
* texinfo/texinfo.texi (Output Formats):
* texinfo/texinfo.texi (Info Files):
* texinfo/texinfo.texi (Printed Books):
* texinfo/texinfo.texi (Formatting Commands):
* texinfo/texinfo.texi (Conventions):
* texinfo/texinfo.texi (Comments):
* texinfo/texinfo.texi (Minimum):
* texinfo/texinfo.texi (Six Parts):
* texinfo/texinfo.texi (Short Sample):
* texinfo/texinfo.texi (History):
* texinfo/texinfo.texi (Texinfo Mode):
* texinfo/texinfo.texi (Texinfo Mode Overview):
* texinfo/texinfo.texi (XEmacs Editing):
* texinfo/texinfo.texi (Inserting):
* texinfo/texinfo.texi (Showing the Structure):
* texinfo/texinfo.texi (Updating Nodes and Menus):
* texinfo/texinfo.texi (Updating Commands):
* texinfo/texinfo.texi (Updating Requirements):
* texinfo/texinfo.texi (Other Updating Commands):
* texinfo/texinfo.texi (Info Formatting):
* texinfo/texinfo.texi (Printing):
* texinfo/texinfo.texi (Texinfo Mode Summary):
* texinfo/texinfo.texi (Beginning a File):
* texinfo/texinfo.texi (Sample Beginning):
* texinfo/texinfo.texi (Texinfo File Header):
* texinfo/texinfo.texi (First Line):
* texinfo/texinfo.texi (Start of Header):
* texinfo/texinfo.texi (setfilename):
* texinfo/texinfo.texi (settitle):
* texinfo/texinfo.texi (End of Header):
* texinfo/texinfo.texi (Document Permissions):
* texinfo/texinfo.texi (copying):
* texinfo/texinfo.texi (insertcopying):
* texinfo/texinfo.texi (Titlepage & Copyright Page):
* texinfo/texinfo.texi (titlepage):
* texinfo/texinfo.texi (titlefont center sp):
* texinfo/texinfo.texi (title subtitle author):
* texinfo/texinfo.texi (Copyright):
* texinfo/texinfo.texi (end titlepage):
* texinfo/texinfo.texi (headings on off):
* texinfo/texinfo.texi (Contents):
* texinfo/texinfo.texi (The Top Node):
* texinfo/texinfo.texi (Top Node Example):
* texinfo/texinfo.texi (Master Menu Parts):
* texinfo/texinfo.texi (Global Document Commands):
* texinfo/texinfo.texi (documentdescription):
* texinfo/texinfo.texi (setchapternewpage):
* texinfo/texinfo.texi (paragraphindent):
* texinfo/texinfo.texi (firstparagraphindent):
* texinfo/texinfo.texi (exampleindent):
* texinfo/texinfo.texi (Software Copying Permissions):
* texinfo/texinfo.texi (Ending a File):
* texinfo/texinfo.texi (Printing Indices & Menus):
* texinfo/texinfo.texi (File End):
* texinfo/texinfo.texi (Structuring):
* texinfo/texinfo.texi (Tree Structuring):
* texinfo/texinfo.texi (Structuring Command Types):
* texinfo/texinfo.texi (makeinfo top):
* texinfo/texinfo.texi (chapter):
* texinfo/texinfo.texi (unnumbered & appendix):
* texinfo/texinfo.texi (majorheading & chapheading):
* texinfo/texinfo.texi (section):
* texinfo/texinfo.texi (unnumberedsec appendixsec heading):
* texinfo/texinfo.texi (subsection):
* texinfo/texinfo.texi (unnumberedsubsec appendixsubsec subheading):
* texinfo/texinfo.texi (subsubsection):
* texinfo/texinfo.texi (Raise/lower sections):
* texinfo/texinfo.texi (Nodes):
* texinfo/texinfo.texi (Two Paths):
* texinfo/texinfo.texi (Node Menu Illustration):
* texinfo/texinfo.texi (node):
* texinfo/texinfo.texi (Node Names):
* texinfo/texinfo.texi (Writing a Node):
* texinfo/texinfo.texi (Node Line Tips):
* texinfo/texinfo.texi (Node Line Requirements):
* texinfo/texinfo.texi (First Node):
* texinfo/texinfo.texi (makeinfo top command):
* texinfo/texinfo.texi (makeinfo Pointer Creation):
* texinfo/texinfo.texi (anchor):
* texinfo/texinfo.texi (Menus):
* texinfo/texinfo.texi (Menu Location):
* texinfo/texinfo.texi (Writing a Menu):
* texinfo/texinfo.texi (Menu Parts):
* texinfo/texinfo.texi (Less Cluttered Menu Entry):
* texinfo/texinfo.texi (Menu Example):
* texinfo/texinfo.texi (Other Info Files):
* texinfo/texinfo.texi (Cross References):
* texinfo/texinfo.texi (References):
* texinfo/texinfo.texi (Cross Reference Commands):
* texinfo/texinfo.texi (Cross Reference Parts):
* texinfo/texinfo.texi (xref):
* texinfo/texinfo.texi (Reference Syntax):
* texinfo/texinfo.texi (One Argument):
* texinfo/texinfo.texi (Two Arguments):
* texinfo/texinfo.texi (Three Arguments):
* texinfo/texinfo.texi (Four and Five Arguments):
* texinfo/texinfo.texi (Top Node Naming):
* texinfo/texinfo.texi (ref):
* texinfo/texinfo.texi (pxref):
* texinfo/texinfo.texi (inforef):
* texinfo/texinfo.texi (uref):
* texinfo/texinfo.texi (cite):
* texinfo/texinfo.texi (Marking Text):
* texinfo/texinfo.texi (Indicating):
* texinfo/texinfo.texi (Useful Highlighting):
* texinfo/texinfo.texi (code):
* texinfo/texinfo.texi (kbd):
* texinfo/texinfo.texi (key):
* texinfo/texinfo.texi (samp):
* texinfo/texinfo.texi (verb):
* texinfo/texinfo.texi (var):
* texinfo/texinfo.texi (env):
* texinfo/texinfo.texi (file):
* texinfo/texinfo.texi (command):
* texinfo/texinfo.texi (option):
* texinfo/texinfo.texi (dfn):
* texinfo/texinfo.texi (abbr):
* texinfo/texinfo.texi (acronym):
* texinfo/texinfo.texi (indicateurl):
* texinfo/texinfo.texi (email):
* texinfo/texinfo.texi (Emphasis):
* texinfo/texinfo.texi (emph & strong):
* texinfo/texinfo.texi (Smallcaps):
* texinfo/texinfo.texi (Fonts):
* texinfo/texinfo.texi (Quotations and Examples):
* texinfo/texinfo.texi (Block Enclosing Commands):
* texinfo/texinfo.texi (quotation):
* texinfo/texinfo.texi (example):
* texinfo/texinfo.texi (verbatim):
* texinfo/texinfo.texi (verbatiminclude):
* texinfo/texinfo.texi (lisp):
* texinfo/texinfo.texi (small):
* texinfo/texinfo.texi (display):
* texinfo/texinfo.texi (format):
* texinfo/texinfo.texi (exdent):
* texinfo/texinfo.texi (flushleft & flushright):
* texinfo/texinfo.texi (noindent):
* texinfo/texinfo.texi (indent):
* texinfo/texinfo.texi (cartouche):
* texinfo/texinfo.texi (Lists and Tables):
* texinfo/texinfo.texi (Introducing Lists):
* texinfo/texinfo.texi (itemize):
* texinfo/texinfo.texi (enumerate):
* texinfo/texinfo.texi (Two-column Tables):
* texinfo/texinfo.texi (table):
* texinfo/texinfo.texi (ftable vtable):
* texinfo/texinfo.texi (itemx):
* texinfo/texinfo.texi (Multi-column Tables):
* texinfo/texinfo.texi (Multitable Column Widths):
* texinfo/texinfo.texi (Multitable Rows):
* texinfo/texinfo.texi (Special Displays):
* texinfo/texinfo.texi (Floats):
* texinfo/texinfo.texi (float):
* texinfo/texinfo.texi (caption shortcaption):
* texinfo/texinfo.texi (listoffloats):
* texinfo/texinfo.texi (Images):
* texinfo/texinfo.texi (Image Syntax):
* texinfo/texinfo.texi (Image Scaling):
* texinfo/texinfo.texi (Footnotes):
* texinfo/texinfo.texi (Footnote Commands):
* texinfo/texinfo.texi (Footnote Styles):
* texinfo/texinfo.texi (Indices):
* texinfo/texinfo.texi (Index Entries):
* texinfo/texinfo.texi (Predefined Indices):
* texinfo/texinfo.texi (Indexing Commands):
* texinfo/texinfo.texi (Combining Indices):
* texinfo/texinfo.texi (syncodeindex):
* texinfo/texinfo.texi (synindex):
* texinfo/texinfo.texi (New Indices):
* texinfo/texinfo.texi (Insertions):
* texinfo/texinfo.texi (Atsign Braces Comma):
* texinfo/texinfo.texi (Inserting an Atsign):
* texinfo/texinfo.texi (Inserting Braces):
* texinfo/texinfo.texi (Inserting a Comma):
* texinfo/texinfo.texi (Inserting Quote Characters):
* texinfo/texinfo.texi (Inserting Space):
* texinfo/texinfo.texi (Not Ending a Sentence):
* texinfo/texinfo.texi (Ending a Sentence):
* texinfo/texinfo.texi (Multiple Spaces):
* texinfo/texinfo.texi (frenchspacing):
* texinfo/texinfo.texi (dmn):
* texinfo/texinfo.texi (Inserting Accents):
* texinfo/texinfo.texi (Inserting Quotation Marks):
* texinfo/texinfo.texi (Dots Bullets):
* texinfo/texinfo.texi (dots):
* texinfo/texinfo.texi (bullet):
* texinfo/texinfo.texi (TeX and copyright):
* texinfo/texinfo.texi (tex):
* texinfo/texinfo.texi (copyright symbol):
* texinfo/texinfo.texi (registered symbol):
* texinfo/texinfo.texi (euro):
* texinfo/texinfo.texi (pounds):
* texinfo/texinfo.texi (textdegree):
* texinfo/texinfo.texi (minus):
* texinfo/texinfo.texi (geq leq):
* texinfo/texinfo.texi (math):
* texinfo/texinfo.texi (Click Sequences):
* texinfo/texinfo.texi (Glyphs):
* texinfo/texinfo.texi (Glyphs Summary):
* texinfo/texinfo.texi (result):
* texinfo/texinfo.texi (expansion):
* texinfo/texinfo.texi (Print Glyph):
* texinfo/texinfo.texi (Error Glyph):
* texinfo/texinfo.texi (Equivalence):
* texinfo/texinfo.texi (Point Glyph):
* texinfo/texinfo.texi (Breaks):
* texinfo/texinfo.texi (Break Commands):
* texinfo/texinfo.texi (Line Breaks):
* texinfo/texinfo.texi (- and hyphenation):
* texinfo/texinfo.texi (allowcodebreaks):
* texinfo/texinfo.texi (w):
* texinfo/texinfo.texi (tie):
* texinfo/texinfo.texi (sp):
* texinfo/texinfo.texi (page):
* texinfo/texinfo.texi (group):
* texinfo/texinfo.texi (need):
* texinfo/texinfo.texi (Definition Commands):
* texinfo/texinfo.texi (Def Cmd Template):
* texinfo/texinfo.texi (Def Cmd Continuation Lines):
* texinfo/texinfo.texi (Optional Arguments):
* texinfo/texinfo.texi (deffnx):
* texinfo/texinfo.texi (Def Cmds in Detail):
* texinfo/texinfo.texi (Functions Commands):
* texinfo/texinfo.texi (Variables Commands):
* texinfo/texinfo.texi (Typed Functions):
* texinfo/texinfo.texi (Typed Variables):
* texinfo/texinfo.texi (Data Types):
* texinfo/texinfo.texi (Abstract Objects):
* texinfo/texinfo.texi (Object-Oriented Variables):
* texinfo/texinfo.texi (Object-Oriented Methods):
* texinfo/texinfo.texi (Defining Macros):
* texinfo/texinfo.texi (Invoking Macros):
* texinfo/texinfo.texi (Macro Details):
* texinfo/texinfo.texi (alias):
* texinfo/texinfo.texi (definfoenclose):
* texinfo/texinfo.texi (Hardcopy):
* texinfo/texinfo.texi (Use TeX):
* texinfo/texinfo.texi (Format with tex/texindex):
* texinfo/texinfo.texi (Format with texi2dvi):
* texinfo/texinfo.texi (Print with lpr):
* texinfo/texinfo.texi (Within XEmacs):
* texinfo/texinfo.texi (Texinfo Mode Printing):
* texinfo/texinfo.texi (Compile-Command):
* texinfo/texinfo.texi (Requirements Summary):
* texinfo/texinfo.texi (Preparing for TeX):
* texinfo/texinfo.texi (Overfull hboxes):
* texinfo/texinfo.texi (smallbook):
* texinfo/texinfo.texi (A4 Paper):
* texinfo/texinfo.texi (pagesizes):
* texinfo/texinfo.texi (Cropmarks and Magnification):
* texinfo/texinfo.texi (PDF Output):
* texinfo/texinfo.texi (Obtaining TeX):
* texinfo/texinfo.texi (Creating and Installing Info Files):
* texinfo/texinfo.texi (Creating an Info File):
* texinfo/texinfo.texi (makeinfo advantages):
* texinfo/texinfo.texi (Invoking makeinfo):
* texinfo/texinfo.texi (makeinfo options):
* texinfo/texinfo.texi (Pointer Validation):
* texinfo/texinfo.texi (makeinfo in XEmacs):
* texinfo/texinfo.texi (texinfo-format commands):
* texinfo/texinfo.texi (Batch Formatting):
* texinfo/texinfo.texi (Tag and Split Files):
* texinfo/texinfo.texi (Installing an Info File):
* texinfo/texinfo.texi (Directory File):
* texinfo/texinfo.texi (New Info File):
* texinfo/texinfo.texi (Other Info Directories):
* texinfo/texinfo.texi (Installing Dir Entries):
* texinfo/texinfo.texi (Invoking install-info):
* texinfo/texinfo.texi (Generating HTML):
* texinfo/texinfo.texi (HTML Translation):
* texinfo/texinfo.texi (HTML Splitting):
* texinfo/texinfo.texi (HTML CSS):
* texinfo/texinfo.texi (HTML Xref):
* texinfo/texinfo.texi (HTML Xref Link Basics):
* texinfo/texinfo.texi (HTML Xref Node Name Expansion):
* texinfo/texinfo.texi (HTML Xref Command Expansion):
* texinfo/texinfo.texi (HTML Xref 8-bit Character Expansion):
* texinfo/texinfo.texi (HTML Xref Mismatch):
* texinfo/texinfo.texi (Command List):
* texinfo/texinfo.texi (Command Syntax):
* texinfo/texinfo.texi (Tips):
* texinfo/texinfo.texi (Sample Texinfo Files):
* texinfo/texinfo.texi (Short Sample Texinfo File):
* texinfo/texinfo.texi (GNU Sample Texts):
* texinfo/texinfo.texi (Invoking sample):
* texinfo/texinfo.texi (GNU Free Documentation License):
* texinfo/texinfo.texi (Index):
* texinfo/texinfo.texi (Verbatim Copying License):
* texinfo/texinfo.texi (All-permissive Copying License):
* texinfo/texinfo.texi (Include Files):
* texinfo/texinfo.texi (Using Include Files):
* texinfo/texinfo.texi (texinfo-multiple-files-update):
* texinfo/texinfo.texi (Include Files Requirements):
* texinfo/texinfo.texi (Sample Include File):
* texinfo/texinfo.texi (Include Files Evolution):
* texinfo/texinfo.texi (Headings):
* texinfo/texinfo.texi (Headings Introduced):
* texinfo/texinfo.texi (Heading Format):
* texinfo/texinfo.texi (Heading Choice):
* texinfo/texinfo.texi (Custom Headings):
* texinfo/texinfo.texi (Catching Mistakes):
* texinfo/texinfo.texi (makeinfo Preferred):
* texinfo/texinfo.texi (Debugging with Info):
* texinfo/texinfo.texi (Debugging with TeX):
* texinfo/texinfo.texi (Using texinfo-show-structure):
* texinfo/texinfo.texi (Using occur):
* texinfo/texinfo.texi (Running Info-Validate):
* texinfo/texinfo.texi (Using Info-validate):
* texinfo/texinfo.texi (Unsplit):
* texinfo/texinfo.texi (Tagifying):
* texinfo/texinfo.texi (Splitting):
* texinfo/texinfo.texi (Refilling Paragraphs):
* texinfo/texinfo.texi (Command and Variable Index):
* texinfo/texinfo.texi (General Index):
* texinfo/version.texi: New file.
Sync with FSF 23.1.92. Make new directory to hold the files needed
to generate texinfo.info, since there are three such files now.
2010-02-19 Ben Wing <ben@xemacs.org>
* Makefile:
* Makefile (src_files1):
* Makefile (DIR):
* Makefile (texinfo-srcs):
* Makefile ($(INFODIR)/widget.info):
* Makefile ($(INFODIR)/texinfo.info):
* Makefile (.PHONY):
* Makefile (texinfo.dvi):
* Makefile (texinfo.pdf):
* Makefile ($(HTMLDIR)/widget.html):
* Makefile ($(HTMLDIR)/texinfo.html):
Incorporate texinfo.texi moving to a subdirectory texinfo/.
Do some tricks to reduce the amount of duplication while still
maintaining compatible with non-GNU make (at least, with
Solaris make).
* doclicense.texi: New file.
* info.texi:
* info.texi (Top):
* info.texi (Getting Started):
* info.texi (Help-Small-Screen):
* info.texi (Help):
* info.texi (Help-P):
* info.texi (Help-^L):
* info.texi (Help-Inv):
* info.texi (Help-]):
* info.texi (Help-M):
* info.texi (Help-FOO):
* info.texi (Help-Xref):
* info.texi (Help-Int):
* info.texi (Help-Q):
* info.texi (Advanced):
* info.texi (Search Text):
* info.texi (Search Index):
* info.texi (Go to node):
* info.texi (Choose menu subtopic):
* info.texi (Create Info buffer):
* info.texi (XEmacs Info Variables):
* info.texi (Expert Info):
* info.texi (Add):
* info.texi (Menus):
* info.texi (Cross-refs):
* info.texi (Help-Cross):
* info.texi (Tags):
* info.texi (Checking):
* info.texi (Index):
* texinfo.tex:
* texinfo.tex (paragraphindent{%):
* texinfo.tex (sectionheading will have):
* texinfo.tex (chapterzzz{#3}%):
* texinfo.tex (subsubsection = \numberedsubsubsec):
* texinfo.tex (subsubsection = \appendixsubsubsec):
* texinfo.tex (subsubsection = \unnumberedsubsubsec):
* texinfo.tex (sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}%):
* texinfo.tex (sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}%):
* texinfo.tex (sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}%):
* texinfo.tex (sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}%):
* texinfo.tex (sectionheading{#1}{subsec}{Yappendix}%):
* texinfo.tex (sectionheading{#1}{subsec}{Ynothing}%):
* texinfo.tex (sectionheading{#1}{subsubsec}{Ynumbered}%):
* texinfo.tex (sectionheading{#1}{subsubsec}{Yappendix}%):
* texinfo.tex (sectionheading{#1}{subsubsec}{Ynothing}%):
* texinfo.tex (sectionheading{#1}{subsubsec}{Yomitfromtoc}{}):
* texinfo.tex (sectionheading to do the printing.):
* texinfo.tex (sectionlevel}{#1}{#4}%):
* texinfo.tex (sectionheading, q.v.):
Sync with FSF 23.1.92.
| author | Ben Wing <ben@xemacs.org> |
|---|---|
| date | Fri, 19 Feb 2010 22:39:19 -0600 |
| parents | fd36a980d701 |
| children | 9fa29ec759e3 |
line wrap: on
line source
;;; cmdloop.el --- support functions for the top-level command loop. ;; Copyright (C) 1992-4, 1997 Free Software Foundation, Inc. ;; Copyright (C) 2001, 2002, 2003 Ben Wing. ;; Author: Richard Mlynarik ;; Date: 8-Jul-92 ;; Maintainer: XEmacs Development Team ;; Keywords: internal, dumped ;; 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, 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Synched up with: FSF 19.30. (Some of the stuff below is in FSF's subr.el.) ;;; Some parts synched with FSF 21.2. ;;; Commentary: ;; This file is dumped with XEmacs. ;;; Code: (defun recursion-depth () "Return the current depth in recursive edits." (+ command-loop-level (minibuffer-depth))) (defun top-level () "Exit all recursive editing levels." (interactive) (throw 'top-level nil)) (defun exit-recursive-edit () "Exit from the innermost recursive edit or minibuffer." (interactive) (if (> (recursion-depth) 0) (throw 'exit nil)) (error "No recursive edit is in progress")) (defun abort-recursive-edit () "Abort the command that requested this recursive edit or minibuffer input." (interactive) (if (> (recursion-depth) 0) (throw 'exit t)) (error "No recursive edit is in progress")) ;; (defun keyboard-quit () ;; "Signal a `quit' condition." ;; (interactive) ;; (deactivate-mark) ;; (signal 'quit nil)) ;; moved here from pending-del. (defun keyboard-quit () "Signal a `quit' condition. If this character is typed while lisp code is executing, it will be treated as an interrupt. If this character is typed at top-level, this simply beeps. If `zmacs-regions' is true, and the zmacs region is active in this buffer, then this key deactivates the region without beeping or signalling." (interactive) (if (region-active-p) ;; pseudo-zmacs compatibility: don't beep if this ^G is simply ;; deactivating the region. If it is inactive, beep. nil (signal 'quit nil))) (defvar buffer-quit-function nil "Function to call to \"quit\" the current buffer, or nil if none. \\[keyboard-escape-quit] calls this function when its more local actions \(such as cancelling a prefix argument, minibuffer or region) do not apply.") (defun keyboard-escape-quit () "Exit the current \"mode\" (in a generalized sense of the word). This command can exit an interactive command such as `query-replace', can clear out a prefix argument or a region, can get out of the minibuffer or other recursive edit, cancel the use of the current buffer (for special-purpose buffers), or go back to just one window (by deleting all but the selected window)." (interactive) (cond ((eq last-command 'mode-exited) nil) ((> (minibuffer-depth) 0) (abort-recursive-edit)) (current-prefix-arg nil) ((region-active-p) (zmacs-deactivate-region)) ((> (recursion-depth) 0) (exit-recursive-edit)) (buffer-quit-function (funcall buffer-quit-function)) ((not (one-window-p t)) (delete-other-windows)) ((string-match "^ \\*" (buffer-name (current-buffer))) (bury-buffer)))) ;; `cancel-mode-internal' is a function of a misc-user event, which is ;; queued when window system directs XEmacs frame to cancel any modal ;; behavior it exposes, like mouse pointer grabbing. ;; ;; This function does nothing at the top level, but the code which ;; runs modal event loops, such as selection drag loop in `mouse-track', ;; check if misc-user function symbol is `cancel-mode-internal', and ;; takes necessary cleanup actions. (defun cancel-mode-internal (object) (setq zmacs-region-stays t)) ;; Someone wrote: "This should really be a ring of last errors." ;; ;; But why bother? This stuff is not all that necessary now that we ;; have message log, anyway. (defvar last-error nil "Object describing the last signaled error.") (defcustom errors-deactivate-region nil "*Non-nil means that errors will cause the region to be deactivated." :type 'boolean :group 'editing-basics) (defun command-error (error-object) ;; if you want a backtrace before exiting, set stack-trace-on-error. (let* ((inhibit-quit t) (debug-on-error nil) (etype (car-safe error-object))) (setq quit-flag nil) (setq standard-output t) (setq standard-input t) (setq executing-kbd-macro nil) (and errors-deactivate-region (zmacs-deactivate-region)) (discard-input) (setq last-error error-object) (message nil) (ding nil (cond ((eq etype 'undefined-keystroke-sequence) (if (and (vectorp (nth 1 error-object)) (/= 0 (length (nth 1 error-object))) (button-event-p (aref (nth 1 error-object) 0))) 'undefined-click 'undefined-key)) ((eq etype 'quit) 'quit) ((memq etype '(end-of-buffer beginning-of-buffer)) 'buffer-bound) ((eq etype 'buffer-read-only) 'read-only) (t 'command-error))) (display-error error-object t) (if (noninteractive) (progn (message "\n%s exiting.\n" emacs-program-name) (kill-emacs -1))) t)) (defun describe-last-error () "Redisplay the last error-message. See the variable `last-error'." (interactive) (if last-error (with-displaying-help-buffer (lambda () (princ "Last error was:\n" standard-output) (display-error last-error standard-output))) (message "No error yet"))) ;;#### Must be done later in the loadup sequence ;(define-key (symbol-function 'help-command) "e" 'describe-last-error) (defun truncate-command-history-for-gc () ;; We should try to avoid accessing any bindings to speak of in this ;; function; as this hook is called asynchronously, the search for ;; those bindings might search local bindings from essentially ;; arbitrary functions. We force the body of the function to run at ;; command-loop level, where the danger of local bindings is much ;; reduced; the code can still do its job because the command history ;; and values list will not grow before then anyway. ;; ;; Nothing is done in batch mode, both because it is a waste of time ;; (there is no command loop!) and because this any GCs during dumping ;; will invoke this code, and if it were to enqueue an eval event, ;; the portable dumper would try to dump it and fail. (if (not (noninteractive)) (enqueue-eval-event (lambda (arg) (let ((tail (nthcdr 30 command-history))) (if tail (setcdr tail nil))) (let ((tail (nthcdr 30 values))) (if tail (setcdr tail nil)))) nil))) (add-hook 'pre-gc-hook 'truncate-command-history-for-gc) ;;;; Object-oriented programming at its finest ;; Now in src/print.c; used by Ferror_message_string and others ;(defun display-error (error-object stream) ;(defgeneric report-condition ...) ; "Display `error-object' on `stream' in a user-friendly way." ; (funcall (or (let ((type (car-safe error-object))) ; (catch 'error ; (and (consp error-object) ; (symbolp type) ; ;;(stringp (get type 'error-message)) ; (consp (get type 'error-conditions)) ; (let ((tail (cdr error-object))) ; (while (not (null tail)) ; (if (consp tail) ; (setq tail (cdr tail)) ; (throw 'error nil))) ; t) ; ;; (check-type condition condition) ; (get type 'error-conditions) ; ;; Search class hierarchy ; (let ((tail (get type 'error-conditions))) ; (while (not (null tail)) ; (cond ((not (and (consp tail) ; (symbolp (car tail)))) ; (throw 'error nil)) ; ((get (car tail) 'display-error) ; (throw 'error (get (car tail) ; 'display-error))) ; (t ; (setq tail (cdr tail))))) ; ;; Default method ; #'(lambda (error-object stream) ; (let ((type (car error-object)) ; (tail (cdr error-object)) ; (first t) ; (print-message-label 'error)) ; (if (eq type 'error) ; (progn (princ (car tail) stream) ; (setq tail (cdr tail))) ; (princ (or (gettext (get type 'error-message)) type) ; stream)) ; (while tail ; (princ (if first ": " ", ") stream) ; (prin1 (car tail) stream) ; (setq tail (cdr tail) ; first nil)))))))) ; #'(lambda (error-object stream) ; (princ (gettext "Peculiar error ") stream) ; (prin1 error-object stream))) ; error-object stream)) (put 'file-error 'display-error #'(lambda (error-object stream) (let ((type (car error-object)) (tail (cdr error-object)) (first t) (print-message-label 'error)) (if (eq type 'file-error) (progn (princ (car tail) stream) (setq tail (cdr tail))) (princ (or (gettext (get type 'error-message)) type) stream)) (while tail (princ (if first ": " ", ") stream) (prin1 (car tail) stream) (setq tail (cdr tail) first nil))))) (put 'undefined-keystroke-sequence 'display-error #'(lambda (error-object stream) (princ (key-description (car (cdr error-object))) stream) ;; #### I18N3: doesn't localize properly. (princ (gettext " not defined.") stream) ; doo dah, doo dah. )) (defcustom teach-extended-commands-p t "*If true, then `\\[execute-extended-command]' will teach you keybindings. Any time you execute a command with \\[execute-extended-command] which has a shorter keybinding, you will be shown the alternate binding before the command executes. There is a short pause after displaying the binding, before executing it; the length can be controlled by `teach-extended-commands-timeout'." :type 'boolean :group 'keyboard) (defcustom teach-extended-commands-timeout 4 "*How long to pause after displaying a keybinding before executing. The value is measured in seconds. This only applies if `teach-extended-commands-p' is true." :type 'number :group 'keyboard) ;That damn RMS went off and implemented something differently, after ;we had already implemented it. We can't support both properly until ;we have Lisp magic variables. ;(defvar suggest-key-bindings t ; "*FSFmacs equivalent of `teach-extended-commands-*'. ;Provided for compatibility only. ;Non-nil means show the equivalent key-binding when M-x command has one. ;The value can be a length of time to show the message for. ;If the value is non-nil and not a number, we wait 2 seconds.") ; ;(make-obsolete-variable 'suggest-key-bindings 'teach-extended-commands-p) (defun execute-extended-command (prefix-arg) "Read a command name from the minibuffer using 'completing-read'. Then call the specified command using 'command-execute' and return its return value. If the command asks for a prefix argument, supply the value of the current raw prefix argument, or the value of PREFIX-ARG when called from Lisp." (interactive "P") ;; Note: This doesn't hack "this-command-keys" (let ((prefix-arg prefix-arg)) (setq this-command (read-command ;; Note: this has the hard-wired ;; "C-u" and "M-x" string bug in common ;; with all Emacs's. ;; (i.e. it prints C-u and M-x regardless of ;; whether some other keys were actually bound ;; to `execute-extended-command' and ;; `universal-argument'. (cond ((eq prefix-arg '-) "- M-x ") ((equal prefix-arg '(4)) "C-u M-x ") ((integerp prefix-arg) (format "%d M-x " prefix-arg)) ((and (consp prefix-arg) (integerp (car prefix-arg))) (format "%d M-x " (car prefix-arg))) (t "M-x "))))) (if (and teach-extended-commands-p (interactive-p)) ;; Remember the keys, run the command, and show the keys (if ;; any). The symbol-macrolet avoids some lexical-scope lossage. (symbol-macrolet ((execute-command-keys #:execute-command-keys) (execute-command-name #:execute-command-name)) (let ((execute-command-keys (where-is-internal this-command)) (execute-command-name this-command)) ; the name can change (command-execute this-command t) (when execute-command-keys ;; Normally the region is adjusted in post_command_hook; ;; however, it is not called until after we finish. It ;; looks ugly for the region to get updated after the ;; delays, so we do it now. The code below is a Lispified ;; copy of code in event-stream.c:post_command_hook(). (if (and (not zmacs-region-stays) (or (not (eq (selected-window) (minibuffer-window))) (eq (zmacs-region-buffer) (current-buffer)))) (zmacs-deactivate-region) (zmacs-update-region)) ;; Wait for a while, so the user can see a message printed, ;; if any. (when (sit-for 1) (display-message 'no-log (format (if (cdr execute-command-keys) "Command `%s' is bound to keys: %s" "Command `%s' is bound to key: %s") execute-command-name (sorted-key-descriptions execute-command-keys))) (sit-for teach-extended-commands-timeout) (clear-message 'no-log))))) ;; Else, just run the command. (command-execute this-command t))) ;;; C code calls this; the underscores in the variable names are to avoid ;;; cluttering the specbind namespace (lexical scope! lexical scope!) ;;; Putting this in Lisp instead of C slows kbd macros by 50%. ;(defun command-execute (_command &optional _record-flag) ; "Execute CMD as an editor command. ;CMD must be a symbol that satisfies the `commandp' predicate. ;Optional second arg RECORD-FLAG non-nil ;means unconditionally put this command in `command-history'. ;Otherwise, that is done only if an arg is read using the minibuffer." ; (let ((_prefix prefix-arg) ; (_cmd (indirect-function _command))) ; (setq prefix-arg nil ; this-command _command ; current-prefix-arg _prefix ; zmacs-region-stays nil) ; ;; #### debug_on_next_call = 0; ; (cond ((and (symbolp _command) ; (get _command 'disabled)) ; (run-hooks disabled-command-hook)) ; ((or (stringp _cmd) (vectorp _cmd)) ; ;; If requested, place the macro in the command history. ; ;; For other sorts of commands, call-interactively takes ; ;; care of this. ; (if _record-flag ; (setq command-history ; (cons (list 'execute-kbd-macro _cmd _prefix) ; command-history))) ; (execute-kbd-macro _cmd _prefix)) ; (t ; (call-interactively _command _record-flag))))) (defun y-or-n-p-minibuf (prompt) "Ask user a \"y or n\" question. Return t if answer is \"y\". Takes one argument, which is the string to display to ask the question. It should end in a space; `y-or-n-p' adds `(y or n) ' to it. No confirmation of the answer is requested; a single character is enough. Also accepts Space to mean yes, or Delete to mean no." (save-excursion (let* ((pre "") (yn (gettext "(y or n) ")) ;; we need to translate the prompt ourselves because of the ;; strange way we handle it. (prompt (gettext prompt)) event) (while (stringp yn) (if (let ((cursor-in-echo-area t) (inhibit-quit t)) (message "%s%s%s" pre prompt yn) (setq event (next-command-event event)) (condition-case nil (prog1 (or quit-flag (eq 'keyboard-quit (key-binding event))) (setq quit-flag nil)) (wrong-type-argument t))) (progn (message "%s%s%s%s" pre prompt yn (single-key-description event)) (setq quit-flag nil) (signal 'quit '()))) (let* ((keys (events-to-keys (vector event))) (def (lookup-key query-replace-map keys))) (cond ((eq def 'skip) (message "%s%sNo" prompt yn) (setq yn nil)) ((eq def 'act) (message "%s%sYes" prompt yn) (setq yn t)) ((eq def 'recenter) (recenter)) ((or (eq def 'quit) (eq def 'exit-prefix)) (signal 'quit '())) ((button-release-event-p event) ; ignore them nil) (t (message "%s%s%s%s" pre prompt yn (single-key-description event)) (ding nil 'y-or-n-p) (discard-input) (if (= (length pre) 0) (setq pre (gettext "Please answer y or n. "))))))) yn))) (defun yes-or-no-p-minibuf (prompt) "Ask user a yes-or-no question. Return t if answer is yes. Takes one argument, which is the string to display to ask the question. It should end in a space; `yes-or-no-p' adds `(yes or no) ' to it. The user must confirm the answer with RET, and can edit it until it has been confirmed." (save-excursion (let ((p (concat (gettext prompt) (gettext "(yes or no) "))) (ans "")) (while (stringp ans) (setq ans (downcase (read-string p nil t))) ;no history (cond ((string-equal ans (gettext "yes")) (setq ans t)) ((string-equal ans (gettext "no")) (setq ans nil)) (t (ding nil 'yes-or-no-p) (discard-input) (message "Please answer yes or no.") (sleep-for 2)))) ans))) (defun yes-or-no-p (prompt) "Ask user a yes-or-no question. Return t if answer is yes. The question is asked with a dialog box or the minibuffer, as appropriate. Takes one argument, which is the string to display to ask the question. It should end in a space; `yes-or-no-p' adds `(yes or no) ' to it. The user must confirm the answer with RET, and can edit it until it as been confirmed." (if (should-use-dialog-box-p) ;; and-fboundp is redundant, since yes-or-no-p-dialog-box is only ;; bound if (featurep 'dialog). But it eliminates a compile-time ;; warning. (and-fboundp #'yes-or-no-p-dialog-box (yes-or-no-p-dialog-box prompt)) (yes-or-no-p-minibuf prompt))) (defun y-or-n-p (prompt) "Ask user a \"y or n\" question. Return t if answer is \"y\". Takes one argument, which is the string to display to ask the question. The question is asked with a dialog box or the minibuffer, as appropriate. It should end in a space; `y-or-n-p' adds `(y or n) ' to it. No confirmation of the answer is requested; a single character is enough. Also accepts Space to mean yes, or Delete to mean no." (if (should-use-dialog-box-p) (yes-or-no-p-dialog-box prompt) (y-or-n-p-minibuf prompt))) (defun read-char () "Read a character from the command input (keyboard or macro). If a mouse click or non-ASCII character is detected, an error is signalled. The character typed is returned as an ASCII value. This is most likely the wrong thing for you to be using: consider using the `next-command-event' function instead." (save-excursion (let ((event (next-command-event))) (or inhibit-quit (and (event-matches-key-specifier-p event (quit-char)) (signal 'quit nil))) (prog1 (or (event-to-character event) ;; Kludge. If the event we read was a mouse-release, ;; discard it and read the next one. (if (button-release-event-p event) (event-to-character (next-command-event event))) (error "Key read has no ASCII equivalent %S" event)) ;; this is not necessary, but is marginally more efficient than GC. (deallocate-event event))))) (defun read-char-exclusive () "Read a character from the command input (keyboard or macro). If a mouse click or non-ASCII character is detected, it is discarded. The character typed is returned as an ASCII value. This is most likely the wrong thing for you to be using: consider using the `next-command-event' function instead." (let (event ch) (while (progn (setq event (next-command-event)) (or inhibit-quit (and (event-matches-key-specifier-p event (quit-char)) (signal 'quit nil))) (setq ch (event-to-character event)) (deallocate-event event) (null ch))) ch)) ;;;; Input and display facilities. ;; BEGIN SYNCHED WITH FSF 21.2. (defvar read-quoted-char-radix 8 "*Radix for \\[quoted-insert] and other uses of `read-quoted-char'. Legitimate radix values are 8, 10 and 16.") (custom-declare-variable-early 'read-quoted-char-radix 8 "*Radix for \\[quoted-insert] and other uses of `read-quoted-char'. Legitimate radix values are 8, 10 and 16." :type '(choice (const 8) (const 10) (const 16)) :group 'editing-basics) (defun read-quoted-char (&optional prompt) ;; XEmacs change; description of the character code input "Like `read-char', but do not allow quitting. Also, if the first character read is a digit of base (the value of) `read-quoted-char-radix', we read as many of such digits as are typed and return a character with the corresponding Unicode code point. Any input that is not a digit (in the base used) terminates the sequence. If the terminator is RET, it is discarded; any other terminator is used itself as input. The optional argument PROMPT specifies a string to use to prompt the user. The variable `read-quoted-char-radix' controls which radix to use for numeric input." (let (;(message-log-max nil) done (first t) (code 0) char event (prompt (and prompt (gettext prompt))) ) (while (not done) (let ((inhibit-quit first) ;; Don't let C-h get the help message--only help ;; function keys. ;; XEmacs: we don't support the help function keys as of ;; 2006-04-16. GNU have a Vhelp_event_list in addition ;; to help-char in src/keyboard.c, and it's only useful ;; to set help-form while help-char is nil when that ;; functionality is available. (help-char nil) (help-form (format "Type the special character you want to use, or the character code, base %d (the value of `read-quoted-char-radix') RET terminates the character code and is discarded; any other non-digit terminates the character code and is then used as input." read-quoted-char-radix))) (and prompt (display-message 'prompt (format "%s-" prompt))) (setq event (next-command-event) ;; If event-to-character fails, this is fine, we handle that ;; with the (null char) cond branch below. char (event-to-character event)) (if inhibit-quit (setq quit-flag nil))) ;; Translate TAB key into control-I ASCII character, and so on. (and char (let ((translated (lookup-key function-key-map (vector char)))) (if (arrayp translated) (setq char (aref translated 0))))) (cond ((null char)) ((not (characterp char)) ;; XEmacs change; event instead of char. (setq unread-command-events (list event) done t)) ; ((/= (logand char ?\M-\^@) 0) ; ;; Turn a meta-character into a character with the 0200 bit set. ; (setq code (logior (logand char (lognot ?\M-\^@)) 128) ; done t)) ((and (<= ?0 char) (< char (+ ?0 (min 10 read-quoted-char-radix)))) (setq code (+ (* code read-quoted-char-radix) (- char ?0))) (and prompt (setq prompt (display-message 'prompt (format "%s %c" prompt char))))) ((and (<= ?a (downcase char)) (< (downcase char) (+ ?a -10 (min 26 read-quoted-char-radix)))) (setq code (+ (* code read-quoted-char-radix) (+ 10 (- (downcase char) ?a)))) (and prompt (setq prompt (display-message 'prompt (format "%s %c" prompt char))))) ((and (not first) (eq char ?\C-m)) (setq done t)) ((not first) ;; XEmacs change; event instead of char. (setq unread-command-events (list event) done t)) (t (setq code (char-to-int char) done t))) (setq first nil)) ;; XEmacs change; unicode-to-char instead of int-to-char (unicode-to-char code))) ;; in passwd.el. ; (defun read-passwd (prompt &optional confirm default) ; "Read a password, prompting with PROMPT. Echo `.' for each character typed. ; End with RET, LFD, or ESC. DEL or C-h rubs out. C-u kills line. ; Optional argument CONFIRM, if non-nil, then read it twice to make sure. ; Optional DEFAULT is a default password to use instead of empty input." ; (if confirm ; (let (success) ; (while (not success) ; (let ((first (read-passwd prompt nil default)) ; (second (read-passwd "Confirm password: " nil default))) ; (if (equal first second) ; (progn ; (and (arrayp second) (fillarray second ?\0)) ; (setq success first)) ; (and (arrayp first) (fillarray first ?\0)) ; (and (arrayp second) (fillarray second ?\0)) ; (message "Password not repeated accurately; please start over") ; (sit-for 1)))) ; success) ; (let ((pass nil) ; (c 0) ; (echo-keystrokes 0) ; (cursor-in-echo-area t)) ; (while (progn (message "%s%s" ; prompt ; (make-string (length pass) ?.)) ; (setq c (read-char-exclusive nil t)) ; (and (/= c ?\r) (/= c ?\n) (/= c ?\e))) ; (clear-this-command-keys) ; (if (= c ?\C-u) ; (progn ; (and (arrayp pass) (fillarray pass ?\0)) ; (setq pass "")) ; (if (and (/= c ?\b) (/= c ?\177)) ; (let* ((new-char (char-to-string c)) ; (new-pass (concat pass new-char))) ; (and (arrayp pass) (fillarray pass ?\0)) ; (fillarray new-char ?\0) ; (setq c ?\0) ; (setq pass new-pass)) ; (if (> (length pass) 0) ; (let ((new-pass (substring pass 0 -1))) ; (and (arrayp pass) (fillarray pass ?\0)) ; (setq pass new-pass)))))) ; (message nil) ; (or pass default "")))) ;; aliased to redraw-modeline, a built-in. ; (defun force-mode-line-update (&optional all) ; "Force the mode-line of the current buffer to be redisplayed. ; With optional non-nil ALL, force redisplay of all mode-lines." ; (if all (save-excursion (set-buffer (other-buffer)))) ; (set-buffer-modified-p (buffer-modified-p))) (defun momentary-string-display (string pos &optional exit-char message) "Momentarily display STRING in the buffer at POS. Display remains until next character is typed. If the char is EXIT-CHAR (optional third arg, default is SPC) it is swallowed; otherwise it is then available as input (as a command if nothing else). Display MESSAGE (optional fourth arg) in the echo area. If MESSAGE is nil, instructions to type EXIT-CHAR are displayed there." (or exit-char (setq exit-char ?\ )) (let ((inhibit-read-only t) ;; Don't modify the undo list at all. (buffer-undo-list t) (modified (buffer-modified-p)) (name buffer-file-name) insert-end) (unwind-protect (progn (save-excursion (goto-char pos) ;; defeat file locking... don't try this at home, kids! (setq buffer-file-name nil) (insert-before-markers (gettext string)) (setq insert-end (point)) ;; If the message end is off screen, recenter now. (if (< (window-end nil t) insert-end) (recenter (/ (window-height) 2))) ;; If that pushed message start off the frame, ;; scroll to start it at the top of the frame. (move-to-window-line 0) (if (> (point) pos) (progn (goto-char pos) (recenter 0)))) (message (or message (gettext "Type %s to continue editing.")) (single-key-description exit-char)) (let ((event (save-excursion (next-command-event)))) (or (eq (event-to-character event) exit-char) (setq unread-command-events (list event))))) (if insert-end (save-excursion (delete-region pos insert-end))) (setq buffer-file-name name) (set-buffer-modified-p modified)))) ;; END SYNCHED WITH FSF 21.2. ;;; cmdloop.el ends here
