+2014-03-07 Paul Eggert <eggert@cs.ucla.edu>
+
+ Merge from gnulib, incorporating:
+ 2014-03-04 stdint: fix missing SIZE_MAX on Android
+ 2013-03-02 sys_types: avoid autoconf warning about gl_SYS_TYPES_H
+ * lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate.
+ * lib/stdint.in.h, lib/sys_types.in.h, m4/sys_types_h.m4:
+ Update from gnulib.
+
+2014-03-05 Glenn Morris <rgm@gnu.org>
+
+ * configure.ac: Tweak the "unported" error message.
+
+2014-03-05 Paul Eggert <eggert@cs.ucla.edu>
+
+ Fix configuration bug on Solaris 2.5.1 (Bug#16905).
+ * configure.ac: Fix a bug in shell pattern matching that caused
+ 'configure' to treat Solaris 2.5.1 as if it were Solaris 10 or later.
+
+2014-02-25 Paul Eggert <eggert@penguin.cs.ucla.edu>
+
+ Merge from gnulib (Bug#16825).
+ 2014-02-25 unistd: port readlink to Mac OS X 10.3.9
+
+2014-02-24 Paul Eggert <eggert@cs.ucla.edu>
+
+ Merge from gnulib, incorporating:
+ 2014-02-21 timer: fix uClibc detection of threading
+ 2014-02-21 maintainer-makefiles: provide AC_PROG_SED for older autoconf
+
2014-02-18 Mirek Kaim <mirek.kaim@outlook.com> (tiny change)
* configure.ac [HAVE_W32]: Test for ImageMagick. (Bug#16754)
* lib/makefile.w32-in (GNULIBOBJS): Add $(BLD)/fpending.$(O) and
$(BLD)/close-stream.$(O).
- ($(BLD)/close-stream.$(O)):
+ ($(BLD)/close-stream.$(O))
($(BLD)/fpending.$(O)): New dependencies.
2012-11-03 Paul Eggert <eggert@cs.ucla.edu>
* configure.ac (opsysfile): Use bsd-common on gnu systems.
- * configure.ac (GNU_LIBRARY_PENDING_OUTPUT_COUNT):
+ * configure.ac (GNU_LIBRARY_PENDING_OUTPUT_COUNT)
(SIGNALS_VIA_CHARACTERS): Move here from src/s.
2012-07-11 Paul Eggert <eggert@cs.ucla.edu>
2012-06-24 Eli Zaretskii <eliz@gnu.org>
- * lib/makefile.w32-in ($(BLD)/dtotimespec.$(O)):
- ($(BLD)/timespec-add.$(O)):
+ * lib/makefile.w32-in ($(BLD)/dtotimespec.$(O))
+ ($(BLD)/timespec-add.$(O))
($(BLD)/timespec-sub.$(O)): Don't depend on
$(EMACS_ROOT)/nt/inc/sys/time.h.
* lib/makefile.w32-in (GNULIBOBJS): Add $(BLD)/dtotimespec.$(O),
$(BLD)/gettime.$(O), $(BLD)/timespec-add.$(O), and
$(BLD)/timespec-sub.$(O).
- ($(BLD)/dtotimespec.$(O)):
- ($(BLD)/gettime.$(O)):
- ($(BLD)/timespec-add.$(O)):
+ ($(BLD)/dtotimespec.$(O))
+ ($(BLD)/gettime.$(O))
+ ($(BLD)/timespec-add.$(O))
($(BLD)/timespec-sub.$(O)): New dependencies.
* lib/stat-time.h:
* config.bat (lib): Create/update lib/stdalign.in-h and
lib/sys_types.in-h.
- * lib/makefile.w32-in ($(BLD)/md5.$(O)):
- ($(BLD)/sha1.$(O)):
- ($(BLD)/sha256.$(O)):
+ * lib/makefile.w32-in ($(BLD)/md5.$(O))
+ ($(BLD)/sha1.$(O))
+ ($(BLD)/sha256.$(O))
($(BLD)/sha512.$(O)): Depend on $(EMACS_ROOT)/nt/inc/stdalign.h.
Suggested by Christoph Scholtes <cschol2112@googlemail.com>.
$(BLD)/time_r.$(O).
($(BLD)/dtoastr.$(O)): Depend on $(EMACS_ROOT)/src/s/ms-w32.h and
$(EMACS_ROOT)/src/m/intel386.h.
- ($(BLD)/strftime.$(O)):
+ ($(BLD)/strftime.$(O))
($(BLD)/time_r.$(O)): Define prerequisites.
2011-01-31 Paul Eggert <eggert@cs.ucla.edu>
* configure.in (HAVE_SOUND, HAVE_X_I18N, HAVE_X11R6_XIM):
Set with AC_DEFINE rather than AH_BOTTOM.
- * configure.in (C_OPTIMIZE_SWITCH, CANNOT_DUMP, SYSTEM_MALLOC):
+ * configure.in (C_OPTIMIZE_SWITCH, CANNOT_DUMP, SYSTEM_MALLOC)
(USE_MMAP_FOR_BUFFERS, C_WARNING_SWITCH, CFLAGS, REAL_CFLAGS):
Set with shell, not cpp.
(LIBX): Remove, just use -lX11 in the one place this was used.
+2014-03-07 Paul Eggert <eggert@cs.ucla.edu>
+
+ Fix oversight preventing lib/sys/types.h from being generated.
+ * merge-gnulib (GNULIB_TOOL_FLAGS): Don't avoid sys_types.
+
2014-02-06 David Engster <deng@randomsample.de>
* grammars/c.by (function-pointer): Correctly deal with anonymous
2013-12-27 Xue Fuqiao <xfq.free@gmail.com>
- * admin.el (manual-misc-manuals, make-manuals):
- (manual-pdf, cusver-find-files):
- (cusver-new-version, cusver-scan, cusver-goto-xref):
- (cusver-check): Doc fix.
+ * admin.el (manual-misc-manuals, make-manuals, manual-pdf)
+ (cusver-find-files, cusver-new-version, cusver-scan)
+ (cusver-goto-xref, cusver-check): Doc fix.
(manual-html-node, cusver-check): Use `user-error'.
2013-12-24 Paul Eggert <eggert@cs.ucla.edu>
2013-12-24 Xue Fuqiao <xfq.free@gmail.com>
- * admin.el (add-release-logs):
- (set-version-in-file, set-version, set-copyright):
- Use `user-error'.
+ * admin.el (add-release-logs, set-version-in-file, set-version)
+ (set-copyright): Use `user-error'.
2013-12-22 Eli Zaretskii <eliz@gnu.org>
2011-02-16 Paul Eggert <eggert@cs.ucla.edu>
Remove no-longer needed getloadavg symbols.
- * CPP-DEFINES (LOAD_AVE_CVT, LOAD_AVE_TYPE, FSCALE, KERNEL_FILE):
+ * CPP-DEFINES (LOAD_AVE_CVT, LOAD_AVE_TYPE, FSCALE, KERNEL_FILE)
(LDAV_SYMBOL): Remove.
* notes/copyright: Remove src/getloadavg.c as a special case.
--avoid=malloc-posix --avoid=msvc-inval --avoid=msvc-nothrow
--avoid=open --avoid=openat-die --avoid=opendir
--avoid=raise
- --avoid=save-cwd --avoid=select --avoid=sigprocmask --avoid=sys_types
+ --avoid=save-cwd --avoid=select --avoid=sigprocmask
--avoid=threadlib
--conditional-dependencies --import --no-changelog --no-vc-files
--makefile-name=gnulib.mk
I plan to implement better user notification and support for
breaking out of single-kboard mode from locked displays.
- * Mac and DOS support is broken, doesn't even
- compile. Multiple display support will probably not provide
- new Emacs features on these systems, but the multi-tty
- branch changed a few low-level interfaces, and the
- system-dependent source files need to be adapted
- accordingly. The changes are mostly trivial, so almost
- anyone can help, if only by compiling the branch and
- reporting the compiler errors.
-
-
TESTING
-------
(This is likely an error in the CVS trunk.)
-** Dan Nicolaescu suggests that -nw should be added as an alias for -t
- in emacsclient. Good idea. (Alas, implementing this is not
- trivial, getopt_long does not seem to support two-letter ``short''
- options. Patches are welcome.)
-
-** Mark Plaksin suggests that emacsclient should accept the same
- X-related command-line arguments as Emacs. Most of the X-related
- argument-handling is done in Lisp, so this should be quite easy to
- implement. (For example, Samium Gromoff wants emacsclient to
- support --geometry; implementing this would add that support.)
-
** Gergely Nagy suggests that C-x # should only kill the current
frame, not any other emacsclient frame that may have the same file
opened for editing. I think I agree with him.
an initial frame. (The user would connect to it and open frames
later, with emacsclient.)
-** Fix Mac support (I can't do this entirely myself). Note that the
- current state of Mac-specific source files in the multi-tty tree
- are not useful; before starting work on Mac support, revert to
- pristine, pre-multi-tty versions.
-
-** Fix DOS support (I can't do this entirely myself). Note that the
- current state of DOS-specific source files in the multi-tty tree
- are not useful; before starting work on DOS support, revert to
- pristine, pre-multi-tty versions.
-
-** Fix Windows support. Currently bootstrapping works on w32, but Emacs
- crashes on startup and none of the multi-tty features are
- implemented. Many XXX comments mark things that probably need
- updating, ChangeLogs will help in spotting changes to X specific
- files that may need porting.
+** Implement Mac/Windows/DOS support. Many XXX comments mark things
+ that probably need updating, ChangeLogs will help in spotting
+ changes to X specific files that may need porting.
** Do a grep on XXX and ?? for more issues.
(Done.)
--- Miles Bader suggests that C-x C-c on an emacsclient frame should
- only close the frame, not exit the entire Emacs session. Update:
- see above for a function that does this. Maybe this should be the
- new default?
-
- (Done. This is the new default. No complaints so far.)
-
--- Clean up the frame-local variable system. I think it's ugly and
- error-prone. But maybe I just haven't yet fully understood it.
-
- (Nothing to do. It doesn't seem ugly any more. It's rather clever.)
-
-- Support multiple character locales. A version of
`set-locale-environment' needs to be written for setting up
display-local settings on ttys. I think calling
(Done, by making `function-key-map' terminal-local (i.e., part of
struct kboard). This has probably covered all the remaining problems.)
--- Make `function-key-map' and `key-translation-map' terminal-local.
-
- (Done.)
-
--- Implement `terminal-local-value' and `set-terminal-local-value' to
- allow deterministic access to terminal local bindings. The
- encode-kb package can not set up `key-translation-map' without
- these. The terminal-local bindings seem to be independent of what
- frame is selected.
-
- (Done.)
-
-- xt-mouse.el needs to be adapted for multi-tty. It currently
signals an error on kill-emacs under X, which prevents the user
from exiting Emacs. (Reported by Mnemonikk on freenode.)
### If you add support for a new configuration, add code to this
### switch statement to recognize your configuration name and select
-### the appropriate operating system file.
-
-### You would hope that you could choose an s/*.h
-### file based on the operating system portion. However, it turns out
-### that each s/*.h file is pretty manufacturer-specific.
-### So we basically have to have a special case for each
-### configuration name.
-###
+### the appropriate opsys.
+
### As far as handling version numbers on operating systems is
### concerned, make sure things will fail in a fixable way. If
### /etc/MACHINES doesn't say anything about version numbers, be
* ) unported=yes ;;
esac
case "${canonical}" in
+ *-sunos5.[1-9][0-9]* | *-solaris2.[1-9][0-9]* )
+ opsys=sol2-10
+ emacs_check_sunpro_c=yes
+ ;;
*-sunos5.6* | *-solaris2.6* )
opsys=sol2-6
RANLIB="ar -ts"
opsys=sol2-6
emacs_check_sunpro_c=yes
;;
- *-sunos5* | *-solaris* )
- opsys=sol2-10
- emacs_check_sunpro_c=yes
- ;;
esac
## Watch out for a compiler that we know will not work.
case "${canonical}" in
dnl quotation ends
if test $unported = yes; then
- AC_MSG_ERROR([Emacs hasn't been ported to `${canonical}' systems.
+ AC_MSG_ERROR([Emacs does not support `${canonical}' systems.
+If you think it should, please send a report to bug-gnu-emacs@gnu.org.
Check `etc/MACHINES' for recognized configuration names.])
fi
+2014-03-16 Dmitry Gutov <dgutov@yandex.ru>
+
+ * programs.texi (Matching): Update the missed spot. (Bug#17008)
+
+2014-03-15 Dmitry Gutov <dgutov@yandex.ru>
+
+ * programs.texi (Matching): Update WRT to the new
+ `blink-matchin-paren' behavior.
+
+2014-03-13 Paul Eggert <eggert@cs.ucla.edu>
+
+ * mule.texi (International, Language Environments): Update
+ the list of language environments to what Emacs currently
+ supports. Add the full list to the index. Suggest C-h L for
+ details rather than trying to give very brief details here.
+
+2014-03-12 Glenn Morris <rgm@gnu.org>
+
+ * cmdargs.texi (General Variables): Don't mention INCPATH,
+ from the obsolete complete.el.
+
+2014-03-12 Paul Eggert <eggert@cs.ucla.edu>
+
+ * mule.texi (International Chars): Adjust C-u C-x = description.
+ Change it to match Emacs's current behavior. Also, change the
+ example to use ê instead of À, as the isolated grave accent in the
+ latter's decomposition listing was confusingly transliterated to
+ left single quote in the PDF version of the manual.
+
+2014-03-12 Glenn Morris <rgm@gnu.org>
+
+ * misc.texi (Saving Emacs Sessions): Be briefer about desktop's
+ handling of frames.
+
+ * indent.texi (Indent Convenience): Mention electric-indent-local-mode.
+
+2014-03-02 Xue Fuqiao <xfq@gnu.org>
+
+ * mark.texi (Mark):
+ * killing.texi (Rectangles): Document `rectangle-mark-mode'.
+
+2014-03-01 Glenn Morris <rgm@gnu.org>
+
+ * search.texi (Query Replace): Mention search-invisible.
+ * text.texi (Outline Visibility): Mention search-invisible
+ also affects query-replace.
+
+2014-02-28 Xue Fuqiao <xfq@gnu.org>
+
+ * emacs.texi (Top):
+ * programs.texi (Programs, Prettifying Symbols):
+ Document `prettify-symbols-mode' and `global-prettify-symbols-mode'.
+
+ * misc.texi (Saving Emacs Sessions):
+ Document some new desktop user options.
+
+2014-02-27 Xue Fuqiao <xfq@gnu.org>
+
+ * programs.texi (Basic Indent, Other C Commands):
+ Fix the description of RET and `C-j'.
+
+ * indent.texi (Indentation Commands): Move the description of
+ `C-j' from here...
+ * basic.texi (Inserting Text): ... to here.
+
+2014-02-25 Glenn Morris <rgm@gnu.org>
+
+ * custom.texi (Terminal Init):
+ Replace term-setup-hook with tty-setup-hook.
+
2014-02-23 Glenn Morris <rgm@gnu.org>
* rmail.texi (Rmail Inbox): Mention rmail-mbox-format.
* misc.texi (Shell Mode): Move documentation of
shell-completion-fignore from Shell Mode to Shell Options.
-2013-12-26 João Távora <joaotavora@gmail.com>
+2013-12-26 João Távora <joaotavora@gmail.com>
* emacs.texi (Matching): Describe new features of Electric Pair mode.
2013-12-22 Xue Fuqiao <xfq.free@gmail.com>
- * search.texi (Special Isearch):
- (Query Replace): Document negative argument of replacement commands.
+ * search.texi (Special Isearch, Query Replace): Document negative
+ argument of replacement commands.
(Symbol Search): Document `isearch-forward-symbol-at-point'.
* files.texi (File Conveniences): Document `image-next-file' and
* display.texi (Cursor Display): Document `blink-cursor-blinks'.
- * buffers.texi: Update list-buffers "screeshot" to show Messages
+ * buffers.texi: Update list-buffers "screenshot" to show Messages
as major-mode.
* entering.texi: Document `initial-buffer-choice' changes.
2013-09-22 Xue Fuqiao <xfq.free@gmail.com>
- * fixit.texi (Transpose):
- (Fixing Case): Remove @refill.
+ * fixit.texi (Transpose, Fixing Case): Remove @refill.
2013-09-21 Xue Fuqiao <xfq.free@gmail.com>
(emacs.ps, emacs-xtra.ps): Remove explicit rules.
(emacs.html): Use HTML_OPTS.
(clean): Use DVI_TARGETS, HTML_TARGETS, PDF_TARGETS, PS_TARGETS.
- (.PHONY): install-dvi, install-html, install-pdf, install-ps
- ,install-doc, uninstall-dvi, uninstall-html, uninstall-pdf,
+ (.PHONY): install-dvi, install-html, install-pdf, install-ps,
+ install-doc, uninstall-dvi, uninstall-html, uninstall-pdf,
uninstall-ps, and uninstall-doc.
(install-dvi, install-html, install-pdf, install-ps, install-doc)
(uninstall-dvi, uninstall-html, uninstall-ps, uninstall-pdf)
2011-05-22 Chong Yidong <cyd@stupidchicken.com>
- * mule.texi (Specify Coding, Text Coding, Communication Coding):
+ * mule.texi (Specify Coding, Text Coding, Communication Coding)
(File Name Coding, Terminal Coding): Add command names (Bug#8312).
2011-05-18 Glenn Morris <rgm@gnu.org>
@xref{Point}.
@kindex RET
+@kindex C-j
@cindex newline
+@findex electric-indent-just-newline
To end a line and start a new one, type @key{RET} (@code{newline}).
(The @key{RET} key may be labeled @key{Return} or @key{Enter} on your
keyboard, but we refer to it as @key{RET} in this manual.) This
-command inserts a newline character into the buffer. If point is at
-the end of the line, the effect is to create a new blank line after
-it; if point is in the middle of a line, the line is split at that
-position.
+command inserts a newline character into the buffer, then indents
+(@pxref{Indentation}) according to the major mode. If point is at the end
+of the line, the effect is to create a new blank line after it and
+indent the new line; if point is in the middle of a line, the line is
+split at that position. To turn off the auto-indentation, you can
+either disable Electric Indent mode (@pxref{Indent Convenience}) or
+type @kbd{C-j}, which inserts just a newline, without any
+auto-indentation.
As we explain later in this manual, you can change the way Emacs
handles text insertion by turning on @dfn{minor modes}. For instance,
is found there.
@item HOSTNAME
The name of the machine that Emacs is running on.
+@c complete.el is obsolete since 24.1.
+@ignore
@item INCPATH
A colon-separated list of directories. Used by the @code{complete} package
to search for files.
+@end ignore
@item INFOPATH
A colon-separated list of directories in which to search for Info files.
@item LC_ALL
which are distributed with Emacs, which customize Emacs's faces to fit
various color schemes. (Note, however, that Custom themes need not be
restricted to this purpose; they can be used to customize variables
-too).
+too.)
@vindex custom-theme-load-path
If you want Emacs to look for Custom themes in some other directory,
file can prevent the loading of the terminal-specific library by setting
@code{term-file-prefix} to @code{nil}.
-@vindex term-setup-hook
- Emacs runs the hook @code{term-setup-hook} at the end of
+@vindex tty-setup-hook
+ Emacs runs the hook @code{tty-setup-hook} at the end of
initialization, after both your @file{.emacs} file and any
terminal-specific library have been read in. Add hook functions to this
hook if you wish to override part of any of the terminal-specific
* Symbol Completion:: Completion on symbol names of your program or language.
* MixedCase Words:: Dealing with identifiersLikeThis.
* Semantic:: Suite of editing tools based on source code parsing.
+* Prettifying Symbols:: Display symbols as composed characters.
* Misc for Programs:: Other Emacs features useful for editing programs.
* C Modes:: Special commands of C, C++, Objective-C,
Java, IDL, Pike and AWK modes.
ways.
@table @kbd
-@item C-j
-@kindex C-j
-@findex newline-and-indent
-Perform @key{RET} followed by @key{TAB} (@code{newline-and-indent}).
-
@item C-M-o
@kindex C-M-o
@findex split-line
Electric Indent mode is a global minor mode that automatically
indents the line after every @key{RET} you type. This mode is enabled
by default. To toggle this minor mode, type @kbd{M-x
-electric-indent-mode}.
+electric-indent-mode}. To toggle the mode in a single buffer,
+use @kbd{M-x electric-indent-local-mode}.
@code{string-rectangle}, but inserts the string on each line,
shifting the original text to the right.
+@findex rectangle-mark-mode
+@cindex rectangular region
+ The command @kbd{C-x SPC} (@code{rectangle-mark-mode}) makes a
+@dfn{rectangular region}. It is a new feature introduced in GNU Emacs
+24.4, and most commands now are still unaware of it, but kill and yank
+(@pxref{Killing}) do work on the rectangle.
+
@node CUA Bindings
@section CUA Bindings
@findex cua-mode
if the variable @code{highlight-nonselected-windows} is
non-@code{nil}, each window highlights its own region.
+ There is another kind of region: the ``rectangular region''.
+@xref{Rectangles}.
+
@menu
* Setting Mark:: Commands to set the mark.
* Marking Objects:: Commands to put region around textual units.
@cindex reload files
@cindex desktop
+@vindex desktop-restore-frames
Use the desktop library to save the state of Emacs from one session
to another. Once you save the Emacs @dfn{desktop}---the buffers,
their file names, major modes, buffer positions, and so on---then
-subsequent Emacs sessions reload the saved desktop.
+subsequent Emacs sessions reload the saved desktop. By default,
+the desktop also tries to save the frame and window configuration.
+To disable this, set @code{desktop-restore-frames} to @code{nil}.
+(See that variable's documentation for some related options
+that you can customize to fine-tune this behavior.)
@findex desktop-save
@vindex desktop-save-mode
@cindex multibyte characters
@cindex encoding of characters
-@cindex Celtic
+@cindex Arabic
+@cindex Bengali
@cindex Chinese
@cindex Cyrillic
-@cindex Czech
-@cindex Devanagari
+@cindex Han
@cindex Hindi
-@cindex Marathi
@cindex Ethiopic
-@cindex German
+@cindex Georgian
@cindex Greek
+@cindex Hangul
@cindex Hebrew
+@cindex Hindi
@cindex IPA
@cindex Japanese
@cindex Korean
-@cindex Lao
@cindex Latin
-@cindex Polish
-@cindex Romanian
-@cindex Slovak
-@cindex Slovenian
@cindex Thai
-@cindex Tibetan
-@cindex Turkish
@cindex Vietnamese
-@cindex Dutch
-@cindex Spanish
Emacs supports a wide variety of international character sets,
including European and Vietnamese variants of the Latin alphabet, as
-well as Cyrillic, Devanagari (for Hindi and Marathi), Ethiopic, Greek,
-Han (for Chinese and Japanese), Hangul (for Korean), Hebrew, IPA,
-Kannada, Lao, Malayalam, Tamil, Thai, Tibetan, and Vietnamese scripts.
+well as Arabic scripts, Brahmic scripts (for languages such as
+Bengali, Hindi, and Thai), Cyrillic, Ethiopic, Georgian, Greek, Han
+(for Chinese and Japanese), Hangul (for Korean), Hebrew and IPA@.
Emacs also supports various encodings of these characters that are used by
other internationalized software, such as word processors and mailers.
as belonging to the @code{ascii} character set.
@item
-The character's syntax and categories.
-
-@item
-The character's encodings, both internally in the buffer, and externally
-if you were to save the file.
+The character's script, syntax and categories.
@item
What keys to type to input the character in the current input method
(if it supports the character).
+@item
+The character's encodings, both internally in the buffer, and externally
+if you were to save the file.
+
@item
If you are running Emacs on a graphical display, the font name and
glyph code for the character. If you are running Emacs on a text
(@pxref{Overlays,,, elisp, the same manual}).
@end itemize
- Here's an example showing the Latin-1 character A with grave accent,
-in a buffer whose coding system is @code{utf-8-unix}:
+ Here's an example, with some lines folded to fit into this manual:
@smallexample
position: 1 of 1 (0%), column: 0
- character: @`A (displayed as @`A) (codepoint 192, #o300, #xc0)
+ character: @^e (displayed as @^e) (codepoint 234, #o352, #xea)
preferred charset: unicode (Unicode (ISO10646))
-code point in charset: 0xC0
- syntax: w which means: word
- category: .:Base, L:Left-to-right (strong),
+code point in charset: 0xEA
+ script: latin
+ syntax: w which means: word
+ category: .:Base, L:Left-to-right (strong), c:Chinese,
j:Japanese, l:Latin, v:Viet
- buffer code: #xC3 #x80
- file code: not encodable by coding system undecided-unix
+ to input: type "C-x 8 RET HEX-CODEPOINT" or "C-x 8 RET NAME"
+ buffer code: #xC3 #xAA
+ file code: #xC3 #xAA (encoded by coding system utf-8-unix)
display: by this font (glyph code)
xft:-unknown-DejaVu Sans Mono-normal-normal-
- normal-*-13-*-*-*-m-0-iso10646-1 (#x82)
+ normal-*-15-*-*-*-m-0-iso10646-1 (#xAC)
Character code properties: customize what to show
- name: LATIN CAPITAL LETTER A WITH GRAVE
- old-name: LATIN CAPITAL LETTER A GRAVE
- general-category: Lu (Letter, Uppercase)
- decomposition: (65 768) ('A' '`')
+ name: LATIN SMALL LETTER E WITH CIRCUMFLEX
+ old-name: LATIN SMALL LETTER E CIRCUMFLEX
+ general-category: Ll (Letter, Lowercase)
+ decomposition: (101 770) ('e' '^')
@end smallexample
@node Language Environments
@code{current-language-environment} or use the command @kbd{M-x
set-language-environment}. It makes no difference which buffer is
current when you use this command, because the effects apply globally
-to the Emacs session. The supported language environments
-(see the variable @code{language-info-alist}) include:
+to the Emacs session. See the variable @code{language-info-alist} for
+the list of supported language environments, and use the command
+@kbd{C-h L @var{lang-env} @key{RET}} (@code{describe-language-environment})
+for more information about the language environment @var{lang-env}.
+Supported language environments include:
-@cindex Euro sign
-@cindex UTF-8
@quotation
-ASCII, Belarusian, Bengali, Brazilian Portuguese, Bulgarian, Cham,
-Chinese-BIG5, Chinese-CNS, Chinese-EUC-TW, Chinese-GB, Chinese-GBK,
-Chinese-GB18030, Croatian, Cyrillic-ALT, Cyrillic-ISO, Cyrillic-KOI8,
-Czech, Devanagari, Dutch, English, Esperanto, Ethiopic, French,
-Georgian, German, Greek, Gujarati, Hebrew, IPA, Italian, Japanese,
-Kannada, Khmer, Korean, Lao, Latin-1, Latin-2, Latin-3, Latin-4,
-Latin-5, Latin-6, Latin-7, Latin-8 (Celtic), Latin-9 (updated Latin-1
-with the Euro sign), Latvian, Lithuanian, Malayalam, Oriya, Polish,
-Punjabi, Romanian, Russian, Sinhala, Slovak, Slovenian, Spanish,
-Swedish, TaiViet, Tajik, Tamil, Telugu, Thai, Tibetan, Turkish, UTF-8
-(for a setup which prefers Unicode characters and files encoded in
-UTF-8), Ukrainian, Vietnamese, Welsh, and Windows-1255 (for a setup
-which prefers Cyrillic characters and files encoded in Windows-1255).
+@cindex ASCII
+ASCII,
+@cindex Arabic
+Arabic,
+@cindex Belarusian
+Belarusian,
+@cindex Bengali
+Bengali,
+@cindex Brazilian Portuguese
+Brazilian Portuguese,
+@cindex Bulgarian
+Bulgarian,
+@cindex Burmese
+Burmese,
+@cindex Cham
+Cham,
+@cindex Chinese
+Chinese-BIG5, Chinese-CNS, Chinese-EUC-TW, Chinese-GB,
+Chinese-GB18030, Chinese-GBK,
+@cindex Croatian
+Croatian,
+@cindex Cyrillic
+Cyrillic-ALT, Cyrillic-ISO, Cyrillic-KOI8,
+@cindex Czech
+Czech,
+@cindex Devanagari
+Devanagari,
+@cindex Dutch
+Dutch,
+@cindex English
+English,
+@cindex Esperanto
+Esperanto,
+@cindex Ethiopic
+Ethiopic,
+@cindex French
+French,
+@cindex Georgian
+Georgian,
+@cindex German
+German,
+@cindex Greek
+Greek,
+@cindex Gujarati
+Gujarati,
+@cindex Hebrew
+Hebrew,
+@cindex IPA
+IPA,
+@cindex Italian
+Italian,
+@cindex Japanese
+Japanese,
+@cindex Kannada
+Kannada,
+@cindex Khmer
+Khmer,
+@cindex Korean
+Korean,
+@cindex Lao
+Lao,
+@cindex Latin
+Latin-1, Latin-2, Latin-3, Latin-4, Latin-5, Latin-6, Latin-7,
+Latin-8, Latin-9,
+@cindex Latvian
+Latvian,
+@cindex Lithuanian
+Lithuanian,
+@cindex Malayalam
+Malayalam,
+@cindex Oriya
+Oriya,
+@cindex Persian
+Persian,
+@cindex Polish
+Polish,
+@cindex Punjabi
+Punjabi,
+@cindex Romanian
+Romanian,
+@cindex Russian
+Russian,
+@cindex Sinhala
+Sinhala,
+@cindex Slovak
+Slovak,
+@cindex Slovenian
+Slovenian,
+@cindex Spanish
+Spanish,
+@cindex Swedish
+Swedish,
+@cindex TaiViet
+TaiViet,
+@cindex Tajik
+Tajik,
+@cindex Tamil
+Tamil,
+@cindex Telugu
+Telugu,
+@cindex Thai
+Thai,
+@cindex Tibetan
+Tibetan,
+@cindex Turkish
+Turkish,
+@cindex UTF-8
+UTF-8,
+@cindex Ukrainian
+Ukrainian,
+@cindex Vietnamese
+Vietnamese,
+@cindex Welsh
+Welsh, and
+@cindex Windows-1255
+Windows-1255.
@end quotation
To display the script(s) used by your language environment on a
* Symbol Completion:: Completion on symbol names of your program or language.
* MixedCase Words:: Dealing with identifiersLikeThis.
* Semantic:: Suite of editing tools based on source code parsing.
+* Prettifying Symbols:: Display symbols as composed characters.
* Misc for Programs:: Other Emacs features useful for editing programs.
* C Modes:: Special commands of C, C++, Objective-C, Java,
IDL, Pike and AWK modes.
@table @kbd
@item @key{TAB}
Adjust indentation of current line (@code{indent-for-tab-command}).
-@item C-j
+@item @key{RET}
Insert a newline, then adjust indentation of following line
-(@code{newline-and-indent}).
+(@code{newline}).
@end table
@kindex TAB @r{(programming modes)}
the preceding lines; if the region is active, @key{TAB} indents each
line within the region, not just the current line.
-@kindex C-j @r{(indenting source code)}
-@findex newline-and-indent
- The command @kbd{C-j} (@code{newline-and-indent}), which was
-documented in @ref{Indentation Commands}, does the same as @key{RET}
-followed by @key{TAB}: it inserts a new line, then adjusts the line's
-indentation.
+ The command @key{RET} (@code{newline}), which was documented in
+@ref{Inserting Text}, does the same as @key{C-j} followed by
+@key{TAB}: it inserts a new line, then adjusts the line's indentation.
When indenting a line that starts within a parenthetical grouping,
Emacs usually places the start of the line under the preceding line
match up.
Whenever you type a self-inserting character that is a closing
-delimiter, the cursor moves momentarily to the location of the
-matching opening delimiter, provided that is on the screen. If it is
-not on the screen, Emacs displays some of the text near it in the echo
-area. Either way, you can tell which grouping you are closing off.
-If the opening delimiter and closing delimiter are mismatched---such
-as in @samp{[x)}---a warning message is displayed in the echo area.
+delimiter, Emacs briefly indicates the location of the matching
+opening delimiter, provided that is on the screen. If it is not on
+the screen, Emacs displays some of the text near it in the echo area.
+Either way, you can tell which grouping you are closing off. If the
+opening delimiter and closing delimiter are mismatched---such as in
+@samp{[x)}---a warning message is displayed in the echo area.
@vindex blink-matching-paren
@vindex blink-matching-paren-distance
@itemize @bullet
@item
@code{blink-matching-paren} turns the feature on or off: @code{nil}
-disables it, but the default is @code{t} to enable it.
+disables it, but the default is @code{t} to enable it. Set it to
+@code{jump} to make indication work by momentarily moving the cursor
+to the matching opening delimiter.
@item
-@code{blink-matching-delay} says how many seconds to leave the cursor
-on the matching opening delimiter, before bringing it back to the real
-location of point. This may be an integer or floating-point number;
-the default is 1.
+@code{blink-matching-delay} says how many seconds to keep indicating
+the matching opening delimiter. This may be an integer or
+floating-point number; the default is 1.
@item
@code{blink-matching-paren-distance} specifies how many characters
@xref{Top, Semantic,, semantic, Semantic}, for details.
@end ifnottex
+@node Prettifying Symbols
+@section Prettifying Symbols
+@cindex prettifying symbols
+@cindex symbol, prettifying
+
+@code{prettify-symbols-mode} and @code{global-prettify-symbols-mode}
+are two minor modes (@pxref{Minor Modes}) that can display specified
+symbols as composed characters. For instance, in Emacs Lisp mode
+(@pxref{Lisp Eval}), this mode will replace the string ``lambda'' with
+the Greek lambda character.
+
+@findex prettify-symbols-mode
+@vindex prettify-symbols-alist
+When Prettify Symbols mode and Font Lock mode (@pxref{Font Lock}) are
+enabled, symbols are prettified (displayed as composed characters)
+according to the rules in @code{prettify-symbols-alist}, which are
+locally defined by major modes (@pxref{Major Modes}) supporting
+prettifying. To add further customizations for a given major mode,
+you can modify @code{prettify-symbols-alist}. For example:
+
+@example
+(add-hook 'emacs-lisp-mode-hook
+ (lambda ()
+ (push '("<=" . ?≤) prettify-symbols-alist)))
+@end example
+
+@findex global-prettify-symbols-mode
+You can enable this mode locally in desired buffers, or use
+@code{global-prettify-symbols-mode} to enable it for all modes that
+support it.
+
@node Misc for Programs
@section Other Features Useful for Editing Programs
@findex c-context-line-break
This command inserts a line break and indents the new line in a manner
appropriate to the context. In normal code, it does the work of
-@kbd{C-j} (@code{newline-and-indent}), in a C preprocessor line it
-additionally inserts a @samp{\} at the line break, and within comments
-it's like @kbd{M-j} (@code{c-indent-new-comment-line}).
+@key{RET} (@code{newline}), in a C preprocessor line it additionally
+inserts a @samp{\} at the line break, and within comments it's like
+@kbd{M-j} (@code{c-indent-new-comment-line}).
@code{c-context-line-break} isn't bound to a key by default, but it
needs a binding to be useful. The following code will bind it to
-@kbd{C-j}. We use @code{c-initialization-hook} here to make sure
+@kbd{RET}. We use @code{c-initialization-hook} here to make sure
the keymap is loaded before we try to change it.
@example
(defun my-bind-clb ()
- (define-key c-mode-base-map "\C-j"
+ (define-key c-mode-base-map "\C-m"
'c-context-line-break))
(add-hook 'c-initialization-hook 'my-bind-clb)
@end example
@table @kbd
@item @key{TAB}
@code{tab-to-tab-stop}.
+@c FIXME: Maybe this should be consistent with other programming modes.
@item C-j
Insert a newline and then indent using @code{tab-to-tab-stop}.
@item :
used the minibuffer to read its arguments. @xref{Repetition, C-x ESC
ESC}.
+@cindex invisible text, and query-replace
+ The option @code{search-invisible} determines how @code{query-replace}
+treats invisible text. @xref{Outline Search}.
+
@xref{Operating on Files}, for the Dired @kbd{Q} command which
performs query replace on selected files. See also @ref{Transforming
File Names}, for Dired commands to rename, copy, or link files by
that position, the text remains visible. To toggle whether or not
an active incremental search can match hidden text, type @kbd{M-s i}.
To change the default for future searches, customize the option
-@code{search-invisible}. You can also automatically make text visible
-as you navigate in it by using Reveal mode (@kbd{M-x reveal-mode}), a
-buffer-local minor mode.
+@code{search-invisible}. (This option also affects how @code{query-replace}
+and related functions treat hidden text, @pxref{Query Replace}.)
+You can also automatically make text visible as you navigate in it by
+using Reveal mode (@kbd{M-x reveal-mode}), a buffer-local minor mode.
@node Outline Views
@subsection Viewing One Outline in Multiple Views
+2014-02-25 Glenn Morris <rgm@gnu.org>
+
+ * emacs-lisp-intro.texi (X11 Colors): Don't use setq with hooks.
+
2014-02-06 Glenn Morris <rgm@gnu.org>
* emacs-lisp-intro.texi (Recursive Patterns):
@group
;; Set calendar highlighting colors
-(setq calendar-load-hook
+(add-hook 'calendar-load-hook
(lambda ()
(set-face-foreground 'diary-face "skyblue")
(set-face-background 'holiday-face "slate blue")
+2014-03-16 Martin Rudalics <rudalics@gmx.at>
+
+ * display.texi (Temporary Displays): Rewrite descriptions of
+ `with-output-to-temp-buffer' and `with-temp-buffer-window'.
+ * help.texi (Help Functions): Rewrite description of
+ `with-help-window'.
+
+2014-03-15 Dmitry Gutov <dgutov@yandex.ru>
+
+ * display.texi (Blinking): Update WRT to the new
+ `blink-matchin-paren' behavior.
+
+2014-03-14 Martin Rudalics <rudalics@gmx.at>
+
+ * display.texi (Temporary Displays): Say that
+ `with-temp-buffer-window' makes its buffer current.
+ * frames.texi (Size and Position): Describe new option
+ `frame-resize-pixelwise'. Rewrite descriptions of
+ `set-frame-size', `set-frame-height' and `set-frame-width'.
+
+2014-03-09 Martin Rudalics <rudalics@gmx.at>
+
+ * elisp.texi (Top): Rename section "Width" to "Size of Displayed
+ Text".
+ * text.texi (Primitive Indent):
+ * strings.texi (String Basics):
+ * sequences.texi (Sequence Functions): Update references
+ accordingly.
+ * display.texi (Size of Displayed Text): Rename section from
+ "Width". Add description for `window-text-pixel-size'.
+ (Window Dividers): Reword description of window dividers.
+ * frames.texi (Layout Parameters): Improve description of window
+ divider parameters.
+ * windows.texi (Window Sizes): Add descriptions of
+ `window-mode-line-height' and `window-header-line-height'.
+ (Coordinates and Windows): Mention window dividers.
+
+2014-03-07 Martin Rudalics <rudalics@gmx.at>
+
+ * buffers.texi (The Buffer List): Rename node to Buffer List.
+ Describe `buffer-list-update-hook'.
+ * elisp.texi (Top): "The Buffer List" renamed to "Buffer List".
+ Add node for Window Dividers.
+ * hooks.texi (Standard Hooks): Add reference to
+ `buffer-list-update-hook'.
+ * windows.texi (Window Sizes): Describe `window-min-size'.
+ (Splitting Windows): Update description of `split-window'.
+ (Selecting Windows): Update description of `select-window'.
+
+2014-03-06 Martin Rudalics <rudalics@gmx.at>
+
+ * frames.texi (Size and Position): Rewrite entries for
+ `fit-frame-to-buffer' and `fit-frame-to-buffer-margins'. Add
+ description for `fit-frame-to-buffer-sizes'.
+ * windows.texi (Resizing Windows): Add descriptions for
+ pixelwise resizing. Add entries for `window-resize-pixelwise'
+ and `fit-window-to-buffer-horizontally'. Rewrite
+ `fit-window-to-buffer' entry.
+
+2014-03-06 Xue Fuqiao <xfq@gnu.org>
+
+ * internals.texi (Window Internals): Remove field `region_showing'.
+
+2014-03-06 Glenn Morris <rgm@gnu.org>
+
+ * searching.texi (Replacing Match):
+ Remove incorrect, uninteresting return value. (Bug#16942)
+
+2014-03-05 Martin Rudalics <rudalics@gmx.at>
+
+ * display.texi (Window Dividers): New section.
+ * frames.texi (Layout Parameters): Add right-divider-width and
+ bottom-divider-width.
+ * windows.texi (Window Sizes): Redraw schematic and rewrite its
+ description. Rewrite descriptions of `window-total-height',
+ `window-total-width', `window-total-size', `window-body-height',
+ `window-body-width' and `window-size-fixed'. Add descriptions
+ for `window-pixel-height', `window-pixel-width',
+ `window-min-height' and `window-min-width'. Remove description
+ of `window-size-fixed-p' moving part of it to that of
+ `window-size-fixed'.
+ (Resizing Windows): Mention dividers when talking about minimum
+ sizes.
+
+2014-03-05 Glenn Morris <rgm@gnu.org>
+
+ * modes.texi (SMIE Customization): New section.
+ * elisp.texi (Top): Update detailed menu.
+
+2014-03-04 Martin Rudalics <rudalics@gmx.at>
+
+ * windows.texi (Windows and Frames): Add some missing &optional
+ designators. Adjust description of window-in-direction.
+
+2014-03-02 Barry O'Reilly <gundaetiapo@gmail.com>
+
+ * markers.texi (Moving Marker Positions): Clarify guidance about
+ when to move markers and when to create a new one, as discussed at
+ http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16818#17
+
+2014-03-02 Glenn Morris <rgm@gnu.org>
+
+ * text.texi (Decompression): New node.
+ * elisp.texi (Top): Update detailed menu.
+
+2014-03-01 Glenn Morris <rgm@gnu.org>
+
+ * display.texi (Forcing Redisplay): Mention pre-redisplay-function.
+
+2014-02-28 Xue Fuqiao <xfq@gnu.org>
+
+ * functions.texi (Advising Functions, Advising Named Functions):
+ Tweak markup.
+
+ * display.texi (Defining Faces): Doc fix for `face-spec-set'.
+
+ * elisp.texi (Top):
+ * commands.texi (Generic Commands, Defining Commands):
+ Document `define-alternatives'.
+
+2014-02-27 Xue Fuqiao <xfq@gnu.org>
+
+ * windows.texi (Window Sizes): Document `window-size'.
+ (Display Action Functions): Document `display-buffer-at-bottom'.
+ (Window Configurations): Minor fixes.
+
+ * modes.texi (Header Lines): Document `window-header-line-height'.
+
+ * display.texi (Scroll Bars): Document `window-scroll-bar-width'.
+
+ * windows.texi (Window Sizes, Resizing Windows): Document some
+ pixelwise window operations.
+
+ * text.texi (Margins): Fix the description of RET and `C-j'.
+
+ * frames.texi (Multiple Terminals): Document
+ `display-monitor-attributes-list' and `display-monitor-attributes'.
+ (Display Feature Testing): Add some notes about multi-monitor.
+
+2014-02-27 Glenn Morris <rgm@gnu.org>
+
+ * minibuf.texi (Programmed Completion):
+ Mention completion-table-with-cache.
+
+2014-02-25 Glenn Morris <rgm@gnu.org>
+
+ * display.texi (Window Systems):
+ Replace term-setup-hook with emacs-startup-hook.
+ * hooks.texi (Standard Hooks):
+ Replace term-setup-hook with tty-setup-hook.
+ * os.texi (Startup Summary, Init File, Terminal-Specific):
+ Replace term-setup-hook with tty-setup-hook, and update.
+
2014-02-22 Stefan Monnier <monnier@iro.umontreal.ca>
* functions.texi (Declare Form): Document gv-expander, gv-setter, and
- compiler-macro (bug#16829).
+ compiler-macro (bug#16829, bug#15093).
2014-02-21 Juanma Barranquero <lekktu@gmail.com>
2013-11-17 Xue Fuqiao <xfq.free@gmail.com>
- * os.texi (Time Parsing):
- (Processor Run Time, Input Modes, Terminal Output): Minor fixes.
+ * os.texi (Time Parsing, Processor Run Time, Input Modes)
+ (Terminal Output): Minor fixes.
2013-11-14 Glenn Morris <rgm@gnu.org>
2013-10-03 Xue Fuqiao <xfq.free@gmail.com>
- * syntax.texi (Syntax Flags):
- (Syntax Table Functions): Add indexes.
+ * syntax.texi (Syntax Flags, Syntax Table Functions): Add indexes.
2013-10-02 Xue Fuqiao <xfq.free@gmail.com>
(Undo): Doc fix for `buffer-undo-list'.
* positions.texi (Character Motion):
- * markers.texi (Moving Markers):
- (Creating Markers): Comment out undefined behavior.
+ * markers.texi (Moving Markers, Creating Markers):
+ Comment out undefined behavior.
2013-08-15 Xue Fuqiao <xfq.free@gmail.com>
2013-04-21 Xue Fuqiao <xfq.free@gmail.com>
* internals.texi (Writing Emacs Primitives): Remove unnecessary
- references to the sources. (Bug#13800)
+ references to the sources. (Bug#13800)
* searching.texi (Regexp Backslash): Doc fix for backslash
constructs in regular expressions.
2012-12-14 Paul Eggert <eggert@cs.ucla.edu>
- Fix permissions bugs with setgid directories etc. (Bug#13125)
+ Fix permissions bugs with setgid directories etc. (Bug#13125)
* files.texi (Testing Accessibility): Document GROUP arg
of file-ownership-preserved-p.
(File Attributes): Document that 9th element is now
2012-07-06 Richard Stallman <rms@gnu.org>
- * intro.texi (Evaluation Notation, A Sample Function Description):
+ * intro.texi (Evaluation Notation, A Sample Function Description)
(A Sample Variable Description): Improve/undo previous changes.
2012-07-05 Glenn Morris <rgm@gnu.org>
(Resizing Windows, Deleting Windows, Selecting Windows)
(Choosing Window Options, Horizontal Scrolling)
(Cyclic Window Ordering, Window History, Dedicated Windows)
- (Quitting Windows, Window Configurations, Textual Scrolling):
+ (Quitting Windows, Window Configurations, Textual Scrolling)
(Coordinates and Windows, Window Configurations)
(Window Parameters, Window Hooks): Copyedits.
(Splitting Windows, Deleting Windows):
* processes.texi (Output from Processes, Filter Functions):
Mention waiting-for-user-input-p.
- (Sentinels, Query Before Exit, System Processes, Transaction Queues):
+ (Sentinels, Query Before Exit, System Processes, Transaction Queues)
(Network Servers, Datagrams, Network Processes, Network Options)
(Network Feature Testing, Serial Ports): Copyedits.
(Network): Add encrypted network overview paragraph.
2012-04-15 Glenn Morris <rgm@gnu.org>
- * processes.texi (Processes, Subprocess Creation, Shell Arguments):
+ * processes.texi (Processes, Subprocess Creation, Shell Arguments)
(Synchronous Processes, Asynchronous Processes, Deleting Processes):
Copyedits.
(Subprocess Creation): Discourage modifying exec-path directly.
2012-04-14 Chong Yidong <cyd@gnu.org>
- * customize.texi (Applying Customizations):
- (Custom Themes): New nodes.
+ * customize.texi (Applying Customizations, Custom Themes): New nodes.
* display.texi (Defining Faces): Reference custom-set-faces.
2012-03-28 Glenn Morris <rgm@gnu.org>
- * searching.texi (Regular Expressions, Regexp Special):
- (Regexp Backslash, Regexp Example, Regexp Functions, Regexp Search):
+ * searching.texi (Regular Expressions, Regexp Special)
+ (Regexp Backslash, Regexp Example, Regexp Functions, Regexp Search)
(Simple Match Data, Saving Match Data, Standard Regexps): Copyedits.
(Regexp Special): Mention collation.
Clarify char classes with an example.
(Pure Storage): Small changes.
(Memory Usage): Copyedit.
(Writing Emacs Primitives): Update Fcoordinates_in_window_p and For
- example definitions. Give examples of things with non-nil
+ example definitions. Give examples of things with non-nil
interactive args. Mention eval_sub. Remove old info about
strings and GCPRO. Mention cus-start.el.
(Buffer Internals, Window Internals, Process Internals):
(Syntax Class Table): Use a table.
(Syntax Properties): Document syntax-propertize-function and
syntax-propertize-extend-region-functions.
- (Motion via Parsing): Clarify scan-lists. Fix indentation.
+ (Motion via Parsing): Clarify scan-lists. Fix indentation.
(Parser State): Update for the new "c" comment style.
Fix description of item 7 (comment style).
2011-07-16 Lars Magne Ingebrigtsen <larsi@gnus.org>
Tim Cross <theophilusx@gmail.com> (tiny change)
- Glenn Morris <rgm@gnu.org>
+ Glenn Morris <rgm@gnu.org>
* keymaps.texi (Toolkit Differences): New node. (Bug#8176)
Document wide integers better.
* files.texi (File Attributes): Document ino_t values better.
ino_t values no longer map to anything larger than a single cons.
- * numbers.texi (Integer Basics, Integer Basics, Arithmetic Operations):
+ * numbers.texi (Integer Basics, Integer Basics, Arithmetic Operations)
(Bitwise Operations):
* objects.texi (Integer Type): Use a binary notation that is a bit easier
to read, and that will port better if 62-bits becomes the default.
* positions.texi (List Motion):
* hash.texi (Hash Tables, Creating Hash, Defining Hash):
* numbers.texi (Arithmetic Operations, Math Functions)
- (Predicates on Numbers, Comparison of Numbers):
- (Numeric Conversions):
+ (Predicates on Numbers, Comparison of Numbers, Numeric Conversions):
* locals.texi (Standard Buffer-Local Variables):
* maps.texi (Standard Keymaps):
* os.texi (User Identification, System Environment, Recording Input)
* Modification Time:: Determining whether the visited file was changed
"behind Emacs's back".
* Read Only Buffers:: Modifying text is not allowed in a read-only buffer.
-* The Buffer List:: How to look at all the existing buffers.
+* Buffer List:: How to look at all the existing buffers.
* Creating Buffers:: Functions that create buffers.
* Killing Buffers:: Buffers exist until explicitly killed.
* Indirect Buffers:: An indirect buffer shares text with some other buffer.
signal an error if the current buffer is read-only.
@end defun
-@node The Buffer List
+@node Buffer List
@section The Buffer List
@cindex buffer list
window.
@end deffn
+@defvar buffer-list-update-hook
+This is a normal hook run whenever the buffer list changes. Functions
+(implicitly) running this hook are @code{get-buffer-create}
+(@pxref{Creating Buffers}), @code{rename-buffer} (@pxref{Buffer Names}),
+@code{kill-buffer} (@pxref{Killing Buffers}), @code{bury-buffer} (see
+above) and @code{select-window} (@pxref{Selecting Windows}).
+@end defvar
@node Creating Buffers
@section Creating Buffers
* Interactive Codes:: The standard letter-codes for reading arguments
in various ways.
* Interactive Examples:: Examples of how to read interactive arguments.
+* Generic Commands:: Select among command alternatives.
@end menu
@node Using Interactive
@end group
@end example
+@node Generic Commands
+@subsection Select among Command Alternatives
+@cindex generic commands
+@cindex alternatives, defining
+
+The macro @code{define-alternatives} can be used to define
+@dfn{generic commands}. Generic commands are interactive functions
+whose implementation can be selected among several alternatives, as a
+matter of user preference.
+
+@defmac define-alternatives command &rest customizations
+Define the new command `COMMAND'.
+
+The argument `COMMAND' should be a symbol.
+
+When a user runs @kbd{M-x COMMAND @key{RET}} for the first time, Emacs
+will prompt for which alternative to use and record the selected
+command as a custom variable.
+
+Running @kbd{C-u M-x COMMAND @key{RET}} prompts again for an
+alternative and overwrites the previous choice.
+
+The variable @code{COMMAND-alternatives} contains an alist
+(@pxref{Association Lists}) with alternative implementations of
+`COMMAND'. @code{define-alternatives} does not have any effect until
+this variable is set.
+
+If @var{customizations} is non-@var{nil}, it should be composed of
+alternating @code{defcustom} keywords and values to add to the
+declaration of @code{COMMAND-alternatives} (typically :group and
+:version).
+@end defmac
+
@node Interactive Call
@section Interactive Call
@cindex interactive call
* Selective Display:: Hiding part of the buffer text (the old way).
* Temporary Displays:: Displays that go away automatically.
* Overlays:: Use overlays to highlight parts of the buffer.
-* Width:: How wide a character or string is on the screen.
+* Size of Displayed Text:: How large displayed text is.
* Line Height:: Controlling the height of lines.
* Faces:: A face defines a graphics style for text characters:
font, colors, etc.
* Fringes:: Controlling window fringes.
* Scroll Bars:: Controlling vertical scroll bars.
+* Window Dividers:: Separating windows visually.
* Display Property:: Enabling special display features.
* Images:: Displaying images in Emacs buffers.
* Buttons:: Adding clickable buttons to Emacs buffers.
This variable has no effect when @code{redisplay-dont-pause} is
non-@code{nil} (the default).
+@end defvar
+
+@defvar pre-redisplay-function
+A function run just before redisplay. It is called with one argument,
+the set of windows to redisplay.
@end defvar
Although @code{redisplay} tries immediately to redisplay, it does
buffer and then present it to the user for perusal rather than for
editing. Many help commands use this feature.
-@defmac with-output-to-temp-buffer buffer-name forms@dots{}
-This function executes @var{forms} while arranging to insert any output
-they print into the buffer named @var{buffer-name}, which is first
-created if necessary, and put into Help mode. Finally, the buffer is
-displayed in some window, but not selected. (See the similar
-form @code{with-temp-buffer-window} below.)
-
-If the @var{forms} do not change the major mode in the output buffer,
-so that it is still Help mode at the end of their execution, then
-@code{with-output-to-temp-buffer} makes this buffer read-only at the
-end, and also scans it for function and variable names to make them
-into clickable cross-references. @xref{Docstring hyperlinks, , Tips
-for Documentation Strings}, in particular the item on hyperlinks in
+@defmac with-output-to-temp-buffer buffer-name body@dots{}
+This function executes the forms in @var{body} while arranging to insert
+any output they print into the buffer named @var{buffer-name}, which is
+first created if necessary, and put into Help mode. (See the similar
+form @code{with-temp-buffer-window} below.) Finally, the buffer is
+displayed in some window, but that window is not selected.
+
+If the forms in @var{body} do not change the major mode in the output
+buffer, so that it is still Help mode at the end of their execution,
+then @code{with-output-to-temp-buffer} makes this buffer read-only at
+the end, and also scans it for function and variable names to make them
+into clickable cross-references. @xref{Docstring hyperlinks, , Tips for
+Documentation Strings}, in particular the item on hyperlinks in
documentation strings, for more details.
-The string @var{buffer-name} specifies the temporary buffer, which
-need not already exist. The argument must be a string, not a buffer.
-The buffer is erased initially (with no questions asked), and it is
-marked as unmodified after @code{with-output-to-temp-buffer} exits.
+The string @var{buffer-name} specifies the temporary buffer, which need
+not already exist. The argument must be a string, not a buffer. The
+buffer is erased initially (with no questions asked), and it is marked
+as unmodified after @code{with-output-to-temp-buffer} exits.
@code{with-output-to-temp-buffer} binds @code{standard-output} to the
-temporary buffer, then it evaluates the forms in @var{forms}. Output
-using the Lisp output functions within @var{forms} goes by default to
+temporary buffer, then it evaluates the forms in @var{body}. Output
+using the Lisp output functions within @var{body} goes by default to
that buffer (but screen display and messages in the echo area, although
they are ``output'' in the general sense of the word, are not affected).
@xref{Output Functions}.
Several hooks are available for customizing the behavior
of this construct; they are listed below.
-The value of the last form in @var{forms} is returned.
+The value of the last form in @var{body} is returned.
@example
@group
is current, and the window it was displayed in is selected.
@end defvar
-@defmac with-temp-buffer-window buffer-or-name action quit-function forms@dots{}
-This macro is similar to @code{with-output-to-temp-buffer}.
-Like that construct, it executes @var{forms} while arranging to insert
-any output they print into the buffer named @var{buffer-or-name}.
-Finally, the buffer is displayed in some window, but not selected.
-Unlike @code{with-output-to-temp-buffer}, this does not switch to Help
-mode.
-
-The argument @var{buffer-or-name} specifies the temporary buffer.
-It can be either a buffer, which must already exist, or a string,
-in which case a buffer of that name is created if necessary.
-The buffer is marked as unmodified and read-only when
-@code{with-temp-buffer-window} exits.
+@defmac with-temp-buffer-window buffer-or-name action quit-function body@dots{}
+This macro is similar to @code{with-output-to-temp-buffer}. Like that
+construct, it executes @var{body} while arranging to insert any output
+it prints into the buffer named @var{buffer-or-name} and displays that
+buffer in some window. Unlike @code{with-output-to-temp-buffer},
+however, it does not automatically switch that buffer to Help mode.
+
+Like @code{with-output-to-temp-buffer} it neither makes the buffer
+specified by @var{buffer-or-name} current when executing @var{body}.
+@findex with-current-buffer-window
+The otherwise identical macro @code{with-current-buffer-window} can be
+used to execute @var{body} with that buffer current.
+
+The argument @var{buffer-or-name} specifies the temporary buffer. It
+can be either a buffer, which must already exist, or a string, in which
+case a buffer of that name is created, if necessary. The buffer is
+marked as unmodified and read-only when @code{with-temp-buffer-window}
+exits.
This macro does not call @code{temp-buffer-show-function}. Rather, it
passes the @var{action} argument to @code{display-buffer} in order to
display the buffer.
-The value of the last form in @var{forms} is returned, unless the
-argument @var{quit-function} is specified. In that case,
-it is called with two arguments: the window showing the buffer
-and the result of @var{forms}. The final return value is then
-whatever @var{quit-function} returns.
+The value of the last form in @var{body} is returned, unless the
+argument @var{quit-function} is specified. In that case, it is called
+with two arguments: the window showing the buffer and the result of
+@var{body}. The final return value is then whatever
+@var{quit-function} returns.
@vindex temp-buffer-window-setup-hook
@vindex temp-buffer-window-show-hook
(point)))
@end smallexample
-@node Width
-@section Width
+@node Size of Displayed Text
+@section Size of Displayed Text
Since not all characters have the same width, these functions let you
check the width of a character. @xref{Primitive Indent}, and
@end example
@end defun
+The following function returns the size in pixels of text as if it were
+displayed in a given window. This function is used by
+@code{fit-window-to-buffer} (@pxref{Resizing Windows}) and
+@code{fit-frame-to-buffer} (@pxref{Size and Position}) to make a window
+exactly as large as the text it contains.
+
+@defun window-text-pixel-size &optional window from to x-limit y-limit mode-and-header-line
+This function returns the size of the text of @var{window}'s buffer in
+pixels. @var{window} must be a live window and defaults to the selected
+one. The return value is a cons of the maximum pixel-width of any text
+line and the maximum pixel-height of all text lines.
+
+The optional argument @var{from}, if non-@code{nil}, specifies the first
+text position to consider and defaults to the minimum accessible
+position of the buffer. If @var{from} is @code{t}, it uses the minimum
+accessible position that is not a newline character. The optional
+argument @var{to}, if non-@code{nil}, specifies the last text position
+to consider and defaults to the maximum accessible position of the
+buffer. If @var{to} is @code{t}, it uses the maximum accessible
+position that is not a newline character.
+
+The optional argument @var{x-limit}, if non-@code{nil}, specifies the
+maximum pixel-width that can be returned. @var{x-limit} @code{nil} or
+omitted, means to use the pixel-width of @var{window}'s body
+(@pxref{Window Sizes}); this is useful when the caller does not intend
+to change the width of @var{window}. Otherwise, the caller should
+specify here the maximum width @var{window}'s body may assume. Text
+whose x-coordinate is beyond @var{x-limit} is ignored. Since
+calculating the width of long lines can take some time, it's always a
+good idea to make this argument as small as needed; in particular, if
+the buffer might contain long lines that will be truncated anyway.
+
+The optional argument @var{y-limit}, if non-@code{nil}, specifies the
+maximum pixel-height that can be returned. Text lines whose
+y-coordinate is beyond @var{y-limit} are ignored. Since calculating the
+pixel-height of a large buffer can take some time, it makes sense to
+specify this argument; in particular, if the caller does not know the
+size of the buffer.
+
+The optional argument @var{mode-and-header-line} @code{nil} or omitted
+means to not include the height of the mode- or header-line of
+@var{window} in the return value. If it is either the symbol
+@code{mode-line} or @code{header-line}, include only the height of that
+line, if present, in the return value. If it is @code{t}, include the
+height of both, if present, in the return value.
+@end defun
+
+
@node Line Height
@section Line Height
@cindex line height
@var{spec} should be a face spec, as described in the above
documentation for @code{defface}.
+This function also defines @var{face} as a valid face name if it is
+not already one, and (re)calculates its attributes on existing frames.
+
@cindex override spec @r{(for a face)}
The argument @var{spec-type} determines which spec to set. If it is
@code{nil} or @code{face-override-spec}, this function sets the
@dfn{override spec}, which overrides over all other face specs on
-@var{face}. If it is @code{face-defface-spec}, this function sets the
-default face spec (the same one set by @code{defface}). If it is
-@code{reset}, this function clears out all customization specs and
-override specs from @var{face} (in this case, the value of @var{spec}
-is ignored). Any other value of @var{spec-type} is reserved for
-internal use.
+@var{face}. If it is @code{customized-face} or @code{saved-face},
+this function sets the customized spec or the saved custom spec. If
+it is @code{face-defface-spec}, this function sets the default face
+spec (the same one set by @code{defface}). If it is @code{reset},
+this function clears out all customization specs and override specs
+from @var{face} (in this case, the value of @var{spec} is ignored).
+Any other value of @var{spec-type} is reserved for internal use.
@end defun
@node Attribute Functions
@var{horizontal-type} is not actually meaningful.
@end defun
+@defun window-scroll-bar-width &optional window
+This function returns the width of @var{window}'s vertical scrollbar,
+in pixels. @var{window} must be a live window. If @var{window} is
+@code{nil} or omitted, it will be the selected window.
+@end defun
+
If you don't specify these values for a window with
@code{set-window-scroll-bars}, the buffer-local variables
@code{scroll-bar-mode} and @code{scroll-bar-width} in the buffer being
to use the value specified by the frame.
@end defvar
+@node Window Dividers
+@section Window Dividers
+@cindex window dividers
+@cindex right dividers
+@cindex bottom dividers
+
+Window dividers are bars drawn between a frame's windows. A ``right''
+divider is drawn between a window and any adjacent windows on the right.
+Its width (thickness) is specified by the frame parameter
+@code{right-divider-width}. A ``bottom'' divider is drawn between a
+window and adjacent windows on the bottom or the echo area. Its width
+is specified by the frame parameter @code{bottom-divider-width}. In
+either case, specifying a width of zero means to not draw such dividers.
+@xref{Layout Parameters}.
+
+ Technically, a right divider ``belongs'' to the window on its left,
+which means that its width contributes to the total width of that
+window. A bottom divider ``belongs'' to the window above it, which
+means that its width contributes to the total height of that window.
+@xref{Window Sizes}. When a window has both, a right and a bottom
+divider, the bottom divider ``prevails''. This means that a bottom
+divider is drawn over the full total width of its window while the right
+divider ends above the bottom divider.
+
+ Dividers can be dragged with the mouse and are therefore useful for
+adjusting the sizes of adjacent windows with the mouse. They also serve
+to visually set apart adjacent windows when no scroll bars or mode lines
+are present. The following three faces allow to customize the
+appearance of dividers:
+
+@table @code
+@item window-divider
+When a divider is less than three pixels wide, it is drawn solidly with
+the foreground of this face. For larger dividers this face is used for
+the inner part only, excluding the first and last pixel.
+
+@item window-divider-first-pixel
+This is the face used for drawing the first pixel of a divider that is
+at least three pixels wide. To obtain a solid appearance, set this to
+the same value used for the @code{window-divider} face.
+
+@item window-divider-last-pixel
+This is the face used for drawing the last pixel of a divider that is at
+least three pixels wide. To obtain a solid appearance, set this to the
+same value used for the @code{window-divider} face.
+@end table
+
+You can get the sizes of the dividers of a specific window with the
+following two functions.
+
+@defun window-right-divider-width &optional window
+Return the width (thickness) in pixels of @var{window}'s right divider.
+@var{window} must be a live window and defaults to the selected one.
+The return value is always zero for a rightmost window.
+@end defun
+
+@defun window-bottom-divider-width &optional window
+Return the width (thickness) in pixels of @var{window}'s bottom divider.
+@var{window} must be a live window and defaults to the selected one.
+The return value is zero for the minibuffer window or a bottommost
+window on a minibuffer-less frame.
+@end defun
+
+
@node Display Property
@section The @code{display} Property
@cindex display specification
@end defopt
@defopt blink-matching-delay
-This variable specifies the number of seconds for the cursor to remain
-at the matching parenthesis. A fraction of a second often gives
-good results, but the default is 1, which works on all systems.
+This variable specifies the number of seconds to keep indicating the
+matching parenthesis. A fraction of a second often gives good
+results, but the default is 1, which works on all systems.
@end defopt
@deffn Command blink-matching-open
This function is the default value of @code{blink-paren-function}. It
-assumes that point follows a character with close parenthesis syntax and
-moves the cursor momentarily to the matching opening character. If that
-character is not already on the screen, it displays the character's
-context in the echo area. To avoid long delays, this function does not
-search farther than @code{blink-matching-paren-distance} characters.
+assumes that point follows a character with close parenthesis syntax
+and applies the appropriate effect momentarily to the matching opening
+character. If that character is not already on the screen, it
+displays the character's context in the echo area. To avoid long
+delays, this function does not search farther than
+@code{blink-matching-paren-distance} characters.
Here is an example of calling this function explicitly.
initialization files. Emacs runs this hook after it has completed
loading your init file, the default initialization file (if
any), and the terminal-specific Lisp code, and running the hook
-@code{term-setup-hook}.
+@code{emacs-startup-hook}.
This hook is used for internal purposes: setting up communication with
the window system, and creating the initial window. Users should not
* Interactive Codes:: The standard letter-codes for reading arguments
in various ways.
* Interactive Examples:: Examples of how to read interactive arguments.
+* Generic Commands:: Select among command alternatives.
+
Input Events
* SMIE Indentation:: Specifying indentation rules.
* SMIE Indentation Helpers:: Helper functions for indentation rules.
* SMIE Indentation Example:: Sample indentation rules.
+* SMIE Customization:: Customizing indentation.
Documentation
"behind Emacs's back".
* Read Only Buffers:: Modifying text is not allowed in a
read-only buffer.
-* The Buffer List:: How to look at all the existing buffers.
+* Buffer List:: How to look at all the existing buffers.
* Creating Buffers:: Functions that create buffers.
* Killing Buffers:: Buffers exist until explicitly killed.
* Indirect Buffers:: An indirect buffer shares text with some
* Registers:: How registers are implemented. Accessing
the text or position stored in a register.
* Transposition:: Swapping two portions of a buffer.
+* Decompression:: Dealing with compressed data.
* Base 64:: Conversion to or from base 64 encoding.
* Checksum/Hash:: Computing cryptographic hashes.
* Parsing HTML/XML:: Parsing HTML and XML.
* Selective Display:: Hiding part of the buffer text (the old way).
* Temporary Displays:: Displays that go away automatically.
* Overlays:: Use overlays to highlight parts of the buffer.
-* Width:: How wide a character or string is on the screen.
+* Size of Displayed Text:: How large displayed text is.
* Line Height:: Controlling the height of lines.
* Faces:: A face defines a graphics style
for text characters: font, colors, etc.
* Fringes:: Controlling window fringes.
* Scroll Bars:: Controlling vertical scroll bars.
+* Window Dividers:: Separating windows visually.
* Display Property:: Enabling special display features.
* Images:: Displaying images in Emacs buffers.
* Buttons:: Adding clickable buttons to Emacs buffers.
* Abstract Display:: Emacs's Widget for Object Collections.
* Blinking:: How Emacs shows the matching open parenthesis.
-* Character Display:: How Emacs displays individual characters.
+* Character Display:: How Emacs displays individual characters.
* Beeping:: Audible signal to the user.
* Window Systems:: Which window system is being used.
* Bidirectional Display:: Display of bidirectional scripts, such as
* Attribute Functions:: Functions to examine and set face attributes.
* Displaying Faces:: How Emacs combines the faces specified for
a character.
-* Face Remapping:: Remapping faces to alternative definitions.
+* Face Remapping:: Remapping faces to alternative definitions.
* Face Functions:: How to define and examine faces.
* Auto Faces:: Hook for automatic face assignment.
-* Basic Faces:: Faces that are defined by default.
+* Basic Faces:: Faces that are defined by default.
* Font Selection:: Finding the best available font for a face.
* Font Lookup:: Looking up the names of available fonts
and information about them.
server, Emacs knows by the similarity in their names that they share a
single keyboard.
- On some ``multi-monitor'' setups, a single X display outputs to more
-than one physical monitor. Currently, there is no way for Emacs to
-distinguish between the different physical monitors.
-
@deffn Command make-frame-on-display display &optional parameters
This function creates and returns a new frame on @var{display}, taking
the other frame parameters from the alist @var{parameters}.
on that display (@pxref{Deleting Frames}).
@end defun
+@cindex multi-monitor
+ On some ``multi-monitor'' setups, a single X display outputs to more
+than one physical monitor. @code{display-monitor-attributes-list} and
+@code{frame-monitor-attributes} can be used to obtain information
+about each physical monitor on multi-monitor setups.
+
+@defun display-monitor-attributes-list &optional display
+This function returns a list of physical monitor attributes on
+@var{display}. Each element of the list is an association list,
+representing the attributes of each physical monitor. The first
+element corresponds to the primary monitor.
+
+Attributes for a physical monitor are:
+
+@table @samp
+@item geometry
+Position and size in pixels in the form of @samp{(X Y WIDTH HEIGHT)}
+
+@item workarea
+Position and size of the workarea in pixels in the form of @samp{(X Y
+WIDTH HEIGHT)}
+
+@item mm-size
+Width and height in millimeters in the form of @samp{(WIDTH HEIGHT)}
+
+@item frames
+List of frames dominated by the physical monitor
+
+@item name
+Name of the physical monitor as a string
+@end table
+
+where X, Y, WIDTH, and HEIGHT are integers. @samp{name} is optional.
+
+A frame is dominated by a physical monitor when either the
+largest area of the frame resides in the monitor, or the monitor
+is the closest to the frame if the frame does not intersect any
+physical monitors. Every non-tip frame (including invisible one)
+in a graphical display is dominated by exactly one physical
+monitor at a time, though it can span multiple (or no) physical
+monitors.
+
+@var{display} defaults to the selected frame's display.
+@end defun
+
+@defun frame-monitor-attributes &optional frame
+This function returns the attributes of the physical monitor
+dominating @var{frame}, which defaults to the selected frame.
+
+A frame is dominated by a physical monitor when either the
+largest area of the frame resides in the monitor, or the monitor
+is the closest to the frame if the frame does not intersect any
+physical monitors.
+@end defun
+
@node Frame Parameters
@section Frame Parameters
@cindex frame parameters
precise width by specifying that width as a negative integer. If both
widths are negative, only the left fringe gets the specified width.
+@vindex right-divider-width, a frame parameter
+@item right-divider-width
+The width (thickness) reserved for the right divider (@pxref{Window
+Dividers}) of any window on the frame, in pixels. A value of zero means
+to not draw right dividers.
+
+@vindex bottom-divider-width, a frame parameter
+@item bottom-divider-width
+The width (thickness) reserved for the bottom divider (@pxref{Window
+Dividers}) of any window on the frame, in pixels. A value of zero means
+to not draw bottom dividers.
+
@vindex menu-bar-lines frame parameter
@item menu-bar-lines
The number of lines to allocate at the top of the frame for a menu
frame.
@end defun
-@defun set-frame-size frame cols rows
+@defopt frame-resize-pixelwise
+If this option is @code{nil}, a frame's size is usually rounded to a
+multiple of the current values of that frame's @code{frame-char-height}
+and @code{frame-char-width}. If this is non-@code{nil}, no rounding
+occurs, hence frame sizes can increase/decrease by one pixel.
+
+Setting this causes the next resize operation to pass the corresponding
+size hints to the window manager. This means that this variable should
+be set only in a user's initial file; applications should never bind it
+temporarily.
+
+The precise semantics of a value of @code{nil} for this option depends
+on the toolkit used: Dragging the frame border with the mouse is usually
+always done character-wise. Calling @code{set-frame-size} (see below)
+with arguments that do not specify the frame size as an integer multiple
+of its character size may be, however, either ignored or cause a
+rounding (GTK+, Windows) or get accepted (Lucid, Motif). This also
+means that with some toolkits and a display whose size is not an
+integral multiple of your default font, you may have to set this to
+non-@code{nil} in order to fully maximize a frame.
+@end defopt
+
+@defun set-frame-size frame width height pixelwise
This function sets the size of @var{frame}, measured in characters;
-@var{cols} and @var{rows} specify the new width and height.
+@var{width} and @var{height} specify the new width in columns and the
+new height in lines.
-To set the size based on values measured in pixels, use
-@code{frame-char-height} and @code{frame-char-width} to convert
-them to units of characters.
+The optional argument @var{pixelwise} non-@code{nil} means to measure
+the new width and height in units of pixels instead. Note that if
+@code{frame-resize-pixelwise} is @code{nil}, some toolkits may refuse to
+fully honor the request if it does not increase/decrease the frame size
+to a multiple of its character size.
@end defun
-@defun set-frame-height frame lines &optional pretend
-This function resizes @var{frame} to a height of @var{lines} lines. The
+@defun set-frame-height frame height &optional pretend pixelwise
+This function resizes @var{frame} to a height of @var{height} lines. The
sizes of existing windows in @var{frame} are altered proportionally to
fit.
-If @var{pretend} is non-@code{nil}, then Emacs displays @var{lines}
+If @var{pretend} is non-@code{nil}, then Emacs displays @var{height}
lines of output in @var{frame}, but does not change its value for the
actual height of the frame. This is only useful on text terminals.
Using a smaller height than the terminal actually implements may be
height ``for real'' does not always work, because knowing the correct
actual size may be necessary for correct cursor positioning on
text terminals.
+
+The optional fourth argument @var{pixelwise} non-@code{nil} means that
+@var{frame} should be @var{height} pixels high. Note that if
+@code{frame-resize-pixelwise} is @code{nil}, some toolkits may refuse to
+fully honor the request if it does not increase/decrease the frame
+height to a multiple of its character height.
@end defun
-@defun set-frame-width frame width &optional pretend
+@defun set-frame-width frame width &optional pretend pixelwise
This function sets the width of @var{frame}, measured in characters.
The argument @var{pretend} has the same meaning as in
@code{set-frame-height}.
+
+The optional fourth argument @var{pixelwise} non-@code{nil} means that
+@var{frame} should be @var{width} pixels wide. Note that if
+@code{frame-resize-pixelwise} is @code{nil}, some toolkits may refuse to
+fully honor the request if it does not increase/decrease the frame width
+to a multiple of its character width.
@end defun
@c FIXME? Belongs more in Emacs manual than here?
@c But, e.g., fit-window-to-buffer is in this manual.
-@deffn Command fit-frame-to-buffer &optional frame max-height min-height
-This command adjusts the height of @var{frame} (the default is the
-selected frame) to fit its contents. The optional arguments
-@var{max-height} and @var{min-height} specify the maximum and minimum
-new frame heights, respectively.
-
-@vindex fit-frame-to-buffer-bottom-margin
-The default minimum height corresponds to @code{window-min-height}.
-The default maximum height is the screen height below the current top
-position of the frame, minus any margin specified by the option
-@code{fit-frame-to-buffer-bottom-margin}.
+If you have a frame that displays only one window, you can fit that
+frame to its buffer using the command @code{fit-frame-to-buffer}.
+
+@deffn Command fit-frame-to-buffer &optional frame max-height min-height max-width min-width only
+This command adjusts the size of @var{frame} to display the contents of
+its buffer exactly. @var{frame} can be any live frame and defaults to
+the selected one. Fitting is done only if @var{frame}'s root window is
+live. The arguments @var{max-height}, @var{min-height}, @var{max-width}
+and @var{min-width} specify bounds on the new total size of
+@var{frame}'s root window. @var{min-height} and @var{min-width} default
+to the values of @code{window-min-height} and @code{window-min-width}
+respectively.
+
+If the optional argument @var{only} is @code{vertically}, this function
+may resize the frame vertically only. If @var{only} is
+@code{horizontally}, it may resize the frame horizontally only.
@end deffn
+The behavior of @code{fit-frame-to-buffer} can be controlled with the
+help of the two options listed next.
+
+@defopt fit-frame-to-buffer-margins
+This option can be used to specify margins around frames to be fit by
+@code{fit-frame-to-buffer}. Such margins can be useful to avoid, for
+example, that such frames overlap the taskbar.
+
+It specifies the numbers of pixels to be left free on the left, above,
+the right, and below a frame that shall be fit. The default specifies
+@code{nil} for each which means to use no margins. The value specified
+here can be overridden for a specific frame by that frame's
+@code{fit-frame-to-buffer-margins} parameter, if present.
+@end defopt
+
+@defopt fit-frame-to-buffer-sizes
+This option specifies size boundaries for @code{fit-frame-to-buffer}.
+It specifies the total maximum and minimum lines and maximum and minimum
+columns of the root window of any frame that shall be fit to its buffer.
+If any of these values is non-@code{nil}, it overrides the corresponding
+argument of @code{fit-frame-to-buffer}.
+@end defopt
+
+
@node Geometry
@subsection Geometry
On a character terminal, it gives the height in characters.
For graphical terminals, note that on ``multi-monitor'' setups this
-refers to the pixel width for all physical monitors associated with
+refers to the pixel height for all physical monitors associated with
@var{display}. @xref{Multiple Terminals}.
@end defun
@defun display-mm-height &optional display
This function returns the height of the screen in millimeters,
or @code{nil} if Emacs cannot get that information.
+
+For graphical terminals, note that on ``multi-monitor'' setups this
+refers to the height for all physical monitors associated with
+@var{display}. @xref{Multiple Terminals}.
@end defun
@defun display-mm-width &optional display
This function returns the width of the screen in millimeters,
or @code{nil} if Emacs cannot get that information.
+
+For graphical terminals, note that on ``multi-monitor'' setups this
+refers to the width for all physical monitors associated with
+@var{display}. @xref{Multiple Terminals}.
@end defun
@defopt display-mm-dimensions-alist
@emph{advice}.
The function cell of a symbol can be manipulated similarly, but since it can
-contain other things than a plain function, you have to use @var{advice-add}
-and @var{advice-remove} instead, which
-@c use @var{add-function} and @var{remove-function} internally, but
+contain other things than a plain function, you have to use @code{advice-add}
+and @code{advice-remove} instead, which
+@c use @code{add-function} and @code{remove-function} internally, but
know how to handle cases such as when the function cell holds a macro rather
than function, or when the function is autoloaded so the advice's activation
needs to be postponed.
@subsection Advising Named Functions
A common use of advice is for named functions and macros.
-Since @var{add-function} does not know how to deal with macros and autoloaded
-functions, Emacs provides a separate set of functions to manipulate pieces of
-advice applied to named functions.
+Since @code{add-function} does not know how to deal with macros and
+autoloaded functions, Emacs provides a separate set of functions to
+manipulate pieces of advice applied to named functions.
Advice can be useful for altering the behavior of an existing
function without having to redefine the whole function. However, it
@file{*Help*}; if such a buffer does not exist, it is first created.
@end defun
+@vindex help-window-select
@defmac with-help-window buffer-name body@dots{}
-This macro evaluates the @var{body} forms, inserting any output they
-produce into a buffer named @var{buffer-name} like
-@code{with-output-to-temp-buffer} (@pxref{Temporary Displays}).
-(Usually, @var{buffer-name} should be the value returned by the
-function @code{help-buffer}.) It also puts the specified buffer into
-Help mode and displays a message telling the user how to quit and
-scroll the help window.
+This macro evaluates @var{body} like @code{with-output-to-temp-buffer}
+(@pxref{Temporary Displays}), inserting any output produced by its forms
+into a buffer named @var{buffer-name}. (Usually, @var{buffer-name}
+should be the value returned by the function @code{help-buffer}.) It
+also puts the specified buffer into Help mode and displays a message
+telling the user how to quit and scroll the help window. It selects the
+help window if the current value of the user option
+@code{help-window-select} has been set accordingly. It returns the last
+value in @var{body}.
@end defmac
@defun help-setup-xref item interactive-p
@c -*-texinfo-*-
@c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1993, 1998, 2001-2014 Free Software Foundation,
-@c Inc.
+@c Copyright (C) 1990-1993, 1998, 2001-2014 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
@node Standard Hooks
@appendix Standard Hooks
@item buffer-list-update-hook
@vindex buffer-list-update-hook
-Hook run when the buffer list changes.
+Hook run when the buffer list changes (@pxref{Buffer List}).
@item buffer-quit-function
@vindex buffer-quit-function
@itemx temp-buffer-show-hook
@xref{Temporary Displays}.
-@item term-setup-hook
+@item tty-setup-hook
@xref{Terminal-Specific}.
@item window-configuration-change-hook
no access to the parent windows; they operate on the windows at the
leaves of the tree, which actually display buffers.
+@c FIXME: These two slots and the `buffer' slot below were replaced
+@c with a single slot `contents' on 2013-03-28. --xfq
@item hchild
@itemx vchild
These fields contain the window's leftmost child and its topmost child
@code{nil} meaning none is known. If it is a buffer, don't display
the line number as long as the window shows that buffer.
-@item region_showing
-If the region (or part of it) is highlighted in this window, this field
-holds the mark position that made one end of that region. Otherwise,
-this field is @code{nil}.
-
@item column_number_displayed
The column number currently displayed in this window's mode line, or @code{nil}
if column numbers are not being displayed.
@section Moving Marker Positions
This section describes how to change the position of an existing
-marker. When you do this, be sure you know whether the marker is used
-outside of your program, and, if so, what effects will result from
-moving it---otherwise, confusing things may happen in other parts of
-Emacs.
+marker. When you do this, be sure you know how the marker is used
+outside of your program. For example, moving a marker to an unrelated
+new position can cause undo to later adjust the marker incorrectly.
+Often when you wish to relocate a marker to an unrelated position, it
+is preferable to make a new marker and set the prior one to point
+nowhere.
@defun set-marker marker position &optional buffer
This function moves @var{marker} to @var{position}
and the interface for programmed completion functions.
@end defun
+@defun completion-table-with-cache function &optional ignore-case
+This is a wrapper for @code{completion-table-dynamic} that saves the
+last argument-result pair. This means that multiple lookups with the
+same argument only need to call @var{function} once. This can be useful
+when a slow operation is involved, such as calling an external process.
+@end defun
+
@node Completion in Buffers
@subsection Completion in Ordinary Buffers
@cindex inline completion
It is normally @code{nil}, so that ordinary buffers have no header line.
@end defvar
+The function @code{window-header-line-height} returns the height of
+the header line:
+
+@defun window-header-line-height &optional window
+Return the height of @var{window}'s header line, in pixels.
+@var{window} must be a live window. If @var{window} is @code{nil} or
+omitted, it will be the selected window.
+@end defun
+
A window that is just one line tall never displays a header line. A
window that is two lines tall cannot display both a mode line and a
header line at once; if it has a mode line, then it does not display a
* SMIE Indentation:: Specifying indentation rules.
* SMIE Indentation Helpers:: Helper functions for indentation rules.
* SMIE Indentation Example:: Sample indentation rules.
+* SMIE Customization:: Customizing indentation.
@end menu
@node SMIE setup
first @code{"if"} of the sequence.
@end itemize
+@c In some sense this belongs more in the Emacs manual.
+@node SMIE Customization
+@subsubsection Customizing Indentation
+
+If you are using a mode whose indentation is provided by SMIE, you can
+customize the indentation to suit your preferences. You can do this
+on a per-mode basis (using the option @code{smie-config}), or a
+per-file basis (using the function @code{smie-config-local} in a
+file-local variable specification).
+
+@defopt smie-config
+This option lets you customize indentation on a per-mode basis.
+It is an alist with elements of the form @code{(@var{mode} . @var{rules})}.
+For the precise form of rules, see the variable's documentation; but
+you may find it easier to use the command @code{smie-config-guess}.
+@end defopt
+
+@deffn Command smie-config-guess
+This command tries to work out appropriate settings to produce
+your preferred style of indentation. Simply call the command while
+visiting a file that is indented with your style.
+@end deffn
+
+@deffn Command smie-config-save
+Call this command after using @code{smie-config-guess}, to save your
+settings for future sessions.
+@end deffn
+
+@deffn Command smie-config-show-indent &optional move
+This command displays the rules that are used to indent the current
+line.
+@end deffn
+
+@deffn Command smie-config-set-indent
+This command adds a local rule to adjust the indentation of the current line.
+@end deffn
+
+@defun smie-config-local rules
+This function adds @var{rules} as indentation rules for the current buffer.
+These add to any mode-specific rules defined by the @code{smie-config} option.
+To specify custom indentation rules for a specific file, add an entry
+to the file's local variables of the form:
+@code{eval: (smie-config-local '(@var{rules}))}.
+@end defun
+
+
@node Desktop Save Mode
@section Desktop Save Mode
@cindex desktop save mode
@item
If started on a text terminal, it loads the terminal-specific
-Lisp library, which is specified by the variable
-@code{term-file-prefix} (@pxref{Terminal-Specific}). This is not done
+Lisp library (@pxref{Terminal-Specific}), and runs the hook
+@code{tty-setup-hook}. This is not done
in @code{--batch} mode, nor if @code{term-file-prefix} is @code{nil}.
@c Now command-line calls command-line-1.
@c daemon/session restore step?
@item
-It runs @code{emacs-startup-hook} and then @code{term-setup-hook}.
+It runs @code{emacs-startup-hook}.
@item
It calls @code{frame-notice-user-settings}, which modifies the
@defvar emacs-startup-hook
This normal hook is run, once, just after handling the command line
-arguments, just before @code{term-setup-hook}. In batch mode, Emacs
-does not run either of these hooks.
+arguments. In batch mode, Emacs does not run this hook.
@end defvar
@defvar user-init-file
The usual role of a terminal-specific library is to enable special
keys to send sequences that Emacs can recognize. It may also need to
set or add to @code{input-decode-map} if the Termcap or Terminfo entry
-does not specify all the terminal's function keys. @xref{Terminal
-Input}.
+does not specify all the terminal's function keys. @xref{Terminal Input}.
- When the name of the terminal type contains a hyphen or underscore, and no library
-is found whose name is identical to the terminal's name, Emacs strips
-from the terminal's name the last hyphen or underscore and everything that follows
+ When the name of the terminal type contains a hyphen or underscore,
+and no library is found whose name is identical to the terminal's
+name, Emacs strips from the terminal's name the last hyphen or
+underscore and everything that follows
it, and tries again. This process is repeated until Emacs finds a
matching library, or until there are no more hyphens or underscores in the name
(i.e., there is no terminal-specific library). For example, if the
@file{term/xterm.el}. If necessary, the terminal library can evaluate
@code{(getenv "TERM")} to find the full name of the terminal type.
- Your init file can prevent the loading of the
-terminal-specific library by setting the variable
-@code{term-file-prefix} to @code{nil}. This feature is useful when
-experimenting with your own peculiar customizations.
+ Your init file can prevent the loading of the terminal-specific
+library by setting the variable @code{term-file-prefix} to @code{nil}.
You can also arrange to override some of the actions of the
-terminal-specific library by setting the variable
-@code{term-setup-hook}. This is a normal hook that Emacs runs
-at the end of its initialization, after loading both
-your init file and any terminal-specific libraries. You could
-use this hook to define initializations for terminals that do not
+terminal-specific library by using @code{tty-setup-hook}. This is
+a normal hook that Emacs runs after initializing a new text terminal.
+You could use this hook to define initializations for terminals that do not
have their own libraries. @xref{Hooks}.
@defvar term-file-prefix
On MS-DOS, Emacs sets the @env{TERM} environment variable to @samp{internal}.
@end defvar
-@defvar term-setup-hook
-This variable is a normal hook that Emacs runs after loading your
-init file, the default initialization file (if any) and the
-terminal-specific Lisp file.
-
-You can use @code{term-setup-hook} to override the definitions made by a
-terminal-specific file.
+@defvar tty-setup-hook
+This variable is a normal hook that Emacs runs after initializing a
+new text terminal. (This applies when Emacs starts up in non-windowed
+mode, and when making a tty @command{emacsclient} connection.) The
+hook runs after loading your init file (if applicable) and the
+terminal-specific Lisp file, so you can use it to adjust the
+definitions made by that file.
For a related feature, @pxref{Window Systems, window-setup-hook}.
@end defvar
the current buffer is the one in which you performed the last search.
Then this function edits the buffer, replacing the matched text with
@var{replacement}. It leaves point at the end of the replacement
-text, and returns @code{t}.
+text.
If you performed the last search on a string, pass the same string as
@var{string}. Then this function returns a new string, in which the
@noindent
See also @code{string-bytes}, in @ref{Text Representations}.
-If you need to compute the width of a string on display, you should
-use @code{string-width} (@pxref{Width}), not @code{length}, since
-@code{length} only counts the number of characters, but does not
+If you need to compute the width of a string on display, you should use
+@code{string-width} (@pxref{Size of Displayed Text}), not @code{length},
+since @code{length} only counts the number of characters, but does not
account for the display width of each character.
@defun elt sequence index
by a distinguished character code.
Since strings are arrays, and therefore sequences as well, you can
-operate on them with the general array and sequence functions
-documented in @ref{Sequences Arrays Vectors}. For example, you can
-access or change individual characters in a string using the functions
-@code{aref} and @code{aset} (@pxref{Array Functions}). However, note
-that @code{length} should @emph{not} be used for computing the width
-of a string on display; use @code{string-width} (@pxref{Width})
-instead.
+operate on them with the general array and sequence functions documented
+in @ref{Sequences Arrays Vectors}. For example, you can access or
+change individual characters in a string using the functions @code{aref}
+and @code{aset} (@pxref{Array Functions}). However, note that
+@code{length} should @emph{not} be used for computing the width of a
+string on display; use @code{string-width} (@pxref{Size of Displayed
+Text}) instead.
There are two text representations for non-@acronym{ASCII}
characters in Emacs strings (and in buffers): unibyte and multibyte.
* Registers:: How registers are implemented. Accessing the text or
position stored in a register.
* Transposition:: Swapping two portions of a buffer.
+* Decompression:: Dealing with compressed data.
* Base 64:: Conversion to or from base 64 encoding.
* Checksum/Hash:: Computing cryptographic hashes.
* Parsing HTML/XML:: Parsing HTML and XML.
@defopt left-margin
This variable specifies the base left margin column. In Fundamental
-mode, @kbd{C-j} indents to this column. This variable automatically
+mode, @kbd{RET} indents to this column. This variable automatically
becomes buffer-local when set in any fashion.
@end defopt
This section describes the primitive functions used to count and
insert indentation. The functions in the following sections use these
-primitives. @xref{Width}, for related functions.
+primitives. @xref{Size of Displayed Text}, for related functions.
@defun current-indentation
@comment !!Type Primitive Function
all markers unrelocated.
@end defun
+@node Decompression
+@section Dealing With Compressed Data
+
+When @code{auto-compression-mode} is enabled, Emacs automatically
+uncompresses compressed files when you visit them, and automatically
+recompresses them if you alter and save them. @xref{Compressed
+Files,,, emacs, The GNU Emacs Manual}.
+
+The above feature works by calling an external executable (e.g.,
+@command{gzip}). Emacs can also be compiled with support for built-in
+decompression using the zlib library, which is faster than calling an
+external program.
+
+@defun zlib-available-p
+This function returns non-@code{nil} if built-in zlib decompression is
+available.
+@end defun
+
+@defun zlib-decompress-region start end
+This function decompresses the region between @var{start} and
+@var{end}, using built-in zlib decompression. The region should
+contain data that were compressed with gzip or zlib. On success, the
+function replaces the contents of the region with the decompressed
+data. On failure, the function leaves the region unchanged and
+returns @code{nil}. This function can be called only in unibyte
+buffers.
+@end defun
+
+
@node Base 64
@section Base 64 Encoding
@cindex base 64 encoding
Each window belongs to exactly one frame (@pxref{Frames}).
-@defun window-frame window
+@defun window-frame &optional window
This function returns the frame that the window @var{window} belongs
to. If @var{window} is @code{nil}, it defaults to the selected
window.
The following functions can be used to retrieve a child window of an
internal window, and the siblings of a child window.
-@defun window-top-child window
+@defun window-top-child &optional window
This function returns the topmost child window of @var{window}, if
@var{window} is an internal window whose children form a vertical
combination. For any other type of window, the return value is
@code{nil}.
@end defun
-@defun window-left-child window
+@defun window-left-child &optional window
This function returns the leftmost child window of @var{window}, if
@var{window} is an internal window whose children form a horizontal
combination. For any other type of window, the return value is
@end defun
@cindex window in direction
-@defun window-in-direction direction &optional window ignore
+@defun window-in-direction direction &optional window ignore sign wrap mini
This function returns the nearest live window in direction
@var{direction} as seen from the position of @code{window-point} in
window @var{window}. The argument @var{direction} must be one of
argument @var{ignore} is non-@code{nil}, a window may be returned even
if its @code{no-other-window} parameter is non-@code{nil}.
+If the optional argument @var{sign} is a negative number, it means to
+use the right or bottom edge of @var{window} as reference position
+instead of @code{window-point}. If @var{sign} is a positive number, it
+means to use the left or top edge of @var{window} as reference position.
+
+If the optional argument @var{wrap} is non-@code{nil}, this means to
+wrap @var{direction} around frame borders. For example, if @var{window}
+is at the top of the frame and @var{direction} is @code{above}, then
+return the minibuffer window provided the frame has one, and a window at
+the bottom of the frame otherwise.
+
+If the optional argument @var{mini} is @code{nil}, this means to return
+the minibuffer window if and only if it is currently active. If
+@var{mini} is non-@code{nil}, it returns the minibuffer window even when
+it's not active. However, if @var{wrap} non-@code{nil}, it always acts
+as if @var{mini} were @code{nil}.
+
If it doesn't find a suitable window, this function returns @code{nil}.
@end defun
@code{window-edges} (@pxref{Coordinates and Windows}).
@end defun
+
@node Window Sizes
@section Window Sizes
@cindex window size
@smallexample
@group
- _________________________________________
- ^ |______________ Header Line_______________|
- | |LS|LF|LM| |RM|RF|RS| ^
- | | | | | | | | | |
- Window | | | | Text Area | | | | Window
- Total | | | | (Window Body) | | | | Body
- Height | | | | | | | | Height
- | | | | |<- Window Body Width ->| | | | |
- | |__|__|__|_______________________|__|__|__| v
- v |_______________ Mode Line _______________|
-
- <----------- Window Total Width -------->
+ ____________________________________________
+ |______________ Header Line ______________|RD| ^
+ ^ |LS|LF|LM| |RM|RF|RS| | |
+ | | | | | | | | | | |
+Window | | | | Text Area | | | | | Window
+Body | | | | | (Window Body) | | | | | Total
+Height | | | | | | | | | Height
+ | | | | |<- Window Body Width ->| | | | | |
+ v |__|__|__|_______________________|__|__|__| | |
+ |_______________ Mode Line _______________|__| |
+ |_____________ Bottom Divider _______________| v
+ <---------- Window Total Width ------------>
@end group
@end smallexample
@cindex text area of a window
@cindex body of a window
At the center of the window is the @dfn{text area}, or @dfn{body},
-where the buffer text is displayed. On each side of the text area is
-a series of vertical areas; from innermost to outermost, these are the
-left and right margins, denoted by LM and RM in the schematic
-(@pxref{Display Margins}); the left and right fringes, denoted by LF
-and RF (@pxref{Fringes}); and the left or right scroll bar, only one of
-which is present at any time, denoted by LS and RS (@pxref{Scroll
-Bars}). At the top of the window is an optional header line
-(@pxref{Header Lines}), and at the bottom of the window is the mode
-line (@pxref{Mode Line Format}).
-
- Emacs provides several functions for finding the height and width of
-a window. Except where noted, Emacs reports window heights and widths
-as integer numbers of lines and columns, respectively. On a graphical
-display, each ``line'' and ``column'' actually corresponds to the
-height and width of a ``default'' character specified by the frame's
-default font. Thus, if a window is displaying text with a different
-font or size, the reported height and width for that window may differ
-from the actual number of text lines or columns displayed within it.
+where the buffer text is displayed. The text area can be surrounded by
+a series of optional areas. On the left and right, from innermost to
+outermost, these are the left and right margins, denoted by LM and RM in
+the schematic (@pxref{Display Margins}); the left and right fringes,
+denoted by LF and RF (@pxref{Fringes}); the left or right scroll bar,
+only one of which is present at any time, denoted by LS and RS
+(@pxref{Scroll Bars}); and the right divider, denoted by RD
+(@pxref{Window Dividers}). At the top of the window is the header line
+(@pxref{Header Lines}); at the bottom of the window is the mode line
+(@pxref{Mode Line Format}) followed by the bottom divider (@pxref{Window
+Dividers}).
+
+ Emacs provides miscellaneous functions for finding the height and
+width of a window. The return value of many of these functions can be
+specified either in units of pixels or in units of lines and columns.
+On a graphical display, the latter actually correspond to the height and
+width of a ``default'' character specified by the frame's default font
+as returned by @code{frame-char-height} and @code{frame-char-width}
+(@pxref{Size and Position}). Thus, if a window is displaying text with
+a different font or size, the reported line height and column width for
+that window may differ from the actual number of text lines or columns
+displayed within it.
@cindex window height
@cindex height of a window
@cindex total height of a window
+ The @dfn{total height} of a window is the number of lines comprising
+the window's body, the header line, the mode line and the bottom divider
+(if any). Note that the height of a frame is not the same as the height
+of its root window (@pxref{Windows and Frames}), since a frame may also
+contain an echo area, a menu bar, and a tool bar (@pxref{Size and
+Position}).
+
+@defun window-total-height &optional window round
+This function returns the total height, in lines, of the window
+@var{window}. If @var{window} is omitted or @code{nil}, it defaults to
+the selected window. If @var{window} is an internal window, the return
+value is the total height occupied by its descendant windows.
+
+ If a window's pixel height is not an integral multiple of its frame's
+default character height, the number of lines occupied by the window is
+rounded internally. This is done in a way such that, if the window is a
+parent window, the sum of the total heights of all its child windows
+internally equals the total height of their parent. This means that
+although two windows have the same pixel height, their internal total
+heights may differ by one line. This means also, that if this window is
+vertically combined and has a right sibling, the topmost row of that
+sibling can be calculated as the sum of this window's topmost row and
+total height (@pxref{Coordinates and Windows})
+
+ If the optional argument @var{round} equals @code{ceiling}, this
+function returns the smallest integer larger than @var{window}'s pixel
+height divided by the character height of @var{window}'s frame; if it is
+@code{floor}, it returns the largest integer smaller than @var{window}'s
+pixel height divided by the character height of @var{window}'s frame.
+Any other value of @var{round} means to return the internal value of the
+total height of @var{window}.
+@end defun
+
@cindex window width
@cindex width of a window
@cindex total width of a window
- The @dfn{total height} of a window is the distance between the top
-and bottom of the window, including the header line (if one exists)
-and the mode line. The @dfn{total width} of a window is the distance
-between the left and right edges of the mode line. Note that the
-height of a frame is not the same as the height of its windows, since
-a frame may also contain an echo area, menu bar, and tool bar
-(@pxref{Size and Position}).
-
-@defun window-total-height &optional window
-This function returns the total height, in lines, of the window
-@var{window}. If @var{window} is omitted or @code{nil}, it defaults
-to the selected window. If @var{window} is an internal window, the
-return value is the total height occupied by its descendant windows.
-@end defun
+The @dfn{total width} of a window is the number of lines comprising the
+window's body, its margins, fringes, scroll bars and a right divider (if
+any).
-@defun window-total-width &optional window
+@defun window-total-width &optional window round
This function returns the total width, in columns, of the window
-@var{window}. If @var{window} is omitted or @code{nil}, it defaults
-to the selected window. If @var{window} is internal, the return value
-is the total width occupied by its descendant windows.
+@var{window}. If @var{window} is omitted or @code{nil}, it defaults to
+the selected window. If @var{window} is internal, the return value is
+the total width occupied by its descendant windows.
+
+ If a window's pixel width is not an integral multiple of its frame's
+character width, the number of lines occupied by the window is rounded
+internally. This is done in a way such that, if the window is a parent
+window, the sum of the total widths of all its children internally
+equals the total width of their parent. This means that although two
+windows have the same pixel width, their internal total widths may
+differ by one column. This means also, that if this window is
+horizontally combined and has a right sibling, the leftmost column of
+that sibling can be calculated as the sum of this window's leftmost
+column and total width (@pxref{Coordinates and Windows}).
+
+If the optional argument @var{round} is @code{ceiling}, this function
+will return the smallest integer larger than @var{window}'s pixel width
+divided by the character width of @var{window}'s frame; if it is
+@code{floor}, it returns the largest integer smaller than @var{window}'s
+pixel width divided by the character width of @var{window}'s frame. Any
+other value of @var{round} means to return the internal total width of
+@var{window}.
@end defun
-@defun window-total-size &optional window horizontal
-This function returns either the total height or width of the window
-@var{window}. If @var{horizontal} is omitted or @code{nil}, this is
-equivalent to calling @code{window-total-height} for @var{window};
-otherwise it is equivalent to calling @code{window-total-width} for
-@var{window}.
+@defun window-total-size &optional window horizontal round
+This function returns either the total height in lines or the total
+width in columns of the window @var{window}. If @var{horizontal} is
+omitted or @code{nil}, this is equivalent to calling
+@code{window-total-height} for @var{window}; otherwise it is equivalent
+to calling @code{window-total-width} for @var{window}. The optional
+argument @code{ROUND} is handled as for @code{window-total-height} and
+@code{window-total-width}.
+@end defun
+
+The following two functions can be used to return the total size of a
+window in units of pixels.
+
+@cindex window pixel height
+@cindex pixel height of a window
+@cindex total pixel height of a window
+
+@defun window-pixel-height &optional window
+This function returns the total height of window @var{window} in pixels.
+@var{window} must be a valid window and defaults to the selected one.
+
+The return value includes mode and header line and a bottom divider, if
+any. If @var{window} is an internal window, its pixel height is the
+pixel height of the screen areas spanned by its children.
+@end defun
+
+@cindex window pixel height
+@cindex pixel height of a window
+@cindex total pixel height of a window
+
+@defun window-pixel-width &optional Lisp_Object &optional window
+This function returns the width of window @var{window} in pixels.
+@var{window} must be a valid window and defaults to the selected one.
+
+The return value includes the fringes and margins of @var{window} as
+well as any vertical dividers or scroll bars belonging to @var{window}.
+If @var{window} is an internal window, its pixel width is the width of
+the screen areas spanned by its children.
@end defun
@cindex full-width window
@cindex window body height
@cindex body height of a window
@cindex window body width
+The @dfn{body height} of a window is the height of its text area, which
+does not include a mode or header line or a bottom divider.
+
+@defun window-body-height &optional window pixelwise
+This function returns the height, in lines, of the body of window
+@var{window}. If @var{window} is omitted or @code{nil}, it defaults to
+the selected window; otherwise it must be a live window.
+
+If the optional argument @var{pixelwise} is non-@code{nil}, this
+function returns the body height of @var{window} counted in pixels.
+
+If @var{pixelwise} is @code{nil}, the return value is rounded down to
+the nearest integer, if necessary. This means that if a line at the
+bottom of the text area is only partially visible, that line is not
+counted. It also means that the height of a window's body can never
+exceed its total height as returned by @code{window-total-height}.
+@end defun
+
@cindex body width of a window
@cindex body size of a window
@cindex window body size
- The @dfn{body height} of a window is the height of its text area,
-which does not include the mode or header line. Similarly, the
-@dfn{body width} is the width of the text area, which does not include
-the scroll bar, fringes, or margins.
+The @dfn{body width} of a window is the width of its text area, which
+does not include the scroll bar, fringes, margins or a right divider.
-@defun window-body-height &optional window
-This function returns the body height, in lines, of the window
-@var{window}. If @var{window} is omitted or @code{nil}, it defaults
-to the selected window; otherwise it must be a live window.
+@defun window-body-width &optional window pixelwise
+This function returns the width, in columns, of the body of window
+@var{window}. If @var{window} is omitted or @code{nil}, it defaults to
+the selected window; otherwise it must be a live window.
-If there is a partially-visible line at the bottom of the text area,
-that counts as a whole line; to exclude such a partially-visible line,
-use @code{window-text-height}, below.
-@end defun
+If the optional argument @var{pixelwise} is non-@code{nil}, this
+function returns the body width of @var{window} in units of pixels.
-@defun window-body-width &optional window
-This function returns the body width, in columns, of the window
-@var{window}. If @var{window} is omitted or @code{nil}, it defaults
-to the selected window; otherwise it must be a live window.
+If @var{pixelwise} is @code{nil}, the return value is rounded down to
+the nearest integer, if necessary. This means that if a column on the
+right of the text area is only partially visible, that column is not
+counted. It also means that the width of a window's body can never
+exceed its total width as returned by @code{window-total-width}.
@end defun
-@defun window-body-size &optional window horizontal
-This function returns the body height or body width of @var{window}.
-If @var{horizontal} is omitted or @code{nil}, it is equivalent to
-calling @code{window-body-height} for @var{window}; otherwise it is
-equivalent to calling @code{window-body-width}.
-@end defun
-
-@defun window-text-height &optional window
-This function is like @code{window-body-height}, except that any
-partially-visible line at the bottom of the text area is not counted.
+@defun window-body-size &optional window horizontal pixelwise
+This function returns the body height or body width of @var{window}. If
+@var{horizontal} is omitted or @code{nil}, it is equivalent to calling
+@code{window-body-height} for @var{window}; otherwise it is equivalent
+to calling @code{window-body-width}. In either case, the optional
+argument @var{pixelwise} is passed to the function called.
@end defun
For compatibility with previous versions of Emacs,
@code{window-width} is an alias for @code{window-body-width}. These
aliases are considered obsolete and will be removed in the future.
+ The pixel heights of a window's mode and header line can be retrieved
+with the functions given below. Their return value is usually accurate
+unless the window has not been displayed before: In that case, the
+return value is based on an estimate of the font used for the window's
+frame.
+
+@defun window-mode-line-height &optional window
+This function returns the height in pixels of @var{window}'s mode line.
+@var{window} must be a live window and defaults to the selected one. If
+@var{window} has no mode line, the return value is zero.
+@end defun
+
+@defun window-header-line-height &optional window
+This function returns the height in pixels of @var{window}'s header
+line. @var{window} must be a live window and defaults to the selected
+one. If @var{window} has no header line, the return value is zero.
+@end defun
+
+Functions for retrieving the height and/or width of window dividers
+(@pxref{Window Dividers}), fringes (@pxref{Fringes}), scroll bars
+(@pxref{Scroll Bars}), and display margins (@pxref{Display Margins}) are
+described in the corresponding sections.
+
@cindex fixed-size window
@vindex window-min-height
@vindex window-min-width
Commands that change the size of windows (@pxref{Resizing Windows}),
or split them (@pxref{Splitting Windows}), obey the variables
-@code{window-min-height} and @code{window-min-width}, which specify
-the smallest allowable window height and width. @xref{Change
-Window,,Deleting and Rearranging Windows, emacs, The GNU Emacs
-Manual}. They also obey the variable @code{window-size-fixed}, with
-which a window can be @dfn{fixed} in size:
+@code{window-min-height} and @code{window-min-width}, which specify the
+smallest allowable window height and width. They also obey the variable
+@code{window-size-fixed}, with which a window can be @dfn{fixed} in
+size:
+
+@defopt window-min-height
+This option specifies the minimum total height, in lines, of any window.
+Its value has to accommodate at least one text line as well as a mode
+and header line and a bottom divider, if present.
+@end defopt
+
+@defopt window-min-width
+This option specifies the minimum total width, in columns, of any
+window. Its value has to accommodate two text columns as well as
+margins, fringes, a scroll bar and a right divider, if present.
+@end defopt
@defvar window-size-fixed
If this buffer-local variable is non-@code{nil}, the size of any
If the value is @code{height}, then only the window's height is fixed;
if the value is @code{width}, then only the window's width is fixed.
Any other non-@code{nil} value fixes both the width and the height.
-@end defvar
-@defun window-size-fixed-p &optional window horizontal
-This function returns a non-@code{nil} value if @var{window}'s height
-is fixed. If @var{window} is omitted or @code{nil}, it defaults to
-the selected window. If the optional argument @var{horizontal} is
-non-@code{nil}, the return value is non-@code{nil} if @var{window}'s
-width is fixed.
+If this variable is @code{nil}, this does not necessarily mean that any
+window showing the buffer can be resized in the desired direction. To
+determine that, use the function @code{window-resizable}.
+@xref{Resizing Windows}.
+@end defvar
-A @code{nil} return value does not necessarily mean that @var{window}
-can be resized in the desired direction. To determine that, use the
-function @code{window-resizable}. @xref{Resizing Windows}.
+The following function tells how small a specific window can get taking
+into account the sizes of its areas and the values of
+@code{window-min-height}, @code{window-min-width} and
+@code{window-size-fixed}.
+
+@defun window-min-size &optional window horizontal ignore pixelwise
+This function returns the minimum size of @var{window}. @var{window}
+must be a valid window and defaults to the selected one. The optional
+argument @var{horizontal} non-@code{nil} means to return the minimum
+number of columns of @var{window}; otherwise return the minimum number
+of @var{window}'s lines.
+
+The return value makes sure that all components of @var{window} remain
+fully visible if @var{window}'s size were actually set to it. With
+@var{horizontal} @code{nil} it includes the mode and header line and the
+bottom divider. With @var{horizontal} non-@code{nil} it includes the
+fringes, a scroll bar, and a right divider, if present. It does not,
+however, include the space reserved for the margins.
+
+The optional argument @var{ignore}, if non-@code{nil}, means ignore
+restrictions imposed by fixed size windows, @code{window-min-height} or
+@code{window-min-width} settings. If @var{ignore} equals @code{safe},
+live windows may get as small as @code{window-safe-min-height} lines and
+@code{window-safe-min-width} columns. If @var{ignore} is a window,
+ignore restrictions for that window only. Any other non-@code{nil}
+value means ignore all of the above restrictions for all windows.
+
+The optional argument @var{pixelwise} non-@code{nil} means to return the
+minimum size of @var{window} counted in pixels.
@end defun
- @xref{Coordinates and Windows}, for more functions that report the
-positions of various parts of a window relative to the frame, from
-which you can calculate its size. In particular, you can use the
-functions @code{window-pixel-edges} and
-@code{window-inside-pixel-edges} to find the size in pixels, for
-graphical displays.
-
@node Resizing Windows
@section Resizing Windows
@cindex window resizing
arguments. Resizing an internal window causes its child windows to be
resized to fit the same space.
-@defun window-resizable window delta &optional horizontal ignore
+@defun window-resizable window delta &optional horizontal ignore pixelwise
This function returns @var{delta} if the size of @var{window} can be
changed vertically by @var{delta} lines. If the optional argument
@var{horizontal} is non-@code{nil}, it instead returns @var{delta} if
that the window cannot be resized.
Normally, the variables @code{window-min-height} and
-@code{window-min-width} specify the smallest allowable window size.
-@xref{Change Window,, Deleting and Rearranging Windows, emacs, The GNU
-Emacs Manual}. However, if the optional argument @var{ignore} is
-non-@code{nil}, this function ignores @code{window-min-height} and
-@code{window-min-width}, as well as @code{window-size-fixed}.
-Instead, it considers the minimum-height window to be one consisting
-of a header (if any), a mode line, plus a text area one line tall; and
-a minimum-width window as one consisting of fringes, margins, and
-scroll bar (if any), plus a text area two columns wide.
-@end defun
-
-@defun window-resize window delta &optional horizontal ignore
+@code{window-min-width} specify the smallest allowable window size
+(@pxref{Window Sizes}). However, if the optional argument @var{ignore}
+is non-@code{nil}, this function ignores @code{window-min-height} and
+@code{window-min-width}, as well as @code{window-size-fixed}. Instead,
+it considers the minimum-height window to be one consisting of a header,
+a mode line and a bottom divider (if any), plus a text area one line
+tall; and a minimum-width window as one consisting of fringes, margins,
+a scroll bar and a right divider (if any), plus a text area two columns
+wide.
+
+If the optional argument @code{pixelwise} is non-@code{nil},
+@var{delta} will be interpreted as pixels.
+@end defun
+
+@defun window-resize window delta &optional horizontal ignore pixelwise
This function resizes @var{window} by @var{delta} increments. If
@var{horizontal} is @code{nil}, it changes the height by @var{delta}
lines; otherwise, it changes the width by @var{delta} columns. A
The optional argument @var{ignore} has the same meaning as for the
function @code{window-resizable} above.
+If the optional argument @var{pixelwise} is non-@code{nil},
+@var{delta} will be interpreted as pixels.
+
The choice of which window edges this function alters depends on the
values of the option @code{window-combination-resize} and the
combination limits of the involved windows; in some cases, it may alter
@c shrink-window, and shrink-window-horizontally are documented in the
@c Emacs manual. They are not preferred for calling from Lisp.
-@defun adjust-window-trailing-edge window delta &optional horizontal
+@defun adjust-window-trailing-edge window delta &optional horizontal pixelwise
This function moves @var{window}'s bottom edge by @var{delta} lines.
If optional argument @var{horizontal} is non-@code{nil}, it instead
moves the right edge by @var{delta} columns. If @var{window} is
@code{nil}, it defaults to the selected window.
+If the optional argument @code{pixelwise} is non-@code{nil},
+@var{delta} will be interpreted as pixels.
+
A positive @var{delta} moves the edge downwards or to the right; a
negative @var{delta} moves it upwards or to the left. If the edge
cannot be moved as far as specified by @var{delta}, this function
window is fixed-size), it may resize other windows.
@end defun
+@cindex pixelwise, resizing windows
+@defopt window-resize-pixelwise
+If the value of this option is non-@code{nil}, windows are resized in
+units of pixels. This currently affects functions like
+@code{split-window} (@pxref{Splitting Windows}), @code{maximize-window},
+@code{minimize-window}, @code{fit-window-to-buffer},
+@code{shrink-window-if-larger-than-buffer} (all listed below) and
+@code{fit-frame-to-buffer} (@pxref{Size and Position}).
+
+Note that when a frame's pixel size is not a multiple of the frame's
+character size, at least one window may get resized pixelwise even if
+this option is @code{nil}. The default value of this option is
+@code{nil}.
+@end defopt
+
The following commands resize windows in more specific ways. When
called interactively, they act on the selected window.
-@deffn Command fit-window-to-buffer &optional window max-height min-height override
-This command adjusts the height of @var{window} to fit the text in it.
-It returns non-@code{nil} if it was able to resize @var{window}, and
-@code{nil} otherwise. If @var{window} is omitted or @code{nil}, it
-defaults to the selected window. Otherwise, it should be a live
-window.
+@deffn Command fit-window-to-buffer &optional window max-height min-height max-width min-width
+This command adjusts the height or width of @var{window} to fit the text
+in it. It returns non-@code{nil} if it was able to resize @var{window},
+and @code{nil} otherwise. If @var{window} is omitted or @code{nil}, it
+defaults to the selected window. Otherwise, it should be a live window.
+
+If @var{window} is part of a vertical combination, this function adjusts
+@var{window}'s height. The new height is calculated from the actual
+height of the accessible portion of its buffer. The optional argument
+@var{max-height}, if non-@code{nil}, specifies the maximum total height
+that this function can give @var{window}. The optional argument
+@var{min-height}, if non-@code{nil}, specifies the minimum total height
+that it can give, which overrides the variable @code{window-min-height}.
+Both @var{max-height} and @var{min-height} are specified in lines and
+include mode and header line and a bottom divider, if any.
+
+If @var{window} is part of a horizontal combination and the value of the
+option @code{fit-window-to-buffer-horizontally} (see below) is
+non-@code{nil}, this function adjusts @var{window}'s height. The new
+width of @var{window} is calculated from the maximum length of its
+buffer's lines that follow the current start position of @var{window}.
+The optional argument @var{max-width} specifies a maximum width and
+defaults to the width of @var{window}'s frame. The optional argument
+@var{min-width} specifies a minimum width and defaults to
+@code{window-min-width}. Both @var{max-width} and @var{min-width} are
+specified in columns and include fringes, margins and scrollbars, if
+any.
-The optional argument @var{max-height}, if non-@code{nil}, specifies
-the maximum total height that this function can give @var{window}.
-The optional argument @var{min-height}, if non-@code{nil}, specifies
-the minimum total height that it can give, which overrides the
-variable @code{window-min-height}.
+If the option @code{fit-frame-to-buffer} (see below) is non-@code{nil},
+this function will try to resize the frame of @var{window} to fit its
+contents by calling @code{fit-frame-to-buffer} (@pxref{Size and
+Position}).
+@end deffn
-If the optional argument @var{override} is non-@code{nil}, this
-function ignores any size restrictions imposed by
-@code{window-min-height} and @code{window-min-width}.
+@defopt fit-window-to-buffer-horizontally
+If this is non-@code{nil}, @code{fit-window-to-buffer} can resize
+windows horizontally. If this is @code{nil} (the default)
+@code{fit-window-to-buffer} never resizes windows horizontally. If this
+is @code{only}, it can resize windows horizontally only. Any other
+value means @code{fit-window-to-buffer} can resize windows in both
+dimensions.
+@end defopt
-@vindex fit-frame-to-buffer
-If the option @code{fit-frame-to-buffer} is non-@code{nil}, this
-command may resize the frame to fit its contents.
-@end deffn
+@defopt fit-frame-to-buffer
+If this option is non-@code{nil}, @code{fit-window-to-buffer} can fit a
+frame to its buffer. A frame is fit if and only if its root window is a
+live window and this option is non-@code{nil}. If this is
+@code{horizontally}, frames are fit horizontally only. If this is
+@code{vertically}, frames are fit vertically only. Any other
+non-@code{nil} value means frames can be resized in both dimensions.
+@end defopt
@deffn Command shrink-window-if-larger-than-buffer &optional window
This command attempts to reduce @var{window}'s height as much as
This command does nothing if the window is already too short to
display all of its buffer, or if any of the buffer is scrolled
off-screen, or if the window is the only live window in its frame.
+
+This command calls @code{fit-window-to-buffer} (see above) to do its
+work.
@end deffn
+
@cindex balancing window sizes
@deffn Command balance-windows &optional window-or-frame
This function balances windows in a way that gives more space to
This section describes functions for creating a new window by
@dfn{splitting} an existing one.
-@defun split-window &optional window size side
+@defun split-window &optional window size side pixelwise
This function creates a new live window next to the window
@var{window}. If @var{window} is omitted or @code{nil}, it defaults
to the selected window. That window is ``split'', and reduced in
window is given @minus{}@var{size} lines (or columns).
If @var{size} is @code{nil}, this function obeys the variables
-@code{window-min-height} and @code{window-min-width}. @xref{Change
-Window,,Deleting and Rearranging Windows, emacs, The GNU Emacs
-Manual}. Thus, it signals an error if splitting would result in
-making a window smaller than those variables specify. However, a
+@code{window-min-height} and @code{window-min-width} (@pxref{Window
+Sizes}). Thus, it signals an error if splitting would result in making
+a window smaller than those variables specify. However, a
non-@code{nil} value for @var{size} causes those variables to be
-ignored; in that case, the smallest allowable window is considered to
-be one that has space for a text area one line tall and/or two columns
+ignored; in that case, the smallest allowable window is considered to be
+one that has space for a text area one line tall and/or two columns
wide.
+Hence, if @var{size} is specified, it's the caller's responsibility to
+check whether the emanating windows are large enough to encompass all
+areas like a mode line or a scroll bar. The function
+@code{window-min-size} (@pxref{Window Sizes}) can be used to determine
+the minimum requirements of @var{window} in this regard. Since the new
+window usually ``inherits'' areas like the mode line or the scroll bar
+from @var{window}, that function is also a good guess for the minimum
+size of the new window. The caller should specify a smaller size only
+if it correspondingly removes an inherited area before the next
+redisplay.
+
The optional third argument @var{side} determines the position of the
new window relative to @var{window}. If it is @code{nil} or
@code{below}, the new window is placed below @var{window}. If it is
window is placed on the left of @var{window}. In both these cases,
@var{size} specifies a total window width, in columns.
+The optional fourth argument @var{pixelwise}, if non-@code{nil}, means
+to interpret @var{size} in units of pixels, instead of lines and
+columns.
+
If @var{window} is a live window, the new window inherits various
properties from it, including margins and scroll bars. If
@var{window} is an internal window, the new window inherits the
@defun select-window window &optional norecord
This function makes @var{window} the selected window and the window
selected within its frame (@pxref{Basic Windows}) and selects that
-frame. @var{window} must be a live window. This function also makes
-@var{window}'s buffer (@pxref{Buffers and Windows}) current and sets
-that buffer's value of @code{point} to the value of @code{window-point}
-(@pxref{Window Point}) in @var{window}. The return value is
-@var{window}.
+frame. It also makes @var{window}'s buffer (@pxref{Buffers and
+Windows}) current and sets that buffer's value of @code{point} to the
+value of @code{window-point} (@pxref{Window Point}) in @var{window}.
+@var{window} must be a live window. The return value is @var{window}.
By default, this function also moves @var{window}'s buffer to the front
-of the buffer list (@pxref{The Buffer List}), and makes @var{window} the
+of the buffer list (@pxref{Buffer List}), and makes @var{window} the
most recently selected window. However, if the optional argument
@var{norecord} is non-@code{nil}, these additional actions are omitted.
+
+This function runs @code{buffer-list-update-hook} (@pxref{Buffer List})
+unless @var{norecord} is non-@code{nil}. Note that applications and
+internal routines often temporarily select a window in order to simplify
+coding. As a rule, such selections (including those made by the macros
+@code{save-selected-window} and @code{with-selected-window} below) are
+not recorded thus avoiding to pollute @code{buffer-list-update-hook}.
+Selections that ``really count'' are those causing a visible change in
+the next redisplay of @var{window}'s frame and should be always
+recorded. This also means that to run a function each time a window
+gets selected, putting it on @code{buffer-list-update-hook} should be
+the right choice.
@end defun
@cindex most recently selected windows
return value is the buffer switched to.
If @var{buffer-or-name} is @code{nil}, it defaults to the buffer
-returned by @code{other-buffer} (@pxref{The Buffer List}). If
+returned by @code{other-buffer} (@pxref{Buffer List}). If
@var{buffer-or-name} is a string that is not the name of any existing
buffer, this function creates a new buffer with that name; the new
buffer's major mode is determined by the variable @code{major-mode}
Normally, the specified buffer is put at the front of the buffer
list---both the global buffer list and the selected frame's buffer
-list (@pxref{The Buffer List}). However, this is not done if the
+list (@pxref{Buffer List}). However, this is not done if the
optional argument @var{norecord} is non-@code{nil}.
Sometimes, @code{switch-to-buffer} may be unable to display the buffer
was switched to.
If @var{buffer-or-name} is @code{nil}, it defaults to the buffer
-returned by @code{other-buffer} (@pxref{The Buffer List}). If
+returned by @code{other-buffer} (@pxref{Buffer List}). If
@var{buffer-or-name} is a string that is not the name of any existing
buffer, this function creates a new buffer with that name; the new
buffer's major mode is determined by the variable @code{major-mode}
methods above, even if that window never showed @var{buffer} before.
@end defun
+@defun display-buffer-at-bottom buffer alist
+This function tries to display @var{buffer} in a window at the bottom
+of the selected frame.
+
+This either splits the window at the bottom of the frame or the
+frame's root window, or reuses an existing window at the bottom of the
+selected frame.
+@end defun
+
@defun display-buffer-use-some-window buffer alist
This function tries to display @var{buffer} by choosing an existing
window and displaying the buffer in that window. It can fail if all
If repeated invocations of this command have already shown all buffers
previously shown in @var{window}, further invocations will show buffers
-from the buffer list of the frame @var{window} appears on (@pxref{The
-Buffer List}), trying to skip buffers that are already shown in another
-window on that frame.
+from the buffer list of the frame @var{window} appears on (@pxref{Buffer
+List}), trying to skip buffers that are already shown in another window
+on that frame.
@end deffn
@deffn Command switch-to-next-buffer &optional window
If there is no recent invocation of @code{switch-to-prev-buffer} that
can be undone, this function tries to show a buffer from the buffer list
-of the frame @var{window} appears on (@pxref{The Buffer List}).
+of the frame @var{window} appears on (@pxref{Buffer List}).
@end deffn
By default @code{switch-to-prev-buffer} and @code{switch-to-next-buffer}
behaves like @code{delete-windows-on} otherwise.
@c FIXME: Does replace-buffer-in-windows _delete_ a window in case (1)?
- When @code{bury-buffer} (@pxref{The Buffer List}) operates on the
+ When @code{bury-buffer} (@pxref{Buffer List}) operates on the
selected window (which shows the buffer that shall be buried), it
handles case (2) by calling @code{frame-auto-hide-function}
(@pxref{Quitting Windows}) to deal with the selected frame. The other
hand, a window has been reused for displaying the buffer, you might
prefer showing the buffer previously shown in that window, by calling the
function @code{switch-to-prev-buffer} (@pxref{Window History}).
-Finally, you might want to either bury (@pxref{The Buffer List}) or kill
+Finally, you might want to either bury (@pxref{Buffer List}) or kill
(@pxref{Killing Buffers}) the window's buffer.
The following command uses information on how the window for
The function specified by this option is called to automatically hide
frames. This function is called with one argument---a frame.
-The function specified here is called by @code{bury-buffer} (@pxref{The
-Buffer List}) when the selected window is dedicated and shows the buffer
-to bury. It is also called by @code{quit-restore-window} (see above)
-when the frame of the window to quit has been specially created for
-displaying that window's buffer and the buffer is not killed.
+The function specified here is called by @code{bury-buffer}
+(@pxref{Buffer List}) when the selected window is dedicated and shows
+the buffer to bury. It is also called by @code{quit-restore-window}
+(see above) when the frame of the window to quit has been specially
+created for displaying that window's buffer and the buffer is not
+killed.
The default is to call @code{iconify-frame} (@pxref{Visibility of
Frames}). Alternatively, you may specify either @code{delete-frame}
right of the rightmost column, and the Y coordinate one row down from
the bottommost row.
-Note that these are the actual outer edges of the window, including
-any header line, mode line, scroll bar, fringes, and display margins.
-On a text terminal, if the window has a neighbor on its right, its
-right edge includes the separator line between the window and its
+Note that these are the actual outer edges of the window, including any
+header line, mode line, scroll bar, fringes, window divider and display
+margins. On a text terminal, if the window has a neighbor on its right,
+its right edge includes the separator line between the window and its
neighbor.
@end defun
@defun window-inside-edges &optional window
This function is similar to @code{window-edges}, but the returned edge
values are for the text area of the window. They exclude any header
-line, mode line, scroll bar, fringes, display margins, and vertical
-separator.
+line, mode line, scroll bar, fringes, window divider, display margins,
+and vertical separator.
@end defun
@defun window-top-line &optional window
@item header-line
The coordinates are in the header line of @var{window}.
+@item right-divider
+The coordinates are in the divider separating @var{window} from a
+window on the right.
+
+@item right-divider
+The coordinates are in the divider separating @var{window} from a
+window beneath.
+
@item vertical-line
The coordinates are in the vertical line between @var{window} and its
neighbor to the right. This value occurs only if the window doesn't
the display screen. @var{window} must specify a live window.
@end defun
+@defun window-pixel-left &optional window
+This function returns the left pixel edge of window @var{window}.
+@var{window} must be a valid window and defaults to the selected one.
+@end defun
+
+@defun window-pixel-top &optional window
+This function returns the top pixel edge of window @var{window}.
+@var{window} must be a valid window and defaults to the selected one.
+@end defun
+
+
@node Window Configurations
@section Window Configurations
@cindex window configurations
(@code{set-window-configuration} effectively clones the windows of a
frame into the root window of that very frame only).
+@cindex window state
@defun window-state-get &optional window writable
This function returns the state of @var{window} as a Lisp object. The
argument @var{window} must be a valid window and defaults to the root
the following function to restore the state of the window.
@defun window-state-put state &optional window ignore
-This function puts the window state @var{state} into @var{window}. The
-argument @var{state} should be the state of a window returned by an
-earlier invocation of @code{window-state-get}, see above. The optional
-argument @var{window} must specify a valid window and defaults to the
+This function puts the window state @var{state} into @var{window}.
+The argument @var{state} should be the state of a window returned by
+an earlier invocation of @code{window-state-get}, see above. The
+optional argument @var{window} can be either a live window or an
+internal window (@pxref{Windows and Frames}) and defaults to the
selected one. If @var{window} is not live, it is replaced by a live
window before putting @var{state} into it.
+2014-03-12 Glenn Morris <rgm@gnu.org>
+
+ * eww.texi (History and Acknowledgments):
+ Don't list everyone who changed the code.
+
+ * ada-mode.texi, auth.texi, calc.texi, ebrowse.texi, efaq.texi:
+ * emacs-gnutls.texi, epa.texi, ert.texi, eshell.texi, eww.texi:
+ * flymake.texi, gnus.texi, info.texi, message.texi, mh-e.texi:
+ * newsticker.texi, pcl-cvs.texi, rcirc.texi, sem-user.texi:
+ * smtpmail.texi, url.texi, viper.texi, wisent.texi, woman.texi:
+ Use @file for buffers, per the Texinfo manual.
+
+2014-03-12 Paul Eggert <eggert@cs.ucla.edu>
+
+ * org.texi: Don't set txicodequoteundirected and txicodequotebacktick
+ so that the Org Manual's style for ` and ' in code is consistent
+ with the other Emacs manuals. This affects PDF, not .info files.
+
+2014-03-12 Glenn Morris <rgm@gnu.org>
+
+ * octave-mode.texi (Using Octave Mode): Remove outdated stuff
+ about RET and indentation.
+
+2014-03-03 Juanma Barranquero <lekktu@gmail.com>
+
+ * gnus.texi:
+ * semantic.texi: Fix whitespace.
+
+ * ede.texi (Android projects):
+ * eieio.texi (Class Options, Making New Objects)
+ (Method Invocation, CLOS compatibility):
+ * sem-user.texi (Tag Decoration Mode): Fix typos.
+
+2014-03-02 Xue Fuqiao <xfq@gnu.org>
+
+ * sem-user.texi (Create System Databases): Markup fix.
+
+2014-02-28 Glenn Morris <rgm@gnu.org>
+
+ * info.texi (Further Reading): Rename node from Expert Info.
+ Remove stuff about writing Info nodes by hand.
+ (Help-Cross): Move node from (mainly deleted) chapter 3 to chapter 1.
+
+ * info.texi: Nuke hand-written node pointers.
+
+2014-02-28 Karl Berry <karl@gnu.org>
+
+ * info.texi (Top): Mention H for a summary of all commands.
+
+2014-02-25 Glenn Morris <rgm@gnu.org>
+
+ * edt.texi (Quick start, Starting emulation): Update hook details.
+ * efaq.texi (Fullscreen mode on MS-Windows)
+ (Terminal setup code works after Emacs has begun): Update hook details.
+ * vip.texi (Loading VIP): Fix hook example.
+
+ * efaq-w32.texi (Bash): Don't use setq with hooks.
+
+2014-02-24 Paul Eggert <eggert@cs.ucla.edu>
+
+ * texinfo.tex: Update from gnulib.
+
2014-02-22 Xue Fuqiao <xfq@gnu.org>
* remember.texi (Quick Start): Add an index.
* org.texi (Global and local cycling): Fix missing '@'.
-2013-01-07 Bastien Guerry <bzg@gnu.org>
+2013-01-07 Bastien Guerry <bzg@gnu.org>
* org.texi (Global and local cycling): Mention C-u C-u TAB.
(Include files, The Export Dispatcher)
2013-08-10 Xue Fuqiao <xfq.free@gmail.com>
- * ido.texi (Working Directories):
- (Flexible Matching, Regexp Matching, Find File At Point)
- (Ignoring, Misc Customization): Use @defopt for user options.
+ * ido.texi (Working Directories, Flexible Matching, Regexp Matching)
+ (Find File At Point, Ignoring, Misc Customization): Use @defopt
+ for user options.
2013-08-09 Xue Fuqiao <xfq.free@gmail.com>
2013-08-07 Xue Fuqiao <xfq.free@gmail.com>
* sc.texi (Introduction): Fix index.
- (Usage Overview):
- (Citations, Citation Elements, Recognizing Citations)
+ (Usage Overview, Citations, Citation Elements, Recognizing Citations)
(Information Keys and the Info Alist, Reference Headers)
(The Built-in Header Rewrite Functions)
(Electric References, Reply Buffer Initialization)
* newsticker.texi (Usage): Use @key for RET.
- * cl.texi (Argument Lists):
- (For Clauses):
+ * cl.texi (Argument Lists, For Clauses)
(Macros): Add indexes.
2013-08-05 Xue Fuqiao <xfq.free@gmail.com>
2013-08-04 Stephen Berman <stephen.berman@gmx.net>
* Makefile.in (INFO_TARGETS, DVI_TARGETS, PDF_TARGETS): Add todo-mode.
- (todo-mode, $(buildinfodir)/todo-mode$(INFO_EXT)):
+ (todo-mode, $(buildinfodir)/todo-mode$(INFO_EXT))
(todo-mode.dvi, todo-mode.pdf): New rules.
* todo-mode.texi: New file.
2013-02-09 Jay Belanger <jay.p.belanger@gmail.com>
- * calc.texi (Basic Operations on Units):
- (Customizing Calc): Mention the variable `calc-allow-units-as-numbers'.
+ * calc.texi (Basic Operations on Units, Customizing Calc):
+ Mention the variable `calc-allow-units-as-numbers'.
2013-02-08 Aidan Gauland <aidalgol@no8wireless.co.nz>
2010-11-11 Carsten Dominik <carsten.dominik@gmail.com>
- * org.texi (Handling links):
- (In-buffer settings): Document inlining images on startup.
+ * org.texi (Handling links, In-buffer settings):
+ Document inlining images on startup.
2010-11-11 Carsten Dominik <carsten.dominik@gmail.com>
2008-07-23 Vincent Belaïche <vincent.b.1@hotmail.fr>
- * calc.texi (Editing Stack Entries):
- (Algebraic Entry): Rewrite introductory sentences so it can be used by
+ * calc.texi (Editing Stack Entries, Algebraic Entry):
+ Rewrite introductory sentences so it can be used by
Calc's help functions. Mention fixing typos.
(Customizing Calc): Fix typo.
* info.texi (Help-Xref):
* message.texi (Message Headers):
* org.texi (Remember):
- * reftex.texi (Options (Defining Label Environments)):
- (Options (Index Support)):
- (Options (Viewing Cross-References)):
- (Options (Misc)):
- (Changes):
+ * reftex.texi (Options (Defining Label Environments))
+ (Options (Index Support), Options (Viewing Cross-References))
+ (Options (Misc), Changes):
* speedbar.texi (Creating a display):
* tramp.texi (Customizing Completion, Auto-save and Backup):
Texinfo usage fix.
2004-11-03 Jan Djärv <jan.h.d@swipnet.se>
* idlwave.texi (Continued Statement Indentation):
- * reftex.texi (Options (Index Support)):
+ * reftex.texi (Options (Index Support))
(Displaying and Editing the Index, Table of Contents):
* speedbar.texi (Creating a display, Major Display Modes):
Replace non-nil with non-@code{nil}.
The @code{Check file}, @code{Compile file}, and @code{Build} commands
all place compilation errors in a separate buffer named
-@code{*compilation*}.
+@file{*compilation*}.
Each line in this buffer will become active: you can simply click on
it with the middle button of the mouse, or move point to it and press
for your project, and allows you to customize the compilation commands
and other things on a per-project basis.
-Note that Ada mode project files @samp{*.adp} are different than GNAT
-compiler project files @samp{*.gpr}. However, Emacs Ada mode can use a
+Note that Ada mode project files @file{*.adp} are different than GNAT
+compiler project files @file{*.gpr}. However, Emacs Ada mode can use a
GNAT project file to specify the project directories. If no
other customization is needed, a GNAT project file can be used without
an Emacs Ada mode project file.
example.
In buffer @file{hello.adb}, invoke @samp{Ada | Check file}. You should
-get a @code{*compilation*} buffer containing something like (the
+get a @file{*compilation*} buffer containing something like (the
directory paths will be different):
@smallexample
@code{main}, and used it for the Build command.
Finally, again while in @file{hello_pkg.adb}, invoke @samp{Ada | Run}.
-The @code{*run*} buffer displays @code{Hello from hello_pkg.adb}.
+The @file{*run*} buffer displays @code{Hello from hello_pkg.adb}.
One final point. If you switch back to buffer @file{hello.adb}, and
invoke @samp{Ada | Run}, @file{hello_2.exe} will be run. That is
select @file{Example_2/hello.adp}.
Then, again in buffer @file{hello.adb}, invoke @samp{Ada | Set main and
-Build}. You should get a @code{*compilation*} buffer containing
+Build}. You should get a @file{*compilation*} buffer containing
something like (the directory paths will be different):
@example
select @file{Example_3/Other/other.adp}.
Then, again in @file{hello_3.adb}, invoke @samp{Ada | Set main and
-Build}. You should get a @code{*compilation*} buffer containing
+Build}. You should get a @file{*compilation*} buffer containing
something like (the directory paths will be different):
@example
select @file{Example_4/Gnat_Project/hello_4.gpr}.
Then, again in @file{hello_4.adb}, invoke @samp{Ada | Set main and
-Build}. You should get a @code{*compilation*} buffer containing
+Build}. You should get a @file{*compilation*} buffer containing
something like (the directory paths will be different):
@smallexample
select @file{Example_5/hello_5.adp}.
Then, again in @file{hello_5.adb}, invoke @samp{Ada | Set main and
-Build}. You should get a @code{*compilation*} buffer containing
+Build}. You should get a @file{*compilation*} buffer containing
something like (the directory paths will be different):
@smallexample
If you have problems with the search, set @code{auth-source-debug} to
@code{'trivia} and see what host, port, and user the library is
-checking in the @samp{*Messages*} buffer. Ditto for any other
+checking in the @file{*Messages*} buffer. Ditto for any other
problems, your first step is always to see what's being checked. The
second step, of course, is to write a blog entry about it and wait for
the answer in the comments.
@defvar auth-source-debug
Set this variable to @code{'trivia} to see lots of output in
-@samp{*Messages*}, or set it to a function that behaves like
+@file{*Messages*}, or set it to a function that behaves like
@code{message} to do your own logging.
@end defvar
@ifinfo
(If you are reading this tutorial on-line while running Calc, typing
@kbd{g a} may cause the tutorial to disappear from its window and be
-replaced by a buffer named @samp{*Gnuplot Commands*}. The tutorial
+replaced by a buffer named @file{*Gnuplot Commands*}. The tutorial
will reappear when you terminate GNUPLOT by typing @kbd{g q}.)
@end ifinfo
@cindex Starting the Calculator
@cindex Running the Calculator
To start the Calculator in its standard interface, type @kbd{M-x calc}.
-By default this creates a pair of small windows, @samp{*Calculator*}
-and @samp{*Calc Trail*}. The former displays the contents of the
+By default this creates a pair of small windows, @file{*Calculator*}
+and @file{*Calc Trail*}. The former displays the contents of the
Calculator stack and is manipulated exclusively through Calc commands.
It is possible (though not usually necessary) to create several Calc
mode buffers each of which has an independent stack, undo list, and
list of the results of all calculations that have been done. The
Calc Trail buffer uses a variant of Calc mode, so Calculator commands
still work when the trail buffer's window is selected. It is possible
-to turn the trail window off, but the @samp{*Calc Trail*} buffer itself
+to turn the trail window off, but the @file{*Calc Trail*} buffer itself
still exists and is updated silently. @xref{Trail Commands}.
@kindex C-x * c
@samp{$} as the formula.
If this is the first time you have used the Calculator in this Emacs
-session, the @kbd{C-x * q} command will create the @code{*Calculator*}
+session, the @kbd{C-x * q} command will create the @file{*Calculator*}
buffer and perform all the usual initializations; it simply will
refrain from putting that buffer up in a new window. The Quick
-Calculator refers to the @code{*Calculator*} buffer for all mode
+Calculator refers to the @file{*Calculator*} buffer for all mode
settings. Thus, for example, to set the precision that the Quick
Calculator uses, simply run the full Calculator momentarily and use
the regular @kbd{p} command.
@pindex another-calc
It is possible to have any number of Calc mode buffers at once.
Usually this is done by executing @kbd{M-x another-calc}, which
-is similar to @kbd{C-x * c} except that if a @samp{*Calculator*}
+is similar to @kbd{C-x * c} except that if a @file{*Calculator*}
buffer already exists, a new, independent one with a name of the
-form @samp{*Calculator*<@var{n}>} is created. You can also use the
+form @file{*Calculator*<@var{n}>} is created. You can also use the
command @code{calc-mode} to put any buffer into Calculator mode, but
this would ordinarily never be done.
Calculator buffer is created. The @code{calc-quit} command saves
the stack and mode settings of the buffer being quit as the new defaults.
-There is only one trail buffer, @samp{*Calc Trail*}, used by all
+There is only one trail buffer, @file{*Calc Trail*}, used by all
Calculator buffers.
@node Troubleshooting Commands, , Multiple Calculators, Introduction
@pindex calc-edit-finish
@cindex Editing the stack with Emacs
The @kbd{`} (@code{calc-edit}) command creates a temporary buffer
-(@samp{*Calc Edit*}) for editing the top-of-stack value using regular
+(@file{*Calc Edit*}) for editing the top-of-stack value using regular
Emacs commands. Note that @kbd{`} is a backquote, not a quote. With a
numeric prefix argument, it edits the specified number of stack entries
at once. (An argument of zero edits the entire stack; a negative
might want to insert new lines into the editing buffer.
When you finish editing, the Calculator parses the lines of text in
-the @samp{*Calc Edit*} buffer as numbers or formulas, replaces the
+the @file{*Calc Edit*} buffer as numbers or formulas, replaces the
original stack elements in the original buffer with these new values,
-then kills the @samp{*Calc Edit*} buffer. The original Calculator buffer
+then kills the @file{*Calc Edit*} buffer. The original Calculator buffer
continues to exist during editing, but for best results you should be
careful not to change it until you have finished the edit. You can
also cancel the edit by killing the buffer with @kbd{C-x k}.
finish, Calc will put the result on the stack without evaluating it.
If you give a prefix argument to @kbd{C-c C-c},
-Calc will not kill the @samp{*Calc Edit*} buffer. You can switch
+Calc will not kill the @file{*Calc Edit*} buffer. You can switch
back to that buffer and continue editing if you wish. However, you
should understand that if you initiated the edit with @kbd{`}, the
@kbd{C-c C-c} operation will be programmed to replace the top of the
(@code{calc-edit-variable}; @pxref{Operations on Variables}).
If the @code{calc-edit} command involves more than one stack entry,
-each line of the @samp{*Calc Edit*} buffer is interpreted as a
+each line of the @file{*Calc Edit*} buffer is interpreted as a
separate formula. Otherwise, the entire buffer is interpreted as
one formula, with line breaks ignored. (You can use @kbd{C-o} or
@kbd{C-q C-j} to insert a newline in the buffer without pressing @key{RET}.)
The @kbd{`} key also works during numeric or algebraic entry. The
-text entered so far is moved to the @code{*Calc Edit*} buffer for
+text entered so far is moved to the @file{*Calc Edit*} buffer for
more extensive editing than is convenient in the minibuffer.
@node Trail Commands, Keep Arguments, Editing Stack Entries, Stack and Trail
will be unable to integrate a function it could otherwise handle. Raising
this limit allows the Calculator to solve more integrals, though the time
it takes may grow exponentially. You can monitor the integrator's actions
-by creating an Emacs buffer called @code{*Trace*}. If such a buffer
+by creating an Emacs buffer called @file{*Trace*}. If such a buffer
exists, the @kbd{a i} command will write a log of its actions there.
If you want to manipulate integrals in a purely symbolic way, you can
@subsection Debugging Rewrites
@noindent
-If a buffer named @samp{*Trace*} exists, the rewrite mechanism will
+If a buffer named @file{*Trace*} exists, the rewrite mechanism will
record some useful information there as it operates. The original
formula is written there, as is the result of each successful rewrite,
and the final result of the rewriting. All phase changes are also
noted.
-Calc always appends to @samp{*Trace*}. You must empty this buffer
+Calc always appends to @file{*Trace*}. You must empty this buffer
yourself periodically if it is in danger of growing unwieldy.
Note that the rewriting mechanism is substantially slower when the
-@samp{*Trace*} buffer exists, even if the buffer is not visible on
+@file{*Trace*} buffer exists, even if the buffer is not visible on
the screen. Once you are done, you will probably want to kill this
buffer (with @kbd{C-x k *Trace* @key{RET}}). If you leave it in
existence and forget about it, all your future rewrite commands will
@kindex u v
@pindex calc-enter-units-table
The @kbd{u v} (@code{calc-enter-units-table}) command displays the units table
-in another buffer called @code{*Units Table*}. Each entry in this table
+in another buffer called @file{*Units Table*}. Each entry in this table
gives the unit name as it would appear in an expression, the definition
of the unit in terms of simpler units, and a full name or description of
the unit. Fundamental units are defined as themselves; these are the
is the height of the point
at coordinate @expr{(x_i, y_j)} on the surface. The 3D graph will
be displayed from a certain default viewpoint; you can change this
-viewpoint by adding a @samp{set view} to the @samp{*Gnuplot Commands*}
+viewpoint by adding a @samp{set view} to the @file{*Gnuplot Commands*}
buffer as described later. See the GNUPLOT documentation for a
description of the @samp{set view} command.
on the same axes.
The @kbd{g a} command (and many others that affect the current graph)
-will cause a special buffer, @samp{*Gnuplot Commands*}, to be displayed
+will cause a special buffer, @file{*Gnuplot Commands*}, to be displayed
in another window. This buffer is a template of the commands that will
be sent to GNUPLOT when it is time to draw the graph. The first
@kbd{g a} command adds a @code{plot} command to this buffer. Succeeding
must be only one @code{plot} command, and it must be the last command
in the buffer. If you want to save and later restore a complete graph
configuration, you can use regular Emacs commands to save and restore
-the contents of the @samp{*Gnuplot Commands*} buffer.
+the contents of the @file{*Gnuplot Commands*} buffer.
@vindex PlotData1
@vindex PlotData2
but the ``z'' entry is a vector of curve values. With a negative
prefix @expr{-n}, it takes @expr{n} vectors of the form @expr{[x, y, z]}.
The @kbd{g A} command works by adding a @code{splot} (surface-plot)
-command to the @samp{*Gnuplot Commands*} buffer.
+command to the @file{*Gnuplot Commands*} buffer.
(Although @kbd{g a} adds a 2D @code{plot} command to the
-@samp{*Gnuplot Commands*} buffer, Calc changes this to @code{splot}
+@file{*Gnuplot Commands*} buffer, Calc changes this to @code{splot}
before sending it to GNUPLOT if it notices that the data points are
evaluating to @code{xyz} calls. It will not work to mix 2D and 3D
@kbd{g a} curves in a single graph, although Calc does not currently
@kindex g p
@pindex calc-graph-plot
The @kbd{g p} (@code{calc-graph-plot}) command uses GNUPLOT to draw
-the graph described in the @samp{*Gnuplot Commands*} buffer. Any
+the graph described in the @file{*Gnuplot Commands*} buffer. Any
GNUPLOT parameters which are not defined by commands in this buffer
are reset to their default values. The variables named in the @code{plot}
command are written to a temporary data file and the variable names
The @kbd{g P} (@code{calc-graph-print}) command is like @kbd{g p},
except that it sends the output to a printer instead of to the
screen. More precisely, @kbd{g p} looks for @samp{set terminal}
-or @samp{set output} commands in the @samp{*Gnuplot Commands*} buffer;
+or @samp{set output} commands in the @file{*Gnuplot Commands*} buffer;
lacking these it uses the default settings. However, @kbd{g P}
ignores @samp{set terminal} and @samp{set output} commands and
uses a different set of default values. All of these values are
on and off. It is off by default; tick marks appear only at the
edges of the graph. With the grid turned on, dotted lines appear
across the graph at each tick mark. Note that this command only
-changes the setting in @samp{*Gnuplot Commands*}; to see the effects
+changes the setting in @file{*Gnuplot Commands*}; to see the effects
of the change you must give another @kbd{g p} command.
@kindex g b
it will not be. For example, plotting @expr{1 + x} with @expr{x} in the
interval @samp{[0 ..@: 1e-6]} will round all the data points down
to 1.0! Putting the command @samp{set precision @var{n}} in the
-@samp{*Gnuplot Commands*} buffer will cause the data to be computed
+@file{*Gnuplot Commands*} buffer will cause the data to be computed
at precision @var{n} instead of 5. Since this is such a rare case,
there is no keystroke-based command to set the precision.
The @kbd{g n} (@code{calc-graph-name}) command sets the title of an
individual curve. Like the other curve-manipulating commands, it
affects the most recently added curve, i.e., the last curve on the
-list in the @samp{*Gnuplot Commands*} buffer. To set the title of
+list in the @file{*Gnuplot Commands*} buffer. To set the title of
the other curves you must first juggle them to the end of the list
-with @kbd{g j}, or edit the @samp{*Gnuplot Commands*} buffer by hand.
+with @kbd{g j}, or edit the @file{*Gnuplot Commands*} buffer by hand.
Curve titles appear in the key; if the key is turned off they are
not used.
and ``y'' axes, respectively. These titles appear next to the
tick marks on the left and bottom edges of the graph, respectively.
Calc does not have commands to control the tick marks themselves,
-but you can edit them into the @samp{*Gnuplot Commands*} buffer if
+but you can edit them into the @file{*Gnuplot Commands*} buffer if
you wish. See the GNUPLOT documentation for details.
@kindex g r
The @code{dumb} device is an interface to ``dumb terminals,'' i.e.,
terminals with no special graphics facilities. It writes a crude
picture of the graph composed of characters like @code{-} and @code{|}
-to a buffer called @samp{*Gnuplot Trail*}, which Calc then displays.
+to a buffer called @file{*Gnuplot Trail*}, which Calc then displays.
The graph is made the same size as the Emacs screen, which on most
dumb terminals will be
@texline @math{80\times24}
characters. Also, the device name @code{big} is like @code{dumb}
but creates a graph four times the width and height of the Emacs
screen. You will then have to scroll around to view the entire
-graph. In the @samp{*Gnuplot Trail*} buffer, @key{SPC}, @key{DEL},
+graph. In the @file{*Gnuplot Trail*} buffer, @key{SPC}, @key{DEL},
@kbd{<}, and @kbd{>} are defined to scroll by one screenful in each
of the four directions.
@code{postscript}; in these cases the output in the desired format
goes into the file you name with @kbd{g O}. Type @kbd{g O stdout
@key{RET}} to set GNUPLOT to write to its standard output stream,
-i.e., to @samp{*Gnuplot Trail*}. This is the default setting.
+i.e., to @file{*Gnuplot Trail*}. This is the default setting.
Another special output name is @code{tty}, which means that GNUPLOT
is going to write graphics commands directly to its standard output,
default number of data points (see @kbd{g N}) and the X geometry
(see @kbd{g X}) are also saved. Other graph information is @emph{not}
saved; you can save a graph's configuration simply by saving the contents
-of the @samp{*Gnuplot Commands*} buffer.
+of the @file{*Gnuplot Commands*} buffer.
@vindex calc-gnuplot-plot-command
@vindex calc-gnuplot-default-device
window in the upper-left corner of the screen. This command has no
effect if the current device is @code{windows}.
-The buffer called @samp{*Gnuplot Trail*} holds a transcript of the
+The buffer called @file{*Gnuplot Trail*} holds a transcript of the
session with GNUPLOT@. This shows the commands Calc has ``typed'' to
GNUPLOT and the responses it has received. Calc tries to notice when an
error message has appeared here and display the buffer for you when
@pindex calc-graph-command
The @kbd{g C} (@code{calc-graph-command}) command prompts you to
enter any line of text, then simply sends that line to the current
-GNUPLOT process. The @samp{*Gnuplot Trail*} buffer looks deceptively
+GNUPLOT process. The @file{*Gnuplot Trail*} buffer looks deceptively
like a Shell buffer but you can't type commands in it yourself.
Instead, you must use @kbd{g C} for this purpose.
@pindex calc-graph-view-commands
@pindex calc-graph-view-trail
The @kbd{g v} (@code{calc-graph-view-commands}) and @kbd{g V}
-(@code{calc-graph-view-trail}) commands display the @samp{*Gnuplot Commands*}
-and @samp{*Gnuplot Trail*} buffers, respectively, in another window.
+(@code{calc-graph-view-trail}) commands display the @file{*Gnuplot Commands*}
+and @file{*Gnuplot Trail*} buffers, respectively, in another window.
This happens automatically when Calc thinks there is something you
will want to see in either of these buffers. If you type @kbd{g v}
or @kbd{g V} when the relevant buffer is already displayed, the
-buffer is hidden again. (Note that on MS-Windows, the @samp{*Gnuplot
+buffer is hidden again. (Note that on MS-Windows, the @file{*Gnuplot
Trail*} buffer will usually show nothing of interest, because
GNUPLOT's responses are not communicated back to Calc.)
One reason to use @kbd{g v} is to add your own commands to the
-@samp{*Gnuplot Commands*} buffer. Press @kbd{g v}, then use
+@file{*Gnuplot Commands*} buffer. Press @kbd{g v}, then use
@kbd{C-x o} to switch into that window. For example, GNUPLOT has
@samp{set label} and @samp{set arrow} commands that allow you to
annotate your plots. Since Calc doesn't understand these commands,
-you have to add them to the @samp{*Gnuplot Commands*} buffer
+you have to add them to the @file{*Gnuplot Commands*} buffer
yourself, then use @w{@kbd{g p}} to replot using these new commands. Note
that your commands must appear @emph{before} the @code{plot} command.
To get help on any GNUPLOT feature, type, e.g., @kbd{g C help set label}.
@kindex g K
@pindex calc-graph-kill
The @kbd{g K} (@code{calc-graph-kill}) command is like @kbd{g q}
-except that it also views the @samp{*Gnuplot Trail*} buffer so that
+except that it also views the @file{*Gnuplot Trail*} buffer so that
you can see the process being killed. This is better if you are
killing GNUPLOT because you think it has gotten stuck.
Calc standalone (@pxref{Standalone Operation}).
If you aren't using the X window system, you must switch into
-the @samp{*Calc Keypad*} window, place the cursor on the desired
+the @file{*Calc Keypad*} window, place the cursor on the desired
``key,'' and type @key{SPC} or @key{RET}. If you think this
is easier than using Calc normally, go right ahead.
The properties of @code{calc-define} are evaluated in the same order
that they were added. They can assume that the Calc modules @file{calc.el},
@file{calc-ext.el}, and @file{calc-macs.el} have been fully loaded, and
-that the @samp{*Calculator*} buffer will be the current buffer.
+that the @file{*Calculator*} buffer will be the current buffer.
If your @code{calc-define} property only defines algebraic functions,
you can be sure that it will have been evaluated before Calc tries to
@end smallexample
@findex calc-select-buffer
-The @code{calc-select-buffer} function selects the @samp{*Calculator*}
+The @code{calc-select-buffer} function selects the @file{*Calculator*}
buffer if necessary, say, because the command was invoked from inside
-the @samp{*Calc Trail*} window.
+the @file{*Calc Trail*} window.
@findex calc-set-command-flag
You can call, for example, @code{(calc-set-command-flag 'no-align)} to
and @code{calc-keep-args-flag} at the end of this command.
@item do-edit
-Switch to buffer @samp{*Calc Edit*} after this command.
+Switch to buffer @file{*Calc Edit*} after this command.
@item hold-trail
Do not move trail pointer to end of trail when something is recorded
found it when you are done, unless the user of your program is
actually expecting it to affect the stack.
-Note that you do not actually have to switch into the @samp{*Calculator*}
+Note that you do not actually have to switch into the @file{*Calculator*}
buffer in order to use @code{calc-eval}; it temporarily switches into
the stack buffer if necessary.
@end defun
@defun calc-refresh
-Erase the @code{*Calculator*} buffer and reformat its contents from memory.
+Erase the @file{*Calculator*} buffer and reformat its contents from memory.
This must be called after changing any parameter, such as the current
display radix, which might change the appearance of existing stack
entries. (During a keyboard macro invoked by the @kbd{X} key, refreshing
@end itemize
@table @asis
+@c FIXME: This should be `electric-indent-just-newline' since GNU Emacs 24.4.
@item @kbd{C-j} (@code{newline-and-indent})
@kindex C-j
@findex newline-and-indent
@kindex RET
@kindex C-j
@emph{Why doesn't the @kbd{RET} key indent the new line?}
+@c FIXME: `electric-indent-mode' is enabled by default in GNU Emacs 24.4.
Emacs's convention is that @kbd{RET} just adds a newline, and that
@kbd{C-j} adds a newline and indents it. You can make @kbd{RET} do this
@node Member Display
@section Displaying Members
-@cindex @samp{*Members*} buffer
+@cindex @file{*Members*} buffer
@cindex @samp{*Globals*}
@cindex freezing a member buffer
@cindex member lists, in tree buffers
@defun cedet-android-sdk-root
@anchor{cedet-android-sdk-root}
-The root to the android @var{SDK}.
+The root to the Android @var{SDK}.
@end defun
Android projects support different configurations including compile,
@file{.emacs} file:
@example
-(add-hook term-setup-hook 'edt-emulation-on)
+(add-hook 'emacs-startup-hook 'edt-emulation-on)
@end example
@noindent @strong{Important:} Be sure to read the rest of this manual.
@file{.emacs} file:
@example
-(add-hook term-setup-hook 'edt-emulation-on)
+(add-hook 'emacs-startup-hook 'edt-emulation-on)
@end example
A reference sheet is included (later on) listing the default EDT
(setq comint-eol-on-send t)
(setq w32-quote-process-args ?\")
-(setq shell-mode-hook 'my-shell-setup)
+(add-hook 'shell-mode-hook 'my-shell-setup)
@end example
If you find that you are having trouble with Emacs tracking drive
@kbd{M-x compile} and @kbd{M-x recompile} commands is a much more
effective way of doing that. Emacs automatically intercepts the compile
error messages, inserts them into a special buffer called
-@code{*compilation*}, and lets you visit the locus of each message in
+@file{*compilation*}, and lets you visit the locus of each message in
the source. Type @kbd{C-x `} to step through the offending lines one by
one (starting with Emacs 22, you can also use @kbd{M-g M-p} and
@kbd{M-g M-n} to go to the previous and next matches directly). Click
@kbd{Mouse-2} or press @key{RET} on a message text in the
-@code{*compilation*} buffer to go to the line whose number is mentioned
+@file{*compilation*} buffer to go to the line whose number is mentioned
in that message.
But if you indeed need to go to a certain text line, type @kbd{M-g M-g}
put the following in your @file{.emacs} file:
@lisp
-(add-hook 'term-setup-hook
- #'(lambda () (w32-send-sys-command ?\xF030)))
+(add-hook 'emacs-startup-hook
+ (lambda () (w32-send-sys-command ?\xF030)))
@end lisp
To avoid the slightly distracting visual effect of Emacs starting with
code/file execution order is not enforced after startup).
To postpone the execution of Emacs Lisp code until after terminal or
-window-system setup, treat the code as a @dfn{lambda list} and set the
-value of either the @code{term-setup-hook} or @code{window-setup-hook}
-variable to this lambda function. For example,
+window-system setup, treat the code as a @dfn{lambda list} and add it to
+@code{emacs-startup-hook} (or @code{tty-setup-hook} in Emacs 24.4 and
+newer). For example,
@lisp
-(add-hook 'term-setup-hook
+(add-hook 'emacs-startup-hook
(lambda ()
(when (string-match "\\`vt220" (or (getenv "TERM") ""))
;; Make vt220's "Do" key behave like M-x:
@item :depth-first
Search for methods in the class hierarchy in a depth first order.
@item :c3
-Searches for methods in in a linearized way that most closely matches
+Searches for methods in a linearized way that most closely matches
what CLOS does when a monotonic class structure is defined.
@end table
Calling @code{defclass} has defined two new functions. One is the
constructor @var{record}, and the other is the predicate,
-@var{record-p}.
+@var{record}-p.
@defun record object-name &rest slots
@item :depth-first
Search for methods in the class hierarchy in a depth first order.
@item :c3
-Searches for methods in in a linearized way that most closely matches
-what CLOS does when CLOS when a monotonic class structure is defined.
+Searches for methods in a linearized way that most closely matches
+what CLOS does when a monotonic class structure is defined.
This is derived from the Dylan language documents by
Kim Barrett et al.: A Monotonic Superclass Linearization for Dylan
the ability to provide object names.
@end table
-Defclass also supports class options, but does not currently use values
+defclass also supports class options, but does not currently use values
of @code{:metaclass}, and @code{:default-initargs}.
@item make-instance
@defvar gnutls-log-level
The @code{gnutls-log-level} variable sets the log level. 1 is
verbose. 2 is very verbose. 5 is crazy. Crazy! Set it to 1 or 2
-and look in the @code{*Messages*} buffer for the debugging
+and look in the @file{*Messages*} buffer for the debugging
information.
@end defvar
Because of the low-level interactions with the GnuTLS library, there
is no way currently to ask if a certificate can be accepted. You have
-to look in the @code{*Messages*} buffer.
+to look in the @file{*Messages*} buffer.
@end defvar
@defvar gnutls-min-prime-bits
EasyPG Assistant provides several cryptographic features which can be
integrated into other Emacs functionalities. For example, automatic
-encryption/decryption of @samp{*.gpg} files.
+encryption/decryption of @file{*.gpg} files.
@node Commands
@chapter Commands
@end deffn
@noindent
-In @samp{*Keys*} buffer, several commands are available. The common
+In @file{*Keys*} buffer, several commands are available. The common
use case is to export some keys to a file. To do that, type @kbd{m}
to select keys, type @kbd{o}, and then supply the filename.
@node Encrypting/decrypting gpg files
@section Encrypting/decrypting gpg files
-By default, every file whose name ends with @samp{.gpg} will be
+By default, every file whose name ends with @file{.gpg} will be
treated as encrypted. That is, when you open such a file, the
decrypted text is inserted in the buffer rather than encrypted one.
-Similarly, when you save the buffer to a @samp{foo.gpg} file,
+Similarly, when you save the buffer to a @file{foo.gpg} file,
encrypted data is written.
The file name pattern for encrypted files can be controlled by
Before reporting the bug, you should set @code{epg-debug} in the
@file{~/.emacs} file and repeat the bug. Then, include the contents
-of the @samp{ *epg-debug*} buffer. Note that the first letter of the
+of the @file{ *epg-debug*} buffer. Note that the first letter of the
buffer name is a whitespace.
@node GNU Free Documentation License
An exception to this are messages that the code under test prints with
@code{message} and similar logging; tests should not bother restoring
-the @code{*Message*} buffer to its original state.
+the @file{*Message*} buffer to its original state.
The above guidelines imply that tests should avoid calling highly
customizable commands such as @code{find-file}, except, of course, if
The buffer redirection operator, @code{>>>}, expects a buffer object
on the right-hand side, into which it inserts the output of the
left-hand side. e.g., @samp{echo hello >>> #<buffer *scratch*>}
-inserts the string @code{"hello"} into the @code{*scratch*} buffer.
+inserts the string @code{"hello"} into the @file{*scratch*} buffer.
@code{eshell-virtual-targets} is a list of mappings of virtual device
names to functions. Eshell comes with two virtual devices:
@kindex q
@kindex w
@kindex g
- If loading the URL was successful the buffer @code{*eww*} is opened
+ If loading the URL was successful the buffer @file{*eww*} is opened
and the web page is rendered in it. You can leave EWW by pressing
@kbd{q} or exit the browser by calling @kbd{eww-quit}. To reload the
web page hit @kbd{g} (@code{eww-reload}). Pressing @kbd{w}
to the previous URL. You can go forward again with @kbd{r}
(@code{eww-forward-url}). If you want an overview of your browsing
history press @kbd{H} (@code{eww-list-histories}) to open the history
-buffer @code{*eww history*}. The history is lost when EWW is quit.
+buffer @file{*eww history*}. The history is lost when EWW is quit.
If you want to remember websites you can use bookmarks.
@findex eww-add-bookmark
(@code{eww-add-bookmark}) to store a bookmark for the current website.
You can view stored bookmarks with @kbd{B}
(@code{eww-list-bookmarks}). This will open the bookmark buffer
-@code{*eww bookmarks*}.
+@file{*eww bookmarks*}.
@findex eww-browse-with-external-browser
@vindex shr-external-browser
@cindex Viewing Source
You can view the source of a website with @kbd{v}
(@code{eww-view-source}). This will open a new buffer
-@code{*eww-source*} and insert the source. The buffer will be set to
+@file{*eww-source*} and insert the source. The buffer will be set to
@code{html-mode} if available.
@findex url-cookie-list
@url{http://lars.ingebrigtsen.no/2013/06/16/eww/}.
EWW was then moved from the Gnus repository to GNU Emacs and several
-developers started contributing to it as well. A list of contributors
-at the time of writing this manual:
-
-@itemize @bullet
-@item Daniel Hackney
-@item Eli Zaretskii
-@item Glenn Morris
-@item Ivan Kanis
-@item Juri Linkov
-@item Katsumi Yamaoka
-@item Kenjiro NAKAYAMA
-@item Lars Magne Ingebrigtsen
-@item Leo Liu
-@item Paul Eggert
-@item Rüdiger Sonderfeld
-@item Stefan Monnier
-@item Ted Zlatanov
-@end itemize
+developers started contributing to it as well.
@node GNU Free Documentation License
@chapter GNU Free Documentation License
Flymake uses a simple logging facility for indicating important points
in the control flow. The logging facility sends logging messages to
-the @code{*Messages*} buffer. The information logged can be used for
+the @file{*Messages*} buffer. The information logged can be used for
resolving various problems related to Flymake.
Logging output is controlled by the @code{flymake-log-level}
@item flymake-gui-warnings-enabled
A boolean flag indicating whether Flymake will show message boxes for
non-recoverable errors. If @code{flymake-gui-warnings-enabled} is
-@code{nil}, these errors will only be logged to the @code{*Messages*}
+@code{nil}, these errors will only be logged to the @file{*Messages*}
buffer.
@item flymake-start-syntax-check-on-newline
* Selecting a Group:: Actually reading news.
* Subscription Commands:: Unsubscribing, killing, subscribing.
* Group Data:: Changing the info for a group.
-* Group Levels:: Levels? What are those, then?
+* Group Levels:: Levels? What are those, then?
* Group Score:: A mechanism for finding out what groups you like.
* Marking Groups:: You can mark groups for later processing.
* Foreign Groups:: Creating and editing groups.
* Charsets:: Character set issues.
* Article Commands:: Doing various things with the article buffer.
* Summary Sorting:: Sorting the summary buffer in various ways.
-* Finding the Parent:: No child support? Get the parent.
+* Finding the Parent:: No child support? Get the parent.
* Alternative Approaches:: Reading using non-default summaries.
* Tree Display:: A more visual display of threads.
* Mail Group Commands:: Some commands can only be used in mail groups.
@cindex finding news
First of all, you should know that there is a special buffer called
-@code{*Server*} that lists all the servers Gnus knows about. You can
+@file{*Server*} that lists all the servers Gnus knows about. You can
press @kbd{^} from the Group buffer to see it. In the Server buffer,
you can press @kbd{RET} on a defined server to see all the groups it
serves (subscribed or not!). You can also add or delete servers, edit
if you're in a hurry as well. This command will not attempt to contact
your primary server---instead, it will just activate all groups on level
1 and 2. (You should preferably keep no native groups on those two
-levels.) Also @pxref{Group Levels}.
+levels.) Also @pxref{Group Levels}.
@node Slave Gnusae
* Selecting a Group:: Actually reading news.
* Subscription Commands:: Unsubscribing, killing, subscribing.
* Group Data:: Changing the info for a group.
-* Group Levels:: Levels? What are those, then?
+* Group Levels:: Levels? What are those, then?
* Group Score:: A mechanism for finding out what groups you like.
* Marking Groups:: You can mark groups for later processing.
* Foreign Groups:: Creating and editing groups.
that group will always be visible in the Group buffer, regardless
of whether it has any unread articles.
-This parameter cannot be set via @code{gnus-parameters}. See
+This parameter cannot be set via @code{gnus-parameters}. See
@code{gnus-permanently-visible-groups} as an alternative.
@item broken-reply-to
If you're using topics to organize your group buffer
(@pxref{Group Topics}), note that posting styles can also be set in
-the topics parameters. Posting styles in topic parameters apply to all
-groups in this topic. More precisely, the posting-style settings for a
+the topics parameters. Posting styles in topic parameters apply to all
+groups in this topic. More precisely, the posting-style settings for a
group result from the hierarchical merging of all posting-style
entries in the parameters of this group and all the topics it belongs
to.
* Charsets:: Character set issues.
* Article Commands:: Doing various things with the article buffer.
* Summary Sorting:: Sorting the summary buffer in various ways.
-* Finding the Parent:: No child support? Get the parent.
+* Finding the Parent:: No child support? Get the parent.
* Alternative Approaches:: Reading using non-default summaries.
* Tree Display:: A more visual display of threads.
* Mail Group Commands:: Some commands can only be used in mail groups.
If you have just posted the article, and change your mind right away,
there is a trick you can use to cancel/supersede the article without
waiting for the article to appear on your site first. You simply return
-to the post buffer (which is called @code{*sent ...*}). There you will
+to the post buffer (which is called @file{*sent ...*}). There you will
find the article you just posted, with all the headers intact. Change
the @code{Message-ID} header to a @code{Cancel} or @code{Supersedes}
header by substituting one of those words for the word
So; there you are, reading your @emph{pseudo-articles} in your
@emph{virtual newsgroup} from the @emph{virtual server}; and you think:
-Why isn't anything real anymore? How did we get here?
+Why isn't anything real anymore? How did we get here?
@node Article Treatment
be useful if you normally use some other conversion function and are
worried that it might be doing something totally wrong. Say, claiming
that the article was posted in 1854. Although something like that is
-@emph{totally} impossible. Don't you trust me? *titter*
+@emph{totally} impossible. Don't you trust me? *titter*
@end table
about it, you might set @code{gnus-kill-summary-on-exit} to @code{nil}.
If you do that, Gnus won't kill the summary buffer when you exit it.
(Quelle surprise!) Instead it will change the name of the buffer to
-something like @samp{*Dead Summary ... *} and install a minor mode
+something like @file{*Dead Summary ... *} and install a minor mode
called @code{gnus-dead-summary-mode}. Now, if you switch back to this
buffer, you'll find that all keys are mapped to a function called
@code{gnus-summary-wake-up-the-dead}. So tapping any keys in a dead
@item nntp-record-commands
@vindex nntp-record-commands
If non-@code{nil}, @code{nntp} will log all commands it sends to the
-@acronym{NNTP} server (along with a timestamp) in the @samp{*nntp-log*}
+@acronym{NNTP} server (along with a timestamp) in the @file{*nntp-log*}
buffer. This is useful if you are debugging a Gnus/@acronym{NNTP} connection
that doesn't seem to work.
@cindex reading mail
@cindex mail
-Reading mail with a newsreader---isn't that just plain WeIrD@? But of
+Reading mail with a newsreader---isn't that just plain WeIrD@? But of
course.
@menu
default. The approximate maximum number of @code{Message-ID}s stored
there is controlled by the @code{nnmail-message-id-cache-length}
variable, which is 1000 by default. (So 1000 @code{Message-ID}s will be
-stored.) If all this sounds scary to you, you can set
+stored.) If all this sounds scary to you, you can set
@code{nnmail-treat-duplicates} to @code{warn} (which is what it is by
default), and @code{nnmail} won't delete duplicate mails. Instead it
will insert a warning into the head of the mail saying that it thinks
mail back ends.
@code{nnmaildir} is largely similar to @code{nnml}, with some notable
-differences. Each message is stored in a separate file, but the
+differences. Each message is stored in a separate file, but the
filename is unrelated to the article number in Gnus. @code{nnmaildir}
also stores the equivalent of @code{nnml}'s overview files in one file
per article, so it uses about twice as many inodes as @code{nnml}.
-(Use @code{df -i} to see how plentiful your inode supply is.) If this
+(Use @code{df -i} to see how plentiful your inode supply is.) If this
slows you down or takes up very much space, a non-block-structured
file system.
@item
However, since @code{nndiary} also has a @code{request-post} method, you
can also use @kbd{C-u a} instead of @kbd{C-u m} on a diary group and the
-message won't actually be sent; just stored locally in the group. This
+message won't actually be sent; just stored locally in the group. This
comes in very handy for private appointments.
@end itemize
@kindex V t (Summary)
@findex gnus-score-find-trace
Display all score rules that have been used on the current article
-(@code{gnus-score-find-trace}). In the @code{*Score Trace*} buffer, you
+(@code{gnus-score-find-trace}). In the @file{*Score Trace*} buffer, you
may type @kbd{e} to edit score file corresponding to the score rule on
current line and @kbd{f} to format (@code{gnus-score-pretty-print}) the
score file and edit it.
@end example
Suppose you're reading a high volume group and you're only interested
-in replies. The plan is to score down all articles that don't have
+in replies. The plan is to score down all articles that don't have
subject that begin with "Re:", "Fw:" or "Fwd:" and then score up all
parents of articles that have subjects that begin with reply marks.
as well.
This chapter describes tools for searching groups and servers for
-articles matching a query and then retrieving those articles. Gnus
+articles matching a query and then retrieving those articles. Gnus
provides a simpler mechanism for searching through articles in a summary buffer
to find those matching a pattern. @xref{Searching for Articles}.
@subsection What is nnir?
@code{nnir} is a Gnus interface to a number of tools for searching
-through mail and news repositories. Different backends (like
+through mail and news repositories. Different backends (like
@code{nnimap} and @code{nntp}) work with different tools (called
@dfn{engines} in @code{nnir} lingo), but all use the same basic search
interface.
The @code{nnimap} and @code{gmane} search engines should work with no
-configuration. Other engines require a local index that needs to be
+configuration. Other engines require a local index that needs to be
created and maintained outside of Gnus.
current line by calling @code{gnus-group-make-nnir-group}. This prompts
for a query string, creates an ephemeral @code{nnir} group containing
the articles that match this query, and takes you to a summary buffer
-showing these articles. Articles may then be read, moved and deleted
+showing these articles. Articles may then be read, moved and deleted
using the usual commands.
The @code{nnir} group made in this way is an @code{ephemeral} group,
and some changes are not permanent: aside from reading, moving, and
-deleting, you can't act on the original article. But there is an
+deleting, you can't act on the original article. But there is an
alternative: you can @emph{warp} (i.e., jump) to the original group
for the article on the current line with @kbd{A W}, aka
-@code{gnus-warp-to-article}. Even better, the function
+@code{gnus-warp-to-article}. Even better, the function
@code{gnus-summary-refer-thread}, bound by default in summary buffers
to @kbd{A T}, will first warp to the original group before it works
-its magic and includes all the articles in the thread. From here you
+its magic and includes all the articles in the thread. From here you
can read, move and delete articles, but also copy them, alter article
-marks, whatever. Go nuts.
+marks, whatever. Go nuts.
You say you want to search more than just the group on the current line?
-No problem: just process-mark the groups you want to search. You want
-even more? Calling for an nnir search with the cursor on a topic heading
+No problem: just process-mark the groups you want to search. You want
+even more? Calling for an nnir search with the cursor on a topic heading
will search all the groups under that heading.
-Still not enough? OK, in the server buffer
+Still not enough? OK, in the server buffer
@code{gnus-group-make-nnir-group} (now bound to @kbd{G}) will search all
-groups from the server on the current line. Too much? Want to ignore
-certain groups when searching, like spam groups? Just customize
+groups from the server on the current line. Too much? Want to ignore
+certain groups when searching, like spam groups? Just customize
@code{nnir-ignored-newsgroups}.
One more thing: individual search engines may have special search
-features. You can access these special features by giving a prefix-arg
-to @code{gnus-group-make-nnir-group}. If you are searching multiple
+features. You can access these special features by giving a prefix-arg
+to @code{gnus-group-make-nnir-group}. If you are searching multiple
groups with different search engines you will be prompted for the
special search features for each engine separately.
@node Setting up nnir
@subsection Setting up nnir
-To set up nnir you may need to do some prep work. Firstly, you may need
-to configure the search engines you plan to use. Some of them, like
-@code{imap} and @code{gmane}, need no special configuration. Others,
+To set up nnir you may need to do some prep work. Firstly, you may need
+to configure the search engines you plan to use. Some of them, like
+@code{imap} and @code{gmane}, need no special configuration. Others,
like @code{namazu} and @code{swish}, require configuration as described
-below. Secondly, you need to associate a search engine with a server or
+below. Secondly, you need to associate a search engine with a server or
a backend.
If you just want to use the @code{imap} engine to search @code{nnimap}
servers, and the @code{gmane} engine to search @code{gmane} then you
-don't have to do anything. But you might want to read the details of the
+don't have to do anything. But you might want to read the details of the
query language anyway.
@menu
When searching a group, @code{nnir} needs to know which search engine to
-use. You can configure a given server to use a particular engine by
+use. You can configure a given server to use a particular engine by
setting the server variable @code{nnir-search-engine} to the engine
-name. For example to use the @code{namazu} engine to search the server
+name. For example to use the @code{namazu} engine to search the server
named @code{home} you can use
@lisp
@end lisp
Alternatively you might want to use a particular engine for all servers
-with a given backend. For example, you might want to use the @code{imap}
-engine for all servers using the @code{nnimap} backend. In this case you
-can customize the variable @code{nnir-method-default-engines}. This is
-an alist of pairs of the form @code{(backend . engine)}. By default this
+with a given backend. For example, you might want to use the @code{imap}
+engine for all servers using the @code{nnimap} backend. In this case you
+can customize the variable @code{nnir-method-default-engines}. This is
+an alist of pairs of the form @code{(backend . engine)}. By default this
variable is set to use the @code{imap} engine for all servers using the
@code{nnimap} backend, and the @code{gmane} backend for @code{nntp}
-servers. (Don't worry, the @code{gmane} search engine won't actually try
-to search non-gmane @code{nntp} servers.) But if you wanted to use
+servers. (Don't worry, the @code{gmane} search engine won't actually try
+to search non-gmane @code{nntp} servers.) But if you wanted to use
@code{namazu} for all your servers with an @code{nnimap} backend you
could change this to
@item Boolean query operators
AND, OR, and NOT are supported, and parentheses can be used to control
-operator precedence, e.g., (emacs OR xemacs) AND linux. Note that
+operator precedence, e.g., (emacs OR xemacs) AND linux. Note that
operators must be written with all capital letters to be
-recognized. Also preceding a term with a @minus{} sign is equivalent to NOT
-term.
+recognized. Also preceding a term with a @minus{} sign is equivalent
+to NOT term.
@item Automatic AND queries
If you specify multiple words then they will be treated as an AND
@end table
-By default the whole message will be searched. The query can be limited
-to a specific part of a message by using a prefix-arg. After inputting
+By default the whole message will be searched. The query can be limited
+to a specific part of a message by using a prefix-arg. After inputting
the query this will prompt (with completion) for a message part.
Choices include ``Whole message'', ``Subject'', ``From'', and
-``To''. Any unrecognized input is interpreted as a header name. For
+``To''. Any unrecognized input is interpreted as a header name. For
example, typing @kbd{Message-ID} in response to this prompt will limit
the query to the Message-ID header.
Finally selecting ``Imap'' will interpret the query as a raw
-@acronym{IMAP} search query. The format of such queries can be found in
+@acronym{IMAP} search query. The format of such queries can be found in
RFC3501.
If you don't like the default of searching whole messages you can
-customize @code{nnir-imap-default-search-key}. For example to use
+customize @code{nnir-imap-default-search-key}. For example to use
@acronym{IMAP} queries by default
@lisp
in any language.
@item Stopwords
-Common English words (like 'the' and 'a') are ignored by default. You
+Common English words (like 'the' and 'a') are ignored by default. You
can override this by prefixing such words with a + (e.g., +the) or
enclosing the word in quotes (e.g., "the").
@end table
The query can be limited to articles by a specific author using a
-prefix-arg. After inputting the query this will prompt for an author
+prefix-arg. After inputting the query this will prompt for an author
name (or part of a name) to match.
@node The swish++ Engine
@table @code
@item nnir-swish++-program
-The name of the swish++ executable. Defaults to @code{search}
+The name of the swish++ executable. Defaults to @code{search}
@item nnir-swish++-additional-switches
A list of strings to be given as additional arguments to
-swish++. @code{nil} by default.
+swish++. @code{nil} by default.
@item nnir-swish++-remove-prefix
The prefix to remove from each file name returned by swish++ in order
-to get a group name. By default this is @code{$HOME/Mail}.
+to get a group name. By default this is @code{$HOME/Mail}.
@end table
@table @code
@item nnir-swish-e-program
-The name of the swish-e search program. Defaults to @code{swish-e}.
+The name of the swish-e search program. Defaults to @code{swish-e}.
@item nnir-swish-e-additional-switches
A list of strings to be given as additional arguments to
-swish-e. @code{nil} by default.
+swish-e. @code{nil} by default.
@item nnir-swish-e-remove-prefix
The prefix to remove from each file name returned by swish-e in order
-to get a group name. By default this is @code{$HOME/Mail}.
+to get a group name. By default this is @code{$HOME/Mail}.
@end table
variable.
To work correctly the @code{nnir-namazu-remove-prefix} variable must
-also be correct. This is the prefix to remove from each file name
+also be correct. This is the prefix to remove from each file name
returned by Namazu in order to get a proper group name (albeit with `/'
instead of `.').
information on valid switches.
Mail must first be indexed with the `mknmz' program. Read the documentation
-for namazu to create a configuration file. Here is an example:
+for namazu to create a configuration file. Here is an example:
@cartouche
@example
@table @code
@item nnir-method-default-engines
-Alist of pairs of server backends and search engines. The default associations
-are
+Alist of pairs of server backends and search engines. The default
+associations are
@example
(nnimap . imap)
(nntp . gmane)
If non-nil, a function that retrieves article headers rather than using
the gnus built-in function. This function takes an article list and
group as arguments and populates the `nntp-server-buffer' with the
-retrieved headers. It should then return either 'nov or 'headers
-indicating the retrieved header format. Failure to retrieve headers
-should return @code{nil}
+retrieved headers. It should then return either 'nov or 'headers
+indicating the retrieved header format. Failure to retrieve headers
+should return @code{nil}.
If this variable is nil, or if the provided function returns nil for a
search result, @code{gnus-retrieve-headers} will be called instead."
@subsection Propagating marks
First of: you really need a patched mairix binary for using the marks
-propagation feature efficiently. Otherwise, you would have to update
-the mairix database all the time. You can get the patch at
+propagation feature efficiently. Otherwise, you would have to update
+the mairix database all the time. You can get the patch at
@uref{http://www.randomsample.de/mairix-maildir-patch.tar}
You need the mairix v0.21 source code for this patch; everything else
-is explained in the accompanied readme file. If you don't want to use
+is explained in the accompanied readme file. If you don't want to use
marks propagation, you don't have to apply these patches, but they also
fix some annoyances regarding changing maildir flags, so it might still
be useful to you.
With the patched mairix binary, you can use @code{nnmairix} as an
-alternative to mail splitting (@pxref{Fancy Mail Splitting}). For
+alternative to mail splitting (@pxref{Fancy Mail Splitting}). For
example, instead of splitting all mails from @samp{david@@foobar.com}
into a group, you can simply create a search group with the query
-@samp{f:david@@foobar.com}. This is actually what ``smart folders'' are
+@samp{f:david@@foobar.com}. This is actually what ``smart folders'' are
all about: simply put everything in one mail folder and dynamically
-create searches instead of splitting. This is more flexible, since you
-can dynamically change your folders any time you want to. This also
+create searches instead of splitting. This is more flexible, since you
+can dynamically change your folders any time you want to. This also
implies that you will usually read your mails in the @code{nnmairix}
groups instead of your ``real'' mail groups.
There is one problem, though: say you got a new mail from
@samp{david@@foobar.com}; it will now show up in two groups, the
``real'' group (your INBOX, for example) and in the @code{nnmairix}
-search group (provided you have updated the mairix database). Now you
-enter the @code{nnmairix} group and read the mail. The mail will be
+search group (provided you have updated the mairix database). Now you
+enter the @code{nnmairix} group and read the mail. The mail will be
marked as read, but only in the @code{nnmairix} group---in the ``real''
mail group it will be still shown as unread.
You could now catch up the mail group (@pxref{Group Data}), but this is
tedious and error prone, since you may overlook mails you don't have
-created @code{nnmairix} groups for. Of course, you could first use
+created @code{nnmairix} groups for. Of course, you could first use
@code{nnmairix-goto-original-article} (@pxref{nnmairix keyboard
shortcuts}) and then read the mail in the original group, but that's
even more cumbersome.
Clearly, the easiest way would be if marks could somehow be
-automatically set for the original article. This is exactly what
+automatically set for the original article. This is exactly what
@emph{marks propagation} is about.
-Marks propagation is inactive by default. You can activate it for a
+Marks propagation is inactive by default. You can activate it for a
certain @code{nnmairix} group with
@code{nnmairix-group-toggle-propmarks-this-group} (bound to @kbd{G b
-p}). This function will warn you if you try to use it with your default
+p}). This function will warn you if you try to use it with your default
search group; the reason is that the default search group is used for
temporary searches, and it's easy to accidentally propagate marks from
-this group. However, you can ignore this warning if you really want to.
+this group. However, you can ignore this warning if you really want to.
With marks propagation enabled, all the marks you set in a @code{nnmairix}
-group should now be propagated to the original article. For example,
+group should now be propagated to the original article. For example,
you can now tick an article (by default with @kbd{!}) and this mark should
magically be set for the original article, too.
A few more remarks which you may or may not want to know:
@vindex nnmairix-propagate-marks-upon-close
-Marks will not be set immediately, but only upon closing a group. This
+Marks will not be set immediately, but only upon closing a group. This
not only makes marks propagation faster, it also avoids problems with
dangling symlinks when dealing with maildir files (since changing flags
-will change the file name). You can also control when to propagate marks
+will change the file name). You can also control when to propagate marks
via @code{nnmairix-propagate-marks-upon-close} (see the doc-string for
details).
Obviously, @code{nnmairix} will have to look up the original group for every
-article you want to set marks for. If available, @code{nnmairix} will first use
-the registry for determining the original group. The registry is very
+article you want to set marks for. If available, @code{nnmairix} will first
+use the registry for determining the original group. The registry is very
fast, hence you should really, really enable the registry when using
-marks propagation. If you don't have to worry about RAM and disc space,
+marks propagation. If you don't have to worry about RAM and disc space,
set @code{gnus-registry-max-entries} to a large enough value; to be on
the safe side, choose roughly the amount of mails you index with mairix.
@vindex nnmairix-only-use-registry
If you don't want to use the registry or the registry hasn't seen the
original article yet, @code{nnmairix} will use an additional mairix
-search for determining the file name of the article. This, of course, is
+search for determining the file name of the article. This, of course, is
way slower than the registry---if you set hundreds or even thousands of
-marks this way, it might take some time. You can avoid this situation by
+marks this way, it might take some time. You can avoid this situation by
setting @code{nnmairix-only-use-registry} to t.
Maybe you also want to propagate marks the other way round, i.e., if you
tick an article in a "real" mail group, you'd like to have the same
-article in a @code{nnmairix} group ticked, too. For several good
-reasons, this can only be done efficiently if you use maildir. To
+article in a @code{nnmairix} group ticked, too. For several good
+reasons, this can only be done efficiently if you use maildir. To
immediately contradict myself, let me mention that it WON'T work with
@code{nnmaildir}, since @code{nnmaildir} stores the marks externally and
-not in the file name. Therefore, propagating marks to @code{nnmairix}
+not in the file name. Therefore, propagating marks to @code{nnmairix}
groups will usually only work if you use an IMAP server which uses
maildir as its file format.
@vindex nnmairix-propagate-marks-to-nnmairix-groups
If you work with this setup, just set
@code{nnmairix-propagate-marks-to-nnmairix-groups} to @code{t} and see what
-happens. If you don't like what you see, just set it to @code{nil} again. One
-problem might be that you get a wrong number of unread articles; this
+happens. If you don't like what you see, just set it to @code{nil} again.
+One problem might be that you get a wrong number of unread articles; this
usually happens when you delete or expire articles in the original
-groups. When this happens, you can recreate the @code{nnmairix} group on the
-back end using @kbd{G b d}.
+groups. When this happens, you can recreate the @code{nnmairix} group on
+the back end using @kbd{G b d}.
@node nnmairix tips and tricks
@subsection nnmairix tips and tricks
Checking Mail
@findex nnmairix-update-groups
-I put all my important mail groups at group level 1. The mairix groups
+I put all my important mail groups at group level 1. The mairix groups
have group level 5, so they do not get checked at start up (@pxref{Group
Levels}).
@end lisp
Instead of @samp{"mairixsearch"} use the name of your @code{nnmairix}
-server. See the doc string for @code{nnmairix-update-groups} for
+server. See the doc string for @code{nnmairix-update-groups} for
details.
@item
Hit @kbd{G b g}, enter group name (e.g., @samp{important}), use
@samp{F:f} as query and do not include threads.
-Now activate marks propagation for this group by using @kbd{G b p}. Then
+Now activate marks propagation for this group by using @kbd{G b p}. Then
activate the always-unread feature by using @kbd{G b r} twice.
So far so good---but how do you remove the tick marks in the @code{nnmairix}
group? There are two options: You may simply use
@code{nnmairix-remove-tick-mark-original-article} (bound to @kbd{$ u}) to remove
-tick marks from the original article. The other possibility is to set
+tick marks from the original article. The other possibility is to set
@code{nnmairix-propagate-marks-to-nnmairix-groups} to @code{t}, but see the above
comments about this option. If it works for you, the tick marks should
also exist in the @code{nnmairix} group and you can remove them as usual,
When you have removed a tick mark from the original article, this
article should vanish from the @code{nnmairix} group after you have updated the
mairix database and updated the group. Fortunately, there is a function
-for doing exactly that: @code{nnmairix-update-groups}. See the previous code
+for doing exactly that: @code{nnmairix-update-groups}. See the previous code
snippet and the doc string for details.
@item
Dealing with auto-subscription of mail groups
As described before, all @code{nnmairix} groups are in fact stored on
-the mail back end in the form @samp{zz_mairix-<NAME>-<NUMBER>}. You can
-see them when you enter the back end server in the server buffer. You
-should not subscribe these groups! Unfortunately, these groups will
+the mail back end in the form @samp{zz_mairix-<NAME>-<NUMBER>}. You can
+see them when you enter the back end server in the server buffer. You
+should not subscribe these groups! Unfortunately, these groups will
usually get @emph{auto-subscribed} when you use @code{nnmaildir} or
@code{nnml}, i.e., you will suddenly see groups of the form
-@samp{zz_mairix*} pop up in your group buffer. If this happens to you,
+@samp{zz_mairix*} pop up in your group buffer. If this happens to you,
simply kill these groups with C-k. For avoiding this, turn off
auto-subscription completely by setting the variable
@code{gnus-auto-subscribed-groups} to @code{nil} (@pxref{Filtering New
@code{nnmairix} uses a rather brute force method to force Gnus to
completely reread the group on the mail back end after mairix was
called---it simply deletes and re-creates the group on the mail
-back end. So far, this has worked for me without any problems, and I
+back end. So far, this has worked for me without any problems, and I
don't see how @code{nnmairix} could delete other mail groups than its
own, but anyway: you really should have a backup of your mail
folders.
@item
All necessary information is stored in the group parameters
-(@pxref{Group Parameters}). This has the advantage that no active file
+(@pxref{Group Parameters}). This has the advantage that no active file
is needed, but also implies that when you kill a @code{nnmairix} group,
it is gone for good.
@item
@findex nnmairix-purge-old-groups
If you create and kill a lot of @code{nnmairix} groups, the
-``zz_mairix-*'' groups will accumulate on the mail back end server. To
+``zz_mairix-*'' groups will accumulate on the mail back end server. To
delete old groups which are no longer needed, call
-@code{nnmairix-purge-old-groups}. Note that this assumes that you don't
+@code{nnmairix-purge-old-groups}. Note that this assumes that you don't
save any ``real'' mail in folders of the form
-@code{zz_mairix-<NAME>-<NUMBER>}. You can change the prefix of
+@code{zz_mairix-<NAME>-<NUMBER>}. You can change the prefix of
@code{nnmairix} groups by changing the variable
@code{nnmairix-group-prefix}.
A problem can occur when using @code{nnmairix} with maildir folders and
comes with the fact that maildir stores mail flags like @samp{Seen} or
@samp{Replied} by appending chars @samp{S} and @samp{R} to the message
-file name, respectively. This implies that currently you would have to
+file name, respectively. This implies that currently you would have to
update the mairix database not only when new mail arrives, but also when
-mail flags are changing. The same applies to new mails which are indexed
+mail flags are changing. The same applies to new mails which are indexed
while they are still in the @samp{new} folder but then get moved to
-@samp{cur} when Gnus has seen the mail. If you don't update the database
+@samp{cur} when Gnus has seen the mail. If you don't update the database
after this has happened, a mairix query can lead to symlinks pointing to
-non-existing files. In Gnus, these messages will usually appear with
-``(none)'' entries in the header and can't be accessed. If this happens
+non-existing files. In Gnus, these messages will usually appear with
+``(none)'' entries in the header and can't be accessed. If this happens
to you, using @kbd{G b u} and updating the group will usually fix this.
@end itemize
@c #### FIXME: faces and x-faces' implementations should really be harmonized.
@code{Face} headers are essentially a funkier version of @code{X-Face}
-ones. They describe a 48x48 pixel colored image that's supposed to
+ones. They describe a 48x48 pixel colored image that's supposed to
represent the author of the message.
@cindex face
converts the file to Face format by using the
@code{gnus-convert-image-to-face-command} shell command.
-Here's how you would typically use this function. Put something like the
+Here's how you would typically use this function. Put something like the
following in your @file{~/.gnus.el} file:
@lisp
@item gnus-gravatar-size
@vindex gnus-gravatar-size
-The size in pixels of gravatars. Gravatars are always square, so one
+The size in pixels of gravatars. Gravatars are always square, so one
number for the size is enough.
@item gnus-gravatar-properties
@end lisp
This adds registry saves to Gnus newsrc saves (which happen on exit
-and when you press @kbd{s} from the @code{*Group*} buffer. It also
+and when you press @kbd{s} from the @file{*Group*} buffer. It also
adds registry calls to article actions in Gnus (copy, move, etc.)@: so
it's not easy to undo the initialization. See
@code{gnus-registry-initialize} for the gory details.
controlled by @code{gnus-verbose} and @code{gnus-verbose-backends} and
are issued. The default value is @code{nil} which means never to add
timestamp. If it is @code{log}, add timestamps to only the messages
-that go into the @samp{*Messages*} buffer (in XEmacs, it is the
-@w{@samp{ *Message-Log*}} buffer). If it is neither @code{nil} nor
+that go into the @file{*Messages*} buffer (in XEmacs, it is the
+@w{@file{ *Message-Log*}} buffer). If it is neither @code{nil} nor
@code{log}, add timestamps not only to log messages but also to the ones
displayed in the echo area.
be correct for nnimap groups. This is achieved by calling
@code{nnimap-fixup-unread-after-getting-new-news} from the
@code{gnus-setup-news-hook} (called on startup) and
-@code{gnus-after-getting-new-news-hook}. (called after getting new
+@code{gnus-after-getting-new-news-hook} (called after getting new
mail). If you have modified those variables from the default, you may
want to add @code{nnimap-fixup-unread-after-getting-new-news} again. If
you were happy with the estimate and want to save some (minimal) time
@cindex splitting, terminology
@cindex mail sorting
@cindex mail filtering (splitting)
-The action of sorting your emails according to certain rules. Sometimes
+The action of sorting your emails according to certain rules. Sometimes
incorrectly called mail filtering.
@end table
To read about advanced Info commands, type @kbd{n} twice. This
brings you to @cite{Advanced Info Commands}, skipping over the `Getting
Started' chapter.
+
+Type @kbd{H} to see a summary of all available commands.
@end ifinfo
@end ifnottex
@menu
* Getting Started:: Getting started using an Info reader.
* Advanced:: Advanced Info commands.
-* Expert Info:: Info commands for experts.
+* Further Reading:: Where to learn more about Info files.
* GNU Free Documentation License:: The license for this documentation.
* Index:: An index of topics, commands, and variables.
@end menu
-@node Getting Started, Advanced, Top, Top
-@comment node-name, next, previous, up
+@node Getting Started
@chapter Getting Started
This first part of this Info manual describes how to get around inside
of Info. The second part of the manual describes various advanced
-Info commands. The third part briefly explains how to generate Info
-files from Texinfo files, and describes how to write an Info file
-by hand.
+Info commands. The third part contains references to other sources,
+which explain how to generate Info files from Texinfo files.
@ifnotinfo
This manual is primarily designed for browsing with an Info reader
the course.
@end ifinfo
-@node Help, Help-P, Help-Small-Screen, Getting Started
-@comment node-name, next, previous, up
+@node Help
@section How to use Info
You are talking to the program Info, for reading documentation.
mouse button on the @samp{Next} link to do the same ``the mouse way''.
@end format
-@node Help-P, Help-^L, Help, Getting Started
-@comment node-name, next, previous, up
+@node Help-P
@section Returning to the Previous node
@kindex p @r{(Info mode)}
the @samp{Next} link, to get to the node @samp{Help-^L} and learn more.
@end format
-@node Help-^L, Help-Inv, Help-P, Getting Started
-@comment node-name, next, previous, up
+@node Help-^L
@section The Space, DEL, B and ^L commands
This node's mode line tells you that you are now at node
to visit the next node.
@end format
-@node Help-Inv, Help-M, Help-^L, Getting Started
-@comment node-name, next, previous, up
+@node Help-Inv
@section Invisible text in Emacs Info
Before discussing menus, we need to make some remarks that are only
Now type @kbd{]} to go to the next node and learn about menus.
-@node Help-M, Help-Xref, Help-Inv, Getting Started
-@comment node-name, next, previous, up
+@node Help-M
@section Menus and the @kbd{m} command
@cindex menus in an Info document
>> Now type @kbd{u} to move back up to @samp{Help-M}.
@end format
-@node Help-Xref, Help-Int, Help-M, Getting Started
-@comment node-name, next, previous, up
+@node Help-Xref
@section Following Cross-References
@cindex cross references in Info documents
>> Now type @kbd{n} to learn more commands.
@end format
-@node Help-Int, Help-Q, Help-Xref, Getting Started
-@comment node-name, next, previous, up
+
+@menu
+* Help-Cross:: Target of a cross-reference.
+@end menu
+
+
+@node Help-Cross, , , Help-Xref
+@subsection The node reached by the cross reference in Info
+
+ This is the node reached by the cross reference named @samp{Cross}.
+
+ While this node is specifically intended to be reached by a cross
+reference, most cross references lead to nodes that ``belong''
+someplace else far away in the structure of an Info document. So you
+cannot expect this node to have a @samp{Next}, @samp{Previous} or
+@samp{Up} links pointing back to where you came from. In general, the
+@kbd{l} (el) command is the only way to get back there.
+
+@format
+>> Type @kbd{l} to return to the node where the cross reference was.
+@end format
+
+
+@node Help-Int
@section Some intermediate Info commands
The introductory course is almost over; please continue
@c If a menu appears at the end of this node, remove it.
@c It is an accident of the menu updating command.
-@node Help-Q, , Help-Int, Getting Started
-@comment node-name, next, previous, up
+@node Help-Q
@section Quitting Info
@kindex q @r{(Info mode)}
@end menu
-@node Search Text, Search Index, , Advanced
-@comment node-name, next, previous, up
+@node Search Text
@section @kbd{s} searches Info documents
@cindex searching Info documents
by setting the variable @code{Info-isearch-search} to @code{nil}
(@pxref{Emacs Info Variables}).
-@node Search Index, Go to node, Search Text, Advanced
-@comment node-name, next, previous, up
+@node Search Index
@section @kbd{i} searches the indices for specific subjects
@cindex searching Info indices
a string and then looks up that string in all the indices of all the
Info documents installed on your system.
-@node Go to node, Choose menu subtopic, Search Index, Advanced
-@comment node-name, next, previous, up
+@node Go to node
@section @kbd{g} goes to a node by name
@kindex g @r{(Info mode)}
all of the current file by typing @kbd{g*@key{RET}} or all of any
other file with @kbd{g(@var{filename})*@key{RET}}.
-@node Choose menu subtopic, Create Info buffer, Go to node, Advanced
-@comment node-name, next, previous, up
+@node Choose menu subtopic
@section @kbd{1}--@kbd{9} choose a menu subtopic by its number
@kindex 1 @r{through} 9 @r{(Info mode)}
@kbd{m} instead, and specify the name, or use @key{TAB} to quickly
move between menu items.
-@node Create Info buffer, Emacs Info Variables, Choose menu subtopic, Advanced
-@comment node-name, next, previous, up
+@node Create Info buffer
@section @kbd{M-n} creates a new independent Info buffer in Emacs
@kindex M-n @r{(Info mode)}
Another way to produce new Info buffers in Emacs is to use a numeric
prefix argument for the @kbd{C-h i} command (@code{info}) which
switches to the Info buffer with that number. Thus, @kbd{C-u 2 C-h i}
-switches to the buffer @samp{*info*<2>}, creating it if necessary.
+switches to the buffer @file{*info*<2>}, creating it if necessary.
@findex info-display-manual
If you have created many Info buffers in Emacs, you might find it
use the command @kbd{M-x info-display-manual} to show an Info manual
by name, reusing an existing buffer if there is one.
-@node Emacs Info Variables, , Create Info buffer, Advanced
-@comment node-name, next, previous, up
+@node Emacs Info Variables
@section Emacs Info-mode Variables
The following variables may modify the behavior of Info-mode in Emacs;
@end vtable
-@node Expert Info
-@chapter Info for Experts
+@node Further Reading
+@chapter Further Reading
@cindex Texinfo
- This chapter explains how to write an Info file by hand. However,
-in most cases, writing a Texinfo file is better, since you can use it
-to make a printed manual or produce other formats, such as HTML and
-DocBook, as well as for generating Info files.
+ Info files are created from Texinfo source files. You can use the
+same source file to make a printed manual or produce other formats,
+such as HTML and DocBook.
The @code{makeinfo} command converts a Texinfo file into an Info file;
@code{texinfo-format-region} and @code{texinfo-format-buffer} are GNU
Documentation Format}, for how to install an Info file after you
have created one.
-However, if you want to edit an Info file manually and install it manually,
-here is how.
-
-@menu
-* Add:: Describes how to add new nodes to the hierarchy.
- Also tells what nodes look like.
-* Menus:: How to add to or create menus in Info nodes.
-* Cross-refs:: How to add cross-references to Info nodes.
-* Tags:: How to make tags tables for Info files.
-* Checking:: Checking an Info File.
-@end menu
-
-@node Add, Menus, , Expert Info
-@comment node-name, next, previous, up
-@section Adding a new node to Info
-
-To add a new topic to the list in the Info directory, you must:
-
-@enumerate
-@item
-Create some nodes, in some file, to document that topic.
-@item
-Put that topic in the menu in the directory. @xref{Menus, Menu}.
-@end enumerate
-
-@cindex node delimiters
- The new node can live in an existing documentation file, or in a new
-one. It must have a @samp{^_} character before it (invisible to the
-user; this node has one but you cannot see it), and it ends with either
-a @samp{^_}, a @samp{^L} (``formfeed''), or the end of file.@footnote{If
-you put in a @samp{^L} to end a new node, be sure that there is a
-@samp{^_} after it to start the next one, since @samp{^L} cannot
-@emph{start} a node. Also, a nicer way to make a node boundary be a
-page boundary as well is to put a @samp{^L} @emph{right after} the
-@samp{^_}.}
-
- The @samp{^_} starting a node must be followed by a newline or a
-@samp{^L} newline, after which comes the node's header line. The
-header line must give the node's name (by which Info finds it), and
-state the names of the @samp{Next}, @samp{Previous}, and @samp{Up}
-nodes (if there are any). As you can see, this node's @samp{Up} node
-is the node @samp{Expert Info}. The @samp{Next} node is @samp{Menus}.
-
-@cindex node header line format
-@cindex format of node headers
- The keywords @dfn{Node}, @dfn{Next}, @dfn{Previous}, and @dfn{Up}
-may appear in any order, anywhere in the header line, but the
-recommended order is the one in this sentence. Each keyword must be
-followed by a colon, spaces and tabs, and then the appropriate name.
-The name may be terminated with a tab, a comma, or a newline. A space
-does not end it; node names may contain spaces. The case of letters
-in the names is insignificant.
-
-@cindex node name format
-@cindex Directory node
- A node name has two forms. A node in the current file is named by
-what appears after the @samp{Node: } in that node's first line. For
-example, this node's name is @samp{Add}. A node in another file is
-named by @samp{(@var{filename})@var{node-within-file}}, as in
-@samp{(info)Add} for this node. If the file name starts with @samp{./},
-then it is relative to the current directory; otherwise, it is
-relative starting from the standard directory for Info files of your
-site. The name @samp{(@var{filename})Top} can be abbreviated to just
-@samp{(@var{filename})}. By convention, the name @samp{Top} is used
-for the ``highest'' node in any single file---the node whose @samp{Up}
-points out of the file. The @samp{Directory} node is @file{(dir)}, it
-points to a file @file{dir} which holds a large menu listing all the
-Info documents installed on your site. The @samp{Top} node of a
-document file listed in the @samp{Directory} should have an @samp{Up:
-(dir)} in it.
-
-@cindex unstructured documents
- The node name @kbd{*} is special: it refers to the entire file.
-Thus, @kbd{g*} shows you the whole current file. The use of the
-node @kbd{*} is to make it possible to make old-fashioned,
-unstructured files into nodes of the tree.
-
- The @samp{Node:} name, in which a node states its own name, must not
-contain a file name, since when Info searches for a node, it does not
-expect a file name to be there. The @samp{Next}, @samp{Previous} and
-@samp{Up} names may contain them. In this node, since the @samp{Up}
-node is in the same file, it was not necessary to use one.
-
- Note that the nodes in this file have a file name in the header
-line. The file names are ignored by Info, but they serve as comments
-to help identify the node for the user.
-
-@node Menus, Cross-refs, Add, Expert Info
-@comment node-name, next, previous, up
-@section How to Create Menus
-
- Any node in the Info hierarchy may have a @dfn{menu}---a list of subnodes.
-The @kbd{m} command searches the current node's menu for the topic which it
-reads from the terminal.
-
-@cindex menu and menu entry format
- A menu begins with a line starting with @w{@samp{* Menu:}}. The
-rest of the line is a comment. After the starting line, every line
-that begins with a @samp{* } lists a single topic. The name of the
-topic---what the user must type at the @kbd{m}'s command prompt to
-select this topic---comes right after the star and space, and is
-followed by a colon, spaces and tabs, and the name of the node which
-discusses that topic. The node name, like node names following
-@samp{Next}, @samp{Previous} and @samp{Up}, may be terminated with a
-tab, comma, or newline; it may also be terminated with a period.
-
- If the node name and topic name are the same, then rather than
-giving the name twice, the abbreviation @samp{* @var{name}::} may be
-used (and should be used, whenever possible, as it reduces the visual
-clutter in the menu).
-
- It is considerate to choose the topic names so that they differ
-from each other very near the beginning---this allows the user to type
-short abbreviations. In a long menu, it is a good idea to capitalize
-the beginning of each item name which is the minimum acceptable
-abbreviation for it (a long menu is more than 5 or so entries).
-
- The nodes listed in a node's menu are called its ``subnodes,'' and it
-is their ``superior''. They should each have an @samp{Up:} pointing at
-the superior. It is often useful to arrange all or most of the subnodes
-in a sequence of @samp{Next} and @samp{Previous} pointers so that
-someone who wants to see them all need not keep revisiting the Menu.
-
- The Info Directory is simply the menu of the node @samp{(dir)Top}---that
-is, node @samp{Top} in file @file{.../info/dir}. You can put new entries
-in that menu just like any other menu. The Info Directory is @emph{not} the
-same as the file directory called @file{info}. It happens that many of
-Info's files live in that file directory, but they do not have to; and
-files in that directory are not automatically listed in the Info
-Directory node.
-
- Also, although the Info node graph is claimed to be a ``hierarchy,''
-in fact it can be @emph{any} directed graph. Shared structures and
-pointer cycles are perfectly possible, and can be used if they are
-appropriate to the meaning to be expressed. There is no need for all
-the nodes in a file to form a connected structure. In fact, this file
-has two connected components. You are in one of them, which is under
-the node @samp{Top}; the other contains the node @samp{Help} which the
-@kbd{h} command goes to. In fact, since there is no garbage
-collector on the node graph, nothing terrible happens if a substructure
-is not pointed to, but such a substructure is rather useless since nobody
-can ever find out that it exists.
-
-@node Cross-refs, Tags, Menus, Expert Info
-@comment node-name, next, previous, up
-@section Creating Cross References
-
-@cindex cross reference format
- A cross reference can be placed anywhere in the text, unlike a menu
-item which must go at the front of a line. A cross reference looks
-like a menu item except that it has @samp{*note} instead of @samp{*}.
-It @emph{cannot} be terminated by a @samp{)}, because @samp{)}'s are
-so often part of node names. If you wish to enclose a cross reference
-in parentheses, terminate it with a period first. Here are two
-examples of cross references pointers:
-
-@example
-*Note details: commands. (See *note 3: Full Proof.)
-@end example
-
-@noindent
-@emph{These are just examples.} The places they ``lead to'' do not
-really exist!
-
-@menu
-* Help-Cross:: Target of a cross-reference.
-@end menu
-
-
-@node Help-Cross, , , Cross-refs
-@subsection The node reached by the cross reference in Info
-
- This is the node reached by the cross reference named @samp{Cross}.
-
- While this node is specifically intended to be reached by a cross
-reference, most cross references lead to nodes that ``belong''
-someplace else far away in the structure of an Info document. So you
-cannot expect this node to have a @samp{Next}, @samp{Previous} or
-@samp{Up} links pointing back to where you came from. In general, the
-@kbd{l} (el) command is the only way to get back there.
-
-@format
->> Type @kbd{l} to return to the node where the cross reference was.
-@end format
-
-@node Tags, Checking, Cross-refs, Expert Info
-@comment node-name, next, previous, up
-@section Tags Tables for Info Files
-
-@cindex tags tables in Info files
- You can speed up the access to nodes of a large Info file by giving
-it a tags table. Unlike the tags table for a program, the tags table for
-an Info file lives inside the file itself and is used
-automatically whenever Info reads in the file.
-
-@findex Info-tagify
- To make a tags table, go to a node in the file using Emacs Info mode and type
-@kbd{M-x Info-tagify}. Then you must use @kbd{C-x C-s} to save the
-file. Info files produced by the @code{makeinfo} command that is part
-of the Texinfo package always have tags tables to begin with.
-
-@cindex stale tags tables
-@cindex update Info tags table
- Once the Info file has a tags table, you must make certain it is up
-to date. If you edit an Info file directly (as opposed to editing its
-Texinfo source), and, as a result of deletion of text, any node moves back
-more than a thousand characters in the file from the position
-recorded in the tags table, Info will no longer be able to find that
-node. To update the tags table, use the @code{Info-tagify} command
-again.
-
- An Info file tags table appears at the end of the file and looks like
-this:
-
-@example
-^_^L
-Tag Table:
-File: info, Node: Cross-refs^?21419
-File: info, Node: Tags^?22145
-^_
-End Tag Table
-@end example
-
-@noindent
-Note that it contains one line per node, and this line contains
-the beginning of the node's header (ending just after the node name),
-a @samp{DEL} character, and the character position in the file of the
-beginning of the node.
-
-@node Checking, , Tags, Expert Info
-@section Checking an Info File
-
-When creating an Info file, it is easy to forget the name of a node when
-you are making a pointer to it from another node. If you put in the
-wrong name for a node, this is not detected until someone tries to go
-through the pointer using Info. Verification of the Info file is an
-automatic process which checks all pointers to nodes and reports any
-pointers which are invalid. Every @samp{Next}, @samp{Previous}, and
-@samp{Up} is checked, as is every menu item and every cross reference. In
-addition, any @samp{Next} which does not have a @samp{Previous} pointing
-back is reported. Only pointers within the file are checked, because
-checking pointers to other files would be terribly slow. But those are
-usually few.
-
-@findex Info-validate
-To check an Info file, do @kbd{M-x Info-validate} while looking at any
-node of the file with Emacs Info mode.
-
@node GNU Free Documentation License
@appendix GNU Free Documentation License
@include doclicense.texi
Headers in this list that were previously generated by Message will be
deleted before posting. Let's say you post an article. Then you decide
to post it again to some other group, you naughty boy, so you jump back
-to the @code{*post-buf*} buffer, edit the @code{Newsgroups} line, and
+to the @file{*post-buf*} buffer, edit the @code{Newsgroups} line, and
ship it off again. By default, this variable makes sure that the old
generated @code{Message-ID} is deleted, and a new one generated. If
this isn't done, the entire empire would probably crumble, anarchy would
get a summary of all these commands with GNU Emacs online help: use
@kbd{C-h m} (@code{describe-mode}) for a brief summary of commands,
@kbd{?} (@code{mh-help}) for an even briefer summary@footnote{This
-help appears in a buffer called @samp{*MH-E Help*}
+help appears in a buffer called @file{*MH-E Help*}
(@pxref{Miscellaneous}).} (@kbd{C-c ?} in MH-Letter mode), or @kbd{C-h
i} to read this manual via Info. The online help is quite good; try
running @kbd{C-h C-h}. This brings up a list of available help topics,
folders. Otherwise, list the folders that should be searched with the
@samp{Choose Folders} menu item. See @code{mh-recursive-folders-flag}.
-@cindex buffers, @samp{*MH-E Folders*}
-@cindex @samp{*MH-E Folders*}
+@cindex buffers, @file{*MH-E Folders*}
+@cindex @file{*MH-E Folders*}
@findex mh-kill-folder
@findex mh-list-folders
@findex mh-pack-folder
Other commands you can perform on folders include: @kbd{F l}
(@code{mh-list-folders}), to place a listing of all the folders in
-your mail directory in a buffer called @samp{*MH-E Folders*}
+your mail directory in a buffer called @file{*MH-E Folders*}
(@pxref{Miscellaneous}); @kbd{F k} (@code{mh-kill-folder}), to remove
a folder; @kbd{F S} (@code{mh-sort-folder}), to sort the messages by
date (see @command{sortm}(1) to see how to sort by other criteria);
the @kbd{q} (@code{mh-quit}) command. This buries the buffers of the
current MH-E folder and restores the buffers that were present when
you first ran @kbd{M-x mh-rmail}. It also removes any MH-E working
-buffers whose name begins with @samp{ *mh-} or @samp{*MH-E }
+buffers whose name begins with @samp{ *mh-} or @file{*MH-E }
(@pxref{Miscellaneous}). You can later restore your MH-E session by
selecting the @samp{+inbox} buffer or by running @kbd{M-x mh-rmail}
again.
@node Checking Recipients, Sending Message, Sending PGP, Editing Drafts
@section Checking Recipients
-@cindex @samp{*MH-E Recipients*}
+@cindex @file{*MH-E Recipients*}
@cindex @command{whom}
@cindex MH commands, @command{whom}
-@cindex buffers, @samp{*MH-E Recipients*}
+@cindex buffers, @file{*MH-E Recipients*}
@cindex checking recipients
@cindex recipients, checking
@findex mh-check-whom
The command @kbd{C-c C-w} (@code{mh-check-whom}) expands aliases so
you can check the actual address(es) in the alias. A new buffer named
-@samp{*MH-E Recipients*} is created with the output of @command{whom}
+@file{*MH-E Recipients*} is created with the output of @command{whom}
(@pxref{Miscellaneous})@footnote{See the section
@uref{@value{MH-BOOK-HOME}/senove.html#WhaPro, What now?---and the
whatnow Program} in the MH book.}.
@node Sending Message, Killing Draft, Checking Recipients, Editing Drafts
@section Sending a Message
-@cindex buffers, @samp{*MH-E Mail Delivery*}
-@cindex @samp{*MH-E Mail Delivery*}
+@cindex buffers, @file{*MH-E Mail Delivery*}
+@cindex @file{*MH-E Mail Delivery*}
@cindex sending mail
@findex mh-send-letter
@kindex C-c C-c
When you are all through editing a message, you send it with the
command @kbd{C-c C-c} (@code{mh-send-letter}). You can give a prefix
argument (as in @kbd{C-u C-c C-c}) to monitor the first stage of the
-delivery; this output can be found in a buffer called @samp{*MH-E Mail
+delivery; this output can be found in a buffer called @file{*MH-E Mail
Delivery*} (@pxref{Miscellaneous}).
@cindex sending mail
mh-thread.elc} or otherwise find MH-E on your system and ensure that
@file{mh-thread.elc} exists. If you have multiple versions and you
find that one is compiled but the other is not, then go into your
-@samp{*scratch*} buffer in Emacs, enter @kbd{load-path C-j}, and
+@file{*scratch*} buffer in Emacs, enter @kbd{load-path C-j}, and
ensure that the byte-compiled version appears first in the
@code{load-path}. If you find that MH-E is not compiled and you
installed MH-E yourself, please refer to the installation directions
widen the view to all your messages again, use @kbd{S w}
(@code{mh-widen}).
-@cindex buffers, @samp{*MH-E Sequences*}
-@cindex @samp{*MH-E Sequences*}
+@cindex buffers, @file{*MH-E Sequences*}
+@cindex @file{*MH-E Sequences*}
@findex mh-list-sequences
@findex mh-msg-is-in-seq
@kindex S l
42 S s @key{RET}}). Or, you can list all sequences in a selected
folder (default is current folder) with @kbd{S l}
(@code{mh-list-sequences}). The list appears in a buffer named
-@samp{*MH-E Sequences*} (@pxref{Miscellaneous}).
+@file{*MH-E Sequences*} (@pxref{Miscellaneous}).
@cindex MH profile component, @samp{Previous-Sequence}
@cindex @samp{cur} sequence
sequences in the destination folder. If this behavior is not desired,
then turn off the option @code{mh-whitelist-preserves-sequences-flag}.
-@cindex @samp{*MH-E Log*}
-@cindex buffers, @samp{*MH-E Log*}
+@cindex @file{*MH-E Log*}
+@cindex buffers, @file{*MH-E Log*}
@findex call-process
@vindex mh-junk-background
the option @code{mh-junk-background} is used as the @code{display}
argument in the call to @code{call-process}. Therefore, turning on
this option means setting its value to @samp{0}. You can also set its
-value to @samp{t} to direct the programs' output to the @samp{*MH-E
+value to @samp{t} to direct the programs' output to the @file{*MH-E
Log*} buffer; this may be useful for debugging.}
The following sections discuss the various counter-spam measures that
system.
@end ftable
-@cindex buffers, @samp{*MH-E Info*}
+@cindex buffers, @file{*MH-E Info*}
@cindex MH-E version
-@cindex @samp{*MH-E Info*}
+@cindex @file{*MH-E Info*}
@cindex version
@kindex M-x mh-version
One command worth noting is @kbd{M-x mh-version}. You can compare the
version this command prints to the latest release (@pxref{Getting
MH-E}). The output of @kbd{M-x mh-version}, found in a buffer named
-@samp{*MH-E Info*}, should usually be included with any bug report you
+@file{*MH-E Info*}, should usually be included with any bug report you
submit (@pxref{Bug Reports}).
@subheading MH-E Buffers
several other buffers. They are:
@table @samp
-@cindex @samp{*MH-E Folders*}
-@cindex buffers, @samp{*MH-E Folders*}
+@cindex @file{*MH-E Folders*}
+@cindex buffers, @file{*MH-E Folders*}
@findex mh-list-folders
@item *MH-E Folders*
@kindex F l
This buffer contains the output of @kbd{F l} (@code{mh-list-folders}).
@xref{Folders}.
@c -------------------------
-@cindex @samp{*MH-E Help*}
-@cindex buffers, @samp{*MH-E Help*}
+@cindex @file{*MH-E Help*}
+@cindex buffers, @file{*MH-E Help*}
@findex mh-help
@item *MH-E Help*
@kindex ?
This buffer contains the output of @kbd{?} (@code{mh-help}) and
@kbd{C-c ?} in MH-Letter mode. @xref{Using This Manual}.
@c -------------------------
-@cindex @samp{*MH-E Info*}
-@cindex buffers, @samp{*MH-E Info*}
+@cindex @file{*MH-E Info*}
+@cindex buffers, @file{*MH-E Info*}
@item *MH-E Info*
This buffer contains the output of @kbd{M-x mh-version @key{RET}}.
@c -------------------------
-@cindex @samp{*MH-E Log*}
-@cindex buffers, @samp{*MH-E Log*}
+@cindex @file{*MH-E Log*}
+@cindex buffers, @file{*MH-E Log*}
@item *MH-E Log*
This buffer contains the last 100 lines of the output of the various
MH commands.
@c -------------------------
-@cindex @samp{*MH-E Mail Delivery*}
-@cindex buffers, @samp{*MH-E Mail Delivery*}
+@cindex @file{*MH-E Mail Delivery*}
+@cindex buffers, @file{*MH-E Mail Delivery*}
@item *MH-E Mail Delivery*
This buffer contains the transcript of a mail delivery. @xref{Sending
Message}.
@c -------------------------
-@cindex @samp{*MH-E Recipients*}
-@cindex buffers, @samp{*MH-E Recipients*}
+@cindex @file{*MH-E Recipients*}
+@cindex buffers, @file{*MH-E Recipients*}
@findex mh-check-whom
@item *MH-E Recipients*
@kindex C-c C-w
(@code{mh-check-whom}) and is killed when draft is sent.
@xref{Checking Recipients}.
@c -------------------------
-@cindex @samp{*MH-E Sequences*}
-@cindex buffers, @samp{*MH-E Sequences*}
+@cindex @file{*MH-E Sequences*}
+@cindex buffers, @file{*MH-E Sequences*}
@item *MH-E Sequences*
This buffer contains the output of @kbd{S l}
(@code{mh-list-sequences}). @xref{Sequences}.
@c -------------------------
-@cindex @samp{*mh-temp*}
-@cindex buffers, @samp{*mh-temp*}
+@cindex @file{*mh-temp*}
+@cindex buffers, @file{*mh-temp*}
@item *mh-temp*
This is a scratch, ephemeral, buffer used by MH-E functions. Note that
it is hidden because the first character in the name is a space.
the content of the current headline. Feeds can be placed into groups,
which themselves can be placed in groups and so on.
@item Newsticker's @emph{plainview} displays all headlines in a
-single buffer, called @samp{*newsticker*}. The modeline in the
-@samp{*newsticker*} buffer informs you whenever new headlines have
+single buffer, called @file{*newsticker*}. The modeline in the
+@file{*newsticker*} buffer informs you whenever new headlines have
arrived.
@end itemize
In both views clicking mouse-button 2 or pressing @key{RET} on a
in one of your Emacs startup files.
@end table
-A common problem is that the @key{RET} key does @emph{not} indent the
-line to where the new text should go after inserting the newline. This
-is because the standard Emacs convention is that @key{RET} (aka
-@kbd{C-m}) just adds a newline, whereas @key{LFD} (aka @kbd{C-j}) adds a
-newline and indents it. This is particularly inconvenient for users with
-keyboards which do not have a special @key{LFD} key at all; in such
-cases, it is typically more convenient to use @key{RET} as the @key{LFD}
-key (rather than typing @kbd{C-j}).
-
-You can make @key{RET} do this by adding
-@lisp
-(define-key octave-mode-map "\C-m"
- 'octave-reindent-then-newline-and-indent)
-@end lisp
-@noindent
-to one of your Emacs startup files. Another, more generally applicable
-solution is
-@lisp
-(defun RET-behaves-as-LFD ()
- (let ((x (key-binding "\C-j")))
- (local-set-key "\C-m" x)))
-(add-hook 'octave-mode-hook 'RET-behaves-as-LFD)
-@end lisp
-@noindent
-(this works for all modes by adding to the startup hooks, without
-having to know the particular binding of @key{RET} in that mode!).
-Similar considerations apply for using @key{M-RET} as @key{M-LFD}. As
-@email{bwarsaw@@cnri.reston.va.us, Barry A. Warsaw} says in the
-documentation for his @code{cc-mode}, ``This is a very common
-question. @code{:-)} If you want this to be the default behavior,
-don't lobby me, lobby RMS!''
-
The following variables can be used to customize Octave mode.
@vtable @code
@settitle The Org Manual
@set VERSION 8.2.5c
-@c Use proper quote and backtick for code sections in PDF output
-@c Cf. Texinfo manual 14.2
-@set txicodequoteundirected
-@set txicodequotebacktick
-
@c Version and Contact Info
@set MAINTAINERSITE @uref{http://orgmode.org,maintainers web page}
@set AUTHOR Carsten Dominik
* Removing handled entries:: Uninteresting lines can easily be removed.
* Ignoring files:: Telling CVS to ignore generated files.
* Viewing differences:: Commands to @samp{diff} different versions.
-* Invoking Ediff:: Running @samp{ediff} from @samp{*cvs*} buffer.
+* Invoking Ediff:: Running @samp{ediff} from @file{*cvs*} buffer.
* Updating files:: Updating files that Need-update.
* Tagging files:: Tagging files.
* Miscellaneous commands:: Miscellaneous commands.
@samp{cvs -n update} will be run in that directory. (It should contain
files that have been checked out from a CVS archive.) The output from
@code{cvs} will be parsed and presented in a table in a buffer called
-@samp{*cvs*}. It might look something like this:
+@file{*cvs*}. It might look something like this:
@example
Repository : /usr/CVSroot
repository. @xref{Committing changes}. You can also press @kbd{O} to
update any of the files that are marked @samp{Need-Update}. You can
also run @kbd{M-x cvs-update @key{RET}} (bound to @kbd{M-u} in the
-@samp{*cvs*} buffer) to update all the files.
+@file{*cvs*} buffer) to update all the files.
You can then press @kbd{=} to easily get a @samp{diff} between your
modified file and the base version that you started from, or you can
@node Buffer contents
@chapter Buffer contents
@cindex Buffer contents
-@cindex @code{*cvs*} buffer contents
+@cindex @file{*cvs*} buffer contents
The display contains several columns, some of which are optional.
These columns are, from left to right:
If a directory is selected but the command cannot be applied to a
directory, then it will be applied to the set of files under this
-directory which are in the @samp{*cvs*} buffer.
+directory which are in the @file{*cvs*} buffer.
@findex cvs-mode-force-command
@findex cvs-allow-dir-commit
* Removing handled entries:: Uninteresting lines can easily be removed.
* Ignoring files:: Telling CVS to ignore generated files.
* Viewing differences:: Commands to @samp{diff} different versions.
-* Invoking Ediff:: Running @samp{ediff} from @samp{*cvs*} buffer.
+* Invoking Ediff:: Running @samp{ediff} from @file{*cvs*} buffer.
* Updating files:: Updating files that Need-update.
* Tagging files:: Tagging files.
* Miscellaneous commands:: Miscellaneous commands.
@findex cvs-quickdir
@cindex Creating the *cvs* buffer
-Most commands in PCL-CVS require that you have a @samp{*cvs*}
+Most commands in PCL-CVS require that you have a @file{*cvs*}
buffer. The commands that you use to get one are listed below.
For each, a @samp{cvs} process will be run, the output will be parsed by
-PCL-CVS, and the result will be printed in the @samp{*cvs*} buffer (see
+PCL-CVS, and the result will be printed in the @file{*cvs*} buffer (see
@ref{Buffer contents}, for a description of the buffer's contents).
@table @kbd
out.
@item M-x cvs-quickdir
-Populate the @samp{*cvs*} buffer by just looking at the @file{CVS/Entries}
+Populate the @file{*cvs*} buffer by just looking at the @file{CVS/Entries}
files. This is very much like @code{cvs-examine} except that it does
not access the CVS repository, which is a major advantage when the
repository is far away. But of course, it will not be able to detect
@end table
@node Updating the buffer
-@section Updating the @samp{*cvs*} buffer
+@section Updating the @file{*cvs*} buffer
@findex cvs-update
@findex cvs-examine
@findex cvs-status
@findex cvs-mode-examine
@findex cvs-mode-status
-The following commands can be used from within the @samp{*cvs*} buffer
+The following commands can be used from within the @file{*cvs*} buffer
to update the display:
@table @kbd
@item s
Runs @code{cvs-mode-status} on the selected files. When run on the
top-level directory, this is equivalent to @kbd{M-s}, except that
-CVS output will be shown in a @samp{*cvs-info*} buffer that will be
+CVS output will be shown in a @file{*cvs-info*} buffer that will be
put in @samp{cvs-status-mode}.
@end table
@item
After having selected the files you want to commit, you type either
@kbd{c} or @kbd{C} which brings up a special buffer
-@samp{*cvs-commit*}.
+@file{*cvs-commit*}.
@item
You type in the log message describing the changes you're about to
As for the difference between @kbd{c} (i.e., @code{cvs-mode-commit}) and
@kbd{C} (i.e., @code{cvs-mode-commit-setup}) is that the first gets you
-straight to @samp{*cvs-commit*} without erasing it or changing anything
-to its content, while the second first erases @samp{*cvs-commit*}
+straight to @file{*cvs-commit*} without erasing it or changing anything
+to its content, while the second first erases @file{*cvs-commit*}
and tries to initialize it with a sane default (it does that by either
using a template provided by the CVS administrator or by extracting a
relevant log message from a @file{ChangeLog} file).
@item l
Call the command @code{cvs-mode-log} which runs @samp{cvs log} on all
selected files, and show the result in a temporary buffer
-@samp{*cvs-info*} (@pxref{Log View Mode}).
+@file{*cvs-info*} (@pxref{Log View Mode}).
@item s
Call the command @code{cvs-mode-status} which runs @samp{cvs status} on
all selected files, and show the result in a temporary buffer
-@samp{*cvs-info*}.
+@file{*cvs-info*}.
@c Fixme: reinstate when node is written:
@c (@pxref{CVS Status Mode}).
@end table
@item M-x cvs-mode-delete-lock
This command deletes the lock files that
-the @samp{*cvs*} buffer informs you about. You should normally never have to
+the @file{*cvs*} buffer informs you about. You should normally never have to
use this command, since CVS tries very carefully to always remove the
lock files itself.
-You can only use this command when a message in the @samp{*cvs*} buffer tells
+You can only use this command when a message in the @file{*cvs*} buffer tells
you so. You should wait a while before using this command in case
someone else is running a @code{cvs} command.
Bury the PCL-CVS buffer (@code{cvs-bury-buffer}).
@item M-x cvs-mode-quit
-Quit PCL-CVS, killing the @samp{*cvs*} buffer.
+Quit PCL-CVS, killing the @file{*cvs*} buffer.
@end table
@node Log Edit Mode
@item cvs-auto-remove-directories
If this variable is set to any non-@code{nil} value, directories that do
not contain any files to be checked in will not be listed in the
-@samp{*cvs*} buffer.
+@file{*cvs*} buffer.
@item cvs-auto-revert
If this variable is set to any non-@samp{nil} value any buffers you have
@item log-edit-require-final-newline
@c wordy to avoid underfull hbox
When you enter a log message by typing into the
-@samp{*cvs-commit-message*} buffer, PCL-CVS normally automatically
+@file{*cvs-commit-message*} buffer, PCL-CVS normally automatically
inserts a trailing newline, unless there already is one. This behavior
can be controlled via @samp{cvs-commit-buffer-require-final-newline}.
If it is @samp{t} (the default behavior), a newline will always be
@vindex cvs-msg (face)
PCL-CVS adds a few extra features, including menus, mouse bindings, and
-fontification of the @samp{*cvs*} buffer. The faces defined for
+fontification of the @file{*cvs*} buffer. The faces defined for
fontification are listed below:
@table @samp
@table @asis
@item Unexpected output from CVS
Unexpected output from CVS may confuse PCL-CVS@. It will create
-warning messages in the @samp{*cvs*} buffer alerting you to any parse errors.
+warning messages in the @file{*cvs*} buffer alerting you to any parse errors.
If you get these messages, please send a bug report to the email
-addresses listed above. Include the contents of the @samp{*cvs*} buffer, the
-output of the CVS process (which should be found in the @samp{ *cvs-tmp*}
+addresses listed above. Include the contents of the @file{*cvs*} buffer, the
+output of the CVS process (which should be found in the @file{ *cvs-tmp*}
buffer), and the versions of Emacs, PCL-CVS and CVS you are using.
@end table
@cindex server buffer
When you have answered these questions, @code{rcirc} will create a server
-buffer, which will be named something like @code{*irc.freenode.net*},
+buffer, which will be named something like @file{*irc.freenode.net*},
and a channel buffer for each of the channels you wanted to join.
@kindex RET
summary-mode, or the analyzer.
@deffn Command semanticdb-create-ebrowse-database dir
-Create an @var{ebrowse} database for directory @var{dir}.
-The database file is stored in ~/.semanticdb, or whichever directory
-is specified by @code{semanticdb-default-system-save-directory}.
+Create an Ebrowse database for directory @var{dir}. The database file
+is stored in ~/.semanticdb, or whichever directory is specified by
+@code{semanticdb-default-system-save-directory}.
@end deffn
@node Idle Scheduler
describing the context at @var{pos} (@pxref{Top,,,eieio,EIEIO
manual}).
-When called interactively, this displays a @samp{*Semantic Context
+When called interactively, this displays a @file{*Semantic Context
Analysis*} buffer containing a summary of the context at point.
@end deffn
@noindent
-The Prefix section of the @samp{*Semantic Context Analysis*} buffer
+The Prefix section of the @file{*Semantic Context Analysis*} buffer
lists the tags based on the text at point. If it shows only a simple
string, the Semantic was unable to identify what the data type was.
Define a new decoration style with @var{name}.
@var{doc} is a documentation string describing the decoration style @var{name}.
It is appended to auto-generated doc strings.
-An Optional list of @var{flags} can also be specified. Flags are:
+An optional list of @var{flags} can also be specified. Flags are:
@code{:enabled} <value> - specify the default enabled value for @var{name}.
to learn more about how @semantic{} works.
@menu
-* Parser code :: Code used for the parsers
-* Tag handling :: Code used for manipulating tags
-* Semanticdb Internals :: Code used in the semantic database
-* Analyzer Internals :: Code used in the code analyzer
-* Tools :: Code used in user tools
-* Tests :: Code used for testing
+* Parser code:: Code used for the parsers
+* Tag handling:: Code used for manipulating tags
+* Semanticdb Internals:: Code used in the semantic database
+* Analyzer Internals:: Code used in the code analyzer
+* Tools:: Code used in user tools
+* Tests:: Code used for testing
@end menu
@node Parser code
@vindex smtpmail-debug-info
The variable @code{smtpmail-debug-info} controls whether to print
the SMTP protocol exchange in the minibuffer, and retain the entire
-exchange in a buffer @samp{*trace of SMTP session to @var{server}*},
+exchange in a buffer @file{*trace of SMTP session to @var{server}*},
where @var{server} is the name of the mail server to which you send
mail.
% Load plain if necessary, i.e., if running under initex.
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
%
-\def\texinfoversion{2014-02-09.15}
+\def\texinfoversion{2014-02-16.16}
%
% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
% complicated, when \tex is in effect and \{ is a \delimiter again.
% We can't use \lbracecmd and \rbracecmd because texindex assumes
% braces and backslashes are used only as delimiters. Perhaps we
- % should define @lbrace and @rbrace commands a la @comma.
+ % should use @lbracechar and @rbracechar?
\def\{{{\tt\char123}}%
\def\}{{\tt\char125}}%
%
% @end macro
% ...
% @funindex commtest
- %
- % The above is not enough to reproduce the bug, but it gives the flavor.
+ % This is not enough to reproduce the bug, but it gives the flavor.
%
% Sample whatsit resulting:
% .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}}
\let\xeatspaces = \eatspaces
}
+% For testing: output @{ and @} in index sort strings as \{ and \}.
+\newif\ifusebracesinindexes
+
% \indexnofonts is used when outputting the strings to sort the index
% by, and when constructing control sequence names. It eliminates all
% control sequences and just writes whatever the best ASCII sort string
% Unfortunately, texindex is not prepared to handle braces in the
% content at all. So for index sorting, we map @{ and @} to strings
% starting with |, since that ASCII character is between ASCII { and }.
- \def\{{|a}%
- \def\lbracechar{|a}%
+ \ifusebracesinindexes
+ \def\lbracechar{\lbracecmd}%
+ \def\rbracechar{\rbracecmd}%
+ \else
+ \def\lbracechar{|a}%
+ \def\rbracechar{|b}%
+ \fi
+ \let\{=\lbracechar
+ \let\}=\rbracechar
%
- \def\}{|b}%
- \def\rbracechar{|b}%
%
% Non-English letters.
\def\AA{AA}%
@defopt url-debug
@cindex debugging
Specifies the types of debug messages which are logged to
-the @code{*URL-DEBUG*} buffer.
+the @file{*URL-DEBUG*} buffer.
@code{t} means log all messages.
A number means log all messages and show them with @code{message}.
It may also be a list of the types of messages to be logged.
to be in vi mode whenever Emacs starts up, you can include the following
line in your @file{.emacs} file instead of the above line:
@example
-(setq term-setup-hook 'vip-mode)
+(add-hook 'emacs-startup-hook 'vip-mode)
@end example
@noindent
(@xref{Vi Mode}, for the explanation of vi mode.)
@kindex 011 TAB (@code{indent-for-tab-command})
Indent line for current major mode (@code{indent-for-tab-command}).
@item C-j
+@c FIXME: This should be `electric-indent-just-newline' since GNU Emacs 24.4.
@kindex 012 @kbd{C-j} (@code{newline-and-indent})
Insert a newline, then indent according to mode (@code{newline-and-indent}).
@item C-k
@end lisp
When Emacs first comes up, if you have not specified a file on the
-command line, it will show the @samp{*scratch*} buffer, in the
+command line, it will show the @file{*scratch*} buffer, in the
@samp{Lisp Interaction} mode. After you invoke Viper, you can start
editing files by using @kbd{:e}, @kbd{:vi}, or @kbd{v} commands.
(@xref{File and Buffer Handling}, for more information on @kbd{v} and other
(set-face-background viper-replace-overlay-face "yellow")
@end smallexample
For a complete list of colors available to you, evaluate the expression
-@code{(x-defined-colors)}. (Type it in the buffer @code{*scratch*} and then
+@code{(x-defined-colors)}. (Type it in the buffer @file{*scratch*} and then
hit the @kbd{C-j} key.
@item viper-replace-overlay-cursor-color "Red"
@end deffn
The verbose report is printed in the temporary buffer
-@code{*wisent-log*} when running interactively, or in file
+@file{*wisent-log*} when running interactively, or in file
@file{wisent.output} when running in batch mode. Different
reports are separated from each other by a line like this:
@end group
@end example
-The @samp{*wisent-log*} buffer details things!
+The @file{*wisent-log*} buffer details things!
The first section reports conflicts that were solved using precedence
and/or associativity:
this by customizing @code{woman-imenu-generic-expression}.
WoMan is configured not to replace spaces in an imenu
-@code{*Completion*} buffer. For further documentation on the use of
+@file{*Completion*} buffer. For further documentation on the use of
imenu, such as menu sorting, see the source file @file{imenu.el}, which
is distributed with GNU Emacs.
@vtable @code
@item woman-show-log
A boolean value that defaults to @code{nil}. If non-@code{nil} then show the
-@code{*WoMan-Log*} buffer if appropriate, i.e., if any warning messages
+@file{*WoMan-Log*} buffer if appropriate, i.e., if any warning messages
are written to it. @xref{Log, , The *WoMan-Log* Buffer}.
@item woman-pre-format-hook
@item
use @kbd{M-x report-emacs-bug} to send a bug report.
Please include the entry from the
-@code{*WoMan-Log*} buffer relating to the problem file, together with
+@file{*WoMan-Log*} buffer relating to the problem file, together with
a brief description of the problem. Please indicate where you got the
man source file from, but do not send it unless asked to send it.
@end enumerate
+2014-03-14 Rüdiger Sonderfeld <ruediger@c-plusplus.de>
+
+ * tutorials/TUTORIAL.de: Adapt to recent changes in TUTORIAL.
+ Thanks to Jorgen Schäfer for help with the translation.
+
+2014-03-10 Paul Eggert <eggert@cs.ucla.edu>
+
+ Fix "\" problem in tutorials by using natural-language quotes.
+ * tutorials/TUTORIAL, tutorials/TUTORIAL.cs, tutorials/TUTORIAL.eo:
+ * tutorials/TUTORIAL.es, tutorials/TUTORIAL.it, tutorials/TUTORIAL.ja:
+ * tutorials/TUTORIAL.ko, tutorials/TUTORIAL.nl, tutorials/TUTORIAL.pl:
+ * tutorials/TUTORIAL.pt_BR, tutorials/TUTORIAL.ro:
+ * tutorials/TUTORIAL.ru, tutorials/TUTORIAL.sk, tutorials/TUTORIAL.sv:
+ * tutorials/TUTORIAL.th:
+ Avoid using ` for natural-language quotes. Instead, work around
+ the problem with "\" by using non-" quotation marks appropriate
+ for the natural language in question, e.g., «...» for Spanish.
+ For English “...” could be used, but use '...' instead so that
+ TUTORIAL continues to be encoded in ASCII.
+
+2014-03-10 Bastien Guerry <bzg@gnu.org>
+
+ * tutorials/TUTORIAL.fr: Adapt to the recent changes in TUTORIAL.
+
+2014-03-08 Luis Felipe López Acevedo <felipe.lopac@gmail.com> (tiny change)
+
+ * tutorials/TUTORIAL.es: Fix typos. (Bug#116707)
+
+2014-03-08 Eli Zaretskii <eliz@gnu.org>
+
+ * tutorials/TUTORIAL.he: Adapt to the recent changes in TUTORIAL.
+
+2014-03-06 Juanma Barranquero <lekktu@gmail.com>
+
+ * tutorials/TUTORIAL.es: Adapt to change in English language tutorial.
+
+2014-03-06 Glenn Morris <rgm@gnu.org>
+
+ * tutorials/TUTORIAL: Mention electric behavior of RET.
+
+2014-02-25 Glenn Morris <rgm@gnu.org>
+
+ * refcards/vipcard.tex: Hook fix.
+
2014-02-23 Juanma Barranquero <lekktu@gmail.com>
* NEWS: Fix references to ?« and ?» that got mangled somehow.
Rename to \versionemacs, same as all the other refcards.
* refcards/Makefile (ENVADD): New variable.
(sk-dired-ref.pdf, sk-survival.pdf, pl-refcard.pdf)
- (%.pdf, %,dvi, sk-dired-ref.dvi, sk-survival.dvi, pl-refcard.dvi):
+ (%.pdf, %.dvi, sk-dired-ref.dvi, sk-survival.dvi, pl-refcard.dvi):
Depend on emacsver.tex. Add "." to TEXINPUTS for TeX commands.
2012-09-16 Paul Eggert <eggert@cs.ucla.edu>
\f
* Installation Changes in Emacs 24.4
+---
** Emacs can now be compiled with ACL support.
This happens by default if a suitable support library is found at
build time, like libacl on GNU/Linux. To prevent this, use the
-configure option `--disable-acl'.
-FIXME? Should be --without-acl?
+configure option `--disable-acl'. See below for related features.
+---
** Emacs can now be compiled with file notification support.
This happens by default if a suitable system library is found at
build time. To prevent this, use the configure option
`--without-file-notification'. See below for file-notify features.
-FIXME? This feature is not available for the Nextstep port. (?)
+This feature is not available for the Nextstep port.
+
+---
+** Emacs can now be compiled with zlib support.
+This happens by default if zlib is present, which it normally is.
+To prevent this, use the configure option `--without-zlib'.
+This provides the function `zlib-decompress-region'; see below for details.
---
** The configure option `--without-compress-info' has been generalized,
** Directories passed to configure option `--enable-locallisppath' are
no longer created during installation.
-** Emacs can be compiled with zlib support.
-If this library is present (which it normally is on most systems), the
-function `zlib-decompress-region' becomes available, which can
-decompress gzip- and zlib-format compressed data.
-
---
** Emacs for NS (Mac OS X, GNUstep) can be built with ImageMagick support.
-This requires pkg-config to be available at configure time.
+This requires pkg-config to be available at build time.
\f
* Startup Changes in Emacs 24.4
\f
* Changes in Emacs 24.4
++++
+** New function `zlib-decompress-region', which decompresses gzip- and
+zlib-format compressed data using built-in zlib support, if available.
+
+++
** New option `gnutls-verify-error', if non-nil, means that Emacs
should reject SSL/TLS certificates that GnuTLS determines as invalid.
the *Messages* buffer should call the function `messages-buffer' to do
so and set up the mode.
-** Emacs now supports ACLs (access control lists).
++++
+** Emacs can now support ACLs (access control lists).
+This requires a suitable support library to be found at build time.
+On GNU/Linux, the POSIX ACL interface is used via libacl.
+On MS-Windows, the NT Security APIs are used to emulate the POSIX interface.
+
+++
*** Emacs preserves the ACL entries of files when backing up.
+++
*** New functions `file-acl' and `set-file-acl' get and set the ACL
-entries of a file. On GNU/Linux, the POSIX ACL interface is used via
-libacl. On MS-Windows, the NT Security APIs are used to emulate the
-POSIX ACL interfaces.
+entries of a file.
** Multi-monitor support has been added.
++++
*** New functions `display-monitor-attributes-list' and
`frame-monitor-attributes' can be used to obtain information about
each physical monitor on multi-monitor setups.
++++
*** The functions `display-pixel-width' and `display-pixel-height' now
behave consistently among the platforms: they return the pixel width
or height for all physical monitors associated with the given display
-as if they were on X11. To get information for each physical
+as if they were on X. To get information for each physical
monitor, use the new functions above. Similar notes also apply to
`x-display-pixel-width', `x-display-pixel-height', `display-mm-width',
`display-mm-height', `x-display-mm-width', and `x-display-mm-height'.
** Frame and window changes
++++
+*** The function `window-in-direction' introduced in Emacs 24.1 now
+takes additional arguments for specifying a reference point, wrapping
+selection around frame borders, and specifying ways to select the
+minibuffer window.
+
+++
*** New commands `toggle-frame-fullscreen' and `toggle-frame-maximized',
bound to <f11> and M-<f10>, respectively.
window sizes now have an additional argument that allows changes to apply,
or values to be returned, in pixels instead of lines/columns.
++++
+*** The functions `window-body-height' and `window-body-width' now never
+count partially visible lines or columns if called with a nil PIXELWISE
+argument.
+
*** Emacs can now draw dividers between adjacent windows. To put
dividers between side-by-side/vertically stacked windows customize the
frame parameters `right-divider-width' and `bottom-divider-width' to
`fit-frame-to-buffer' and `fit-window-to-buffer' to accurately fit a
window to its buffer as it will be displayed.
-*** `fit-window-to-buffer' can now resize windows horizontally.
+*** `fit-window-to-buffer' can now resize windows in both dimensions.
This behavior is controlled by the new option
-`fit-window-to-buffer-horizontally'.
+`fit-window-to-buffer-horizontally'. The new option
+`fit-frame-to-buffer' allows to fit the window's frame to its buffer.
-*** `fit-frame-to-buffer' can now fit frames in both directions.
-This behavior is controlled by the option `fit-frame-to-buffer' which
-tells in which direction(s) the frame shall be fit. The new options
-`fit-frame-to-buffer-margins' and `fit-frame-to-buffer-sizes' allow to
+*** `fit-frame-to-buffer' now fits frames in both dimensions. The new
+options `fit-frame-to-buffer-margins' and `fit-frame-to-buffer-sizes'
control the size of the frame and its position on screen.
*** Temp Buffer Resize Mode can now adjust height and width of windows
and as such superfluous. After being reimplemented in Lisp, its
interactive form was mistakenly retained.
++++
*** The functions `window-size' and `window-total-size' now have an
optional argument to return a rounded size value.
++++
*** `window-state-put' now allows to put a window state into internal
windows too.
using the scroll bar (i.e. dragging the thumb down even when the end
of the buffer is visible).
++++
*** New basic action function `display-buffer-in-previous-window' has
`display-buffer' display a buffer in a window previously showing that
buffer.
++++
*** New basic action function `display-buffer-at-bottom' has
`display-buffer' choose or make a window at the bottom of the selected
frame.
+*** New display action function `display-buffer-no-window' to not
+display the buffer in a window.
+
+*** New display action alist entry `allow-no-window' to indicate the
+caller of `display-buffer' is ready to handle the case of not
+displaying the buffer in a window.
+
** Lisp evaluation changes
+++
*** `eval-defun' on an already defined defcustom calls the :set function,
** Indentation changes
+*** `electric-indent-mode' is now enabled by default.
+E.g., typing RET reindents the current line and indents the new line.
+`C-j' inserts a newline but does not indent.
+
++++
+*** New buffer-local `electric-indent-local-mode'.
+
+++
*** The behavior of `C-x TAB' (`indent-rigidly') has changed.
When invoked without a prefix argument, it now activates a transient
the text indentation in the region. Typing any other key resumes
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
+++
** Uniquify is enabled by default, with `post-forward-angle-brackets' style.
++++
** New command `C-x SPC' (`rectangle-mark-mode') makes a rectangular region.
Most commands are still unaware of it, but kill/yank do work on the rectangle.
This searches the region for identical lines, and removes all but one
copy of each repeated line. The lines need not be sorted.
++++
+** `blink-matching-paren' now only highlights the matching open-paren
+by default, instead of moving cursor. Set this variable to `jump' to
+enable the old behavior.
+
\f
* Changes in Specialized Modes and Packages in Emacs 24.4
*** New Lisp debugger command `v' (`debugger-toggle-locals') toggles the
display of local variables of the current stack frame.
++++
*** The Lisp debugger's `e' command (`debugger-eval-expression') now includes
the lexical environment when evaluating the code in the context at point
(and so allows you to access lexical variables).
after `desktop-auto-save-timeout'. To disable this, customize that option
to nil (or zero).
-*** `desktop-restore-frames', enabled by default, allows saving and
-restoring the frame/window configuration (frameset). Additional options
-`desktop-restore-in-current-display', `desktop-restore-reuses-frames'
-and `desktop-restore-forces-onscreen' offer further customization.
++++
+*** Desktop now saves and restores the frame/window configuration.
+To disable this, set `desktop-restore-frames' to nil.
+See also related options `desktop-restore-reuses-frames',
+`desktop-restore-in-current-display', and `desktop-restore-forces-onscreen'.
+++
** New Dired minor mode `dired-hide-details-mode' toggles whether details,
+++
** Octave mode
-*** Font locking for texinfo comments and new keywords.
+*** Font locking for Texinfo comments and new keywords.
*** Completion in Octave file buffers.
to filter the list of packages by a keyword.
+++
-*** In the `describe-package' buffer, there are now buttons listing the
+*** In the `describe-package' buffer, there are now buttons listing the
keywords related to the package. Click on a button to see other packages
related to that keyword.
*** `C-x 8 RET' in Isearch mode reads a character by its Unicode name
and adds it to the search string.
++++
*** `M-s i' in Isearch mode toggles whether search matches invisible text.
++++
*** `query-replace' skips invisible text when `search-invisible' is nil,
and opens overlays with hidden text when `search-invisible' is `open'.
---
*** `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
-with an indented sample file.
+** SMIE
+
++++
+*** You can customize the SMIE indentation of a mode via `smie-config'.
+The command `smie-config-guess' can help you derive the appropriate
+indentation settings, if you provide it with an indented sample file.
+Use `smie-config-save' to save the result.
+
++++
+*** You can customize the SMIE indentation of a file by adding an entry to
+the file's local variables of the form: `eval: (smie-config-local '(RULES))'.
+
++++
+*** New commands `smie-config-show-indent' and `smie-config-set-indent'.
---
** SQL mode
+++
** New functions `special-form-p' and `macrop'.
++++
** New macro `define-alternatives' can be used to define generic commands.
Generic commands are interactive functions whose implementation can be
selected among several alternatives, as a matter of user preference.
** Completion changes
-*** The separator for `completing-read-multiple' can now be a regexp.
-The default separator has been changed to allow surrounding spaces
+---
+*** The separator used by `completing-read-multiple' is now a regexp.
+The default `crm-separator' has been changed to allow surrounding spaces
around the comma.
-*** The `common-substring' arg of `display-completion-list' is obsolete.
-Either use `completion-all-completions', which returns highlighted
-strings (including for partial or substring completion), or call
-`completion-hilit-commonality' to add the highlight.
++++
+*** The `common-substring' argument of `display-completion-list',
+which has been documented as obsolete since Emacs 23.1, is now _really_
+obsolete, and no longer advertised. Instead either call
+`completion-hilit-commonality' to add the highlighting; or use
+`completion-all-completions', which returns highlighted strings.
++++
*** New function `completion-table-with-cache' is a wrapper for
`completion-table-dynamic' that caches the result of the last lookup.
++++
*** New function `completion-table-merge' to combine several
completion tables by merging their completions.
++++
** New minor modes `prettify-symbols-mode' and `global-prettify-symbols-mode'
-let you enable symbol prettification (replacing a string like "lambda" with
-the Greek lambda character).
+display specified symbols as composed characters. E.g., in Emacs Lisp mode,
+this replaces the string "lambda" with the Greek lambda character.
** Terminal changes
display or frame whenever a mouse is supported on that display or
frame.
-*** New hook `tty-setup-hook'.
-
-** Window Handling
-
-*** New display action function `display-buffer-no-window' to not
-display the buffer in a window.
++++
+*** New hook `tty-setup-hook', run at the end of initializing a text terminal.
-*** New display action alist entry `allow-no-window' to indicate the
-caller of `display-buffer' is ready to handle the case of not
-displaying the buffer in a window.
++++
+*** The hook `term-setup-hook' is obsolete. It is entirely equivalent
+to `emacs-startup-hook'. See also the new `tty-setup-hook'.
++++
** New hook `pre-redisplay-function'.
+++
*** `generic-make-keywords-list'
*** `get-upcase-table' (use `case-table-get-table' instead).
++++
** `with-wrapper-hook' is obsoleted by `add-function'.
The few hooks that used with-wrapper-hook are replaced as follows:
*** `abbrev-expand-function' obsoletes `abbrev-expand-functions'.
** Face changes
++++
*** The function `face-spec-set' is now like `setq' for face specs.
Its third arg now accepts values specifying a face spec type (defface,
custom, or override spec), and the relevant spec is set accordingly.
*** New function `add-face-text-property', which can be used to
conveniently prepend/append new face properties.
+---
*** Face specs set via Custom themes now replace the `defface' spec
-rather than inheriting from it (as do face specs set via Customize).
+rather than inheriting from it. In other words, setting a face via a
+theme now behaves like setting it via Customize: you only need to
+specify the attributes that you want, you don't need to unset those
+that you don't want.
+---
*** New face characteristic (supports :underline (:style wave))
specifies whether or not the terminal can display a wavy line.
include the line:
\hskip 5ex
-\kbd{(setq term-setup-hook 'vip-mode)}
+\kbd{(add-hook 'emacs-startup-hook 'vip-mode)}
in your \kbd{.emacs} file.
Or, you can put the following alias in your \kbd{.cshrc} file.
graphical display, little curved arrows appear in the narrow spaces on
each side of the text area (the left and right "fringes"), to indicate
where a line has been continued. If you're using a text terminal, the
-continued line is indicated by a backslash ("\") on the rightmost
+continued line is indicated by a backslash ('\') on the rightmost
screen column.
>> Insert text until you reach the right margin, and keep on inserting.
>> Type <Return> to reinsert the Newline you deleted.
+The <Return> key is special, in that pressing it may do more than
+just insert a Newline character. Depending on the surrounding text,
+it may insert whitespace after the Newline character, so that when
+you start typing on the newly created line, the text lines up with
+that on the previous line. We call this behavior (where pressing a
+key does more than simply inserting the relevant character) "electric".
+
+>> Here is an example of <Return> being electric.
+ Type <Return> at the end of this line.
+
+You should see that after inserting the Newline, Emacs inserts spaces
+so that the cursor moves under the "T" of "Type".
+
Remember that most Emacs commands can be given a repeat count;
this includes text characters. Repeating a text character inserts
it several times.
C-k kills the line itself, and makes all the other lines move up. C-k
treats a numeric argument specially: it kills that many lines AND
their contents. This is not mere repetition. C-u 2 C-k kills two
-lines and their newlines; typing C-k twice would not do that.
+lines and their Newlines; typing C-k twice would not do that.
You can yank the killed text either at the same place where it was
killed, or at some other place in the text you are editing, or even in
back to the same Emacs session afterward. When Emacs is running on a
text terminal, C-z "suspends" Emacs; that is, it returns to the shell
but does not destroy the Emacs job. In the most common shells, you
-can resume Emacs with the `fg' command or with `%emacs'.
+can resume Emacs with the "fg" command or with "%emacs".
The time to use C-x C-c is when you are about to log out. It's also
the right thing to use to exit an Emacs invoked for a quick edit, such
you want to search for. <Return> terminates a search.
>> Now type C-s to start a search. SLOWLY, one letter at a time,
- type the word 'cursor', pausing after you type each
+ type the word "cursor", pausing after you type each
character to notice what happens to the cursor.
Now you have searched for "cursor", once.
>> Type C-s again, to search for the next occurrence of "cursor".
Did you see what happened? Emacs, in an incremental search, tries to
go to the occurrence of the string that you've typed out so far. To
-go to the next occurrence of 'cursor' just type C-s again. If no such
+go to the next occurrence of "cursor" just type C-s again. If no such
occurrence exists, Emacs beeps and tells you the search is currently
"failing". C-g would also terminate the search.
>> Type C-x 1 to delete the help window.
C-h i Read included Manuals (a.k.a. Info). This command puts
- you into a special buffer called `*info*' where you
+ you into a special buffer called "*info*" where you
can read manuals for the packages installed on your system.
Type m emacs <Return> to read the Emacs manual.
If you have never before used Info, type ? and Emacs
Please read the file COPYING and then do give copies of GNU Emacs to
your friends. Help stamp out software obstructionism ("ownership") by
using, writing, and sharing free software!
-
Když se řádek textu zvětší natolik, že přesáhne jeden řádek obrazovky,
je zobrazen na více řádcích obrazovky. Řádek textu, který pokračuje na
-dalším řádku obrazovky, je indikován zpětným lomítkem ("\") na pravém
+dalším řádku obrazovky, je indikován zpětným lomítkem („\“) na pravém
okraji obrazovky.
>> Vkládejte text, až dosáhnete pravého okraje, a pokračujte ve vkládání.
Na systémech, které to umožňují, C-z Emacs "pozastaví"; tzn. vrátí vás
do shellu, avšak Emacs neukončí. V nejběžnějších shellech se můžete do
-Emacsu vrátit příkazem `fg' nebo pomocí `%emacs'.
+Emacsu vrátit příkazem "fg" nebo pomocí "%emacs".
Na systémech, které pozastavování procesů nemají implementováno, C-z
vytvoří subshell běžící pod Emacsem, aby vám dal šanci spustit jiné
programy a pak se do Emacsu vrátit; neprovede tedy pravé opuštění
Emacsu. V tom případě je obvyklou cestou návratu ze subshellu do Emacsu
-shellovský příkaz `exit'.
+shellovský příkaz "exit".
Chvíle pro použití C-x C-c nastane, když se chystáte odhlásit ze
systému. Správné je to také při ukončování Emacsu vyvolaného poštovním
a čeká, až mu zadáte, co chcete hledat. <RET> hledání ukončí.
>> Nyní zahajte hledání stiskem C-s. POMALU, písmeno po písmenu, pište
- slovo 'kurzor'. Po každém písmenu si všimněte, co se děje s kurzorem.
+ slovo "kurzor". Po každém písmenu si všimněte, co se děje s kurzorem.
Teď jste vyhledali "kurzor" poprvé.
>> Stiskněte C-s znovu, abyste nalezli další výskyt "kurzor".
>> Nyní čtyřikrát stiskněte <Delete> a pozorujte, jak se kurzor
Viděli jste, co se stalo? Emacs se v inkrementálním hledání pokouší
přejít na další výskyt řetězce, který jste dosud napsali. Chcete-li
-přejít na další výskyt 'kurzor', jednoduše stiskněte C-s znovu.
+přejít na další výskyt "kurzor", jednoduše stiskněte C-s znovu.
Jestliže už žádný takový výskyt není, Emacs pípne a řekne vám, že
hledání momentálně "selhává", C-g hledání ukončí.
>> Stiskněte C-x 1 pro smazání okna s nápovědou.
C-h i Čtení on-line manuálů (též Info). Tento příkaz
- vás přepne do speciálního bufferu s názvem `*info*',
+ vás přepne do speciálního bufferu s názvem "*info*",
ve kterém můžete číst on-line manuály pro balíky
nainstalované na vašem systému. Pokud stisknete
m emacs <Return> můžete si například přečíst manuál
>> Geben Sie <Return> ein, um wieder ein Zeilenvorschubzeichen
einzufügen.
+Die <Return>-Taste ist insofern besonders, als dass sie mehr bewirken
+kann, als einfach ein Zeilenvorschubszeichen einzufügen. Abhängig vom
+umgebenden Text können zusätzliche Leerzeichen eingefügt werden, damit
+der neue Zeilenanfang bündig zur vorherigen Zeile ist. Wir nennen
+dieses Verhalten (wenn das Drücken einer Taste mehr bewirkt, als nur
+das entsprechende Zeichen einzufügen) »electric«.
+
+>> Ein Beispiel für dieses Verhalten von <Return>.
+ Drücken Sie <Return> am Ende dieser Zeile.
+
+Sie sollten sehen, dass sich nach dem Einfügen des
+Zeilenvorschubzeichen der Cursor unter dem »D« von »Drücken« befindet.
+
Denken Sie daran, dass die meisten Emacs-Befehle mit einem
Wiederholungszähler aufgerufen werden können. Tun Sie das mit einem
Textzeichen, dann wird es entsprechend dem numerischen Parameter
kopio por vi.
Kiam linio da teksto iĝas pli longa ol la ekrana linio, la teksta
-linio transiras sur la sekvan ekranan linion. Retroklino ("\") -- aŭ,
+linio transiras sur la sekvan ekranan linion. Retroklino (“\”) -- aŭ,
en grafika fenestrosistemo, kurba sageto -- en la dekstra marĝeno
indikas tian transiron.
pantalla; esto provee una continuidad para que pueda seguir leyendo el
texto.
-Lo primero que necesita saber es como moverse de un lugar a otro en el
-texto. Ya sabe como avanzar una pantalla, con C-v. Para retroceder
+Lo primero que necesita saber es cómo moverse de un lugar a otro en el
+texto. Ya sabe cómo avanzar una pantalla, con C-v. Para retroceder
una pantalla teclee M-v (mantenga oprimida la tecla META y teclee v, o
teclee <ESC>v si no tiene las teclas META, EDIT o ALT).
Luego teclee C-l. Encuentre el cursor otra vez y note que el mismo
texto está todavía cerca del cursor, pero ahora está en el centro
de la pantalla.
- Si vuelve teclear C-l, ese texto se moverá al principio de la
+ Si vuelve a teclear C-l, ese texto se moverá al principio de la
pantalla. Al teclear C-l otra vez, se moverá al final de la
pantalla.
C-f puede moverse a través de una nueva línea igual que C-b.
->> Teclee algunos C-b más para que sienta por donde se encuentra el
+>> Teclee algunos C-b más para que sienta por dónde se encuentra el
cursor.
Luego teclee C-f para regresar al final de la línea.
Luego teclee otro C-f más para moverse a la línea siguiente.
observe lo que sucede.
Si moverse por caracteres es muy lento, puede moverse por palabras.
-M-f (META-f) mueve adelante una palabra y M-b mueva atrás una palabra.
+M-f (META-f) mueve adelante una palabra y M-b mueve atrás una palabra.
>> Teclee algunos M-f y M-b
----------
Emacs puede tener varias "ventanas", cada una mostrando su propio texto.
-Explicaremos después como usar múltiples ventanas. Ahora mismo
+Explicaremos después cómo usar múltiples ventanas. Ahora mismo
queremos explicar cómo deshacerse de ventanas adicionales y volver a
la edición básica en una ventana. Es sencillo:
flechas curvas en las estrechas franjas vacías (los "márgenes" derecho
e izquierdo) a cada lado del área de texto, para indicar que la línea
continúa. Si está utilizando una terminal, la continuación se señala
-mediante una barra invertida ("\") en la última columna de la derecha.
+mediante una barra invertida («\») en la última columna de la derecha.
>> Inserte texto hasta que llegue al margen derecho, y siga
insertando. Verá aparecer una línea de continuación.
>> Teclee <Return> para reinsertar la nueva línea que borró.
+La tecla <Return> es especial, porque, aparte de insertar un carácter
+de nueva línea, puede tener otros efectos. En función del texto
+circundante, puede además insertar espacio en blanco tras el carácter
+de fin de línea, de forma que, al seguir tecleando en la línea recién
+creada, el texto que tecleamos quede alineado con el de la línea
+anterior. Este comportamiento (que la pulsación de una tecla no solo
+inserte el carácter correspondiente) se denomina "eléctrico".
+
+>> Veamos un ejemplo de comportamiento "eléctrico" de <Return>
+ Teclee <Return> al final de esta línea.
+
+Fíjese que, tras insertar el carácter de nueva línea, Emacs inserta
+también espacios para que el cursor se sitúe bajo la "T" de "Teclee".
+
Recuerde que a la mayoría de los comandos de Emacs se les puede dar un
factor de repetición; esto incluye los caracteres de texto. Repetir
un carácter de texto lo inserta varias veces.
que pueden quitar mucho texto lo eliminan (para que pueda pegarlo de
nuevo) mientras que los comandos que quitan solo un carácter, o solo
líneas en blanco y espacios, borran (y por tanto no se puede pegar lo
-borrado). Si se normalmente, sin pasar un argumento, <DEL> y C-d
+borrado). Si se usa normalmente, sin pasar un argumento, <DEL> y C-d
borran. Con un argumento, eliminan.
>> Mueva el cursor al comienzo de una línea que no esté vacía.
punto.
Una cosa especial acerca del comando para encontrar un archivo, es que
-tendrá que decir que nombre de archivo desea. Decimos que el comando
+tendrá que decir qué nombre de archivo desea. Decimos que el comando
"lee un argumento" (en este caso, el argumento es el nombre del
archivo). Después de teclear el comando:
---------
Si visita un segundo archivo con C-x C-f, el primer archivo permanece
-dentro de Emacs. Puede volver a el encontrándolo de nuevo con C-x
+dentro de Emacs. Puede volver a él encontrándolo de nuevo con C-x
C-f. De esta forma puede mantener un gran número de archivos dentro
de Emacs.
Algunos buffers no corresponden a un archivo. El buffer llamado
"*Buffer List*", que contiene la lista de buffers que ha creado con
C-x C-b, no tiene archivo. Este buffer TUTORIAL.es al principio no
-tenía archivo, pero ahora ya sí, porque en la sección anterior tecleó
+tenía archivo, pero ahora sí, porque en la sección anterior tecleó
C-x C-s y lo guardó en un archivo.
El buffer llamado "*Messages*" tampoco tiene un archivo
C-x s Guardar algunos buffers
C-x s le pregunta sobre cada buffer que contenga cambios que no haya
-guardada. Le pregunta, por cada buffer, si quiere guardarlo o no.
+guardado. Le pregunta, por cada buffer, si quiere guardarlo o no.
>> Inserte una línea de texto, luego teclee C-x s.
Debería preguntarle si desea guardar el buffer llamado TUTORIAL.es.
ejecutándose en una terminal, C-z "suspende" Emacs; esto es, se
regresa al intérprete de comandos pero no se destruye Emacs. En los
intérpretes de comandos más comunes, puede reanudar Emacs con el
-comando `fg' o con `%emacs'.
+comando "fg" o con "%emacs".
El momento para usar C-x C-c es cuando está listo para salir del
sistema. Es además el paso correcto para salir de un Emacs invocado
No se preocupe, ninguno de los comandos de Emacs que ha aprendido
cambia de manera significativa. Pero puede observar que M-f y M-b
-tratan los apóstrofes como parte de las palabras. Previamente, en
+tratan los apóstrofos como parte de las palabras. Previamente, en
modo Fundamental, M-f y M-b trataban los apóstrofes como separadores
de palabras.
>> Use C-l C-l para traer esta línea a la parte superior de la
pantalla.
->> Teclee C-h m, para ver como el modo de Texto difiere del modo
+>> Teclee C-h m para ver cómo el modo de Texto difiere del modo
Fundamental.
>> Teclee C-x 1 para eliminar la documentación de la pantalla.
>> Teclee C-x f con un argumento de 20. (C-u 2 0 C-x f). Luego
teclee algún texto y vea como Emacs lo parte en líneas de 20
- caracteres. A continuación ponga de nuevo el margen a 70 usando
+ caracteres. A continuación ponga de nuevo el margen en 70 usando
otra vez C-x f.
Si hace cambios en el medio de un párrafo, el modo Auto Fill no lo
quiere buscar. <Return> termina una búsqueda.
>> Ahora teclee C-s para comenzar la búsqueda. LENTAMENTE, una letra
- a la vez, teclee la palabra 'cursor', haciendo pausa después de
+ a la vez, teclee la palabra "cursor", haciendo pausa después de
cada carácter para notar lo que pasa con el cursor.
Ahora ha buscado "cursor", una vez.
>> Teclee C-s de nuevo, para buscar la siguiente ocurrencia de
¿Vió lo que ocurrió? Emacs, en una búsqueda incremental, trata de ir
a la ocurrencia de la cadena que ha tecleado hasta el momento. Para
-ir a la próxima ocurrencia de 'cursor' solo teclee C-s de nuevo. Si
+ir a la próxima ocurrencia de "cursor" solo teclee C-s de nuevo. Si
tal ocurrencia no existe, Emacs pita y le dice que la búsqueda actual
está fallando ("failing"). C-g también termina la búsqueda.
Puede continuar usando C-x o para cambiar entre las ventanas. La
"ventana seleccionada", donde tiene lugar casi toda la edición, es la
que tiene un cursor muy visible que parpadea cuando usted no está
-tecleando. Las otras ventanas tienen sus propia posición del cursor;
+tecleando. Las otras ventanas tienen su propia posición del cursor;
si está ejecutando Emacs en una pantalla gráfica, esos cursores se
muestran como rectángulos vacíos que no parpadean.
>> Teclee C-x 1 para borrar la ventana de ayuda.
C-h i Leer los manuales incluidos (alias Info). Este comando
- lo pone en un buffer especial llamado `*info*' donde
+ lo pone en un buffer especial llamado "*info*" donde
puede leer manuales de los paquetes instalados en su
sistema. Teclee m emacs <Return> para leer el manual
de Emacs. Si nunca ha usado Info, teclee ? y Emacs y
La completación es una manera de ahorrar teclear innecesariamente.
Por ejemplo, si quiere cambiarse al buffer "*Messages*", puede teclear
-C-x b *M<Tab> y emacs encontrará el resto del nombre del buffer tan
+C-x b *M<Tab> y Emacs encontrará el resto del nombre del buffer tan
lejos como pueda determinar de lo que ya haya tecleado. La
completación también funciona con nombres de comandos y de archivos.
La completación se describe en el Info del manual de Emacs en el nodo
Vladimir Támara <vtamara@gnu.org>
Rafael Sepúlveda <drs@gnulinux.org.mx>
Juanma Barranquero <lektu@terra.es>
+ Luis Felipe López Acevedo <felipe.lopac@gmail.com>
La versión en español ha sido actualizada por:
>> Faites <Entrée> pour remettre le Newline que vous avez supprimé.
+La touche <Entrée> est particulière : l'appuyer peut faire plus que
+simplement insérer le caractère Newline. En fonction du texte autour,
+des espaces pourront être insérées après le caractère Newline, de
+façon à ce qu'en commençant à taper dans la ligne nouvelle créée, le
+texte s'aligne avec celui de la ligne précédente. Nous appelons ce
+comportement (où le fait d'appuyer sur une touche fait plus que de
+simplement insérer le caractère correspondant) « électrique ».
+
+>> Voici un exemple de touche <Entrée> « électrique ».
+ Tapez <Entrée> à la fin de cette ligne.
+
+Vous devriez voir qu'après l'insertion du Newline, Emacs insère des espaces de façon à ce que le curseur se déplace sous le « T » de « Tapez ».
+
Rappelez-vous que la plupart des commandes Emacs peuvent utiliser un
nombre de répétitions ; les caractères de texte font de même. La
répétition d'un caractère de texte l'insère plusieurs fois.
->> Faites C-u 8 * pour insérer ********.
+>> Essayez ça tout de suite -- tapez C-u 8 * pour insérer ********.
Vous connaissez maintenant la méthode la plus simple pour taper du
texte dans Emacs et pour corriger les erreurs. Vous pouvez également
כאשר שורה של טקסט נעשית ארוכה משורה אחת של תצוגה, חלק מהטקסט ממשיך
בשורת תצוגה נוספת, היא "שורת ההמשך". על תצוגה גרפית יופיע חץ עקלקל קטן
באזור השוליים -- "fringe" שמסמל כי לשורה יש שורת המשך, ואילו על תצוגה
-טקסטואלית יופיע תו לוכסן ("/") לאותה תכלית בסוף השורה.
+טקסטואלית יופיע תו לוכסן ('/' או '\', תלוי אם הוא בצד שמאל או בצד ימין)
+לאותה תכלית, בסוף השורה.
>> הקישו טקסט עד שתגיעו לקצה השורה, ואז תמשיכו להקיש עוד טקסט.
כתוצאה, תראו שמופיעה שורת המשך.
>> עתה הקישו <Return> כדי להחזיר את ה־Newline שמחקתם.
+מקש <Return> הוא מיוחד בכך שהקשה עליו עשויה לגרום יותר מהכנסת תו
+ה־Newline. בתלות בטקסט מסביב יתכן כי Emacs יכניס תווי רווח או TAB אחרי
+תו ה־Newline, וזאת כדי ליישר את תחילת השורה החדשה עם הטקסט בשורה
+הקודמת. התנהגות זו, שבה הקשה על מקש גורמת לתוצאות מעבר להכנסה פשוטה של
+התו המתאים, נקראת "חשמלית" ("electric").
+
זכרו כי לרוב הפקודות ב־Emacs אפשר לציין מספר חזרות. גם תוי טקסט
שייכים לקבוצת פקודות זו. חזרה על תו טקסט מכניסה אותו מספר פעמים.
Quando una riga di testo diventa troppo lunga per essere visualizzata su
una riga di schermo essa viene "continuata" su una seconda riga dello
-schermo. Un carattere barra retroversa ("\") posto accanto al margine
+schermo. Un carattere barra retroversa («\») posto accanto al margine
sinistro indica la prosecuzione della riga precedente. Quando si usa un
sistema a finestre grafico, invece della barra retroversa comparirà una
piccola freccia ricurva.
C-SPC. Emacs dovrebbe mostrarti il messaggio "Mark set" nella parte
bassa dello schermo. Muovi il cursore sulla s di "estremi" del
paragrafo precedente. Premi C-w. Questo cancellerà il testo a partire
- dalla `P' e fino alla lettera che precede `s'.
+ dalla "P" e fino alla lettera che precede "s".
La differenza tra "killing" (eliminazione) e "deleting" (cancellazione) è
che il testo "eliminato" può essere inserito di nuovo, mentre quello che
Su sistemi che lo permettono C-z "sospende" Emacs, cioè riporta alla shell
che lo aveva invocato senza però porre termine alla sessione attuale.
Nelle shell più comuni si può riaprire la sessione in corso con il comando
-`fg' oppure con `%emacs'.
+"fg" oppure con "%emacs".
Su sistemi che non prevedono la possibilità di "sospensione", C-z crea una
subshell che funziona all'interno di Emacs per dare la possibilità di
usare altri programmi e poi tornare a Emacs successivamente; in pratica
non fa "uscire" veramente da Emacs. In questo caso il comando di shell
-`exit' è il modo comune per tornare ad Emacs dalla subshell.
+"exit" è il modo comune per tornare ad Emacs dalla subshell.
Il momento di usare C-x C-c è quando si sta per effettuare il log-out dal
sistema. È anche il comando giusto quando si deve chiudere Emacs che è
cercare. <Invio> serve a concludere la ricerca.
>> Adesso usa C-s per inziare la ricerca. LENTAMENTE, una lettera alla
- volta, inserisci la parola `cursore', facendo una pausa dopo ogni
+ volta, inserisci la parola "cursore", facendo una pausa dopo ogni
carattere scritto per vedere cosa succede al cursore. Hai cercato
"cursore" una volta sola.
>> Usa C-s un'altra volta per trovare il punto in cui la parola "cursore"
Hai visto cos'è successo? Durante una ricerca incrementale Emacs prova ad
andare al punto successivo in cui compare la stringa indicata fino a quel
momento. Per raggiungere il punto successivo in cui compare di nuovo
-`cursore' basta solo premere C-s ancora una volta. Se la stringa cercata
+"cursore" basta solo premere C-s ancora una volta. Se la stringa cercata
non compare in alcun punto successivo Emacs emette un "beep" e informa che
la ricerca non è andata a buon fine ("failing"). C-g è un modo
alternativo per concludere la ricerca.
>> Usa C-x 1 per eliminare la finestra di aiuto.
C-h i Leggi la documentazione. Questo comando apre un buffer
- speciale chiamato `*info*' in cui puoi leggere i manuali
+ speciale chiamato "*info*" in cui puoi leggere i manuali
on-line dei pacchetti installati sul tuo sistema. Batti m
emacs <Invio> per leggere il manuale di Emacs. Se non hai
mai usato il sistema Info prima d'ora premi ? ed Emacs ti
\e$BJ8>O$N0l9T$,2hLL$K<}$^$i$J$$DxD9$/$J$C$?>l9g!"$=$N9T$O2hLL>e$N<!$N9T$X\e(B
\e$B$H7QB3!J\e(Bcontinued\e$B!K$5$l$^$9!#2hLL$N1&C<!J1&B&$N%U%j%s%8%(%j%"!K$N\e(B
-backslash \e$BJ8;z\e(B "\" \e$B!J$"$k$$$O!"$b$7%&%#%s%I%&%7%9%F%`$r;H$C$F$$$k$J$i!"\e(B
+backslash \e$BJ8;z\e(B \e$B!V\e(B\\e$B!W\e(B \e$B!J$"$k$$$O!"$b$7%&%#%s%I%&%7%9%F%`$r;H$C$F$$$k$J$i!"\e(B
\e$B>.$5$J6J$C$?Lp0u!K$O!"$=$N9T$,7QB3$5$l$F$$$k$3$H$rI=$7$F$$$^$9!#\e(B
>> \e$B2hLL$N1&C<$^$GJ8>O$rF~NO$7!"$5$i$KF~NO$rB3$1$F2<$5$$!#\e(B
\e$B$=$l$,$G$-$k%7%9%F%`>e$J$i!"\e(BC-z \e$B$O\e(B Emacs \e$B$r!VCfCG!W$5$;$^$9!#$D$^$j\e(B
Emacs \e$B$r=*N;$9$k$3$H$J$/!"%3%^%s%I%7%'%k$KLa$k$3$H$,$G$-$^$9!#BgJ}$NI8\e(B
-\e$B=`E*$J%7%'%k$J$i!"\e(B`fg' \e$B%3%^%s%I$b$7$/$O\e(B `%emacs' \e$B$K$h$C$F\e(B Emacs \e$B$r:F3+\e(B
+\e$B=`E*$J%7%'%k$J$i!"!V\e(Bfg\e$B!W\e(B \e$B%3%^%s%I$b$7$/$O\e(B \e$B!V\e(B%emacs\e$B!W\e(B \e$B$K$h$C$F\e(B Emacs \e$B$r:F3+\e(B
\e$B$G$-$^$9!#\e(B
\e$B!VCfCG!W5!G=$r<BAu$7$F$$$J$$%7%9%F%`$G$O!"\e(BC-z \e$B$O\e(B Emacs \e$B$N2<$GAv$k%5%V\e(B
\e$B%7%'%k$r:n$j!"B>$N%W%m%0%i%`$rAv$i$;$F$+$i$^$?\e(B Emacs \e$B$KLa$k$3$H$,$G$-\e(B
\e$B$k$h$&$K$7$^$9!#$3$N>l9gK\Ev$K\e(B Emacs \e$B$+$iH4$1=P$k$o$1$G$O$"$j$^$;$s$N\e(B
-\e$B$G!"%7%'%k%3%^%s%I$N\e(B `exit' \e$B$,$=$N%5%V%7%'%k$+$i\e(B Emacs \e$B$KLa$kIaDL$N$d\e(B
+\e$B$G!"%7%'%k%3%^%s%I$N\e(B \e$B!V\e(Bexit\e$B!W\e(B \e$B$,$=$N%5%V%7%'%k$+$i\e(B Emacs \e$B$KLa$kIaDL$N$d\e(B
\e$B$jJ}$G$9!#\e(B
C-x C-c \e$B$O%m%0%"%&%H$7$h$&$H;W$&;~$K;H$&$b$N$G$9!#%a!<%k%D!<%k!J\e(Bmail
L \e$B$H$=$l$KB3$/?t;z$O8=:_$N9THV9f$r<($7$F$$$^$9!#\e(B
\e$B@hF,6a$/$N@10u$O!"$"$J$?$,J8>O$rJQ99$7$?$3$H$r<($7$F$$$^$9!#%U%!%$%k$r\e(B
-\e$B3+$$$?D>8e$d!"%;!<%V$7$?D>8e$O!"$=$NItJ,$K$O@10u$NBe$o$j$K%@%C%7%e\e(B `-'
+\e$B3+$$$?D>8e$d!"%;!<%V$7$?D>8e$O!"$=$NItJ,$K$O@10u$NBe$o$j$K%@%C%7%e\e(B \e$B!V\e(B-\e$B!W\e(B
\e$B$,I=<($5$l$^$9!#\e(B
\e$B3g8L$K0O$^$l$?ItJ,$O$I$s$JJT=8%b!<%I$K$$$k$+$r<($7$^$9!#%G%U%)%k%H$O\e(B
>> C-x 1 \e$B$G%X%k%W%&%#%s%I%&$r>C$7$F2<$5$$!#\e(B
C-h i \e$BImB0%^%K%e%"%k!J\e(BInfo\e$B!K$rFI$`!#$3$N%3%^%s%I$r;H$&$H!"$"\e(B
- \e$B$J$?$O\e(B `*info*' \e$B$H$$$&L>$NFC<l$J%P%C%U%!$K0\$5$l$^$9!#\e(B
+ \e$B$J$?$O\e(B \e$B!V\e(B*info*\e$B!W\e(B \e$B$H$$$&L>$NFC<l$J%P%C%U%!$K0\$5$l$^$9!#\e(B
\e$B$=$3$G!"%7%9%F%`$K%$%s%9%H!<%k$5$l$F$$$k%Q%C%1!<%8$N%^\e(B
\e$B%K%e%"%k$,FI$a$^$9!#\e(B m emacs <Return>\e$B$H%?%$%W$9$l$P\e(B
Emacs \e$B$N%^%K%e%"%k$,FI$a$^$9!#$b$7\e(B Info\e$B$r;H$&$N$,=i$a\e(B
글월이 화면의 한 줄에 다 들어가지 못할 정도로 커지면 글월의 줄은
화면의 두번째 줄에서 "계속"됩니다. 오른쪽 한계에 있는 역사선 문자
-("\")는 줄이 다음 줄로 이어지는 것을 가리킵니다.
+(“\”)는 줄이 다음 줄로 이어지는 것을 가리킵니다.
>> 글월을 계속 끼워서 오른쪽 한계를 넘어서도록 하십시오. 그러면 줄
계속 표시가 나타날 것입니다.
그 부분의 다른쪽 끝으로 이동해서 C-w를 칩니다. 그러면 그 두
위치사이의 모든 글월은 죽여집니다.
->> 깜빡이를 전 문단의 시작인 `일'자로 움직이십시오.
+>> 깜빡이를 전 문단의 시작인 “일”자로 움직이십시오.
>> C-SPC를 치시오. 이맥스는 화면의 바닥에 "Mark set"이라는 알림말을
보여줄 것입니다.
->> 깜빡이를 위 문단의 두번째 줄에 있는 `끝'자로 움직이시오.
->> C-w를 치시오. 그러면 `일'자로 시작해서 `끝'자까지의 글월이 죽여질
+>> 깜빡이를 위 문단의 두번째 줄에 있는 “끝”자로 움직이시오.
+>> C-w를 치시오. 그러면 “일”자로 시작해서 “끝”자까지의 글월이 죽여질
것입니다.
"죽이기"와 "지우기"의 다른 점은 "죽여진" 글월은 재차 끼워넣을 수 있는
운영 체계가 허용하면 C-z는 이맥스를 "중지"시킵니다(suspend); 즉, 이
명령은 조가비(shell)로 돌아 가도록 하지만 이맥스를 파괴하는 것은
-아닙니다. 대부분의 조가비에서는 `fg'나 `%emacs'명령으로 이맥스를 계속할
+아닙니다. 대부분의 조가비에서는 “fg”나 “%emacs”명령으로 이맥스를 계속할
수 있습니다.
중지하는 것을 제공하지 않는 운영 체계에서는 C-z에 의해, 이맥스 밑에서
실행되는 아랫조가비가 만들어 지게 되는데 여기서 다른 프로그램들을
실행한 후 이맥스로 돌아 올 수 있는 기회가 있습니다; 사실상 이맥스로부터
-"나가는" 것은 아닙니다. 이 경우 보통, 조가비 명령인 `exit'으로
+"나가는" 것은 아닙니다. 이 경우 보통, 조가비 명령인 “exit”으로
아랫조가비에서 이맥스에 되돌아 옵니다.
C-x C-c는 전산기에서 벗어나기 할 때나 사용합니다. 편지를 취급하는
마칩니다.
>> 이제 C-s를 쳐서 찾기를 시작하십시오. 천천히, 한 번에 한 글자씩
- 'cursor'라고 치면서 각각의 문자를 친 후 깜박이에 어떤 일이 일어
+ “cursor”라고 치면서 각각의 문자를 친 후 깜박이에 어떤 일이 일어
나는가를 유의하십시오.
- 이제 "cursor"를 한 번 찾은 것입니다.
->> C-s를 다시 쳐서 다음에 나타나는 "cursor"를 찾으십시오.
+ 이제 “cursor”를 한 번 찾은 것입니다.
+>> C-s를 다시 쳐서 다음에 나타나는 “cursor”를 찾으십시오.
>> 자, 이제는 <Delete>를 네 번 쳐서 깜박이가 어떻게 움직이는가를
보십시오.
>> <Return>을 쳐서 찾기를 끝내십시오.
>> C-x 1을 쳐서 도움말 창을 지우십시오.
C-h i 온라인 설명서를 읽기 (즉 Info). 이 명령은
- `*info*'라는 특별한 사이칸에서 시스템에 설치된
+ “*info*”라는 특별한 사이칸에서 시스템에 설치된
꾸러미의 온라인 설명서를 보여줍니다. m emacs
<복귀쇠>를 치면 이맥스 설명서를 읽을 수 있습니다.
전에 Info를 읽어 본 적이 없으면 ?를 치십시오. 그러면
worden, dan gaat hij verder op de volgende schermregel. Als je een
grafisch scherm gebruikt verschijnen kleine gebogen pijltjes links en
rechts van het tekstgebied om aan te geven waar een regel voortgezet
-is. In een tekstvenster of terminal geeft een backslash ("\") in de
+is. In een tekstvenster of terminal geeft een backslash (‘\’) in de
laatste kolom een vervolgregel aan.
>> Voeg nu tekst toe totdat je de rechter kantlijn raakt, en blijf
* ZABLOKOWANE POLECENIA
-----------------------
-Pewne polecenia Emacsa są ,,zablokowane'' -- po to, by początkujący
+Pewne polecenia Emacsa są „zablokowane” -- po to, by początkujący
użytkownicy nie mogli ich wywołać przez przypadek.
Jeśli wywołasz jedno z zablokowanych poleceń, to Emacs wypisze komunikat
naciskając spację. Jeśli nie chcesz wywołać zablokowanego polecenia,
to na pytanie odpowiedz, naciskając n.
->> Napisz `C-x C-l' (co jest zablokowanym poleceniem) i odpowiedz n
+>> Napisz „C-x C-l” (co jest zablokowanym poleceniem) i odpowiedz n
na zadane pytanie.
------
Emacs może mieć otwartych kilka okien, z których każde wyświetla
-własny tekst. Pojęcie ,,okna'', jeśli chodzi o Emacsa, nie odnosi
+własny tekst. Pojęcie „okna”, jeśli chodzi o Emacsa, nie odnosi
się do osobnego okienka systemu okienkowego, lecz do pojedynczego
panelu wewnątrz okienka systemowego. (Emacs może też pracować
na kilku oknach systemowych (X-oknach); w terminologii Emacsa
>> Przesuń kursor do tej linii i naciśnij C-u 0 C-l.
(C-l, jak pamiętasz odświeża zawartość ekranu. Jeśli temu poleceniu
-poda się argument liczbowy, to będzie to oznaczało ,,odśwież zawartość
-ekranu i umieść bieżąca linię o tyle linii od góry ekranu''. Tak więc,
-C-u 0 C-1 oznacza ,,odśwież ekran, umieszczając bieżąca linię na samej
-górze''.)
+poda się argument liczbowy, to będzie to oznaczało „odśwież zawartość
+ekranu i umieść bieżąca linię o tyle linii od góry ekranu”. Tak więc,
+C-u 0 C-1 oznacza „odśwież ekran, umieszczając bieżąca linię na samej
+górze”.)
>> Naciśnij Control-x 2
Zauważ, że okno się kurczy, a jednocześnie pojawia się nowe,
Pracujesz teraz na jego kopii.
Gdy linia tekstu staje się zbyt długa, by zmieścić się w jednym
-wierszu ekranu, to jest ona ,,kontynuowana'' w wierszu następnym.
-Znak ,,backslash'' (`\') (albo - jeśli pracujesz w okienkowym
+wierszu ekranu, to jest ona „kontynuowana” w wierszu następnym.
+Znak „backslash” („\”) (albo - jeśli pracujesz w okienkowym
trybie graficznym - zagięta strzałka) umieszczony na prawym marginesie
wskazuje, że dana linia jest kontynuowana w następnym wierszu ekranu.
>> Naciśnij C-SPC. Emacs wyświetli "Mark set" (znacznik ustawiony)
na dole ekranu.
->> Przesuń kursor do litery o w słowie ,,kursor'' w drugim zdaniu.
+>> Przesuń kursor do litery o w słowie „kursor” w drugim zdaniu.
>> Naciśnij C-w. Ta komenda wytnie cały fragment zaczynający się od O,
a kończący tuż przed o.
Gdy usuwasz więcej niż jeden znak naraz, Emacs zachowuje usunięty
tekst po to, by mógł go z powrotem gdzieś wstawić. Wstawianie
-usuniętego tekstu nazywa się ,,wklejaniem''. Usunięty tekst
+usuniętego tekstu nazywa się „wklejaniem”. Usunięty tekst
możesz wkleić zarówno w to samo miejsce, z którego został usunięty,
bądź też w inne miejsca. Ten sam tekst możesz wkleić wielokrotnie,
w celu uzyskania wielu kopii. Poleceniem wklejenia tekstu jest C-y.
-Zauważ różnicę między ,,wycinaniem'' i ,,usuwaniem'', polegającą na tym,
+Zauważ różnicę między „wycinaniem” i „usuwaniem”, polegającą na tym,
że rzeczy wycięte można na nowo wklejać, usuniętych natomiast wklejać nie
można. Na ogół polecenia Emacsa, które kasują dużo tekstu, zachowują go,
podczas gdy polecenia, które po prostu kasują jeden znak albo puste
--------
Jeśli wprowadzisz zmiany do tekstu, a potem dojdziesz do wniosku, że
-to była pomyłka, to możesz cofnąć zmiany, wydając polecenie ,,cofnij''
+to była pomyłka, to możesz cofnąć zmiany, wydając polecenie „cofnij”
(ang. undo), C-x u.
C-x u cofa zmiany wprowadzone przez jedno polecenie; jeśli powtórzysz
Aby edytowany przez Ciebie tekst został na trwałe zachowany, musisz
umieścić go w pliku. Jeśli tego nie zrobisz, to tekst zniknie, gdy
zamknięty zostanie Emacs, za pomocą którego go edytowałeś. Aby zachować
-tekst w pliku, najpierw musisz ten plik ,,znaleźć'', i to zanim
+tekst w pliku, najpierw musisz ten plik „znaleźć”, i to zanim
zaczniesz wprowadzać tekst. Czynność znajdowania pliku (ang. "file
-finding") bywa też nazywana ,,odwiedzaniem pliku'' (ang. "file
+finding") bywa też nazywana „odwiedzaniem pliku” (ang. "file
visiting").
Odwiedzanie pliku w Emacsie powoduje wyświetlenie jego zawartości.
Bardzo często jest to początek edycji pliku. Jednakże zmiany, które
-wprowadzasz do pliku, nie są w nim utrwalone, zanim go nie ,,zachowasz''
+wprowadzasz do pliku, nie są w nim utrwalone, zanim go nie „zachowasz”
(ang. save). Ma to zapobiec pozostawieniu w systemie pliku, który został
zmieniony tylko w połowie, a tego chcesz uniknąć. Gdy zachowujesz
zmieniony plik, Emacs zostawia oryginał (pod inna nazwą) na wypadek,
gdybyś doszedł do wniosku, że wprowadzone zmiany były błędne.
Jeśli popatrzysz na dół ekranu, to zauważysz linię, która zaczyna się
-i kończy myślnikami, a zawiera tekst ,,TUTORIAL''. W tej
+i kończy myślnikami, a zawiera tekst „TUTORIAL”. W tej
części ekranu zawsze możesz znaleźć nazwę pliku, który właśnie
odwiedzasz. W tej chwili odwiedzasz plik o nazwie TUTORIAL, który
jest Twoją własną kopią samouczka Emacsa. Obojętnie, który plik
Kolejną nowością odnośnie polecenia odwiedzania pliku jest to, że
musisz mu podać nazwę pliku, który chcesz znaleźć. Mówimy o tym, że
-polecenie ,,czyta argument z terminala'' (w tym wypadku argument jest
+polecenie „czyta argument z terminala” (w tym wypadku argument jest
nazwą pliku). Po wpisaniu polecenia
C-x C-f znajdź plik (ang. find a file)
Emacs poprosi Cię o wpisanie nazwy pliku. Pojawia się ona w dolnej linii
ekranu. Gdy ta linia jest używana do wprowadzania tego typu danych,
-nazywa się ją ,,minibuforem'' (ang. "minibuffer"). Do edycji nazwy pliku
+nazywa się ją „minibuforem” (ang. "minibuffer"). Do edycji nazwy pliku
w minibuforze możesz używać zwykłych poleceń Emacsa.
Wprowadzanie nazwy pliku (lub jakichkolwiek innych danych w
Wpisz w niego jakiś tekst i zachowaj "foo" za pomocą C-x C-s.
W końcu napisz C-x C-f TUTORIAL <Return>, by wrócić do samouczka.
-Emacs przechowuje tekst każdego pliku w obiekcie, zwanym ,,buforem''.
+Emacs przechowuje tekst każdego pliku w obiekcie, zwanym „buforem”.
Odwiedzenie pliku powoduje utworzenie nowego bufora wewnątrz Emacsa. By
zobaczyć listę buforów, które istnieją w Twoim Emacsie, naciśnij
W systemach, w których jest to możliwe, C-z zawiesza proces Emacsa;
powoduje to powrót do powłoki (ang. shell), ale nie niszczy Emacsa.
W najpopularniejszych powłokach możesz wrócić do Emacsa za pomocą
-polecenia `fg' lub `%emacs'.
+polecenia „fg” lub „%emacs”.
W systemach, w których nie ma zawieszania procesów, C-z tworzy proces
podpowłoki (ang. "subshell"), który działa pod Emacsem i daje Ci szansę
Naciśnij M-x repl s<Return>zmieni<Return>zmodyfikuje<Return>.
Zwróć uwagę, jak ta linia się zmieniła: zastąpiłeś słowem
- ,,zmodyfikuje'' każde wystąpienie słowa z-m-i-e-n-i poniżej początkowej
+ „zmodyfikuje” każde wystąpienie słowa z-m-i-e-n-i poniżej początkowej
pozycji kursora.
Wewnątrz nawiasów znajdziesz informacje na temat trybu edycji, w
którym właśnie jest Emacs. Domyślnym trybem edycji nazywa się
podstawowym (ang. fundamental); jest to tryb używanym właśnie w
-tej chwili. Jest to przykład ,,trybu głównego'' (ang. major mode).
+tej chwili. Jest to przykład „trybu głównego” (ang. major mode).
Emacs może działać w wielu trybach głównych. Zostały one zaprojektowane,
aby ułatwić edycję napisów w rozmaitych językach programowania, takich
podstawowym, polecenia te traktowały apostrofy jako separatory słów.
Główne tryby edycji wprowadzają zwykle subtelne zmiany, takie jak
-opisana powyżej; większość poleceń nadal robi ,,to samo'', chociaż
+opisana powyżej; większość poleceń nadal robi „to samo”, chociaż
być może w troszeczkę inny sposób.
By zobaczyć dokumentację na temat bieżącego głównego trybu edycji,
>> Naciśnij q, by usunąć dokumentację trybu z ekranu.
-Główne tryby edycji nazywają się właśnie ,,głównymi'', gdyż występują
-także ,,podrzędne'' tryby edycji (ang. minor modes). Podrzędne tryby
+Główne tryby edycji nazywają się właśnie „głównymi”, gdyż występują
+także „podrzędne” tryby edycji (ang. minor modes). Podrzędne tryby
edycji nie są alternatywą dla trybów głównych, lecz jedynie ich
niewielką modyfikacją. Każdy podrzędny tryb edycji można włączyć lub
wyłączyć niezależnie od pozostałych trybów podrzędnych, a także
Tryb automatycznego wstawiania włącza się na przykład poleceniem M-x
auto-fill-mode<Return>. Powtórzenie tego polecenie powoduje wyłączenie
trybu, ponowne powtórzenie --- jego włączenie, i tak dalej. Mówimy, że
-polecenie ,,przełącza tryb''.
+polecenie „przełącza tryb”.
>> Napisz M-x auto-fill-mode<Return>. Wstaw potem wiele napisów
- ,,asdf '' tak długo, aż zobaczysz, że linia podzieli na dwie.
+ „asdf ” tak długo, aż zobaczysz, że linia podzieli na dwie.
Między literami musisz wstawiać spacje, ponieważ tryb
automatycznego wypełniania łamie linie tylko tam, gdzie są spacje.
i podświetla go dla Twojej wygody. By znaleźć następne wystąpienie
słowa kursor, po prostu jeszcze raz naciśnij C-s. Jeśli takiego
wystąpienia nie ma, to Emacs zapiszczy i napisze, że szukanie
-,,skończyło się porażką''.
+„skończyło się porażką”.
Kombinacja C-g przerywa proces szukania, podobnie jak to czyni
z innymi poleceniami.
Każde okno pamięta położenie swojego kursora, lecz w danej chwili
tylko jedno z okien wyświetla kursor. Wszystkie polecenia edycyjne
stosują się do okna, w którym jest kursor. To okno nazywane jest
-,,oknem wybranym''.
+„oknem wybranym”.
Polecenie C-M-v przyda Ci się, gdy będziesz chciał edytować tekst w
jednym oknie, a drugiego używał jako punktu odniesienia. Dzięki niemu
>> Naciśnij C-x 1 (w górnym oknie), by pozbyć się okna dolnego.
(Jeśli nacisnąłbyś C-x 1 w dolnym oknie, to górne by znikło. Możesz
-sobie to polecenie tłumaczyć jako ,,pozostaw tylko jedno okno --- to w
-którym właśnie jestem''.)
+sobie to polecenie tłumaczyć jako „pozostaw tylko jedno okno --- to w
+którym właśnie jestem”.)
Nie musi być tak, że obydwa okna pokazują ten sam bufor. Jeśli użyjesz
C-x C-f, by odwiedzić jakiś plik w jednym z nich, to zawartość drugiego
(Fundamental).
By wyjść z rekursywnego poziomu edycji, naciśnij ESC ESC ESC. Jest to
-ogólnego przeznaczenia polecenie ,,wychodzimy''. Możesz go użyć także,
+ogólnego przeznaczenia polecenie „wychodzimy”. Możesz go użyć także,
by pozbyć się nadmiaru okien albo wyjść z minibufora.
>> Naciśnij M-x by wejść do minibufora, potem naciśnij ESC ESC ESC, by
C-p runs the command previous-line
-W ten sposób możesz uzyskać ,,nazwę funkcji'' przypisanej kombinacji
+W ten sposób możesz uzyskać „nazwę funkcji” przypisanej kombinacji
klawiszy. Przydaje się to podczas pisania kodu w Lispie, w którym
zapisane są rozszerzenia Emacsa; wystarcza to także do przypomnienia
Ci, co dane polecenie robi, jeśli widziałeś je już wcześniej, lecz
Pamiętaj, że by wyjść z Emacsa na stałe, trzeba wydać polecenie C-x C-c.
By wyjść do powłoki na chwilę tak, by jeszcze Do Emacsa wrócić, trzeba
użyć C-z. (To nie działa pod X-Windows, ponieważ tam nie ma prawdziwego
-konceptu przejścia na chwilę do powłoki. Zamiast tego C-z ,,ikonizuje''
+konceptu przejścia na chwilę do powłoki. Zamiast tego C-z „ikonizuje”
okno Emacsa.)
Ten samouczek był pisany tak, by wszyscy nowi użytkownicy mogli go
pessoal dele.
Quando uma linha de texto fica muito grande na tela, a linha do texto é
-continuada na linha seguinte. Uma barra invertida ("\") na margem
+continuada na linha seguinte. Uma barra invertida (“\”) na margem
direita indica a linha que foi continuada.
>> Insira texto até que você alcance a margem direita, e mantenha
Em sistemas que permitem isso, C-z "suspende" o Emacs; isso e, retorna
ao shell mas não destrói o Emacs. Nos shells mais comum, você pode
-resumir o Emacs com o comando 'fg' ou com '%emacs'.
+resumir o Emacs com o comando "fg" ou com "%emacs".
Nos sistemas que não implementam suspensão, C-z cria um subshell rodando
sobre o Emacs para dar a você a chance de rodar outros programas e
retornar ao Emacs depois; isso não "sai" verdadeiramente do Emacs. Nesse
-caso, o comando shell 'exit' é o comando usual para voltar ao Emacs do
+caso, o comando shell "exit" é o comando usual para voltar ao Emacs do
subshell.
A hora de usar o C-x C-c é quando você esta prestes a sair do sistema
que você quer procurar. <Return> termina a pesquisa.
>> Agora digite C-s para iniciar a pesquisa. DEVAGAR, uma letra por vez,
- digite o caractere 'cursor', pausando cada vez que você digitar um
+ digite o caractere "cursor", pausando cada vez que você digitar um
caractere, perceba o que acontece com o cursor. Agora que você
pesquisou por "cursor", uma vez.
>> Digite C-s novamente, para pesquisa a próxima ocorrência de "cursor".
Você viu o que aconteceu? O Emacs, em uma pesquisa incremental, tenta ir
para a ocorrência que você digitou ate o momento. Para ir para próxima
-ocorrência de 'cursor' apenas digite C-s novamente. Se nenhuma
+ocorrência de "cursor" apenas digite C-s novamente. Se nenhuma
ocorrência existir, o Emacs bipa e te diz que a pesquisa atual
falhou. C-g também termina a pesquisa.
Când o linie de text devine prea mare pentru a putea fi reprezentată
pe o linie de ecran, linia de text este continuată pe următoarea linie
-de pe ecran. Un caracter backslash ("\") la marginea din dreapta
+de pe ecran. Un caracter backslash („\”) la marginea din dreapta
indică o linie care a fost continuată.
>> Introduceţi text până când depăşiţi cu câteva caractere marginea
Pe sistemele unde este posibil, C-z "suspendă" Emacs-ul; asta înseamnă
că, deşi vă veţi întoarce la prompt-ul shell-ului, Emacs-ul nu a fost
distrus. În shell-urile (interpretoarele de comenzi Unix) cele mai
-uzuale puteţi reactiva Emacs-ul cu comanda `fg' sau `%emacs'.
+uzuale puteţi reactiva Emacs-ul cu comanda "fg" sau "%emacs".
Pe sistemele care nu implementează mecanismele de suspendare, C-z
creează un subshell care rulează sub Emacs pentru a vă oferi
posibilitatea de a rula alte programe şi de a vă întoarce la Emacs mai
târziu; pe aceste sisteme C-z nu iese cu adevărat din Emacs - comanda
-`exit' la promptul subshell-ului este modalitatea uzuală de a vă
+"exit" la promptul subshell-ului este modalitatea uzuală de a vă
întoarce în Emacs.
În general C-x C-c se foloseşte înainte de părăsirea sistemului.
C-v Перейти на один экран вперед
M-v Перейти на один экран назад
- C-l Очистить экран и отобразить все заново,
- разместив текст, находящийся возле курсора,
+ C-l Очистить экран и отобразить все заново,
+ разместив текст, находящийся возле курсора,
в центре экрана. (это CONTROL-L, а не CONTROL-1.)
>> Найдите курсор и запомните текст возле него. Потом нажмите C-l.
M-a Назад, в начало предложения
M-e Вперед, в конец предложения
->> Попробуйте сейчас несколько раз использовать все эти команды.
+>> Попробуйте сейчас несколько раз использовать все эти команды.
Это наиболее часто используемые команды.
Две другие важные команды перемещения курсора: M-< (META Less-then
же должны использовать Shift, чтобы набрать M-< (без удержания клавиши Shift
вы наберете M-точка).
->> Сейчас попробуйте M-<, чтобы переместиться в начало учебника.
+>> Сейчас попробуйте M-<, чтобы переместиться в начало учебника.
Потом используйте C-v, пока не вернетесь назад.
->> Сейчас попробуйте M->, чтобы переместиться к концу учебника.
+>> Сейчас попробуйте M->, чтобы переместиться к концу учебника.
Используйте M-v, пока не вернетесь назад.
Курсор можно перемещать клавишами управления курсора (стрелками), если ваш
говорящее о том, какая команда вызывается, и запросит у вас, хотите ли вы
продолжать работу и выполнить данную команду.
-Если вы действительно хотите выполнить эту команду, то нажмите клавишу
+Если вы действительно хотите выполнить эту команду, то нажмите клавишу
<SPC> (пробел) в ответ на заданный вопрос. А если вы не хотите выполнить
запрещенную команду, то ответьте на вопрос нажатием клавиши "n".
->> Нажмите `C-x C-l' ("запрещенная" команда), а потом ответьте "n" на
+>> Нажмите "C-x C-l" ("запрещенная" команда), а потом ответьте "n" на
заданный вопрос.
дисплей, то небольшие изогнутые стрелки появятся на обоих сторонах экрана
("fringes") чтобы показать, что строка продолжается с предыдущей
строки. Если вы используете текстовый терминал, то "продолжаемая" строка
-обозначается символом "обратный слэш" ("\") в правой части экрана.
+обозначается символом "обратный слэш" («\») в правой части экрана.
>> Вводите текст, пока он не достигнет правой границы, и продолжайте вставку
символов. Вы увидите что появится "продолжаемая" строка.
ту же сессию Emacs. Когда Emacs запускается на текстовом терминале, команда
C-z "приостанавливает" (suspend) Emacs, т.е. она возвращает вас в командный
процессор (shell), но не завершает Emacs. В большинстве командных
-процессоров вы можете вернуться в Emacs с помощью команды `fg' или `%emacs'.
+процессоров вы можете вернуться в Emacs с помощью команды "fg" или "%emacs".
Чтобы покинуть Emacs используйте C-x C-c. Это сочетание также используется,
чтобы выйти из Emacs, вызванного из почтовой программы или другой утилиты.
используя команду C-x f. Вы должны задать границу в виде числового
аргумента для этой команды.
->> Введите C-x f с аргументом 20 (C-u 2 0 C-x f).
+>> Введите C-x f с аргументом 20 (C-u 2 0 C-x f).
Затем введите какой-нибудь текст и посмотрите как Emacs заполняет строки
по 20 символов в каждой. Верните значение границы равное 70 назад,
используя команду C-x f.
Если вы сделали изменения в середине параграфа, то автозаполнение не
-переформатирует текст автоматически.
+переформатирует текст автоматически.
Чтобы переформатировать параграф, наберите M-q (META-q), когда курсор
находится внутри параграфа.
<Return> завершает поиск.
>> Теперь нажмите C-s для начала поиска. Медленно, по одной букве, набирайте
- слово 'курсор', останавливаясь после каждой введенной буквы и замечая, что
+ слово "курсор", останавливаясь после каждой введенной буквы и замечая, что
происходит с курсором.
Сейчас вы нашли первое вхождение слова "курсор".
>> Нажмите C-s снова, чтобы найти следующее вхождение слова "курсор".
Вы заметили, что произошло? Emacs в режиме инкрементального поиска пытался
переходить к строкам, совпадающим с набираемой вами строкой. Чтобы перейти
-к следующему вхождению слова 'курсор', просто нажмите C-s снова. Если больше
+к следующему вхождению слова "курсор", просто нажмите C-s снова. Если больше
нет вхождений, то Emacs издаст звуковой сигнал и сообщит, что ваш поиск не
удался ("failing"), C-g также завершает поиск.
>> Наберите C-x 1 для удаления окна справки.
C-h i Читать интерактивные руководства (команда Info). Эта команда
- переходит в специальный буфер с именем `*info*', где вы можете
+ переходит в специальный буфер с именем "*info*", где вы можете
читать интерактивные руководства для пакетов, установленных в вашей
системе. Наберите m emacs <Return> для чтения руководства по
Emacs. Если вы никогда ранее не использовали Info, то наберите ? и
;;; sentence-end-double-space: nil
;;; fill-column: 76
;;; End:
-
Keď sa riadok textu zväčší natoľko, že presiahne jeden riadok obrazovky, je
zobrazený na viacerých riadkoch obrazovky. Riadok textu, ktorý pokračuje na
-ďalšom riadku obrazovky, je indikovaný spätným lomítkom ("\") (alebo, ak
+ďalšom riadku obrazovky, je indikovaný spätným lomítkom („\“) (alebo, ak
používate grafický systém, malá zakrivená šípka) na pravom okraji obrazovky.
>> Vkladajte text, pokiaľ nedosiahnete pravého okraju, a pokračujte vo
Na systémoch, ktoré to umožňujú, C-z Emacs "pozastaví"; tzn. vráti Vás
do shellu, ale Emacs neskončí. V najbežnejších shelloch sa môžete do
-Emacsu vrátiť príkazom `fg' alebo pomocou `%emacs'.
+Emacsu vrátiť príkazom "fg" alebo pomocou "%emacs".
Na systémoch, ktoré pozastavovanie procesov nemajú implementované, C-z
vytvorí subshell bežiaci pod Emacsom, aby Vám dal šancu spustiť iné
programy a potom sa do Emacsu vrátiť; nevykoná teda pravé opustenie
Emacsu. V tom prípade je obvyklou cestou návratu zo subshellu do Emacsu
-shellový príkaz `exit'.
+shellový príkaz "exit".
Chvíľa pre použitie C-x C-c nastane vtedy, keď sa chystáte odhlásiť sa zo
systému. Správne je to tiež pri ukončovaní Emacsu vyvolaného poštovým
>> Stlačte C-x 1 pre zmazanie okna s nápovedou.
C-h i Čítanie on-line manuálov (tiež Info). Tento príkaz
- Vás prepne do špeciálneho buffera s názvom `*info*',
+ Vás prepne do špeciálneho buffera s názvom "*info*",
v ktorom môžete čítať on-line manuály pre balíky
inštalované na vašom systéme. Ak stlačíte m emacs <Return>,
môžete si napríklad prečítať manuál k Emacsu. Ak ste
den på raden under. Om du använder ett fönstersystem, visas små böjda
pilar i det lilla utrymmet på bägge sidor om textmassan (i vänster och
höger marginal) för att ange var en rad fortsätter, Om du använder
-en textterminal anges med ett bakstreck ("\") i kolumnen längst till
+en textterminal anges med ett bakstreck (”\”) i kolumnen längst till
höger att raden fortsätter.
>> Skriv in lite text så att du kommer till slutet av raden och
ท่านจะไม่ทำให้ข้อความในต้นฉบับของคู่มือการใช้เปลี่ยนแปลง. นี่เป็นเพียงฉบับสำเนาเท่านั้น.
เมื่อข้อความในบรรทัดยาวเกินกว่าหนึ่งบรรทัดของหน้าจอ, ข้อความในบรรทัดนั้นจะต่อเนื่อง
-ไปยังบรรทัดถัดไปของหน้าจอ. อักขระ backslash ("\") ที่ปลายของขอบขวามือจะบ่งชี้
+ไปยังบรรทัดถัดไปของหน้าจอ. อักขระ backslash (“\”) ที่ปลายของขอบขวามือจะบ่งชี้
ว่าข้อความของบรรทัดนั้นต่อเนื่องไปยังบรรทัดถัดไป.
>> ป้อนข้อความจนกระทั่งถึงขอบขวา, แล้วป้อนต่อไปอีก. ท่านจะเห็นการแสดงผลของ
สำหรับระบบที่อนุญาตให้ใช้คำสั่ง, C-z "suspends" อีแมกส์; นั่นคือการกลับไปยังเชลล์
(shell) โดยไม่ได้ทำลายอีแมกส์. ในเชลล์ทั่วไป, ท่านสามารถรีซูม (resume) อีแมกส์
-ได้ด้วยคำสั่ง `fg' หรือด้วยคำสั่ง `%emacs'.
+ได้ด้วยคำสั่ง "fg" หรือด้วยคำสั่ง "%emacs".
สำหรับระบบที่ไม่มีฟังก์ชัน "suspend", คำสั่ง C-z จะสร้างซับเชลล์ (subshell)
ภายใต้อีแมกส์เพื่อให้ท่านมีโอกาสดำเนินงานโปรแกรมอื่นก่อนแล้วค่อยกลับมายังอีแมกส์อีกครั้ง;
-ซึ่งไม่ใช่การ "ออกจาก (exit)" อีแมกส์จริง. ในกรณีนี้, คำสั่งเชลล์ `exit' เป็นคำสั่ง
+ซึ่งไม่ใช่การ "ออกจาก (exit)" อีแมกส์จริง. ในกรณีนี้, คำสั่งเชลล์ "exit" เป็นคำสั่ง
ปรกติที่ใช้ในการกลับไปยังอีแมกส์จากซับเชลล์.
ใช้คำสั่ง C-x C-c ก็ต่อเมื่อท่านต้องการจะเลิกใช้อีแมกส์จริงๆ. วิธีนี้เป็นวิธีที่ถูกต้องใน
+2014-03-10 Juanma Barranquero <lekktu@gmail.com>
+
+ * emacsclient.c (main): #ifdef out previous change on Windows.
+
+2014-03-09 Paul Eggert <eggert@cs.ucla.edu>
+
+ Fix emacsclient terminal corruption when in background (Bug#16892).
+ * emacsclient.c (handle_sigcont): Check for tcgetpgrp failure.
+ Cancel the continue only if tty. Send SIGTTIN to the process
+ group, not SIGSTOP to self, as this is what the glibc manual
+ recommends.
+ (main): If tty, and if started in the background, send SIGTTIN
+ to the process group.
+
+2014-02-25 Andreas Amann <a.amann@ucc.ie> (tiny change)
+
+ Fix emacsclient's handling of SIGCONT (Bug#16883).
+ * emacsclient.c (handle_sigcont): Cancel the continue only if tty.
+
2014-01-22 Eli Zaretskii <eliz@gnu.org>
* update-game-score.c (write_scores) [WINDOWSNT]: Use chmod
* make-docfile.c (IF_LINT):
* emacsclient.c (IF_LINT): Remove (in config.h now).
- * make-docfile.c (main):
+ * make-docfile.c (main)
(fopen) [!WINDOWSNT]:
(chdir) [!DOS_NT]: No more need to undef.
2012-06-05 Glenn Morris <rgm@gnu.org>
- * makefile.w32-in ($(BLD)/getdate.$(O), $(BLD)/leditcfns.$(O)):
- ($(BLD)/make-path.$(O), $(BLD)/qsort.$(O)):
+ * makefile.w32-in ($(BLD)/getdate.$(O), $(BLD)/leditcfns.$(O))
+ ($(BLD)/make-path.$(O), $(BLD)/qsort.$(O))
($(BLD)/timer.$(O)): Remove cruft.
2012-06-03 Glenn Morris <rgm@gnu.org>
* emacsclient.c (main): Avoid dangling 'if'.
(xstrdup): Remove; no longer needed.
- (get_current_dir_name, w32_getenv, get_server_config, find_tty):
+ (get_current_dir_name, w32_getenv, get_server_config, find_tty)
(set_local_socket, main):
Use const char *, not char *, for pointers that are not assigned
through.
* fakemail.c (action): Convert function definitions to standard C.
(add_a_stream):
- * test-distrib.c (cool_read):
- (main): Likewise.
+ * test-distrib.c (cool_read, main): Likewise.
2010-07-03 Andreas Schwab <schwab@linux-m68k.org>
2007-08-29 Jason Rumney <jasonr@gnu.org>
* emacsclient.c (SEND_STRING, SEND_QUOTED): Remove obfuscation macros.
- (quote_argument, set_tcp_socket, handle_sigcont, handle_sigtstp):
+ (quote_argument, set_tcp_socket, handle_sigcont, handle_sigtstp)
(main): Expand removed macros inline.
(main) [WINDOWSNT]: Don't call ttyname. Don't recognize -suspend
option.
2001-11-30 Andrew Innes <andrewi@gnu.org>
- * makefile.w32-in (FACE_SUPPORT):
- (MOUSE_SUPPORT):
- (FLOAT_SUPPORT):
- (WINNT_SUPPORT):
- (lisp): Reference .el files instead of .elc files, to simplify
- bootstrapping.
+ * makefile.w32-in (FACE_SUPPORT, MOUSE_SUPPORT, FLOAT_SUPPORT)
+ (WINNT_SUPPORT, lisp): Reference .el files instead of .elc files,
+ to simplify bootstrapping.
($(DOC)): Change dependency to just `make-docfile'.
2001-11-29 Pavel Janík <Pavel@Janik.cz>
handle_sigcont (int signalnum)
{
int old_errno = errno;
+ pid_t pgrp = getpgrp ();
+ pid_t tcpgrp = tcgetpgrp (1);
- if (tcgetpgrp (1) == getpgrp ())
+ if (tcpgrp == pgrp)
{
- /* We are in the foreground. */
+ /* We are in the foreground. */
send_to_emacs (emacs_socket, "-resume \n");
}
- else
+ else if (0 <= tcpgrp && tty)
{
- /* We are in the background; cancel the continue. */
- raise (SIGSTOP);
+ /* We are in the background; cancel the continue. */
+ kill (-pgrp, SIGTTIN);
}
signal (signalnum, handle_sigcont);
exit (EXIT_FAILURE);
}
+#ifndef WINDOWSNT
+ if (tty)
+ {
+ pid_t pgrp = getpgrp ();
+ pid_t tcpgrp = tcgetpgrp (1);
+ if (0 <= tcpgrp && tcpgrp != pgrp)
+ kill (-pgrp, SIGTTIN);
+ }
+#endif /* !WINDOWSNT */
+
/* If alternate_editor is the empty string, start the emacs daemon
in case of failure to connect. */
start_daemon_if_needed = (alternate_editor
# the same distribution terms as the rest of that program.
#
# Generated by gnulib-tool.
-# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --avoid=close --avoid=dup --avoid=fchdir --avoid=fstat --avoid=malloc-posix --avoid=msvc-inval --avoid=msvc-nothrow --avoid=open --avoid=openat-die --avoid=opendir --avoid=raise --avoid=save-cwd --avoid=select --avoid=sigprocmask --avoid=sys_types --avoid=threadlib --makefile-name=gnulib.mk --conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca-opt byteswap c-ctype c-strcase careadlinkat close-stream count-one-bits count-trailing-zeros crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 dtoastr dtotimespec dup2 environ execinfo faccessat fcntl fcntl-h fdatasync fdopendir filemode fstatat fsync getloadavg getopt-gnu gettime gettimeofday intprops largefile lstat manywarnings memrchr mkostemp mktime pipe2 pselect pthread_sigmask putenv qacl readlink readlinkat sig2str socklen stat-time stdalign stdarg stdbool stdio strftime strtoimax strtoumax symlink sys_stat sys_time time timer-time timespec-add timespec-sub unsetenv update-copyright utimens warnings
+# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --avoid=close --avoid=dup --avoid=fchdir --avoid=fstat --avoid=malloc-posix --avoid=msvc-inval --avoid=msvc-nothrow --avoid=open --avoid=openat-die --avoid=opendir --avoid=raise --avoid=save-cwd --avoid=select --avoid=sigprocmask --avoid=threadlib --makefile-name=gnulib.mk --conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca-opt byteswap c-ctype c-strcase careadlinkat close-stream count-one-bits count-trailing-zeros crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 dtoastr dtotimespec dup2 environ execinfo faccessat fcntl fcntl-h fdatasync fdopendir filemode fstatat fsync getloadavg getopt-gnu gettime gettimeofday intprops largefile lstat manywarnings memrchr mkostemp mktime pipe2 pselect pthread_sigmask putenv qacl readlink readlinkat sig2str socklen stat-time stdalign stdarg stdbool stdio strftime strtoimax strtoumax symlink sys_stat sys_time time timer-time timespec-add timespec-sub unsetenv update-copyright utimens warnings
MOSTLYCLEANFILES += core *.stackdump
## end gnulib module sys_time
+## begin gnulib module sys_types
+
+BUILT_SOURCES += sys/types.h
+
+# We need the following in order to create <sys/types.h> when the system
+# doesn't have one that works with the given compiler.
+sys/types.h: sys_types.in.h $(top_builddir)/config.status
+ $(AM_V_at)$(MKDIR_P) sys
+ $(AM_V_GEN)rm -f $@-t $@ && \
+ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+ sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \
+ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \
+ < $(srcdir)/sys_types.in.h; \
+ } > $@-t && \
+ mv $@-t $@
+MOSTLYCLEANFILES += sys/types.h sys/types.h-t
+
+EXTRA_DIST += sys_types.in.h
+
+## end gnulib module sys_types
+
## begin gnulib module tempname
if gl_GNULIB_ENABLED_tempname
other system header files; just include the system's <stdint.h>.
Ideally we should test __BIONIC__ here, but it is only defined after
<sys/cdefs.h> has been included; hence test __ANDROID__ instead. */
-#if defined __ANDROID__ \
- && defined _SYS_TYPES_H_ && !defined __need_size_t
+#if defined __ANDROID__ && defined _GL_INCLUDING_SYS_TYPES_H
# @INCLUDE_NEXT@ @NEXT_STDINT_H@
#else
#ifndef _@GUARD_PREFIX@_SYS_TYPES_H
/* The include_next requires a split double-inclusion guard. */
+# define _GL_INCLUDING_SYS_TYPES_H
#@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@
+# undef _GL_INCLUDING_SYS_TYPES_H
#ifndef _@GUARD_PREFIX@_SYS_TYPES_H
#define _@GUARD_PREFIX@_SYS_TYPES_H
#endif
@PRAGMA_COLUMNS@
+#ifdef _GL_INCLUDING_UNISTD_H
+/* Special invocation convention:
+ - On Mac OS X 10.3.9 we have a sequence of nested includes
+ <unistd.h> -> <signal.h> -> <pthread.h> -> <unistd.h>
+ In this situation, the functions are not yet declared, therefore we cannot
+ provide the C++ aliases. */
+
+#@INCLUDE_NEXT@ @NEXT_UNISTD_H@
+
+#else
+/* Normal invocation convention. */
+
/* The include_next requires a split double-inclusion guard. */
#if @HAVE_UNISTD_H@
+# define _GL_INCLUDING_UNISTD_H
# @INCLUDE_NEXT@ @NEXT_UNISTD_H@
+# undef _GL_INCLUDING_UNISTD_H
#endif
/* Get all possible declarations of gethostname(). */
_GL_INLINE_HEADER_END
#endif /* _@GUARD_PREFIX@_UNISTD_H */
+#endif /* _GL_INCLUDING_UNISTD_H */
#endif /* _@GUARD_PREFIX@_UNISTD_H */
+2014-03-16 Martin Rudalics <rudalics@gmx.at>
+
+ Fix behavior of with-temp-buffer-window (Bug#16816, Bug#17007).
+ * window.el (with-temp-buffer-window): Don't make BUFFER-OR-NAME
+ current (Bug#16816, Bug#17007).
+ (with-current-buffer-window): New macro doing the same as
+ `with-temp-buffer-window' but with BUFFER-OR-NAME current.
+ * help.el (help-print-return-message): Warn in doc-string to not
+ use this in `with-help-window'.
+ (describe-bindings-internal): Call `describe-buffer-bindings'
+ from within help buffer. See Juanma's scenario in (Bug#16816).
+ (with-help-window): Update doc-string.
+ * dired.el (dired-mark-pop-up):
+ * files.el (save-buffers-kill-emacs):
+ * register.el (register-preview): Use `with-current-buffer-window'
+ instead of `with-temp-buffer-window'.
+
+2014-03-16 Juanma Barranquero <lekktu@gmail.com>
+
+ * textmodes/rst.el (rst-arabic-to-roman, rst-roman-to-arabic):
+ Implement inserting into current buffer, documented in their docstrings.
+ (rst-define-key, rst-compare-adornments, rst-insert-list-new-item)
+ (rst-section-tree-point, rst-forward-section, rst-indent)
+ (rst-compute-tabs, rst-font-lock-find-unindented-line-end)
+ (rst-font-lock-find-unindented-line-limit, rst-adornment-level)
+ (rst-font-lock-handle-adornment-pre-match-form)
+ (rst-repeat-last-character): Reflow docstrings.
+ (rst-preferred-adornments, rst-update-section, rst-find-title-line)
+ (rst-adjust-adornment-work, rst-initial-items, rst-insert-list)
+ (rst-toc-insert-style, rst-toc-insert-node, rst-goto-section)
+ (rst-compile, rst-imenu-convert-cell, rst-imenu-create-index):
+ Fix docstring typos.
+ (rst-all-sections, rst-section-hierarchy, rst-adjust): Doc fixes.
+ (rst-uncomment-region, rst-font-lock-find-unindented-line-match)
+ (rst-font-lock-handle-adornment-matcher): Mark unused arguments.
+
+2014-03-15 Juanma Barranquero <lekktu@gmail.com>
+
+ * term/ns-win.el (x-command-line-resources): Rename from ns-... version,
+ for compatibility with other ports.
+ (ns-initialize-window-system): Use it. It is set in term/common-win.el
+ from the -xrm command line argument, but in the Nextstep port its value
+ is irrelevant because nsfns.m:Fx_open_connection ignores it for now.
+
+ * progmodes/python.el (defconst, python-syntax-count-quotes)
+ (python-indent-region, python-indent-shift-right)
+ (python-indent-dedent-line-backspace, python-nav-backward-sexp)
+ (python-nav-backward-sexp-safe, python-nav-backward-up-list)
+ (python-shell-prompt-block-regexp, python-shell-prompt-output-regexp)
+ (python-shell-prompt-pdb-regexp, python-shell-enable-font-lock)
+ (inferior-python-mode, python-shell-make-comint, run-python-internal)
+ (python-shell-buffer-substring, python-shell-send-buffer)
+ (python-pdbtrack-activate, python-pdbtrack-stacktrace-info-regexp)
+ (python-completion-complete-at-point, python-fill-docstring-style)
+ (python-eldoc-function, python-imenu-format-item-label)
+ (python-imenu-format-parent-item-label)
+ (python-imenu-format-parent-item-jump-label)
+ (python-imenu--build-tree, python-imenu-create-index)
+ (python-imenu-create-flat-index): Fix docstring typos.
+ (python-indent-context, python-shell-prompt-regexp, run-python):
+ Remove superfluous backslashes.
+ (python-indent-line, python-nav-beginning-of-defun)
+ (python-shell-get-buffer, python-shell-get-process)
+ (python-info-current-defun, python-info-current-line-comment-p)
+ (python-info-current-line-empty-p, python-util-popn): Doc fixes.
+ (python-indent-post-self-insert-function, python-shell-send-file)
+ (python-shell-completion-get-completions)
+ (python-shell-completion-complete-or-indent)
+ (python-eldoc--get-doc-at-point): Reflow docstrings.
+
+2014-03-14 Glenn Morris <rgm@gnu.org>
+
+ * emacs-lisp/package.el (package-menu-mode-map):
+ Replace use of obsolete function alias. Tweak menu item text.
+
+ * info.el (Info-finder-find-node):
+ Ignore the `emacs' metapackage. (Bug#10813)
+
+ * finder.el (finder-list-matches): Include unversioned packages
+ in the result of a keyword search.
+
+ * finder.el (finder--builtins-descriptions): New constant.
+ (finder-compile-keywords): Use finder--builtins-descriptions.
+
+2014-03-14 Dmitry Gutov <dgutov@yandex.ru>
+
+ * simple.el (blink-matching-paren): Describe the new value,
+ `jump', enabling the old behavior.
+ (blink-matching-open): Use that value. (Bug#17008)
+
+2014-03-14 Glenn Morris <rgm@gnu.org>
+
+ * finder.el (finder-no-scan-regexp): Add leim-list.
+ (finder-compile-keywords):
+ Don't skip files with same basename. (Bug#14010)
+ * Makefile.in (setwins_finder): New, excluding leim.
+ (finder-data): Use setwins_finder.
+
+ * help-fns.el (help-split-fundoc, help-add-fundoc-usage)
+ (help-function-arglist, help-make-usage): Move from here...
+ * help.el (help-split-fundoc, help-add-fundoc-usage)
+ (help-function-arglist, help-make-usage): ... to here. (Bug#17001)
+ * emacs-lisp/bytecomp.el (byte-compile-lambda): Do not load help-fns.
+
+2014-03-14 Juanma Barranquero <lekktu@gmail.com>
+
+ * net/socks.el (socks, socks-override-functions)
+ (socks-find-services-entry):
+ * progmodes/hideif.el (hif-set-var, hif-nexttoken, hif-comma)
+ (hif-find-ifdef-block):
+ * progmodes/modula2.el (m2-indent): Fix docstring typos.
+
+ * net/tls.el (tls-program): Reflow docstring.
+
+ * progmodes/pascal.el (pascal-mode-abbrev-table)
+ (pascal-imenu-generic-expression, pascal-auto-endcomments)
+ (pascal-mark-defun, pascal-comment-area, pascal-indent-level)
+ (pascal-outline-mode): Fix docstring typos.
+ (pascal-mode): Let define-derived-mode document mode hook.
+ (pascal-uncomment-area): Reflow.
+ (pascal-exclude-str-start, pascal-exclude-str-end): Add docstring.
+
+ * progmodes/opascal.el (opascal-compound-block-indent)
+ (opascal-case-label-indent): Fix docstring typos.
+ (opascal-mode): Fix typos; let defined-derived-mode document mode hook.
+
+2014-03-13 Dmitry Gutov <dgutov@yandex.ru>
+
+ * progmodes/ruby-mode.el (ruby-font-lock-keywords): Fontify
+ multiple adjacent negation chars. (Bug#17004)
+
+2014-03-13 Tom Willemse <tom@ryuslash.org> (tiny change)
+
+ * emacs-lisp/package.el (package--prepare-dependencies):
+ Accept requirements without explicit version (bug#14941).
+
+2014-03-12 Juanma Barranquero <lekktu@gmail.com>
+
+ * register.el (register-separator, copy-to-register): Doc fixes.
+ (register-preview-default): Remove unnecessary call to concat.
+
+ * frameset.el (frameset-restore): When checking for a visible frame,
+ use the action map instead of calling visible-frame-list.
+
+2014-03-12 Jonas Bernoulli <jonas@bernoul.li>
+
+ * emacs-lisp/eieio.el (with-slots): Use cl-symbol-macrolet (bug#16998).
+
+2014-03-12 Martin Rudalics <rudalics@gmx.at>
+
+ * window.el (fit-frame-to-buffer): Get maximum width from
+ display's width instead of height.
+
+2014-03-12 Glenn Morris <rgm@gnu.org>
+
+ * desktop.el (desktop-restore-frames)
+ (desktop-restore-in-current-display, desktop-restore-forces-onscreen)
+ (desktop-restore-reuses-frames): Doc tweaks.
+
+ * electric.el (electric-indent-mode): Doc fix.
+
+2014-03-12 Juanma Barranquero <lekktu@gmail.com>
+
+ * vc/pcvs.el (cvs-temp-buffer, defun-cvs-mode, cvs-get-cvsroot)
+ (cvs-checkout, cvs-mode-checkout, cvs-update-filter, cvs-mode-mark)
+ (cvs-mode-diff-head, cvs-mode-diff-repository, cvs-mode-diff-yesterday)
+ (cvs-mode-diff-vendor, cvs-mode-do, cvs-change-cvsroot)
+ (cvs-dired-use-hook): Fix docstring typos.
+ (cvs-mode-view-file-other-window, cvs-mode-byte-compile-files):
+ Doc fixes.
+
+ * vc/pcvs-defs.el (cvs-auto-remove-handled)
+ (cvs-auto-remove-directories, cvs-default-ignore-marks)
+ (cvs-idiff-imerge-handlers, cvs-reuse-cvs-buffer)
+ (cvs-execute-single-dir): Fix docstring typos.
+
+ * vc/pcvs-info.el (cvs-status-map, cvs-states): Fix docstring typos.
+ (cvs-fileinfo-pp, cvs-fileinfo-from-entries): Doc fixes.
+
+ * vc/pcvs-parse.el (cvs-parsed-fileinfo): Reflow docstring.
+
+ * vc/pcvs-util.el (cvs-flags-query, cvs-flags-set, cvs-prefix-set):
+ Fix docstring typos.
+
+2014-03-12 Juanma Barranquero <lekktu@gmail.com>
+
+ * frameset.el (frameset--jump-to-register): Add autoload; it could be
+ called from jump-to-register after unloading the frameset package.
+
+2014-03-11 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * simple.el (set-mark): Ensure mark-active is nil if the mark is nil
+ (bug#16975). Deactivate the mark before setting it to nil.
+ (activate-mark): Do nothing if region is already active.
+
+2014-03-11 Juanma Barranquero <lekktu@gmail.com>
+
+ * frameset.el (frameset--target-display): Remove definition; declare.
+ (frameset-save, frameset-restore): Let-bind frameset--target-display.
+
+2014-03-11 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/nadvice.el (advice--make-1): Fix autoloading avoidance.
+ (advice-add): Add a :advice--pending marker, so advice--make-1 knows
+ when the advice is pending.
+ (advice-remove): Remove this marker when not needed any more.
+
+2014-03-11 Juanma Barranquero <lekktu@gmail.com>
+
+ * frameset.el: Separate options for reusing frames and cleaning up.
+ (frameset--reuse-list): Remove definition; declare.
+ (frameset--action-map): Declare.
+ (frameset--find-frame-if): Doc fix.
+ (frameset--restore-frame): Cache frame action.
+ (frameset-restore): New keyword arg CLEANUP-FRAMES, allows to select
+ how to clean up the frame list after restoring. Remove cleaning
+ options from REUSE-FRAMES. Change all keyword values to symbols.
+ (frameset--jump-to-register): Simplify by using CLEANUP-FRAMES.
+
+ * desktop.el (desktop-restore-forces-onscreen)
+ (desktop-restore-reuses-frames): Use non-keyword values.
+ (desktop-restore-frameset): Use CLEANUP-FRAMES arg of frameset-restore.
+
+2014-03-10 Glenn Morris <rgm@gnu.org>
+
+ * files.el (find-file): Doc fix: update info node name.
+
+ * emacs-lisp/advice.el (ad-add-advice, defadvice):
+ Doc fix: remove references to deleted info nodes.
+
+2014-03-10 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
+ Do not add `nil' to the environment, when there's no remote `locale'.
+ (tramp-find-inline-encoding): Check, that the remote host has
+ installed perl, before sending scripts.
+
+2014-03-10 Leo Liu <sdl.web@gmail.com>
+
+ * emacs-lisp/eldoc.el (eldoc-minibuffer-message):
+ Clear eldoc-last-message. (Bug#16920)
+
+2014-03-10 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * desktop.el (desktop-create-buffer): Don't run activate-mark-hook
+ (bug#14430).
+
+2014-03-09 Juri Linkov <juri@jurta.org>
+
+ * ansi-color.el (ansi-color-names-vector): Copy default colors
+ from `xterm-standard-colors' that look well on the default white
+ background (and also on the black background) to avoid illegible
+ color combinations like yellow-on-white and white-on-white.
+ http://lists.gnu.org/archive/html/emacs-devel/2014-02/msg00157.html
+
+2014-03-08 Juanma Barranquero <lekktu@gmail.com>
+
+ * frameset.el (frameset-restore): When no frame is visible, do not
+ generate a list of frames, just make visible the selected one.
+
+2014-03-08 Dmitry Gutov <dgutov@yandex.ru>
+
+ * vc/vc-git.el (vc-git-command): Turn FILE-OR-LIST into nil when
+ it only contains the repository root. (Bug#16897)
+
+2014-03-07 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp-sh.el (tramp-sh-handle-vc-registered): Run first pass
+ only when `remote-file-name-inhibit-cache' is nil.
+ (tramp-sh-file-name-handler): Use `tramp-error'. Simplify code.
+
+2014-03-06 Martin Rudalics <rudalics@gmx.at>
+
+ * window.el (fit-frame-to-buffer, fit-frame-to-buffer-margins):
+ Fix doc-strings.
+ (fit-frame-to-buffer): New argument ONLY. Remove dependency on
+ fit-frame-to-buffer variable. Fix doc-string.
+ (fit-window-to-buffer): Set ONLY argument in call of
+ fit-frame-to-buffer. Fix doc-string.
+
+2014-03-06 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-error): VEC-OR-PROC can be nil.
+ (tramp-action-password): Clear password cache if needed.
+ (tramp-read-passwd): Do not clear password cache.
+
+ * net/tramp-gvfs.el (tramp-gvfs-handler-askpassword): Clear password
+ cache unless it is the first password request.
+
+2014-03-06 Glenn Morris <rgm@gnu.org>
+
+ * simple.el (newline): Doc tweak.
+
+ * emacs-lisp/shadow.el (load-path-shadows-find):
+ Ignore dir-locals. (Bug#12357)
+
+2014-03-05 Glenn Morris <rgm@gnu.org>
+
+ * files.el (interpreter-mode-alist):
+ * progmodes/sh-script.el (sh-ancestor-alist): Add dash. (Bug#16938)
+
+2014-03-05 Juanma Barranquero <lekktu@gmail.com>
+
+ * frameset.el (frameset--initial-params): Filter out null entries.
+
+2014-03-05 Martin Rudalics <rudalics@gmx.at>
+
+ * window.el (window-min-height, window-min-width):
+ Rewrite doc-strings.
+ (window-body-size): Add PIXELWISE argument to make it consistent
+ with its callees.
+
+2014-03-05 Juanma Barranquero <lekktu@gmail.com>
+
+ * finder.el (finder-mode-map, finder-mode-syntax-table):
+ Revert part of 2014-02-28 change.
+
+2014-03-05 Lars Ingebrigtsen <larsi@gnus.org>
+
+ * net/eww.el (eww-mode-map): [tab] doesn't work on tty.
+ (eww-setup-buffer): Clear next/prev/etc more reliably.
+ (eww-textarea-map): [tab] doesn't work on tty.
+ Reported by Mario Lang.
+
+ * net/shr.el (shr-map): Ditto.
+
+2014-03-04 Glenn Morris <rgm@gnu.org>
+
+ * minibuffer.el (completion-hilit-commonality):
+ Revert 2014-03-01 short-cut, which changed the return value. (Bug#16933)
+
+2014-03-04 Juanma Barranquero <lekktu@gmail.com>
+
+ * hilit-chg.el (hilit-chg-unload-function): New function.
+ (highlight-changes-mode, highlight-changes-visible-mode): Fix typos.
+ (hilit-chg-map-changes): Prefer cardinal number to digit.
+ (hilit-chg-display-changes): Reflow docstring.
+ (highlight-changes-rotate-faces): Remove superfluous backslash.
+
+2014-03-04 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp-sh.el (tramp-sh-handle-vc-registered): Do not call
+ `tramp-send-command-and-check'.
+
+2014-03-04 Juanma Barranquero <lekktu@gmail.com>
+
+ * hexl.el (hexl-address-region, hexl-ascii-region)
+ (hexl-goto-hex-address, hexl-backward-char, hexl-forward-char)
+ (hexl-backward-short, hexl-forward-short, hexl-backward-word)
+ (hexl-forward-word, hexl-previous-line, hexl-next-line):
+ Use "Hexl mode" for non-hyperlinked hexl-mode references in docstrings.
+ (hexl-mode): Doc fix.
+ (hexl-ascii-start-column, hexl-beginning-of-line, hexl-end-of-line)
+ (hexl-mode-ruler): Fix typos in docstrings.
+
+ * strokes.el (strokes-xpm-header, strokes-rate-stroke): Fix typos.
+ (strokes-character, strokes-get-grid-position, strokes-list-strokes):
+ Remove superfluous backslashes.
+ (strokes-last-stroke, strokes-global-map, strokes-mode):
+ Reflow docstrings.
+ (strokes-xpm-for-stroke, strokes-xpm-to-compressed-string)
+ (strokes-xpm-for-compressed-string): Use quotes with buffer name.
+ (strokes-distance-squared, strokes-global-set-stroke)
+ (strokes-global-set-stroke-string): Doc fixes.
+ (strokes-help): Fix typos; reflow docstring.
+
+2014-03-04 Martin Rudalics <rudalics@gmx.at>
+
+ * window.el (window-in-direction): Fix doc-string.
+
+2014-03-04 Glenn Morris <rgm@gnu.org>
+
+ * emacs-lisp/smie.el (smie-config-guess): Doc fix.
+ Explicit error if no grammar.
+ (smie-config-save): Doc fix. Fix quote typo.
+
+2014-03-04 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/cc-mode.el (c-initialize-cc-mode): Only hook into
+ electric-indent-mode-hook if we obey electric-indent-mode.
+ (c-basic-common-init): Use (fboundp 'electric-indent-local-mode) to
+ decide whether we obey electric-indent-mode.
+ (c-change-set-fl-decl-start, c-extend-after-change-region):
+ Silence warnings.
+ (c-electric-indent-mode-hook): Assume we do want to obey
+ electric-indent-mode.
+
+ * electric.el (electric-indent-mode-has-been-called): Remove.
+ (electric-indent-mode): Fix accordingly.
+
+ * files.el (hack-local-variables): Mention file name in warning.
+
+ * htmlfontify.el (hfy-fontify-buffer): Drop `invis-range' message.
+
+2014-03-04 Michal Nazarewicz <mina86@mina86.com>
+
+ * binding.el: Add comment describing why C-d binds to `delete-char'.
+ * simple.el (delete-forward-char): Mark as interactive-only.
+
+2014-03-03 Juanma Barranquero <lekktu@gmail.com>
+
+ * icomplete.el (icomplete-completions):
+ Follow-up to 2014-03-01 change.
+
+ * icomplete.el: Miscellaneous doc fixes.
+ Use Icomplete everywhere instead of icomplete for consistency.
+ (icomplete-max-delay-chars): Fix typo.
+ (icomplete-mode): Use \[].
+ (icomplete-tidy, icomplete-exhibit): Reflow.
+ (icomplete-minibuffer-setup-hook, icomplete-completions):
+ Remove superfluous backlashes.
+
+ * ido.el: Miscellaneous doc fixes.
+ Use Ido everywhere instead of ido or `ido' for consistency.
+ (ido-record-ftp-work-directories, ido-merge-ftp-work-directories)
+ (ido-cache-ftp-work-directory-time, ido-slow-ftp-hosts)
+ (ido-slow-ftp-host-regexps, ido-reread-directory): Upcase "ftp".
+ (ido-separator): Extract obsolescence info from docstring and declare
+ with make-obsolete-variable.
+ (ido-minibuffer-setup-hook): Simplify example.
+ (ido-text, ido-text-init, ido-input-stack, ido-report-no-match)
+ (ido-wide-find-file, ido-wide-find-dir, ido-wide-find-dir-or-delete-dir)
+ (ido-completion-help, ido-completing-read): Fix typos in docstrings.
+ (ido-everywhere): Reflow docstring.
+ (ido-toggle-vc): Doc fix.
+ (ido-switch-buffer, ido-find-file): Use tabs to improve legibility
+ of long list of keybindings.
+
+2014-03-03 Glenn Morris <rgm@gnu.org>
+
+ * frame.el (display-pixel-height, display-pixel-width)
+ (display-mm-dimensions-alist, display-mm-height)
+ (display-mm-width): Doc tweaks.
+
+2014-03-02 Barry O'Reilly <gundaetiapo@gmail.com>
+
+ * simple.el (undo-elt-in-region): Fix buffer corruption for edge
+ case of undo in region.
+
+2014-03-02 Martin Rudalics <rudalics@gmx.at>
+
+ * window.el (fit-window-to-buffer): Fix argument in window-size
+ call when window is horizontally combined.
+
+2014-03-02 Juanma Barranquero <lekktu@gmail.com>
+
+ * icomplete.el (icomplete-completions): Use string-width.
+ Suggested by Stefan Monnier <monnier@iro.umontreal.ca>.
+
+2014-03-01 Dmitry Gutov <dgutov@yandex.ru>
+
+ * progmodes/ruby-mode.el (ruby-font-lock-keywords):
+ Highlight regexp options. (Bug#16914)
+
+2014-03-01 Martin Rudalics <rudalics@gmx.at>
+
+ * window.el (window--max-delta-1): Round down when calculating
+ how many lines/columns we can get from a window.
+
+2014-03-01 Glenn Morris <rgm@gnu.org>
+
+ * isearch.el (search-invisible): Doc fix.
+
+ * minibuffer.el (completion-hilit-commonality):
+ Make `base-size' argument optional. Short-cut if `prefix-len' is 0.
+ * comint.el (comint-dynamic-list-completions): Doc fix.
+ * comint.el (comint-dynamic-list-completions):
+ * filecache.el (file-cache-minibuffer-complete):
+ * tempo.el (tempo-display-completions):
+ * eshell/em-hist.el (eshell-list-history):
+ Replace use of obsolete argument of display-completion-list.
+
+2014-03-01 Juanma Barranquero <lekktu@gmail.com>
+
+ * icomplete.el (icomplete-completions):
+ Revert back to using "..." when ?… cannot be displayed.
+
+2014-02-28 Juanma Barranquero <lekktu@gmail.com>
+
+ * finder.el (finder-unload-function): New function.
+
+2014-02-28 Juanma Barranquero <lekktu@gmail.com>
+
+ * dframe.el (dframe-detach):
+ * find-dired.el (find-dired, find-name-dired):
+ * finder.el (finder-mode-map, finder-mode-syntax-table)
+ (finder-headmark, finder-select, finder-mouse-select):
+ Fix docstring typos.
+
+2014-02-28 Martin Rudalics <rudalics@gmx.at>
+
+ Revert recent with-temp-buffer-window change (Bug#16816, Bug#16882).
+ * window.el (with-temp-buffer-window): Revert change from 2014-02-21.
+ Suggested by Thierry Volpiatto <thierry.volpiatto@gmail.com>.
+ Fix doc-string based on a suggestion by Nicolas Richard
+ <theonewiththeevillook@yahoo.fr>.
+ * help.el (with-help-window): Fix doc-string.
+
+2014-02-28 Ivan Kanis <ivan@kanis.fr>
+
+ * net/shr.el (shr-image-animate): New option.
+ (shr-put-image): Respect shr-image-animate.
+
+2014-02-28 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp-adb.el (tramp-adb-parse-device-names):
+ Use `accept-process-output'.
+ (tramp-adb-handle-file-truename): Cache the localname only.
+ (tramp-adb-handle-make-directory)
+ (tramp-adb-handle-delete-directory): Flush file properties correctly.
+ (tramp-adb-handle-set-file-modes): Do not raise an error when file
+ modes cannot be changed.
+
+ * net/tramp-cache.el (tramp-flush-directory-property): Remove also
+ file properties of symlinks.
+
+2014-02-28 Per Starbäck <starback@stp.lingfil.uu.se>
+
+ * textmodes/bibtex.el (bibtex-biblatex-entry-alist): Update
+ required/optional fields to match development biblatex. (Bug#16781)
+
+2014-02-28 Andy Sawyer <andy.sawyer@gmail.com> (tiny change)
+
+ * saveplace.el (toggle-save-place):
+ Fix argument handling. (Bug#16673)
+
+2014-02-28 Glenn Morris <rgm@gnu.org>
+
+ * minibuffer.el (completions-first-difference)
+ (completions-common-part, completion-hilit-commonality): Doc fixes.
+
+2014-02-28 Karl Berry <karl@gnu.org>
+
+ * info.el (Info-mode-map): Add H for describe-mode,
+ to synchronize with standalone Info.
+
+2014-02-28 Emilio C. Lopes <eclig@gmx.net>
+
+ * progmodes/sql.el (sql-interactive-mode):
+ Avoid setting global comint-input-ring-separator. (Bug#16814)
+
+2014-02-27 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/dbus.el (dbus--init-bus): Declare function.
+ (dbus-path-local, dbus-interface-local): New defconst.
+ (dbus-init-bus): Use them.
+ (dbus-return-values-table): Extend doc.
+ (dbus-handle-bus-disconnect): Extend error message.
+
+2014-02-27 Juanma Barranquero <lekktu@gmail.com>
+
+ * subr.el (y-or-n-p): Fix double space issue in message.
+
+2014-02-27 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-call-process): Improve trace message.
+ (tramp-handle-insert-file-contents): Trace error case.
+
+ * net/tramp-adb.el (tramp-adb-file-name-handler-alist)
+ <insert-directory>: Use `tramp-handle-insert-directory'.
+ (tramp-adb-handle-insert-directory): Remove function.
+ (tramp-adb-send-command-and-check): New defun, replacing
+ `tramp-adb-command-exit-status'. Change all callees.
+ (tramp-adb-handle-file-attributes)
+ (tramp-adb-handle-directory-files-and-attributes): Use it.
+ (tramp-adb-ls-output-name-less-p):
+ Use `directory-listing-before-filename-regexp'.
+ (tramp-adb-handle-delete-directory): Flush also file properties of
+ the truename of directory.
+ (tramp-adb-handle-file-name-all-completions): Add "./" and "../".
+ (tramp-adb-handle-file-local-copy): Make the local copy readable.
+ (tramp-adb-handle-write-region): Implement APPEND.
+ (tramp-adb-handle-rename-file): Make it more robust. Flush file
+ properties correctly.
+ (tramp-adb-maybe-open-connection): Set `tramp-current-*'
+ variables. Check for connected devices only when needed.
+
+2014-02-27 Glenn Morris <rgm@gnu.org>
+
+ * minibuffer.el (completion-table-dynamic)
+ (completion-table-with-cache): Doc fixes.
+
+ * emacs-lisp/crm.el (crm-default-separator, crm-separator)
+ (completing-read-multiple): Doc fixes.
+
+2014-02-27 Daniel Colascione <dancol@dancol.org>
+
+ * minibuffer.el (completion--nth-completion): Fix indentation.
+
+ * net/tramp-sh.el (tramp-get-remote-path): Don't signal error when
+ explicit tramp path is empty.
+
+2014-02-27 Glenn Morris <rgm@gnu.org>
+
+ * emacs-lisp/crm.el (completing-read-multiple):
+ Empower help-enable-auto-load.
+
+2014-02-26 Glenn Morris <rgm@gnu.org>
+
+ * startup.el (command-line): Don't init the tty in daemon mode.
+
+ Avoid calling tty-setup-hook twice, eg if a term file
+ explicitly calls tty-run-terminal-initialization. (Bug#16859)
+ * faces.el (tty-run-terminal-initialization): Add run-hook argument.
+ (tty-create-frame-with-faces): Use it.
+ * startup.el (command-line): Pass run-hook argument
+ to tty-run-terminal-initialization.
+
+ * dired.el (dired-restore-desktop-buffer): Demote errors;
+ eg in case a glob match fails. (Bug#16884)
+
+2014-02-26 Dmitry Gutov <dgutov@yandex.ru>
+
+ * emacs-lisp/lisp.el (lisp--local-variables): Catch `end-of-file'
+ error from `read-from-string'. (Bug#16850)
+
+ * emacs-lisp/ert.el (ert-run-tests-interactively): `read' the
+ result of `completing-read' in the interactive form. (Bug#16854)
+
+2014-02-25 Glenn Morris <rgm@gnu.org>
+
+ * image.el (image-animate, image-animate-timeout):
+ Stop animating images in dead buffers. (Bug#16878)
+
+ * emacs-lisp/edebug.el (defmacro): Fix debug spec. (Bug#16868)
+
+ * faces.el (tty-setup-hook, tty-run-terminal-initialization):
+ Doc fixes.
+ * startup.el (term-setup-hook): Doc fix. Make obsolete.
+ * term/sun.el (sun-raw-prefix-hooks):
+ Use tty-setup-hook instead of term-setup-hook.
+ (terminal-init-sun): Construct message from bytecomp plist.
+ * term/wyse50.el (enable-arrow-keys): Doc fix.
+
+2014-02-24 Juanma Barranquero <lekktu@gmail.com>
+
+ * term/sun.el (kill-region-and-unmark, sun-raw-prefix-hooks):
+ Fix docstring typos.
+
+2014-02-24 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp-sh.el (tramp-sh-handle-file-truename): Improve last fix.
+
+2014-02-24 Nicolas Richard <theonewiththeevillook@yahoo.fr>
+
+ * minibuffer.el (completion--try-word-completion):
+ Fix error when completing M-x commands (bug#16808).
+
+2014-02-24 Leo Liu <sdl.web@gmail.com>
+
+ * emacs-lisp/easy-mmode.el (define-minor-mode): Fix debug spec.
+
+2014-02-24 Juanma Barranquero <lekktu@gmail.com>
+
+ * apropos.el (apropos-print): Avoid formatting error when
+ apropos-do-all and apropos-compact-layout are both t.
+
2014-02-23 Juanma Barranquero <lekktu@gmail.com>
* apropos.el (apropos-property, apropos-all-words-regexp)
2014-02-22 Daniel Colascione <dancol@dancol.org>
- * net/secrets.el (secrets-create-item,secrets-search-items): Check
- that attribute values are strings, avoiding the construction of
- invalid dbus messages.
+ * net/secrets.el (secrets-create-item, secrets-search-items):
+ Check that attribute values are strings, avoiding the construction
+ of invalid dbus messages.
2014-02-21 Juanma Barranquero <lekktu@gmail.com>
(sql-oracle-options): New default value ("-L").
(sql-mode-oracle-font-lock-keywords): Add placeholder highlighting.
(sql-placeholders-filter): Correct placeholder pattern.
- (sql-read-table-name): Bug fix. Detect absence of SQLi process.
+ (sql-read-table-name): Bug fix. Detect absence of SQLi process.
(sql-login-delay): New variable.
(sql-product-interactive): Use it.
2014-02-04 Fabián Ezequiel Gallina <fgallina@gnu.org>
- * progmodes/python.el (python-shell-send-string):
+ * progmodes/python.el (python-shell-send-string)
(python-shell-send-string-no-output): Fix docstring (Bug#16547).
2014-02-04 Anders Lindgren <andlind@gmail.com>
2014-02-02 Daniel Colascione <dancol@dancol.org>
- * progmodes/cc-defs.el (c-find-assignment-for-mode): Make loading cc-mode silent.
+ * progmodes/cc-defs.el (c-find-assignment-for-mode):
+ Make loading cc-mode silent.
2014-02-02 Daniel Colascione <dancol@dancol.org>
- * comint.el (comint-prompt-read-only): Change doc to suggest remap keybinding.
+ * comint.el (comint-prompt-read-only): Change doc to suggest
+ remap keybinding.
2014-02-02 Glenn Morris <rgm@gnu.org>
* international/quail.el (quail-define-package): Doc fix.
- * emacs-lisp/authors.el (authors-valid-file-names):
+ * emacs-lisp/authors.el (authors-valid-file-names)
(authors-renamed-files-alist): Additions.
* vc/vc-git.el (vc-git-print-log): Remove --follow;
* emacs-lisp/authors.el (authors-aliases): Remove unnecessary entries.
Make M-x authors return zero *Authors Errors* from current logs.
- * emacs-lisp/authors.el (authors-obsolete-files-regexps):
+ * emacs-lisp/authors.el (authors-obsolete-files-regexps)
(authors-ignored-files): Add some entries, remove others.
(authors-ambiguous-files, authors-valid-file-names):
Add some entries.
Spelling fixes.
* emacs-lisp/generic.el (generic--normalize-comments):
Rename from generic--normalise-comments. All uses changed.
- * play/bubbles.el (bubbles--neighborhood-score):
+ * play/bubbles.el (bubbles--neighborhood-score)
(bubbles--mark-direct-neighbors, bubbles--mark-neighborhood)
(bubbles--neighborhood-available)
(bubbles--update-neighborhood-score):
2013-12-25 Fabián Ezequiel Gallina <fgallina@gnu.org>
- * progmodes/python.el:
- (python-nav--lisp-forward-sexp): New function.
+ * progmodes/python.el (python-nav--lisp-forward-sexp): New function.
(python-nav--lisp-forward-sexp-safe): Use it. Rename from
python-nav-lisp-forward-sexp-safe.
(python-nav--forward-sexp): New argument SAFE allows switching
* emacs-lisp/debug.el (debug): Use window-total-height instead
of window-total-size.
* frame.el (tool-bar-lines-needed): Defalias to tool-bar-height.
- * help.el (describe-bindings-internal): Call help-buffer
+ * help.el (describe-bindings-internal): Use help-buffer as
+ argument for with-help-window.
(temp-buffer-max-width): New option.
(resize-temp-buffer-window, help-window-setup)
(with-help-window): Rewrite.
(find-buffer-file-type-coding-system): Mark obsolete.
(w32-find-file-not-found-set-buffer-file-coding-system): Rename from
find-file-not-found-set-buffer-file-coding-system.
- (w32-untranslated-filesystem-list, w32-untranslated-canonical-name):
+ (w32-untranslated-filesystem-list, w32-untranslated-canonical-name)
(w32-add-untranslated-filesystem, w32-remove-untranslated-filesystem)
- (w32-direct-print-region-use-command-dot-com, w32-untranslated-file-p):
+ (w32-direct-print-region-use-command-dot-com, w32-untranslated-file-p)
(w32-direct-print-region-helper, w32-direct-print-region-function)
(w32-direct-ps-print-region-function): Rename by adding a "w32-" prefix.
* startup.el (normal-top-level-add-subdirs-to-load-path):
2013-10-27 Xue Fuqiao <xfq.free@gmail.com>
- * image.el (defimage):
- (image-load-path): Doc fixes.
+ * image.el (defimage, image-load-path): Doc fixes.
2013-10-27 Alan Mackenzie <acm@muc.de>
(verilog-in-struct-nested-p, verilog-at-struct-mv-p)
(verilog-at-close-struct-p): New functions.
(verilog-beg-block-re-ordered, verilog-extended-case-re)
- (verilog-forward-sexp, verilog-set-auto-endcomments):
+ (verilog-forward-sexp, verilog-set-auto-endcomments)
(verilog-leap-to-case-head): Handle "unique0" case.
(verilog-in-constraint-re): New constant.
(verilog-keywords, verilog-type-font-keywords):
(ruby-smie-rules): Adjust handling of open-paren, now that it's never
followed by implicit semi-colons. Add rule for string concatenation
and for indentation at BOB.
- (ruby-forward-sexp, ruby-backward-sexp): Adjust for when smie is in use.
+ (ruby-forward-sexp, ruby-backward-sexp): Adjust for when SMIE is in use.
* emacs-lisp/smie.el (smie-next-sexp): Don't go back to pos before
calling next-sexp, since next-token may have skipped chars which
2013-09-28 Stefan Monnier <monnier@iro.umontreal.ca>
- * emacs-lisp/cl-macs.el:
- (cl--loop-destr-temps): Remove.
+ * emacs-lisp/cl-macs.el (cl--loop-destr-temps): Remove.
(cl--loop-iterator-function): Rename from cl--loop-map-form and change
its convention.
(cl--loop-set-iterator-function): New function.
2013-08-04 Xue Fuqiao <xfq.free@gmail.com>
* vc/vc.el (vc-ignore): Rewrite.
- (vc-default-ignore-completion-table):
- (vc--read-lines):
+ (vc-default-ignore-completion-table, vc--read-lines)
(vc--add-line, vc--remove-regexp): New functions.
* vc/vc-svn.el (vc-svn-ignore): Doc fix.
(vc-svn-ignore-completion-table): New function.
* vc/vc-hg.el (vc-hg-ignore): Rewrite.
- (vc-hg-ignore-completion-table):
+ (vc-hg-ignore-completion-table)
(vc-hg-find-ignore-file): New functions.
* vc/vc-git.el (vc-git-ignore): Rewrite.
- (vc-git-ignore-completion-table):
+ (vc-git-ignore-completion-table)
(vc-git-find-ignore-file): New functions.
* vc/vc-dir.el (vc-dir-menu-map): Add menu for vc-dir-ignore.
* vc/vc-bzr.el (vc-bzr-ignore): Rewrite.
- (vc-bzr-ignore-completion-table):
+ (vc-bzr-ignore-completion-table)
(vc-bzr-find-ignore-file): New functions.
2013-08-03 Juanma Barranquero <lekktu@gmail.com>
* net/tramp-sh.el (tramp-sh-handle-file-notify-supported-p):
Remove functions.
- * autorevert.el (auto-revert-use-notify):
+ * autorevert.el (auto-revert-use-notify)
(auto-revert-notify-add-watch):
* net/tramp.el (tramp-file-name-for-operation):
* net/tramp-adb.el (tramp-adb-file-name-handler-alist):
2013-07-24 Xue Fuqiao <xfq.free@gmail.com>
- * ido.el (ido-fractionp):
- (ido-cache-ftp-work-directory-time, ido-max-prospects, ido-mode)
- (ido-max-file-prompt-width, ido-unc-hosts-cache)
- (ido-max-directory-size, ido-max-dir-file-cache)
+ * ido.el (ido-fractionp, ido-cache-ftp-work-directory-time)
+ (ido-max-prospects, ido-mode, ido-max-file-prompt-width)
+ (ido-unc-hosts-cache, ido-max-directory-size, ido-max-dir-file-cache)
(ido-decorations): Doc fix.
* ansi-color.el: Fix old URL.
2013-07-12 Dmitry Gutov <dgutov@yandex.ru>
- * progmodes/ruby-mode.el (ruby-percent-literals-beg-re):
+ * progmodes/ruby-mode.el (ruby-percent-literals-beg-re)
(ruby-syntax-expansion-allowed-p): Support array of symbols, for
Ruby 2.0.
(ruby-font-lock-keywords): Distinguish calls to functions with
2013-07-06 Michael Albinus <michael.albinus@gmx.de>
- * net/tramp-sh.el (tramp-sh-file-gvfs-monitor-dir-process-filter):
+ * net/tramp-sh.el (tramp-sh-file-gvfs-monitor-dir-process-filter)
(tramp-sh-file-inotifywait-process-filter): Handle file names with
spaces.
(dired-safe-switches-p, dired-switches-escape-p)
(dired-insert-old-subdirs, dired-move-to-end-of-filename)
(dired-glob-regexp, dired-in-this-tree, dired-goto-file-1)
- (dired-sort-set-mode-line, dired-sort-toggle, dired-sort-R-check):
+ (dired-sort-set-mode-line, dired-sort-toggle, dired-sort-R-check)
(dired-goto-next-nontrivial-file): Use `string-match-p'.
(dired-align-file, dired-insert-directory, dired-mark-files-in-region)
(dired-toggle-marks, dired-mark-files-containing-regexp)
* eshell/em-term.el (eshell-visual-command-p): New function.
(eshell-term-initialize): Move long lambda to separate function
eshell-visual-command-p.
- * eshell/em-dirs.el (eshell-dirs-initialise):
+ * eshell/em-dirs.el (eshell-dirs-initialize):
* eshell/em-script.el (eshell-script-initialize):
Add missing #' to lambda.
2013-06-05 Leo Liu <sdl.web@gmail.com>
- Re-implement smie matching block highlight using
+ Re-implement SMIE matching block highlight using
show-paren-data-function. (Bug#14395)
* emacs-lisp/smie.el (smie-matching-block-highlight)
(smie--highlight-matching-block-overlay)
* net/tramp-sh.el (tramp-perl-pack, tramp-perl-unpack): New defconst.
(tramp-local-coding-commands, tramp-remote-coding-commands): Use them.
- (tramp-sh-handle-file-local-copy, tramp-sh-handle-write-region):
+ (tramp-sh-handle-file-local-copy, tramp-sh-handle-write-region)
(tramp-find-inline-compress): Improve traces.
(tramp-maybe-send-script): Check for Perl binary.
(tramp-get-inline-coding): Do not redirect STDOUT for local decoding.
2013-04-19 Masatake YAMATO <yamato@redhat.com>
* progmodes/sh-script.el (sh-imenu-generic-expression):
- Handle function names with a single character. (Bug#14111)
+ Handle function names with a single character. (Bug#14111)
-2013-04-19 Dima Kogan <dima@secretsauce.net> (tiny change)
+2013-04-19 Dima Kogan <dima@secretsauce.net> (tiny change)
* progmodes/gud.el (gud-perldb-marker-filter): Understand position info
for subroutines defined in an eval (bug#14182).
(bibtex-pop): Simplify.
(bibtex-mode): Move setting of bibtex-string to bibtex-parse-strings.
Set choose-completion-string-functions.
- (bibtex-print-help-message,bibtex-make-field, bibtex-end-of-entry)
+ (bibtex-print-help-message, bibtex-make-field, bibtex-end-of-entry)
(bibtex-count-entries): Simplify.
(bibtex-entry-index, bibtex-lessp): New funs for generalized sorting
scheme of indices, see bibtex-maintain-sorted-entries.
* ediff-util.el (ediff-maybe-save-and-delete-merge): Change in a
message.
- * ediff.el (ediff-directories,ediff-directory-revisions)
- (ediff-directories3,ediff-merge-directories)
- (ediff-merge-directories-with-ancestor,ediff-merge-directory-revisions)
+ * ediff.el (ediff-directories, ediff-directory-revisions)
+ (ediff-directories3, ediff-merge-directories)
+ (ediff-merge-directories-with-ancestor, ediff-merge-directory-revisions)
(ediff-merge-directory-revisions-with-ancestor): Make use of the new
ediff-default-filtering-regexp variable.
scroll event where a click on the mouse wheel button is ignored.
(mouse-wheel-click-event, mouse-wheel-inhibit-click-time): New customs.
(mouse-wheel-click-button, mwheel-inhibit-click-event-timer): New vars.
- (mwheel-inhibit-click-timeout,mwheel-filter-click-events): New defuns.
+ (mwheel-inhibit-click-timeout, mwheel-filter-click-events): New defuns.
(mwheel-scroll): Add mwheel-filter-click-events as pre-command-hook.
Start mwheel-inhibit-click-event-timer with timeout handler
mwheel-inhibit-click-timeout.
(cvs-addto-collection): Use it to preserve point.
(cvs-vc-command-advice): Ad-hoc workaround for `cvs -q add'.
- * mwheel.el (mouse-wheel-scroll-amount,mwheel-scroll,mouse-wheel-mode):
- Don't require the first element to be modifier-free.
+ * mwheel.el (mouse-wheel-scroll-amount, mwheel-scroll)
+ (mouse-wheel-mode): Don't require the first element to be modifier-free.
* pcvs-parse.el (cvs-parse-table):
Handle `nothing known about' with more care.
* ediff-diff.el (ediff-install-fine-diff-if-necessary):
Take the current highlighting style into account.
- (ediff-forward-word-function,ediff-whitespace,ediff-word-1)
- (ediff-word-2,ediff-word-3,ediff-word-4): Make them buffer local.
+ (ediff-forward-word-function, ediff-whitespace, ediff-word-1)
+ (ediff-word-2, ediff-word-3, ediff-word-4): Make them buffer local.
* ediff-init.el (ediff-patch-job): New macro.
is loaded.
* ediff-mult.el (ediff-intersect-directories)
- (ediff-prepare-meta-buffer,ediff-get-directory-files-under-revision):
+ (ediff-prepare-meta-buffer, ediff-get-directory-files-under-revision):
Cleanup.
(ediff-draw-dir-diffs): Now supports the "C" command in directory
difference buffer.
* textmodes/texnfo-upd.el: Use `when', `dolist', `push', ...
(texinfo-update-node, texinfo-sequential-node-update):
Don't bind the obsolete `auto-fill-hook'.
- (texinfo-multi-file-included-list,texinfo-multi-file-master-menu-list):
+ (texinfo-multi-file-included-list, texinfo-multi-file-master-menu-list):
Use `set-buffer' rather than `switch-to-buffer'.
(texinfo-multi-file-update): Use "Top" rather than `up-node-name'.
Use `set-buffer' rather than `switch-to-buffer'.
string to kill-ring.
* calc/calc-aent.el (calc-alg-exp, math-toks)
- (math-exp-pos,math-exp-old-pos, math-exp-token)
+ (math-exp-pos, math-exp-old-pos, math-exp-token)
(math-exp-keep-spaces, math-exp-str): New variables.
(calc-do-alg-entry, calcAlg-equals, calcAlg-edit)
(calcAlg-enter): Use declared variable calc-alg-exp.
2004-10-26 Jay Belanger <belanger@truman.edu>
- * calc/calc.el (calc,full-calc, calc-quit, calc-keypad)
+ * calc/calc.el (calc, full-calc, calc-quit, calc-keypad)
(full-calc-keypad, calc-trail-display): Use an extra argument
instead of `interactive-p'.
(isearch-*-char, isearch-|-char): Now just call `isearch-fallback'
appropriately.
(isearch-mode-map): Bind `}' to `isearch-}-char'.
- (isearch-string, isearch-message,string, isearch-point)
+ (isearch-string, isearch-message-string, isearch-point)
(isearch-success, isearch-forward-flag, isearch-other-end)
(isearch-word, isearch-invalid-regexp, isearch-wrapped)
(isearch-barrier, isearch-within-brackets, isearch-case-fold-search):
* emacs-lisp/shadow.el (shadow-same-file-or-nonexistent):
* man.el (Man-init-defvars):
* jka-compr.el (jka-compr-call-process):
- * files.el (get-free-disk-space,insert-directory):
+ * files.el (get-free-disk-space, insert-directory):
* ediff-ptch.el (ediff-test-patch-utility):
* ediff-diff.el (ediff-test-utility):
* dired-aux.el (dired-check-process):
2003-11-25 Stephen Eglen <stephen@gnu.org>
- * iswitchb.el (iswitchb-read-buffer,iswitchb-exit-minibuffer):
+ * iswitchb.el (iswitchb-read-buffer, iswitchb-exit-minibuffer):
iswitchb-exit is set to 'usefirst when user selects buffer at head
of list using RET. (Selecting buffers at the head of the list was
broken if the substring was also a complete buffer name.)
(ediff-select-difference): Set current difference.
(ediff-unselect-and-select-difference): Add comment.
- * ediff.el (ediff-directories,ediff-directory-revisions)
- (ediff-directories3,ediff-merge-directories)
+ * ediff.el (ediff-directories, ediff-directory-revisions)
+ (ediff-directories3, ediff-merge-directories)
(ediff-merge-directories-with-ancestor)
(ediff-merge-directory-revisions)
(ediff-merge-directory-revisions-with-ancestor):
* gdb-ui.el (gdb-var-list, gdb-var-changed, gdb-update-flag)
(gdb-update-flag): New variables.
- (gdb-var-update, gdb-var-update-handler,gdb-var-delete)
+ (gdb-var-update, gdb-var-update-handler, gdb-var-delete)
(gdb-speedbar-expand-node, gdb-var-evaluate-expression-handler)
(gud-watch, gdb-var-create-handler): New functions.
(gdb-var-list-children, gdb-var-list-children-handler)
(gdb-array-size, gdb-display-mode-map, gdb-expressions-mode-map):
(gdb-expressions-mode-menu, gdb-dive): Remove variables.
(gud-display, gud-display1)
- (gdb-display-begin,gdb-display-number-end, gdb-delete-line)
+ (gdb-display-begin, gdb-display-number-end, gdb-delete-line)
(gdb-display-end, gdb-display-go-back, gdb-array-section-end)
- (gdb-field-begin, gdb-field-end, gdb-elt,gdb-field-format-begin)
+ (gdb-field-begin, gdb-field-end, gdb-elt, gdb-field-format-begin)
(gdb-field-format-end, gdb-dive, gdb-dive-new-frame)
(gdb-insert-field, gdb-array-format, gdb-mouse-array-slice)
(gdb-array-slice, gdb-array-format1, gdb-info-display-custom)
2003-09-08 David Ponce <david@dponce.com>
Ensure that recentf correctly updates the menu bar.
- * recentf.el (recentf-menu-path,recentf-menu-before): Doc fix.
+ * recentf.el (recentf-menu-path, recentf-menu-before): Doc fix.
(recentf-menu-bar): New function.
(recentf-clear-data): Use it.
(recentf-update-menu): Likewise. Use easy-menu-add-item instead
* gdb-ui.el (gud-display1): Use gud-call to prevent extra prompt
being displayed in GUD buffer.
(gdb-idle-input-queue): Remove var. Use just one queue.
- (gdb-enqueue-idle-input,gdb-dequeue-idle-input):
+ (gdb-enqueue-idle-input, gdb-dequeue-idle-input):
Remove functions. Use just one queue.
(gdb-prompt, gdb-subprompt, def-gdb-auto-update-trigger)
(gdb-invalidate-assembler, gdb-get-current-frame):
(version-list-not-zero, version<, version<=, version=): Doc fix.
(Bug#5744).
-2010-02-31 Dan Nicolaescu <dann@ics.uci.edu>
+2010-03-31 Dan Nicolaescu <dann@ics.uci.edu>
* vc.el (vc-root-diff): Doc fix.
* progmodes/hideshow.el (hs-minor-mode-menu): Fix omission bug;
was used but not declared.
- (hs-discard-overlays, hs-isearch-show, hs-isearch-show-temporary,
- hs-find-block-beginning): Add or modify docstrings.
+ (hs-discard-overlays, hs-isearch-show, hs-isearch-show-temporary)
+ (hs-find-block-beginning): Add or modify docstrings.
(hs-isearch-show): Rewrite.
* font-lock.el (c-keywords): Only highlight preprocessor
directives when spelled correctly.
- * font-lock.el (font-lock-match-c++-structor-declaration,
- c++-keywords): Fontify constructors and destructors with function
+ * font-lock.el (font-lock-match-c++-structor-declaration)
+ (c++-keywords): Fontify constructors and destructors with function
face inside C++ class declarations.
1999-12-16 Gerd Moellmann <gerd@gnu.org>
ps-mule-cmpchar-prologue-generated.
(ps-mule-composition-prologue): New named from
ps-mule-cmpchar-prologue. Modified for new composition.
- (ps-mule-plot-rule-cmpchar, ps-mule-plot-cmpchar,
- ps-mule-prepare-cmpchar-font): Deleted.
+ (ps-mule-plot-rule-cmpchar, ps-mule-plot-cmpchar)
+ (ps-mule-prepare-cmpchar-font): Deleted.
(ps-mule-string-encoding): New arg NO-SETFONT.
(ps-mule-bitmap-prologue): In PostScript code of BuildGlyphCommon,
check Composing, not Cmpchar.
1999-12-12 Martin Stjernholm <bug-cc-mode@gnu.org>
- * cc-align.el (c-indent-multi-line-block,
- c-lineup-whitesmith-in-block): Two new lineup functions for
+ * cc-align.el (c-indent-multi-line-block)
+ (c-lineup-whitesmith-in-block): Two new lineup functions for
use in whitesmith style.
* cc-styles.el (c-style-alist): More fixes to whitesmith
beginning-of-defun/end-of-defun wrappers separated from
c-point.
- * cc-menus.el (imenu-generic-expression,
- imenu-case-fold-search, imenu-progress-message): Dummy
+ * cc-menus.el (imenu-generic-expression)
+ (imenu-case-fold-search, imenu-progress-message): Dummy
definitions to avoid compiler warnings if imenu can't be
loaded.
* cc-menus.el (cc-imenu-init): New function called at mode
1999-12-06 Michael Kifer <kifer@cs.sunysb.edu>
- * viper-cmd.el (viper-minibuffer-standard-hook,
- viper-minibuffer-real-start): Mew functions.
- (viper-read-string-with-history,viper-file-add-suffix,
- viper-trim-replace-chars-to-delete-if-necessary): Adapt to the
+ * viper-cmd.el (viper-minibuffer-standard-hook)
+ (viper-minibuffer-real-start): Mew functions.
+ (viper-read-string-with-history, viper-file-add-suffix)
+ (viper-trim-replace-chars-to-delete-if-necessary): Adapt to the
change in the status of the minibuffer prompt.
1999-12-06 Gerd Moellmann <gerd@gnu.org>
for better approximation of X colors.
(msdos-face-setup): Call tty-color-clear. Remove code that sets
up tty-color-alist (it is now on startup.el).
- (x-display-color-p, x-color-defined-p, x-color-values,
- x-defined-colors, face-color-supported-p, face-color-gray-p):
+ (x-display-color-p, x-color-defined-p, x-color-values)
+ (x-defined-colors, face-color-supported-p, face-color-gray-p):
Remove.
* facemenu.el (facemenu-read-color, list-colors-display): Use
of frames.
(defined-colors, color-defined-p, color-values, display-color-p):
New functions.
- (x-defined-colors, x-color-defined-p, x-color-values,
- x-display-color-p): Aliases for the above.
+ (x-defined-colors, x-color-defined-p, x-color-values)
+ (x-display-color-p): Aliases for the above.
* startup.el (command-line): Register terminal colors for frame
types other than x and w32, but only if the terminal supports
1999-11-15 Sam Steingold <sds@goems.com>
- * goto-addr.el (goto-address-at-mouse,
- goto-address-find-address-at-point): Use compose-mail.
+ * goto-addr.el (goto-address-at-mouse)
+ (goto-address-find-address-at-point): Use compose-mail.
(goto-address-mail-method): Removed variable.
- (goto-address-send-using-mh-e, goto-address-send-using-mhe,
- goto-address-send-using-mail): Removed functions.
+ (goto-address-send-using-mh-e, goto-address-send-using-mhe)
+ (goto-address-send-using-mail): Removed functions.
1998-11-15 Sam Steingold <sds@goems.com>
windows.
(ediff-file-checked-in-p): Don't consider CVS
files checked in.
- (ediff-make-temp-file,ediff-make-empty-tmp-file): Make sure you
+ (ediff-make-temp-file, ediff-make-empty-tmp-file): Make sure you
are writing to a newly created empty file.
* ediff-mult.el (ediff-show-session-group-hook): New default.
* viper-util.el (viper-nontrivial-find-file-function): Deleted.
(viper-glob-unix-files, viper-glob-mswindows-files): New functions.
- (viper-save-cursor-color,viper-restore-cursor-color):
+ (viper-save-cursor-color, viper-restore-cursor-color):
Improved cursor color handling.
(viper-get-saved-cursor-color-in-replace-mode)
(viper-get-saved-cursor-color-in-insert-mode): New functions for
better cursor color handling.
- * viper-ex.el (ex-read,ex-edit):
+ * viper-ex.el (ex-read, ex-edit):
Fixes for correct interpretation of #,%.
(viper-ex): Now works correctly when called from other functions.
(viper-glob-function): New variable.
* textmodes/reftex-cite.el (reftex-pop-to-bibtex-entry): Fixed bug
with recentering window.
(reftex-extract-bib-entries-from-thebibliography)
- (reftex-offer-bib-menu,reftex-bibtex-selection-callback):
+ (reftex-offer-bib-menu, reftex-bibtex-selection-callback):
Deal with multiple thebibliography environments.
* textmodes/reftex-vars.el (reftex-section-levels):
Changes from Didier Verna:
(custom-prompt-variable): Optional third arg makes prompt for a
comment string.
- (customize-set-value, customize-set-variable,
- customize-save-variable): Optional prefix makes function handle
+ (customize-set-value, customize-set-variable)
+ (customize-save-variable): Optional prefix makes function handle
variable comments.
(customize-customized, customize-saved, custom-variable-state-set)
(custom-variable-set, custom-variable-save, custom-face-state-set)
thrown in gratuitously.
(hanoi): Changed default number of rings back to 3.
(hanoi-unix, hanoi-unix-64): New commands.
- (hanoi-horizontal-flag, hanoi-move-period, hanoi-use-faces,
- hanoi-pole-face, hanoi-base-face, hanoi-even-ring-face,
- hanoi-odd-ring-face): New variables.
- (hanoi-internal, hanoi-current-time-float, hanoi-put-face,
- hanoi-n, hanoi-insert-ring, hanoi-goto-char, hanoi-sit-for,
- hanoi-ring-to-pos, hanoi-pos-on-tower-p): New functions.
+ (hanoi-horizontal-flag, hanoi-move-period, hanoi-use-faces)
+ (hanoi-pole-face, hanoi-base-face, hanoi-even-ring-face)
+ (hanoi-odd-ring-face): New variables.
+ (hanoi-internal, hanoi-current-time-float, hanoi-put-face)
+ (hanoi-n, hanoi-insert-ring, hanoi-goto-char, hanoi-sit-for)
+ (hanoi-ring-to-pos, hanoi-pos-on-tower-p): New functions.
(hanoi-0): Renamed from hanoi0, for symmetry with hanoi-n.
(hanoi-topos, hanoi-draw-ring): Removed.
* progmodes/ada-mode.el (ada-tmp-directory):
Use temporary-file-directory.
- * progmodes/compile.el (compilation-parsing-end,compilation-setup)
+ * progmodes/compile.el (compilation-parsing-end, compilation-setup)
(compilation-filter, compilation-forget-errors)
(compilation-parse-errors): Use a marker instead of an integer for
`compilation-parsing-end'.
* international/mule.el (coding-system-lessp): Moved here from
mule-util.el.
(add-to-coding-system-list): New function.
- (make-subsidiary-coding-system, make-coding-system,
- define-coding-system-alias): Use it instead of setting
+ (make-subsidiary-coding-system, make-coding-system)
+ (define-coding-system-alias): Use it instead of setting
coding-system-list directly.
1999-02-07 Dave Love <fx@gnu.org>
(speedbar-buffers-line-path): Return is dir name only.
(speedbar-mode-functions-list): New variable.
(speedbar-mouse-item-info): Rewrote to be a replaceable fn.
- (speedbar-item-info-file-helper, speedbar-item-info-tag-helper
- speedbar-files-item-info speedbar-buffers-item-info): New functions.
- (speedbar-fetch-replacement-function,speedbar-add-mode-functions-list):
+ (speedbar-item-info-file-helper, speedbar-item-info-tag-helpe)
+ (speedbar-files-item-info speedbar-buffers-item-info): New functions.
+ (speedbar-fetch-replacement-function, speedbar-add-mode-functions-list):
New functions.
(speedbar-line-file): Broke out part that fetches file from a line.
(speedbar-line-text): New function extracted from speedbar-line-file.
(ps-mule-generate-font): If FONT-NAME is a cons cell, use its car.
(ps-mule-prepare-font): Likewise.
- * international/codepage.el (cp855-decode-table,
- cp850-decode-table): Fill some nil entries.
+ * international/codepage.el (cp855-decode-table)
+ (cp850-decode-table): Fill some nil entries.
1999-01-16 Dave Love <fx@gnu.org>
set-coding-priority, so that the internal array of priorities is
also updated.
- * international/mule-util.el:
- (coding-system-change-eol-conversion,
- coding-system-change-text-conversion): Don't define here.
+ * international/mule-util.el
+ (coding-system-change-eol-conversion)
+ (coding-system-change-text-conversion): Don't define here.
* international/mule-cmds.el: Define them here. Remove the
autoload cookies.
1998-12-02 Andre Spiegel <spiegel@inf.fu-berlin.de>
- * vc.el (vc-dired-window-configuration, vc-ediff-windows,
- vc-ediff-result, vc-dired-switches, vc-dired-terse-mode):
+ * vc.el (vc-dired-window-configuration, vc-ediff-windows)
+ (vc-ediff-result, vc-dired-switches, vc-dired-terse-mode):
Added defvars to suppress compilation warnings.
1998-11-30 Ken Stevens <k.stevens@ieee.org>
* textmodes/reftex.el (reftex-finding-files): Group documentation fixed.
(reftex-toc-toggle-file-boundary, reftex-toc-toggle-labels)
- (reftex-toc-toggle-context,reftex-find-start-point): New functions.
+ (reftex-toc-toggle-context, reftex-find-start-point): New functions.
(reftex-toc-include-labels, reftex-toc-include-context)
(reftex-toc-include-file-boundaries, reftex-toc-keep-other-windows):
New options.
* international/mule-diag.el (describe-coding-system): Describe
all flags.
- * mail/sendmail.el (sendmail-coding-system,
- default-sendmail-coding-system): Doc fix.
+ * mail/sendmail.el (sendmail-coding-system)
+ (default-sendmail-coding-system): Doc fix.
* simple.el (shell-command-on-region): Doc fix.
(eldoc-get-var-docstring): Here also.
(eldoc-docstring-first-line): Minimize interim string consing.
Call substitute-command-keys on the result.
- (eldoc-print-var-docstrings, eldoc-print-docstring,
- eldoc-docstring-message): Functions removed.
+ (eldoc-print-var-docstrings, eldoc-print-docstring)
+ (eldoc-docstring-message): Functions removed.
(eldoc-docstring-format-sym-doc): New function, functionality
ripped out of eldoc-docstring-message.
(eldoc-get-fnsym-args-string, eldoc-get-var-docstring): Use it.
* mail/rmail.el (rmail-movemail-program): Fix customize type.
- * mail/feedmail.el (feedmail-x-mailer-line-user-appendage,
- feedmail-fiddle-plex-user-list,
- feedmail-spray-address-fiddle-plex-list,
- feedmail-prompt-before-queue-user-alist,
- feedmail-prompt-before-queue-help-supplement,
- feedmail-queue-reminder-alist, feedmail-queue-default-file-slug,
- feedmail-queue-alternative-mail-header-separator): Fix customize
+ * mail/feedmail.el (feedmail-x-mailer-line-user-appendage)
+ (feedmail-fiddle-plex-user-list)
+ (feedmail-spray-address-fiddle-plex-list)
+ (feedmail-prompt-before-queue-user-alist)
+ (feedmail-prompt-before-queue-help-supplement)
+ (feedmail-queue-reminder-alist, feedmail-queue-default-file-slug)
+ (feedmail-queue-alternative-mail-header-separator): Fix customize
type.
* startup.el (site-run-file): Fix customize type.
* ps-print.el (ps-font-info-database): Add missing dots in value.
Improve layout of customize type.
- * net-utils.el (traceroute-program-options, ping-program-options,
- ipconfig-program-options, netstat-program-options,
- arp-program-options, route-program-options,
- nslookup-program-options, ftp-program-options): Fix customize
+ * net-utils.el (traceroute-program-options, ping-program-options)
+ (ipconfig-program-options, netstat-program-options)
+ (arp-program-options, route-program-options)
+ (nslookup-program-options, ftp-program-options): Fix customize
type.
- * midnight.el (clean-buffer-list-kill-regexps,
- clean-buffer-list-kill-buffer-names,
- clean-buffer-list-kill-never-buffer-names,
- clean-buffer-list-kill-never-regexps): Fix customize type.
+ * midnight.el (clean-buffer-list-kill-regexps)
+ (clean-buffer-list-kill-buffer-names)
+ (clean-buffer-list-kill-never-buffer-names)
+ (clean-buffer-list-kill-never-regexps): Fix customize type.
* man.el (Man-init-defvars): Avoid trailing nil on
Man-filter-list.
(ps-mule-prepare-font): New fun.
(ps-mule-charset-list): New var.
(ps-mule-prologue-generated, ps-mule-prologue): New vars.
- (ps-mule-skip-same-charset, ps-mule-find-wrappoint,
- ps-mule-plot-string): New funs.
+ (ps-mule-skip-same-charset, ps-mule-find-wrappoint)
+ (ps-mule-plot-string): New funs.
(ps-mule-cmpchar-prologue-generated, ps-mule-cmpchar-prologue):
New vars.
- (ps-mule-plot-rule-cmpchar, ps-mule-plot-cmpchar,
- ps-mule-prepare-cmpchar-font): New funs.
+ (ps-mule-plot-rule-cmpchar, ps-mule-plot-cmpchar)
+ (ps-mule-prepare-cmpchar-font): New funs.
(ps-mule-bitmap-prologue-generated, ps-mule-bitmap-prologue): New
vars.
- (ps-mule-generate-bitmap-prologue, ps-mule-generate-bitmap-font,
- ps-mule-generate-bitmap-glyph): New funs.
+ (ps-mule-generate-bitmap-prologue, ps-mule-generate-bitmap-font)
+ (ps-mule-generate-bitmap-glyph): New funs.
(ps-mule-initialize, ps-mule-begin): New funs.
(ps-output-string-prim): Insert string as unibyte.
(ps-output-prologue): New fun.
* ediff-util.el: Copyright years.
(ediff-choose-syntax-table): New function.
(ediff-setup): Use ediff-choose-syntax-table.
- (ediff-file-checked-out-p,ediff-file-checked-in-p): Check if
+ (ediff-file-checked-out-p, ediff-file-checked-in-p): Check if
vc-state is available.
(ediff-make-temp-file): Use ediff-coding-system-for-write.
(ediff-patch-file-internal): Use ediff-coding-system-for-write.
* ediff-diff.el (ediff-coding-system-for-read): Moved to ediff-init.el.
- (ediff-match-diff3-line,ediff-get-diff3-group): Improved pattern.
+ (ediff-match-diff3-line, ediff-get-diff3-group): Improved pattern.
* ediff.el: Date of last update, copyright years.
* ediff-wind.el (ediff-setup-control-frame): Nill->nil.
- * viper-ex.el (ex-token-list,ex-cmd-execute): Revamped, courtesy
+ * viper-ex.el (ex-token-list, ex-cmd-execute): Revamped, courtesy
of Scott Bronson.
- (ex-cmd-assoc,ex-compile,ex-cmd-one-letr): New functions.
- (viper-check-sub,viper-get-ex-command,viper-execute-ex-command):
+ (ex-cmd-assoc, ex-compile, ex-cmd-one-letr): New functions.
+ (viper-check-sub, viper-get-ex-command, viper-execute-ex-command):
Deleted functions.
- (viper-get-ex-com-subr,viper-ex,ex-mark): Changed to use the new
+ (viper-get-ex-com-subr, viper-ex, ex-mark): Changed to use the new
ex-token-list.
(viper-get-ex-address-subr): Convert registers to char data type.
- * viper-util.el (viper-int-to-char,viper-char-equal): New functions.
+ * viper-util.el (viper-int-to-char, viper-char-equal): New functions.
(viper-memq-char): Use viper-int-to-char.
(viper-file-checked-in-p): Use vc-locking-user, if vc doesn't have
vc-locking-state.
(viper-read-key-sequence): New function that replaces the
previously used advice to read-key-sequence.
- * viper-cmd.el (viper-test-com-defun,viper-exec-change)
- (viper-exec-Change,viper-execute-com,viper-insert,viper-append)
- (viper-Append,viper-Insert,viper-open-line,viper-Open-line)
- (viper-open-line-at-point,viper-substitute,viper-overwrite)
- (viper-replace-char-subr,viper-forward-word,viper-forward-Word):
+ * viper-cmd.el (viper-test-com-defun, viper-exec-change)
+ (viper-exec-Change, viper-execute-com, viper-insert, viper-append)
+ (viper-Append, viper-Insert, viper-open-line, viper-Open-line)
+ (viper-open-line-at-point, viper-substitute, viper-overwrite)
+ (viper-replace-char-subr, viper-forward-word, viper-forward-Word):
Got rid of the negative character hack.
- (viper-escape-to-state,viper-replace-state-exit-cmd):
+ (viper-escape-to-state, viper-replace-state-exit-cmd):
Use viper-read-key-sequence.
(viper-envelop-ESC-key): No need for ad-get-orig-definition.
- (viper-minibuffer-standard-hook,viper-read-string-with-history):
+ (viper-minibuffer-standard-hook, viper-read-string-with-history):
Don't override existing minibuffer-setup-hook.
- (viper-mark-point,viper-goto-mark-subr,viper-brac-function):
+ (viper-mark-point, viper-goto-mark-subr, viper-brac-function):
Convert registers to char data type.
(viper-autoindent): Use viper-indent-line.
* ediff-wind.el (ediff-setup-control-frame): Nill->nil.
- * viper-ex.el (ex-token-list,ex-cmd-execute): Revamped, courtesy
+ * viper-ex.el (ex-token-list, ex-cmd-execute): Revamped, courtesy
of Scott Bronson.
- (ex-cmd-assoc,ex-cmd-one-letr): New functions.
- (viper-check-sub,viper-get-ex-command,viper-execute-ex-command):
+ (ex-cmd-assoc, ex-cmd-one-letr): New functions.
+ (viper-check-sub, viper-get-ex-command, viper-execute-ex-command):
Deleted functions.
- (viper-get-ex-com-subr,viper-ex,ex-mark): Changed to use the new
+ (viper-get-ex-com-subr, viper-ex, ex-mark): Changed to use the new
ex-token-list.
* viper-util.el: Spaces, indentation.
* viper-init.el (viper-restore-cursor-type): Added condition-case guard.
- * ediff-init.el (ediff-quit-hook,ediff-suspend-hook):
+ * ediff-init.el (ediff-quit-hook, ediff-suspend-hook):
Changed initialization; use add-hook.
(ediff-file-remote-p): Use file-local-copy.
* viper-cmd.el (viper-change-state-to-vi): Disable overwrite mode.
(viper-downgrade-to-insert): Protect against errors in hooks.
- * viper-init.el (viper-vi-state-hook,viper-insert-state-hook)
- (viper-replace-state-hook,viper-emacs-state-hook): Do cursor handling.
- (viper-restore-cursor-type,viper-set-insert-cursor-type):
+ * viper-init.el (viper-vi-state-hook, viper-insert-state-hook)
+ (viper-replace-state-hook, viper-emacs-state-hook): Do cursor handling.
+ (viper-restore-cursor-type, viper-set-insert-cursor-type):
New functions.
* viper-util.el (viper-memq-char): Bug fixes.
Use viper-preserve-cursor-color.
Many functions changed to use viper= instead of = when comparing
characters.
- * viper-util.el (viper-memq-char,viper=): New functions for
+ * viper-util.el (viper-memq-char, viper=): New functions for
working with characters.
(viper-change-cursor-color): Fixed buglet.
Many functions changed to use viper= instead of = when comparing
* ediff-util.el (ediff-setup): Run ediff-before-setup-hook.
(ediff-other-buffer): Use selected buffers if in Buffer-menu buffer.
(ediff-get-selected-buffers): New function.
- * ediff-vers.el (ediff-vc-internal,ediff-rcs-internal)
- (ediff-vc-merge-internal,ediff-rcs-merge-internal):
+ * ediff-vers.el (ediff-vc-internal, ediff-rcs-internal)
+ (ediff-vc-merge-internal, ediff-rcs-merge-internal):
Use save-window-excursion.
* ediff-wind.el (ediff-skip-unsuitable-frames): More robust
termination check in while loop.
* ediff.el (ediff-get-default-file-name): Better defaults when in
dired buffer.
- (ediff-files,ediff-merge-files,ediff-files3)
+ (ediff-files, ediff-merge-files, ediff-files3)
(ediff-merge-files-with-ancestor): Use ediff-get-default-file-name.
2000-10-28 Dave Love <fx@gnu.org>
2000-10-04 Andre Spiegel <spiegel@gnu.org>
- * vc-hooks.el (vc-before-save, vc-default-make-version-backups,
- vc-version-backup-file-name): New functions.
+ * vc-hooks.el (vc-before-save, vc-default-make-version-backups)
+ (vc-version-backup-file-name): New functions.
* files.el (basic-save-buffer): Call vc-before-save before saving.
* vc.el: Require dired-aux during compilation.
(vc-name-assoc-file): Moved to vc-sccs.el.
(with-vc-properties): New macro.
- (vc-checkin, vc-checkout, vc-revert, vc-cancel-version,
- vc-finish-steal): Use it.
+ (vc-checkin, vc-checkout, vc-revert, vc-cancel-version)
+ (vc-finish-steal): Use it.
(vc-cancel-version): Moved RCS-specific code to vc-rcs.el. The call
to the backend-specific function is now supposed to do the checkout,
too.
2000-09-04 Stefan Monnier <monnier@cs.yale.edu>
- * vc-rcs-hooks.el (vc-rcs-templates-grabbed,
- vc-rcs-grab-templates)
+ * vc-rcs-hooks.el (vc-rcs-templates-grabbed, vc-rcs-grab-templates)
(vc-rcs-registered): Remove. The default function works as well.
- * vc-sccs-hooks.el (vc-sccs-templates-grabbed,
- vc-sccs-grab-templates)
+ * vc-sccs-hooks.el (vc-sccs-templates-grabbed)
+ (vc-sccs-grab-templates)
(vc-sccs-registered): Remove. The default function works as well.
* vc.el (vc-version-diff): Left out a vc- in call to
(vc-rcs-trunk-p, vc-rcs-branch-part): Move to vc-rcs-hooks.
(vc-rcs-backend-release-p): Remove (use vc-rcs-release-p).
(vc-release-greater-or-equal-p): Move from vc.
- (vc-rcs-trunk-p, vc-rcs-branch-p, vc-rcs-branch-part,
- vc-rcs-minor-part, vc-rcs-previous-version): Remove duplicates.
+ (vc-rcs-trunk-p, vc-rcs-branch-p, vc-rcs-branch-part)
+ (vc-rcs-minor-part, vc-rcs-previous-version): Remove duplicates.
(vc-rcs-checkout): Add a missing `new-version' argument in the
call to vc-rcs-latest-on-branch-p. Hopefully that was the right one.
2000-09-04 Martin Lorentzson <martinl@delysid.gnu.org>
- * vc-cvs.el (vc-cvs-revert,vc-cvs-checkout): References to
+ * vc-cvs.el (vc-cvs-revert, vc-cvs-checkout): References to
`vc-checkout-model' updated to `vc-cvs-update-model'.
2000-09-04 Andre Spiegel <spiegel@inf.fu-berlin.de>
2000-09-04 Martin Lorentzson <martinl@gnu.org>
- * vc.el (vc-workfile-unchanged-p,vc-diff,vc-version-diff):
+ * vc.el (vc-workfile-unchanged-p, vc-diff, vc-version-diff):
Update to use the vc-BACKEND-diff functions instead.
`vc-diff' is now working.
This checkin is made with our new VC code base for the very first time.
A simple `(vc-checkin (buffer-file-name))' was used to perform it.
- * vc-cvs.el (vc-cvs-revert,vc-cvs-checkout): Function calls to
+ * vc-cvs.el (vc-cvs-revert, vc-cvs-checkout): Function calls to
`vc-checkout-required' updated to `vc-cvs-uses-locking'.
* vc-hooks.el (vc-backend-hook-functions): `vc-checkout-required'
* vc-rcs-hooks.el: Require vc-hooks when compiling.
(vc-rcs-master-templates): Improve :type.
- (vc-rcsdiff-knows-brief, vc-rcs-lock-from-diff,
- vc-master-workfile-version): Moved from vc-hooks.
+ (vc-rcsdiff-knows-brief, vc-rcs-lock-from-diff)
+ (vc-master-workfile-version): Moved from vc-hooks.
* vc-sccs-hooks.el: Require vc-hooks when compiling.
(vc-sccs-master-templates): Improve :type.
* progmodes/cc-cmds.el (c-indent-command): Obey c-syntactic-indentation.
- * progmodes/cc-cmds.el (c-electric-brace, c-electric-slash,
- c-electric-star, c-electric-semi&comma, c-electric-colon,
- c-electric-lt-gt, c-electric-paren): Don't reindent old lines
+ * progmodes/cc-cmds.el (c-electric-brace, c-electric-slash)
+ (c-electric-star, c-electric-semi&comma, c-electric-colon)
+ (c-electric-lt-gt, c-electric-paren): Don't reindent old lines
when c-syntactic-indentation is nil.
* progmodes/cc-engine.el (c-beginning-of-statement-1): Fixed bug where
* progmodes/cc-styles.el (c-copy-tree): Obsolete. The standard function
copy-alist is sufficient now.
- * progmodes/cc-styles.el (c-set-style, c-set-style-1,
- c-get-style-variables): Fixes to variable initialization so
+ * progmodes/cc-styles.el (c-set-style, c-set-style-1)
+ (c-get-style-variables): Fixes to variable initialization so
that duplicate entries in styles have the same effect
regardless of DONT-OVERRIDE.
Support for bibentry.
(reftex-compile-variables): Fixed problem with end of section-re.
- * textmodes/reftex-dcr.el (reftex-view-crossref,
- reftex-view-crossref-from-bibtex):
+ * textmodes/reftex-dcr.el (reftex-view-crossref)
+ (reftex-view-crossref-from-bibtex):
Deal with changed `reftex-find-citation-regexp-format'.
(reftex-view-regexp-match, reftex-view-crossref-from-bibtex):
Replaced `remprop' with `put'.
* international/mule-conf.el: Specify CHARSET-ID explicitly for
private charsets.
- (mule-unicode-0100-24ff, japanese-jisx0213-1,
- japanese-jisx0213-2): New charsets.
+ (mule-unicode-0100-24ff, japanese-jisx0213-1)
+ (japanese-jisx0213-2): New charsets.
* international/fontset.el: Setup default fontset for new charsets.
* ediff-diff.el (ediff-forward-word): Take syntactic word class into
account.
- (ediff-test-utility,ediff-diff-mandatory-option)
+ (ediff-test-utility, ediff-diff-mandatory-option)
(ediff-reset-diff-options): Utilities for proper initialization of
ediff-diff-options and ediff-diff3-options on Windows.
* textmodes/ispell.el (ispell-cmd-args, ispell-output-buffer)
(ispell-session-buffer): New variables.
- (ispell-start-process, ispell-process-status,
- ispell-accept-output, ispell-send-string): New functions, for
+ (ispell-start-process, ispell-process-status)
+ (ispell-accept-output, ispell-send-string): New functions, for
Ispell invocation when async subprocesses aren't supported.
- (ispell-word, ispell-pdict-save, ispell-command-loop,
- ispell-process-line, ispell-buffer-local-parsing): Replace calls
+ (ispell-word, ispell-pdict-save, ispell-command-loop)
+ (ispell-process-line, ispell-buffer-local-parsing): Replace calls
to process-send-string with calls to ispell-send-string, and
accept-process-output with ispell-accept-output.
(ispell-init-process): Call ispell-process-status instead of
esac; \
done
+# Find all subdirectories except `obsolete', `term', and `leim' (and subdirs).
+# We don't want the leim files listed as packages, especially
+# since many share basenames with files in language/.
+setwins_finder=for file in `find ${srcdir} -type d -print`; do \
+ case $$file in ${srcdir}*/obsolete | ${srcdir}*/term | ${srcdir}*/leim* ) ;; \
+ *) wins="$$wins$${wins:+ }$$file" ;; \
+ esac; \
+ done
+
# Find all subdirectories in which we might want to create subdirs.el.
setwins_for_subdirs=for file in `find ${srcdir} -type d -print`; do \
case $$file in \
$(lisp)/finder-inf.el:
$(MAKE) $(MFLAGS) finder-data
finder-data: doit
- $(setwins_almost); \
+ $(setwins_finder); \
echo Directories: $$wins; \
$(emacs) -l finder \
--eval '(setq generated-finder-keywords-file (unmsys--file-name "$(srcdir)/finder-inf.el"))' \
:group 'ansi-colors)
(defcustom ansi-color-names-vector
- ["black" "red" "green" "yellow" "blue" "magenta" "cyan" "white"]
+ ["black" "red3" "green3" "yellow3" "blue2" "magenta3" "cyan3" "gray90"]
"Colors used for SGR control sequences determining a color.
This vector holds the colors used for SGR control sequences parameters
30 to 37 (foreground colors) and 40 to 47 (background colors).
(choice color (cons color color)))
:set 'ansi-color-map-update
:initialize 'custom-initialize-default
+ :version "24.4" ; default colors copied from `xterm-standard-colors'
:group 'ansi-colors)
(defconst ansi-color-regexp "\033\\[\\([0-9;]*m\\)"
(let ((p apropos-accumulator)
(old-buffer (current-buffer))
(inhibit-read-only t)
+ (button-end 0)
symbol item)
(set-buffer standard-output)
(apropos-mode)
(setq apropos-item
(cons (car apropos-item)
(cons nil (cdr apropos-item)))))
+ (when (= (point) button-end) (terpri))
(insert-text-button (symbol-name symbol)
'type 'apropos-symbol
'skip apropos-multi-type
'face 'apropos-symbol)
+ (setq button-end (point))
(if (and (eq apropos-sort-by-scores 'verbose)
(cadr apropos-item))
(insert " (" (number-to-string (cadr apropos-item)) ") "))
;; Update tutorial--default-keys if you change these.
(define-key global-map "\177" 'delete-backward-char)
+;; We explicitly want C-d to use `delete-char' instead of
+;; `delete-forward-char' so that it ignores `delete-active-region':
+;; Most C-d users are old-timers who don't expect
+;; `delete-active-region' here, while newer users who expect
+;; `delete-active-region' use C-d much less.
(define-key global-map "\C-d" 'delete-char)
(define-key global-map "\C-k" 'kill-line)
+2014-03-04 Glenn Morris <rgm@gnu.org>
+
+ * semantic/util.el (semantic-complete-symbol):
+ Replace use of obsolete argument of display-completion-list.
+
2014-02-03 Glenn Morris <rgm@gnu.org>
* semantic/senator.el (senator-copy-tag-to-register):
* semantic/wisent/python.el (wisent-python-string-start-re)
(wisent-python-string-re, wisent-python-forward-string)
- (wisent-python-forward-line,wisent-python-lex-string):
+ (wisent-python-forward-line, wisent-python-lex-string):
New variables.
(wisent-python-forward-balanced-expression): New function.
(ede-directory-safe-p): Check it.
(ede-initialize-state-current-buffer, ede, ede-new)
(ede-check-project-directory, ede-rescan-toplevel)
- (ede-load-project-file, ede-parent-project, ede-current-project):
+ (ede-load-project-file, ede-parent-project, ede-current-project)
(ede-target-parent): Avoid loading in a project unless it is safe,
since it may involve malicious code. This security flaw was
pointed out by Hiroshi Oota.
(semantic-decoration-unknown-include-describe): Fix filenames in
docstring.
- * semantic/ede-grammar.el (semantic-ede-grammar-compiler-wisent):
+ * semantic/ede-grammar.el (semantic-ede-grammar-compiler-wisent)
(semantic-ede-grammar-compiler-bovine): Fix requires that are
added to the grammar-make-script.
2011-10-19 Chong Yidong <cyd@gnu.org>
- * ede.el (ede-minor-mode,global-ede-mode):
+ * ede.el (ede-minor-mode, global-ede-mode):
* semantic.el (semantic-mode): Doc fix to reflect new
define-minor-mode calling behavior.
Synch EDE to CEDET 1.0.
* cedet-idutils.el (cedet-idutils-make-command): New option.
- (cedet-idutils-mkid-call):
+ (cedet-idutils-mkid-call)
(cedet-idutils-create/update-database): New functions.
- * cedet-cscope.el (cedet-cscope-create):
+ * cedet-cscope.el (cedet-cscope-create)
(cedet-cscope-create/update-database): New functions.
(cedet-cscope-support-for-directory): Make interactive.
(ede-project-root, ede-project-root-directory): Move to
ede/auto.el.
- * ede/locate.el (ede-locate-flush-hash):
+ * ede/locate.el (ede-locate-flush-hash)
(ede-locate-create/update-root-database): New methods.
(initialize-instance): Use ede-locate-flush-hash.
(semantic-decoration-on-includes-highlight-default): Check that
the include tag has a position.
- * semantic/complete.el (semantic-collector-local-members):
+ * semantic/complete.el (semantic-collector-local-members)
(semantic-complete-read-tag-local-members)
(semantic-complete-jump-local-members): New class and functions.
(semantic-complete-self-insert): Save excursion before completing.
Use define-minor-mode in CEDET where applicable.
- * srecode/mode.el (srecode-minor-mode,global-srecode-minor-mode):
+ * srecode/mode.el (srecode-minor-mode, global-srecode-minor-mode):
Use define-minor-mode.
* semantic/util-modes.el (semantic-add-minor-mode):
(semantic-analyzer-debug-global-symbol)
(semantic-analyzer-debug-missing-innertype)
(semantic-analyzer-debug-insert-include-summary):
- * semantic/util.el (semantic-file-tag-table):
+ * semantic/util.el (semantic-file-tag-table)
(semantic-describe-buffer-var-helper, semantic-something-to-tag-table)
(semantic-recursive-find-nonterminal-by-name):
* semantic/tag-ls.el (semantic-tag-calculate-parent-default):
* semantic/symref.el (semantic-symref-parse-tool-output):
* semantic/sb.el (semantic-sb-fetch-tag-table):
* semantic/lex-spp.el (semantic-lex-spp-lex-text-string):
- * semantic/idle.el (semantic-idle-work-for-one-buffer):
+ * semantic/idle.el (semantic-idle-work-for-one-buffer)
(semantic-idle-summary-maybe-highlight):
* semantic/ia-sb.el (semantic-ia-speedbar)
(semantic-ia-sb-tag-info):
* semantic/grammar.el (semantic-analyze-possible-completions):
* semantic/find.el (semantic-brute-find-tag-by-position):
- * semantic/ede-grammar.el (project-compile-target):
+ * semantic/ede-grammar.el (project-compile-target)
(ede-proj-makefile-insert-variables):
- * semantic/debug.el (semantic-debug-set-parser-location):
+ * semantic/debug.el (semantic-debug-set-parser-location)
(semantic-debug-set-source-location, semantic-debug-interface-layout)
(semantic-debug-mode, semantic-debug):
* semantic/db.el (semanticdb-needs-refresh-p):
* ede.el (ede-buffer-header-file, ede-find-target)
(ede-buffer-documentation-files, ede-project-buffers, ede-set)
(ede-target-buffers, ede-buffers, ede-make-project-local-variable):
- * cedet-idutils.el (cedet-idutils-fnid-call):
+ * cedet-idutils.el (cedet-idutils-fnid-call)
(cedet-idutils-lid-call, cedet-idutils-expand-filename)
(cedet-idutils-version-check):
- * cedet-global.el (cedet-gnu-global-call):
+ * cedet-global.el (cedet-gnu-global-call)
(cedet-gnu-global-expand-filename, cedet-gnu-global-root)
(cedet-gnu-global-version-check, cedet-gnu-global-scan-hits):
* cedet-cscope.el (cedet-cscope-call)
(setq list (sort list 'string<))
(if (> (length list) 1)
(with-output-to-temp-buffer "*Completions*"
- (display-completion-list list pattern))
+ (display-completion-list
+ (completion-hilit-commonality list (length pattern) nil)))
;; Bury any out-of-date completions buffer.
(let ((win (get-buffer-window "*Completions*" 0)))
(if win (with-selected-window win (bury-buffer))))))
(defun comint-dynamic-list-completions (completions &optional common-substring)
"Display a list of sorted COMPLETIONS.
-The meaning of COMMON-SUBSTRING is the same as in `display-completion-list'.
-Typing SPC flushes the completions buffer."
+Typing SPC flushes the completions buffer.
+
+The optional argument COMMON-SUBSTRING, if non-nil, should be a string
+specifying a common substring for adding the faces
+`completions-first-difference' and `completions-common-part' to
+the completions."
(let ((window (get-buffer-window "*Completions*" 0)))
(setq completions (sort completions 'string-lessp))
(if (and (eq last-command this-command)
(setq comint-dynamic-list-completions-config
(current-window-configuration))
(with-output-to-temp-buffer "*Completions*"
- (display-completion-list completions common-substring))
+ (display-completion-list
+ (completion-hilit-commonality completions (length common-substring))))
(if (window-minibuffer-p)
(minibuffer-message "Type space to flush; repeat completion command to scroll")
(message "Type space to flush; repeat completion command to scroll")))
:group 'desktop)
(defcustom desktop-restore-frames t
- "When non-nil, save frames to desktop file."
+ "When non-nil, save and restore the frame and window configuration.
+See related options `desktop-restore-reuses-frames',
+`desktop-restore-in-current-display', and `desktop-restore-forces-onscreen'."
:type 'boolean
:group 'desktop
:version "24.4")
(defcustom desktop-restore-in-current-display nil
- "If t, frames are restored in the current display.
-If nil, frames are restored, if possible, in their original displays.
-If `delete', frames on other displays are deleted instead of restored."
+ "Controls how restoring of frames treats displays.
+If t, restores frames into the current display.
+If nil, restores frames into their original displays (if possible).
+If `delete', deletes frames on other displays instead of restoring them."
:type '(choice (const :tag "Restore in current display" t)
(const :tag "Restore in original display" nil)
(const :tag "Delete frames in other displays" delete))
:version "24.4")
(defcustom desktop-restore-forces-onscreen t
- "If t, offscreen frames are restored onscreen instead.
-If `:all', frames that are partially offscreen are also forced onscreen.
-NOTE: Checking of frame boundaries is only approximate and can fail
-to reliably detect frames whose onscreen/offscreen state depends on a
-few pixels, especially near the right / bottom borders of the screen."
+ "If t, restores frames that are fully offscreen onscreen instead.
+If `all', also restores frames that are partially offscreen onscreen.
+
+Note that checking of frame boundaries is only approximate.
+It can fail to reliably detect frames whose onscreen/offscreen state
+depends on a few pixels, especially near the right / bottom borders
+of the screen."
:type '(choice (const :tag "Only fully offscreen frames" t)
- (const :tag "Also partially offscreen frames" :all)
+ (const :tag "Also partially offscreen frames" all)
(const :tag "Do not force frames onscreen" nil))
:group 'desktop
:version "24.4")
(defcustom desktop-restore-reuses-frames t
"If t, restoring frames reuses existing frames.
-If nil, existing frames are deleted.
-If `:keep', existing frames are kept and not reused."
+If nil, deletes existing frames.
+If `keep', keeps existing frames and does not reuse them."
:type '(choice (const :tag "Reuse existing frames" t)
(const :tag "Delete existing frames" nil)
(const :tag "Keep existing frames" :keep))
Furthermore, they may use the following variables:
- desktop-file-version
- desktop-buffer-major-mode
- desktop-buffer-minor-modes
- desktop-buffer-point
- desktop-buffer-mark
- desktop-buffer-read-only
- desktop-buffer-locals
+ `desktop-file-version'
+ `desktop-buffer-major-mode'
+ `desktop-buffer-minor-modes'
+ `desktop-buffer-point'
+ `desktop-buffer-mark'
+ `desktop-buffer-read-only'
+ `desktop-buffer-locals'
If a handler returns a buffer, then the saved mode settings
and variable values for that buffer are copied into it.
Furthermore, they may use the following variables:
- desktop-file-version
- desktop-buffer-file-name
- desktop-buffer-name
- desktop-buffer-major-mode
- desktop-buffer-minor-modes
- desktop-buffer-point
- desktop-buffer-mark
- desktop-buffer-read-only
- desktop-buffer-misc
+ `desktop-file-version'
+ `desktop-buffer-file-name'
+ `desktop-buffer-name'
+ `desktop-buffer-major-mode'
+ `desktop-buffer-minor-modes'
+ `desktop-buffer-point'
+ `desktop-buffer-mark'
+ `desktop-buffer-read-only'
+ `desktop-buffer-misc'
When a handler is called, the buffer has been created and the major mode has
been set, but local variables listed in desktop-buffer-locals has not yet been
(frame-parameter frame 'desktop-dont-clear))
(delete-frame frame))
(error
- (delay-warning 'desktop (error-message-string err))))))))
+ (delay-warning 'desktop (error-message-string err))))))))
;; ----------------------------------------------------------------------------
(unless noninteractive
being set (usually, by reading it from the desktop)."
(when (desktop-restoring-frameset-p)
(frameset-restore desktop-saved-frameset
- :reuse-frames desktop-restore-reuses-frames
+ :reuse-frames (eq desktop-restore-reuses-frames t)
+ :cleanup-frames (not (eq desktop-restore-reuses-frames 'keep))
:force-display desktop-restore-in-current-display
:force-onscreen desktop-restore-forces-onscreen)))
(eval desktop-buffer-point)
(error (message "%s" (error-message-string err)) 1))))
(when desktop-buffer-mark
- (if (consp desktop-buffer-mark)
- (progn
- (set-mark (car desktop-buffer-mark))
- (setq mark-active (car (cdr desktop-buffer-mark))))
- (set-mark desktop-buffer-mark)))
+ (if (consp desktop-buffer-mark)
+ (progn
+ (move-marker (mark-marker) (car desktop-buffer-mark))
+ ;; FIXME: Should we call (de)activate-mark instead?
+ (setq mark-active (car (cdr desktop-buffer-mark))))
+ (move-marker (mark-marker) desktop-buffer-mark)))
;; Never override file system if the file really is read-only marked.
(when desktop-buffer-read-only (setq buffer-read-only desktop-buffer-read-only))
(dolist (this desktop-buffer-locals)
(if (consp this)
- ;; an entry of this form `(symbol . value)'
+ ;; An entry of this form `(symbol . value)'.
(progn
(make-local-variable (car this))
(set (car this) (cdr this)))
- ;; an entry of the form `symbol'
+ ;; An entry of the form `symbol'.
(make-local-variable this)
(makunbound this))))))))
(defun dframe-detach (frame-var cache-var buffer-var)
"Detach the frame in symbol FRAME-VAR.
-CACHE-VAR and BUFFER-VAR are symbols as in `dframe-frame-mode'"
+CACHE-VAR and BUFFER-VAR are symbols as in `dframe-frame-mode'."
(with-current-buffer (symbol-value buffer-var)
(rename-buffer (buffer-name) t)
(let ((oldframe (symbol-value frame-var)))
(apply function args)
(let ((buffer (get-buffer-create (or buffer-or-name " *Marked Files*"))))
(with-current-buffer buffer
- (with-temp-buffer-window
+ (with-current-buffer-window
buffer
(cons 'display-buffer-below-selected
'((window-height . fit-window-to-buffer)))
(let* ((dired-dir (car misc-data))
(dir (if (consp dired-dir) (car dired-dir) dired-dir)))
(if (file-directory-p (file-name-directory dir))
- (progn
+ (with-demoted-errors "Desktop: Problem restoring directory: %S"
(dired dired-dir)
;; The following elements of `misc-data' are the keys
;; from `dired-subdir-alist'.
(let ((electric-indent-mode nil))
(newline arg 'interactive)))
-(defvar electric-indent-mode-has-been-called 0
- "How many times has `electric-indent-mode' been called?
-It's > 1 if it's been called at least once by the user.")
+
;;;###autoload
(define-minor-mode electric-indent-mode
"Toggle on-the-fly reindentation (Electric Indent mode).
positive, and disable it otherwise. If called from Lisp, enable
the mode if ARG is omitted or nil.
-This is a global minor mode. When enabled, it reindents whenever
-the hook `electric-indent-functions' returns non-nil, or you
-insert a character from `electric-indent-chars'."
+When enabled, this reindents whenever the hook `electric-indent-functions'
+returns non-nil, or if you insert a character from `electric-indent-chars'.
+
+This is a global minor mode. To toggle the mode in a single buffer,
+use `electric-indent-local-mode'."
:global t :group 'electricity
:initialize 'custom-initialize-delay
:init-value t
- (setq electric-indent-mode-has-been-called
- (1+ electric-indent-mode-has-been-called))
(if (not electric-indent-mode)
(progn
(when (eq (lookup-key global-map [?\C-j])
If FUNCTION was not advised already, its advice info will be
initialized. Redefining a piece of advice whose name is part of
-the cache-id will clear the cache.
-
-See Info node `(elisp)Computed Advice' for detailed documentation."
+the cache-id will clear the cache."
(cond ((not (ad-is-advised function))
(ad-initialize-advice-info function)
(ad-set-advice-info-field
advice state that will be used during activation if appropriate. Only use
this if the `defadvice' gets actually compiled.
-See Info node `(elisp)Advising Functions' for comprehensive documentation.
usage: (defadvice FUNCTION (CLASS NAME [POSITION] [ARGLIST] FLAG...)
[DOCSTRING] [INTERACTIVE-FORM]
BODY...)"
(cdr compiled)
;; optionally, the doc string.
(cond (lexical-binding
- (require 'help-fns)
(list (help-add-fundoc-usage doc arglist)))
((or doc int)
(list doc)))
;; This code defines a function, `completing-read-multiple', which
;; provides the ability to read multiple strings in the minibuffer,
-;; with completion.
-
-;; By using this functionality, a user may specify multiple strings at
-;; a single prompt, optionally using completion.
-
-;; Multiple strings are specified by separating each of the strings
-;; with a prespecified separator regexp. For example, if the
-;; separator regexp is ",", the strings 'alice', 'bob', and
-;; 'eve' would be specified as 'alice,bob,eve'.
-
-;; The default value for the separator regexp is the value of
-;; `crm-default-separator' (comma). The separator regexp may be
-;; changed by modifying the value of `crm-separator'.
-
-;; Contiguous strings of non-separator-characters are referred to as
-;; 'elements'. In the aforementioned example, the elements are:
-;; 'alice', 'bob', and 'eve'.
-
-;; Completion is available on a per-element basis. For example, if
-;; the contents of the minibuffer are 'alice,bob,eve' and point is
-;; between 'l' and 'i', pressing TAB operates on the element 'alice'.
+;; with completion. See that function's documentation for details.
;; For the moment, I have decided to not bind any special behavior to
;; the separator key. In the future, the separator key might be used
;; first revamped version
;;; Code:
+
+;; FIXME I don't see that this needs to exist as a separate variable.
+;; crm-separator should suffice.
(defconst crm-default-separator "[ \t]*,[ \t]*"
- "Default separator regexp for `completing-read-multiple'.")
+ "Default value of `crm-separator'.")
(defvar crm-separator crm-default-separator
"Separator regexp used for separating strings in `completing-read-multiple'.
It should be a regexp that does not match the list of completion candidates.
-Modify this value to make `completing-read-multiple' use a separator other
-than `crm-default-separator'.")
+The default value is `crm-default-separator'.")
(defvar crm-local-completion-map
(let ((map (make-sparse-keymap)))
t))
;; superemulates behavior of completing_read in src/minibuf.c
+;; Use \\<crm-local-completion-map> so that help-enable-auto-load can
+;; do its thing. Any keymap that is defined will do.
;;;###autoload
(defun completing-read-multiple
(prompt table &optional predicate require-match initial-input
hist def inherit-input-method)
"Read multiple strings in the minibuffer, with completion.
-By using this functionality, a user may specify multiple strings at a
-single prompt, optionally using completion.
-
-Multiple strings are specified by separating each of the strings with
-a prespecified separator regexp. For example, if the separator
-regexp is \",\", the strings 'alice', 'bob', and 'eve' would be
-specified as 'alice,bob,eve'.
+The arguments are the same as those of `completing-read'.
+\\<crm-local-completion-map>
+Input multiple strings by separating each one with a string that
+matches the regexp `crm-separator'. For example, if the separator
+regexp is \",\", entering \"alice,bob,eve\" specifies the strings
+\"alice\", \"bob\", and \"eve\".
-The default value for the separator regexp is the value of
-`crm-default-separator' (comma). The separator regexp may be
-changed by modifying the value of `crm-separator'.
-
-Contiguous strings of non-separator-characters are referred to as
-'elements'. In the aforementioned example, the elements are: 'alice',
-'bob', and 'eve'.
+We refer to contiguous strings of non-separator-characters as
+\"elements\". In this example there are three elements.
Completion is available on a per-element basis. For example, if the
-contents of the minibuffer are 'alice,bob,eve' and point is between
-'l' and 'i', pressing TAB operates on the element 'alice'.
-
-The return value of this function is a list of the read strings
-with empty strings removed.
+contents of the minibuffer are \"alice,bob,eve\" and point is between
+\"l\" and \"i\", pressing \\[minibuffer-complete] operates on the element \"alice\".
-See the documentation for `completing-read' for details on the arguments:
-PROMPT, TABLE, PREDICATE, REQUIRE-MATCH, INITIAL-INPUT, HIST, DEF, and
-INHERIT-INPUT-METHOD."
+This function returns a list of the strings that were read,
+with empty strings removed."
(unwind-protect
(progn
(add-hook 'choose-completion-string-functions
:lighter \" Foo\" :require 'foo :global t :group 'hassle :version \"27.5\"
...BODY CODE...)"
(declare (doc-string 2)
- (debug (&define name stringp
+ (debug (&define name string-or-null-p
[&optional [¬ keywordp] sexp
&optional [¬ keywordp] sexp
&optional [¬ keywordp] sexp]
;;; edebug.el --- a source-level debugger for Emacs Lisp -*- lexical-binding: t -*-
-;; Copyright (C) 1988-1995, 1997, 1999-2014 Free Software Foundation,
-;; Inc.
+;; Copyright (C) 1988-1995, 1997, 1999-2014 Free Software Foundation, Inc.
;; Author: Daniel LaLiberte <liberte@holonexus.org>
;; Maintainer: emacs-devel@gnu.org
[&optional stringp]
[&optional ("interactive" interactive)]
def-body))
-;; FIXME? Isn't this missing the doc-string? Cf defun.
(def-edebug-spec defmacro
;; FIXME: Improve `declare' so we can Edebug gv-expander and
;; gv-setter declarations.
- (&define name lambda-list [&optional ("declare" &rest sexp)] def-body))
+ (&define name lambda-list [&optional stringp]
+ [&optional ("declare" &rest sexp)] def-body))
(def-edebug-spec arglist lambda-list) ;; deprecated - use lambda-list.
SLOT. A slot specified without a variable name is given a
variable name of the same name as the slot."
(declare (indent 2))
- ;; Transform the spec-list into a symbol-macrolet spec-list.
+ ;; Transform the spec-list into a cl-symbol-macrolet spec-list.
(let ((mappings (mapcar (lambda (entry)
(let ((var (if (listp entry) (car entry) entry))
(slot (if (listp entry) (cadr entry) entry)))
(list var `(slot-value ,object ',slot))))
spec-list)))
- (append (list 'symbol-macrolet mappings)
+ (append (list 'cl-symbol-macrolet mappings)
body)))
\f
;;; Simple generators, and query functions. None of these would do
(if (minibufferp)
(progn
(add-hook 'minibuffer-exit-hook
- (lambda () (setq eldoc-mode-line-string nil))
+ (lambda () (setq eldoc-mode-line-string nil
+ ;; http://debbugs.gnu.org/16920
+ eldoc-last-message nil))
nil t)
(with-current-buffer
(window-buffer
;; defined without cl.
(car ert--selector-history)
"t")))
- (completing-read (if (null default)
- "Run tests: "
- (format "Run tests (default %s): " default))
- obarray #'ert-test-boundp nil nil
- 'ert--selector-history default nil))
+ (read
+ (completing-read (if (null default)
+ "Run tests: "
+ (format "Run tests (default %s): " default))
+ obarray #'ert-test-boundp nil nil
+ 'ert--selector-history default nil)))
nil))
(unless message-fn (setq message-fn 'message))
(let ((output-buffer-name output-buffer-name)
(dolist (p (nth 9 ppss))
(push (cdr (syntax-after p)) closer))
(setq closer (apply #'string closer))
- (let* ((sexp (car (read-from-string
- (concat txt "lisp--witness--lisp" closer))))
+ (let* ((sexp (condition-case nil
+ (car (read-from-string
+ (concat txt "lisp--witness--lisp" closer)))
+ (end-of-file nil)))
(macroexpand-advice (lambda (expander form &rest args)
(condition-case nil
(apply expander form args)
(let ((adv-sig (gethash main advertised-signature-table))
(advice
(apply #'make-byte-code 128 byte-code
- (vector #'apply function main props) stack-depth
- nil
+ (vector #'apply function main props) stack-depth nil
(and (or (commandp function) (commandp main))
- (not (and (symbolp main) ;; Don't autoload too eagerly!
- (autoloadp (symbol-function main))))
+ ;; If we're adding the advice on advice--pending, don't
+ ;; build an interactive-form, which won't be used anyway
+ ;; and would risk autoloading `main' (or `function').
+ (not (eq main :advice--pending))
(list (advice--make-interactive-form
function main))))))
(when adv-sig (puthash advice adv-sig advertised-signature-table))
;; - `autoload' does nothing if the function is
;; not an autoload or undefined.
((or (not nf) (autoloadp nf))
+ (unless (get symbol 'advice--pending)
+ (put symbol 'advice--pending :advice--pending))
(get symbol 'advice--pending))
(t (symbol-function symbol)))
function props)
function)
(unless (advice--p (advice--symbol-function symbol))
;; Not advised any more.
+ (when (eq (get symbol 'advice--pending) :advice--pending)
+ (put symbol 'advice--pending nil))
(remove-function (get symbol 'defalias-fset-function)
#'advice--defalias-fset)
(let ((asr (get symbol 'advice--saved-rewrite)))
((symbolp dep) `(,dep "0"))
((stringp dep)
(error "Invalid requirement specifier: %S" dep))
+ ((and (listp dep) (null (cdr dep)))
+ (list (car dep) "0"))
(t dep)))
deps))))
'(menu-item "Help" package-menu-quick-help
:help "Show short key binding help for package-menu-mode"))
(define-key menu-map [mc]
- '(menu-item "View Commentary" package-menu-view-commentary
+ '(menu-item "Describe Package" package-menu-describe-package
:help "Display information about this package"))
map)
"Local keymap for `package-menu-mode' buffers.")
;; FILE now contains the current file name, with no suffix.
(unless (or (member file files-seen-this-dir)
;; Ignore these files.
- (member file '("subdirs" "leim-list")))
+ (member file (list "subdirs" "leim-list"
+ (file-name-sans-extension
+ dir-locals-file))))
;; File has not been seen yet in this directory.
;; This test prevents us declaring that XXX.el shadows
;; XXX.elc (or vice-versa) when they are in the same directory.
rules))))
(defun smie-config-guess ()
- "Try and figure out this buffer's indentation settings."
+ "Try and figure out this buffer's indentation settings.
+To save the result for future sessions, use `smie-config-save'."
(interactive)
+ (if (eq smie-grammar 'unset)
+ (user-error "This buffer does not seem to be using SMIE"))
(let ((config (smie-config--guess (point-min) (point-max))))
(cond
((null config) (message "Nothing to change"))
(message "Rules guessed: %S" config)))))
(defun smie-config-save ()
- "Save local rules for use with this major mode."
+ "Save local rules for use with this major mode.
+One way to generate local rules is the command `smie-config-guess'."
(interactive)
(cond
((null smie-config--buffer-local)
(setcdr existing config)
(push (cons major-mode config) smie-config))
(setq smie-config--mode-local config)
- (kill-local-variable smie-config--buffer-local)
+ (kill-local-variable 'smie-config--buffer-local)
(customize-mark-as-set 'smie-config)))))
(provide 'smie)
;;; edt.el --- enhanced EDT keypad mode emulation for GNU Emacs
-;; Copyright (C) 1986, 1992-1995, 2000-2014 Free Software Foundation,
-;; Inc.
+;; Copyright (C) 1986, 1992-1995, 2000-2014 Free Software Foundation, Inc.
;; Author: Kevin Gallagher <Kevin.Gallagher@boeing.com>
;; Maintainer: Kevin Gallagher <Kevin.Gallagher@boeing.com>
;; you initiate a GNU Emacs session, by adding the following line to
;; your init file:
;;
-;; (add-hook term-setup-hook 'edt-emulation-on)
+;; (add-hook 'emacs-startup-hook 'edt-emulation-on)
;; IMPORTANT: Be sure to read the Info node `edt' for more details.
;; It contains very helpful user information.
+2014-02-25 Julien Danjou <julien@danjou.info>
+
+ * erc-networks.el (erc-determine-network): Check that NETWORK as a
+ value, some servers set it to nothing.
+
2014-01-31 Glenn Morris <rgm@gnu.org>
* erc.el (erc-accidental-paste-threshold-seconds): Doc tweak.
server parameter NETWORK if provided, otherwise parse the server name and
search for a match in `erc-networks-alist'."
;; The server made it easy for us and told us the name of the NETWORK
- (if (assoc "NETWORK" erc-server-parameters)
- (intern (cdr (assoc "NETWORK" erc-server-parameters)))
- (or
- ;; Loop through `erc-networks-alist' looking for a match.
- (let ((server (or erc-server-announced-name erc-session-server)))
- (cl-loop for (name matcher) in erc-networks-alist
- when (and matcher
- (string-match (concat matcher "\\'") server))
- do (cl-return name)))
- 'Unknown)))
+ (let ((network-name (cdr (assoc "NETWORK" erc-server-parameters))))
+ (if network-name
+ (intern network-name)
+ (or
+ ;; Loop through `erc-networks-alist' looking for a match.
+ (let ((server (or erc-server-announced-name erc-session-server)))
+ (cl-loop for (name matcher) in erc-networks-alist
+ when (and matcher
+ (string-match (concat matcher "\\'") server))
+ do (cl-return name)))
+ 'Unknown))))
(defun erc-network ()
"Return the value of `erc-network' for the current server."
;; Change "completion" to "history reference"
;; to make the display accurate.
(with-output-to-temp-buffer history-buffer
- (display-completion-list history prefix)
+ (display-completion-list
+ (completion-hilit-commonality history (length prefix)))
(set-buffer history-buffer)
(forward-line 3)
(while (search-backward "completion" nil 'move)
(unless (terminal-parameter frame 'terminal-initted)
(set-terminal-parameter frame 'terminal-initted t)
(set-locale-environment nil frame)
- (tty-run-terminal-initialization frame))
+ (tty-run-terminal-initialization frame nil t))
(frame-set-background-mode frame t)
(face-set-after-frame-default frame parameters)
(setq success t))
(defvar tty-setup-hook nil
"Hook run after running the initialization function of a new text terminal.
+Specifically, `tty-run-terminal-initialization' runs this.
This can be used to fine tune the `input-decode-map', for example.")
-(defun tty-run-terminal-initialization (frame &optional type)
+(defun tty-run-terminal-initialization (frame &optional type run-hook)
"Run the special initialization code for the terminal type of FRAME.
The optional TYPE parameter may be used to override the autodetected
-terminal type to a different value."
+terminal type to a different value.
+
+If optional argument RUN-HOOK is non-nil, then as a final step,
+this runs the hook `tty-setup-hook'.
+
+If you set `term-file-prefix' to nil, this function does nothing."
(setq type (or type (tty-type frame)))
;; Load library for our terminal type.
;; User init file can set term-file-prefix to nil to prevent this.
(when (fboundp term-init-func)
(funcall term-init-func))
(set-terminal-parameter frame 'terminal-initted term-init-func)
- (run-hooks 'tty-setup-hook)))))
+ (if run-hook (run-hooks 'tty-setup-hook))))))
;; Called from C function init_display to initialize faces of the
;; dumped terminal frame on startup.
(append completion-setup-hook
(list 'file-cache-completion-setup-function))))
(with-output-to-temp-buffer file-cache-completions-buffer
- (display-completion-list completion-list string))))
+ (display-completion-list
+ (completion-hilit-commonality completion-list
+ (length string))))))
(setq file-cache-string (file-cache-file-name completion-string))
(if (string= file-cache-string (minibuffer-contents))
(minibuffer-message file-cache-sole-match-message)
like /ssh:SOME_REMOTE_MACHINE:FILE for the file name. You can
also visit local files as a different user by specifying
/sudo::FILE for the file name.
-See the Info node `(tramp)Filename Syntax' in the Tramp Info
+See the Info node `(tramp)File name Syntax' in the Tramp Info
manual, for more about this.
Interactively, or if WILDCARDS is non-nil in a call from Lisp,
("scm" . scheme-mode)
("[acjkwz]sh" . sh-mode)
("r?bash2?" . sh-mode)
+ ("dash" . sh-mode)
("\\(dt\\|pd\\|w\\)ksh" . sh-mode)
("es" . sh-mode)
("i?tcsh" . sh-mode)
((eq var 'lexical-binding)
(unless hack-local-variables--warned-lexical
(setq hack-local-variables--warned-lexical t)
- (display-warning :warning
- "Specify `lexical-binding' on the first line, not at the end")))
+ (display-warning
+ :warning
+ (format "%s: `lexical-binding' at end of file unreliable"
+ (file-name-nondirectory
+ (or buffer-file-name ""))))))
(t
(ignore-errors
(push (cons (if (eq var 'eval)
(setq active t))
(setq processes (cdr processes)))
(or (not active)
- (with-temp-buffer-window
+ (with-current-buffer-window
(get-buffer-create "*Process List*") nil
#'(lambda (window _value)
(with-selected-window window
(require 'dired)
(defgroup find-dired nil
- "Run a `find' command and dired the output."
+ "Run a `find' command and Dired the output."
:group 'dired
:prefix "find-")
;;;###autoload
(defun find-name-dired (dir pattern)
"Search DIR recursively for files matching the globbing pattern PATTERN,
-and run dired on those files.
+and run Dired on those files.
PATTERN is a shell wildcard (not an Emacs regexp) and need not be quoted.
The default command run (after changing into DIR) is
"Font-lock keywords for Finder mode.")
(defvar finder-headmark nil
- "Internal finder-mode variable, local in finder buffer.")
+ "Internal Finder mode variable, local in Finder buffer.")
;;; Code for regenerating the keyword list.
;; http://lists.gnu.org/archive/html/emacs-pretest-bug/2007-01/msg00469.html
;; ldefs-boot is not auto-generated, but has nothing useful.
(defvar finder-no-scan-regexp "\\(^\\.#\\|\\(loaddefs\\|ldefs-boot\\|\
-cus-load\\|finder-inf\\|esh-groups\\|subdirs\\)\\.el$\\)"
+cus-load\\|finder-inf\\|esh-groups\\|subdirs\\|leim-list\\)\\.el$\\)"
"Regexp matching file names not to scan for keywords.")
(autoload 'autoload-rubric "autoload")
+(defconst finder--builtins-descriptions
+ ;; I have no idea whether these are supposed to be capitalized
+ ;; and/or end in a full-stop. Existing file headers are inconsistent,
+ ;; but mainly seem to not do so.
+ '((emacs . "the extensible text editor")
+ (nxml . "a new XML mode"))
+ "Alist of built-in package descriptions.
+Entries have the form (PACKAGE-SYMBOL . DESCRIPTION).
+When generating `package--builtins', this overrides what the description
+would otherwise be.")
+
(defvar finder--builtins-alist
'(("calc" . calc)
("ede" . ede)
("decorate" . semantic)
("symref" . semantic)
("wisent" . semantic)
+ ;; This should really be ("nxml" . nxml-mode), because nxml-mode.el
+ ;; is the main file for the package. Then we would not need an
+ ;; entry in finder--builtins-descriptions. But I do not know if
+ ;; it is safe to change this, in case it is already in use.
("nxml" . nxml)
("org" . org)
("srecode" . srecode)
(setq package--builtins nil)
(setq finder-keywords-hash (make-hash-table :test 'eq))
(let ((el-file-regexp "^\\([^=].*\\)\\.el\\(\\.\\(gz\\|Z\\)\\)?$")
- package-override files base-name processed
+ package-override files base-name ; processed
summary keywords package version entry desc)
(dolist (d (or dirs load-path))
(when (file-exists-p (directory-file-name d))
(unless (or (string-match finder-no-scan-regexp f)
(null (setq base-name
(and (string-match el-file-regexp f)
- (intern (match-string 1 f)))))
- (memq base-name processed))
- (push base-name processed)
+ (intern (match-string 1 f))))))
+;; (memq base-name processed))
+;; There are multiple files in the tree with the same basename.
+;; So skipping files based on basename means you randomly (depending
+;; on which order the files are traversed in) miss some packages.
+;; http://debbugs.gnu.org/14010
+;; You might think this could lead to two files providing the same package,
+;; but it does not, because the duplicates are (at time of writing)
+;; all due to files in cedet, which end up with package-override set.
+;; FIXME this is obviously fragile.
+;; Make the (eq base-name package) case below issue a warning if
+;; package-override is nil?
+;; (push base-name processed)
(with-temp-buffer
(insert-file-contents (expand-file-name f d))
- (setq summary (lm-synopsis)
- keywords (mapcar 'intern (lm-keywords-list))
+ (setq keywords (mapcar 'intern (lm-keywords-list))
package (or package-override
(let ((str (lm-header "package")))
(if str (intern str)))
base-name)
+ summary (or (cdr
+ (assq package finder--builtins-descriptions))
+ (lm-synopsis))
version (lm-header "version")))
(when summary
(setq version (ignore-errors (version-to-list version)))
(push (cons package
(package-make-builtin version summary))
package--builtins))
+ ;; The idea here is that eg calc.el gets to define
+ ;; the description of the calc package.
+ ;; This does not work for eg nxml-mode.el.
((eq base-name package)
(setq desc (cdr entry))
(aset desc 0 version)
(packages (gethash id finder-keywords-hash)))
(unless packages
(error "No packages matching key `%s'" key))
- (package-show-package-list packages)))
+ (let ((package-list-unversioned t))
+ (package-show-package-list packages))))
(define-button-type 'finder-xref 'action #'finder-goto-xref)
key)))
(defun finder-select ()
- "Select item on current line in a finder buffer."
+ "Select item on current line in a Finder buffer."
(interactive)
(let ((key (finder-current-item)))
(if (string-match "\\.el$" key)
(finder-list-matches key))))
(defun finder-mouse-select (event)
- "Select item in a finder buffer with the mouse."
+ "Select item in a Finder buffer with the mouse."
(interactive "e")
(with-current-buffer (window-buffer (posn-window (event-start event)))
(goto-char (posn-point (event-start event)))
(let ((buf "*Finder*"))
(and (get-buffer buf) (kill-buffer buf))))
+(defun finder-unload-function ()
+ "Unload the Finder library."
+ (with-demoted-errors (unload-feature 'finder-inf t))
+ ;; continue standard unloading
+ nil)
+
\f
(provide 'finder)
(define-obsolete-function-alias 'new-frame 'make-frame "22.1")
(defvar frame-inherited-parameters '()
- ;; FIXME: Shouldn't we add `font' here as well?
"Parameters `make-frame' copies from the `selected-frame' to the new frame.")
(defvar x-display-name)
(with-no-warnings
(not (null dos-windows-version))))
((memq frame-type '(x w32 ns))
- t) ;; FIXME?
+ t)
(t
nil))))
(defun display-pixel-height (&optional display)
"Return the height of DISPLAY's screen in pixels.
+If DISPLAY is omitted or nil, it defaults to the selected frame's display.
+
For character terminals, each character counts as a single pixel.
+
For graphical terminals, note that on \"multi-monitor\" setups this
refers to the pixel height for all physical monitors associated
with DISPLAY. To get information for each physical monitor, use
-`display-monitor-attributes-list'.
-If DISPLAY is omitted or nil, it defaults to the selected frame's display."
+`display-monitor-attributes-list'."
(let ((frame-type (framep-on-display display)))
(cond
((memq frame-type '(x w32 ns))
(defun display-pixel-width (&optional display)
"Return the width of DISPLAY's screen in pixels.
+If DISPLAY is omitted or nil, it defaults to the selected frame's display.
+
For character terminals, each character counts as a single pixel.
+
For graphical terminals, note that on \"multi-monitor\" setups this
refers to the pixel width for all physical monitors associated
with DISPLAY. To get information for each physical monitor, use
-`display-monitor-attributes-list'.
-If DISPLAY is omitted or nil, it defaults to the selected frame's display."
+`display-monitor-attributes-list'."
(let ((frame-type (framep-on-display display)))
(cond
((memq frame-type '(x w32 ns))
(defcustom display-mm-dimensions-alist nil
"Alist for specifying screen dimensions in millimeters.
-The dimensions will be used for `display-mm-height' and
-`display-mm-width' if defined for the respective display.
+The functions `display-mm-height' and `display-mm-width' consult
+this list before asking the system.
-Each element of the alist has the form (display . (width . height)),
-e.g. (\":0.0\" . (287 . 215)).
+Each element has the form (DISPLAY . (WIDTH . HEIGHT)), e.g.
+\(\":0.0\" . (287 . 215)).
-If `display' equals t, it specifies dimensions for all graphical
-displays not explicitly specified."
+If `display' is t, it specifies dimensions for all graphical displays
+not explicitly specified."
:version "22.1"
:type '(alist :key-type (choice (string :tag "Display name")
(const :tag "Default" t))
(defun display-mm-height (&optional display)
"Return the height of DISPLAY's screen in millimeters.
-System values can be overridden by `display-mm-dimensions-alist'.
-If the information is unavailable, value is nil.
+If the information is unavailable, this function returns nil.
+If DISPLAY is omitted or nil, it defaults to the selected frame's display.
+
+You can override what the system thinks the result should be by
+adding an entry to `display-mm-dimensions-alist'.
+
For graphical terminals, note that on \"multi-monitor\" setups this
refers to the height in millimeters for all physical monitors
associated with DISPLAY. To get information for each physical
-monitor, use `display-monitor-attributes-list'.
-If DISPLAY is omitted or nil, it defaults to the selected frame's display."
+monitor, use `display-monitor-attributes-list'."
(and (memq (framep-on-display display) '(x w32 ns))
(or (cddr (assoc (or display (frame-parameter nil 'display))
display-mm-dimensions-alist))
(defun display-mm-width (&optional display)
"Return the width of DISPLAY's screen in millimeters.
-System values can be overridden by `display-mm-dimensions-alist'.
-If the information is unavailable, value is nil.
+If the information is unavailable, this function returns nil.
+If DISPLAY is omitted or nil, it defaults to the selected frame's display.
+
+You can override what the system thinks the result should be by
+adding an entry to `display-mm-dimensions-alist'.
+
For graphical terminals, note that on \"multi-monitor\" setups this
refers to the width in millimeters for all physical monitors
associated with DISPLAY. To get information for each physical
-monitor, use `display-monitor-attributes-list'.
-If DISPLAY is omitted or nil, it defaults to the selected frame's display."
+monitor, use `display-monitor-attributes-list'."
(and (memq (framep-on-display display) '(x w32 ns))
(or (cadr (assoc (or display (frame-parameter nil 'display))
display-mm-dimensions-alist))
;; `frameset-filter-params' can be useful, even if you're not using
;; framesets. The interface of `frameset-filter-params' is generic
;; and does not depend of global state, with one exception: it uses
-;; the internal variable `frameset--target-display' to decide if, and
-;; how, to modify the `display' parameter of FILTERED. But that
-;; should not represent any problem, because it's only meaningful
-;; when restoring, and customized uses of `frameset-filter-params'
-;; are likely to use their own filter alist and just call
+;; the dynamically bound variable `frameset--target-display' to decide
+;; if, and how, to modify the `display' parameter of FILTERED. That
+;; should not represent a problem, because it's only meaningful when
+;; restoring, and customized uses of `frameset-filter-params' are
+;; likely to use their own filter alist and just call
;;
;; (setq my-filtered (frameset-filter-params my-params my-filters t))
;;
Frame parameters not on this alist are passed intact, as if they were
defined with ACTION = nil.")
-(defvar frameset--target-display nil
- ;; Either (minibuffer . VALUE) or nil.
- ;; This refers to the current frame config being processed inside
- ;; `frameset-restore' and its auxiliary functions (like filtering).
- ;; If nil, there is no need to change the display.
- ;; If non-nil, display parameter to use when creating the frame.
- "Internal use only.")
+;; Dynamically bound in `frameset-save', `frameset-restore'.
+(defvar frameset--target-display)
+;; Either (display . VALUE) or nil.
+;; This refers to the current frame config being processed with
+;; `frameset-filter-params' and its auxiliary filtering functions.
+;; If nil, there is no need to change the display.
+;; If non-nil, display parameter to use when creating the frame.
(defun frameset-switch-to-gui-p (parameters)
"True when switching to a graphic display.
should be saved; if PREDICATE is nil, all frames from FRAME-LIST are saved.
PROPERTIES is a user-defined property list to add to the frameset."
(let* ((list (or (copy-sequence frame-list) (frame-list)))
+ (frameset--target-display nil)
(frames (cl-delete-if-not #'frame-live-p
(if predicate
(cl-delete-if-not predicate list)
\f
;; Restoring framesets
-(defvar frameset--reuse-list nil
- "The list of frames potentially reusable.
-Its value is only meaningful during execution of `frameset-restore'.
-Internal use only.")
+;; Dynamically bound in `frameset-restore'.
+(defvar frameset--reuse-list)
+(defvar frameset--action-map)
(defun frameset-compute-pos (value left/top right/bottom)
"Return an absolute positioning value for a frame.
(modify-frame-parameters frame params))))))
(defun frameset--find-frame-if (predicate display &rest args)
- "Find a frame in `frameset--reuse-list' satisfying PREDICATE.
+ "Find a reusable frame satisfying PREDICATE.
Look through available frames whose display property matches DISPLAY
and return the first one for which (PREDICATE frame ARGS) returns t.
If PREDICATE is nil, it is always satisfied. Internal use only."
flickering; other parameters, like `minibuffer' and `border-width', can
not be changed once the frame has been created. Internal use only."
(cl-loop for param in '(left top with height border-width minibuffer)
- collect (assq param parameters)))
+ when (assq param parameters) collect it))
(defun frameset--restore-frame (parameters window-state filters force-onscreen)
"Set up and return a frame according to its saved state.
(push visible alt-cfg)
(push (cons 'fullscreen fullscreen) alt-cfg)))
- ;; Time to find or create a frame an apply the big bunch of parameters.
- ;; If a frame needs to be created and it falls partially or fully offscreen,
- ;; sometimes it gets "pushed back" onscreen; however, moving it afterwards is
- ;; allowed. So we create the frame as invisible and then reapply the full
- ;; parameter alist (including position and size parameters).
- (setq frame (or (and frameset--reuse-list
- (frameset--reuse-frame display filtered-cfg))
- (make-frame-on-display display
- (cons '(visibility)
- (frameset--initial-params filtered-cfg)))))
+ ;; Time to find or create a frame and apply the big bunch of parameters.
+ (setq frame (and frameset--reuse-list
+ (frameset--reuse-frame display filtered-cfg)))
+ (if frame
+ (puthash frame :reused frameset--action-map)
+ ;; If a frame needs to be created and it falls partially or fully offscreen,
+ ;; sometimes it gets "pushed back" onscreen; however, moving it afterwards is
+ ;; allowed. So we create the frame as invisible and then reapply the full
+ ;; parameter alist (including position and size parameters).
+ (setq frame (make-frame-on-display display
+ (cons '(visibility)
+ (frameset--initial-params filtered-cfg))))
+ (puthash frame :created frameset--action-map))
+
(modify-frame-parameters frame
(if (eq (frame-parameter frame 'fullscreen) fullscreen)
;; Workaround for bug#14949
;;;###autoload
(cl-defun frameset-restore (frameset
&key predicate filters reuse-frames
- force-display force-onscreen)
+ force-display force-onscreen
+ cleanup-frames)
"Restore a FRAMESET into the current display(s).
PREDICATE is a function called with two arguments, the parameter alist
FILTERS is an alist of parameter filters; if nil, the value of
`frameset-filter-alist' is used instead.
-REUSE-FRAMES selects the policy to use to reuse frames when restoring:
- t Reuse existing frames if possible, and delete those not reused.
- nil Restore frameset in new frames and delete existing frames.
- :keep Restore frameset in new frames and keep the existing ones.
- LIST A list of frames to reuse; only these are reused (if possible).
- Remaining frames in this list are deleted; other frames not
- included on the list are left untouched.
+REUSE-FRAMES selects the policy to reuse frames when restoring:
+ t All existing frames can be reused.
+ nil No existing frame can be reused.
+ match Only frames with matching frame ids can be reused.
+ PRED A predicate function; it receives as argument a live frame,
+ and must return non-nil to allow reusing it, nil otherwise.
FORCE-DISPLAY can be:
t Frames are restored in the current display.
nil Frames are restored, if possible, in their original displays.
- :delete Frames in other displays are deleted instead of restored.
+ delete Frames in other displays are deleted instead of restored.
PRED A function called with two arguments, the parameter alist and
the window state (in that order). It must return t, nil or
- `:delete', as above but affecting only the frame that will
+ `delete', as above but affecting only the frame that will
be created from that parameter alist.
FORCE-ONSCREEN can be:
t Force onscreen only those frames that are fully offscreen.
nil Do not force any frame back onscreen.
- :all Force onscreen any frame fully or partially offscreen.
+ all Force onscreen any frame fully or partially offscreen.
PRED A function called with three arguments,
- the live frame just restored,
- a list (LEFT TOP WIDTH HEIGHT), describing the frame,
- a list (LEFT TOP WIDTH HEIGHT), describing the workarea.
It must return non-nil to force the frame onscreen, nil otherwise.
+CLEANUP-FRAMES allows to \"clean up\" the frame list after restoring a frameset:
+ t Delete all frames that were not created or restored upon.
+ nil Keep all frames.
+ FUNC A function called with two arguments:
+ - FRAME, a live frame.
+ - ACTION, which can be one of
+ :rejected Frame existed, but was not a candidate for reuse.
+ :ignored Frame existed, was a candidate, but wasn't reused.
+ :reused Frame existed, was a candidate, and restored upon.
+ :created Frame didn't exist, was created and restored upon.
+ Return value is ignored.
+
Note the timing and scope of the operations described above: REUSE-FRAMES
affects existing frames; PREDICATE, FILTERS and FORCE-DISPLAY affect the frame
-being restored before that happens; and FORCE-ONSCREEN affects the frame once
-it has been restored.
+being restored before that happens; FORCE-ONSCREEN affects the frame once
+it has been restored; and CLEANUP-FRAMES affects all frames alive after the
+restoration, including those that have been reused or created anew.
All keyword parameters default to nil."
(cl-assert (frameset-valid-p frameset))
- (let (other-frames)
-
- ;; frameset--reuse-list is a list of frames potentially reusable. Later we
- ;; will decide which ones can be reused, and how to deal with any leftover.
- (pcase reuse-frames
- ((or `nil `:keep)
- (setq frameset--reuse-list nil
- other-frames (frame-list)))
- ((pred consp)
- (setq frameset--reuse-list (copy-sequence reuse-frames)
- other-frames (cl-delete-if (lambda (frame)
- (memq frame frameset--reuse-list))
- (frame-list))))
- (_
- (setq frameset--reuse-list (frame-list)
- other-frames nil)))
+ (let* ((frames (frame-list))
+ (frameset--action-map (make-hash-table :test #'eq))
+ ;; frameset--reuse-list is a list of frames potentially reusable. Later we
+ ;; will decide which ones can be reused, and how to deal with any leftover.
+ (frameset--reuse-list
+ (pcase reuse-frames
+ (`t
+ frames)
+ (`nil
+ nil)
+ (`match
+ (cl-loop for (state) in (frameset-states frameset)
+ when (frameset-frame-with-id (frameset-cfg-id state) frames)
+ collect it))
+ ((pred functionp)
+ (cl-remove-if-not reuse-frames frames))
+ (_
+ (error "Invalid arg :reuse-frames %s" reuse-frames)))))
+
+ ;; Mark existing frames in the map; candidates to reuse are marked as :ignored;
+ ;; they will be reassigned later, if chosen.
+ (dolist (frame frames)
+ (puthash frame
+ (if (memq frame frameset--reuse-list) :ignored :rejected)
+ frameset--action-map))
;; Sort saved states to guarantee that minibufferless frames will be created
;; after the frames that contain their minibuffer windows.
(force-display (if (functionp force-display)
(funcall force-display frame-cfg window-cfg)
force-display))
+ (frameset--target-display nil)
frame to-tty duplicate)
;; Only set target if forcing displays and the target display is different.
- (cond ((frameset-keep-original-display-p force-display)
- (setq frameset--target-display nil))
- ((eq (frame-parameter nil 'display) (cdr (assq 'display frame-cfg)))
- (setq frameset--target-display nil))
- (t
- (setq frameset--target-display (cons 'display
- (frame-parameter nil 'display))
- to-tty (null (cdr frameset--target-display)))))
+ (unless (or (frameset-keep-original-display-p force-display)
+ (eq (frame-parameter nil 'display)
+ (cdr (assq 'display frame-cfg))))
+ (setq frameset--target-display (cons 'display
+ (frame-parameter nil 'display))
+ to-tty (null (cdr frameset--target-display))))
;; Time to restore frames and set up their minibuffers as they were.
;; We only skip a frame (thus deleting it) if either:
;; - we're switching displays, and the user chose the option to delete, or
;; - we're switching to tty, and the frame to restore is minibuffer-only.
(unless (and frameset--target-display
- (or (eq force-display :delete)
+ (or (eq force-display 'delete)
(and to-tty
(eq (cdr (assq 'minibuffer frame-cfg)) 'only))))
;; To avoid duplicating frame ids after restoration, we note any
;; existing frame whose id matches a frame configuration in the
;; frameset. Once the frame config is properly restored, we can
;; reset the old frame's id to nil.
- (setq duplicate (and other-frames
- (or (eq reuse-frames :keep) (consp reuse-frames))
- (frameset-frame-with-id (frameset-cfg-id frame-cfg)
- other-frames)))
+ (setq duplicate (frameset-frame-with-id (frameset-cfg-id frame-cfg)
+ frames))
;; Restore minibuffers. Some of this stuff could be done in a filter
;; function, but it would be messy because restoring minibuffers affects
;; global state; it's best to do it here than add a bunch of global
;; other frames are already visible (discussed in thread for bug#14841).
(sit-for 0 t)
- ;; Delete remaining frames, but do not fail if some resist being deleted.
- (unless (eq reuse-frames :keep)
- (dolist (frame (sort (nconc (if (listp reuse-frames) nil other-frames)
- frameset--reuse-list)
- ;; Minibufferless frames must go first to avoid
- ;; errors when attempting to delete a frame whose
- ;; minibuffer window is used by another frame.
- #'frameset-minibufferless-first-p))
- (condition-case err
- (delete-frame frame)
- (error
- (delay-warning 'frameset (error-message-string err))))))
- (setq frameset--reuse-list nil
- frameset--target-display nil)
+ ;; Clean up the frame list
+ (when cleanup-frames
+ (let ((map nil)
+ (cleanup (if (eq cleanup-frames t)
+ (lambda (frame action)
+ (when (memq action '(:rejected :ignored))
+ (delete-frame frame)))
+ cleanup-frames)))
+ (maphash (lambda (frame _action) (push frame map)) frameset--action-map)
+ (dolist (frame (sort map
+ ;; Minibufferless frames must go first to avoid
+ ;; errors when attempting to delete a frame whose
+ ;; minibuffer window is used by another frame.
+ #'frameset-minibufferless-first-p))
+ (condition-case-unless-debug err
+ (funcall cleanup frame (gethash frame frameset--action-map))
+ (error
+ (delay-warning 'frameset (error-message-string err) :warning))))))
;; Make sure there's at least one visible frame.
- (unless (or (daemonp) (visible-frame-list))
- (make-frame-visible (car (frame-list))))))
+ (unless (or (daemonp)
+ (catch 'visible
+ (maphash (lambda (frame _)
+ (and (frame-live-p frame) (frame-visible-p frame)
+ (throw 'visible t)))
+ frameset--action-map)))
+ (make-frame-visible (selected-frame)))))
\f
;; Register support
+;;;###autoload
(defun frameset--jump-to-register (data)
"Restore frameset from DATA stored in register.
Called from `jump-to-register'. Internal use only."
- (let ((fs (aref data 0))
- reuse-frames iconify-list)
- (if current-prefix-arg
- ;; Reuse all frames and delete any left unused
- (setq reuse-frames t)
- ;; Reuse matching frames and leave others to be iconified
- (setq iconify-list (frame-list))
- (dolist (state (frameset-states fs))
- (let ((frame (frameset-frame-with-id (frameset-cfg-id (car state))
- iconify-list)))
- (when frame
- (push frame reuse-frames)
- (setq iconify-list (delq frame iconify-list))))))
- (frameset-restore fs
- :filters frameset-session-filter-alist
- :reuse-frames reuse-frames)
- (mapc #'iconify-frame iconify-list))
+ (frameset-restore
+ (aref data 0)
+ :filters frameset-session-filter-alist
+ :reuse-frames (if current-prefix-arg t 'match)
+ :cleanup-frames (if current-prefix-arg
+ ;; delete frames
+ nil
+ ;; iconify frames
+ (lambda (frame action)
+ (pcase action
+ (`rejected (iconify-frame frame))
+ ;; In the unexpected case that a frame was a candidate
+ ;; (matching frame id) and yet not restored, remove it
+ ;; because it is in fact a duplicate.
+ (`ignored (delete-frame frame))))))
;; Restore selected frame, buffer and point.
(let ((frame (frameset-frame-with-id (aref data 1)))
+2014-03-07 Lars Ingebrigtsen <larsi@gnus.org>
+
+ * nnimap.el (nnimap-request-accept-article): Make respooling to nnimap
+ groups work again.
+
+2014-03-07 George McNinch <gmcninch@gmail.com> (tiny change)
+
+ * nnir.el (nnir-run-namazu): Parse namazu results that are larger than
+ 999 correctly (i.e. "1,342").
+
+2014-03-07 Lars Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-agent.el (gnus-agent-update-files-total-fetched-for): Don't bug
+ out if the directory doesn't exist.
+
+2014-03-05 Lars Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-group.el (gnus-group-make-group): Clarify prompt.
+
2014-02-22 Daniel Colascione <dancol@dancol.org>
* auth-source.el (auth-source-secrets-listify-pattern): New function.
2010-03-30 Chong Yidong <cyd@stupidchicken.com>
- * message.el (message-default-mail-headers):
+ * message.el (message-default-mail-headers)
(message-default-headers): Carry the value mail-default-headers over
into message-default-mail-headers, rather than message-default-headers.
2002-08-07 Simon Josefsson <jas@extundo.com>
* sieve-manage.el (require): Use SASL, not RFC2104/MD5.
- (sieve-manage-authenticators):
+ (sieve-manage-authenticators)
(sieve-manage-authenticator-alist): Add some SASL mechs.
(sieve-sasl-auth): New function.
- (sieve-manage-cram-md5-auth):
+ (sieve-manage-cram-md5-auth)
(sieve-manage-plain-auth): Rewrite using SASL library.
(sieve-manage-digest-md5-p, sieve-manage-digest-md5-auth)
(sieve-manage-scram-md5-p, sieve-manage-scram-md5-auth)
1998-08-26 Mike McEwan <mike@lotusland.demon.co.uk>
* gnus-sum.el (gnus-build-all-threads): `save-excursion' and
- `set-buffer' back to `gnus-summary-buffer' in order to access
- buffer-local variables.
+ `set-buffer' back to `gnus-summary-buffer' in order to access
+ buffer-local variables.
1998-08-26 Lars Magne Ingebrigtsen <larsi@gnus.org>
1998-07-11 Mike McEwan <mike@lotusland.demon.co.uk>
* gnus-agent.el (gnus-agent-fetch-headers): Note last fetched
- headers per sesion to aid expiry in `headers only' groups.
+ headers per sesion to aid expiry in `headers only' groups.
* gnus-agent.el (gnus-agent-expire): Update group info to add
- expired articles to list of read articles and prevent
+ expired articles to list of read articles and prevent
re-fetching.
1998-07-12 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
1998-06-05 Hrvoje Niksic <hniksic@srce.hr>
* nnmail.el (nnmail-get-split-group): Don't regexp-quote
- nnmail-procmail-suffix.
+ nnmail-procmail-suffix.
1998-06-24 Kim-Minh Kaplan <kaplan@sky.fr>
(gnus-picons-setup-buffer): New function.
(gnus-picons-set-buffer): Use them.
(gnus-picons-display-x-face): Put back the `buf' binding: it is
- needed when `gnus-picons-display-where' is not set to article.
- Also move the X-Face to the left, near the address. It seems more
- logical.
+ needed when `gnus-picons-display-where' is not set to article.
+ Also move the X-Face to the left, near the address. It seems more
+ logical.
1998-02-28 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
(gnus-split-methods): Add default values for choices.
* gnus-score.el (gnus-home-score-file): Add non-nil default for
- function.
+ function.
(gnus-home-adapt-file): Ditto.
* gnus-sum.el (gnus-move-split-methods): Add default values for
1997-12-05 Danny Siu <dsiu@adobe.com>
* nndoc.el (nndoc-babyl-body-begin): quote the regexp for the
- string "*** EOOH ***" properly.
+ string "*** EOOH ***" properly.
(nndoc-babyl-head-begin): Same as above.
1997-12-14 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
1997-11-27 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* nnmail.el (nnmail-file-coding-system): Use `raw-text' in
- default.
+ default.
* nnheader.el (nnheader-file-coding-system): Use `raw-text' in
- default.
+ default.
1997-12-06 Kim-Minh Kaplan <KimMinh.Kaplan@utopia.eunet.fr>
1997-10-16 Colin Rafferty <craffert@ml.com>
* message.el (message-make-fqdn): Made certain that user-mail is
- not nil.
+ not nil.
1997-10-25 David S. Goldberg <dsg@linus.mitre.org>
(defun gnus-agent-group-covered-p (group)
(gnus-agent-method-p (gnus-group-method group)))
-(defun gnus-agent-update-files-total-fetched-for
- (group delta &optional method path)
+(defun gnus-agent-update-files-total-fetched-for (group delta
+ &optional method path)
"Update, or set, the total disk space used by the articles that the
agent has fetched."
(when gnus-agent-total-fetched-hashtb
(gnus-sethash path (make-list 3 0)
gnus-agent-total-fetched-hashtb)))
(file-name-coding-system nnmail-pathname-coding-system))
- (when (listp delta)
- (if delta
- (let ((sum 0.0)
+ (when (file-exists-p path)
+ (when (listp delta)
+ (if delta
+ (let ((sum 0.0)
+ file)
+ (while (setq file (pop delta))
+ (incf sum (float (or (nth 7 (file-attributes
+ (nnheader-concat
+ path
+ (if (numberp file)
+ (number-to-string file)
+ file)))) 0))))
+ (setq delta sum))
+ (let ((sum (- (nth 2 entry)))
+ (info (directory-files-and-attributes
+ path nil "^-?[0-9]+$" t))
file)
- (while (setq file (pop delta))
- (incf sum (float (or (nth 7 (file-attributes
- (nnheader-concat
- path
- (if (numberp file)
- (number-to-string file)
- file)))) 0))))
- (setq delta sum))
- (let ((sum (- (nth 2 entry)))
- (info (directory-files-and-attributes path nil "^-?[0-9]+$" t))
- file)
- (while (setq file (pop info))
- (incf sum (float (or (nth 8 file) 0))))
- (setq delta sum))))
+ (while (setq file (pop info))
+ (incf sum (float (or (nth 8 file) 0))))
+ (setq delta sum))))
- (setq gnus-agent-need-update-total-fetched-for t)
- (incf (nth 2 entry) delta)))))
+ (setq gnus-agent-need-update-total-fetched-for t)
+ (incf (nth 2 entry) delta))))))
(defun gnus-agent-update-view-total-fetched-for
(group agent-over &optional method path)
(interactive
(list
(gnus-read-group "Group name: ")
- (gnus-read-method "From method")))
+ (gnus-read-method "Select method for new group (use tab for completion)")))
(when (stringp method)
(setq method (or (gnus-server-to-method method) method)))
(nnimap-wait-for-response sequence))))))
(deffoo nnimap-request-accept-article (group &optional server last)
+ (unless group
+ ;; We're respooling. Find out where mail splitting would place
+ ;; this article.
+ (setq group
+ (caar
+ (nnmail-article-group
+ `(lambda (group)
+ (nnml-active-number group ,server))))))
(setq group (nnimap-decode-gnus-group group))
(when (nnimap-change-group nil server)
(nnmail-check-syntax)
(goto-char (point-min))
(while (re-search-forward
- "^\\([0-9]+\\.\\).*\\((score: \\([0-9]+\\)\\))\n\\([^ ]+\\)"
+ "^\\([0-9,]+\\.\\).*\\((score: \\([0-9]+\\)\\))\n\\([^ ]+\\)"
nil t)
(setq score (match-string 3)
group (file-name-directory (match-string 4))
;; Return the text we displayed.
(buffer-string))))))
-(defun help-split-fundoc (docstring def)
- "Split a function DOCSTRING into the actual doc and the usage info.
-Return (USAGE . DOC) or nil if there's no usage info, where USAGE info
-is a string describing the argument list of DEF, such as
-\"(apply FUNCTION &rest ARGUMENTS)\".
-DEF is the function whose usage we're looking for in DOCSTRING."
- ;; Functions can get the calling sequence at the end of the doc string.
- ;; In cases where `function' has been fset to a subr we can't search for
- ;; function's name in the doc string so we use `fn' as the anonymous
- ;; function name instead.
- (when (and docstring (string-match "\n\n(fn\\(\\( .*\\)?)\\)\\'" docstring))
- (cons (format "(%s%s"
- ;; Replace `fn' with the actual function name.
- (if (symbolp def) def "anonymous")
- (match-string 1 docstring))
- (unless (zerop (match-beginning 0))
- (substring docstring 0 (match-beginning 0))))))
-
-;; FIXME: Move to subr.el?
-(defun help-add-fundoc-usage (docstring arglist)
- "Add the usage info to DOCSTRING.
-If DOCSTRING already has a usage info, then just return it unchanged.
-The usage info is built from ARGLIST. DOCSTRING can be nil.
-ARGLIST can also be t or a string of the form \"(FUN ARG1 ARG2 ...)\"."
- (unless (stringp docstring) (setq docstring ""))
- (if (or (string-match "\n\n(fn\\(\\( .*\\)?)\\)\\'" docstring)
- (eq arglist t))
- docstring
- (concat docstring
- (if (string-match "\n?\n\\'" docstring)
- (if (< (- (match-end 0) (match-beginning 0)) 2) "\n" "")
- "\n\n")
- (if (and (stringp arglist)
- (string-match "\\`([^ ]+\\(.*\\))\\'" arglist))
- (concat "(fn" (match-string 1 arglist) ")")
- (format "%S" (help-make-usage 'fn arglist))))))
-
-;; FIXME: Move to subr.el?
-(defun help-function-arglist (def &optional preserve-names)
- "Return a formal argument list for the function DEF.
-IF PRESERVE-NAMES is non-nil, return a formal arglist that uses
-the same names as used in the original source code, when possible."
- ;; Handle symbols aliased to other symbols.
- (if (and (symbolp def) (fboundp def)) (setq def (indirect-function def)))
- ;; If definition is a macro, find the function inside it.
- (if (eq (car-safe def) 'macro) (setq def (cdr def)))
- (cond
- ((and (byte-code-function-p def) (listp (aref def 0))) (aref def 0))
- ((eq (car-safe def) 'lambda) (nth 1 def))
- ((eq (car-safe def) 'closure) (nth 2 def))
- ((or (and (byte-code-function-p def) (integerp (aref def 0)))
- (subrp def))
- (or (when preserve-names
- (let* ((doc (condition-case nil (documentation def) (error nil)))
- (docargs (if doc (car (help-split-fundoc doc nil))))
- (arglist (if docargs
- (cdar (read-from-string (downcase docargs)))))
- (valid t))
- ;; Check validity.
- (dolist (arg arglist)
- (unless (and (symbolp arg)
- (let ((name (symbol-name arg)))
- (if (eq (aref name 0) ?&)
- (memq arg '(&rest &optional))
- (not (string-match "\\." name)))))
- (setq valid nil)))
- (when valid arglist)))
- (let* ((args-desc (if (not (subrp def))
- (aref def 0)
- (let ((a (subr-arity def)))
- (logior (car a)
- (if (numberp (cdr a))
- (lsh (cdr a) 8)
- (lsh 1 7))))))
- (max (lsh args-desc -8))
- (min (logand args-desc 127))
- (rest (logand args-desc 128))
- (arglist ()))
- (dotimes (i min)
- (push (intern (concat "arg" (number-to-string (1+ i)))) arglist))
- (when (> max min)
- (push '&optional arglist)
- (dotimes (i (- max min))
- (push (intern (concat "arg" (number-to-string (+ 1 i min))))
- arglist)))
- (unless (zerop rest) (push '&rest arglist) (push 'rest arglist))
- (nreverse arglist))))
- ((and (autoloadp def) (not (eq (nth 4 def) 'keymap)))
- "[Arg list not available until function definition is loaded.]")
- (t t)))
-
-;; FIXME: Move to subr.el?
-(defun help-make-usage (function arglist)
- (cons (if (symbolp function) function 'anonymous)
- (mapcar (lambda (arg)
- (if (not (symbolp arg)) arg
- (let ((name (symbol-name arg)))
- (cond
- ((string-match "\\`&" name) arg)
- ((string-match "\\`_" name)
- (intern (upcase (substring name 1))))
- (t (intern (upcase name)))))))
- arglist)))
;; Could be this, if we make symbol-file do the work below.
;; (defun help-C-file-name (subr-or-var kind)
It computes a message, and applies the optional argument FUNCTION to it.
If FUNCTION is nil, it applies `message', thus displaying the message.
In addition, this function sets up `help-return-method', which see, that
-specifies what to do when the user exits the help buffer."
+specifies what to do when the user exits the help buffer.
+
+Do not call this in the scope of `with-help-window'."
(and (not (get-buffer-window standard-output))
(let ((first-message
(cond ((or
then we display only bindings that start with that prefix."
(let ((buf (current-buffer)))
(with-help-window (help-buffer)
- (describe-buffer-bindings buf prefix menus))))
+ ;; Be aware that `describe-buffer-bindings' puts its output into
+ ;; the current buffer.
+ (with-current-buffer (help-buffer)
+ (describe-buffer-bindings buf prefix menus)))))
(defun where-is (definition &optional insert)
"Print message listing key sequences that invoke the command DEFINITION.
;; providing the following additional twists:
;; (1) It puts the buffer in `help-mode' (via `help-mode-setup') and
-;; adds cross references (via `help-mode-finish').
+;; adds cross references (via `help-mode-finish').
;; (2) It issues a message telling how to scroll and quit the help
-;; window (via `help-window-setup').
+;; window (via `help-window-setup').
;; (3) An option (customizable via `help-window-select') to select the
-;; help window automatically.
+;; help window automatically.
;; (4) A marker (`help-window-point-marker') to move point in the help
-;; window to an arbitrary buffer position.
-
-;; Note: It's usually always wrong to use `help-print-return-message' in
-;; the body of `with-help-window'.
+;; window to an arbitrary buffer position.
(defmacro with-help-window (buffer-name &rest body)
- "Display buffer with name BUFFER-NAME in a help window evaluating BODY.
-Select help window if the current value of the user option
+ "Display buffer named BUFFER-NAME in a help window.
+Evaluate the forms in BODY with standard output bound to a buffer
+called BUFFER-NAME (creating it if it does not exist), put that
+buffer in `help-mode', display the buffer in a window (see
+`with-temp-buffer-window' for details) and issue a message how to
+deal with that \"help\" window when it's no more needed. Select
+the help window if the current value of the user option
`help-window-select' says so. Return last value in BODY."
(declare (indent 1) (debug t))
`(progn
(if (stringp msg)
(with-output-to-temp-buffer " *Char Help*"
(princ msg)))))
+
+\f
+;; The following functions used to be in help-fns.el, which is not preloaded.
+;; But for various reasons, they are more widely needed, so they were
+;; moved to this file, which is preloaded. http://debbugs.gnu.org/17001
+
+(defun help-split-fundoc (docstring def)
+ "Split a function DOCSTRING into the actual doc and the usage info.
+Return (USAGE . DOC) or nil if there's no usage info, where USAGE info
+is a string describing the argument list of DEF, such as
+\"(apply FUNCTION &rest ARGUMENTS)\".
+DEF is the function whose usage we're looking for in DOCSTRING."
+ ;; Functions can get the calling sequence at the end of the doc string.
+ ;; In cases where `function' has been fset to a subr we can't search for
+ ;; function's name in the doc string so we use `fn' as the anonymous
+ ;; function name instead.
+ (when (and docstring (string-match "\n\n(fn\\(\\( .*\\)?)\\)\\'" docstring))
+ (cons (format "(%s%s"
+ ;; Replace `fn' with the actual function name.
+ (if (symbolp def) def "anonymous")
+ (match-string 1 docstring))
+ (unless (zerop (match-beginning 0))
+ (substring docstring 0 (match-beginning 0))))))
+
+(defun help-add-fundoc-usage (docstring arglist)
+ "Add the usage info to DOCSTRING.
+If DOCSTRING already has a usage info, then just return it unchanged.
+The usage info is built from ARGLIST. DOCSTRING can be nil.
+ARGLIST can also be t or a string of the form \"(FUN ARG1 ARG2 ...)\"."
+ (unless (stringp docstring) (setq docstring ""))
+ (if (or (string-match "\n\n(fn\\(\\( .*\\)?)\\)\\'" docstring)
+ (eq arglist t))
+ docstring
+ (concat docstring
+ (if (string-match "\n?\n\\'" docstring)
+ (if (< (- (match-end 0) (match-beginning 0)) 2) "\n" "")
+ "\n\n")
+ (if (and (stringp arglist)
+ (string-match "\\`([^ ]+\\(.*\\))\\'" arglist))
+ (concat "(fn" (match-string 1 arglist) ")")
+ (format "%S" (help-make-usage 'fn arglist))))))
+
+(defun help-function-arglist (def &optional preserve-names)
+ "Return a formal argument list for the function DEF.
+IF PRESERVE-NAMES is non-nil, return a formal arglist that uses
+the same names as used in the original source code, when possible."
+ ;; Handle symbols aliased to other symbols.
+ (if (and (symbolp def) (fboundp def)) (setq def (indirect-function def)))
+ ;; If definition is a macro, find the function inside it.
+ (if (eq (car-safe def) 'macro) (setq def (cdr def)))
+ (cond
+ ((and (byte-code-function-p def) (listp (aref def 0))) (aref def 0))
+ ((eq (car-safe def) 'lambda) (nth 1 def))
+ ((eq (car-safe def) 'closure) (nth 2 def))
+ ((or (and (byte-code-function-p def) (integerp (aref def 0)))
+ (subrp def))
+ (or (when preserve-names
+ (let* ((doc (condition-case nil (documentation def) (error nil)))
+ (docargs (if doc (car (help-split-fundoc doc nil))))
+ (arglist (if docargs
+ (cdar (read-from-string (downcase docargs)))))
+ (valid t))
+ ;; Check validity.
+ (dolist (arg arglist)
+ (unless (and (symbolp arg)
+ (let ((name (symbol-name arg)))
+ (if (eq (aref name 0) ?&)
+ (memq arg '(&rest &optional))
+ (not (string-match "\\." name)))))
+ (setq valid nil)))
+ (when valid arglist)))
+ (let* ((args-desc (if (not (subrp def))
+ (aref def 0)
+ (let ((a (subr-arity def)))
+ (logior (car a)
+ (if (numberp (cdr a))
+ (lsh (cdr a) 8)
+ (lsh 1 7))))))
+ (max (lsh args-desc -8))
+ (min (logand args-desc 127))
+ (rest (logand args-desc 128))
+ (arglist ()))
+ (dotimes (i min)
+ (push (intern (concat "arg" (number-to-string (1+ i)))) arglist))
+ (when (> max min)
+ (push '&optional arglist)
+ (dotimes (i (- max min))
+ (push (intern (concat "arg" (number-to-string (+ 1 i min))))
+ arglist)))
+ (unless (zerop rest) (push '&rest arglist) (push 'rest arglist))
+ (nreverse arglist))))
+ ((and (autoloadp def) (not (eq (nth 4 def) 'keymap)))
+ "[Arg list not available until function definition is loaded.]")
+ (t t)))
+
+(defun help-make-usage (function arglist)
+ (cons (if (symbolp function) function 'anonymous)
+ (mapcar (lambda (arg)
+ (if (not (symbolp arg)) arg
+ (let ((name (symbol-name arg)))
+ (cond
+ ((string-match "\\`&" name) arg)
+ ((string-match "\\`_" name)
+ (intern (upcase (substring name 1))))
+ (t (intern (upcase name)))))))
+ arglist)))
+
\f
(provide 'help)
(defface hexl-address-region
'((t (:inherit header-line)))
- "Face used in address area of hexl-mode buffer."
+ "Face used in address area of Hexl mode buffer."
:group 'hexl)
(defface hexl-ascii-region
'((t (:inherit header-line)))
- "Face used in ascii area of hexl-mode buffer."
+ "Face used in ASCII area of Hexl mode buffer."
:group 'hexl)
(defvar hexl-max-address 0
Each line in the buffer has an \"address\" (displayed in hexadecimal)
representing the offset into the file that the characters on this line
are at and 16 characters from the file (displayed as hexadecimal
-values grouped every `hexl-bits' bits) and as their ASCII values.
+values grouped every `hexl-bits' bits, and as their ASCII values).
If any of the characters (displayed as ASCII characters) are
-unprintable (control or meta characters) they will be replaced as
+unprintable (control or meta characters) they will be replaced by
periods.
If `hexl-mode' is invoked with an argument the buffer is assumed to be
000000b0: 7461 626c 6520 6368 6172 6163 7465 7220 table character
000000c0: 7265 6769 6f6e 2e0a region..
-Movement is as simple as movement in a normal Emacs text buffer. Most
-cursor movement bindings are the same: use \\[hexl-backward-char], \\[hexl-forward-char], \\[hexl-next-line], and \\[hexl-previous-line]
+Movement is as simple as movement in a normal Emacs text buffer.
+Most cursor movement bindings are the same: use \\[hexl-backward-char], \\[hexl-forward-char], \\[hexl-next-line], and \\[hexl-previous-line]
to move the cursor left, right, down, and up.
Advanced cursor movement commands (ala \\[hexl-beginning-of-line], \\[hexl-end-of-line], \\[hexl-beginning-of-buffer], and \\[hexl-end-of-buffer]) are
\\[hexl-insert-decimal-char] will insert a given decimal value (if it is between 0 and 255)
into the buffer at the current point.
-\\[hexl-mode-exit] will exit hexl-mode.
+\\[hexl-mode-exit] will exit `hexl-mode'.
Note: saving the file with any of the usual Emacs commands
will actually convert it back to binary format while saving.
(format "Current address is %d/0x%08x" addr addr)))
(defun hexl-ascii-start-column ()
- "Column at which the ascii portion of the hexl display starts."
+ "Column at which the ASCII portion of the hexl display starts."
(+ 43 (/ 128 hexl-bits)))
(defun hexl-address-to-marker (address)
(goto-char (hexl-address-to-marker address)))
(defun hexl-goto-hex-address (hex-address)
- "Go to hexl-mode address (hex string) HEX-ADDRESS.
+ "Go to Hexl mode address (hex string) HEX-ADDRESS.
Signal error if HEX-ADDRESS is out of range."
(interactive "sHex Address: ")
(hexl-goto-address (hexl-hex-string-to-integer hex-address)))
;; move point functions
(defun hexl-backward-char (arg)
- "Move to left ARG bytes (right if ARG negative) in hexl-mode."
+ "Move to left ARG bytes (right if ARG negative) in Hexl mode."
(interactive "p")
(hexl-goto-address (- (hexl-current-address) arg)))
(defun hexl-forward-char (arg)
- "Move to right ARG bytes (left if ARG negative) in hexl-mode."
+ "Move to right ARG bytes (left if ARG negative) in Hexl mode."
(interactive "p")
(hexl-goto-address (+ (hexl-current-address) arg)))
(defun hexl-backward-short (arg)
- "Move to left ARG shorts (right if ARG negative) in hexl-mode."
+ "Move to left ARG shorts (right if ARG negative) in Hexl mode."
(interactive "p")
(hexl-goto-address (let ((address (hexl-current-address)))
(if (< arg 0)
address)))
(defun hexl-forward-short (arg)
- "Move to right ARG shorts (left if ARG negative) in hexl-mode."
+ "Move to right ARG shorts (left if ARG negative) in Hexl mode."
(interactive "p")
(hexl-backward-short (- arg)))
(defun hexl-backward-word (arg)
- "Move to left ARG words (right if ARG negative) in hexl-mode."
+ "Move to left ARG words (right if ARG negative) in Hexl mode."
(interactive "p")
(hexl-goto-address (let ((address (hexl-current-address)))
(if (< arg 0)
address)))
(defun hexl-forward-word (arg)
- "Move to right ARG words (left if ARG negative) in hexl-mode."
+ "Move to right ARG words (left if ARG negative) in Hexl mode."
(interactive "p")
(hexl-backward-word (- arg)))
(defun hexl-previous-line (arg)
- "Move vertically up ARG lines [16 bytes] (down if ARG negative) in hexl-mode.
+ "Move vertically up ARG lines [16 bytes] (down if ARG negative) in Hexl mode.
If there is no byte at the target address move to the last byte in that line."
(interactive "p")
(hexl-next-line (- arg)))
(defun hexl-next-line (arg)
- "Move vertically down ARG lines [16 bytes] (up if ARG negative) in hexl-mode.
+ "Move vertically down ARG lines [16 bytes] (up if ARG negative) in Hexl mode.
If there is no byte at the target address move to the last byte in that line."
(interactive "p")
(hexl-goto-address (let ((address (+ (hexl-current-address) (* arg 16))))
(hexl-goto-address (- hexl-max-address (1- arg))))
(defun hexl-beginning-of-line ()
- "Goto beginning of line in hexl mode."
+ "Goto beginning of line in Hexl mode."
(interactive)
(goto-char (+ (* (/ (point) (hexl-line-displen)) (hexl-line-displen)) 11)))
(defun hexl-end-of-line ()
- "Goto end of line in hexl mode."
+ "Goto end of line in Hexl mode."
(interactive)
(hexl-goto-address (let ((address (logior (hexl-current-address) 15)))
(if (> address hexl-max-address)
))
(defun hexl-mode-ruler ()
- "Return a string ruler for hexl mode."
+ "Return a string ruler for Hexl mode."
(let* ((highlight (mod (hexl-current-address) 16))
(s (cdr (assq hexl-bits hexl-rulers)))
(pos 0))
When Highlight Changes is enabled, changes are marked with a text
property. Normally they are displayed in a distinctive face, but
-command \\[highlight-changes-visible-mode] can be used to toggles
+command \\[highlight-changes-visible-mode] can be used to toggle
this on and off.
Other functions for buffers in this mode include:
The default value can be customized with variable
`highlight-changes-visibility-initial-state'.
-This command does not itself set highlight-changes mode."
+This command does not itself set Highlight Changes mode."
t ;; init-value
nil ;; lighter
"Call function FUNC for each region used by Highlight Changes mode.
If START-POSITION is nil, (point-min) is used.
If END-POSITION is nil, (point-max) is used.
-FUNC is called with 3 params: PROPERTY START STOP."
+FUNC is called with three params: PROPERTY START STOP."
(let ((start (or start-position (point-min)))
(limit (or end-position (point-max)))
prop end)
(defun hilit-chg-display-changes (&optional beg end)
"Display face information for Highlight Changes mode.
-An overlay from BEG to END containing a change face is added from the
-information in the text property of type `hilit-chg'.
+An overlay from BEG to END containing a change face is added
+from the information in the text property of type `hilit-chg'.
This is the opposite of `hilit-chg-hide-changes'."
(hilit-chg-map-changes 'hilit-chg-make-ov beg end))
this function to `write-file-functions' as a buffer-local value. To do
this, eval the following in the buffer to be saved:
- \(add-hook 'write-file-functions 'highlight-changes-rotate-faces nil t)"
+ (add-hook 'write-file-functions 'highlight-changes-rotate-faces nil t)"
(interactive)
(when (and highlight-changes-mode highlight-changes-visible-mode)
(let ((modified (buffer-modified-p))
;;
;; ================== end of debug ===============
+(defun hilit-chg-unload-function ()
+ "Unload the Highlight Changes library."
+ (global-hi-lock-mode -1)
+ ;; continue standard unloading
+ nil)
+
(provide 'hilit-chg)
;;; hilit-chg.el ends here
;; think we only need to relocate the hfy-endl property, as the hfy-linkp
;; property has already served its main purpose by this point.
;;(message "mapcar over the CSS-MAP")
- (message "invis-ranges:\n%S" invis-ranges)
+ ;; (message "invis-ranges:\n%S" invis-ranges)
(dolist (point-face css-map)
(let ((pt (car point-face))
(fn (cdr point-face))
'icomplete-prospects-length 'icomplete-prospects-height "23.1")
(defcustom icomplete-separator " | "
- "String used by icomplete to separate alternatives in the minibuffer."
+ "String used by Icomplete to separate alternatives in the minibuffer."
:type 'string
:version "24.4")
:version "24.4")
(defcustom icomplete-with-completion-tables t
- "Specialized completion tables with which icomplete should operate.
+ "Specialized completion tables with which Icomplete should operate.
If this is t, Icomplete operates on all tables.
Otherwise this should be a list of the completion tables (e.g.,
`internal-complete-buffer') on which Icomplete should operate."
(repeat function)))
(defface icomplete-first-match '((t :weight bold))
- "Face used by icomplete for highlighting first match."
+ "Face used by Icomplete for highlighting first match."
:version "24.4")
;;;_* User Customization variables
:type 'integer)
(defcustom icomplete-max-delay-chars 3
- "Maximum number of initial chars to apply icomplete compute delay."
+ "Maximum number of initial chars to apply `icomplete-compute-delay'."
:type 'integer)
(defvar icomplete-in-buffer nil
(defcustom icomplete-minibuffer-setup-hook nil
"Icomplete-specific customization of minibuffer setup.
-This hook is run during minibuffer setup if icomplete is active.
-It is intended for use in customizing icomplete for interoperation
+This hook is run during minibuffer setup if Icomplete is active.
+It is intended for use in customizing Icomplete for interoperation
with other features and packages. For instance:
- \(add-hook 'icomplete-minibuffer-setup-hook
- \(lambda () (setq-local max-mini-window-height 3)))
+ (add-hook 'icomplete-minibuffer-setup-hook
+ (lambda () (setq-local max-mini-window-height 3)))
will constrain Emacs to a maximum minibuffer height of 3 lines when
icompletion is occurring."
description of how prospective completions are displayed.
For more information, see Info node `(emacs)Icomplete'.
-For options you can set, `M-x customize-group icomplete'.
+For options you can set, `\\[customize-group] icomplete'.
You can use the following key bindings to navigate and select
completions:
;;;_ > icomplete-tidy ()
(defun icomplete-tidy ()
- "Remove completions display \(if any) prior to new user input.
-Should be run in on the minibuffer `pre-command-hook'. See `icomplete-mode'
-and `minibuffer-setup-hook'."
+ "Remove completions display (if any) prior to new user input.
+Should be run in on the minibuffer `pre-command-hook'.
+See `icomplete-mode' and `minibuffer-setup-hook'."
(delete-overlay icomplete-overlay))
;;;_ > icomplete-exhibit ()
(defun icomplete-exhibit ()
- "Insert icomplete completions display.
-Should be run via minibuffer `post-command-hook'. See `icomplete-mode'
-and `minibuffer-setup-hook'."
+ "Insert Icomplete completions display.
+Should be run via minibuffer `post-command-hook'.
+See `icomplete-mode' and `minibuffer-setup-hook'."
(when (and icomplete-mode
(icomplete-simple-completing-p)) ;Shouldn't be necessary.
(save-excursion
minibuffer completion.
Prospective completion suffixes (if any) are displayed, bracketed by
-one of \(), \[], or \{} pairs. The choice of brackets is as follows:
+one of (), [], or {} pairs. The choice of brackets is as follows:
- \(...) - a single prospect is identified and matching is enforced,
- \[...] - a single prospect is identified but matching is optional, or
- \{...} - multiple prospects, separated by commas, are indicated, and
+ (...) - a single prospect is identified and matching is enforced,
+ [...] - a single prospect is identified but matching is optional, or
+ {...} - multiple prospects, separated by commas, are indicated, and
further input is required to distinguish a single one.
If there are multiple possibilities, `icomplete-separator' separates them.
The displays for unambiguous matches have ` [Matched]' appended
-\(whether complete or not), or ` \[No matches]', if no eligible
+\(whether complete or not), or ` [No matches]', if no eligible
matches exist."
(let* ((minibuffer-completion-table candidates)
(minibuffer-completion-predicate predicate)
;; a prefix of most, or something else.
(compare (compare-strings name nil nil
most nil nil completion-ignore-case))
+ (ellipsis (if (char-displayable-p ?…) "…" "..."))
(determ (unless (or (eq t compare) (eq t most-try)
(= (setq compare (1- (abs compare)))
(length most)))
(substring most compare))
;; Don't bother truncating if it doesn't gain
;; us at least 2 columns.
- ((< compare 3) most)
- (t (concat "…" (substring most compare))))
+ ((< compare (+ 2 (string-width ellipsis))) most)
+ (t (concat ellipsis (substring most compare))))
close-bracket)))
;;"-prospects" - more than one candidate
(prospects-len (+ (string-width
(or determ (concat open-bracket close-bracket)))
(string-width icomplete-separator)
- 3 ;; take {…} into account
+ (+ 2 (string-width ellipsis)) ;; take {…} into account
(string-width (buffer-string))))
(prospects-max
;; Max total length to use, including the minibuffer content.
(concat determ
"{"
(mapconcat 'identity prospects icomplete-separator)
- (and limit (concat icomplete-separator "…"))
+ (and limit (concat icomplete-separator ellipsis))
"}")
(concat determ " [Matched]"))))))
;;
;; The standard way of completion with Unix-shells and Emacs is to insert a
;; PREFIX and then hitting TAB (or another completion key). Cause of this
-;; behavior has become second nature to a lot of Emacs users `ido' offers in
+;; behavior has become second nature to a lot of Emacs users, Ido offers in
;; addition to the default substring-matching-method (look above) also the
;; prefix-matching-method. The kind of matching is the only difference to
;; the description of the substring-matching above.
;; Customization
;; -------------
;;
-;; Customize the `ido' group to change the `ido' functionality.
+;; Customize the Ido group to change the Ido functionality.
;;
;; To modify the keybindings, use the ido-setup-hook. For example:
;;(add-hook 'ido-setup-hook 'ido-my-keys)
;; If you don't want to rely on the `ido-everywhere' functionality,
;; ido-read-buffer, ido-read-file-name, and ido-read-directory-name
;; can be used by other packages to read a buffer name, a file name,
-;; or a directory name in the `ido' way.
+;; or a directory name in the Ido way.
;;; Acknowledgments
(defcustom ido-mode nil
"Determines for which buffer/file Ido should be enabled.
The following values are possible:
-- `buffer': Turn only on ido buffer behavior (switching, killing,
+- `buffer': Turn only on Ido buffer behavior (switching, killing,
displaying...)
-- `file': Turn only on ido file behavior (finding, writing, inserting...)
-- `both': Turn on ido buffer and file behavior.
-- nil: Turn off any ido switching.
+- `file': Turn only on Ido file behavior (finding, writing, inserting...)
+- `both': Turn on Ido buffer and file behavior.
+- nil: Turn off any Ido switching.
Setting this variable directly does not take effect;
use either \\[customize] or the function `ido-mode'."
:group 'ido)
(defcustom ido-enable-flex-matching nil
- "Non-nil means that `ido' will do flexible string matching.
+ "Non-nil means that Ido will do flexible string matching.
Flexible matching means that if the entered string does not
match any item, any item containing the entered characters
in the given sequence will match."
(defcustom ido-enable-regexp nil
- "Non-nil means that `ido' will do regexp matching.
-Value can be toggled within `ido' using `ido-toggle-regexp'."
+ "Non-nil means that Ido will do regexp matching.
+Value can be toggled within Ido using `ido-toggle-regexp'."
:type 'boolean
:group 'ido)
"Non-nil means only match if the entered text is a prefix of file name.
This behavior is like the standard Emacs completion.
If nil, match if the entered text is an arbitrary substring.
-Value can be toggled within `ido' using `ido-toggle-prefix'."
+Value can be toggled within Ido using `ido-toggle-prefix'."
:type 'boolean
:group 'ido)
;; See http://debbugs.gnu.org/2042 for more info.
(defcustom ido-buffer-disable-smart-matches t
"Non-nil means not to re-order matches for buffer switching.
-By default, ido arranges matches in the following order:
+By default, Ido arranges matches in the following order:
full-matches > suffix matches > prefix matches > remaining matches
:group 'ido)
(defcustom ido-enable-last-directory-history t
- "Non-nil means that `ido' will remember latest selected directory names.
+ "Non-nil means that Ido will remember latest selected directory names.
See `ido-last-directory-list' and `ido-save-directory-list-file'."
:type 'boolean
:group 'ido)
(defcustom ido-use-filename-at-point nil
- "Non-nil means that ido shall look for a filename at point.
+ "Non-nil means that Ido shall look for a filename at point.
May use `ffap-guesser' to guess whether text at point is a filename.
If found, use that as the starting point for filename selection."
:type '(choice
(defcustom ido-enable-tramp-completion t
- "Non-nil means that ido shall perform tramp method and server name completion.
+ "Non-nil means that Ido shall perform tramp method and server name completion.
A tramp file name uses the following syntax: /method:user@host:filename."
:type 'boolean
:group 'ido)
(defcustom ido-record-ftp-work-directories t
- "Non-nil means record ftp file names in the work directory list."
+ "Non-nil means record FTP file names in the work directory list."
:type 'boolean
:group 'ido)
(defcustom ido-merge-ftp-work-directories nil
- "If nil, merging ignores ftp file names in the work directory list."
+ "If nil, merging ignores FTP file names in the work directory list."
:type 'boolean
:group 'ido)
(defcustom ido-cache-ftp-work-directory-time 1.0
- "Maximum time to cache contents of an ftp directory (in hours).
+ "Maximum time to cache contents of an FTP directory (in hours).
\\<ido-file-completion-map>
Use \\[ido-reread-directory] in prompt to refresh list.
-If zero, ftp directories are not cached."
+If zero, FTP directories are not cached."
:type 'number
:group 'ido)
(defcustom ido-slow-ftp-hosts nil
- "List of slow ftp hosts where ido prompting should not be used.
-If an ftp host is on this list, ido automatically switches to the non-ido
+ "List of slow FTP hosts where Ido prompting should not be used.
+If an FTP host is on this list, Ido automatically switches to the non-Ido
equivalent function, e.g. `find-file' rather than `ido-find-file'."
:type '(repeat string)
:group 'ido)
(defcustom ido-slow-ftp-host-regexps nil
- "List of regexps matching slow ftp hosts (see `ido-slow-ftp-hosts')."
+ "List of regexps matching slow FTP hosts (see `ido-slow-ftp-hosts')."
:type '(repeat regexp)
:group 'ido)
:group 'ido)
(defcustom ido-max-directory-size nil
- "Maximum size (in bytes) for directories to use ido completion.
+ "Maximum size (in bytes) for directories to use Ido completion.
\\<ido-completion-map>
-If you enter a directory with a size larger than this size, ido will
+If you enter a directory with a size larger than this size, Ido will
not provide the normal completion. To show the completions, use \\[ido-toggle-ignore]."
:type '(choice (const :tag "No limit" nil)
(integer :tag "Size in bytes" 30000))
:group 'ido)
(defcustom ido-rotate-file-list-default nil
- "Non-nil means that `ido' will always rotate file list to get default in front."
+ "Non-nil means that Ido will always rotate file list to get default in front."
:type 'boolean
:group 'ido)
:group 'ido)
(defcustom ido-setup-hook nil
- "Hook run after the ido variables and keymap have been setup.
+ "Hook run after the Ido variables and keymap have been setup.
The dynamic variable `ido-cur-item' contains the current type of item that
-is read by ido; possible values are file, dir, buffer, and list.
+is read by Ido; possible values are file, dir, buffer, and list.
Additional keys can be defined in `ido-completion-map'."
:type 'hook
:group 'ido)
(defcustom ido-separator nil
- "String used by ido to separate the alternatives in the minibuffer.
-Obsolete. Set 3rd element of `ido-decorations' instead."
+ "String used by Ido to separate the alternatives in the minibuffer."
:type '(choice string (const nil))
:group 'ido)
+(make-obsolete-variable 'ido-separator
+ "set 3rd element of `ido-decorations' instead." nil)
-(defcustom ido-decorations '( "{" "}" " | " " | ..." "[" "]" " [No match]" " [Matched]" " [Not readable]" " [Too big]" " [Confirm]")
- "List of strings used by ido to display the alternatives in the minibuffer.
+(defcustom ido-decorations '("{" "}" " | " " | ..." "[" "]" " [No match]"
+ " [Matched]" " [Not readable]" " [Too big]" " [Confirm]")
+ "List of strings used by Ido to display the alternatives in the minibuffer.
There are between 11 and 13 elements in this list:
1st and 2nd elements are used as brackets around the prospect list,
3rd element is the separator between prospects (ignored if
:group 'ido)
(defcustom ido-use-faces t
- "Non-nil means use ido faces to highlighting first match, only match and
+ "Non-nil means use Ido faces to highlighting first match, only match and
subdirs in the alternatives."
:type 'boolean
:group 'ido)
(defface ido-first-match '((t :weight bold))
- "Face used by ido for highlighting first match."
+ "Face used by Ido for highlighting first match."
:group 'ido)
(defface ido-only-match '((((class color))
:foreground "ForestGreen")
(t :slant italic))
- "Face used by ido for highlighting only match."
+ "Face used by Ido for highlighting only match."
:group 'ido)
(defface ido-subdir '((((min-colors 88) (class color))
(((class color))
:foreground "red")
(t :underline t))
- "Face used by ido for highlighting subdirs in the alternatives."
+ "Face used by Ido for highlighting subdirs in the alternatives."
:group 'ido)
(defface ido-virtual '((t :inherit font-lock-builtin-face))
- "Face used by ido for matching virtual buffer names."
+ "Face used by Ido for matching virtual buffer names."
:version "24.1"
:group 'ido)
(((class color))
:foreground "yellow" :background "red" :width condensed)
(t :inverse-video t))
- "Face used by ido for highlighting its indicators."
+ "Face used by Ido for highlighting its indicators."
:group 'ido)
(defface ido-incomplete-regexp
:group 'ido)
(defvar ido-rewrite-file-prompt-rules nil
- "Alist of rewriting rules for directory names in ido prompts.
+ "Alist of rewriting rules for directory names in Ido prompts.
A list of elements of the form (FROM . TO) or (FROM . FUNC), each
meaning to rewrite the directory name if matched by FROM by either
substituting the matched string by TO or calling the function FUNC
`ido-rewrite-file-prompt-functions'.")
(defcustom ido-completion-buffer "*Ido Completions*"
- "Name of completion buffer used by ido.
+ "Name of completion buffer used by Ido.
Set to nil to disable completion buffers popping up."
:type 'string
:group 'ido)
(defcustom ido-minibuffer-setup-hook nil
"Ido-specific customization of minibuffer setup.
-This hook is run during minibuffer setup if `ido' is active.
-It is intended for use in customizing ido for interoperation
+This hook is run during minibuffer setup if Ido is active.
+It is intended for use in customizing Ido for interoperation
with other packages. For instance:
- \(add-hook 'ido-minibuffer-setup-hook
- \(function
- \(lambda ()
- \(make-local-variable 'max-mini-window-height)
- \(setq max-mini-window-height 3))))
+ (add-hook 'ido-minibuffer-setup-hook
+ (lambda () (setq-local max-mini-window-height 3)))
will constrain Emacs to a maximum minibuffer height of 3 lines when
-ido is running. Copied from `icomplete-minibuffer-setup-hook'."
+Ido is running. Copied from `icomplete-minibuffer-setup-hook'."
:type 'hook
:group 'ido)
(defcustom ido-save-directory-list-file
(locate-user-emacs-file "ido.last" ".ido.last")
- "File in which the ido state is saved between invocations.
+ "File in which the Ido state is saved between invocations.
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."
+Must be set before enabling Ido mode."
:version "24.4" ; added locate-user-emacs-file
:type 'string
:group 'ido)
(defcustom ido-read-file-name-as-directory-commands '()
- "List of commands which uses `read-file-name' to read a directory name.
+ "List of commands which use `read-file-name' to read a directory name.
When `ido-everywhere' is non-nil, the commands in this list will read
the directory using `ido-read-directory-name'."
:type '(repeat symbol)
:group 'ido)
(defcustom ido-read-file-name-non-ido '()
- "List of commands which shall not read file names the ido way.
+ "List of commands which shall not read file names the Ido way.
When `ido-everywhere' is non-nil, the commands in this list will read
the file name using normal `read-file-name' style."
:type '(repeat symbol)
;; Persistent variables
(defvar ido-completion-map nil
- "Currently active keymap for ido commands.")
+ "Currently active keymap for Ido commands.")
(defvar ido-common-completion-map nil
- "Keymap for all ido commands.")
+ "Keymap for all Ido commands.")
(defvar ido-file-completion-map nil
- "Keymap for ido file commands.")
+ "Keymap for Ido file commands.")
(defvar ido-file-dir-completion-map nil
- "Keymap for ido file and directory commands.")
+ "Keymap for Ido file and directory commands.")
(defvar ido-buffer-completion-map nil
- "Keymap for ido buffer commands.")
+ "Keymap for Ido buffer commands.")
(defvar ido-file-history nil
"History of files selected using `ido-find-file'.")
Each element in the list is of the form (DIR (MTIME) FILE...).")
(defvar ido-ignore-item-temp-list nil
- "List of items to ignore in current ido invocation.
-Intended to be let-bound by functions which call ido repeatedly.
+ "List of items to ignore in current Ido invocation.
+Intended to be let-bound by functions which call Ido repeatedly.
Should never be set permanently.")
;; Temporary storage
"Non-nil means we are rotating list of matches.")
(defvar ido-text nil
- "Stores the users string as it is typed in.")
+ "Stores the user's string as it is typed in.")
(defvar ido-text-init nil
- "The initial string for the users string it is typed in.")
+ "The initial string for the user's string it is typed in.")
(defvar ido-input-stack nil
- "Stores the users strings when user hits M-b/M-f.")
+ "Stores the user's strings when user hits M-b/M-f.")
(defvar ido-matches nil
"List of files currently matching `ido-text'.")
(defvar ido-report-no-match t
- "Report [No Match] when no completions matches `ido-text'.")
+ "Report \"[No Match]\" when no completions matches `ido-text'.")
(defvar ido-exit nil
"Flag to monitor how `ido-find-file' exits.
"Delay timer for auto merge.")
(defvar ido-use-mycompletion-depth 0
- "Non-nil means use `ido' completion feedback.
-Is set by ido functions to the current `minibuffer-depth',
+ "Non-nil means use Ido completion feedback.
+Is set by Ido functions to the current `minibuffer-depth',
so that it doesn't interfere with other minibuffer usage.")
(defvar ido-incomplete-regexp nil
(defun ido-is-ftp-directory (&optional dir)
(string-match
(if ido-enable-tramp-completion
- "\\`/[^/:][^/:]+:" ;; like tramp-file-name-regexp-unified, but doesn't match single drive letters
+ ;; like tramp-file-name-regexp-unified, but doesn't match single drive letters
+ "\\`/[^/:][^/:]+:"
"\\`/[^/:][^/:]+:/")
(or dir ido-current-directory)))
(insert "\n)\n")))
(defun ido-save-history ()
- "Save ido history and cache information between sessions."
+ "Save Ido history and cache information between sessions."
(interactive)
(when (and ido-last-directory-list ido-save-directory-list-file)
(let ((buf (get-buffer-create " *ido session*"))
(kill-buffer buf)))))
(defun ido-load-history (&optional arg)
- "Load ido history and cache information from previous session.
+ "Load Ido history and cache information from previous session.
With prefix argument, reload history unconditionally."
(interactive "P")
(if (or arg (and ido-save-directory-list-file (not ido-last-directory-list)))
(ido-wash-history))
(defun ido-wash-history ()
- "Clean-up ido history and cache information.
+ "Clean-up Ido history and cache information.
Removes badly formatted data and ignored directories."
(interactive)
;; Check format of each of our lists, discard bogus elements
(define-minor-mode ido-everywhere
"Toggle use of Ido for all buffer/file reading.
With a prefix argument ARG, enable this feature if ARG is
-positive, and disable it otherwise. If called from Lisp, enable
-the mode if ARG is omitted or nil."
+positive, and disable it otherwise. If called from Lisp,
+enable the mode if ARG is omitted or nil."
:global t
:group 'ido
(when (get 'ido-everywhere 'file)
;;;###autoload
(defun ido-mode (&optional arg)
- "Toggle ido mode on or off.
-With ARG, turn ido-mode on if arg is positive, off otherwise.
-Turning on ido-mode will remap (via a minor-mode keymap) the default
+ "Toggle Ido mode on or off.
+With ARG, turn Ido mode on if arg is positive, off otherwise.
+Turning on Ido mode will remap (via a minor-mode keymap) the default
keybindings for the `find-file' and `switch-to-buffer' families of
-commands to the ido versions of these functions.
+commands to the Ido versions of these functions.
However, if ARG arg equals 'files, remap only commands for files, or
if it equals 'buffers, remap only commands for buffer switching.
This function also adds a hook to the minibuffer."
;;; IDO KEYMAP
(defun ido-init-completion-maps ()
- "Set up the completion keymaps used by `ido'."
+ "Set up the completion keymaps used by Ido."
;; Common map
(let ((map (make-sparse-keymap)))
(defun ido-setup-completion-map ()
- "Set up the keymap for `ido'."
+ "Set up the keymap for Ido."
;; generated every time so that it can inherit new functions.
(let ((map (make-sparse-keymap))
ido-selected))
(defun ido-edit-input ()
- "Edit absolute file name entered so far with ido; terminate by RET.
+ "Edit absolute file name entered so far with Ido; terminate by RET.
If cursor is not at the end of the user input, move to end of input."
(interactive)
(if (not (eobp))
(ido-complete)))
(defun ido-undo-merge-work-directory (&optional text try refresh)
- "Undo or redo last ido directory merge operation.
+ "Undo or redo last Ido directory merge operation.
If no merge has yet taken place, toggle automatic merging option."
(interactive)
(cond
"Move forward in user input or perform magic action.
If no user input is present, or at end of input, perform magic actions:
C-x C-b ... C-f switch to `ido-find-file'.
-C-x C-f ... C-f fallback to non-ido `find-file'.
-C-x C-d ... C-f fallback to non-ido brief `dired'.
-C-x d ... C-f fallback to non-ido `dired'."
+C-x C-f ... C-f fallback to non-Ido `find-file'.
+C-x C-d ... C-f fallback to non-Ido brief `dired'.
+C-x d ... C-f fallback to non-Ido `dired'."
(interactive "P")
(cond
((or arg (not (eobp)))
C-x C-f C-b switch to `ido-switch-buffer'.
C-x C-d C-b switch to `ido-switch-buffer'.
C-x d C-b switch to `ido-switch-buffer'.
-C-x C-b C-b fallback to non-ido `switch-to-buffer'."
+C-x C-b C-b fallback to non-Ido `switch-to-buffer'."
(interactive "P")
(cond
((or arg (> (point) (minibuffer-prompt-end)))
(exit-minibuffer)))
(defun ido-toggle-vc ()
- "Disable version control for this file."
+ "Toggle version control for this file."
(interactive)
(if (and ido-mode (eq ido-cur-item 'file))
(progn
(defun ido-reread-directory ()
"Read current directory again.
May be useful if cached version is no longer valid, but directory
-timestamp has not changed (e.g. with ftp or on Windows)."
+timestamp has not changed (e.g. with FTP or on Windows)."
(interactive)
(if (and ido-mode (memq ido-cur-item '(file dir)))
(progn
(exit-minibuffer))
(defun ido-fallback-command ()
- "Fallback to non-ido version of current command."
+ "Fallback to non-Ido version of current command."
(interactive)
(let ((i (length ido-text)))
(while (> i 0)
(exit-minibuffer))
(defun ido-wide-find-file (&optional file)
- "Prompt for FILE to search for using find, starting from current directory."
+ "Prompt for FILE to search for using `find', starting from current directory."
(interactive)
(unless file
(let ((enable-recursive-minibuffers t))
(exit-minibuffer)))
(defun ido-wide-find-dir (&optional dir)
- "Prompt for DIR to search for using find, starting from current directory."
+ "Prompt for DIR to search for using `find', starting from current directory."
(interactive)
(unless dir
(let ((enable-recursive-minibuffers t))
(exit-minibuffer)))
(defun ido-wide-find-dir-or-delete-dir (&optional _dir)
- "Prompt for DIR to search for using find, starting from current directory.
+ "Prompt for DIR to search for using `find', starting from current directory.
If input stack is non-empty, delete current directory component."
(interactive)
(if ido-input-stack
t))
(defun ido-completion-help ()
- "Show possible completions in a *File Completions* buffer."
+ "Show possible completions in a \"*File Completions*\" buffer."
(interactive)
(setq ido-rescan nil)
(let ((temp-buf (and ido-completion-buffer
in another frame.
As you type in a string, all of the buffers matching the string are
-displayed if substring-matching is used \(default). Look at
+displayed if substring-matching is used (default). Look at
`ido-enable-prefix' and `ido-toggle-prefix'. When you have found the
buffer you want, it can then be selected. As you type, most keys have
their normal keybindings, except for the following: \\<ido-buffer-completion-map>
-RET Select the buffer at the front of the list of matches. If the
-list is empty, possibly prompt to create new buffer.
-
-\\[ido-select-text] Use the current input string verbatim.
-
-\\[ido-next-match] Put the first element at the end of the list.
-\\[ido-prev-match] Put the last element at the start of the list.
-\\[ido-complete] Complete a common suffix to the current string that
-matches all buffers. If there is only one match, select that buffer.
-If there is no common suffix, show a list of all matching buffers
-in a separate window.
-\\[ido-edit-input] Edit input string.
-\\[ido-fallback-command] Fallback to non-ido version of current command.
-\\[ido-toggle-regexp] Toggle regexp searching.
-\\[ido-toggle-prefix] Toggle between substring and prefix matching.
-\\[ido-toggle-case] Toggle case-sensitive searching of buffer names.
-\\[ido-completion-help] Show list of matching buffers in separate window.
-\\[ido-enter-find-file] Drop into `ido-find-file'.
-\\[ido-kill-buffer-at-head] Kill buffer at head of buffer list.
-\\[ido-toggle-ignore] Toggle ignoring buffers listed in `ido-ignore-buffers'."
+RET\tSelect the buffer at the front of the list of matches.
+\tIf the list is empty, possibly prompt to create new buffer.
+
+\\[ido-select-text]\tUse the current input string verbatim.
+
+\\[ido-next-match]\tPut the first element at the end of the list.
+\\[ido-prev-match]\tPut the last element at the start of the list.
+\\[ido-complete]\tComplete a common suffix to the current string that matches
+\tall buffers. If there is only one match, select that buffer.
+\tIf there is no common suffix, show a list of all matching buffers
+\tin a separate window.
+\\[ido-edit-input]\tEdit input string.
+\\[ido-fallback-command]\tFallback to non-ido version of current command.
+\\[ido-toggle-regexp]\tToggle regexp searching.
+\\[ido-toggle-prefix]\tToggle between substring and prefix matching.
+\\[ido-toggle-case]\tToggle case-sensitive searching of buffer names.
+\\[ido-completion-help]\tShow list of matching buffers in separate window.
+\\[ido-enter-find-file]\tDrop into `ido-find-file'.
+\\[ido-kill-buffer-at-head]\tKill buffer at head of buffer list.
+\\[ido-toggle-ignore]\tToggle ignoring buffers listed in `ido-ignore-buffers'."
(interactive)
(ido-buffer-internal ido-default-buffer-method))
The buffer name is selected interactively by typing a substring.
For details of keybindings, see `ido-switch-buffer'."
(interactive)
- (ido-buffer-internal 'kill 'kill-buffer "Kill buffer: " (buffer-name (current-buffer)) nil 'ignore))
+ (ido-buffer-internal 'kill 'kill-buffer "Kill buffer: "
+ (buffer-name (current-buffer)) nil 'ignore))
;;;###autoload
(defun ido-insert-buffer ()
The buffer name is selected interactively by typing a substring.
For details of keybindings, see `ido-switch-buffer'."
(interactive)
- (ido-buffer-internal 'insert 'insert-buffer "Insert buffer: " nil nil 'ido-enter-insert-file))
+ (ido-buffer-internal 'insert 'insert-buffer "Insert buffer: "
+ nil nil 'ido-enter-insert-file))
;;;###autoload
(defun ido-switch-buffer-other-frame ()
(defun ido-find-file ()
"Edit file with name obtained via minibuffer.
The file is displayed according to `ido-default-file-method' -- the
-default is to show it in the same window, unless it is already
-visible in another frame.
+default is to show it in the same window, unless it is already visible
+in another frame.
The file name is selected interactively by typing a substring. As you
type in a string, all of the filenames matching the string are displayed
-if substring-matching is used \(default). Look at `ido-enable-prefix' and
+if substring-matching is used (default). Look at `ido-enable-prefix' and
`ido-toggle-prefix'. When you have found the filename you want, it can
then be selected. As you type, most keys have their normal keybindings,
except for the following: \\<ido-file-completion-map>
-RET Select the file at the front of the list of matches. If the
-list is empty, possibly prompt to create new file.
-
-\\[ido-select-text] Use the current input string verbatim.
-
-\\[ido-next-match] Put the first element at the end of the list.
-\\[ido-prev-match] Put the last element at the start of the list.
-\\[ido-complete] Complete a common suffix to the current string that
-matches all files. If there is only one match, select that file.
-If there is no common suffix, show a list of all matching files
-in a separate window.
-\\[ido-magic-delete-char] Open the specified directory in Dired mode.
-\\[ido-edit-input] Edit input string (including directory).
-\\[ido-prev-work-directory] or \\[ido-next-work-directory] go to previous/next directory in work directory history.
-\\[ido-merge-work-directories] search for file in the work directory history.
-\\[ido-forget-work-directory] removes current directory from the work directory history.
-\\[ido-prev-work-file] or \\[ido-next-work-file] cycle through the work file history.
-\\[ido-wide-find-file-or-pop-dir] and \\[ido-wide-find-dir-or-delete-dir] prompts and uses find to locate files or directories.
-\\[ido-make-directory] prompts for a directory to create in current directory.
-\\[ido-fallback-command] Fallback to non-ido version of current command.
-\\[ido-toggle-regexp] Toggle regexp searching.
-\\[ido-toggle-prefix] Toggle between substring and prefix matching.
-\\[ido-toggle-case] Toggle case-sensitive searching of file names.
-\\[ido-toggle-literal] Toggle literal reading of this file.
-\\[ido-completion-help] Show list of matching files in separate window.
-\\[ido-toggle-ignore] Toggle ignoring files listed in `ido-ignore-files'."
+RET\tSelect the file at the front of the list of matches.
+\tIf the list is empty, possibly prompt to create new file.
+
+\\[ido-select-text]\tUse the current input string verbatim.
+
+\\[ido-next-match]\tPut the first element at the end of the list.
+\\[ido-prev-match]\tPut the last element at the start of the list.
+\\[ido-complete]\tComplete a common suffix to the current string that matches
+\tall files. If there is only one match, select that file.
+\tIf there is no common suffix, show a list of all matching files
+\tin a separate window.
+\\[ido-magic-delete-char]\tOpen the specified directory in Dired mode.
+\\[ido-edit-input]\tEdit input string (including directory).
+\\[ido-prev-work-directory]\tGo to previous directory in work directory history.
+\\[ido-next-work-directory]\tGo to next directory in work directory history.
+\\[ido-merge-work-directories]\tSearch for file in the work directory history.
+\\[ido-forget-work-directory]\tRemove current directory from the work directory history.
+\\[ido-prev-work-file]\tCycle to previous file in work file history.
+\\[ido-next-work-file]\tCycle to next file in work file history.
+\\[ido-wide-find-file-or-pop-dir]\tPrompt for a file and use find to locate it.
+\\[ido-wide-find-dir-or-delete-dir]\tPrompt for a directory and use find to locate it.
+\\[ido-make-directory]\tPrompt for a directory to create in current directory.
+\\[ido-fallback-command]\tFallback to non-Ido version of current command.
+\\[ido-toggle-regexp]\tToggle regexp searching.
+\\[ido-toggle-prefix]\tToggle between substring and prefix matching.
+\\[ido-toggle-case]\tToggle case-sensitive searching of file names.
+\\[ido-toggle-literal]\tToggle literal reading of this file.
+\\[ido-completion-help]\tShow list of matching files in separate window.
+\\[ido-toggle-ignore]\tToggle ignoring files listed in `ido-ignore-files'."
(interactive)
(ido-file-internal ido-default-file-method))
The file name is selected interactively by typing a substring.
For details of keybindings, see `ido-find-file'."
(interactive)
- (ido-file-internal 'read-only 'find-file-read-only-other-window nil "Find file read-only other window: "))
+ (ido-file-internal 'read-only 'find-file-read-only-other-window nil
+ "Find file read-only other window: "))
;;;###autoload
(defun ido-find-file-read-only-other-frame ()
The file name is selected interactively by typing a substring.
For details of keybindings, see `ido-find-file'."
(interactive)
- (ido-file-internal 'read-only 'find-file-read-only-other-frame nil "Find file read-only other frame: "))
+ (ido-file-internal 'read-only 'find-file-read-only-other-frame nil
+ "Find file read-only other frame: "))
;;;###autoload
(defun ido-display-file ()
;;;###autoload
(defun ido-dired ()
- "Call `dired' the ido way.
+ "Call `dired' the Ido way.
The directory is selected interactively by typing a substring.
For details of keybindings, see `ido-find-file'."
(interactive)
(ido-file-internal 'dired 'dired nil "Dired: " 'dir)))
(defun ido-list-directory ()
- "Call `list-directory' the ido way.
+ "Call `list-directory' the Ido way.
The directory is selected interactively by typing a substring.
For details of keybindings, see `ido-find-file'."
(interactive)
(throw 'ido contents))))
(defun ido-exhibit ()
- "Post command hook for `ido'."
+ "Post command hook for Ido."
;; Find matching files and display a list in the minibuffer.
;; Copied from `icomplete-exhibit' with two changes:
;; 1. It prints a default file name when there is no text yet entered.
(nth 1 ido-decorations)))))))
(defun ido-minibuffer-setup ()
- "Minibuffer setup hook for `ido'."
+ "Minibuffer setup hook for Ido."
;; Copied from `icomplete-minibuffer-setup-hook'.
(when (ido-active)
(add-hook 'pre-command-hook 'ido-tidy nil t)
(setq ido-initial-position nil))))
(defun ido-tidy ()
- "Pre command hook for `ido'."
+ "Pre command hook for Ido."
;; Remove completions display, if any, prior to new user input.
;; Copied from `icomplete-tidy'."
(defun ido-completing-read (prompt choices &optional _predicate require-match
initial-input hist def _inherit-input-method)
"Ido replacement for the built-in `completing-read'.
-Read a string in the minibuffer with ido-style completion.
+Read a string in the minibuffer with Ido-style completion.
PROMPT is a string to prompt with; normally it ends in a colon and a space.
CHOICES is a list of strings which are the possible completions.
-PREDICATE and INHERIT-INPUT-METHOD is currently ignored; it is included
+PREDICATE and INHERIT-INPUT-METHOD are currently ignored; they are included
to be compatible with `completing-read'.
If REQUIRE-MATCH is non-nil, the user is not allowed to exit unless
the input is (or completes to) an element of CHOICES or is null.
(when animation
(if (setq timer (image-animate-timer image))
(cancel-timer timer))
+ (plist-put (cdr image) :animate-buffer (current-buffer))
(run-with-timer 0.2 nil 'image-animate-timeout
image (or index 0) (car animation)
0 limit))))
If the image has a non-nil :speed property, it acts as a multiplier
for the animation speed. A negative value means to animate in reverse."
- (image-show-frame image n t)
- (let* ((speed (image-animate-get-speed image))
- (time (float-time))
- (animation (image-multi-frame-p image))
- ;; Subtract off the time we took to load the image from the
- ;; stated delay time.
- (delay (max (+ (* (or (cdr animation) image-default-frame-delay)
- (/ 1 (abs speed)))
- time (- (float-time)))
- image-minimum-frame-delay))
- done)
- (setq n (if (< speed 0)
- (1- n)
- (1+ n)))
- (if limit
- (cond ((>= n count) (setq n 0))
- ((< n 0) (setq n (1- count))))
- (and (or (>= n count) (< n 0)) (setq done t)))
- (setq time-elapsed (+ delay time-elapsed))
- (if (numberp limit)
- (setq done (>= time-elapsed limit)))
- (unless done
- (run-with-timer delay nil 'image-animate-timeout
- image n count time-elapsed limit))))
+ (when (buffer-live-p (plist-get (cdr image) :animate-buffer))
+ (image-show-frame image n t)
+ (let* ((speed (image-animate-get-speed image))
+ (time (float-time))
+ (animation (image-multi-frame-p image))
+ ;; Subtract off the time we took to load the image from the
+ ;; stated delay time.
+ (delay (max (+ (* (or (cdr animation) image-default-frame-delay)
+ (/ 1 (abs speed)))
+ time (- (float-time)))
+ image-minimum-frame-delay))
+ done)
+ (setq n (if (< speed 0)
+ (1- n)
+ (1+ n)))
+ (if limit
+ (cond ((>= n count) (setq n 0))
+ ((< n 0) (setq n (1- count))))
+ (and (or (>= n count) (< n 0)) (setq done t)))
+ (setq time-elapsed (+ delay time-elapsed))
+ (if (numberp limit)
+ (setq done (>= time-elapsed limit)))
+ (unless done
+ (run-with-timer delay nil 'image-animate-timeout
+ image n count time-elapsed limit)))))
\f
(defvar imagemagick-types-inhibit)
hits desc)
(dolist (keyword keywords)
(push (copy-tree (gethash keyword finder-keywords-hash)) hits))
- (setq hits (delete-dups (apply 'append hits)))
+ (setq hits (delete-dups (apply 'append hits))
+ ;; Not a meaningful package.
+ hits (delete 'emacs hits))
(dolist (package hits)
(setq desc (cdr-safe (assq package package--builtins)))
(when (vectorp desc)
(insert "*****************\n\n")
(insert
"Commentary section of the package `" nodename "':\n\n")
+ ;; FIXME this assumes that a file named package.el exists,
+ ;; which is not always true. E.g. for the nxml package,
+ ;; there is no "nxml.el" (it's nxml-mode.el).
(let ((str (lm-commentary (find-library-name nodename))))
(if (null str)
(insert "Can't find any Commentary section\n\n")
(define-key map "f" 'Info-follow-reference)
(define-key map "g" 'Info-goto-node)
(define-key map "h" 'Info-help)
+ ;; This is for compatibility with standalone info (>~ version 5.2).
+ ;; Though for some time, standalone info had H and h reversed.
+ ;; See <http://debbugs.gnu.org/16455>.
+ (define-key map "H" 'describe-mode)
(define-key map "i" 'Info-index)
(define-key map "I" 'Info-virtual-index)
(define-key map "l" 'Info-history-back)
:version "24.3")
(defcustom search-invisible 'open
- "If t incremental search can match hidden text.
+ "If t incremental search/query-replace can match hidden text.
A nil value means don't match invisible text.
When the value is `open', if the text matched is made invisible by
an overlay having an `invisible' property and that overlay has a property
;;;***
\f
-;;;### (autoloads nil "add-log" "vc/add-log.el" (21187 63826 213216
+;;;### (autoloads nil "add-log" "vc/add-log.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from vc/add-log.el
;;;***
\f
-;;;### (autoloads nil "advice" "emacs-lisp/advice.el" (21190 39993
-;;;;;; 744837 0))
+;;;### (autoloads nil "advice" "emacs-lisp/advice.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from emacs-lisp/advice.el
(defvar ad-redefinition-action 'warn "\
;;;***
\f
-;;;### (autoloads nil "align" "align.el" (21187 63826 213216 0))
+;;;### (autoloads nil "align" "align.el" (21240 46395 727291 0))
;;; Generated autoloads from align.el
(autoload 'align "align" "\
;;;***
\f
-;;;### (autoloads nil "ange-ftp" "net/ange-ftp.el" (21204 37210 187838
+;;;### (autoloads nil "ange-ftp" "net/ange-ftp.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from net/ange-ftp.el
;;;***
\f
-;;;### (autoloads nil "apropos" "apropos.el" (21195 23530 495420
+;;;### (autoloads nil "apropos" "apropos.el" (21259 10807 217062
;;;;;; 0))
;;; Generated autoloads from apropos.el
(autoload 'apropos-variable "apropos" "\
Show variables that match PATTERN.
-When DO-NOT-ALL is not-nil, show user options only, i.e. behave
+When DO-NOT-ALL is non-nil, show user options only, i.e. behave
like `apropos-user-option'.
\(fn PATTERN &optional DO-NOT-ALL)" t nil)
;;;***
\f
-;;;### (autoloads nil "array" "array.el" (21187 63826 213216 0))
+;;;### (autoloads nil "array" "array.el" (21240 46395 727291 0))
;;; Generated autoloads from array.el
(autoload 'array-mode "array" "\
;;;***
\f
-;;;### (autoloads nil "asm-mode" "progmodes/asm-mode.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "asm-mode" "progmodes/asm-mode.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from progmodes/asm-mode.el
(autoload 'asm-mode "asm-mode" "\
;;;***
\f
-;;;### (autoloads nil "auth-source" "gnus/auth-source.el" (21187
-;;;;;; 63826 213216 0))
+;;;### (autoloads nil "auth-source" "gnus/auth-source.el" (21257
+;;;;;; 55477 969423 0))
;;; Generated autoloads from gnus/auth-source.el
(defvar auth-source-cache-expiry 7200 "\
;;;***
\f
-;;;### (autoloads nil "autoinsert" "autoinsert.el" (21187 63826 213216
+;;;### (autoloads nil "autoinsert" "autoinsert.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from autoinsert.el
;;;***
\f
-;;;### (autoloads nil "bibtex" "textmodes/bibtex.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "bibtex" "textmodes/bibtex.el" (21264 28773
+;;;;;; 629489 0))
;;; Generated autoloads from textmodes/bibtex.el
(autoload 'bibtex-initialize "bibtex" "\
;;;***
\f
-;;;### (autoloads nil "browse-url" "net/browse-url.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "browse-url" "net/browse-url.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from net/browse-url.el
(defvar browse-url-browser-function 'browse-url-default-browser "\
;;;***
\f
-;;;### (autoloads nil "bytecomp" "emacs-lisp/bytecomp.el" (21218
-;;;;;; 19382 890650 0))
+;;;### (autoloads nil "bytecomp" "emacs-lisp/bytecomp.el" (21240
+;;;;;; 46395 727291 0))
;;; Generated autoloads from emacs-lisp/bytecomp.el
(put 'byte-compile-dynamic 'safe-local-variable 'booleanp)
(put 'byte-compile-disable-print-circle 'safe-local-variable 'booleanp)
;;;***
\f
-;;;### (autoloads nil "calculator" "calculator.el" (21187 63826 213216
+;;;### (autoloads nil "calculator" "calculator.el" (21231 31415 579137
;;;;;; 0))
;;; Generated autoloads from calculator.el
;;;***
\f
-;;;### (autoloads nil "cc-engine" "progmodes/cc-engine.el" (21213
-;;;;;; 1461 513511 0))
+;;;### (autoloads nil "cc-engine" "progmodes/cc-engine.el" (21231
+;;;;;; 31415 579137 0))
;;; Generated autoloads from progmodes/cc-engine.el
(autoload 'c-guess-basic-syntax "cc-engine" "\
;;;***
\f
-;;;### (autoloads nil "cc-mode" "progmodes/cc-mode.el" (21227 3180
-;;;;;; 84924 320000))
+;;;### (autoloads nil "cc-mode" "progmodes/cc-mode.el" (21251 16696
+;;;;;; 39562 0))
;;; Generated autoloads from progmodes/cc-mode.el
(autoload 'c-initialize-cc-mode "cc-mode" "\
;;;***
\f
-;;;### (autoloads nil "cconv" "emacs-lisp/cconv.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "cconv" "emacs-lisp/cconv.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from emacs-lisp/cconv.el
(autoload 'cconv-closure-convert "cconv" "\
;;;***
\f
-;;;### (autoloads nil "chistory" "chistory.el" (21187 63826 213216
+;;;### (autoloads nil "chistory" "chistory.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from chistory.el
;;;***
\f
-;;;### (autoloads nil "cl-indent" "emacs-lisp/cl-indent.el" (21187
-;;;;;; 63826 213216 0))
+;;;### (autoloads nil "cl-indent" "emacs-lisp/cl-indent.el" (21240
+;;;;;; 46395 727291 0))
;;; Generated autoloads from emacs-lisp/cl-indent.el
(autoload 'common-lisp-indent-function "cl-indent" "\
;;;***
\f
-;;;### (autoloads nil "cmuscheme" "cmuscheme.el" (21187 63826 213216
+;;;### (autoloads nil "cmuscheme" "cmuscheme.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from cmuscheme.el
;;;***
\f
-;;;### (autoloads nil "comint" "comint.el" (21209 55410 356925 0))
+;;;### (autoloads nil "comint" "comint.el" (21265 49588 918402 0))
;;; Generated autoloads from comint.el
(defvar comint-output-filter-functions '(ansi-color-process-output comint-postoutput-scroll-to-bottom comint-watch-for-password-prompt) "\
;;;***
\f
-;;;### (autoloads nil "compare-w" "vc/compare-w.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "compare-w" "vc/compare-w.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from vc/compare-w.el
(autoload 'compare-windows "compare-w" "\
;;;***
\f
-;;;### (autoloads nil "compile" "progmodes/compile.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "compile" "progmodes/compile.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from progmodes/compile.el
(defvar compilation-mode-hook nil "\
;;;***
\f
-;;;### (autoloads nil "completion" "completion.el" (21187 63826 213216
+;;;### (autoloads nil "completion" "completion.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from completion.el
;;;***
\f
-;;;### (autoloads nil "cookie1" "play/cookie1.el" (21187 63826 213216
+;;;### (autoloads nil "cookie1" "play/cookie1.el" (21245 64312 799897
;;;;;; 0))
;;; Generated autoloads from play/cookie1.el
;;;***
\f
-;;;### (autoloads nil "crm" "emacs-lisp/crm.el" (21187 63826 213216
+;;;### (autoloads nil "crm" "emacs-lisp/crm.el" (21263 7861 493097
;;;;;; 0))
;;; Generated autoloads from emacs-lisp/crm.el
(autoload 'completing-read-multiple "crm" "\
Read multiple strings in the minibuffer, with completion.
-By using this functionality, a user may specify multiple strings at a
-single prompt, optionally using completion.
-
-Multiple strings are specified by separating each of the strings with
-a prespecified separator regexp. For example, if the separator
-regexp is \",\", the strings 'alice', 'bob', and 'eve' would be
-specified as 'alice,bob,eve'.
-
-The default value for the separator regexp is the value of
-`crm-default-separator' (comma). The separator regexp may be
-changed by modifying the value of `crm-separator'.
+The arguments are the same as those of `completing-read'.
+\\<crm-local-completion-map>
+Input multiple strings by separating each one with a string that
+matches the regexp `crm-separator'. For example, if the separator
+regexp is \",\", entering \"alice,bob,eve\" specifies the strings
+\"alice\", \"bob\", and \"eve\".
-Contiguous strings of non-separator-characters are referred to as
-'elements'. In the aforementioned example, the elements are: 'alice',
-'bob', and 'eve'.
+We refer to contiguous strings of non-separator-characters as
+\"elements\". In this example there are three elements.
Completion is available on a per-element basis. For example, if the
-contents of the minibuffer are 'alice,bob,eve' and point is between
-'l' and 'i', pressing TAB operates on the element 'alice'.
+contents of the minibuffer are \"alice,bob,eve\" and point is between
+\"l\" and \"i\", pressing \\[minibuffer-complete] operates on the element \"alice\".
-The return value of this function is a list of the read strings
+This function returns a list of the strings that were read,
with empty strings removed.
-See the documentation for `completing-read' for details on the arguments:
-PROMPT, TABLE, PREDICATE, REQUIRE-MATCH, INITIAL-INPUT, HIST, DEF, and
-INHERIT-INPUT-METHOD.
-
\(fn PROMPT TABLE &optional PREDICATE REQUIRE-MATCH INITIAL-INPUT HIST DEF INHERIT-INPUT-METHOD)" nil nil)
;;;***
;;;***
\f
-;;;### (autoloads nil "cua-base" "emulation/cua-base.el" (21222 52808
-;;;;;; 160149 187000))
+;;;### (autoloads nil "cua-base" "emulation/cua-base.el" (21243 49747
+;;;;;; 293438 0))
;;; Generated autoloads from emulation/cua-base.el
(defvar cua-mode nil "\
;;;***
\f
-;;;### (autoloads nil "cus-edit" "cus-edit.el" (21187 63826 213216
+;;;### (autoloads nil "cus-edit" "cus-edit.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from cus-edit.el
OPTIONS should be an alist of the form ((SYMBOL WIDGET)...), where
SYMBOL is a customization option, and WIDGET is a widget for editing
that option.
+DESCRIPTION is unused.
\(fn OPTIONS &optional NAME DESCRIPTION)" nil nil)
;;;***
\f
-;;;### (autoloads nil "cus-theme" "cus-theme.el" (21187 63826 213216
+;;;### (autoloads nil "cus-theme" "cus-theme.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from cus-theme.el
;;;***
\f
-;;;### (autoloads nil "dbus" "net/dbus.el" (21187 63826 213216 0))
+;;;### (autoloads nil "dbus" "net/dbus.el" (21263 60369 592555 0))
;;; Generated autoloads from net/dbus.el
(autoload 'dbus-handle-event "dbus" "\
;;;***
\f
-;;;### (autoloads nil "debug" "emacs-lisp/debug.el" (21194 37048
-;;;;;; 599945 0))
+;;;### (autoloads nil "debug" "emacs-lisp/debug.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from emacs-lisp/debug.el
(setq debugger 'debug)
;;;***
\f
-;;;### (autoloads nil "delsel" "delsel.el" (21227 34360 69622 0))
+;;;### (autoloads nil "delsel" "delsel.el" (21251 41787 268999 0))
;;; Generated autoloads from delsel.el
(defalias 'pending-delete-mode 'delete-selection-mode)
;;;***
\f
-;;;### (autoloads nil "derived" "emacs-lisp/derived.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "derived" "emacs-lisp/derived.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from emacs-lisp/derived.el
(autoload 'define-derived-mode "derived" "\
;;;***
\f
-;;;### (autoloads nil "descr-text" "descr-text.el" (21187 63826 213216
+;;;### (autoloads nil "descr-text" "descr-text.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from descr-text.el
;;;***
\f
-;;;### (autoloads nil "desktop" "desktop.el" (21187 63826 213216
+;;;### (autoloads nil "desktop" "desktop.el" (21256 34613 967717
;;;;;; 0))
;;; Generated autoloads from desktop.el
(defvar desktop-save-mode nil "\
Non-nil if Desktop-Save mode is enabled.
-See the command `desktop-save-mode' for a description of this minor mode.")
+See the command `desktop-save-mode' for a description of this minor mode.
+Setting this variable directly does not take effect;
+either customize it (see the info node `Easy Customization')
+or call the function `desktop-save-mode'.")
(custom-autoload 'desktop-save-mode "desktop" nil)
(autoload 'desktop-save-mode "desktop" "\
Toggle desktop saving (Desktop Save mode).
-With a prefix argument ARG, enable Desktop Save mode if ARG is
-positive, and disable it otherwise. If called from Lisp, enable
-the mode if ARG is omitted or nil.
+With a prefix argument ARG, enable Desktop Save mode if ARG is positive,
+and disable it otherwise. If called from Lisp, enable the mode if ARG
+is omitted or nil.
+
+When Desktop Save mode is enabled, the state of Emacs is saved from
+one session to another. In particular, Emacs will save the desktop when
+it exits (this may prompt you; see the option `desktop-save'). The next
+time Emacs starts, if this mode is active it will restore the desktop.
+
+To manually save the desktop at any time, use the command `M-x desktop-save'.
+To load it, use `M-x desktop-read'.
+
+Once a desktop file exists, Emacs will auto-save it according to the
+option `desktop-auto-save-timeout'.
-If Desktop Save mode is enabled, the state of Emacs is saved from
-one session to another. See variable `desktop-save' and function
-`desktop-read' for details.
+To see all the options you can set, browse the `desktop' customization group.
+
+For further details, see info node `(emacs)Saving Emacs Sessions'.
\(fn &optional ARG)" t nil)
;;;***
\f
-;;;### (autoloads nil "diff" "vc/diff.el" (21187 63826 213216 0))
+;;;### (autoloads nil "diff" "vc/diff.el" (21240 46395 727291 0))
;;; Generated autoloads from vc/diff.el
(defvar diff-switches (purecopy "-c") "\
;;;***
\f
-;;;### (autoloads nil "dired" "dired.el" (21222 53814 660119 962000))
+;;;### (autoloads nil "dired" "dired.el" (21262 15747 490127 657000))
;;; Generated autoloads from dired.el
(defvar dired-listing-switches (purecopy "-al") "\
;;;***
\f
-;;;### (autoloads nil "disass" "emacs-lisp/disass.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "disass" "emacs-lisp/disass.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from emacs-lisp/disass.el
(autoload 'disassemble "disass" "\
;;;***
\f
-;;;### (autoloads nil "disp-table" "disp-table.el" (21187 63826 213216
+;;;### (autoloads nil "disp-table" "disp-table.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from disp-table.el
;;;***
\f
-;;;### (autoloads nil "dissociate" "play/dissociate.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "dissociate" "play/dissociate.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from play/dissociate.el
(autoload 'dissociated-press "dissociate" "\
;;;***
\f
-;;;### (autoloads nil "dnd" "dnd.el" (21187 63826 213216 0))
+;;;### (autoloads nil "dnd" "dnd.el" (21240 46395 727291 0))
;;; Generated autoloads from dnd.el
(defvar dnd-protocol-alist `((,(purecopy "^file:///") . dnd-open-local-file) (,(purecopy "^file://") . dnd-open-file) (,(purecopy "^file:") . dnd-open-local-file) (,(purecopy "^\\(https?\\|ftp\\|file\\|nfs\\)://") . dnd-open-file)) "\
;;;***
\f
-;;;### (autoloads nil "doctor" "play/doctor.el" (21187 63826 213216
+;;;### (autoloads nil "doctor" "play/doctor.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from play/doctor.el
;;;***
\f
-;;;### (autoloads nil "easy-mmode" "emacs-lisp/easy-mmode.el" (21187
-;;;;;; 63826 213216 0))
+;;;### (autoloads nil "easy-mmode" "emacs-lisp/easy-mmode.el" (21259
+;;;;;; 10807 217062 0))
;;; Generated autoloads from emacs-lisp/easy-mmode.el
(defalias 'easy-mmode-define-minor-mode 'define-minor-mode)
;;;***
\f
-;;;### (autoloads nil "ebrowse" "progmodes/ebrowse.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "ebrowse" "progmodes/ebrowse.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from progmodes/ebrowse.el
(autoload 'ebrowse-tree-mode "ebrowse" "\
;;;***
\f
-;;;### (autoloads nil "ebuff-menu" "ebuff-menu.el" (21187 63826 213216
+;;;### (autoloads nil "ebuff-menu" "ebuff-menu.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from ebuff-menu.el
;;;***
\f
-;;;### (autoloads nil "echistory" "echistory.el" (21187 63826 213216
+;;;### (autoloads nil "echistory" "echistory.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from echistory.el
;;;***
\f
-;;;### (autoloads nil "edebug" "emacs-lisp/edebug.el" (21205 7349
-;;;;;; 58947 0))
+;;;### (autoloads nil "edebug" "emacs-lisp/edebug.el" (21261 4402
+;;;;;; 232258 508000))
;;; Generated autoloads from emacs-lisp/edebug.el
(defvar edebug-all-defs nil "\
;;;***
\f
-;;;### (autoloads nil "edt" "emulation/edt.el" (21187 63826 213216
+;;;### (autoloads nil "edt" "emulation/edt.el" (21260 31670 94248
;;;;;; 0))
;;; Generated autoloads from emulation/edt.el
;;;***
\f
-;;;### (autoloads nil "ehelp" "ehelp.el" (21187 63826 213216 0))
+;;;### (autoloads nil "ehelp" "ehelp.el" (21240 46395 727291 0))
;;; Generated autoloads from ehelp.el
(autoload 'with-electric-help "ehelp" "\
;;;***
\f
-;;;### (autoloads nil "elec-pair" "elec-pair.el" (21193 16180 875828
+;;;### (autoloads nil "elec-pair" "elec-pair.el" (21257 55477 969423
;;;;;; 0))
;;; Generated autoloads from elec-pair.el
;;;***
\f
-;;;### (autoloads nil "elp" "emacs-lisp/elp.el" (21187 63826 213216
+;;;### (autoloads nil "elp" "emacs-lisp/elp.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from emacs-lisp/elp.el
;;;***
\f
-;;;### (autoloads nil "emacs-lock" "emacs-lock.el" (21187 63826 213216
+;;;### (autoloads nil "emacs-lock" "emacs-lock.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from emacs-lock.el
;;;***
\f
-;;;### (autoloads nil "emacsbug" "mail/emacsbug.el" (21198 34110
-;;;;;; 565653 0))
+;;;### (autoloads nil "emacsbug" "mail/emacsbug.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from mail/emacsbug.el
(autoload 'report-emacs-bug "emacsbug" "\
;;;***
\f
-;;;### (autoloads nil "emerge" "vc/emerge.el" (21032 23080 765139
+;;;### (autoloads nil "emerge" "vc/emerge.el" (21231 31415 579137
;;;;;; 0))
;;; Generated autoloads from vc/emerge.el
;;;***
\f
-;;;### (autoloads nil "epa" "epa.el" (21220 61111 156047 0))
+;;;### (autoloads nil "epa" "epa.el" (21235 28473 29431 0))
;;; Generated autoloads from epa.el
(autoload 'epa-list-keys "epa" "\
;;;***
\f
-;;;### (autoloads nil "erc" "erc/erc.el" (21227 34360 69622 0))
+;;;### (autoloads nil "erc" "erc/erc.el" (21240 46395 727291 0))
;;; Generated autoloads from erc/erc.el
(push (purecopy '(erc 5 3)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "erc-autoaway" "erc/erc-autoaway.el" (21187
-;;;;;; 63826 213216 0))
+;;;### (autoloads nil "erc-autoaway" "erc/erc-autoaway.el" (21240
+;;;;;; 46395 727291 0))
;;; Generated autoloads from erc/erc-autoaway.el
(autoload 'erc-autoaway-mode "erc-autoaway")
;;;***
\f
-;;;### (autoloads nil "erc-button" "erc/erc-button.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "erc-button" "erc/erc-button.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from erc/erc-button.el
(autoload 'erc-button-mode "erc-button" nil t)
;;;***
\f
-;;;### (autoloads nil "erc-capab" "erc/erc-capab.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "erc-capab" "erc/erc-capab.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from erc/erc-capab.el
(autoload 'erc-capab-identify-mode "erc-capab" nil t)
;;;***
\f
-;;;### (autoloads nil "erc-compat" "erc/erc-compat.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "erc-compat" "erc/erc-compat.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from erc/erc-compat.el
(autoload 'erc-define-minor-mode "erc-compat")
;;;***
\f
-;;;### (autoloads nil "erc-dcc" "erc/erc-dcc.el" (21187 63826 213216
+;;;### (autoloads nil "erc-dcc" "erc/erc-dcc.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from erc/erc-dcc.el
(autoload 'erc-dcc-mode "erc-dcc")
;;;***
\f
-;;;### (autoloads nil "erc-ezbounce" "erc/erc-ezbounce.el" (21187
-;;;;;; 63826 213216 0))
+;;;### (autoloads nil "erc-ezbounce" "erc/erc-ezbounce.el" (21240
+;;;;;; 46395 727291 0))
;;; Generated autoloads from erc/erc-ezbounce.el
(autoload 'erc-cmd-ezb "erc-ezbounce" "\
;;;***
\f
-;;;### (autoloads nil "erc-fill" "erc/erc-fill.el" (21187 63826 213216
+;;;### (autoloads nil "erc-fill" "erc/erc-fill.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from erc/erc-fill.el
(autoload 'erc-fill-mode "erc-fill" nil t)
;;;***
\f
-;;;### (autoloads nil "erc-identd" "erc/erc-identd.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "erc-identd" "erc/erc-identd.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from erc/erc-identd.el
(autoload 'erc-identd-mode "erc-identd")
;;;***
\f
-;;;### (autoloads nil "erc-imenu" "erc/erc-imenu.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "erc-imenu" "erc/erc-imenu.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from erc/erc-imenu.el
(autoload 'erc-create-imenu-index "erc-imenu" "\
;;;***
\f
-;;;### (autoloads nil "erc-join" "erc/erc-join.el" (21187 63826 213216
+;;;### (autoloads nil "erc-join" "erc/erc-join.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from erc/erc-join.el
(autoload 'erc-autojoin-mode "erc-join" nil t)
;;;***
\f
-;;;### (autoloads nil "erc-lang" "erc/erc-lang.el" (21193 16180 875828
+;;;### (autoloads nil "erc-lang" "erc/erc-lang.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from erc/erc-lang.el
(push (purecopy '(erc-lang 1 0 0)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "erc-list" "erc/erc-list.el" (21187 63826 213216
+;;;### (autoloads nil "erc-list" "erc/erc-list.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from erc/erc-list.el
(push (purecopy '(erc-list 0 1)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "erc-log" "erc/erc-log.el" (21187 63826 213216
+;;;### (autoloads nil "erc-log" "erc/erc-log.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from erc/erc-log.el
(autoload 'erc-log-mode "erc-log" nil t)
;;;***
\f
-;;;### (autoloads nil "erc-match" "erc/erc-match.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "erc-match" "erc/erc-match.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from erc/erc-match.el
(autoload 'erc-match-mode "erc-match")
;;;***
\f
-;;;### (autoloads nil "erc-menu" "erc/erc-menu.el" (21187 63826 213216
+;;;### (autoloads nil "erc-menu" "erc/erc-menu.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from erc/erc-menu.el
(autoload 'erc-menu-mode "erc-menu" nil t)
;;;***
\f
-;;;### (autoloads nil "erc-netsplit" "erc/erc-netsplit.el" (21187
-;;;;;; 63826 213216 0))
+;;;### (autoloads nil "erc-netsplit" "erc/erc-netsplit.el" (21240
+;;;;;; 46395 727291 0))
;;; Generated autoloads from erc/erc-netsplit.el
(autoload 'erc-netsplit-mode "erc-netsplit")
;;;***
\f
-;;;### (autoloads nil "erc-networks" "erc/erc-networks.el" (21187
-;;;;;; 63826 213216 0))
+;;;### (autoloads nil "erc-networks" "erc/erc-networks.el" (21260
+;;;;;; 55795 711190 0))
;;; Generated autoloads from erc/erc-networks.el
(autoload 'erc-determine-network "erc-networks" "\
;;;***
\f
-;;;### (autoloads nil "erc-notify" "erc/erc-notify.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "erc-notify" "erc/erc-notify.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from erc/erc-notify.el
(autoload 'erc-notify-mode "erc-notify" nil t)
;;;***
\f
-;;;### (autoloads nil "erc-page" "erc/erc-page.el" (21187 63826 213216
+;;;### (autoloads nil "erc-page" "erc/erc-page.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from erc/erc-page.el
(autoload 'erc-page-mode "erc-page")
;;;***
\f
-;;;### (autoloads nil "erc-pcomplete" "erc/erc-pcomplete.el" (21187
-;;;;;; 63826 213216 0))
+;;;### (autoloads nil "erc-pcomplete" "erc/erc-pcomplete.el" (21240
+;;;;;; 46395 727291 0))
;;; Generated autoloads from erc/erc-pcomplete.el
(autoload 'erc-completion-mode "erc-pcomplete" nil t)
;;;***
\f
-;;;### (autoloads nil "erc-replace" "erc/erc-replace.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "erc-replace" "erc/erc-replace.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from erc/erc-replace.el
(autoload 'erc-replace-mode "erc-replace")
;;;***
\f
-;;;### (autoloads nil "erc-ring" "erc/erc-ring.el" (21187 63826 213216
+;;;### (autoloads nil "erc-ring" "erc/erc-ring.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from erc/erc-ring.el
(autoload 'erc-ring-mode "erc-ring" nil t)
;;;***
\f
-;;;### (autoloads nil "erc-services" "erc/erc-services.el" (21187
-;;;;;; 63826 213216 0))
+;;;### (autoloads nil "erc-services" "erc/erc-services.el" (21240
+;;;;;; 46395 727291 0))
;;; Generated autoloads from erc/erc-services.el
(autoload 'erc-services-mode "erc-services" nil t)
;;;***
\f
-;;;### (autoloads nil "erc-sound" "erc/erc-sound.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "erc-sound" "erc/erc-sound.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from erc/erc-sound.el
(autoload 'erc-sound-mode "erc-sound")
;;;***
\f
-;;;### (autoloads nil "erc-speedbar" "erc/erc-speedbar.el" (21187
-;;;;;; 63826 213216 0))
+;;;### (autoloads nil "erc-speedbar" "erc/erc-speedbar.el" (21240
+;;;;;; 46395 727291 0))
;;; Generated autoloads from erc/erc-speedbar.el
(autoload 'erc-speedbar-browser "erc-speedbar" "\
;;;***
\f
-;;;### (autoloads nil "erc-spelling" "erc/erc-spelling.el" (21187
-;;;;;; 63826 213216 0))
+;;;### (autoloads nil "erc-spelling" "erc/erc-spelling.el" (21240
+;;;;;; 46395 727291 0))
;;; Generated autoloads from erc/erc-spelling.el
(autoload 'erc-spelling-mode "erc-spelling" nil t)
;;;***
\f
-;;;### (autoloads nil "erc-stamp" "erc/erc-stamp.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "erc-stamp" "erc/erc-stamp.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from erc/erc-stamp.el
(autoload 'erc-timestamp-mode "erc-stamp" nil t)
;;;***
\f
-;;;### (autoloads nil "erc-track" "erc/erc-track.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "erc-track" "erc/erc-track.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from erc/erc-track.el
(defvar erc-track-minor-mode nil "\
;;;***
\f
-;;;### (autoloads nil "erc-truncate" "erc/erc-truncate.el" (21187
-;;;;;; 63826 213216 0))
+;;;### (autoloads nil "erc-truncate" "erc/erc-truncate.el" (21240
+;;;;;; 46395 727291 0))
;;; Generated autoloads from erc/erc-truncate.el
(autoload 'erc-truncate-mode "erc-truncate" nil t)
;;;***
\f
-;;;### (autoloads nil "erc-xdcc" "erc/erc-xdcc.el" (21187 63826 213216
+;;;### (autoloads nil "erc-xdcc" "erc/erc-xdcc.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from erc/erc-xdcc.el
(autoload 'erc-xdcc-mode "erc-xdcc")
;;;***
\f
-;;;### (autoloads nil "ert" "emacs-lisp/ert.el" (21187 63826 213216
+;;;### (autoloads nil "ert" "emacs-lisp/ert.el" (21261 52533 628241
;;;;;; 0))
;;; Generated autoloads from emacs-lisp/ert.el
;;;***
\f
-;;;### (autoloads nil "etags" "progmodes/etags.el" (21187 63826 213216
+;;;### (autoloads nil "etags" "progmodes/etags.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from progmodes/etags.el
;;;***
\f
-;;;### (autoloads nil "face-remap" "face-remap.el" (21187 63826 213216
+;;;### (autoloads nil "face-remap" "face-remap.el" (21241 18251 378509
;;;;;; 0))
;;; Generated autoloads from face-remap.el
;;;***
\f
-;;;### (autoloads nil "ffap" "ffap.el" (21187 63826 213216 0))
+;;;### (autoloads nil "ffap" "ffap.el" (21240 46395 727291 0))
;;; Generated autoloads from ffap.el
(autoload 'ffap-next "ffap" "\
;;;***
\f
-;;;### (autoloads nil "filecache" "filecache.el" (21187 63826 213216
+;;;### (autoloads nil "filecache" "filecache.el" (21265 49588 918402
;;;;;; 0))
;;; Generated autoloads from filecache.el
;;;***
\f
-;;;### (autoloads nil "files-x" "files-x.el" (21187 63826 213216
+;;;### (autoloads nil "files-x" "files-x.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from files-x.el
;;;***
\f
-;;;### (autoloads nil "filesets" "filesets.el" (21194 37048 599945
+;;;### (autoloads nil "filesets" "filesets.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from filesets.el
;;;***
\f
-;;;### (autoloads nil "find-dired" "find-dired.el" (21187 63826 213216
+;;;### (autoloads nil "find-dired" "find-dired.el" (21264 57319 597552
;;;;;; 0))
;;; Generated autoloads from find-dired.el
(autoload 'find-name-dired "find-dired" "\
Search DIR recursively for files matching the globbing pattern PATTERN,
-and run dired on those files.
+and run Dired on those files.
PATTERN is a shell wildcard (not an Emacs regexp) and need not be quoted.
-The command run (after changing into DIR) is
+The default command run (after changing into DIR) is
find . -name 'PATTERN' -ls
+See `find-name-arg' to customize the arguments.
+
\(fn DIR PATTERN)" t nil)
(autoload 'find-grep-dired "find-dired" "\
-Find files in DIR containing a regexp REGEXP and start Dired on output.
+Find files in DIR matching a regexp REGEXP and start Dired on output.
The command run (after changing into DIR) is
find . \\( -type f -exec `grep-program' `find-grep-options' \\
;;;***
\f
-;;;### (autoloads nil "find-file" "find-file.el" (21187 63826 213216
+;;;### (autoloads nil "find-file" "find-file.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from find-file.el
;;;***
\f
-;;;### (autoloads nil "find-func" "emacs-lisp/find-func.el" (21187
-;;;;;; 63826 213216 0))
+;;;### (autoloads nil "find-func" "emacs-lisp/find-func.el" (21230
+;;;;;; 10550 983182 0))
;;; Generated autoloads from emacs-lisp/find-func.el
(autoload 'find-library "find-func" "\
;;;***
\f
-;;;### (autoloads nil "finder" "finder.el" (21187 63826 213216 0))
+;;;### (autoloads nil "finder" "finder.el" (21264 57319 597552 0))
;;; Generated autoloads from finder.el
(push (purecopy '(finder 1 0)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "flow-ctrl" "flow-ctrl.el" (21187 63826 213216
+;;;### (autoloads nil "flow-ctrl" "flow-ctrl.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from flow-ctrl.el
;;;***
\f
-;;;### (autoloads nil "flymake" "progmodes/flymake.el" (21220 61111
-;;;;;; 156047 0))
+;;;### (autoloads nil "flymake" "progmodes/flymake.el" (21245 64312
+;;;;;; 799897 0))
;;; Generated autoloads from progmodes/flymake.el
(push (purecopy '(flymake 0 3)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "flyspell" "textmodes/flyspell.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "flyspell" "textmodes/flyspell.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from textmodes/flyspell.el
(autoload 'flyspell-prog-mode "flyspell" "\
;;;***
\f
-;;;### (autoloads nil "foldout" "foldout.el" (21187 63826 213216
+;;;### (autoloads nil "foldout" "foldout.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from foldout.el
(push (purecopy '(foldout 1 10)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "follow" "follow.el" (21207 49087 974317 0))
+;;;### (autoloads nil "follow" "follow.el" (21240 46395 727291 0))
;;; Generated autoloads from follow.el
(autoload 'turn-on-follow-mode "follow" "\
;;;***
\f
-;;;### (autoloads nil "frameset" "frameset.el" (21187 63826 213216
+;;;### (autoloads nil "frameset" "frameset.el" (21253 58421 377974
;;;;;; 0))
;;; Generated autoloads from frameset.el
Use \\[jump-to-register] to restore the frameset.
Argument is a character, naming the register.
-\(fn REGISTER &optional ARG)" t nil)
+Interactively, reads the register using `register-read-with-preview'.
+
+\(fn REGISTER)" t nil)
;;;***
\f
;;;***
\f
-;;;### (autoloads nil "gdb-mi" "progmodes/gdb-mi.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "gdb-mi" "progmodes/gdb-mi.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from progmodes/gdb-mi.el
(defvar gdb-enable-debug nil "\
;;;***
\f
-;;;### (autoloads nil "gnus-msg" "gnus/gnus-msg.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "gnus-msg" "gnus/gnus-msg.el" (21235 28473
+;;;;;; 29431 0))
;;; Generated autoloads from gnus/gnus-msg.el
(autoload 'gnus-msg-mail "gnus-msg" "\
;;;***
\f
-;;;### (autoloads nil "gomoku" "play/gomoku.el" (21187 63826 213216
+;;;### (autoloads nil "gomoku" "play/gomoku.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from play/gomoku.el
;;;***
\f
-;;;### (autoloads nil "goto-addr" "net/goto-addr.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "goto-addr" "net/goto-addr.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from net/goto-addr.el
(define-obsolete-function-alias 'goto-address-at-mouse 'goto-address-at-point "22.1")
;;;***
\f
-;;;### (autoloads nil "grep" "progmodes/grep.el" (21187 63826 213216
+;;;### (autoloads nil "grep" "progmodes/grep.el" (21245 64312 799897
;;;;;; 0))
;;; Generated autoloads from progmodes/grep.el
This variable's value takes effect when `grep-compute-defaults' is called.")
(defvar find-program (purecopy "find") "\
-The default find program for `grep-find-command'.
-This variable's value takes effect when `grep-compute-defaults' is called.")
+The default find program.
+This is used by commands like `grep-find-command', `find-dired'
+and others.")
(defvar xargs-program (purecopy "xargs") "\
The default xargs program for `grep-find-command'.
;;;***
\f
-;;;### (autoloads nil "gs" "gs.el" (21187 63826 213216 0))
+;;;### (autoloads nil "gs" "gs.el" (21240 46395 727291 0))
;;; Generated autoloads from gs.el
(autoload 'gs-load-image "gs" "\
;;;***
\f
-;;;### (autoloads nil "gud" "progmodes/gud.el" (21207 49087 974317
+;;;### (autoloads nil "gud" "progmodes/gud.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from progmodes/gud.el
;;;***
\f
-;;;### (autoloads nil "gv" "emacs-lisp/gv.el" (21187 63826 213216
+;;;### (autoloads nil "gv" "emacs-lisp/gv.el" (21255 45558 780901
;;;;;; 0))
;;; Generated autoloads from emacs-lisp/gv.el
\(fn SYMBOL NAME ARGS HANDLER &optional FIX)" nil nil)
-(push `(gv-expander ,(apply-partially #'gv--defun-declaration 'gv-expander)) defun-declarations-alist)
+(or (assq 'gv-expander defun-declarations-alist) (push `(gv-expander ,(apply-partially #'gv--defun-declaration 'gv-expander)) defun-declarations-alist))
-(push `(gv-setter ,(apply-partially #'gv--defun-declaration 'gv-setter)) defun-declarations-alist)
+(or (assq 'gv-setter defun-declarations-alist) (push `(gv-setter ,(apply-partially #'gv--defun-declaration 'gv-setter)) defun-declarations-alist))
(autoload 'gv-define-setter "gv" "\
Define a setter method for generalized variable NAME.
;;;***
\f
-;;;### (autoloads nil "hanoi" "play/hanoi.el" (20478 3673 653810
+;;;### (autoloads nil "hanoi" "play/hanoi.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from play/hanoi.el
;;;***
\f
-;;;### (autoloads nil "help-at-pt" "help-at-pt.el" (21187 63826 213216
+;;;### (autoloads nil "help-at-pt" "help-at-pt.el" (21231 31415 579137
;;;;;; 0))
;;; Generated autoloads from help-at-pt.el
;;;***
\f
-;;;### (autoloads nil "help-fns" "help-fns.el" (21198 34110 565653
+;;;### (autoloads nil "help-fns" "help-fns.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from help-fns.el
;;;***
\f
-;;;### (autoloads nil "help-macro" "help-macro.el" (21187 63826 213216
+;;;### (autoloads nil "help-macro" "help-macro.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from help-macro.el
;;;***
\f
-;;;### (autoloads nil "help-mode" "help-mode.el" (21187 63826 213216
+;;;### (autoloads nil "help-mode" "help-mode.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from help-mode.el
;;;***
\f
-;;;### (autoloads nil "helper" "emacs-lisp/helper.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "helper" "emacs-lisp/helper.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from emacs-lisp/helper.el
(autoload 'Helper-describe-bindings "helper" "\
;;;***
\f
-;;;### (autoloads nil "hexl" "hexl.el" (21226 13501 706948 0))
+;;;### (autoloads nil "hexl" "hexl.el" (21240 46395 727291 0))
;;; Generated autoloads from hexl.el
(autoload 'hexl-mode "hexl" "\
;;;***
\f
-;;;### (autoloads nil "hi-lock" "hi-lock.el" (21187 63826 213216
+;;;### (autoloads nil "hi-lock" "hi-lock.el" (21236 49338 435234
;;;;;; 0))
;;; Generated autoloads from hi-lock.el
(autoload 'hi-lock-line-face-buffer "hi-lock" "\
Set face of all lines containing a match of REGEXP to FACE.
-Interactively, prompt for REGEXP then FACE. Use
-`read-regexp-defaults-function' to customize default
-value(s) of REGEXP. Use the global history list for FACE.
+Interactively, prompt for REGEXP using `read-regexp', then FACE.
+Use the global history list for FACE.
Use Font lock mode, if enabled, to highlight REGEXP. Otherwise,
use overlays for highlighting. If overlays are used, the
(autoload 'hi-lock-face-buffer "hi-lock" "\
Set face of each match of REGEXP to FACE.
-Interactively, prompt for REGEXP then FACE. Use
-`read-regexp-defaults-function' to customize default
-value(s) of REGEXP. Use the global history list for FACE.
+Interactively, prompt for REGEXP using `read-regexp', then FACE.
+Use the global history list for FACE.
Use Font lock mode, if enabled, to highlight REGEXP. Otherwise,
use overlays for highlighting. If overlays are used, the
(autoload 'hi-lock-face-phrase-buffer "hi-lock" "\
Set face of each match of phrase REGEXP to FACE.
-Interactively, prompt for REGEXP then FACE. Use
-`read-regexp-defaults-function' to customize default
-value(s) of REGEXP. Use the global history list for FACE. When
-called interactively, replace whitespace in user provided regexp
-with arbitrary whitespace and make initial lower-case letters
-case-insensitive before highlighting with `hi-lock-set-pattern'.
+Interactively, prompt for REGEXP using `read-regexp', then FACE.
+Use the global history list for FACE.
+
+When called interactively, replace whitespace in user-provided
+regexp with arbitrary whitespace, and make initial lower-case
+letters case-insensitive, before highlighting with `hi-lock-set-pattern'.
Use Font lock mode, if enabled, to highlight REGEXP. Otherwise,
use overlays for highlighting. If overlays are used, the
(defalias 'highlight-symbol-at-point 'hi-lock-face-symbol-at-point)
(autoload 'hi-lock-face-symbol-at-point "hi-lock" "\
-Set face of each match of the symbol at point.
-Use `find-tag-default-as-symbol-regexp' to retrieve the symbol at point.
-Use non-nil `hi-lock-auto-select-face' to retrieve the next face
-from `hi-lock-face-defaults' automatically.
+Highlight each instance of the symbol at point.
+Uses the next face from `hi-lock-face-defaults' without prompting,
+unless you use a prefix argument.
+Uses `find-tag-default-as-symbol-regexp' to retrieve the symbol at point.
-Use Font lock mode, if enabled, to highlight symbol at point.
-Otherwise, use overlays for highlighting. If overlays are used,
-the highlighting will not update as you type.
+This uses Font lock mode if it is enabled; otherwise it uses overlays,
+in which case the highlighting will not update as you type.
\(fn)" t nil)
;;;***
\f
-;;;### (autoloads nil "hideif" "progmodes/hideif.el" (21223 37302
-;;;;;; 81938 0))
+;;;### (autoloads nil "hideif" "progmodes/hideif.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from progmodes/hideif.el
(autoload 'hide-ifdef-mode "hideif" "\
;;;***
\f
-;;;### (autoloads nil "hippie-exp" "hippie-exp.el" (21224 58166 697544
+;;;### (autoloads nil "hippie-exp" "hippie-exp.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from hippie-exp.el
(push (purecopy '(hippie-exp 1 6)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "hl-line" "hl-line.el" (21195 23530 495420
+;;;### (autoloads nil "hl-line" "hl-line.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from hl-line.el
;;;***
\f
-;;;### (autoloads nil "icomplete" "icomplete.el" (21187 63826 213216
+;;;### (autoloads nil "icomplete" "icomplete.el" (21265 49588 918402
;;;;;; 0))
;;; Generated autoloads from icomplete.el
positive, and disable it otherwise. If called from Lisp, enable
the mode if ARG is omitted or nil.
+When this global minor mode is enabled, typing in the minibuffer
+continuously displays a list of possible completions that match
+the string you have typed. See `icomplete-completions' for a
+description of how prospective completions are displayed.
+
+For more information, see Info node `(emacs)Icomplete'.
+For options you can set, `M-x customize-group icomplete'.
+
+You can use the following key bindings to navigate and select
+completions:
+
+\\{icomplete-minibuffer-map}
+
\(fn &optional ARG)" t nil)
;;;***
;;;***
\f
-;;;### (autoloads nil "ido" "ido.el" (21227 34360 69622 0))
+;;;### (autoloads nil "ido" "ido.el" (21251 16696 39562 0))
;;; Generated autoloads from ido.el
(defvar ido-mode nil "\
;;;***
\f
-;;;### (autoloads nil "ielm" "ielm.el" (21226 13501 706948 0))
+;;;### (autoloads nil "ielm" "ielm.el" (21240 46395 727291 0))
;;; Generated autoloads from ielm.el
(autoload 'ielm "ielm" "\
;;;***
\f
-;;;### (autoloads nil "image" "image.el" (21215 43189 822371 0))
+;;;### (autoloads nil "image" "image.el" (21261 4487 230861 399000))
;;; Generated autoloads from image.el
(autoload 'image-type-from-data "image" "\
;;;***
\f
-;;;### (autoloads nil "imenu" "imenu.el" (21187 63826 213216 0))
+;;;### (autoloads nil "imenu" "imenu.el" (21257 55477 969423 0))
;;; Generated autoloads from imenu.el
(defvar imenu-sort-function nil "\
;;;***
\f
-;;;### (autoloads nil "info" "info.el" (21203 52022 581300 0))
+;;;### (autoloads nil "info" "info.el" (21263 61769 818166 484000))
;;; Generated autoloads from info.el
(defcustom Info-default-directory-list (let* ((config-dir (file-name-as-directory (or (and (featurep 'ns) (let ((dir (expand-file-name "../info" data-directory))) (if (file-directory-p dir) dir))) configure-info-directory))) (prefixes (prune-directory-list '("/usr/local/" "/usr/" "/opt/" "/"))) (suffixes '("share/" "" "gnu/" "gnu/lib/" "gnu/lib/emacs/" "emacs/" "lib/" "lib/emacs/")) (standard-info-dirs (apply #'nconc (mapcar (lambda (pfx) (let ((dirs (mapcar (lambda (sfx) (concat pfx sfx "info/")) suffixes))) (prune-directory-list dirs))) prefixes))) (dirs (if (member config-dir standard-info-dirs) (nconc standard-info-dirs (list config-dir)) (cons config-dir standard-info-dirs)))) (if (not (eq system-type 'windows-nt)) dirs (let* ((instdir (file-name-directory invocation-directory)) (dir1 (expand-file-name "../info/" instdir)) (dir2 (expand-file-name "../../../info/" instdir))) (cond ((file-exists-p dir1) (append dirs (list dir1))) ((file-exists-p dir2) (append dirs (list dir2))) (t dirs))))) "\
;;;***
\f
-;;;### (autoloads nil "info-look" "info-look.el" (21187 63826 213216
+;;;### (autoloads nil "info-look" "info-look.el" (21238 4664 559807
;;;;;; 0))
;;; Generated autoloads from info-look.el
value into the minibuffer so you can edit it. The default symbol is the
one found at point.
-With prefix arg a query for the symbol help mode is offered.
+With prefix arg MODE a query for the symbol help mode is offered.
\(fn SYMBOL &optional MODE)" t nil)
(put 'info-lookup-file 'info-file "emacs")
into the minibuffer so you can edit it.
The default file name is the one found at point.
-With prefix arg a query for the file help mode is offered.
+With prefix arg MODE a query for the file help mode is offered.
\(fn FILE &optional MODE)" t nil)
;;;***
\f
-;;;### (autoloads nil "informat" "informat.el" (21187 63826 213216
+;;;### (autoloads nil "informat" "informat.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from informat.el
;;;***
\f
-;;;### (autoloads nil "isearchb" "isearchb.el" (21187 63826 213216
+;;;### (autoloads nil "isearchb" "isearchb.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from isearchb.el
(push (purecopy '(isearchb 1 5)) package--builtin-versions)
;;;***
\f
;;;### (autoloads nil "iso-transl" "international/iso-transl.el"
-;;;;;; (21187 63826 213216 0))
+;;;;;; (21240 46395 727291 0))
;;; Generated autoloads from international/iso-transl.el
(define-key key-translation-map "\C-x8" 'iso-transl-ctl-x-8-map)
(autoload 'iso-transl-ctl-x-8-map "iso-transl" "Keymap for C-x 8 prefix." t 'keymap)
\(fn)" t nil)
-;;;***
-\f
-;;;### (autoloads nil "iswitchb" "iswitchb.el" (21187 63826 213216
-;;;;;; 0))
-;;; Generated autoloads from iswitchb.el
-
-(defvar iswitchb-mode nil "\
-Non-nil if Iswitchb mode is enabled.
-See the command `iswitchb-mode' for a description of this minor mode.
-Setting this variable directly does not take effect;
-either customize it (see the info node `Easy Customization')
-or call the function `iswitchb-mode'.")
-
-(custom-autoload 'iswitchb-mode "iswitchb" nil)
-
-(autoload 'iswitchb-mode "iswitchb" "\
-Toggle Iswitchb mode.
-With a prefix argument ARG, enable Iswitchb mode if ARG is
-positive, and disable it otherwise. If called from Lisp, enable
-the mode if ARG is omitted or nil.
-
-Iswitchb mode is a global minor mode that enables switching
-between buffers using substrings. See `iswitchb' for details.
-
-\(fn &optional ARG)" t nil)
-
;;;***
\f
;;;### (autoloads nil "japan-util" "language/japan-util.el" (21187
;;;***
\f
-;;;### (autoloads nil "jka-compr" "jka-compr.el" (21208 39894 970127
-;;;;;; 901000))
+;;;### (autoloads nil "jka-compr" "jka-compr.el" (21240 46395 727291
+;;;;;; 0))
;;; Generated autoloads from jka-compr.el
(defvar jka-compr-inhibit nil "\
;;;***
\f
-;;;### (autoloads nil "js" "progmodes/js.el" (21187 63826 213216
+;;;### (autoloads nil "js" "progmodes/js.el" (21243 22582 782931
;;;;;; 0))
;;; Generated autoloads from progmodes/js.el
(push (purecopy '(js 9)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "kmacro" "kmacro.el" (21187 63826 213216 0))
+;;;### (autoloads nil "kmacro" "kmacro.el" (21244 11875 194797 0))
;;; Generated autoloads from kmacro.el
(global-set-key "\C-x(" 'kmacro-start-macro)
(global-set-key "\C-x)" 'kmacro-end-macro)
(autoload 'kmacro-exec-ring-item "kmacro" "\
Execute item ITEM from the macro ring.
+ARG is the number of times to execute the item.
\(fn ITEM ARG)" nil nil)
;;;***
\f
-;;;### (autoloads nil "life" "play/life.el" (21187 63826 213216 0))
+;;;### (autoloads nil "life" "play/life.el" (21240 46395 727291 0))
;;; Generated autoloads from play/life.el
(autoload 'life "life" "\
;;;***
\f
-;;;### (autoloads nil "linum" "linum.el" (21187 63826 213216 0))
+;;;### (autoloads nil "linum" "linum.el" (21240 46395 727291 0))
;;; Generated autoloads from linum.el
(push (purecopy '(linum 0 9 24)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "loadhist" "loadhist.el" (21187 63826 213216
+;;;### (autoloads nil "loadhist" "loadhist.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from loadhist.el
;;;***
\f
-;;;### (autoloads nil "log-edit" "vc/log-edit.el" (21204 16865 279294
+;;;### (autoloads nil "log-edit" "vc/log-edit.el" (21239 25528 651427
;;;;;; 0))
;;; Generated autoloads from vc/log-edit.el
;;;***
\f
-;;;### (autoloads nil "lpr" "lpr.el" (21194 37048 599945 0))
+;;;### (autoloads nil "lpr" "lpr.el" (21240 46395 727291 0))
;;; Generated autoloads from lpr.el
(defvar lpr-windows-system (memq system-type '(ms-dos windows-nt)) "\
;;;***
\f
-;;;### (autoloads nil "ls-lisp" "ls-lisp.el" (21187 63826 213216
+;;;### (autoloads nil "ls-lisp" "ls-lisp.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from ls-lisp.el
;;;***
\f
-;;;### (autoloads nil "macros" "macros.el" (21187 63826 213216 0))
+;;;### (autoloads nil "macros" "macros.el" (21240 46395 727291 0))
;;; Generated autoloads from macros.el
(autoload 'name-last-kbd-macro "macros" "\
\(fn SYMBOL)" t nil)
(autoload 'insert-kbd-macro "macros" "\
-Insert in buffer the definition of kbd macro NAME, as Lisp code.
+Insert in buffer the definition of kbd macro MACRONAME, as Lisp code.
+MACRONAME should be a symbol.
Optional second arg KEYS means also record the keys it is on
\(this is the prefix argument, when calling interactively).
;;;***
\f
-;;;### (autoloads nil "mail-extr" "mail/mail-extr.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "mail-extr" "mail/mail-extr.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from mail/mail-extr.el
(autoload 'mail-extract-address-components "mail-extr" "\
;;;***
\f
-;;;### (autoloads nil "mail-utils" "mail/mail-utils.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "mail-utils" "mail/mail-utils.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from mail/mail-utils.el
(defvar mail-use-rfc822 nil "\
;;;***
\f
-;;;### (autoloads nil "mailabbrev" "mail/mailabbrev.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "mailabbrev" "mail/mailabbrev.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from mail/mailabbrev.el
(defvar mail-abbrevs-mode nil "\
;;;***
\f
-;;;### (autoloads nil "mailalias" "mail/mailalias.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "mailalias" "mail/mailalias.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from mail/mailalias.el
(defvar mail-complete-style 'angles "\
;;;***
\f
-;;;### (autoloads nil "make-mode" "progmodes/make-mode.el" (21187
-;;;;;; 63826 213216 0))
+;;;### (autoloads nil "make-mode" "progmodes/make-mode.el" (21240
+;;;;;; 46395 727291 0))
;;; Generated autoloads from progmodes/make-mode.el
(autoload 'makefile-mode "make-mode" "\
;;;***
\f
-;;;### (autoloads nil "makesum" "makesum.el" (21187 63826 213216
+;;;### (autoloads nil "makesum" "makesum.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from makesum.el
;;;***
\f
-;;;### (autoloads nil "man" "man.el" (21187 63826 213216 0))
+;;;### (autoloads nil "man" "man.el" (21240 46395 727291 0))
;;; Generated autoloads from man.el
(defalias 'manual-entry 'man)
;;;***
\f
-;;;### (autoloads nil "message" "gnus/message.el" (21199 204 550114
-;;;;;; 319000))
+;;;### (autoloads nil "message" "gnus/message.el" (21239 25528 651427
+;;;;;; 0))
;;; Generated autoloads from gnus/message.el
(define-mail-user-agent 'message-user-agent 'message-mail 'message-send-and-exit 'message-kill-buffer 'message-send-hook)
;;;***
\f
-;;;### (autoloads nil "misc" "misc.el" (21187 63826 213216 0))
+;;;### (autoloads nil "misc" "misc.el" (21240 46395 727291 0))
;;; Generated autoloads from misc.el
(autoload 'butterfly "misc" "\
;;;***
\f
-;;;### (autoloads nil "misearch" "misearch.el" (21187 63826 213216
+;;;### (autoloads nil "misearch" "misearch.el" (21245 64312 799897
;;;;;; 0))
;;; Generated autoloads from misearch.el
(add-hook 'isearch-mode-hook 'multi-isearch-setup)
;;;***
\f
-;;;### (autoloads nil "modula2" "progmodes/modula2.el" (20355 10021
-;;;;;; 546955 0))
+;;;### (autoloads nil "modula2" "progmodes/modula2.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from progmodes/modula2.el
(defalias 'modula-2-mode 'm2-mode)
;;;***
\f
-;;;### (autoloads nil "msb" "msb.el" (21187 63826 213216 0))
+;;;### (autoloads nil "msb" "msb.el" (21240 46395 727291 0))
;;; Generated autoloads from msb.el
(defvar msb-mode nil "\
;;;***
\f
-;;;### (autoloads nil "newst-backend" "net/newst-backend.el" (21187
-;;;;;; 63826 213216 0))
+;;;### (autoloads nil "newst-backend" "net/newst-backend.el" (21260
+;;;;;; 57908 370145 500000))
;;; Generated autoloads from net/newst-backend.el
(autoload 'newsticker-running-p "newst-backend" "\
;;;***
\f
-;;;### (autoloads nil "novice" "novice.el" (21187 63826 213216 0))
+;;;### (autoloads nil "novice" "novice.el" (21240 46395 727291 0))
;;; Generated autoloads from novice.el
(define-obsolete-variable-alias 'disabled-command-hook 'disabled-command-function "22.1")
;;;***
\f
-;;;### (autoloads nil "nroff-mode" "textmodes/nroff-mode.el" (21187
-;;;;;; 63826 213216 0))
+;;;### (autoloads nil "nroff-mode" "textmodes/nroff-mode.el" (21240
+;;;;;; 46395 727291 0))
;;; Generated autoloads from textmodes/nroff-mode.el
(autoload 'nroff-mode "nroff-mode" "\
;;;***
\f
-;;;### (autoloads nil "octave" "progmodes/octave.el" (21202 31159
-;;;;;; 541460 0))
+;;;### (autoloads nil "octave" "progmodes/octave.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from progmodes/octave.el
(autoload 'octave-mode "octave" "\
;;;***
\f
-;;;### (autoloads nil "org-version" "org/org-version.el" (21196 19423
-;;;;;; 102965 0))
+;;;### (autoloads nil "org-version" "org/org-version.el" (21260 56437
+;;;;;; 870858 217000))
;;; Generated autoloads from org/org-version.el
(autoload 'org-release "org-version" "\
\(fn)" nil nil)
-(defvar org-odt-data-dir "/usr/share/emacs/etc/org" "\
-The location of ODT styles.")
-
;;;***
\f
-;;;### (autoloads nil "outline" "outline.el" (21187 63826 213216
+;;;### (autoloads nil "outline" "outline.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from outline.el
(put 'outline-regexp 'safe-local-variable 'stringp)
;;;***
\f
-;;;### (autoloads nil "package" "emacs-lisp/package.el" (21216 7010
-;;;;;; 238506 0))
+;;;### (autoloads nil "package" "emacs-lisp/package.el" (21242 52061
+;;;;;; 270865 616000))
;;; Generated autoloads from emacs-lisp/package.el
(push (purecopy '(package 1 0 1)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "paren" "paren.el" (21187 63826 213216 0))
+;;;### (autoloads nil "paren" "paren.el" (21240 46395 727291 0))
;;; Generated autoloads from paren.el
(defvar show-paren-mode nil "\
;;;***
\f
-;;;### (autoloads nil "perl-mode" "progmodes/perl-mode.el" (21187
-;;;;;; 63826 213216 0))
+;;;### (autoloads nil "perl-mode" "progmodes/perl-mode.el" (21240
+;;;;;; 46395 727291 0))
;;; Generated autoloads from progmodes/perl-mode.el
(put 'perl-indent-level 'safe-local-variable 'integerp)
(put 'perl-continued-statement-offset 'safe-local-variable 'integerp)
;;;***
\f
-;;;### (autoloads nil "picture" "textmodes/picture.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "picture" "textmodes/picture.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from textmodes/picture.el
(autoload 'picture-mode "picture" "\
;;;***
\f
-;;;### (autoloads nil "pop3" "gnus/pop3.el" (21193 16180 875828 0))
+;;;### (autoloads nil "pop3" "gnus/pop3.el" (21240 46395 727291 0))
;;; Generated autoloads from gnus/pop3.el
(autoload 'pop3-movemail "pop3" "\
;;;***
\f
-;;;### (autoloads nil "python" "progmodes/python.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "python" "progmodes/python.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from progmodes/python.el
(push (purecopy '(python 0 24 2)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "regexp-opt" "emacs-lisp/regexp-opt.el" (21187
-;;;;;; 63826 213216 0))
+;;;### (autoloads nil "regexp-opt" "emacs-lisp/regexp-opt.el" (21240
+;;;;;; 46395 727291 0))
;;; Generated autoloads from emacs-lisp/regexp-opt.el
(autoload 'regexp-opt "regexp-opt" "\
;;;***
\f
-;;;### (autoloads nil "remember" "textmodes/remember.el" (21222 16439
-;;;;;; 978802 0))
+;;;### (autoloads nil "remember" "textmodes/remember.el" (21252 37559
+;;;;;; 125878 0))
;;; Generated autoloads from textmodes/remember.el
(push (purecopy '(remember 2 0)) package--builtin-versions)
\(fn)" nil nil)
(autoload 'remember-notes "remember" "\
-Creates notes buffer and switches to it if called interactively.
-
-If a notes buffer created by a previous invocation of this
-function already exist, it will be returned. Otherwise a new
-buffer will be created whose content will be read from file
-pointed by `remember-data-file'. If a buffer visiting this file
-already exist, that buffer will be used instead of creating a new
-one (see `find-file-noselect' function for more details).
-
-Name of the created buffer is taken from `remember-notes-buffer-name'
-variable and if a buffer with that name already exist (but was not
-created by this function), it will be first killed.
-\\<remember-notes-mode-map>
-`remember-notes-mode' is active in the notes buffer which by default
-contains only one \\[save-and-bury-buffer] binding which saves and
-buries the buffer.
-
-Function returns notes buffer. When called interactively,
-switches to it as well.
-
-Notes buffer is meant for keeping random notes which you'd like to
-preserve across Emacs restarts. The notes will be stored in the
-`remember-data-file'.
+Return the notes buffer, creating it if needed, and maybe switch to it.
+This buffer is for notes that you want to preserve across Emacs sessions.
+The notes are saved in `remember-data-file'.
+
+If a buffer is already visiting that file, just return it.
+
+Otherwise, create the buffer, and rename it to `remember-notes-buffer-name',
+unless a buffer of that name already exists. Set the major mode according
+to `remember-notes-initial-major-mode', and enable `remember-notes-mode'
+minor mode.
+
+Use \\<remember-notes-mode-map>\\[remember-notes-save-and-bury-buffer] to save and bury the notes buffer.
+
+Interactively, or if SWITCH-TO is non-nil, switch to the buffer.
+Return the buffer.
+
+Set `initial-buffer-choice' to `remember-notes' to visit your notes buffer
+when Emacs starts. Set `remember-notes-buffer-name' to \"*scratch*\"
+to turn the *scratch* buffer into your notes buffer.
\(fn &optional SWITCH-TO)" t nil)
;;;***
\f
-;;;### (autoloads nil "repeat" "repeat.el" (21187 63826 213216 0))
+;;;### (autoloads nil "repeat" "repeat.el" (21239 25528 651427 0))
;;; Generated autoloads from repeat.el
(push (purecopy '(repeat 0 51)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "reporter" "mail/reporter.el" (21227 3131 80151
-;;;;;; 382000))
+;;;### (autoloads nil "reporter" "mail/reporter.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from mail/reporter.el
(autoload 'reporter-submit-bug-report "reporter" "\
;;;***
\f
-;;;### (autoloads nil "reposition" "reposition.el" (21187 63826 213216
+;;;### (autoloads nil "reposition" "reposition.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from reposition.el
;;;***
\f
-;;;### (autoloads nil "ring" "emacs-lisp/ring.el" (21187 63826 213216
+;;;### (autoloads nil "ring" "emacs-lisp/ring.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from emacs-lisp/ring.el
;;;***
\f
-;;;### (autoloads nil "rmail" "mail/rmail.el" (21215 8902 333002
-;;;;;; 878000))
+;;;### (autoloads nil "rmail" "mail/rmail.el" (21245 3427 941571
+;;;;;; 853000))
;;; Generated autoloads from mail/rmail.el
(defvar rmail-file-name (purecopy "~/RMAIL") "\
;;;***
\f
-;;;### (autoloads nil "rmailout" "mail/rmailout.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "rmailout" "mail/rmailout.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from mail/rmailout.el
(put 'rmail-output-file-alist 'risky-local-variable t)
;;;***
\f
-;;;### (autoloads nil "rot13" "rot13.el" (21187 63826 213216 0))
+;;;### (autoloads nil "rot13" "rot13.el" (21240 46395 727291 0))
;;; Generated autoloads from rot13.el
(autoload 'rot13 "rot13" "\
;;;***
\f
-;;;### (autoloads nil "ruby-mode" "progmodes/ruby-mode.el" (21228
-;;;;;; 55223 319602 0))
+;;;### (autoloads nil "ruby-mode" "progmodes/ruby-mode.el" (21257
+;;;;;; 55477 969423 0))
;;; Generated autoloads from progmodes/ruby-mode.el
(push (purecopy '(ruby-mode 1 2)) package--builtin-versions)
\(fn)" t nil)
-(add-to-list 'auto-mode-alist (cons (purecopy (concat "\\(?:\\." "rb\\|ru\\|rake\\|thor" "\\|jbuilder\\|gemspec\\|podspec" "\\|/" "\\(?:Gem\\|Rake\\|Cap\\|Thor" "Vagrant\\|Guard\\|Pod\\)file" "\\)\\'")) 'ruby-mode))
+(add-to-list 'auto-mode-alist (cons (purecopy (concat "\\(?:\\." "rb\\|ru\\|rake\\|thor" "\\|jbuilder\\|gemspec\\|podspec" "\\|/" "\\(?:Gem\\|Rake\\|Cap\\|Thor" "\\|Vagrant\\|Guard\\|Pod\\)file" "\\)\\'")) 'ruby-mode))
(dolist (name (list "ruby" "rbx" "jruby" "ruby1.9" "ruby1.8")) (add-to-list 'interpreter-mode-alist (cons (purecopy name) 'ruby-mode)))
;;;***
\f
-;;;### (autoloads nil "rx" "emacs-lisp/rx.el" (21193 16180 875828
+;;;### (autoloads nil "rx" "emacs-lisp/rx.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from emacs-lisp/rx.el
;;;***
\f
-;;;### (autoloads nil "savehist" "savehist.el" (21187 63826 213216
+;;;### (autoloads nil "savehist" "savehist.el" (21255 13756 851229
;;;;;; 0))
;;; Generated autoloads from savehist.el
(push (purecopy '(savehist 24)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "scroll-lock" "scroll-lock.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "scroll-lock" "scroll-lock.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from scroll-lock.el
(autoload 'scroll-lock-mode "scroll-lock" "\
;;;***
\f
-;;;### (autoloads nil "secrets" "net/secrets.el" (21187 63826 213216
+;;;### (autoloads nil "secrets" "net/secrets.el" (21256 34613 967717
;;;;;; 0))
;;; Generated autoloads from net/secrets.el
(when (featurep 'dbusbind)
;;;***
\f
-;;;### (autoloads nil "sendmail" "mail/sendmail.el" (21194 37048
-;;;;;; 599945 0))
+;;;### (autoloads nil "sendmail" "mail/sendmail.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from mail/sendmail.el
(defvar mail-from-style 'default "\
;;;***
\f
-;;;### (autoloads nil "server" "server.el" (21187 63826 213216 0))
+;;;### (autoloads nil "server" "server.el" (21240 46395 727291 0))
;;; Generated autoloads from server.el
(put 'server-host 'risky-local-variable t)
;;;***
\f
-;;;### (autoloads nil "sgml-mode" "textmodes/sgml-mode.el" (21187
-;;;;;; 63826 213216 0))
+;;;### (autoloads nil "sgml-mode" "textmodes/sgml-mode.el" (21240
+;;;;;; 46395 727291 0))
;;; Generated autoloads from textmodes/sgml-mode.el
(autoload 'sgml-mode "sgml-mode" "\
;;;***
\f
-;;;### (autoloads nil "sh-script" "progmodes/sh-script.el" (21215
-;;;;;; 8729 374161 0))
+;;;### (autoloads nil "sh-script" "progmodes/sh-script.el" (21240
+;;;;;; 46395 727291 0))
;;; Generated autoloads from progmodes/sh-script.el
(push (purecopy '(sh-script 2 0 6)) package--builtin-versions)
(put 'sh-shell 'safe-local-variable 'symbolp)
;;;***
\f
-;;;### (autoloads nil "shell" "shell.el" (21187 63826 213216 0))
+;;;### (autoloads nil "shell" "shell.el" (21240 46395 727291 0))
;;; Generated autoloads from shell.el
(defvar shell-dumb-shell-regexp (purecopy "cmd\\(proxy\\)?\\.exe") "\
;;;***
\f
-;;;### (autoloads nil "shr" "net/shr.el" (21228 55223 319602 0))
+;;;### (autoloads nil "shr" "net/shr.el" (21264 60073 653706 828000))
;;; Generated autoloads from net/shr.el
(autoload 'shr-render-region "shr" "\
;;;***
\f
-;;;### (autoloads nil "skeleton" "skeleton.el" (21187 63826 213216
+;;;### (autoloads nil "skeleton" "skeleton.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from skeleton.el
;;;***
\f
-;;;### (autoloads nil "sort" "sort.el" (21227 34360 69622 0))
+;;;### (autoloads nil "sort" "sort.el" (21240 46395 727291 0))
;;; Generated autoloads from sort.el
(put 'sort-fold-case 'safe-local-variable 'booleanp)
;;;***
\f
-;;;### (autoloads nil "spook" "play/spook.el" (21187 63826 213216
+;;;### (autoloads nil "spook" "play/spook.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from play/spook.el
;;;***
\f
-;;;### (autoloads nil "sql" "progmodes/sql.el" (21190 39993 744837
-;;;;;; 0))
+;;;### (autoloads nil "sql" "progmodes/sql.el" (21263 60346 30834
+;;;;;; 928000))
;;; Generated autoloads from progmodes/sql.el
-(push (purecopy '(sql 3 3)) package--builtin-versions)
+(push (purecopy '(sql 3 4)) package--builtin-versions)
(autoload 'sql-add-product-keywords "sql" "\
Add highlighting KEYWORDS for SQL PRODUCT.
;;;***
\f
-;;;### (autoloads nil "strokes" "strokes.el" (21222 16439 978802
+;;;### (autoloads nil "strokes" "strokes.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from strokes.el
;;;***
\f
-;;;### (autoloads nil "studly" "play/studly.el" (20355 10021 546955
+;;;### (autoloads nil "studly" "play/studly.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from play/studly.el
;;;***
\f
-;;;### (autoloads nil "supercite" "mail/supercite.el" (21215 9357
-;;;;;; 840145 208000))
+;;;### (autoloads nil "supercite" "mail/supercite.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from mail/supercite.el
(autoload 'sc-cite-original "supercite" "\
;;;***
\f
-;;;### (autoloads nil "t-mouse" "t-mouse.el" (21187 63826 213216
+;;;### (autoloads nil "t-mouse" "t-mouse.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from t-mouse.el
;;;***
\f
-;;;### (autoloads nil "tabify" "tabify.el" (21187 63826 213216 0))
+;;;### (autoloads nil "tabify" "tabify.el" (21240 46395 727291 0))
;;; Generated autoloads from tabify.el
(autoload 'untabify "tabify" "\
;;;***
\f
-;;;### (autoloads nil "talk" "talk.el" (21187 63826 213216 0))
+;;;### (autoloads nil "talk" "talk.el" (21240 46395 727291 0))
;;; Generated autoloads from talk.el
(autoload 'talk-connect "talk" "\
;;;***
\f
-;;;### (autoloads nil "tar-mode" "tar-mode.el" (21187 63826 213216
+;;;### (autoloads nil "tar-mode" "tar-mode.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from tar-mode.el
;;;***
\f
-;;;### (autoloads nil "tcl" "progmodes/tcl.el" (21187 63826 213216
+;;;### (autoloads nil "tcl" "progmodes/tcl.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from progmodes/tcl.el
;;;***
\f
-;;;### (autoloads nil "telnet" "net/telnet.el" (21187 63826 213216
+;;;### (autoloads nil "telnet" "net/telnet.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from net/telnet.el
;;;***
\f
-;;;### (autoloads nil "tex-mode" "textmodes/tex-mode.el" (21199 54969
-;;;;;; 178188 0))
+;;;### (autoloads nil "tex-mode" "textmodes/tex-mode.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from textmodes/tex-mode.el
(defvar tex-shell-file-name nil "\
;;;***
\f
-;;;### (autoloads nil "texinfo" "textmodes/texinfo.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "texinfo" "textmodes/texinfo.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from textmodes/texinfo.el
(defvar texinfo-open-quote (purecopy "``") "\
;;;***
\f
-;;;### (autoloads nil "thingatpt" "thingatpt.el" (21187 63826 213216
+;;;### (autoloads nil "thingatpt" "thingatpt.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from thingatpt.el
;;;***
\f
-;;;### (autoloads nil "thumbs" "thumbs.el" (21187 63826 213216 0))
+;;;### (autoloads nil "thumbs" "thumbs.el" (21240 46395 727291 0))
;;; Generated autoloads from thumbs.el
(autoload 'thumbs-find-thumb "thumbs" "\
;;;***
\f
-;;;### (autoloads nil "time" "time.el" (21187 63826 213216 0))
+;;;### (autoloads nil "time" "time.el" (21240 46395 727291 0))
;;; Generated autoloads from time.el
(defvar display-time-day-and-date nil "\
;;;***
\f
-;;;### (autoloads nil "tmm" "tmm.el" (21187 63826 213216 0))
+;;;### (autoloads nil "tmm" "tmm.el" (21240 46395 727291 0))
;;; Generated autoloads from tmm.el
(define-key global-map "\M-`" 'tmm-menubar)
(define-key global-map [menu-bar mouse-1] 'tmm-menubar-mouse)
;;;***
\f
-;;;### (autoloads nil "tq" "emacs-lisp/tq.el" (21187 63826 213216
+;;;### (autoloads nil "tq" "emacs-lisp/tq.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from emacs-lisp/tq.el
;;;***
\f
-;;;### (autoloads nil "trace" "emacs-lisp/trace.el" (21227 34360
-;;;;;; 69622 0))
+;;;### (autoloads nil "trace" "emacs-lisp/trace.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from emacs-lisp/trace.el
(defvar trace-buffer "*trace-output*" "\
;;;***
\f
-;;;### (autoloads nil "tramp" "net/tramp.el" (21209 55410 356925
+;;;### (autoloads nil "tramp" "net/tramp.el" (21263 60369 592555
;;;;;; 0))
;;; Generated autoloads from net/tramp.el
;;;***
\f
-;;;### (autoloads nil "tutorial" "tutorial.el" (21187 63826 213216
+;;;### (autoloads nil "tutorial" "tutorial.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from tutorial.el
;;;***
\f
-;;;### (autoloads nil "underline" "textmodes/underline.el" (21187
-;;;;;; 63826 213216 0))
+;;;### (autoloads nil "underline" "textmodes/underline.el" (21240
+;;;;;; 46395 727291 0))
;;; Generated autoloads from textmodes/underline.el
(autoload 'underline-region "underline" "\
;;;***
\f
-;;;### (autoloads nil "unrmail" "mail/unrmail.el" (21199 54969 178188
+;;;### (autoloads nil "unrmail" "mail/unrmail.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from mail/unrmail.el
;;;***
\f
-;;;### (autoloads nil "userlock" "userlock.el" (21187 63826 213216
-;;;;;; 0))
+;;;### (autoloads nil "userlock" "userlock.el" (21260 57764 872288
+;;;;;; 374000))
;;; Generated autoloads from userlock.el
(autoload 'ask-user-about-lock "userlock" "\
;;;***
\f
-;;;### (autoloads nil "vc-annotate" "vc/vc-annotate.el" (21187 63826
-;;;;;; 213216 0))
+;;;### (autoloads nil "vc-annotate" "vc/vc-annotate.el" (21240 46395
+;;;;;; 727291 0))
;;; Generated autoloads from vc/vc-annotate.el
(autoload 'vc-annotate "vc-annotate" "\
;;;***
\f
-;;;### (autoloads nil "vc-bzr" "vc/vc-bzr.el" (21187 63826 213216
+;;;### (autoloads nil "vc-bzr" "vc/vc-bzr.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from vc/vc-bzr.el
;;;***
\f
-;;;### (autoloads nil "vc-hg" "vc/vc-hg.el" (21187 63826 213216 0))
+;;;### (autoloads nil "vc-hg" "vc/vc-hg.el" (21240 46395 727291 0))
;;; Generated autoloads from vc/vc-hg.el
(defun vc-hg-registered (file)
"Return non-nil if FILE is registered with hg."
;;;***
\f
-;;;### (autoloads nil "warnings" "emacs-lisp/warnings.el" (21187
-;;;;;; 63826 213216 0))
+;;;### (autoloads nil "warnings" "emacs-lisp/warnings.el" (21240
+;;;;;; 46395 727291 0))
;;; Generated autoloads from emacs-lisp/warnings.el
(defvar warning-prefix-function nil "\
(autoload 'lwarn "warnings" "\
Display a warning message made from (format MESSAGE ARGS...).
+\\<special-mode-map>
Aside from generating the message with `format',
this is equivalent to `display-warning'.
;;;***
\f
-;;;### (autoloads nil "whitespace" "whitespace.el" (21222 47372 997188
+;;;### (autoloads nil "whitespace" "whitespace.el" (21255 45558 780901
;;;;;; 0))
;;; Generated autoloads from whitespace.el
(push (purecopy '(whitespace 13 2 2)) package--builtin-versions)
;;;***
\f
-;;;### (autoloads nil "wid-edit" "wid-edit.el" (21197 43194 200483
+;;;### (autoloads nil "wid-edit" "wid-edit.el" (21240 46395 727291
;;;;;; 0))
;;; Generated autoloads from wid-edit.el
;;;***
\f
-;;;### (autoloads nil "woman" "woman.el" (21220 61111 156047 0))
+;;;### (autoloads nil "woman" "woman.el" (21240 46395 727291 0))
;;; Generated autoloads from woman.el
(push (purecopy '(woman 0 551)) package--builtin-versions)
;;;;;; "vc/ediff-ptch.el" "vc/ediff-vers.el" "vc/ediff-wind.el"
;;;;;; "vc/pcvs-info.el" "vc/pcvs-parse.el" "vc/pcvs-util.el" "vc/vc-dav.el"
;;;;;; "vcursor.el" "vt-control.el" "vt100-led.el" "w32-common-fns.el"
-;;;;;; "w32-fns.el" "w32-vars.el" "x-dnd.el") (21228 55244 661375
-;;;;;; 865000))
+;;;;;; "w32-fns.el" "w32-vars.el" "x-dnd.el") (21265 49730 375624
+;;;;;; 657000))
;;;***
\f
-2014-02-24 Bill Wohler <wohler@newt.com>
+2014-03-16 Bill Wohler <wohler@newt.com>
* mh-folder.el (mh-regenerate-headers): Fix scan: bad message list
`unseen' error (closes SF #471).
+ * mh-e.el (mh-version): Add +bzr to version.
+
+2014-03-06 Glenn Morris <rgm@gnu.org>
+
+ * mh-compat.el (mh-display-completion-list):
+ Replace use of obsolete argument of display-completion-list.
2013-11-05 Stefan Monnier <monnier@iro.umontreal.ca>
* mh-comp.el (mh-regexp-in-field-p): Minor simplification.
-2013-03-03 Bill Wohler <wohler@newt.com>
-
- * mh-e.el (mh-version): Add +bzr to version.
-
2013-03-02 Bill Wohler <wohler@newt.com>
Release MH-E version 8.5.
2011-07-09 Bill Wohler <wohler@newt.com>
- * mh-speed.el (mh-speed-toggle,mh-speed-view): Document "ignored"
+ * mh-speed.el (mh-speed-toggle, mh-speed-view): Document "ignored"
arguments to keep checkdoc happy.
* mh-search.el (mh-flists-execute): Ditto.
2009-11-05 Stefan Monnier <monnier@iro.umontreal.ca>
* mh-thread.el (mh-thread-set-tables):
- * mh-speed.el (mh-folder-speedbar-menu-items, mh-speed-stealth-update):
- (mh-speed-extract-folder-name, mh-speed-parse-flists-output):
+ * mh-speed.el (mh-folder-speedbar-menu-items, mh-speed-stealth-update)
+ (mh-speed-extract-folder-name, mh-speed-parse-flists-output)
(mh-speed-invalidate-map, mh-speed-add-folder):
* mh-show.el (mh-invalidate-show-buffer, mh-show-sequence-menu):
* mh-seq.el (mh-list-sequences):
* mh-e.el (mh-exec-cmd, mh-exec-cmd-error, mh-exec-cmd-daemon)
(mh-handle-process-error, mh-variant-info):
* mh-comp.el (mh-forward):
- * mh-alias.el (mh-alias-local-users, mh-alias-which-file-has-alias):
+ * mh-alias.el (mh-alias-local-users, mh-alias-which-file-has-alias)
(mh-alias-add-alias-to-file): Use with-current-buffer (closes SF
#1903293).
* mh-acros.el (mh-do-in-gnu-emacs, mh-do-in-xemacs)
(with-mh-folder-updating, mh-in-show-buffer)
- (mh-iterate-on-messages-in-region, mh-iterate-on-range):
+ (mh-iterate-on-messages-in-region, mh-iterate-on-range)
(mh-do-at-event-location): Add debug decls.
(mh-seq-msgs): Use defsubst.
(defmacro mh-display-completion-list (completions &optional common-substring)
"Display the list of COMPLETIONS.
See documentation for `display-completion-list' for a description of the
-arguments COMPLETIONS and perhaps COMMON-SUBSTRING.
-This macro is used by Emacs versions that lack a COMMON-SUBSTRING
-argument, introduced in Emacs 22."
- (if (< emacs-major-version 22)
- `(display-completion-list ,completions)
- `(display-completion-list ,completions ,common-substring)))
+arguments COMPLETIONS.
+The optional argument COMMON-SUBSTRING, if non-nil, should be a string
+specifying a common substring for adding the faces
+`completions-first-difference' and `completions-common-part' to
+the completions."
+ (cond ((< emacs-major-version 22) `(display-completion-list ,completions))
+ ((fboundp 'completion-hilit-commonality) ; Emacs 23.1 and later
+ `(display-completion-list
+ (completion-hilit-commonality ,completions
+ ,(length common-substring) nil)))
+ (t ; Emacs 22
+ `(display-completion-list ,completions ,common-substring))))
(defmacro mh-face-foreground (face &optional frame inherit)
"Return the foreground color name of FACE, or nil if unspecified.
The result of the `completion-table-dynamic' form is a function
that can be used as the COLLECTION argument to `try-completion' and
-`all-completions'. See Info node `(elisp)Programmed Completion'."
+`all-completions'. See Info node `(elisp)Programmed Completion'.
+
+See also the related function `completion-table-with-cache'."
(lambda (string pred action)
(if (or (eq (car-safe action) 'boundaries) (eq action 'metadata))
;; `fun' is not supposed to return another function but a plain old
(complete-with-action action (funcall fun string) string pred)))))
(defun completion-table-with-cache (fun &optional ignore-case)
- "Create dynamic completion table from FUN, with cache.
-This wraps `completion-table-dynamic', but saves the last
+ "Create dynamic completion table from function FUN, with cache.
+This is a wrapper for `completion-table-dynamic' that saves the last
argument-result pair from FUN, so that several lookups with the
same argument (or with an argument that starts with the first one)
-only need to call FUN once. Most useful when FUN performs a relatively
-slow operation, such as calling an external process (see Bug#11906).
+only need to call FUN once. This can be useful when FUN performs a
+relatively slow operation, such as calling an external process.
+
When IGNORE-CASE is non-nil, FUN is expected to be case-insensitive."
+ ;; See eg bug#11906.
(let* (last-arg last-result
(new-fun
(lambda (arg)
(setq table (pop new))
(setq point (pop new))
(pop new))))
- (result
- (completion--some (lambda (style)
- (funcall (nth n (assq style
- completion-styles-alist))
- string table pred point))
- (completion--styles metadata))))
+ (result
+ (completion--some (lambda (style)
+ (funcall (nth n (assq style
+ completion-styles-alist))
+ string table pred point))
+ (completion--styles metadata))))
(if requote
(funcall requote result n)
result)))
(concat before ext after)
table predicate (1+ point) md))
exts))))
- (when (and (= 1 (length comps) (consp (car comps))))
+ (when (and (null (cdr comps)) (consp (car comps)))
(setq comp (car comps)))))
;; Completing a single word is actually more difficult than completing
(defface completions-first-difference
'((t (:inherit bold)))
- "Face added on the first uncommon character in completions in *Completions* buffer.")
+ "Face for the first uncommon character in completions.
+See also the face `completions-common-part'.")
(defface completions-common-part '((t nil))
- "Face added on the common prefix substring in completions in *Completions* buffer.
-The idea of `completions-common-part' is that you can use it to
-make the common parts less visible than normal, so that the rest
-of the differing parts is, by contrast, slightly highlighted.")
-
-(defun completion-hilit-commonality (completions prefix-len base-size)
+ "Face for the common prefix substring in completions.
+The idea of this face is that you can use it to make the common parts
+less visible than normal, so that the differing parts are emphasized
+by contrast.
+See also the face `completions-first-difference'.")
+
+(defun completion-hilit-commonality (completions prefix-len &optional base-size)
+ "Apply font-lock highlighting to a list of completions, COMPLETIONS.
+PREFIX-LEN is an integer. BASE-SIZE is an integer or nil (meaning zero).
+
+This adds the face `completions-common-part' to the first
+\(PREFIX-LEN - BASE-SIZE) characters of each completion, and the face
+`completions-first-difference' to the first character after that.
+
+It returns a list with font-lock properties applied to each element,
+and with BASE-SIZE appended as the last element."
(when completions
(let ((com-str-len (- prefix-len (or base-size 0))))
(nconc
;; Declare used subroutines and variables.
(declare-function dbus-message-internal "dbusbind.c")
-(declare-function dbus-init-bus-1 "dbusbind.c")
+(declare-function dbus--init-bus "dbusbind.c")
(defvar dbus-message-type-invalid)
(defvar dbus-message-type-method-call)
(defvar dbus-message-type-method-return)
(defconst dbus-path-dbus "/org/freedesktop/DBus"
"The object path used to talk to the bus itself.")
+(defconst dbus-path-local (concat dbus-path-dbus "/Local")
+ "The object path used in local/in-process-generated messages.")
+
;; Default D-Bus interfaces.
(defconst dbus-interface-dbus "org.freedesktop.DBus"
;; </signal>
;; </interface>
+(defconst dbus-interface-local (concat dbus-interface-dbus ".Local")
+ "An interface whose methods can only be invoked by the local implementation.")
+
+;; <interface name="org.freedesktop.DBus.Local">
+;; <signal name="Disconnected">
+;; <arg name="object_path" type="o"/>
+;; </signal>
+;; </interface>
+
;; Emacs defaults.
(defconst dbus-service-emacs "org.gnu.Emacs"
"The well known service name of Emacs.")
A key in this hash table is a list (:serial BUS SERIAL), like in
`dbus-registered-objects-table'. BUS is either a Lisp symbol,
`:system' or `:session', or a string denoting the bus address.
-SERIAL is the serial number of the reply message.")
+SERIAL is the serial number of the reply message.
+
+The value of an entry is a cons (STATE . RESULT). STATE can be
+either `:pending' (we are still waiting for the result),
+`:complete' (the result is available) or `:error' (the reply
+message was an error message).")
(defun dbus-call-method-handler (&rest args)
"Handler for reply messages of asynchronous D-Bus message calls.
It calls the function stored in `dbus-registered-objects-table'.
The result will be made available in `dbus-return-values-table'."
- (let* ((key (list :serial
- (dbus-event-bus-name last-input-event)
- (dbus-event-serial-number last-input-event)))
+ (let* ((key (list :serial
+ (dbus-event-bus-name last-input-event)
+ (dbus-event-serial-number last-input-event)))
(result (gethash key dbus-return-values-table)))
(when (consp result)
(setcar result :complete)
(defun dbus-notice-synchronous-call-errors (ev er)
"Detect errors resulting from pending synchronous calls."
- (let* ((key (list :serial
- (dbus-event-bus-name ev)
- (dbus-event-serial-number ev)))
+ (let* ((key (list :serial
+ (dbus-event-bus-name ev)
+ (dbus-event-serial-number ev)))
(result (gethash key dbus-return-values-table)))
(when (consp result)
(setcar result :error)
nil
nil
value)
- '(dbus-error "Bus disconnected"))
+ (list 'dbus-error "Bus disconnected" bus))
(push key keys-to-remove)))
dbus-registered-objects-table)
(dolist (key keys-to-remove)
connection used in the same Emacs process, like the one established by
GTK+. It should be used with care for at least the `:system' and
`:session' buses, because other Emacs Lisp packages might already use
-this connection to those buses.
-"
- (dbus-init-bus-1 bus private)
- (dbus-register-signal bus nil
- "/org/freedesktop/DBus/Local"
- "org.freedesktop.DBus.Local"
- "Disconnected"
- #'dbus-handle-bus-disconnect))
+this connection to those buses."
+ (dbus--init-bus bus private)
+ (dbus-register-signal
+ bus nil dbus-path-local dbus-interface-local
+ "Disconnected" #'dbus-handle-bus-disconnect))
\f
;; Initialize `:system' and `:session' buses. This adds their file
(let ((redirect (plist-get status :redirect)))
(when redirect
(setq url redirect)))
- (setq-local eww-next-url nil)
- (setq-local eww-previous-url nil)
- (setq-local eww-up-url nil)
- (setq-local eww-home-url nil)
- (setq-local eww-start-url nil)
- (setq-local eww-contents-url nil)
(let* ((headers (eww-parse-headers))
(content-type
(mail-header-parse-content-type
(remove-overlays)
(erase-buffer))
(unless (eq major-mode 'eww-mode)
- (eww-mode)))
+ (eww-mode))
+ (setq-local eww-next-url nil)
+ (setq-local eww-previous-url nil)
+ (setq-local eww-up-url nil)
+ (setq-local eww-home-url nil)
+ (setq-local eww-start-url nil)
+ (setq-local eww-contents-url nil))
(defun eww-view-source ()
(interactive)
(suppress-keymap map)
(define-key map "q" 'quit-window)
(define-key map "g" 'eww-reload)
- (define-key map [tab] 'shr-next-link)
- (define-key map [backtab] 'shr-previous-link)
+ (define-key map [?\t] 'shr-next-link)
+ (define-key map [?\M-\t] 'shr-previous-link)
(define-key map [delete] 'scroll-down-command)
(define-key map [?\S-\ ] 'scroll-down-command)
(define-key map "\177" 'scroll-down-command)
(define-key map [(control a)] 'eww-beginning-of-text)
(define-key map [(control c) (control c)] 'eww-submit)
(define-key map [(control e)] 'eww-end-of-text)
- (define-key map [tab] 'shr-next-link)
- (define-key map [backtab] 'shr-previous-link)
+ (define-key map [?\t] 'shr-next-link)
+ (define-key map [?\M-\t] 'shr-previous-link)
map))
(defvar eww-textarea-map
(set-keymap-parent map text-mode-map)
(define-key map "\r" 'forward-line)
(define-key map [(control c) (control c)] 'eww-submit)
- (define-key map [tab] 'shr-next-link)
- (define-key map [backtab] 'shr-previous-link)
+ (define-key map [?\t] 'shr-next-link)
+ (define-key map [?\M-\t] 'shr-previous-link)
map))
(defvar eww-select-map
specify as `newsticker-wget-name'.
URL may also be a function which returns news data. In this case
-`newsticker-retrieval-method' etc. are ignored for this feed.
+`newsticker-retrieval-method' etc. are ignored for this feed.
The START-TIME can be either a string, or nil. If it is a string it
specifies a fixed time at which this feed shall be retrieved for the
:group 'shr
:type 'function)
+(defcustom shr-image-animate t
+ "Non nil means that images that can be animated will be."
+ :version "24.4"
+ :group 'shr
+ :type 'boolean)
+
(defvar shr-content-function nil
"If bound, this should be a function that will return the content.
This is used for cid: URLs, and the function is called with the
(define-key map "a" 'shr-show-alt-text)
(define-key map "i" 'shr-browse-image)
(define-key map "z" 'shr-zoom-image)
- (define-key map [tab] 'shr-next-link)
- (define-key map [backtab] 'shr-previous-link)
+ (define-key map [?\t] 'shr-next-link)
+ (define-key map [?\M-\t] 'shr-previous-link)
(define-key map [follow-link] 'mouse-face)
(define-key map [mouse-2] 'shr-browse-url)
(define-key map "I" 'shr-insert-image)
(insert-sliced-image image (or alt "*") nil 20 1)
(insert-image image (or alt "*")))
(put-text-property start (point) 'image-size size)
- (when (cond ((fboundp 'image-multi-frame-p)
+ (when (and shr-image-animate
+ (cond ((fboundp 'image-multi-frame-p)
;; Only animate multi-frame things that specify a
;; delay; eg animated gifs as opposed to
;; multi-page tiffs. FIXME?
- (cdr (image-multi-frame-p image)))
- ((fboundp 'image-animated-p)
- (image-animated-p image)))
- (image-animate image nil 60)))
+ (cdr (image-multi-frame-p image)))
+ ((fboundp 'image-animated-p)
+ (image-animated-p image))))
+ (image-animate image nil 60)))
image)
(insert alt)))
;;; Customization support
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defgroup socks nil
- "SOCKS Support"
+ "SOCKS support."
:version "22.2"
:prefix "socks-"
:group 'processes)
;; could get a wrapper hook, or defer to open-network-stream-function.
(defvar socks-override-functions nil
- "Whether to overwrite the open-network-stream function with the SOCKSified
+ "Whether to overwrite the `open-network-stream' function with the SOCKSified
version.")
(require 'network-stream)
socks-tcp-services))))))
(defun socks-find-services-entry (service &optional udp)
- "Return the port # associated with SERVICE"
+ "Return the port # associated with SERVICE."
(if (= (hash-table-count socks-tcp-services) 0)
(socks-parse-services))
(gethash (downcase service)
"List of strings containing commands to start TLS stream to a host.
Each entry in the list is tried until a connection is successful.
%h is replaced with server hostname, %p with port to connect to.
-The program should read input on stdin and write output to
-stdout.
+The program should read input on stdin and write output to stdout.
See `tls-checktrust' on how to check trusted root certs.
;; Pacify byte-compiler.
(defvar directory-sep-char)
-(defvar dired-move-to-filename-regexp)
(defcustom tramp-adb-program "adb"
"Name of the Android Debug Bridge program."
(find-backup-file-name . tramp-handle-find-backup-file-name)
;; `find-file-noselect' performed by default handler.
;; `get-file-buffer' performed by default handler.
- (insert-directory . tramp-adb-handle-insert-directory)
+ (insert-directory . tramp-handle-insert-directory)
(insert-file-contents . tramp-handle-insert-file-contents)
(load . tramp-handle-load)
(make-auto-save-file-name . tramp-handle-make-auto-save-file-name)
result)
(tramp-compat-set-process-query-on-exit-flag p nil)
(while (eq 'run (process-status p))
- (sleep-for 0.1))
+ (accept-process-output p 0.1))
+ (accept-process-output p 0.1)
(goto-char (point-min))
(while (search-forward-regexp "^\\(\\S-+\\)[[:space:]]+device$" nil t)
(add-to-list 'result (list nil (match-string 1))))
;; code could be shared?
(defun tramp-adb-handle-file-truename (filename)
"Like `file-truename' for Tramp files."
- (with-parsed-tramp-file-name (expand-file-name filename) nil
- (with-tramp-file-property v localname "file-truename"
- (let ((result nil)) ; result steps in reverse order
- (tramp-message v 4 "Finding true name for `%s'" filename)
- (let* ((directory-sep-char ?/)
- (steps (tramp-compat-split-string localname "/"))
- (localnamedir (tramp-run-real-handler
- 'file-name-as-directory (list localname)))
- (is-dir (string= localname localnamedir))
- (thisstep nil)
- (numchase 0)
- ;; Don't make the following value larger than
- ;; necessary. People expect an error message in a
- ;; timely fashion when something is wrong; otherwise
- ;; they might think that Emacs is hung. Of course,
- ;; correctness has to come first.
- (numchase-limit 20)
- symlink-target)
- (while (and steps (< numchase numchase-limit))
- (setq thisstep (pop steps))
- (tramp-message
- v 5 "Check %s"
- (mapconcat 'identity
- (append '("") (reverse result) (list thisstep))
- "/"))
- (setq symlink-target
- (nth 0 (file-attributes
- (tramp-make-tramp-file-name
- method user host
- (mapconcat 'identity
- (append '("")
- (reverse result)
- (list thisstep))
- "/")))))
- (cond ((string= "." thisstep)
- (tramp-message v 5 "Ignoring step `.'"))
- ((string= ".." thisstep)
- (tramp-message v 5 "Processing step `..'")
- (pop result))
- ((stringp symlink-target)
- ;; It's a symlink, follow it.
- (tramp-message v 5 "Follow symlink to %s" symlink-target)
- (setq numchase (1+ numchase))
- (when (file-name-absolute-p symlink-target)
- (setq result nil))
- ;; If the symlink was absolute, we'll get a string
- ;; like "/user@host:/some/target"; extract the
- ;; "/some/target" part from it.
- (when (tramp-tramp-file-p symlink-target)
- (unless (tramp-equal-remote filename symlink-target)
- (tramp-error
- v 'file-error
- "Symlink target `%s' on wrong host" symlink-target))
- (setq symlink-target localname))
- (setq steps
- (append (tramp-compat-split-string
- symlink-target "/")
- steps)))
- (t
- ;; It's a file.
- (setq result (cons thisstep result)))))
- (when (>= numchase numchase-limit)
- (tramp-error
- v 'file-error
- "Maximum number (%d) of symlinks exceeded" numchase-limit))
- (setq result (reverse result))
- ;; Combine list to form string.
- (setq result
- (if result
- (mapconcat 'identity (cons "" result) "/")
- "/"))
- (when (and is-dir (or (string= "" result)
- (not (string= (substring result -1) "/"))))
- (setq result (concat result "/"))))
-
- (tramp-message v 4 "True name of `%s' is `%s'" filename result)
- (tramp-make-tramp-file-name method user host result)))))
+ (format
+ "%s%s"
+ (with-parsed-tramp-file-name (expand-file-name filename) nil
+ (tramp-make-tramp-file-name
+ method user host
+ (with-tramp-file-property v localname "file-truename"
+ (let ((result nil)) ; result steps in reverse order
+ (tramp-message v 4 "Finding true name for `%s'" filename)
+ (let* ((directory-sep-char ?/)
+ (steps (tramp-compat-split-string localname "/"))
+ (localnamedir (tramp-run-real-handler
+ 'file-name-as-directory (list localname)))
+ (is-dir (string= localname localnamedir))
+ (thisstep nil)
+ (numchase 0)
+ ;; Don't make the following value larger than
+ ;; necessary. People expect an error message in a
+ ;; timely fashion when something is wrong; otherwise
+ ;; they might think that Emacs is hung. Of course,
+ ;; correctness has to come first.
+ (numchase-limit 20)
+ symlink-target)
+ (while (and steps (< numchase numchase-limit))
+ (setq thisstep (pop steps))
+ (tramp-message
+ v 5 "Check %s"
+ (mapconcat 'identity
+ (append '("") (reverse result) (list thisstep))
+ "/"))
+ (setq symlink-target
+ (nth 0 (file-attributes
+ (tramp-make-tramp-file-name
+ method user host
+ (mapconcat 'identity
+ (append '("")
+ (reverse result)
+ (list thisstep))
+ "/")))))
+ (cond ((string= "." thisstep)
+ (tramp-message v 5 "Ignoring step `.'"))
+ ((string= ".." thisstep)
+ (tramp-message v 5 "Processing step `..'")
+ (pop result))
+ ((stringp symlink-target)
+ ;; It's a symlink, follow it.
+ (tramp-message v 5 "Follow symlink to %s" symlink-target)
+ (setq numchase (1+ numchase))
+ (when (file-name-absolute-p symlink-target)
+ (setq result nil))
+ ;; If the symlink was absolute, we'll get a string
+ ;; like "/user@host:/some/target"; extract the
+ ;; "/some/target" part from it.
+ (when (tramp-tramp-file-p symlink-target)
+ (unless (tramp-equal-remote filename symlink-target)
+ (tramp-error
+ v 'file-error
+ "Symlink target `%s' on wrong host" symlink-target))
+ (setq symlink-target localname))
+ (setq steps
+ (append (tramp-compat-split-string
+ symlink-target "/")
+ steps)))
+ (t
+ ;; It's a file.
+ (setq result (cons thisstep result)))))
+ (when (>= numchase numchase-limit)
+ (tramp-error
+ v 'file-error
+ "Maximum number (%d) of symlinks exceeded" numchase-limit))
+ (setq result (reverse result))
+ ;; Combine list to form string.
+ (setq result
+ (if result
+ (mapconcat 'identity (cons "" result) "/")
+ "/"))
+ (when (and is-dir (or (string= "" result)
+ (not (string= (substring result -1) "/"))))
+ (setq result (concat result "/"))))
+
+ (tramp-message v 4 "True name of `%s' is `%s'" localname result)
+ result))))
+
+ ;; Preserve trailing "/".
+ (if (string-equal (file-name-nondirectory filename) "") "/" "")))
(defun tramp-adb-handle-file-attributes (filename &optional id-format)
"Like `file-attributes' for Tramp files."
(unless id-format (setq id-format 'integer))
- (ignore-errors
- (with-parsed-tramp-file-name filename nil
- (with-tramp-file-property
- v localname (format "file-attributes-%s" id-format)
- (tramp-adb-barf-unless-okay
- v (format "%s -d -l %s"
- (tramp-adb-get-ls-command v)
- (tramp-shell-quote-argument localname)) "")
- (with-current-buffer (tramp-get-buffer v)
- (tramp-adb-sh-fix-ls-output)
- (cdar (tramp-do-parse-file-attributes-with-ls v id-format)))))))
+ (with-parsed-tramp-file-name filename nil
+ (with-tramp-file-property
+ v localname (format "file-attributes-%s" id-format)
+ (and
+ (tramp-adb-send-command-and-check
+ v (format "%s -d -l %s"
+ (tramp-adb-get-ls-command v)
+ (tramp-shell-quote-argument localname)))
+ (with-current-buffer (tramp-get-buffer v)
+ (tramp-adb-sh-fix-ls-output)
+ (cdar (tramp-do-parse-file-attributes-with-ls v id-format)))))))
(defun tramp-do-parse-file-attributes-with-ls (vec &optional id-format)
"Parse `file-attributes' for Tramp files using the ls(1) command."
(with-tramp-file-property
v localname (format "directory-files-attributes-%s-%s-%s-%s"
full match id-format nosort)
- (tramp-adb-barf-unless-okay
- v (format "%s -a -l %s"
- (tramp-adb-get-ls-command v)
- (tramp-shell-quote-argument localname)) "")
(with-current-buffer (tramp-get-buffer v)
+ (when (tramp-adb-send-command-and-check
+ v (format "%s -a -l %s"
+ (tramp-adb-get-ls-command v)
+ (tramp-shell-quote-argument localname)))
+ ;; We insert also filename/. and filename/.., because "ls" doesn't.
+ (narrow-to-region (point) (point))
+ (tramp-adb-send-command
+ v (format "%s -d -a -l %s %s"
+ (tramp-adb-get-ls-command v)
+ (concat (file-name-as-directory localname) ".")
+ (concat (file-name-as-directory localname) "..")))
+ (widen))
(tramp-adb-sh-fix-ls-output)
(let ((result (tramp-do-parse-file-attributes-with-ls
v (or id-format 'integer))))
(defun tramp-adb-get-ls-command (vec)
(with-tramp-connection-property vec "ls"
(tramp-message vec 5 "Finding a suitable `ls' command")
- (if (zerop (tramp-adb-command-exit-status
- vec "ls --color=never -al /dev/null"))
+ (if (tramp-adb-send-command-and-check vec "ls --color=never -al /dev/null")
;; On CyanogenMod based system BusyBox is used and "ls" output
;; coloring is enabled by default. So we try to disable it
;; when possible.
(and (not (string-match "\\(^--\\|^[^-]\\)" s)) s))
switches))))))
-(defun tramp-adb-handle-insert-directory
- (filename switches &optional _wildcard _full-directory-p)
- "Like `insert-directory' for Tramp files."
- (when (stringp switches)
- (setq switches (tramp-adb--gnu-switches-to-ash (split-string switches))))
- (with-parsed-tramp-file-name (file-truename filename) nil
- (with-current-buffer (tramp-get-buffer v)
- (let ((name (tramp-shell-quote-argument (directory-file-name localname)))
- (switch-d (member "-d" switches))
- (switch-t (member "-t" switches))
- (switches (mapconcat 'identity (remove "-t" switches) " ")))
- (tramp-adb-barf-unless-okay
- v (format "%s %s %s" (tramp-adb-get-ls-command v) switches name)
- "Cannot insert directory listing: %s" filename)
- (unless switch-d
- ;; We insert also filename/. and filename/.., because "ls" doesn't.
- (narrow-to-region (point) (point))
- (ignore-errors
- (tramp-adb-barf-unless-okay
- v (format "%s -d %s %s %s"
- (tramp-adb-get-ls-command v)
- switches
- (concat (file-name-as-directory name) ".")
- (concat (file-name-as-directory name) ".."))
- "Cannot insert directory listing: %s" filename))
- (widen))
- (tramp-adb-sh-fix-ls-output switch-t)))
- (insert-buffer-substring (tramp-get-buffer v))))
-
(defun tramp-adb-sh-fix-ls-output (&optional sort-by-time)
"Insert dummy 0 in empty size columns.
Androids \"ls\" command doesn't insert size column for directories:
(defun tramp-adb-ls-output-name-less-p (a b)
"Sort \"ls\" output by name, ascending."
(let (posa posb)
- (string-match dired-move-to-filename-regexp a)
+ (string-match directory-listing-before-filename-regexp a)
(setq posa (match-end 0))
- (string-match dired-move-to-filename-regexp b)
+ (string-match directory-listing-before-filename-regexp b)
(setq posb (match-end 0))
(string-lessp (substring a posa) (substring b posb))))
(tramp-adb-barf-unless-okay
v (format "mkdir %s" (tramp-shell-quote-argument localname))
"Couldn't make directory %s" dir)
- (tramp-flush-directory-property v (file-name-directory localname))))
+ (tramp-flush-file-property v (file-name-directory localname))
+ (tramp-flush-directory-property v localname)))
(defun tramp-adb-handle-delete-directory (directory &optional recursive)
"Like `delete-directory' for Tramp files."
(with-tramp-file-property v localname "file-name-all-completions"
(save-match-data
(tramp-adb-send-command
- v (format "%s %s"
+ v (format "%s -a %s"
(tramp-adb-get-ls-command v)
(tramp-shell-quote-argument localname)))
(mapcar
(lambda (f)
- (if (file-directory-p f)
+ (if (file-directory-p (expand-file-name f directory))
(file-name-as-directory f)
f))
(with-current-buffer (tramp-get-buffer v)
- (delq
- nil
- (mapcar
- (lambda (l) (and (not (string-match "^[[:space:]]*$" l)) l))
- (split-string (buffer-string) "\n"))))))))))
+ (append
+ '("." "..")
+ (delq
+ nil
+ (mapcar
+ (lambda (l) (and (not (string-match "^[[:space:]]*$" l)) l))
+ (split-string (buffer-string) "\n")))))))))))
(defun tramp-adb-handle-file-local-copy (filename)
"Like `file-local-copy' for Tramp files."
(delete-file tmpfile)
(tramp-error
v 'file-error "Cannot make local copy of file `%s'" filename))
- (set-file-modes tmpfile (file-modes filename)))
+ (set-file-modes
+ tmpfile
+ (logior (or (file-modes filename) 0)
+ (tramp-compat-octal-to-decimal "0400"))))
tmpfile)))
(defun tramp-adb-handle-file-writable-p (filename)
(with-tramp-file-property v localname "file-writable-p"
(if (tramp-adb-find-test-command v)
(if (file-exists-p filename)
- (zerop
- (tramp-adb-command-exit-status
- v (format "test -w %s" (tramp-shell-quote-argument localname))))
+ (tramp-adb-send-command-and-check
+ v (format "test -w %s" (tramp-shell-quote-argument localname)))
(and
(file-directory-p (file-name-directory filename))
(file-writable-p (file-name-directory filename))))
"Like `write-region' for Tramp files."
(setq filename (expand-file-name filename))
(with-parsed-tramp-file-name filename nil
- (when append
- (tramp-error
- v 'file-error "Cannot append to file using Tramp (`%s')" filename))
(when (and confirm (file-exists-p filename))
(unless (y-or-n-p (format "File %s exists; overwrite anyway? "
filename))
(tramp-flush-file-property v localname)
(let* ((curbuf (current-buffer))
(tmpfile (tramp-compat-make-temp-file filename)))
+ (when (and append (file-exists-p filename))
+ (copy-file filename tmpfile 'ok)
+ (set-file-modes
+ tmpfile
+ (logior (or (file-modes tmpfile) 0)
+ (tramp-compat-octal-to-decimal "0600"))))
(tramp-run-real-handler
'write-region
(list start end tmpfile append 'no-message lockname confirm))
"Like `set-file-modes' for Tramp files."
(with-parsed-tramp-file-name filename nil
(tramp-flush-file-property v localname)
- (tramp-adb-barf-unless-okay
- v (format "chmod %s %s" (tramp-compat-decimal-to-octal mode) localname)
- "Error while changing file's mode %s" filename)))
+ (tramp-adb-send-command-and-check
+ v (format "chmod %s %s" (tramp-compat-decimal-to-octal mode) localname))))
(defun tramp-adb-handle-set-file-times (filename &optional time)
"Like `set-file-times' for Tramp files."
(let ((time (if (or (null time) (equal time '(0 0)))
(current-time)
time)))
- (tramp-adb-command-exit-status
- ;; use shell arithmetic because of Emacs integer size limit
+ (tramp-adb-send-command-and-check
+ ;; Use shell arithmetic because of Emacs integer size limit.
v (format "touch -t $(( %d * 65536 + %d )) %s"
(car time) (cadr time)
(tramp-shell-quote-argument localname))))))
(setq filename (expand-file-name filename)
newname (expand-file-name newname))
- (with-parsed-tramp-file-name
- (if (tramp-tramp-file-p filename) filename newname) nil
- (with-tramp-progress-reporter
- v 0 (format "Renaming %s to %s" newname filename)
-
- (if (and (tramp-equal-remote filename newname)
- (not (file-directory-p filename)))
- (progn
- (when (and (not ok-if-already-exists)
- (file-exists-p newname))
- (tramp-error v 'file-already-exists newname))
- ;; We must also flush the cache of the directory, because
- ;; `file-attributes' reads the values from there.
- (tramp-flush-file-property v (file-name-directory localname))
- (tramp-flush-file-property v localname)
- ;; Short track.
- (tramp-adb-barf-unless-okay
- v (format
- "mv %s %s"
- (tramp-file-name-handler 'file-remote-p filename 'localname)
- localname)
- "Error renaming %s to %s" filename newname))
-
- ;; Rename by copy.
- (copy-file filename newname ok-if-already-exists t t)
- (delete-file filename)))))
+ (let ((t1 (tramp-tramp-file-p filename))
+ (t2 (tramp-tramp-file-p newname)))
+ (with-parsed-tramp-file-name (if t1 filename newname) nil
+ (with-tramp-progress-reporter
+ v 0 (format "Renaming %s to %s" filename newname)
+
+ (if (and t1 t2
+ (tramp-equal-remote filename newname)
+ (not (file-directory-p filename)))
+ (let ((l1 (tramp-file-name-handler
+ 'file-remote-p filename 'localname))
+ (l2 (tramp-file-name-handler
+ 'file-remote-p newname 'localname)))
+ (when (and (not ok-if-already-exists)
+ (file-exists-p newname))
+ (tramp-error v 'file-already-exists newname))
+ ;; We must also flush the cache of the directory, because
+ ;; `file-attributes' reads the values from there.
+ (tramp-flush-file-property v (file-name-directory l1))
+ (tramp-flush-file-property v l1)
+ (tramp-flush-file-property v (file-name-directory l2))
+ (tramp-flush-file-property v l2)
+ ;; Short track.
+ (tramp-adb-barf-unless-okay
+ v (format "mv %s %s" l1 l2)
+ "Error renaming %s to %s" filename newname))
+
+ ;; Rename by copy.
+ (copy-file filename newname ok-if-already-exists t t)
+ (delete-file filename))))))
(defun tramp-adb-handle-process-file
(program &optional infile destination display &rest args)
"Checks, whether the ash has a builtin \"test\" command.
This happens for Android >= 4.0."
(with-tramp-connection-property vec "test"
- (zerop (tramp-adb-command-exit-status vec "type test"))))
+ (tramp-adb-send-command-and-check vec "type test")))
;; Connection functions
(while (re-search-forward "\r+$" nil t)
(replace-match "" nil nil)))))
-(defun tramp-adb-command-exit-status
+(defun tramp-adb-send-command-and-check
(vec command)
- "Run COMMAND and return its exit status.
+ "Run COMMAND and and check its exit status.
Sends `echo $?' along with the COMMAND for checking the exit status. If
COMMAND is nil, just sends `echo $?'. Returns the exit status found."
(tramp-adb-send-command
vec 'file-error "Couldn't find exit status of `%s'" command))
(skip-chars-forward "^ ")
(prog1
- (read (current-buffer))
+ (zerop (read (current-buffer)))
(let (buffer-read-only)
(delete-region (match-beginning 0) (point-max))))))
(defun tramp-adb-barf-unless-okay (vec command fmt &rest args)
"Run COMMAND, check exit status, throw error if exit status not okay.
FMT and ARGS are passed to `error'."
- (unless (zerop (tramp-adb-command-exit-status vec command))
+ (unless (tramp-adb-send-command-and-check vec command)
(apply 'tramp-error vec 'file-error fmt args)))
(defun tramp-adb-wait-for-output (proc &optional timeout)
(p (get-buffer-process buf))
(host (tramp-file-name-host vec))
(user (tramp-file-name-user vec))
- (devices (mapcar 'cadr (tramp-adb-parse-device-names nil))))
+ devices)
;; Maybe we know already that "su" is not supported. We cannot
;; use a connection property, because we have not checked yet
(and p (processp p) (memq (process-status p) '(run open)))
(save-match-data
(when (and p (processp p)) (delete-process p))
+ (setq tramp-current-method (tramp-file-name-method vec)
+ tramp-current-user (tramp-file-name-user vec)
+ tramp-current-host (tramp-file-name-host vec)
+ devices (mapcar 'cadr (tramp-adb-parse-device-names nil)))
(if (not devices)
(tramp-error vec 'file-error "No device connected"))
(if (and (> (length host) 0) (not (member host devices)))
;; Change user if indicated.
(when user
(tramp-adb-send-command vec (format "su %s" user))
- (unless (zerop (tramp-adb-command-exit-status vec nil))
+ (unless (tramp-adb-send-command-and-check vec nil)
(delete-process p)
(tramp-set-file-property vec "" "su-command-p" nil)
(tramp-error
;;;###tramp-autoload
(defun tramp-flush-file-property (key file)
"Remove all properties of FILE in the cache context of KEY."
- ;; Remove file property of symlinks.
+ ;; Remove file properties of symlinks.
(let ((truename (tramp-get-file-property key file "file-truename" nil)))
(when (and (stringp truename)
(not (string-equal file truename)))
(defun tramp-flush-directory-property (key directory)
"Remove all properties of DIRECTORY in the cache context of KEY.
Remove also properties of all files in subdirectories."
- (let ((directory (tramp-run-real-handler
- 'directory-file-name (list directory))))
+ (let* ((directory (tramp-run-real-handler
+ 'directory-file-name (list directory)))
+ (truename (tramp-get-file-property key directory "file-truename" nil)))
+ ;; Remove file properties of symlinks.
+ (when (and (stringp truename)
+ (not (string-equal directory truename)))
+ (tramp-flush-directory-property key truename))
(tramp-message key 8 "%s" directory)
(maphash
(lambda (key _value)
(zerop (logand flags tramp-gvfs-password-need-username))))
(setq user (read-string "User name: ")))
(when (and (zerop (length domain))
- (not (zerop (logand flags tramp-gvfs-password-need-domain))))
+ (not
+ (zerop (logand flags tramp-gvfs-password-need-domain))))
(setq domain (read-string "Domain name: ")))
(tramp-message l 6 "%S %S %S %d" message user domain flags)
+ (unless (tramp-get-connection-property l "first-password-request" nil)
+ (tramp-clear-passwd l))
+
(setq tramp-current-method l-method
tramp-current-user user
tramp-current-host l-host
(format "Opening connection for %s using %s" host method)
(format "Opening connection for %s@%s using %s" user host method))
- ;; Enable auth-source and password-cache.
+ ;; Enable `auth-source'.
(tramp-set-connection-property vec "first-password-request" t)
;; There will be a callback of "askPassword" when a password is
(defun tramp-sh-handle-file-truename (filename)
"Like `file-truename' for Tramp files."
- (with-parsed-tramp-file-name (expand-file-name filename) nil
- (tramp-make-tramp-file-name method user host
+ (format
+ "%s%s"
+ (with-parsed-tramp-file-name (expand-file-name filename) nil
+ (tramp-make-tramp-file-name
+ method user host
(with-tramp-file-property v localname "file-truename"
(let ((result nil)) ; result steps in reverse order
(tramp-message v 4 "Finding true name for `%s'" filename)
(setq result (concat result "/"))))))
(tramp-message v 4 "True name of `%s' is `%s'" localname result)
- (if (string-equal (file-name-nondirectory localname) "")
- (file-name-as-directory result) result))))))
+ result))))
+
+ ;; Preserve trailing "/".
+ (if (string-equal (file-name-nondirectory filename) "") "/" "")))
;; Basic functions.
(with-tramp-progress-reporter
v 3 (format "Checking `vc-registered' for %s" file)
- ;; There could be new files, created by the vc backend. We
- ;; cannot reuse the old cache entries, therefore.
- (let (tramp-vc-registered-file-names
- (remote-file-name-inhibit-cache (current-time))
- (file-name-handler-alist
- `((,tramp-file-name-regexp . tramp-vc-file-name-handler))))
-
- ;; Here we collect only file names, which need an operation.
- (ignore-errors (tramp-run-real-handler 'vc-registered (list file)))
- (tramp-message v 10 "\n%s" tramp-vc-registered-file-names)
-
- ;; Send just one command, in order to fill the cache.
- (when tramp-vc-registered-file-names
- (tramp-maybe-send-script
- v
- (format tramp-vc-registered-read-file-names
- (tramp-get-file-exists-command v)
- (format "%s -r" (tramp-get-test-command v)))
- "tramp_vc_registered_read_file_names")
-
- (dolist
- (elt
- (ignore-errors
- ;; We cannot use `tramp-send-command-and-read',
- ;; because this does not cooperate well with
- ;; heredoc documents.
- (tramp-send-command
- v
- (format
- "tramp_vc_registered_read_file_names <<'%s'\n%s\n%s\n"
- tramp-end-of-heredoc
- (mapconcat 'tramp-shell-quote-argument
- tramp-vc-registered-file-names
- "\n")
- tramp-end-of-heredoc))
- (tramp-send-command-and-check v nil)
- (with-current-buffer (tramp-get-connection-buffer v)
- ;; Read the expression.
- (goto-char (point-min))
- (read (current-buffer)))))
-
- (tramp-set-file-property
- v (car elt) (cadr elt) (cadr (cdr elt))))))
+ (unless remote-file-name-inhibit-cache
+ ;; There could be new files, created by the vc backend. We
+ ;; cannot reuse the old cache entries, therefore.
+ (let (tramp-vc-registered-file-names
+ (remote-file-name-inhibit-cache (current-time))
+ (file-name-handler-alist
+ `((,tramp-file-name-regexp . tramp-vc-file-name-handler))))
+
+ ;; Here we collect only file names, which need an operation.
+ (ignore-errors (tramp-run-real-handler 'vc-registered (list file)))
+ (tramp-message v 10 "\n%s" tramp-vc-registered-file-names)
+
+ ;; Send just one command, in order to fill the cache.
+ (when tramp-vc-registered-file-names
+ (tramp-maybe-send-script
+ v
+ (format tramp-vc-registered-read-file-names
+ (tramp-get-file-exists-command v)
+ (format "%s -r" (tramp-get-test-command v)))
+ "tramp_vc_registered_read_file_names")
+
+ (dolist
+ (elt
+ (ignore-errors
+ ;; We cannot use `tramp-send-command-and-read',
+ ;; because this does not cooperate well with
+ ;; heredoc documents.
+ (tramp-send-command
+ v
+ (format
+ "tramp_vc_registered_read_file_names <<'%s'\n%s\n%s\n"
+ tramp-end-of-heredoc
+ (mapconcat 'tramp-shell-quote-argument
+ tramp-vc-registered-file-names
+ "\n")
+ tramp-end-of-heredoc))
+ (with-current-buffer (tramp-get-connection-buffer v)
+ ;; Read the expression.
+ (goto-char (point-min))
+ (read (current-buffer)))))
+
+ (tramp-set-file-property
+ v (car elt) (cadr elt) (cadr (cdr elt)))))))
;; Second run. Now all `file-exists-p' or `file-readable-p'
;; calls shall be answered from the file cache. We unset
Fall back to normal file name handler if no Tramp handler exists."
(when (and tramp-locked (not tramp-locker))
(setq tramp-locked nil)
- (signal 'file-error (list "Forbidden reentrant call of Tramp")))
+ (tramp-error
+ (car-safe tramp-current-connection) 'file-error
+ "Forbidden reentrant call of Tramp"))
(let ((tl tramp-locked))
+ (setq tramp-locked t)
(unwind-protect
- (progn
- (setq tramp-locked t)
- (let ((tramp-locker t))
- (save-match-data
- (let ((fn (assoc operation tramp-sh-file-name-handler-alist)))
- (if fn
- (apply (cdr fn) args)
- (tramp-run-real-handler operation args))))))
+ (let ((tramp-locker t))
+ (save-match-data
+ (let ((fn (assoc operation tramp-sh-file-name-handler-alist)))
+ (if fn
+ (apply (cdr fn) args)
+ (tramp-run-real-handler operation args)))))
(setq tramp-locked tl))))
(defun tramp-vc-file-name-handler (operation &rest args)
;; Set the environment.
(tramp-message vec 5 "Setting default environment")
- (let ((env (append `(,(tramp-get-remote-locale vec))
+ (let ((env (append (when (tramp-get-remote-locale vec) ; Discard `(nil)'.
+ `(,(tramp-get-remote-locale vec)))
(copy-sequence tramp-remote-process-environment)))
unset item)
(while env
vec 5 "Checking remote test command `%s'" rem-test)
(unless (tramp-send-command-and-check vec rem-test t)
(throw 'wont-work-remote nil)))
+ ;; Check if remote perl exists when necessary.
+ (when (and (not (stringp rem-enc))
+ (not (tramp-get-remote-perl vec)))
+ (throw 'wont-work-remote nil))
;; Check if remote encoding and decoding commands can be
;; called remotely with null input and output. This makes
;; sure there are no syntax errors and the command is really
(when elt1
(setcdr elt1
(append
- (tramp-compat-split-string default-remote-path ":")
+ (tramp-compat-split-string (or default-remote-path "") ":")
(cdr elt1)))
(setq remote-path (delq 'tramp-default-remote-path remote-path)))
(when elt2
(setcdr elt2
(append
- (tramp-compat-split-string own-remote-path ":")
+ (tramp-compat-split-string (or own-remote-path "") ":")
(cdr elt2)))
(setq remote-path (delq 'tramp-own-remote-path remote-path)))
;; rsync.
;; * Try telnet+curl as new method. It might be useful for busybox,
;; without built-in uuencode/uudecode.
+;; * Try telnet+nc as new method. It might be useful for busybox,
+;; without built-in uuencode/uudecode.
;;; tramp-sh.el ends here
`tramp-message'. Finally, signal SIGNAL is raised."
(let (tramp-message-show-message)
(tramp-backtrace vec-or-proc)
- (tramp-message
- vec-or-proc 1 "%s"
- (error-message-string
- (list signal
- (get signal 'error-message)
- (apply 'format fmt-string arguments))))
+ (when vec-or-proc
+ (tramp-message
+ vec-or-proc 1 "%s"
+ (error-message-string
+ (list signal
+ (get signal 'error-message)
+ (apply 'format fmt-string arguments)))))
(signal signal (list (apply 'format fmt-string arguments)))))
(defsubst tramp-error-with-buffer
v 3 (format "Inserting `%s'" filename)
(unwind-protect
(if (not (file-exists-p filename))
- ;; We don't raise a Tramp error, because it might be
- ;; suppressed, like in `find-file-noselect-1'.
- (signal 'file-error
- (list "File not found on remote host" filename))
+ (progn
+ ;; We don't raise a Tramp error, because it might be
+ ;; suppressed, like in `find-file-noselect-1'.
+ (tramp-message
+ v 1 "File not `%s' found on remote host" filename)
+ (signal 'file-error
+ (list "File not found on remote host" filename)))
(if (and (tramp-local-host-p v)
(let (file-name-handler-alist)
(with-current-buffer (process-buffer proc)
(let ((enable-recursive-minibuffers t)
(case-fold-search t))
+ ;; Let's check whether a wrong password has been sent already.
+ ;; Sometimes, the process returns a new password request
+ ;; immediately after rejecting the previous (wrong) one.
+ (goto-char (point-min))
+ (when (search-forward-regexp tramp-wrong-passwd-regexp nil t)
+ (tramp-clear-passwd vec))
(tramp-check-for-regexp proc tramp-password-prompt-regexp)
(tramp-message vec 3 "Sending %s" (match-string 1))
;; We don't call `tramp-send-string' in order to hide the
PROC and VEC indicate the remote connection to be used. POS, if
set, is the starting point of the region to be deleted in the
connection buffer."
- ;; Enable `auth-source' and `password-cache'. We must use
- ;; tramp-current-* variables in case we have several hops.
+ ;; Enable `auth-source'. We must use tramp-current-* variables in
+ ;; case we have several hops.
(tramp-set-connection-property
(tramp-dissect-file-name
(tramp-make-tramp-file-name
Furthermore, traces are written with verbosity of 6."
(tramp-message
(vector tramp-current-method tramp-current-user tramp-current-host nil nil)
- 6 "%s %s %s" program infile args)
+ 6 "`%s %s' %s" program (mapconcat 'identity args " ") infile)
(if (executable-find program)
(apply 'call-process program infile destination display args)
1))
"password" tramp-current-host tramp-current-method)))
;; Try the password cache.
(when (functionp 'password-read)
- (unless (tramp-get-connection-property
- v "first-password-request" nil)
- (tramp-compat-funcall 'password-cache-remove key))
(let ((password
(tramp-compat-funcall 'password-read pw-prompt key)))
(tramp-compat-funcall 'password-cache-add key password)
+2014-02-25 Glenn Morris <rgm@gnu.org>
+
+ * org-version.el (org-odt-data-dir):
+ Remove incorrect, duplicate definition. (Bug#16734)
+
2014-01-08 Paul Eggert <eggert@cs.ucla.edu>
Spelling fixes.
Inserted by installing org-mode or when a release is made."
(let ((org-git-version "release_8.2.5c"))
org-git-version))
-;;;###autoload
-(defvar org-odt-data-dir "/usr/share/emacs/etc/org"
- "The location of ODT styles.")
\f
(provide 'org-version)
\f
;; For Emacs < 22.2.
(eval-and-compile
- (unless (fboundp 'declare-function) (defmacro declare-function (&rest r))))
+ (unless (fboundp 'declare-function) (defmacro declare-function (&rest _r))))
(eval-when-compile
(let ((load-path
(add-hook 'change-major-mode-hook 'c-leave-cc-mode-mode)
(setq c-initialization-ok t)
;; Connect up with Emacs's electric-indent-mode, for >= Emacs 24.4
- (when (fboundp 'electric-indent-mode)
+ (when (fboundp 'electric-indent-local-mode)
(add-hook 'electric-indent-mode-hook 'c-electric-indent-mode-hook)
- (when (fboundp 'electric-indent-local-mode)
- (add-hook 'electric-indent-local-mode-hook
- 'c-electric-indent-local-mode-hook))))
+ (add-hook 'electric-indent-local-mode-hook
+ 'c-electric-indent-local-mode-hook)))
;; Will try initialization hooks again if they failed.
(put 'c-initialize-cc-mode initprop c-initialization-ok))))
;; messing up CC Mode's, and set `c-electric-flag' if `electric-indent-mode'
;; has been called by the user.
(when (boundp 'electric-indent-inhibit) (setq electric-indent-inhibit t))
- (when (and (boundp 'electric-indent-mode-has-been-called)
- (> electric-indent-mode-has-been-called 1))
+ ;; CC-mode should obey Emacs's generic preferences, tho only do it if
+ ;; Emacs's generic preferences can be set per-buffer (Emacs>=24.4).
+ (when (fboundp 'electric-indent-local-mode)
(setq c-electric-flag electric-indent-mode))
;; ;; Put submode indicators onto minor-mode-alist, but only once.
(backward-char))
new-pos)) ; back over (, [, <.
-(defun c-change-set-fl-decl-start (beg end old-len)
+(defun c-change-set-fl-decl-start (_beg _end _old-len)
;; Set c-new-BEG to the beginning of a "local" declaration if it('s BOL) is
;; inside one. This is called from an after-change-function, but the
;; parameters BEG END and OLD-LEN are ignored. See `c-set-fl-decl-start'
(make-local-hook 'font-lock-mode-hook))
(add-hook 'font-lock-mode-hook 'c-after-font-lock-init nil t))
-(defun c-extend-after-change-region (beg end old-len)
+(defun c-extend-after-change-region (_beg _end _old-len)
"Extend the region to be fontified, if necessary."
;; Note: the parameters are ignored here. This somewhat indirect
;; implementation exists because it is minimally different from the
(defun c-electric-indent-mode-hook ()
;; Emacs has en/disabled `electric-indent-mode'. Propagate this through to
;; each CC Mode buffer.
- (when (and (boundp 'electric-indent-mode-has-been-called)
- (> electric-indent-mode-has-been-called 1))
- (mapc (lambda (buf)
- (with-current-buffer buf
- (when c-buffer-is-cc-mode
- ;; Don't use `c-toggle-electric-state' here due to recursion.
- (setq c-electric-flag electric-indent-mode)
- (c-update-modeline))))
- (buffer-list))))
+ (mapc (lambda (buf)
+ (with-current-buffer buf
+ (when c-buffer-is-cc-mode
+ ;; Don't use `c-toggle-electric-state' here due to recursion.
+ (setq c-electric-flag electric-indent-mode)
+ (c-update-modeline))))
+ (buffer-list)))
(defun c-electric-indent-local-mode-hook ()
;; Emacs has en/disabled `electric-indent-local-mode' for this buffer.
(defun hif-set-var (var value)
- "Prepend (var value) pair to hide-ifdef-env."
+ "Prepend (var value) pair to `hide-ifdef-env'."
(setq hide-ifdef-env (cons (cons var value) hide-ifdef-env)))
(declare-function semantic-c-hideif-lookup "semantic/bovine/c" (var))
;; | Comma | , | left-to-right |
(defsubst hif-nexttoken ()
- "Pop the next token from token-list into the let variable \"hif-token\"."
+ "Pop the next token from token-list into the let variable `hif-token'."
(setq hif-token (pop hif-token-list)))
(defun hif-parse-if-exp (token-list)
(defun hif-comma (&rest expr)
- "Evaluate a list of expr, return the result of the last item"
+ "Evaluate a list of expr, return the result of the last item."
(let ((result nil))
(dolist (e expr)
(ignore-errors
(defun hif-find-ifdef-block ()
- "Utility for hide and show `ifdef-block'.
+ "Utility to hide and show ifdef block.
Return as (TOP . BOTTOM) the extent of ifdef block."
(let (max-bottom)
(cons (save-excursion
"Keymap used in Modula-2 mode.")
(defcustom m2-indent 5
- "This variable gives the indentation in Modula-2-Mode."
+ "This variable gives the indentation in Modula-2 mode."
:type 'integer
:group 'modula2)
(put 'm2-indent 'safe-local-variable
(define-obsolete-variable-alias
'delphi-compound-block-indent 'opascal-compound-block-indent "24.4")
(defcustom opascal-compound-block-indent 0
- "Extra indentation for blocks in compound statements. E.g.
+ "Extra indentation for blocks in compound statements. E.g.
// block indent = 0 vs // block indent = 2
if b then if b then
(define-obsolete-variable-alias
'delphi-case-label-indent 'opascal-case-label-indent "24.4")
(defcustom opascal-case-label-indent opascal-indent-level
- "Extra indentation for case statement labels. E.g.
+ "Extra indentation for case statement labels. E.g.
// case indent = 0 vs // case indent = 3
case value of case value of
(define-obsolete-function-alias 'delphi-mode 'opascal-mode "24.4")
;;;###autoload
(define-derived-mode opascal-mode prog-mode "OPascal"
- "Major mode for editing OPascal code. \\<opascal-mode-map>
+ "Major mode for editing OPascal code.\\<opascal-mode-map>
\\[opascal-find-unit]\t- Search for a OPascal source file.
\\[opascal-fill-comment]\t- Fill the current comment.
\\[opascal-new-comment-line]\t- If in a // comment, do a new comment line.
Coloring:
- `opascal-keyword-face' (default font-lock-keyword-face)
- Face used to color OPascal keywords.
-
-Turning on OPascal mode calls the value of the variable `opascal-mode-hook'
-with no args, if that value is non-nil."
+ `opascal-keyword-face' (default `font-lock-keyword-face')
+ Face used to color OPascal keywords."
;; Buffer locals:
(setq-local indent-line-function #'opascal-indent-line)
:group 'languages)
(defvar pascal-mode-abbrev-table nil
- "Abbrev table in use in Pascal-mode buffers.")
+ "Abbrev table in use in Pascal mode buffers.")
(define-abbrev-table 'pascal-mode-abbrev-table ())
(defvar pascal-mode-map
(defvar pascal-imenu-generic-expression
'((nil "^[ \t]*\\(function\\|procedure\\)[ \t\n]+\\([a-zA-Z0-9_.:]+\\)" 2))
- "Imenu expression for Pascal-mode. See `imenu-generic-expression'.")
+ "Imenu expression for Pascal mode. See `imenu-generic-expression'.")
(defvar pascal-keywords
'("and" "array" "begin" "case" "const" "div" "do" "downto" "else" "end"
"\\<\\(label\\|var\\|type\\|const\\|until\\|end\\|begin\\|repeat\\|else\\)\\>")
;;; Strings used to mark beginning and end of excluded text
-(defconst pascal-exclude-str-start "{-----\\/----- EXCLUDED -----\\/-----")
-(defconst pascal-exclude-str-end " -----/\\----- EXCLUDED -----/\\-----}")
+(defconst pascal-exclude-str-start "{-----\\/----- EXCLUDED -----\\/-----"
+ "String used to mark beginning of excluded text.")
+(defconst pascal-exclude-str-end " -----/\\----- EXCLUDED -----/\\-----}"
+ "String used to mark end of excluded text.")
(defvar pascal-mode-syntax-table
(let ((st (make-syntax-table)))
(defcustom pascal-auto-endcomments t
"Non-nil means automatically insert comments after certain `end's.
-Specifically, this is done after the ends of cases statements and functions.
+Specifically, this is done after the ends of case statements and functions.
The name of the function or case is included between the braces."
:type 'boolean
:group 'pascal)
;;;###autoload
(define-derived-mode pascal-mode prog-mode "Pascal"
- "Major mode for editing Pascal code. \\<pascal-mode-map>
+ "Major mode for editing Pascal code.\\<pascal-mode-map>
TAB indents for Pascal code. Delete converts tabs to spaces as it moves back.
\\[completion-at-point] completes the word around current point with respect \
List of contexts where auto lineup of :'s or ='s should be done.
See also the user variables `pascal-type-keywords', `pascal-start-keywords' and
-`pascal-separator-keywords'.
-
-Turning on Pascal mode calls the value of the variable pascal-mode-hook with
-no args, if that value is non-nil."
+`pascal-separator-keywords'."
(setq-local local-abbrev-table pascal-mode-abbrev-table)
(setq-local indent-line-function 'pascal-indent-line)
(setq-local comment-indent-function 'pascal-indent-comment)
(insert " "))
(defun pascal-mark-defun ()
- "Mark the current pascal function (or procedure).
+ "Mark the current Pascal function (or procedure).
This puts the mark at the end, and point at the beginning."
(interactive)
(push-mark (point))
(zmacs-activate-region)))
(defun pascal-comment-area (start end)
- "Put the region into a Pascal comment.
+ "Put the region into a Pascal comment.\\<pascal-mode-map>
The comments that are in this area are \"deformed\":
`*)' becomes `!(*' and `}' becomes `!{'.
These deformed comments are returned to normal if you use
\\[pascal-uncomment-area] to undo the commenting.
-The commented area starts with `pascal-exclude-str-start', and ends with
-`pascal-include-str-end'. But if you change these variables,
+The commented area starts with `pascal-exclude-str-start', and ends
+with `pascal-exclude-str-end'. But if you change these variables,
\\[pascal-uncomment-area] won't recognize the comments."
(interactive "r")
(save-excursion
(defun pascal-uncomment-area ()
"Uncomment a commented area; change deformed comments back to normal.
-This command does nothing if the pointer is not in a commented
-area. See also `pascal-comment-area'."
+This command does nothing if the pointer is not in a commented area.
+See also `pascal-comment-area'."
(interactive)
(save-excursion
(let ((start (point))
(defun pascal-indent-level ()
"Return the indent-level the current statement has.
-Do not count labels, case-statements or records."
+Do not count labels, case statements or records."
(save-excursion
(beginning-of-line)
(if (looking-at "[ \t]*[0-9a-zA-Z]+[ \t]*:[^=]")
(defun pascal-indent-paramlist (&optional arg)
"Indent current line in parameterlist.
-If optional arg is non-nil, just return the
+If optional ARG is non-nil, just return the
indent of the current line in parameterlist."
(save-excursion
(let* ((oldpos (point))
if ARG is omitted or nil.
When enabled, portions of the text being edited may be made
-invisible. \\<pascal-outline-map>
+invisible.\\<pascal-outline-map>
Pascal Outline mode provides some additional commands.
\\[pascal-show-all]\t- Show the whole buffer.
\\[pascal-hide-other-defuns]\
\t- Hide everything but the current function (function under the cursor).
-\\[pascal-outline]\t- Leave pascal-outline-mode."
+\\[pascal-outline]\t- Leave Pascal Outline mode."
:init-value nil :lighter " Outl" :keymap pascal-outline-map
(add-to-invisibility-spec '(pascal . t))
(unless pascal-outline-mode
(defmacro python-rx (&rest regexps)
"Python mode specialized rx macro.
-This variant of `rx' supports common python named REGEXPS."
+This variant of `rx' supports common Python named REGEXPS."
(let ((rx-constituents (append python-rx-constituents rx-constituents)))
(cond ((null regexps)
(error "No regexp"))
(defsubst python-syntax-count-quotes (quote-char &optional point limit)
"Count number of quotes around point (max is 3).
QUOTE-CHAR is the quote char to count. Optional argument POINT is
-the point where scan starts (defaults to current point) and LIMIT
+the point where scan starts (defaults to current point), and LIMIT
is used to limit the scan."
(let ((i 0))
(while (and (< i 3)
(defun python-indent-context ()
"Get information on indentation context.
Context information is returned with a cons with the form:
- \(STATUS . START)
+ (STATUS . START)
Where status can be any of the following symbols:
When the variable `last-command' is not equal to one of the
symbols inside `python-indent-trigger-commands' and FORCE-TOGGLE
-is nil it calculates possible indentation levels and saves it in
-the variable `python-indent-levels'. Afterwards it sets the
+is nil it calculates possible indentation levels and saves them
+in the variable `python-indent-levels'. Afterwards it sets the
variable `python-indent-current-level' correctly so offset is
-equal to (`nth' `python-indent-current-level'
-`python-indent-levels')"
+equal to
+ (nth python-indent-current-level python-indent-levels)"
(or
(and (or (and (memq this-command python-indent-trigger-commands)
(eq last-command this-command))
(defun python-indent-dedent-line-backspace (arg)
"De-indent current line.
Argument ARG is passed to `backward-delete-char-untabify' when
-point is not in between the indentation."
+point is not in between the indentation."
(interactive "*p")
(when (not (python-indent-dedent-line))
(backward-delete-char-untabify arg)))
(put 'python-indent-dedent-line-backspace 'delete-selection 'supersede)
(defun python-indent-region (start end)
- "Indent a python region automagically.
+ "Indent a Python region automagically.
Called from a program, START and END specify the region to indent."
(let ((deactivate-mark nil))
(add-to-list 'debug-ignored-errors "^Can't shift all lines enough")
(defun python-indent-shift-right (start end &optional count)
- "Shift lines contained in region START END by COUNT columns to the left.
+ "Shift lines contained in region START END by COUNT columns to the right.
COUNT defaults to `python-indent-offset'. If region isn't
active, the current line is shifted. The shifted region includes
the lines in which START and END lie."
(defun python-indent-post-self-insert-function ()
"Adjust indentation after insertion of some characters.
-This function is intended to be added to the
-`post-self-insert-hook.' If a line renders a paren alone, after
-adding a char before it, the line will be re-indented
-automatically if needed."
+This function is intended to be added to `post-self-insert-hook.'
+If a line renders a paren alone, after adding a char before it,
+the line will be re-indented automatically if needed."
(when (and electric-indent-mode
(eq (char-before) last-command-event))
(cond
(defun python-nav-beginning-of-defun (&optional arg)
"Move point to `beginning-of-defun'.
-With positive ARG search backwards else search forward. When ARG
-is nil or 0 defaults to 1. When searching backwards nested
-defuns are handled with care depending on current point
-position. Return non-nil if point is moved to
+With positive ARG search backwards else search forward.
+ARG nil or 0 defaults to 1. When searching backwards,
+nested defuns are handled with care depending on current
+point position. Return non-nil if point is moved to
`beginning-of-defun'."
(when (or (null arg) (= arg 0)) (setq arg 1))
(let ((found))
(defun python-nav-backward-sexp (&optional arg)
"Move backward across expressions.
With ARG, do it that many times. Negative arg -N means move
-backward N times."
+forward N times."
(interactive "^p")
(or arg (setq arg 1))
(python-nav-forward-sexp (- arg)))
(defun python-nav-backward-sexp-safe (&optional arg)
"Move backward safely across expressions.
With ARG, do it that many times. Negative arg -N means move
-backward N times."
+forward N times."
(interactive "^p")
(or arg (setq arg 1))
(python-nav-forward-sexp-safe (- arg)))
(defun python-nav-backward-up-list (&optional arg)
"Move backward out of one level of parentheses (or blocks).
With ARG, do this that many times.
-A negative argument means move backward but still to a less deep spot.
+A negative argument means move forward but still to a less deep spot.
This command assumes point is not in a string or comment."
(interactive "^p")
(or arg (setq arg 1))
:group 'python)
(defcustom python-shell-prompt-regexp ">>> "
- "Regular Expression matching top\-level input prompt of python shell.
+ "Regular expression matching top-level input prompt of Python shell.
It should not contain a caret (^) at the beginning."
:type 'string
:group 'python
:safe 'stringp)
(defcustom python-shell-prompt-block-regexp "[.][.][.] "
- "Regular Expression matching block input prompt of python shell.
+ "Regular expression matching block input prompt of Python shell.
It should not contain a caret (^) at the beginning."
:type 'string
:group 'python
:safe 'stringp)
(defcustom python-shell-prompt-output-regexp ""
- "Regular Expression matching output prompt of python shell.
+ "Regular expression matching output prompt of Python shell.
It should not contain a caret (^) at the beginning."
:type 'string
:group 'python
:safe 'stringp)
(defcustom python-shell-prompt-pdb-regexp "[(<]*[Ii]?[Pp]db[>)]+ "
- "Regular Expression matching pdb input prompt of python shell.
+ "Regular expression matching pdb input prompt of Python shell.
It should not contain a caret (^) at the beginning."
:type 'string
:group 'python
:safe 'stringp)
(defcustom python-shell-enable-font-lock t
- "Should syntax highlighting be enabled in the python shell buffer?
-Restart the python shell after changing this variable for it to take effect."
+ "Should syntax highlighting be enabled in the Python shell buffer?
+Restart the Python shell after changing this variable for it to take effect."
:type 'boolean
:group 'python
:safe 'booleanp)
(define-derived-mode inferior-python-mode comint-mode "Inferior Python"
"Major mode for Python inferior process.
Runs a Python interpreter as a subprocess of Emacs, with Python
-I/O through an Emacs buffer. Variables
-`python-shell-interpreter' and `python-shell-interpreter-args'
-controls which Python interpreter is run. Variables
+I/O through an Emacs buffer. Variables `python-shell-interpreter'
+and `python-shell-interpreter-args' control which Python
+interpreter is run. Variables
`python-shell-prompt-regexp',
`python-shell-prompt-output-regexp',
`python-shell-prompt-block-regexp',
(compilation-shell-minor-mode 1))
(defun python-shell-make-comint (cmd proc-name &optional pop internal)
- "Create a python shell comint buffer.
-CMD is the python command to be executed and PROC-NAME is the
+ "Create a Python shell comint buffer.
+CMD is the Python command to be executed and PROC-NAME is the
process name the comint buffer will get. After the comint buffer
is created the `inferior-python-mode' is activated. When
optional argument POP is non-nil the buffer is shown. When
dedicated process for the current buffer is open. When numeric
prefix arg is other than 0 or 4 do not SHOW.
-Runs the hook `inferior-python-mode-hook' (after the
-`comint-mode-hook' is run). \(Type \\[describe-mode] in the
+Runs the hook `inferior-python-mode-hook' after
+`comint-mode-hook' is run. (Type \\[describe-mode] in the
process buffer for a list of commands.)"
(interactive
(if current-prefix-arg
`python-shell-internal-get-process-name' returns.
This new kind of shell is intended to be used for generic
-communication related to defined configurations, the main
+communication related to defined configurations; the main
difference with global or dedicated shells is that these ones are
attached to a configuration, not a buffer. This means that can
be used for example to retrieve the sys.path and other stuff,
(python-shell-internal-get-process-name) nil t))))
(defun python-shell-get-buffer ()
- "Get inferior Python buffer for current buffer and return it."
+ "Return inferior Python buffer for current buffer."
(let* ((dedicated-proc-name (python-shell-get-process-name t))
(dedicated-proc-buffer-name (format "*%s*" dedicated-proc-name))
(global-proc-name (python-shell-get-process-name nil))
(and global-running global-proc-buffer-name))))
(defun python-shell-get-process ()
- "Get inferior Python process for current buffer and return it."
+ "Return inferior Python process for current buffer."
(get-buffer-process (python-shell-get-buffer)))
(defun python-shell-get-or-create-process ()
This is a wrapper over `buffer-substring' that takes care of
different transformations for the code sent to be evaluated in
the python shell:
- 1. When Optional Argument NOMAIN is non-nil everything under an
+ 1. When optional argument NOMAIN is non-nil everything under an
\"if __name__ == '__main__'\" block will be removed.
2. When a subregion of the buffer is sent, it takes care of
appending extra empty lines so tracebacks are correct.
(defun python-shell-send-buffer (&optional arg)
"Send the entire buffer to inferior Python process.
With prefix ARG allow execution of code inside blocks delimited
-by \"if __name__== '__main__':\""
+by \"if __name__== '__main__':\"."
(interactive "P")
(save-restriction
(widen)
delete)
"Send FILE-NAME to inferior Python PROCESS.
If TEMP-FILE-NAME is passed then that file is used for processing
-instead, while internally the shell will continue to use
-FILE-NAME. If DELETE is non-nil, delete the file afterwards."
+instead, while internally the shell will continue to use FILE-NAME.
+If DELETE is non-nil, delete the file afterwards."
(interactive "fFile to send: ")
(let* ((process (or process (python-shell-get-or-create-process)))
(temp-file-name (when temp-file-name
(defun python-shell-completion-get-completions (process line input)
"Do completion at point for PROCESS.
-LINE is used to detect the context on how to complete given
-INPUT."
+LINE is used to detect the context on how to complete given INPUT."
(let* ((prompt
;; Get last prompt of the inferior process buffer (this
;; intentionally avoids using `comint-last-prompt' because
(defun python-shell-completion-complete-or-indent ()
"Complete or indent depending on the context.
-If content before pointer is all whitespace indent. If not try
-to complete."
+If content before pointer is all whitespace, indent.
+If not try to complete."
(interactive)
(if (string-match "^[[:space:]]*$"
(buffer-substring (comint-line-beginning-position)
;;; PDB Track integration
(defcustom python-pdbtrack-activate t
- "Non-nil makes python shell enable pdbtracking."
+ "Non-nil makes Python shell enable pdbtracking."
:type 'boolean
:group 'python
:safe 'booleanp)
(defcustom python-pdbtrack-stacktrace-info-regexp
"> \\([^\"(<]+\\)(\\([0-9]+\\))\\([?a-zA-Z0-9_<>]+\\)()"
- "Regular Expression matching stacktrace information.
+ "Regular expression matching stacktrace information.
Used to extract the current line and module being inspected."
:type 'string
:group 'python
(defun python-completion-complete-at-point ()
"Complete current symbol at point.
-For this to work the best as possible you should call
+For this to work as best as possible you should call
`python-shell-send-buffer' from time to time so context in
-inferior python process is updated properly."
+inferior Python process is updated properly."
(let ((process (python-shell-get-process)))
(if (not process)
(error "Completion needs an inferior Python process running")
This affects `python-fill-string' behavior with regards to
triple quotes positioning.
-Possible values are DJANGO, ONETWO, PEP-257, PEP-257-NN,
-SYMMETRIC, and NIL. A value of NIL won't care about quotes
+Possible values are `django', `onetwo', `pep-257', `pep-257-nn',
+`symmetric', and nil. A value of nil won't care about quotes
position and will treat docstrings a normal string, any other
value may result in one of the following docstring styles:
-DJANGO:
+`django':
\"\"\"
Process foo, return bar.
If processing fails throw ProcessingError.
\"\"\"
-ONETWO:
+`onetwo':
\"\"\"Process foo, return bar.\"\"\"
\"\"\"
-PEP-257:
+`pep-257':
\"\"\"Process foo, return bar.\"\"\"
\"\"\"
-PEP-257-NN:
+`pep-257-nn':
\"\"\"Process foo, return bar.\"\"\"
If processing fails throw ProcessingError.
\"\"\"
-SYMMETRIC:
+`symmetric':
\"\"\"Process foo, return bar.\"\"\"
(defun python-check (command)
"Check a Python file (default current buffer's file).
-Runs COMMAND, a shell command, as if by `compile'. See
-`python-check-command' for the default."
+Runs COMMAND, a shell command, as if by `compile'.
+See `python-check-command' for the default."
(interactive
(list (read-string "Check command: "
(or python-check-custom-command
(defun python-eldoc--get-doc-at-point (&optional force-input force-process)
"Internal implementation to get documentation at point.
-If not FORCE-INPUT is passed then what
-`python-info-current-symbol' returns will be used. If not
-FORCE-PROCESS is passed what `python-shell-get-process' returns
-is used."
+If not FORCE-INPUT is passed then what `python-info-current-symbol'
+returns will be used. If not FORCE-PROCESS is passed what
+`python-shell-get-process' returns is used."
(let ((process (or force-process (python-shell-get-process))))
(if (not process)
(error "Eldoc needs an inferior Python process running")
(defun python-eldoc-function ()
"`eldoc-documentation-function' for Python.
-For this to work the best as possible you should call
+For this to work as best as possible you should call
`python-shell-send-buffer' from time to time so context in
-inferior python process is updated properly."
+inferior Python process is updated properly."
(python-eldoc--get-doc-at-point))
(defun python-eldoc-at-point (symbol)
It must be a function with two arguments: TYPE and NAME.")
(defun python-imenu-format-item-label (type name)
- "Return imenu label for single node using TYPE and NAME."
+ "Return Imenu label for single node using TYPE and NAME."
(format "%s (%s)" name type))
(defun python-imenu-format-parent-item-label (type name)
- "Return imenu label for parent node using TYPE and NAME."
+ "Return Imenu label for parent node using TYPE and NAME."
(format "%s..." (python-imenu-format-item-label type name)))
(defun python-imenu-format-parent-item-jump-label (type _name)
- "Return imenu label for parent node jump using TYPE and NAME."
+ "Return Imenu label for parent node jump using TYPE and NAME."
(if (string= type "class")
"*class definition*"
"*function definition*"))
(defun python-imenu--build-tree (&optional min-indent prev-indent tree)
"Recursively build the tree of nested definitions of a node.
-Arguments MIN-INDENT PREV-INDENT and TREE are internal and should
+Arguments MIN-INDENT, PREV-INDENT and TREE are internal and should
not be passed explicitly unless you know what you are doing."
(setq min-indent (or min-indent 0)
prev-indent (or prev-indent python-indent-offset))
tree)))))))
(defun python-imenu-create-index ()
- "Return tree Imenu alist for the current python buffer.
+ "Return tree Imenu alist for the current Python buffer.
Change `python-imenu-format-item-label-function',
`python-imenu-format-parent-item-label-function',
`python-imenu-format-parent-item-jump-label-function' to
index))
(defun python-imenu-create-flat-index (&optional alist prefix)
- "Return flat outline of the current python buffer for Imenu.
-Optional Argument ALIST is the tree to be flattened, when nil
+ "Return flat outline of the current Python buffer for Imenu.
+Optional argument ALIST is the tree to be flattened; when nil
`python-imenu-build-index' is used with
`python-imenu-format-parent-item-jump-label-function'
`python-imenu-format-parent-item-label-function'
-`python-imenu-format-item-label-function' set to (lambda (type
-name) name). Optional Argument PREFIX is used in recursive calls
-and should not be passed explicitly.
+`python-imenu-format-item-label-function' set to
+ (lambda (type name) name)
+Optional argument PREFIX is used in recursive calls and should
+not be passed explicitly.
Converts this:
- \((\"Foo\" . 103)
+ ((\"Foo\" . 103)
(\"Bar\" . 138)
(\"decorator\"
(\"decorator\" . 173)
To this:
- \((\"Foo\" . 103)
+ ((\"Foo\" . 103)
(\"Bar\" . 138)
(\"decorator\" . 173)
(\"decorator.wrap\" . 353)
(defun python-info-current-defun (&optional include-type)
"Return name of surrounding function with Python compatible dotty syntax.
Optional argument INCLUDE-TYPE indicates to include the type of the defun.
-This function is compatible to be used as
-`add-log-current-defun-function' since it returns nil if point is
-not inside a defun."
+This function can be used as the value of `add-log-current-defun-function'
+since it returns nil if point is not inside a defun."
(save-restriction
(widen)
(save-excursion
(looking-at python-nav-beginning-of-defun-regexp))))
(defun python-info-current-line-comment-p ()
- "Check if current line is a comment line."
+ "Return non-nil if current line is a comment line."
(char-equal
(or (char-after (+ (line-beginning-position) (current-indentation))) ?_)
?#))
(defun python-info-current-line-empty-p ()
- "Check if current line is empty, ignoring whitespace."
+ "Return non-nil if current line is empty, ignoring whitespace."
(save-excursion
(beginning-of-line 1)
(looking-at
(defun python-util-popn (lst n)
"Return LST first N elements.
-N should be an integer, when it's a natural negative number its
-opposite is used. When N is bigger than the length of LST, the
-list is returned as is."
+N should be an integer, when negative its opposite is used.
+When N is bigger than the length of LST, the list is
+returned as is."
(let* ((n (min (abs n)))
(len (length lst))
(acc))
(ruby-match-expression-expansion
2 font-lock-variable-name-face t)
;; Negation char.
- ("[^[:alnum:]_]\\(!\\)[^=]"
+ ("\\(?:^\\|[^[:alnum:]_]\\)\\(!+\\)[^=]"
1 font-lock-negation-char-face)
;; Character literals.
;; FIXME: Support longer escape sequences.
("\\_<\\?\\\\?\\S " 0 font-lock-string-face)
+ ;; Regexp options.
+ ("\\(?:\\s|\\|/\\)\\([imxo]+\\)"
+ 1 (when (save-excursion
+ (let ((state (syntax-ppss (match-beginning 0))))
+ (and (nth 3 state)
+ (or (eq (char-after) ?/)
+ (progn
+ (goto-char (nth 8 state))
+ (looking-at "%r"))))))
+ font-lock-preprocessor-face))
)
"Additional expressions to highlight in Ruby mode.")
;;; sh-script.el --- shell-script editing commands for Emacs -*- lexical-binding:t -*-
-;; Copyright (C) 1993-1997, 1999, 2001-2014 Free Software Foundation,
-;; Inc.
+;; Copyright (C) 1993-1997, 1999, 2001-2014 Free Software Foundation, Inc.
;; Author: Daniel Pfeiffer <occitan@esperanto.org>
;; Version: 2.0f
'((ash . sh)
(bash . jsh)
(bash2 . jsh)
+ (dash . ash)
(dtksh . ksh)
(es . rc)
(itcsh . tcsh)
es Extensible Shell
sh Bourne Shell
ash Almquist Shell
+ dash Debian Almquist Shell
jsh Bourne Shell with Job Control
bash GNU Bourne Again Shell
ksh88 Korn Shell '88
posix IEEE 1003.2 Shell Standard
wsh ? Shell"
:type '(repeat (cons symbol symbol))
+ :version "24.4" ; added dash
:group 'sh-script)
;; People wanting a different history file for each
;; buffer/process/client/whatever can change separator and file-name
;; on the sql-interactive-mode-hook.
- (setq comint-input-ring-separator sql-input-ring-separator
- comint-input-ring-file-name sql-input-ring-file-name)
+ (setq-local comint-input-ring-separator sql-input-ring-separator)
+ (setq comint-input-ring-file-name sql-input-ring-file-name)
;; Calling the hook before calling comint-read-input-ring allows users
;; to set comint-input-ring-file-name in sql-interactive-mode-hook.
(comint-read-input-ring t))
(defcustom register-separator nil
"Register containing the text to put between collected texts, or nil if none.
-When collecting text with
-`append-to-register' (resp. `prepend-to-register') contents of
-this register is added to the beginning (resp. end) of the marked
-text."
+When collecting text with \\[append-to-register] (or \\[prepend-to-register]),
+contents of this register is added to the beginning (or end, respectively)
+of the marked text."
:group 'register
:type '(choice (const :tag "None" nil)
(character :tag "Use register" :value ?+)))
(defun register-preview-default (r)
"Default function for the variable `register-preview-function'."
- (format "%s %s\n"
- (concat (single-key-description (car r)) ":")
+ (format "%s: %s\n"
+ (single-key-description (car r))
(register-describe-oneline (car r))))
(defvar register-preview-function #'register-preview-default
If SHOW-EMPTY is non-nil show the window even if no registers.
Format of each entry is controlled by the variable `register-preview-function'."
(when (or show-empty (consp register-alist))
- (with-temp-buffer-window
+ (with-current-buffer-window
buffer
(cons 'display-buffer-below-selected
'((window-height . fit-window-to-buffer)))
(defun copy-to-register (register start end &optional delete-flag region)
"Copy region into register REGISTER.
With prefix arg, delete as well.
-Called from program, takes four args: REGISTER, START, END and DELETE-FLAG.
-START and END are buffer positions indicating what to copy.
-The optional argument REGION if non-nil, indicates that we're not just copying
-some text between START and END, but we're copying the region.
+Called from program, takes five args: REGISTER, START, END, DELETE-FLAG,
+and REGION. START and END are buffer positions indicating what to copy.
+The optional argument REGION if non-nil, indicates that we're not just
+copying some text between START and END, but we're copying the region.
Interactively, reads the register using `register-read-with-preview'."
(interactive (list (register-read-with-preview "Copy to register: ")
(if (not (or buffer-file-name (and (derived-mode-p 'dired-mode)
dired-directory)))
(message "Buffer `%s' not visiting a file or directory" (buffer-name))
- (if (and save-place (or (not parg) (<= parg 0)))
- (progn
- (message "No place will be saved in this file")
- (setq save-place nil))
- (message "Place will be saved")
- (setq save-place t))))
+ (setq save-place (if parg
+ (> (prefix-numeric-value parg) 0)
+ (not save-place)))
+ (message (if save-place
+ "Place will be saved"
+ "No place will be saved in this file"))))
(declare-function dired-get-filename "dired" (&optional localp no-error-if-not-filep))
text-property `hard'.
With ARG, insert that many newlines.
-To turn off indentation by this command, disable Electric Indent mode
-\(see \\[electric-indent-mode]).
+If `electric-indent-mode' is enabled, this indents the final new line
+that it adds, and reindents the preceding line. To just insert
+a newline, use \\[electric-indent-just-newline].
Calls `auto-fill-function' if the current column number is greater
than the value of `fill-column' and ARG is nil.
;; Otherwise, do simple deletion.
(t (delete-char n killflag))))
+(put 'delete-forward-char 'interactive-only 'delete-char)
(defun mark-whole-buffer ()
"Put point at beginning and mark at end of buffer.
((stringp (car undo-elt))
;; (TEXT . POSITION)
(and (>= (abs (cdr undo-elt)) start)
- (< (abs (cdr undo-elt)) end)))
+ (<= (abs (cdr undo-elt)) end)))
((and (consp undo-elt) (markerp (car undo-elt)))
;; This is a marker-adjustment element (MARKER . ADJUSTMENT).
;; See if MARKER is inside the region.
be copied into other buffers."
(funcall filter-buffer-substring-function beg end delete))
-;; FIXME: `with-wrapper-hook' is obsolete
(defun buffer-substring--filter (beg end &optional delete)
(with-wrapper-hook filter-buffer-substring-functions (beg end delete)
(cond
"Activate the mark.
If NO-TMM is non-nil, leave `transient-mark-mode' alone."
(when (mark t)
- (unless (and mark-active transient-mark-mode)
- (force-mode-line-update)) ;Refresh toolbar (bug#16382).
- (setq mark-active t)
- (unless (or transient-mark-mode no-tmm)
- (setq transient-mark-mode 'lambda))
- (run-hooks 'activate-mark-hook)))
+ (unless (region-active-p)
+ (force-mode-line-update) ;Refresh toolbar (bug#16382).
+ (setq mark-active t)
+ (unless (or transient-mark-mode no-tmm)
+ (setq transient-mark-mode 'lambda))
+ (run-hooks 'activate-mark-hook))))
(defun set-mark (pos)
"Set this buffer's mark to POS. Don't use this function!
store it in a Lisp variable. Example:
(let ((beg (point))) (forward-line 1) (delete-region beg (point)))."
-
- (set-marker (mark-marker) pos (current-buffer))
(if pos
- (activate-mark 'no-tmm)
+ (progn
+ (set-marker (mark-marker) pos (current-buffer))
+ (activate-mark 'no-tmm))
;; Normally we never clear mark-active except in Transient Mark mode.
;; But when we actually clear out the mark value too, we must
;; clear mark-active in any mode.
- (deactivate-mark t)))
+ (deactivate-mark t)
+ ;; `deactivate-mark' sometimes leaves mark-active non-nil, but
+ ;; it should never be nil if the mark is nil.
+ (setq mark-active nil)
+ (set-marker (mark-marker) nil)))
(defcustom use-empty-active-region nil
"Whether \"region-aware\" commands should act on empty regions.
:group 'paren-matching)
(defcustom blink-matching-paren t
- "Non-nil means show matching open-paren when close-paren is inserted."
- :type 'boolean
+ "Non-nil means show matching open-paren when close-paren is inserted.
+If t, highlight the paren. If `jump', move cursor to its position."
+ :type '(choice
+ (const :tag "Disable" nil)
+ (const :tag "Highlight" t)
+ (const :tag "Move cursor" jump))
:group 'paren-blinking)
(defcustom blink-matching-paren-on-screen t
(message "No matching parenthesis found"))))
((not blinkpos) nil)
((pos-visible-in-window-p blinkpos)
- ;; Matching open within window, temporarily highlight char
- ;; after blinkpos but only if `blink-matching-paren-on-screen'
+ ;; Matching open within window, temporarily move to or highlight
+ ;; char after blinkpos but only if `blink-matching-paren-on-screen'
;; is non-nil.
(and blink-matching-paren-on-screen
(not show-paren-mode)
- (unwind-protect
- (progn
- (move-overlay blink-matching--overlay blinkpos (1+ blinkpos)
- (current-buffer))
+ (if (eq blink-matching-paren 'jump)
+ (save-excursion
+ (goto-char blinkpos)
(sit-for blink-matching-delay))
- (delete-overlay blink-matching--overlay))))
+ (unwind-protect
+ (progn
+ (move-overlay blink-matching--overlay blinkpos (1+ blinkpos)
+ (current-buffer))
+ (sit-for blink-matching-delay))
+ (delete-overlay blink-matching--overlay)))))
(t
(save-excursion
(goto-char blinkpos)
;;; startup.el --- process Emacs shell arguments -*- lexical-binding: t -*-
-;; Copyright (C) 1985-1986, 1992, 1994-2014 Free Software Foundation,
-;; Inc.
+;; Copyright (C) 1985-1986, 1992, 1994-2014 Free Software Foundation, Inc.
;; Maintainer: emacs-devel@gnu.org
;; Keywords: internal
"Normal hook run after loading init files and handling the command line.")
(defvar term-setup-hook nil
- "Normal hook run after loading terminal-specific Lisp code.
-It also follows `emacs-startup-hook'. This hook exists for users to set,
-so as to override the definitions made by the terminal-specific file.
-Emacs never sets this variable itself.")
+ "Normal hook run immediately after `emacs-startup-hook'.
+In new code, there is no reason to use this instead of `emacs-startup-hook'.
+If you want to execute terminal-specific Lisp code, for example
+to override the definitions made by the terminal-specific file,
+see `tty-setup-hook'.")
+
+(make-obsolete-variable 'term-setup-hook
+ "use either `emacs-startup-hook' or \
+`tty-setup-hook' instead." "24.4")
(defvar inhibit-startup-hooks nil
"Non-nil means don't run `term-setup-hook' and `emacs-startup-hook'.
;; Load library for our terminal type.
;; User init file can set term-file-prefix to nil to prevent this.
(unless (or noninteractive
- initial-window-system)
- (tty-run-terminal-initialization (selected-frame)))
+ initial-window-system
+ (daemonp))
+ (tty-run-terminal-initialization (selected-frame) nil t))
;; Update the out-of-memory error message based on user's key bindings
;; for save-some-buffers.
\"P c #FFFF0000FFFF\",
\". c #45458B8B0000\",
/* pixels */\n"
- "The header to all xpm buffers created by strokes.")
+ "The header to all XPM buffers created by strokes.")
;;; user variables...
(defcustom strokes-character ?@
"Character used when drawing strokes in the strokes buffer.
-\(The default is `@', which works well.\)"
+\(The default is `@', which works well.)"
:type 'character
:group 'strokes)
(defvar strokes-last-stroke nil
"Last stroke entered by the user.
-Its value gets set every time the function
-`strokes-fill-stroke' gets called,
-since that is the best time to set the variable.")
+Its value gets set every time the function `strokes-fill-stroke'
+gets called, since that is the best time to set the variable.")
(defvar strokes-global-map '()
"Association list of strokes and their definitions.
Each entry is (STROKE . COMMAND) where STROKE is itself a list of
coordinates (X . Y) where X and Y are lists of positions on the
-normalized stroke grid, with the top left at (0 . 0). COMMAND is the
-corresponding interactive function.")
+normalized stroke grid, with the top left at (0 . 0). COMMAND is
+the corresponding interactive function.")
(defvar strokes-load-hook nil
"Functions to be called when Strokes is loaded.")
(* x x))
(defsubst strokes-distance-squared (p1 p2)
- "Gets the distance (squared) between to points P1 and P2.
+ "Compute the distance (squared) between to points P1 and P2.
P1 and P2 are cons cells in the form (X . Y)."
(let ((x1 (car p1))
(y1 (cdr p1))
;;;###autoload
(defun strokes-global-set-stroke (stroke command)
"Interactively give STROKE the global binding as COMMAND.
-Operated just like `global-set-key', except for strokes.
-COMMAND is a symbol naming an interactively-callable function. STROKE
-is a list of sampled positions on the stroke grid as described in the
+Works just like `global-set-key', except for strokes. COMMAND is
+a symbol naming an interactively-callable function. STROKE is a
+list of sampled positions on the stroke grid as described in the
documentation for the `strokes-define-stroke' function.
See also `strokes-global-set-stroke-string'."
(defun strokes-global-set-stroke-string (stroke string)
"Interactively give STROKE the global binding as STRING.
-Operated just like `global-set-key', except for strokes. STRING
+Works just like `global-set-key', except for strokes. STRING
is a string to be inserted by the stroke. STROKE is a list of
sampled positions on the stroke grid as described in the
documentation for the `strokes-define-stroke' function.
(defun strokes-get-grid-position (stroke-extent position &optional grid-resolution)
"Map POSITION to a new grid position.
Do so based on its STROKE-EXTENT and GRID-RESOLUTION.
-STROKE-EXTENT as a list \(\(XMIN . YMIN\) \(XMAX . YMAX\)\).
+STROKE-EXTENT is a list ((XMIN . YMIN) (XMAX . YMAX)).
If POSITION is a `strokes-lift', then it is itself returned.
Optional GRID-RESOLUTION may be used in place of `strokes-grid-resolution'.
The grid is a square whose dimension is [0,GRID-RESOLUTION)."
y))))))))))
(defun strokes-rate-stroke (stroke1 stroke2)
- "Rates STROKE1 with STROKE2 and return a score based on a distance metric.
+ "Rate STROKE1 with STROKE2 and return a score based on a distance metric.
Note: the rating is an error rating, and therefore, a return of 0
represents a perfect match. Also note that the order of stroke
arguments is order-independent for the algorithm used here."
The command will be executed provided one exists for that stroke,
based on the variable `strokes-minimum-match-score'.
If no stroke matches, nothing is done and return value is nil."
+ ;; FIXME: Undocument return value. It is not documented for all cases,
+ ;; and doesn't allow to difference between no stroke matches and
+ ;; command-execute returning nil, anyway.
(let* ((match (strokes-match-stroke stroke strokes-global-map))
(command (car match))
(score (cdr match)))
package lets you program in simple and complex (multi-lift) strokes.
The only difference is how you *invoke* the two. You will most likely
use simple strokes, as complex strokes were developed for
-Chinese/Japanese/Korean. So the shifted middle mouse button (S-mouse-2) will
-invoke the command `strokes-do-stroke'.
+Chinese/Japanese/Korean. So the shifted middle mouse button (S-mouse-2)
+will invoke the command `strokes-do-stroke'.
If ever you define a stroke which you don't like, then you can unset
it with the command
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
+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
be running a version of Emacs with XPM support. You use the binding
to `strokes-compose-complex-stroke' to start drawing your strokes.
These are just complex strokes, and thus continue drawing with mouse-1
-or mouse-2 and end with mouse-3. Then the stroke image gets inserted
+or mouse-2 and end with mouse-3. Then the stroke image gets inserted
into the buffer. You treat it somewhat like any other character,
which you can copy, paste, delete, move, etc. When all is done, you
may want to send the file, or save it. This is done with
(not strokes-use-strokes-buffer))))
(defun strokes-xpm-for-stroke (&optional stroke bufname b/w-only)
- "Create an XPM pixmap for the given STROKE in buffer ` *strokes-xpm*'.
+ "Create an XPM pixmap for the given STROKE in buffer \" *strokes-xpm*\".
If STROKE is not supplied, then `strokes-last-stroke' will be used.
Optional BUFNAME to name something else.
The pixmap will contain time information via rainbow dot colors
;;;###autoload
(defun strokes-list-strokes (&optional chronological strokes-map)
"Pop up a buffer containing an alphabetical listing of strokes in STROKES-MAP.
-With CHRONOLOGICAL prefix arg \(\\[universal-argument]\) list strokes
-chronologically by command name.
+With CHRONOLOGICAL prefix arg (\\[universal-argument]) list strokes chronologically
+by command name.
If STROKES-MAP is not given, `strokes-global-map' will be used instead."
(interactive "P")
(setq strokes-map (or strokes-map
(define-minor-mode strokes-mode
"Toggle Strokes mode, a global minor mode.
With a prefix argument ARG, enable Strokes mode if ARG is
-positive, and disable it otherwise. If called from Lisp, enable
-the mode if ARG is omitted or nil.
+positive, and disable it otherwise. If called from Lisp,
+enable the mode if ARG is omitted or nil.
\\<strokes-mode-map>
Strokes are pictographic mouse gestures which invoke commands.
(defun strokes-xpm-to-compressed-string (&optional xpm-buffer)
"Convert XPM in XPM-BUFFER to compressed string representing the stroke.
-XPM-BUFFER defaults to ` *strokes-xpm*'."
+XPM-BUFFER defaults to \" *strokes-xpm*\"."
(with-current-buffer (setq xpm-buffer (or xpm-buffer " *strokes-xpm*"))
(goto-char (point-min))
(search-forward "/* pixels */") ; skip past header junk
(defun strokes-xpm-for-compressed-string (compressed-string &optional bufname)
"Convert the stroke represented by COMPRESSED-STRING into an XPM.
-Store XPM in buffer BUFNAME if supplied \(default is ` *strokes-xpm*'\)"
+Store XPM in buffer BUFNAME if supplied (default is \" *strokes-xpm*\")"
(or bufname (setq bufname " *strokes-xpm*"))
(with-current-buffer (get-buffer-create bufname)
(erase-buffer)
to the next hook function, if any. The last (or \"outermost\")
FUN is then called once."
(declare (indent 2) (debug (form sexp body))
- (obsolete "use a <foo>-function variable modified by add-function."
+ (obsolete "use a <foo>-function variable modified by `add-function'."
"24.4"))
;; We need those two gensyms because CL's lexical scoping is not available
;; for function arguments :-(
;; ¡Beware! when I tried to edebug this code, Emacs got into a weird state
;; where all the keys were unbound (i.e. it somehow got triggered
;; within read-key, apparently). I had to kill it.
- (let ((answer 'recenter))
+ (let ((answer 'recenter)
+ (padded (lambda (prompt &optional dialog)
+ (let ((l (length prompt)))
+ (concat prompt
+ (if (or (zerop l) (eq ?\s (aref prompt (1- l))))
+ "" " ")
+ (if dialog "" "(y or n) "))))))
(cond
(noninteractive
- (setq prompt (concat prompt
- (if (or (zerop (length prompt))
- (eq ?\s (aref prompt (1- (length prompt)))))
- "" " ")
- "(y or n) "))
+ (setq prompt (funcall padded prompt))
(let ((temp-prompt prompt))
(while (not (memq answer '(act skip)))
(let ((str (read-string temp-prompt)))
((and (display-popup-menus-p)
(listp last-nonmenu-event)
use-dialog-box)
- (setq answer
- (x-popup-dialog t `(,prompt ("Yes" . act) ("No" . skip)))))
+ (setq prompt (funcall padded prompt t)
+ answer (x-popup-dialog t `(,prompt ("Yes" . act) ("No" . skip)))))
(t
- (setq prompt (concat prompt
- (if (or (zerop (length prompt))
- (eq ?\s (aref prompt (1- (length prompt)))))
- "" " ")
- "(y or n) "))
+ (setq prompt (funcall padded prompt))
(while
(let* ((scroll-actions '(recenter scroll-up scroll-down
scroll-other-window scroll-other-window-down))
(discard-input))))
(let ((ret (eq answer 'act)))
(unless noninteractive
- ;; FIXME this prints one too many spaces, since prompt
- ;; already ends in a space. Eg "... (y or n) y".
- (message "%s %s" prompt (if ret "y" "n")))
+ (message "%s%c" prompt (if ret ?y ?n)))
ret)))
\f
;; Copyright (C) 1994-1995, 2001-2014 Free Software Foundation, Inc.
-;; Author: David K}gedal <davidk@lysator.liu.se>
+;; Author: David Kågedal <davidk@lysator.liu.se>
;; Created: 16 Feb 1994
-;; K}gedal's last version number: 1.2.4
+;; Kågedal's last version number: 1.2.4
;; Keywords: extensions, languages, tools
;; This file is part of GNU Emacs.
(if tempo-leave-completion-buffer
(with-output-to-temp-buffer "*Completions*"
(display-completion-list
- (all-completions string tag-list)
- string))
+ (completion-hilit-commonality (all-completions string tag-list)
+ (length string))))
(save-window-excursion
(with-output-to-temp-buffer "*Completions*"
(display-completion-list
- (all-completions string tag-list)
- string))
+ (completion-hilit-commonality (all-completions string tag-list)
+ (length string))))
(sit-for 32767))))
;;;
(provide 'tempo)
;;; tempo.el ends here
+
+;; Local Variables:
+;; coding: utf-8
+;; End:
;;;; Command line argument handling.
(defvar x-invocation-args)
-(defvar ns-command-line-resources nil) ; FIXME unused?
+;; Set in term/common-win.el; currently unused by Nextstep's x-open-connection.
+(defvar x-command-line-resources)
;; nsterm.m.
(defvar ns-input-file)
(format "Creation of the standard fontset failed: %s" err)
:error)))
- (x-open-connection (system-name) nil t)
+ (x-open-connection (system-name) x-command-line-resources t)
;; Add GNUstep menu items Services, Hide and Quit. Rename Help to Info
;; and put it first (i.e. omit from menu-bar-final-items.
(scroll-up n))
(defun kill-region-and-unmark (beg end)
- "Like kill-region, but pops the mark [which equals point, anyway.]"
+ "Like `kill-region', but pops the mark [which equals point, anyway.]"
(interactive "r")
(kill-region beg end)
(setq this-command 'kill-region-and-unmark)
;; for you to put your own bindings in.
(defvar sun-raw-prefix-hooks nil
- "List of forms to evaluate after setting sun-raw-prefix.")
-(make-obsolete-variable 'sun-raw-prefix-hooks 'term-setup-hook "21.1")
+ "List of forms to evaluate after setting `sun-raw-prefix'.")
+;; Obsolete since 21.1, but tty-setup-hook only exists since 24.4.
+(make-obsolete-variable 'sun-raw-prefix-hooks 'tty-setup-hook "21.1")
\f
(global-set-key [f7] 'enlarge-window)
(when sun-raw-prefix-hooks
- (message "sun-raw-prefix-hooks is obsolete! Use term-setup-hook instead!")
+ (message "sun-raw-prefix-hooks is obsolete! Use %s instead!"
+ (or (car-safe (get 'sun-raw-prefix-hooks 'byte-obsolete-variable))
+ "emacs-startup-hook"))
(let ((hooks sun-raw-prefix-hooks))
(while hooks
(eval (car hooks))
;;; wyse50.el --- terminal support code for Wyse 50
-;; Copyright (C) 1989, 1993-1994, 2001-2014 Free Software Foundation,
-;; Inc.
+;; Copyright (C) 1989, 1993-1994, 2001-2014 Free Software Foundation, Inc.
;; Author: Daniel Pfeiffer <occitan@esperanto.org>,
;; Jim Blandy <jimb@occs.cs.oberlin.edu>
(concat "\ea23R" (1+ (frame-width)) "C\eG0"))))))
(defun enable-arrow-keys ()
- "To be called by `term-setup-hook'. Overrides 6 Emacs standard keys
+ "To be called by `tty-setup-hook'. Overrides 6 Emacs standard keys
whose functions are then typed as follows:
C-a Funct Left-arrow
C-h M-?
("location") ("isbn") ("pagetotal") ("addendum") ("pubstate") ("doi")
("eprint") ("eprintclass") ("eprinttype") ("url") ("urldate")))
("InCollection" "Article in a Collection"
- (("author") ("editor") ("title") ("year" nil nil 0) ("date" nil nil 0))
+ (("author") ("title") ("year" nil nil 0) ("date" nil nil 0))
(("booktitle"))
- (("editora") ("editorb") ("editorc") ("translator") ("annotator")
+ (("editor") ("editora") ("editorb") ("editorc") ("translator") ("annotator")
("commentator") ("introduction") ("foreword") ("afterword")
("subtitle") ("titleaddon") ("maintitle") ("mainsubtitle")
("maintitleaddon") ("booksubtitle") ("booktitleaddon")
("addendum") ("pubstate") ("doi") ("eprint") ("eprintclass")
("eprinttype") ("url") ("urldate")))
("Proceedings" "Single-Volume Conference Proceedings"
- (("editor") ("title") ("year" nil nil 0) ("date" nil nil 0))
+ (("title") ("year" nil nil 0) ("date" nil nil 0))
nil
(("subtitle") ("titleaddon") ("maintitle") ("mainsubtitle")
("maintitleaddon") ("eventtitle") ("eventdate") ("venue") ("language")
+ ("editor")
("volume") ("part") ("volumes") ("series") ("number") ("note")
("organization") ("publisher") ("location") ("month")
("isbn") ("chapter") ("pages") ("pagetotal") ("addendum") ("pubstate")
("isbn") ("pagetotal") ("addendum") ("pubstate")
("doi") ("eprint") ("eprintclass") ("eprinttype") ("url") ("urldate")))
("InProceedings" "Article in Conference Proceedings"
- (("author") ("editor") ("title") ("year" nil nil 0) ("date" nil nil 0))
+ (("author") ("title") ("year" nil nil 0) ("date" nil nil 0))
(("booktitle"))
- (("subtitle") ("titleaddon") ("maintitle") ("mainsubtitle")
+ (("editor") ("subtitle") ("titleaddon") ("maintitle") ("mainsubtitle")
("maintitleaddon") ("booksubtitle") ("booktitleaddon")
("eventtitle") ("eventdate") ("venue") ("language")
("volume") ("part") ("volumes") ("series") ("number") ("note")
;; FIXME: attribute selectors don't work well because they may contain
;; strings which have already been highlighted as f-l-string-face and
;; thus prevent this highlighting from being applied (actually now that
- ;; I use `append' this should work better). But really the part of hte
+ ;; I use `append' this should work better). But really the part of the
;; selector between [...] should simply not be highlighted.
(,(concat "^\\([ \t]*[^@:{}\n][^:{}]+\\(?::" (regexp-opt css-pseudo-ids t)
"\\(?:([^)]+)\\)?[^:{\n]*\\)*\\)\\(?:\n[ \t]*\\)*{")
(defun rst-define-key (keymap key def &rest deprecated)
"Bind like `define-key' but add deprecated key definitions.
KEYMAP, KEY, and DEF are as in `define-key'. DEPRECATED key
-definitions should be in vector notation. These are defined as
-well but give an additional message."
+definitions should be in vector notation. These are defined
+as well but give an additional message."
(define-key keymap key def)
(when deprecated
(let* ((command-name (symbol-name def))
A list consisting of lists of the form (CHARACTER STYLE INDENT).
CHARACTER is the character used. STYLE is one of the symbols
-OVER-AND-UNDER or SIMPLE. INDENT is an integer giving the wanted
-indentation for STYLE OVER-AND-UNDER. CHARACTER and STYLE are
-always used when a section adornment is described. In other
-places t instead of a list stands for a transition.
+`over-and-under' or `simple'. INDENT is an integer giving the
+wanted indentation for STYLE `over-and-under'. CHARACTER and
+STYLE are always used when a section adornment is described.
+In other places, t instead of a list stands for a transition.
This sequence is consulted to offer a new adornment suggestion
when we rotate the underlines at the end of the existing
(defun rst-compare-adornments (ado1 ado2)
"Compare adornments.
Return true if both ADO1 and ADO2 adornments are equal,
-according to restructured text semantics (only the character and
-the style are compared, the indentation does not matter)."
+according to restructured text semantics (only the character
+and the style are compared, the indentation does not matter)."
(and (eq (car ado1) (car ado2))
(eq (cadr ado1) (cadr ado2))))
(defun rst-update-section (char style &optional indent)
"Unconditionally update the style of a section adornment.
-Do this using the given character CHAR, with STYLE 'simple
-or 'over-and-under, and with indent INDENT. If the STYLE
-is 'simple, whitespace before the title is removed (indent
+Do this using the given character CHAR, with STYLE `simple'
+or `over-and-under', and with indent INDENT. If the STYLE
+is `simple', whitespace before the title is removed (indent
is always assumed to be 0).
If there are existing overline and/or underline from the
If no title line is found return nil.
Otherwise return as `rst-classify-adornment' does. However, if
-the title line has no syntactically valid adornment STYLE is nil
-in the first element. If there is no adornment around the title
+the title line has no syntactically valid adornment, STYLE is nil
+in the first element. If there is no adornment around the title,
CHARACTER is also nil and match groups for overline and underline
are nil."
(save-excursion
(defvar rst-all-sections nil
"All section adornments in the buffer as found by `rst-find-all-adornments'.
-t when no section adornments were found.")
+Set to t when no section adornments were found.")
(make-variable-buffer-local 'rst-all-sections)
;; FIXME: If this variable is set to a different value font-locking of section
;; headers is wrong.
(defvar rst-section-hierarchy nil
"Section hierarchy in the buffer as determined by `rst-get-hierarchy'.
-t when no section adornments were found. Value depends on
-`rst-all-sections'.")
+Set to t when no section adornments were found.
+Value depends on `rst-all-sections'.")
(make-variable-buffer-local 'rst-section-hierarchy)
(rst-testcover-add-1value 'rst-reset-section-caches)
Adjust/rotate the section adornment for the section title around
point or promote/demote the adornments inside the region,
-depending on if the region is active. This function is meant to
-be invoked possibly multiple times, and can vary its behavior
+depending on whether the region is active. This function is meant
+to be invoked possibly multiple times, and can vary its behavior
with a positive PFXARG (toggle style), or with a negative
PFXARG (alternate behavior).
1. a CHARACTER
-2. a STYLE which can be either of 'simple' or 'over-and-under'.
+2. a STYLE which can be either `simple' or `over-and-under'.
3. an INDENT (meaningful for the over-and-under style only)
which determines how many characters and over-and-under
If the current line does have an existing adornment, but the
adornment is incomplete, that is, the underline/overline does
-not extend to exactly the end of the title line (it is either too
-short or too long), we simply extend the length of the
+not extend to exactly the end of the title line (it is either
+too short or too long), we simply extend the length of the
underlines/overlines to fit exactly the section title.
If TOGGLE-STYLE we toggle the style of the adornment as well.
Obviously, NUM must be greater than zero. Don't blame me, blame the
Romans, I mean \"what have the Romans ever _done_ for /us/?\" (with
apologies to Monty Python).
-If optional prefix ARG is non-nil, insert in current buffer."
+If optional ARG is non-nil, insert in current buffer."
(let ((map rst-arabic-to-roman)
res)
(while (and map (> num 0))
(setq res (concat res (cdar map))
num (- num (caar map)))
(setq map (cdr map))))
- res))
+ (if arg (insert (or res "")) res)))
(defun rst-roman-to-arabic (string &optional arg)
"Convert STRING of Roman numerals to an Arabic number.
-If STRING contains a letter which isn't a valid Roman numeral, the rest
-of the string from that point onwards is ignored.
+If STRING contains a letter which isn't a valid Roman numeral,
+the rest of the string from that point onwards is ignored.
Hence:
MMD == 2500
(setq res (+ res (caar map))
string (replace-match "" nil t string))
(setq map (cdr map))))
- res))
+ (if arg (insert res) res)))
;=================================================
(defun rst-find-pfx-in-region (beg end pfx-re)
;; FIXME: Isn't this a `defconst'?
(defvar rst-initial-items
(append (mapcar 'char-to-string rst-bullets) rst-initial-enums)
- "List of initial items. It's collection of bullets and enumerations.")
+ "List of initial items. It's a collection of bullets and enumerations.")
(defun rst-insert-list-new-item ()
"Insert a new list item.
-User is asked to select the item style first, for example (a), i), +. Use TAB
-for completion and choices.
+User is asked to select the item style first, for example (a), i), +.
+Use TAB for completion and choices.
If user selects bullets or #, it's just added with position arranged by
`rst-insert-list-pos'.
-If user selects enumerations, a further prompt is given. User need to input a
-starting item, for example 'e' for 'A)' style. The position is also arranged by
-`rst-insert-list-pos'."
+If user selects enumerations, a further prompt is given. User need to
+input a starting item, for example 'e' for 'A)' style. The position is
+also arranged by `rst-insert-list-pos'."
(interactive)
;; FIXME: Make this comply to `interactive' standards.
(let* ((itemstyle (completing-read
The position of the new list is arranged according to whether or not the
current line and the previous line are blank lines.
-2. When continuing a list, one thing need to be noticed:
+2. When continuing a list, one thing needs to be noticed:
List style alphabetical list, such as 'a.', and roman numerical list, such as
'i.', have some overlapping items, for example 'v.' The function can deal with
"Return section containing POINT by returning the closest node in TREE.
TREE is a section tree as returned by `rst-section-tree'
consisting of (NODE CHILD...) entries. POINT defaults to the
-current point. A NODE must have the structure (IGNORED MARKER
-...).
+current point. A NODE must have the structure (IGNORED MARKER...).
Return (PATH NODE CHILD...). NODE is the node where POINT is in
if any. PATH is a list of nodes from the top of the tree down to
-and including NODE. List of CHILD are the children of NODE if
-any."
+and including NODE. List of CHILD are the children of NODE if any."
(setq point (or point (point)))
(let ((cur (car tree))
(children (cdr tree)))
"Insertion style for table-of-contents.
Set this to one of the following values to determine numbering and
indentation style:
-- plain: no numbering (fixed indentation)
-- fixed: numbering, but fixed indentation
-- aligned: numbering, titles aligned under each other
-- listed: numbering, with dashes like list items (EXPERIMENTAL)"
+- `plain': no numbering (fixed indentation)
+- `fixed': numbering, but fixed indentation
+- `aligned': numbering, titles aligned under each other
+- `listed': numbering, with dashes like list items (EXPERIMENTAL)"
:type '(choice (const plain)
(const fixed)
(const aligned)
(defun rst-toc-insert-node (node level indent pfx)
"Insert tree node NODE in table-of-contents.
-Recursive function that does printing of the inserted toc.
+Recursive function that does printing of the inserted TOC.
LEVEL is the depth level of the sections in the tree.
INDENT is the indentation string. PFX is the prefix numbering,
that includes the alignment necessary for all the children of
;; paragraph.
(defun rst-goto-section (&optional kill)
"Go to the section the current line describes.
-If KILL a toc buffer is destroyed."
+If KILL a TOC buffer is destroyed."
(interactive)
(let ((pos (rst-toc-mode-find-section)))
(when kill
(defun rst-forward-section (&optional offset)
"Skip to the next reStructuredText section title.
-OFFSET specifies how many titles to skip. Use a negative OFFSET to move
-backwards in the file (default is to use 1)."
+OFFSET specifies how many titles to skip. Use a negative OFFSET
+to move backwards in the file (default is to use 1)."
(interactive)
(rst-reset-section-caches)
(let* (;; Default value for offset.
(defgroup rst-indent nil "Settings for indentation in reStructuredText.
In reStructuredText indentation points are usually determined by
-preceding lines. Sometimes the syntax allows arbitrary
-indentation points such as where to start the first line
-following a directive. These indentation widths can be customized
-here."
+preceding lines. Sometimes the syntax allows arbitrary indentation
+points such as where to start the first line following a directive.
+These indentation widths can be customized here."
:group 'rst
:package-version '(rst . "1.1.0"))
(defun rst-compute-tabs (pt)
"Build the list of possible tabs for all lines above.
-Search backwards from point PT to build the list of possible
-tabs. Return a list of tabs sorted by likeliness to continue
-writing like `rst-line-tabs'. Nearer lines have generally a
-higher likeliness than farther lines. Return nil if no tab is found
-in the text above."
+Search backwards from point PT to build the list of possible tabs.
+Return a list of tabs sorted by likeliness to continue writing
+like `rst-line-tabs'. Nearer lines have generally a higher
+likeliness than farther lines. Return nil if no tab is found in
+the text above."
(save-excursion
(goto-char pt)
(let (leftmost ; Leftmost column found so far.
(indent-line-to ind)
(insert (comment-string-strip comment-start t t))))))
-(defun rst-uncomment-region (beg end &optional arg)
+(defun rst-uncomment-region (beg end &optional _arg)
"Uncomment the current region.
Region is from BEG to END. ARG is ignored"
(save-excursion
(defvar rst-font-lock-find-unindented-line-end nil
"End of the match as determined by `rst-font-lock-find-unindented-line-limit'.
-Also used as a trigger for
-`rst-font-lock-find-unindented-line-match'.")
+Also used as a trigger for `rst-font-lock-find-unindented-line-match'.")
(defun rst-font-lock-find-unindented-line-limit (ind-pnt)
"Find the next unindented line relative to indentation at IND-PNT.
If IND-PNT is `next' take the indentation from the next line if
this is not empty and indented more than the current one. If
IND-PNT is non-nil but not a number take the indentation from the
-next non-empty line if this is indented more than the current
-one."
+next non-empty line if this is indented more than the current one."
(setq rst-font-lock-find-unindented-line-begin ind-pnt)
(setq rst-font-lock-find-unindented-line-end
(save-excursion
(or (rst-forward-indented-block nil (point-max))
(point-max))))))
-(defun rst-font-lock-find-unindented-line-match (limit)
+(defun rst-font-lock-find-unindented-line-match (_limit)
"Set the match found earlier if match were found.
-Match has been found by
-`rst-font-lock-find-unindented-line-limit' the first time called
-or no match is found. Return non-nil if match was found. LIMIT
-is not used but mandated by the caller."
+Match has been found by `rst-font-lock-find-unindented-line-limit'
+the first time called or no match is found. Return non-nil if
+match was found. LIMIT is not used but mandated by the caller."
(when rst-font-lock-find-unindented-line-end
(set-match-data
(list rst-font-lock-find-unindented-line-begin
(defun rst-adornment-level (key)
"Return section level for adornment KEY.
-KEY is the first element of the return list of
-`rst-classify-adornment'. If KEY is not a cons return it. If KEY is found
-in the hierarchy return its level. Otherwise return a level one
-beyond the existing hierarchy."
+KEY is the first element of the return list of `rst-classify-adornment'.
+If KEY is not a cons return it. If KEY is found in the hierarchy return
+its level. Otherwise return a level one beyond the existing hierarchy."
(if (not (consp key))
key
(let* ((hier (rst-get-hierarchy))
(defun rst-font-lock-handle-adornment-pre-match-form (ado ado-end)
"Determine limit for adornments.
Determine all things necessary for font-locking section titles
-and transitions and put the result to
-`rst-font-lock-adornment-match' and
-`rst-font-lock-adornment-level'. ADO is the complete adornment
+and transitions and put the result to `rst-font-lock-adornment-match'
+and `rst-font-lock-adornment-level'. ADO is the complete adornment
matched. ADO-END is the point where ADO ends. Return the point
where the whole adorned construct ends.
(goto-char (nth 1 ado-data)) ; Beginning of construct.
(nth 2 ado-data)))) ; End of construct.
-(defun rst-font-lock-handle-adornment-matcher (limit)
+(defun rst-font-lock-handle-adornment-matcher (_limit)
"Set the match found earlier if match were found.
Match has been found by
`rst-font-lock-handle-adornment-pre-match-form' the first time
(defun rst-compile (&optional use-alt)
"Compile command to convert reST document into some output file.
Attempts to find configuration file, if it can, overrides the
-options. There are two commands to choose from, with USE-ALT,
+options. There are two commands to choose from; with USE-ALT,
select the alternative tool-set."
(interactive "P")
;; Note: maybe we want to check if there is a Makefile too and not do anything
a))
(defun rst-imenu-convert-cell (elt adornments)
- "Convert a cell ELT in a tree returned from `rst-section-tree' to imenu index.
+ "Convert a cell ELT in a tree returned from `rst-section-tree' to Imenu index.
ADORNMENTS is used as hint information for conversion."
(let* ((kar (car elt))
(kdr (cdr elt))
;; FIXME: Document title and subtitle need to be handled properly. They should
;; get an own "Document" top level entry.
(defun rst-imenu-create-index ()
- "Create index for imenu.
+ "Create index for Imenu.
Return as described for `imenu--index-alist'."
(rst-reset-section-caches)
(let ((tree (rst-section-tree))
;; be useful for creating separators.
(defun rst-repeat-last-character (use-next)
"Fill the current line using the last character on the current line.
-Fill up to the length of the preceding line or up to
-`fill-column' if preceding line is empty.
+Fill up to the length of the preceding line or up to `fill-column' if preceding
+line is empty.
If USE-NEXT, use the next line rather than the preceding line.
;; Copyright (C) 1985-1986, 2001-2014 Free Software Foundation, Inc.
+;; Author: Richard King
+;; (according to authors.el)
;; Maintainer: emacs-devel@gnu.org
;; Keywords: internal
;; Package: emacs
(defcustom cvs-auto-remove-handled nil
"If up-to-date files should be acknowledged automatically.
-If T, they will be removed from the *cvs* buffer after every command.
-If DELAYED, they will be removed from the *cvs* buffer before every command.
-If STATUS, they will only be removed after a `cvs-mode-status' command.
+If t, they will be removed from the *cvs* buffer after every command.
+If `delayed', they will be removed from the *cvs* buffer before every command.
+If `status', they will only be removed after a `cvs-mode-status' command.
Else, they will never be automatically removed from the *cvs* buffer."
:group 'pcl-cvs
:type '(choice (const nil) (const status) (const delayed) (const t)))
(defcustom cvs-auto-remove-directories 'handled
- "If ALL, directory entries will never be shown.
-If HANDLED, only non-handled directories will be shown.
-If EMPTY, only non-empty directories will be shown."
+ "If `all', directory entries will never be shown.
+If `handled', only non-handled directories will be shown.
+If `empty', only non-empty directories will be shown."
:group 'pcl-cvs
:type '(choice (const :tag "No" nil) (const all) (const handled) (const empty)))
Normally they run on the files that are marked (with `cvs-mode-mark'),
or the file under the cursor if no files are marked. If this variable
is set to a non-nil value they will by default run on the file on the
-current line. See also `cvs-invert-ignore-marks'"
+current line. See also `cvs-invert-ignore-marks'."
:group 'pcl-cvs
:type '(boolean))
(if (fboundp 'ediff)
'(cvs-ediff-diff . cvs-ediff-merge)
'(cvs-emerge-diff . cvs-emerge-merge))
- "Pair of functions to be used for resp. diff'ing and merg'ing interactively."
+ "Pair of functions to be used for resp. diff'ing and merg'ing interactively."
:group 'pcl-cvs
:type '(choice (const :tag "Ediff" (cvs-ediff-diff . cvs-ediff-merge))
(const :tag "Emerge" (cvs-emerge-diff . cvs-emerge-merge))))
(defcustom cvs-reuse-cvs-buffer 'subdir
"When to reuse an existing cvs buffer.
Alternatives are:
- CURRENT: just reuse the current buffer if it is a cvs buffer
- SAMEDIR: reuse any cvs buffer displaying the same directory
- SUBDIR: or reuse any cvs buffer displaying any sub- or super- directory
- ALWAYS: reuse any cvs buffer."
+ `current': just reuse the current buffer if it is a cvs buffer
+ `samedir': reuse any cvs buffer displaying the same directory
+ `subdir': or reuse any cvs buffer displaying any sub- or super- directory
+ `always': reuse any cvs buffer."
:group 'pcl-cvs
:type '(choice (const always) (const subdir) (const samedir) (const current)))
t)
"Whether cvs commands should be executed a directory at a time.
If a list, specifies for which commands the single-dir mode should be used.
-If T, single-dir mode should be used for all operations.
+If t, single-dir mode should be used for all operations.
CVS versions before 1.10 did not allow passing them arguments in different
-directories, so pcl-cvs checks what version you're using to determine
+directories, so PCL-CVS checks what version you're using to determine
whether to use the new feature or not.
Sadly, even with a new cvs executable, if you connect to an older cvs server
\(typically a cvs-1.9 on the server), the old restriction applies. In such
-a case the sanity check made by pcl-cvs fails and you will have to manually
+a case the sanity check made by PCL-CVS fails and you will have to manually
set this variable to t (until the cvs server is upgraded).
-When the above problem occurs, pcl-cvs should (hopefully) catch cvs' error
+When the above problem occurs, PCL-CVS should (hopefully) catch cvs' error
message and replace it with a message telling you to change this variable.")
;;
(easy-mmode-defmap cvs-status-map
'(([(mouse-2)] . cvs-mode-toggle-mark))
- "Local keymap for text properties of status")
+ "Local keymap for text properties of status.")
;; Constructor:
(DEAD )
(MESSAGE))
"Fileinfo state descriptions for pcl-cvs.
-This is an assoc list. Each element consists of (STATE . FUNS)
-- STATE (described in `cvs-create-fileinfo') is the key
+This is an assoc list. Each element consists of (STATE . FUNS):
+- STATE (described in `cvs-create-fileinfo') is the key.
- FUNS is the list of applicable operations.
The first one (if any) should be the \"default\" action.
Most of the actions have the obvious meaning.
(defun cvs-fileinfo-pp (fileinfo)
"Pretty print FILEINFO. Insert a printed representation in current buffer.
-For use by the cookie package."
+For use by the ewoc package."
(cvs-check-fileinfo fileinfo)
(let ((type (cvs-fileinfo->type fileinfo))
(subtype (cvs-fileinfo->subtype fileinfo)))
(defun cvs-fileinfo-from-entries (dir &optional all)
"List of fileinfos for DIR, extracted from CVS/Entries.
-Unless ALL is optional, returns only the files that are not up-to-date.
+Unless ALL is non-nil, returns only the files that are not up-to-date.
DIR can also be a file."
(let* ((singlefile
(cond
TYPE can either be a type symbol or a cons of the form (TYPE . SUBTYPE).
PATH is the filename.
DIRECTORY influences the way PATH is interpreted:
-- if it's a string, it denotes the directory in which PATH (which should then be
+- if a string, it denotes the directory in which PATH (which should then be
a plain file name with no directory component) resides.
- if it's nil, the PATH should not be trusted: if it has a directory
component, use it, else, assume it is relative to the current directory.
-- else, the PATH should be trusted to be relative to the root
- directory (i.e. if there is no directory component, it means the file
- is inside the main directory).
+- else, the PATH should be trusted to be relative to the root directory
+ (i.e. if there is no directory component, it means the file is inside
+ the main directory).
The remaining KEYS are passed directly to `cvs-create-fileinfo'."
(let ((dir directory)
(file path))
Optional argument DESC will be used for the prompt.
If ARG (or a prefix argument) is nil, just use the 0th default.
If it is a non-negative integer, use the corresponding default.
-If it is a negative integer query for a new value of the corresponding
+If it is a negative integer, query for a new value of the corresponding
default and return that new value.
If it is \\[universal-argument], just query and return a value without
altering the defaults.
(nth numarg defaults))))
(defsubst cvs-flags-set (sym index value)
- "Set SYM's INDEX'th setting to VALUE."
+ "Set SYM's INDEXth setting to VALUE."
(setf (nth index (cvs-flags-defaults (symbol-value sym))) value))
;;;;
"Set the cvs-prefix contained in SYM.
If ARG is between 0 and 9, it selects the corresponding default.
If ARG is negative (or \\[universal-argument] which corresponds to negative 0),
- it queries the user and sets the -ARG'th default.
+ it queries the user and sets the -ARGth default.
If ARG is greater than 9 (or \\[universal-argument] \\[universal-argument]),
the (ARG mod 10)'th prefix is made persistent.
If ARG is nil toggle the PREFIX's value between its 0th default and nil
(defun cvs-temp-buffer (&optional cmd normal nosetup)
"Create a temporary buffer to run CMD in.
If CMD is a string, use it to lookup `cvs-buffer-name-alist' to find
-the buffer name to be used and its `major-mode'.
+the buffer name to be used and its major mode.
The selected window will not be changed. The new buffer will not maintain undo
information and will be read-only unless NORMAL is non-nil. It will be emptied
-\(unless NOSETUP is non-nil\) and its `default-directory' will be inherited
+\(unless NOSETUP is non-nil) and its `default-directory' will be inherited
from the current buffer."
(let* ((cvs-buf (current-buffer))
(info (cdr (assoc cmd cvs-buffer-name-alist)))
ARGS and DOCSTRING are the normal argument list.
INTERACT is the interactive specification or nil for non-commands.
-STYLE can be either SIMPLE, NOARGS or DOUBLE. It's an error for it
+STYLE can be either `SIMPLE', `NOARGS' or `DOUBLE'. It's an error for it
to have any other value, unless other details of the function make it
clear what alternative to use.
-- SIMPLE will get all the interactive arguments from the original buffer.
-- NOARGS will get all the arguments from the *cvs* buffer and will
+- `SIMPLE' will get all the interactive arguments from the original buffer.
+- `NOARGS' will get all the arguments from the *cvs* buffer and will
always behave as if called interactively.
-- DOUBLE is the generic case."
+- `DOUBLE' is the generic case."
(declare (debug (&define sexp lambda-list stringp
("interactive" interactive) def-body))
(doc-string 3))
(setq rerun t)))))
(defun cvs-get-cvsroot ()
- "Gets the CVSROOT for DIR."
+ "Get the CVSROOT for DIR."
(let ((cvs-cvsroot-file (expand-file-name "Root" "CVS")))
(or (cvs-file-to-string cvs-cvsroot-file t)
cvs-cvsroot
;;;###autoload
(defun cvs-checkout (modules dir flags &optional root)
- "Run a 'cvs checkout MODULES' in DIR.
+ "Run a `cvs checkout MODULES' in DIR.
Feed the output to a *cvs* buffer, display it in the current window,
and run `cvs-mode' on it.
:noexist t)))
(defun-cvs-mode (cvs-mode-checkout . NOARGS) (dir)
- "Run cvs checkout against the current branch.
+ "Run `cvs checkout' against the current branch.
The files are stored to DIR."
(interactive
(let* ((branch (cvs-prefix-get 'cvs-branch-prefix))
:noshow noshow :dont-change-disc t))
(defun cvs-update-filter (proc string)
- "Filter function for pcl-cvs.
+ "Filter function for PCL-CVS.
This function gets the output that CVS sends to stdout. It inserts
the STRING into (process-buffer PROC) but it also checks if CVS is waiting
for a lock file. If so, it inserts a message cookie in the *cvs* buffer."
(defun-cvs-mode cvs-mode-mark (&optional arg)
"Mark the fileinfo on the current line.
If the fileinfo is a directory, all the contents of that directory are
-marked instead. A directory can never be marked."
+marked instead. A directory can never be marked."
(interactive)
(let* ((tin (ewoc-locate cvs-cookies))
(fi (ewoc-data tin)))
(nreverse fis)))
(cl-defun cvs-mode-marked (filter &optional cmd
- &key read-only one file noquery)
+ &key read-only one file noquery)
"Get the list of marked FIS.
CMD is used to determine whether to use the marks or not.
Only files for which FILTER is applicable are returned.
(defun-cvs-mode (cvs-mode-diff-head . SIMPLE) (flags)
"Diff the selected files against the head of the current branch.
-See ``cvs-mode-diff'' for more info."
+See `cvs-mode-diff' for more info."
(interactive (list (cvs-flags-query 'cvs-diff-flags "cvs diff flags")))
(cvs-mode-diff-1 (cons "-rHEAD" flags)))
(defun-cvs-mode (cvs-mode-diff-repository . SIMPLE) (flags)
"Diff the files for changes in the repository since last co/update/commit.
-See ``cvs-mode-diff'' for more info."
+See `cvs-mode-diff' for more info."
(interactive (list (cvs-flags-query 'cvs-diff-flags "cvs diff flags")))
(cvs-mode-diff-1 (cons "-rBASE" (cons "-rHEAD" flags))))
(defun-cvs-mode (cvs-mode-diff-yesterday . SIMPLE) (flags)
"Diff the selected files against yesterday's head of the current branch.
-See ``cvs-mode-diff'' for more info."
+See `cvs-mode-diff' for more info."
(interactive (list (cvs-flags-query 'cvs-diff-flags "cvs diff flags")))
(cvs-mode-diff-1 (cons "-Dyesterday" flags)))
(defun-cvs-mode (cvs-mode-diff-vendor . SIMPLE) (flags)
"Diff the selected files against the head of the vendor branch.
-See ``cvs-mode-diff'' for more info."
+See `cvs-mode-diff' for more info."
(interactive (list (cvs-flags-query 'cvs-diff-flags "cvs diff flags")))
(cvs-mode-diff-1 (cons (concat "-r" cvs-vendor-branch) flags)))
FILTER is passed to `cvs-applicable-p' to only apply the command to
files for which it makes sense.
SHOW indicates that CMD should be not be run in the default temp buffer and
- should be shown to the user. The buffer and mode to be used is determined
+ should be shown to the user. The buffer and mode to be used are determined
by `cvs-buffer-name-alist'.
DONT-CHANGE-DISC non-nil indicates that the command will not change the
contents of files. This is only used by the parser."
(defun cvs-mode-view-file-other-window (e)
- "View the file."
+ "View the file in another window."
(interactive (list last-input-event))
(cvs-mode-find-file e t t))
;; Byte compile files.
(defun-cvs-mode cvs-mode-byte-compile-files ()
- "Run byte-compile-file on all selected files that end in '.el'."
+ "Run byte-compile-file on all selected files with '.el' extension."
(interactive)
(let ((marked (cvs-get-marked (cvs-ignore-marks-p "byte-compile"))))
(dolist (fi marked)
\f
(defun cvs-change-cvsroot (newroot)
- "Change the cvsroot."
+ "Change the CVSROOT."
(interactive "DNew repository: ")
(if (or (file-directory-p (expand-file-name "CVSROOT" newroot))
(y-or-n-p (concat "Warning: no CVSROOT found inside repository."
(defcustom cvs-dired-use-hook '(4)
"Whether or not opening a CVS directory should run PCL-CVS.
A value of nil means never do it.
-ALWAYS means to always do it unless a prefix argument is given to the
+`always' means to always do it unless a prefix argument is given to the
command that prompted the opening of the directory.
Anything else means to do it only if the prefix arg is equal to this value."
:group 'pcl-cvs
The difference to vc-do-command is that this function always invokes
`vc-git-program'."
(apply 'vc-do-command (or buffer "*vc*") okstatus vc-git-program
- file-or-list (cons "--no-pager" flags)))
+ ;; http://debbugs.gnu.org/16897
+ (unless (and (not (cdr-safe file-or-list))
+ (let ((file (or (car-safe file-or-list)
+ file-or-list)))
+ (and file
+ (eq ?/ (aref file (1- (length file))))
+ (equal file (vc-git-root file)))))
+ file-or-list)
+ (cons "--no-pager" flags)))
(defun vc-git--empty-db-p ()
"Check if the git db is empty (no commit done yet)."
;; Return the window.
window))))
-;; Doc is very similar to with-output-to-temp-buffer.
(defmacro with-temp-buffer-window (buffer-or-name action quit-function &rest body)
"Bind `standard-output' to BUFFER-OR-NAME, eval BODY, show the buffer.
-BUFFER-OR-NAME must specify either a live buffer, or the name of a
-buffer (if it does not exist, this macro creates it).
+BUFFER-OR-NAME must specify either a live buffer, or the name of
+a buffer (if it does not exist, this macro creates it).
-This construct makes buffer BUFFER-OR-NAME empty before running BODY.
-It does not make the buffer current for BODY.
-Instead it binds `standard-output' to that buffer, so that output
+Make the buffer specified by BUFFER-OR-NAME empty before running
+BODY and bind `standard-output' to that buffer, so that output
generated with `prin1' and similar functions in BODY goes into
-the buffer.
-
-At the end of BODY, this marks the specified buffer unmodified and
-read-only, and displays it in a window (but does not select it, or make
-the buffer current). The display happens by calling `display-buffer'
-with the ACTION argument. If `temp-buffer-resize-mode' is enabled,
-the relevant window shrinks automatically.
-
-This returns the value returned by BODY, unless QUIT-FUNCTION specifies
-a function. In that case, it runs the function with two arguments -
+that buffer. Do not make that buffer current for running the
+forms in BODY. Use `with-current-buffer-window' instead if you
+need to run BODY with that buffer current.
+
+At the end of BODY, mark the specified buffer unmodified and
+read-only, and display it in a window (but do not select it).
+The display happens by calling `display-buffer' passing it the
+ACTION argument. If `temp-buffer-resize-mode' is enabled, the
+corresponding window may be resized automatically.
+
+Return the value returned by BODY, unless QUIT-FUNCTION specifies
+a function. In that case, run that function with two arguments -
the window showing the specified buffer and the value returned by
-BODY - and returns the value returned by that function.
+BODY - and return the value returned by that function.
If the buffer is displayed on a new frame, the window manager may
decide to select that frame. In that case, it's usually a good
asking a `yes-or-no-p' question.
This runs the hook `temp-buffer-window-setup-hook' before BODY,
-with the specified buffer temporarily current. It runs the
-hook `temp-buffer-window-show-hook' after displaying the buffer,
-with that buffer temporarily current, and the window that was used to
+with the specified buffer temporarily current. It runs the hook
+`temp-buffer-window-show-hook' after displaying the buffer, with
+that buffer temporarily current, and the window that was used to
display it temporarily selected.
-This construct is similar to `with-output-to-temp-buffer', but
-runs different hooks. In particular, it does not run
-`temp-buffer-setup-hook', which usually puts the buffer in Help mode.
-Also, it does not call `temp-buffer-show-function' (the ACTION
+This construct is similar to `with-output-to-temp-buffer' but,
+neither runs `temp-buffer-setup-hook' which usually puts the
+buffer in Help mode, nor `temp-buffer-show-function' (the ACTION
argument replaces this)."
(declare (debug t))
(let ((buffer (make-symbol "buffer"))
(funcall ,quit-function ,window ,value)
,value))))
+(defmacro with-current-buffer-window (buffer-or-name action quit-function &rest body)
+ "Evaluate BODY with a buffer BUFFER-OR-NAME current and show that buffer.
+This construct is like `with-temp-buffer-window' but unlike that
+makes the buffer specified by BUFFER-OR-NAME current for running
+BODY."
+ (declare (debug t))
+ (let ((buffer (make-symbol "buffer"))
+ (window (make-symbol "window"))
+ (value (make-symbol "value")))
+ `(let* ((,buffer (temp-buffer-window-setup ,buffer-or-name))
+ (standard-output ,buffer)
+ ,window ,value)
+ (with-current-buffer ,buffer
+ (setq ,value (progn ,@body))
+ (setq ,window (temp-buffer-window-show ,buffer ,action)))
+
+ (if (functionp ,quit-function)
+ (funcall ,quit-function ,window ,value)
+ ,value))))
+
;; The following two functions are like `window-next-sibling' and
;; `window-prev-sibling' but the WINDOW argument is _not_ optional (so
;; they don't substitute the selected window for nil), and they return
(frame-char-size (window-normalize-window window))))
(defcustom window-min-height 4
- "The minimum number of lines of any window.
-The value has to accommodate a mode- or header-line if present.
-A value less than `window-safe-min-height' is ignored. The value
-of this variable is honored when windows are resized or split.
+ "The minimum total height, in lines, of any window.
+The value has to accommodate one text line, a mode and header
+line, and a bottom divider, if present. A value less than
+`window-safe-min-height' is ignored. The value of this variable
+is honored when windows are resized or split.
Applications should never rebind this variable. To resize a
window to a height less than the one specified here, an
(frame-char-size (window-normalize-window window) t)))
(defcustom window-min-width 10
- "The minimum number of columns of any window.
-The value has to accommodate margins, fringes, or scrollbars if
-present. A value less than `window-safe-min-width' is ignored.
-The value of this variable is honored when windows are resized or
-split.
+ "The minimum total width, in columns, of any window.
+The value has to accommodate two text columns as well as margins,
+fringes, a scroll bar and a right divider, if present. A value
+less than `window-safe-min-width' is ignored. The value of this
+variable is honored when windows are resized or split.
Applications should never rebind this variable. To resize a
window to a width less than the one specified here, an
(setq delta
(+ delta
(max
- (- (window-size sub horizontal pixelwise 'ceiling)
+ (- (window-size sub horizontal pixelwise 'floor)
(window-min-size
sub horizontal ignore pixelwise))
0)))))
(= (window-pixel-width window)
(window-pixel-width (frame-root-window window))))
-(defun window-body-size (&optional window horizontal)
+(defun window-body-size (&optional window horizontal pixelwise)
"Return the height or width of WINDOW's text area.
WINDOW must be a live window and defaults to the selected one.
If HORIZONTAL is omitted or nil, return the height of the text
area, like `window-body-height'. Otherwise, return the width of
-the text area, like `window-body-width'."
+the text area, like `window-body-width'. In either case, the
+optional argument PIXELWISE is passed to the functions."
(if horizontal
- (window-body-width window)
- (window-body-height window)))
+ (window-body-width window pixelwise)
+ (window-body-height window pixelwise)))
(defun window-current-scroll-bars (&optional window)
"Return the current scroll bar settings for WINDOW.
top edge of WINDOW as reference position.
Optional argument WRAP non-nil means to wrap DIRECTION around
-frame borders. This means to return for a WINDOW a the top of
-the frame and DIRECTION `above' to return the minibuffer window
-if the frame has one, and a window at the bottom of the frame
-otherwise.
+frame borders. This means to return for WINDOW at the top of the
+frame and DIRECTION `above' the minibuffer window if the frame
+has one, and a window at the bottom of the frame otherwise.
Optional argument MINI nil means to return the minibuffer window
if and only if it is currently active. MINI non-nil means to
;; `fit-frame-to-buffer' eventually wants to know the real frame sizes
;; counting title bar and outer borders.
(defcustom fit-frame-to-buffer nil
- "Non-nil means `fit-frame-to-buffer' can fit a frame to its buffer.
+ "Non-nil means `fit-window-to-buffer' can fit a frame to its buffer.
A frame is fit if and only if its root window is a live window
and this option is non-nil. If this is `horizontally', frames
are resized horizontally only. If this is `vertically', frames
are resized vertically only. Any other non-nil value means
-frames can be resized in both dimensions. See also
-`fit-frame-to-buffer-margins' and `fit-frame-to-buffer-sizes'.
-
-If this is non-nil and a window is the only window of its frame,
-`fit-window-to-buffer' will invoke `fit-frame-to-buffer' to fit
-the frame to its buffer."
+frames can be resized in both dimensions."
:type 'boolean
:version "24.4"
:group 'help)
(defcustom fit-frame-to-buffer-margins '(nil nil nil nil)
"Margins around frame for `fit-frame-to-buffer'.
-This list specifies the numbers of pixels to be left free on the
-left, above, the right, and below a frame that shall be fit to
-its buffer. The value specified here can be overridden for a
-specific frame by that frame's `fit-frame-to-buffer-margins'
-parameter, if present.
-
-This variable controls how fitting a frame to the size of its
-buffer coordinates with the size of your display. If you don't
-specify a value here, the size of the display's workarea is used.
-
-See also `fit-frame-to-buffer-sizes'."
+This specifies the numbers of pixels to be left free on the left,
+above, on the right, and below a frame fitted to its buffer. Set
+this to avoid obscuring other desktop objects like the taskbar.
+The default is nil for each side, which means to not add margins.
+
+The value specified here can be overridden for a specific frame
+by that frame's `fit-frame-to-buffer-margins' parameter, if
+present. See also `fit-frame-to-buffer-sizes'."
:version "24.4"
:type '(list
(choice
(<= left (- right margin)) (<= margin right))
margin))
-(defun fit-frame-to-buffer (&optional frame max-height min-height max-width min-width)
+(defun fit-frame-to-buffer (&optional frame max-height min-height max-width min-width only)
"Adjust size of FRAME to display the contents of its buffer exactly.
FRAME can be any live frame and defaults to the selected one.
Fit only if FRAME's root window is live. MAX-HEIGHT, MIN-HEIGHT,
FRAME's root window. MIN-HEIGHT and MIN-WIDTH default to the values of
`window-min-height' and `window-min-width' respectively.
-The option `fit-frame-to-buffer' controls whether this function
-has any effect. New position and size of FRAME are additionally
-determined by the options `fit-frame-to-buffer-sizes' and
+If the optional argument ONLY is `vertically', resize the frame
+vertically only. If ONLY is `horizontally', resize the frame
+horizontally only.
+
+The new position and size of FRAME can be additionally determined
+by customizing the options `fit-frame-to-buffer-sizes' and
`fit-frame-to-buffer-margins' or the corresponding parameters of
FRAME."
(interactive)
(fboundp 'display-monitor-attributes-list))
(user-error "Cannot resize frame in non-graphic Emacs"))
(setq frame (window-normalize-frame frame))
- (when (and (window-live-p (frame-root-window frame))
- fit-frame-to-buffer
- (or (not window-size-fixed)
- (and (eq window-size-fixed 'height)
- (not (eq fit-frame-to-buffer 'vertically)))
- (and (eq window-size-fixed 'width)
- (not (eq fit-frame-to-buffer 'horizontally)))))
+ (when (window-live-p (frame-root-window frame))
(with-selected-window (frame-root-window frame)
(let* ((window (frame-root-window frame))
(char-width (frame-char-width))
(- (* (nth 2 sizes) char-width) window-extra-width))
((numberp max-width)
(- (* max-width char-width) window-extra-width))
- (t display-height)))
+ (t display-width)))
(min-width
(cond
((numberp (nth 3 sizes))
(width (+ (car value) (window-right-divider-width)))
(height (+ (cdr value) (window-bottom-divider-width))))
;; Don't change height or width when the window's size is fixed
- ;; in either direction.
+ ;; in either direction or ONLY forbids it.
(cond
- ((eq window-size-fixed 'width)
+ ((or (eq window-size-fixed 'width) (eq only 'vertically))
(setq width nil))
- ((eq window-size-fixed 'height)
+ ((or (eq window-size-fixed 'height) (eq only 'horizontally))
(setq height nil)))
;; Fit width to constraints.
(when width
WINDOW must be a live window and defaults to the selected one.
If WINDOW is part of a vertical combination, adjust WINDOW's
-height. The new height is calculated from the number of lines of
+height. The new height is calculated from the actual height of
the accessible portion of its buffer. The optional argument
MAX-HEIGHT specifies a maximum height and defaults to the height
of WINDOW's frame. The optional argument MIN-HEIGHT specifies a
minimum height and defaults to `window-min-height'. Both
-MAX-HEIGHT and MIN-HEIGHT are specified in lines and include the
-mode line and header line, if any.
+MAX-HEIGHT and MIN-HEIGHT are specified in lines and include mode
+and header line and a bottom divider, if any.
If WINDOW is part of a horizontal combination and the value of
the option `fit-window-to-buffer-horizontally' is non-nil, adjust
specifies a maximum width and defaults to the width of WINDOW's
frame. The optional argument MIN-WIDTH specifies a minimum width
and defaults to `window-min-width'. Both MAX-WIDTH and MIN-WIDTH
-are specified in columns and include fringes, margins and
-scrollbars, if any.
+are specified in columns and include fringes, margins, a
+scrollbar and a vertical divider, if any.
Fit pixelwise if the option `window-resize-pixelwise' is non-nil.
-If WINDOW is its frame's root window, then if the option
+If WINDOW is its frame's root window and the option
`fit-frame-to-buffer' is non-nil, call `fit-frame-to-buffer' to
adjust the frame's size.
;; Fit WINDOW's frame to buffer.
(fit-frame-to-buffer
(window-frame window)
- max-height min-height max-width min-width))
+ max-height min-height max-width min-width
+ (and (memq fit-frame-to-buffer '(vertically horizontally))
+ fit-frame-to-buffer)))
(with-selected-window window
(let* ((pixelwise window-resize-pixelwise)
(char-height (frame-char-height))
((and fit-window-to-buffer-horizontally
(not (window-size-fixed-p window t))
(window-combined-p nil t))
- (let* ((total-width (window-size window nil pixelwise))
+ (let* ((total-width (window-size window t pixelwise))
(min-width
;; Sanitize MIN-WIDTH.
(if (numberp min-width)
(lw_create_widget, lw_pop_all_widgets, lw_show_busy)
(lw_refigure_widget, lw_allow_resizing): Remove alternative K&R
declarations.
- * lwlib-Xlw.c (xlw_update_one_widget):
- (xlw_pop_instance): Likewise.
+ * lwlib-Xlw.c (xlw_update_one_widget, xlw_pop_instance): Likewise.
* lwlib-Xaw.c (xaw_update_one_widget, xaw_pop_instance):
Likewise.
* lwlib-Xm.c (P_): Remove.
XtCDefaultFace): New.
* xlwmenuP.h (_window_state): Add max_rest_width and xft_draw.
- (_XlwMenu_part): Add faceName,xft_fg, xft_bg, xft_disabled_fg and
+ (_XlwMenu_part): Add faceName, xft_fg, xft_bg, xft_disabled_fg and
xft_font.
2010-03-10 Chong Yidong <cyd@stupidchicken.com>
* xlwmenuP.h (_XlwMenu_part): Add fontSet resource.
- * xlwmenu.c (string_width):
- (MENU_FONT_HEIGHT, MENU_FONT_ASCENT): Ditto.
+ * xlwmenu.c (string_width, MENU_FONT_HEIGHT, MENU_FONT_ASCENT): Ditto.
(display_menu_item, make_drawing_gcs, XlwMenuInitialize)
(XlwMenuSetValues): Use font if fontSet is NULL, use only
font for !HAVE_X_I18N.
# AS_VAR_COPY was added in autoconf 2.63b
m4_define_default([AS_VAR_COPY],
[AS_LITERAL_IF([$1[]$2], [$1=$$2], [eval $1=\$$2])])
+
+# AC_PROG_SED was added in autoconf 2.59b
+m4_ifndef([AC_PROG_SED],
+[AC_DEFUN([AC_PROG_SED],
+[AC_CACHE_CHECK([for a sed that does not truncate output], ac_cv_path_SED,
+ [dnl ac_script should not contain more than 99 commands (for HP-UX sed),
+ dnl but more than about 7000 bytes, to catch a limit in Solaris 8 /usr/ucb/sed.
+ ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+ for ac_i in 1 2 3 4 5 6 7; do
+ ac_script="$ac_script$as_nl$ac_script"
+ done
+ echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+ AS_UNSET([ac_script])
+ if test -z "$SED"; then
+ ac_path_SED_found=false
+ _AS_PATH_WALK([], [
+ for ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+ AS_EXECUTABLE_P(["$ac_path_SED"]) || continue
+ case `"$ac_path_SED" --version 2>&1` in
+ *GNU*) ac_cv_path_SED=$ac_path_SED ac_path_SED_found=:;;
+ *)
+ ac_count=0
+ _AS_ECHO_N([0123456789]) >conftest.in
+ while :
+ do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo >> conftest.nl
+ "$ac_path_SED" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break
+ diff conftest.out conftest.nl >/dev/null 2>&1 || break
+ ac_count=`expr $ac_count + 1`
+ if test $ac_count -gt ${ac_path_SED_max-0}; then
+ # Best so far, but keep looking for better
+ ac_cv_path_SED=$ac_path_SED
+ ac_path_SED_max=$ac_count
+ fi
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+ esac
+ $ac_path_SED_found && break 3
+ done
+ done])
+ if test -z "$ac_cv_path_SED"; then
+ AC_ERROR([no acceptable sed could be found in \$PATH])
+ fi
+ else
+ ac_cv_path_SED=$SED
+ fi
+ SED="$ac_cv_path_SED"
+ AC_SUBST([SED])dnl
+ rm -f conftest.sed
+])])])
# Code from module sys_select:
# Code from module sys_stat:
# Code from module sys_time:
+ # Code from module sys_types:
# Code from module tempname:
# Code from module time:
# Code from module time_r:
AC_PROG_MKDIR_P
gl_HEADER_SYS_TIME_H
AC_PROG_MKDIR_P
+ gl_SYS_TYPES_H
+ AC_PROG_MKDIR_P
gl_HEADER_TIME_H
gl_TIME_R
if test $HAVE_LOCALTIME_R = 0 || test $REPLACE_LOCALTIME_R = 1; then
lib/sys_select.in.h
lib/sys_stat.in.h
lib/sys_time.in.h
+ lib/sys_types.in.h
lib/tempname.c
lib/tempname.h
lib/time.in.h
m4/sys_socket_h.m4
m4/sys_stat_h.m4
m4/sys_time_h.m4
+ m4/sys_types_h.m4
m4/tempname.m4
m4/time_h.m4
m4/time_r.m4
-# sys_types_h.m4 serial 4
+# sys_types_h.m4 serial 5
dnl Copyright (C) 2011-2014 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
-AC_DEFUN([gl_SYS_TYPES_H],
+AC_DEFUN_ONCE([gl_SYS_TYPES_H],
[
AC_REQUIRE([gl_SYS_TYPES_H_DEFAULTS])
gl_NEXT_HEADERS([sys/types.h])
#include <features.h>
#ifdef __GNU_LIBRARY__
#if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || (__GLIBC__ > 2)) \
- && !defined __UCLIBC__
+ && !(__UCLIBC__ && __HAS_NO_THREADS__)
Thread emulation available
#endif
#endif
+2014-03-13 Glenn Morris <rgm@gnu.org>
+
+ * templates/Info.plist.in: Make it strictly valid xml. (Bug#17002)
+
2013-10-23 Glenn Morris <rgm@gnu.org>
* Makefile.in (${ns_check_file} ${ns_appdir}):
+<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2008-2014 Free Software Foundation, Inc.
along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-->
-<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
* nmake.defs: Use !if, not !ifdef. For the details, see
http://lists.gnu.org/archive/html/help-emacs-windows/2012-11/msg00027.html
- * inc/stdint.h (INTPTR_MIN):
+ * inc/stdint.h (INTPTR_MIN)
(PTRDIFF_MIN) [!__GNUC__]: Define for MSVC.
2012-11-18 Eli Zaretskii <eliz@gnu.org>
2001-12-03 Andrew Innes <andrewi@gnu.org>
- * makefile.w32-in (bootstrap-nmake):
+ * makefile.w32-in (bootstrap-nmake)
(bootstrap-gmake): Extend bootstrap process to first do
bootstrap-clean in lisp dir and rebuild the DOC file.
(bootstrap): Do a "normal" make after the bootstrap work.
2001-01-24 Andrew Innes <andrewi@gnu.org>
- * makefile.w32-in (cleanall-other-dirs-nmake):
+ * makefile.w32-in (cleanall-other-dirs-nmake)
(cleanall-other-dirs-gmake): New targets.
(cleanall): Invoke them.
+2014-03-16 Eli Zaretskii <eliz@gnu.org>
+
+ * search.c (find_newline): Speed up the function when using the
+ newline cache, by halving the number of calls to
+ region_cache_forward and region_cache_backward. (Bug#16830)
+
+2014-03-15 Juanma Barranquero <lekktu@gmail.com>
+
+ * buffer.c (Fset_buffer): Document return value (bug#17015).
+
+2014-03-14 Martin Rudalics <rudalics@gmx.at>
+
+ * w32term.c (x_set_window_size): When frame-resize-pixelwise is
+ nil, always resize character wise to avoid potential loss of the
+ mode line (Bug#16923 related).
+
+2014-03-12 Martin Rudalics <rudalics@gmx.at>
+
+ * frame.c (x_set_frame_parameters): Always calculate new sizes
+ pixelwise to avoid potential loss when rounding.
+
+2014-03-11 Dmitry Antipov <dmantipov@yandex.ru>
+
+ * xfns.c (x_set_mouse_color): Recolor vertical_drag_cursor.
+ * xterm.c (x_free_frame_resources): Free all allocated cursors.
+
+2014-03-10 Eli Zaretskii <eliz@gnu.org>
+
+ * w32.c (fstatat): Don't add an extra slash if the argument ends
+ with a slash: this fails the subsequent call to stat_worker on
+ Windows 9X. Reported by oslsachem <oslsachem@gmail.com>.
+
+2014-03-09 Martin Rudalics <rudalics@gmx.at>
+
+ * xdisp.c (Fwindow_text_pixel_size): Adjust doc-string.
+
+2014-03-08 Jan Djärv <jan.h.d@swipnet.se>
+
+ * nsterm.h (MAC_OS_X_VERSION_10_9): Add.
+
+ * nsterm.m (constrainFrameRect:toScreen:): Constrain normally
+ when frame is only on one screen (Bug#14713).
+
+2014-03-08 Eli Zaretskii <eliz@gnu.org>
+
+ * xdisp.c (move_it_in_display_line_to): If word-wrap is ON, and
+ there's a valid wrap point in the display line, the last glyph
+ cannot "just barely fit" on this row, because display_line doesn't
+ let it. Instead, proceed as if the last glyph didn't fit, so that
+ we eventually back up the iterator to the wrap point. This avoids
+ delusional behavior of move_it_to, whereby it proceeds to the next
+ display line, but sets current_x to zero for all the glyphs that
+ without word-wrap would fit on the previous display line. One
+ result was that visual-order cursor movement behaved erratically
+ under word-wrap.
+ (Fmove_point_visually): Add code to find the x coordinate of the
+ last character before wrap point, under word-wrap on a TTY.
+
+2014-03-07 Eli Zaretskii <eliz@gnu.org>
+
+ * xdisp.c (Fmove_point_visually): When under word-wrap, accept
+ also return value of MOVE_POS_MATCH_OR_ZV from
+ move_it_in_display_line_to, when moving from beginning of line to
+ point's position. (Bug#16961)
+
+2014-03-07 Martin Rudalics <rudalics@gmx.at>
+
+ * buffer.c (Vbuffer_list_update_hook): Doc-string fix.
+ * window.c (Fselect_window): Explain NORECORD and
+ `buffer-list-update-hook' in doc-string.
+
+2014-03-06 Martin Rudalics <rudalics@gmx.at>
+
+ * window.c (Fother_window_for_scrolling): Check that
+ Vother_window_scroll_buffer is a buffer.
+
+2014-03-06 Dmitry Antipov <dmantipov@yandex.ru>
+
+ * xterm.c (xim_initialize): Always pass a copy of resource name
+ to XRegisterIMInstantiateCallback and eassert whether return
+ value is True. Passing copy is important because Xlib doesn't
+ make its own copy and resource name argument usually points to
+ SSDATA (Vx_resource_name), which may be changed from Lisp.
+ (xim_close_display): For XUnregisterIMInstantiateCallback,
+ always eassert return value and pass exactly the same values
+ as were used for XRegisterIMInstantiateCallback. Otherwise
+ XUnregisterIMInstantiateCallback will always fail. See Xlib
+ sources to check why if you are interested.
+
+2014-03-05 Martin Rudalics <rudalics@gmx.at>
+
+ * dispnew.c (change_frame_size_1): Add new_lines instead of
+ new_height, the latter may be still zero if passed as such.
+ * window.c (Fwindow_pixel_height): Mention bottom divider in
+ doc-string.
+
+2014-03-05 Paul Eggert <eggert@cs.ucla.edu>
+
+ Fix "resource temporarily unavailable" with xgselect
+ (Bug#16925).
+ * xgselect.c: Include <stdbool.h>.
+ (xg_select) [!USE_GTK]: Don't lose track of errno.
+
+ Fix minor --enable-gcc-warnings issues.
+ * widget.c (update_various_frame_slots, EmacsFrameResize):
+ Avoid unused locals. Prefer 'if' to '#if' when either will do.
+
+2014-03-04 Ken Brown <kbrown@cornell.edu>
+
+ * gmalloc.c (aligned_alloc): Clarify the code by making `adj'
+ represent the actual adjustment needed for alignment.
+
+2014-03-04 Eli Zaretskii <eliz@gnu.org>
+
+ * gmalloc.c (aligned_alloc): Don't allocate more memory than
+ needed, and don't reallocate if the initial allocation already
+ fits the bill. Suggested by Ken Brown <kbrown@cornell.edu>.
+
+2014-03-04 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * xterm.c (x_draw_stretch_glyph_string): Reset clipping.
+ (Bug#16932)
+
+2014-03-04 Michal Nazarewicz <mina86@mina86.com>
+
+ * cmds.c (delete-char): Update docstring pointing out that the
+ function ignores `delete-active-region' and `overwrite-mode'.
+
+2014-03-03 Eli Zaretskii <eliz@gnu.org>
+
+ * font.c (Fframe_font_cache): Fix last change. (Bug#16930)
+
+ * gmalloc.c (aligned_alloc): Fix adjustment of size of the
+ allocated buffer due to alignment.
+ (freehook): If the block to be freed was allocated by
+ 'aligned_alloc', find its real pointer before calling 'free'.
+ (Bug#16901)
+ (mabort) [emacs]: Call 'emacs_abort', not 'abort', to provide a
+ backtrace.
+
+2014-03-03 Dmitry Antipov <dmantipov@yandex.ru>
+
+ * font.c (toplevel): Adjust comment about font cache layout.
+ (font_clear_cache): Fix to match real font cache layout.
+ Suggested by <namespace_collision@yahoo.com> in Bug#16069.
+ (Fframe_font_cache) [FONT_DEBUG]: New function.
+ (syms_of_font) [FONT_DEBUG]: Defsubr it.
+
+ Avoid crashes when X fonts are erroneously freed on reused X
+ 'Display *' connection data (Bug#16069). Note that X font
+ resources still may be leaked, but currently there is no way
+ to completely avoid it.
+ * xterm.h (struct x_display_info): New member x_id. Add comments.
+ * xterm.c (x_display_id): New variable.
+ (x_term_init): Assign identifier to each opened X connection.
+ * xfont.c (struct xfont): New member x_display_id.
+ (xfont_open): Initialize it with frame's display id.
+ (xfont_close): Check whether font's display id matches the one
+ recorded for the given display. Adjust comment.
+ * xftfont.c (struct xftfont_info):
+ (xftfont_open, xftfont_close): Exactly as above with xfont stuff.
+
+2014-03-01 Martin Rudalics <rudalics@gmx.at>
+
+ Consider Vother_window_scroll_buffer valid iff it's a live buffer.
+ * window.c (Fother_window_for_scrolling): Don't try to scroll a
+ killed Vother_window_scroll_buffer.
+ (Vother_window_scroll_buffer): Fix doc-string accordingly.
+
+2014-03-01 Eli Zaretskii <eliz@gnu.org>
+
+ * fileio.c (Fexpand_file_name) [WINDOWSNT]: Don't treat file names
+ that start with more than 2 slashes as UNCs. (Bug#16751)
+
+2014-02-28 Paul Eggert <eggert@penguin.cs.ucla.edu>
+
+ Fix a few crashes and leaks when cloning C strings.
+ * alloc.c, lisp.h (dupstring): New function.
+ * gtkutil.c (xg_get_font):
+ * term.c (tty_default_color_capabilities):
+ * xsettings.c (store_monospaced_changed)
+ (store_font_name_changed, parse_settings)
+ (read_and_apply_settings, init_gsettings, init_gconf): Use it.
+ This avoids some unlikely crashes due to accessing freed storage,
+ and avoids some minor memory leaks in the more-typical case.
+
+2014-02-28 Martin Rudalics <rudalics@gmx.at>
+
+ * xdisp.c (note_mode_line_or_margin_highlight): Don't show drag
+ cursor when modeline can't be dragged (Bug#16647).
+
+2014-02-28 Glenn Morris <rgm@gnu.org>
+
+ * doc.c (Fsnarf_documentation): Snarf not-yet-bound variables
+ from custom-delayed-init-variables. (Bug#11565)
+
+2014-02-27 Martin Rudalics <rudalics@gmx.at>
+
+ More fixes for mouse glyph calculations (Bug#16647).
+ * window.c (coordinates_in_window): In intersection of
+ horizontal and vertical window dividers prefer the horizontal
+ one. Add some extra parens to last fix.
+ (window_relative_x_coord): Return x-coordinate for header and
+ mode line too.
+ * xdisp.c (remember_mouse_glyph): In text area don't extend
+ glyph into mode line to show the vertical drag cursor there
+ immediately. Subdivide mouse glyphs in right fringes to show a
+ horizontal drag cursor as soon as we enter the "grabbable width"
+ portion. Handle vertical border case separately. Do not
+ subdivide window divider areas.
+ (note_mouse_highlight): On bottom divider of bottommost windows
+ show vertical drag cursor only when the minibuffer window can be
+ resized.
+
+2014-02-27 Eli Zaretskii <eliz@gnu.org>
+
+ * xdisp.c (pop_it): Restore the it->face_box_p flag which could be
+ reset by the face of the object just displayed. See also bug#76.
+ (get_next_display_element): If the string came from a display
+ property, examine the box face attribute at it->position, not at
+ it->current.pos, since the latter was not updated yet. (Bug#16870)
+ (handle_face_prop): Improve commentary.
+
+2014-02-27 Michael Albinus <michael.albinus@gmx.de>
+
+ * dbusbind.c (Fdbus__init_bus, Qdbus__init_bus, Sdbus__init_bus):
+ Rename from Fdbus_init_bus_1, Qdbus_init_bus_1, Sdbus_init_bus_1.
+
+2014-02-26 Martin Rudalics <rudalics@gmx.at>
+
+ Fixes around Bug#16647.
+ * xdisp.c (remember_mouse_glyph): Handle ON_RIGHT_DIVIDER and
+ ON_BOTTOM_DIVIDER cases.
+ * window.c (coordinates_in_window): Return ON_VERTICAL_BORDER
+ only if the window has no right divider.
+ (Fcoordinates_in_window_p): Fix doc-string.
+
+2014-02-25 Juanma Barranquero <lekktu@gmail.com>
+
+ * lread.c (Funintern): Fix doc to match advertised calling convention.
+
+2014-02-24 Daniel Colascione <dancol@dancol.org>
+
+ * keyboard.c (read_char): Close race that resulted in lost events.
+
2014-02-22 Glenn Morris <rgm@gnu.org>
* frame.c (frame-alpha-lower-limit, frame-resize-pixelwise):
* emacs.c (main): Initialize daemon_pipe[1] here ...
(syms_of_emacs): ... instead of here.
-2014-02-16 Anders Lindgern <andlind@gmail.com>
+2014-02-16 Anders Lindgern <andlind@gmail.com>
* nsterm.m (keyDown:): Check for normal key even if NSNumericPadKeyMask
is set (Bug#16505).
2014-02-06 Eli Zaretskii <eliz@gnu.org>
- * w32.c (pMultiByteToWideChar, pWideCharToMultiByte): New
- variables: pointers through which to call the respective APIs.
+ * w32.c (pMultiByteToWideChar, pWideCharToMultiByte):
+ New variables: pointers through which to call the respective APIs.
(filename_to_utf16, filename_from_utf16, filename_to_ansi)
- (filename_from_ansi, sys_link, check_windows_init_file): Call
- MultiByteToWideChar and WideCharToMultiByte through pointers.
+ (filename_from_ansi, sys_link, check_windows_init_file):
+ Call MultiByteToWideChar and WideCharToMultiByte through pointers.
This is required on Windows 9X, where we dynamically load
UNICOWS.DLL which has their non-stub implementations.
(maybe_load_unicows_dll): Assign addresses to these 2 function
MultiByteToWideChar and WideCharToMultiByte through function
pointers.
- * w32.h (pMultiByteToWideChar, pWideCharToMultiByte): New
- declarations.
+ * w32.h (pMultiByteToWideChar, pWideCharToMultiByte):
+ New declarations.
2014-02-06 Jan Djärv <jan.h.d@swipnet.se>
* w32menu.c (w32_popup_dialog): Don't condition the whole function
on HAVE_DIALOGS. If the dialog is "simple", pop up a message box
to show it; otherwise return 'unsupported--w32-dialog' to signal
- to the caller that emulation with menus is necessary. This
- resurrects code inadvertently deleted by the 2013-10-08 commit.
+ to the caller that emulation with menus is necessary.
+ This resurrects code inadvertently deleted by the 2013-10-08 commit.
(Bug#16636)
(syms_of_w32menu): DEFSYM Qunsupported__w32_dialog.
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.
+ max_descent here instead of calling line_bottom_y.
+ Fix doc-string.
2014-01-28 Dmitry Antipov <dmantipov@yandex.ru>
2014-01-24 Dmitry Antipov <dmantipov@yandex.ru>
- * xdisp.c (reseat_1, Fcurrent_bidi_paragraph_direction): Avoid
- undefined behavior by initializing display property bit of a
+ * xdisp.c (reseat_1, Fcurrent_bidi_paragraph_direction):
+ Avoid undefined behavior by initializing display property bit of a
string processed by the bidirectional iterator. For details, see
<http://lists.gnu.org/archive/html/emacs-devel/2014-01/msg01920.html>.
2014-01-13 Daniel Colascione <dancol@dancol.org>
- * textprop.c (Fremove_list_of_text_properties): Correctly
- handle reaching the end of the interval tree. (Bug#15344)
+ * textprop.c (Fremove_list_of_text_properties):
+ Correctly handle reaching the end of the interval tree. (Bug#15344)
2014-01-13 Martin Rudalics <rudalics@gmx.at>
* macfont.m: Include termchar.h.
(CG_SET_FILL_COLOR_WITH_FACE_FOREGROUND)
(CG_SET_FILL_COLOR_WITH_FACE_BACKGROUND)
- (CG_SET_STROKE_COLOR_WITH_FACE_FOREGROUND): Modified from
+ (CG_SET_STROKE_COLOR_WITH_FACE_FOREGROUND): Modify from
*_WITH_GC_* to take face and f as parameters.
(macfont_draw): Check for DRAW_MOUSE_FACE and set face accordingly.
Use *_WITH_FACE_*, and pass face as parameter (Bug#16425).
2014-01-10 Martin Rudalics <rudalics@gmx.at>
Fix handling of internal borders (Bug#16348).
- * dispnew.c (adjust_frame_glyphs_for_window_redisplay): Remove
- internal border width from pixel width of windows.
+ * dispnew.c (adjust_frame_glyphs_for_window_redisplay):
+ Remove internal border width from pixel width of windows.
(change_frame_size_1): Don't return early when frame's pixel
size changes - we still have to record the new sizes in the
frame structure.
* window.c (check_frame_size): Include internal_border_width in
check.
* xdisp.c (Ftool_bar_height): Fix doc-string typo.
- * xfns.c (x_set_menu_bar_lines, x_set_tool_bar_lines): In
- non-toolkit/non-GTK version clear internal border.
+ * xfns.c (x_set_menu_bar_lines, x_set_tool_bar_lines):
+ In non-toolkit/non-GTK version clear internal border.
* xterm.c (x_clear_under_internal_border): New function for
non-toolkit/non-GTK version.
(x_after_update_window_line): In non-toolkit/non-GTK version
don't do that.
- (handle_one_xevent, x_set_window_size): Call
- x_clear_under_internal_border in non-toolkit/non-GTK version.
+ (handle_one_xevent, x_set_window_size):
+ Call x_clear_under_internal_border in non-toolkit/non-GTK version.
* xterm.h (x_clear_under_internal_border): Extern it.
2014-01-07 Paul Eggert <eggert@cs.ucla.edu>
2014-01-02 Martin Rudalics <rudalics@gmx.at>
Further adjust frame/window scrollbar width calculations.
- * window.c (apply_window_adjustment): Set
- windows_or_buffers_changed.
+ * window.c (apply_window_adjustment):
+ Set windows_or_buffers_changed.
(Fwindow_scroll_bars): Return actual scrollbar width.
* xfns.c (x_set_scroll_bar_default_width): Rename wid to unit.
For non-toolkit builds again use 14 as minimum width and set
(globals_of_w32): Initialize them to zero.
(set_named_security_info): Set them to non-zero if the
corresponding API is available.
- (SetNamedSecurityInfoW_Proc, SetNamedSecurityInfoA_Proc): New
- function typedefs.
+ (SetNamedSecurityInfoW_Proc, SetNamedSecurityInfoA_Proc):
+ New function typedefs.
2013-12-31 Martin Rudalics <rudalics@gmx.at>
2013-12-25 Chong Yidong <cyd@gnu.org>
- * keyboard.c (Voverriding_terminal_local_map):
+ * keyboard.c (Voverriding_terminal_local_map)
(Voverriding_local_map): Doc fix.
* keymap.c (Vemulation_mode_map_alists): Doc fix.
(decode_coding_c_string):
* composite.h (COMPOSITION_DECODE_REFS, COMPOSITION_DECODE_RULE):
* conf_post.h (has_attribute):
- * dispextern.h (trace_redisplay_p):
+ * dispextern.h (trace_redisplay_p)
(INC_TEXT_POS, DEC_TEXT_POS, SET_GLYPH_FROM_GLYPH_CODE)
(SET_CHAR_GLYPH, SET_CHAR_GLYPH_FROM_GLYPH)
- (SET_GLYPH_FROM_CHAR_GLYPH):
+ (SET_GLYPH_FROM_CHAR_GLYPH)
(WINDOW_WANTS_MODELINE_P, WINDOW_WANTS_HEADER_LINE_P)
(FACE_SUITABLE_FOR_ASCII_CHAR_P, FACE_SUITABLE_FOR_CHAR_P)
(PRODUCE_GLYPHS, reset_mouse_highlight, in_display_vector_p)
(FONT_SET_STYLE, CHECK_FONT, CHECK_FONT_SPEC, CHECK_FONT_ENTITY)
(CHECK_FONT_OBJECT, CHECK_FONT_GET_OBJECT, FONT_ADD_LOG)
(FONT_DEFERRED_LOG):
- * frame.h (FRAME_W32_P, FRAME_MSDOS_P, FRAME_WINDOW_P):
+ * frame.h (FRAME_W32_P, FRAME_MSDOS_P, FRAME_WINDOW_P)
(FRAME_EXTERNAL_TOOL_BAR, FRAME_EXTERNAL_MENU_BAR, FOR_EACH_FRAME)
(FRAME_MOUSE_UPDATE):
* fringe.c (Fdefine_fringe_bitmap):
* conf_post.h: Include <stdbool.h>.
(bool_bf): New type.
* dispextern.h (TRACE, PREPARE_FACE_FOR_DISPLAY):
- * intervals.h (RESET_INTERVAL, COPY_INTERVAL_CACHE, MERGE_INTERVAL_CACHE)
- Surround statement macro with proper 'do { ... } while (false)' brackets.
+ * intervals.h (RESET_INTERVAL, COPY_INTERVAL_CACHE)
+ (MERGE_INTERVAL_CACHE): Surround statement macro with proper
+ 'do { ... } while (false)' brackets.
* dispextern.h (IF_DEBUG): Properly parenthesize and convert to void.
Args must now be expressions; all callers changed.
(SET_MATRIX_ROW_ENABLED_P): Assume 2nd arg is bool.
ANSI and Unicode APIs. Use the latter if w32_unicode_filenames is
non-zero, else the former.
(codepage_for_filenames, filename_to_utf16, )
- (filename_from_utf16, filename_to_ansi, filename_from_ansi): New
- functions.
+ (filename_from_utf16, filename_to_ansi, filename_from_ansi):
+ New functions.
(init_user_info): Allow $HOME and $SHELL to include non-ANSI
characters.
(normalize_filename): Lose the DBCS code, now works on UTF-8.
* xterm.c (x_make_frame_visible): Restore hack which is needed when
input polling is used. This is still meaningful for Cygwin, see
http://lists.gnu.org/archive/html/emacs-devel/2013-12/msg00351.html.
- * keyboard.c (poll_for_input_1, input_polling_used): Define
- unconditionally.
+ * keyboard.c (poll_for_input_1, input_polling_used):
+ Define unconditionally.
* dispextern.h (FACE_SUITABLE_FOR_CHAR_P): Remove unused macro.
(FACE_FOR_CHAR): Simplify because face_for_char does the same.
* fontset.c (face_suitable_for_char_p) [0]: Remove unused function.
2013-10-08 Jan Djärv <jan.h.d@swipnet.se>
- * nsterm.m (windowDidExitFullScreen:):
+ * nsterm.m (windowDidExitFullScreen:)
(toggleFullScreen:): Change NS_IMPL_COCOA to HAVE_NATIVE_FS.
2013-10-08 Paul Eggert <eggert@cs.ucla.edu>
* process.c (wait_reading_process_output): Change int pnamelen to
socklen_t.
- * nsterm.m (setMarkedText:selectedRange:):
- (deleteWorkingText):
+ * nsterm.m (setMarkedText:selectedRange:, deleteWorkingText):
* nsmenu.m (addDisplayItemWithImage:idx:tag:helpText:enabled:):
* nsfont.m (ns_get_covering_families, ns_findfonts): Cast NSLog
argument to unsigned long to avoid warning.
2013-08-29 Dmitry Antipov <dmantipov@yandex.ru>
* xterm.c (x_clear_area): Lost 7th arg because it is always False.
- (x_after_update_window_line, x_scroll_bar_create):
- (x_scroll_bar_set_handle, XTset_vertical_scroll_bar):
+ (x_after_update_window_line, x_scroll_bar_create)
+ (x_scroll_bar_set_handle, XTset_vertical_scroll_bar)
(handle_one_xevent, x_clear_frame_area):
* gtkutil.c (xg_clear_under_internal_border, xg_update_scrollbar_pos):
* xfns.c (x_set_menu_bar_lines, x_set_tool_bar_lines): Adjust users.
(menubar_selection_callback, menu_position_func)
(popup_selection_callback, create_and_show_popup_menu)
(dialog_selection_callback, create_and_show_dialog):
- * xrdb.c (x_get_string_resource):
+ * xrdb.c (x_get_string_resource)
(main) [TESTRM]:
* xsmfns.c (x_session_check_input):
* xterm.c (x_draw_glyphless_glyph_string_foreground)
Fix last font-related change.
* w32font.h (w32font_list_internal, w32font_match_internal):
Fix prototype.
- * w32uniscribe.c (uniscribe_list, uniscribe_match):
+ * w32uniscribe.c (uniscribe_list, uniscribe_match)
(uniscribe_list_family): Adjust to match font API change.
MS-Windows breakage reported by Juanma Barranquero <lekktu@gmail.com>
at http://lists.gnu.org/archive/html/emacs-devel/2013-08/msg00006.html.
functions to accept struct frame * as first arg.
* font.c (font_score, font_compare, font_sort_entities):
Remove prototypes.
- (font_sort_entities, font_list_entities, font_select_entity):
+ (font_sort_entities, font_list_entities, font_select_entity)
(font_find_for_lface, Flist_fonts, Ffont_family_list): Adjust to
match font API change.
* xfont.c (xfont_list, xfont_match, xfont_list_family):
* ftxfont.c (ftxfont_list, ftxfont_match):
* xftfont.c (xftfont_list, xftfont_match):
* nsfont.m (nsfont_list, nsfont_match, nsfont_list_family):
- * w32font.c (w32font_list, w32font_match, w32font_list):
+ * w32font.c (w32font_list, w32font_match, w32font_list)
(w32font_list_internal, w32_font_match_internal): Likewise.
* xfaces.c (Fx_family_fonts): Adjust user.
have more than one X frame on the same X display.
(any_help_event_p, x_draw_glyph_string_background, x_display_ok):
Use bool for booleans.
- (x_draw_glyph_string_background, cvt_string_to_pixel):
+ (x_draw_glyph_string_background, cvt_string_to_pixel)
(cvt_pixel_dtor): Drop unnecessary prototypes.
* xterm.h (x_display_ok): Adjust prototype.
(close_on_exec, accept4, process_socket) [!SOCK_CLOEXEC]:
New functions.
(socket) [!SOCK_CLOEXEC]: Supply a substitute.
- (Fmake_network_process, Fnetwork_interface_list):
+ (Fmake_network_process, Fnetwork_interface_list)
(Fnetwork_interface_info, server_accept_connection):
Make newly-created socket close-on-exec.
* sysdep.c (emacs_open, emacs_fopen):
* image.c (gif_load): Assume pass < 3 to pacify GCC.
* process.c (Fset_process_datagram_address)
(Fmake_network_process): Check get_lisp_to_sockaddr_size return value.
- * xdisp.c (get_char_face_and_encoding):
+ * xdisp.c (get_char_face_and_encoding)
(get_glyph_face_and_encoding): Ensure that *CHAR2B is initialized.
(get_glyph_face_and_encoding): Prepare face before possibly using it.
(get_per_char_metric): Don't use CHAR2B if it might not be initialized.
return memcpy (xmalloc (size), SSDATA (string), size);
}
+/* Assign to *PTR a copy of STRING, freeing any storage *PTR formerly
+ pointed to. If STRING is null, assign it without copying anything.
+ Allocate before freeing, to avoid a dangling pointer if allocation
+ fails. */
+
+void
+dupstring (char **ptr, char const *string)
+{
+ char *old = *ptr;
+ *ptr = string ? xstrdup (string) : 0;
+ xfree (old);
+}
+
+
/* Like putenv, but (1) use the equivalent of xmalloc and (2) the
argument is a const pointer. */
DEFUN ("set-buffer", Fset_buffer, Sset_buffer, 1, 1, 0,
doc: /* Make buffer BUFFER-OR-NAME current for editing operations.
-BUFFER-OR-NAME may be a buffer or the name of an existing buffer. See
-also `with-current-buffer' when you want to make a buffer current
+BUFFER-OR-NAME may be a buffer or the name of an existing buffer.
+See also `with-current-buffer' when you want to make a buffer current
temporarily. This function does not display the buffer, so its effect
ends when the current command terminates. Use `switch-to-buffer' or
-`pop-to-buffer' to switch buffers permanently. */)
+`pop-to-buffer' to switch buffers permanently.
+The return value is the buffer made current. */)
(register Lisp_Object buffer_or_name)
{
register Lisp_Object buffer;
DEFVAR_LISP ("buffer-list-update-hook", Vbuffer_list_update_hook,
doc: /* Hook run when the buffer list changes.
-Functions running this hook are `get-buffer-create',
+Functions running this hook are, `get-buffer-create',
`make-indirect-buffer', `rename-buffer', `kill-buffer',
-and `bury-buffer-internal'. */);
+`bury-buffer-internal' and `select-window'. */);
Vbuffer_list_update_hook = Qnil;
DEFSYM (Qbuffer_list_update_hook, "buffer-list-update-hook");
Interactively, N is the prefix arg, and KILLFLAG is set if
N was explicitly specified.
-The command `delete-forward-char' is preferable for interactive use. */)
+The command `delete-forward-char' is preferable for interactive use, e.g.
+because it respects values of `delete-active-region' and `overwrite-mode'. */)
(Lisp_Object n, Lisp_Object killflag)
{
EMACS_INT pos;
\f
/* Subroutines. */
-static Lisp_Object Qdbus_init_bus_1;
+static Lisp_Object Qdbus__init_bus;
static Lisp_Object Qdbus_get_unique_name;
static Lisp_Object Qdbus_message_internal;
if (NILP (val))
return;
- busobj = CDR_SAFE(val);
+ busobj = CDR_SAFE (val);
if (NILP (busobj)) {
xd_registered_buses = Fdelete (val, xd_registered_buses);
return;
return;
}
-DEFUN ("dbus-init-bus-1", Fdbus_init_bus_1, Sdbus_init_bus_1, 1, 2, 0,
+DEFUN ("dbus--init-bus", Fdbus__init_bus, Sdbus__init_bus, 1, 2, 0,
doc: /* Establish the connection to D-Bus BUS.
-This function is dbus-internal. You almost certainly want to use
-dbus-init-bus.
+This function is dbus internal. You almost certainly want to use
+`dbus-init-bus'.
BUS can be either the symbol `:system' or the symbol `:session', or it
can be a string denoting the address of the corresponding bus. For
syms_of_dbusbind (void)
{
- DEFSYM (Qdbus_init_bus_1, "dbus-init-bus-1");
- defsubr (&Sdbus_init_bus_1);
+ DEFSYM (Qdbus__init_bus, "dbus--init-bus");
+ defsubr (&Sdbus__init_bus);
DEFSYM (Qdbus_get_unique_name, "dbus-get-unique-name");
defsubr (&Sdbus_get_unique_name);
/* MSDOS frames cannot PRETEND, as they change frame size by
manipulating video hardware. */
if ((FRAME_TERMCAP_P (f) && !pretend) || FRAME_MSDOS_P (f))
- FrameRows (FRAME_TTY (f)) = new_height;
+ FrameRows (FRAME_TTY (f)) = new_lines;
}
if (new_text_width != FRAME_TEXT_WIDTH (f)
/* Record indices of function doc strings stored in a file.
-Copyright (C) 1985-1986, 1993-1995, 1997-2014 Free Software Foundation,
-Inc.
+Copyright (C) 1985-1986, 1993-1995, 1997-2014 Free Software Foundation, Inc.
This file is part of GNU Emacs.
char *p, *name;
bool skip_file = 0;
ptrdiff_t count;
+ /* Preloaded defcustoms using custom-initialize-delay are added to
+ this list, but kept unbound. See http://debbugs.gnu.org/11565 */
+ Lisp_Object delayed_init =
+ find_symbol_value (intern ("custom-delayed-init-variables"));
+
+ if (EQ (delayed_init, Qunbound)) delayed_init = Qnil;
CHECK_STRING (filename);
/* Install file-position as variable-documentation property
and make it negative for a user-variable
(doc starts with a `*'). */
- if (!NILP (Fboundp (sym)))
+ if (!NILP (Fboundp (sym))
+ || !NILP (Fmemq (sym, delayed_init)))
Fput (sym, Qvariable_documentation,
make_number ((pos + end + 1 - buf)
* (end[1] == '*' ? -1 : 1)));
nm++;
/* Discard any previous drive specifier if nm is now in UNC format. */
- if (IS_DIRECTORY_SEP (nm[0]) && IS_DIRECTORY_SEP (nm[1]))
- {
- drive = 0;
- }
+ if (IS_DIRECTORY_SEP (nm[0]) && IS_DIRECTORY_SEP (nm[1])
+ && !IS_DIRECTORY_SEP (nm[2]))
+ drive = 0;
#endif /* WINDOWSNT */
#endif /* DOS_NT */
&& !IS_DIRECTORY_SEP (nm[0])
#endif
#ifdef WINDOWSNT
- && !(IS_DIRECTORY_SEP (nm[0]) && IS_DIRECTORY_SEP (nm[1]))
+ && !(IS_DIRECTORY_SEP (nm[0]) && IS_DIRECTORY_SEP (nm[1])
+ && !IS_DIRECTORY_SEP (nm[2]))
#endif
&& !newdir)
{
&& IS_DEVICE_SEP (newdir[1]) && IS_DIRECTORY_SEP (newdir[2]))
#ifdef WINDOWSNT
/* Detect Windows file names in UNC format. */
- && ! (IS_DIRECTORY_SEP (newdir[0]) && IS_DIRECTORY_SEP (newdir[1]))
+ && ! (IS_DIRECTORY_SEP (newdir[0]) && IS_DIRECTORY_SEP (newdir[1])
+ && !IS_DIRECTORY_SEP (newdir[2]))
#endif
)
{
if (IS_DIRECTORY_SEP (nm[0]) && collapse_newdir)
{
#ifdef WINDOWSNT
- if (IS_DIRECTORY_SEP (newdir[0]) && IS_DIRECTORY_SEP (newdir[1]))
+ if (IS_DIRECTORY_SEP (newdir[0]) && IS_DIRECTORY_SEP (newdir[1])
+ && !IS_DIRECTORY_SEP (newdir[2]))
{
char *adir = strcpy (alloca (strlen (newdir) + 1), newdir);
char *p = adir + 2;
/* Lock files for editing.
- Copyright (C) 1985-1987, 1993-1994, 1996, 1998-2014 Free Software
- Foundation, Inc.
+
+Copyright (C) 1985-1987, 1993-1994, 1996, 1998-2014
+ Free Software Foundation, Inc.
+
+Author: Richard King
+ (according to authors.el)
This file is part of GNU Emacs.
where DRIVER-TYPE is a symbol such as `x', `xft', etc., NUM-FRAMES
is a number frames sharing this cache, and FONT-CACHE-DATA is a
- cons (FONT-SPEC FONT-ENTITY ...). */
+ cons (FONT-SPEC . [FONT-ENTITY ...]). */
static void font_prepare_cache (struct frame *, struct font_driver *);
static void font_finish_cache (struct frame *, struct font_driver *);
font_clear_cache (struct frame *f, Lisp_Object cache, struct font_driver *driver)
{
Lisp_Object tail, elt;
- Lisp_Object tail2, entity;
+ Lisp_Object entity;
+ ptrdiff_t i;
/* CACHE = (DRIVER-TYPE NUM-FRAMES FONT-CACHE-DATA ...) */
for (tail = XCDR (XCDR (cache)); CONSP (tail); tail = XCDR (tail))
{
elt = XCAR (tail);
- /* elt should have the form (FONT-SPEC FONT-ENTITY ...) */
+ /* elt should have the form (FONT-SPEC . [FONT-ENTITY ...]) */
if (CONSP (elt) && FONT_SPEC_P (XCAR (elt)))
{
- for (tail2 = XCDR (elt); CONSP (tail2); tail2 = XCDR (tail2))
+ elt = XCDR (elt);
+ eassert (VECTORP (elt));
+ for (i = 0; i < ASIZE (elt); i++)
{
- entity = XCAR (tail2);
+ entity = AREF (elt, i);
if (FONT_ENTITY_P (entity)
&& EQ (driver->type, AREF (entity, FONT_TYPE_INDEX)))
}
#endif
+DEFUN ("frame-font-cache", Fframe_font_cache, Sframe_font_cache, 0, 1, 0,
+ doc: /* Return FRAME's font cache. Mainly used for debugging.
+If FRAME is omitted or nil, use the selected frame. */)
+ (Lisp_Object frame)
+{
+#ifdef HAVE_WINDOW_SYSTEM
+ struct frame *f = decode_live_frame (frame);
+
+ if (FRAME_WINDOW_P (f))
+ return FRAME_DISPLAY_INFO (f)->name_list_element;
+ else
+#endif
+ return Qnil;
+}
+
#endif /* FONT_DEBUG */
#ifdef HAVE_WINDOW_SYSTEM
#if 0
defsubr (&Sdraw_string);
#endif
+ defsubr (&Sframe_font_cache);
#endif /* FONT_DEBUG */
#ifdef HAVE_WINDOW_SYSTEM
defsubr (&Sfont_info);
/* Provide default values for HEIGHT and WIDTH. */
width = (f->new_width
? (f->new_pixelwise
- ? (f->new_width / FRAME_COLUMN_WIDTH (f))
- : f->new_width)
- : FRAME_COLS (f));
+ ? f->new_width
+ : (f->new_width * FRAME_COLUMN_WIDTH (f)))
+ : FRAME_TEXT_WIDTH (f));
height = (f->new_height
? (f->new_pixelwise
- ? (f->new_height / FRAME_LINE_HEIGHT (f))
- : f->new_height)
- : FRAME_LINES (f));
+ ? f->new_height
+ : (f->new_height * FRAME_LINE_HEIGHT (f)))
+ : FRAME_TEXT_HEIGHT (f));
/* Process foreground_color and background_color before anything else.
They are independent of other properties, but other properties (e.g.,
if (EQ (prop, Qwidth) && RANGED_INTEGERP (0, val, INT_MAX))
{
size_changed = 1;
- width = XFASTINT (val);
+ width = XFASTINT (val) * FRAME_COLUMN_WIDTH (f) ;
}
else if (EQ (prop, Qheight) && RANGED_INTEGERP (0, val, INT_MAX))
{
size_changed = 1;
- height = XFASTINT (val);
+ height = XFASTINT (val) * FRAME_LINE_HEIGHT (f);
}
else if (EQ (prop, Qtop))
top = val;
Lisp_Object frame;
/* Make this 1, eventually. */
- check_frame_size (f, &width, &height, 0);
+ check_frame_size (f, &width, &height, 1);
XSETFRAME (frame, f);
if (size_changed
- && (width != FRAME_COLS (f)
- || height != FRAME_LINES (f)
+ && (width != FRAME_TEXT_WIDTH (f)
+ || height != FRAME_TEXT_HEIGHT (f)
|| f->new_height || f->new_width))
- Fset_frame_size (frame, make_number (width), make_number (height), Qnil);
+ Fset_frame_size (frame, make_number (width), make_number (height), Qt);
if ((!NILP (left) || !NILP (top))
&& ! (left_no_change && top_no_change)
#include <w32heap.h> /* for sbrk */
#endif
+#ifdef emacs
+extern void emacs_abort (void);
+#endif
+
#ifdef __cplusplus
extern "C"
{
extern void malloc_enable_thread (void);
#endif
+#ifdef emacs
+extern void emacs_abort (void);
+#endif
+
/* The allocator divides the heap into blocks of fixed size; large
requests receive one or more whole blocks, and small requests
receive a fragment of a block. Fragment sizes are powers of two,
/* Figure out how much we will need to pad this particular block
to achieve the required alignment. */
- adj = (uintptr_t) result % alignment;
+ adj = alignment - (uintptr_t) result % alignment;
+ if (adj == alignment)
+ adj = 0;
- do
+ if (adj != alignment - 1)
{
- /* Reallocate the block with only as much excess as it needs. */
- free (result);
- result = malloc (adj + size);
- if (result == NULL) /* Impossible unless interrupted. */
- return NULL;
-
- lastadj = adj;
- adj = (uintptr_t) result % alignment;
- /* It's conceivable we might have been so unlucky as to get a
- different block with weaker alignment. If so, this block is too
- short to contain SIZE after alignment correction. So we must
- try again and get another block, slightly larger. */
- } while (adj > lastadj);
+ do
+ {
+ /* Reallocate the block with only as much excess as it
+ needs. */
+ free (result);
+ result = malloc (size + adj);
+ if (result == NULL) /* Impossible unless interrupted. */
+ return NULL;
+
+ lastadj = adj;
+ adj = alignment - (uintptr_t) result % alignment;
+ if (adj == alignment)
+ adj = 0;
+ /* It's conceivable we might have been so unlucky as to get
+ a different block with weaker alignment. If so, this
+ block is too short to contain SIZE after alignment
+ correction. So we must try again and get another block,
+ slightly larger. */
+ } while (adj > lastadj);
+ }
if (adj != 0)
{
if (l != NULL)
{
l->exact = result;
- result = l->aligned = (char *) result + alignment - adj;
+ result = l->aligned = (char *) result + adj;
}
UNLOCK_ALIGNED_BLOCKS ();
if (l == NULL)
if (ptr)
{
+ struct alignlist *l;
+
+ /* If the block was allocated by aligned_alloc, its real pointer
+ to free is recorded in _aligned_blocks; find that. */
+ PROTECT_MALLOC_STATE (0);
+ LOCK_ALIGNED_BLOCKS ();
+ for (l = _aligned_blocks; l != NULL; l = l->next)
+ if (l->aligned == ptr)
+ {
+ l->aligned = NULL; /* Mark the slot in the list as free. */
+ ptr = l->exact;
+ break;
+ }
+ UNLOCK_ALIGNED_BLOCKS ();
+ PROTECT_MALLOC_STATE (1);
+
hdr = ((struct hdr *) ptr) - 1;
checkhdr (hdr);
hdr->magic = MAGICFREE;
#else
fprintf (stderr, "mcheck: %s\n", msg);
fflush (stderr);
+# ifdef emacs
+ emacs_abort ();
+# else
abort ();
+# endif
#endif
}
font = Ffont_spec (8, args);
pango_font_description_free (desc);
- xfree (x_last_font_name);
- x_last_font_name = xstrdup (name);
+ dupstring (&x_last_font_name, name);
}
#else /* Use old font selector, which just returns the font name. */
{
c = read_decoded_event_from_main_queue (end_time, local_getcjmp,
prev_event, used_mouse_menu);
- if (end_time && timespec_cmp (*end_time, current_timespec ()) <= 0)
- goto exit;
+ if (NILP(c) && end_time &&
+ timespec_cmp (*end_time, current_timespec ()) <= 0)
+ {
+ goto exit;
+ }
+
if (EQ (c, make_number (-2)))
{
/* This is going to exit from read_char
extern char *xstrdup (const char *);
extern char *xlispstrdup (Lisp_Object);
+extern void dupstring (char **, char const *);
extern void xputenv (const char *);
extern char *egetenv (const char *);
The value is t if a symbol was found and deleted, nil otherwise.
NAME may be a string or a symbol. If it is a symbol, that symbol
is deleted, if it belongs to OBARRAY--no other symbol is deleted.
-OBARRAY defaults to the value of the variable `obarray'. */)
+OBARRAY, if nil, defaults to the value of the variable `obarray'.
+usage: (unintern NAME OBARRAY) */)
(Lisp_Object name, Lisp_Object obarray)
{
register Lisp_Object string, tem;
#ifndef MAC_OS_X_VERSION_10_8
#define MAC_OS_X_VERSION_10_8 1080
#endif
+#ifndef MAC_OS_X_VERSION_10_9
+#define MAC_OS_X_VERSION_10_9 1090
+#endif
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7
#define HAVE_NATIVE_FS
{
/* When making the frame visible for the first time or if there is just
one screen, we want to constrain. Other times not. */
- NSUInteger nr_screens = [[NSScreen screens] count];
+ NSArray *screens = [NSScreen screens];
+ NSUInteger nr_screens = [screens count], nr_eff_screens = 0, i;
struct frame *f = ((EmacsView *)[self delegate])->emacsframe;
NSTRACE (constrainFrameRect);
NSTRACE_RECT ("input", frameRect);
if (ns_menu_bar_should_be_hidden ())
return frameRect;
+ if (nr_screens == 1)
+ return [super constrainFrameRect:frameRect toScreen:screen];
+
+#ifdef NS_IMPL_COCOA
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_9
+ // If separate spaces is on, it is like each screen is independent. There is
+ // no spanning of frames across screens.
+ if ([NSScreen screensHaveSeparateSpaces])
+ return [super constrainFrameRect:frameRect toScreen:screen];
+#endif
+#endif
+
+ for (i = 0; i < nr_screens; ++i)
+ {
+ NSScreen *s = [screens objectAtIndex: i];
+ NSRect scrrect = [s frame];
+ NSRect intersect = NSIntersectionRect (frameRect, scrrect);
+
+ if (intersect.size.width > 0 || intersect.size.height > 0)
+ ++nr_eff_screens;
+ }
+
+ if (nr_eff_screens == 1)
+ return [super constrainFrameRect:frameRect toScreen:screen];
+
/* The default implementation does two things 1) ensure that the top
of the rectangle is below the menu bar (or below the top of the
screen) and 2) resizes windows larger than the screen. As we
examine. */
ptrdiff_t tem, ceiling_byte = end_byte - 1;
- /* If we're looking for a newline, consult the newline cache
- to see where we can avoid some scanning. */
+ /* If we're using the newline cache, consult it to see whether
+ we can avoid some scanning. */
if (newline_cache)
{
ptrdiff_t next_change;
+ int result = 1;
+
immediate_quit = 0;
- while (region_cache_forward
- (cache_buffer, newline_cache, start, &next_change))
- start = next_change;
+ while (start < end && result)
+ {
+ ptrdiff_t lim1;
+
+ result = region_cache_forward (cache_buffer, newline_cache,
+ start, &next_change);
+ if (result)
+ {
+ start = next_change;
+ lim1 = next_change = end;
+ }
+ else
+ lim1 = min (next_change, end);
+
+ /* The cache returned zero for this region; see if
+ this is because the region is known and includes
+ only newlines. While at that, count any newlines
+ we bump into, and exit if we found enough off them. */
+ start_byte = CHAR_TO_BYTE (start);
+ while (start < lim1
+ && FETCH_BYTE (start_byte) == '\n')
+ {
+ start_byte++;
+ start++;
+ if (--count == 0)
+ {
+ if (bytepos)
+ *bytepos = start_byte;
+ return start;
+ }
+ }
+ /* If we found a non-newline character before hitting
+ position where the cache will again return non-zero
+ (i.e. no newlines beyond that position), it means
+ this region is not yet known to the cache, and we
+ must resort to the "dumb loop" method. */
+ if (start < next_change && !result)
+ break;
+ result = 1;
+ }
+ if (start >= end)
+ {
+ start = end;
+ start_byte = end_byte;
+ break;
+ }
immediate_quit = allow_quit;
- start_byte = CHAR_TO_BYTE (start);
-
/* START should never be after END. */
if (start_byte > ceiling_byte)
start_byte = ceiling_byte;
unsigned char *nl = memchr (lim_addr + cursor, '\n', - cursor);
next = nl ? nl - lim_addr : 0;
- /* If we're looking for newlines, cache the fact that
- this line's region is free of them. */
- if (newline_cache)
+ /* If we're using the newline cache, cache the fact that
+ the region we just traversed is free of newlines. */
+ if (newline_cache && cursor != next)
{
know_region_cache (cache_buffer, newline_cache,
BYTE_TO_CHAR (lim_byte + cursor),
if (newline_cache)
{
ptrdiff_t next_change;
+ int result = 1;
+
immediate_quit = 0;
- while (region_cache_backward
- (cache_buffer, newline_cache, start, &next_change))
- start = next_change;
+ while (start > end && result)
+ {
+ ptrdiff_t lim1;
+
+ result = region_cache_backward (cache_buffer, newline_cache,
+ start, &next_change);
+ if (result)
+ {
+ start = next_change;
+ lim1 = next_change = end;
+ }
+ else
+ lim1 = max (next_change, end);
+ start_byte = CHAR_TO_BYTE (start);
+ while (start > lim1
+ && FETCH_BYTE (start_byte - 1) == '\n')
+ {
+ if (++count == 0)
+ {
+ if (bytepos)
+ *bytepos = start_byte;
+ return start;
+ }
+ start_byte--;
+ start--;
+ }
+ if (start > next_change && !result)
+ break;
+ result = 1;
+ }
+ if (start <= end)
+ {
+ start = end;
+ start_byte = end_byte;
+ break;
+ }
immediate_quit = allow_quit;
- start_byte = CHAR_TO_BYTE (start);
-
/* Start should never be at or before end. */
if (start_byte <= ceiling_byte)
start_byte = ceiling_byte + 1;
/* If we're looking for newlines, cache the fact that
this line's region is free of them. */
- if (newline_cache)
+ if (newline_cache && cursor != prev + 1)
{
know_region_cache (cache_buffer, newline_cache,
BYTE_TO_CHAR (ceiling_byte + prev + 1),
if (save)
{
- xfree (default_orig_pair);
- default_orig_pair = tty->TS_orig_pair ? xstrdup (tty->TS_orig_pair) : NULL;
-
- xfree (default_set_foreground);
- default_set_foreground = tty->TS_set_foreground ? xstrdup (tty->TS_set_foreground)
- : NULL;
-
- xfree (default_set_background);
- default_set_background = tty->TS_set_background ? xstrdup (tty->TS_set_background)
- : NULL;
-
+ dupstring (&default_orig_pair, tty->TS_orig_pair);
+ dupstring (&default_set_foreground, tty->TS_set_foreground);
+ dupstring (&default_set_background, tty->TS_set_background);
default_max_colors = tty->TN_max_colors;
default_max_pairs = tty->TN_max_pairs;
default_no_color_video = tty->TN_no_color_video;
return -1;
}
- /* Remove trailing directory separator, unless name is the root
- directory of a drive or UNC volume in which case ensure there
- is a trailing separator. */
len = strlen (name);
+ /* Allocate 1 extra byte so that we could append a slash to a root
+ directory, down below. */
name = strcpy (alloca (len + 2), name);
/* Avoid a somewhat costly call to is_symlink if the filesystem
}
else if (rootdir)
{
+ /* Make sure root directories end in a slash. */
if (!IS_DIRECTORY_SEP (name[len-1]))
strcat (name, "\\");
if (GetDriveType (name) < 2)
{
int have_wfd = -1;
+ /* Make sure non-root directories do NOT end in a slash,
+ otherwise FindFirstFile might fail. */
if (IS_DIRECTORY_SEP (name[len-1]))
name[len - 1] = 0;
if (fd != AT_FDCWD)
{
- if (_snprintf (fullname, sizeof fullname, "%s/%s", dir_pathname, name)
+ char lastc = dir_pathname[strlen (dir_pathname) - 1];
+
+ if (_snprintf (fullname, sizeof fullname, "%s%s%s",
+ dir_pathname, IS_DIRECTORY_SEP (lastc) ? "" : "/", name)
< 0)
{
errno = ENAMETOOLONG;
{
bool iconified = FRAME_ICONIFIED_P (f);
+ /* The following was made unconditional in a
+ pathetic attempt to fix bug#16967 in revision
+ 116716 but, considered counterproductive was made
+ conditional again in revision 116727. martin */
if (iconified)
SET_FRAME_VISIBLE (f, 1);
SET_FRAME_ICONIFIED (f, 0);
pixelheight = FRAME_TEXT_LINES_TO_PIXEL_HEIGHT (f, height);
}
+ if (!frame_resize_pixelwise)
+ {
+ /* If we don't resize frames pixelwise, round sizes to multiples
+ of character sizes. Otherwise, Windows may clip our frame
+ rectangle at a character size boundary and we risk losing our
+ mode line. Bug#16923 might be a consequence of this.
+
+ So far, this is a Windows specific problem; other toolkits may
+ prefer to not resize the frame if the delta is not large enough
+ (GTK) or resize the frame pixelwise as requested (Lucid,
+ Motif). Windows just doesn't call us back (probably because of
+ the size hint settings which it apparently interprets strictly)
+ neither when the user tries to mouse-drag a frame border by,
+ nor when calling `set-frame-size' with a delta of less than the
+ canonical character size. If w32_enable_frame_resize_hack is
+ enabled (which it now is by default) we'd then below resize the
+ frame's root window in preparation of a WM_SIZE message to come
+ which, however, is not going to happen. */
+ int unit_width = FRAME_COLUMN_WIDTH (f);
+ int unit_height = FRAME_LINE_HEIGHT (f);
+
+ pixelwidth = (pixelwidth / unit_width) * unit_width;
+ pixelheight = (pixelheight / unit_height) * unit_height;
+ }
+
f->win_gravity = NorthWestGravity;
x_wm_set_size_hint (f, (long) 0, 0);
}
/* If w32_enable_frame_resize_hack is non-nil, immediately apply the
- new pixel sizes to the frame and its subwindows. See discussion
- of Bug#16028 for why we need this. */
+ new pixel sizes to the frame and its subwindows. This approach is
+ fragile because Windows might not honor the resize request issued
+ by my_set_window_pos with a WM_SIZE message (see previous comment).
- if (w32_enable_frame_resize_hack)
- /* The following mirrors what is done in xterm.c. It appears to be
- for informing lisp of the new size immediately, while the actual
- resize will happen asynchronously. But on Windows, the menu bar
- automatically wraps when the frame is too narrow to contain it,
- and that causes any calculations made here to come out wrong. The
- end is some nasty buggy behavior, including the potential loss
- of the minibuffer.
+ Jason Rumney earlier refused to call change_frame_size right here
+ with the following argument:
+
+ The following mirrors what is done in xterm.c. It appears to be for
+ informing lisp of the new size immediately, while the actual resize
+ will happen asynchronously. But on Windows, the menu bar
+ automatically wraps when the frame is too narrow to contain it, and
+ that causes any calculations made here to come out wrong. The end
+ is some nasty buggy behavior, including the potential loss of the
+ minibuffer.
Disabling this code is either not sufficient to fix the problems
completely, or it causes fresh problems, but at least it removes
the most problematic symptom of the minibuffer becoming unusable.
- -----------------------------------------------------------------
-
- Now, strictly speaking, we can't be sure that this is accurate,
- but the window manager will get around to dealing with the size
- change request eventually, and we'll hear how it went when the
- ConfigureNotify event gets here.
+ However, as the discussion about how to handle frame size
+ parameters on Windows (Bug#1348, Bug#16028) shows, that cure seems
+ worse than the disease. In particular, menu bar wrapping looks
+ like a non-issue - maybe so because Windows eventually gets back to
+ us with the correct client rectangle anyway. But we have to avoid
+ calling change_frame_size with a delta of less than one canoncial
+ character size when frame_resize_pixelwise is nil, as explained in
+ the comment above. */
- We could just not bother storing any of this information here,
- and let the ConfigureNotify event set everything up, but that
- might be kind of confusing to the Lisp code, since size changes
- wouldn't be reported in the frame parameters until some random
- point in the future when the ConfigureNotify event arrives.
+ if (w32_enable_frame_resize_hack)
- We pass 1 for DELAY since we can't run Lisp code inside of
- a BLOCK_INPUT. */
{
- change_frame_size (f, width, height, 0, 1, 0, pixelwise);
+ change_frame_size (f, FRAME_PIXEL_TO_TEXT_WIDTH (f, pixelwidth),
+ FRAME_PIXEL_TO_TEXT_HEIGHT (f, pixelheight),
+ 0, 1, 0, 1);
SET_FRAME_GARBAGED (f);
/* If cursor was outside the new size, mark it as off. */
/* Clear out any recollection of where the mouse highlighting was,
since it might be in a place that's outside the new frame size.
Actually checking whether it is outside is a pain in the neck,
- so don't try--just let the highlighting be done afresh with new size. */
+ so don't try--just let the highlighting be done afresh with new
+ size. */
cancel_mouse_face (f);
}
update_various_frame_slots (EmacsFrame ew)
{
struct frame *f = ew->emacs_frame.frame;
- struct x_output *x = f->output_data.x;
+
/* Don't do that: It confuses the check in change_frame_size_1 whether
the pixel size of the frame changed due to a change of the internal
border width. Bug#16736. */
-#if 0
- FRAME_PIXEL_HEIGHT (f) = ew->core.height + x->menubar_height;
- FRAME_PIXEL_WIDTH (f) = ew->core.width;
-#endif
- f->internal_border_width = ew->emacs_frame.internal_border_width;
+ if (false)
+ {
+ struct x_output *x = f->output_data.x;
+ FRAME_PIXEL_HEIGHT (f) = ew->core.height + x->menubar_height;
+ FRAME_PIXEL_WIDTH (f) = ew->core.width;
+ }
+ f->internal_border_width = ew->emacs_frame.internal_border_width;
}
static void
{
EmacsFrame ew = (EmacsFrame)widget;
struct frame *f = ew->emacs_frame.frame;
- struct x_output *x = f->output_data.x;
-#if 0 /* Always process resize requests pixelwise. Frame maximizing
- should work even when frame_resize_pixelwise is nil. */
- if (frame_resize_pixelwise)
+ /* Always process resize requests pixelwise. Frame maximizing
+ should work even when frame_resize_pixelwise is nil. */
+ if (true || frame_resize_pixelwise)
{
-#endif /* 0 */
int width, height;
pixel_to_text_size (ew, ew->core.width, ew->core.height, &width, &height);
update_various_frame_slots (ew);
cancel_mouse_face (f);
-#if 0 /* See comment above. */
}
else
{
+ struct x_output *x = f->output_data.x;
int columns, rows;
pixel_to_char_size (ew, ew->core.width, ew->core.height, &columns, &rows);
cancel_mouse_face (f);
}
}
-#endif /* 0 */
}
static Boolean
DEFUN ("select-window", Fselect_window, Sselect_window, 1, 2, 0,
doc: /* Select WINDOW which must be a live window.
Also make WINDOW's frame the selected frame and WINDOW that frame's
-selected window. In addition, make WINDOW's buffer current and set that
+selected window. In addition, make WINDOW's buffer current and set its
buffer's value of `point' to the value of WINDOW's `window-point'.
Return WINDOW.
front of the buffer list and do not make this window the most recently
selected one.
-Note that the main editor command loop sets the current buffer to the
-buffer of the selected window before each command. */)
+Run `buffer-list-update-hook' unless NORECORD is non-nil. Note that
+applications and internal routines often select a window temporarily for
+various purposes; mostly, to simplify coding. As a rule, such
+selections should be not recorded and therefore will not pollute
+`buffer-list-update-hook'. Selections that "really count" are those
+causing a visible change in the next redisplay of WINDOW's frame and
+should be always recorded. So if you think of running a function each
+time a window gets selected put it on `buffer-list-update-hook'.
+
+Also note that the main editor command loop sets the current buffer to
+the buffer of the selected window before each command. */)
(register Lisp_Object window, Lisp_Object norecord)
{
return select_window (window, norecord, 0);
doc: /* Return the height of window WINDOW in pixels.
WINDOW must be a valid window and defaults to the selected one.
-The return value includes the mode line and header line, if any. If
-WINDOW is an internal window, its pixel height is the height of the
-screen areas spanned by its children. */)
+The return value includes the mode line and header line and the bottom
+divider, if any. If WINDOW is an internal window, its pixel height is
+the height of the screen areas spanned by its children. */)
(Lisp_Object window)
{
return make_number (decode_valid_window (window)->pixel_height);
if (y < top_y || y >= bottom_y || x < left_x || x >= right_x)
return ON_NOTHING;
- /* On vertical window divider (which prevails horizontal
- dividers)? */
- if (!WINDOW_RIGHTMOST_P (w)
- && WINDOW_RIGHT_DIVIDER_WIDTH (w)
- && x >= right_x - WINDOW_RIGHT_DIVIDER_WIDTH (w)
- && x <= right_x)
- return ON_RIGHT_DIVIDER;
- /* On the horizontal window divider? */
- else if (WINDOW_BOTTOM_DIVIDER_WIDTH (w)
- && y >= (bottom_y - WINDOW_BOTTOM_DIVIDER_WIDTH (w))
- && y <= bottom_y)
+ /* On the horizontal window divider (which prevails the vertical
+ divider)? */
+ if (WINDOW_BOTTOM_DIVIDER_WIDTH (w) > 0
+ && y >= (bottom_y - WINDOW_BOTTOM_DIVIDER_WIDTH (w))
+ && y <= bottom_y)
return ON_BOTTOM_DIVIDER;
+ /* On vertical window divider? */
+ else if (!WINDOW_RIGHTMOST_P (w)
+ && WINDOW_RIGHT_DIVIDER_WIDTH (w) > 0
+ && x >= right_x - WINDOW_RIGHT_DIVIDER_WIDTH (w)
+ && x <= right_x)
+ return ON_RIGHT_DIVIDER;
/* On the mode or header line? */
else if ((WINDOW_WANTS_MODELINE_P (w)
&& y >= (bottom_y
resize windows horizontally in case we're using toolkit scroll
bars. Note: If scrollbars are on the left, the window that
must be eventually resized is that on the left of WINDOW. */
- if ((WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_LEFT (w)
- && !WINDOW_LEFTMOST_P (w)
- && eabs (x - left_x) < grabbable_width)
- || (!WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_LEFT (w)
- && !WINDOW_RIGHTMOST_P (w)
- && eabs (x - right_x) < grabbable_width))
+ if ((WINDOW_RIGHT_DIVIDER_WIDTH (w) == 0)
+ && ((WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_LEFT (w)
+ && !WINDOW_LEFTMOST_P (w)
+ && eabs (x - left_x) < grabbable_width)
+ || (!WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_LEFT (w)
+ && !WINDOW_RIGHTMOST_P (w)
+ && eabs (x - right_x) < grabbable_width)))
return ON_VERTICAL_BORDER;
else
return part;
if (FRAME_WINDOW_P (f))
{
if (!w->pseudo_window_p
+ && WINDOW_RIGHT_DIVIDER_WIDTH (w) == 0
&& !WINDOW_HAS_VERTICAL_SCROLL_BAR (w)
&& !WINDOW_RIGHTMOST_P (w)
&& (eabs (x - right_x) < grabbable_width))
/* Need to say "x > right_x" rather than >=, since on character
terminals, the vertical line's x coordinate is right_x. */
else if (!w->pseudo_window_p
+ && WINDOW_RIGHT_DIVIDER_WIDTH (w) == 0
&& !WINDOW_RIGHTMOST_P (w)
/* Why check ux if we are not the rightmost window? Also
shouldn't a pseudo window always be rightmost? */
? (x >= left_x + WINDOW_LEFT_FRINGE_WIDTH (w))
: (x < left_x + lmargin_width)))
return ON_LEFT_MARGIN;
-
- return ON_LEFT_FRINGE;
+ else
+ return ON_LEFT_FRINGE;
}
if (x >= text_right)
? (x < right_x - WINDOW_RIGHT_FRINGE_WIDTH (w))
: (x >= right_x - rmargin_width)))
return ON_RIGHT_MARGIN;
-
- return ON_RIGHT_FRINGE;
+ else
+ return ON_RIGHT_FRINGE;
}
/* Everything special ruled out - must be on text area */
case ON_TEXT:
return x - window_box_left (w, TEXT_AREA);
+ case ON_HEADER_LINE:
+ case ON_MODE_LINE:
case ON_LEFT_FRINGE:
return x - left_x;
frame.
If COORDINATES are in the text portion of WINDOW,
the coordinates relative to the window are returned.
+If they are in the bottom divider of WINDOW, `bottom-divider' is returned.
+If they are in the right divider of WINDOW, `right-divider' is returned.
If they are in the mode line of WINDOW, `mode-line' is returned.
-If they are in the top mode line of WINDOW, `header-line' is returned.
+If they are in the header line of WINDOW, `header-line' is returned.
If they are in the left fringe of WINDOW, `left-fringe' is returned.
If they are in the right fringe of WINDOW, `right-fringe' is returned.
If they are on the border between WINDOW and its right sibling,
if (MINI_WINDOW_P (XWINDOW (selected_window))
&& !NILP (Vminibuf_scroll_window))
window = Vminibuf_scroll_window;
- /* If buffer is specified, scroll that buffer. */
- else if (!NILP (Vother_window_scroll_buffer))
+ /* If buffer is specified and live, scroll that buffer. */
+ else if (!NILP (Vother_window_scroll_buffer)
+ && BUFFERP (Vother_window_scroll_buffer)
+ && BUFFER_LIVE_P (XBUFFER (Vother_window_scroll_buffer)))
{
window = Fget_buffer_window (Vother_window_scroll_buffer, Qnil);
if (NILP (window))
mode_line_in_non_selected_windows = 1;
DEFVAR_LISP ("other-window-scroll-buffer", Vother_window_scroll_buffer,
- doc: /* If non-nil, this is a buffer and \\[scroll-other-window] should scroll its window. */);
+ doc: /* If this is a live buffer, \\[scroll-other-window] should scroll its window. */);
Vother_window_scroll_buffer = Qnil;
DEFVAR_BOOL ("auto-window-vscroll", auto_window_vscroll_p,
}
if (part != ON_MODE_LINE && part != ON_HEADER_LINE)
- gx += window_box_left_offset (w, area);
+ {
+ gx += window_box_left_offset (w, area);
+ /* Don't expand over the modeline to make sure the vertical
+ drag cursor is shown early enough. */
+ height = min (height,
+ max (0, WINDOW_BOX_HEIGHT_NO_MODE_LINE (w) - gy));
+ }
}
else
{
gx = (x / width) * width;
y -= gy;
gy += (y / height) * height;
+ if (part != ON_MODE_LINE && part != ON_HEADER_LINE)
+ /* See comment above. */
+ height = min (height,
+ max (0, WINDOW_BOX_HEIGHT_NO_MODE_LINE (w) - gy));
}
break;
gx = (WINDOW_HAS_FRINGES_OUTSIDE_MARGINS (w)
? window_box_right_offset (w, RIGHT_MARGIN_AREA)
: window_box_right_offset (w, TEXT_AREA));
- width = WINDOW_RIGHT_FRINGE_WIDTH (w);
+ if (WINDOW_RIGHT_DIVIDER_WIDTH (w) == 0
+ && !WINDOW_HAS_VERTICAL_SCROLL_BAR (w)
+ && !WINDOW_RIGHTMOST_P (w))
+ if (gx < WINDOW_PIXEL_WIDTH (w) - width)
+ /* Make sure the vertical border can get her own glyph to the
+ right of the one we build here. */
+ width = WINDOW_RIGHT_FRINGE_WIDTH (w) - width;
+ else
+ width = WINDOW_PIXEL_WIDTH (w) - gx;
+ else
+ width = WINDOW_RIGHT_FRINGE_WIDTH (w);
+
+ goto row_glyph;
+
+ case ON_VERTICAL_BORDER:
+ gx = WINDOW_PIXEL_WIDTH (w) - width;
goto row_glyph;
case ON_SCROLL_BAR:
}
break;
+ case ON_RIGHT_DIVIDER:
+ gx = WINDOW_PIXEL_WIDTH (w) - WINDOW_RIGHT_DIVIDER_WIDTH (w);
+ width = WINDOW_RIGHT_DIVIDER_WIDTH (w);
+ gy = 0;
+ /* The bottom divider prevails. */
+ height = WINDOW_PIXEL_HEIGHT (w) - WINDOW_BOTTOM_DIVIDER_WIDTH (w);
+ goto add_edge;;
+
+ case ON_BOTTOM_DIVIDER:
+ gx = 0;
+ width = WINDOW_PIXEL_WIDTH (w);
+ gy = WINDOW_PIXEL_HEIGHT (w) - WINDOW_BOTTOM_DIVIDER_WIDTH (w);
+ height = WINDOW_BOTTOM_DIVIDER_WIDTH (w);
+ goto add_edge;
+
default:
;
virtual_glyph:
goto store_rect;
}
+ add_edge:
gx += WINDOW_LEFT_EDGE_X (w);
gy += WINDOW_TOP_EDGE_Y (w);
For strings from wrap-prefix and line-prefix properties,
use the default face, possibly remapped via
Vface_remapping_alist. */
+ /* Note that the fact that we use the face at _buffer_
+ position means that a 'display' property on an overlay
+ string will not inherit the face of that overlay string,
+ but will instead revert to the face of buffer text
+ covered by the overlay. This is visible, e.g., when the
+ overlay specifies a box face, but neither the buffer nor
+ the display string do. This sounds like a design bug,
+ but Emacs always did that since v21.1, so changing that
+ might be a big deal. */
base_face_id = it->string_from_prefix_prop_p
? (!NILP (Vface_remapping_alist)
? lookup_basic_face (it->f, DEFAULT_FACE_ID)
it->object = it->w->contents;
break;
case GET_FROM_STRING:
- it->object = it->string;
+ {
+ struct face *face = FACE_FROM_ID (it->f, it->face_id);
+
+ /* Restore the face_box_p flag, since it could have been
+ overwritten by the face of the object that we just finished
+ displaying. */
+ if (face)
+ it->face_box_p = face->box != FACE_NO_BOX;
+ it->object = it->string;
+ }
break;
case GET_FROM_DISPLAY_VECTOR:
if (it->s)
If this is the last string character displayed, check
the next buffer location. */
else if ((IT_STRING_CHARPOS (*it) >= SCHARS (it->string) - 1)
- && (it->current.overlay_string_index
- == it->n_overlay_strings - 1))
+ /* n_overlay_strings is unreliable unless
+ overlay_string_index is non-negative. */
+ && ((it->current.overlay_string_index >= 0
+ && (it->current.overlay_string_index
+ == it->n_overlay_strings - 1))
+ /* A string from display property. */
+ || it->from_disp_prop_p))
{
ptrdiff_t ignore;
int next_face_id;
struct text_pos pos = it->current.pos;
- INC_TEXT_POS (pos, it->multibyte_p);
- next_face_id = face_at_buffer_position
- (it->w, CHARPOS (pos), &ignore,
- (IT_CHARPOS (*it) + TEXT_PROP_DISTANCE_LIMIT), 0,
- -1);
- it->end_of_box_run_p
- = (FACE_FROM_ID (it->f, next_face_id)->box
- == FACE_NO_BOX);
+ /* For a string from a display property, the next
+ buffer position is stored in the 'position'
+ member of the iteration stack slot below the
+ current one, see handle_single_display_spec. By
+ contrast, it->current.pos was is not yet updated
+ to point to that buffer position; that will
+ happen in pop_it, after we finish displaying the
+ current string. Note that we already checked
+ above that it->sp is positive, so subtracting one
+ from it is safe. */
+ if (it->from_disp_prop_p)
+ pos = (it->stack + it->sp - 1)->position;
+ else
+ INC_TEXT_POS (pos, it->multibyte_p);
+
+ if (CHARPOS (pos) >= ZV)
+ it->end_of_box_run_p = true;
+ else
+ {
+ next_face_id = face_at_buffer_position
+ (it->w, CHARPOS (pos), &ignore,
+ CHARPOS (pos) + TEXT_PROP_DISTANCE_LIMIT, 0, -1);
+ it->end_of_box_run_p
+ = (FACE_FROM_ID (it->f, next_face_id)->box
+ == FACE_NO_BOX);
+ }
}
}
}
doesn't fit on the line, e.g. a wide image. */
it->hpos == 0
|| (new_x == it->last_visible_x
- && FRAME_WINDOW_P (it->f)))
+ && FRAME_WINDOW_P (it->f)
+ /* When word-wrap is ON and we have a valid
+ wrap point, we don't allow the last glyph
+ to "just barely fit" on the line. */
+ && (it->line_wrap != WORD_WRAP
+ || wrap_it.sp < 0)))
{
++it->hpos;
it->current_x = new_x;
defaults to the maximum accessible position of the buffer. If TO is t,
use the maximum accessible position that is not a newline character.
-The optional argument X_LIMIT, if non-nil, specifies the maximum text
-width that can be returned. X_LIMIT nil or omitted, means to use the
+The optional argument X-LIMIT, if non-nil, specifies the maximum text
+width that can be returned. X-LIMIT nil or omitted, means to use the
pixel-width of WINDOW's body; use this if you do not intend to change
the width of WINDOW. Use the maximum width WINDOW may assume if you
-intend to change WINDOW's width.
+intend to change WINDOW's width. In any case, text whose x-coordinate
+is beyond X-LIMIT is ignored. Since calculating the width of long lines
+can take some time, it's always a good idea to make this argument as
+small as possible; in particular, if the buffer contains long lines that
+shall be truncated anyway.
-The optional argument Y_LIMIT, if non-nil, specifies the maximum text
+The optional argument Y-LIMIT, if non-nil, specifies the maximum text
height that can be returned. Text lines whose y-coordinate is beyond
-Y_LIMIT are ignored. Since calculating the text height of a large
+Y-LIMIT are ignored. Since calculating the text height of a large
buffer can take some time, it makes sense to specify this argument if
the size of the buffer is unknown.
-Optional argument MODE_AND_HEADER_LINE nil or omitted means do not
+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,
move_it_by_lines (&it, -1);
target_x = it.last_visible_x - !FRAME_WINDOW_P (it.f);
target_is_eol_p = true;
+ /* Under word-wrap, we don't know the x coordinate of
+ the last character displayed on the previous line,
+ which immediately precedes the wrap point. To find
+ out its x coordinate, we try moving to the right
+ margin of the window, which will stop at the wrap
+ point, and then reset target_x to point at the
+ character that precedes the wrap point. This is not
+ needed on GUI frames, because (see below) there we
+ move from the left margin one grapheme cluster at a
+ time, and stop when we hit the wrap point. */
+ if (!FRAME_WINDOW_P (it.f) && it.line_wrap == WORD_WRAP)
+ {
+ void *it_data = NULL;
+ struct it it2;
+
+ SAVE_IT (it2, it, it_data);
+ move_it_in_display_line_to (&it, ZV, target_x,
+ MOVE_TO_POS | MOVE_TO_X);
+ /* If we arrived at target_x, that _is_ the last
+ character on the previous line. */
+ if (it.current_x != target_x)
+ target_x = it.current_x - 1;
+ RESTORE_IT (&it, &it2, it_data);
+ }
}
}
else
new_pos = it.current.pos;
while (it.current_x + it.pixel_width <= target_x
- && rc == MOVE_X_REACHED)
+ && (rc == MOVE_X_REACHED
+ /* Under word-wrap, move_it_in_display_line_to
+ stops at correct coordinates, but sometimes
+ returns MOVE_POS_MATCH_OR_ZV. */
+ || (it.line_wrap == WORD_WRAP
+ && rc == MOVE_POS_MATCH_OR_ZV)))
{
int new_x = it.current_x + it.pixel_width;
/* Change the mouse pointer according to what is under it. */
if (FRAME_WINDOW_P (f))
{
+ bool draggable = (! WINDOW_BOTTOMMOST_P (w)
+ || minibuf_level
+ || NILP (Vresize_mini_windows));
+
dpyinfo = FRAME_DISPLAY_INFO (f);
if (STRINGP (string))
{
map = Fget_text_property (pos, Qlocal_map, string);
if (!KEYMAPP (map))
map = Fget_text_property (pos, Qkeymap, string);
- if (!KEYMAPP (map))
+ if (!KEYMAPP (map) && draggable)
cursor = dpyinfo->vertical_scroll_bar_cursor;
}
}
- else
+ else if (draggable)
/* Default mode-line pointer. */
cursor = FRAME_DISPLAY_INFO (f)->vertical_scroll_bar_cursor;
}
help_echo_string = build_string ("drag-mouse-1: resize");
}
else if (part == ON_BOTTOM_DIVIDER)
- {
- cursor = FRAME_X_OUTPUT (f)->vertical_drag_cursor;
- help_echo_string = build_string ("drag-mouse-1: resize");
- }
+ if (! WINDOW_BOTTOMMOST_P (w)
+ || minibuf_level
+ || NILP (Vresize_mini_windows))
+ {
+ cursor = FRAME_X_OUTPUT (f)->vertical_drag_cursor;
+ help_echo_string = build_string ("drag-mouse-1: resize");
+ }
+ else
+ cursor = FRAME_X_OUTPUT (f)->nontext_cursor;
else if (part == ON_LEFT_FRINGE || part == ON_RIGHT_FRINGE
|| part == ON_SCROLL_BAR)
cursor = FRAME_X_OUTPUT (f)->nontext_cursor;
XRecolorCursor (dpy, hand_cursor, &fore_color, &back_color);
XRecolorCursor (dpy, hourglass_cursor, &fore_color, &back_color);
XRecolorCursor (dpy, horizontal_drag_cursor, &fore_color, &back_color);
+ XRecolorCursor (dpy, vertical_drag_cursor, &fore_color, &back_color);
}
if (FRAME_X_WINDOW (f) != 0)
struct font font;
Display *display;
XFontStruct *xfont;
+ unsigned x_display_id;
};
/* Prototypes of support functions. */
font = XFONT_OBJECT (font_object);
((struct xfont_info *) font)->xfont = xfont;
((struct xfont_info *) font)->display = FRAME_X_DISPLAY (f);
+ ((struct xfont_info *) font)->x_display_id = FRAME_DISPLAY_INFO (f)->x_id;
font->pixel_size = pixel_size;
font->driver = &xfont_driver;
font->encoding_charset = encoding->id;
static void
xfont_close (struct font *font)
{
+ struct x_display_info *xdi;
struct xfont_info *xfi = (struct xfont_info *) font;
/* This function may be called from GC when X connection is gone
(Bug#16093), and an attempt to free font resources on invalid
- display may lead to X protocol errors or segfaults. */
- if (xfi->xfont && x_display_info_for_display (xfi->display))
+ display may lead to X protocol errors or segfaults. Moreover,
+ the memory referenced by 'Display *' pointer may be reused for
+ the logically different X connection after the previous display
+ connection was closed. That's why we also check whether font's
+ ID matches the one recorded in x_display_info for this display.
+ See http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16069. */
+ if (xfi->xfont
+ && ((xdi = x_display_info_for_display (xfi->display))
+ && xfi->x_display_id == xdi->x_id))
{
block_input ();
XFreeFont (xfi->display, xfi->xfont);
FT_Matrix matrix;
Display *display;
XftFont *xftfont;
+ unsigned x_display_id;
};
/* Structure pointed by (struct face *)->extra */
xftfont_info = (struct xftfont_info *) font;
xftfont_info->display = display;
xftfont_info->xftfont = xftfont;
+ xftfont_info->x_display_id = FRAME_DISPLAY_INFO (f)->x_id;
/* This means that there's no need of transformation. */
xftfont_info->matrix.xx = 0;
if (FcPatternGetMatrix (xftfont->pattern, FC_MATRIX, 0, &matrix)
static void
xftfont_close (struct font *font)
{
+ struct x_display_info *xdi;
struct xftfont_info *xftfont_info = (struct xftfont_info *) font;
#ifdef HAVE_LIBOTF
/* See comment in xfont_close. */
if (xftfont_info->xftfont
- && x_display_info_for_display (xftfont_info->display))
+ && ((xdi = x_display_info_for_display (xftfont_info->display))
+ && xftfont_info->x_display_id == xdi->x_id))
{
block_input ();
XftUnlockFace (xftfont_info->xftfont);
#include <glib.h>
#include <errno.h>
+#include <stdbool.h>
#include <timespec.h>
#include "frame.h"
int gfds_size = sizeof gfds_buf / sizeof *gfds_buf;
int n_gfds, retval = 0, our_fds = 0, max_fds = fds_lim - 1;
int i, nfds, tmo_in_millisec;
+ bool need_to_dispatch;
USE_SAFE_ALLOCA;
/* Do not try to optimize with an initial check with g_main_context_pending
/* If Gtk+ is in use eventually gtk_main_iteration will be called,
unless retval is zero. */
#ifdef USE_GTK
- if (retval == 0)
+ need_to_dispatch = retval == 0;
+#else
+ need_to_dispatch = true;
#endif
- while (g_main_context_pending (context))
- g_main_context_dispatch (context);
+ if (need_to_dispatch)
+ {
+ int pselect_errno = errno;
+ while (g_main_context_pending (context))
+ g_main_context_dispatch (context);
+ errno = pselect_errno;
+ }
/* To not have to recalculate timeout, return like this. */
if ((our_fds > 0 || (nfds == 0 && tmop == &tmo)) && (retval == 0))
if (current_mono_font != NULL && strcmp (newfont, current_mono_font) == 0)
return; /* No change. */
- xfree (current_mono_font);
- current_mono_font = xstrdup (newfont);
+ dupstring (¤t_mono_font, newfont);
if (dpyinfo_valid (first_dpyinfo) && use_system_font)
{
if (current_font != NULL && strcmp (newfont, current_font) == 0)
return; /* No change. */
- xfree (current_font);
- current_font = xstrdup (newfont);
+ dupstring (¤t_font, newfont);
if (dpyinfo_valid (first_dpyinfo))
{
++settings_seen;
if (strcmp (name, XSETTINGS_TOOL_BAR_STYLE) == 0)
{
- settings->tb_style = xstrdup (sval);
+ dupstring (&settings->tb_style, sval);
settings->seen |= SEEN_TB_STYLE;
}
#ifdef HAVE_XFT
else if (strcmp (name, XSETTINGS_FONT_NAME) == 0)
{
- settings->font = xstrdup (sval);
+ dupstring (&settings->font, sval);
settings->seen |= SEEN_FONT;
}
else if (strcmp (name, "Xft/Antialias") == 0)
if (send_event_p)
store_font_name_changed (settings.font);
else
- {
- xfree (current_font);
- current_font = xstrdup (settings.font);
- }
+ dupstring (¤t_font, settings.font);
xfree (settings.font);
}
#endif
{
g_variant_ref_sink (val);
if (g_variant_is_of_type (val, G_VARIANT_TYPE_STRING))
- current_mono_font = xstrdup (g_variant_get_string (val, NULL));
+ dupstring (¤t_mono_font, g_variant_get_string (val, NULL));
g_variant_unref (val);
}
{
g_variant_ref_sink (val);
if (g_variant_is_of_type (val, G_VARIANT_TYPE_STRING))
- current_font = xstrdup (g_variant_get_string (val, NULL));
+ dupstring (¤t_font, g_variant_get_string (val, NULL));
g_variant_unref (val);
}
#endif /* HAVE_XFT */
s = gconf_client_get_string (gconf_client, GCONF_MONO_FONT, NULL);
if (s)
{
- current_mono_font = xstrdup (s);
+ dupstring (¤t_mono_font, s);
g_free (s);
}
s = gconf_client_get_string (gconf_client, GCONF_FONT_NAME, NULL);
if (s)
{
- current_font = xstrdup (s);
+ dupstring (¤t_font, s);
g_free (s);
}
gconf_client_add_dir (gconf_client,
XFillRectangle (s->display, s->window, gc, x, y, w, h);
XSetForeground (s->display, gc, xgcv.foreground);
}
+
+ XSetClipMask (s->display, gc, None);
}
}
else if (!s->background_filled_p)
{
#ifdef HAVE_X11R6_XIM
struct xim_inst_t *xim_inst = xmalloc (sizeof *xim_inst);
+ Bool ret;
dpyinfo->xim_callback_data = xim_inst;
xim_inst->dpyinfo = dpyinfo;
xim_inst->resource_name = xstrdup (resource_name);
- XRegisterIMInstantiateCallback (dpyinfo->display, dpyinfo->xrdb,
- resource_name, emacs_class,
- xim_instantiate_callback,
- /* This is XPointer in XFree86
- but (XPointer *) on Tru64, at
- least, hence the configure test. */
- (XRegisterIMInstantiateCallback_arg6) xim_inst);
+ ret = XRegisterIMInstantiateCallback
+ (dpyinfo->display, dpyinfo->xrdb, xim_inst->resource_name,
+ emacs_class, xim_instantiate_callback,
+ /* This is XPointer in XFree86 but (XPointer *)
+ on Tru64, at least, hence the configure test. */
+ (XRegisterIMInstantiateCallback_arg6) xim_inst);
+ eassert (ret == True);
#else /* not HAVE_X11R6_XIM */
xim_open_dpy (dpyinfo, resource_name);
#endif /* not HAVE_X11R6_XIM */
if (use_xim)
{
#ifdef HAVE_X11R6_XIM
+ struct xim_inst_t *xim_inst = dpyinfo->xim_callback_data;
+
if (dpyinfo->display)
- XUnregisterIMInstantiateCallback (dpyinfo->display, dpyinfo->xrdb,
- NULL, emacs_class,
- xim_instantiate_callback, NULL);
- xfree (dpyinfo->xim_callback_data->resource_name);
- xfree (dpyinfo->xim_callback_data);
+ {
+ Bool ret = XUnregisterIMInstantiateCallback
+ (dpyinfo->display, dpyinfo->xrdb, xim_inst->resource_name,
+ emacs_class, xim_instantiate_callback,
+ (XRegisterIMInstantiateCallback_arg6) xim_inst);
+ eassert (ret == True);
+ }
+ xfree (xim_inst->resource_name);
+ xfree (xim_inst);
#endif /* HAVE_X11R6_XIM */
if (dpyinfo->display)
XCloseIM (dpyinfo->xim);
f->output_data.x->black_relief.gc = 0;
}
+ /* Free cursors. */
+ if (f->output_data.x->text_cursor != 0)
+ XFreeCursor (FRAME_X_DISPLAY (f), f->output_data.x->text_cursor);
+ if (f->output_data.x->nontext_cursor != 0)
+ XFreeCursor (FRAME_X_DISPLAY (f), f->output_data.x->nontext_cursor);
+ if (f->output_data.x->modeline_cursor != 0)
+ XFreeCursor (FRAME_X_DISPLAY (f), f->output_data.x->modeline_cursor);
+ if (f->output_data.x->hand_cursor != 0)
+ XFreeCursor (FRAME_X_DISPLAY (f), f->output_data.x->hand_cursor);
+ if (f->output_data.x->hourglass_cursor != 0)
+ XFreeCursor (FRAME_X_DISPLAY (f), f->output_data.x->hourglass_cursor);
+ if (f->output_data.x->horizontal_drag_cursor != 0)
+ XFreeCursor (FRAME_X_DISPLAY (f), f->output_data.x->horizontal_drag_cursor);
+ if (f->output_data.x->vertical_drag_cursor != 0)
+ XFreeCursor (FRAME_X_DISPLAY (f), f->output_data.x->vertical_drag_cursor);
+
XFlush (FRAME_X_DISPLAY (f));
}
}
#endif
+/* Current X display connection identifier. Incremented for each next
+ connection established. */
+static unsigned x_display_id;
+
/* Open a connection to X display DISPLAY_NAME, and return
the structure that describes the open display.
If we cannot contact the display, return null. */
lim = min (PTRDIFF_MAX, SIZE_MAX) - sizeof "@";
if (lim - SBYTES (Vinvocation_name) < SBYTES (Vsystem_name))
memory_full (SIZE_MAX);
+ dpyinfo->x_id = ++x_display_id;
dpyinfo->x_id_name = xmalloc (SBYTES (Vinvocation_name)
+ SBYTES (Vsystem_name) + 2);
strcat (strcat (strcpy (dpyinfo->x_id_name, SSDATA (Vinvocation_name)), "@"),
mouse-face. */
Mouse_HLInfo mouse_highlight;
+ /* Logical identifier of this display. */
+ unsigned x_id;
+
+ /* Default name for all frames on this display. */
char *x_id_name;
/* The number of fonts opened for this display. */
+2014-03-07 Michael Albinus <michael.albinus@gmx.de>
+
+ * automated/tramp-tests.el (tramp-copy-size-limit): Declare.
+ (tramp-test10-write-region): Extend for out-of-band copy.
+ (tramp-test31-asynchronous-requests): New test.
+
+2014-03-02 Barry O'Reilly <gundaetiapo@gmail.com>
+
+ * automated/undo-tests.el (undo-test-in-region-not-most-recent):
+ Add new test of undo in region.
+ (undo-test-in-region-eob): Add test case described at
+ http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16411
+
+2014-02-28 Michael Albinus <michael.albinus@gmx.de>
+
+ * automated/tramp-tests.el (tramp--test-enabled)
+ (tramp-test15-copy-directory): No special handling of tramp-adb.el
+ anymore. It's fixed in that package.
+
+2014-02-27 Michael Albinus <michael.albinus@gmx.de>
+
+ * automated/tramp-tests.el (tramp--test-enabled): Move connection
+ cleanup into this function. Remove respective code from all test
+ cases.
+ (tramp--instrument-test-case): Declare `indent' and `debug'.
+ Handle other errors as well.
+ (tramp-test14-delete-directory): Check for `file-error' error.
+ (tramp-test15-copy-directory): Ignore return value of
+ `copy-directory'. It's too much hassle to handle it for tramp-adb.el.
+ (tramp-test19-directory-files-and-attributes): Take care of
+ timestamp of "../".
+ (tramp-test20-file-modes, tramp-test27-start-file-process)
+ (tramp-test28-shell-command): Skip for tramp-adb.el.
+ (tramp-test21-file-links): `file-truename' shall preserve trailing
+ link of directories.
+ (tramp-test22-file-times): Skip if `set-file-times' returns nil.
+ (tramp-test26-process-file, tramp-test28-shell-command): Let-bind
+ `kill-buffer-query-functions' to nil.
+ (tramp-test28-shell-command): Run `async-shell-command' with timeouts.
+
2014-02-21 Michael Albinus <michael.albinus@gmx.de>
* automated/tramp-tests.el
(tramp-test20-file-modes, tramp-test21-file-links)
(tramp-test22-file-times, tramp-test23-visited-file-modtime)
(tramp-test24-file-name-completion, tramp-test25-load)
- (tramp-test26-process-file, tramp-test27-start-file-process):
+ (tramp-test26-process-file, tramp-test27-start-file-process)
(tramp-test28-shell-command): Protect unwindforms with `ignore-errors'.
(tramp-test29-utf8): New test.
* automated/tramp-tests.el (tramp-test-temporary-file-directory):
Check $TRAMP_TEST_TEMPORARY_FILE_DIRECTORY.
(tramp-read-passwd): Check $TRAMP_TEST_ALLOW_PASSWORD.
- (tramp-test09-insert-file-contents, tramp-test10-write-region):
+ (tramp-test09-insert-file-contents, tramp-test10-write-region)
(tramp-test26-process-file): Add tests.
(tramp-test11-copy-file): Remove debug message.
(tramp-test20-file-modes): Special case, if user is "root".
Add icalendar-testsuite--test-datestring-to-isodate,
icalendar-testsuite--test-datetime-to-diary-date, and
icalendar-testsuite--test-calendar-style.
- (icalendar-testsuite--test-format-ical-event):
+ (icalendar-testsuite--test-format-ical-event)
(icalendar-testsuite--test-parse-summary-and-rest):
Doc fix. Remove european-calendar-style.
(icalendar-testsuite--get-ical-event): Doc fix.
- (icalendar-testsuite--test-first-weekday-of-year):
+ (icalendar-testsuite--test-first-weekday-of-year)
(icalendar-testsuite--run-cycle-tests): Add doc string.
- (icalendar-testsuite--test-datestring-to-isodate):
- (icalendar-testsuite--test-datetime-to-diary-date):
+ (icalendar-testsuite--test-datestring-to-isodate)
+ (icalendar-testsuite--test-datetime-to-diary-date)
(icalendar-testsuite--test-calendar-style): New functions.
(icalendar-testsuite--test-export): Handle iso date style.
New arg INPUT-ISO. Use calendar-date-style.
(icalendar-testsuite--test-import): Handle iso date style.
New arg EXPECTED-ISO. Use calendar-date-style.
(icalendar-testsuite--test-cycle): Handle iso date style.
- (icalendar-testsuite--run-import-tests):
- (icalendar-testsuite--run-export-tests):
+ (icalendar-testsuite--run-import-tests)
+ (icalendar-testsuite--run-export-tests)
(icalendar-testsuite--run-real-world-tests): Add iso style tests.
2008-02-29 Glenn Morris <rgm@gnu.org>
(declare-function tramp-find-executable "tramp-sh")
(declare-function tramp-get-remote-path "tramp-sh")
+(defvar tramp-copy-size-limit)
;; There is no default value on w32 systems, which could work out of the box.
(defconst tramp-test-temporary-file-directory
(file-remote-p tramp-test-temporary-file-directory)
(file-directory-p tramp-test-temporary-file-directory)
(file-writable-p tramp-test-temporary-file-directory))))))
+
+ (when (cdr tramp--test-enabled-checked)
+ ;; Cleanup connection.
+ (tramp-cleanup-connection
+ (tramp-dissect-file-name tramp-test-temporary-file-directory)
+ nil 'keep-password))
+
;; Return result.
(cdr tramp--test-enabled-checked))
"Run BODY with `tramp-verbose' equal VERBOSE.
Print the the content of the Tramp debug buffer, if BODY does not
eval properly in `should', `should-not' or `should-error'."
- `(let ((tramp-verbose ,verbose))
+ (declare (indent 1) (debug (natnump body)))
+ `(let ((tramp-verbose ,verbose)
+ (tramp-debug-on-error t))
(condition-case err
(progn ,@body)
- (ert-test-failed
+ (ert-test-skipped
+ (signal (car err) (cdr err)))
+ (error
(with-parsed-tramp-file-name tramp-test-temporary-file-directory nil
+ (with-current-buffer (tramp-get-connection-buffer v)
+ (message "%s" (buffer-string)))
(with-current-buffer (tramp-get-debug-buffer v)
(message "%s" (buffer-string))))
+ (message "%s" err)
(signal (car err) (cdr err))))))
-(put 'tramp--instrument-test-case 'lisp-indent-function 1)
(ert-deftest tramp-test00-availability ()
"Test availability of Tramp functions."
(ert-deftest tramp-test07-file-exists-p ()
"Check `file-exist-p', `write-region' and `delete-file'."
(skip-unless (tramp--test-enabled))
- (tramp-cleanup-connection
- (tramp-dissect-file-name tramp-test-temporary-file-directory)
- nil 'keep-password)
(let ((tmp-name (tramp--test-make-temp-name)))
(should-not (file-exists-p tmp-name))
(ert-deftest tramp-test08-file-local-copy ()
"Check `file-local-copy'."
(skip-unless (tramp--test-enabled))
- (tramp-cleanup-connection
- (tramp-dissect-file-name tramp-test-temporary-file-directory)
- nil 'keep-password)
(let ((tmp-name1 (tramp--test-make-temp-name))
tmp-name2)
(ert-deftest tramp-test09-insert-file-contents ()
"Check `insert-file-contents'."
(skip-unless (tramp--test-enabled))
- (tramp-cleanup-connection
- (tramp-dissect-file-name tramp-test-temporary-file-directory)
- nil 'keep-password)
(let ((tmp-name (tramp--test-make-temp-name)))
(unwind-protect
(ert-deftest tramp-test10-write-region ()
"Check `write-region'."
(skip-unless (tramp--test-enabled))
- (tramp-cleanup-connection
- (tramp-dissect-file-name tramp-test-temporary-file-directory)
- nil 'keep-password)
(let ((tmp-name (tramp--test-make-temp-name)))
(unwind-protect
(write-region 3 5 tmp-name))
(with-temp-buffer
(insert-file-contents tmp-name)
- (should (string-equal (buffer-string) "34"))))
- (ignore-errors (delete-file tmp-name)))))
+ (should (string-equal (buffer-string) "34")))
+ ;; Trigger out-of-band copy.
+ (let ((string ""))
+ (while (<= (length string) tramp-copy-size-limit)
+ (setq string (concat string (md5 string))))
+ (write-region string nil tmp-name)
+ (with-temp-buffer
+ (insert-file-contents tmp-name)
+ (should (string-equal (buffer-string) string)))))
+ (ignore-errors (delete-file tmp-name)))))
(ert-deftest tramp-test11-copy-file ()
"Check `copy-file'."
(skip-unless (tramp--test-enabled))
- (tramp-cleanup-connection
- (tramp-dissect-file-name tramp-test-temporary-file-directory)
- nil 'keep-password)
(let ((tmp-name1 (tramp--test-make-temp-name))
(tmp-name2 (tramp--test-make-temp-name)))
(ert-deftest tramp-test12-rename-file ()
"Check `rename-file'."
(skip-unless (tramp--test-enabled))
- (tramp-cleanup-connection
- (tramp-dissect-file-name tramp-test-temporary-file-directory)
- nil 'keep-password)
(let ((tmp-name1 (tramp--test-make-temp-name))
(tmp-name2 (tramp--test-make-temp-name)))
"Check `make-directory'.
This tests also `file-directory-p' and `file-accessible-directory-p'."
(skip-unless (tramp--test-enabled))
- (tramp-cleanup-connection
- (tramp-dissect-file-name tramp-test-temporary-file-directory)
- nil 'keep-password)
(let ((tmp-name (tramp--test-make-temp-name)))
(unwind-protect
(ert-deftest tramp-test14-delete-directory ()
"Check `delete-directory'."
(skip-unless (tramp--test-enabled))
- (tramp-cleanup-connection
- (tramp-dissect-file-name tramp-test-temporary-file-directory)
- nil 'keep-password)
(let ((tmp-name (tramp--test-make-temp-name)))
;; Delete empty directory.
;; Delete non-empty directory.
(make-directory tmp-name)
(write-region "foo" nil (expand-file-name "bla" tmp-name))
- (should-error (delete-directory tmp-name))
+ (should-error (delete-directory tmp-name) :type 'file-error)
(delete-directory tmp-name 'recursive)
(should-not (file-directory-p tmp-name))))
(ert-deftest tramp-test15-copy-directory ()
"Check `copy-directory'."
(skip-unless (tramp--test-enabled))
- (tramp-cleanup-connection
- (tramp-dissect-file-name tramp-test-temporary-file-directory)
- nil 'keep-password)
(let* ((tmp-name1 (tramp--test-make-temp-name))
(tmp-name2 (tramp--test-make-temp-name))
(ert-deftest tramp-test16-directory-files ()
"Check `directory-files'."
(skip-unless (tramp--test-enabled))
- (tramp-cleanup-connection
- (tramp-dissect-file-name tramp-test-temporary-file-directory)
- nil 'keep-password)
(let* ((tmp-name1 (tramp--test-make-temp-name))
(tmp-name2 (expand-file-name "bla" tmp-name1))
(ert-deftest tramp-test17-insert-directory ()
"Check `insert-directory'."
(skip-unless (tramp--test-enabled))
- (tramp-cleanup-connection
- (tramp-dissect-file-name tramp-test-temporary-file-directory)
- nil 'keep-password)
(let* ((tmp-name1 (tramp--test-make-temp-name))
(tmp-name2 (expand-file-name "foo" tmp-name1)))
"Check `file-attributes'.
This tests also `file-readable-p' and `file-regular-p'."
(skip-unless (tramp--test-enabled))
- (tramp-cleanup-connection
- (tramp-dissect-file-name tramp-test-temporary-file-directory)
- nil 'keep-password)
(let ((tmp-name (tramp--test-make-temp-name))
attr)
(ert-deftest tramp-test19-directory-files-and-attributes ()
"Check `directory-files-and-attributes'."
(skip-unless (tramp--test-enabled))
- (tramp-cleanup-connection
- (tramp-dissect-file-name tramp-test-temporary-file-directory)
- nil 'keep-password)
- (tramp--instrument-test-case 10
- (let ((tmp-name (tramp--test-make-temp-name))
- attr)
+ ;; `directory-files-and-attributes' contains also values for "../".
+ ;; Ensure that this doesn't change during tests, for
+ ;; example due to handling temporary files.
+ (let* ((tmp-name1 (tramp--test-make-temp-name))
+ (tmp-name2 (expand-file-name "bla" tmp-name1))
+ attr)
(unwind-protect
(progn
- (make-directory tmp-name)
- (should (file-directory-p tmp-name))
- (write-region "foo" nil (expand-file-name "foo" tmp-name))
- (write-region "bar" nil (expand-file-name "bar" tmp-name))
- (write-region "boz" nil (expand-file-name "boz" tmp-name))
- (setq attr (directory-files-and-attributes tmp-name))
+ (make-directory tmp-name1)
+ (should (file-directory-p tmp-name1))
+ (make-directory tmp-name2)
+ (should (file-directory-p tmp-name2))
+ (write-region "foo" nil (expand-file-name "foo" tmp-name2))
+ (write-region "bar" nil (expand-file-name "bar" tmp-name2))
+ (write-region "boz" nil (expand-file-name "boz" tmp-name2))
+ (setq attr (directory-files-and-attributes tmp-name2))
(should (consp attr))
(dolist (elt attr)
- ;; We cannot include "." and "..". They might have
- ;; changed their timestamp already.
- (when (string-match "foo$\\|bar$\\|baz$" (car elt))
- (should
- (equal (file-attributes (expand-file-name (car elt) tmp-name))
- (cdr elt)))))
- (setq attr (directory-files-and-attributes tmp-name 'full))
+ (should
+ (equal (file-attributes (expand-file-name (car elt) tmp-name2))
+ (cdr elt))))
+ (setq attr (directory-files-and-attributes tmp-name2 'full))
(dolist (elt attr)
- ;; We cannot include "." and "..". They might have
- ;; changed their timestamp already.
- (when (string-match "foo$\\|bar$\\|baz$" (car elt))
- (should
- (equal (file-attributes (car elt)) (cdr elt)))))
- (setq attr (directory-files-and-attributes tmp-name nil "^b"))
+ (should
+ (equal (file-attributes (car elt)) (cdr elt))))
+ (setq attr (directory-files-and-attributes tmp-name2 nil "^b"))
(should (equal (mapcar 'car attr) '("bar" "boz"))))
- (ignore-errors (delete-directory tmp-name 'recursive))))))
+ (ignore-errors (delete-directory tmp-name1 'recursive)))))
(ert-deftest tramp-test20-file-modes ()
"Check `file-modes'.
(not
(memq
(tramp-find-foreign-file-name-handler tramp-test-temporary-file-directory)
- '(tramp-gvfs-file-name-handler tramp-smb-file-name-handler))))
- (tramp-cleanup-connection
- (tramp-dissect-file-name tramp-test-temporary-file-directory)
- nil 'keep-password)
+ '(tramp-adb-file-name-handler
+ tramp-gvfs-file-name-handler
+ tramp-smb-file-name-handler))))
(let ((tmp-name (tramp--test-make-temp-name)))
(unwind-protect
(should (= (file-modes tmp-name) #o444))
(should-not (file-executable-p tmp-name))
;; A file is always writable for user "root".
- (when (and (stringp (file-remote-p tmp-name 'user))
- (not (string-equal (file-remote-p tmp-name 'user) "root")))
+ (when (not (string-equal (file-remote-p tmp-name 'user) "root"))
(should-not (file-writable-p tmp-name))))
(ignore-errors (delete-file tmp-name)))))
"Check `file-symlink-p'.
This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
(skip-unless (tramp--test-enabled))
- (tramp-cleanup-connection
- (tramp-dissect-file-name tramp-test-temporary-file-directory)
- nil 'keep-password)
(let ((tmp-name1 (tramp--test-make-temp-name))
(tmp-name2 (tramp--test-make-temp-name))
(string-equal (file-truename tmp-name1) (file-truename tmp-name2))))
(ignore-errors
(delete-file tmp-name1)
- (delete-file tmp-name2)))))
+ (delete-file tmp-name2)))
+
+ ;; `file-truename' shall preserve trailing link of directories.
+ (let* ((dir1 (directory-file-name tramp-test-temporary-file-directory))
+ (dir2 (file-name-as-directory dir1)))
+ (should (string-equal (file-truename dir1) (expand-file-name dir1)))
+ (should (string-equal (file-truename dir2) (expand-file-name dir2))))))
(ert-deftest tramp-test22-file-times ()
"Check `set-file-times' and `file-newer-than-file-p'."
(memq
(tramp-find-foreign-file-name-handler tramp-test-temporary-file-directory)
'(tramp-gvfs-file-name-handler tramp-smb-file-name-handler))))
- (tramp-cleanup-connection
- (tramp-dissect-file-name tramp-test-temporary-file-directory)
- nil 'keep-password)
(let ((tmp-name1 (tramp--test-make-temp-name))
(tmp-name2 (tramp--test-make-temp-name))
(write-region "foo" nil tmp-name1)
(should (file-exists-p tmp-name1))
(should (consp (nth 5 (file-attributes tmp-name1))))
- ;; '(0 0) means don't know, and will be replaced by `current-time'.
- (set-file-times tmp-name1 '(0 1))
+ ;; '(0 0) means don't know, and will be replaced by
+ ;; `current-time'. Therefore, we use '(0 1).
+ ;; We skip the test, if the remote handler is not able to
+ ;; set the correct time.
+ (skip-unless (set-file-times tmp-name1 '(0 1)))
;; Dumb busyboxes are not able to return the date correctly.
;; They say "don't know.
(skip-unless (not (equal (nth 5 (file-attributes tmp-name1)) '(0 0))))
(ert-deftest tramp-test23-visited-file-modtime ()
"Check `set-visited-file-modtime' and `verify-visited-file-modtime'."
(skip-unless (tramp--test-enabled))
- (tramp-cleanup-connection
- (tramp-dissect-file-name tramp-test-temporary-file-directory)
- nil 'keep-password)
(let ((tmp-name (tramp--test-make-temp-name)))
(unwind-protect
(ert-deftest tramp-test24-file-name-completion ()
"Check `file-name-completion' and `file-name-all-completions'."
(skip-unless (tramp--test-enabled))
- (tramp-cleanup-connection
- (tramp-dissect-file-name tramp-test-temporary-file-directory)
- nil 'keep-password)
(let ((tmp-name (tramp--test-make-temp-name)))
(unwind-protect
(ert-deftest tramp-test25-load ()
"Check `load'."
(skip-unless (tramp--test-enabled))
- (tramp-cleanup-connection
- (tramp-dissect-file-name tramp-test-temporary-file-directory)
- nil 'keep-password)
(let ((tmp-name (tramp--test-make-temp-name)))
(unwind-protect
(memq
(tramp-find-foreign-file-name-handler tramp-test-temporary-file-directory)
'(tramp-gvfs-file-name-handler tramp-smb-file-name-handler))))
- (tramp-cleanup-connection
- (tramp-dissect-file-name tramp-test-temporary-file-directory)
- nil 'keep-password)
(let ((tmp-name (tramp--test-make-temp-name))
- (default-directory tramp-test-temporary-file-directory))
+ (default-directory tramp-test-temporary-file-directory)
+ kill-buffer-query-functions)
(unwind-protect
(progn
;; We cannot use "/bin/true" and "/bin/false"; those paths
(not
(memq
(tramp-find-foreign-file-name-handler tramp-test-temporary-file-directory)
- '(tramp-gvfs-file-name-handler tramp-smb-file-name-handler))))
- (tramp-cleanup-connection
- (tramp-dissect-file-name tramp-test-temporary-file-directory)
- nil 'keep-password)
+ '(tramp-adb-file-name-handler
+ tramp-gvfs-file-name-handler
+ tramp-smb-file-name-handler))))
(let ((default-directory tramp-test-temporary-file-directory)
(tmp-name (tramp--test-make-temp-name))
(not
(memq
(tramp-find-foreign-file-name-handler tramp-test-temporary-file-directory)
- '(tramp-gvfs-file-name-handler tramp-smb-file-name-handler))))
- (tramp-cleanup-connection
- (tramp-dissect-file-name tramp-test-temporary-file-directory)
- nil 'keep-password)
+ '(tramp-adb-file-name-handler
+ tramp-gvfs-file-name-handler
+ tramp-smb-file-name-handler))))
(let ((tmp-name (tramp--test-make-temp-name))
- (default-directory tramp-test-temporary-file-directory))
+ (default-directory tramp-test-temporary-file-directory)
+ kill-buffer-query-functions)
(unwind-protect
(with-temp-buffer
(write-region "foo" nil tmp-name)
(async-shell-command
(format "ls %s" (file-name-nondirectory tmp-name)) (current-buffer))
(accept-process-output (get-buffer-process (current-buffer)) 1)
- (while (ignore-errors
- (memq (process-status (get-buffer-process (current-buffer)))
- '(run open)))
- (accept-process-output (get-buffer-process (current-buffer)) 1))
+ (with-timeout (10 (ert-fail "`async-shell-command' timed out"))
+ (while
+ (ignore-errors
+ (memq (process-status (get-buffer-process (current-buffer)))
+ '(run open)))
+ (accept-process-output (get-buffer-process (current-buffer)) 1)))
;; `ls' could produce colorized output.
(goto-char (point-min))
(while (re-search-forward tramp-color-escape-sequence-regexp nil t)
(get-buffer-process (current-buffer))
(format "%s\n" (file-name-nondirectory tmp-name)))
(accept-process-output (get-buffer-process (current-buffer)) 1)
- (while (ignore-errors
- (memq (process-status (get-buffer-process (current-buffer)))
- '(run open)))
- (accept-process-output (get-buffer-process (current-buffer)) 1))
+ (with-timeout (10 (ert-fail "`async-shell-command' timed out"))
+ (while
+ (ignore-errors
+ (memq (process-status (get-buffer-process (current-buffer)))
+ '(run open)))
+ (accept-process-output (get-buffer-process (current-buffer)) 1)))
(should
(string-equal
(format "%s\n" (file-name-nondirectory tmp-name)) (buffer-string))))
(eq
(tramp-find-foreign-file-name-handler tramp-test-temporary-file-directory)
'tramp-sh-file-name-handler))
- (tramp-cleanup-connection
- (tramp-dissect-file-name tramp-test-temporary-file-directory)
- nil 'keep-password)
(let* ((default-directory tramp-test-temporary-file-directory)
(tmp-name1 (tramp--test-make-temp-name))
(ert-deftest tramp-test30-utf8 ()
"Check UTF8 encoding in file names and file contents."
(skip-unless (tramp--test-enabled))
- (tramp-cleanup-connection
- (tramp-dissect-file-name tramp-test-temporary-file-directory)
- nil 'keep-password)
(let ((tmp-name (tramp--test-make-temp-name))
(coding-system-for-read 'utf-8)
(sort `(,arabic ,chinese ,russian) 'string-lessp))))
(ignore-errors (delete-directory tmp-name 'recursive)))))
+;; This test is inspired by Bug#16928.
+(ert-deftest tramp-test31-asynchronous-requests ()
+ "Check parallel asynchronous requests.
+Such requests could arrive from timers, process filters and
+process sentinels. They shall not disturb each other."
+ ;; Mark as failed until bug has been fixed.
+ :expected-result :failed
+ (skip-unless (tramp--test-enabled))
+ (skip-unless
+ (eq
+ (tramp-find-foreign-file-name-handler tramp-test-temporary-file-directory)
+ 'tramp-sh-file-name-handler))
+
+ ;; Keep instrumentation verbosity 0 until Tramp bug is fixed. This
+ ;; has the side effect, that this test fails instead to abort. Good
+ ;; for hydra.
+ (tramp--instrument-test-case 0
+ (let* ((tmp-name (tramp--test-make-temp-name))
+ (default-directory tmp-name)
+ (remote-file-name-inhibit-cache t)
+ timer buffers kill-buffer-query-functions)
+
+ (unwind-protect
+ (progn
+ (make-directory tmp-name)
+
+ ;; Setup a timer in order to raise an ordinary command again
+ ;; and again. `vc-registered' is well suited, because there
+ ;; are many checks.
+ (setq
+ timer
+ (run-at-time
+ 0 1
+ (lambda ()
+ (when buffers
+ (vc-registered
+ (buffer-name (nth (random (length buffers)) buffers)))))))
+
+ ;; Create temporary buffers. The number of buffers
+ ;; corresponds to the number of processes; it could be
+ ;; increased in order to make pressure on Tramp.
+ (dotimes (i 5)
+ (add-to-list 'buffers (generate-new-buffer "*temp*")))
+
+ ;; Open asynchronous processes. Set process sentinel.
+ (dolist (buf buffers)
+ (async-shell-command "read line; touch $line; echo $line" buf)
+ (set-process-sentinel
+ (get-buffer-process buf)
+ (lambda (proc _state)
+ (delete-file (buffer-name (process-buffer proc))))))
+
+ ;; Send a string. Use a random order of the buffers. Mix
+ ;; with regular operation.
+ (let ((buffers (copy-sequence buffers))
+ buf)
+ (while buffers
+ (setq buf (nth (random (length buffers)) buffers))
+ (process-send-string
+ (get-buffer-process buf) (format "'%s'\n" buf))
+ (file-attributes (buffer-name buf))
+ (setq buffers (delq buf buffers))))
+
+ ;; Wait until the whole output has been read.
+ (with-timeout ((* 10 (length buffers))
+ (ert-fail "`async-shell-command' timed out"))
+ (let ((buffers (copy-sequence buffers))
+ buf)
+ (while buffers
+ (setq buf (nth (random (length buffers)) buffers))
+ (if (ignore-errors
+ (memq (process-status (get-buffer-process buf))
+ '(run open)))
+ (accept-process-output (get-buffer-process buf) 0.1)
+ (setq buffers (delq buf buffers))))))
+
+ ;; Check.
+ (dolist (buf buffers)
+ (with-current-buffer buf
+ (should
+ (string-equal (format "'%s'\n" buf) (buffer-string)))))
+ (should-not
+ (directory-files tmp-name nil directory-files-no-dot-files-regexp)))
+
+ ;; Cleanup.
+ (ignore-errors (cancel-timer timer))
+ (ignore-errors (delete-directory tmp-name 'recursive))
+ (dolist (buf buffers)
+ (ignore-errors (kill-buffer buf)))))))
+
;; TODO:
;; * dired-compress-file
;; * set-file-selinux-context
;; * Fix `tramp-test27-start-file-process' on MS Windows (`process-send-eof'?).
-;; * Fix `tramp-test28-shell-command' on MS Windows (`process-send-eof'?).
+;; * Fix `tramp-test28-shell-command' on MS Windows (nasty plink message).
;; * Fix `tramp-test30-utf8' on MS Windows. Seems to be in `directory-files'.
+;; * Fix Bug#16928. Set expected error of `tramp-test31-asynchronous-requests'.
(defun tramp-test-all (&optional interactive)
"Run all tests for \\[tramp]."
(should-not (buffer-modified-p))))
(delete-file tempfile))))
+(ert-deftest undo-test-in-region-not-most-recent ()
+ "Test undo in region of an edit not the most recent."
+ (with-temp-buffer
+ (buffer-enable-undo)
+ (transient-mark-mode 1)
+ (insert "1111")
+ (undo-boundary)
+ (goto-char 2)
+ (insert "2")
+ (forward-char 2)
+ (undo-boundary)
+ (insert "3")
+ (undo-boundary)
+ ;; Highlight around "2", not "3"
+ (push-mark (+ 3 (point-min)) t t)
+ (setq mark-active t)
+ (goto-char (point-min))
+ (undo)
+ (should (string= (buffer-string)
+ "11131"))))
+
+(ert-deftest undo-test-in-region-eob ()
+ "Test undo in region of a deletion at EOB, demonstrating bug 16411."
+ (with-temp-buffer
+ (buffer-enable-undo)
+ (transient-mark-mode 1)
+ (insert "This sentence corrupted?")
+ (undo-boundary)
+ ;; Same as recipe at
+ ;; http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16411
+ (insert "aaa")
+ (undo-boundary)
+ (undo)
+ ;; Select entire buffer
+ (push-mark (point) t t)
+ (setq mark-active t)
+ (goto-char (point-min))
+ ;; Should undo the undo of "aaa", ie restore it.
+ (undo)
+ (should (string= (buffer-string)
+ "This sentence corrupted?aaa"))))
+
(defun undo-test-all (&optional interactive)
"Run all tests for \\[undo]."
(interactive "p")
# Highlight the regexp after "if".
x = toto / foo if /do bar/ =~ "dobar"
+# Regexp options are highlighted.
+
+/foo/xi != %r{bar}mo.tee
+
bar(class: XXX) do # ruby-indent-keyword-label
foo
end
foo)
# FIXME: This is not consistent with the example below it, but this
-# ofset only happens if the colon is at eol, which wouldn't be often.
+# offset only happens if the colon is at eol, which wouldn't be often.
# Tokenizing `bar:' as `:bar =>' would be better, but it's hard to
# distinguish from a variable reference inside a ternary operator.
foo(bar: