view man/new-users-guide/xmenu.texi @ 5353:38e24b8be4ea

Improve the lexical scoping in #'block, #'return-from. lisp/ChangeLog addition: 2011-02-07 Aidan Kehoe <kehoea@parhasard.net> * bytecomp.el: * bytecomp.el (byte-compile-initial-macro-environment): Shadow `block', `return-from' here, we implement them differently when byte-compiling. * bytecomp.el (byte-compile-active-blocks): New. * bytecomp.el (byte-compile-block-1): New. * bytecomp.el (byte-compile-return-from-1): New. * bytecomp.el (return-from-1): New. * bytecomp.el (block-1): New. These are two aliases that exist to have their own associated byte-compile functions, which functions implement `block' and `return-from'. * cl-extra.el (cl-macroexpand-all): Fix a bug here when macros in the environment have been compiled. * cl-macs.el (block): * cl-macs.el (return): * cl-macs.el (return-from): Be more careful about lexical scope in these macros. * cl.el: * cl.el ('cl-block-wrapper): Removed. * cl.el ('cl-block-throw): Removed. These aren't needed in code generated by this XEmacs. They shouldn't be needed in code generated by XEmacs 21.4, but if it turns out the packages do need them, we can put them back. 2011-01-30 Mike Sperber <mike@xemacs.org> * font-lock.el (font-lock-fontify-pending-extents): Don't fail if `font-lock-mode' is unset, which can happen in the middle of `revert-buffer'. 2011-01-23 Aidan Kehoe <kehoea@parhasard.net> * cl-macs.el (delete): * cl-macs.el (delq): * cl-macs.el (remove): * cl-macs.el (remq): Don't use the compiler macro if these functions were given the wrong number of arguments, as happens in lisp-tests.el. * cl-seq.el (remove, remq): Removed. I added these to subr.el, and forgot to remove them from here. 2011-01-22 Aidan Kehoe <kehoea@parhasard.net> * bytecomp.el (byte-compile-setq, byte-compile-set): Remove kludge allowing keywords' values to be set, all the code that does that is gone. * cl-compat.el (elt-satisfies-test-p): * faces.el (set-face-parent): * faces.el (face-doc-string): * gtk-font-menu.el: * gtk-font-menu.el (gtk-reset-device-font-menus): * msw-font-menu.el: * msw-font-menu.el (mswindows-reset-device-font-menus): * package-get.el (package-get-installedp): * select.el (select-convert-from-image-data): * sound.el: * sound.el (load-sound-file): * x-font-menu.el (x-reset-device-font-menus-core): Don't quote keywords, they're self-quoting, and the win from backward-compatibility is sufficiently small now that the style problem overrides it. 2011-01-22 Aidan Kehoe <kehoea@parhasard.net> * cl-macs.el (block, return-from): Require that NAME be a symbol in these macros, as always documented in the #'block docstring and as required by Common Lisp. * descr-text.el (unidata-initialize-unihan-database): Correct the use of non-symbols in #'block and #'return-from in this function. 2011-01-15 Aidan Kehoe <kehoea@parhasard.net> * cl-extra.el (concatenate): Accept more complicated TYPEs in this function, handing the sequences over to #'coerce if we don't understand them here. * cl-macs.el (inline): Don't proclaim #'concatenate as inline, its compiler macro is more useful than doing that. 2011-01-11 Aidan Kehoe <kehoea@parhasard.net> * subr.el (delete, delq, remove, remq): Move #'remove, #'remq here, they don't belong in cl-seq.el; move #'delete, #'delq here from fns.c, implement them in terms of #'delete*, allowing support for sequences generally. * update-elc.el (do-autoload-commands): Use #'delete*, not #'delq here, now the latter's no longer dumped. * cl-macs.el (delete, delq): Add compiler macros transforming #'delete and #'delq to #'delete* calls. 2011-01-10 Aidan Kehoe <kehoea@parhasard.net> * dialog.el (make-dialog-box): Correct a misplaced parenthesis here, thank you Mats Lidell in 87zkr9gqrh.fsf@mail.contactor.se ! 2011-01-02 Aidan Kehoe <kehoea@parhasard.net> * dialog.el (make-dialog-box): * list-mode.el (display-completion-list): These functions used to use cl-parsing-keywords; change them to use defun* instead, fixing the build. (Not sure what led to me not including this change in d1b17a33450b!) 2011-01-02 Aidan Kehoe <kehoea@parhasard.net> * cl-macs.el (define-star-compiler-macros): Make sure the form has ITEM and LIST specified before attempting to change to calls with explicit tests; necessary for some tests in lisp-tests.el to compile correctly. (stable-union, stable-intersection): Add compiler macros for these functions, in the same way we do for most of the other functions in cl-seq.el. 2011-01-01 Aidan Kehoe <kehoea@parhasard.net> * cl-macs.el (dolist, dotimes, do-symbols, macrolet) (symbol-macrolet): Define these macros with defmacro* instead of parsing the argument list by hand, for the sake of style and readability; use backquote where appropriate, instead of calling #'list and and friends, for the same reason. 2010-12-30 Aidan Kehoe <kehoea@parhasard.net> * x-misc.el (device-x-display): Provide this function, documented in the Lispref for years, but not existing previously. Thank you Julian Bradfield, thank you Jeff Mincy. 2010-12-30 Aidan Kehoe <kehoea@parhasard.net> * cl-seq.el: Move the heavy lifting from this file to C. Dump the cl-parsing-keywords macro, but don't use defun* for the functions we define that do take keywords, dynamic scope lossage makes that not practical. * subr.el (sort, fillarray): Move these aliases here. (map-plist): #'nsublis is now built-in, but at this point #'eql isn't necessarily available as a test; use #'eq. * obsolete.el (cl-delete-duplicates): Make this available for old compiler macros and old code. (memql): Document that this is equivalent to #'member*, and worse. * cl.el (adjoin, subst): Removed. These are in C. 2010-12-30 Aidan Kehoe <kehoea@parhasard.net> * simple.el (assoc-ignore-case): Remove a duplicate definition of this function (it's already in subr.el). * iso8859-1.el (char-width): On non-Mule, make this function equivalent to that produced by (constantly 1), but preserve its docstring. * subr.el (subst-char-in-string): Define this in terms of #'substitute, #'nsubstitute. (string-width): Define this using #'reduce and #'char-width. (char-width): Give this a simpler definition, it makes far more sense to check for mule at load time and redefine, as we do in iso8859-1.el. (store-substring): Implement this in terms of #'replace, now #'replace is cheap. 2010-12-30 Aidan Kehoe <kehoea@parhasard.net> * update-elc.el (lisp-files-needed-for-byte-compilation) (lisp-files-needing-early-byte-compilation): cl-macs belongs in the former, not the latter, it is as fundamental as bytecomp.el. 2010-12-30 Aidan Kehoe <kehoea@parhasard.net> * cl.el: Provde the Common Lisp program-error, type-error as error symbols. This doesn't nearly go far enough for anyone using the Common Lisp errors. 2010-12-29 Aidan Kehoe <kehoea@parhasard.net> * cl-macs.el (delete-duplicates): If the form has an incorrect number of arguments, don't attempt a compiler macroexpansion. 2010-12-29 Aidan Kehoe <kehoea@parhasard.net> * cl-macs.el (cl-safe-expr-p): Forms that start with the symbol lambda are also safe. 2010-12-29 Aidan Kehoe <kehoea@parhasard.net> * cl-macs.el (= < > <= >=): For these functions' compiler macros, the optimisation is safe even if the first and the last arguments have side effects, since they're only used the once. 2010-12-29 Aidan Kehoe <kehoea@parhasard.net> * cl-macs.el (inline-side-effect-free-compiler-macros): Unroll a loop here at macro-expansion time, so these compiler macros are compiled. Use #'eql instead of #'eq in a couple of places for better style. 2010-12-29 Aidan Kehoe <kehoea@parhasard.net> * cl-extra.el (notany, notevery): Avoid some dynamic scope stupidity with local variable names in these functions, when they weren't prefixed with cl-; go into some more detail in the doc strings. 2010-12-29 Aidan Kehoe <kehoea@parhasard.net> * byte-optimize.el (side-effect-free-fns): #'remove, #'remq are free of side-effects. (side-effect-and-error-free-fns): Drop dot, dot-marker from the list. 2010-11-17 Aidan Kehoe <kehoea@parhasard.net> * cl-extra.el (coerce): In the argument list, name the first argument OBJECT, not X; the former name was always used in the doc string and is clearer. Handle vector type specifications which include the length of the target sequence, error if there's a mismatch. * cl-macs.el (cl-make-type-test): Handle type specifications starting with the symbol 'eql. 2010-11-14 Aidan Kehoe <kehoea@parhasard.net> * cl-macs.el (eql): Don't remove the byte-compile property of this symbol. That was necessary to override a bug in bytecomp.el where #'eql was confused with #'eq, which bug we no longer have. If neither expression is constant, don't attempt to handle the expression in this compiler macro, leave it to byte-compile-eql, which produces better code anyway. * bytecomp.el (eq): #'eql is not the function associated with the byte-eq byte code. (byte-compile-eql): Add an explicit compile method for this function, for cases where the cl-macs compiler macro hasn't reduced it to #'eq or #'equal. 2010-10-25 Aidan Kehoe <kehoea@parhasard.net> Add compiler macros and compilation sanity-checking for various functions that take keywords. * byte-optimize.el (side-effect-free-fns): #'symbol-value is side-effect free and not error free. * bytecomp.el (byte-compile-normal-call): Check keyword argument lists for sanity; store information about the positions where keyword arguments start using the new byte-compile-keyword-start property. * cl-macs.el (cl-const-expr-val): Take a new optional argument, cl-not-constant, defaulting to nil, in this function; return it if the expression is not constant. (cl-non-fixnum-number-p): Make this into a separate function, we want to pass it to #'every. (eql): Use it. (define-star-compiler-macros): Use the same code to generate the member*, assoc* and rassoc* compiler macros; special-case some code in #'add-to-list in subr.el. (remove, remq): Add compiler macros for these two functions, in preparation for #'remove being in C. (define-foo-if-compiler-macros): Transform (remove-if-not ...) calls to (remove ... :if-not) at compile time, which will be a real win once the latter is in C. (define-substitute-if-compiler-macros) (define-subst-if-compiler-macros): Similarly for these functions. (delete-duplicates): Change this compiler macro to use #'plists-equal; if we don't have information about the type of SEQUENCE at compile time, don't bother attempting to inline the call, the function will be in C soon enough. (equalp): Remove an old commented-out compiler macro for this, if we want to see it it's in version control. (subst-char-in-string): Transform this to a call to nsubstitute or nsubstitute, if that is appropriate. * cl.el (ldiff): Don't call setf here, this makes for a load-time dependency problem in cl-macs.el 2010-06-14 Stephen J. Turnbull <stephen@xemacs.org> * term/vt100.el: Refer to XEmacs, not GNU Emacs, in permissions. * term/bg-mouse.el: * term/sup-mouse.el: Put copyright notice in canonical "Copyright DATE AUTHOR" form. Refer to XEmacs, not GNU Emacs, in permissions. * site-load.el: Add permission boilerplate. * mule/canna-leim.el: * alist.el: Refer to XEmacs, not APEL/this program, in permissions. * mule/canna-leim.el: Remove my copyright, I've assigned it to the FSF. 2010-06-14 Stephen J. Turnbull <stephen@xemacs.org> * gtk.el: * gtk-widget-accessors.el: * gtk-package.el: * gtk-marshal.el: * gtk-compose.el: * gnome.el: Add copyright notice based on internal evidence. 2010-06-14 Stephen J. Turnbull <stephen@xemacs.org> * easymenu.el: Add reference to COPYING to permission notice. * gutter.el: * gutter-items.el: * menubar-items.el: Fix typo "Xmacs" in permissions notice. 2010-06-14 Stephen J. Turnbull <stephen@xemacs.org> * auto-save.el: * font.el: * fontconfig.el: * mule/kinsoku.el: Add "part of XEmacs" text to permission notice. 2010-10-14 Aidan Kehoe <kehoea@parhasard.net> * byte-optimize.el (side-effect-free-fns): * cl-macs.el (remf, getf): * cl-extra.el (tailp, cl-set-getf, cl-do-remf): * cl.el (ldiff, endp): Tighten up Common Lisp compatibility for #'ldiff, #'endp, #'tailp; add circularity checking for the first two. #'cl-set-getf and #'cl-do-remf were Lisp implementations of #'plist-put and #'plist-remprop; change the names to aliases, changes the macros that use them to using #'plist-put and #'plist-remprop directly. 2010-10-12 Aidan Kehoe <kehoea@parhasard.net> * abbrev.el (fundamental-mode-abbrev-table, global-abbrev-table): Create both these abbrev tables using the usual #'define-abbrev-table calls, rather than attempting to special-case them. * cl-extra.el: Force cl-macs to be loaded here, if cl-extra.el is being loaded interpreted. Previously other, later files would redundantly call (load "cl-macs") when interpreted, it's more reasonable to do it here, once. * cmdloop.el (read-quoted-char-radix): Use defcustom here, we don't have any dump-order dependencies that would prevent that. * custom.el (eval-when-compile): Don't load cl-macs when interpreted or when byte-compiling, rely on cl-extra.el in the former case and the appropriate entry in bytecomp-load-hook in the latter. Get rid of custom-declare-variable-list, we have no dump-time dependencies that would require it. * faces.el (eval-when-compile): Don't load cl-macs when interpreted or when byte-compiling. * packages.el: Remove some inaccurate comments. * post-gc.el (cleanup-simple-finalizers): Use #'delete-if-not here, now the order of preloaded-file-list has been changed to make it available. * subr.el (custom-declare-variable-list): Remove. No need for it. Also remove a stub define-abbrev-table from this file, given the current order of preloaded-file-list there's no need for it. 2010-10-10 Aidan Kehoe <kehoea@parhasard.net> * bytecomp.el (byte-compile-constp) Forms quoted with FUNCTION are also constant. (byte-compile-initial-macro-environment): In #'the, if FORM is constant and does not match TYPE, warn at byte-compile time. 2010-10-10 Aidan Kehoe <kehoea@parhasard.net> * backquote.el (bq-vector-contents, bq-list*): Remove; the former is equivalent to (append VECTOR nil), the latter to (list* ...). (bq-process-2): Use (append VECTOR nil) instead of using #'bq-vector-contents to convert to a list. (bq-process-1): Now we use list* instead of bq-list * subr.el (list*): Moved from cl.el, since it is now required to be available the first time a backquoted form is encountered. * cl.el (list*): Move to subr.el. 2010-09-16 Aidan Kehoe <kehoea@parhasard.net> * test-harness.el (Check-Message): Add an omitted comma here, thank you the buildbot. 2010-09-16 Aidan Kehoe <kehoea@parhasard.net> * hash-table.el (hash-table-key-list, hash-table-value-list) (hash-table-key-value-alist, hash-table-key-value-plist): Remove some useless #'nreverse calls in these files; our hash tables have no order, it's not helpful to pretend they do. * behavior.el (read-behavior): Do the same in this file, in some code evidently copied from hash-table.el. 2010-09-16 Aidan Kehoe <kehoea@parhasard.net> * info.el (Info-insert-dir): * format.el (format-deannotate-region): * files.el (cd, save-buffers-kill-emacs): Use #'some, #'every and related functions for applying boolean operations to lists, instead of rolling our own ones that cons and don't short-circuit. 2010-09-16 Aidan Kehoe <kehoea@parhasard.net> * bytecomp.el (byte-compile-initial-macro-environment): * cl-macs.el (the): Rephrase the docstring, make its implementation when compiling files a little nicer. 2010-09-16 Aidan Kehoe <kehoea@parhasard.net> * descr-text.el (unidata-initialize-unicodedata-database) (unidata-initialize-unihan-database, describe-char-unicode-data) (describe-char-unicode-data): Wrap calls to the database functions with (with-fboundp ...), avoiding byte compile warnings on builds without support for the database functions. (describe-char): (reduce #'max ...), not (apply #'max ...), no need to cons needlessly. (describe-char): Remove a redundant lambda wrapping #'extent-properties. (describe-char-unicode-data): Call #'nsubst when replacing "" with nil in the result of #'split-string, instead of consing inside mapcar. 2010-09-16 Aidan Kehoe <kehoea@parhasard.net> * x-faces.el (x-available-font-sizes): * specifier.el (let-specifier): * package-ui.el (pui-add-required-packages): * msw-faces.el (mswindows-available-font-sizes): * modeline.el (modeline-minor-mode-menu): * minibuf.el (minibuf-directory-files): Replace the O2N (delq nil (mapcar (lambda (W) (and X Y)) Z)) with the ON (mapcan (lambda (W) (and X (list Y))) Z) in these files. 2010-09-16 Aidan Kehoe <kehoea@parhasard.net> * cl-macs.el (= < > <= >=): When these functions are handed more than two arguments, and those arguments have no side effects, transform to a series of two argument calls, avoiding funcall in the byte-compiled code. * mule/mule-cmds.el (finish-set-language-environment): Take advantage of this change in a function called 256 times at startup. 2010-09-16 Aidan Kehoe <kehoea@parhasard.net> * bytecomp.el (byte-compile-function-form, byte-compile-quote) (byte-compile-quote-form): Warn at compile time, and error at runtime, if a (quote ...) or a (function ...) form attempts to quote more than one object. 2010-09-16 Aidan Kehoe <kehoea@parhasard.net> * byte-optimize.el (byte-optimize-apply): Transform (apply 'nconc (mapcar ...)) to (mapcan ...); warn about use of the first idiom. * update-elc.el (do-autoload-commands): * packages.el (packages-find-package-library-path): * frame.el (frame-list): * extents.el (extent-descendants): * etags.el (buffer-tag-table-files): * dumped-lisp.el (preloaded-file-list): * device.el (device-list): * bytecomp-runtime.el (proclaim-inline, proclaim-notinline) Use #'mapcan, not (apply #'nconc (mapcar ...) in all these files. * bytecomp-runtime.el (eval-when-compile, eval-and-compile): In passing, mention that these macros also evaluate the body when interpreted. tests/ChangeLog addition: 2011-02-07 Aidan Kehoe <kehoea@parhasard.net> * automated/lisp-tests.el: Test lexical scope for `block', `return-from'; add a Known-Bug-Expect-Failure for a contorted example that fails when byte-compiled.
author Aidan Kehoe <kehoea@parhasard.net>
date Mon, 07 Feb 2011 12:01:24 +0000
parents 0784d089fdc9
children
line wrap: on
line source

@comment  node-name,  next,  previous,  up
@node Windows and Menus, Edit, Entering, Top
@chapter XEmacs Windows and Menus
@cindex selected window
@cindex windows
@findex delete-window
@findex delete-other-windows
@findex scroll-other-window
  
  The first section of this chapter will show you how you can manipulate
XEmacs Windows and the other section will explain the Pull-down Menus of
an XEmacs window.

@comment  node-name,  next,  previous,  up
@menu
* XEmacs Window::               Manipulating XEmacs Windows
* Pull-down Menus::             Description of XEmacs Pull-down Menus
@end menu

@node XEmacs Window, Pull-down Menus, Windows and Menus, Windows and Menus
@section XEmacs Windows
  When you use XEmacs under X, you can open multiple windows and each
window can display one buffer or multiple parts of one buffer. Each window
will have its own @dfn{mode line} and @dfn{echo area}. At any one time
there is only one @dfn{selected window} and the buffer it displays is
the @dfn{selected buffer}. There are some commands for manipulating
windows:

@kindex C-x 0
@kindex C-x 1
@kindex C-x 2
@kindex C-x 3
@kindex C-x 4
@kindex M-C-v
@table @kbd
@item M-C-v
@findex scroll-other-window
This command will scroll the window which is not @dfn{selected} 
(@code{scroll-other-window}).

