]> code.delx.au - gnu-emacs/commitdiff
merge trunk
authorKenichi Handa <handa@gnu.org>
Wed, 29 Jan 2014 13:39:00 +0000 (22:39 +0900)
committerKenichi Handa <handa@gnu.org>
Wed, 29 Jan 2014 13:39:00 +0000 (22:39 +0900)
52 files changed:
doc/emacs/ChangeLog
doc/emacs/buffers.texi
doc/emacs/calendar.texi
doc/emacs/dired.texi
doc/emacs/indent.texi
doc/emacs/killing.texi
doc/emacs/text.texi
doc/lispref/ChangeLog
doc/lispref/text.texi
doc/misc/ChangeLog
doc/misc/idlwave.texi
doc/misc/remember.texi
doc/misc/vip.texi
doc/misc/viper.texi
etc/NEWS
etc/TODO
lisp/ChangeLog
lisp/calendar/timeclock.el
lisp/dired.el
lisp/emulation/cua-base.el
lisp/emulation/viper-ex.el
lisp/emulation/viper-init.el
lisp/emulation/viper-keym.el
lisp/emulation/viper-macs.el
lisp/emulation/viper.el
lisp/hippie-exp.el
lisp/ido.el
lisp/indent.el
lisp/net/quickurl.el
lisp/obsolete/otodo-mode.el
lisp/progmodes/hideif.el
lisp/progmodes/idlwave.el
lisp/saveplace.el
lisp/shadowfile.el
lisp/simple.el
lisp/strokes.el
lisp/textmodes/fill.el
lisp/textmodes/remember.el
lisp/type-break.el
lisp/vc/pcvs.el
lisp/whitespace.el
lisp/window.el
src/ChangeLog
src/data.c
src/lread.c
src/terminal.c
src/w32fns.c
src/xdisp.c
src/xfaces.c
src/xmenu.c
test/ChangeLog
test/automated/file-notify-tests.el

index ce43ff1a4746f4b0f06395b8c8c07a72a9e076f7..8f29d7c01f6a94ef7901d62d3e706e879755d19a 100644 (file)
@@ -1,3 +1,21 @@
+2014-01-29  Glenn Morris  <rgm@gnu.org>
+
+       * killing.texi (Deletion): Mention cycle-spacing.
+
+2014-01-28  Glenn Morris  <rgm@gnu.org>
+
+       * text.texi (Fill Commands): Mention fill-single-char-nobreak-p.
+
+       * indent.texi (Tab Stops): Updates for new tab-stop behavior.
+
+2014-01-27  Glenn Morris  <rgm@gnu.org>
+
+       * dired.texi (Misc Dired Features): Copyedits for hide-details.
+
+       * buffers.texi (List Buffers): Tiny edit.
+
+       * calendar.texi (Time Intervals): Update for files in ~/.emacs.d/.
+
 2014-01-26  Glenn Morris  <rgm@gnu.org>
 
        * ack.texi (Acknowledgments):
index 132121646324df6142e19435d8c3981ad08689ef..c96b657b481bea991f4be7adf93488d14a95b94b 100644 (file)
@@ -174,7 +174,7 @@ List the existing buffers (@code{list-buffers}).
 @kindex C-x C-b
 @findex list-buffers
   To display a list of existing buffers, type @kbd{C-x C-b}.  Each
-line in the list shows one buffer's name, major mode and visited file.
+line in the list shows one buffer's name, size, major mode and visited file.
 The buffers are listed in the order that they were current; the
 buffers that were current most recently come first.
 
index b403dfdf78b41e8cd14e5e0f841a8bcb18a45a7a..ef6d44a968f2fb41cfe0db1e0c3a434bc0c1e38d 100644 (file)
@@ -1616,11 +1616,11 @@ you.  You can, however, customize the value of the variable
 then, only an explicit @kbd{M-x timeclock-out} or @kbd{M-x
 timeclock-change} will tell Emacs that the current interval is over.
 
-@cindex @file{.timelog} file
+@cindex @file{timelog} file
 @vindex timeclock-file
 @findex timeclock-reread-log
   The timeclock functions work by accumulating the data in a file
-called @file{.timelog} in your home directory.  You can specify a
+called @file{~/.emacs.d/timelog}.  You can specify a
 different name for this file by customizing the variable
 @code{timeclock-file}.  If you edit the timeclock file manually, or if
 you change the value of any of timeclock's customizable variables, you
index b7de1bdf3aac6f6d8e3353782857e045b20bf512..70553c137475a8a3bf93f4c5d9fcf3a909f90ad2 100644 (file)
@@ -1382,7 +1382,7 @@ file, the search wraps around to the first marked file.  The command
 a regular expression search.  @xref{Repeat Isearch}, for information
 about search repetition.
 
-@cindex Adding to the kill ring in Dired.
+@cindex adding to the kill ring in Dired
 @kindex w @r{(Dired)}
 @findex dired-copy-filename-as-kill
   The command @kbd{w} (@code{dired-copy-filename-as-kill}) puts the
@@ -1403,6 +1403,19 @@ names into arguments for other Emacs commands.  It also displays what
 it added to the kill ring, so you can use it to display the list of
 currently marked files in the echo area.
 
+@kindex ( @r{(Dired)}
+@findex dired-hide-details-mode
+@vindex dired-hide-details-hide-symlink-targets
+@vindex dired-hide-details-hide-information-lines
+@cindex hiding details in Dired
+  The command @kbd{(} (@code{dired-hide-details-mode}) toggles whether
+details, such as ownership or file permissions, are visible in the
+current Dired buffer.  By default, it also hides the targets of
+symbolic links, and all lines other than the header line and
+file/directory listings.  To change this, customize the options
+@code{dired-hide-details-hide-symlink-targets} and
+@code{dired-hide-details-hide-information-lines}, respectively.
+
 @cindex Dired and version control
   If the directory you are visiting is under version control
 (@pxref{Version Control}), then the normal VC diff and log commands
@@ -1440,18 +1453,3 @@ it onto a Dired buffer; this either moves, copies, or creates a link
 to the file in that directory.  Precisely which action is taken is
 determined by the originating program.  Dragging files out of a Dired
 buffer is currently not supported.
-
-@kindex ( @r{(Dired)}
-@c )
-@findex dired-hide-details-mode
-@vindex dired-hide-details-hide-symlink-targets
-@vindex dired-hide-details-hide-information-lines
-@cindex Hide details in Dired.
-  The command @kbd{(} (@code{dired-hide-details-mode}) toggles whether
-details, such as ownership or file permissions, are hidden.  If the
-variable @code{dired-hide-details-hide-symlink-targets} is
-non-@code{nil} then targets of symbolic links are hidden as well.  A
-non-@code{nil} value for the variable
-@code{dired-hide-details-hide-information-lines} means that all lines
-other than the header and lines containing files and directories are
-hidden.
index e0c269ad57553886f8783be7a6d33587e7ee081c..9aec6202de633543bd341e8cc1f147e8d943898c 100644 (file)
@@ -157,10 +157,12 @@ C-u -999 C-x @key{TAB}
   Emacs defines certain column numbers to be @dfn{tab stops}.  These
 are used as stopping points by @key{TAB} when inserting whitespace in
 Text mode and related modes (@pxref{Indentation}), and by commands
-like @kbd{M-i} (@pxref{Indentation Commands}).  By default, tab stops
-are located every 8 columns.  These positions are stored in the
-variable @code{tab-stop-list}, whose value is a list of column numbers
-in increasing order.
+like @kbd{M-i} (@pxref{Indentation Commands}).  The variable
+@code{tab-stop-list} controls these positions.  The default value
+is @code{nil}, which means a tab stop every 8 columns.  The value
+can also be a list of column numbers (in increasing order) at which to
+place tab stops.  Emacs extends the list forever by repeating the
+difference between the last and next-to-last elements.
 
 @findex edit-tab-stops
 @kindex C-c C-c @r{(Edit Tab Stops)}
@@ -178,12 +180,15 @@ To install changes, type C-c C-c
 
 @noindent
 The first line contains a colon at each tab stop.  The numbers on the
-next two lines are present just to indicate where the colons are.  It
-is implicitly extended to infinity by repeating the last step.
+next two lines are present just to indicate where the colons are.
+If the value of @code{tab-stop-list} is @code{nil}, as it is by default,
+no colons are displayed initially.
 
   You can edit this buffer to specify different tab stops by placing
 colons on the desired columns.  The buffer uses Overwrite mode
-(@pxref{Minor Modes}).  When you are done, type @kbd{C-c C-c} to make
+(@pxref{Minor Modes}).  Remember that Emacs will extend the list of
+tab stops forever by repeating the difference between the last two
+explicit stops that you place.  When you are done, type @kbd{C-c C-c} to make
 the new tab stops take effect.  Normally, the new tab stop settings
 apply to all buffers.  However, if you have made the
 @code{tab-stop-list} variable local to the buffer where you called
index 1da226971eb975beaae9e56423da45f5c7aedbdb..77dfad04bef79a9cff0026d40dc48e4dfeb26323 100644 (file)
@@ -109,12 +109,11 @@ number of characters.  If the numeric argument is omitted or one, they
 delete all the text in the region if it is active (@pxref{Using
 Region}).
 
-@c FIXME: `cycle-spacing' should be documented, too.  (Maybe not in
-@c this node, tho.)  --xfq
 @kindex M-\
 @findex delete-horizontal-space
 @kindex M-SPC
 @findex just-one-space
+@findex cycle-spacing
   The other delete commands are those that delete only whitespace
 characters: spaces, tabs and newlines.  @kbd{M-\}
 (@code{delete-horizontal-space}) deletes all the spaces and tab
@@ -125,7 +124,11 @@ point, regardless of the number of spaces that existed previously
 (even if there were none before).  With a numeric argument @var{n}, it
 leaves @var{n} spaces before point if @var{n} is positive; if @var{n}
 is negative, it deletes newlines in addition to spaces and tabs,
-leaving @var{-n} spaces before point.
+leaving @var{-n} spaces before point.  The command @code{cycle-spacing}
+acts like a more flexible version of @code{just-one-space}.  It
+does different things if you call it repeatedly in succession.
+The first call acts like @code{just-one-space}, the next removes
+all whitespace, and a third call restores the original whitespace.
 
   @kbd{C-x C-o} (@code{delete-blank-lines}) deletes all blank lines
 after the current line.  If the current line is blank, it deletes all
index 4d19ddbf1a6231102d7dc85aadc0a487f98000be..1d30740467e835969c1d8c315dfcc2560781e339 100644 (file)
@@ -562,10 +562,11 @@ customize the abnormal hook variable @code{fill-nobreak-predicate}
 (@pxref{Hooks}).  Each function in this hook is called with no
 arguments, with point positioned where Emacs is considering breaking a
 line.  If a function returns a non-@code{nil} value, Emacs will not
-break the line there.  Two functions you can use are
+break the line there.  Functions you can use there include:
 @code{fill-single-word-nobreak-p} (don't break after the first word of
-a sentence or before the last) and @code{fill-french-nobreak-p} (don't
-break after @samp{(} or before @samp{)}, @samp{:} or @samp{?}).
+a sentence or before the last); @code{fill-single-char-nobreak-p}
+(don't break after a one-letter word); and @code{fill-french-nobreak-p}
+(don't break after @samp{(} or before @samp{)}, @samp{:} or @samp{?}).
 
 @node Fill Prefix
 @subsection The Fill Prefix
index 6f27e71b7b740228804a8abf0105791bfcb6741c..78d7531f869173fbdc9e2476804f041f75f98a53 100644 (file)
@@ -1,3 +1,7 @@
+2014-01-28  Glenn Morris  <rgm@gnu.org>
+
+       * text.texi (Indent Tabs): Update related to tab-stops.
+
 2014-01-24  Glenn Morris  <rgm@gnu.org>
 
        * control.texi (Handling Errors): Update with-demoted-errors.
index 60cda8068bbfe411d2ec9e8ff25b2ea333f2856b..786628bb32a640b9792c8a6404dae10cbfacbdb6 100644 (file)
@@ -771,6 +771,9 @@ space, or @var{n} spaces if @var{n} is specified.  It returns
 @code{nil}.
 @end deffn
 
+@c There is also cycle-spacing, but I cannot see it being useful in
+@c Lisp programs, so it is not mentioned here.
+
 @deffn Command delete-blank-lines
 This function deletes blank lines surrounding point.  If point is on a
 blank line with one or more blank lines before or after it, then all but
@@ -2460,19 +2463,19 @@ stop feature only in a few major modes, such as Text mode.
 
 @deffn Command tab-to-tab-stop
 This command inserts spaces or tabs before point, up to the next tab
-stop column defined by @code{tab-stop-list}.  It searches the list for
-an element greater than the current column number, and uses that element
-as the column to indent to.  It does nothing if no such element is
-found.
+stop column defined by @code{tab-stop-list}.
 @end deffn
 
 @defopt tab-stop-list
-This variable is the list of tab stop columns used by
-@code{tab-to-tab-stops}.  The elements should be integers in increasing
-order.  The tab stop columns need not be evenly spaced.
-
-Use @kbd{M-x edit-tab-stops} to edit the location of tab stops
-interactively.
+This variable defines the tab stop columns used by @code{tab-to-tab-stop}.
+It should be either @code{nil}, or a list of increasing integers,
+which need not be evenly spaced.  The list is implicitly
+extended to infinity through repetition of the interval between the
+last and penultimate elements (or @code{tab-width} if the list has
+fewer than two elements).  A value of @code{nil} means a tab stop
+every @code{tab-width} columns.
+
+Use @kbd{M-x edit-tab-stops} to edit the location of tab stops interactively.
 @end defopt
 
 @node Motion by Indent
index 589f0060840a52c5ccda7a0508c01fba330f5474..33f6057e94f7917175df67c8c8777e4312d5f9a0 100644 (file)
@@ -1,3 +1,12 @@
+2014-01-27  Glenn Morris  <rgm@gnu.org>
+
+       * idlwave.texi (Lesson III---User Catalog, Online Help)
+       (Starting the Shell, Catalogs, User Catalog):
+       * remember.texi (Quick Start):
+       * viper.texi:
+       * vip.texi (Customization, Customizing Constants)
+       (Customizing Key Bindings): Update for files being in ~/.emacs.d/.
+
 2014-01-25  Xue Fuqiao  <xfq.free@gmail.com>
 
        * cc-mode.texi (Minor Modes): Minor fix.
index c4719dcd039a5a5b2f438a013e30feb1a8d86351..b56b311e273001a8c05379c154a595e401fac01a 100644 (file)
@@ -689,8 +689,8 @@ you want; directories with existing library catalogs will not be
 selected by default) and click on the @samp{Scan&Save} button.  Then
 go for a cup of coffee while IDLWAVE collects information for each and
 every IDL routine on your search path.  All this information is
-written to the file @file{.idlwave/idlusercat.el} in your home
-directory and will from now on automatically load whenever you use
+written to the file @file{~/.emacs.d/idlwave/idlusercat.el}
+and will from now on automatically load whenever you use
 IDLWAVE@.  You may find it necessary to rebuild the catalog on occasion
 as your local libraries change, or build a library catalog for those
 directories instead.  Invoke routine info (@kbd{C-c ?}) or completion
@@ -1262,7 +1262,7 @@ directly with IDL, along with an XML-based catalog of routine
 information.  By default, IDLWAVE automatically attempts to convert this
 XML catalog into a format Emacs can more easily understand, and caches
 this information in your @code{idlwave_config_directory}
-(@file{~/.idlwave/}, by default).  It also re-scans the XML catalog if
+(@file{~/.emacs.d/idlwave/}, by default).  It also re-scans the XML catalog if
 it is newer than the current cached version.  You can force rescan with
 the menu entry @code{IDLWAVE->Routine Info->Rescan XML Help Catalog}.
 
@@ -2466,7 +2466,7 @@ Initial commands, separated by newlines, to send to IDL.
 Non-@code{nil} means preserve command history between sessions.
 @end defopt
 
-@defopt idlwave-shell-command-history-file (@file{~/.idlwave/.idlwhist})
+@defopt idlwave-shell-command-history-file (@file{~/.emacs.d/idlwave/.idlwhist})
 The file in which the command history of the idlwave shell is saved.
 Unless it's an absolute path, it goes in
 @code{idlwave-config-directory}.
@@ -3518,7 +3518,7 @@ information (e.g., Windows), a library path must be specified in
 to setup directories for user catalog scan (@pxref{User Catalog} for
 more on this variable).  Note that, before the shell is running, IDLWAVE
 can only know about the IDL search path by consulting the file pointed
-to by @code{idlwave-path-file} (@file{~/.idlwave/idlpath.el}, by
+to by @code{idlwave-path-file} (@file{~/.emacs.d/idlwave/idlpath.el}, by
 default).  If @code{idlwave-auto-write-path} is enabled (which is the
 default), the paths are written out whenever the IDLWAVE shell is
 started.
@@ -3540,7 +3540,7 @@ locating HTML help and the IDL Assistant for IDL v6.2 and later.  Under
 Unix/MacOSX, will be obtained from the Shell and recorded, if run.
 @end defopt
 
-@defopt idlwave-config-directory (@file{~/.idlwave})
+@defopt idlwave-config-directory (@file{~/.emacs.d/idlwave})
 Default path where IDLWAVE saves configuration information, a user
 catalog (if any), and a cached scan of the XML catalog (IDL v6.2 and
 later).
@@ -3629,7 +3629,7 @@ performance is a problem and/or the catalogs are not needed.
 
 The user catalog is the old routine catalog system.  It is produced
 within Emacs, and stored in a single file in the user's home directory
-(@file{.idlwave/idlusercat.el} by default).  Although library catalogs
+(@file{.emacs.d/idlwave/idlusercat.el} by default).  Although library catalogs
 are more flexible, there may be reasons to prefer a user catalog
 instead, including:
 
index a32c71f7d66d7b5a35194cb03ae98144fcf769bc..d9c11cea424052c60d5609bd81a8bd194cc1d850 100644 (file)
@@ -203,7 +203,7 @@ Type @kbd{C-c C-c} (@code{remember-finalize}) to save the note and close
 the @samp{*Remember*} buffer.
 @end itemize
 
-By default, @code{remember-finalize} saves the note in @file{~/.notes}.
+By default, @code{remember-finalize} saves the note in @file{~/emacs.d/notes}.
 You can edit it now to see the remembered and timestamped note. You
 can edit this file however you want. New entries will always be added
 to the end.
@@ -213,7 +213,7 @@ remember} displays a @samp{*Remember*} buffer with the region as the
 initial contents.
 
 As a simple beginning, you can start by using the Text File backend,
-keeping your @file{~/.notes} file in outline-mode format, with a final
+keeping your @file{~/.emacs.d/notes} file in outline-mode format, with a final
 entry called @samp{* Raw data}. Remembered data will be added to the
 end of the file. Every so often, you can move the data that gets
 appended there into other files, or reorganize your document.
index 40701054d5aac20651abad141fe33d9349d9c430..367ed2adb4c9f9483aa05ec71a8a24a32a7872e7 100644 (file)
@@ -1863,7 +1863,7 @@ The following Ex commands are available in Vi, but not implemented in VIP.
 @node Customization
 @chapter Customization
 
-If you have a file called @file{.vip} in your home directory, then it
+If you have a file called @file{~/.emacs.d/vip} (or @file{~/.vip}), then it
 will also be loaded when VIP is loaded.  This file is thus useful for
 customizing VIP.
 
@@ -1903,7 +1903,7 @@ if @code{nil} then it sis bound to @code{delete-backward-char}.
 @end table
 @noindent
 You can reset these constants in VIP by the Ex command @kbd{set}.  Or you
-can include a line like this in your @file{.vip} file:
+can include a line like this in your @file{~/.emacs.d/vip} file:
 @example
 (setq vip-case-fold-search t)
 @end example
@@ -1916,8 +1916,8 @@ can include a line like this in your @file{.vip} file:
 VIP uses @code{vip-command-mode-map} as the @dfn{local keymap} for vi mode.
 For example, in vi mode, @key{SPC} is bound to the function
 @code{vip-scroll}.  But, if you wish to make @key{SPC} and some other keys
- behave like Vi, you can include the following lines in your @file{.vip}
-file.
+ behave like Vi, you can include the following lines in your
+@file{~/.emacs.d/vip} file.
 
 @example
 (define-key vip-command-mode-map "\C-g" 'vip-info-on-file)
index 0048d1363f34db47b1f699885f1ab56ce45f1ff2..ee3a4d057eea9b3289d55354025920cff544648e 100644 (file)
@@ -170,8 +170,8 @@ world of Vi! These users are well familiar with Emacs bindings and prefer them
 in some cases, especially in the Vi Insert state. John Hawkins
 <jshawkin@@eecs.umich.edu> has provided a set of customizations, which
 enables additional Emacs bindings under Viper.  These customizations can be
-included in your @file{~/.viper} file and are found at the following URL:
-@file{http://traeki.freeshell.org/files/viper-sample}.
+included in your @file{~/.emacs.d/viper} file and are found at the
+following URL: @file{http://traeki.freeshell.org/files/viper-sample}.
 
 @menu
 * Emacs Preliminaries::         Basic concepts in Emacs.
@@ -329,14 +329,14 @@ the place where all general Emacs customization takes place.  Beginning with
 version 20.0, Emacsen have an interactive interface, which simplifies the
 job of customization significantly.
 
-Viper also uses the file @file{~/.viper} for Viper-specific customization.
+Viper also uses the file @file{~/.emacs.d/viper} for Viper-specific customization.
 The location of Viper customization file can be changed by setting the
 variable @code{viper-custom-file-name} in @file{.emacs} @emph{prior} to loading
 Viper.
 
 The latest versions of Emacs have an interactive customization facility,
 which allows you to (mostly) bypass the use of the @file{.emacs} and
-@file{.viper} files. You can reach this customization
+@code{viper-custom-file-name} files. You can reach this customization
 facility from within Viper's VI state by executing the Ex command
 @kbd{:customize}.
 
@@ -611,8 +611,8 @@ is slightly different from other programs.  It is designed to minimize the
 need for deleting file names that Emacs provides in its prompts.  (This is
 usually convenient, but occasionally the prompt may suggest a wrong file
 name for you.)  If you see a prompt @kbd{/usr/foo/} and you wish to edit the
-file @kbd{~/.viper}, you don't have to erase the prompt.  Instead, simply
-continue typing what you need.  Emacs will interpret @kbd{/usr/foo/~/.viper}
+file @kbd{~/.file}, you don't have to erase the prompt.  Instead, simply
+continue typing what you need.  Emacs will interpret @kbd{/usr/foo/~/.file}
 correctly.  Similarly, if the prompt is @kbd{~/foo/} and you need to get to
 @kbd{/bar/file}, keep typing.  Emacs interprets @kbd{~/foo//bar/} as
 @kbd{/bar/file}, since when it sees @samp{//}, it understands that
@@ -795,8 +795,8 @@ between the Vi state and Insert state at will, and even use the replace mode.
 Initially, the minibuffer comes up in Insert state.
 
 Some users prefer plain Emacs bindings in the minibuffer.  To this end, set
-@code{viper-vi-style-in-minibuffer} to @code{nil} in @file{.viper}.
-@xref{Customization}, to learn how to do this.
+@code{viper-vi-style-in-minibuffer} to @code{nil} in
+your Viper customization file.  @xref{Customization}, to learn how to do this.
 
 When the minibuffer changes Viper states, you will notice that the appearance
 of the text there changes as well.  This is useful because the minibuffer
@@ -989,8 +989,8 @@ In the Overview chapter, some Multiple File issues were discussed
 (@pxref{Multiple Files in Viper}).  In addition to the files, Emacs has
 buffers.  These can be seen in the @kbd{:args} list and switched using
 @kbd{:next} if you type @kbd{:set ex-cycle-through-non-files t}, or
-specify @code{(setq ex-cycle-through-non-files t)} in your @file{.viper}
-file.  @xref{Customization}, for details.
+specify @code{(setq ex-cycle-through-non-files t)} in your
+Viper customization file.  @xref{Customization}, for details.
 
 @node Undo and Backups
 @section Undo and Backups
@@ -1132,7 +1132,8 @@ of the form @kbd{/foo//bar} as @kbd{/bar} and @kbd{/foo/~/bar} as
 @cindex word search
 
 Viper provides buffer search, the ability to search the buffer for a region
-under the cursor.  You have to turn this on in @file{.viper} either by calling
+under the cursor.  You have to turn this on in your Viper customization file
+either by calling
 
 @example
 (viper-buffer-search-enable)
@@ -1182,10 +1183,10 @@ variable that controls how search patterns are highlighted is
 @end example
 @vindex @code{viper-search-face}
 @noindent
-in @file{~/.viper}.  If you want to change how patterns are highlighted, you
-will have to change @code{viper-search-face} to your liking.  The easiest
-way to do this is to use Emacs customization widget, which is accessible
-from the menubar.  Viper customization group is located under the
+in your Viper customization file.  If you want to change how patterns are
+highlighted, you will have to change @code{viper-search-face} to your liking.
+The easiest way to do this is to use Emacs customization widget, which is
+accessible from the menubar.  Viper customization group is located under the
 @emph{Emulations} customization group, which in turn is under the
 @emph{Editing} group (or simply by typing @kbd{:customize}).  All Viper
 faces are grouped together under Viper's
@@ -1225,8 +1226,8 @@ Facilities like this make Vi's @kbd{:ab} command obsolete.
 
 Viper can be set free from the line--limited movements in Vi, such as @kbd{l}
 refusing to move beyond the line, @key{ESC} moving one character back,
-etc.  These derive from Ex, which is a line editor.  If your @file{.viper}
-contains
+etc.  These derive from Ex, which is a line editor.  If your
+Viper customization file contains
 
 @example
 @code{(setq viper-ex-style-motion nil)}
@@ -1306,9 +1307,10 @@ These two keys invoke many important Emacs functions.  For example, if you
 hit @kbd{C-x} followed by @kbd{2}, then the current window will be split
 into 2.  Except for novice users, @kbd{C-c} is also set to execute an Emacs
 command from the current major mode.  @key{ESC} will do the same, if you
-configure @key{ESC} as Meta by setting @code{viper-no-multiple-ESC} to @code{nil}
-in @file{.viper}.  @xref{Customization}.  @kbd{C-\} in Insert, Replace, or Vi
-states will make Emacs think @kbd{Meta} has been hit.
+configure @key{ESC} as Meta by setting @code{viper-no-multiple-ESC} to
+@code{nil} in your Viper customization file.  @xref{Customization}.
+@kbd{C-\} in Insert, Replace, or Vi states will make Emacs think
+@kbd{Meta} has been hit.
 @item \
 @kindex @kbd{\}
 Escape to Emacs to execute a single Emacs command.  For instance,
@@ -1574,9 +1576,9 @@ Customization can be done in 2 ways.
 @item
 @cindex initialization
 @cindex .viper
-Elisp code in a @file{.viper} file in your home directory.  Viper
-loads @file{.viper} just before it does the binding for mode
-hooks.  This is recommended for experts only.
+Elisp code in a @file{~/.emacs.d/viper} (or @file{~/.viper}) file.
+Viper loads this file just before it does the binding for mode hooks.
+This is recommended for experts only.
 @item
 @cindex .emacs
 Elisp code in your @file{.emacs} file before and after the @code{(require
@@ -1591,12 +1593,12 @@ customization widget, which lets you change the values of Viper
 customizable variables easily. This method is good for novice and
 experts alike. The customization code in the form of Lisp commands will be
 placed in @file{~/.emacs} or some other customization file depending on the
-version of Emacs that you use. Still, it is recommended to separate
+version of Emacs that you use.  Still, it is recommended to separate
 Viper-related customization produced by the Emacs customization widget
-and keep it in the @file{.viper} file.
+and keep it in your Viper customization file.
 
 Some advanced customization cannot be accomplished this way, however, and
-has to be done in Emacs Lisp in the @file{.viper} file.  For the common
+has to be done in Emacs Lisp in your Viper customization file.  For the common
 cases, examples are provided that you can use directly.
 @end itemize
 
@@ -1753,10 +1755,10 @@ cases.  @code{nil} means you either has to invoke @code{viper-mode} manually
 for each buffer (or you can add @code{viper-mode} to the appropriate major mode
 hooks using @code{viper-load-hook}).
 
-This option must be set in the file @file{~/.viper}.
-@item viper-custom-file-name "~/.viper"
+This option must be set in your Viper customization file.
+@item viper-custom-file-name "~/.emacs.d/viper"
 File used for Viper-specific customization.
-Change this setting, if you want.  Must be set in @file{.emacs} (not @file{.viper}!)
+Change this setting, if you want.  Must be set in @file{.emacs}
 before Viper is loaded.  Note that you
 have to set it as a string inside double quotes.
 @item viper-spell-function 'ispell-region
@@ -1807,8 +1809,8 @@ Both these macros are bound (as Viper macros) to
 @code{viper-repeat-from-history},
 which checks the second key by which it is invoked to see which of the
 previous commands to invoke.  Viper binds @kbd{f12 1} and @kbd{f12 2} only,
-but the user can bind more in @file{~/.viper}.  @xref{Vi Macros}, for how to do
-this.
+but the user can bind more in his/her Viper customization file.
+@xref{Vi Macros}, for how to do this.
 @item viper-keep-point-on-undo nil
 If not @code{nil}, Viper tries to not move point when undoing commands.
 Instead, it will briefly move the cursor to the place where change has
@@ -1873,7 +1875,7 @@ emulate the standard Vi behavior, which supports only intra-line
 replacement regions (and multi-line replacement regions are deleted).
 @item viper-toggle-key "\C-z"
 Specifies the key used to switch from Emacs to Vi and back.
-Must be set in @file{.viper}.  This variable can't be
+Must be set in your Viper customization file.  This variable can't be
 changed interactively after Viper is loaded.
 
 In Insert state, this key acts as a temporary escape to Vi state, i.e., it
@@ -1906,7 +1908,7 @@ the last chance to do customization before Viper is up and running.
 @noindent
 You can reset some of these constants in Viper with the Ex command @kbd{:set}
 (when so indicated in the table).  Or you
-can include a line like this in your @file{.viper} file:
+can include a line like this in your Viper customization file:
 @example
 (setq viper-case-fold-search t)
 @end example
@@ -2018,7 +2020,7 @@ state.
 If you want to
 bind a key, say @kbd{C-v}, to the function that scrolls
 page down and to make @kbd{0} display information on the current buffer,
-putting this in @file{.viper} will do the trick in Vi state:
+putting this in your Viper customization file will do the trick in Vi state:
 @example
 (define-key viper-vi-global-user-map "\C-v" 'scroll-down)
 @end example
@@ -2067,11 +2069,12 @@ keys necessary in that keymap, and put
 @end example
 
 @noindent
-in @file{~/.viper}.  To do the same in Vi and Insert states, you should use
-@code{vi-state} and @code{insert-state}.  Changes in Insert state are also
-in effect in Replace state.  For instance, suppose that the user wants to
-use @kbd{dd} in Vi state under Dired mode to delete files, @kbd{u} to unmark
-files, etc.  The following code in @file{~/.viper} will then do the job:
+in your Viper customization file.  To do the same in Vi and Insert states, you
+should use @code{vi-state} and @code{insert-state}.  Changes in Insert state
+are also in effect in Replace state.  For instance, suppose that the user wants
+to use @kbd{dd} in Vi state under Dired mode to delete files, @kbd{u} to unmark
+files, etc.  The following code in the Viper customization file will then do
+the job:
 
 @example
 (setq my-dired-modifier-map (make-sparse-keymap))
@@ -2275,7 +2278,7 @@ can happen only in the beginning, when the minor mode kicks in.  Typing
 several such minor modes and takes care of them, so the above trick
 is usually not necessary.  If you find that some minor mode, e.g.,
 @code{nasty-mode} interferes with Viper, putting the following in
-@file{.viper} should fix the problem:
+your Viper customization file should fix the problem:
 @lisp
 (viper-harness-minor-mode "nasty-mode")
 @end lisp
@@ -2332,8 +2335,8 @@ document.  Other features are explained here.
 @item viper-buffer-search-char nil
 Enable buffer search.  Explicit call to @code{viper-buffer-search-enable}
 sets @code{viper-buffer-search-char} to @kbd{g}.  Alternatively, the user can
-set @code{viper-buffer-search-char} in @file{.viper} to a key sequence
-to be used for buffer search.  There is no need to call
+set @code{viper-buffer-search-char} in his/her Viper customization file to a key
+sequence to be used for buffer search.  There is no need to call
 @code{viper-buffer-search-enable} in that case.
 @findex @code{viper-buffer-search-enable}
 @vindex @code{viper-buffer-search-char}
@@ -2356,8 +2359,8 @@ If you hit something other than @kbd{/} after the first @kbd{/} or if the
 second @kbd{/} doesn't follow quickly enough, then Viper will issue the
 usual prompt @kbd{/} and will wait for input, as usual in Vi.
 If you don't like this behavior, you can ``unrecord'' these macros in your
-@file{~/.viper} file.  For instance, if you don't like the above feature, put
-this in @file{~/.viper}:
+Viper customization file.  For instance, if you don't like the above
+feature, put this in the file:
 @example
 (viper-set-searchstyle-toggling-macros 'undefine)
 @end example
@@ -2444,7 +2447,7 @@ the direction of newer insertions.  Hitting @kbd{C-c M-p} or @kbd{C-c M-n}
 in succession
 will undo the previous insertion from the ring and insert the next item on
 the ring.  If a larger ring size is needed, change the value of the above
-variable in the @file{~/.viper} file.
+variable in the Viper customization file.
 
 Since typing these sequences of keys may be tedious, it is suggested that the
 user should bind a function key, such as @kbd{f31}, as follows:
@@ -2515,7 +2518,7 @@ putting
 (copy-face 'default 'viper-minibuffer-insert-face)
 (copy-face 'default 'viper-minibuffer-emacs-face)
 @end example
-in the @file{~/.viper} file or through the customization widget, as
+in their Viper customization file or through the customization widget, as
 described above.  However, in that case, the user will not have any
 indication of the current Viper state in the minibuffer.  (This is important
 if the user accidentally switches to another Viper state by typing @key{ESC} or
@@ -2587,8 +2590,8 @@ Note: while loading initially, Viper binds this mouse action only if it is
 not already bound to something else.  If you want to use the mouse-search
 feature, and the @kbd{Meta-Shift-Mouse-1} mouse action is already bound to
 something else, you can rebind the mouse-search feature by setting
-@code{viper-mouse-search-key} to something else in your @code{~/.viper}
-file:
+@code{viper-mouse-search-key} to something else in
+your Viper customization file:
 @lisp
 (setq viper-mouse-search-key '(meta 1))
 @end lisp
@@ -2600,7 +2603,8 @@ Meta key and clicking mouse button 1.  The allowed values of
 
 If the requested mouse action (e.g., (meta 1)) is already taken for other
 purposes then you have to confirm your intention by placing the following
-command in @code{~/.viper} after setting @code{viper-mouse-search-key}:
+command in your Viper customization file after setting
+@code{viper-mouse-search-key}:
 @lisp
 (viper-bind-mouse-search-key 'force)
 @end lisp
@@ -2642,13 +2646,13 @@ case of a triple-click, the prefix argument is ignored.)
 Note: while loading initially, Viper binds this mouse action only if it not
 already bound to something else.  If you want to use this feature and the
 default mouse action is already bound, you can rebind mouse-insert by
-placing this command in @code{~/.viper}:
+placing this command in your Viper customization file:
 @lisp
 (setq viper-mouse-insert-key '(meta 2))
 @end lisp
 If you want to bind mouse-insert to an action even if this action is
 already taken for other purposes in Emacs, then you should add this command
-to @code{~/.viper}, after setting @code{viper-mouse-insert-key}:
+to your Viper customization file, after setting @code{viper-mouse-insert-key}:
 @lisp
 (viper-bind-mouse-insert-key 'force)
 @end lisp
@@ -2785,7 +2789,7 @@ Manual}.
 When the user finishes defining a macro (which is done by typing @kbd{C-x)},
 a departure from Vi), you will be asked whether you want this
 macro to be global, mode-specific, or buffer-specific.  You will also be
-given a chance to save the macro in your @file{~/.viper} file.
+given a chance to save the macro in your Viper customization file.
 This is the easiest way to save a macro and make
 it permanently available.  If you work your startup files with bare hands,
 here is how Viper saves the above macro so that it will be
@@ -2834,8 +2838,8 @@ the latter says that the macro is to be defined for all buffers
 
 For convenience, Viper also lets you define Vi-style macros in its Emacs
 state.  There is no Ex command, like @kbd{:map} and @kbd{:map!} for doing
-this, but the user can include such a macro in the @file{~/.viper} file.  The
-only thing is that the @code{viper-record-kbd-macro} command should specify
+this, but the user can include such a macro in the Viper customization file.
+The only thing is that the @code{viper-record-kbd-macro} command should specify
 @code{emacs-state} instead of @code{vi-state} or @code{insert-state}.
 
 The user can get rid of a macro either by using the Ex commands @kbd{:unmap}
@@ -2899,8 +2903,9 @@ Vi and Emacs commands, so that you could see what will happen each time the
 macro is executed.  Suppose now we wanted to bind the key sequence
 @kbd{f13 f13} to the command @code{eval-last-sexp}.  To accomplish this, we
 can type @kbd{M-x eval-last-sexp} followed by @kbd{C-x )}.
-If you answer positively to Viper's offer to save this macro in @file{~/.viper}
-for future uses, the following will be inserted in that file:
+If you answer positively to Viper's offer to save this macro in your
+Viper customization file for future uses, the following will be inserted
+in that file:
 
 @example
 (viper-record-kbd-macro [f16 f16] 'vi-state
@@ -2972,8 +2977,8 @@ The rate at which the user must type keys in order for them to be
 recognized as a timeout macro is controlled by the variable
 @code{viper-fast-keyseq-timeout}, which defaults to 200 milliseconds.
 
-For the most part, Viper macros defined in @file{~/.viper} can be shared
-between X and TTY modes.
+For the most part, Viper macros defined in the Viper customization file can
+be shared between X and TTY modes.
 The problem with TTY may be that the function keys there generate sequences
 of events instead of a single event (as under a window system).
 Emacs maps some of these sequences back to the logical keys
@@ -3359,7 +3364,8 @@ this function.
 Find the next bracket/parenthesis/brace and go to its match.
 By default, Viper ignores brackets/parentheses/braces that occur inside
 parentheses.  You can change this by setting
-@code{viper-parse-sexp-ignore-comments} to @code{nil} in your @file{.viper} file.
+@code{viper-parse-sexp-ignore-comments} to @code{nil} in your Viper
+customization file.
 This option can also be toggled interactively if you quickly hit @kbd{%%%}.
 
 This latter feature is implemented as a vi-style keyboard macro.  If you
@@ -3370,7 +3376,7 @@ don't want this macro, put
 @end example
 @findex @code{viper-set-parsing-style-toggling-macro}
 
-in your @file{~/.viper} file.
+in your Viper customization file.
 
 @end table
 @kindex @kbd{%}
@@ -3544,7 +3550,7 @@ then be executed by typing `@kbd{.}'.
 
 Since typing the above sequences of keys may be tedious, the
 functions doing the perusing can be bound to unused keyboard keys in the
-@file{~/.viper} file.  @xref{Viper Specials}, for details.
+Viper customization file.  @xref{Viper Specials}, for details.
 @end table
 @kindex @kbd{C-c M-p}
 @kindex @kbd{C-c M-n}
@@ -3984,7 +3990,7 @@ Write the file.  Viper makes sure that a final newline is always added to
 any file where this newline is missing.  This is done by setting Emacs
 variable @code{require-final-newline} to @code{t}.  If you don't like this
 feature, use @code{setq-default} to set @code{require-final-newline} to
-@code{nil}.  This must be done in @file{.viper} file.
+@code{nil}.  This must be done in the Viper customization file.
 @item :[x,y] w <name>
 Write to the file <name>.
 @item :[x,y] w>> <name>
index f934bc30bd617239066f129064dca81402ce9c99..bf26c669ea11ffe9fbc132be1498674e301df705 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -42,8 +42,7 @@ of _any_ files during installation.
 
 ---
 ** The configure option `--with-crt-dir' has been removed.
-It is no longer needed, as the crt*.o files are no longer linked
-specially.
+It is no longer needed, as the crt*.o files are no longer linked specially.
 
 ---
 ** Directories passed to configure option `--enable-locallisppath' are
@@ -242,17 +241,15 @@ and this variable has been marked obsolete.
 ** `emacs-bzr-version' has been renamed to `emacs-repository-version',
 and works for git too, if you fetch the repository notes.
 
-** New user options:
-
-*** `read-regexp-defaults-function' defines a function to read regexps,
+** `read-regexp-defaults-function' defines a function to read regexps,
 used by commands like `rgrep', `lgrep' `occur', `highlight-regexp', etc.
 You can customize this to specify a function that provides a default
 value from the regexp last history element, or from the symbol found
 at point.
 
 +++
-*** `load-prefer-newer' affects how the `load' function chooses the
-file to load.  If this is non-nil, then when both .el and .elc
+** New option `load-prefer-newer' affects how the `load' function chooses
+the file to load.  If this is non-nil, then when both .el and .elc
 versions of a file exist, and the caller did not explicitly specify
 which one to load, then the newer file is loaded.  The default, nil,
 means to always load the .elc file.
@@ -271,22 +268,20 @@ normal editing behavior.
 
 *** `electric-indent-mode' is enabled by default.
 
++++
 *** `tab-stop-list' is now implicitly extended to infinity by repeating
 the last step.  Its default value is changed to nil, which means a tab
 stop every `tab-width' columns.
 
-** Filling changes
-
-*** New command `cycle-spacing' cycles between spacing conventions:
-having just one space, no spaces, or reverting to the original
-spacing.  Like `just-one-space', it can handle or ignore newlines and
-leave different number of spaces.
-
-*** `fill-single-char-nobreak-p' prevents fill from breaking a line after
-a 1-letter word, which is an error according to Polish and
-Czech typography rules.  To globally enable this feature, evaluate:
++++
+** New command `cycle-spacing' acts like a smarter `just-one-space'.
+When called in succession, it cycles between spacing conventions:
+one space, no spaces, original spacing.
 
-  (add-hook 'fill-nobreak-predicate 'fill-single-char-nobreak-p)
++++
+** The new function `fill-single-char-nobreak-p' can stop fill from breaking
+a line after a one-letter word, which is an error in some typographical
+conventions.  To use it, add it to the `fill-nobreak-predicate' hook.
 
 +++
 ** Uniquify is enabled by default, with `post-forward-angle-brackets' style.
@@ -320,6 +315,7 @@ copy of each repeated line.  The lines need not be sorted.
 \f
 * Changes in Specialized Modes and Packages in Emacs 24.4
 
++++
 ** More packages look for ~/.emacs.d/<foo> additionally to ~/.<foo>.
 Affected files:
 ~/.emacs.d/timelog     replaces  ~/.timelog
@@ -328,7 +324,7 @@ Affected files:
 ~/.emacs.d/ido.last    replaces  ~/.ido.last
 ~/.emacs.d/kkcrc       replaces  ~/.kkcrc
 ~/.emacs.d/quickurls   replaces  ~/.quickurls
-~/.emacs.d/idlwave     replaces  ~/.idlwave
+~/.emacs.d/idlwave/    replaces  ~/.idlwave/
 ~/.emacs.d/bdfcache.el replaces  ~/.bdfcache.el
 ~/.emacs.d/places      replaces  ~/.emacs-places
 ~/.emacs.d/shadows     replaces  ~/.shadows
@@ -353,14 +349,11 @@ you access lexical variables.
 *** New minor mode `jit-lock-debug-mode' lets you use the debuggers on
 code run via JIT Lock.
 
-** Battery
-
 ---
-*** Battery information via the BSD `apm' utility is now supported.
-
-** Buffer Menu
+** Battery information can now be retrieved from BSD's `apm' utility.
 
-*** `M-s a C-o' shows lines matching a regexp in marked buffers using Occur.
+---
+** In the Buffer Menu, `M-s a C-o' shows matches for a regexp in marked buffers.
 
 ** Calendar and Diary
 
@@ -380,18 +373,18 @@ and `calendar-month-header'.
 
 ** Calc
 
++++
 *** Calc by default now uses the Gregorian calendar for all dates, and
 uses January 1, 1 AD as its day number 1.  Previously Calc used the
 Julian calendar for dates before September 14, 1752, and it used
 December 31, 1 BC as its day number 1; the new scheme is more
 consistent with Calendar's calendrical system and day numbering.
 
-*** The new variable `calc-gregorian-switch' lets you configure the
-date when Calc switches from the Julian to the Gregorian calendar.
-Nil, the default value, means to always use the Gregorian calendar.
-The value (YEAR MONTH DAY) means to start using the Gregorian calendar
-on the given date.
++++
+*** The new option `calc-gregorian-switch' lets you configure if
+(and when) Calc switches from the Julian to the Gregorian calendar.
 
++++
 *** Support for ISO 8601 dates.
 
 ** CEDET
@@ -411,13 +404,13 @@ target architecture auto-detection.
 **** Improved detection of used namespaces in current scope in C++.
 
 **** Parsing of default values for variables and function arguments in C/C++.
-They are also displayed by the summarize feature in the modeline.
+They are also displayed by the summarize feature in the mode line.
 
 **** Improved parsing of function pointers in C/C++.
 This also includes parsing of function pointers as function arguments.
 
-**** Parsing of C/C++ preprocessor macros which open new scope.
-For example, this enables parsing of macros which open new namespaces.
+**** Parsing of C/C++ preprocessor macros that open new scope.
+For example, this enables parsing of macros that open new namespaces.
 
 **** Support for 'this' pointer in inline member functions in C++.
 
@@ -431,9 +424,10 @@ For example, this enables parsing of macros which open new namespaces.
 ** CUA mode
 
 *** CUA mode now uses `delete-selection-mode' and `shift-select-mode'.
-Hence, you can now enable it independently from `transient-mark-mode',
-`delete-selection-mode', and `shift-select-mode'.
+Hence, you can now enable it independently from those modes, and from
+`transient-mark-mode'.
 
+---
 *** `cua-highlight-region-shift-only' is now obsolete.
 You can disable `transient-mark-mode' to get the same result.
 
@@ -441,11 +435,13 @@ You can disable `transient-mark-mode' to get the same result.
 
 ** CFEngine mode
 
+---
 *** Support for completion, ElDoc, and Flycheck has been added.
 
+---
 *** The current CFEngine syntax is parsed from "cf-promises -s json".
 There is a fallback syntax available if you don't have cf-promises or
-if it doesn't support that option.
+if your version doesn't support that option.  See option `cfengine-cf-promises'.
 
 ** Delete Selection mode can now be used without `transient-mark-mode'.
 
@@ -460,9 +456,8 @@ restoring the frame/window configuration (frameset).  Additional options
 and `desktop-restore-forces-onscreen' offer further customization.
 
 +++
-** Dired
-
-*** New minor mode `dired-hide-details-mode' hides details.
+** New Dired minor mode `dired-hide-details-mode' toggles whether details,
+such as file ownership or permissions, are visible.
 
 ** Eldoc Mode works properly in the minibuffer.
 
@@ -496,9 +491,7 @@ You can customize `electric-pair-text-pairs' and
 `electric-pair-text-syntax-table' to tweak pairing behavior inside
 strings and comments.
 
-** EPA
-
-*** New option `epa-mail-aliases'.
+** New EPA option `epa-mail-aliases'.
 You can set this to a list of alias expansions for keys to use
 in `epa-mail-encrypt'.
 
@@ -511,9 +504,7 @@ that means: when one of the recipients of the message being encrypted
 is `foo@bar.com', ignore that name as regards encryption.
 This is useful to avoid a query when you have no key for that name.
 
-** ERC
-
-*** New option `erc-accidental-paste-threshold-seconds'.
+** New ERC option `erc-accidental-paste-threshold-seconds'.
 If set to a number, this can be used to avoid accidentally pasting large
 amounts of data into the ERC input.
 
@@ -542,9 +533,8 @@ External su and sudo commands are now the default; the internal,
 Tramp-using variants can still be used by enabling the eshell-tramp
 module.
 
-** F90 mode
 ---
-*** New option `f90-smart-end-names'.
+** New F90 mode option `f90-smart-end-names'.
 
 ** Icomplete is a bit more like Ido.
 
@@ -609,17 +599,19 @@ entries displayed by `Info-index-next', `Info-virtual-index' and
 
 ** JS Mode
 
+---
+*** New option `js-switch-indent-offset'.
+
+---
 *** Better indentation of multiple-variable declarations.
-If declaration spans several lines, variables on the following lines
+If declaration spans several lines, variables on the following lines
 are lined up to the first one.
 
-*** We now recognize and better indent continuations in array
-comprehensions.
-
-*** New option `js-switch-indent-offset`.
+---
+*** Recognition and better indentation of continuations in array comprehensions.
 
-** MH-E has been updated to MH-E version 8.5.
-See MH-E-NEWS for details.
++++
+** MH-E has been updated to version 8.5 - see separate MH-E-NEWS file.
 
 +++
 ** Octave mode
@@ -755,7 +747,7 @@ The same rules are now applied to the symbol search with the difference
 that it matches symbols, and non-symbol characters between symbols.
 
 +++
-** New SES command `ses-rename-cell' allows assigning names to SES cells.
+** New SES command `ses-rename-cell' allows assignment of names to SES cells.
 
 ---
 ** The shell.el option `explicit-bash-args' includes --noediting by default.
@@ -763,9 +755,11 @@ All non-ancient Bash versions support this option.
 
 ** Shell Script mode
 
-*** `sh-mode' now has its own setting for `add-log-current-defun-function'.
+---
+*** The SMIE indentation engine is now used by default - see `sh-use-smie'.
 
-*** The SMIE indentation engine is now used by default.
+---
+*** `sh-mode' now has its own setting for `add-log-current-defun-function'.
 
 ** SMIE indentation can be customized via `smie-config'.
 Emacs can learn the appropriate indentation settings if you provide it
@@ -857,10 +851,6 @@ received with a pull operation.
 under current version control system.  When called with a prefix
 argument, you can remove a file from the ignored file list.
 
----
-*** `cvs-append-to-ignore' has been renamed to `vc-cvs-append-to-ignore'
-because it is moved to vc-cvs.el.
-
 ** VHDL mode
 
 ---
@@ -873,7 +863,7 @@ because it is moved to vc-cvs.el.
 ** The Woman commands `woman-default-faces' and `woman-monochrome-faces'
 are obsolete.  Customize the `woman-*' faces instead.
 
-** Obsolete packages:
+** Obsolete packages
 
 *** Iswitchb is made obsolete by icomplete-mode.
 
@@ -1084,7 +1074,7 @@ displaying the buffer in a window.
 ** New hook `pre-redisplay-function'.
 
 +++
-** New bool-vector set operation functions:
+** New bool-vector set operation functions
 *** `bool-vector-exclusive-or'
 *** `bool-vector-union'
 *** `bool-vector-intersection'
@@ -1113,10 +1103,10 @@ This is like the old `eval-after-load', but better behaved.
 ** New library subr-x.el with miscellaneous small utility functions
 *** `hash-table-keys'
 *** `hash-table-values'
-*** `string-blank-p`
-*** `string-empty-p`
-*** `string-join`
-*** `string-reverse`
+*** `string-blank-p'
+*** `string-empty-p'
+*** `string-join'
+*** `string-reverse'
 *** `string-trim-left'
 *** `string-trim-right'
 *** `string-trim'
@@ -1124,7 +1114,7 @@ This is like the old `eval-after-load', but better behaved.
 *** `string-remove-suffix'
 
 +++
-** Obsoleted functions:
+** Obsoleted functions
 *** `log10'
 *** `dont-compile'
 *** `lisp-complete-symbol'
@@ -3363,7 +3353,7 @@ means you can just remove all calls to the function in question):
 *** `frame-update-faces' (not needed)
 *** `frame-update-face-colors' (`frame-set-background-mode')
 *** `x-frob-font-weight' and `x-frob-font-slant' (`make-face-*' functions)
