Mercurial > hg > xemacs-beta
view man/xemacs/cmdargs.texi @ 5169:6c6d78781d59
cleanup of code related to xfree(), better KKCC backtrace capabilities, document XD_INLINE_LISP_OBJECT_BLOCK_PTR, fix some memory leaks, other code cleanup
-------------------- ChangeLog entries follow: --------------------
src/ChangeLog addition:
2010-03-24 Ben Wing <ben@xemacs.org>
* array.h:
* array.h (XD_LISP_DYNARR_DESC):
* dumper.c (pdump_register_sub):
* dumper.c (pdump_store_new_pointer_offsets):
* dumper.c (pdump_reloc_one_mc):
* elhash.c:
* gc.c (lispdesc_one_description_line_size):
* gc.c (kkcc_marking):
* lrecord.h:
* lrecord.h (IF_NEW_GC):
* lrecord.h (enum memory_description_type):
* lrecord.h (enum data_description_entry_flags):
* lrecord.h (struct opaque_convert_functions):
Rename XD_LISP_OBJECT_BLOCK_PTR to XD_INLINE_LISP_OBJECT_BLOCK_PTR
and document it in lrecord.h.
* data.c:
* data.c (finish_marking_weak_lists):
* data.c (continue_marking_ephemerons):
* data.c (finish_marking_ephemerons):
* elhash.c (MARK_OBJ):
* gc.c:
* gc.c (lispdesc_indirect_count_1):
* gc.c (struct):
* gc.c (kkcc_bt_push):
* gc.c (kkcc_gc_stack_push):
* gc.c (kkcc_gc_stack_push_lisp_object):
* gc.c (kkcc_gc_stack_repush_dirty_object):
* gc.c (KKCC_DO_CHECK_FREE):
* gc.c (mark_object_maybe_checking_free):
* gc.c (mark_struct_contents):
* gc.c (mark_lisp_object_block_contents):
* gc.c (register_for_finalization):
* gc.c (mark_object):
* gc.h:
* lisp.h:
* profile.c:
* profile.c (mark_profiling_info_maphash):
Clean up KKCC code related to DEBUG_XEMACS. Rename
kkcc_backtrace() to kkcc_backtrace_1() and add two params: a
`size' arg to control how many stack elements to print and a
`detailed' arg to control whether Lisp objects are printed using
`debug_print()'. Create front-ends to kkcc_backtrace_1() --
kkcc_detailed_backtrace(), kkcc_short_backtrace(),
kkcc_detailed_backtrace_full(), kkcc_short_backtrace_full(), as
well as shortened versions kbt(), kbts(), kbtf(), kbtsf() -- to
call it with various parameter values. Add an `is_lisp' field to
the stack and backtrace structures and use it to keep track of
whether an object pushed onto the stack is a Lisp object or a
non-Lisp structure; in kkcc_backtrace_1(), don't try to print a
non-Lisp structure as a Lisp object.
* elhash.c:
* extents.c:
* file-coding.c:
* lrecord.h:
* lrecord.h (IF_NEW_GC):
* marker.c:
* marker.c (Fmarker_buffer):
* mule-coding.c:
* number.c:
* rangetab.c:
* specifier.c:
New macros IF_OLD_GC(), IF_NEW_GC() to simplify declaration of
Lisp objects when a finalizer may exist in one but not the other.
Use them appropriately.
* extents.c (finalize_extent_info):
Don't zero out data->soe and data->extents before trying to free,
else we get memory leaks.
* lrecord.h (enum lrecord_type):
Make the first lrecord type have value 1 not 0 so that 0 remains
without implementation and attempts to interpret zeroed memory
as a Lisp object will be more obvious.
* array.c (Dynarr_free):
* device-msw.c (msprinter_delete_device):
* device-tty.c (free_tty_device_struct):
* device-tty.c (tty_delete_device):
* dialog-msw.c (handle_directory_dialog_box):
* dialog-x.c:
* emacs.c (free_argc_argv):
* emodules.c (attempt_module_delete):
* file-coding.c (chain_finalize_coding_stream_1):
* file-coding.c (chain_finalize_coding_stream):
* glyphs-eimage.c:
* glyphs-eimage.c (jpeg_instantiate_unwind):
* glyphs-eimage.c (gif_instantiate_unwind):
* glyphs-eimage.c (png_instantiate_unwind):
* glyphs-eimage.c (tiff_instantiate_unwind):
* imgproc.c:
* imgproc.c (build_EImage_quantable):
* insdel.c (uninit_buffer_text):
* mule-coding.c (iso2022_finalize_detection_state):
* objects-tty.c (tty_finalize_color_instance):
* objects-tty.c (tty_finalize_font_instance):
* objects-tty.c (tty_font_list):
* process.c:
* process.c (finalize_process):
* redisplay.c (add_propagation_runes):
* scrollbar-gtk.c:
* scrollbar-gtk.c (gtk_free_scrollbar_instance):
* scrollbar-gtk.c (gtk_release_scrollbar_instance):
* scrollbar-msw.c:
* scrollbar-msw.c (mswindows_free_scrollbar_instance):
* scrollbar-msw.c (unshow_that_mofo):
* scrollbar-x.c (x_free_scrollbar_instance):
* scrollbar-x.c (x_release_scrollbar_instance):
* select-x.c:
* select-x.c (x_handle_selection_request):
* syntax.c:
* syntax.c (uninit_buffer_syntax_cache):
* text.h (eifree):
If possible, whenever we call xfree() on a field in a structure,
set the field to 0 afterwards. A lot of code is written so that
it checks the value being freed to see if it is non-zero before
freeing it -- doing this and setting the value to 0 afterwards
ensures (a) we won't try to free twice if the cleanup code is
called twice; (b) if the object itself stays around, KKCC won't
crash when attempting to mark the freed field.
* rangetab.c:
Add a finalization method when not NEW_GC to avoid memory leaks.
(#### We still get memory leaks when NEW_GC; need to convert gap
array to Lisp object).
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Wed, 24 Mar 2010 01:22:51 -0500 |
parents | fd8a9a4d81d9 |
children |
line wrap: on
line source
@node Command Switches, Startup Paths, Exiting, Top @section Command Line Switches and Arguments @cindex command line arguments @cindex arguments (from shell) XEmacs supports command line arguments you can use to request various actions when invoking Emacs. The commands are for compatibility with other editors and for sophisticated activities. If you are using XEmacs under the X window system, you can also use a number of standard Xt command line arguments. Command line arguments are not usually needed for editing with Emacs; new users can skip this section. Many editors are designed to be started afresh each time you want to edit. You start the editor to edit one file; then exit the editor. The next time you want to edit either another file or the same one, you start the editor again. Under these circumstances, it makes sense to use a command line argument to say which file to edit. The recommended way to use XEmacs is to start it only once, just after you log in, and do all your editing in the same Emacs process. Each time you want to edit a file, you visit it using the existing Emacs. Emacs creates a new buffer for each file, and (unless you kill some of the buffers) Emacs eventually has many files in it ready for editing. Usually you do not kill the Emacs process until you are about to log out. Since you usually read files by typing commands to Emacs, command line arguments for specifying a file when Emacs is started are seldom needed. Emacs accepts command-line arguments that specify files to visit, functions to call, and other activities and operating modes. If you are running XEmacs under the X window system, a number of standard Xt command line arguments are available, as well as a few X parameters that are XEmacs-specific. Options with long names with a single initial hyphen are also recognized with the GNU double initial hyphen syntax. (The reverse is not true.) The following subsections list: @itemize @bullet @item Command line arguments that you can always use @item Command line arguments that have to appear at the beginning of the argument list @item Command line arguments that are only relevant if you are running XEmacs under X @end itemize @subsection Command Line Arguments for Any Position Command line arguments are processed in the order they appear on the command line; however, certain arguments (the ones in the second table) must be at the front of the list if they are used. Here are the arguments allowed: @table @samp @item @var{file} Visit @var{file} using @code{find-file}. @xref{Visiting}. @item +@var{linenum} @var{file} Visit @var{file} using @code{find-file}, then go to line number @var{linenum} in it. @item -load @var{file} @itemx -l @var{file} Load a file @var{file} of Lisp code with the function @code{load}. @xref{Lisp Libraries}. @item -funcall @var{function} @itemx -f @var{function} Call Lisp function @var{function} with no arguments. @item -eval @var{function} Interpret the next argument as a Lisp expression, and evaluate it. You must be very careful of the shell quoting here. @item -insert @var{file} @itemx -i @var{file} Insert the contents of @var{file} into the current buffer. This is like what @kbd{M-x insert-buffer} does; @xref{Misc File Ops}. @item -kill Exit from Emacs without asking for confirmation. Always the last argument processed, no matter where it appears in the command line. @item -version @itemx -V Prints version information. This implies @samp{-batch}. @example % xemacs -version XEmacs 19.13 of Mon Aug 21 1995 on willow (usg-unix-v) [formerly Lucid Emacs] @end example @item -help Prints a summary of command-line options and then exits. @end table @subsection Command Line Arguments (Beginning of Line Only) The following arguments are recognized only at the beginning of the command line. If more than one of them appears, they must appear in the order in which they appear in this table. @table @samp @item --show-dump-id @itemx -sd Print the ID for the new portable dumper's dump file on the terminal and exit. (Prints an error message and exits if XEmacs was not configured @samp{--pdump}.) @item --no-dump-file @itemx -nd Don't load the dump file. Roughly equivalent to old temacs. (Ignored if XEmacs was not configured @samp{--pdump}.) @item --terminal @var{file} @itemx -t @var{file} Use @var{file} instead of the terminal for input and output. This implies the @samp{-nw} option, documented below. @cindex batch mode @item -batch Run Emacs in @dfn{batch mode}, which means that the text being edited is not displayed and the standard Unix interrupt characters such as @kbd{C-z} and @kbd{C-c} continue to have their normal effect. Emacs in batch mode outputs to @code{stderr} only what would normally be printed in the echo area under program control. Batch mode is used for running programs written in Emacs Lisp from shell scripts, makefiles, and so on. Normally the @samp{-l} switch or @samp{-f} switch will be used as well, to invoke a Lisp program to do the batch processing. @samp{-batch} implies @samp{-q} (do not load an init file). It also causes Emacs to kill itself after all command switches have been processed. In addition, auto-saving is not done except in buffers for which it has been explicitly requested. @item --no-windows @itemx -nw Start up XEmacs in TTY mode (using the TTY XEmacs was started from), rather than trying to connect to an X display. Note that this happens automatically if the @samp{DISPLAY} environment variable is not set. @item -debug-init Enter the debugger if an error in the init file occurs. @item -debug-paths Displays information on how XEmacs constructs the various paths into its hierarchy on startup. (See also @pxref{Startup Paths}.) @item -unmapped Do not map the initial frame. This is useful if you want to start up XEmacs as a server (e.g. for gnuserv screens or external client widgets). @item -no-init-file @itemx -q Do not load your Emacs init file. @xref{Init File}. @item -no-site-file Do not load the site-specific init file @file{lisp/site-start.el}. @item -no-autoloads Do not load global symbol files (@file{auto-autoloads}) at startup. This implies @samp{-vanilla}. @item -no-early-packages Do not process early packages. (For more information on startup issues concerning the package system, @xref{Startup Paths}.) @item -script @var{file} @item --script @var{file} Load @var{file} as a (compiled or interpreted) Lisp file; do not load any window-system or TTY code, do not load the user init file, the site file, or the early packages. This is comparable to running @samp{xemacs} @samp{-batch} @samp{-l} @var{file}. You can also specify this flag implicitly by calling the XEmacs binary with a value for @samp{argv[0]} of @samp{xemacs-script}, normally by means of a symbolic link. On a POSIX system, this means that adding the line: @example #!/usr/bin/env xemacs-script @end example at the start of an XEmacs Lisp file, and changing that file's permissions to executable, creates a script that can be invoked by typing the path to the file. XEmacs has logic to ignore the #! line at the start of the script, so that won't cause an error. @item -vanilla This is equivalent to @samp{-q -no-site-file -no-early-packages}. @item -user-init-file @var{file} Load @var{file} as your Emacs init file instead of @file{~/.xemacs/init.el}/@file{~/.emacs}. @item -user-init-directory @var{directory} Use @var{directory} as the location of your early package hierarchies and the various user-specific initialization files. @item -user @var{user} @itemx -u @var{user} Equivalent to @samp{-user-init-file ~@var{user}/.xemacs/init.el -user-init-directory ~@var{user}/.xemacs}, or @samp{-user-init-file ~@var{user}/.emacs -user-init-directory ~@var{user}/.xemacs}, whichever init file comes first. @xref{Init File}. @end table @vindex command-line-args Note that the init file can get access to the command line argument values as the elements of a list in the variable @code{command-line-args}. (The arguments in the second table above will already have been processed and will not be in the list.) The init file can override the normal processing of the other arguments by setting this variable. One way to use command switches is to visit many files automatically: @example xemacs *.c @end example @noindent passes each @code{.c} file as a separate argument to Emacs, so that Emacs visits each file (@pxref{Visiting}). Here is an advanced example that assumes you have a Lisp program file called @file{hack-c-program.el} which, when loaded, performs some useful operation on the current buffer, expected to be a C program. @example xemacs -batch foo.c -l hack-c-program -f save-buffer -kill > log @end example @noindent Here Emacs is told to visit @file{foo.c}, load @file{hack-c-program.el} (which makes changes in the visited file), save @file{foo.c} (note that @code{save-buffer} is the function that @kbd{C-x C-s} is bound to), and then exit to the shell from which the command was executed. @samp{-batch} guarantees there will be no problem redirecting output to @file{log}, because Emacs will not assume that it has a display terminal to work with. @subsection Command Line Arguments (for XEmacs Under X) @vindex frame-title-format @vindex frame-icon-title-format If you are running XEmacs under X, a number of options are available to control color, border, and window title and icon name: @table @samp @item -title @var{title} @itemx -wn @var{title} @itemx -T @var{title} Use @var{title} as the window title. This sets the @code{frame-title-format} variable, which controls the title of the X window corresponding to the selected frame. This is the same format as @code{mode-line-format}. @item -iconname @var{title} @itemx -in @var{title} Use @var{title} as the icon name. This sets the @code{frame-icon-title-format} variable, which controls the title of the icon corresponding to the selected frame. @item -mc @var{color} Use @var{color} as the mouse color. @item -cr @var{color} Use @var{color} as the text-cursor foreground color. @item -private Install a private colormap for XEmacs. @end table In addition, XEmacs allows you to use a number of standard Xt command line arguments. @table @samp @item -background @var{color} @itemx -bg @var{color} Use @var{color} as the background color. @item -bordercolor @var{color} @itemx -bd @var{color} Use @var{color} as the border color. @item -borderwidth @var{width} @itemx -bw @var{width} Use @var{width} as the border width. @item -display @var{display} @itemx -d @var{display} When running under the X window system, create the window containing the Emacs frame on the display named @var{display}. @item -foreground @var{color} @itemx -fg @var{color} Use @var{color} as the foreground color. @item -font @var{name} @itemx -fn @var{name} Use @var{name} as the default font. @item -geometry @var{spec} @itemx -geom @var{spec} @itemx -g @var{spec} Use the geometry (window size and/or position) specified by @var{spec}. @item -iconic Start up iconified. @item -rv Bring up Emacs in reverse video. @item -name @var{name} Use the resource manager resources specified by @var{name}. The default is to use the name of the program (@code{argv[0]}) as the resource manager name. @item -xrm Read something into the resource database for this invocation of Emacs only. @end table