@findex delete-window
@item C-x 0
This command will get rid of the selected window (@code{delete-window}).
That is a zero. If there is more than one Emacs frame, deleting the
sole remaining window on that frame deletes the frame as well. If the
current frame is the only frame, it is not deleted.

@findex delete-other-windows 
@item C-x 1
This command will get rid of all the windows except the selected one. 
(@code{delete-other-windows}). For example, if you use the @b{Describe
variable} option from the @b{Help} menu, the window will split
vertically and the bottom window will contain documentation for that
variable. After you are done looking at that variable's documentation
you might want to come back to your original single window. Just type
@kbd{C-x 1} after your cursor is in the top window (the window which you
want to keep) and hit @key{RET}.

@findex split-window-vertically 
@item C-x 2
This command will split the selected window into two windows, one above
the other (@code{split-window-vertically}). Both the windows will start
out by displaying the same buffer. The window in which you have your
cursor will be your @dfn{selected window}.

@findex split-window-horizontally
@item C-x 3
This will split the selected window into two windows positioned side by
side (@code{split-window-horizontally}). A line of vertical bars will
separate the window.
@end table
@noindent

You can select a buffer in another window by using some other
commands. These commands all have a prefix key @kbd{C-x 4} 
@table @kbd
@kindex C-x 4 b
@kindex C-x 4 f
@kindex C-x 4 d
@kindex C-x 4 m
@findex switch-to-buffer-other-window
@findex find-file-other-window
@findex dired-other-window
@findex mail-other-window
@item C-x 4 b @var{bufname} @key{RET}
This command will select a buffer @var{bufname} in another window.  This
runs @code{switch-to-buffer-other-window}. It will prompt you for a
buffername.