-*** `x-make-font-bold and x-make-font-demibold (`make-face-bold')
+*** `x-make-font-bold' and `x-make-font-demibold' (`make-face-bold')
 *** `x-make-font-italic' and `x-make-font-oblique' (`make-face-italic')
 *** `x-make-font-bold-italic' (`make-face-bold-italic')
 *** `x-make-font-unbold' (`make-face-unbold')
index 8483f39dca0b12e4ebf72945ce86dd313cd976a8..834fe0638ad84f59c1f179a3b564e442d3cc180c 100644 (file)
--- a/etc/TODO
+++ b/etc/TODO
@@ -1225,6 +1225,9 @@ systems for HTML/XML files automatically."
    More specifically do what's needed to make ibuffer.el the default,
    or just an extension of buff-menu.el.
 
+** Replace linum.el with nlinum.el
+   http://lists.gnu.org/archive/html/emacs-devel/2013-08/msg00379.html
+
 ** Use pcomplete by default in shell-mode.
    This means to make it behave (by default) more like the current code.
    Use it also for read-shell-command, M-x compile, ...
index fcbff5b8ee5b4dbff21784a1466170c8dafad282..469393adae67bea6f5f254cc27e9bee7461543b4 100644 (file)
@@ -1,3 +1,63 @@
+2014-01-29  Glenn Morris  <rgm@gnu.org>
+
+       * simple.el (just-one-space, cycle-spacing): Doc fixes.
+
+2014-01-28  Martin Rudalics  <rudalics@gmx.at>
+
+       * window.el (fit-frame-to-buffer): Fix calculations for margins and
+       height constraints.
+
+2014-01-28  Luke Lee  <luke.yx.lee@gmail.com>
+
+       * progmodes/hideif.el: Extend to full CPP expression syntax.
+       (hif-token-alist): Add missing tokens.
+       (hif-token-regexp): Add support for float/octal/hex immediates.
+       (hif-string-literal-regexp): New const.
+       (hif-tokenize): Recognize strings and float/octal/hex immediates.
+       (hif-exprlist): New function.
+       (hif-parse-if-exp): Use it.
+       (hif-logior-expr, hif-logxor-expr, hif-logand-expr, hif-comp-expr)
+       (hif-logshift-expr, hif-muldiv-expr, hif-lognot, hif-shiftleft)
+       (hif-shiftright, hif-multiply, hif-divide, hif-modulo, hif-equal)
+       (hif-logxor, hif-comma): New functions.
+
+2014-01-28  Glenn Morris  <rgm@gnu.org>
+
+       * textmodes/fill.el (fill-single-char-nobreak-p): Doc tweak.
+
+       * indent.el (tab-stop-list): Doc fix.  Add :version.
+
+       * vc/pcvs.el (vc-editable-p, vc-checkout): Remove unused declarations.
+       (cvs-append-to-ignore): Add compatibility alias.
+
+2014-01-27  Glenn Morris  <rgm@gnu.org>
+
+       * dired.el (dired-hide-details-mode): Don't autoload it,
+       since it cannot be used outside Dired buffers anyway.
+
+       * emulation/cua-base.el (cua-mode): Doc fix.
+
+       * dired.el (dired-hide-details-hide-symlink-targets)
+       (dired-hide-details-hide-information-lines)
+       (dired-hide-details-mode): Doc fixes.
+
+       * shadowfile.el (shadow-info-file, shadow-todo-file): Doc fix.
+       * strokes.el (strokes-file): Doc fix.  Bump :version.
+       (strokes-help): Doc fix.
+       * emulation/viper-init.el (viper-vi-style-in-minibuffer): Doc fix.
+       * emulation/viper.el (viper): Doc fix for custom group.
+       (top-level): Remove oh-so-no-longer-relevant text about vip.
+       * obsolete/otodo-mode.el (todo-prefix): Doc fix.
+
+       * ido.el (ido-save-directory-list-file):
+       * saveplace.el (save-place-file):
+       * calendar/timeclock.el (timeclock-file):
+       * net/quickurl.el (quickurl-url-file):
+       * obsolete/otodo-mode.el (todo-file-do, todo-file-done, todo-file-top):
+       * progmodes/idlwave.el (idlwave-config-directory):
+       * textmodes/remember.el (remember-data-file):
+       Bump :version.
+
 2014-01-26  Glenn Morris  <rgm@gnu.org>
 
        * progmodes/opascal.el (opascal-tab-always-indents, opascal-tab):
index 016fa2f8738a1913ea6a7dca5474e2f8a97279e1..2b4db9a78204cb3e0512904c55d1e89aa68f0c73 100644 (file)
@@ -64,7 +64,7 @@
 ;;
 ;;   (add-hook 'kill-emacs-query-functions 'timeclock-query-out)
 
-;; NOTE: If you change your .timelog file without using timeclock's
+;; NOTE: If you change your timelog file without using timeclock's
 ;; functions, or if you change the value of any of timeclock's
 ;; customizable variables, you should run the command
 ;; `timeclock-reread-log'.  This will recompute any discrepancies in
@@ -83,6 +83,7 @@
 
 (defcustom timeclock-file (locate-user-emacs-file "timelog" ".timelog")
   "The file used to store timeclock data in."
+  :version "24.4"                      ; added locate-user-emacs-file
   :type 'file
   :group 'timeclock)
 
index a30f34bc43a2a0df7120de6bffb3ea2e645ee449..c56e15a71a1cd730329b15f3a72a63aa619fbd53 100644 (file)
@@ -241,13 +241,13 @@ new Dired buffers."
   :group 'dired)
 
 (defcustom dired-hide-details-hide-symlink-targets t
-  "If non-nil, `dired-hide-details-mode' hides symbolic link targets."
+  "Non-nil means `dired-hide-details-mode' hides symbolic link targets."
   :type 'boolean
   :version "24.4"
   :group 'dired)
 
 (defcustom dired-hide-details-hide-information-lines t
-  "Non-nil means hide lines other than header and file/dir lines."
+  "Non-nil means `dired-hide-details-mode' hides all but header and file lines."
   :type 'boolean
   :version "24.4"
   :group 'dired)
@@ -2267,10 +2267,13 @@ unchanged."
       (substring file (match-end 0))
     file))
 \f