@item C-x 4 f @var{filename} @key{RET}
Visit file @var{filename} and select its buffer in another window.  This
runs @code{find-file-other-window}.  @xref{Visiting,,,xemacs,XEmacs User's
Manual}. It will prompt you for a filename.

@item C-x 4 d @var{directory} @key{RET}
Select a Dired buffer for directory @var{directory} in another window.
This runs @code{dired-other-window}.  @xref{Dired,,,xemacs,XEmacs User's
Manual}.

@item C-x 4 m
Start composing a mail message in another window.  This runs
@code{mail-other-window}, and its same-window version is @kbd{C-x m}.
@xref{Sending Mail,,,xemacs,XEmacs User's Manual}, for information on how
to @b{S}end @b{M}ail using XEmacs. @xref{Reading Mail With
Rmail,,,xemacs,XEmacs User's Manual}, for information on reading mail using
@b{Rmail}.
@end table

  
  If you click the right button on the mouse on a mode line, you will
get a menu with following options:
@cindex windows
@cindex pull-down-menus
@cindex menus
@table @b
@item Delete Window
Choosing this menu will remove the window above this modeline from the frame.
@item Delete Other Windows
Delete all windows on the frame except for the one above this modeline.
@item Split Window
Split the window above the mode line in half, creating another window. 
@item Split Window Horizontally
Split the window above the mode line in half horizontally, so that there
will be two windows side-by-side.
@item Balance Windows
Readjust the sizes of all windows on the frame until all windows have
roughly the same number of lines.
@end table


@comment  node-name,  next,  previous,  up
@node Pull-down Menus,  , XEmacs Window, Windows and Menus
@section XEmacs Pull-down Menus

When you run XEmacs under X, each Emacs frame has a menu-bar at the top
which provides commands for editing, help and other
options. All these options are also available via key commands, the
menus just provide convenient short-cuts. The key commands are displayed
right besides some of the options. The following is a brief
description of the four default menus on the menu bar:

@menu
* File menu::                   Items on the File menu
* Edit menu::                   Items on the Edit menu
* Options Menu::                Items on the Options Menu
* Buffers Menu::                Items on the Buffers Menu
* Help menu::                   The Help Menu at the extreme right on
                                the frame
@end menu

@node File menu, Edit menu, Pull-down Menus, Pull-down Menus
@subsection The File Menu
@cindex File menu
@cindex Open in New Frame... menu item
@cindex Open ... menu item
@cindex Insert File... menu item
@cindex Save Buffer menu item
@cindex Save Buffer As ... menu item
@cindex Revert Buffer menu item
@cindex Kill Buffer menu item
@cindex Print Buffer menu item
@cindex New Frame menu item
@cindex Delete Frame menu item
@cindex Split Frame
@cindex Un-split (Keep This)
@cindex Un-split (Keep Others)
@cindex Exit Emacs menu item

The @b{File} menu bar contains the following items. To choose a
particular option, press the left mouse button and drag it to the item
you wish to select. Then release the button.

@table @b
@item Open...
This option will prompt you for a file name. You will get a message in
the echo area:

@example
Find File: 
@end example
@noindent
After Find File, there might be a directory path also. After you type
the file name and press @key{RET} the file will be loaded into a new
buffer.  

@item Open in New Frame...
It prompts you for a file name and loads that file in a new buffer in
a new frame. You can open many frames for the same Emacs session. You
can delete the frame by selecting @b{Delete Frame}. 

@item Insert File...
Prompts you for a filename and inserts the contents of this filename in
your current buffer. Position your cursor at the place you wish to
insert the file and select this option. You will get the following
message in the echo area:

@example
Insert file:
@end example
@noindent
Insert the file name and press @key{RET}.

@item Save <Buffername>
It saves the changes you have made to the buffer. If you have made
changes which are not saved yet, the option will appear dark, otherwise
it will be light and unselectable. If you do not wish to save the
changes, select @b{Revert Buffer}.

@item Save As...
Prompts you for a filename and saves the current buffer in that file. It
loads the new file if the filename you specify is different from the one
you were working with.

@item Print Buffer <buffername>
Prints a hardcopy of the current or @dfn{selected} buffer.

@item New Frame
Opens a new frame with @b{*scratch*} as the default buffer. It doesn't
prompt you for a filename. To open a file you need to go to that frame
and select @b{Open...}

@item Split Frame
Splits the current window into two equal-sized windows with the same
buffer. To get back a single frame, select @b{Un-Split (Keep
This)}. @xref{XEmacs Window}, for more information about windows. 

@item Un-Split (Keep This)
If the frame contains multiple windows, it will remove all windows
except the selected one. 

@item Un-Split (Keep Others)
If the frame contains multiple windows, it will remove the selected
window and keep the other one.

@item Revert Buffer <buffername>
If you do not wish to save the changes you made to the file since you
opened it, select this option. It will restore the last saved version of
the file to the current buffer.

@item Kill Buffer <buffername>
It will kill the current buffer. If will prompt you if there are unsaved
changes. 

@item Exit Emacs
It will kill the Emacs @dfn{process} as opposed to simply killing the
@dfn{buffer}. Before it kills the process, it will prompt you as to
which unsaved buffers you wish to save by going through the list of the
buffers. 

@end table

@comment  node-name,  next,  previous,  up
@menu
* Edit menu::                   Items on the Edit Menu
* Options Menu::                Items on the Options Menu
* Buffers Menu::                Items on the Buffers Menu
* Help menu::                   The Help Menu at the extreme right on
                                the frame
@end menu

@node Edit menu, Options Menu, File menu, Pull-down Menus
@subsection The Edit Menu
@cindex Undo menu item
@cindex Cut menu item
@cindex Copy menu item
@cindex Paste menu item
@cindex Clear menu item
@cindex Start Macro Recording menu item
@cindex End Macro Recording menu item
@cindex Execute Last Macro menu item

Most of the commands in this menu work on a block of text or a selected
region. The text will be highlighted as you select it.
@table @b
@item Undo 
Undoes the previous command.  If you type something by mistake you can
use this command. For example, if you select @b{Insert File...} from the
@b{File} menu and insert a wrong file by mistake, you can select this
item and it will remove the inserted file. It undoes a batch of text
which is worth an emacs command.

@item Cut
Removes the selected text block from the current buffer, makes it the X
clipboard selection, and places it in the kill ring 
(@pxref{Moving Text}). Before executing this command, you have to select
a region using Emacs region selection commands or with the
mouse. @xref{Selecting Text}. 

@item Copy 
Makes a selected text block the X clipboard selection, and places it in
the kill ring.  You can select text using one of the Emacs region
selection commands or by selecting a text region with the
mouse. @xref{Selecting Text}, for more information.

@item Paste 
Inserts the current value of the X clipboard selection in the current
buffer.  Note that this is not necessarily the same as the Emacs
@code{yank} command, because the Emacs kill ring and the X clipboard
selection are not the same thing.  You can paste in text you have placed
in the clipboard using @b{Copy} or @b{Cut}.  You can also use @b{Paste}
to insert text that was pasted into the clipboard from other
applications. @xref{X Clipboard Selection,,,xemacs,XEmacs User's Manual},
for information on using Clipboard Selection.

@item Clear
Removes the selected text block from the current buffer but does not
place it in the kill ring or the X clipboard selection. You will not be
able to get this text back.

@item Start Macro Recording
After selecting this, Emacs will remember every keystroke you type until
@b{End Macro Recording} is selected.  

@item End Macro Recording
Selecting this tells emacs to stop remembering your keystrokes. 

@item Execute Last Macro
Selecting this item will cause emacs to re-interpret all of the
keystrokes which were saved between selections of the @b{Start Macro
Recording} and @b{End Macro Recording} menu items.  You can now execute
the most recent keyboard macro. @xref{Keyboard Macros,,,xemacs,XEmacs
User's Manual}, for further information.
@end table

@comment  node-name,  next,  previous,  up
@node Options Menu, Buffers Menu, Edit menu, Pull-down Menus
@subsection The Options Menu
@cindex Options menu
@cindex Read Only menu item
@cindex Case Sensitive Search menu item
@cindex Overstrike menu item
@cindex Auto Delete Selection menu item
@cindex Teach Extended Commands menu item
@cindex Syntax Highlighting menu item
@cindex Paren Highlighting menu item
@cindex Font menu item
@cindex Size menu item
@cindex Weight menu item
@cindex Buffers Menu Length... menu item
@cindex Buffers Sub-Menus menu item
@cindex Save Options

There are sub-menus for some of the menus which you will need to
select. If sub-menus exist for an item, they will be displayed
automatically when you drag the mouse on that item. The items in this
menu provide some fancy editing operations.

@table @b
@item Read Only
Selecting this item will cause the buffer to visit the file in a 
read-only mode. Changes to the file will not be allowed. 

@item Case Sensitive Search
Selecting this item will cause searches to be case-sensitive. If 
its not selected then searches will ignore case. This option is 
local to the buffer. For example, if this item is selected and you are
searching for @samp{Smile}, then an occurrence of @samp{smile} will not
be recognized because of the smaller case of @samp{s}.

@item Overstrike
After selecting this item, when you type letters they will replace 
existing text on a one-to-one basis, rather than pushing it to the 
right. At the end of a line, such characters extend the line. Before 
a tab, such characters insert until the tab is filled in. 

@item Auto Delete Selection
Selecting this item will cause automatic deletion of the selected 
region. After you select a region and hit the @key{RET} key, the
selected text will be deleted. The typed text will replace the selection
if the selection is active (i.e. if its highlighted). If the option is
not selected then the typed text is just inserted at the cursor.

@item Teach Extended Commands
After you  select this item, any time you execute a command with 
@kbd{M-x} which has a shorter keybinding, you will be shown the 
alternate binding before the command executes. For example if you type
@kbd{M-x find-file-other-window} which performs the same function as the
@b{Open in Other Window...} in @b{File} menu you will see the following
message:

@example
M-x find-file-other-window (bound to keys: C-x 4 f, C-x 4 C-f)
@end example 

@item Syntax Highlighting
You can customize your @code{init.el} file to include the font-lock mode
so that when you select this item, the comments will be displayed in one
face, strings in another, reserved words in another, and so
on. @xref{Customization,,,xemacs,XEmacs User's Manual}, for more
information on customizing @code{init.el} file.  After selecting this
item, you will find your code a lot easier to read. When @b{Fonts} is
selected, different parts of the program will appear in different
Fonts. When @b{Colors} is selected, then the program will be displayed
in different colors. Selecting @b{None} causes the program to appear in
just one Font and Color. Selecting @b{Less} resets the Fonts and Colors
to a fast, minimal set of decorations. Selecting @b{More} resets the
Fonts and Colors to a larger set of decorations. For example, if
@b{Less} is selected (which is the default setting) then you might have
all comments in green color. It does not matter what the comments
contain. Whereas, if @b{More} is selected then a function name in the
comments themselves might appear in a different Color or Font. Even
though the comments themselves might appear in green color, a function
name @dfn{within} the comments might appear in red color.

@item Paren Highlighting
After selecting @b{Blink} from this item, if you place the cursor 
on a parenthesis, the matching parenthesis will blink. If you select 
@b{Highlight} and place the cursor on a parenthesis, the whole 
expression of the parenthesis under the cursor will be highlighted. 
Selecting @b{None} will turn off the options (regarding @b{Paren 
Highlighting}) which you had selected earlier.@refill

@item Font
You can select any Font for your program by choosing from one of the 
available Fonts. The whole buffer will be converted to the Font you select.

@item Size
You can select any size for the text in your buffer (ranging from @b{2} to @b{24}) by selecting the appropriate option.@refill

@item Weight
You can choose either @b{Bold} or @b{Medium} for the weight of the text
of your buffer.

@item Buffers Menu Length...
Prompts you for the number of buffers to display. Then it will display 
that number of most recently selected buffers.

@item Buffers Sub-Menus
After selection of this item the Buffers menu will contain several 
commands, as submenus of each buffer line. If this item is unselected, 
then there are no submenus for each buffer line, the only command 
available will be selecting that buffer.

@item Save Options
Selecting this item will save the current settings of your Options 
menu to your @code{init.el} file so that the next time you start XEmacs,
you won't need to select the options again.
@end table


@comment  node-name,  next,  previous,  up
@node Buffers Menu, Help menu, Options Menu, Pull-down Menus
@subsection The Buffers Menu
@cindex Buffers menu
The @b{Buffers} menu provides a selection of up to ten buffers and the
item @b{List All Buffers}, which provides a Buffer List. If you select
@b{Buffers Sub-menus} from the @b{Options} menu, you will get some
sub-menus for each of the buffer listing.


@comment  node-name,  next,  previous,  up
@node Help menu,  , Buffers Menu, Pull-down Menus
@subsection The Help Menu
@cindex Help menu

The Help Menu gives you access to Emacs Info and provides a menu
equivalent for some of the choices you have when using @kbd{C-h}. 
@xref{Help}, for more information. 

The @b{Describe variable} and @b{Describe function} will provide
documentation for the corresponding variable or function. The Help menu
also gives access to UNIX online manual pages via the @b{UNIX Manual...}
option.