-;;; Minor mode for hiding details
-;;;###autoload
 (define-minor-mode dired-hide-details-mode
-  "Hide details in Dired mode."
+  "Toggle visibility of detailed information in current Dired buffer.
+When this minor mode is enabled, details such as file ownership and
+permissions are hidden from view.
+
+See options: `dired-hide-details-hide-symlink-targets' and
+`dired-hide-details-hide-information-lines'."
   :group 'dired
   (unless (derived-mode-p 'dired-mode)
     (error "Not a Dired buffer"))
index 0befb41826b5c440c23f71e7ba06c08d6df1fd44..00058652aef2af555c6b4afd47e4f34cb8d3df37 100644 (file)
@@ -1426,12 +1426,7 @@ options:
 
 You can customize `cua-enable-cua-keys' to completely disable the
 CUA bindings, or `cua-prefix-override-inhibit-delay' to change
-the prefix fallback behavior.
-
-CUA mode manages Transient Mark mode internally.  Trying to disable
-Transient Mark mode while CUA mode is enabled does not work; if you
-only want to highlight the region when it is selected using a
-shifted movement key, set `cua-highlight-region-shift-only'."
+the prefix fallback behavior."
   :global t
   :group 'cua
   :set-after '(cua-enable-modeline-indications
index a4a5f349ffe58e296710c899de94e7a5e6fe8263..65192c245e0f223fe0f9dd5fe243db72f05ac9d3 100644 (file)
@@ -1887,7 +1887,8 @@ Please contact your system administrator. "
                            (if (featurep 'xemacs) "X" "")
                            ))))))
 
-;; Ex source command.  Loads the file specified as argument or `~/.viper'
+;; Ex source command.
+;; Loads the file specified as argument or viper-custom-file-name.
 (defun ex-source ()
   (viper-get-ex-file)
   (if (string= ex-file "")
index 27e7c30375be79f7f9a89791bc6ae398ef8c3ead..9914fdcd2f4b1915978b0b51118954da95b81a71 100644 (file)
@@ -922,7 +922,7 @@ value refers to the number of characters affected."
 
 (defcustom viper-vi-style-in-minibuffer t
   "If t, use vi-style editing in minibuffer.
-Should be set in `~/.viper' file."
+Should be set in `viper-custom-file-name'."
   :type 'boolean
   :group 'viper)
 
index 10afe229a63f063e78cc36e5b0d72146f7cdb13f..95f3dbb1a4098869c54a3029a1d1a8f5902ec023 100644 (file)
@@ -147,8 +147,8 @@ viper-insert-basic-map.  Not recommended, except for novice users.")
 (defvar viper-empty-keymap (make-sparse-keymap))
 
 ;; This was the main Vi mode in old versions of VIP which may have been
-;; extensively used by VIP users.  We declare it as a global var
-;; and, after .viper is loaded, we add this keymap to viper-vi-basic-map.
+;; extensively used by VIP users.  We declare it as a global var and, after
+;; viper-custom-file-name is loaded, we add this keymap to viper-vi-basic-map.
 (defvar viper-mode-map (make-sparse-keymap))
 
 ;; Some important keys used in viper
index a937309c63da37882e71aee3fb908810a46aab40..0c4e7ddac6f67e26768aca67da60421a91f1243e 100644 (file)
@@ -322,7 +322,8 @@ a key is a symbol, e.g., `a', `\\1', `f2', etc., or a list, e.g.,
 ;; More general definitions are inherited by more specific scopes:
 ;; global->major mode->buffer. More specific definitions override more general
 (defun viper-record-kbd-macro (macro-name state macro-body &optional scope)
-  "Record a Vi macro.  Can be used in `.viper' file to define permanent macros.
+  "Record a Vi macro.
+Can be used in `viper-custom-file-name' to define permanent macros.
 MACRO-NAME is a string of characters or a vector of keys.  STATE is
 either `vi-state' or `insert-state'.  It specifies the Viper state in which to
 define the macro.  MACRO-BODY is a string that represents the keyboard macro.
@@ -351,8 +352,8 @@ If SCOPE is nil, the user is asked to specify the scope."
        (error "Can't map an empty macro name"))
 
     ;; Macro-name is usually a vector.  However, command history or macros
-    ;; recorded in ~/.viper may be recorded as strings.  So, convert to
-    ;; vectors.
+    ;; recorded in viper-custom-file-name may be recorded as strings.
+    ;; So, convert to vectors.
     (setq macro-name (viper-fixup-macro macro-name))
     (if (viper-char-array-p macro-name)
        (setq macro-name (viper-char-array-to-macro macro-name)))
@@ -422,7 +423,7 @@ If SCOPE is nil, the user is asked to specify the scope."
                       ;; if we don't let vector macro-body through %S,
                       ;; the symbols `\.' `\[' etc will be converted into
                       ;; characters, causing invalid read  error on recorded
-                      ;; macros in .viper.
+                      ;; macros in viper-custom-file-name.
                       ;; I am not sure is macro-body can still be a string at
                       ;; this point, but I am preserving this option anyway.
                       (if (vectorp macro-body)
@@ -483,11 +484,11 @@ If SCOPE is nil, the user is asked to specify the scope."
 ;; in effect
 (defun viper-unrecord-kbd-macro (macro-name state)
   "Delete macro MACRO-NAME from Viper STATE.
-MACRO-NAME must be a vector of viper-style keys.  This command is used by Viper
-internally, but the user can also use it in ~/.viper to delete pre-defined
-macros supplied with Viper.  The best way to avoid mistakes in macro names to
-be passed to this function is to use viper-describe-kbd-macros and copy the
-name from there."
+MACRO-NAME must be a vector of viper-style keys.  This command is used
+by Viper internally, but you can also use it in `viper-custom-file-name'
+to delete pre-defined macros supplied with Viper.  The best way to avoid
+mistakes in macro names to be passed to this function is to use
+`viper-describe-kbd-macros' and copy the name from there."
   (let* (state-name keymap
         (macro-alist-var
          (cond ((eq state 'vi-state)
@@ -507,7 +508,8 @@ name from there."
         macro-pair macro-entry)
 
     ;; Macro-name is usually a vector.  However, command history or macros
-    ;; recorded in ~/.viper may appear as strings.  So, convert to vectors.
+    ;; recorded in viper-custom-file-name may appear as strings.
+    ;; So, convert to vectors.
     (setq macro-name (viper-fixup-macro macro-name))
     (if (viper-char-array-p macro-name)
        (setq macro-name (viper-char-array-to-macro macro-name)))
index 690cd881c6c9dc450160903759e6daf66366cbce..650b8acbb810b81fac06c397eccf42c55616b7bc 100644 (file)
 ;;
 ;;  The last viper-vi-basic-minor-mode contains most of the usual Vi bindings
 ;;  in its edit mode.  This mode provides access to all Emacs facilities.
-;;  Novice users, however, may want to set their viper-expert-level to 1
-;;  in their .viper file.  This will enable viper-vi-diehard-minor-mode.  This
-;;  minor mode's bindings make Viper simulate the usual Vi very closely.
+;;  Novice users, however, may want to set their viper-expert-level to 1 in
+;;  their viper-custom-file-name.  This will enable viper-vi-diehard-minor-mode.
+;;  This minor mode's bindings make Viper simulate the usual Vi very closely.
 ;;  For instance,  C-c will not have its standard Emacs binding
 ;;  and so many of the goodies of Emacs are not available.
 ;;
 ;;
 ;;  Viper gurus should have at least
 ;;      (setq viper-expert-level 4)
-;;  in their ~/.viper files.  This will unsuppress all Emacs keys that are not
-;;  essential for VI-style editing.
+;;  in their viper-custom-file-name.  This will unsuppress all Emacs keys
+;;  that are not essential for VI-style editing.
 ;;  Pick-and-choose users may want to put
 ;;      (setq viper-expert-level 5)
-;;  in ~/.viper.  Viper will then leave it up to the user to set the variables
-;;  viper-want-*  See viper-set-expert-level for details.
+;;  in viper-custom-file-name.  Viper will then leave it up to the user to
+;;  set the variables viper-want-*  See viper-set-expert-level for details.
 ;;
 ;;  The very first minor mode, viper-vi-intercept-minor-mode, is of no
 ;;  concern for the user.  It is needed to bind Viper's vital keys, such as
@@ -319,8 +319,7 @@ If set by the user, this must be done _before_ Viper is loaded in `~/.emacs'.")
 
 (defgroup viper nil
   "Vi emulation within Emacs.
-NOTE: Viper customization should be saved in `viper-custom-file-name', which
-defaults to `~/.viper'."
+NOTE: Viper customization should be saved in `viper-custom-file-name'."
   :prefix "viper-"
   :group 'emulations)
 
@@ -1222,11 +1221,7 @@ If you wish to Viperize AND make this your way of life, please put
        (require 'viper)
 
 in your init file (preferably, close to the top).
-These two lines must come in the order given.
-
-** Viper users:
-       **** The startup file name has been changed from .vip to .viper
-       **** All vip-* style names have been converted to viper-* style."))
+These two lines must come in the order given."))
         (if (y-or-n-p "Viperize? ")
             (setq viper-mode t)
           (setq viper-mode nil))
@@ -1268,8 +1263,8 @@ These two lines must come in the order given.
 
 
 ;; Set some useful macros, advices
-;; These must be BEFORE ~/.viper is loaded,
-;; so the user can unrecord them in ~/.viper.
+;; These must be BEFORE viper-custom-file-name is loaded,
+;; so the user can unrecord them in viper-custom-file-name.
 (if viper-mode
     (progn
       ;; set advices and some variables that give emacs Vi look.
@@ -1289,7 +1284,7 @@ These two lines must come in the order given.
       ;; Make %%% toggle parsing comments for matching parentheses
       (viper-set-parsing-style-toggling-macro nil)
 
-      ;; ~/.viper is loaded if exists
+      ;; viper-custom-file-name is loaded if exists
       (viper-load-custom-file)
 
       ;; should be after loading custom file to avoid the pesky msg that
@@ -1300,7 +1295,7 @@ These two lines must come in the order given.
 
 
 \f
-;; Applying Viper customization -- runs after (load .viper)
+;; Applying Viper customization -- runs after (load viper-custom-file-name)
 
 ;; Save user settings or Viper defaults for vars controlled by
 ;; viper-expert-level
@@ -1350,7 +1345,7 @@ These two lines must come in the order given.
 
 
 ;; Intercept maps could go in viper-keym.el
-;; We keep them here in case someone redefines them in ~/.viper
+;; We keep them here in case someone redefines them in viper-custom-file-name
 
 (define-key viper-vi-intercept-map viper-ESC-key 'viper-intercept-ESC-key)
 (define-key viper-insert-intercept-map viper-ESC-key 'viper-intercept-ESC-key)
index bd4055b93144574613bb849cb5d8c78b03eaa90e..d25978eee5f04ce3d93b02296c5a2c3359f8a106 100644 (file)
@@ -3,7 +3,7 @@
 ;; Copyright (C) 1992, 2001-2014 Free Software Foundation, Inc.
 
 ;; Author: Anders Holst <aho@sans.kth.se>
-;; Last change: 3 March 1998
+;; Maintainer: FSF
 ;; Version: 1.6
 ;; Keywords: abbrev convenience
 
index f0a4dd36a98bad4749b3da2594482f6a9a303fb4..265a9a9f1c1c9c6fb0f2e62f2b1876048c894569 100644 (file)
@@ -956,6 +956,7 @@ ido is running.  Copied from `icomplete-minibuffer-setup-hook'."
 Variables stored are: `ido-last-directory-list', `ido-work-directory-list',
 `ido-work-file-list', and `ido-dir-file-cache'.
 Must be set before enabling ido mode."
+  :version "24.4"                       ; added locate-user-emacs-file
   :type 'string
   :group 'ido)
 
index ca221530458b74565c57a8520c12a2cc4b60ac6c..c042db891c447809d6713585d4ffe7036464c36b 100644 (file)
@@ -586,16 +586,17 @@ See also `indent-relative-maybe'."
          (move-marker opoint nil))
       (tab-to-tab-stop))))
 
-(defcustom tab-stop-list
-  nil
+(defcustom tab-stop-list nil
   "List of tab stop positions used by `tab-to-tab-stop'.
-This should be a list of integers, ordered from smallest to largest.
-It implicitly extends to infinity by repeating the last step (e.g. '(1 2 5)
-is equivalent to '(1 2 5 8 11)).
-If the list has less than 2 elements, `tab-width' is used as the \"last step\"."
+This should be nil, or a list of integers, ordered from smallest to largest.
+It implicitly extends to infinity through repetition of the last step.
+For example, '(1 2 5) is equivalent to '(1 2 5 8 11 ...).  If the list has
+fewer than 2 elements, `tab-width' is used as the \"last step\".
+A value of nil means a tab stop every `tab-width' columns."
   :group 'indent
+  :version "24.4"                       ; from explicit list to nil
+  :safe 'listp
   :type '(repeat integer))
-(put 'tab-stop-list 'safe-local-variable 'listp)
 
 (defvar edit-tab-stops-map
   (let ((map (make-sparse-keymap)))
index c2e4a734214aff8218e404abf67f20f7a1b1d748..fdb117ea690f59d3d0bc5d0dfb810ebd3962ede0 100644 (file)
@@ -97,6 +97,7 @@
 (defcustom quickurl-url-file
   (locate-user-emacs-file "quickurls" ".quickurls")
   "File that contains the URL list."
+  :version "24.4"                       ; added locate-user-emacs-file
   :type  'file
   :group 'quickurl)
 
index 53220f064810bf8507587cf0fdaa79581cacdb3d..d551d167a91f4ff5a82e67f134d7f78a3d25a641 100644 (file)
 
 This is useful in conjunction with `calendar' and `diary' if you use
 
-#include \"~/.todo-do\"
+#include \"~/.emacs.d/todo-do\"
 
 in your diary file to include your todo list file as part of your
 diary.  With the default value \"*/*\" the diary displays each entry
@@ -284,10 +284,12 @@ the diary file somewhat."
   :group 'todo)
 (defcustom todo-file-do    (locate-user-emacs-file "todo-do" ".todo-do")
   "TODO mode list file."
+  :version "24.4"                       ; added locate-user-emacs-file
   :type 'file
   :group 'todo)
 (defcustom todo-file-done  (locate-user-emacs-file "todo-done" ".todo-done")
   "TODO mode archive file."
+  :version "24.4"                       ; added locate-user-emacs-file
   :type 'file
   :group 'todo)
 (defcustom todo-mode-hook  nil
@@ -321,6 +323,7 @@ window."
 
 Not in TODO format, but diary compatible.
 Automatically generated when `todo-save-top-priorities' is non-nil."
+  :version "24.4"                       ; added locate-user-emacs-file
   :type 'string
   :group 'todo)
 
@@ -916,7 +919,7 @@ If INCLUDE-SEP is non-nil, return point after the separator."
                     ["Quit"                 todo-quit t]
                     ))
 
-;; As calendar reads .todo-do before todo-mode is loaded.
+;; As calendar reads todo-file-do before todo-mode is loaded.
 ;;;###autoload
 (define-derived-mode todo-mode nil "TODO"
   "Major mode for editing TODO lists."
index 35daeb0a573e62b075d453e1adde1ec18daafd75..fc04e5e558ff967910959600188c9e01dae6117d 100644 (file)
@@ -35,9 +35,7 @@
 ;; M-x hide-ifdefs  or C-c @ h
 ;;
 ;; Hide-ifdef suppresses the display of code that the preprocessor wouldn't
-;; pass through.  The support of constant expressions in #if lines is
-;; limited to identifiers, parens, and the operators: &&, ||, !, and
-;; "defined".  Please extend this.
+;; pass through.  Support complete C/C++ expression and precedence.
 ;;
 ;; The hidden code is marked by ellipses (...).  Be
 ;; cautious when editing near ellipses, since the hidden text is
@@ -97,6 +95,9 @@
 ;;
 ;; Written by Brian Marick, at Gould, Computer Systems Division, Urbana IL.
 ;; Extensively modified by Daniel LaLiberte (while at Gould).
+;;
+;; Extensively modified by Luke Lee in 2013 to support complete C expression
+;; evaluation.
 
 ;;; Code:
 
@@ -368,26 +369,44 @@ that form should be displayed.")
 (defvar hif-token-list)
 
 (defconst hif-token-alist
-  '(("||" or)
-    ("&&" and)
+  '(("||"  . hif-or)
+    ("&&"  . hif-and)
     ("|"  . hif-logior)
+    ("^"   . hif-logxor)
     ("&"  . hif-logand)
-    ("==" . equal)
+    ("<<"  . hif-shiftleft)
+    (">>"  . hif-shiftright)
+    ("=="  . hif-equal)
+    ;; Note: we include tokens like `=' which aren't supported by CPP's
+    ;; expression syntax, because they are still relevant for the tokenizer,
+    ;; especially in conjunction with ##.
+    ("="   . hif-assign)
     ("!=" . hif-notequal)
-    ("!"  . not)
-    ("("  . lparen)
-    (")"  . rparen)
+    ("##"  . hif-token-concat)
+    ("!"   . hif-not)
+    ("~"   . hif-lognot)
+    ("("   . hif-lparen)
+    (")"   . hif-rparen)
     (">"  . hif-greater)
     ("<"  . hif-less)
     (">=" . hif-greater-equal)
     ("<=" . hif-less-equal)
     ("+"  . hif-plus)
     ("-"  . hif-minus)
+    ("*"   . hif-multiply)
+    ("/"   . hif-divide)
+    ("%"   . hif-modulo)
     ("?"  . hif-conditional)
     (":"  . hif-colon)))
 
 (defconst hif-token-regexp
-  (concat (regexp-opt (mapcar 'car hif-token-alist)) "\\|\\w+"))
+  (concat (regexp-opt (mapcar 'car hif-token-alist))
+          "\\|0x[0-9a-fA-F]+\\.?[0-9a-fA-F]*"
+          "\\|[0-9]+\\.?[0-9]*"  ;; decimal/octal
+          "\\|\\w+"))
+
+(defconst hif-string-literal-regexp  "\\(\"\\(?:[^\"\\]\\|\\\\.\\)*\"\\)")
+
 
 (defun hif-tokenize (start end)
   "Separate string between START and END into a list of tokens."
@@ -401,23 +420,63 @@ that form should be displayed.")
           ((looking-at "\\\\\n")
            (forward-char 2))
 
+           ((looking-at hif-string-literal-regexp)
+            (push (substring-no-properties (match-string 1)) token-list)
+            (goto-char (match-end 0)))
           ((looking-at hif-token-regexp)
            (let ((token (buffer-substring (point) (match-end 0))))
              (goto-char (match-end 0))
              ;; (message "token: %s" token) (sit-for 1)
-             (push (or (cdr (assoc token hif-token-alist))
-                        (if (string-equal token "defined") 'hif-defined)
-                        (if (string-match "\\`[0-9]*\\'" token)
-                            (string-to-number token))
-                        (intern token))
-                   token-list)))
+             (push
+               (or (cdr (assoc token hif-token-alist))
+                   (if (string-equal token "defined") 'hif-defined)
+                   ;; TODO:
+                   ;; 1. postfix 'l', 'll', 'ul' and 'ull'
+                   ;; 2. floating number formats
+                   ;; 3. hexadecimal/octal floats
+                   ;; 4. 098 is interpreted as octal conversion error
+                   ;; FIXME: string-to-number does not convert hex floats
+                   (if (string-match "0x\\([0-9a-fA-F]+\\.?[0-9a-fA-F]*\\)"
+                                     token)
+                       (string-to-number (match-string 1 token) 16)) ;; hex
+                   ;; FIXME: string-to-number does not convert octal floats
+                   (if (string-match "\\`0[0-9]+\\(\\.[0-9]+\\)?\\'" token)
+                       (string-to-number token 8)) ;; octal
+                   (if (string-match "\\`[1-9][0-9]*\\(\\.[0-9]+\\)?\\'"
+                                     token)
+                       (string-to-number token)) ;; decimal
+                   (intern token))
+               token-list)))
           (t (error "Bad #if expression: %s" (buffer-string)))))))
     (nreverse token-list)))
 
-;;;-----------------------------------------------------------------
-;;; Translate C preprocessor #if expressions using recursive descent.
-;;; This parser is limited to the operators &&, ||, !, and "defined".
-;;; Added ==, !=, +, and -.  Gary Oberbrunner, garyo@avs.com, 8/9/94
+;;------------------------------------------------------------------------
+;; Translate C preprocessor #if expressions using recursive descent.
+;; This parser was limited to the operators &&, ||, !, and "defined".
+;; Added ==, !=, +, and -.  Gary Oberbrunner, garyo@avs.com, 8/9/94
+;;
+;; Implement the C language operator precedence table. Add all those
+;; missing operators that could be used in macros. Luke Lee 2013-09-04
+
+;;  | Operator Type        | Operator                    | Associativity |
+;;  +----------------------+-----------------------------+---------------+
+;;  | Primary Expression   | () [] . -> expr++ expr--    | left-to-right |
+;;  | Unary Operators      | * & + - ! ~ ++expr --expr   | right-to-left |
+;;  |                      | (typecast) sizeof           |               |
+;;  | Binary Operators     | * / %                       | left-to-right |
+;;  |                      | + -                         |               |
+;;  |                      | >> <<                       |               |
+;;  |                      | < > <= >=                   |               |
+;;  |                      | == !=                       |               |
+;;  |                      | &                           |               |
+;;  |                      | ^                           |               |
+;;  |                      | |                           |               |
+;;  |                      | &&                          |               |
+;;  |                      | ||                          |               |
+;;  | Ternary Operator     | ?:                          | right-to-left |
+;; x| Assignment Operators | = += -= *= /= %= >>= <<= &= | right-to-left |
+;;  |                      | ^= =                        |               |
+;;  | Comma                | ,                           | left-to-right |
 
 (defsubst hif-nexttoken ()
   "Pop the next token from token-list into the let variable \"hif-token\"."
@@ -428,10 +487,24 @@ that form should be displayed.")
   (let ((hif-token-list token-list))
     (hif-nexttoken)
     (prog1
-        (hif-expr)
+        (and hif-token
+             (hif-exprlist))
       (if hif-token ; is there still a token?
           (error "Error: unexpected token: %s" hif-token)))))
 
+(defun hif-exprlist ()
+  "Parse an exprlist: expr { ',' expr}"
+  (let ((result (hif-expr)))
+    (if (eq hif-token 'hif-comma)
+       (let ((temp (list result)))
+         (while
+           (progn
+             (hif-nexttoken)
+             (push (hif-expr) temp)
+             (eq hif-token 'hif-comma)))
+         (cons 'hif-comma (nreverse temp)))
+      result)))
+
 (defun hif-expr ()
   "Parse an expression as found in #if.
        expr : or-expr | or-expr '?' expr ':' expr."
@@ -448,67 +521,125 @@ that form should be displayed.")
     result))
 
 (defun hif-or-expr ()
-  "Parse n or-expr : and-expr | or-expr '||' and-expr."
+  "Parse an or-expr : and-expr | or-expr '||' and-expr."
   (let ((result (hif-and-expr)))
-    (while (eq hif-token 'or)
+    (while (eq hif-token 'hif-or)
       (hif-nexttoken)
       (setq result (list 'hif-or result (hif-and-expr))))
   result))
 
 (defun hif-and-expr ()
-  "Parse an and-expr : eq-expr | and-expr '&&' eq-expr."
+  "Parse an and-expr : logior-expr | and-expr '&&' logior-expr."
+  (let ((result (hif-logior-expr)))
+    (while (eq hif-token 'hif-and)
+      (hif-nexttoken)
+      (setq result (list 'hif-and result (hif-logior-expr))))
+    result))
+
+(defun hif-logior-expr ()
+  "Parse a logor-expr : logxor-expr | logor-expr '|' logxor-expr."
+  (let ((result (hif-logxor-expr)))
+    (while (eq hif-token 'hif-logior)
+      (hif-nexttoken)
+      (setq result (list 'hif-logior result (hif-logxor-expr))))
+    result))
+
+(defun hif-logxor-expr ()
+  "Parse a logxor-expr : logand-expr | logxor-expr '^' logand-expr."
+  (let ((result (hif-logand-expr)))
+    (while (eq hif-token 'hif-logxor)
+      (hif-nexttoken)
+      (setq result (list 'hif-logxor result (hif-logand-expr))))
+    result))
+
+(defun hif-logand-expr ()
+  "Parse a logand-expr : eq-expr | logand-expr '&' eq-expr."
   (let ((result (hif-eq-expr)))
-    (while (eq hif-token 'and)
+    (while (eq hif-token 'hif-logand)
       (hif-nexttoken)
-      (setq result (list 'hif-and result (hif-eq-expr))))
+      (setq result (list 'hif-logand result (hif-eq-expr))))
     result))
 
 (defun hif-eq-expr ()
-  "Parse an eq-expr : math | eq-expr `=='|`!='|`<'|`>'|`>='|`<=' math."
-  (let ((result (hif-math))
+  "Parse an eq-expr : comp | eq-expr `=='|`!=' comp."
+  (let ((result (hif-comp-expr))
        (eq-token nil))
-    (while (memq hif-token '(equal hif-notequal hif-greater hif-less
-                            hif-greater-equal hif-less-equal))
+    (while (memq hif-token '(hif-equal hif-notequal))
       (setq eq-token hif-token)
       (hif-nexttoken)
-      (setq result (list eq-token result (hif-math))))
+      (setq result (list eq-token result (hif-comp-expr))))
+    result))
+
+(defun hif-comp-expr ()
+  "Parse a comp-expr : logshift | comp-expr `<'|`>'|`>='|`<=' logshift."
+  (let ((result (hif-logshift-expr))
+        (comp-token nil))
+    (while (memq hif-token '(hif-greater hif-less hif-greater-equal hif-less-equal))
+      (setq comp-token hif-token)
+      (hif-nexttoken)
+      (setq result (list comp-token result (hif-logshift-expr))))
+    result))
+
+(defun hif-logshift-expr ()
+  "Parse a logshift : math | logshift `<<'|`>>' math."
+  (let ((result (hif-math))
+        (shift-token nil))
+    (while (memq hif-token '(hif-shiftleft hif-shiftright))
+      (setq shift-token hif-token)
+      (hif-nexttoken)
+      (setq result (list shift-token result (hif-math))))
     result))
 
 (defun hif-math ()
-  "Parse an expression with + or - and simpler things.
-       math : factor | math '+|-' factor."
+  "Parse an expression with + or -.
+       math : muldiv | math '+|-' muldiv."
+  (let ((result (hif-muldiv-expr))
+        (math-op nil))
+    (while (memq hif-token '(hif-plus hif-minus))
+      (setq math-op hif-token)
+      (hif-nexttoken)
+      (setq result (list math-op result (hif-muldiv-expr))))
+    result))
+
+(defun hif-muldiv-expr ()
+  "Parse an expression with *,/,%.
+       muldiv : factor | muldiv '*|/|%' factor."
   (let ((result (hif-factor))
        (math-op nil))
-    (while (memq hif-token '(hif-plus hif-minus hif-logior hif-logand))
+    (while (memq hif-token '(hif-multiply hif-divide hif-modulo))
       (setq math-op hif-token)
       (hif-nexttoken)
       (setq result (list math-op result (hif-factor))))
   result))
 
 (defun hif-factor ()
-  "Parse a factor: '!' factor | '(' expr ')' | 'defined(' id ')' | id."
+  "Parse a factor: '!' factor | '~' factor | '(' expr ')' | 'defined(' id ')' | 'id(parmlist)' | strings | id."
   (cond
-   ((eq hif-token 'not)
+   ((eq hif-token 'hif-not)
     (hif-nexttoken)
     (list 'hif-not (hif-factor)))
 
-   ((eq hif-token 'lparen)
+   ((eq hif-token 'hif-lognot)
     (hif-nexttoken)
-    (let ((result (hif-expr)))
-      (if (not (eq hif-token 'rparen))
+    (list 'hif-lognot (hif-factor)))
+
+   ((eq hif-token 'hif-lparen)
+    (hif-nexttoken)
+    (let ((result (hif-exprlist)))
+      (if (not (eq hif-token 'hif-rparen))
          (error "Bad token in parenthesized expression: %s" hif-token)
        (hif-nexttoken)
        result)))
 
    ((eq hif-token 'hif-defined)
     (hif-nexttoken)
-    (let ((paren (when (eq hif-token 'lparen) (hif-nexttoken) t))
+    (let ((paren (when (eq hif-token 'hif-lparen) (hif-nexttoken) t))
          (ident hif-token))
-      (if (memq hif-token '(or and not hif-defined lparen rparen))
+      (if (memq hif-token '(or and not hif-defined hif-lparen hif-rparen))
          (error "Error: unexpected token: %s" hif-token))
       (when paren
        (hif-nexttoken)
-       (unless (eq hif-token 'rparen)
+        (unless (eq hif-token 'hif-rparen)
          (error "Error: expected \")\" after identifier")))
       (hif-nexttoken)
       `(hif-defined (quote ,ident))))
@@ -541,22 +672,54 @@ that form should be displayed.")
   (or (not (zerop (hif-mathify a))) (not (zerop (hif-mathify b)))))
 (defun hif-not (a)
   (zerop (hif-mathify a)))
+(defun hif-lognot (a)
+  (lognot (hif-mathify a)))
 
 (defmacro hif-mathify-binop (fun)
   `(lambda (a b)
      ,(format "Like `%s' but treat t and nil as 1 and 0." fun)
      (,fun (hif-mathify a) (hif-mathify b))))
 
+(defun hif-shiftleft (a b)
+  (setq a (hif-mathify a))
+  (setq b (hif-mathify b))
+  (if (< a 0)
+      (ash a b)
+    (lsh a b)))
+
+(defun hif-shiftright (a b)
+  (setq a (hif-mathify a))
+  (setq b (hif-mathify b))
+  (if (< a 0)
+      (ash a (- b))
+    (lsh a (- b))))
+
+
+(defalias 'hif-multiply      (hif-mathify-binop *))
+(defalias 'hif-divide        (hif-mathify-binop /))
+(defalias 'hif-modulo        (hif-mathify-binop %))
 (defalias 'hif-plus          (hif-mathify-binop +))
 (defalias 'hif-minus         (hif-mathify-binop -))
+(defalias 'hif-equal         (hif-mathify-binop =))
 (defalias 'hif-notequal      (hif-mathify-binop /=))
 (defalias 'hif-greater       (hif-mathify-binop >))
 (defalias 'hif-less          (hif-mathify-binop <))
 (defalias 'hif-greater-equal (hif-mathify-binop >=))
 (defalias 'hif-less-equal    (hif-mathify-binop <=))
 (defalias 'hif-logior        (hif-mathify-binop logior))
+(defalias 'hif-logxor        (hif-mathify-binop logxor))
 (defalias 'hif-logand        (hif-mathify-binop logand))
 
+
+(defun hif-comma (&rest expr)
+  "Evaluate a list of expr, return the result of the last item"
+  (let ((result nil))
+    (dolist (e expr)
+      (ignore-errors
+        (setq result (funcall hide-ifdef-evaluator e))))
+    result))
+
+
 ;;;----------- end of parser -----------------------
 
 
index 3dcc183345aa67e0b5cde1d431068009d4a91038..8d4320669a126d89d46727be5adda2c54818f7b0 100644 (file)
@@ -449,6 +449,7 @@ value of `!DIR'.  See also `idlwave-library-path'."
 (defcustom idlwave-config-directory
   (locate-user-emacs-file "idlwave" ".idlwave")
   "Directory for configuration files and user-library catalog."
+  :version "24.4"                      ; added locate-user-emacs-file
   :group 'idlwave-routine-info
   :type 'file)
 
index 064a70a1041747ddf8d49abdf5ff8728ef534200..91da103ba9e4dced3f13a2c476b7861c2358da2d 100644 (file)
@@ -70,6 +70,7 @@ following code in your init file:
 
 (defcustom save-place-file (locate-user-emacs-file "places" ".emacs-places")
   "Name of the file that records `save-place-alist' value."
+  :version "24.4"                       ; added locate-user-emacs-file
   :type 'file
   :group 'save-place)
 
index d409d5672f5e5e4616711d8c9d9e191e1bab68df..2bf200d07dddb7485d8fca367ed85f12d14c180f 100644 (file)
 ;;  documentation for these functions for information on how and when to use
 ;;  them).  After doing this once, everything should be automatic.
 
-;;  The lists of clusters and shadows are saved in a file called .shadows,
-;;  so that they can be remembered from one Emacs session to another, even
-;;  (as much as possible) if the Emacs session terminates abnormally.  The
-;;  files needing to be copied are stored in .shadow_todo; if a file cannot
-;;  be copied for any reason, it will stay on the list to be tried again
-;;  next time.  The .shadows file should itself have shadows on all your
-;;  accounts so that the information in it is consistent everywhere, but
-;;  .shadow_todo is local information and should have no shadows.
+;;  The lists of clusters and shadows are saved in a ~/.emacs.d/shadows
+;;  (`shadow-info-file') file, so that they can be remembered from one
+;;  Emacs session to another, even (as much as possible) if the Emacs
+;;  session terminates abnormally.  The files needing to be copied are
+;;  stored in `shadow-todo-file'; if a file cannot be copied for any
+;;  reason, it will stay on the list to be tried again next time.  The
+;;  `shadow-info-file' file should itself have shadows on all your accounts
+;;  so that the information in it is consistent everywhere, but
+;;  `shadow-todo-file' is local information and should have no shadows.
 
 ;;  If you do not want to copy a particular file, you can answer "no" and
 ;;  be asked again next time you hit C-x 4 s or exit Emacs.  If you do not
 ;;  want to be asked again, use shadow-cancel, and you will not be asked
 ;;  until you change the file and save it again.  If you do not want to
-;;  shadow that file ever again, you can edit it out of the .shadows
-;;  buffer.  Anytime you edit the .shadows buffer, you must type M-x
+;;  shadow that file ever again, you can edit it out of the shadows
+;;  buffer.  Anytime you edit the shadows buffer, you must type M-x
 ;;  shadow-read-files to load in the new information, or your changes will
 ;;  be overwritten!
 
@@ -106,10 +107,13 @@ files that have been changed and need to be copied to other systems."
   :type 'boolean
   :group 'shadow)
 
+;; FIXME in a sense, this changed in 24.4 (addition of locate-user-emacs-file),
+;; but due to the weird way this variable is initialized to nil, it didn't
+;; literally change.  Same for shadow-todo-file.
 (defcustom shadow-info-file nil
   "File to keep shadow information in.
 The `shadow-info-file' should be shadowed to all your accounts to
-ensure consistency.  Default: ~/.shadows"
+ensure consistency.  Default: ~/.emacs.d/shadows"
   :type '(choice (const nil) file)
   :group 'shadow)
 
@@ -119,7 +123,7 @@ This means that if a remote system is down, or for any reason you cannot or
 decide not to copy your shadow files at the end of one Emacs session, it will
 remember and ask you again in your next Emacs session.
 This file must NOT be shadowed to any other system, it is host-specific.
-Default: ~/.shadow_todo"
+Default: ~/.emacs.d/shadow_todo"
   :type '(choice (const nil) file)
   :group 'shadow)
 
index 5eb0a04471f0977dc9dd9b93e2c7603a1bda437d..0aa32767295372bf1130a8032eeccc8b64ecf531 100644 (file)
@@ -794,7 +794,8 @@ If BACKWARD-ONLY is non-nil, only delete them before point."
 
 (defun just-one-space (&optional n)
   "Delete all spaces and tabs around point, leaving one space (or N spaces).
-If N is negative, delete newlines as well, leaving -N spaces."
+If N is negative, delete newlines as well, leaving -N spaces.
+See also `cycle-spacing'."
   (interactive "*p")
   (cycle-spacing n nil t))
 
@@ -805,31 +806,22 @@ position and original spacing around the point in this
 variable.")
 
 (defun cycle-spacing (&optional n preserve-nl-back single-shot)
-  "Manipulate spaces around the point in a smart way.
+  "Manipulate whitespace around point in a smart way.
+In interactive use, this function behaves differently in successive
+consecutive calls.
 
-When run as an interactive command, the first time it's called
-in a sequence, deletes all spaces and tabs around point leaving
-one (or N spaces).  If this does not change content of the
-buffer, skips to the second step:
+The first call in a sequence acts like `just-one-space'.
+It deletes all spaces and tabs around point, leaving one space
+\(or N spaces).  N is the prefix argument.  If N is negative,
+it deletes newlines as well, leaving -N spaces.
+\(If PRESERVE-NL-BACK is non-nil, it does not delete newlines before point.)
 
-When run for the second time in a sequence, deletes all the
-spaces it has previously inserted.
+The second call in a sequence (or the first call if the above does
+not result in any changes) deletes all spaces.
 
-When run for the third time, returns the whitespace and point in
-a state encountered when it had been run for the first time.
+The third call in a sequence restores the original whitespace (and point).
 
-For example, if buffer contains \"foo ^ bar\" with \"^\" denoting the
-point, calling `cycle-spacing' command will replace two spaces with
-a single space, calling it again immediately after, will remove all
-spaces, and calling it for the third time will bring two spaces back
-together.
-
-If N is negative, delete newlines as well.  However, if
-PRESERVE-NL-BACK is t new line characters prior to the point
-won't be removed.
-
-If SINGLE-SHOT is non-nil, will only perform the first step.  In
-other words, it will work just like `just-one-space' command."
+If SINGLE-SHOT is non-nil, it only performs the first step in the sequence."
   (interactive "*p")
   (let ((orig-pos       (point))
        (skip-characters (if (and n (< n 0)) " \t\n\r" " \t"))
index 890c3d0726c107fbf30e0d366068eaa9f82ce6d5..35136e5da651677109daaf03b7cc2a721a776220 100644 (file)
 
 ;; > M-x strokes-prompt-user-save-strokes
 
-;; and it will save your strokes in ~/.strokes, or you may wish to change
-;; this by setting the variable `strokes-file'.
+;; and it will save your strokes in your `strokes-file'.
 
 ;; Note that internally, all of the routines that are part of this
 ;; package are able to deal with complex strokes, as they are a superset
@@ -261,7 +260,8 @@ WARNING: Changing the value of this variable will gravely affect the
   :group 'strokes)
 
 (defcustom strokes-file (locate-user-emacs-file "strokes" ".strokes")
-  "File containing saved strokes for Strokes mode (default is ~/.strokes)."
+  "File containing saved strokes for Strokes mode."
+  :version "24.4"                       ; added locate-user-emacs-file
   :type 'file
   :group 'strokes)
 
@@ -991,11 +991,10 @@ down, then use a prefix argument:
 
 > C-u M-x strokes-list-strokes
 
-Your strokes are stored as you enter them.  They get saved in a file
-called ~/.strokes, along with other strokes configuration variables.
-You can change this location by setting the variable `strokes-file'.
-You will be prompted to save them when you exit Emacs, or you can save
-them with
+Your strokes are stored as you enter them.  They get saved into the
+file specified by the `strokes-file' variable, along with other strokes
+configuration variables.  You will be prompted to save them when
+you exit Emacs, or you can save them with
 
 > M-x strokes-prompt-user-save-strokes
 
index 35cc5320250a2a2f1fb327a4684f84ae740130ff..93e69055b213198e61f9eb954a2ce3637c412436 100644 (file)
@@ -330,10 +330,10 @@ places."
                   (eq (char-syntax (following-char)) ?w)))))))
 
 (defun fill-single-char-nobreak-p ()
-  "Return t if point is placed just after a 1-letter word.
-This is used in `fill-nobreak-predicate' to prevent breaking line just
-after a 1-letter word (usually conjunction or preposition) which is
-considered composition error in Polish and Czech typography."
+  "Return non-nil if a one-letter word is before point.
+This function is suitable for adding to the hook `fill-nobreak-predicate',
+to prevent the breaking of a line just after a one-letter word,
+which is an error according to some typographical conventions."
   (save-excursion
     (skip-chars-backward " \t")
     (backward-char 2)
index ceecbd9ba37b7d8047794ffe10b8478abb8aca86..3f5227f908b4852046c111e208d393c8355eeda4 100644 (file)
 ;;
 ;; * Using "remember"
 ;;
-;; As a rough beginning, what I do is to keep my .notes file in
+;; As a rough beginning, what I do is to keep my `remember-data-file' in
 ;; outline-mode format, with a final entry called "* Raw data".  Then,
 ;; at intervals, I can move the data that gets appended there into
 ;; other places.  But certainly this should evolve into an intuitive
@@ -386,6 +386,7 @@ Subject: %s\n\n"
   "The file in which to store unprocessed data.
 When set via customize, visited file of the notes buffer (if it
 exists) might be changed."
+  :version "24.4"                       ; added locate-user-emacs-file
   :type 'file
   :set (lambda (symbol value)
          (let ((buf (find-buffer-visiting (default-value symbol))))
index 3e09a7a6c061a7ccf811d2dfa133bad9b18df293..f954e5d1c26b3da9959f75476ec5bdabcea49d7b 100644 (file)
@@ -1,7 +1,6 @@
 ;;; type-break.el --- encourage rests from typing at appropriate intervals  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1994-1995, 1997, 2000-2014 Free Software Foundation,
-;; Inc.
+;; Copyright (C) 1994-1995, 1997, 2000-2014 Free Software Foundation, Inc.
 
 ;; Author: Noah Friedman
 ;; Maintainer: Noah Friedman <friedman@splode.com>
@@ -208,6 +207,7 @@ key is pressed."
   (locate-user-emacs-file "type-break" ".type-break")
   "Name of file used to save state across sessions.
 If this is nil, no data will be saved across sessions."
+  :version "24.4"                       ; added locate-user
   :type 'file)
 
 (defvar type-break-post-command-hook '(type-break-check)
index 5c645ffd5196ed7ef039e5cc4e34f2c711793ed9..4f0f1e8e7fe3e1fa22c26dc58c03e9a7cb13d201 100644 (file)
@@ -1976,8 +1976,9 @@ This command ignores files that are not flagged as `Unknown'."
     (setf (cvs-fileinfo->type fi) 'DEAD))
   (cvs-cleanup-collection cvs-cookies nil nil nil))
 
-(declare-function vc-editable-p "vc" (file))
-(declare-function vc-checkout "vc" (file &optional writable rev))
+(define-obsolete-function-alias 'cvs-append-to-ignore 'vc-cvs-append-to-ignore
+  "24.4")
+
 
 (defun cvs-mode-find-file-other-window (e)
   "Select a buffer containing the file in another window."
index 7630ffbdb9c3894767a81fec898179a0ebde7c0e..3208c578fe7b09e8e24f13232d412ad6100cc807 100644 (file)
@@ -1084,7 +1084,7 @@ See also `whitespace-style', `whitespace-newline' and
                (not (memq major-mode (cdr whitespace-global-modes)))
              (memq major-mode whitespace-global-modes)))
           (t nil))
-         ;; ...we have a display (we're running a batch job)
+         ;; ...we have a display (not running a batch job)
          (not noninteractive)
          ;; ...the buffer is not internal (name starts with a space)
          (not (eq (aref (buffer-name) 0) ?\ ))
index 1845fdd8e7b687139a5cfcca16069fdcbb7224b0..5d035d2586e3db53bb94ce312eeffb328ed231d7 100644 (file)
@@ -6864,20 +6864,30 @@ FRAME."
             ;; Handle margins.
             (margins (or (frame-parameter frame 'fit-frame-to-buffer-margins)
                          fit-frame-to-buffer-margins))
-            (left-margin (or (window--sanitize-margin
-                              (nth 0 margins) 0 display-width)
-                             (nth 0 workarea)))
-            (top-margin (or (window--sanitize-margin
-                             (nth 1 margins) 0 display-height)
-                            (nth 1 workarea)))
+            (left-margin (if (nth 0 margins)
+                             (or (window--sanitize-margin
+                                  (nth 0 margins) 0 display-width)
+                                 0)
+                           (nth 0 workarea)))
+            (top-margin (if (nth 1 margins)
+                            (or (window--sanitize-margin
+                                 (nth 1 margins) 0 display-height)
+                                0)
+                          (nth 1 workarea)))
             (workarea-width (nth 2 workarea))
-            (right-margin (or (window--sanitize-margin
-                               (nth 2 margins) left-margin display-width)
-                              (+ left-margin workarea-width)))
+            (right-margin (if (nth 2 margins)
+                              (- display-width
+                                 (or (window--sanitize-margin
+                                      (nth 2 margins) left-margin display-width)
+                                     0))
+                            (nth 2 workarea)))
             (workarea-height (nth 3 workarea))
-            (bottom-margin (or (window--sanitize-margin
-                                (nth 3 margins) top-margin display-height)
-                               (+ top-margin workarea-height)))
+            (bottom-margin (if (nth 3 margins)
+                               (- display-height
+                                  (or (window--sanitize-margin
+                                       (nth 3 margins) top-margin display-height)
+                                      0))
+                             (nth 3 workarea)))
             ;; The pixel width of FRAME (which does not include the
             ;; window manager's decorations).
             (frame-width (frame-pixel-width))
@@ -6927,11 +6937,7 @@ FRAME."
                            (not (zerop lines)))
                       (1- lines)
                     0))))
-            ;; The maximum height we can use for fitting.
-            (fit-height
-             (- workarea-height extra-height toolbar-extra-height))
-            ;; The pixel position of FRAME's top border.  We usually
-            ;; try to leave this alone.
+            ;; The pixel position of FRAME's top border.
             (top
              (let ((top (frame-parameter nil 'top)))
                (if (consp top)
@@ -6943,7 +6949,8 @@ FRAME."
             (max-height
              (cond
               ((numberp (nth 0 sizes)) (* (nth 0 sizes) char-height))
-              ((numberp max-height) (* max-height char-height))))
+              ((numberp max-height) (* max-height char-height))
+              (t display-height)))
             (min-height
              (cond
               ((numberp (nth 1 sizes)) (* (nth 1 sizes) char-height))
@@ -6954,7 +6961,8 @@ FRAME."
               ((numberp (nth 2 sizes))
                (- (* (nth 2 sizes) char-width) window-extra-width))
               ((numberp max-width)
-               (- (* max-width char-width) window-extra-width))))
+               (- (* max-width char-width) window-extra-width))
+              (t display-height)))
             (min-width
              (cond
               ((numberp (nth 3 sizes))
@@ -6967,59 +6975,48 @@ FRAME."
             (value (window-text-pixel-size
                     nil t t workarea-width workarea-height t))
             (width (+ (car value) (window-right-divider-width)))
-            (height (+ (cdr value) (window-bottom-divider-width)))
-            remainder)
-       (unless frame-resize-pixelwise
-         ;; Round sizes to character sizes.
-         (setq remainder (% width char-width))
-         (unless (zerop remainder)
-           (setq width (+ width (- char-width remainder))))
-         (setq remainder (% height char-height))
-         (setq height (+ height (- char-height remainder))))
-       ;; Now make sure that we don't get larger than our rounded
-       ;; maximum lines and columns.
-       (when (> width fit-width)
-         (setq width (- fit-width (% fit-width char-width))))
-       (when (> height fit-height)
-         (setq height (- fit-height (% fit-height char-height))))
+            (height (+ (cdr value) (window-bottom-divider-width))))
        ;; Don't change height or width when the window's size is fixed
        ;; in either direction.
        (cond
-        ((eq window-size-fixed 'height)
-         (setq height nil))
         ((eq window-size-fixed 'width)
+         (setq width nil))
+        ((eq window-size-fixed 'height)
          (setq height nil)))
+       ;; Fit width to constraints.
        (when width
+         (unless frame-resize-pixelwise
+           ;; Round to character sizes.
+           (setq width (* (/ (+ width char-width -1) char-width)
+                          char-width)))
          ;; Fit to maximum and minimum widths.
-         (when max-width
-           (setq width (min width max-width)))
-         (when min-width
-           (setq width (max width min-width)))
+         (setq width (max (min width max-width) min-width))
          ;; Add extra width.
          (setq width (+ width extra-width))
-         ;; Preserve right margin.
-         (let ((right (+ left width extra-width)))
+         ;; Preserve margins.
+         (let ((right (+ left width)))
            (cond
             ((> right right-margin)
              ;; Move frame to left (we don't know its real width).
-             (setq left (min (- right-margin display-width) -1)))
+             (setq left (max left-margin (- left (- right right-margin)))))
             ((< left left-margin)
              ;; Move frame to right.
              (setq left left-margin)))))
+       ;; Fit height to constraints.
        (when height
+         (unless frame-resize-pixelwise
+           (setq height (* (/ (+ height char-height -1) char-height)
+                           char-height)))
          ;; Fit to maximum and minimum heights.
-         (when max-height
-           (setq height (min height max-height)))
-         (when min-height
-           (setq height (max height min-height)))
+         (setq height (max (min height max-height) min-height))
          ;; Add extra height.
          (setq height (+ height extra-height))
-         ;; Preserve bottom and top margins.
-         (let ((bottom (+ top height extra-height)))
+         ;; Preserve margins.
+         (let ((bottom (+ top height)))
            (cond
             ((> bottom bottom-margin)
              ;; Move frame up (we don't know its real height).
-             (setq top (min (- bottom-margin display-height) -1)))
+             (setq top (max top-margin (- top (- bottom bottom-margin)))))
             ((< top top-margin)
              ;; Move frame down.
              (setq top top-margin)))))
index aa3a65ccb600d913b110e961f83ae4eaa3533d3a..04f5f0d6bbe8786aa8983c831240f79f6af780c5 100644 (file)
 
        * fileio.c (Finsert_file_contents): Cancel the previous change.
 
+2014-01-29  Martin Rudalics  <rudalics@gmx.at>
+
+       * w32fns.c (x_set_tool_bar_lines): Don't clear area on frames
+       that are not visible.
+
+2014-01-29  Jan Djärv  <jan.h.d@swipnet.se>
+
+       * xmenu.c (create_and_show_popup_menu): Handle case when no key
+       is grabbed (Bug#16565).
+
+2014-01-28  Martin Rudalics  <rudalics@gmx.at>
+
+       * xdisp.c (last_max_ascent): Re-remove after erroneously
+       reintroducing it on 2013-11-30 and abolishing Dmitry's removal
+       from 2013-03-29.
+       (move_it_to): Re-remove reference to last_max_ascent.
+       (Fwindow_text_pixel_size): Add iterator's max_ascent and
+       max_descent here instead of calling line_bottom_y.  Fix
+       doc-string.
+
+2014-01-28  Dmitry Antipov  <dmantipov@yandex.ru>
+
+       * terminal.c (initial_free_frame_resources): New function.
+       (init_initial_terminal): Install new hook to free face cache
+       on initial frame and avoid memory leak.  For details, see
+       <http://lists.gnu.org/archive/html/emacs-devel/2014-01/msg01974.html>.
+       * xfaces.c (free_frame_faces): Adjust comment.
+
+2014-01-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * data.c (Fstring_to_number): Document results if unparsable
+       (Bug#16551).
+
 2014-01-26  Jan Djärv  <jan.h.d@swipnet.se>
 
        * xterm.c (x_focus_changed): Check for non-X terminal-frame (Bug#16540)
index 2a64c1bbf82f57a71a677a31573bb3d6c1912894..91a1d8b75fbf95f5c2b0e60defdfbcc71370008d 100644 (file)
@@ -2523,12 +2523,12 @@ NUMBER may be an integer or a floating point number.  */)
 
 DEFUN ("string-to-number", Fstring_to_number, Sstring_to_number, 1, 2, 0,
        doc: /* Parse STRING as a decimal number and return the number.
-This parses both integers and floating point numbers.
-It ignores leading spaces and tabs, and all trailing chars.
+Ignore leading spaces and tabs, and all trailing chars.  Return 0 if
+STRING cannot be parsed as an integer or floating point number.
 
 If BASE, interpret STRING as a number in that base.  If BASE isn't
 present, base 10 is used.  BASE must be between 2 and 16 (inclusive).
-If the base used is not 10, STRING is always parsed as integer.  */)
+If the base used is not 10, STRING is always parsed as an integer.  */)
   (register Lisp_Object string, Lisp_Object base)
 {
   register char *p;
index d6118d0a4e3d042b354b0bff9e6253bfdd522dfa..635862f265482c4225b366aeccfbf2270e5f25c9 100644 (file)
@@ -3938,7 +3938,8 @@ OBARRAY defaults to the value of the variable `obarray'.  */)
 \f
 /* Return the symbol in OBARRAY whose names matches the string
    of SIZE characters (SIZE_BYTE bytes) at PTR.
-   If there is no such symbol in OBARRAY, return nil.
+   If there is no such symbol, return the integer bucket number of
+   where the symbol would be if it were present.
 
    Also store the bucket number in oblookup_last_bucket_number.  */
 
index 15e7e8a4474a4f276b25c9fe8ff9ab3a9b336cad..d0a38b97bb44537bff2d93f84cd5ea08cb418bd2 100644 (file)
@@ -500,7 +500,15 @@ selected frame's terminal).  */)
   return store_terminal_param (t, parameter, value);
 }
 
-\f
+/* Initial frame has no device-dependent output data, but has
+   face cache which should be freed when the frame is deleted.  */
+
+static void
+initial_free_frame_resources (struct frame *f)
+{
+  eassert (FRAME_INITIAL_P (f));
+  free_frame_faces (f);
+}
 
 /* Create the bootstrap display terminal for the initial frame.
    Returns a terminal of type output_initial.  */
@@ -516,6 +524,7 @@ init_initial_terminal (void)
   initial_terminal->name = xstrdup ("initial_terminal");
   initial_terminal->kboard = initial_kboard;
   initial_terminal->delete_terminal_hook = &delete_initial_terminal;
+  initial_terminal->delete_frame_hook = &initial_free_frame_resources;
   /* All other hooks are NULL. */
 
   return initial_terminal;
index 8d64af5b93d6dbdfeccb45733b724f53dccdda1b..98456cd20d4ee130470f17769dc254ca74c590a1 100644 (file)
@@ -1713,7 +1713,7 @@ x_set_tool_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval)
   /* If the tool bar gets smaller, the internal border below it
      has to be cleared.  It was formerly part of the display
      of the larger tool bar, and updating windows won't clear it.  */
-  if (FRAME_INTERNAL_BORDER_WIDTH (f) != 0)
+  if (FRAME_INTERNAL_BORDER_WIDTH (f) != 0 && FRAME_VISIBLE_P (f))
     {
       int height = FRAME_INTERNAL_BORDER_WIDTH (f);
       int width = FRAME_PIXEL_WIDTH (f);
index 7717f1c28613a69aba32ea68c5d39b52a147a250..b5dec35568ae2faab672ceea92d281430a1027ab 100644 (file)
@@ -571,7 +571,7 @@ static struct glyph scratch_glyphs[MAX_SCRATCH_GLYPHS];
 
 /* Ascent and height of the last line processed by move_it_to.  */
 
-static int last_max_ascent, last_height;
+static int last_height;
 
 /* Non-zero if there's a help-echo in the echo area.  */
 
@@ -9099,7 +9099,6 @@ move_it_to (struct it *it, ptrdiff_t to_charpos, int to_x, int to_y, int to_vpos
       it->current_y += it->max_ascent + it->max_descent;
       ++it->vpos;
       last_height = it->max_ascent + it->max_descent;
-      last_max_ascent = it->max_ascent;
       it->max_ascent = it->max_descent = 0;
     }
 
@@ -9126,7 +9125,6 @@ move_it_to (struct it *it, ptrdiff_t to_charpos, int to_x, int to_y, int to_vpos
       it->current_y += it->max_ascent + it->max_descent;
       ++it->vpos;
       last_height = it->max_ascent + it->max_descent;
-      last_max_ascent = it->max_ascent;
     }
 
   if (backup_data)
@@ -9511,7 +9509,7 @@ Optional argument MODE_AND_HEADER_LINE nil or omitted means do not
 include the height of the mode- or header-line of WINDOW in the return
 value.  If it is either the symbol `mode-line' or `header-line', include
 only the height of that line, if present, in the return value.  If t,
-include the height of any of these lines in the return value.  */)
+include the height of both, if present, in the return value.  */)
   (Lisp_Object window, Lisp_Object from, Lisp_Object to, Lisp_Object x_limit, Lisp_Object y_limit,
    Lisp_Object mode_and_header_line)
 {
@@ -9579,7 +9577,6 @@ include the height of any of these lines in the return value.  */)
   SET_TEXT_POS (startp, start, CHAR_TO_BYTE (start));
   start_display (&it, w, startp);
 
-  /**   move_it_vertically_backward (&it, 0); **/
   if (NILP (x_limit))
     x = move_it_to (&it, end, -1, max_y, -1, MOVE_TO_POS | MOVE_TO_Y);
   else
@@ -9593,14 +9590,7 @@ include the height of any of these lines in the return value.  */)
                      MOVE_TO_POS | MOVE_TO_X | MOVE_TO_Y);
     }
 
-  if (start == end)
-    y = it.current_y;
-  else
-    {
-      /* Count last line.  */
-      last_height = 0;
-      y = line_bottom_y (&it); /* - y; */
-    }
+  y = it.current_y + it.max_ascent + it.max_descent;
 
   if (!EQ (mode_and_header_line, Qheader_line)
       && !EQ (mode_and_header_line, Qt))
index 4321eb3dd8c1cde0215090f1ff48b4c94223d677..f2d777a12b17fdc53adef2d59f86ab295a04b4db 100644 (file)
@@ -694,7 +694,8 @@ init_frame_faces (struct frame *f)
 }
 
 
-/* Free face cache of frame F.  Called from delete_frame.  */
+/* Free face cache of frame F.  Called from frame-dependent
+   resource freeing function, e.g. (x|tty)_free_frame_resources.  */
 
 void
 free_frame_faces (struct frame *f)
index 6f628527a6de9f5daec4ec19332ef3e685bd6e87..c101d9f597545d0388fc73e3d0211a44b38a46e9 100644 (file)
@@ -1306,6 +1306,8 @@ create_and_show_popup_menu (struct frame *f, widget_value *first_wv,
       for (i = 0; i < 5; i++)
         if (FRAME_DISPLAY_INFO (f)->grabbed & (1 << i))
           break;
+      // If keys aren't grabbed (i.e. a mouse up event), use 0.
+      if (i == 5) i = 0;
     }
 
   /* Display the menu.  */
index 4b931acbf2273a0c85f52497ec7247dcc5add2b9..50ffd7c395700f7a5dd9a6eae70599975ac7df11 100644 (file)
@@ -1,3 +1,18 @@
+2014-01-27  Michael Albinus  <michael.albinus@gmx.de>
+
+       * automated/file-notify-tests.el (file-notify--deftest-remote):
+       Do not skip when the local test has failed.  They are unrelated.
+       (file-notify--wait-for-events): Use `sit-for'.  Let-bind
+       `noninteractive' to nil, otherwise `sit-for' could be degraded to
+       `sleep-for'.
+       (file-notify-test02-events): Check for `file-remote-p' instead of
+       `file-notify--test-remote-enabled'.
+
+2014-01-26  Michael Albinus  <michael.albinus@gmx.de>
+
+       * automated/file-notify-tests.el (file-notify-test02-events):
+       Let test case fail for Bug#16519.
+
 2014-01-22  Michael Albinus  <michael.albinus@gmx.de>
 
        * automated/file-notify-tests.el (file-notify-test02-events):
index de0f32b5e94a3d7cb30418d2cf3575c4044b95d1..e92595f0ec6f85a9527719f58ad0dc2da74f0d17 100644 (file)
@@ -102,11 +102,6 @@ being the result.")
             file-notify-test-remote-temporary-file-directory)
            (ert-test (ert-get-test ',test)))
        (skip-unless (file-notify--test-remote-enabled))
-       ;; The local test could have passed, skipped, or quit.  All of
-       ;; these results should not prevent us to run the remote test.
-       ;; That's why we skip only for failed local tests.
-       (skip-unless
-       (not (ert-test-failed-p (ert-test-most-recent-result ert-test))))
        (tramp-cleanup-connection
        (tramp-dissect-file-name temporary-file-directory) nil 'keep-password)
        (funcall (ert-test-body ert-test)))))
@@ -189,16 +184,20 @@ Save the result in `file-notify--test-results', for later analysis."
 
 (defmacro file-notify--wait-for-events (timeout until)
   "Wait for file notification events until form UNTIL is true.
-TIMEOUT is the maximum time to wait for."
+TIMEOUT is the maximum time to wait for, in seconds."
   `(with-timeout (,timeout (ignore))
      (while (null ,until)
-       ;; glib events, and remote events.
-       (accept-process-output nil 0.1)
-       ;; inotify events.
-       (read-event nil nil 0.1))))
+       (let (noninteractive)
+        (sit-for 0.1 'nodisplay)))))
 
 (ert-deftest file-notify-test02-events ()
   "Check file creation/removal notifications."
+  ;; Bug#16519.
+  :expected-result
+  (if (and noninteractive
+          (not (file-remote-p temporary-file-directory))
+          (memq file-notify--library '(gfilenotify w32notify)))
+      :failed :passed)
   (skip-unless (file-notify--test-local-enabled))
   (let (desc)
     (unwind-protect
@@ -237,9 +236,7 @@ TIMEOUT is the maximum time to wait for."
       (ignore-errors (delete-file file-notify--test-tmpfile))
       (ignore-errors (delete-file file-notify--test-tmpfile1))))
 
-  (should
-   (or file-notify--test-results
-       (and noninteractive (eq file-notify--library 'gfilenotify)))) ;; Bug#16519.
+  (should file-notify--test-results)
   (dolist (result file-notify--test-results)
     ;(message "%s" (ert-test-result-messages result))
     (when (ert-test-failed-p result)